@gtkx/react 1.0.0-rc.2 → 1.0.0-rc.3

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.
Files changed (67) hide show
  1. package/dist/adw/element-behaviors.js +6 -36
  2. package/dist/adw/element-behaviors.js.map +1 -1
  3. package/dist/adw/element-config.d.ts +3 -1
  4. package/dist/adw/element-config.d.ts.map +1 -1
  5. package/dist/adw/element-config.js +26 -36
  6. package/dist/adw/element-config.js.map +1 -1
  7. package/dist/components/window.d.ts.map +1 -1
  8. package/dist/components/window.js +13 -2
  9. package/dist/components/window.js.map +1 -1
  10. package/dist/config.d.ts +1 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +1 -1
  13. package/dist/config.js.map +1 -1
  14. package/dist/element-config.d.ts.map +1 -1
  15. package/dist/element-config.js +3 -0
  16. package/dist/element-config.js.map +1 -1
  17. package/dist/hooks/use-signal.d.ts +4 -0
  18. package/dist/hooks/use-signal.d.ts.map +1 -1
  19. package/dist/hooks/use-signal.js +4 -0
  20. package/dist/hooks/use-signal.js.map +1 -1
  21. package/dist/internal.d.ts +1 -0
  22. package/dist/internal.d.ts.map +1 -1
  23. package/dist/internal.js +1 -0
  24. package/dist/internal.js.map +1 -1
  25. package/dist/reconciler/apply-props.d.ts.map +1 -1
  26. package/dist/reconciler/apply-props.js +12 -6
  27. package/dist/reconciler/apply-props.js.map +1 -1
  28. package/dist/reconciler/behaviors.d.ts.map +1 -1
  29. package/dist/reconciler/behaviors.js +7 -2
  30. package/dist/reconciler/behaviors.js.map +1 -1
  31. package/dist/reconciler/host-config.d.ts.map +1 -1
  32. package/dist/reconciler/host-config.js +2 -6
  33. package/dist/reconciler/host-config.js.map +1 -1
  34. package/dist/reconciler/placement.d.ts.map +1 -1
  35. package/dist/reconciler/placement.js +24 -8
  36. package/dist/reconciler/placement.js.map +1 -1
  37. package/dist/reconciler/registry.d.ts +22 -7
  38. package/dist/reconciler/registry.d.ts.map +1 -1
  39. package/dist/reconciler/registry.js +25 -15
  40. package/dist/reconciler/registry.js.map +1 -1
  41. package/dist/reconciler/root.d.ts +2 -2
  42. package/dist/reconciler/root.d.ts.map +1 -1
  43. package/dist/reconciler/root.js +1 -4
  44. package/dist/reconciler/root.js.map +1 -1
  45. package/dist/reconciler/signals.d.ts +3 -4
  46. package/dist/reconciler/signals.d.ts.map +1 -1
  47. package/dist/reconciler/signals.js +13 -25
  48. package/dist/reconciler/signals.js.map +1 -1
  49. package/dist/reconciler/text.d.ts.map +1 -1
  50. package/dist/reconciler/text.js +13 -8
  51. package/dist/reconciler/text.js.map +1 -1
  52. package/package.json +4 -4
  53. package/src/adw/element-behaviors.ts +6 -36
  54. package/src/adw/element-config.ts +27 -36
  55. package/src/components/window.tsx +15 -2
  56. package/src/config.ts +8 -1
  57. package/src/element-config.ts +3 -0
  58. package/src/hooks/use-signal.ts +4 -0
  59. package/src/internal.ts +1 -0
  60. package/src/reconciler/apply-props.ts +12 -6
  61. package/src/reconciler/behaviors.ts +8 -2
  62. package/src/reconciler/host-config.ts +2 -7
  63. package/src/reconciler/placement.ts +29 -9
  64. package/src/reconciler/registry.ts +31 -17
  65. package/src/reconciler/root.ts +3 -6
  66. package/src/reconciler/signals.ts +15 -36
  67. package/src/reconciler/text.ts +15 -8
