@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.
@@ -1 +1 @@
1
- {"version":3,"file":"behaviors.d.ts","sourceRoot":"","sources":["../../src/reconciler/behaviors.ts"],"names":[],"mappings":"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"}
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 { createApplication, getClassType, TYPE_INVALID, typeFromName, typeIsA, } from "@gtkx/runtime";
2
- import { getOrInsert, isDeepEqual, kebabCase, structuredClone, unsanitizeIdentifier } from "@gtkx/utils";
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 childTypeCache = new Map();
7
- const childTypeFor = (name) => getOrInsert(childTypeCache, name, typeFromName);
8
- const childMatcher = (name) => (child) => {
9
- const type = childTypeFor(name);
10
- return type === TYPE_INVALID || typeIsA(getClassType(child.constructor), type);
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, childType, hooks) => {
19
- const matches = childMatcher(childType);
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", "GtkWidget", {
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 = (childType = "GtkWidget") => slot("children", childType, {
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", "GtkWidget", {
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, childType, add, remove) => {
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, childType, hooks);
186
+ return slot(slotName, childClass, hooks);
183
187
  };
184
- const setterSlot = (slotName, childType, setter) => slot(slotName, childType, {
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, childType) => slot(slotName, childType, {
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", "GtkWidget", {
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":"AACA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAGH,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,OAAO,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE5F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAyDxC,MAAM,cAAc,GAAG,CAAC,GAA+B,EAAU,EAAE,CAC/D,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAEjE,MAAM,eAAe,GAAG,CAA2B,KAAqB,EAAE,GAAkB,EAAc,EAAE;IACxG,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEjC,OAAO,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,YAAY,GACd,CAA2B,GAA8B,EAA2C,EAAE,CAClG,CAAC,KAAK,EAAc,EAAE,CAClB,GAAG,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAE7D,MAAM,UAAU,GACZ,CACI,QAAgB,EAChB,OAA8C,EAC9C,MAAiC,EACK,EAAE,CACxC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IACpB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO;IACX,CAAC;IAED,OAAO,MAAM,CAAC,MAAW,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;AACpD,CAAC,CAAC;AAEV,MAAM,IAAI,GAAG,CACT,QAAgB,EAChB,UAAqC,EACrC,KAAsB,EACP,EAAE;IACjB,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACnD,MAAM,QAAQ,GAAoB,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;IAEpF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,QAAQ,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAW,EAAE,KAAU,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;IAC/F,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtC,MAAM,CAAC,MAAW,EAAE,KAAU,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC;IACN,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,QAAQ,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAW,EAAE,KAAU,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CACV,IAAY,EACZ,KAAuB,EACL,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACjE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAM,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CACjB,MAAS,EACT,OAAoB,EACpB,KAAyB,EACrB,EAAE;IACN,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpB,OAAO;IACX,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,IAAS,EAAE,KAAK,CAAC,MAAW,CAAC,CAAC;IAC/D,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACf,IAAY,EACZ,KAAyB,EACgB,EAAE;IAC3C,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAEtB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,OAAoB,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,KAAK,GAAc,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvD,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAED,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,IAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAExC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CACT,IAAY,EACZ,KAAyB,EACP,EAAE;IACpB,MAAM,QAAQ,GAAuB;QACjC,UAAU,EAAE,GAAc,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC5D,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;KAClC,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1D,QAAQ,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,MAAS,EACT,KAAoB,EACpB,IAAY,EACZ,GAAsB,EAClB,EAAE;IACN,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAY,CAAC;IAEnC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAC/D,OAAO;IACX,CAAC;IAED,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE;QAClB,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,MAAS,EACT,KAAoB,EACpB,IAAY,EACZ,GAAsB,EAClB,EAAE;IACN,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO;IACX,CAAC;IAED,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IAEzB,cAAc,CAAC,GAAG,EAAE;QAChB,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QAE1B,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC5B,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACf,MAAS,EACT,KAAoB,EACpB,IAAY,EACZ,GAAsB,EAClB,EAAE;IACN,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,WAAW,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAEjH,MAAM,OAAO,GAAG,GAAc,EAAE;QAC5B,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3B,KAAK,CAAC,UAAU,GAAG,GAAS,EAAE;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAA8B,IAAY,EAAE,GAAsB,EAAsB,EAAE,CAAC,CAAC;IACjH,QAAQ,EAAE,CAAC,IAAI,CAAC;IAChB,UAAU,EAAE,GAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACjH,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,OAAwB,CAAC;QACvC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;QAE9C,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,OAAwB,CAAC;QACvC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACzC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,OAAwB,CAAC;QACvC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;QACrB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;IAC5B,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAA8B,IAAY,EAAE,KAA0B,EAAsB,EAAE,CAC/G,gBAAgB,CAAO,IAAI,EAAE;IACzB,GAAG,KAAK;IACR,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC;CACL,CAAC,CAAC;AAEP,MAAM,QAAQ,GAAG,CAA8B,IAAY,EAAE,QAAyB,EAAsB,EAAE,CAC1G,YAAY,CAAO,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE3C,MAAM,cAAc,GAAG,CAAC,IAAY,EAAmB,EAAE,CACrD,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IACzB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACnC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,MAAM,eAAe,GAAG,GAA8C,EAAE,CACpE,IAAI,CAAgB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACtB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACf,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACJ,CAAC,CAAC;AAEP,MAAM,iBAAiB,GAAG,CACtB,UAAyB,EACP,EAAE,CACpB,IAAI,CAAO,UAAU,EAAE,UAAU,EAAE;IAC/B,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACtB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACf,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;CACJ,CAAC,CAAC;AAEP,MAAM,OAAO,GAAG,GAA0C,EAAE,CACxD,IAAI,CAAgB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;IACxC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,OAA4B,CAAC;IAC5F,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1B,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,OAA4B,CAAC,CAAC;IACpE,CAAC;CACJ,CAAC,CAAC;AAEP,MAAM,UAAU,GAAG,CAA8B,MAAS,EAAE,MAAuB,EAAE,QAAW,EAAW,EAAE,CACxG,MAAM,CAAC,MAAM,CAA8B,CAAC,QAAQ,CAAC,CAAC;AAE3D,MAAM,UAAU,GAAG,CACf,QAAgB,EAChB,UAAqC,EACrC,GAAoB,EACpB,MAAwB,EACT,EAAE;IACjB,MAAM,KAAK,GAAoB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;IAE7F,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAO,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACf,QAAgB,EAChB,UAAqC,EACrC,MAA8B,EACf,EAAE,CACjB,IAAI,CAAO,QAAQ,EAAE,UAAU,EAAE;IAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACtB,UAAU,CAAc,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACf,UAAU,CAAc,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;CACJ,CAAC,CAAC;AAEP,MAAM,WAAW,GAAG,CAChB,QAAgB,EAChB,UAAqC,EACnB,EAAE,CACpB,IAAI,CAAO,QAAQ,EAAE,UAAU,EAAE;IAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACJ,CAAC,CAAC;AAEP,MAAM,UAAU,GAAG,CACf,OAAgC,EAChC,QAAiD,EACjD,IAAc,EACd,KAAiB,EACP,EAAE;IACZ,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEzB,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAyC,EACzC,MAAoC,EACpC,KAAiB,EACjB,IAAc,EACV,EAAE;IACN,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE/D,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,OAAgC,EAChC,QAAiD,EAC/B,EAAE,CAAC,CAAC;IACtB,GAAG,IAAI,CAAgB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;QAC3C,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC5B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAmB,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;QAC7F,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5B,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,OAAmB,CAAC,CAAC;QACvE,CAAC;KACJ,CAAC;IACF,UAAU,EAAE,GAAa,EAAE,CAAC,IAAI,OAAO,EAAE;CAC5C,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CACvB,IAA4B,EACV,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAU,CAAC;CACzD,CAAC,CAAC;AAEH,OAAO,EACH,kBAAkB,EAClB,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,UAAU,EACV,UAAU,EACV,WAAW,EACX,mBAAmB,GACtB,CAAC","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":"AAGA,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
+ {"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 { getWrapperClass, TYPE_INVALID, typeFromName, typeIsA } from "@gtkx/runtime";
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 = getWrapperClass(type);
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,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAiB,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAEH,iBAAiB,EACjB,cAAc,GAIjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC,MAAM,kBAAkB,GAA0C;IAC9D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE;IACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE;IACzC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;IACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE;CACjD,CAAC;AAEF,MAAM,eAAe,GAAG,sBAAsB,EAAE,CAAC;AACjD,MAAM,YAAY,GAAoC,IAAI,GAAG,EAAE,CAAC;AAEhE,SAAS,sBAAsB;IAC3B,IAAI,MAAM,GAAyB,IAAI,CAAC;IAExC,OAAO,GAAG,EAAE;QACR,MAAM,KAAK,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAErG,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AACN,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,IAAY,EAAsB,EAAE;IACzD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC,IAAI,CAAC;QACtB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAsB,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;AAE9G,MAAM,cAAc,GAAG,CAAC,IAAc,EAAE,KAAY,EAAS,EAAE,CAC3D,MAAM,CACF,KAAK,EACL,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CACZ,KAAK,KAAK,SAAS;IACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CACjE,CAAC;AAEN,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAAY,EAAkB,EAAE;IAC/D,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAsB,CAAC;IAEvD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAE,KAAY,EAAkB,EAAE;IAClF,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,MAAM,CAAC;IAExG,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAE,KAAY,EAAE,QAAkB,EAA0B,EAAE;IACtG,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzE,OAAO,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport { getWrapperClass, TYPE_INVALID, typeFromName, typeIsA } from \"@gtkx/runtime\";\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 = (type: bigint, input: Props): GObject.Object => {\n const cls = getWrapperClass(type) 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(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
+ {"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;AAYjD,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;AA2HF,QAAA,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,QAA2D,CAAC;AAQhG,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
+ {"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) => getOrInsert(typeInfoCache, name, buildTypeInfo);
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.5.0",
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.5.0",
90
- "@gtkx/css": "1.5.0",
91
- "@gtkx/runtime": "1.5.0",
92
- "@gtkx/utils": "1.5.0"
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",