@gtkx/react 1.2.1 → 1.3.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":"host-config.js","sourceRoot":"","sources":["../../src/reconciler/host-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAiB,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAE7G,OAAO,eAAe,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EACH,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,cAAc,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAEH,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,YAAY,EAGZ,SAAS,EACT,UAAU,GAEb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACH,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,aAAa,EACb,kBAAkB,GACrB,MAAM,WAAW,CAAC;AAWnB,MAAM,gBAAgB,GAAG,eAAe,CAAC,OAAO,CAAC;AACjD,MAAM,YAAY,GAA0B,EAAE,CAAC;AAC/C,MAAM,cAAc,GAAiC,IAAI,OAAO,EAAE,CAAC;AACnE,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;AAEzC,MAAM,UAAU,GAAG;IACf,mBAAmB,EAAE,aAAa;IAClC,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,KAAK;IAC1B,iBAAiB,EAAE,KAAK;IACxB,kBAAkB,EAAE,IAAI;IACxB,iBAAiB,EAAE,CAAC,EAAc,EAAQ,EAAE;QACxC,cAAc,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,iBAAiB,EAAE,IAAI;IACvB,SAAS,EAAE,CAAC,CAAC;IACb,eAAe,EAAE,CAAC,EAAmC,EAAE,KAAc,EAAiC,EAAE,CACpG,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC;IACzB,aAAa,EAAE,CAAC,EAAiC,EAAQ,EAAE;QACvD,YAAY,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,cAAc,EAAE,CAAC,IAAY,EAAE,KAAY,EAAY,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;IACjF,kBAAkB,EAAE,CAAC,IAAY,EAAY,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;IACpE,kBAAkB,EAAE,CAAC,MAAgB,EAAE,KAAc,EAAQ,EAAE;QAC3D,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,uBAAuB,EAAE,CAAC,QAAkB,EAAE,KAAa,EAAE,KAAY,EAAW,EAAE;QAClF,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,oBAAoB,EAAE,GAAY,EAAE,CAAC,KAAK;IAC1C,kBAAkB,EAAE,GAA0B,EAAE,CAAC,YAAY;IAC7D,mBAAmB,EAAE,CAAC,MAA6B,EAAyB,EAAE,CAAC,MAAM;IACrF,iBAAiB,EAAE,CAAC,QAAkB,EAAU,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;IAC9E,gBAAgB,EAAE,GAAS,EAAE,CAAC,IAAI;IAClC,gBAAgB,EAAE,GAAS,EAAE;QACzB,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,CAAC;IACtB,CAAC;IACD,kBAAkB,EAAE,GAAS,EAAE,CAAC,SAAS;IACzC,cAAc,EAAE,GAAS,EAAE,CAAC,SAAS;IACrC,WAAW,EAAE,CAAC,MAAgB,EAAE,KAAc,EAAQ,EAAE;QACpD,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,sBAAsB,EAAE,CAAC,SAAoB,EAAE,KAAc,EAAQ,EAAE;QACnE,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,YAAY,EAAE,CAAC,MAAgB,EAAE,KAAc,EAAE,MAAe,EAAQ,EAAE;QACtE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,uBAAuB,EAAE,CAAC,SAAoB,EAAE,KAAc,EAAE,MAAe,EAAQ,EAAE;QACrF,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,WAAW,EAAE,CAAC,MAAgB,EAAE,KAAc,EAAQ,EAAE;QACpD,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,wBAAwB,EAAE,CAAC,SAAoB,EAAE,KAAc,EAAQ,EAAE;QACrE,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,gBAAgB,EAAE,CAAC,YAAsB,EAAE,OAAe,EAAE,OAAe,EAAQ,EAAE;QACjF,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC;QAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAEzC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YAClF,aAAa,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IACD,YAAY,EAAE,CAAC,QAAkB,EAAE,KAAa,EAAE,SAAgB,EAAE,SAAgB,EAAQ,EAAE;QAC1F,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,YAAY,EAAE,CAAC,QAAkB,EAAQ,EAAE;QACvC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,cAAc,EAAE,CAAC,QAAkB,EAAE,KAAY,EAAQ,EAAE;QACvD,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,gBAAgB,EAAE,GAAS,EAAE,CAAC,SAAS;IACvC,kBAAkB,EAAE,GAAS,EAAE,CAAC,SAAS;IACzC,qBAAqB,EAAE,CAAC,QAAkB,EAAQ,EAAE;QAChD,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAClE,qBAAqB,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IACD,mBAAmB,EAAE,GAAS,EAAE,CAAC,IAAI;IACrC,wBAAwB,EAAE,GAAS,EAAE,CAAC,SAAS;IAC/C,uBAAuB,EAAE,GAAS,EAAE,CAAC,SAAS;IAC9C,kBAAkB,EAAE,GAAS,EAAE,CAAC,SAAS;IACzC,oBAAoB,EAAE,GAAS,EAAE,CAAC,IAAI;IACtC,wBAAwB,EAAE,CAAC,IAAY,EAAQ,EAAE;QAC7C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,wBAAwB,EAAE,GAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;IACtD,qBAAqB,EAAE,GAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACjH,iBAAiB,EAAE,GAAS,EAAE,CAAC,SAAS;IACxC,wBAAwB,EAAE,GAAS,EAAE,CAAC,SAAS;IAC/C,4BAA4B,EAAE,GAAY,EAAE,CAAC,KAAK;IAClD,mBAAmB,EAAE,GAAS,EAAE,CAAC,SAAS;IAC1C,gBAAgB,EAAE,GAAS,EAAE,CAAC,IAAI;IAClC,qBAAqB,EAAE,GAAW,EAAE,CAAC,CAAC,CAAC;IACvC,gBAAgB,EAAE,GAAY,EAAE,CAAC,KAAK;IACtC,eAAe,EAAE,GAAY,EAAE,CAAC,IAAI;IACpC,qBAAqB,EAAE,GAAS,EAAE,CAAC,SAAS;IAC5C,eAAe,EAAE,GAAS,EAAE,CAAC,SAAS;IACtC,sBAAsB,EAAE,GAAS,EAAE,CAAC,IAAI;IACxC,oBAAoB,EAAE,IAAI;IAC1B,qBAAqB,EAAE,aAAa,CAAC,IAAI,CAAkD;CAC9F,CAAC;AAEF,MAAM,UAAU,GACZ,eAAe,CAAC,UAAU,CAAC,CAAC;AAEhC,SAAS,qBAAqB;IAC1B,IAAI,OAAO,GAAW,eAAe,CAAC;IAEtC,OAAO;QACH,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO;QAClB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACV,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;YACjB,MAAM,QAAQ,GAAG,OAAO,CAAC;YACzB,OAAO,GAAG,qBAAqB,CAAC;YAEhC,IAAI,CAAC;gBACD,OAAO,EAAE,EAAE,CAAC;YAChB,CAAC;oBAAS,CAAC;gBACP,OAAO,GAAG,QAAQ,CAAC;YACvB,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC1E,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACjC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAExC,OAAO;IACX,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC3D,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,SAAoB,EAAE,KAAc,EAAE,MAAsB,EAAQ,EAAE;IAC7F,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,WAAW,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,SAAoB,EAAE,KAAc,EAAQ,EAAE;IACvE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,WAAW,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAkB,EAAU,EAAE;IACrD,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC;IACxC,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,QAAkB,EAAE,SAAkB,EAAQ,EAAE;IACtE,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC;QAC1E,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,SAAyB,EAAe,EAAE;IAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,WAAuB,CAAC,CAAC,CAAC;IAEvE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,SAAyB,EAAe,EAAE,CACxE,WAAW,CAAC,cAAc,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAE3D,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAY,EAAY,EAAE;IACxD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,cAAc,CAAC,KAAK,CAAC,QAAkB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEpE,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC7B,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAkB,CAAC","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { type AnyClass, getClassType, 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 packageManifest from \"../../package.json\" with { type: \"json\" };\nimport { Prop } from \"../components/element.js\";\nimport {\n applyAdoptedProps,\n applyElementProps,\n assertPropsCanChange,\n flushAccessible,\n flushBehaviors,\n} from \"./apply-props.js\";\nimport { attachChild, detachChild } from \"./child-routing.js\";\nimport { resolveElementNode } from \"./instance.js\";\nimport {\n type AnyNode,\n createElementNode,\n createPropNode,\n createTextNode,\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/** What a tree is rendered into: any GObject, or the {@link RootElement} marker to render at the top level. */\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 RENDERER_VERSION = packageManifest.version;\nconst HOST_CONTEXT: Record<string, never> = {};\nconst containerNodes: WeakMap<object, ElementNode> = new WeakMap();\nconst priority = createPriorityTracker();\n\nconst hostConfig = {\n rendererPackageName: \"@gtkx/react\",\n rendererVersion: RENDERER_VERSION,\n supportsMutation: true,\n supportsPersistence: false,\n supportsHydration: false,\n supportsMicrotasks: true,\n scheduleMicrotask: (fn: () => void): void => {\n queueMicrotask(fn);\n },\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 validateContentMix(instance, props);\n }\n\n return false;\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 flushAccessible();\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 } 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 assertPropsCanChange(instance.typeName, prev, next);\n applyElementProps(instance, prev, next);\n\n return;\n }\n\n if (instance.kind === LAZY_KIND && instance.adopted !== null) {\n assertPropsCanChange(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 adoptContainer = (container: GObject.Object): ElementNode => {\n const name = typeName(getClassType(container.constructor as AnyClass));\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, priority.withDiscrete, 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, priority.withDiscrete);\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 { type AnyClass, getClassType, 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 packageManifest from \"../../package.json\" with { type: \"json\" };\nimport { Prop } from \"../components/element.js\";\nimport {\n applyAdoptedProps,\n applyElementProps,\n assertPropsCanChange,\n flushAccessible,\n flushBehaviors,\n} from \"./apply-props.js\";\nimport { attachChild, detachChild } from \"./child-routing.js\";\nimport { resolveElementNode } from \"./instance.js\";\nimport {\n type AnyNode,\n createElementNode,\n createPropNode,\n createTextNode,\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 { releaseStyle } from \"./style.js\";\nimport {\n didUpdateTextSurgically,\n enclosingHost,\n flushTextHosts,\n markTextDirty,\n validateContentMix,\n} from \"./text.js\";\n\n/** What a tree is rendered into: any GObject, or the {@link RootElement} marker to render at the top level. */\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 RENDERER_VERSION = packageManifest.version;\nconst HOST_CONTEXT: Record<string, never> = {};\nconst containerNodes: WeakMap<object, ElementNode> = new WeakMap();\nconst priority = createPriorityTracker();\n\nconst hostConfig = {\n rendererPackageName: \"@gtkx/react\",\n rendererVersion: RENDERER_VERSION,\n supportsMutation: true,\n supportsPersistence: false,\n supportsHydration: false,\n supportsMicrotasks: true,\n scheduleMicrotask: (fn: () => void): void => {\n queueMicrotask(fn);\n },\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 validateContentMix(instance, props);\n }\n\n return false;\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 flushAccessible();\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 detachElement(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 detachElement = (instance: ElementNode): void => {\n disconnectAllHandlers(instance);\n\n if (instance.object instanceof Gtk.Widget) {\n releaseStyle(instance.object);\n }\n};\n\nconst updateInstance = (instance: Instance, prev: Props, next: Props): void => {\n if (instance.kind === ELEMENT_KIND) {\n assertPropsCanChange(instance.typeName, prev, next);\n applyElementProps(instance, prev, next);\n\n return;\n }\n\n if (instance.kind === LAZY_KIND && instance.adopted !== null) {\n assertPropsCanChange(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 adoptContainer = (container: GObject.Object): ElementNode => {\n const name = typeName(getClassType(container.constructor as AnyClass));\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, priority.withDiscrete, 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, priority.withDiscrete);\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"]}
@@ -0,0 +1,6 @@
1
+ import type * as Gtk from "@gtkx/gi/gtk";
2
+ declare const styleClass: (widget: Gtk.Widget) => string | null;
3
+ declare const releaseStyle: (widget: Gtk.Widget) => void;
4
+ declare const applyStyle: (widget: Gtk.Widget, style: unknown) => string | null;
5
+ export { applyStyle, releaseStyle, styleClass };
6
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/reconciler/style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AA2BzC,QAAA,MAAM,UAAU,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAA6C,CAAC;AAEhG,QAAA,MAAM,YAAY,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,IAe1C,CAAC;AAoBF,QAAA,MAAM,UAAU,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,OAAO,KAAG,MAAM,GAAG,IAgBjE,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { attachParsingErrorLogger, registerProviderForDefaultDisplay, scopedRule } from "@gtkx/css/internal";
2
+ import { STYLE_PROVIDER_PRIORITY_APPLICATION } from "@gtkx/gi/gtk";
3
+ import { createLogger } from "@gtkx/utils";
4
+ import { applyWrite } from "./signals.js";
5
+ const CLASS_PREFIX = "gtkx-s";
6
+ const STYLE_PRIORITY = STYLE_PROVIDER_PRIORITY_APPLICATION + 1;
7
+ const log = createLogger("react");
8
+ const styles = new WeakMap();
9
+ const pool = [];
10
+ const counter = { next: 0 };
11
+ const reclaimed = new FinalizationRegistry((slot) => {
12
+ pool.push(slot);
13
+ });
14
+ const createSlot = () => {
15
+ counter.next += 1;
16
+ const provider = registerProviderForDefaultDisplay({ priority: STYLE_PRIORITY, followsPreferences: false });
17
+ attachParsingErrorLogger(provider, log, "a style prop");
18
+ return { provider, className: `${CLASS_PREFIX}${counter.next.toString()}`, css: "" };
19
+ };
20
+ const styleClass = (widget) => styles.get(widget)?.className ?? null;
21
+ const releaseStyle = (widget) => {
22
+ const slot = styles.get(widget);
23
+ if (slot === undefined) {
24
+ return;
25
+ }
26
+ styles.delete(widget);
27
+ reclaimed.unregister(widget);
28
+ applyWrite(() => {
29
+ widget.removeCssClass(slot.className);
30
+ });
31
+ pool.push(slot);
32
+ };
33
+ const ensureSlot = (widget) => {
34
+ const existing = styles.get(widget);
35
+ if (existing !== undefined) {
36
+ return existing;
37
+ }
38
+ const slot = pool.pop() ?? createSlot();
39
+ styles.set(widget, slot);
40
+ reclaimed.register(widget, slot, widget);
41
+ applyWrite(() => {
42
+ widget.addCssClass(slot.className);
43
+ });
44
+ return slot;
45
+ };
46
+ const applyStyle = (widget, style) => {
47
+ if (typeof style !== "object" || style === null) {
48
+ releaseStyle(widget);
49
+ return null;
50
+ }
51
+ const slot = ensureSlot(widget);
52
+ const css = scopedRule(slot.className, style);
53
+ if (css !== slot.css) {
54
+ slot.css = css;
55
+ slot.provider.loadFromString(css);
56
+ }
57
+ return slot.className;
58
+ };
59
+ export { applyStyle, releaseStyle, styleClass };
60
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/reconciler/style.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport { attachParsingErrorLogger, registerProviderForDefaultDisplay, scopedRule } from \"@gtkx/css/internal\";\nimport { STYLE_PROVIDER_PRIORITY_APPLICATION } from \"@gtkx/gi/gtk\";\nimport { createLogger, type Logger } from \"@gtkx/utils\";\nimport { applyWrite } from \"./signals.js\";\n\ntype StyleSlot = { provider: Gtk.CssProvider; className: string; css: string };\n\nconst CLASS_PREFIX = \"gtkx-s\";\nconst STYLE_PRIORITY = STYLE_PROVIDER_PRIORITY_APPLICATION + 1;\nconst log: Logger = createLogger(\"react\");\nconst styles: WeakMap<Gtk.Widget, StyleSlot> = new WeakMap();\nconst pool: StyleSlot[] = [];\nconst counter: { next: number } = { next: 0 };\n\nconst reclaimed: FinalizationRegistry<StyleSlot> = new FinalizationRegistry((slot) => {\n pool.push(slot);\n});\n\nconst createSlot = (): StyleSlot => {\n counter.next += 1;\n const provider = registerProviderForDefaultDisplay({ priority: STYLE_PRIORITY, followsPreferences: false });\n attachParsingErrorLogger(provider, log, \"a style prop\");\n\n return { provider, className: `${CLASS_PREFIX}${counter.next.toString()}`, css: \"\" };\n};\n\nconst styleClass = (widget: Gtk.Widget): string | null => styles.get(widget)?.className ?? null;\n\nconst releaseStyle = (widget: Gtk.Widget): void => {\n const slot = styles.get(widget);\n\n if (slot === undefined) {\n return;\n }\n\n styles.delete(widget);\n reclaimed.unregister(widget);\n\n applyWrite(() => {\n widget.removeCssClass(slot.className);\n });\n\n pool.push(slot);\n};\n\nconst ensureSlot = (widget: Gtk.Widget): StyleSlot => {\n const existing = styles.get(widget);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const slot = pool.pop() ?? createSlot();\n styles.set(widget, slot);\n reclaimed.register(widget, slot, widget);\n\n applyWrite(() => {\n widget.addCssClass(slot.className);\n });\n\n return slot;\n};\n\nconst applyStyle = (widget: Gtk.Widget, style: unknown): string | null => {\n if (typeof style !== \"object\" || style === null) {\n releaseStyle(widget);\n\n return null;\n }\n\n const slot = ensureSlot(widget);\n const css = scopedRule(slot.className, style);\n\n if (css !== slot.css) {\n slot.css = css;\n slot.provider.loadFromString(css);\n }\n\n return slot.className;\n};\n\nexport { applyStyle, releaseStyle, styleClass };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"accessible-props.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-props.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accessible-props.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-props.ts"],"names":[],"mappings":"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"}
@@ -70,41 +70,47 @@ function buildRelation(relation, type) {
70
70
  type,
71
71
  };
