@gtkx/react 1.3.0 → 1.4.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.
Files changed (73) hide show
  1. package/README.md +5 -4
  2. package/dist/adw/dialog.js +2 -2
  3. package/dist/adw/dialog.js.map +1 -1
  4. package/dist/components/application.d.ts.map +1 -1
  5. package/dist/components/application.js +3 -3
  6. package/dist/components/application.js.map +1 -1
  7. package/dist/components/window.js +3 -3
  8. package/dist/components/window.js.map +1 -1
  9. package/dist/element-behaviors.js +93 -3
  10. package/dist/element-behaviors.js.map +1 -1
  11. package/dist/element-config.js +1 -1
  12. package/dist/element-config.js.map +1 -1
  13. package/dist/hooks/use-bind-setting.d.ts.map +1 -1
  14. package/dist/hooks/use-bind-setting.js +3 -2
  15. package/dist/hooks/use-bind-setting.js.map +1 -1
  16. package/dist/hooks/use-property.d.ts +1 -1
  17. package/dist/hooks/use-property.d.ts.map +1 -1
  18. package/dist/hooks/use-property.js +5 -1
  19. package/dist/hooks/use-property.js.map +1 -1
  20. package/dist/prop-types.d.ts +9 -1
  21. package/dist/prop-types.d.ts.map +1 -1
  22. package/dist/prop-types.js.map +1 -1
  23. package/dist/reconciler/apply-props.d.ts +2 -1
  24. package/dist/reconciler/apply-props.d.ts.map +1 -1
  25. package/dist/reconciler/apply-props.js +59 -24
  26. package/dist/reconciler/apply-props.js.map +1 -1
  27. package/dist/reconciler/behaviors.d.ts.map +1 -1
  28. package/dist/reconciler/behaviors.js +40 -9
  29. package/dist/reconciler/behaviors.js.map +1 -1
  30. package/dist/reconciler/host-config.d.ts.map +1 -1
  31. package/dist/reconciler/host-config.js +2 -1
  32. package/dist/reconciler/host-config.js.map +1 -1
  33. package/dist/reconciler/metadata.d.ts +6 -1
  34. package/dist/reconciler/metadata.d.ts.map +1 -1
  35. package/dist/reconciler/metadata.js +39 -6
  36. package/dist/reconciler/metadata.js.map +1 -1
  37. package/dist/reconciler/placement.js +4 -4
  38. package/dist/reconciler/placement.js.map +1 -1
  39. package/dist/reconciler/registry.d.ts +2 -0
  40. package/dist/reconciler/registry.d.ts.map +1 -1
  41. package/dist/reconciler/registry.js.map +1 -1
  42. package/dist/reconciler/root.d.ts.map +1 -1
  43. package/dist/reconciler/root.js.map +1 -1
  44. package/dist/reconciler/signals.d.ts +3 -2
  45. package/dist/reconciler/signals.d.ts.map +1 -1
  46. package/dist/reconciler/signals.js +49 -16
  47. package/dist/reconciler/signals.js.map +1 -1
  48. package/dist/reconciler/style.d.ts +2 -1
  49. package/dist/reconciler/style.d.ts.map +1 -1
  50. package/dist/reconciler/style.js +4 -3
  51. package/dist/reconciler/style.js.map +1 -1
  52. package/dist/reconciler/text.js +3 -3
  53. package/dist/reconciler/text.js.map +1 -1
  54. package/env.d.ts +10 -7
  55. package/package.json +6 -6
  56. package/src/adw/dialog.tsx +2 -2
  57. package/src/components/application.tsx +18 -3
  58. package/src/components/window.tsx +3 -3
  59. package/src/element-behaviors.ts +122 -3
  60. package/src/element-config.ts +1 -1
  61. package/src/hooks/use-bind-setting.ts +3 -2
  62. package/src/hooks/use-property.ts +6 -2
  63. package/src/prop-types.ts +10 -0
  64. package/src/reconciler/apply-props.ts +73 -26
  65. package/src/reconciler/behaviors.ts +60 -12
  66. package/src/reconciler/host-config.ts +3 -1
  67. package/src/reconciler/metadata.ts +62 -6
  68. package/src/reconciler/placement.ts +4 -4
  69. package/src/reconciler/registry.ts +2 -0
  70. package/src/reconciler/root.ts +1 -1
  71. package/src/reconciler/signals.ts +62 -17
  72. package/src/reconciler/style.ts +4 -3
  73. package/src/reconciler/text.ts +3 -3
@@ -152,6 +152,14 @@ type GtkScaleProps = {
152
152
  /** Marks drawn along the scale, cleared and re-added whenever the list changes. */
153
153
  marks?: ScaleMark[] | null | undefined;
154
154
  };
155
+ /** Props of a `Gtk.ListBox` element. */
156
+ type GtkListBoxProps = {
157
+ /**
158
+ * Index of the row to select; `-1` or `null` selects none. Applied once the row exists, and
159
+ * re-applied whenever the box's own selection drifts from it. Left alone while the prop is absent.
160
+ */
161
+ selectedIndex?: number | null | undefined;
162
+ } & ChildrenProps;
155
163
  /** Props of a `Gtk.Calendar` element. */