@@ -1 +1 @@
1
- {"version":3,"file":"apply-props.js","sourceRoot":"","sources":["../../src/reconciler/apply-props.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport type { SignalHandler } from \"@gtkx/runtime\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { drain, kebabCase } from \"@gtkx/utils\";\nimport type { ElementBehavior, Props } from \"./registry.js\";\nimport { applyAccessibleProps, isAccessibleProp } from \"../utils/accessible-props.js\";\nimport { type TypeInfo, typeInfoFor } from \"./metadata.js\";\nimport { type ElementNode, getOrCreateContext, type SignalTarget } from \"./node.js\";\nimport { connectHandler, disconnectHandler } from \"./signals.js\";\nimport { bufferText, hasSameText, isContentPaintableProp, markTextDirty, TEXT_PROP } from \"./text.js\";\n\ntype PropDelta = { name: string; value: unknown; prevValue: unknown };\ntype BehaviorUpdateContext = { node: ElementNode; prev: Props; next: Props; consumed: Set<string> };\ntype PropChange = { prev: Props; next: Props };\n\nconst REACT_RESERVED_PROPS = new Set([\"children\", \"ref\", \"key\"]);\nconst NOTIFY_PREFIX = \"onNotify\";\nconst HANDLER_PREFIX = \"on\";\nconst flushDirty: Set<ElementNode> = new Set();\n\nconst isHandlerName = (name: string): boolean => /^on[A-Z]/.test(name);\n\nconst signalForProp = (info: TypeInfo, name: string): string => {\n if (name === NOTIFY_PREFIX) {\n return \"notify\";\n }\n\n if (name.startsWith(NOTIFY_PREFIX) && name.length > NOTIFY_PREFIX.length) {\n return `notify::${kebabCase(name.slice(NOTIFY_PREFIX.length))}`;\n }\n\n return info.signals[name] ?? kebabCase(name.slice(HANDLER_PREFIX.length));\n};\n\nconst isReservedName = (name: string, info: TypeInfo): boolean =>\n REACT_RESERVED_PROPS.has(name) || isHandlerName(name) || isAccessibleProp(name) || info.constructOnly.has(name);\n\nconst isSkippedValueName = (name: string, info: TypeInfo, consumed: Set<string>): boolean =>\n isReservedName(name, info) || consumed.has(name);\n\nconst writeValue = (object: GObject.Object, name: string, value: unknown): void => {\n if (hasSameText(object, name, value)) {\n return;\n }\n\n Reflect.set(object, name, value);\n};\n\nconst resetPlain = (object: GObject.Object, info: TypeInfo, name: string): void => {\n if (Object.hasOwn(info.defaults, name)) {\n writeValue(object, name, info.defaults[name]);\n }\n};\n\nconst setOrReset = (object: GObject.Object, info: TypeInfo, name: string, value: unknown): void => {\n if (value === undefined) {\n resetPlain(object, info, name);\n } else {\n writeValue(object, name, value);\n }\n};\n\nconst applyBufferText = (buffer: Gtk.TextBuffer, text: string): void => {\n if (bufferText(buffer) === text) {\n return;\n }\n\n buffer.beginIrreversibleAction();\n buffer.setText(text, -1);\n buffer.endIrreversibleAction();\n};\n\nconst isBufferText = (node: ElementNode, name: string): node is ElementNode & { object: Gtk.TextBuffer } =>\n name === TEXT_PROP && node.contentKind === \"buffer\" && node.object instanceof Gtk.TextBuffer;\n\nconst propText = (value: unknown): string => (typeof value === \"string\" ? value : JSON.stringify(value));\n\nconst applyEntry = (node: ElementNode, info: TypeInfo, delta: PropDelta): void => {\n const { name, value, prevValue } = delta;\n\n if (value !== undefined && isBufferText(node, name)) {\n applyBufferText(node.object, propText(value));\n\n return;\n }\n\n if (isContentPaintableProp(node, name)) {\n markTextDirty(node);\n\n return;\n }\n\n const isInitialNull = value === null && prevValue === undefined;\n\n if (!isInitialNull) {\n setOrReset(node.object, info, name, value);\n }\n};\n\nconst eachChangedName = (prev: Props, next: Props, visit: (name: string) => void): void => {\n const names = new Set([...Object.keys(prev), ...Object.keys(next)]);\n\n for (const name of names) {\n visit(name);\n }\n};\n\nconst constructOnlyChangeError = (typeName: string, name: string): Error =>\n new Error(\n `Cannot change the construct-only prop '${name}' of <${typeName}> after it is created. ` +\n \"GTK accepts it only while the object is being built, so give the element a key that \" +\n `changes with '${name}' and React will build a new one.`,\n );\n\nconst assertConstructOnlyUnchanged = (typeName: string, prev: Props, next: Props): void => {\n const info = typeInfoFor(typeName);\n\n eachChangedName(prev, next, (name) => {\n if (!info.constructOnly.has(name) || Object.is(prev[name], next[name])) {\n return;\n }\n\n throw constructOnlyChangeError(typeName, name);\n });\n};\n\nconst collectConsumed = (ctx: BehaviorUpdateContext, behavior: ElementBehavior): void => {\n if (behavior.update === undefined) {\n return;\n }\n\n const result = behavior.update(ctx.node.object, ctx.prev, ctx.next, getOrCreateContext(ctx.node, behavior));\n\n if (result === undefined) {\n return;\n }\n\n for (const name of result) {\n ctx.consumed.add(name);\n }\n};\n\nconst runBehaviorUpdates = (node: ElementNode, info: TypeInfo, prev: Props, next: Props): Set<string> => {\n const consumed: Set<string> = new Set();\n const ctx: BehaviorUpdateContext = { node, prev, next, consumed };\n\n for (const behavior of info.behaviors) {\n collectConsumed(ctx, behavior);\n }\n\n return consumed;\n};\n\nconst applyValueEntries = (node: ElementNode, info: TypeInfo, change: PropChange, consumed: Set<string>): void => {\n eachChangedName(change.prev, change.next, (name) => {\n if (isSkippedValueName(name, info, consumed) || Object.is(change.prev[name], change.next[name])) {\n return;\n }\n\n applyEntry(node, info, { name, value: change.next[name], prevValue: change.prev[name] });\n });\n};\n\nconst restoreActionableSensitivity = (node: ElementNode, info: TypeInfo, prev: Props, next: Props): void => {\n if (prev.actionName === undefined || next.actionName !== undefined) {\n return;\n }\n\n const desired = \"sensitive\" in next ? next.sensitive : info.defaults.sensitive;\n\n if (typeof desired === \"boolean\") {\n Reflect.set(node.object, \"sensitive\", desired);\n }\n};\n\nconst applyHandlers = (target: SignalTarget, info: TypeInfo, prev: Props, next: Props): void => {\n eachChangedName(prev, next, (name) => {\n if (!isHandlerName(name)) {\n return;\n }\n\n const value = next[name];\n\n if (typeof value === \"function\") {\n connectHandler(target, name, signalForProp(info, name), value as SignalHandler);\n } else {\n disconnectHandler(target, name);\n }\n });\n};\n\nconst markFlush = (node: ElementNode): void => {\n if (typeInfoFor(node.typeName).hasFlush) {\n flushDirty.add(node);\n }\n};\n\nconst eachBehavior = (node: ElementNode, visit: (behavior: ElementBehavior, context: unknown) => void): void => {\n for (const behavior of typeInfoFor(node.typeName).behaviors) {\n visit(behavior, getOrCreateContext(node, behavior));\n }\n};\n\nconst flushBehaviors = (): void => {\n drain(flushDirty, (node) => {\n eachBehavior(node, (behavior, context) => behavior.flush?.(node.object, context));\n });\n};\n\nconst mountBehaviors = (node: ElementNode): void => {\n if (!typeInfoFor(node.typeName).hasMount) {\n return;\n }\n\n eachBehavior(node, (behavior, context) => behavior.mount?.(node.object, context));\n};\n\nconst unmountBehaviors = (node: ElementNode): void => {\n eachBehavior(node, (behavior, context) => behavior.unmount?.(node.object, context));\n};\n\nconst applyAccessible = (object: GObject.Object, prev: Props, next: Props): void => {\n if (object instanceof Gtk.Widget) {\n applyAccessibleProps(object, prev, next);\n }\n};\n\nconst applyElementProps = (node: ElementNode, prev: Props, next: Props): void => {\n const info = typeInfoFor(node.typeName);\n const consumed = runBehaviorUpdates(node, info, prev, next);\n applyValueEntries(node, info, { prev, next }, consumed);\n restoreActionableSensitivity(node, info, prev, next);\n applyAccessible(node.object, prev, next);\n applyHandlers(node, info, prev, next);\n markFlush(node);\n node.props = next;\n};\n\nconst isSkippedAdoptedName = (info: TypeInfo, name: string): boolean => isReservedName(name, info);\n\nconst applyAdoptedProps = (target: SignalTarget, prev: Props, next: Props): void => {\n const { object, typeName } = target;\n const info = typeInfoFor(typeName);\n\n eachChangedName(prev, next, (name) => {\n if (isSkippedAdoptedName(info, name) || Object.is(prev[name], next[name])) {\n return;\n }\n\n setOrReset(object, info, name, next[name]);\n });\n\n applyAccessible(object, prev, next);\n applyHandlers(target, info, prev, next);\n};\n\nexport {\n markFlush,\n flushBehaviors,\n mountBehaviors,\n unmountBehaviors,\n applyElementProps,\n applyAdoptedProps,\n assertConstructOnlyUnchanged,\n};\n"]}
1
+ {"version":3,"file":"apply-props.js","sourceRoot":"","sources":["../../src/reconciler/apply-props.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport type { SignalHandler } from \"@gtkx/runtime\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { drain, kebabCase } from \"@gtkx/utils\";\nimport type { ElementBehavior, Props } from \"./registry.js\";\nimport { applyAccessibleProps, isAccessibleProp } from \"../utils/accessible-props.js\";\nimport { type TypeInfo, typeInfoFor } from \"./metadata.js\";\nimport { type ElementNode, getOrCreateContext, type SignalTarget } from \"./node.js\";\nimport { applyWrite, connectHandler, disconnectHandler } from \"./signals.js\";\nimport { bufferText, hasSameText, isContentPaintableProp, markTextDirty, TEXT_PROP } from \"./text.js\";\n\ntype PropDelta = { name: string; value: unknown; prevValue: unknown };\ntype BehaviorUpdateContext = { node: ElementNode; prev: Props; next: Props; consumed: Set<string> };\ntype PropChange = { prev: Props; next: Props };\n\nconst REACT_RESERVED_PROPS = new Set([\"children\", \"ref\", \"key\"]);\nconst NOTIFY_PREFIX = \"onNotify\";\nconst HANDLER_PREFIX = \"on\";\nconst flushDirty: Set<ElementNode> = new Set();\n\nconst isHandlerName = (name: string): boolean => /^on[A-Z]/.test(name);\n\nconst signalForProp = (info: TypeInfo, name: string): string => {\n if (name === NOTIFY_PREFIX) {\n return \"notify\";\n }\n\n if (name.startsWith(NOTIFY_PREFIX) && name.length > NOTIFY_PREFIX.length) {\n return `notify::${kebabCase(name.slice(NOTIFY_PREFIX.length))}`;\n }\n\n return info.signals[name] ?? kebabCase(name.slice(HANDLER_PREFIX.length));\n};\n\nconst isReservedName = (name: string, info: TypeInfo): boolean =>\n REACT_RESERVED_PROPS.has(name) || isHandlerName(name) || isAccessibleProp(name) || info.constructOnly.has(name);\n\nconst isSkippedValueName = (name: string, info: TypeInfo, consumed: Set<string>): boolean =>\n isReservedName(name, info) || consumed.has(name);\n\nconst writeValue = (object: GObject.Object, name: string, value: unknown): void => {\n if (hasSameText(object, name, value)) {\n return;\n }\n\n applyWrite(() => {\n Reflect.set(object, name, value);\n });\n};\n\nconst resetPlain = (object: GObject.Object, info: TypeInfo, name: string): void => {\n if (Object.hasOwn(info.defaults, name)) {\n writeValue(object, name, info.defaults[name]);\n }\n};\n\nconst setOrReset = (object: GObject.Object, info: TypeInfo, name: string, value: unknown): void => {\n if (value === undefined) {\n resetPlain(object, info, name);\n } else {\n writeValue(object, name, value);\n }\n};\n\nconst applyBufferText = (buffer: Gtk.TextBuffer, text: string): void => {\n if (bufferText(buffer) === text) {\n return;\n }\n\n applyWrite(() => {\n buffer.beginIrreversibleAction();\n buffer.setText(text, -1);\n buffer.endIrreversibleAction();\n });\n};\n\nconst isBufferText = (node: ElementNode, name: string): node is ElementNode & { object: Gtk.TextBuffer } =>\n name === TEXT_PROP && node.contentKind === \"buffer\" && node.object instanceof Gtk.TextBuffer;\n\nconst propText = (value: unknown): string => (typeof value === \"string\" ? value : JSON.stringify(value));\n\nconst applyEntry = (node: ElementNode, info: TypeInfo, delta: PropDelta): void => {\n const { name, value, prevValue } = delta;\n\n if (value !== undefined && isBufferText(node, name)) {\n applyBufferText(node.object, propText(value));\n\n return;\n }\n\n if (isContentPaintableProp(node, name)) {\n markTextDirty(node);\n\n return;\n }\n\n const isInitialNull = value === null && prevValue === undefined;\n\n if (!isInitialNull) {\n setOrReset(node.object, info, name, value);\n }\n};\n\nconst eachChangedName = (prev: Props, next: Props, visit: (name: string) => void): void => {\n const names = new Set([...Object.keys(prev), ...Object.keys(next)]);\n\n for (const name of names) {\n visit(name);\n }\n};\n\nconst constructOnlyChangeError = (typeName: string, name: string): Error =>\n new Error(\n `Cannot change the construct-only prop '${name}' of <${typeName}> after it is created. ` +\n \"GTK accepts it only while the object is being built, so give the element a key that \" +\n `changes with '${name}' and React will build a new one.`,\n );\n\nconst assertConstructOnlyUnchanged = (typeName: string, prev: Props, next: Props): void => {\n const info = typeInfoFor(typeName);\n\n eachChangedName(prev, next, (name) => {\n if (!info.constructOnly.has(name) || Object.is(prev[name], next[name])) {\n return;\n }\n\n throw constructOnlyChangeError(typeName, name);\n });\n};\n\nconst collectConsumed = (ctx: BehaviorUpdateContext, behavior: ElementBehavior): void => {\n if (behavior.update === undefined) {\n return;\n }\n\n const result = behavior.update(ctx.node.object, ctx.prev, ctx.next, getOrCreateContext(ctx.node, behavior));\n\n if (result === undefined) {\n return;\n }\n\n for (const name of result) {\n ctx.consumed.add(name);\n }\n};\n\nconst runBehaviorUpdates = (node: ElementNode, info: TypeInfo, prev: Props, next: Props): Set<string> => {\n const consumed: Set<string> = new Set();\n const ctx: BehaviorUpdateContext = { node, prev, next, consumed };\n\n for (const behavior of info.behaviors) {\n collectConsumed(ctx, behavior);\n }\n\n return consumed;\n};\n\nconst applyValueEntries = (node: ElementNode, info: TypeInfo, change: PropChange, consumed: Set<string>): void => {\n eachChangedName(change.prev, change.next, (name) => {\n if (isSkippedValueName(name, info, consumed) || Object.is(change.prev[name], change.next[name])) {\n return;\n }\n\n applyEntry(node, info, { name, value: change.next[name], prevValue: change.prev[name] });\n });\n};\n\nconst restoreActionableSensitivity = (node: ElementNode, info: TypeInfo, prev: Props, next: Props): void => {\n if (prev.actionName === undefined || next.actionName !== undefined) {\n return;\n }\n\n const desired = \"sensitive\" in next ? next.sensitive : info.defaults.sensitive;\n\n if (typeof desired === \"boolean\") {\n applyWrite(() => {\n Reflect.set(node.object, \"sensitive\", desired);\n });\n }\n};\n\nconst applyHandlers = (target: SignalTarget, info: TypeInfo, prev: Props, next: Props): void => {\n eachChangedName(prev, next, (name) => {\n if (!isHandlerName(name)) {\n return;\n }\n\n const value = next[name];\n\n if (typeof value === \"function\") {\n connectHandler(target, name, signalForProp(info, name), value as SignalHandler);\n } else {\n disconnectHandler(target, name);\n }\n });\n};\n\nconst markFlush = (node: ElementNode): void => {\n if (typeInfoFor(node.typeName).hasFlush) {\n flushDirty.add(node);\n }\n};\n\nconst eachBehavior = (node: ElementNode, visit: (behavior: ElementBehavior, context: unknown) => void): void => {\n for (const behavior of typeInfoFor(node.typeName).behaviors) {\n visit(behavior, getOrCreateContext(node, behavior));\n }\n};\n\nconst flushBehaviors = (): void => {\n drain(flushDirty, (node) => {\n eachBehavior(node, (behavior, context) => behavior.flush?.(node.object, context));\n });\n};\n\nconst mountBehaviors = (node: ElementNode): void => {\n if (!typeInfoFor(node.typeName).hasMount) {\n return;\n }\n\n eachBehavior(node, (behavior, context) => behavior.mount?.(node.object, context));\n};\n\nconst unmountBehaviors = (node: ElementNode): void => {\n eachBehavior(node, (behavior, context) => behavior.unmount?.(node.object, context));\n};\n\nconst applyAccessible = (object: GObject.Object, prev: Props, next: Props): void => {\n if (object instanceof Gtk.Widget) {\n applyAccessibleProps(object, prev, next);\n }\n};\n\nconst applyElementProps = (node: ElementNode, prev: Props, next: Props): void => {\n const info = typeInfoFor(node.typeName);\n const consumed = runBehaviorUpdates(node, info, prev, next);\n applyValueEntries(node, info, { prev, next }, consumed);\n restoreActionableSensitivity(node, info, prev, next);\n applyAccessible(node.object, prev, next);\n applyHandlers(node, info, prev, next);\n markFlush(node);\n node.props = next;\n};\n\nconst isSkippedAdoptedName = (info: TypeInfo, name: string): boolean => isReservedName(name, info);\n\nconst applyAdoptedProps = (target: SignalTarget, prev: Props, next: Props): void => {\n const { object, typeName } = target;\n const info = typeInfoFor(typeName);\n\n eachChangedName(prev, next, (name) => {\n if (isSkippedAdoptedName(info, name) || Object.is(prev[name], next[name])) {\n return;\n }\n\n setOrReset(object, info, name, next[name]);\n });\n\n applyAccessible(object, prev, next);\n applyHandlers(target, info, prev, next);\n};\n\nexport {\n markFlush,\n flushBehaviors,\n mountBehaviors,\n unmountBehaviors,\n applyElementProps,\n applyAdoptedProps,\n assertConstructOnlyUnchanged,\n};\n"]}
@@ -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,5 +1,6 @@
1
1
  import { getInstanceType, TYPE_INVALID, typeFromName, typeIsA } from "@gtkx/runtime";
