@gtkx/react 0.21.0 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -34
- package/dist/components/application.d.ts +10 -0
- package/dist/components/application.d.ts.map +1 -0
- package/dist/components/application.js +26 -0
- package/dist/components/application.js.map +1 -0
- package/dist/components/window.d.ts +8 -0
- package/dist/components/window.d.ts.map +1 -0
- package/dist/components/window.js +23 -0
- package/dist/components/window.js.map +1 -0
- package/dist/hooks/use-application.d.ts +8 -0
- package/dist/hooks/use-application.d.ts.map +1 -0
- package/dist/hooks/use-application.js +13 -0
- package/dist/hooks/use-application.js.map +1 -0
- package/dist/hooks/use-bind-setting.d.ts +6 -0
- package/dist/hooks/use-bind-setting.d.ts.map +1 -0
- package/dist/hooks/use-bind-setting.js +19 -0
- package/dist/hooks/use-bind-setting.js.map +1 -0
- package/dist/hooks/use-merge-refs.d.ts +3 -0
- package/dist/hooks/use-merge-refs.d.ts.map +1 -0
- package/dist/hooks/use-merge-refs.js +48 -0
- package/dist/hooks/use-merge-refs.js.map +1 -0
- package/dist/hooks/use-object-attachment.d.ts +10 -0
- package/dist/hooks/use-object-attachment.d.ts.map +1 -0
- package/dist/hooks/use-object-attachment.js +24 -0
- package/dist/hooks/use-object-attachment.js.map +1 -0
- package/dist/hooks/use-object-value.d.ts +4 -0
- package/dist/hooks/use-object-value.d.ts.map +1 -0
- package/dist/hooks/use-object-value.js +32 -0
- package/dist/hooks/use-object-value.js.map +1 -0
- package/dist/hooks/use-parent-window.d.ts +8 -0
- package/dist/hooks/use-parent-window.d.ts.map +1 -0
- package/dist/hooks/use-parent-window.js +7 -0
- package/dist/hooks/use-parent-window.js.map +1 -0
- package/dist/hooks/use-property.d.ts +14 -0
- package/dist/hooks/use-property.d.ts.map +1 -0
- package/dist/hooks/use-property.js +13 -0
- package/dist/hooks/use-property.js.map +1 -0
- package/dist/hooks/use-setting.d.ts +25 -0
- package/dist/hooks/use-setting.d.ts.map +1 -0
- package/dist/hooks/use-setting.js +15 -0
- package/dist/hooks/use-setting.js.map +1 -0
- package/dist/hooks/use-signal.d.ts +21 -0
- package/dist/hooks/use-signal.d.ts.map +1 -0
- package/dist/hooks/use-signal.js +20 -0
- package/dist/hooks/use-signal.js.map +1 -0
- package/dist/index.d.ts +14 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -7
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +14 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +14 -0
- package/dist/internal.js.map +1 -0
- package/dist/libraries/adw/dialog.d.ts +8 -0
- package/dist/libraries/adw/dialog.d.ts.map +1 -0
- package/dist/libraries/adw/dialog.js +25 -0
- package/dist/libraries/adw/dialog.js.map +1 -0
- package/dist/libraries/adw/index.d.ts +2 -0
- package/dist/libraries/adw/index.d.ts.map +1 -0
- package/dist/libraries/adw/index.js +2 -0
- package/dist/libraries/adw/index.js.map +1 -0
- package/dist/reconciler/accessible.d.ts +59 -0
- package/dist/reconciler/accessible.d.ts.map +1 -0
- package/dist/reconciler/accessible.js +143 -0
- package/dist/reconciler/accessible.js.map +1 -0
- package/dist/reconciler/apply-props.d.ts +8 -0
- package/dist/reconciler/apply-props.d.ts.map +1 -0
- package/dist/reconciler/apply-props.js +92 -0
- package/dist/reconciler/apply-props.js.map +1 -0
- package/dist/reconciler/commit-flush.d.ts +3 -0
- package/dist/reconciler/commit-flush.d.ts.map +1 -0
- package/dist/reconciler/commit-flush.js +13 -0
- package/dist/reconciler/commit-flush.js.map +1 -0
- package/dist/reconciler/container-attach.d.ts +10 -0
- package/dist/reconciler/container-attach.d.ts.map +1 -0
- package/dist/reconciler/container-attach.js +216 -0
- package/dist/reconciler/container-attach.js.map +1 -0
- package/dist/reconciler/content-rebuild.d.ts +3 -0
- package/dist/reconciler/content-rebuild.d.ts.map +1 -0
- package/dist/reconciler/content-rebuild.js +15 -0
- package/dist/reconciler/content-rebuild.js.map +1 -0
- package/dist/reconciler/dispatch.d.ts +6 -0
- package/dist/reconciler/dispatch.d.ts.map +1 -0
- package/dist/reconciler/dispatch.js +61 -0
- package/dist/reconciler/dispatch.js.map +1 -0
- package/dist/reconciler/element-prop-appliers.d.ts +5 -0
- package/dist/reconciler/element-prop-appliers.d.ts.map +1 -0
- package/dist/reconciler/element-prop-appliers.js +104 -0
- package/dist/reconciler/element-prop-appliers.js.map +1 -0
- package/dist/reconciler/element-props.d.ts +25 -0
- package/dist/reconciler/element-props.d.ts.map +1 -0
- package/dist/reconciler/element-props.js +157 -0
- package/dist/reconciler/element-props.js.map +1 -0
- package/dist/reconciler/host-config.d.ts +13 -0
- package/dist/reconciler/host-config.d.ts.map +1 -0
- package/dist/reconciler/host-config.js +309 -0
- package/dist/reconciler/host-config.js.map +1 -0
- package/dist/reconciler/instance.d.ts +6 -0
- package/dist/reconciler/instance.d.ts.map +1 -0
- package/dist/reconciler/instance.js +27 -0
- package/dist/reconciler/instance.js.map +1 -0
- package/dist/reconciler/label-text-rebuild.d.ts +3 -0
- package/dist/reconciler/label-text-rebuild.d.ts.map +1 -0
- package/dist/reconciler/label-text-rebuild.js +22 -0
- package/dist/reconciler/label-text-rebuild.js.map +1 -0
- package/dist/reconciler/portal.d.ts +11 -0
- package/dist/reconciler/portal.d.ts.map +1 -0
- package/dist/reconciler/portal.js +20 -0
- package/dist/reconciler/portal.js.map +1 -0
- package/dist/reconciler/reconciler-error-handler.d.ts +7 -0
- package/dist/reconciler/reconciler-error-handler.d.ts.map +1 -0
- package/dist/reconciler/reconciler-error-handler.js +24 -0
- package/dist/reconciler/reconciler-error-handler.js.map +1 -0
- package/dist/reconciler/reconciler-root.d.ts +19 -0
- package/dist/reconciler/reconciler-root.d.ts.map +1 -0
- package/dist/reconciler/reconciler-root.js +24 -0
- package/dist/reconciler/reconciler-root.js.map +1 -0
- package/dist/reconciler/reconciler.d.ts +3 -0
- package/dist/reconciler/reconciler.d.ts.map +1 -0
- package/dist/reconciler/reconciler.js +12 -0
- package/dist/reconciler/reconciler.js.map +1 -0
- package/dist/reconciler/render.d.ts +23 -0
- package/dist/reconciler/render.d.ts.map +1 -0
- package/dist/reconciler/render.js +46 -0
- package/dist/reconciler/render.js.map +1 -0
- package/dist/reconciler/root-element.d.ts +14 -0
- package/dist/reconciler/root-element.d.ts.map +1 -0
- package/dist/reconciler/root-element.js +7 -0
- package/dist/reconciler/root-element.js.map +1 -0
- package/dist/reconciler/signal-store.d.ts +22 -0
- package/dist/reconciler/signal-store.d.ts.map +1 -0
- package/dist/reconciler/signal-store.js +84 -0
- package/dist/reconciler/signal-store.js.map +1 -0
- package/dist/reconciler/state.d.ts +36 -0
- package/dist/reconciler/state.d.ts.map +1 -0
- package/dist/reconciler/state.js +38 -0
- package/dist/reconciler/state.js.map +1 -0
- package/dist/reconciler/text-buffer-controller.d.ts +17 -0
- package/dist/reconciler/text-buffer-controller.d.ts.map +1 -0
- package/dist/reconciler/text-buffer-controller.js +102 -0
- package/dist/reconciler/text-buffer-controller.js.map +1 -0
- package/dist/reconciler/text-buffer-rebuild.d.ts +3 -0
- package/dist/reconciler/text-buffer-rebuild.d.ts.map +1 -0
- package/dist/reconciler/text-buffer-rebuild.js +7 -0
- package/dist/reconciler/text-buffer-rebuild.js.map +1 -0
- package/dist/reconciler/text-node.d.ts +7 -0
- package/dist/reconciler/text-node.d.ts.map +1 -0
- package/dist/reconciler/text-node.js +8 -0
- package/dist/reconciler/text-node.js.map +1 -0
- package/dist/reconciler/types.d.ts +5 -0
- package/dist/reconciler/types.d.ts.map +1 -0
- package/dist/reconciler/types.js.map +1 -0
- package/dist/reconciler/visibility.d.ts +6 -0
- package/dist/reconciler/visibility.d.ts.map +1 -0
- package/dist/reconciler/visibility.js +57 -0
- package/dist/reconciler/visibility.js.map +1 -0
- package/dist/reconciler/wrapper-apply.d.ts +6 -0
- package/dist/reconciler/wrapper-apply.d.ts.map +1 -0
- package/dist/reconciler/wrapper-apply.js +287 -0
- package/dist/reconciler/wrapper-apply.js.map +1 -0
- package/dist/reconciler/wrapper-content.d.ts +8 -0
- package/dist/reconciler/wrapper-content.d.ts.map +1 -0
- package/dist/reconciler/wrapper-content.js +19 -0
- package/dist/reconciler/wrapper-content.js.map +1 -0
- package/dist/reconciler/wrapper-node.d.ts +8 -0
- package/dist/reconciler/wrapper-node.d.ts.map +1 -0
- package/dist/reconciler/wrapper-node.js +4 -0
- package/dist/reconciler/wrapper-node.js.map +1 -0
- package/dist/reconciler/wrapper-protocol.d.ts +13 -0
- package/dist/reconciler/wrapper-protocol.d.ts.map +1 -0
- package/dist/reconciler/wrapper-protocol.js +20 -0
- package/dist/reconciler/wrapper-protocol.js.map +1 -0
- package/dist/utils/accessible-metadata.d.ts +5 -0
- package/dist/utils/accessible-metadata.d.ts.map +1 -0
- package/dist/utils/accessible-metadata.js +22 -0
- package/dist/utils/accessible-metadata.js.map +1 -0
- package/dist/utils/create-element-component.d.ts +4 -0
- package/dist/utils/create-element-component.d.ts.map +1 -0
- package/dist/utils/create-element-component.js +54 -0
- package/dist/utils/create-element-component.js.map +1 -0
- package/dist/utils/gtype.d.ts +16 -0
- package/dist/utils/gtype.d.ts.map +1 -0
- package/dist/utils/gtype.js +127 -0
- package/dist/utils/gtype.js.map +1 -0
- package/dist/utils/notify-name.d.ts +5 -0
- package/dist/utils/notify-name.d.ts.map +1 -0
- package/dist/utils/notify-name.js +6 -0
- package/dist/utils/notify-name.js.map +1 -0
- package/dist/utils/object-prop.d.ts +8 -0
- package/dist/utils/object-prop.d.ts.map +1 -0
- package/dist/utils/object-prop.js +9 -0
- package/dist/utils/object-prop.js.map +1 -0
- package/dist/utils/settings-accessor.d.ts +8 -0
- package/dist/utils/settings-accessor.d.ts.map +1 -0
- package/dist/utils/settings-accessor.js +69 -0
- package/dist/utils/settings-accessor.js.map +1 -0
- package/dist/utils/wrapper-node-jsx.d.ts +32 -0
- package/dist/utils/wrapper-node-jsx.d.ts.map +1 -0
- package/dist/utils/wrapper-node-jsx.js +2 -0
- package/dist/utils/wrapper-node-jsx.js.map +1 -0
- package/package.json +22 -8
- package/src/components/application.tsx +43 -0
- package/src/components/window.tsx +36 -0
- package/src/hooks/use-application.ts +17 -0
- package/src/hooks/use-bind-setting.ts +35 -0
- package/src/hooks/use-merge-refs.ts +53 -0
- package/src/hooks/use-object-attachment.ts +35 -0
- package/src/hooks/use-object-value.ts +50 -0
- package/src/hooks/use-parent-window.ts +9 -0
- package/src/hooks/use-property.ts +22 -0
- package/src/hooks/use-setting.ts +47 -0
- package/src/hooks/use-signal.ts +71 -0
- package/src/index.ts +15 -14
- package/src/internal.ts +24 -0
- package/src/libraries/adw/dialog.tsx +34 -0
- package/src/libraries/adw/index.ts +1 -0
- package/src/reconciler/accessible.ts +232 -0
- package/src/reconciler/apply-props.ts +117 -0
- package/src/reconciler/commit-flush.ts +13 -0
- package/src/reconciler/container-attach.ts +219 -0
- package/src/reconciler/content-rebuild.ts +19 -0
- package/src/reconciler/dispatch.ts +58 -0
- package/src/reconciler/element-prop-appliers.ts +110 -0
- package/src/reconciler/element-props.ts +192 -0
- package/src/reconciler/host-config.ts +405 -0
- package/src/reconciler/instance.ts +30 -0
- package/src/reconciler/label-text-rebuild.ts +26 -0
- package/src/reconciler/portal.ts +28 -0
- package/src/reconciler/reconciler-error-handler.ts +29 -0
- package/src/reconciler/reconciler-root.ts +57 -0
- package/src/reconciler/reconciler.ts +13 -0
- package/src/reconciler/render.ts +61 -0
- package/src/reconciler/root-element.ts +14 -0
- package/src/reconciler/signal-store.ts +103 -0
- package/src/reconciler/state.ts +72 -0
- package/src/reconciler/text-buffer-controller.ts +107 -0
- package/src/reconciler/text-buffer-rebuild.ts +12 -0
- package/src/reconciler/text-node.ts +13 -0
- package/src/reconciler/types.ts +6 -0
- package/src/reconciler/visibility.ts +52 -0
- package/src/reconciler/wrapper-apply.ts +308 -0
- package/src/reconciler/wrapper-content.ts +24 -0
- package/src/reconciler/wrapper-node.ts +8 -0
- package/src/reconciler/wrapper-protocol.ts +32 -0
- package/src/utils/accessible-metadata.ts +26 -0
- package/src/utils/create-element-component.ts +77 -0
- package/src/utils/gtype.ts +166 -0
- package/src/utils/notify-name.ts +10 -0
- package/src/utils/object-prop.ts +13 -0
- package/src/utils/settings-accessor.ts +89 -0
- package/src/utils/wrapper-node-jsx.ts +34 -0
- package/dist/components/compound.d.ts +0 -40
- package/dist/components/compound.d.ts.map +0 -1
- package/dist/components/compound.js +0 -46
- package/dist/components/compound.js.map +0 -1
- package/dist/components/list.d.ts +0 -75
- package/dist/components/list.d.ts.map +0 -1
- package/dist/components/list.js +0 -81
- package/dist/components/list.js.map +0 -1
- package/dist/components/slot-widget.d.ts +0 -15
- package/dist/components/slot-widget.d.ts.map +0 -1
- package/dist/components/slot-widget.js +0 -37
- package/dist/components/slot-widget.js.map +0 -1
- package/dist/errors.d.ts +0 -15
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -44
- package/dist/errors.js.map +0 -1
- package/dist/factory.d.ts +0 -5
- package/dist/factory.d.ts.map +0 -1
- package/dist/factory.js +0 -37
- package/dist/factory.js.map +0 -1
- package/dist/generated/compounds.d.ts +0 -2672
- package/dist/generated/compounds.d.ts.map +0 -1
- package/dist/generated/compounds.js +0 -2624
- package/dist/generated/compounds.js.map +0 -1
- package/dist/generated/internal.d.ts +0 -16
- package/dist/generated/internal.d.ts.map +0 -1
- package/dist/generated/internal.js +0 -3638
- package/dist/generated/internal.js.map +0 -1
- package/dist/generated/jsx.d.ts +0 -17074
- package/dist/generated/jsx.d.ts.map +0 -1
- package/dist/generated/jsx.js +0 -6715
- package/dist/generated/jsx.js.map +0 -1
- package/dist/generated/registry.d.ts +0 -5
- package/dist/generated/registry.d.ts.map +0 -1
- package/dist/generated/registry.js +0 -13
- package/dist/generated/registry.js.map +0 -1
- package/dist/host-config.d.ts +0 -24
- package/dist/host-config.d.ts.map +0 -1
- package/dist/host-config.js +0 -172
- package/dist/host-config.js.map +0 -1
- package/dist/jsx.d.ts +0 -974
- package/dist/jsx.d.ts.map +0 -1
- package/dist/jsx.js +0 -8
- package/dist/jsx.js.map +0 -1
- package/dist/metadata.d.ts +0 -5
- package/dist/metadata.d.ts.map +0 -1
- package/dist/metadata.js +0 -33
- package/dist/metadata.js.map +0 -1
- package/dist/node.d.ts +0 -25
- package/dist/node.d.ts.map +0 -1
- package/dist/node.js +0 -85
- package/dist/node.js.map +0 -1
- package/dist/nodes/adjustable.d.ts +0 -11
- package/dist/nodes/adjustable.d.ts.map +0 -1
- package/dist/nodes/adjustable.js +0 -46
- package/dist/nodes/adjustable.js.map +0 -1
- package/dist/nodes/alert-dialog-response.d.ts +0 -15
- package/dist/nodes/alert-dialog-response.d.ts.map +0 -1
- package/dist/nodes/alert-dialog-response.js +0 -61
- package/dist/nodes/alert-dialog-response.js.map +0 -1
- package/dist/nodes/alert-dialog.d.ts +0 -14
- package/dist/nodes/alert-dialog.d.ts.map +0 -1
- package/dist/nodes/alert-dialog.js +0 -41
- package/dist/nodes/alert-dialog.js.map +0 -1
- package/dist/nodes/animation.d.ts +0 -39
- package/dist/nodes/animation.d.ts.map +0 -1
- package/dist/nodes/animation.js +0 -326
- package/dist/nodes/animation.js.map +0 -1
- package/dist/nodes/application.d.ts +0 -12
- package/dist/nodes/application.d.ts.map +0 -1
- package/dist/nodes/application.js +0 -51
- package/dist/nodes/application.js.map +0 -1
- package/dist/nodes/calendar.d.ts +0 -18
- package/dist/nodes/calendar.d.ts.map +0 -1
- package/dist/nodes/calendar.js +0 -28
- package/dist/nodes/calendar.js.map +0 -1
- package/dist/nodes/color-dialog-button.d.ts +0 -15
- package/dist/nodes/color-dialog-button.d.ts.map +0 -1
- package/dist/nodes/color-dialog-button.js +0 -43
- package/dist/nodes/color-dialog-button.js.map +0 -1
- package/dist/nodes/column-view-column.d.ts +0 -36
- package/dist/nodes/column-view-column.d.ts.map +0 -1
- package/dist/nodes/column-view-column.js +0 -168
- package/dist/nodes/column-view-column.js.map +0 -1
- package/dist/nodes/container-slot.d.ts +0 -18
- package/dist/nodes/container-slot.d.ts.map +0 -1
- package/dist/nodes/container-slot.js +0 -81
- package/dist/nodes/container-slot.js.map +0 -1
- package/dist/nodes/dialog.d.ts +0 -10
- package/dist/nodes/dialog.d.ts.map +0 -1
- package/dist/nodes/dialog.js +0 -20
- package/dist/nodes/dialog.js.map +0 -1
- package/dist/nodes/drawing-area.d.ts +0 -19
- package/dist/nodes/drawing-area.d.ts.map +0 -1
- package/dist/nodes/drawing-area.js +0 -40
- package/dist/nodes/drawing-area.js.map +0 -1
- package/dist/nodes/event-controller.d.ts +0 -15
- package/dist/nodes/event-controller.d.ts.map +0 -1
- package/dist/nodes/event-controller.js +0 -73
- package/dist/nodes/event-controller.js.map +0 -1
- package/dist/nodes/fixed-child.d.ts +0 -19
- package/dist/nodes/fixed-child.d.ts.map +0 -1
- package/dist/nodes/fixed-child.js +0 -99
- package/dist/nodes/fixed-child.js.map +0 -1
- package/dist/nodes/font-dialog-button.d.ts +0 -15
- package/dist/nodes/font-dialog-button.d.ts.map +0 -1
- package/dist/nodes/font-dialog-button.js +0 -76
- package/dist/nodes/font-dialog-button.js.map +0 -1
- package/dist/nodes/grid-child.d.ts +0 -19
- package/dist/nodes/grid-child.d.ts.map +0 -1
- package/dist/nodes/grid-child.js +0 -94
- package/dist/nodes/grid-child.js.map +0 -1
- package/dist/nodes/internal/accessible.d.ts +0 -5
- package/dist/nodes/internal/accessible.d.ts.map +0 -1
- package/dist/nodes/internal/accessible.js +0 -119
- package/dist/nodes/internal/accessible.js.map +0 -1
- package/dist/nodes/internal/bound-item.d.ts +0 -4
- package/dist/nodes/internal/bound-item.d.ts.map +0 -1
- package/dist/nodes/internal/bound-item.js +0 -2
- package/dist/nodes/internal/bound-item.js.map +0 -1
- package/dist/nodes/internal/construct.d.ts +0 -3
- package/dist/nodes/internal/construct.d.ts.map +0 -1
- package/dist/nodes/internal/construct.js +0 -44
- package/dist/nodes/internal/construct.js.map +0 -1
- package/dist/nodes/internal/predicates.d.ts +0 -51
- package/dist/nodes/internal/predicates.d.ts.map +0 -1
- package/dist/nodes/internal/predicates.js +0 -36
- package/dist/nodes/internal/predicates.js.map +0 -1
- package/dist/nodes/internal/props.d.ts +0 -6
- package/dist/nodes/internal/props.d.ts.map +0 -1
- package/dist/nodes/internal/props.js +0 -43
- package/dist/nodes/internal/props.js.map +0 -1
- package/dist/nodes/internal/signal-store.d.ts +0 -22
- package/dist/nodes/internal/signal-store.d.ts.map +0 -1
- package/dist/nodes/internal/signal-store.js +0 -98
- package/dist/nodes/internal/signal-store.js.map +0 -1
- package/dist/nodes/internal/text-buffer-controller.d.ts +0 -40
- package/dist/nodes/internal/text-buffer-controller.d.ts.map +0 -1
- package/dist/nodes/internal/text-buffer-controller.js +0 -327
- package/dist/nodes/internal/text-buffer-controller.js.map +0 -1
- package/dist/nodes/internal/widget.d.ts +0 -8
- package/dist/nodes/internal/widget.d.ts.map +0 -1
- package/dist/nodes/internal/widget.js +0 -68
- package/dist/nodes/internal/widget.js.map +0 -1
- package/dist/nodes/level-bar.d.ts +0 -12
- package/dist/nodes/level-bar.d.ts.map +0 -1
- package/dist/nodes/level-bar.js +0 -24
- package/dist/nodes/level-bar.js.map +0 -1
- package/dist/nodes/list-item-node.d.ts +0 -12
- package/dist/nodes/list-item-node.d.ts.map +0 -1
- package/dist/nodes/list-item-node.js +0 -45
- package/dist/nodes/list-item-node.js.map +0 -1
- package/dist/nodes/list.d.ts +0 -100
- package/dist/nodes/list.d.ts.map +0 -1
- package/dist/nodes/list.js +0 -950
- package/dist/nodes/list.js.map +0 -1
- package/dist/nodes/menu.d.ts +0 -7
- package/dist/nodes/menu.d.ts.map +0 -1
- package/dist/nodes/menu.js +0 -20
- package/dist/nodes/menu.js.map +0 -1
- package/dist/nodes/models/menu.d.ts +0 -47
- package/dist/nodes/models/menu.d.ts.map +0 -1
- package/dist/nodes/models/menu.js +0 -240
- package/dist/nodes/models/menu.js.map +0 -1
- package/dist/nodes/navigation-page.d.ts +0 -19
- package/dist/nodes/navigation-page.d.ts.map +0 -1
- package/dist/nodes/navigation-page.js +0 -129
- package/dist/nodes/navigation-page.js.map +0 -1
- package/dist/nodes/navigation-view.d.ts +0 -19
- package/dist/nodes/navigation-view.d.ts.map +0 -1
- package/dist/nodes/navigation-view.js +0 -51
- package/dist/nodes/navigation-view.js.map +0 -1
- package/dist/nodes/notebook-page-tab.d.ts +0 -15
- package/dist/nodes/notebook-page-tab.d.ts.map +0 -1
- package/dist/nodes/notebook-page-tab.js +0 -40
- package/dist/nodes/notebook-page-tab.js.map +0 -1
- package/dist/nodes/notebook-page.d.ts +0 -29
- package/dist/nodes/notebook-page.d.ts.map +0 -1
- package/dist/nodes/notebook-page.js +0 -151
- package/dist/nodes/notebook-page.js.map +0 -1
- package/dist/nodes/notebook.d.ts +0 -16
- package/dist/nodes/notebook.d.ts.map +0 -1
- package/dist/nodes/notebook.js +0 -31
- package/dist/nodes/notebook.js.map +0 -1
- package/dist/nodes/overlay-child.d.ts +0 -20
- package/dist/nodes/overlay-child.d.ts.map +0 -1
- package/dist/nodes/overlay-child.js +0 -109
- package/dist/nodes/overlay-child.js.map +0 -1
- package/dist/nodes/popover-menu.d.ts +0 -19
- package/dist/nodes/popover-menu.d.ts.map +0 -1
- package/dist/nodes/popover-menu.js +0 -54
- package/dist/nodes/popover-menu.js.map +0 -1
- package/dist/nodes/scale.d.ts +0 -10
- package/dist/nodes/scale.d.ts.map +0 -1
- package/dist/nodes/scale.js +0 -19
- package/dist/nodes/scale.js.map +0 -1
- package/dist/nodes/scrolled-window.d.ts +0 -11
- package/dist/nodes/scrolled-window.d.ts.map +0 -1
- package/dist/nodes/scrolled-window.js +0 -18
- package/dist/nodes/scrolled-window.js.map +0 -1
- package/dist/nodes/search-bar.d.ts +0 -11
- package/dist/nodes/search-bar.d.ts.map +0 -1
- package/dist/nodes/search-bar.js +0 -16
- package/dist/nodes/search-bar.js.map +0 -1
- package/dist/nodes/shortcut.d.ts +0 -19
- package/dist/nodes/shortcut.d.ts.map +0 -1
- package/dist/nodes/shortcut.js +0 -72
- package/dist/nodes/shortcut.js.map +0 -1
- package/dist/nodes/slot.d.ts +0 -21
- package/dist/nodes/slot.d.ts.map +0 -1
- package/dist/nodes/slot.js +0 -102
- package/dist/nodes/slot.js.map +0 -1
- package/dist/nodes/source-view.d.ts +0 -18
- package/dist/nodes/source-view.d.ts.map +0 -1
- package/dist/nodes/source-view.js +0 -94
- package/dist/nodes/source-view.js.map +0 -1
- package/dist/nodes/spin-row.d.ts +0 -14
- package/dist/nodes/spin-row.d.ts.map +0 -1
- package/dist/nodes/spin-row.js +0 -46
- package/dist/nodes/spin-row.js.map +0 -1
- package/dist/nodes/stack-page.d.ts +0 -22
- package/dist/nodes/stack-page.d.ts.map +0 -1
- package/dist/nodes/stack-page.js +0 -140
- package/dist/nodes/stack-page.js.map +0 -1
- package/dist/nodes/stack.d.ts +0 -13
- package/dist/nodes/stack.d.ts.map +0 -1
- package/dist/nodes/stack.js +0 -21
- package/dist/nodes/stack.js.map +0 -1
- package/dist/nodes/switch-row.d.ts +0 -11
- package/dist/nodes/switch-row.d.ts.map +0 -1
- package/dist/nodes/switch-row.js +0 -15
- package/dist/nodes/switch-row.js.map +0 -1
- package/dist/nodes/text-anchor.d.ts +0 -23
- package/dist/nodes/text-anchor.d.ts.map +0 -1
- package/dist/nodes/text-anchor.js +0 -74
- package/dist/nodes/text-anchor.js.map +0 -1
- package/dist/nodes/text-content.d.ts +0 -12
- package/dist/nodes/text-content.d.ts.map +0 -1
- package/dist/nodes/text-content.js +0 -2
- package/dist/nodes/text-content.js.map +0 -1
- package/dist/nodes/text-paintable.d.ts +0 -19
- package/dist/nodes/text-paintable.d.ts.map +0 -1
- package/dist/nodes/text-paintable.js +0 -42
- package/dist/nodes/text-paintable.js.map +0 -1
- package/dist/nodes/text-segment.d.ts +0 -18
- package/dist/nodes/text-segment.d.ts.map +0 -1
- package/dist/nodes/text-segment.js +0 -38
- package/dist/nodes/text-segment.js.map +0 -1
- package/dist/nodes/text-tag.d.ts +0 -38
- package/dist/nodes/text-tag.d.ts.map +0 -1
- package/dist/nodes/text-tag.js +0 -247
- package/dist/nodes/text-tag.js.map +0 -1
- package/dist/nodes/text-view.d.ts +0 -29
- package/dist/nodes/text-view.d.ts.map +0 -1
- package/dist/nodes/text-view.js +0 -80
- package/dist/nodes/text-view.js.map +0 -1
- package/dist/nodes/toggle-group.d.ts +0 -17
- package/dist/nodes/toggle-group.d.ts.map +0 -1
- package/dist/nodes/toggle-group.js +0 -65
- package/dist/nodes/toggle-group.js.map +0 -1
- package/dist/nodes/toggle.d.ts +0 -16
- package/dist/nodes/toggle.d.ts.map +0 -1
- package/dist/nodes/toggle.js +0 -61
- package/dist/nodes/toggle.js.map +0 -1
- package/dist/nodes/virtual.d.ts +0 -7
- package/dist/nodes/virtual.d.ts.map +0 -1
- package/dist/nodes/virtual.js +0 -9
- package/dist/nodes/virtual.js.map +0 -1
- package/dist/nodes/web-view.d.ts +0 -11
- package/dist/nodes/web-view.d.ts.map +0 -1
- package/dist/nodes/web-view.js +0 -16
- package/dist/nodes/web-view.js.map +0 -1
- package/dist/nodes/widget.d.ts +0 -26
- package/dist/nodes/widget.d.ts.map +0 -1
- package/dist/nodes/widget.js +0 -308
- package/dist/nodes/widget.js.map +0 -1
- package/dist/nodes/window.d.ts +0 -31
- package/dist/nodes/window.d.ts.map +0 -1
- package/dist/nodes/window.js +0 -122
- package/dist/nodes/window.js.map +0 -1
- package/dist/portal.d.ts +0 -29
- package/dist/portal.d.ts.map +0 -1
- package/dist/portal.js +0 -35
- package/dist/portal.js.map +0 -1
- package/dist/reconciler.d.ts +0 -34
- package/dist/reconciler.d.ts.map +0 -1
- package/dist/reconciler.js +0 -48
- package/dist/reconciler.js.map +0 -1
- package/dist/registry.d.ts +0 -18
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -98
- package/dist/registry.js.map +0 -1
- package/dist/render.d.ts +0 -117
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js +0 -159
- package/dist/render.js.map +0 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/use-property.d.ts +0 -29
- package/dist/use-property.d.ts.map +0 -1
- package/dist/use-property.js +0 -44
- package/dist/use-property.js.map +0 -1
- package/dist/use-setting.d.ts +0 -36
- package/dist/use-setting.d.ts.map +0 -1
- package/dist/use-setting.js +0 -68
- package/dist/use-setting.js.map +0 -1
- package/src/components/compound.tsx +0 -57
- package/src/components/list.tsx +0 -140
- package/src/components/slot-widget.tsx +0 -46
- package/src/errors.ts +0 -53
- package/src/factory.ts +0 -62
- package/src/generated/compounds.ts +0 -2741
- package/src/generated/internal.ts +0 -3642
- package/src/generated/jsx.ts +0 -17383
- package/src/generated/registry.ts +0 -17
- package/src/host-config.ts +0 -219
- package/src/jsx.ts +0 -1033
- package/src/metadata.ts +0 -43
- package/src/node.ts +0 -107
- package/src/nodes/adjustable.ts +0 -68
- package/src/nodes/alert-dialog-response.ts +0 -78
- package/src/nodes/alert-dialog.ts +0 -55
- package/src/nodes/animation.ts +0 -409
- package/src/nodes/application.ts +0 -61
- package/src/nodes/calendar.ts +0 -42
- package/src/nodes/color-dialog-button.ts +0 -69
- package/src/nodes/column-view-column.ts +0 -189
- package/src/nodes/container-slot.ts +0 -100
- package/src/nodes/dialog.ts +0 -25
- package/src/nodes/drawing-area.ts +0 -53
- package/src/nodes/event-controller.ts +0 -96
- package/src/nodes/fixed-child.ts +0 -122
- package/src/nodes/font-dialog-button.ts +0 -107
- package/src/nodes/grid-child.ts +0 -116
- package/src/nodes/internal/accessible.ts +0 -155
- package/src/nodes/internal/bound-item.ts +0 -4
- package/src/nodes/internal/construct.ts +0 -60
- package/src/nodes/internal/predicates.ts +0 -80
- package/src/nodes/internal/props.ts +0 -51
- package/src/nodes/internal/signal-store.ts +0 -141
- package/src/nodes/internal/text-buffer-controller.ts +0 -417
- package/src/nodes/internal/widget.ts +0 -74
- package/src/nodes/level-bar.ts +0 -36
- package/src/nodes/list-item-node.ts +0 -53
- package/src/nodes/list.ts +0 -1082
- package/src/nodes/menu.ts +0 -27
- package/src/nodes/models/menu.ts +0 -314
- package/src/nodes/navigation-page.ts +0 -154
- package/src/nodes/navigation-view.ts +0 -66
- package/src/nodes/notebook-page-tab.ts +0 -55
- package/src/nodes/notebook-page.ts +0 -189
- package/src/nodes/notebook.ts +0 -42
- package/src/nodes/overlay-child.ts +0 -130
- package/src/nodes/popover-menu.ts +0 -67
- package/src/nodes/scale.ts +0 -28
- package/src/nodes/scrolled-window.ts +0 -23
- package/src/nodes/search-bar.ts +0 -27
- package/src/nodes/shortcut.ts +0 -86
- package/src/nodes/slot.ts +0 -138
- package/src/nodes/source-view.ts +0 -130
- package/src/nodes/spin-row.ts +0 -72
- package/src/nodes/stack-page.ts +0 -170
- package/src/nodes/stack.ts +0 -35
- package/src/nodes/switch-row.ts +0 -26
- package/src/nodes/text-anchor.ts +0 -88
- package/src/nodes/text-content.ts +0 -14
- package/src/nodes/text-paintable.ts +0 -51
- package/src/nodes/text-segment.ts +0 -55
- package/src/nodes/text-tag.ts +0 -298
- package/src/nodes/text-view.ts +0 -100
- package/src/nodes/toggle-group.ts +0 -81
- package/src/nodes/toggle.ts +0 -72
- package/src/nodes/virtual.ts +0 -16
- package/src/nodes/web-view.ts +0 -22
- package/src/nodes/widget.ts +0 -369
- package/src/nodes/window.ts +0 -172
- package/src/portal.ts +0 -37
- package/src/reconciler.ts +0 -52
- package/src/registry.ts +0 -119
- package/src/render.tsx +0 -192
- package/src/types.ts +0 -13
- package/src/use-property.ts +0 -58
- package/src/use-setting.ts +0 -96
- /package/dist/{types.js → reconciler/types.js} +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/react",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0-rc.1",
|
|
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",
|
|
7
7
|
"gtk",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|
|
21
21
|
"type": "git",
|
|
22
|
-
"url": "https://github.com/gtkx-org/gtkx.git",
|
|
22
|
+
"url": "git+https://github.com/gtkx-org/gtkx.git",
|
|
23
23
|
"directory": "packages/react"
|
|
24
24
|
},
|
|
25
25
|
"license": "MPL-2.0",
|
|
@@ -30,17 +30,30 @@
|
|
|
30
30
|
".": {
|
|
31
31
|
"types": "./dist/index.d.ts",
|
|
32
32
|
"default": "./dist/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./internal": {
|
|
35
|
+
"types": "./dist/internal.d.ts",
|
|
36
|
+
"default": "./dist/internal.js"
|
|
37
|
+
},
|
|
38
|
+
"./adw": {
|
|
39
|
+
"types": "./dist/libraries/adw/index.d.ts",
|
|
40
|
+
"default": "./dist/libraries/adw/index.js"
|
|
33
41
|
}
|
|
34
42
|
},
|
|
35
43
|
"sideEffects": false,
|
|
36
44
|
"files": [
|
|
37
45
|
"dist",
|
|
38
|
-
"src"
|
|
46
|
+
"src",
|
|
47
|
+
"!**/*.tsbuildinfo"
|
|
39
48
|
],
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=24"
|
|
51
|
+
},
|
|
40
52
|
"dependencies": {
|
|
41
53
|
"react-reconciler": "^0.33.0",
|
|
42
|
-
"@gtkx/
|
|
43
|
-
"@gtkx/
|
|
54
|
+
"@gtkx/config": "1.0.0-rc.1",
|
|
55
|
+
"@gtkx/runtime": "1.0.0-rc.1",
|
|
56
|
+
"@gtkx/utils": "1.0.0-rc.1"
|
|
44
57
|
},
|
|
45
58
|
"devDependencies": {
|
|
46
59
|
"@types/react-reconciler": "^0.33.0"
|
|
@@ -49,7 +62,8 @@
|
|
|
49
62
|
"react": "^19"
|
|
50
63
|
},
|
|
51
64
|
"scripts": {
|
|
52
|
-
"build": "tsc -b
|
|
53
|
-
"typecheck": "tsc -b --emitDeclarationOnly"
|
|
65
|
+
"build": "tsc -b tsconfig.lib.json",
|
|
66
|
+
"typecheck": "tsc -b --emitDeclarationOnly",
|
|
67
|
+
"release": "tsx ../../scripts/release-package.ts"
|
|
54
68
|
}
|
|
55
69
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { applicationId as defaultApplicationId } from "virtual:gtkx-config";
|
|
2
|
+
import type * as Gtk from "@gtkx/gi/gtk";
|
|
3
|
+
import { quitApplication, runApplication } from "@gtkx/runtime";
|
|
4
|
+
import { type ElementType, type ReactNode, type Ref, useCallback, useState } from "react";
|
|
5
|
+
import { ApplicationContext } from "../hooks/use-application.js";
|
|
6
|
+
import { useMergeRefs } from "../hooks/use-merge-refs.js";
|
|
7
|
+
|
|
8
|
+
const POST_ACTIVATE_PROPS = new Set(["menubar"]);
|
|
9
|
+
|
|
10
|
+
type ApplicationComponentProps = {
|
|
11
|
+
applicationId?: string | null | undefined;
|
|
12
|
+
children?: ReactNode | undefined;
|
|
13
|
+
ref?: Ref<Gtk.Application | null> | undefined;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const createApplicationComponent = (
|
|
17
|
+
Component: ElementType,
|
|
18
|
+
): ((props: ApplicationComponentProps) => ReactNode) => {
|
|
19
|
+
return ({ applicationId = defaultApplicationId, children, ref, ...rest }: ApplicationComponentProps): ReactNode => {
|
|
20
|
+
const [app, setApp] = useState<Gtk.Application | null>(null);
|
|
21
|
+
|
|
22
|
+
const handleMount = useCallback((instance: Gtk.Application) => {
|
|
23
|
+
runApplication(instance);
|
|
24
|
+
setApp(instance);
|
|
25
|
+
|
|
26
|
+
return () => {
|
|
27
|
+
quitApplication(instance);
|
|
28
|
+
setApp(null);
|
|
29
|
+
};
|
|
30
|
+
}, []);
|
|
31
|
+
|
|
32
|
+
const mergedRef = useMergeRefs<Gtk.Application>(ref, handleMount);
|
|
33
|
+
const appliedProps = app
|
|
34
|
+
? rest
|
|
35
|
+
: Object.fromEntries(Object.entries(rest).filter(([key]) => !POST_ACTIVATE_PROPS.has(key)));
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<Component ref={mergedRef} applicationId={applicationId} {...appliedProps}>
|
|
39
|
+
{app ? <ApplicationContext.Provider value={app}>{children}</ApplicationContext.Provider> : null}
|
|
40
|
+
</Component>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type * as Gtk from "@gtkx/gi/gtk";
|
|
2
|
+
import { type ElementType, type ReactNode, type Ref, useCallback, useLayoutEffect, useState } from "react";
|
|
3
|
+
import { useMergeRefs } from "../hooks/use-merge-refs.js";
|
|
4
|
+
import { ParentWindowContext } from "../hooks/use-parent-window.js";
|
|
5
|
+
|
|
6
|
+
type WindowComponentProps = {
|
|
7
|
+
ref?: Ref<Gtk.Window | null> | undefined;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const createWindowComponent = (Component: ElementType): ((props: WindowComponentProps) => ReactNode) => {
|
|
11
|
+
return ({ ref, ...rest }: WindowComponentProps): ReactNode => {
|
|
12
|
+
const [window, setWindow] = useState<Gtk.Window | null>(null);
|
|
13
|
+
|
|
14
|
+
const handleMount = useCallback((window: Gtk.Window) => {
|
|
15
|
+
setWindow(window);
|
|
16
|
+
|
|
17
|
+
return () => {
|
|
18
|
+
window.setDefaultWidget(null);
|
|
19
|
+
window.destroy();
|
|
20
|
+
setWindow(null);
|
|
21
|
+
};
|
|
22
|
+
}, []);
|
|
23
|
+
|
|
24
|
+
useLayoutEffect(() => {
|
|
25
|
+
window?.present();
|
|
26
|
+
}, [window]);
|
|
27
|
+
|
|
28
|
+
const mergedRef = useMergeRefs(ref, handleMount);
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<ParentWindowContext.Provider value={window}>
|
|
32
|
+
<Component ref={mergedRef} {...rest} />
|
|
33
|
+
</ParentWindowContext.Provider>
|
|
34
|
+
);
|
|
35
|
+
};
|
|
36
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type * as Gtk from "@gtkx/gi/gtk";
|
|
2
|
+
import { type Context, createContext, use } from "react";
|
|
3
|
+
|
|
4
|
+
export const ApplicationContext: Context<Gtk.Application | null> = createContext<Gtk.Application | null>(null);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns the `Gtk.Application` provided by the nearest `Application` ancestor, throwing if used outside one.
|
|
8
|
+
*/
|
|
9
|
+
export const useApplication = (): Gtk.Application => {
|
|
10
|
+
const context = use(ApplicationContext);
|
|
11
|
+
|
|
12
|
+
if (!context) {
|
|
13
|
+
throw new Error("Expected ApplicationContext: useApplication must be called within Application");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return context;
|
|
17
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as Gio from "@gtkx/gi/gio";
|
|
2
|
+
import type * as GObject from "@gtkx/gi/gobject";
|
|
3
|
+
import { toKebabCase } from "@gtkx/utils";
|
|
4
|
+
import type { ObjectProp } from "../utils/object-prop.js";
|
|
5
|
+
import { useObjectAttachment } from "./use-object-attachment.js";
|
|
6
|
+
import { type SchemaRef, useSettingsInstance } from "./use-setting.js";
|
|
7
|
+
|
|
8
|
+
export function useBindSetting<K extends object, P extends keyof K & string>(
|
|
9
|
+
schema: SchemaRef<K>,
|
|
10
|
+
key: P,
|
|
11
|
+
object: ObjectProp<GObject.Object>,
|
|
12
|
+
property: string,
|
|
13
|
+
flags?: Gio.SettingsBindFlags,
|
|
14
|
+
): void;
|
|
15
|
+
export function useBindSetting(
|
|
16
|
+
schema: SchemaRef,
|
|
17
|
+
key: string,
|
|
18
|
+
object: ObjectProp<GObject.Object>,
|
|
19
|
+
property: string,
|
|
20
|
+
flags: Gio.SettingsBindFlags = Gio.SettingsBindFlags.DEFAULT,
|
|
21
|
+
): void {
|
|
22
|
+
const settings = useSettingsInstance(schema);
|
|
23
|
+
const propertyName = toKebabCase(property);
|
|
24
|
+
|
|
25
|
+
useObjectAttachment<GObject.Object, GObject.Object>(object, {
|
|
26
|
+
attach: (obj) => {
|
|
27
|
+
settings.bind(key, obj, propertyName, flags);
|
|
28
|
+
return obj;
|
|
29
|
+
},
|
|
30
|
+
detach: (obj) => {
|
|
31
|
+
Gio.Settings.unbind(obj, propertyName);
|
|
32
|
+
},
|
|
33
|
+
isSame: (attachment, current) => attachment === current,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type Ref, type RefCallback, useCallback, useLayoutEffect, useRef } from "react";
|
|
2
|
+
|
|
3
|
+
type MergedRefEntry<T> = {
|
|
4
|
+
ref: Ref<T | null> | undefined;
|
|
5
|
+
cleanup: (() => void) | undefined;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const attachRef = <T>(ref: Ref<T | null> | undefined, value: T): (() => void) | undefined => {
|
|
9
|
+
if (typeof ref === "function") {
|
|
10
|
+
const cleanup = ref(value);
|
|
11
|
+
return typeof cleanup === "function" ? cleanup : () => ref(null);
|
|
12
|
+
}
|
|
13
|
+
if (ref) {
|
|
14
|
+
ref.current = value;
|
|
15
|
+
return () => {
|
|
16
|
+
ref.current = null;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const useMergeRefs = <T>(...refs: Array<Ref<T | null> | undefined>): RefCallback<T> => {
|
|
23
|
+
const latestRefs = useRef(refs);
|
|
24
|
+
latestRefs.current = refs;
|
|
25
|
+
const attachedRef = useRef<{ value: T; entries: MergedRefEntry<T>[] } | null>(null);
|
|
26
|
+
|
|
27
|
+
useLayoutEffect(() => {
|
|
28
|
+
const attached = attachedRef.current;
|
|
29
|
+
if (attached === null) return;
|
|
30
|
+
const next = latestRefs.current;
|
|
31
|
+
for (let index = next.length; index < attached.entries.length; index += 1) {
|
|
32
|
+
attached.entries[index]?.cleanup?.();
|
|
33
|
+
}
|
|
34
|
+
attached.entries = next.map((ref, index) => {
|
|
35
|
+
const entry = attached.entries[index];
|
|
36
|
+
if (entry !== undefined && entry.ref === ref) return entry;
|
|
37
|
+
entry?.cleanup?.();
|
|
38
|
+
return { ref, cleanup: attachRef(ref, attached.value) };
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return useCallback((value: T) => {
|
|
43
|
+
const entries = latestRefs.current.map((ref) => ({ ref, cleanup: attachRef(ref, value) }));
|
|
44
|
+
attachedRef.current = { value, entries };
|
|
45
|
+
return () => {
|
|
46
|
+
const attached = attachedRef.current;
|
|
47
|
+
attachedRef.current = null;
|
|
48
|
+
if (attached) {
|
|
49
|
+
for (const entry of attached.entries) entry.cleanup?.();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}, []);
|
|
53
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type * as GObject from "@gtkx/gi/gobject";
|
|
2
|
+
import { useLayoutEffect, useRef } from "react";
|
|
3
|
+
import { type ObjectProp, resolveObjectProp } from "../utils/object-prop.js";
|
|
4
|
+
|
|
5
|
+
type ObjectAttachmentOps<T extends GObject.Object, A> = {
|
|
6
|
+
attach(object: T): A;
|
|
7
|
+
detach(attachment: A): void;
|
|
8
|
+
isSame(attachment: A, object: T): boolean;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const useObjectAttachment = <T extends GObject.Object, A>(
|
|
12
|
+
object: ObjectProp<T>,
|
|
13
|
+
ops: ObjectAttachmentOps<T, A>,
|
|
14
|
+
): void => {
|
|
15
|
+
const attachmentRef = useRef<A | null>(null);
|
|
16
|
+
|
|
17
|
+
const drop = (): void => {
|
|
18
|
+
const attachment = attachmentRef.current;
|
|
19
|
+
if (attachment !== null) {
|
|
20
|
+
ops.detach(attachment);
|
|
21
|
+
attachmentRef.current = null;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
useLayoutEffect(() => {
|
|
26
|
+
const resolved = resolveObjectProp(object);
|
|
27
|
+
const attachment = attachmentRef.current;
|
|
28
|
+
if (attachment !== null && resolved !== null && ops.isSame(attachment, resolved)) return;
|
|
29
|
+
drop();
|
|
30
|
+
if (resolved === null) return;
|
|
31
|
+
attachmentRef.current = ops.attach(resolved);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
useLayoutEffect(() => () => drop(), []);
|
|
35
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type * as GObject from "@gtkx/gi/gobject";
|
|
2
|
+
import type { SignalHandler } from "@gtkx/runtime";
|
|
3
|
+
import { useCallback, useRef, useSyncExternalStore } from "react";
|
|
4
|
+
import { type ObjectProp, resolveObjectProp } from "../utils/object-prop.js";
|
|
5
|
+
|
|
6
|
+
type ObjectValueCache<T extends GObject.Object, V> = {
|
|
7
|
+
object: T | null;
|
|
8
|
+
signal: string;
|
|
9
|
+
value: V;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export function useObjectValue<T extends GObject.Object, V>(
|
|
13
|
+
object: ObjectProp<T>,
|
|
14
|
+
signal: string,
|
|
15
|
+
read: (object: T | null) => V,
|
|
16
|
+
): V {
|
|
17
|
+
const resolved = resolveObjectProp(object);
|
|
18
|
+
const readRef = useRef(read);
|
|
19
|
+
readRef.current = read;
|
|
20
|
+
const cacheRef = useRef<ObjectValueCache<T, V> | null>(null);
|
|
21
|
+
|
|
22
|
+
const readNow = useCallback((): ObjectValueCache<T, V> => {
|
|
23
|
+
const cache = { object: resolved, signal, value: readRef.current(resolved) };
|
|
24
|
+
cacheRef.current = cache;
|
|
25
|
+
return cache;
|
|
26
|
+
}, [resolved, signal]);
|
|
27
|
+
|
|
28
|
+
const getSnapshot = useCallback((): V => {
|
|
29
|
+
const cache = cacheRef.current;
|
|
30
|
+
if (cache !== null && cache.object === resolved && cache.signal === signal) {
|
|
31
|
+
return cache.value;
|
|
32
|
+
}
|
|
33
|
+
return readNow().value;
|
|
34
|
+
}, [resolved, signal, readNow]);
|
|
35
|
+
|
|
36
|
+
const subscribe = useCallback(
|
|
37
|
+
(onStoreChange: () => void): (() => void) => {
|
|
38
|
+
if (resolved === null) return () => {};
|
|
39
|
+
const handler: SignalHandler = () => {
|
|
40
|
+
readNow();
|
|
41
|
+
onStoreChange();
|
|
42
|
+
};
|
|
43
|
+
resolved.on(signal, handler);
|
|
44
|
+
return () => resolved.off(signal, handler);
|
|
45
|
+
},
|
|
46
|
+
[resolved, signal, readNow],
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
50
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type * as Gtk from "@gtkx/gi/gtk";
|
|
2
|
+
import { type Context, createContext, use } from "react";
|
|
3
|
+
|
|
4
|
+
export const ParentWindowContext: Context<Gtk.Window | null> = createContext<Gtk.Window | null>(null);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns the `Gtk.Window` provided by the nearest window ancestor, or `null` when there is none.
|
|
8
|
+
*/
|
|
9
|
+
export const useParentWindow = (): Gtk.Window | null => use(ParentWindowContext);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type * as GObject from "@gtkx/gi/gobject";
|
|
2
|
+
import { propToNotifySignal } from "../utils/notify-name.js";
|
|
3
|
+
import type { ObjectProp } from "../utils/object-prop.js";
|
|
4
|
+
import { useObjectValue } from "./use-object-value.js";
|
|
5
|
+
|
|
6
|
+
type PropertiesOf<T extends GObject.Object> = NonNullable<T["__properties__"]>;
|
|
7
|
+
|
|
8
|
+
export type PropertyNameOf<T extends GObject.Object> = keyof PropertiesOf<T> & keyof T & string;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Subscribes to a GObject property and returns its current value, re-rendering when the property changes.
|
|
12
|
+
*
|
|
13
|
+
* @param object The GObject (or ref to one) whose property to observe.
|
|
14
|
+
* @param propertyName The camelCase name of a readable property on the object.
|
|
15
|
+
* @returns The current property value, or `undefined` when the object is not resolved.
|
|
16
|
+
*/
|
|
17
|
+
export function useProperty<T extends GObject.Object, K extends PropertyNameOf<T>>(
|
|
18
|
+
object: ObjectProp<T>,
|
|
19
|
+
propertyName: K,
|
|
20
|
+
): T[K] | undefined {
|
|
21
|
+
return useObjectValue(object, propToNotifySignal(propertyName), (obj) => (obj ? obj[propertyName] : undefined));
|
|
22
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as Gio from "@gtkx/gi/gio";
|
|
2
|
+
import { useCallback, useMemo } from "react";
|
|
3
|
+
import { resolveAccessor } from "../utils/settings-accessor.js";
|
|
4
|
+
import { useObjectValue } from "./use-object-value.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A typed reference to a GSettings schema: its id, path, and the mapping of typed keys to their setting names.
|
|
8
|
+
*/
|
|
9
|
+
export type SchemaRef<K extends object = Record<string, unknown>> = {
|
|
10
|
+
id: string;
|
|
11
|
+
/** The schema's object path, or `null` to use the schema's default path. */
|
|
12
|
+
path: string | null;
|
|
13
|
+
/** Maps each typed key of `K` to its corresponding GSettings key name. */
|
|
14
|
+
keys: { [P in keyof K]: string };
|
|
15
|
+
/** Phantom field carrying the value type `K`; never populated at runtime. */
|
|
16
|
+
__keys__?: K;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const useSettingsInstance = ({ id, path }: Pick<SchemaRef, "id" | "path">): Gio.Settings =>
|
|
20
|
+
useMemo(() => (path === null ? Gio.Settings.new(id) : new Gio.Settings({ schemaId: id, path })), [id, path]);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Reads and writes a single key of a GSettings schema, re-rendering when the stored value changes.
|
|
24
|
+
*
|
|
25
|
+
* @param schema The schema reference identifying the settings backend.
|
|
26
|
+
* @param key The key within the schema to read and write.
|
|
27
|
+
* @returns A tuple of the current value and a setter that persists a new value.
|
|
28
|
+
*/
|
|
29
|
+
export function useSetting<K extends object, P extends keyof K & string>(
|
|
30
|
+
schema: SchemaRef<K>,
|
|
31
|
+
key: P,
|
|
32
|
+
): [K[P], (value: K[P]) => void];
|
|
33
|
+
export function useSetting(schema: SchemaRef, key: string): [unknown, (value: unknown) => void] {
|
|
34
|
+
const accessor = resolveAccessor(schema.keys[key], key, schema.id);
|
|
35
|
+
const settings = useSettingsInstance(schema);
|
|
36
|
+
|
|
37
|
+
const value = useObjectValue(settings, `changed::${key}`, () => accessor.read(settings, key));
|
|
38
|
+
|
|
39
|
+
const set = useCallback(
|
|
40
|
+
(newValue: unknown) => {
|
|
41
|
+
accessor.write(settings, key, newValue);
|
|
42
|
+
},
|
|
43
|
+
[accessor, settings, key],
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
return [value, set];
|
|
47
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type * as GObject from "@gtkx/gi/gobject";
|
|
2
|
+
import type { SignalHandler } from "@gtkx/runtime";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import type { ObjectProp } from "../utils/object-prop.js";
|
|
5
|
+
import { useObjectAttachment } from "./use-object-attachment.js";
|
|
6
|
+
|
|
7
|
+
type AnySignalHandler = (...args: unknown[]) => unknown;
|
|
8
|
+
|
|
9
|
+
type SignalsOf<T extends GObject.Object> = NonNullable<T["__signals__"]>;
|
|
10
|
+
|
|
11
|
+
export type SignalNameOf<T extends GObject.Object> =
|
|
12
|
+
| (keyof SignalsOf<T> & string)
|
|
13
|
+
| `${keyof SignalsOf<T> & string}::${string}`;
|
|
14
|
+
|
|
15
|
+
export type SignalHandlerFor<T extends GObject.Object, S extends string> = S extends keyof SignalsOf<T>
|
|
16
|
+
? SignalsOf<T>[S]
|
|
17
|
+
: S extends `${infer TBase}::${string}`
|
|
18
|
+
? TBase extends keyof SignalsOf<T>
|
|
19
|
+
? SignalsOf<T>[TBase]
|
|
20
|
+
: AnySignalHandler
|
|
21
|
+
: AnySignalHandler;
|
|
22
|
+
|
|
23
|
+
type UseSignalOptions = {
|
|
24
|
+
after?: boolean;
|
|
25
|
+
immediate?: boolean;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
type SignalSubscription = {
|
|
29
|
+
obj: GObject.Object;
|
|
30
|
+
signal: string;
|
|
31
|
+
after: boolean;
|
|
32
|
+
listener: SignalHandler;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Connects a handler to a GObject signal for the lifetime of the component, reconnecting when the object changes.
|
|
37
|
+
*
|
|
38
|
+
* @param object The GObject (or ref to one) to connect to.
|
|
39
|
+
* @param signal The signal name, optionally with a detail suffix.
|
|
40
|
+
* @param handler The callback invoked when the signal is emitted.
|
|
41
|
+
* @param options Connection options such as running after the default handler or invoking immediately.
|
|
42
|
+
*/
|
|
43
|
+
export function useSignal<T extends GObject.Object, S extends SignalNameOf<T>>(
|
|
44
|
+
object: ObjectProp<T>,
|
|
45
|
+
signal: S,
|
|
46
|
+
handler: SignalHandlerFor<T, S>,
|
|
47
|
+
options?: UseSignalOptions,
|
|
48
|
+
): void;
|
|
49
|
+
export function useSignal(
|
|
50
|
+
object: ObjectProp<GObject.Object>,
|
|
51
|
+
signal: string,
|
|
52
|
+
handler: AnySignalHandler,
|
|
53
|
+
options?: UseSignalOptions,
|
|
54
|
+
): void {
|
|
55
|
+
const handlerRef = useRef(handler);
|
|
56
|
+
handlerRef.current = handler;
|
|
57
|
+
const after = options?.after ?? false;
|
|
58
|
+
const immediate = options?.immediate ?? false;
|
|
59
|
+
|
|
60
|
+
useObjectAttachment<GObject.Object, SignalSubscription>(object, {
|
|
61
|
+
attach: (obj) => {
|
|
62
|
+
const listener: SignalHandler = (...args) => handlerRef.current(...args);
|
|
63
|
+
obj.on(signal, listener, after);
|
|
64
|
+
if (immediate) handlerRef.current();
|
|
65
|
+
return { obj, signal, after, listener };
|
|
66
|
+
},
|
|
67
|
+
detach: (subscription) => subscription.obj.off(subscription.signal, subscription.listener),
|
|
68
|
+
isSame: (subscription, obj) =>
|
|
69
|
+
subscription.obj === obj && subscription.signal === signal && subscription.after === after,
|
|
70
|
+
});
|
|
71
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from "./render.js";
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
1
|
+
import "./utils/wrapper-node-jsx.js";
|
|
2
|
+
|
|
3
|
+
export type { ElementProp } from "@gtkx/config";
|
|
4
|
+
export { useApplication } from "./hooks/use-application.js";
|
|
5
|
+
export { useBindSetting } from "./hooks/use-bind-setting.js";
|
|
6
|
+
export { useParentWindow } from "./hooks/use-parent-window.js";
|
|
7
|
+
export { useProperty } from "./hooks/use-property.js";
|
|
8
|
+
export { type SchemaRef, useSetting } from "./hooks/use-setting.js";
|
|
9
|
+
export { useSignal } from "./hooks/use-signal.js";
|
|
10
|
+
export type { AccessibleProps } from "./reconciler/accessible.js";
|
|
11
|
+
export { createPortal } from "./reconciler/portal.js";
|
|
12
|
+
export { createRoot, quit, type Root } from "./reconciler/render.js";
|
|
13
|
+
export { type RootElement, rootElement } from "./reconciler/root-element.js";
|
|
14
|
+
export type { ObjectProp } from "./utils/object-prop.js";
|
|
15
|
+
export type { TextAnchorProps, TextPaintableProps } from "./utils/wrapper-node-jsx.js";
|
package/src/internal.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { createApplicationComponent } from "./components/application.js";
|
|
2
|
+
export { createWindowComponent } from "./components/window.js";
|
|
3
|
+
export { ApplicationContext } from "./hooks/use-application.js";
|
|
4
|
+
export { useMergeRefs } from "./hooks/use-merge-refs.js";
|
|
5
|
+
export { useObjectAttachment } from "./hooks/use-object-attachment.js";
|
|
6
|
+
export { useObjectValue } from "./hooks/use-object-value.js";
|
|
7
|
+
export { setReconcilerErrorHandler } from "./reconciler/reconciler-error-handler.js";
|
|
8
|
+
export { createReconcilerRoot, type ReconcilerRoot } from "./reconciler/reconciler-root.js";
|
|
9
|
+
export { isRootElement } from "./reconciler/root-element.js";
|
|
10
|
+
export {
|
|
11
|
+
BUFFER_TEXT_KIND,
|
|
12
|
+
CONTAINER_PROP_KIND,
|
|
13
|
+
isWrapperKind,
|
|
14
|
+
LABEL_TEXT_KIND,
|
|
15
|
+
LAZY_ELEMENT_KIND,
|
|
16
|
+
OBJECT_PROP_KIND,
|
|
17
|
+
TEXT_ANCHOR_KIND,
|
|
18
|
+
TEXT_PAINTABLE_KIND,
|
|
19
|
+
WRAPPER_NODE_ELEMENT,
|
|
20
|
+
type WrapperKind,
|
|
21
|
+
} from "./reconciler/wrapper-protocol.js";
|
|
22
|
+
export { getAccessibleMetadata } from "./utils/accessible-metadata.js";
|
|
23
|
+
export { createElementComponent, createLazyElementComponent } from "./utils/create-element-component.js";
|
|
24
|
+
export { type ObjectProp, resolveObjectProp } from "./utils/object-prop.js";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type * as Adw from "@gtkx/gi/adw";
|
|
2
|
+
import { type ElementType, type ReactNode, type Ref, useCallback, useLayoutEffect, useState } from "react";
|
|
3
|
+
import { useMergeRefs } from "../../hooks/use-merge-refs.js";
|
|
4
|
+
import { useParentWindow } from "../../hooks/use-parent-window.js";
|
|
5
|
+
import { createPortal } from "../../reconciler/portal.js";
|
|
6
|
+
import { rootElement } from "../../reconciler/root-element.js";
|
|
7
|
+
|
|
8
|
+
type DialogComponentProps = {
|
|
9
|
+
ref?: Ref<Adw.Dialog | null> | undefined;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const createDialogComponent = (Component: ElementType): ((props: DialogComponentProps) => ReactNode) => {
|
|
13
|
+
return ({ ref, ...rest }: DialogComponentProps): ReactNode => {
|
|
14
|
+
const parent = useParentWindow();
|
|
15
|
+
const [dialog, setDialog] = useState<Adw.Dialog | null>(null);
|
|
16
|
+
|
|
17
|
+
const handleMount = useCallback((instance: Adw.Dialog) => {
|
|
18
|
+
setDialog(instance);
|
|
19
|
+
|
|
20
|
+
return () => {
|
|
21
|
+
instance.forceClose();
|
|
22
|
+
setDialog(null);
|
|
23
|
+
};
|
|
24
|
+
}, []);
|
|
25
|
+
|
|
26
|
+
useLayoutEffect(() => {
|
|
27
|
+
dialog?.present(parent);
|
|
28
|
+
}, [dialog, parent]);
|
|
29
|
+
|
|
30
|
+
const mergedRef = useMergeRefs<Adw.Dialog>(ref, handleMount);
|
|
31
|
+
|
|
32
|
+
return createPortal(<Component ref={mergedRef} {...rest} />, rootElement);
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createDialogComponent } from "./dialog.js";
|