156
164
  type GtkCalendarProps = {
157
165
  /** Days of the shown month drawn as marked, cleared and re-marked whenever the list changes. */
@@ -200,5 +208,5 @@ type GtkDragSourceProps = {
200
208
  /** Icon shown under the pointer while a drag started from this source is in flight. */
201
209
  icon?: DragSourceIcon | null | undefined;
202
210
  };
203
- export { type MenuItem, type VflConstraints, type ScaleMark, type LevelBarOffset, type CreditSection, type MainOption, type ActionAccel, type DragSourceIcon, type ChildrenProps, type GtkWidgetProps, type Style, type StyleProperties, type ActionGroupProps, type ActionMapProps, type MenuProps, type GtkShortcutControllerProps, type GtkOverlayProps, type GtkTextChildAnchorProps, type GtkConstraintLayoutProps, type GtkHeaderBarProps, type GtkScaleProps, type GtkCalendarProps, type GtkLevelBarProps, type GtkSizeGroupProps, type GtkAboutDialogProps, type GtkApplicationProps, type GtkDropTargetProps, type GtkDrawingAreaProps, type GtkDragSourceProps, };
211
+ export { type MenuItem, type VflConstraints, type ScaleMark, type LevelBarOffset, type CreditSection, type MainOption, type ActionAccel, type DragSourceIcon, type ChildrenProps, type GtkWidgetProps, type Style, type StyleProperties, type ActionGroupProps, type ActionMapProps, type MenuProps, type GtkShortcutControllerProps, type GtkOverlayProps, type GtkTextChildAnchorProps, type GtkConstraintLayoutProps, type GtkHeaderBarProps, type GtkScaleProps, type GtkListBoxProps, type GtkCalendarProps, type GtkLevelBarProps, type GtkSizeGroupProps, type GtkAboutDialogProps, type GtkApplicationProps, type GtkDropTargetProps, type GtkDrawingAreaProps, type GtkDragSourceProps, };
204
212
  //# sourceMappingURL=prop-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prop-types.d.ts","sourceRoot":"","sources":["../src/prop-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prop-types.d.ts","sourceRoot":"","sources":["../src/prop-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prop-types.js","sourceRoot":"","sources":["../src/prop-types.ts"],"names":[],"mappings":"AAgTA,OAAO,EA8BN,CAAC","sourcesContent":["/* eslint-disable gtkx/no-library-prefix */\nimport type * as Gdk from \"@gtkx/gi/gdk\";\nimport type * as GLib from \"@gtkx/gi/glib\";\nimport type * as GObject from \"@gtkx/gi/gobject\";\nimport type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\n/** One entry of a `GMenu`'s `items` prop; `submenu` and `section` nest further menus. */\ntype MenuItem = {\n /** Text shown for the entry, or the heading of the submenu or section it introduces. */\n label?: string | null;\n /** Detailed action name the entry activates, ignored when `submenu` or `section` is given. */\n action?: string | null;\n /** Entries of a separate menu the labelled entry opens. */\n submenu?: MenuItem[];\n /** Entries appended below the label as an inline section, used only when `submenu` is absent. */\n section?: MenuItem[];\n};\n\n/** One Visual Format Language block applied to a `Gtk.ConstraintLayout`. */\ntype VflConstraints = {\n /** Format lines, each describing every constraint on one row or column. */\n lines: string[];\n /** Default horizontal spacing the `-` operator stands for; defaults to 0. */\n hspacing?: number;\n /** Default vertical spacing the `-` operator stands for; defaults to 0. */\n vspacing?: number;\n /** Targets the view names in `lines` refer to; defaults to none. */\n views?: Map<string, Gtk.ConstraintTarget>;\n};\n\n/** One mark on a `Gtk.Scale`. */\ntype ScaleMark = {\n /** Point on the scale the mark is drawn at; defaults to 0. */\n value?: number;\n /** Side of the scale the mark and its label sit on. */\n position: Gtk.PositionType;\n /** Pango markup drawn beside the mark, or `null` for an unlabelled one. */\n markup?: string | null;\n};\n\n/** One labelled offset on a `Gtk.LevelBar`. */\ntype LevelBarOffset = {\n /** Style class applied to the bar's blocks while the value falls in this offset's interval. */\n name: string;\n /** Upper bound of that interval; defaults to 0. */\n value?: number;\n};\n\n/** One credit section on a `Gtk.AboutDialog`. */\ntype CreditSection = {\n /** Heading the names are listed under. */\n sectionName: string;\n /** Names listed in the section. */\n people: string[];\n};\n\n/** One command-line option a `Gtk.Application` accepts. */\ntype MainOption = {\n /** Name the option is spelled with after two dashes, such as `verbose` for `--verbose`. */\n longName: string;\n /** Single character the option is spelled with after one dash, such as `v` for `-v`; defaults to none. */\n shortName?: string | null;\n /** How the option itself is parsed and listed; defaults to `GLib.OptionFlags.NONE`. */\n flags?: GLib.OptionFlags;\n /** Type of argument the option takes; defaults to `GLib.OptionArg.NONE`, meaning it takes none. */\n arg?: GLib.OptionArg;\n /** Text describing the option in `--help`. */\n description: string;\n /** Placeholder standing for the option's argument in `--help`; defaults to none. */\n argDescription?: string | null;\n};\n\n/** One accelerator binding on a `Gtk.Application`. */\ntype ActionAccel = {\n /** Action the accelerators activate, such as `app.quit` or `win.open('file')`. */\n detailedActionName: string;\n /** Accelerators in `Gtk.acceleratorParse` syntax, cleared when the entry goes away. */\n accels: string[];\n};\n\n/** The drag icon of a `Gtk.DragSource`, with its hotspot. */\ntype DragSourceIcon = {\n /** Image shown under the pointer during the drag; defaults to none. */\n paintable?: Gdk.Paintable | null;\n /** Horizontal offset of the pointer within the image; defaults to 0. */\n hotX?: number;\n /** Vertical offset of the pointer within the image; defaults to 0. */\n hotY?: number;\n};\n\n/** Props of an element that accepts children. */\ntype ChildrenProps = {\n /** Elements attached to the element's default child slot, or its text for elements that hold text. */\n children?: ReactNode;\n};\n\n/** Paint and typography declarations GTK4 CSS accepts, spelled the way React DOM spells them. */\ntype StyleProperties = Pick<\n CSSProperties,\n | \"animation\" |\n \"animationDelay\" |\n \"animationDirection\" |\n \"animationDuration\" |\n \"animationFillMode\" |\n \"animationIterationCount\" |\n \"animationName\" |\n \"animationPlayState\" |\n \"animationTimingFunction\" |\n \"background\" |\n \"backgroundClip\" |\n \"backgroundColor\" |\n \"backgroundImage\" |\n \"backgroundOrigin\" |\n \"backgroundPosition\" |\n \"backgroundRepeat\" |\n \"backgroundSize\" |\n \"border\" |\n \"borderBottom\" |\n \"borderColor\" |\n \"borderLeft\" |\n \"borderRadius\" |\n \"borderRight\" |\n \"borderStyle\" |\n \"borderTop\" |\n \"borderWidth\" |\n \"boxShadow\" |\n \"caretColor\" |\n \"color\" |\n \"filter\" |\n \"font\" |\n \"fontFamily\" |\n \"fontSize\" |\n \"fontStyle\" |\n \"fontVariant\" |\n \"fontWeight\" |\n \"letterSpacing\" |\n \"lineHeight\" |\n \"margin\" |\n \"marginBottom\" |\n \"marginLeft\" |\n \"marginRight\" |\n \"marginTop\" |\n \"minHeight\" |\n \"minWidth\" |\n \"opacity\" |\n \"outline\" |\n \"outlineColor\" |\n \"outlineOffset\" |\n \"outlineStyle\" |\n \"outlineWidth\" |\n \"padding\" |\n \"paddingBottom\" |\n \"paddingLeft\" |\n \"paddingRight\" |\n \"paddingTop\" |\n \"textDecoration\" |\n \"textDecorationColor\" |\n \"textDecorationLine\" |\n \"textDecorationStyle\" |\n \"textShadow\" |\n \"textTransform\" |\n \"transform\" |\n \"transformOrigin\" |\n \"transition\" |\n \"transitionDelay\" |\n \"transitionDuration\" |\n \"transitionProperty\" |\n \"transitionTimingFunction\"\n>;\n\n/**\n * Style declarations for one widget. A key starting with `&` nests a block under a selector derived from\n * it, such as `\"&:hover\"` or `\"& label\"`. GTK4 CSS covers paint and typography only, so layout properties\n * such as `display`, `width` and `gap` are deliberately absent; use the widget's own layout props instead.\n */\ntype Style = StyleProperties & Partial<Record<`&${string}`, StyleProperties>>;\n\n/** Objects a widget takes through a method call rather than a property. */\ntype GtkWidgetProps = {\n /** `Gtk.EventController` elements added to the widget. */\n controllers?: ReactNode | null | undefined;\n /** `Gio.ActionGroup` elements inserted into the widget, each under its own `prefix`. */\n actionGroups?: ReactNode | null | undefined;\n /** Style declarations applied to this widget alone, outranking any class in `cssClasses`. */\n style?: Style | null | undefined;\n} & ChildrenProps;\n\n/** Props of an action group placed in a widget's `actionGroups` slot. */\ntype ActionGroupProps = {\n /** Prefix the group's actions are addressed by, such as `win`; defaults to the empty string. */\n prefix?: string | null | undefined;\n};\n\n/** Props of an element implementing `Gio.ActionMap`. */\ntype ActionMapProps = {\n /** `Gio.Action` elements added to the map, removed again by their `name`. */\n actions?: ReactNode | null | undefined;\n};\n\n/** Props of a `Gio.Menu` element. */\ntype MenuProps = {\n /** Entries the menu is rebuilt from whenever they change. */\n items?: MenuItem[] | null | undefined;\n};\n\n/** Props of a `Gtk.ShortcutController` element. */\ntype GtkShortcutControllerProps = {\n /** `Gtk.Shortcut` elements the controller watches for. */\n shortcuts?: ReactNode | null | undefined;\n};\n\n/** Props of a `Gtk.Overlay` element, whose `children` is the widget the overlays sit above. */\ntype GtkOverlayProps = {\n /** Widgets stacked over the main child. */\n overlays?: ReactNode | null | undefined;\n} & ChildrenProps;\n\n/** Props of a `Gtk.ConstraintLayout` element. */\ntype GtkConstraintLayoutProps = {\n /** `Gtk.Constraint` elements added to the layout. */\n constraints?: ReactNode | null | undefined;\n /** `Gtk.ConstraintGuide` elements added to the layout as invisible spacers. */\n guides?: ReactNode | null | undefined;\n /** Visual Format Language blocks whose constraints are added alongside `constraints`. */\n vfl?: VflConstraints[] | null | undefined;\n};\n\n/** Props of `GtkTextChildAnchor`, which embeds either a child widget or a paintable in a text buffer. */\ntype GtkTextChildAnchorProps = {\n /** Image inserted into the buffer instead of an anchored widget; giving both is an error. */\n paintable?: Gdk.Paintable | null | undefined;\n} & ChildrenProps;\n\n/** Props of a `Gtk.HeaderBar` or `Gtk.ActionBar` element. */\ntype GtkHeaderBarProps = {\n /** Widgets packed at the start of the bar. */\n start?: ReactNode | null | undefined;\n /** Widgets packed at the end of the bar. */\n end?: ReactNode | null | undefined;\n};\n\n/** Props of a `Gtk.Scale` element. */\ntype GtkScaleProps = {\n /** Marks drawn along the scale, cleared and re-added whenever the list changes. */\n marks?: ScaleMark[] | null | undefined;\n};\n\n/** Props of a `Gtk.Calendar` element. */\ntype GtkCalendarProps = {\n /** Days of the shown month drawn as marked, cleared and re-marked whenever the list changes. */\n markedDays?: number[] | null | undefined;\n};\n\n/** Props of a `Gtk.LevelBar` element. */\ntype GtkLevelBarProps = {\n /** Offsets that split the bar's range into differently styled intervals. */\n offsets?: LevelBarOffset[] | null | undefined;\n};\n\n/** Props of a `Gtk.SizeGroup` element. */\ntype GtkSizeGroupProps = {\n /** Widgets the group keeps at a common size. */\n widgets?: Gtk.Widget[] | null | undefined;\n};\n\n/** Props of a `Gtk.AboutDialog` element. */\ntype GtkAboutDialogProps = {\n /**\n * Extra sections appended to the dialog's credits. GTK offers no way to remove one, so the list\n * cannot change once it has been applied.\n */\n creditSections?: CreditSection[] | null | undefined;\n};\n\n/** Props of a `Gtk.Application` element, whose `children` are the windows it owns. */\ntype GtkApplicationProps = {\n /** Accelerators bound to the application's actions. */\n actionAccels?: ActionAccel[] | null | undefined;\n /**\n * Command-line options the application parses, registered before it starts. GLib offers no way to\n * unregister one, so the list cannot change once it has been applied.\n */\n mainOptions?: MainOption[] | null | undefined;\n} & ChildrenProps;\n\n/** Props of a `Gtk.DropTarget` element. */\ntype GtkDropTargetProps = {\n /** GTypes the target accepts a drop of. */\n types?: GObject.Type[] | null | undefined;\n};\n\n/** Props of a `Gtk.DrawingArea` element. */\ntype GtkDrawingAreaProps = {\n /** Callback that draws the area's contents; setting it queues a redraw. */\n drawFunc?: Gtk.DrawingAreaDrawFunc | null | undefined;\n};\n\n/** Props of a `Gtk.DragSource` element. */\ntype GtkDragSourceProps = {\n /** Icon shown under the pointer while a drag started from this source is in flight. */\n icon?: DragSourceIcon | null | undefined;\n};\n\nexport {\n type MenuItem,\n type VflConstraints,\n type ScaleMark,\n type LevelBarOffset,\n type CreditSection,\n type MainOption,\n type ActionAccel,\n type DragSourceIcon,\n type ChildrenProps,\n type GtkWidgetProps,\n type Style,\n type StyleProperties,\n type ActionGroupProps,\n type ActionMapProps,\n type MenuProps,\n type GtkShortcutControllerProps,\n type GtkOverlayProps,\n type GtkTextChildAnchorProps,\n type GtkConstraintLayoutProps,\n type GtkHeaderBarProps,\n type GtkScaleProps,\n type GtkCalendarProps,\n type GtkLevelBarProps,\n type GtkSizeGroupProps,\n type GtkAboutDialogProps,\n type GtkApplicationProps,\n type GtkDropTargetProps,\n type GtkDrawingAreaProps,\n type GtkDragSourceProps,\n};\n"]}
1
+ {"version":3,"file":"prop-types.js","sourceRoot":"","sources":["../src/prop-types.ts"],"names":[],"mappings":"AAyTA,OAAO,EA+BN,CAAC","sourcesContent":["/* eslint-disable gtkx/no-library-prefix */\nimport type * as Gdk from \"@gtkx/gi/gdk\";\nimport type * as GLib from \"@gtkx/gi/glib\";\nimport type * as GObject from \"@gtkx/gi/gobject\";\nimport type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\n/** One entry of a `GMenu`'s `items` prop; `submenu` and `section` nest further menus. */\ntype MenuItem = {\n /** Text shown for the entry, or the heading of the submenu or section it introduces. */\n label?: string | null;\n /** Detailed action name the entry activates, ignored when `submenu` or `section` is given. */\n action?: string | null;\n /** Entries of a separate menu the labelled entry opens. */\n submenu?: MenuItem[];\n /** Entries appended below the label as an inline section, used only when `submenu` is absent. */\n section?: MenuItem[];\n};\n\n/** One Visual Format Language block applied to a `Gtk.ConstraintLayout`. */\ntype VflConstraints = {\n /** Format lines, each describing every constraint on one row or column. */\n lines: string[];\n /** Default horizontal spacing the `-` operator stands for; defaults to 0. */\n hspacing?: number;\n /** Default vertical spacing the `-` operator stands for; defaults to 0. */\n vspacing?: number;\n /** Targets the view names in `lines` refer to; defaults to none. */\n views?: Map<string, Gtk.ConstraintTarget>;\n};\n\n/** One mark on a `Gtk.Scale`. */\ntype ScaleMark = {\n /** Point on the scale the mark is drawn at; defaults to 0. */\n value?: number;\n /** Side of the scale the mark and its label sit on. */\n position: Gtk.PositionType;\n /** Pango markup drawn beside the mark, or `null` for an unlabelled one. */\n markup?: string | null;\n};\n\n/** One labelled offset on a `Gtk.LevelBar`. */\ntype LevelBarOffset = {\n /** Style class applied to the bar's blocks while the value falls in this offset's interval. */\n name: string;\n /** Upper bound of that interval; defaults to 0. */\n value?: number;\n};\n\n/** One credit section on a `Gtk.AboutDialog`. */\ntype CreditSection = {\n /** Heading the names are listed under. */\n sectionName: string;\n /** Names listed in the section. */\n people: string[];\n};\n\n/** One command-line option a `Gtk.Application` accepts. */\ntype MainOption = {\n /** Name the option is spelled with after two dashes, such as `verbose` for `--verbose`. */\n longName: string;\n /** Single character the option is spelled with after one dash, such as `v` for `-v`; defaults to none. */\n shortName?: string | null;\n /** How the option itself is parsed and listed; defaults to `GLib.OptionFlags.NONE`. */\n flags?: GLib.OptionFlags;\n /** Type of argument the option takes; defaults to `GLib.OptionArg.NONE`, meaning it takes none. */\n arg?: GLib.OptionArg;\n /** Text describing the option in `--help`. */\n description: string;\n /** Placeholder standing for the option's argument in `--help`; defaults to none. */\n argDescription?: string | null;\n};\n\n/** One accelerator binding on a `Gtk.Application`. */\ntype ActionAccel = {\n /** Action the accelerators activate, such as `app.quit` or `win.open('file')`. */\n detailedActionName: string;\n /** Accelerators in `Gtk.acceleratorParse` syntax, cleared when the entry goes away. */\n accels: string[];\n};\n\n/** The drag icon of a `Gtk.DragSource`, with its hotspot. */\ntype DragSourceIcon = {\n /** Image shown under the pointer during the drag; defaults to none. */\n paintable?: Gdk.Paintable | null;\n /** Horizontal offset of the pointer within the image; defaults to 0. */\n hotX?: number;\n /** Vertical offset of the pointer within the image; defaults to 0. */\n hotY?: number;\n};\n\n/** Props of an element that accepts children. */\ntype ChildrenProps = {\n /** Elements attached to the element's default child slot, or its text for elements that hold text. */\n children?: ReactNode;\n};\n\n/** Paint and typography declarations GTK4 CSS accepts, spelled the way React DOM spells them. */\ntype StyleProperties = Pick<\n CSSProperties,\n | \"animation\" |\n \"animationDelay\" |\n \"animationDirection\" |\n \"animationDuration\" |\n \"animationFillMode\" |\n \"animationIterationCount\" |\n \"animationName\" |\n \"animationPlayState\" |\n \"animationTimingFunction\" |\n \"background\" |\n \"backgroundClip\" |\n \"backgroundColor\" |\n \"backgroundImage\" |\n \"backgroundOrigin\" |\n \"backgroundPosition\" |\n \"backgroundRepeat\" |\n \"backgroundSize\" |\n \"border\" |\n \"borderBottom\" |\n \"borderColor\" |\n \"borderLeft\" |\n \"borderRadius\" |\n \"borderRight\" |\n \"borderStyle\" |\n \"borderTop\" |\n \"borderWidth\" |\n \"boxShadow\" |\n \"caretColor\" |\n \"color\" |\n \"filter\" |\n \"font\" |\n \"fontFamily\" |\n \"fontSize\" |\n \"fontStyle\" |\n \"fontVariant\" |\n \"fontWeight\" |\n \"letterSpacing\" |\n \"lineHeight\" |\n \"margin\" |\n \"marginBottom\" |\n \"marginLeft\" |\n \"marginRight\" |\n \"marginTop\" |\n \"minHeight\" |\n \"minWidth\" |\n \"opacity\" |\n \"outline\" |\n \"outlineColor\" |\n \"outlineOffset\" |\n \"outlineStyle\" |\n \"outlineWidth\" |\n \"padding\" |\n \"paddingBottom\" |\n \"paddingLeft\" |\n \"paddingRight\" |\n \"paddingTop\" |\n \"textDecoration\" |\n \"textDecorationColor\" |\n \"textDecorationLine\" |\n \"textDecorationStyle\" |\n \"textShadow\" |\n \"textTransform\" |\n \"transform\" |\n \"transformOrigin\" |\n \"transition\" |\n \"transitionDelay\" |\n \"transitionDuration\" |\n \"transitionProperty\" |\n \"transitionTimingFunction\"\n>;\n\n/**\n * Style declarations for one widget. A key starting with `&` nests a block under a selector derived from\n * it, such as `\"&:hover\"` or `\"& label\"`. GTK4 CSS covers paint and typography only, so layout properties\n * such as `display`, `width` and `gap` are deliberately absent; use the widget's own layout props instead.\n */\ntype Style = StyleProperties & Partial<Record<`&${string}`, StyleProperties>>;\n\n/** Objects a widget takes through a method call rather than a property. */\ntype GtkWidgetProps = {\n /** `Gtk.EventController` elements added to the widget. */\n controllers?: ReactNode | null | undefined;\n /** `Gio.ActionGroup` elements inserted into the widget, each under its own `prefix`. */\n actionGroups?: ReactNode | null | undefined;\n /** Style declarations applied to this widget alone, outranking any class in `cssClasses`. */\n style?: Style | null | undefined;\n} & ChildrenProps;\n\n/** Props of an action group placed in a widget's `actionGroups` slot. */\ntype ActionGroupProps = {\n /** Prefix the group's actions are addressed by, such as `win`; defaults to the empty string. */\n prefix?: string | null | undefined;\n};\n\n/** Props of an element implementing `Gio.ActionMap`. */\ntype ActionMapProps = {\n /** `Gio.Action` elements added to the map, removed again by their `name`. */\n actions?: ReactNode | null | undefined;\n};\n\n/** Props of a `Gio.Menu` element. */\ntype MenuProps = {\n /** Entries the menu is rebuilt from whenever they change. */\n items?: MenuItem[] | null | undefined;\n};\n\n/** Props of a `Gtk.ShortcutController` element. */\ntype GtkShortcutControllerProps = {\n /** `Gtk.Shortcut` elements the controller watches for. */\n shortcuts?: ReactNode | null | undefined;\n};\n\n/** Props of a `Gtk.Overlay` element, whose `children` is the widget the overlays sit above. */\ntype GtkOverlayProps = {\n /** Widgets stacked over the main child. */\n overlays?: ReactNode | null | undefined;\n} & ChildrenProps;\n\n/** Props of a `Gtk.ConstraintLayout` element. */\ntype GtkConstraintLayoutProps = {\n /** `Gtk.Constraint` elements added to the layout. */\n constraints?: ReactNode | null | undefined;\n /** `Gtk.ConstraintGuide` elements added to the layout as invisible spacers. */\n guides?: ReactNode | null | undefined;\n /** Visual Format Language blocks whose constraints are added alongside `constraints`. */\n vfl?: VflConstraints[] | null | undefined;\n};\n\n/** Props of `GtkTextChildAnchor`, which embeds either a child widget or a paintable in a text buffer. */\ntype GtkTextChildAnchorProps = {\n /** Image inserted into the buffer instead of an anchored widget; giving both is an error. */\n paintable?: Gdk.Paintable | null | undefined;\n} & ChildrenProps;\n\n/** Props of a `Gtk.HeaderBar` or `Gtk.ActionBar` element. */\ntype GtkHeaderBarProps = {\n /** Widgets packed at the start of the bar. */\n start?: ReactNode | null | undefined;\n /** Widgets packed at the end of the bar. */\n end?: ReactNode | null | undefined;\n};\n\n/** Props of a `Gtk.Scale` element. */\ntype GtkScaleProps = {\n /** Marks drawn along the scale, cleared and re-added whenever the list changes. */\n marks?: ScaleMark[] | null | undefined;\n};\n\n/** Props of a `Gtk.ListBox` element. */\ntype GtkListBoxProps = {\n /**\n * Index of the row to select; `-1` or `null` selects none. Applied once the row exists, and\n * re-applied whenever the box's own selection drifts from it. Left alone while the prop is absent.\n */\n selectedIndex?: number | null | undefined;\n} & ChildrenProps;\n\n/** Props of a `Gtk.Calendar` element. */\ntype GtkCalendarProps = {\n /** Days of the shown month drawn as marked, cleared and re-marked whenever the list changes. */\n markedDays?: number[] | null | undefined;\n};\n\n/** Props of a `Gtk.LevelBar` element. */\ntype GtkLevelBarProps = {\n /** Offsets that split the bar's range into differently styled intervals. */\n offsets?: LevelBarOffset[] | null | undefined;\n};\n\n/** Props of a `Gtk.SizeGroup` element. */\ntype GtkSizeGroupProps = {\n /** Widgets the group keeps at a common size. */\n widgets?: Gtk.Widget[] | null | undefined;\n};\n\n/** Props of a `Gtk.AboutDialog` element. */\ntype GtkAboutDialogProps = {\n /**\n * Extra sections appended to the dialog's credits. GTK offers no way to remove one, so the list\n * cannot change once it has been applied.\n */\n creditSections?: CreditSection[] | null | undefined;\n};\n\n/** Props of a `Gtk.Application` element, whose `children` are the windows it owns. */\ntype GtkApplicationProps = {\n /** Accelerators bound to the application's actions. */\n actionAccels?: ActionAccel[] | null | undefined;\n /**\n * Command-line options the application parses, registered before it starts. GLib offers no way to\n * unregister one, so the list cannot change once it has been applied.\n */\n mainOptions?: MainOption[] | null | undefined;\n} & ChildrenProps;\n\n/** Props of a `Gtk.DropTarget` element. */\ntype GtkDropTargetProps = {\n /** GTypes the target accepts a drop of. */\n types?: GObject.Type[] | null | undefined;\n};\n\n/** Props of a `Gtk.DrawingArea` element. */\ntype GtkDrawingAreaProps = {\n /** Callback that draws the area's contents; setting it queues a redraw. */\n drawFunc?: Gtk.DrawingAreaDrawFunc | null | undefined;\n};\n\n/** Props of a `Gtk.DragSource` element. */\ntype GtkDragSourceProps = {\n /** Icon shown under the pointer while a drag started from this source is in flight. */\n icon?: DragSourceIcon | null | undefined;\n};\n\nexport {\n type MenuItem,\n type VflConstraints,\n type ScaleMark,\n type LevelBarOffset,\n type CreditSection,\n type MainOption,\n type ActionAccel,\n type DragSourceIcon,\n type ChildrenProps,\n type GtkWidgetProps,\n type Style,\n type StyleProperties,\n type ActionGroupProps,\n type ActionMapProps,\n type MenuProps,\n type GtkShortcutControllerProps,\n type GtkOverlayProps,\n type GtkTextChildAnchorProps,\n type GtkConstraintLayoutProps,\n type GtkHeaderBarProps,\n type GtkScaleProps,\n type GtkListBoxProps,\n type GtkCalendarProps,\n type GtkLevelBarProps,\n type GtkSizeGroupProps,\n type GtkAboutDialogProps,\n type GtkApplicationProps,\n type GtkDropTargetProps,\n type GtkDrawingAreaProps,\n type GtkDragSourceProps,\n};\n"]}
@@ -3,9 +3,10 @@ import { type ElementNode, type SignalTarget } from "./node.js";
3
3
  declare const assertPropsCanChange: (typeName: string, prev: Props, next: Props) => void;
4
4
  declare const markFlush: (node: ElementNode) => void;
5
5
  declare const flushBehaviors: () => void;
6
+ declare const teardownBehaviors: (node: ElementNode) => void;
6
7
  declare const settleAccessible: () => void;
7
8
  declare const flushAccessible: () => void;
8
9
  declare const applyElementProps: (node: ElementNode, prev: Props, next: Props) => void;
9
10
  declare const applyAdoptedProps: (target: SignalTarget, prev: Props, next: Props) => void;
10
- export { markFlush, flushAccessible, settleAccessible, flushBehaviors, applyElementProps, applyAdoptedProps, assertPropsCanChange, };
11
+ export { markFlush, flushAccessible, settleAccessible, flushBehaviors, teardownBehaviors, applyElementProps, applyAdoptedProps, assertPropsCanChange, };
11
12
  //# sourceMappingURL=apply-props.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-props.d.ts","sourceRoot":"","sources":["../../src/reconciler/apply-props.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,KAAK,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,EAAE,KAAK,WAAW,EAAsB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAiIpF,QAAA,MAAM,oBAAoB,GAAI,UAAU,MAAM,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,KAAG,IAS1E,CAAC;AAqEF,QAAA,MAAM,SAAS,GAAI,MAAM,WAAW,KAAG,IAItC,CAAC;AAQF,QAAA,MAAM,cAAc,QAAO,IAI1B,CAAC;AAuCF,QAAA,MAAM,gBAAgB,QAAO,IAM5B,CAAC;AAEF,QAAA,MAAM,eAAe,QAAO,IAO3B,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,MAAM,WAAW,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,KAAG,IASxE,CAAC;AAIF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,YAAY,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,KAAG,IAc3E,CAAC;AAEF,OAAO,EACH,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACvB,CAAC"}
1
+ {"version":3,"file":"apply-props.d.ts","sourceRoot":"","sources":["../../src/reconciler/apply-props.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,KAAK,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,EAAE,KAAK,WAAW,EAAsB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAyJpF,QAAA,MAAM,oBAAoB,GAAI,UAAU,MAAM,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,KAAG,IAS1E,CAAC;AAuEF,QAAA,MAAM,SAAS,GAAI,MAAM,WAAW,KAAG,IAItC,CAAC;AAQF,QAAA,MAAM,cAAc,QAAO,IAI1B,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,MAAM,WAAW,KAAG,IAO9C,CAAC;AAkDF,QAAA,MAAM,gBAAgB,QAAO,IAM5B,CAAC;AAEF,QAAA,MAAM,eAAe,QAAO,IAO3B,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,MAAM,WAAW,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,KAAG,IASxE,CAAC;AAIF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,YAAY,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,KAAG,IAc3E,CAAC;AAEF,OAAO,EACH,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACvB,CAAC"}
@@ -1,36 +1,53 @@
1
+ import * as GObject from "@gtkx/gi/gobject";
1
2
  import * as Gtk from "@gtkx/gi/gtk";
2
- import { coerceObjectProperty } from "@gtkx/runtime";
3
- import { drain, isDeepEqual, kebabCase } from "@gtkx/utils";
3
+ import { coerceObjectProperty, getInstanceType, signalForHandlerName, TYPE_INVALID } from "@gtkx/runtime";
4
+ import { drain, isDeepEqual, kebabCase, lowerFirst, unsanitizeIdentifier } from "@gtkx/utils";
4
5
  import { applyAccessibleProps, isAccessibleProp } from "../utils/accessible-props.js";
5
- import { typeInfoFor } from "./metadata.js";
6
+ import { getPropertyName, hasProperty, typeInfoFor } from "./metadata.js";
6
7
  import { getOrCreateContext } from "./node.js";
7
8
  import { applyWrite, connectHandler, disconnectHandler } from "./signals.js";
8
9
  import { bufferText, hasSameText, isContentPaintableProp, markTextDirty, TEXT_PROP } from "./text.js";
9
10
  const REACT_RESERVED_PROPS = new Set(["children", "ref", "key"]);
10
11
  const NOTIFY_PREFIX = "onNotify";
11
- const HANDLER_PREFIX = "on";
12
12
  const HANDLER_NAME = /^on[A-Z]/;
13
13
  const flushDirty = new Set();
14
14
  const accessibleDirty = new Map();
15
- const mapWatched = new WeakSet();
15
+ const mapWatched = new WeakMap();
16
16
  const pendingMap = new Set();
17
17
  const isHandlerName = (name) => HANDLER_NAME.test(name);
18
- const signalForProp = (info, name) => {
18
+ const notifiedAccessor = (name) => lowerFirst(name.slice(NOTIFY_PREFIX.length));
19
+ const unknownSignalError = (typeName, name) => new Error(`The handler prop '${name}' of <${typeName}> names no signal ${typeName} carries. Name a ` +
20
+ `signal the element carries, or declare the one '${name}' stands for on ${typeName} when ` +
21
+ "its class is registered.");
22
+ const lookedUpSignal = (target, name) => {
23
+ const type = getInstanceType(target.object);
24
+ const signal = type === TYPE_INVALID ? undefined : signalForHandlerName(type, name);
25
+ if (signal === undefined) {
26
+ throw unknownSignalError(target.typeName, name);
27
+ }
28
+ return signal;
29
+ };
30
+ const signalForProp = (target, info, name) => {
19
31
  if (name === NOTIFY_PREFIX) {
20
32
  return "notify";
21
33
  }
22
34
  if (name.startsWith(NOTIFY_PREFIX) && name.length > NOTIFY_PREFIX.length) {
23
- return `notify::${kebabCase(name.slice(NOTIFY_PREFIX.length))}`;
35
+ const accessor = notifiedAccessor(name);
36
+ const property = getPropertyName(target.object, accessor) ?? unsanitizeIdentifier(kebabCase(accessor));
37
+ return `notify::${property}`;
24
38
  }
25
- return info.signals[name] ?? kebabCase(name.slice(HANDLER_PREFIX.length));
39
+ return info.signals[name] ?? lookedUpSignal(target, name);
26
40
  };
27
- const isReservedName = (name, info) => REACT_RESERVED_PROPS.has(name) || isHandlerName(name) || isAccessibleProp(name) || info.constructOnly.has(name);
41
+ const isReservedName = (name, info) => REACT_RESERVED_PROPS.has(name) ||
42
+ (isHandlerName(name) && !hasProperty(info, name)) ||
43
+ (isAccessibleProp(name) && !hasProperty(info, name)) ||
44
+ info.constructOnly.has(name);
28
45
  const isSkippedValueName = (name, info, consumed) => isReservedName(name, info) || consumed.has(name);
29
46
  const writeValue = (object, name, value) => {
30
47
  if (hasSameText(object, name, value)) {
31
48
  return;
32
49
  }
33
- applyWrite(() => {
50
+ applyWrite(name, () => {
34
51
  Reflect.set(object, name, coerceObjectProperty(object, name, value));
35
52
  });
36
53
  };
@@ -51,7 +68,7 @@ const applyBufferText = (buffer, text) => {
51
68
  if (bufferText(buffer) === text) {
52
69
  return;
53
70
  }
54
- applyWrite(() => {
71
+ applyWrite(TEXT_PROP, () => {
55
72
  buffer.beginIrreversibleAction();
56
73
  buffer.setText(text, -1);
57
74
  buffer.endIrreversibleAction();
@@ -135,22 +152,24 @@ const restoreActionableSensitivity = (node, info, prev, next) => {
135
152
  }
136
153
  const desired = "sensitive" in next ? next.sensitive : info.defaults.sensitive;
137
154
  if (typeof desired === "boolean") {
138
- applyWrite(() => {
155
+ applyWrite("sensitive", () => {
139
156
  Reflect.set(node.object, "sensitive", desired);
140
157
  });
141
158
  }
142
159
  };
160
+ const applyHandler = (target, info, name, next) => {
161
+ const value = next[name];
162
+ if (typeof value === "function") {
163
+ connectHandler(target, name, signalForProp(target, info, name), value);
164
+ }
165
+ else {
166
+ disconnectHandler(target, name);
167
+ }
168
+ };
143
169
  const applyHandlers = (target, info, prev, next) => {
144
170
  eachChangedName(prev, next, (name) => {
145
- if (!isHandlerName(name)) {
146
- return;
147
- }
148
- const value = next[name];
149
- if (typeof value === "function") {
150
- connectHandler(target, name, signalForProp(info, name), value);
151
- }
152
- else {
153
- disconnectHandler(target, name);
171
+ if (isHandlerName(name) && !hasProperty(info, name)) {
172
+ applyHandler(target, info, name, next);
154
173
  }
155
174
  });
156
175
  };
@@ -169,6 +188,13 @@ const flushBehaviors = () => {
169
188
  eachBehavior(node, (behavior, context) => behavior.flush?.(node.object, context));
170
189
  });
171
190
  };
191
+ const teardownBehaviors = (node) => {
192
+ flushDirty.delete(node);
193
+ unwatchMap(node);
194
+ for (const [behavior, context] of node.contexts) {
195
+ behavior.teardown?.(node.object, context);
196
+ }
197
+ };
172
198
  const applyAccessible = (object, prev, next) => {
173
199
  if (object instanceof Gtk.Accessible) {
174
200
  applyAccessibleProps(object, prev, next);
@@ -192,12 +218,21 @@ const watchMap = (node) => {
192
218
  if (mapWatched.has(node) || !(object instanceof Gtk.Widget) || !hasAccessibleProp(node.props)) {
193
219
  return;
194
220
  }
195
- mapWatched.add(node);
196
- object.connect("map", () => {
221
+ const onMapped = () => {
197
222
  pendingMap.add(node);
198
223
  setTimeout(settleAccessible, 0);
224
+ };
225
+ object.on("map", onMapped);
226
+ mapWatched.set(node, () => {
227
+ object.off("map", onMapped);
199
228
  });
200
229
  };
230
+ const unwatchMap = (node) => {
231
+ mapWatched.get(node)?.();
232
+ mapWatched.delete(node);
233
+ pendingMap.delete(node);
234
+ accessibleDirty.delete(node);
235
+ };
201
236
  const settleAccessible = () => {
202
237
  drain(pendingMap, (node) => {
203
238
  if (node.object instanceof Gtk.Widget && node.object.getMapped()) {
@@ -235,5 +270,5 @@ const applyAdoptedProps = (target, prev, next) => {
235
270
  applyAccessible(object, prev, next);
236
271
  applyHandlers(target, info, prev, next);
237
272
  };
238
- export { markFlush, flushAccessible, settleAccessible, flushBehaviors, applyElementProps, applyAdoptedProps, assertPropsCanChange, };
273
+ export { markFlush, flushAccessible, settleAccessible, flushBehaviors, teardownBehaviors, applyElementProps, applyAdoptedProps, assertPropsCanChange, };
239
274
  //# sourceMappingURL=apply-props.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-props.js","sourceRoot":"","sources":["../../src/reconciler/apply-props.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAiB,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAoB,kBAAkB,EAAqB,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAMtG,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACjE,MAAM,aAAa,GAAG,UAAU,CAAC;AACjC,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;AAC/C,MAAM,eAAe,GAA4B,IAAI,GAAG,EAAE,CAAC;AAC3D,MAAM,UAAU,GAAyB,IAAI,OAAO,EAAE,CAAC;AACvD,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;AAE/C,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEzE,MAAM,aAAa,GAAG,CAAC,IAAc,EAAE,IAAY,EAAU,EAAE;IAC3D,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;QACvE,OAAO,WAAW,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,IAAc,EAAW,EAAE,CAC7D,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAEpH,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,IAAc,EAAE,QAAqB,EAAW,EAAE,CACxF,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAErD,MAAM,UAAU,GAAG,CAAC,MAAsB,EAAE,IAAY,EAAE,KAAc,EAAQ,EAAE;IAC9E,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO;IACX,CAAC;IAED,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAsB,EAAE,IAAc,EAAE,IAAY,EAAQ,EAAE;IAC9E,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAsB,EAAE,IAAc,EAAE,IAAY,EAAE,KAAc,EAAQ,EAAE;IAC9F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACJ,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAsB,EAAE,IAAY,EAAQ,EAAE;IACnE,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO;IACX,CAAC;IAED,UAAU,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACjC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,qBAAqB,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAE,IAAY,EAAoD,EAAE,CACvG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC;AAEjG,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzG,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAE,KAAgB,EAAQ,EAAE;IAC7E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEzC,IAAI,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAClD,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9C,OAAO;IACX,CAAC;IAED,IAAI,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpB,OAAO;IACX,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,CAAC;IAEhE,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAW,EAAE,IAAW,EAAE,KAA6B,EAAQ,EAAE;IACtF,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAS,EAAE,CAC9D,IAAI,KAAK,CACL,0CAA0C,IAAI,SAAS,QAAQ,yBAAyB;IACxF,uFAAuF;IACvF,iBAAiB,IAAI,mCAAmC,CAC3D,CAAC;AAEN,MAAM,eAAe,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAErH,MAAM,qBAAqB,GAAG,CAAC,IAAc,EAAE,IAAY,EAAE,MAAkB,EAAW,EAAE,CACxF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAErF,MAAM,6BAA6B,GAAG,CAAC,IAAc,EAAE,IAAY,EAAE,MAAkB,EAAW,EAAE,CAChG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;IACpC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvD,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC9E,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,MAAM,GAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAE1C,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,6BAA6B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YACjG,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,GAA0B,EAAE,QAAyB,EAAQ,EAAE;IACpF,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5G,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QACxB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAE,IAAW,EAAE,IAAW,EAAe,EAAE;IACpG,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IACxC,MAAM,GAAG,GAA0B,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAElE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAE,MAAkB,EAAE,QAAqB,EAAQ,EAAE;IAC7G,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/C,IAAI,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9F,OAAO;QACX,CAAC;QAED,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IACvG,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjE,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IAE/E,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,UAAU,CAAC,GAAG,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAoB,EAAE,IAAc,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC3F,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAsB,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACJ,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAiB,EAAQ,EAAE;IAC1C,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAE,KAA4D,EAAQ,EAAE;IAC3G,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;QAC1D,KAAK,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAS,EAAE;IAC9B,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;QACvB,YAAY,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAsB,EAAE,IAAkB,EAAE,IAAW,EAAQ,EAAE;IACtF,IAAI,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,CAAC;QACnC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAiB,EAAE,IAAW,EAAQ,EAAE;IAC5D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAW,EAAE;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAQ,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5F,OAAO;IACX,CAAC;IAED,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAErB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE;QACvB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAS,EAAE;IAChC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;QACvB,IAAI,IAAI,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;YAC/D,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAS,EAAE;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC;QACzC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAiB,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC5E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxD,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,IAAc,EAAE,IAAY,EAAW,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAEnG,MAAM,iBAAiB,GAAG,CAAC,MAAoB,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC/E,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACxE,OAAO;QACX,CAAC;QAED,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,OAAO,EACH,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACvB,CAAC","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport type { SignalHandler } from \"@gtkx/runtime\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { coerceObjectProperty } from \"@gtkx/runtime\";\nimport { drain, isDeepEqual, 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 HANDLER_NAME = /^on[A-Z]/;\nconst flushDirty: Set<ElementNode> = new Set();\nconst accessibleDirty: Map<ElementNode, Props> = new Map();\nconst mapWatched: WeakSet<ElementNode> = new WeakSet();\nconst pendingMap: Set<ElementNode> = new Set();\n\nconst isHandlerName = (name: string): boolean => HANDLER_NAME.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, coerceObjectProperty(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 for (const name in prev) {\n visit(name);\n }\n\n for (const name in next) {\n if (!Object.hasOwn(prev, name)) {\n visit(name);\n }\n }\n};\n\nconst propChangeError = (typeName: string, name: string): Error =>\n new Error(\n `Cannot change the construct-only prop '${name}' of <${typeName}> after it is created. ` +\n \"It is only accepted while the element is being built, so give the element a key that \" +\n `changes with '${name}' and React will build a new one.`,\n );\n\nconst hasAppliedValue = (value: unknown): boolean => (Array.isArray(value) ? value.length > 0 : value !== undefined);\n\nconst isConstructOnlyChange = (info: TypeInfo, name: string, change: PropChange): boolean =>\n info.constructOnly.has(name) && !Object.is(change.prev[name], change.next[name]);\n\nconst isDeclaredConstructOnlyChange = (info: TypeInfo, name: string, change: PropChange): boolean =>\n info.declaredConstructOnly.has(name) &&\n hasAppliedValue(change.prev[name]) &&\n !isDeepEqual(change.prev[name], change.next[name]);\n\nconst assertPropsCanChange = (typeName: string, prev: Props, next: Props): void => {\n const info = typeInfoFor(typeName);\n const change: PropChange = { prev, next };\n\n eachChangedName(prev, next, (name) => {\n if (isConstructOnlyChange(info, name, change) || isDeclaredConstructOnlyChange(info, name, change)) {\n throw propChangeError(typeName, name);\n }\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 applyAccessible = (object: GObject.Object, prev: Props | null, next: Props): void => {\n if (object instanceof Gtk.Accessible) {\n applyAccessibleProps(object, prev, next);\n }\n};\n\nconst markAccessible = (node: ElementNode, prev: Props): void => {\n if (!accessibleDirty.has(node)) {\n accessibleDirty.set(node, prev);\n }\n};\n\nconst hasAccessibleProp = (props: Props): boolean => {\n for (const name in props) {\n if (isAccessibleProp(name)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst watchMap = (node: ElementNode): void => {\n const { object } = node;\n\n if (mapWatched.has(node) || !(object instanceof Gtk.Widget) || !hasAccessibleProp(node.props)) {\n return;\n }\n\n mapWatched.add(node);\n\n object.connect(\"map\", () => {\n pendingMap.add(node);\n setTimeout(settleAccessible, 0);\n });\n};\n\nconst settleAccessible = (): void => {\n drain(pendingMap, (node) => {\n if (node.object instanceof Gtk.Widget && node.object.getMapped()) {\n applyAccessible(node.object, null, node.props);\n }\n });\n};\n\nconst flushAccessible = (): void => {\n for (const [node, prev] of accessibleDirty) {\n applyAccessible(node.object, prev, node.props);\n watchMap(node);\n }\n\n accessibleDirty.clear();\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 applyHandlers(node, info, prev, next);\n markAccessible(node, prev);\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 flushAccessible,\n settleAccessible,\n flushBehaviors,\n applyElementProps,\n applyAdoptedProps,\n assertPropsCanChange,\n};\n"]}
1
+ {"version":3,"file":"apply-props.js","sourceRoot":"","sources":["../../src/reconciler/apply-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAiB,WAAW,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAoB,kBAAkB,EAAqB,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAMtG,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACjE,MAAM,aAAa,GAAG,UAAU,CAAC;AACjC,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;AAC/C,MAAM,eAAe,GAA4B,IAAI,GAAG,EAAE,CAAC;AAC3D,MAAM,UAAU,GAAqC,IAAI,OAAO,EAAE,CAAC;AACnE,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;AAE/C,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhG,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAS,EAAE,CACjE,IAAI,KAAK,CACL,qBAAqB,IAAI,SAAS,QAAQ,qBAAqB,QAAQ,mBAAmB;IAC1F,mDAAmD,IAAI,mBAAmB,QAAQ,QAAQ;IAC1F,0BAA0B,CAC7B,CAAC;AAEN,MAAM,cAAc,GAAG,CAAC,MAAoB,EAAE,IAAY,EAAU,EAAE;IAClE,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEpF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAoB,EAAE,IAAc,EAAE,IAAY,EAAU,EAAE;IACjF,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;QACvE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,oBAAoB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEvG,OAAO,WAAW,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,IAAc,EAAW,EAAE,CAC7D,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAEjC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,IAAc,EAAE,QAAqB,EAAW,EAAE,CACxF,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAErD,MAAM,UAAU,GAAG,CAAC,MAAsB,EAAE,IAAY,EAAE,KAAc,EAAQ,EAAE;IAC9E,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO;IACX,CAAC;IAED,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAsB,EAAE,IAAc,EAAE,IAAY,EAAQ,EAAE;IAC9E,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAsB,EAAE,IAAc,EAAE,IAAY,EAAE,KAAc,EAAQ,EAAE;IAC9F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACJ,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAsB,EAAE,IAAY,EAAQ,EAAE;IACnE,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO;IACX,CAAC;IAED,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACjC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,qBAAqB,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAE,IAAY,EAAoD,EAAE,CACvG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC;AAEjG,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzG,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAE,KAAgB,EAAQ,EAAE;IAC7E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEzC,IAAI,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAClD,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9C,OAAO;IACX,CAAC;IAED,IAAI,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpB,OAAO;IACX,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,CAAC;IAEhE,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAW,EAAE,IAAW,EAAE,KAA6B,EAAQ,EAAE;IACtF,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAS,EAAE,CAC9D,IAAI,KAAK,CACL,0CAA0C,IAAI,SAAS,QAAQ,yBAAyB;IACxF,uFAAuF;IACvF,iBAAiB,IAAI,mCAAmC,CAC3D,CAAC;AAEN,MAAM,eAAe,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAErH,MAAM,qBAAqB,GAAG,CAAC,IAAc,EAAE,IAAY,EAAE,MAAkB,EAAW,EAAE,CACxF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAErF,MAAM,6BAA6B,GAAG,CAAC,IAAc,EAAE,IAAY,EAAE,MAAkB,EAAW,EAAE,CAChG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;IACpC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvD,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC9E,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,MAAM,GAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAE1C,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,6BAA6B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YACjG,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,GAA0B,EAAE,QAAyB,EAAQ,EAAE;IACpF,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5G,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QACxB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAE,IAAW,EAAE,IAAW,EAAe,EAAE;IACpG,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IACxC,MAAM,GAAG,GAA0B,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAElE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAE,MAAkB,EAAE,QAAqB,EAAQ,EAAE;IAC7G,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/C,IAAI,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9F,OAAO;QACX,CAAC;QAED,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,IAAiB,EAAE,IAAc,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IACvG,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjE,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IAE/E,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAE,IAAc,EAAE,IAAY,EAAE,IAAW,EAAQ,EAAE;IAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAC9B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAsB,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACJ,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAoB,EAAE,IAAc,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC3F,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAClD,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAiB,EAAQ,EAAE;IAC1C,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAE,KAA4D,EAAQ,EAAE;IAC3G,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;QAC1D,KAAK,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAS,EAAE;IAC9B,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;QACvB,YAAY,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAiB,EAAQ,EAAE;IAClD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAsB,EAAE,IAAkB,EAAE,IAAW,EAAQ,EAAE;IACtF,IAAI,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,CAAC;QACnC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAiB,EAAE,IAAW,EAAQ,EAAE;IAC5D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAW,EAAE;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAQ,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5F,OAAO;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,GAAc,EAAE;QAC7B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE3B,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;QACtB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAQ,EAAE;IAC3C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACzB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAS,EAAE;IAChC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;QACvB,IAAI,IAAI,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;YAC/D,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAS,EAAE;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC;QACzC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAiB,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC5E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxD,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,IAAc,EAAE,IAAY,EAAW,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAEnG,MAAM,iBAAiB,GAAG,CAAC,MAAoB,EAAE,IAAW,EAAE,IAAW,EAAQ,EAAE;IAC/E,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACxE,OAAO;QACX,CAAC;QAED,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,OAAO,EACH,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACvB,CAAC","sourcesContent":["import type { SignalHandler } from \"@gtkx/runtime\";\nimport * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { coerceObjectProperty, getInstanceType, signalForHandlerName, TYPE_INVALID } from \"@gtkx/runtime\";\nimport { drain, isDeepEqual, kebabCase, lowerFirst, unsanitizeIdentifier } from \"@gtkx/utils\";\nimport type { ElementBehavior, Props } from \"./registry.js\";\nimport { applyAccessibleProps, isAccessibleProp } from \"../utils/accessible-props.js\";\nimport { getPropertyName, hasProperty, 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_NAME = /^on[A-Z]/;\nconst flushDirty: Set<ElementNode> = new Set();\nconst accessibleDirty: Map<ElementNode, Props> = new Map();\nconst mapWatched: WeakMap<ElementNode, () => void> = new WeakMap();\nconst pendingMap: Set<ElementNode> = new Set();\n\nconst isHandlerName = (name: string): boolean => HANDLER_NAME.test(name);\nconst notifiedAccessor = (name: string): string => lowerFirst(name.slice(NOTIFY_PREFIX.length));\n\nconst unknownSignalError = (typeName: string, name: string): Error =>\n new Error(\n `The handler prop '${name}' of <${typeName}> names no signal ${typeName} carries. Name a ` +\n `signal the element carries, or declare the one '${name}' stands for on ${typeName} when ` +\n \"its class is registered.\",\n );\n\nconst lookedUpSignal = (target: SignalTarget, name: string): string => {\n const type = getInstanceType(target.object);\n const signal = type === TYPE_INVALID ? undefined : signalForHandlerName(type, name);\n\n if (signal === undefined) {\n throw unknownSignalError(target.typeName, name);\n }\n\n return signal;\n};\n\nconst signalForProp = (target: SignalTarget, 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 const accessor = notifiedAccessor(name);\n const property = getPropertyName(target.object, accessor) ?? unsanitizeIdentifier(kebabCase(accessor));\n\n return `notify::${property}`;\n }\n\n return info.signals[name] ?? lookedUpSignal(target, name);\n};\n\nconst isReservedName = (name: string, info: TypeInfo): boolean =>\n REACT_RESERVED_PROPS.has(name) ||\n (isHandlerName(name) && !hasProperty(info, name)) ||\n (isAccessibleProp(name) && !hasProperty(info, name)) ||\n 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(name, () => {\n Reflect.set(object, name, coerceObjectProperty(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(TEXT_PROP, () => {\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 for (const name in prev) {\n visit(name);\n }\n\n for (const name in next) {\n if (!Object.hasOwn(prev, name)) {\n visit(name);\n }\n }\n};\n\nconst propChangeError = (typeName: string, name: string): Error =>\n new Error(\n `Cannot change the construct-only prop '${name}' of <${typeName}> after it is created. ` +\n \"It is only accepted while the element is being built, so give the element a key that \" +\n `changes with '${name}' and React will build a new one.`,\n );\n\nconst hasAppliedValue = (value: unknown): boolean => (Array.isArray(value) ? value.length > 0 : value !== undefined);\n\nconst isConstructOnlyChange = (info: TypeInfo, name: string, change: PropChange): boolean =>\n info.constructOnly.has(name) && !Object.is(change.prev[name], change.next[name]);\n\nconst isDeclaredConstructOnlyChange = (info: TypeInfo, name: string, change: PropChange): boolean =>\n info.declaredConstructOnly.has(name) &&\n hasAppliedValue(change.prev[name]) &&\n !isDeepEqual(change.prev[name], change.next[name]);\n\nconst assertPropsCanChange = (typeName: string, prev: Props, next: Props): void => {\n const info = typeInfoFor(typeName);\n const change: PropChange = { prev, next };\n\n eachChangedName(prev, next, (name) => {\n if (isConstructOnlyChange(info, name, change) || isDeclaredConstructOnlyChange(info, name, change)) {\n throw propChangeError(typeName, name);\n }\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(\"sensitive\", () => {\n Reflect.set(node.object, \"sensitive\", desired);\n });\n }\n};\n\nconst applyHandler = (target: SignalTarget, info: TypeInfo, name: string, next: Props): void => {\n const value = next[name];\n\n if (typeof value === \"function\") {\n connectHandler(target, name, signalForProp(target, info, name), value as SignalHandler);\n } else {\n disconnectHandler(target, name);\n }\n};\n\nconst applyHandlers = (target: SignalTarget, info: TypeInfo, prev: Props, next: Props): void => {\n eachChangedName(prev, next, (name) => {\n if (isHandlerName(name) && !hasProperty(info, name)) {\n applyHandler(target, info, name, next);\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 teardownBehaviors = (node: ElementNode): void => {\n flushDirty.delete(node);\n unwatchMap(node);\n\n for (const [behavior, context] of node.contexts) {\n behavior.teardown?.(node.object, context);\n }\n};\n\nconst applyAccessible = (object: GObject.Object, prev: Props | null, next: Props): void => {\n if (object instanceof Gtk.Accessible) {\n applyAccessibleProps(object, prev, next);\n }\n};\n\nconst markAccessible = (node: ElementNode, prev: Props): void => {\n if (!accessibleDirty.has(node)) {\n accessibleDirty.set(node, prev);\n }\n};\n\nconst hasAccessibleProp = (props: Props): boolean => {\n for (const name in props) {\n if (isAccessibleProp(name)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst watchMap = (node: ElementNode): void => {\n const { object } = node;\n\n if (mapWatched.has(node) || !(object instanceof Gtk.Widget) || !hasAccessibleProp(node.props)) {\n return;\n }\n\n const onMapped = (): undefined => {\n pendingMap.add(node);\n setTimeout(settleAccessible, 0);\n };\n\n object.on(\"map\", onMapped);\n\n mapWatched.set(node, () => {\n object.off(\"map\", onMapped);\n });\n};\n\nconst unwatchMap = (node: ElementNode): void => {\n mapWatched.get(node)?.();\n mapWatched.delete(node);\n pendingMap.delete(node);\n accessibleDirty.delete(node);\n};\n\nconst settleAccessible = (): void => {\n drain(pendingMap, (node) => {\n if (node.object instanceof Gtk.Widget && node.object.getMapped()) {\n applyAccessible(node.object, null, node.props);\n }\n });\n};\n\nconst flushAccessible = (): void => {\n for (const [node, prev] of accessibleDirty) {\n applyAccessible(node.object, prev, node.props);\n watchMap(node);\n }\n\n accessibleDirty.clear();\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 applyHandlers(node, info, prev, next);\n markAccessible(node, prev);\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 flushAccessible,\n settleAccessible,\n flushBehaviors,\n teardownBehaviors,\n applyElementProps,\n applyAdoptedProps,\n assertPropsCanChange,\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 { createApplication, getClassType, TYPE_INVALID, typeFromName, typeIsA, } from "@gtkx/runtime";
2
- import { getOrInsert, isDeepEqual, structuredClone } from "@gtkx/utils";
2
+ import { getOrInsert, isDeepEqual, kebabCase, structuredClone, unsanitizeIdentifier } from "@gtkx/utils";
3
+ import { getPropertyName } from "./metadata.js";
3
4
  import { applyWrite } from "./signals.js";
4
5
  import { hasSameText } from "./text.js";
5
6
  const childTypeCache = new Map();
@@ -73,22 +74,45 @@ const list = (prop, hooks) => {
73
74
  }
74
75
  return behavior;
75
76
  };
76
- const flushDeferred = (object, context, prop, canApply) => {
77
- const state = context;
78
- if (!state.isPresent || Object.is(state.applied, state.desired)) {
77
+ const settleDeferred = (object, state, prop, canApply) => {
78
+ if (!state.isPresent || Object.is(Reflect.get(object, prop), state.desired)) {
79
79
  return;
80
80
  }
81
81
  if (canApply !== undefined && !canApply(object, state.desired)) {
82
82
  return;
83
83
  }
84
- applyWrite(() => {
84
+ applyWrite(prop, () => {
85
85
  Reflect.set(object, prop, state.desired);
86
86
  });
87
- state.applied = state.desired;
87
+ };
88
+ const scheduleSettle = (object, state, prop, canApply) => {
89
+ if (state.isScheduled) {
90
+ return;
91
+ }
92
+ state.isScheduled = true;
93
+ queueMicrotask(() => {
94
+ state.isScheduled = false;
95
+ if (state.disconnect !== null) {
96
+ settleDeferred(object, state, prop, canApply);
97
+ }
98
+ });
99
+ };
100
+ const watchDrift = (object, state, prop, canApply) => {
101
+ if (state.disconnect !== null) {
102
+ return;
103
+ }
104
+ const signal = `notify::${getPropertyName(object, prop) ?? unsanitizeIdentifier(kebabCase(prop))}`;
105
+ const handler = () => {
106
+ scheduleSettle(object, state, prop, canApply);
107
+ };
108
+ object.on(signal, handler);
109
+ state.disconnect = () => {
110
+ object.off(signal, handler);
111
+ };
88
112
  };
89
113
  const deferred = (prop, canApply) => ({
90
114
  deferred: [prop],
91
- initialize: () => ({ desired: undefined, isPresent: false, applied: undefined }),
115
+ initialize: () => ({ desired: undefined, isPresent: false, isScheduled: false, disconnect: null }),
92
116
  update: (_object, _prev, next, context) => {
93
117
  const state = context;
94
118
  state.desired = next[prop];
@@ -96,12 +120,19 @@ const deferred = (prop, canApply) => ({
96
120
  return [prop];
97
121
  },
98
122
  flush: (object, context) => {
99
- flushDeferred(object, context, prop, canApply);
123
+ const state = context;
124
+ settleDeferred(object, state, prop, canApply);
125
+ watchDrift(object, state, prop, canApply);
126
+ },
127
+ teardown: (_object, context) => {
128
+ const state = context;
129
+ state.disconnect?.();
130
+ state.disconnect = null;
100
131
  },
101
132
  });
102
133
  const controlledText = (prop) => value(prop, (object, next) => {
103
134
  if (!hasSameText(object, prop, next)) {
104
- applyWrite(() => {
135
+ applyWrite(prop, () => {
105
136
  Reflect.set(object, prop, next);
106
137
  });
107
138
  }