72
72
  }
73
+ const initValue = (gtype, populate) => {
74
+ const value = new GObject.Value();
75
+ value.init(gtype);
76
+ populate(value);
77
+ return value;
78
+ };
73
79
  const buildValue = (descriptor, jsValue) => {
74
80
  switch (descriptor.type) {
75
81
  case "string": {
76
- return GObject.buildValue(GObject.TYPE_STRING, (v) => {
82
+ return initValue(GObject.TYPE_STRING, (v) => {
77
83
  v.setString(jsValue);
78
84
  });
79
85
  }
80
86
  case "boolean": {
81
- return GObject.buildValue(GObject.TYPE_BOOLEAN, (v) => {
87
+ return initValue(GObject.TYPE_BOOLEAN, (v) => {
82
88
  v.setBoolean(jsValue);
83
89
  });
84
90
  }
85
91
  case "optionalBoolean": {
86
- return GObject.buildValue(GObject.TYPE_INT, (v) => {
92
+ return initValue(GObject.TYPE_INT, (v) => {
87
93
  v.setInt(jsValue === true ? 1 : 0);
88
94
  });
89
95
  }
90
96
  case "int": {
91
- return GObject.buildValue(GObject.TYPE_INT, (v) => {
97
+ return initValue(GObject.TYPE_INT, (v) => {
92
98
  v.setInt(jsValue);
93
99
  });
94
100
  }
95
101
  case "double": {
96
- return GObject.buildValue(GObject.TYPE_DOUBLE, (v) => {
102
+ return initValue(GObject.TYPE_DOUBLE, (v) => {
97
103
  v.setDouble(jsValue);
98
104
  });
99
105
  }
100
106
  case "object": {
101
- return GObject.buildValue(GObject.TYPE_OBJECT, (v) => {
107
+ return initValue(GObject.TYPE_OBJECT, (v) => {
102
108
  v.setObject(jsValue);
103
109
  });
104
110
  }
105
111
  case "list": {
106
112
  const list = Gtk.AccessibleList.newFromList(jsValue);
107
- return GObject.buildValue(Gtk.AccessibleList.prototype.__type__, (v) => {
113
+ return initValue(Gtk.AccessibleList.prototype.__type__, (v) => {
108
114
  v.setBoxed(list);
109
115
  });
110
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"accessible-props.js","sourceRoot":"","sources":["../../src/utils/accessible-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAgIpC,MAAM,mBAAmB,GAAwD;IAC7E,sBAAsB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC;IACjF,qBAAqB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC;IAClF,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9E,sBAAsB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC;IACrF,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC;IACtE,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC;IACnE,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC;IACvE,mBAAmB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC;IAChF,yBAAyB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,CAAC;IAC5F,qBAAqB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC;IAC/E,qBAAqB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC;IAClF,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9E,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7E,yBAAyB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC;IAC3F,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;IACjE,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7E,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7E,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7E,mBAAmB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC/E,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7E,cAAc,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC;IAC/D,iBAAiB,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC;IACjE,kBAAkB,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC;IACvE,kBAAkB,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAC/E,gBAAgB,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC;IACnE,iBAAiB,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC;IACjE,iBAAiB,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC;IACjE,kBAAkB,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAC/E,iBAAiB,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAC7E,0BAA0B,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,QAAQ,CAAC;IAC7F,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1E,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1E,sBAAsB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC;IACtF,iBAAiB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC;IACxE,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1E,qBAAqB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,CAAC;IACjF,iBAAiB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC;IACxE,sBAAsB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC;IACnF,gBAAgB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC;IACvE,oBAAoB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC;IAC/E,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC;IAClE,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3E,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1E,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1E,sBAAsB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC;IACtF,iBAAiB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC;IACxE,iBAAiB,EAAE,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC;CAC3E,CAAC;AAEF,SAAS,aAAa,CAAC,QAAgC,EAAE,IAAyB;IAC9E,OAAO;QACH,IAAI,EAAE,UAAU;QAChB,QAAQ;QACR,IAAI;KACP,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,KAA0B,EAAE,IAAyB;IACrE,OAAO;QACH,IAAI,EAAE,OAAO;QACb,KAAK;QACL,IAAI;KACP,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,QAAgC,EAAE,IAAyB;IAC9E,OAAO;QACH,IAAI,EAAE,UAAU;QAChB,QAAQ;QACR,IAAI;KACP,CAAC;AACN,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,UAAgC,EAAE,OAAgB,EAAiB,EAAE;IACrF,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;gBACjD,CAAC,CAAC,SAAS,CAAC,OAAiB,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;gBAClD,CAAC,CAAC,UAAU,CAAC,OAAkB,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACrB,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC9C,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACT,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC9C,CAAC,CAAC,MAAM,CAAC,OAAiB,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;gBACjD,CAAC,CAAC,SAAS,CAAC,OAAiB,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;gBACjD,CAAC,CAAC,SAAS,CAAC,OAAgC,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,OAA2B,CAAC,CAAC;YAEzE,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACnE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAiC,EAAE,CACrE,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AAE7C,SAAS,eAAe,CAAC,MAAsB,EAAE,UAAgC,EAAE,QAAiB;IAChG,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAE/C,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,MAAM;QACV,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,MAAM;QACV,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,MAAM;QACV,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,MAAsB,EAAE,UAAgC;IAC7E,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM;QACV,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM;QACV,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM;QACV,CAAC;IACL,CAAC;AACL,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAsB,EAAE,IAA2B,EAAE,QAAiB,EAAQ,EAAE;IACtG,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACnB,eAAe,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACJ,eAAe,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAsB,EAAE,QAAe,EAAQ,EAAE;IACxE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,SAAS;QACb,CAAC;QAED,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,QAAe,EAAE,QAAe,EAAiC,EAAE,CAC9G,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;AAE7F,MAAM,iBAAiB,GAAG,CAAC,MAAsB,EAAE,QAAe,EAAE,QAAe,EAAQ,EAAE;IACzF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrD,SAAS;QACb,CAAC;QAED,eAAe,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,MAAsB,EAAE,QAAsB,EAAE,QAAe,EAAQ,EAAE;IACnG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEpC,IAAI,QAAQ,EAAE,CAAC;QACX,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAwB,CAAC","sourcesContent":["import * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport type { Props } from \"../reconciler/registry.js\";\n\n/**\n * Accessibility props available on every widget. Each member maps to a GTK4 accessible attribute\n * (a `Gtk.AccessibleProperty`, `Gtk.AccessibleState`, or `Gtk.AccessibleRelation`) and is applied\n * to the widget's accessible interface. Setting a member to `null` or `undefined`, or dropping it from the\n * props, resets that attribute to its default.\n */\ntype AccessibleProps = {\n /** How the widget completes the text being typed into it. */\n accessibleAutocomplete?: Gtk.AccessibleAutocomplete | null | undefined;\n /** Longer description announced after the label. */\n accessibleDescription?: string | null | undefined;\n /** Whether activating the widget opens a popup. */\n accessibleHasPopup?: boolean | null | undefined;\n /** Keyboard shortcuts that activate the widget. */\n accessibleKeyShortcuts?: string | null | undefined;\n /** Short name announced for the widget. */\n accessibleLabel?: string | null | undefined;\n /** Depth of the widget within a hierarchy of headings, list items, or tree rows. */\n accessibleLevel?: number | null | undefined;\n /** Whether the widget blocks interaction with everything behind it. */\n accessibleModal?: boolean | null | undefined;\n /** Whether the text input accepts more than one line. */\n accessibleMultiLine?: boolean | null | undefined;\n /** Whether more than one of the widget's items can be selected at a time. */\n accessibleMultiSelectable?: boolean | null | undefined;\n /** Whether the widget arranges its items horizontally or vertically. */\n accessibleOrientation?: Gtk.Orientation | null | undefined;\n /** Hint announced while the input is empty. */\n accessiblePlaceholder?: string | null | undefined;\n /** Whether the value can be read but not changed. */\n accessibleReadOnly?: boolean | null | undefined;\n /** Whether a value has to be supplied before the form can be submitted. */\n accessibleRequired?: boolean | null | undefined;\n /** Wording that replaces the default announcement of the widget's role. */\n accessibleRoleDescription?: string | null | undefined;\n /** Direction the widget's items are sorted in. */\n accessibleSort?: Gtk.AccessibleSort | null | undefined;\n /** Upper bound of the widget's value range. */\n accessibleValueMax?: number | null | undefined;\n /** Lower bound of the widget's value range. */\n accessibleValueMin?: number | null | undefined;\n /** Current value within the widget's range. */\n accessibleValueNow?: number | null | undefined;\n /** Wording announced in place of the numeric value. */\n accessibleValueText?: string | null | undefined;\n /** Help text describing how to use the widget. */\n accessibleHelpText?: string | null | undefined;\n /** Whether the widget is still loading and its content may yet change. */\n accessibleBusy?: boolean | null | undefined;\n /** Checked state of a check button or menu item, which may be mixed. */\n accessibleChecked?: Gtk.AccessibleTristate | null | undefined;\n /** Whether the widget is visible but cannot be edited or operated. */\n accessibleDisabled?: boolean | null | undefined;\n /** Whether the content the widget discloses is showing. */\n accessibleExpanded?: boolean | null | undefined;\n /** Whether the widget is kept out of the accessibility tree. */\n accessibleHidden?: boolean | null | undefined;\n /** Whether the entered value fails validation, and in what way. */\n accessibleInvalid?: Gtk.AccessibleInvalidState | null | undefined;\n /** Pressed state of a toggle button, which may be mixed. */\n accessiblePressed?: Gtk.AccessibleTristate | null | undefined;\n /** Whether the widget is selected within its container. */\n accessibleSelected?: boolean | null | undefined;\n /** Whether the link has already been followed. */\n accessibleVisited?: boolean | null | undefined;\n /** Descendant that holds the focus while the widget itself keeps it. */\n accessibleActiveDescendant?: Gtk.Accessible | null | undefined;\n /** Total number of columns in the table, including any that are not rendered. */\n accessibleColCount?: number | null | undefined;\n /** One-based column position of the cell within its table. */\n accessibleColIndex?: number | null | undefined;\n /** Wording announced in place of the numeric column position. */\n accessibleColIndexText?: string | null | undefined;\n /** Number of columns the cell spans. */\n accessibleColSpan?: number | null | undefined;\n /** Widgets whose content or presence this widget controls. */\n accessibleControls?: Gtk.Accessible[] | null | undefined;\n /** Widgets that describe this one. */\n accessibleDescribedBy?: Gtk.Accessible[] | null | undefined;\n /** Widgets holding extended detail about this one. */\n accessibleDetails?: Gtk.Accessible[] | null | undefined;\n /** Widgets holding the message that explains why the value is invalid. */\n accessibleErrorMessage?: Gtk.Accessible[] | null | undefined;\n /** Widgets to read next, overriding the default reading order. */\n accessibleFlowTo?: Gtk.Accessible[] | null | undefined;\n /** Widgets that label this one. */\n accessibleLabelledBy?: Gtk.Accessible[] | null | undefined;\n /** Widgets this one owns that the widget hierarchy does not already imply. */\n accessibleOwns?: Gtk.Accessible[] | null | undefined;\n /** One-based position of the widget within its set. */\n accessiblePosInSet?: number | null | undefined;\n /** Total number of rows in the table, including any that are not rendered. */\n accessibleRowCount?: number | null | undefined;\n /** One-based row position of the cell within its table. */\n accessibleRowIndex?: number | null | undefined;\n /** Wording announced in place of the numeric row position. */\n accessibleRowIndexText?: string | null | undefined;\n /** Number of rows the cell spans. */\n accessibleRowSpan?: number | null | undefined;\n /** Total number of items in the set the widget belongs to. */\n accessibleSetSize?: number | null | undefined;\n};\n\ntype AccessibleValueType = \"string\" | \"boolean\" | \"optionalBoolean\" | \"int\" | \"double\" | \"object\" | \"list\";\n\ntype AccessiblePropertyDescriptor = {\n kind: \"property\";\n property: Gtk.AccessibleProperty;\n type: AccessibleValueType;\n};\n\ntype AccessibleStateDescriptor = {\n kind: \"state\";\n state: Gtk.AccessibleState;\n type: AccessibleValueType;\n};\n\ntype AccessibleRelationDescriptor = {\n kind: \"relation\";\n relation: Gtk.AccessibleRelation;\n type: AccessibleValueType;\n};\n\ntype AccessibleDescriptor = AccessiblePropertyDescriptor | AccessibleStateDescriptor | AccessibleRelationDescriptor;\n\nconst ACCESSIBLE_PROP_MAP: Record<keyof AccessibleProps, AccessibleDescriptor> = {\n accessibleAutocomplete: buildProperty(Gtk.AccessibleProperty.AUTOCOMPLETE, \"int\"),\n accessibleDescription: buildProperty(Gtk.AccessibleProperty.DESCRIPTION, \"string\"),\n accessibleHasPopup: buildProperty(Gtk.AccessibleProperty.HAS_POPUP, \"boolean\"),\n accessibleKeyShortcuts: buildProperty(Gtk.AccessibleProperty.KEY_SHORTCUTS, \"string\"),\n accessibleLabel: buildProperty(Gtk.AccessibleProperty.LABEL, \"string\"),\n accessibleLevel: buildProperty(Gtk.AccessibleProperty.LEVEL, \"int\"),\n accessibleModal: buildProperty(Gtk.AccessibleProperty.MODAL, \"boolean\"),\n accessibleMultiLine: buildProperty(Gtk.AccessibleProperty.MULTI_LINE, \"boolean\"),\n accessibleMultiSelectable: buildProperty(Gtk.AccessibleProperty.MULTI_SELECTABLE, \"boolean\"),\n accessibleOrientation: buildProperty(Gtk.AccessibleProperty.ORIENTATION, \"int\"),\n accessiblePlaceholder: buildProperty(Gtk.AccessibleProperty.PLACEHOLDER, \"string\"),\n accessibleReadOnly: buildProperty(Gtk.AccessibleProperty.READ_ONLY, \"boolean\"),\n accessibleRequired: buildProperty(Gtk.AccessibleProperty.REQUIRED, \"boolean\"),\n accessibleRoleDescription: buildProperty(Gtk.AccessibleProperty.ROLE_DESCRIPTION, \"string\"),\n accessibleSort: buildProperty(Gtk.AccessibleProperty.SORT, \"int\"),\n accessibleValueMax: buildProperty(Gtk.AccessibleProperty.VALUE_MAX, \"double\"),\n accessibleValueMin: buildProperty(Gtk.AccessibleProperty.VALUE_MIN, \"double\"),\n accessibleValueNow: buildProperty(Gtk.AccessibleProperty.VALUE_NOW, \"double\"),\n accessibleValueText: buildProperty(Gtk.AccessibleProperty.VALUE_TEXT, \"string\"),\n accessibleHelpText: buildProperty(Gtk.AccessibleProperty.HELP_TEXT, \"string\"),\n accessibleBusy: buildState(Gtk.AccessibleState.BUSY, \"boolean\"),\n accessibleChecked: buildState(Gtk.AccessibleState.CHECKED, \"int\"),\n accessibleDisabled: buildState(Gtk.AccessibleState.DISABLED, \"boolean\"),\n accessibleExpanded: buildState(Gtk.AccessibleState.EXPANDED, \"optionalBoolean\"),\n accessibleHidden: buildState(Gtk.AccessibleState.HIDDEN, \"boolean\"),\n accessibleInvalid: buildState(Gtk.AccessibleState.INVALID, \"int\"),\n accessiblePressed: buildState(Gtk.AccessibleState.PRESSED, \"int\"),\n accessibleSelected: buildState(Gtk.AccessibleState.SELECTED, \"optionalBoolean\"),\n accessibleVisited: buildState(Gtk.AccessibleState.VISITED, \"optionalBoolean\"),\n accessibleActiveDescendant: buildRelation(Gtk.AccessibleRelation.ACTIVE_DESCENDANT, \"object\"),\n accessibleColCount: buildRelation(Gtk.AccessibleRelation.COL_COUNT, \"int\"),\n accessibleColIndex: buildRelation(Gtk.AccessibleRelation.COL_INDEX, \"int\"),\n accessibleColIndexText: buildRelation(Gtk.AccessibleRelation.COL_INDEX_TEXT, \"string\"),\n accessibleColSpan: buildRelation(Gtk.AccessibleRelation.COL_SPAN, \"int\"),\n accessibleControls: buildRelation(Gtk.AccessibleRelation.CONTROLS, \"list\"),\n accessibleDescribedBy: buildRelation(Gtk.AccessibleRelation.DESCRIBED_BY, \"list\"),\n accessibleDetails: buildRelation(Gtk.AccessibleRelation.DETAILS, \"list\"),\n accessibleErrorMessage: buildRelation(Gtk.AccessibleRelation.ERROR_MESSAGE, \"list\"),\n accessibleFlowTo: buildRelation(Gtk.AccessibleRelation.FLOW_TO, \"list\"),\n accessibleLabelledBy: buildRelation(Gtk.AccessibleRelation.LABELLED_BY, \"list\"),\n accessibleOwns: buildRelation(Gtk.AccessibleRelation.OWNS, \"list\"),\n accessiblePosInSet: buildRelation(Gtk.AccessibleRelation.POS_IN_SET, \"int\"),\n accessibleRowCount: buildRelation(Gtk.AccessibleRelation.ROW_COUNT, \"int\"),\n accessibleRowIndex: buildRelation(Gtk.AccessibleRelation.ROW_INDEX, \"int\"),\n accessibleRowIndexText: buildRelation(Gtk.AccessibleRelation.ROW_INDEX_TEXT, \"string\"),\n accessibleRowSpan: buildRelation(Gtk.AccessibleRelation.ROW_SPAN, \"int\"),\n accessibleSetSize: buildRelation(Gtk.AccessibleRelation.SET_SIZE, \"int\"),\n};\n\nfunction buildProperty(property: Gtk.AccessibleProperty, type: AccessibleValueType): AccessiblePropertyDescriptor {\n return {\n kind: \"property\",\n property,\n type,\n };\n}\n\nfunction buildState(state: Gtk.AccessibleState, type: AccessibleValueType): AccessibleStateDescriptor {\n return {\n kind: \"state\",\n state,\n type,\n };\n}\n\nfunction buildRelation(relation: Gtk.AccessibleRelation, type: AccessibleValueType): AccessibleRelationDescriptor {\n return {\n kind: \"relation\",\n relation,\n type,\n };\n}\n\nconst buildValue = (descriptor: AccessibleDescriptor, jsValue: unknown): GObject.Value => {\n switch (descriptor.type) {\n case \"string\": {\n return GObject.buildValue(GObject.TYPE_STRING, (v) => {\n v.setString(jsValue as string);\n });\n }\n case \"boolean\": {\n return GObject.buildValue(GObject.TYPE_BOOLEAN, (v) => {\n v.setBoolean(jsValue as boolean);\n });\n }\n case \"optionalBoolean\": {\n return GObject.buildValue(GObject.TYPE_INT, (v) => {\n v.setInt(jsValue === true ? 1 : 0);\n });\n }\n case \"int\": {\n return GObject.buildValue(GObject.TYPE_INT, (v) => {\n v.setInt(jsValue as number);\n });\n }\n case \"double\": {\n return GObject.buildValue(GObject.TYPE_DOUBLE, (v) => {\n v.setDouble(jsValue as number);\n });\n }\n case \"object\": {\n return GObject.buildValue(GObject.TYPE_OBJECT, (v) => {\n v.setObject(jsValue as GObject.Object | null);\n });\n }\n case \"list\": {\n const list = Gtk.AccessibleList.newFromList(jsValue as Gtk.Accessible[]);\n\n return GObject.buildValue(Gtk.AccessibleList.prototype.__type__, (v) => {\n v.setBoxed(list);\n });\n }\n }\n};\n\nconst isAccessibleProp = (name: string): name is keyof AccessibleProps =>\n Object.hasOwn(ACCESSIBLE_PROP_MAP, name);\n\nfunction applyDescriptor(widget: Gtk.Accessible, descriptor: AccessibleDescriptor, newValue: unknown): void {\n const value = buildValue(descriptor, newValue);\n\n switch (descriptor.kind) {\n case \"property\": {\n widget.updateProperty([descriptor.property], [value]);\n break;\n }\n case \"state\": {\n widget.updateState([descriptor.state], [value]);\n break;\n }\n case \"relation\": {\n widget.updateRelation([descriptor.relation], [value]);\n break;\n }\n }\n}\n\nfunction resetDescriptor(widget: Gtk.Accessible, descriptor: AccessibleDescriptor): void {\n switch (descriptor.kind) {\n case \"property\": {\n widget.resetProperty(descriptor.property);\n break;\n }\n case \"state\": {\n widget.resetState(descriptor.state);\n break;\n }\n case \"relation\": {\n widget.resetRelation(descriptor.relation);\n break;\n }\n }\n}\n\nconst applyChangedProp = (widget: Gtk.Accessible, name: keyof AccessibleProps, newValue: unknown): void => {\n if (newValue == null) {\n resetDescriptor(widget, ACCESSIBLE_PROP_MAP[name]);\n } else {\n applyDescriptor(widget, ACCESSIBLE_PROP_MAP[name], newValue);\n }\n};\n\nconst applyChangedProps = (widget: Gtk.Accessible, newProps: Props): void => {\n for (const name in newProps) {\n if (!isAccessibleProp(name)) {\n continue;\n }\n\n applyChangedProp(widget, name, newProps[name]);\n }\n};\n\nconst isRemovedAccessibleProp = (name: string, oldProps: Props, newProps: Props): name is keyof AccessibleProps =>\n !Object.hasOwn(newProps, name) && isAccessibleProp(name) && oldProps[name] !== undefined;\n\nconst resetRemovedProps = (widget: Gtk.Accessible, oldProps: Props, newProps: Props): void => {\n for (const name in oldProps) {\n if (!isRemovedAccessibleProp(name, oldProps, newProps)) {\n continue;\n }\n\n resetDescriptor(widget, ACCESSIBLE_PROP_MAP[name]);\n }\n};\n\nconst applyAccessibleProps = (widget: Gtk.Accessible, oldProps: Props | null, newProps: Props): void => {\n applyChangedProps(widget, newProps);\n\n if (oldProps) {\n resetRemovedProps(widget, oldProps, newProps);\n }\n};\n\nexport { isAccessibleProp, applyAccessibleProps, type AccessibleProps };\n"]}
1
+ {"version":3,"file":"accessible-props.js","sourceRoot":"","sources":["../../src/utils/accessible-props.ts"],"names":[],"mappings":"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","sourcesContent":["import * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport type { Props } from \"../reconciler/registry.js\";\n\n/**\n * Accessibility props available on every widget. Each member maps to a GTK4 accessible attribute\n * (a `Gtk.AccessibleProperty`, `Gtk.AccessibleState`, or `Gtk.AccessibleRelation`) and is applied\n * to the widget's accessible interface. Setting a member to `null` or `undefined`, or dropping it from the\n * props, resets that attribute to its default.\n */\ntype AccessibleProps = {\n /** How the widget completes the text being typed into it. */\n accessibleAutocomplete?: Gtk.AccessibleAutocomplete | null | undefined;\n /** Longer description announced after the label. */\n accessibleDescription?: string | null | undefined;\n /** Whether activating the widget opens a popup. */\n accessibleHasPopup?: boolean | null | undefined;\n /** Keyboard shortcuts that activate the widget. */\n accessibleKeyShortcuts?: string | null | undefined;\n /** Short name announced for the widget. */\n accessibleLabel?: string | null | undefined;\n /** Depth of the widget within a hierarchy of headings, list items, or tree rows. */\n accessibleLevel?: number | null | undefined;\n /** Whether the widget blocks interaction with everything behind it. */\n accessibleModal?: boolean | null | undefined;\n /** Whether the text input accepts more than one line. */\n accessibleMultiLine?: boolean | null | undefined;\n /** Whether more than one of the widget's items can be selected at a time. */\n accessibleMultiSelectable?: boolean | null | undefined;\n /** Whether the widget arranges its items horizontally or vertically. */\n accessibleOrientation?: Gtk.Orientation | null | undefined;\n /** Hint announced while the input is empty. */\n accessiblePlaceholder?: string | null | undefined;\n /** Whether the value can be read but not changed. */\n accessibleReadOnly?: boolean | null | undefined;\n /** Whether a value has to be supplied before the form can be submitted. */\n accessibleRequired?: boolean | null | undefined;\n /** Wording that replaces the default announcement of the widget's role. */\n accessibleRoleDescription?: string | null | undefined;\n /** Direction the widget's items are sorted in. */\n accessibleSort?: Gtk.AccessibleSort | null | undefined;\n /** Upper bound of the widget's value range. */\n accessibleValueMax?: number | null | undefined;\n /** Lower bound of the widget's value range. */\n accessibleValueMin?: number | null | undefined;\n /** Current value within the widget's range. */\n accessibleValueNow?: number | null | undefined;\n /** Wording announced in place of the numeric value. */\n accessibleValueText?: string | null | undefined;\n /** Help text describing how to use the widget. */\n accessibleHelpText?: string | null | undefined;\n /** Whether the widget is still loading and its content may yet change. */\n accessibleBusy?: boolean | null | undefined;\n /** Checked state of a check button or menu item, which may be mixed. */\n accessibleChecked?: Gtk.AccessibleTristate | null | undefined;\n /** Whether the widget is visible but cannot be edited or operated. */\n accessibleDisabled?: boolean | null | undefined;\n /** Whether the content the widget discloses is showing. */\n accessibleExpanded?: boolean | null | undefined;\n /** Whether the widget is kept out of the accessibility tree. */\n accessibleHidden?: boolean | null | undefined;\n /** Whether the entered value fails validation, and in what way. */\n accessibleInvalid?: Gtk.AccessibleInvalidState | null | undefined;\n /** Pressed state of a toggle button, which may be mixed. */\n accessiblePressed?: Gtk.AccessibleTristate | null | undefined;\n /** Whether the widget is selected within its container. */\n accessibleSelected?: boolean | null | undefined;\n /** Whether the link has already been followed. */\n accessibleVisited?: boolean | null | undefined;\n /** Descendant that holds the focus while the widget itself keeps it. */\n accessibleActiveDescendant?: Gtk.Accessible | null | undefined;\n /** Total number of columns in the table, including any that are not rendered. */\n accessibleColCount?: number | null | undefined;\n /** One-based column position of the cell within its table. */\n accessibleColIndex?: number | null | undefined;\n /** Wording announced in place of the numeric column position. */\n accessibleColIndexText?: string | null | undefined;\n /** Number of columns the cell spans. */\n accessibleColSpan?: number | null | undefined;\n /** Widgets whose content or presence this widget controls. */\n accessibleControls?: Gtk.Accessible[] | null | undefined;\n /** Widgets that describe this one. */\n accessibleDescribedBy?: Gtk.Accessible[] | null | undefined;\n /** Widgets holding extended detail about this one. */\n accessibleDetails?: Gtk.Accessible[] | null | undefined;\n /** Widgets holding the message that explains why the value is invalid. */\n accessibleErrorMessage?: Gtk.Accessible[] | null | undefined;\n /** Widgets to read next, overriding the default reading order. */\n accessibleFlowTo?: Gtk.Accessible[] | null | undefined;\n /** Widgets that label this one. */\n accessibleLabelledBy?: Gtk.Accessible[] | null | undefined;\n /** Widgets this one owns that the widget hierarchy does not already imply. */\n accessibleOwns?: Gtk.Accessible[] | null | undefined;\n /** One-based position of the widget within its set. */\n accessiblePosInSet?: number | null | undefined;\n /** Total number of rows in the table, including any that are not rendered. */\n accessibleRowCount?: number | null | undefined;\n /** One-based row position of the cell within its table. */\n accessibleRowIndex?: number | null | undefined;\n /** Wording announced in place of the numeric row position. */\n accessibleRowIndexText?: string | null | undefined;\n /** Number of rows the cell spans. */\n accessibleRowSpan?: number | null | undefined;\n /** Total number of items in the set the widget belongs to. */\n accessibleSetSize?: number | null | undefined;\n};\n\ntype AccessibleValueType = \"string\" | \"boolean\" | \"optionalBoolean\" | \"int\" | \"double\" | \"object\" | \"list\";\n\ntype AccessiblePropertyDescriptor = {\n kind: \"property\";\n property: Gtk.AccessibleProperty;\n type: AccessibleValueType;\n};\n\ntype AccessibleStateDescriptor = {\n kind: \"state\";\n state: Gtk.AccessibleState;\n type: AccessibleValueType;\n};\n\ntype AccessibleRelationDescriptor = {\n kind: \"relation\";\n relation: Gtk.AccessibleRelation;\n type: AccessibleValueType;\n};\n\ntype AccessibleDescriptor = AccessiblePropertyDescriptor | AccessibleStateDescriptor | AccessibleRelationDescriptor;\n\nconst ACCESSIBLE_PROP_MAP: Record<keyof AccessibleProps, AccessibleDescriptor> = {\n accessibleAutocomplete: buildProperty(Gtk.AccessibleProperty.AUTOCOMPLETE, \"int\"),\n accessibleDescription: buildProperty(Gtk.AccessibleProperty.DESCRIPTION, \"string\"),\n accessibleHasPopup: buildProperty(Gtk.AccessibleProperty.HAS_POPUP, \"boolean\"),\n accessibleKeyShortcuts: buildProperty(Gtk.AccessibleProperty.KEY_SHORTCUTS, \"string\"),\n accessibleLabel: buildProperty(Gtk.AccessibleProperty.LABEL, \"string\"),\n accessibleLevel: buildProperty(Gtk.AccessibleProperty.LEVEL, \"int\"),\n accessibleModal: buildProperty(Gtk.AccessibleProperty.MODAL, \"boolean\"),\n accessibleMultiLine: buildProperty(Gtk.AccessibleProperty.MULTI_LINE, \"boolean\"),\n accessibleMultiSelectable: buildProperty(Gtk.AccessibleProperty.MULTI_SELECTABLE, \"boolean\"),\n accessibleOrientation: buildProperty(Gtk.AccessibleProperty.ORIENTATION, \"int\"),\n accessiblePlaceholder: buildProperty(Gtk.AccessibleProperty.PLACEHOLDER, \"string\"),\n accessibleReadOnly: buildProperty(Gtk.AccessibleProperty.READ_ONLY, \"boolean\"),\n accessibleRequired: buildProperty(Gtk.AccessibleProperty.REQUIRED, \"boolean\"),\n accessibleRoleDescription: buildProperty(Gtk.AccessibleProperty.ROLE_DESCRIPTION, \"string\"),\n accessibleSort: buildProperty(Gtk.AccessibleProperty.SORT, \"int\"),\n accessibleValueMax: buildProperty(Gtk.AccessibleProperty.VALUE_MAX, \"double\"),\n accessibleValueMin: buildProperty(Gtk.AccessibleProperty.VALUE_MIN, \"double\"),\n accessibleValueNow: buildProperty(Gtk.AccessibleProperty.VALUE_NOW, \"double\"),\n accessibleValueText: buildProperty(Gtk.AccessibleProperty.VALUE_TEXT, \"string\"),\n accessibleHelpText: buildProperty(Gtk.AccessibleProperty.HELP_TEXT, \"string\"),\n accessibleBusy: buildState(Gtk.AccessibleState.BUSY, \"boolean\"),\n accessibleChecked: buildState(Gtk.AccessibleState.CHECKED, \"int\"),\n accessibleDisabled: buildState(Gtk.AccessibleState.DISABLED, \"boolean\"),\n accessibleExpanded: buildState(Gtk.AccessibleState.EXPANDED, \"optionalBoolean\"),\n accessibleHidden: buildState(Gtk.AccessibleState.HIDDEN, \"boolean\"),\n accessibleInvalid: buildState(Gtk.AccessibleState.INVALID, \"int\"),\n accessiblePressed: buildState(Gtk.AccessibleState.PRESSED, \"int\"),\n accessibleSelected: buildState(Gtk.AccessibleState.SELECTED, \"optionalBoolean\"),\n accessibleVisited: buildState(Gtk.AccessibleState.VISITED, \"optionalBoolean\"),\n accessibleActiveDescendant: buildRelation(Gtk.AccessibleRelation.ACTIVE_DESCENDANT, \"object\"),\n accessibleColCount: buildRelation(Gtk.AccessibleRelation.COL_COUNT, \"int\"),\n accessibleColIndex: buildRelation(Gtk.AccessibleRelation.COL_INDEX, \"int\"),\n accessibleColIndexText: buildRelation(Gtk.AccessibleRelation.COL_INDEX_TEXT, \"string\"),\n accessibleColSpan: buildRelation(Gtk.AccessibleRelation.COL_SPAN, \"int\"),\n accessibleControls: buildRelation(Gtk.AccessibleRelation.CONTROLS, \"list\"),\n accessibleDescribedBy: buildRelation(Gtk.AccessibleRelation.DESCRIBED_BY, \"list\"),\n accessibleDetails: buildRelation(Gtk.AccessibleRelation.DETAILS, \"list\"),\n accessibleErrorMessage: buildRelation(Gtk.AccessibleRelation.ERROR_MESSAGE, \"list\"),\n accessibleFlowTo: buildRelation(Gtk.AccessibleRelation.FLOW_TO, \"list\"),\n accessibleLabelledBy: buildRelation(Gtk.AccessibleRelation.LABELLED_BY, \"list\"),\n accessibleOwns: buildRelation(Gtk.AccessibleRelation.OWNS, \"list\"),\n accessiblePosInSet: buildRelation(Gtk.AccessibleRelation.POS_IN_SET, \"int\"),\n accessibleRowCount: buildRelation(Gtk.AccessibleRelation.ROW_COUNT, \"int\"),\n accessibleRowIndex: buildRelation(Gtk.AccessibleRelation.ROW_INDEX, \"int\"),\n accessibleRowIndexText: buildRelation(Gtk.AccessibleRelation.ROW_INDEX_TEXT, \"string\"),\n accessibleRowSpan: buildRelation(Gtk.AccessibleRelation.ROW_SPAN, \"int\"),\n accessibleSetSize: buildRelation(Gtk.AccessibleRelation.SET_SIZE, \"int\"),\n};\n\nfunction buildProperty(property: Gtk.AccessibleProperty, type: AccessibleValueType): AccessiblePropertyDescriptor {\n return {\n kind: \"property\",\n property,\n type,\n };\n}\n\nfunction buildState(state: Gtk.AccessibleState, type: AccessibleValueType): AccessibleStateDescriptor {\n return {\n kind: \"state\",\n state,\n type,\n };\n}\n\nfunction buildRelation(relation: Gtk.AccessibleRelation, type: AccessibleValueType): AccessibleRelationDescriptor {\n return {\n kind: \"relation\",\n relation,\n type,\n };\n}\n\nconst initValue = (gtype: GObject.Type, populate: (value: GObject.Value) => void): GObject.Value => {\n const value = new GObject.Value();\n value.init(gtype);\n populate(value);\n\n return value;\n};\n\nconst buildValue = (descriptor: AccessibleDescriptor, jsValue: unknown): GObject.Value => {\n switch (descriptor.type) {\n case \"string\": {\n return initValue(GObject.TYPE_STRING, (v) => {\n v.setString(jsValue as string);\n });\n }\n case \"boolean\": {\n return initValue(GObject.TYPE_BOOLEAN, (v) => {\n v.setBoolean(jsValue as boolean);\n });\n }\n case \"optionalBoolean\": {\n return initValue(GObject.TYPE_INT, (v) => {\n v.setInt(jsValue === true ? 1 : 0);\n });\n }\n case \"int\": {\n return initValue(GObject.TYPE_INT, (v) => {\n v.setInt(jsValue as number);\n });\n }\n case \"double\": {\n return initValue(GObject.TYPE_DOUBLE, (v) => {\n v.setDouble(jsValue as number);\n });\n }\n case \"object\": {\n return initValue(GObject.TYPE_OBJECT, (v) => {\n v.setObject(jsValue as GObject.Object | null);\n });\n }\n case \"list\": {\n const list = Gtk.AccessibleList.newFromList(jsValue as Gtk.Accessible[]);\n\n return initValue(Gtk.AccessibleList.prototype.__type__, (v) => {\n v.setBoxed(list);\n });\n }\n }\n};\n\nconst isAccessibleProp = (name: string): name is keyof AccessibleProps =>\n Object.hasOwn(ACCESSIBLE_PROP_MAP, name);\n\nfunction applyDescriptor(widget: Gtk.Accessible, descriptor: AccessibleDescriptor, newValue: unknown): void {\n const value = buildValue(descriptor, newValue);\n\n switch (descriptor.kind) {\n case \"property\": {\n widget.updateProperty([descriptor.property], [value]);\n break;\n }\n case \"state\": {\n widget.updateState([descriptor.state], [value]);\n break;\n }\n case \"relation\": {\n widget.updateRelation([descriptor.relation], [value]);\n break;\n }\n }\n}\n\nfunction resetDescriptor(widget: Gtk.Accessible, descriptor: AccessibleDescriptor): void {\n switch (descriptor.kind) {\n case \"property\": {\n widget.resetProperty(descriptor.property);\n break;\n }\n case \"state\": {\n widget.resetState(descriptor.state);\n break;\n }\n case \"relation\": {\n widget.resetRelation(descriptor.relation);\n break;\n }\n }\n}\n\nconst applyChangedProp = (widget: Gtk.Accessible, name: keyof AccessibleProps, newValue: unknown): void => {\n if (newValue == null) {\n resetDescriptor(widget, ACCESSIBLE_PROP_MAP[name]);\n } else {\n applyDescriptor(widget, ACCESSIBLE_PROP_MAP[name], newValue);\n }\n};\n\nconst applyChangedProps = (widget: Gtk.Accessible, newProps: Props): void => {\n for (const name in newProps) {\n if (!isAccessibleProp(name)) {\n continue;\n }\n\n applyChangedProp(widget, name, newProps[name]);\n }\n};\n\nconst isRemovedAccessibleProp = (name: string, oldProps: Props, newProps: Props): name is keyof AccessibleProps =>\n !Object.hasOwn(newProps, name) && isAccessibleProp(name) && oldProps[name] !== undefined;\n\nconst resetRemovedProps = (widget: Gtk.Accessible, oldProps: Props, newProps: Props): void => {\n for (const name in oldProps) {\n if (!isRemovedAccessibleProp(name, oldProps, newProps)) {\n continue;\n }\n\n resetDescriptor(widget, ACCESSIBLE_PROP_MAP[name]);\n }\n};\n\nconst applyAccessibleProps = (widget: Gtk.Accessible, oldProps: Props | null, newProps: Props): void => {\n applyChangedProps(widget, newProps);\n\n if (oldProps) {\n resetRemovedProps(widget, oldProps, newProps);\n }\n};\n\nexport { isAccessibleProp, applyAccessibleProps, type AccessibleProps };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gtkx/react",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "React reconciler that renders GTK4 object trees, with the portals, signal handling, and hooks GTKX apps use",
5
5
  "keywords": [
6
6
  "gtkx",
@@ -86,9 +86,10 @@
86
86
  },
87
87
  "dependencies": {
88
88
  "react-reconciler": "^0.33.0",
89
- "@gtkx/config": "1.2.1",
90
- "@gtkx/runtime": "1.2.1",
91
- "@gtkx/utils": "1.2.1"
89
+ "@gtkx/config": "1.3.0",
90
+ "@gtkx/css": "1.3.0",
91
+ "@gtkx/runtime": "1.3.0",
92
+ "@gtkx/utils": "1.3.0"
92
93
  },
93
94
  "devDependencies": {
94
95
  "@types/react": "^19.2.18",
@@ -26,7 +26,15 @@ import {
26
26
  value,
27
27
  wrappingIndexedSlot,
28
28
  } from "./reconciler/behaviors.js";
29
- import { type ElementConfig, forTypes, registerElements } from "./reconciler/registry.js";
29
+ import {
30
+ type ElementBehavior,
31
+ type ElementConfig,
32
+ forTypes,
33
+ type Props,
34
+ registerElements,
35
+ } from "./reconciler/registry.js";
36
+ import { applyWrite } from "./reconciler/signals.js";
37
+ import { applyStyle, styleClass } from "./reconciler/style.js";
30
38
 
31
39
  const BUILTIN_BEHAVIORS: Record<string, ElementConfig<never>> = {
32
40
  ...forTypes(SINGLE_CHILD_TYPES, {
@@ -95,6 +103,7 @@ const BUILTIN_BEHAVIORS: Record<string, ElementConfig<never>> = {
95
103
  widget.insertActionGroup((info.props.prefix as string | null) ?? "", null);
96
104
  },
97
105
  }),
106
+ styleBehavior(),
98
107
  ],
99
108
  },
100
109
  GtkBox: {
@@ -400,6 +409,57 @@ function layoutChild(parent: Gtk.Widget, child: Gtk.Widget): GObject.Object | nu
400
409
  return parent.getLayoutManager()?.getLayoutChild(child) ?? null;
401
410
  }
402
411
 
412
+ const isNullish = (value: unknown): boolean => value === undefined || value === null;
413
+ const isInitialNull = (prevValue: unknown, value: unknown): boolean => value === null && prevValue === undefined;
414
+
415
+ const withStyleClass = (classes: unknown, className: string): string[] =>
416
+ Array.isArray(classes) ? [...(classes as string[]), className] : [className];
417
+
418
+ const hasCssClassesChange = (prev: Props, next: Props): boolean => {
419
+ const classes = next.cssClasses;
420
+
421
+ if (classes === undefined || Object.is(prev.cssClasses, classes)) {
422
+ return false;
423
+ }
424
+
425
+ return !isInitialNull(prev.cssClasses, classes);
426
+ };
427
+
428
+ const didWriteCssClasses = (widget: Gtk.Widget, prev: Props, next: Props, className: string | null): boolean => {
429
+ if (className === null || !hasCssClassesChange(prev, next)) {
430
+ return false;
431
+ }
432
+
433
+ applyWrite(() => {
434
+ Reflect.set(widget, "cssClasses", withStyleClass(next.cssClasses, className));
435
+ });
436
+
437
+ return true;
438
+ };
439
+
440
+ const isRestyled = (prev: Props, next: Props): boolean => {
441
+ if (isNullish(prev.style) && isNullish(next.style)) {
442
+ return false;
443
+ }
444
+
445
+ return !Object.is(prev.style, next.style);
446
+ };
447
+
448
+ function updateStyle(widget: Gtk.Widget, prev: Props, next: Props): Iterable<string> | undefined {
449
+ const isChanged = isRestyled(prev, next);
450
+ const className = isChanged ? applyStyle(widget, next.style) : styleClass(widget);
451
+
452
+ if (!isChanged && className === null) {
453
+ return;
454
+ }
455
+
456
+ return didWriteCssClasses(widget, prev, next, className) ? ["style", "cssClasses"] : ["style"];
457
+ }
458
+
459
+ function styleBehavior(): ElementBehavior<Gtk.Widget> {
460
+ return { update: updateStyle };
461
+ }
462
+
403
463
  const addMainOption = (application: Gtk.Application, option: MainOption): void => {
404
464
  application.addMainOption(
405
465
  option.longName,
package/src/internal.ts CHANGED
@@ -15,4 +15,6 @@ export type * from "./prop-types.js";
15
15
  export { settleAccessible } from "./reconciler/apply-props.js";
16
16
  export { isRootElement } from "./reconciler/root-element.js";
17
17
  export { createReconcilerRoot, type ReconcilerRoot, setReconcilerErrorHandler } from "./reconciler/root.js";
18
+ export { applyWrite } from "./reconciler/signals.js";
19
+ export { applyStyle } from "./reconciler/style.js";
18
20
  export type { SettingsSchema, SettingsSchemaKeys, SettingValue } from "./utils/settings.js";
package/src/prop-types.ts CHANGED
@@ -3,7 +3,7 @@ import type * as Gdk from "@gtkx/gi/gdk";
3
3
  import type * as GLib from "@gtkx/gi/glib";
4
4
  import type * as GObject from "@gtkx/gi/gobject";
5
5
  import type * as Gtk from "@gtkx/gi/gtk";
6
- import type { ReactNode } from "react";
6
+ import type { CSSProperties, ReactNode } from "react";
7
7
 
8
8
  /** One entry of a `GMenu`'s `items` prop; `submenu` and `section` nest further menus. */
9
9
  type MenuItem = {
@@ -95,12 +95,95 @@ type ChildrenProps = {
95
95
  children?: ReactNode;
96
96
  };
97
97
 
98
+ /** Paint and typography declarations GTK4 CSS accepts, spelled the way React DOM spells them. */
99
+ type StyleProperties = Pick<
100
+ CSSProperties,
101
+ | "animation" |
102
+ "animationDelay" |
103
+ "animationDirection" |
104
+ "animationDuration" |
105
+ "animationFillMode" |
106
+ "animationIterationCount" |
107
+ "animationName" |
108
+ "animationPlayState" |
109
+ "animationTimingFunction" |
110
+ "background" |
111
+ "backgroundClip" |
112
+ "backgroundColor" |
113
+ "backgroundImage" |
114
+ "backgroundOrigin" |
115
+ "backgroundPosition" |
116
+ "backgroundRepeat" |
117
+ "backgroundSize" |
118
+ "border" |
119
+ "borderBottom" |
120
+ "borderColor" |
121
+ "borderLeft" |
122
+ "borderRadius" |
123
+ "borderRight" |
124
+ "borderStyle" |
125
+ "borderTop" |
126
+ "borderWidth" |
127
+ "boxShadow" |
128
+ "caretColor" |
129
+ "color" |
130
+ "filter" |
131
+ "font" |
132
+ "fontFamily" |
133
+ "fontSize" |
134
+ "fontStyle" |
135
+ "fontVariant" |
136
+ "fontWeight" |
137
+ "letterSpacing" |
138
+ "lineHeight" |
139
+ "margin" |
140
+ "marginBottom" |
141
+ "marginLeft" |
142
+ "marginRight" |
143
+ "marginTop" |
144
+ "minHeight" |
145
+ "minWidth" |
146
+ "opacity" |
147
+ "outline" |
148
+ "outlineColor" |
149
+ "outlineOffset" |
150
+ "outlineStyle" |
151
+ "outlineWidth" |
152
+ "padding" |
153
+ "paddingBottom" |
154
+ "paddingLeft" |
155
+ "paddingRight" |
156
+ "paddingTop" |
157
+ "textDecoration" |
158
+ "textDecorationColor" |
159
+ "textDecorationLine" |
160
+ "textDecorationStyle" |
161
+ "textShadow" |
162
+ "textTransform" |
163
+ "transform" |
164
+ "transformOrigin" |
165
+ "transition" |
166
+ "transitionDelay" |
167
+ "transitionDuration" |
168
+ "transitionProperty" |
169
+ "transitionTimingFunction"
170
+ >;
171
+
172
+ /**
173
+ * Style declarations for one widget. A key starting with `&` nests a block under a selector derived from
174
+ * it, such as `"&:hover"` or `"& label"`. GTK4 CSS covers paint and typography only, so layout properties
175
+ * such as `display`, `width` and `gap` are deliberately absent; use the widget's own layout props instead.
176
+ */
177
+ type Style = StyleProperties & Partial<Record<`&${string}`, StyleProperties>>;
178
+
98
179
  /** Objects a widget takes through a method call rather than a property. */
99
180
  type GtkWidgetProps = {
100
181
  /** `Gtk.EventController` elements added to the widget. */
101
182
  controllers?: ReactNode | null | undefined;
102
183
  /** `Gio.ActionGroup` elements inserted into the widget, each under its own `prefix`. */
103
184
  actionGroups?: ReactNode | null | undefined;
185
+ /** Style declarations applied to this widget alone, outranking any class in `cssClasses`. */
186
+ style?: Style | null | undefined;
104
187
  } & ChildrenProps;
105
188
 
106
189
  /** Props of an action group placed in a widget's `actionGroups` slot. */
@@ -230,6 +313,8 @@ export {
230
313
  type DragSourceIcon,
231
314
  type ChildrenProps,
232
315
  type GtkWidgetProps,
316
+ type Style,
317
+ type StyleProperties,
233
318
  type ActionGroupProps,
234
319
  type ActionMapProps,
235
320
  type MenuProps,
@@ -1,6 +1,7 @@
1
1
  import type * as GObject from "@gtkx/gi/gobject";
2
2
  import type { SignalHandler } from "@gtkx/runtime";
3
3
  import * as Gtk from "@gtkx/gi/gtk";
4
+ import { coerceObjectProperty } from "@gtkx/runtime";
4
5
  import { drain, isDeepEqual, kebabCase } from "@gtkx/utils";
5
6
  import type { ElementBehavior, Props } from "./registry.js";
6
7
  import { applyAccessibleProps, isAccessibleProp } from "../utils/accessible-props.js";
@@ -48,7 +49,7 @@ const writeValue = (object: GObject.Object, name: string, value: unknown): void
48
49
  }
49
50
 
50
51
  applyWrite(() => {
51
- Reflect.set(object, name, value);
52
+ Reflect.set(object, name, coerceObjectProperty(object, name, value));
52
53
  });
53
54
  };
54
55