2
2
  import { getOrInsert, isDeepEqual, structuredClone } from "@gtkx/utils";
3
+ import { applyWrite } from "./signals.js";
3
4
  import { hasSameText } from "./text.js";
4
5
  const childTypeCache = new Map();
5
6
  const childTypeFor = (name) => getOrInsert(childTypeCache, name, typeFromName);
@@ -84,7 +85,9 @@ const flushDeferred = (object, context, prop, canApply) => {
84
85
  if (canApply !== undefined && !canApply(object, state.desired)) {
85
86
  return;
86
87
  }
87
- Reflect.set(object, prop, state.desired);
88
+ applyWrite(() => {
89
+ Reflect.set(object, prop, state.desired);
90
+ });
88
91
  state.applied = state.desired;
89
92
  };
90
93
  /** Builds a behavior for a prop applied after the surrounding commit, deferred until `canApply` returns true. */
@@ -104,7 +107,9 @@ const deferred = (prop, canApply) => ({
104
107
  /** Builds a behavior for a text prop kept in controlled-input sync: set when provided, never reset. */
105
108
  const controlledText = (prop) => value(prop, (object, next) => {
106
109
  if (!hasSameText(object, prop, next)) {
107
- Reflect.set(object, prop, next);
110
+ applyWrite(() => {
111
+ Reflect.set(object, prop, next);
112
+ });
108
113
  }
109
114
  });
110
115
  /** Behavior for a container that installs its single child with `setChild`. */
@@ -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 { getInstanceType, TYPE_INVALID, typeFromName, typeIsA } from \"@gtkx/runtime\";\nimport { getOrInsert, isDeepEqual, structuredClone } from \"@gtkx/utils\";\nimport type { DetachInfo, ElementBehavior, PlaceInfo, Props } from \"./registry.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; present: boolean; applied: unknown };\ntype CanApply<P extends GObject.Object, V> = (object: P, value: V) => boolean;\ntype ChildSetter = GObject.Object & { setChild: (child: Gtk.Widget | null) => void };\ntype ContentSetter<C extends Gtk.Widget> = GObject.Object & { setContent: (content: C | null) => void };\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 IndexedInserter = GObject.Object & {\n remove: (child: Gtk.Widget) => void;\n insert: (child: Gtk.Widget, 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(getInstanceType(child), 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\n/** Builds a behavior for a named child slot holding children of `childType`, claiming matches only. */\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\n/** Builds a scalar-prop behavior that invokes `apply` whenever the value changes, and claims the prop. */\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 const remove = hooks.remove;\n\n if (remove === undefined) {\n return;\n }\n\n for (const entry of entries) {\n remove(object, entry.item as I, entry.handle as H);\n }\n};\n\n/**\n * Builds an array-prop behavior that adds, removes, and clears its items, reapplying on structural\n * change. `add` may return a handle that the same item's later `remove` receives, for items whose\n * teardown needs what `add` produced (as VFL constraints need the objects the layout created).\n */\nconst list = <P extends GObject.Object, I, H = void>(\n prop: string,\n hooks: ListHooks<P, I, H>,\n): ElementBehavior<P> => {\n const { add } = hooks;\n\n return {\n createContext: (): ListState => ({ snapshot: [], entries: [] }),\n update: (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};\n\nconst flushDeferred = <P extends GObject.Object, V>(\n object: GObject.Object,\n context: unknown,\n prop: string,\n canApply: CanApply<P, V> | undefined,\n): void => {\n const state = context as DeferredState;\n\n if (!state.present || Object.is(state.applied, state.desired)) {\n return;\n }\n\n if (canApply !== undefined && !canApply(object as P, state.desired as V)) {\n return;\n }\n\n Reflect.set(object, prop, state.desired);\n state.applied = state.desired;\n};\n\n/** Builds a behavior for a prop applied after the surrounding commit, deferred until `canApply` returns true. */\nconst deferred = <P extends GObject.Object, V>(\n prop: string,\n canApply?: CanApply<P, V>,\n): ElementBehavior<P> => ({\n deferred: [prop],\n createContext: (): DeferredState => ({ desired: undefined, present: false, applied: undefined }),\n update: (_object, _prev, next, context) => {\n const state = context as DeferredState;\n state.desired = next[prop];\n state.present = next[prop] !== undefined;\n\n return [prop];\n },\n flush: (object, context) => {\n flushDeferred(object, context, prop, canApply);\n },\n});\n\n/** Builds a behavior for a text prop kept in controlled-input sync: set when provided, never reset. */\nconst controlledText = (prop: string): ElementBehavior =>\n value(prop, (object, next) => {\n if (!hasSameText(object, prop, next)) {\n Reflect.set(object, prop, next);\n }\n });\n\n/** Behavior for a container that installs its single child with `setChild`. */\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\n/** Behavior for a container that installs its single child with `setContent`. */\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\n/** Behavior for a `GtkBox`-style container that orders children by sibling. */\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\n/** Behavior for a container whose children are added and removed by a pair of methods. */\nconst addRemoveSlot = <C extends GObject.Object, P extends GObject.Object>(\n slotName: string,\n childType: string,\n add: (parent: P, child: C) => unknown,\n remove: (parent: P, child: C) => void,\n): ElementBehavior => slot<P, C>(slotName, childType, { attach: add, detach: remove });\n\n/** Behavior for a `children` slot whose attach call returns the page object the container adopts. */\nconst adoptedChildrenSlot = <P extends GObject.Object, C extends GObject.Object>(\n childType: string,\n add: (parent: P, item: C) => unknown,\n remove: (parent: P, item: C) => void,\n): ElementBehavior => addRemoveSlot<C, P>(\"children\", childType, add, remove);\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: IndexedInserter,\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\n/** Behavior for an index-placed container that wraps each child in `Wrapper` before adding it. */\nconst wrappingIndexedSlot = <W extends Gtk.Widget, P extends IndexedInserter>(\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 createContext: (): RowCache => new WeakMap(),\n});\n\nexport {\n slot,\n value,\n list,\n deferred,\n controlledText,\n childSetterSlot,\n contentSetterSlot,\n boxSlot,\n addRemoveSlot,\n adoptedChildrenSlot,\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 type * as Gtk from \"@gtkx/gi/gtk\";\nimport { getInstanceType, TYPE_INVALID, typeFromName, typeIsA } from \"@gtkx/runtime\";\nimport { getOrInsert, isDeepEqual, structuredClone } from \"@gtkx/utils\";\nimport type { DetachInfo, ElementBehavior, PlaceInfo, Props } from \"./registry.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; present: boolean; applied: unknown };\ntype CanApply<P extends GObject.Object, V> = (object: P, value: V) => boolean;\ntype ChildSetter = GObject.Object & { setChild: (child: Gtk.Widget | null) => void };\ntype ContentSetter<C extends Gtk.Widget> = GObject.Object & { setContent: (content: C | null) => void };\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 IndexedInserter = GObject.Object & {\n remove: (child: Gtk.Widget) => void;\n insert: (child: Gtk.Widget, 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(getInstanceType(child), 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\n/** Builds a behavior for a named child slot holding children of `childType`, claiming matches only. */\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\n/** Builds a scalar-prop behavior that invokes `apply` whenever the value changes, and claims the prop. */\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 const remove = hooks.remove;\n\n if (remove === undefined) {\n return;\n }\n\n for (const entry of entries) {\n remove(object, entry.item as I, entry.handle as H);\n }\n};\n\n/**\n * Builds an array-prop behavior that adds, removes, and clears its items, reapplying on structural\n * change. `add` may return a handle that the same item's later `remove` receives, for items whose\n * teardown needs what `add` produced (as VFL constraints need the objects the layout created).\n */\nconst list = <P extends GObject.Object, I, H = void>(\n prop: string,\n hooks: ListHooks<P, I, H>,\n): ElementBehavior<P> => {\n const { add } = hooks;\n\n return {\n createContext: (): ListState => ({ snapshot: [], entries: [] }),\n update: (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};\n\nconst flushDeferred = <P extends GObject.Object, V>(\n object: GObject.Object,\n context: unknown,\n prop: string,\n canApply: CanApply<P, V> | undefined,\n): void => {\n const state = context as DeferredState;\n\n if (!state.present || Object.is(state.applied, state.desired)) {\n return;\n }\n\n if (canApply !== undefined && !canApply(object as P, state.desired as V)) {\n return;\n }\n\n applyWrite(() => {\n Reflect.set(object, prop, state.desired);\n });\n\n state.applied = state.desired;\n};\n\n/** Builds a behavior for a prop applied after the surrounding commit, deferred until `canApply` returns true. */\nconst deferred = <P extends GObject.Object, V>(\n prop: string,\n canApply?: CanApply<P, V>,\n): ElementBehavior<P> => ({\n deferred: [prop],\n createContext: (): DeferredState => ({ desired: undefined, present: false, applied: undefined }),\n update: (_object, _prev, next, context) => {\n const state = context as DeferredState;\n state.desired = next[prop];\n state.present = next[prop] !== undefined;\n\n return [prop];\n },\n flush: (object, context) => {\n flushDeferred(object, context, prop, canApply);\n },\n});\n\n/** Builds a behavior for a text prop kept in controlled-input sync: set when provided, never reset. */\nconst controlledText = (prop: string): ElementBehavior =>\n value(prop, (object, next) => {\n if (!hasSameText(object, prop, next)) {\n applyWrite(() => {\n Reflect.set(object, prop, next);\n });\n }\n });\n\n/** Behavior for a container that installs its single child with `setChild`. */\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\n/** Behavior for a container that installs its single child with `setContent`. */\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\n/** Behavior for a `GtkBox`-style container that orders children by sibling. */\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\n/** Behavior for a container whose children are added and removed by a pair of methods. */\nconst addRemoveSlot = <C extends GObject.Object, P extends GObject.Object>(\n slotName: string,\n childType: string,\n add: (parent: P, child: C) => unknown,\n remove: (parent: P, child: C) => void,\n): ElementBehavior => slot<P, C>(slotName, childType, { attach: add, detach: remove });\n\n/** Behavior for a `children` slot whose attach call returns the page object the container adopts. */\nconst adoptedChildrenSlot = <P extends GObject.Object, C extends GObject.Object>(\n childType: string,\n add: (parent: P, item: C) => unknown,\n remove: (parent: P, item: C) => void,\n): ElementBehavior => addRemoveSlot<C, P>(\"children\", childType, add, remove);\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: IndexedInserter,\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\n/** Behavior for an index-placed container that wraps each child in `Wrapper` before adding it. */\nconst wrappingIndexedSlot = <W extends Gtk.Widget, P extends IndexedInserter>(\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 createContext: (): RowCache => new WeakMap(),\n});\n\nexport {\n slot,\n value,\n list,\n deferred,\n controlledText,\n childSetterSlot,\n contentSetterSlot,\n boxSlot,\n addRemoveSlot,\n adoptedChildrenSlot,\n wrappingIndexedSlot,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"host-config.d.ts","sourceRoot":"","sources":["../../src/reconciler/host-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAKjD,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAe/C,OAAO,EAQH,KAAK,QAAQ,EAGb,KAAK,QAAQ,EAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUpE,iEAAiE;AACjE,KAAK,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;AAgI9C,QAAA,MAAM,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CACrE,CAAC;AAwGhC,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"host-config.d.ts","sourceRoot":"","sources":["../../src/reconciler/host-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAKjD,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAe/C,OAAO,EAQH,KAAK,QAAQ,EAGb,KAAK,QAAQ,EAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUpE,iEAAiE;AACjE,KAAK,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;AA2H9C,QAAA,MAAM,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CACrE,CAAC;AAwGhC,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,CAAC"}
@@ -11,7 +11,7 @@ import { resolveElementNode } from "./instance.js";
11
11
  import { typeInfoFor } from "./metadata.js";
12
12
  import { createElementNode, createPropNode, createTextNode, ELEMENT_KIND, LAZY_KIND, lazyTarget, } from "./node.js";
13
13
  import { isRootElement } from "./root-element.js";
14
- import { beginSuppression, disconnectAllHandlers, endSuppression } from "./signals.js";
14
+ import { disconnectAllHandlers } from "./signals.js";
15
15
  import { didUpdateTextSurgically, enclosingHost, flushTextHosts, markTextDirty, validateContentMix, } from "./text.js";
16
16
  const HOST_CONTEXT = {};
17
17
  const containerNodes = new WeakMap();
@@ -47,14 +47,10 @@ const hostConfig = {
47
47
  getRootHostContext: () => HOST_CONTEXT,
48
48
  getChildHostContext: (parent) => parent,
49
49
  getPublicInstance: (instance) => getPublicInstance(instance),
50
- prepareForCommit: () => {
51
- beginSuppression();
52
- return null;
53
- },
50
+ prepareForCommit: () => null,
54
51
  resetAfterCommit: () => {
55
52
  flushTextHosts();
56
53
  flushBehaviors();
57
- endSuppression();
58
54
  },
59
55
  preparePortalMount: () => undefined,
60
56
  clearContainer: () => undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"host-config.js","sourceRoot":"","sources":["../../src/reconciler/host-config.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { getInstanceType, typeName } from \"@gtkx/runtime\";\nimport { getOrInsert } from \"@gtkx/utils\";\nimport { createContext } from \"react\";\nimport ReactReconciler from \"react-reconciler\";\nimport { DefaultEventPriority, DiscreteEventPriority, NoEventPriority } from \"react-reconciler/constants.js\";\nimport type { Props } from \"./registry.js\";\nimport { Prop } from \"../components/element.js\";\nimport {\n applyAdoptedProps,\n applyElementProps,\n assertConstructOnlyUnchanged,\n flushBehaviors,\n mountBehaviors,\n unmountBehaviors,\n} from \"./apply-props.js\";\nimport { attachChild, detachChild } from \"./child-routing.js\";\nimport { resolveElementNode } from \"./instance.js\";\nimport { typeInfoFor } from \"./metadata.js\";\nimport {\n type AnyNode,\n createElementNode,\n createPropNode,\n createTextNode,\n type Dispatch,\n ELEMENT_KIND,\n type ElementNode,\n type Instance,\n LAZY_KIND,\n lazyTarget,\n type TextNode,\n} from \"./node.js\";\nimport { isRootElement, type RootElement } from \"./root-element.js\";\nimport { beginSuppression, disconnectAllHandlers, endSuppression } from \"./signals.js\";\nimport {\n didUpdateTextSurgically,\n enclosingHost,\n flushTextHosts,\n markTextDirty,\n validateContentMix,\n} from \"./text.js\";\n\n/** A top-level container an element tree can be mounted into. */\ntype Container = RootElement | GObject.Object;\n\ntype PriorityTracker = {\n get: () => number;\n set: (priority: number) => void;\n withDiscrete: <T>(fn: () => T) => T;\n};\n\nconst HOST_CONTEXT: Record<string, never> = {};\nconst containerNodes: WeakMap<object, ElementNode> = new WeakMap();\nconst priority = createPriorityTracker();\n\nconst hostConfig = {\n supportsMutation: true,\n supportsPersistence: false,\n supportsHydration: false,\n isPrimaryRenderer: true,\n noTimeout: -1,\n scheduleTimeout: (fn: (...args: unknown[]) => unknown, delay?: number): ReturnType<typeof setTimeout> =>\n setTimeout(fn, delay),\n cancelTimeout: (id: ReturnType<typeof setTimeout>): void => {\n clearTimeout(id);\n },\n createInstance: (type: string, props: Props): Instance => createNode(type, props),\n createTextInstance: (text: string): TextNode => createTextNode(text),\n appendInitialChild: (parent: Instance, child: AnyNode): void => {\n attachChild(parent, child, null);\n },\n finalizeInitialChildren: (instance: Instance, _type: string, props: Props): boolean => {\n if (instance.kind !== ELEMENT_KIND) {\n return false;\n }\n\n validateContentMix(instance, props);\n\n return typeInfoFor(instance.typeName).hasMount;\n },\n commitMount: (instance: Instance): void => {\n if (instance.kind === ELEMENT_KIND) {\n mountBehaviors(instance);\n }\n },\n shouldSetTextContent: (): boolean => false,\n getRootHostContext: (): Record<string, never> => HOST_CONTEXT,\n getChildHostContext: (parent: Record<string, never>): Record<string, never> => parent,\n getPublicInstance: (instance: Instance): object => getPublicInstance(instance),\n prepareForCommit: (): null => {\n beginSuppression();\n\n return null;\n },\n resetAfterCommit: (): void => {\n flushTextHosts();\n flushBehaviors();\n endSuppression();\n },\n preparePortalMount: (): void => undefined,\n clearContainer: (): void => undefined,\n appendChild: (parent: Instance, child: AnyNode): void => {\n attachChild(parent, child, null);\n },\n appendChildToContainer: (container: Container, child: AnyNode): void => {\n attachToContainer(container, child, null);\n },\n insertBefore: (parent: Instance, child: AnyNode, before: AnyNode): void => {\n attachChild(parent, child, before);\n },\n insertInContainerBefore: (container: Container, child: AnyNode, before: AnyNode): void => {\n attachToContainer(container, child, before);\n },\n removeChild: (parent: Instance, child: AnyNode): void => {\n detachChild(parent, child);\n },\n removeChildFromContainer: (container: Container, child: AnyNode): void => {\n detachFromContainer(container, child);\n },\n commitTextUpdate: (textInstance: TextNode, oldText: string, newText: string): void => {\n textInstance.text = newText;\n const host = enclosingHost(textInstance);\n\n if (host !== null && !didUpdateTextSurgically(host, textInstance, oldText, newText)) {\n markTextDirty(host);\n }\n },\n commitUpdate: (instance: Instance, _type: string, prevProps: Props, nextProps: Props): void => {\n updateInstance(instance, prevProps, nextProps);\n },\n hideInstance: (instance: Instance): void => {\n setWidgetVisible(instance, false);\n },\n unhideInstance: (instance: Instance, props: Props): void => {\n setWidgetVisible(instance, props.visible !== false);\n },\n hideTextInstance: (): void => undefined,\n unhideTextInstance: (): void => undefined,\n detachDeletedInstance: (instance: Instance): void => {\n if (instance.kind === ELEMENT_KIND) {\n disconnectAllHandlers(instance);\n unmountBehaviors(instance);\n } else if (instance.kind === LAZY_KIND && instance.adopted !== null) {\n disconnectAllHandlers(lazyTarget(instance, instance.adopted));\n }\n },\n getInstanceFromNode: (): null => null,\n beforeActiveInstanceBlur: (): void => undefined,\n afterActiveInstanceBlur: (): void => undefined,\n prepareScopeUpdate: (): void => undefined,\n getInstanceFromScope: (): null => null,\n setCurrentUpdatePriority: (next: number): void => {\n priority.set(next);\n },\n getCurrentUpdatePriority: (): number => priority.get(),\n resolveUpdatePriority: (): number => (priority.get() === NoEventPriority ? DefaultEventPriority : priority.get()),\n resetFormInstance: (): void => undefined,\n requestPostPaintCallback: (): void => undefined,\n shouldAttemptEagerTransition: (): boolean => false,\n trackSchedulerEvent: (): void => undefined,\n resolveEventType: (): null => null,\n resolveEventTimeStamp: (): number => -1,\n maySuspendCommit: (): boolean => false,\n preloadInstance: (): boolean => true,\n startSuspendingCommit: (): void => undefined,\n suspendInstance: (): void => undefined,\n waitForCommitToBeReady: (): null => null,\n NotPendingTransition: null,\n HostTransitionContext: createContext(null) as unknown as ReactReconciler.ReactContext<null>,\n};\n\nconst reconciler: ReactReconciler.Reconciler<Container, Instance, TextNode, unknown, unknown, object> =\n ReactReconciler(hostConfig);\n\nfunction createPriorityTracker(): PriorityTracker {\n let current: number = NoEventPriority;\n\n return {\n get: () => current,\n set: (next) => {\n current = next;\n },\n withDiscrete: (fn) => {\n const previous = current;\n current = DiscreteEventPriority;\n\n try {\n return fn();\n } finally {\n current = previous;\n }\n },\n };\n}\n\nconst updateInstance = (instance: Instance, prev: Props, next: Props): void => {\n if (instance.kind === ELEMENT_KIND) {\n assertConstructOnlyUnchanged(instance.typeName, prev, next);\n applyElementProps(instance, prev, next);\n\n return;\n }\n\n if (instance.kind === LAZY_KIND && instance.adopted !== null) {\n assertConstructOnlyUnchanged(instance.typeName, prev, next);\n applyAdoptedProps(lazyTarget(instance, instance.adopted), prev, next);\n instance.props = next;\n }\n};\n\nconst attachToContainer = (container: Container, child: AnyNode, before: AnyNode | null): void => {\n if (!isRootElement(container)) {\n attachChild(getOrCreateContainerNode(container), child, before);\n }\n};\n\nconst detachFromContainer = (container: Container, child: AnyNode): void => {\n if (!isRootElement(container)) {\n detachChild(getOrCreateContainerNode(container), child);\n }\n};\n\nconst getPublicInstance = (instance: Instance): object => {\n if (instance.kind === ELEMENT_KIND) {\n return instance.object;\n }\n\n if (instance.kind === LAZY_KIND) {\n return instance.adopted ?? instance;\n }\n\n return instance;\n};\n\nconst setWidgetVisible = (instance: Instance, isVisible: boolean): void => {\n if (instance.kind === ELEMENT_KIND && instance.object instanceof Gtk.Widget) {\n instance.object.setVisible(isVisible);\n }\n};\n\nconst runDiscrete: Dispatch = (fn) => {\n try {\n return priority.withDiscrete(fn);\n } finally {\n reconciler.flushSyncWork();\n }\n};\n\nconst adoptContainer = (container: GObject.Object): ElementNode => {\n const name = typeName(getInstanceType(container));\n\n if (name === null) {\n throw new Error(\"Cannot adopt a container whose GType has no registered name\");\n }\n\n return createElementNode(name, container, runDiscrete, null);\n};\n\nconst getOrCreateContainerNode = (container: GObject.Object): ElementNode =>\n getOrInsert(containerNodes, container, adoptContainer);\n\nconst createNode = (type: string, props: Props): Instance => {\n if (type === Prop) {\n return createPropNode(props.propName as string);\n }\n\n const node = resolveElementNode(type, props, runDiscrete);\n\n if (node.kind === ELEMENT_KIND) {\n containerNodes.set(node.object, node);\n applyElementProps(node, {}, props);\n }\n\n return node;\n};\n\nexport { reconciler, type Container };\n"]}
1
+ {"version":3,"file":"host-config.js","sourceRoot":"","sources":["../../src/reconciler/host-config.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { getInstanceType, typeName } from \"@gtkx/runtime\";\nimport { getOrInsert } from \"@gtkx/utils\";\nimport { createContext } from \"react\";\nimport ReactReconciler from \"react-reconciler\";\nimport { DefaultEventPriority, DiscreteEventPriority, NoEventPriority } from \"react-reconciler/constants.js\";\nimport type { Props } from \"./registry.js\";\nimport { Prop } from \"../components/element.js\";\nimport {\n applyAdoptedProps,\n applyElementProps,\n assertConstructOnlyUnchanged,\n flushBehaviors,\n mountBehaviors,\n unmountBehaviors,\n} from \"./apply-props.js\";\nimport { attachChild, detachChild } from \"./child-routing.js\";\nimport { resolveElementNode } from \"./instance.js\";\nimport { typeInfoFor } from \"./metadata.js\";\nimport {\n type AnyNode,\n createElementNode,\n createPropNode,\n createTextNode,\n type Dispatch,\n ELEMENT_KIND,\n type ElementNode,\n type Instance,\n LAZY_KIND,\n lazyTarget,\n type TextNode,\n} from \"./node.js\";\nimport { isRootElement, type RootElement } from \"./root-element.js\";\nimport { disconnectAllHandlers } from \"./signals.js\";\nimport {\n didUpdateTextSurgically,\n enclosingHost,\n flushTextHosts,\n markTextDirty,\n validateContentMix,\n} from \"./text.js\";\n\n/** A top-level container an element tree can be mounted into. */\ntype Container = RootElement | GObject.Object;\n\ntype PriorityTracker = {\n get: () => number;\n set: (priority: number) => void;\n withDiscrete: <T>(fn: () => T) => T;\n};\n\nconst HOST_CONTEXT: Record<string, never> = {};\nconst containerNodes: WeakMap<object, ElementNode> = new WeakMap();\nconst priority = createPriorityTracker();\n\nconst hostConfig = {\n supportsMutation: true,\n supportsPersistence: false,\n supportsHydration: false,\n isPrimaryRenderer: true,\n noTimeout: -1,\n scheduleTimeout: (fn: (...args: unknown[]) => unknown, delay?: number): ReturnType<typeof setTimeout> =>\n setTimeout(fn, delay),\n cancelTimeout: (id: ReturnType<typeof setTimeout>): void => {\n clearTimeout(id);\n },\n createInstance: (type: string, props: Props): Instance => createNode(type, props),\n createTextInstance: (text: string): TextNode => createTextNode(text),\n appendInitialChild: (parent: Instance, child: AnyNode): void => {\n attachChild(parent, child, null);\n },\n finalizeInitialChildren: (instance: Instance, _type: string, props: Props): boolean => {\n if (instance.kind !== ELEMENT_KIND) {\n return false;\n }\n\n validateContentMix(instance, props);\n\n return typeInfoFor(instance.typeName).hasMount;\n },\n commitMount: (instance: Instance): void => {\n if (instance.kind === ELEMENT_KIND) {\n mountBehaviors(instance);\n }\n },\n shouldSetTextContent: (): boolean => false,\n getRootHostContext: (): Record<string, never> => HOST_CONTEXT,\n getChildHostContext: (parent: Record<string, never>): Record<string, never> => parent,\n getPublicInstance: (instance: Instance): object => getPublicInstance(instance),\n prepareForCommit: (): null => null,\n resetAfterCommit: (): void => {\n flushTextHosts();\n flushBehaviors();\n },\n preparePortalMount: (): void => undefined,\n clearContainer: (): void => undefined,\n appendChild: (parent: Instance, child: AnyNode): void => {\n attachChild(parent, child, null);\n },\n appendChildToContainer: (container: Container, child: AnyNode): void => {\n attachToContainer(container, child, null);\n },\n insertBefore: (parent: Instance, child: AnyNode, before: AnyNode): void => {\n attachChild(parent, child, before);\n },\n insertInContainerBefore: (container: Container, child: AnyNode, before: AnyNode): void => {\n attachToContainer(container, child, before);\n },\n removeChild: (parent: Instance, child: AnyNode): void => {\n detachChild(parent, child);\n },\n removeChildFromContainer: (container: Container, child: AnyNode): void => {\n detachFromContainer(container, child);\n },\n commitTextUpdate: (textInstance: TextNode, oldText: string, newText: string): void => {\n textInstance.text = newText;\n const host = enclosingHost(textInstance);\n\n if (host !== null && !didUpdateTextSurgically(host, textInstance, oldText, newText)) {\n markTextDirty(host);\n }\n },\n commitUpdate: (instance: Instance, _type: string, prevProps: Props, nextProps: Props): void => {\n updateInstance(instance, prevProps, nextProps);\n },\n hideInstance: (instance: Instance): void => {\n setWidgetVisible(instance, false);\n },\n unhideInstance: (instance: Instance, props: Props): void => {\n setWidgetVisible(instance, props.visible !== false);\n },\n hideTextInstance: (): void => undefined,\n unhideTextInstance: (): void => undefined,\n detachDeletedInstance: (instance: Instance): void => {\n if (instance.kind === ELEMENT_KIND) {\n disconnectAllHandlers(instance);\n unmountBehaviors(instance);\n } else if (instance.kind === LAZY_KIND && instance.adopted !== null) {\n disconnectAllHandlers(lazyTarget(instance, instance.adopted));\n }\n },\n getInstanceFromNode: (): null => null,\n beforeActiveInstanceBlur: (): void => undefined,\n afterActiveInstanceBlur: (): void => undefined,\n prepareScopeUpdate: (): void => undefined,\n getInstanceFromScope: (): null => null,\n setCurrentUpdatePriority: (next: number): void => {\n priority.set(next);\n },\n getCurrentUpdatePriority: (): number => priority.get(),\n resolveUpdatePriority: (): number => (priority.get() === NoEventPriority ? DefaultEventPriority : priority.get()),\n resetFormInstance: (): void => undefined,\n requestPostPaintCallback: (): void => undefined,\n shouldAttemptEagerTransition: (): boolean => false,\n trackSchedulerEvent: (): void => undefined,\n resolveEventType: (): null => null,\n resolveEventTimeStamp: (): number => -1,\n maySuspendCommit: (): boolean => false,\n preloadInstance: (): boolean => true,\n startSuspendingCommit: (): void => undefined,\n suspendInstance: (): void => undefined,\n waitForCommitToBeReady: (): null => null,\n NotPendingTransition: null,\n HostTransitionContext: createContext(null) as unknown as ReactReconciler.ReactContext<null>,\n};\n\nconst reconciler: ReactReconciler.Reconciler<Container, Instance, TextNode, unknown, unknown, object> =\n ReactReconciler(hostConfig);\n\nfunction createPriorityTracker(): PriorityTracker {\n let current: number = NoEventPriority;\n\n return {\n get: () => current,\n set: (next) => {\n current = next;\n },\n withDiscrete: (fn) => {\n const previous = current;\n current = DiscreteEventPriority;\n\n try {\n return fn();\n } finally {\n current = previous;\n }\n },\n };\n}\n\nconst updateInstance = (instance: Instance, prev: Props, next: Props): void => {\n if (instance.kind === ELEMENT_KIND) {\n assertConstructOnlyUnchanged(instance.typeName, prev, next);\n applyElementProps(instance, prev, next);\n\n return;\n }\n\n if (instance.kind === LAZY_KIND && instance.adopted !== null) {\n assertConstructOnlyUnchanged(instance.typeName, prev, next);\n applyAdoptedProps(lazyTarget(instance, instance.adopted), prev, next);\n instance.props = next;\n }\n};\n\nconst attachToContainer = (container: Container, child: AnyNode, before: AnyNode | null): void => {\n if (!isRootElement(container)) {\n attachChild(getOrCreateContainerNode(container), child, before);\n }\n};\n\nconst detachFromContainer = (container: Container, child: AnyNode): void => {\n if (!isRootElement(container)) {\n detachChild(getOrCreateContainerNode(container), child);\n }\n};\n\nconst getPublicInstance = (instance: Instance): object => {\n if (instance.kind === ELEMENT_KIND) {\n return instance.object;\n }\n\n if (instance.kind === LAZY_KIND) {\n return instance.adopted ?? instance;\n }\n\n return instance;\n};\n\nconst setWidgetVisible = (instance: Instance, isVisible: boolean): void => {\n if (instance.kind === ELEMENT_KIND && instance.object instanceof Gtk.Widget) {\n instance.object.setVisible(isVisible);\n }\n};\n\nconst runDiscrete: Dispatch = (fn) => {\n try {\n return priority.withDiscrete(fn);\n } finally {\n reconciler.flushSyncWork();\n }\n};\n\nconst adoptContainer = (container: GObject.Object): ElementNode => {\n const name = typeName(getInstanceType(container));\n\n if (name === null) {\n throw new Error(\"Cannot adopt a container whose GType has no registered name\");\n }\n\n return createElementNode(name, container, runDiscrete, null);\n};\n\nconst getOrCreateContainerNode = (container: GObject.Object): ElementNode =>\n getOrInsert(containerNodes, container, adoptContainer);\n\nconst createNode = (type: string, props: Props): Instance => {\n if (type === Prop) {\n return createPropNode(props.propName as string);\n }\n\n const node = resolveElementNode(type, props, runDiscrete);\n\n if (node.kind === ELEMENT_KIND) {\n containerNodes.set(node.object, node);\n applyElementProps(node, {}, props);\n }\n\n return node;\n};\n\nexport { reconciler, type Container };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../src/reconciler/placement.ts"],"names":[],"mappings":"AAMA,OAAO,EAGH,KAAK,WAAW,EAKhB,KAAK,aAAa,EAErB,MAAM,WAAW,CAAC;AAwLnB,QAAA,MAAM,UAAU,GACZ,QAAQ,WAAW,EACnB,MAAM,MAAM,EACZ,MAAM,aAAa,EACnB,QAAQ,aAAa,GAAG,IAAI,KAC7B,IAyBF,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,QAAQ,WAAW,EAAE,MAAM,MAAM,EAAE,MAAM,aAAa,KAAG,IAoB9E,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../src/reconciler/placement.ts"],"names":[],"mappings":"AAMA,OAAO,EAGH,KAAK,WAAW,EAKhB,KAAK,aAAa,EAErB,MAAM,WAAW,CAAC;AA4MnB,QAAA,MAAM,UAAU,GACZ,QAAQ,WAAW,EACnB,MAAM,MAAM,EACZ,MAAM,aAAa,EACnB,QAAQ,aAAa,GAAG,IAAI,KAC7B,IAyBF,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,QAAQ,WAAW,EAAE,MAAM,MAAM,EAAE,MAAM,aAAa,KAAG,IAoB9E,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
@@ -4,6 +4,7 @@ import { getOrInsert, indexBeforeOrEnd, remove } from "@gtkx/utils";
4
4
  import { applyAdoptedProps, markFlush } from "./apply-props.js";
5
5
  import { typeInfoFor } from "./metadata.js";
6
6
  import { DEFAULT_SLOT, ELEMENT_KIND, getOrCreateContext, LAZY_KIND, lazyTarget, nodeObject, } from "./node.js";
7
+ import { applyWrite } from "./signals.js";
7
8
  import { markTextDirty } from "./text.js";
8
9
  const createEntry = (slot, node) => {
9
10
  const object = nodeObject(node);
@@ -42,8 +43,13 @@ const wireBufferView = (node, parent) => {
42
43
  node.bufferView = parent.object;
43
44
  markTextDirty(node);
44
45
  };
46
+ const writeSlot = (parent, entry, value) => {
47
+ applyWrite(() => {
48
+ Reflect.set(parent.object, entry.slot, value);
49
+ });
50
+ };
45
51
  const setObjectSlot = (parent, entry) => {
46
- Reflect.set(parent.object, entry.slot, entry.object);
52
+ writeSlot(parent, entry, entry.object);
47
53
  wireBufferView(entry.node, parent);
48
54
  entry.behavior = null;
49
55
  entry.attached = true;
@@ -64,7 +70,7 @@ const didAttach = (ctx, behavior) => {
64
70
  applyLazyProps(ctx.entry);
65
71
  return true;
66
72
  };
67
- const attachEntry = (parent, entry, index, sibling) => {
73
+ const runAttach = (parent, entry, index, sibling) => {
68
74
  const ctx = { parent, entry, index, sibling };
69
75
  for (const behavior of typeInfoFor(parent.typeName).behaviors) {
70
76
  if (didAttach(ctx, behavior)) {
@@ -75,26 +81,36 @@ const attachEntry = (parent, entry, index, sibling) => {
75
81
  setObjectSlot(parent, entry);
76
82
  }
77
83
  };
84
+ const attachEntry = (parent, entry, index, sibling) => {
85
+ applyWrite(() => {
86
+ runAttach(parent, entry, index, sibling);
87
+ });
88
+ };
78
89
  const detachInfo = (entry, context) => ({
79
90
  slot: entry.slot,
80
91
  adopted: entry.adopted,
81
92
  props: entry.node.props,
82
93
  context,
83
94
  });
84
- const detachEntry = (parent, entry) => {
85
- if (!entry.attached) {
86
- return;
87
- }
88
- entry.attached = false;
95
+ const runDetach = (parent, entry) => {
89
96
  const behavior = entry.behavior;
90
97
  if (behavior === null) {
91
98
  if (entry.slot !== DEFAULT_SLOT) {
92
- Reflect.set(parent.object, entry.slot, null);
99
+ writeSlot(parent, entry, null);
93
100
  }
94
101
  return;
95
102
  }
96
103
  behavior.detach?.(parent.object, entry.object, detachInfo(entry, getOrCreateContext(parent, behavior)));
97
104
  };
105
+ const detachEntry = (parent, entry) => {
106
+ if (!entry.attached) {
107
+ return;
108
+ }
109
+ entry.attached = false;
110
+ applyWrite(() => {
111
+ runDetach(parent, entry);
112
+ });
113
+ };
98
114
  const rebuild = (parent, entries) => {
99
115
  for (const entry of entries) {
100
116
  detachEntry(parent, entry);
@@ -1 +1 @@
1
- {"version":3,"file":"placement.js","sourceRoot":"","sources":["../../src/reconciler/placement.ts"],"names":[],"mappings":"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","sourcesContent":["import * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { getOrInsert, indexBeforeOrEnd, remove } from \"@gtkx/utils\";\nimport type { DetachInfo, ElementBehavior, PlaceInfo } from \"./registry.js\";\nimport { applyAdoptedProps, markFlush } from \"./apply-props.js\";\nimport { typeInfoFor } from \"./metadata.js\";\nimport {\n DEFAULT_SLOT,\n ELEMENT_KIND,\n type ElementNode,\n getOrCreateContext,\n LAZY_KIND,\n lazyTarget,\n nodeObject,\n type PlaceableNode,\n type PlacedChild,\n} from \"./node.js\";\nimport { markTextDirty } from \"./text.js\";\n\ntype AttachContext = { parent: ElementNode; entry: PlacedChild; index: number; sibling: GObject.Object | null };\n\nconst createEntry = (slot: string, node: PlaceableNode): PlacedChild | null => {\n const object = nodeObject(node);\n\n if (object === null) {\n return null;\n }\n\n return { node, object, adopted: null, slot, behavior: null, attached: false };\n};\n\nconst siblingAt = (entries: PlacedChild[], index: number): GObject.Object | null =>\n index > 0 ? (entries[index - 1]?.object ?? null) : null;\n\nconst placeInfo = (entry: PlacedChild, index: number, sibling: GObject.Object | null, context: unknown): PlaceInfo => ({\n slot: entry.slot,\n index,\n sibling,\n adopted: entry.adopted,\n props: entry.node.props,\n context,\n});\n\nconst adoptedFrom = (parent: ElementNode, entry: PlacedChild, behavior: ElementBehavior, claim: unknown): void => {\n if (behavior.resolve !== undefined) {\n entry.adopted = behavior.resolve(parent.object, entry.object);\n\n return;\n }\n\n entry.adopted = claim instanceof GObject.Object ? claim : null;\n};\n\nconst applyLazyProps = (entry: PlacedChild): void => {\n if (entry.node.kind !== LAZY_KIND || entry.adopted === null) {\n return;\n }\n\n applyAdoptedProps(lazyTarget(entry.node, entry.adopted), {}, entry.node.props);\n entry.node.adopted = entry.adopted;\n};\n\nconst wireBufferView = (node: PlaceableNode, parent: ElementNode): void => {\n if (!(node.kind === ELEMENT_KIND && node.contentKind === \"buffer\" && parent.object instanceof Gtk.TextView)) {\n return;\n }\n\n node.bufferView = parent.object;\n markTextDirty(node);\n};\n\nconst setObjectSlot = (parent: ElementNode, entry: PlacedChild): void => {\n Reflect.set(parent.object, entry.slot, entry.object);\n wireBufferView(entry.node, parent);\n entry.behavior = null;\n entry.attached = true;\n};\n\nconst didAttach = (ctx: AttachContext, behavior: ElementBehavior): boolean => {\n const attach = behavior.attach;\n\n if (attach === undefined) {\n return false;\n }\n\n const context = getOrCreateContext(ctx.parent, behavior);\n const claim = attach(ctx.parent.object, ctx.entry.object, placeInfo(ctx.entry, ctx.index, ctx.sibling, context));\n\n if (claim === undefined) {\n return false;\n }\n\n ctx.entry.behavior = behavior;\n adoptedFrom(ctx.parent, ctx.entry, behavior, claim);\n ctx.entry.attached = true;\n applyLazyProps(ctx.entry);\n\n return true;\n};\n\nconst attachEntry = (parent: ElementNode, entry: PlacedChild, index: number, sibling: GObject.Object | null): void => {\n const ctx: AttachContext = { parent, entry, index, sibling };\n\n for (const behavior of typeInfoFor(parent.typeName).behaviors) {\n if (didAttach(ctx, behavior)) {\n return;\n }\n }\n\n if (entry.slot !== DEFAULT_SLOT) {\n setObjectSlot(parent, entry);\n }\n};\n\nconst detachInfo = (entry: PlacedChild, context: unknown): DetachInfo => ({\n slot: entry.slot,\n adopted: entry.adopted,\n props: entry.node.props,\n context,\n});\n\nconst detachEntry = (parent: ElementNode, entry: PlacedChild): void => {\n if (!entry.attached) {\n return;\n }\n\n entry.attached = false;\n const behavior = entry.behavior;\n\n if (behavior === null) {\n if (entry.slot !== DEFAULT_SLOT) {\n Reflect.set(parent.object, entry.slot, null);\n }\n\n return;\n }\n\n behavior.detach?.(parent.object, entry.object, detachInfo(entry, getOrCreateContext(parent, behavior)));\n};\n\nconst rebuild = (parent: ElementNode, entries: PlacedChild[]): void => {\n for (const entry of entries) {\n detachEntry(parent, entry);\n }\n\n for (const [index, entry] of entries.entries()) {\n entry.behavior = null;\n attachEntry(parent, entry, index, siblingAt(entries, index));\n }\n};\n\nconst getPosition = (entries: PlacedChild[], before: PlaceableNode | null): number =>\n indexBeforeOrEnd(entries, before, (entry, target) => entry.node === target);\n\nconst placeNew = (parent: ElementNode, entry: PlacedChild, entries: PlacedChild[], index: number): void => {\n attachEntry(parent, entry, index, siblingAt(entries, index));\n\n if (!entry.attached) {\n remove(entries, entry);\n\n return;\n }\n\n const isInsertedBeforeEnd = index < entries.length - 1;\n const isCannotReorderInPlace = entry.behavior !== null && entry.behavior.reorder === undefined;\n\n if (isInsertedBeforeEnd && isCannotReorderInPlace) {\n rebuild(parent, entries);\n }\n};\n\nconst moveEntry = (parent: ElementNode, entry: PlacedChild, entries: PlacedChild[], index: number): void => {\n const behavior = entry.behavior;\n const reorder = behavior?.reorder;\n\n if (behavior === null || reorder === undefined) {\n rebuild(parent, entries);\n\n return;\n }\n\n const context = getOrCreateContext(parent, behavior);\n const claim = reorder(parent.object, entry.object, placeInfo(entry, index, siblingAt(entries, index), context));\n adoptedFrom(parent, entry, behavior, claim);\n applyLazyProps(entry);\n};\n\nconst resolveEntry = (\n entries: PlacedChild[],\n existing: number,\n slot: string,\n node: PlaceableNode,\n): PlacedChild | null => {\n if (existing >= 0) {\n return entries[existing] ?? null;\n }\n\n return createEntry(slot, node);\n};\n\nconst placeChild = (\n parent: ElementNode,\n slot: string,\n node: PlaceableNode,\n before: PlaceableNode | null,\n): void => {\n const entries = getOrInsert(parent.placements, slot, () => []);\n const existing = entries.findIndex((entry) => entry.node === node);\n const entry = resolveEntry(entries, existing, slot, node);\n\n if (entry === null) {\n return;\n }\n\n const isMove = existing !== -1;\n\n if (isMove) {\n entries.splice(existing, 1);\n }\n\n const index = getPosition(entries, before);\n entries.splice(index, 0, entry);\n\n if (isMove) {\n moveEntry(parent, entry, entries, index);\n } else {\n placeNew(parent, entry, entries, index);\n }\n\n markFlush(parent);\n};\n\nconst unplaceChild = (parent: ElementNode, slot: string, node: PlaceableNode): void => {\n const entries = parent.placements.get(slot);\n\n if (entries === undefined) {\n return;\n }\n\n const index = entries.findIndex((entry) => entry.node === node);\n\n if (index === -1) {\n return;\n }\n\n const [entry] = entries.splice(index, 1);\n\n if (entry !== undefined) {\n detachEntry(parent, entry);\n }\n\n markFlush(parent);\n};\n\nexport { placeChild, unplaceChild };\n"]}
1
+ {"version":3,"file":"placement.js","sourceRoot":"","sources":["../../src/reconciler/placement.ts"],"names":[],"mappings":"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","sourcesContent":["import * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { getOrInsert, indexBeforeOrEnd, remove } from \"@gtkx/utils\";\nimport type { DetachInfo, ElementBehavior, PlaceInfo } from \"./registry.js\";\nimport { applyAdoptedProps, markFlush } from \"./apply-props.js\";\nimport { typeInfoFor } from \"./metadata.js\";\nimport {\n DEFAULT_SLOT,\n ELEMENT_KIND,\n type ElementNode,\n getOrCreateContext,\n LAZY_KIND,\n lazyTarget,\n nodeObject,\n type PlaceableNode,\n type PlacedChild,\n} from \"./node.js\";\nimport { applyWrite } from \"./signals.js\";\nimport { markTextDirty } from \"./text.js\";\n\ntype AttachContext = { parent: ElementNode; entry: PlacedChild; index: number; sibling: GObject.Object | null };\n\nconst createEntry = (slot: string, node: PlaceableNode): PlacedChild | null => {\n const object = nodeObject(node);\n\n if (object === null) {\n return null;\n }\n\n return { node, object, adopted: null, slot, behavior: null, attached: false };\n};\n\nconst siblingAt = (entries: PlacedChild[], index: number): GObject.Object | null =>\n index > 0 ? (entries[index - 1]?.object ?? null) : null;\n\nconst placeInfo = (entry: PlacedChild, index: number, sibling: GObject.Object | null, context: unknown): PlaceInfo => ({\n slot: entry.slot,\n index,\n sibling,\n adopted: entry.adopted,\n props: entry.node.props,\n context,\n});\n\nconst adoptedFrom = (parent: ElementNode, entry: PlacedChild, behavior: ElementBehavior, claim: unknown): void => {\n if (behavior.resolve !== undefined) {\n entry.adopted = behavior.resolve(parent.object, entry.object);\n\n return;\n }\n\n entry.adopted = claim instanceof GObject.Object ? claim : null;\n};\n\nconst applyLazyProps = (entry: PlacedChild): void => {\n if (entry.node.kind !== LAZY_KIND || entry.adopted === null) {\n return;\n }\n\n applyAdoptedProps(lazyTarget(entry.node, entry.adopted), {}, entry.node.props);\n entry.node.adopted = entry.adopted;\n};\n\nconst wireBufferView = (node: PlaceableNode, parent: ElementNode): void => {\n if (!(node.kind === ELEMENT_KIND && node.contentKind === \"buffer\" && parent.object instanceof Gtk.TextView)) {\n return;\n }\n\n node.bufferView = parent.object;\n markTextDirty(node);\n};\n\nconst writeSlot = (parent: ElementNode, entry: PlacedChild, value: GObject.Object | null): void => {\n applyWrite(() => {\n Reflect.set(parent.object, entry.slot, value);\n });\n};\n\nconst setObjectSlot = (parent: ElementNode, entry: PlacedChild): void => {\n writeSlot(parent, entry, entry.object);\n wireBufferView(entry.node, parent);\n entry.behavior = null;\n entry.attached = true;\n};\n\nconst didAttach = (ctx: AttachContext, behavior: ElementBehavior): boolean => {\n const attach = behavior.attach;\n\n if (attach === undefined) {\n return false;\n }\n\n const context = getOrCreateContext(ctx.parent, behavior);\n const claim = attach(ctx.parent.object, ctx.entry.object, placeInfo(ctx.entry, ctx.index, ctx.sibling, context));\n\n if (claim === undefined) {\n return false;\n }\n\n ctx.entry.behavior = behavior;\n adoptedFrom(ctx.parent, ctx.entry, behavior, claim);\n ctx.entry.attached = true;\n applyLazyProps(ctx.entry);\n\n return true;\n};\n\nconst runAttach = (parent: ElementNode, entry: PlacedChild, index: number, sibling: GObject.Object | null): void => {\n const ctx: AttachContext = { parent, entry, index, sibling };\n\n for (const behavior of typeInfoFor(parent.typeName).behaviors) {\n if (didAttach(ctx, behavior)) {\n return;\n }\n }\n\n if (entry.slot !== DEFAULT_SLOT) {\n setObjectSlot(parent, entry);\n }\n};\n\nconst attachEntry = (parent: ElementNode, entry: PlacedChild, index: number, sibling: GObject.Object | null): void => {\n applyWrite(() => {\n runAttach(parent, entry, index, sibling);\n });\n};\n\nconst detachInfo = (entry: PlacedChild, context: unknown): DetachInfo => ({\n slot: entry.slot,\n adopted: entry.adopted,\n props: entry.node.props,\n context,\n});\n\nconst runDetach = (parent: ElementNode, entry: PlacedChild): void => {\n const behavior = entry.behavior;\n\n if (behavior === null) {\n if (entry.slot !== DEFAULT_SLOT) {\n writeSlot(parent, entry, null);\n }\n\n return;\n }\n\n behavior.detach?.(parent.object, entry.object, detachInfo(entry, getOrCreateContext(parent, behavior)));\n};\n\nconst detachEntry = (parent: ElementNode, entry: PlacedChild): void => {\n if (!entry.attached) {\n return;\n }\n\n entry.attached = false;\n\n applyWrite(() => {\n runDetach(parent, entry);\n });\n};\n\nconst rebuild = (parent: ElementNode, entries: PlacedChild[]): void => {\n for (const entry of entries) {\n detachEntry(parent, entry);\n }\n\n for (const [index, entry] of entries.entries()) {\n entry.behavior = null;\n attachEntry(parent, entry, index, siblingAt(entries, index));\n }\n};\n\nconst getPosition = (entries: PlacedChild[], before: PlaceableNode | null): number =>\n indexBeforeOrEnd(entries, before, (entry, target) => entry.node === target);\n\nconst placeNew = (parent: ElementNode, entry: PlacedChild, entries: PlacedChild[], index: number): void => {\n attachEntry(parent, entry, index, siblingAt(entries, index));\n\n if (!entry.attached) {\n remove(entries, entry);\n\n return;\n }\n\n const isInsertedBeforeEnd = index < entries.length - 1;\n const isCannotReorderInPlace = entry.behavior !== null && entry.behavior.reorder === undefined;\n\n if (isInsertedBeforeEnd && isCannotReorderInPlace) {\n rebuild(parent, entries);\n }\n};\n\nconst moveEntry = (parent: ElementNode, entry: PlacedChild, entries: PlacedChild[], index: number): void => {\n const behavior = entry.behavior;\n const reorder = behavior?.reorder;\n\n if (behavior === null || reorder === undefined) {\n rebuild(parent, entries);\n\n return;\n }\n\n const context = getOrCreateContext(parent, behavior);\n const claim = reorder(parent.object, entry.object, placeInfo(entry, index, siblingAt(entries, index), context));\n adoptedFrom(parent, entry, behavior, claim);\n applyLazyProps(entry);\n};\n\nconst resolveEntry = (\n entries: PlacedChild[],\n existing: number,\n slot: string,\n node: PlaceableNode,\n): PlacedChild | null => {\n if (existing >= 0) {\n return entries[existing] ?? null;\n }\n\n return createEntry(slot, node);\n};\n\nconst placeChild = (\n parent: ElementNode,\n slot: string,\n node: PlaceableNode,\n before: PlaceableNode | null,\n): void => {\n const entries = getOrInsert(parent.placements, slot, () => []);\n const existing = entries.findIndex((entry) => entry.node === node);\n const entry = resolveEntry(entries, existing, slot, node);\n\n if (entry === null) {\n return;\n }\n\n const isMove = existing !== -1;\n\n if (isMove) {\n entries.splice(existing, 1);\n }\n\n const index = getPosition(entries, before);\n entries.splice(index, 0, entry);\n\n if (isMove) {\n moveEntry(parent, entry, entries, index);\n } else {\n placeNew(parent, entry, entries, index);\n }\n\n markFlush(parent);\n};\n\nconst unplaceChild = (parent: ElementNode, slot: string, node: PlaceableNode): void => {\n const entries = parent.placements.get(slot);\n\n if (entries === undefined) {\n return;\n }\n\n const index = entries.findIndex((entry) => entry.node === node);\n\n if (index === -1) {\n return;\n }\n\n const [entry] = entries.splice(index, 1);\n\n if (entry !== undefined) {\n detachEntry(parent, entry);\n }\n\n markFlush(parent);\n};\n\nexport { placeChild, unplaceChild };\n"]}
@@ -47,14 +47,17 @@ type ModuleExport = {
47
47
  /**
48
48
  * Per-element configuration keyed by GLib type name: whether the element is lazy (its GObject is
49
49
  * created by its parent container, as pages and layout children are), the custom behaviors bound to
50
- * its type, an optional component that wraps the generated element, and the base props interface its
51
- * generated props extend. `component` and `props` are inert at runtime; they are read only by codegen.
50
+ * its type, an optional component that wraps the generated element, the base props interface its
51
+ * generated props extend, and the GObject properties to leave out of the generated props (those a
52
+ * behavior already writes from children, such as the `child` and `content` properties). `component`,
53
+ * `props` and `omitProps` are inert at runtime; they are read only by codegen.
52
54
  */
53
55
  type ElementConfig<T extends GObject.Object = GObject.Object> = {
54
56
  lazy?: boolean;
55
57
  behaviors?: ElementBehavior<T>[];
56
58
  component?: ModuleExport;
57
59
  props?: ModuleExport;
60
+ omitProps?: string[];
58
61
  };
59
62
  /**
60
63
  * Every registered element config, keyed by GLib type name. Adwaita entries appear once `@gtkx/react/adw`
@@ -65,8 +68,9 @@ declare const ELEMENTS: Record<string, ElementConfig>;
65
68
  declare const deferredProps: (behavior: ElementBehavior) => string[];
66
69
  /**
67
70
  * Merges maps of {@link ElementConfig} keyed by GLib type name into one, concatenating each type's
68
- * behaviors in the order the maps are given (an earlier map's behaviors come first) and taking the last
69
- * lazy flag, component, and props seen. Use it to combine an app's element config with its behaviors.
71
+ * behaviors and omitted props in the order the maps are given (an earlier map's behaviors come first)
72
+ * and taking the last lazy flag, component, and props seen. Use it to combine an app's element config
73
+ * with its behaviors.
70
74
  */
71
75
  declare const mergeElementConfigs: (...maps: Record<string, ElementConfig<never>>[]) => Record<string, ElementConfig>;
72
76
  /**
@@ -80,13 +84,24 @@ declare const registerElements: (map: Record<string, ElementConfig<never>>, opti
80
84
  }) => void;
81
85
  /**
82
86
  * Identity helper that types the module named by the `elements` entry of `gtkx.config.ts`, enabling
83
- * editor autocompletion and type checking. Key each entry by GLib type name and annotate each hook's
84
- * object parameter with the concrete GObject class the behavior applies to.
87
+ * editor autocompletion and type checking. Key each entry by GLib type name and write each behavior
88
+ * with {@link defineBehavior} so its hooks receive the concrete GObject class.
85
89
  */
86
90
  declare const defineElements: (elements: Record<string, ElementConfig<never>>) => Record<string, ElementConfig<never>>;
91
+ /**
92
+ * Types one behavior against the GObject class it applies to, so every hook's object parameter is
93
+ * inferred rather than annotated by hand. Pass the class as the type argument.
94
+ *
95
+ * ```ts
96
+ * defineElements({
97
+ * GtkFrame: { behaviors: [defineBehavior<Gtk.Frame>({ attach: (frame, child) => frame.setChild(child) })] },
98
+ * });
99
+ * ```
100
+ */
101
+ declare const defineBehavior: <T extends GObject.Object>(hooks: ElementBehavior<T>) => ElementBehavior<never>;
87
102
  /** Spreads one config across many GLib type names. */
88
103
  declare const forTypes: (types: string[], config: ElementConfig<never>) => Record<string, ElementConfig<never>>;
89
104
  /** References a base props interface exported from `@gtkx/react/internal`. */
90
105
  declare const internal: (name: string) => ModuleExport;
91
- export { ELEMENTS, deferredProps, mergeElementConfigs, registerElements, defineElements, forTypes, internal, type Props, type PlaceInfo, type DetachInfo, type ElementBehavior, type ModuleExport, type ElementConfig, };
106
+ export { ELEMENTS, deferredProps, mergeElementConfigs, registerElements, defineElements, defineBehavior, forTypes, internal, type Props, type PlaceInfo, type DetachInfo, type ElementBehavior, type ModuleExport, type ElementConfig, };
92
107
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/reconciler/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/reconciler/registry.ts"],"names":[],"mappings":"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"}