@gtkx/react 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adw/element-behaviors.js +34 -31
- package/dist/adw/element-behaviors.js.map +1 -1
- package/dist/components/element.d.ts +6 -1
- package/dist/components/element.d.ts.map +1 -1
- package/dist/components/element.js +6 -3
- package/dist/components/element.js.map +1 -1
- package/dist/element-behaviors.js +18 -18
- package/dist/element-behaviors.js.map +1 -1
- package/dist/reconciler/behaviors.d.ts +10 -7
- package/dist/reconciler/behaviors.d.ts.map +1 -1
- package/dist/reconciler/behaviors.js +21 -17
- package/dist/reconciler/behaviors.js.map +1 -1
- package/dist/reconciler/instance.d.ts.map +1 -1
- package/dist/reconciler/instance.js +5 -4
- package/dist/reconciler/instance.js.map +1 -1
- package/dist/reconciler/metadata.d.ts.map +1 -1
- package/dist/reconciler/metadata.js +17 -3
- package/dist/reconciler/metadata.js.map +1 -1
- package/package.json +5 -5
- package/src/adw/element-behaviors.ts +37 -34
- package/src/components/element.tsx +11 -3
- package/src/element-behaviors.ts +18 -18
- package/src/reconciler/behaviors.ts +36 -27
- package/src/reconciler/instance.ts +5 -4
- package/src/reconciler/metadata.ts +25 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviors.d.ts","sourceRoot":"","sources":["../../src/reconciler/behaviors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"behaviors.d.ts","sourceRoot":"","sources":["../../src/reconciler/behaviors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,26 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import * as Gtk from "@gtkx/gi/gtk";
|
|
2
|
+
import { createApplication, getClassType, getInstanceType, TYPE_INVALID, typeIsA, } from "@gtkx/runtime";
|
|
3
|
+
import { isDeepEqual, kebabCase, structuredClone, unsanitizeIdentifier } from "@gtkx/utils";
|
|
3
4
|
import { getPropertyName } from "./metadata.js";
|
|
4
5
|
import { applyWrite } from "./signals.js";
|
|
5
6
|
import { hasSameText } from "./text.js";
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const childClassType = (cls) => typeof cls === "function" ? getClassType(cls) : TYPE_INVALID;
|
|
8
|
+
const isChildInstance = (child, cls) => {
|
|
9
|
+
if (child instanceof cls) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
const type = childClassType(cls);
|
|
13
|
+
return type !== TYPE_INVALID && typeIsA(getInstanceType(child), type);
|
|
11
14
|
};
|
|
15
|
+
const childMatcher = (cls) => (child) => cls !== undefined && isChildInstance(child, cls);
|
|
12
16
|
const slotAttach = (slotName, isMatch, attach) => (object, child, info) => {
|
|
13
17
|
if (info.slot !== slotName || !isMatch(child)) {
|
|
14
18
|
return;
|
|
15
19
|
}
|
|
16
20
|
return attach(object, child, info) ?? true;
|
|
17
21
|
};
|
|
18
|
-
const slot = (slotName,
|
|
19
|
-
const matches = childMatcher(
|
|
22
|
+
const slot = (slotName, childClass, hooks) => {
|
|
23
|
+
const matches = childMatcher(childClass);
|
|
20
24
|
const { attach, detach, reorder, resolve } = hooks;
|
|
21
25
|
const behavior = { attach: slotAttach(slotName, matches, attach) };
|
|
22
26
|
if (reorder !== undefined) {
|
|
@@ -146,7 +150,7 @@ const controlledText = (prop) => value(prop, (object, next) => {
|
|
|
146
150
|
});
|
|
147
151
|
}
|
|
148
152
|
});
|
|
149
|
-
const childSetterSlot = () => slot("children",
|
|
153
|
+
const childSetterSlot = () => slot("children", Gtk.Widget, {
|
|
150
154
|
attach: (parent, child) => {
|
|
151
155
|
parent.setChild(child);
|
|
152
156
|
},
|
|
@@ -154,7 +158,7 @@ const childSetterSlot = () => slot("children", "GtkWidget", {
|
|
|
154
158
|
parent.setChild(null);
|
|
155
159
|
},
|
|
156
160
|
});
|
|
157
|
-
const contentSetterSlot = (
|
|
161
|
+
const contentSetterSlot = (childClass) => slot("children", childClass, {
|
|
158
162
|
attach: (parent, child) => {
|
|
159
163
|
parent.setContent(child);
|
|
160
164
|
},
|
|
@@ -162,7 +166,7 @@ const contentSetterSlot = (childType = "GtkWidget") => slot("children", childTyp
|
|
|
162
166
|
parent.setContent(null);
|
|
163
167
|
},
|
|
164
168
|
});
|
|
165
|
-
const boxSlot = () => slot("children",
|
|
169
|
+
const boxSlot = () => slot("children", Gtk.Widget, {
|
|
166
170
|
attach: (box, child, info) => box.insertChildAfter(child, info.sibling),
|
|
167
171
|
detach: (box, child) => {
|
|
168
172
|
box.remove(child);
|
|
@@ -172,16 +176,16 @@ const boxSlot = () => slot("children", "GtkWidget", {
|
|
|
172
176
|
},
|
|
173
177
|
});
|
|
174
178
|
const callMethod = (parent, method, argument) => parent[method](argument);
|
|
175
|
-
const methodSlot = (slotName,
|
|
179
|
+
const methodSlot = (slotName, childClass, add, remove) => {
|
|
176
180
|
const hooks = { attach: (parent, child) => callMethod(parent, add, child) };
|
|
177
181
|
if (remove !== undefined) {
|
|
178
182
|
hooks.detach = (parent, child) => {
|
|
179
183
|
callMethod(parent, remove, child);
|
|
180
184
|
};
|
|
181
185
|
}
|
|
182
|
-
return slot(slotName,
|
|
186
|
+
return slot(slotName, childClass, hooks);
|
|
183
187
|
};
|
|
184
|
-
const setterSlot = (slotName,
|
|
188
|
+
const setterSlot = (slotName, childClass, setter) => slot(slotName, childClass, {
|
|
185
189
|
attach: (parent, child) => {
|
|
186
190
|
callMethod(parent, setter, child);
|
|
187
191
|
},
|
|
@@ -189,7 +193,7 @@ const setterSlot = (slotName, childType, setter) => slot(slotName, childType, {
|
|
|
189
193
|
callMethod(parent, setter, null);
|
|
190
194
|
},
|
|
191
195
|
});
|
|
192
|
-
const indexedSlot = (slotName,
|
|
196
|
+
const indexedSlot = (slotName, childClass) => slot(slotName, childClass, {
|
|
193
197
|
attach: (parent, child, info) => {
|
|
194
198
|
parent.insert(child, info.index);
|
|
195
199
|
},
|
|
@@ -221,7 +225,7 @@ const removeWrappedRow = (Wrapper, parent, child, rows) => {
|
|
|
221
225
|
}
|
|
222
226
|
};
|
|
223
227
|
const wrappingIndexedSlot = (Wrapper, setChild) => ({
|
|
224
|
-
...slot("children",
|
|
228
|
+
...slot("children", Gtk.Widget, {
|
|
225
229
|
attach: (parent, child, info) => parent.insert(wrappedRow(Wrapper, setChild, info.context, child), info.index),
|
|
226
230
|
detach: (parent, child, info) => {
|
|
227
231
|
removeWrappedRow(Wrapper, parent, child, info.context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviors.js","sourceRoot":"","sources":["../../src/reconciler/behaviors.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport type * as Gtk from \"@gtkx/gi/gtk\";\nimport {\n type AnyClass,\n type ApplicationClass,\n type CommandLineApplication,\n createApplication,\n getClassType,\n TYPE_INVALID,\n typeFromName,\n typeIsA,\n} from \"@gtkx/runtime\";\nimport { getOrInsert, isDeepEqual, kebabCase, structuredClone, unsanitizeIdentifier } from \"@gtkx/utils\";\nimport type { DetachInfo, ElementBehavior, PlaceInfo, Props } from \"./registry.js\";\nimport { getPropertyName } from \"./metadata.js\";\nimport { applyWrite } from \"./signals.js\";\nimport { hasSameText } from \"./text.js\";\n\ntype SlotHooks<P extends GObject.Object, C extends GObject.Object> = {\n attach: (parent: P, child: C, info: PlaceInfo) => unknown;\n detach?: (parent: P, child: C, info: DetachInfo) => void;\n reorder?: (parent: P, child: C, info: PlaceInfo) => unknown;\n resolve?: (parent: P, child: C) => GObject.Object | null;\n};\n\ntype ValueApply<P extends GObject.Object, V> = (object: P, value: V) => void;\n\ntype ListHooks<P extends GObject.Object, I, H> = {\n add?: (parent: P, item: I) => H;\n remove?: (parent: P, item: I, handle: H) => void;\n clear?: (parent: P) => void;\n};\n\ntype ListEntry = { item: unknown; handle: unknown };\ntype ListState = { snapshot: unknown[]; entries: ListEntry[] };\ntype DeferredState = { desired: unknown; isPresent: boolean; isScheduled: boolean; disconnect: (() => void) | null };\ntype CanApply<P extends GObject.Object, V> = (object: P, value: V) => boolean;\n\ntype DeferredOps<P extends GObject.Object, V> = {\n canApply?: CanApply<P, V> | undefined;\n parse?: ((value: unknown) => V | undefined) | undefined;\n read: (object: P) => unknown;\n write: (object: P, value: V) => void;\n signal?: string | undefined;\n};\n\ntype DeferredHooks<P extends GObject.Object, V> = Omit<DeferredOps<P, V>, \"read\" | \"write\"> & {\n read?: ((object: P) => unknown) | undefined;\n write?: ((object: P, value: V) => void) | undefined;\n};\n\ntype ChildSetter = GObject.Object & { setChild: (child: Gtk.Widget | null) => void };\ntype ContentSetter<C extends Gtk.Widget> = GObject.Object & { setContent: (content: C | null) => void };\ntype MatchingKey<P, F> = keyof P & string & { [K in keyof P]: P[K] extends F ? K : never }[keyof P];\ntype MethodKey<P, A> = MatchingKey<P, (argument: A) => unknown>;\n\ntype BoxLike = GObject.Object & {\n remove: (child: Gtk.Widget) => void;\n insertChildAfter: (child: Gtk.Widget, sibling: Gtk.Widget | null) => unknown;\n reorderChildAfter: (child: Gtk.Widget, sibling: Gtk.Widget | null) => void;\n};\n\ntype RowCache = WeakMap<GObject.Object, Gtk.Widget>;\n\ntype IndexedChildHost<C extends GObject.Object> = GObject.Object & {\n remove: (child: C) => void;\n insert: (child: C, position: number) => unknown;\n};\n\nconst childTypeCache: Map<string, bigint> = new Map();\n\nconst childTypeFor = (name: string): bigint => getOrInsert(childTypeCache, name, typeFromName);\n\nconst childMatcher =\n (name: string): ((child: GObject.Object) => boolean) =>\n (child) => {\n const type = childTypeFor(name);\n\n return type === TYPE_INVALID || typeIsA(getClassType(child.constructor as AnyClass), type);\n };\n\nconst slotAttach =\n <P extends GObject.Object, C extends GObject.Object>(\n slotName: string,\n isMatch: (child: GObject.Object) => boolean,\n attach: SlotHooks<P, C>[\"attach\"],\n ): NonNullable<ElementBehavior[\"attach\"]> =>\n (object, child, info) => {\n if (info.slot !== slotName || !isMatch(child)) {\n return;\n }\n\n return attach(object as P, child as C, info) ?? true;\n };\n\nconst slot = <P extends GObject.Object, C extends GObject.Object>(\n slotName: string,\n childType: string,\n hooks: SlotHooks<P, C>,\n): ElementBehavior => {\n const matches = childMatcher(childType);\n const { attach, detach, reorder, resolve } = hooks;\n const behavior: ElementBehavior = { attach: slotAttach(slotName, matches, attach) };\n\n if (reorder !== undefined) {\n behavior.reorder = (object, child, info) => reorder(object as P, child as C, info) ?? true;\n }\n\n if (detach !== undefined) {\n behavior.detach = (object, child, info) => {\n detach(object as P, child as C, info);\n };\n }\n\n if (resolve !== undefined) {\n behavior.resolve = (object, child) => resolve(object as P, child as C);\n }\n\n return behavior;\n};\n\nconst value = <P extends GObject.Object, V>(\n prop: string,\n apply: ValueApply<P, V>,\n): ElementBehavior<P> => ({\n update: (object, prev, next) => {\n if (!Object.is(prev[prop], next[prop]) && next[prop] !== undefined) {\n apply(object, next[prop] as V);\n }\n\n return [prop];\n },\n});\n\nconst teardownList = <P extends GObject.Object, I, H>(\n object: P,\n entries: ListEntry[],\n hooks: ListHooks<P, I, H>,\n): void => {\n if (hooks.clear !== undefined) {\n hooks.clear(object);\n\n return;\n }\n\n for (const entry of entries) {\n hooks.remove?.(object, entry.item as I, entry.handle as H);\n }\n};\n\nconst listUpdate = <P extends GObject.Object, I, H>(\n prop: string,\n hooks: ListHooks<P, I, H>,\n): NonNullable<ElementBehavior<P>[\"update\"]> => {\n const { add } = hooks;\n\n return (object, _prev, next, context) => {\n const state = context as ListState;\n const raw = next[prop];\n const items: unknown[] = Array.isArray(raw) ? raw : [];\n\n if (isDeepEqual(state.snapshot, items)) {\n return [prop];\n }\n\n teardownList(object, state.entries, hooks);\n state.entries = items.map((item) => ({ item, handle: add?.(object, item as I) }));\n state.snapshot = structuredClone(items);\n\n return [prop];\n };\n};\n\nconst list = <P extends GObject.Object, I, H = void>(\n prop: string,\n hooks: ListHooks<P, I, H>,\n): ElementBehavior<P> => {\n const behavior: ElementBehavior<P> = {\n initialize: (): ListState => ({ snapshot: [], entries: [] }),\n update: listUpdate(prop, hooks),\n };\n\n if (hooks.remove === undefined && hooks.clear === undefined) {\n behavior.constructOnly = [prop];\n }\n\n return behavior;\n};\n\nconst settleDeferred = <P extends GObject.Object, V>(\n object: P,\n state: DeferredState,\n prop: string,\n ops: DeferredOps<P, V>,\n): void => {\n if (!state.isPresent || Object.is(ops.read(object), state.desired)) {\n return;\n }\n\n const desired = state.desired as V;\n\n if (ops.canApply !== undefined && !ops.canApply(object, desired)) {\n return;\n }\n\n applyWrite(prop, () => {\n ops.write(object, desired);\n });\n};\n\nconst scheduleSettle = <P extends GObject.Object, V>(\n object: P,\n state: DeferredState,\n prop: string,\n ops: DeferredOps<P, V>,\n): void => {\n if (state.isScheduled) {\n return;\n }\n\n state.isScheduled = true;\n\n queueMicrotask(() => {\n state.isScheduled = false;\n\n if (state.disconnect !== null) {\n settleDeferred(object, state, prop, ops);\n }\n });\n};\n\nconst watchDrift = <P extends GObject.Object, V>(\n object: P,\n state: DeferredState,\n prop: string,\n ops: DeferredOps<P, V>,\n): void => {\n if (state.disconnect !== null) {\n return;\n }\n\n const signal = ops.signal ?? `notify::${getPropertyName(object, prop) ?? unsanitizeIdentifier(kebabCase(prop))}`;\n\n const handler = (): undefined => {\n scheduleSettle(object, state, prop, ops);\n };\n\n object.on(signal, handler);\n\n state.disconnect = (): void => {\n object.off(signal, handler);\n };\n};\n\nconst deferredBehavior = <P extends GObject.Object, V>(prop: string, ops: DeferredOps<P, V>): ElementBehavior<P> => ({\n deferred: [prop],\n initialize: (): DeferredState => ({ desired: undefined, isPresent: false, isScheduled: false, disconnect: null }),\n update: (_object, _prev, next, context) => {\n const state = context as DeferredState;\n state.desired = ops.parse === undefined ? next[prop] : ops.parse(next[prop]);\n state.isPresent = state.desired !== undefined;\n\n return [prop];\n },\n flush: (object, context) => {\n const state = context as DeferredState;\n settleDeferred(object, state, prop, ops);\n watchDrift(object, state, prop, ops);\n },\n teardown: (_object, context) => {\n const state = context as DeferredState;\n state.disconnect?.();\n state.disconnect = null;\n },\n});\n\nconst deferredWith = <P extends GObject.Object, V>(prop: string, hooks: DeferredHooks<P, V>): ElementBehavior<P> =>\n deferredBehavior<P, V>(prop, {\n ...hooks,\n read: hooks.read ?? ((object) => Reflect.get(object, prop)),\n write: hooks.write ?? ((object, value) => {\n Reflect.set(object, prop, value);\n }),\n });\n\nconst deferred = <P extends GObject.Object, V>(prop: string, canApply?: CanApply<P, V>): ElementBehavior<P> =>\n deferredWith<P, V>(prop, { canApply });\n\nconst controlledText = (prop: string): ElementBehavior =>\n value(prop, (object, next) => {\n if (!hasSameText(object, prop, next)) {\n applyWrite(prop, () => {\n Reflect.set(object, prop, next);\n });\n }\n });\n\nconst childSetterSlot = <P extends ChildSetter>(): ElementBehavior<P> =>\n slot<P, Gtk.Widget>(\"children\", \"GtkWidget\", {\n attach: (parent, child) => {\n parent.setChild(child);\n },\n detach: (parent) => {\n parent.setChild(null);\n },\n });\n\nconst contentSetterSlot = <P extends ContentSetter<C>, C extends Gtk.Widget = Gtk.Widget>(\n childType = \"GtkWidget\",\n): ElementBehavior<P> =>\n slot<P, C>(\"children\", childType, {\n attach: (parent, child) => {\n parent.setContent(child);\n },\n detach: (parent) => {\n parent.setContent(null);\n },\n });\n\nconst boxSlot = <P extends BoxLike>(): ElementBehavior<P> =>\n slot<P, Gtk.Widget>(\"children\", \"GtkWidget\", {\n attach: (box, child, info) => box.insertChildAfter(child, info.sibling as Gtk.Widget | null),\n detach: (box, child) => {\n box.remove(child);\n },\n reorder: (box, child, info) => {\n box.reorderChildAfter(child, info.sibling as Gtk.Widget | null);\n },\n });\n\nconst callMethod = <P extends GObject.Object, A>(parent: P, method: MethodKey<P, A>, argument: A): unknown =>\n (parent[method] as (argument: A) => unknown)(argument);\n\nconst methodSlot = <P extends GObject.Object, C extends GObject.Object>(\n slotName: string,\n childType: string,\n add: MethodKey<P, C>,\n remove?: MethodKey<P, C>,\n): ElementBehavior => {\n const hooks: SlotHooks<P, C> = { attach: (parent, child) => callMethod(parent, add, child) };\n\n if (remove !== undefined) {\n hooks.detach = (parent, child) => {\n callMethod(parent, remove, child);\n };\n }\n\n return slot<P, C>(slotName, childType, hooks);\n};\n\nconst setterSlot = <P extends GObject.Object, C extends GObject.Object>(\n slotName: string,\n childType: string,\n setter: MethodKey<P, C | null>,\n): ElementBehavior =>\n slot<P, C>(slotName, childType, {\n attach: (parent, child) => {\n callMethod<P, C | null>(parent, setter, child);\n },\n detach: (parent) => {\n callMethod<P, C | null>(parent, setter, null);\n },\n });\n\nconst indexedSlot = <P extends IndexedChildHost<C>, C extends GObject.Object>(\n slotName: string,\n childType: string,\n): ElementBehavior<P> =>\n slot<P, C>(slotName, childType, {\n attach: (parent, child, info) => {\n parent.insert(child, info.index);\n },\n detach: (parent, child) => {\n parent.remove(child);\n },\n reorder: (parent, child, info) => {\n parent.remove(child);\n parent.insert(child, info.index);\n },\n });\n\nconst wrappedRow = <W extends Gtk.Widget>(\n Wrapper: new (props: Props) => W,\n setChild: (wrapper: W, inner: Gtk.Widget) => void,\n rows: RowCache,\n child: Gtk.Widget,\n): Gtk.Widget => {\n if (child instanceof Wrapper) {\n return child;\n }\n\n const existing = rows.get(child);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const wrapper = new Wrapper({});\n setChild(wrapper, child);\n rows.set(child, wrapper);\n\n return wrapper;\n};\n\nconst removeWrappedRow = (\n Wrapper: new (props: Props) => Gtk.Widget,\n parent: IndexedChildHost<Gtk.Widget>,\n child: Gtk.Widget,\n rows: RowCache,\n): void => {\n const row = child instanceof Wrapper ? child : rows.get(child);\n\n if (row !== undefined) {\n parent.remove(row);\n }\n};\n\nconst wrappingIndexedSlot = <W extends Gtk.Widget, P extends IndexedChildHost<Gtk.Widget>>(\n Wrapper: new (props: Props) => W,\n setChild: (wrapper: W, inner: Gtk.Widget) => void,\n): ElementBehavior<P> => ({\n ...slot<P, Gtk.Widget>(\"children\", \"GtkWidget\", {\n attach: (parent, child, info) =>\n parent.insert(wrappedRow(Wrapper, setChild, info.context as RowCache, child), info.index),\n detach: (parent, child, info) => {\n removeWrappedRow(Wrapper, parent, child, info.context as RowCache);\n },\n }),\n initialize: (): RowCache => new WeakMap(),\n});\n\nconst applicationCreator = <P extends GObject.Object & CommandLineApplication, C extends Props>(\n base: ApplicationClass<P, C>,\n): ElementBehavior<P> => ({\n create: (props) => createApplication(base, props as C),\n});\n\nexport {\n applicationCreator,\n childMatcher,\n slot,\n value,\n list,\n deferred,\n deferredWith,\n controlledText,\n childSetterSlot,\n contentSetterSlot,\n boxSlot,\n methodSlot,\n setterSlot,\n indexedSlot,\n wrappingIndexedSlot,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"behaviors.js","sourceRoot":"","sources":["../../src/reconciler/behaviors.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport {\n type ApplicationClass,\n type CommandLineApplication,\n createApplication,\n getClassType,\n getInstanceType,\n TYPE_INVALID,\n typeIsA,\n} from \"@gtkx/runtime\";\nimport { isDeepEqual, kebabCase, structuredClone, unsanitizeIdentifier } from \"@gtkx/utils\";\nimport type { DetachInfo, ElementBehavior, PlaceInfo, Props } from \"./registry.js\";\nimport { getPropertyName } from \"./metadata.js\";\nimport { applyWrite } from \"./signals.js\";\nimport { hasSameText } from \"./text.js\";\n\ntype SlotHooks<P extends GObject.Object, C extends GObject.Object> = {\n attach: (parent: P, child: C, info: PlaceInfo) => unknown;\n detach?: (parent: P, child: C, info: DetachInfo) => void;\n reorder?: (parent: P, child: C, info: PlaceInfo) => unknown;\n resolve?: (parent: P, child: C) => GObject.Object | null;\n};\n\ntype ValueApply<P extends GObject.Object, V> = (object: P, value: V) => void;\n\ntype ListHooks<P extends GObject.Object, I, H> = {\n add?: (parent: P, item: I) => H;\n remove?: (parent: P, item: I, handle: H) => void;\n clear?: (parent: P) => void;\n};\n\ntype ListEntry = { item: unknown; handle: unknown };\ntype ListState = { snapshot: unknown[]; entries: ListEntry[] };\ntype DeferredState = { desired: unknown; isPresent: boolean; isScheduled: boolean; disconnect: (() => void) | null };\ntype CanApply<P extends GObject.Object, V> = (object: P, value: V) => boolean;\n\ntype DeferredOps<P extends GObject.Object, V> = {\n canApply?: CanApply<P, V> | undefined;\n parse?: ((value: unknown) => V | undefined) | undefined;\n read: (object: P) => unknown;\n write: (object: P, value: V) => void;\n signal?: string | undefined;\n};\n\ntype DeferredHooks<P extends GObject.Object, V> = Omit<DeferredOps<P, V>, \"read\" | \"write\"> & {\n read?: ((object: P) => unknown) | undefined;\n write?: ((object: P, value: V) => void) | undefined;\n};\n\ntype ChildSetter = GObject.Object & { setChild: (child: Gtk.Widget | null) => void };\ntype ContentSetter<C extends Gtk.Widget> = GObject.Object & { setContent: (content: C | null) => void };\ntype MatchingKey<P, F> = keyof P & string & { [K in keyof P]: P[K] extends F ? K : never }[keyof P];\ntype MethodKey<P, A> = MatchingKey<P, (argument: A) => unknown>;\n\ntype BoxLike = GObject.Object & {\n remove: (child: Gtk.Widget) => void;\n insertChildAfter: (child: Gtk.Widget, sibling: Gtk.Widget | null) => unknown;\n reorderChildAfter: (child: Gtk.Widget, sibling: Gtk.Widget | null) => void;\n};\n\ntype RowCache = WeakMap<GObject.Object, Gtk.Widget>;\n\ntype IndexedChildHost<C extends GObject.Object> = GObject.Object & {\n remove: (child: C) => void;\n insert: (child: C, position: number) => unknown;\n};\n\ntype ChildClass<C extends GObject.Object> =\n (abstract new (...args: never[]) => C) |\n { [Symbol.hasInstance]: (value: unknown) => value is C };\n\nconst childClassType = (cls: ChildClass<GObject.Object>): bigint =>\n typeof cls === \"function\" ? getClassType(cls) : TYPE_INVALID;\n\nconst isChildInstance = <C extends GObject.Object>(child: GObject.Object, cls: ChildClass<C>): child is C => {\n if (child instanceof cls) {\n return true;\n }\n\n const type = childClassType(cls);\n\n return type !== TYPE_INVALID && typeIsA(getInstanceType(child), type);\n};\n\nconst childMatcher =\n <C extends GObject.Object>(cls: ChildClass<C> | undefined): ((child: GObject.Object) => child is C) =>\n (child): child is C =>\n cls !== undefined && isChildInstance(child, cls);\n\nconst slotAttach =\n <P extends GObject.Object, C extends GObject.Object>(\n slotName: string,\n isMatch: (child: GObject.Object) => child is C,\n attach: SlotHooks<P, C>[\"attach\"],\n ): NonNullable<ElementBehavior[\"attach\"]> =>\n (object, child, info) => {\n if (info.slot !== slotName || !isMatch(child)) {\n return;\n }\n\n return attach(object as P, child, info) ?? true;\n };\n\nconst slot = <P extends GObject.Object, C extends GObject.Object>(\n slotName: string,\n childClass: ChildClass<C> | undefined,\n hooks: SlotHooks<P, C>,\n): ElementBehavior => {\n const matches = childMatcher(childClass);\n const { attach, detach, reorder, resolve } = hooks;\n const behavior: ElementBehavior = { attach: slotAttach(slotName, matches, attach) };\n\n if (reorder !== undefined) {\n behavior.reorder = (object, child, info) => reorder(object as P, child as C, info) ?? true;\n }\n\n if (detach !== undefined) {\n behavior.detach = (object, child, info) => {\n detach(object as P, child as C, info);\n };\n }\n\n if (resolve !== undefined) {\n behavior.resolve = (object, child) => resolve(object as P, child as C);\n }\n\n return behavior;\n};\n\nconst value = <P extends GObject.Object, V>(\n prop: string,\n apply: ValueApply<P, V>,\n): ElementBehavior<P> => ({\n update: (object, prev, next) => {\n if (!Object.is(prev[prop], next[prop]) && next[prop] !== undefined) {\n apply(object, next[prop] as V);\n }\n\n return [prop];\n },\n});\n\nconst teardownList = <P extends GObject.Object, I, H>(\n object: P,\n entries: ListEntry[],\n hooks: ListHooks<P, I, H>,\n): void => {\n if (hooks.clear !== undefined) {\n hooks.clear(object);\n\n return;\n }\n\n for (const entry of entries) {\n hooks.remove?.(object, entry.item as I, entry.handle as H);\n }\n};\n\nconst listUpdate = <P extends GObject.Object, I, H>(\n prop: string,\n hooks: ListHooks<P, I, H>,\n): NonNullable<ElementBehavior<P>[\"update\"]> => {\n const { add } = hooks;\n\n return (object, _prev, next, context) => {\n const state = context as ListState;\n const raw = next[prop];\n const items: unknown[] = Array.isArray(raw) ? raw : [];\n\n if (isDeepEqual(state.snapshot, items)) {\n return [prop];\n }\n\n teardownList(object, state.entries, hooks);\n state.entries = items.map((item) => ({ item, handle: add?.(object, item as I) }));\n state.snapshot = structuredClone(items);\n\n return [prop];\n };\n};\n\nconst list = <P extends GObject.Object, I, H = void>(\n prop: string,\n hooks: ListHooks<P, I, H>,\n): ElementBehavior<P> => {\n const behavior: ElementBehavior<P> = {\n initialize: (): ListState => ({ snapshot: [], entries: [] }),\n update: listUpdate(prop, hooks),\n };\n\n if (hooks.remove === undefined && hooks.clear === undefined) {\n behavior.constructOnly = [prop];\n }\n\n return behavior;\n};\n\nconst settleDeferred = <P extends GObject.Object, V>(\n object: P,\n state: DeferredState,\n prop: string,\n ops: DeferredOps<P, V>,\n): void => {\n if (!state.isPresent || Object.is(ops.read(object), state.desired)) {\n return;\n }\n\n const desired = state.desired as V;\n\n if (ops.canApply !== undefined && !ops.canApply(object, desired)) {\n return;\n }\n\n applyWrite(prop, () => {\n ops.write(object, desired);\n });\n};\n\nconst scheduleSettle = <P extends GObject.Object, V>(\n object: P,\n state: DeferredState,\n prop: string,\n ops: DeferredOps<P, V>,\n): void => {\n if (state.isScheduled) {\n return;\n }\n\n state.isScheduled = true;\n\n queueMicrotask(() => {\n state.isScheduled = false;\n\n if (state.disconnect !== null) {\n settleDeferred(object, state, prop, ops);\n }\n });\n};\n\nconst watchDrift = <P extends GObject.Object, V>(\n object: P,\n state: DeferredState,\n prop: string,\n ops: DeferredOps<P, V>,\n): void => {\n if (state.disconnect !== null) {\n return;\n }\n\n const signal = ops.signal ?? `notify::${getPropertyName(object, prop) ?? unsanitizeIdentifier(kebabCase(prop))}`;\n\n const handler = (): undefined => {\n scheduleSettle(object, state, prop, ops);\n };\n\n object.on(signal, handler);\n\n state.disconnect = (): void => {\n object.off(signal, handler);\n };\n};\n\nconst deferredBehavior = <P extends GObject.Object, V>(prop: string, ops: DeferredOps<P, V>): ElementBehavior<P> => ({\n deferred: [prop],\n initialize: (): DeferredState => ({ desired: undefined, isPresent: false, isScheduled: false, disconnect: null }),\n update: (_object, _prev, next, context) => {\n const state = context as DeferredState;\n state.desired = ops.parse === undefined ? next[prop] : ops.parse(next[prop]);\n state.isPresent = state.desired !== undefined;\n\n return [prop];\n },\n flush: (object, context) => {\n const state = context as DeferredState;\n settleDeferred(object, state, prop, ops);\n watchDrift(object, state, prop, ops);\n },\n teardown: (_object, context) => {\n const state = context as DeferredState;\n state.disconnect?.();\n state.disconnect = null;\n },\n});\n\nconst deferredWith = <P extends GObject.Object, V>(prop: string, hooks: DeferredHooks<P, V>): ElementBehavior<P> =>\n deferredBehavior<P, V>(prop, {\n ...hooks,\n read: hooks.read ?? ((object) => Reflect.get(object, prop)),\n write: hooks.write ?? ((object, value) => {\n Reflect.set(object, prop, value);\n }),\n });\n\nconst deferred = <P extends GObject.Object, V>(prop: string, canApply?: CanApply<P, V>): ElementBehavior<P> =>\n deferredWith<P, V>(prop, { canApply });\n\nconst controlledText = (prop: string): ElementBehavior =>\n value(prop, (object, next) => {\n if (!hasSameText(object, prop, next)) {\n applyWrite(prop, () => {\n Reflect.set(object, prop, next);\n });\n }\n });\n\nconst childSetterSlot = <P extends ChildSetter>(): ElementBehavior<P> =>\n slot<P, Gtk.Widget>(\"children\", Gtk.Widget, {\n attach: (parent, child) => {\n parent.setChild(child);\n },\n detach: (parent) => {\n parent.setChild(null);\n },\n });\n\nconst contentSetterSlot = <P extends ContentSetter<C>, C extends Gtk.Widget = Gtk.Widget>(\n childClass: ChildClass<C>,\n): ElementBehavior<P> =>\n slot<P, C>(\"children\", childClass, {\n attach: (parent, child) => {\n parent.setContent(child);\n },\n detach: (parent) => {\n parent.setContent(null);\n },\n });\n\nconst boxSlot = <P extends BoxLike>(): ElementBehavior<P> =>\n slot<P, Gtk.Widget>(\"children\", Gtk.Widget, {\n attach: (box, child, info) => box.insertChildAfter(child, info.sibling as Gtk.Widget | null),\n detach: (box, child) => {\n box.remove(child);\n },\n reorder: (box, child, info) => {\n box.reorderChildAfter(child, info.sibling as Gtk.Widget | null);\n },\n });\n\nconst callMethod = <P extends GObject.Object, A>(parent: P, method: MethodKey<P, A>, argument: A): unknown =>\n (parent[method] as (argument: A) => unknown)(argument);\n\nconst methodSlot = <P extends GObject.Object, C extends GObject.Object>(\n slotName: string,\n childClass: ChildClass<C> | undefined,\n add: MethodKey<P, C>,\n remove?: MethodKey<P, C>,\n): ElementBehavior => {\n const hooks: SlotHooks<P, C> = { attach: (parent, child) => callMethod(parent, add, child) };\n\n if (remove !== undefined) {\n hooks.detach = (parent, child) => {\n callMethod(parent, remove, child);\n };\n }\n\n return slot<P, C>(slotName, childClass, hooks);\n};\n\nconst setterSlot = <P extends GObject.Object, C extends GObject.Object>(\n slotName: string,\n childClass: ChildClass<C> | undefined,\n setter: MethodKey<P, C | null>,\n): ElementBehavior =>\n slot<P, C>(slotName, childClass, {\n attach: (parent, child) => {\n callMethod<P, C | null>(parent, setter, child);\n },\n detach: (parent) => {\n callMethod<P, C | null>(parent, setter, null);\n },\n });\n\nconst indexedSlot = <P extends IndexedChildHost<C>, C extends GObject.Object>(\n slotName: string,\n childClass: ChildClass<C> | undefined,\n): ElementBehavior<P> =>\n slot<P, C>(slotName, childClass, {\n attach: (parent, child, info) => {\n parent.insert(child, info.index);\n },\n detach: (parent, child) => {\n parent.remove(child);\n },\n reorder: (parent, child, info) => {\n parent.remove(child);\n parent.insert(child, info.index);\n },\n });\n\nconst wrappedRow = <W extends Gtk.Widget>(\n Wrapper: new (props: Props) => W,\n setChild: (wrapper: W, inner: Gtk.Widget) => void,\n rows: RowCache,\n child: Gtk.Widget,\n): Gtk.Widget => {\n if (child instanceof Wrapper) {\n return child;\n }\n\n const existing = rows.get(child);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const wrapper = new Wrapper({});\n setChild(wrapper, child);\n rows.set(child, wrapper);\n\n return wrapper;\n};\n\nconst removeWrappedRow = (\n Wrapper: new (props: Props) => Gtk.Widget,\n parent: IndexedChildHost<Gtk.Widget>,\n child: Gtk.Widget,\n rows: RowCache,\n): void => {\n const row = child instanceof Wrapper ? child : rows.get(child);\n\n if (row !== undefined) {\n parent.remove(row);\n }\n};\n\nconst wrappingIndexedSlot = <W extends Gtk.Widget, P extends IndexedChildHost<Gtk.Widget>>(\n Wrapper: new (props: Props) => W,\n setChild: (wrapper: W, inner: Gtk.Widget) => void,\n): ElementBehavior<P> => ({\n ...slot<P, Gtk.Widget>(\"children\", Gtk.Widget, {\n attach: (parent, child, info) =>\n parent.insert(wrappedRow(Wrapper, setChild, info.context as RowCache, child), info.index),\n detach: (parent, child, info) => {\n removeWrappedRow(Wrapper, parent, child, info.context as RowCache);\n },\n }),\n initialize: (): RowCache => new WeakMap(),\n});\n\nconst applicationCreator = <P extends GObject.Object & CommandLineApplication, C extends Props>(\n base: ApplicationClass<P, C>,\n): ElementBehavior<P> => ({\n create: (props) => createApplication(base, props as C),\n});\n\nexport {\n applicationCreator,\n childMatcher,\n slot,\n value,\n list,\n deferred,\n deferredWith,\n controlledText,\n childSetterSlot,\n contentSetterSlot,\n boxSlot,\n methodSlot,\n setterSlot,\n indexedSlot,\n wrappingIndexedSlot,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/reconciler/instance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/reconciler/instance.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAIH,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,QAAQ,EAChB,MAAM,WAAW,CAAC;AA2DnB,QAAA,MAAM,kBAAkB,GAAI,UAAU,MAAM,EAAE,OAAO,KAAK,EAAE,UAAU,QAAQ,KAAG,WAAW,GAAG,QAW9F,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TYPE_INVALID, typeFromName, typeIsA } from "@gtkx/runtime";
|
|
2
|
+
import { getExactWrapperClass } from "@gtkx/runtime/internal";
|
|
2
3
|
import { getOrInsert, pickBy } from "@gtkx/utils";
|
|
3
4
|
import { typeInfoFor } from "./metadata.js";
|
|
4
5
|
import { createElementNode, createLazyNode, } from "./node.js";
|
|
@@ -30,13 +31,13 @@ const contentKindFor = (type) => getOrInsert(contentKinds, type, findContentKind
|
|
|
30
31
|
const constructInput = (info, props) => pickBy(props, (value, name) => value !== undefined &&
|
|
31
32
|
!info.deferred.has(name) &&
|
|
32
33
|
(info.constructOnly.has(name) || info.construct.has(name)));
|
|
33
|
-
const instantiate = (type, input) => {
|
|
34
|
-
const cls =
|
|
34
|
+
const instantiate = (typeName, type, input) => {
|
|
35
|
+
const cls = getExactWrapperClass(type, typeName);
|
|
35
36
|
return new cls(input);
|
|
36
37
|
};
|
|
37
38
|
const createObject = (typeName, type, input) => {
|
|
38
39
|
const create = ELEMENTS[typeName]?.behaviors?.find((behavior) => behavior.create !== undefined)?.create;
|
|
39
|
-
return create === undefined ? instantiate(type, input) : create(input);
|
|
40
|
+
return create === undefined ? instantiate(typeName, type, input) : create(input);
|
|
40
41
|
};
|
|
41
42
|
const resolveElementNode = (typeName, props, dispatch) => {
|
|
42
43
|
const info = typeInfoFor(typeName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/reconciler/instance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/reconciler/instance.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport { TYPE_INVALID, typeFromName, typeIsA } from \"@gtkx/runtime\";\nimport { getExactWrapperClass } from \"@gtkx/runtime/internal\";\nimport { getOrInsert, pickBy } from \"@gtkx/utils\";\nimport type { Props } from \"./registry.js\";\nimport { type TypeInfo, typeInfoFor } from \"./metadata.js\";\nimport {\n type ContentKind,\n createElementNode,\n createLazyNode,\n type Dispatch,\n type ElementNode,\n type LazyNode,\n} from \"./node.js\";\nimport { ELEMENTS } from \"./registry.js\";\n\ntype WidgetConstructor = new (props: Props) => GObject.Object;\ntype ContentType = { kind: ContentKind; type: bigint };\n\nconst CONTENT_TYPE_NAMES: { kind: ContentKind; name: string }[] = [\n { kind: \"label\", name: \"GtkLabel\" },\n { kind: \"buffer\", name: \"GtkTextBuffer\" },\n { kind: \"tag\", name: \"GtkTextTag\" },\n { kind: \"anchor\", name: \"GtkTextChildAnchor\" },\n];\n\nconst getContentTypes = createContentTypeCache();\nconst contentKinds: Map<bigint, ContentKind | null> = new Map();\n\nfunction createContentTypeCache(): () => ContentType[] {\n let cached: ContentType[] | null = null;\n\n return () => {\n cached ??= CONTENT_TYPE_NAMES.map((entry) => ({ kind: entry.kind, type: typeFromName(entry.name) }));\n\n return cached;\n };\n}\n\nconst findContentKind = (type: bigint): ContentKind | null => {\n for (const entry of getContentTypes()) {\n if (entry.type !== TYPE_INVALID && typeIsA(type, entry.type)) {\n return entry.kind;\n }\n }\n\n return null;\n};\n\nconst contentKindFor = (type: bigint): ContentKind | null => getOrInsert(contentKinds, type, findContentKind);\n\nconst constructInput = (info: TypeInfo, props: Props): Props =>\n pickBy(\n props,\n (value, name) =>\n value !== undefined &&\n !info.deferred.has(name) &&\n (info.constructOnly.has(name) || info.construct.has(name)),\n );\n\nconst instantiate = (typeName: string, type: bigint, input: Props): GObject.Object => {\n const cls = getExactWrapperClass(type, typeName) as WidgetConstructor;\n\n return new cls(input);\n};\n\nconst createObject = (typeName: string, type: bigint, input: Props): GObject.Object => {\n const create = ELEMENTS[typeName]?.behaviors?.find((behavior) => behavior.create !== undefined)?.create;\n\n return create === undefined ? instantiate(typeName, type, input) : create(input);\n};\n\nconst resolveElementNode = (typeName: string, props: Props, dispatch: Dispatch): ElementNode | LazyNode => {\n const info = typeInfoFor(typeName);\n\n if (info.isLazy) {\n return createLazyNode(typeName, props, dispatch);\n }\n\n const type = typeFromName(typeName);\n const object = createObject(typeName, type, constructInput(info, props));\n\n return createElementNode(typeName, object, dispatch, contentKindFor(type));\n};\n\nexport { resolveElementNode };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/reconciler/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/reconciler/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAiBjD,OAAO,EAAc,KAAK,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAiB,KAAK,eAAe,EAAY,MAAM,eAAe,CAAC;AAE9E,KAAK,QAAQ,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC;AAwIF,QAAA,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,QAInC,CAAC;AAQF,QAAA,MAAM,WAAW,GAAI,MAAM,QAAQ,EAAE,UAAU,MAAM,KAAG,OAAmD,CAAC;AAK5G,QAAA,MAAM,eAAe,GAAI,QAAQ,OAAO,CAAC,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,GAAG,SAK5E,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getClassType, getDeclaredPropertyName, TYPE_INVALID, typeFromName, typeInterfaces, typeName, typeParent, } from "@gtkx/runtime";
|
|
2
|
+
import { elementMetadataVersion, registeredElementProperties, registeredElementSignals, } from "@gtkx/runtime/internal";
|
|
2
3
|
import { getOrInsert } from "@gtkx/utils";
|
|
3
4
|
import { properties, signals, userEventSignals } from "virtual:gtkx-config";
|
|
4
5
|
import { deferredProps, ELEMENTS } from "./registry.js";
|
|
@@ -10,6 +11,16 @@ const FLAGS = 1;
|
|
|
10
11
|
const DEFAULT_VALUE = 2;
|
|
11
12
|
const ancestryCache = new Map();
|
|
12
13
|
const typeInfoCache = new Map();
|
|
14
|
+
const metadataCacheState = { seenVersion: elementMetadataVersion() };
|
|
15
|
+
const dropStaleCaches = () => {
|
|
16
|
+
const current = elementMetadataVersion();
|
|
17
|
+
if (metadataCacheState.seenVersion === current) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
metadataCacheState.seenVersion = current;
|
|
21
|
+
ancestryCache.clear();
|
|
22
|
+
typeInfoCache.clear();
|
|
23
|
+
};
|
|
13
24
|
const addAncestor = (names, seen, name) => {
|
|
14
25
|
if (name === null || seen.has(name)) {
|
|
15
26
|
return;
|
|
@@ -38,7 +49,7 @@ const addAll = (target, source) => {
|
|
|
38
49
|
}
|
|
39
50
|
};
|
|
40
51
|
const accumulateAncestor = (info, ancestor) => {
|
|
41
|
-
Object.assign(info.signals, signals[ancestor] ?? {});
|
|
52
|
+
Object.assign(info.signals, registeredElementSignals[ancestor] ?? signals[ancestor] ?? {});
|
|
42
53
|
addAll(info.userEventSignals, userEventSignals[ancestor]);
|
|
43
54
|
info.behaviors.push(...(ELEMENTS[ancestor]?.behaviors ?? []));
|
|
44
55
|
};
|
|
@@ -92,12 +103,15 @@ const buildTypeInfo = (name) => {
|
|
|
92
103
|
resolveBehaviorFlags(info);
|
|
93
104
|
info.isLazy = chain.some((ancestor) => ELEMENTS[ancestor]?.isLazy === true);
|
|
94
105
|
for (const ancestor of chain.toReversed()) {
|
|
95
|
-
Object.assign(info.properties, properties[ancestor] ?? {});
|
|
106
|
+
Object.assign(info.properties, registeredElementProperties[ancestor] ?? properties[ancestor] ?? {});
|
|
96
107
|
}
|
|
97
108
|
resolveProperties(info);
|
|
98
109
|
return info;
|
|
99
110
|
};
|
|
100
|
-
const typeInfoFor = (name) =>
|
|
111
|
+
const typeInfoFor = (name) => {
|
|
112
|
+
dropStaleCaches();
|
|
113
|
+
return getOrInsert(typeInfoCache, name, buildTypeInfo);
|
|
114
|
+
};
|
|
101
115
|
const getTypeInfo = (object) => {
|
|
102
116
|
const name = typeName(getClassType(object.constructor));
|
|
103
117
|
return name === null ? undefined : typeInfoFor(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/reconciler/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport {\n type AnyClass,\n getClassType,\n getDeclaredPropertyName,\n TYPE_INVALID,\n typeFromName,\n typeInterfaces,\n typeName,\n typeParent,\n} from \"@gtkx/runtime\";\nimport { getOrInsert } from \"@gtkx/utils\";\nimport { properties, type PropertyEntry, signals, userEventSignals } from \"virtual:gtkx-config\";\nimport { deferredProps, type ElementBehavior, ELEMENTS } from \"./registry.js\";\n\ntype TypeInfo = {\n typeName: string;\n properties: Record<string, PropertyEntry>;\n signals: Record<string, string>;\n userEventSignals: Set<string>;\n behaviors: ElementBehavior[];\n deferred: Set<string>;\n declaredConstructOnly: Set<string>;\n isLazy: boolean;\n hasFlush: boolean;\n constructOnly: Set<string>;\n construct: Set<string>;\n defaults: Record<string, unknown>;\n};\n\nconst WRITABLE = 2;\nconst CONSTRUCT = 4;\nconst CONSTRUCT_ONLY = 8;\nconst NAME = 0;\nconst FLAGS = 1;\nconst DEFAULT_VALUE = 2;\nconst ancestryCache: Map<string, string[]> = new Map();\nconst typeInfoCache: Map<string, TypeInfo> = new Map();\n\nconst addAncestor = (names: string[], seen: Set<string>, name: string | null): void => {\n if (name === null || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n names.push(name);\n};\n\nconst buildAncestry = (name: string): string[] => {\n const names: string[] = [];\n const seen: Set<string> = new Set();\n let type = typeFromName(name);\n\n while (type !== TYPE_INVALID) {\n addAncestor(names, seen, typeName(type));\n\n for (const iface of typeInterfaces(type)) {\n addAncestor(names, seen, typeName(iface));\n }\n\n type = typeParent(type);\n }\n\n return names;\n};\n\nconst ancestryFor = (name: string): string[] => getOrInsert(ancestryCache, name, buildAncestry);\n\nconst addAll = <T>(target: Set<T>, source: Iterable<T> | undefined): void => {\n const items = source ?? [];\n\n for (const item of items) {\n target.add(item);\n }\n};\n\nconst accumulateAncestor = (info: TypeInfo, ancestor: string): void => {\n Object.assign(info.signals, signals[ancestor] ?? {});\n addAll(info.userEventSignals, userEventSignals[ancestor]);\n info.behaviors.push(...(ELEMENTS[ancestor]?.behaviors ?? []));\n};\n\nconst resolveProperty = (info: TypeInfo, name: string, entry: PropertyEntry): void => {\n if ((entry[FLAGS] & CONSTRUCT_ONLY) !== 0) {\n info.constructOnly.add(name);\n }\n\n if ((entry[FLAGS] & (WRITABLE | CONSTRUCT | CONSTRUCT_ONLY)) !== 0) {\n info.construct.add(name);\n }\n\n if (entry.length > DEFAULT_VALUE) {\n info.defaults[name] = entry[DEFAULT_VALUE];\n }\n};\n\nconst resolveProperties = (info: TypeInfo): void => {\n for (const [name, entry] of Object.entries(info.properties)) {\n resolveProperty(info, name, entry);\n }\n};\n\nconst applyBehaviorFlags = (info: TypeInfo, behavior: ElementBehavior): void => {\n if (behavior.flush !== undefined) {\n info.hasFlush = true;\n }\n\n addAll(info.deferred, deferredProps(behavior));\n addAll(info.declaredConstructOnly, behavior.constructOnly);\n};\n\nconst resolveBehaviorFlags = (info: TypeInfo): void => {\n for (const behavior of info.behaviors) {\n applyBehaviorFlags(info, behavior);\n }\n};\n\nconst buildTypeInfo = (name: string): TypeInfo => {\n const chain = ancestryFor(name);\n\n const info: TypeInfo = {\n typeName: name,\n properties: {},\n signals: {},\n userEventSignals: new Set(),\n behaviors: [],\n deferred: new Set(),\n declaredConstructOnly: new Set(),\n isLazy: false,\n hasFlush: false,\n constructOnly: new Set(),\n construct: new Set(),\n defaults: {},\n };\n\n for (const ancestor of chain) {\n accumulateAncestor(info, ancestor);\n }\n\n resolveBehaviorFlags(info);\n info.isLazy = chain.some((ancestor) => ELEMENTS[ancestor]?.isLazy === true);\n\n for (const ancestor of chain.toReversed()) {\n Object.assign(info.properties, properties[ancestor] ?? {});\n }\n\n resolveProperties(info);\n\n return info;\n};\n\nconst typeInfoFor = (name: string): TypeInfo => getOrInsert(typeInfoCache, name, buildTypeInfo);\n\nconst getTypeInfo = (object: GObject.Object): TypeInfo | undefined => {\n const name = typeName(getClassType(object.constructor as AnyClass));\n\n return name === null ? undefined : typeInfoFor(name);\n};\n\nconst hasProperty = (info: TypeInfo, accessor: string): boolean => Object.hasOwn(info.properties, accessor);\n\nconst propertyNameFor = (info: TypeInfo, accessor: string): string | undefined =>\n info.properties[accessor]?.[NAME];\n\nconst getPropertyName = (object: GObject.Object, accessor: string): string | undefined => {\n const info = getTypeInfo(object);\n\n return (info === undefined ? undefined : propertyNameFor(info, accessor)) ??\n getDeclaredPropertyName(object, accessor);\n};\n\nexport { getPropertyName, hasProperty, typeInfoFor, type TypeInfo };\n"]}
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/reconciler/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport {\n type AnyClass,\n getClassType,\n getDeclaredPropertyName,\n TYPE_INVALID,\n typeFromName,\n typeInterfaces,\n typeName,\n typeParent,\n} from \"@gtkx/runtime\";\nimport {\n elementMetadataVersion,\n registeredElementProperties,\n registeredElementSignals,\n} from \"@gtkx/runtime/internal\";\nimport { getOrInsert } from \"@gtkx/utils\";\nimport { properties, type PropertyEntry, signals, userEventSignals } from \"virtual:gtkx-config\";\nimport { deferredProps, type ElementBehavior, ELEMENTS } from \"./registry.js\";\n\ntype TypeInfo = {\n typeName: string;\n properties: Record<string, PropertyEntry>;\n signals: Record<string, string>;\n userEventSignals: Set<string>;\n behaviors: ElementBehavior[];\n deferred: Set<string>;\n declaredConstructOnly: Set<string>;\n isLazy: boolean;\n hasFlush: boolean;\n constructOnly: Set<string>;\n construct: Set<string>;\n defaults: Record<string, unknown>;\n};\n\nconst WRITABLE = 2;\nconst CONSTRUCT = 4;\nconst CONSTRUCT_ONLY = 8;\nconst NAME = 0;\nconst FLAGS = 1;\nconst DEFAULT_VALUE = 2;\nconst ancestryCache: Map<string, string[]> = new Map();\nconst typeInfoCache: Map<string, TypeInfo> = new Map();\nconst metadataCacheState = { seenVersion: elementMetadataVersion() };\n\nconst dropStaleCaches = (): void => {\n const current = elementMetadataVersion();\n\n if (metadataCacheState.seenVersion === current) {\n return;\n }\n\n metadataCacheState.seenVersion = current;\n ancestryCache.clear();\n typeInfoCache.clear();\n};\n\nconst addAncestor = (names: string[], seen: Set<string>, name: string | null): void => {\n if (name === null || seen.has(name)) {\n return;\n }\n\n seen.add(name);\n names.push(name);\n};\n\nconst buildAncestry = (name: string): string[] => {\n const names: string[] = [];\n const seen: Set<string> = new Set();\n let type = typeFromName(name);\n\n while (type !== TYPE_INVALID) {\n addAncestor(names, seen, typeName(type));\n\n for (const iface of typeInterfaces(type)) {\n addAncestor(names, seen, typeName(iface));\n }\n\n type = typeParent(type);\n }\n\n return names;\n};\n\nconst ancestryFor = (name: string): string[] => getOrInsert(ancestryCache, name, buildAncestry);\n\nconst addAll = <T>(target: Set<T>, source: Iterable<T> | undefined): void => {\n const items = source ?? [];\n\n for (const item of items) {\n target.add(item);\n }\n};\n\nconst accumulateAncestor = (info: TypeInfo, ancestor: string): void => {\n Object.assign(info.signals, registeredElementSignals[ancestor] ?? signals[ancestor] ?? {});\n addAll(info.userEventSignals, userEventSignals[ancestor]);\n info.behaviors.push(...(ELEMENTS[ancestor]?.behaviors ?? []));\n};\n\nconst resolveProperty = (info: TypeInfo, name: string, entry: PropertyEntry): void => {\n if ((entry[FLAGS] & CONSTRUCT_ONLY) !== 0) {\n info.constructOnly.add(name);\n }\n\n if ((entry[FLAGS] & (WRITABLE | CONSTRUCT | CONSTRUCT_ONLY)) !== 0) {\n info.construct.add(name);\n }\n\n if (entry.length > DEFAULT_VALUE) {\n info.defaults[name] = entry[DEFAULT_VALUE];\n }\n};\n\nconst resolveProperties = (info: TypeInfo): void => {\n for (const [name, entry] of Object.entries(info.properties)) {\n resolveProperty(info, name, entry);\n }\n};\n\nconst applyBehaviorFlags = (info: TypeInfo, behavior: ElementBehavior): void => {\n if (behavior.flush !== undefined) {\n info.hasFlush = true;\n }\n\n addAll(info.deferred, deferredProps(behavior));\n addAll(info.declaredConstructOnly, behavior.constructOnly);\n};\n\nconst resolveBehaviorFlags = (info: TypeInfo): void => {\n for (const behavior of info.behaviors) {\n applyBehaviorFlags(info, behavior);\n }\n};\n\nconst buildTypeInfo = (name: string): TypeInfo => {\n const chain = ancestryFor(name);\n\n const info: TypeInfo = {\n typeName: name,\n properties: {},\n signals: {},\n userEventSignals: new Set(),\n behaviors: [],\n deferred: new Set(),\n declaredConstructOnly: new Set(),\n isLazy: false,\n hasFlush: false,\n constructOnly: new Set(),\n construct: new Set(),\n defaults: {},\n };\n\n for (const ancestor of chain) {\n accumulateAncestor(info, ancestor);\n }\n\n resolveBehaviorFlags(info);\n info.isLazy = chain.some((ancestor) => ELEMENTS[ancestor]?.isLazy === true);\n\n for (const ancestor of chain.toReversed()) {\n Object.assign(info.properties, registeredElementProperties[ancestor] ?? properties[ancestor] ?? {});\n }\n\n resolveProperties(info);\n\n return info;\n};\n\nconst typeInfoFor = (name: string): TypeInfo => {\n dropStaleCaches();\n\n return getOrInsert(typeInfoCache, name, buildTypeInfo);\n};\n\nconst getTypeInfo = (object: GObject.Object): TypeInfo | undefined => {\n const name = typeName(getClassType(object.constructor as AnyClass));\n\n return name === null ? undefined : typeInfoFor(name);\n};\n\nconst hasProperty = (info: TypeInfo, accessor: string): boolean => Object.hasOwn(info.properties, accessor);\n\nconst propertyNameFor = (info: TypeInfo, accessor: string): string | undefined =>\n info.properties[accessor]?.[NAME];\n\nconst getPropertyName = (object: GObject.Object, accessor: string): string | undefined => {\n const info = getTypeInfo(object);\n\n return (info === undefined ? undefined : propertyNameFor(info, accessor)) ??\n getDeclaredPropertyName(object, accessor);\n};\n\nexport { getPropertyName, hasProperty, typeInfoFor, type TypeInfo };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "React reconciler for GTK. Renders real GTK4 widget trees.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gtkx",
|
|
@@ -86,10 +86,10 @@
|
|
|
86
86
|
},
|
|
87
87
|
"dependencies": {
|
|
88
88
|
"react-reconciler": "^0.33.0",
|
|
89
|
-
"@gtkx/config": "1.
|
|
90
|
-
"@gtkx/
|
|
91
|
-
"@gtkx/
|
|
92
|
-
"@gtkx/
|
|
89
|
+
"@gtkx/config": "1.6.0",
|
|
90
|
+
"@gtkx/runtime": "1.6.0",
|
|
91
|
+
"@gtkx/utils": "1.6.0",
|
|
92
|
+
"@gtkx/css": "1.6.0"
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@types/react": "^19.2.18",
|