@gtkx/react 0.18.0 → 0.18.2
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/dist/errors.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +1 -0
- package/dist/errors.js.map +1 -0
- package/dist/factory.d.ts +1 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +1 -0
- package/dist/factory.js.map +1 -0
- package/dist/fiber-root.d.ts +1 -0
- package/dist/fiber-root.d.ts.map +1 -0
- package/dist/fiber-root.js +1 -0
- package/dist/fiber-root.js.map +1 -0
- package/dist/generated/internal.d.ts +1 -0
- package/dist/generated/internal.d.ts.map +1 -0
- package/dist/generated/internal.js +1 -0
- package/dist/generated/internal.js.map +1 -0
- package/dist/generated/jsx.d.ts +1 -0
- package/dist/generated/jsx.d.ts.map +1 -0
- package/dist/generated/jsx.js +1 -0
- package/dist/generated/jsx.js.map +1 -0
- package/dist/generated/registry.d.ts +1 -0
- package/dist/generated/registry.d.ts.map +1 -0
- package/dist/generated/registry.js +1 -0
- package/dist/generated/registry.js.map +1 -0
- package/dist/host-config.d.ts +1 -0
- package/dist/host-config.d.ts.map +1 -0
- package/dist/host-config.js +1 -0
- package/dist/host-config.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx.d.ts +1 -0
- package/dist/jsx.d.ts.map +1 -0
- package/dist/jsx.js +1 -0
- package/dist/jsx.js.map +1 -0
- package/dist/metadata.d.ts +1 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +1 -0
- package/dist/metadata.js.map +1 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +1 -0
- package/dist/node.js.map +1 -0
- package/dist/nodes/adjustable.d.ts +1 -0
- package/dist/nodes/adjustable.d.ts.map +1 -0
- package/dist/nodes/adjustable.js +1 -0
- package/dist/nodes/adjustable.js.map +1 -0
- package/dist/nodes/alert-dialog-response.d.ts +1 -0
- package/dist/nodes/alert-dialog-response.d.ts.map +1 -0
- package/dist/nodes/alert-dialog-response.js +1 -0
- package/dist/nodes/alert-dialog-response.js.map +1 -0
- package/dist/nodes/animation.d.ts +1 -0
- package/dist/nodes/animation.d.ts.map +1 -0
- package/dist/nodes/animation.js +1 -0
- package/dist/nodes/animation.js.map +1 -0
- package/dist/nodes/application.d.ts +1 -0
- package/dist/nodes/application.d.ts.map +1 -0
- package/dist/nodes/application.js +1 -0
- package/dist/nodes/application.js.map +1 -0
- package/dist/nodes/calendar.d.ts +1 -0
- package/dist/nodes/calendar.d.ts.map +1 -0
- package/dist/nodes/calendar.js +1 -0
- package/dist/nodes/calendar.js.map +1 -0
- package/dist/nodes/color-dialog-button.d.ts +1 -0
- package/dist/nodes/color-dialog-button.d.ts.map +1 -0
- package/dist/nodes/color-dialog-button.js +1 -0
- package/dist/nodes/color-dialog-button.js.map +1 -0
- package/dist/nodes/column-view-column.d.ts +1 -0
- package/dist/nodes/column-view-column.d.ts.map +1 -0
- package/dist/nodes/column-view-column.js +1 -0
- package/dist/nodes/column-view-column.js.map +1 -0
- package/dist/nodes/column-view.d.ts +1 -0
- package/dist/nodes/column-view.d.ts.map +1 -0
- package/dist/nodes/column-view.js +1 -0
- package/dist/nodes/column-view.js.map +1 -0
- package/dist/nodes/container-slot.d.ts +1 -0
- package/dist/nodes/container-slot.d.ts.map +1 -0
- package/dist/nodes/container-slot.js +1 -0
- package/dist/nodes/container-slot.js.map +1 -0
- package/dist/nodes/dialog.d.ts +1 -0
- package/dist/nodes/dialog.d.ts.map +1 -0
- package/dist/nodes/dialog.js +1 -0
- package/dist/nodes/dialog.js.map +1 -0
- package/dist/nodes/drawing-area.d.ts +1 -0
- package/dist/nodes/drawing-area.d.ts.map +1 -0
- package/dist/nodes/drawing-area.js +1 -0
- package/dist/nodes/drawing-area.js.map +1 -0
- package/dist/nodes/drop-down.d.ts +1 -0
- package/dist/nodes/drop-down.d.ts.map +1 -0
- package/dist/nodes/drop-down.js +1 -0
- package/dist/nodes/drop-down.js.map +1 -0
- package/dist/nodes/event-controller.d.ts +1 -0
- package/dist/nodes/event-controller.d.ts.map +1 -0
- package/dist/nodes/event-controller.js +1 -0
- package/dist/nodes/event-controller.js.map +1 -0
- package/dist/nodes/fixed-child.d.ts +1 -0
- package/dist/nodes/fixed-child.d.ts.map +1 -0
- package/dist/nodes/fixed-child.js +1 -0
- package/dist/nodes/fixed-child.js.map +1 -0
- package/dist/nodes/font-dialog-button.d.ts +1 -0
- package/dist/nodes/font-dialog-button.d.ts.map +1 -0
- package/dist/nodes/font-dialog-button.js +1 -0
- package/dist/nodes/font-dialog-button.js.map +1 -0
- package/dist/nodes/grid-child.d.ts +1 -0
- package/dist/nodes/grid-child.d.ts.map +1 -0
- package/dist/nodes/grid-child.js +1 -0
- package/dist/nodes/grid-child.js.map +1 -0
- package/dist/nodes/grid-view.d.ts +1 -0
- package/dist/nodes/grid-view.d.ts.map +1 -0
- package/dist/nodes/grid-view.js +1 -0
- package/dist/nodes/grid-view.js.map +1 -0
- package/dist/nodes/internal/base-item-renderer.d.ts +1 -0
- package/dist/nodes/internal/base-item-renderer.d.ts.map +1 -0
- package/dist/nodes/internal/base-item-renderer.js +1 -0
- package/dist/nodes/internal/base-item-renderer.js.map +1 -0
- package/dist/nodes/internal/grid-item-renderer.d.ts +1 -0
- package/dist/nodes/internal/grid-item-renderer.d.ts.map +1 -0
- package/dist/nodes/internal/grid-item-renderer.js +1 -0
- package/dist/nodes/internal/grid-item-renderer.js.map +1 -0
- package/dist/nodes/internal/list-item-renderer.d.ts +1 -0
- package/dist/nodes/internal/list-item-renderer.d.ts.map +1 -0
- package/dist/nodes/internal/list-item-renderer.js +1 -0
- package/dist/nodes/internal/list-item-renderer.js.map +1 -0
- package/dist/nodes/internal/list-store.d.ts +1 -0
- package/dist/nodes/internal/list-store.d.ts.map +1 -0
- package/dist/nodes/internal/list-store.js +1 -0
- package/dist/nodes/internal/list-store.js.map +1 -0
- package/dist/nodes/internal/predicates.d.ts +1 -0
- package/dist/nodes/internal/predicates.d.ts.map +1 -0
- package/dist/nodes/internal/predicates.js +1 -0
- package/dist/nodes/internal/predicates.js.map +1 -0
- package/dist/nodes/internal/props.d.ts +1 -0
- package/dist/nodes/internal/props.d.ts.map +1 -0
- package/dist/nodes/internal/props.js +1 -0
- package/dist/nodes/internal/props.js.map +1 -0
- package/dist/nodes/internal/selection-model-controller.d.ts +1 -0
- package/dist/nodes/internal/selection-model-controller.d.ts.map +1 -0
- package/dist/nodes/internal/selection-model-controller.js +1 -0
- package/dist/nodes/internal/selection-model-controller.js.map +1 -0
- package/dist/nodes/internal/signal-store.d.ts +1 -0
- package/dist/nodes/internal/signal-store.d.ts.map +1 -0
- package/dist/nodes/internal/signal-store.js +1 -0
- package/dist/nodes/internal/signal-store.js.map +1 -0
- package/dist/nodes/internal/simple-list-store.d.ts +1 -0
- package/dist/nodes/internal/simple-list-store.d.ts.map +1 -0
- package/dist/nodes/internal/simple-list-store.js +1 -0
- package/dist/nodes/internal/simple-list-store.js.map +1 -0
- package/dist/nodes/internal/text-buffer-controller.d.ts +1 -0
- package/dist/nodes/internal/text-buffer-controller.d.ts.map +1 -0
- package/dist/nodes/internal/text-buffer-controller.js +1 -0
- package/dist/nodes/internal/text-buffer-controller.js.map +1 -0
- package/dist/nodes/internal/tree-store.d.ts +1 -0
- package/dist/nodes/internal/tree-store.d.ts.map +1 -0
- package/dist/nodes/internal/tree-store.js +1 -0
- package/dist/nodes/internal/tree-store.js.map +1 -0
- package/dist/nodes/internal/widget.d.ts +1 -0
- package/dist/nodes/internal/widget.d.ts.map +1 -0
- package/dist/nodes/internal/widget.js +1 -0
- package/dist/nodes/internal/widget.js.map +1 -0
- package/dist/nodes/level-bar.d.ts +1 -0
- package/dist/nodes/level-bar.d.ts.map +1 -0
- package/dist/nodes/level-bar.js +1 -0
- package/dist/nodes/level-bar.js.map +1 -0
- package/dist/nodes/list-item.d.ts +1 -0
- package/dist/nodes/list-item.d.ts.map +1 -0
- package/dist/nodes/list-item.js +1 -0
- package/dist/nodes/list-item.js.map +1 -0
- package/dist/nodes/list-view.d.ts +1 -0
- package/dist/nodes/list-view.d.ts.map +1 -0
- package/dist/nodes/list-view.js +1 -0
- package/dist/nodes/list-view.js.map +1 -0
- package/dist/nodes/menu.d.ts +1 -0
- package/dist/nodes/menu.d.ts.map +1 -0
- package/dist/nodes/menu.js +1 -0
- package/dist/nodes/menu.js.map +1 -0
- package/dist/nodes/models/grid.d.ts +1 -0
- package/dist/nodes/models/grid.d.ts.map +1 -0
- package/dist/nodes/models/grid.js +1 -0
- package/dist/nodes/models/grid.js.map +1 -0
- package/dist/nodes/models/list.d.ts +1 -0
- package/dist/nodes/models/list.d.ts.map +1 -0
- package/dist/nodes/models/list.js +1 -0
- package/dist/nodes/models/list.js.map +1 -0
- package/dist/nodes/models/menu.d.ts +1 -0
- package/dist/nodes/models/menu.d.ts.map +1 -0
- package/dist/nodes/models/menu.js +1 -0
- package/dist/nodes/models/menu.js.map +1 -0
- package/dist/nodes/navigation-page.d.ts +1 -0
- package/dist/nodes/navigation-page.d.ts.map +1 -0
- package/dist/nodes/navigation-page.js +1 -0
- package/dist/nodes/navigation-page.js.map +1 -0
- package/dist/nodes/navigation-view.d.ts +1 -0
- package/dist/nodes/navigation-view.d.ts.map +1 -0
- package/dist/nodes/navigation-view.js +1 -0
- package/dist/nodes/navigation-view.js.map +1 -0
- package/dist/nodes/notebook-page-tab.d.ts +1 -0
- package/dist/nodes/notebook-page-tab.d.ts.map +1 -0
- package/dist/nodes/notebook-page-tab.js +1 -0
- package/dist/nodes/notebook-page-tab.js.map +1 -0
- package/dist/nodes/notebook-page.d.ts +1 -0
- package/dist/nodes/notebook-page.d.ts.map +1 -0
- package/dist/nodes/notebook-page.js +1 -0
- package/dist/nodes/notebook-page.js.map +1 -0
- package/dist/nodes/notebook.d.ts +1 -0
- package/dist/nodes/notebook.d.ts.map +1 -0
- package/dist/nodes/notebook.js +1 -0
- package/dist/nodes/notebook.js.map +1 -0
- package/dist/nodes/overlay-child.d.ts +1 -0
- package/dist/nodes/overlay-child.d.ts.map +1 -0
- package/dist/nodes/overlay-child.js +1 -0
- package/dist/nodes/overlay-child.js.map +1 -0
- package/dist/nodes/popover-menu.d.ts +1 -0
- package/dist/nodes/popover-menu.d.ts.map +1 -0
- package/dist/nodes/popover-menu.js +1 -0
- package/dist/nodes/popover-menu.js.map +1 -0
- package/dist/nodes/scale.d.ts +1 -0
- package/dist/nodes/scale.d.ts.map +1 -0
- package/dist/nodes/scale.js +1 -0
- package/dist/nodes/scale.js.map +1 -0
- package/dist/nodes/scrolled-window.d.ts +1 -0
- package/dist/nodes/scrolled-window.d.ts.map +1 -0
- package/dist/nodes/scrolled-window.js +1 -0
- package/dist/nodes/scrolled-window.js.map +1 -0
- package/dist/nodes/search-bar.d.ts +1 -0
- package/dist/nodes/search-bar.d.ts.map +1 -0
- package/dist/nodes/search-bar.js +1 -0
- package/dist/nodes/search-bar.js.map +1 -0
- package/dist/nodes/shortcut-controller.d.ts +1 -0
- package/dist/nodes/shortcut-controller.d.ts.map +1 -0
- package/dist/nodes/shortcut-controller.js +1 -0
- package/dist/nodes/shortcut-controller.js.map +1 -0
- package/dist/nodes/shortcut.d.ts +1 -0
- package/dist/nodes/shortcut.d.ts.map +1 -0
- package/dist/nodes/shortcut.js +1 -0
- package/dist/nodes/shortcut.js.map +1 -0
- package/dist/nodes/slot.d.ts +1 -0
- package/dist/nodes/slot.d.ts.map +1 -0
- package/dist/nodes/slot.js +1 -0
- package/dist/nodes/slot.js.map +1 -0
- package/dist/nodes/source-view.d.ts +1 -0
- package/dist/nodes/source-view.d.ts.map +1 -0
- package/dist/nodes/source-view.js +1 -0
- package/dist/nodes/source-view.js.map +1 -0
- package/dist/nodes/stack-page.d.ts +1 -0
- package/dist/nodes/stack-page.d.ts.map +1 -0
- package/dist/nodes/stack-page.js +1 -0
- package/dist/nodes/stack-page.js.map +1 -0
- package/dist/nodes/stack.d.ts +1 -0
- package/dist/nodes/stack.d.ts.map +1 -0
- package/dist/nodes/stack.js +1 -0
- package/dist/nodes/stack.js.map +1 -0
- package/dist/nodes/text-anchor.d.ts +1 -0
- package/dist/nodes/text-anchor.d.ts.map +1 -0
- package/dist/nodes/text-anchor.js +1 -0
- package/dist/nodes/text-anchor.js.map +1 -0
- package/dist/nodes/text-content.d.ts +1 -0
- package/dist/nodes/text-content.d.ts.map +1 -0
- package/dist/nodes/text-content.js +1 -0
- package/dist/nodes/text-content.js.map +1 -0
- package/dist/nodes/text-paintable.d.ts +1 -0
- package/dist/nodes/text-paintable.d.ts.map +1 -0
- package/dist/nodes/text-paintable.js +1 -0
- package/dist/nodes/text-paintable.js.map +1 -0
- package/dist/nodes/text-segment.d.ts +1 -0
- package/dist/nodes/text-segment.d.ts.map +1 -0
- package/dist/nodes/text-segment.js +1 -0
- package/dist/nodes/text-segment.js.map +1 -0
- package/dist/nodes/text-tag.d.ts +1 -0
- package/dist/nodes/text-tag.d.ts.map +1 -0
- package/dist/nodes/text-tag.js +1 -0
- package/dist/nodes/text-tag.js.map +1 -0
- package/dist/nodes/text-view.d.ts +1 -0
- package/dist/nodes/text-view.d.ts.map +1 -0
- package/dist/nodes/text-view.js +1 -0
- package/dist/nodes/text-view.js.map +1 -0
- package/dist/nodes/toggle-group.d.ts +1 -0
- package/dist/nodes/toggle-group.d.ts.map +1 -0
- package/dist/nodes/toggle-group.js +1 -0
- package/dist/nodes/toggle-group.js.map +1 -0
- package/dist/nodes/toggle.d.ts +1 -0
- package/dist/nodes/toggle.d.ts.map +1 -0
- package/dist/nodes/toggle.js +1 -0
- package/dist/nodes/toggle.js.map +1 -0
- package/dist/nodes/virtual.d.ts +1 -0
- package/dist/nodes/virtual.d.ts.map +1 -0
- package/dist/nodes/virtual.js +1 -0
- package/dist/nodes/virtual.js.map +1 -0
- package/dist/nodes/web-view.d.ts +1 -0
- package/dist/nodes/web-view.d.ts.map +1 -0
- package/dist/nodes/web-view.js +1 -0
- package/dist/nodes/web-view.js.map +1 -0
- package/dist/nodes/widget.d.ts +1 -0
- package/dist/nodes/widget.d.ts.map +1 -0
- package/dist/nodes/widget.js +1 -0
- package/dist/nodes/widget.js.map +1 -0
- package/dist/nodes/window.d.ts +1 -0
- package/dist/nodes/window.d.ts.map +1 -0
- package/dist/nodes/window.js +1 -0
- package/dist/nodes/window.js.map +1 -0
- package/dist/portal.d.ts +1 -0
- package/dist/portal.d.ts.map +1 -0
- package/dist/portal.js +1 -0
- package/dist/portal.js.map +1 -0
- package/dist/reconciler.d.ts +1 -0
- package/dist/reconciler.d.ts.map +1 -0
- package/dist/reconciler.js +1 -0
- package/dist/reconciler.js.map +1 -0
- package/dist/registry.d.ts +1 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +1 -0
- package/dist/registry.js.map +1 -0
- package/dist/render.d.ts +1 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +1 -0
- package/dist/render.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/package.json +6 -4
- package/src/errors.ts +52 -0
- package/src/factory.ts +62 -0
- package/src/fiber-root.ts +20 -0
- package/src/generated/internal.ts +2134 -0
- package/src/generated/jsx.ts +20068 -0
- package/src/generated/registry.ts +16 -0
- package/src/host-config.ts +186 -0
- package/src/index.ts +11 -0
- package/src/jsx.ts +1294 -0
- package/src/metadata.ts +36 -0
- package/src/node.ts +109 -0
- package/src/nodes/adjustable.ts +68 -0
- package/src/nodes/alert-dialog-response.ts +78 -0
- package/src/nodes/animation.ts +402 -0
- package/src/nodes/application.ts +56 -0
- package/src/nodes/calendar.ts +38 -0
- package/src/nodes/color-dialog-button.ts +69 -0
- package/src/nodes/column-view-column.ts +84 -0
- package/src/nodes/column-view.ts +192 -0
- package/src/nodes/container-slot.ts +87 -0
- package/src/nodes/dialog.ts +25 -0
- package/src/nodes/drawing-area.ts +51 -0
- package/src/nodes/drop-down.ts +92 -0
- package/src/nodes/event-controller.ts +100 -0
- package/src/nodes/fixed-child.ts +108 -0
- package/src/nodes/font-dialog-button.ts +97 -0
- package/src/nodes/grid-child.ts +103 -0
- package/src/nodes/grid-view.ts +96 -0
- package/src/nodes/internal/base-item-renderer.ts +108 -0
- package/src/nodes/internal/grid-item-renderer.ts +71 -0
- package/src/nodes/internal/list-item-renderer.ts +155 -0
- package/src/nodes/internal/list-store.ts +105 -0
- package/src/nodes/internal/predicates.ts +80 -0
- package/src/nodes/internal/props.ts +51 -0
- package/src/nodes/internal/selection-model-controller.ts +115 -0
- package/src/nodes/internal/signal-store.ts +141 -0
- package/src/nodes/internal/simple-list-store.ts +99 -0
- package/src/nodes/internal/text-buffer-controller.ts +374 -0
- package/src/nodes/internal/tree-store.ts +237 -0
- package/src/nodes/internal/widget.ts +78 -0
- package/src/nodes/level-bar.ts +36 -0
- package/src/nodes/list-item.ts +107 -0
- package/src/nodes/list-view.ts +97 -0
- package/src/nodes/menu.ts +27 -0
- package/src/nodes/models/grid.ts +105 -0
- package/src/nodes/models/list.ts +140 -0
- package/src/nodes/models/menu.ts +310 -0
- package/src/nodes/navigation-page.ts +154 -0
- package/src/nodes/navigation-view.ts +58 -0
- package/src/nodes/notebook-page-tab.ts +55 -0
- package/src/nodes/notebook-page.ts +185 -0
- package/src/nodes/notebook.ts +28 -0
- package/src/nodes/overlay-child.ts +109 -0
- package/src/nodes/popover-menu.ts +59 -0
- package/src/nodes/scale.ts +28 -0
- package/src/nodes/scrolled-window.ts +23 -0
- package/src/nodes/search-bar.ts +27 -0
- package/src/nodes/shortcut-controller.ts +27 -0
- package/src/nodes/shortcut.ts +69 -0
- package/src/nodes/slot.ts +138 -0
- package/src/nodes/source-view.ts +130 -0
- package/src/nodes/stack-page.ts +170 -0
- package/src/nodes/stack.ts +35 -0
- package/src/nodes/text-anchor.ts +74 -0
- package/src/nodes/text-content.ts +14 -0
- package/src/nodes/text-paintable.ts +51 -0
- package/src/nodes/text-segment.ts +55 -0
- package/src/nodes/text-tag.ts +287 -0
- package/src/nodes/text-view.ts +93 -0
- package/src/nodes/toggle-group.ts +27 -0
- package/src/nodes/toggle.ts +72 -0
- package/src/nodes/virtual.ts +16 -0
- package/src/nodes/web-view.ts +22 -0
- package/src/nodes/widget.ts +398 -0
- package/src/nodes/window.ts +159 -0
- package/src/portal.ts +37 -0
- package/src/reconciler.ts +52 -0
- package/src/registry.ts +123 -0
- package/src/render.tsx +192 -0
- package/src/types.ts +7 -0
package/src/registry.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import * as Adw from "@gtkx/ffi/adw";
|
|
2
|
+
import * as Gtk from "@gtkx/ffi/gtk";
|
|
3
|
+
import * as GtkSource from "@gtkx/ffi/gtksource";
|
|
4
|
+
import * as WebKit from "@gtkx/ffi/webkit";
|
|
5
|
+
import type { Node } from "./node.js";
|
|
6
|
+
import { AdjustableNode } from "./nodes/adjustable.js";
|
|
7
|
+
|
|
8
|
+
import { AlertDialogResponseNode } from "./nodes/alert-dialog-response.js";
|
|
9
|
+
import { AnimationNode } from "./nodes/animation.js";
|
|
10
|
+
import { ApplicationNode } from "./nodes/application.js";
|
|
11
|
+
import { CalendarNode } from "./nodes/calendar.js";
|
|
12
|
+
import { ColorDialogButtonNode } from "./nodes/color-dialog-button.js";
|
|
13
|
+
import { ColumnViewNode } from "./nodes/column-view.js";
|
|
14
|
+
import { ColumnViewColumnNode } from "./nodes/column-view-column.js";
|
|
15
|
+
import { ContainerSlotNode } from "./nodes/container-slot.js";
|
|
16
|
+
import { DialogNode } from "./nodes/dialog.js";
|
|
17
|
+
import { DrawingAreaNode } from "./nodes/drawing-area.js";
|
|
18
|
+
import { DropDownNode } from "./nodes/drop-down.js";
|
|
19
|
+
import { EventControllerNode } from "./nodes/event-controller.js";
|
|
20
|
+
import { FixedChildNode } from "./nodes/fixed-child.js";
|
|
21
|
+
import { FontDialogButtonNode } from "./nodes/font-dialog-button.js";
|
|
22
|
+
import { GridChildNode } from "./nodes/grid-child.js";
|
|
23
|
+
import { GridViewNode } from "./nodes/grid-view.js";
|
|
24
|
+
import { LevelBarNode } from "./nodes/level-bar.js";
|
|
25
|
+
import { ListItemNode } from "./nodes/list-item.js";
|
|
26
|
+
import { ListViewNode } from "./nodes/list-view.js";
|
|
27
|
+
import { MenuNode } from "./nodes/menu.js";
|
|
28
|
+
import { NavigationPageNode } from "./nodes/navigation-page.js";
|
|
29
|
+
import { NavigationViewNode } from "./nodes/navigation-view.js";
|
|
30
|
+
import { NotebookNode } from "./nodes/notebook.js";
|
|
31
|
+
import { NotebookPageNode } from "./nodes/notebook-page.js";
|
|
32
|
+
import { NotebookPageTabNode } from "./nodes/notebook-page-tab.js";
|
|
33
|
+
import { OverlayChildNode } from "./nodes/overlay-child.js";
|
|
34
|
+
import { PopoverMenuNode } from "./nodes/popover-menu.js";
|
|
35
|
+
import { ScaleNode } from "./nodes/scale.js";
|
|
36
|
+
import { ScrolledWindowNode } from "./nodes/scrolled-window.js";
|
|
37
|
+
import { SearchBarNode } from "./nodes/search-bar.js";
|
|
38
|
+
import { ShortcutNode } from "./nodes/shortcut.js";
|
|
39
|
+
import { ShortcutControllerNode } from "./nodes/shortcut-controller.js";
|
|
40
|
+
import { SlotNode } from "./nodes/slot.js";
|
|
41
|
+
import { SourceViewNode } from "./nodes/source-view.js";
|
|
42
|
+
import { StackNode } from "./nodes/stack.js";
|
|
43
|
+
import { StackPageNode } from "./nodes/stack-page.js";
|
|
44
|
+
import { TextAnchorNode } from "./nodes/text-anchor.js";
|
|
45
|
+
import { TextPaintableNode } from "./nodes/text-paintable.js";
|
|
46
|
+
import { TextSegmentNode } from "./nodes/text-segment.js";
|
|
47
|
+
import { TextTagNode } from "./nodes/text-tag.js";
|
|
48
|
+
import { TextViewNode } from "./nodes/text-view.js";
|
|
49
|
+
import { ToggleNode } from "./nodes/toggle.js";
|
|
50
|
+
import { ToggleGroupNode } from "./nodes/toggle-group.js";
|
|
51
|
+
import { WebViewNode } from "./nodes/web-view.js";
|
|
52
|
+
import { WidgetNode } from "./nodes/widget.js";
|
|
53
|
+
import { WindowNode } from "./nodes/window.js";
|
|
54
|
+
|
|
55
|
+
export const AdjustableWidgets = [Gtk.SpinButton, Gtk.ScaleButton, Gtk.Range] as const;
|
|
56
|
+
export type AdjustableWidget = InstanceType<(typeof AdjustableWidgets)[number]>;
|
|
57
|
+
|
|
58
|
+
export const StackWidgets = [Gtk.Stack, Adw.ViewStack] as const;
|
|
59
|
+
export type StackWidget = InstanceType<(typeof StackWidgets)[number]>;
|
|
60
|
+
|
|
61
|
+
export const DropDownWidgets = [Gtk.DropDown, Adw.ComboRow] as const;
|
|
62
|
+
export type DropDownWidget = InstanceType<(typeof DropDownWidgets)[number]>;
|
|
63
|
+
|
|
64
|
+
export const PopoverMenuWidgets = [Gtk.PopoverMenu, Gtk.PopoverMenuBar, Gtk.MenuButton] as const;
|
|
65
|
+
export type PopoverMenuWidget = InstanceType<(typeof PopoverMenuWidgets)[number]>;
|
|
66
|
+
|
|
67
|
+
// biome-ignore lint/suspicious/noExplicitAny: Registry entries require flexible typing for varied node constructors
|
|
68
|
+
export type NodeClass = (new (...args: any[]) => Node) & { createContainer(...args: any[]): unknown };
|
|
69
|
+
|
|
70
|
+
// biome-ignore lint/suspicious/noExplicitAny: Class keys require flexible typing for GTK class hierarchy matching
|
|
71
|
+
type ClassKey = new (...args: any[]) => any;
|
|
72
|
+
type RegistryKey = string | ClassKey | readonly (string | ClassKey)[];
|
|
73
|
+
type NodeRegistryEntry = [RegistryKey, NodeClass];
|
|
74
|
+
|
|
75
|
+
export const NODE_REGISTRY: NodeRegistryEntry[] = [
|
|
76
|
+
["ContainerSlot", ContainerSlotNode],
|
|
77
|
+
["AlertDialogResponse", AlertDialogResponseNode],
|
|
78
|
+
["Animation", AnimationNode],
|
|
79
|
+
["ColumnViewColumn", ColumnViewColumnNode],
|
|
80
|
+
["FixedChild", FixedChildNode],
|
|
81
|
+
["GridChild", GridChildNode],
|
|
82
|
+
["ListItem", ListItemNode],
|
|
83
|
+
[["MenuItem", "MenuSection", "MenuSubmenu"], MenuNode],
|
|
84
|
+
["NavigationPage", NavigationPageNode],
|
|
85
|
+
["NotebookPage", NotebookPageNode],
|
|
86
|
+
["NotebookPageTab", NotebookPageTabNode],
|
|
87
|
+
["OverlayChild", OverlayChildNode],
|
|
88
|
+
["Shortcut", ShortcutNode],
|
|
89
|
+
["Slot", SlotNode],
|
|
90
|
+
["StackPage", StackPageNode],
|
|
91
|
+
["TextAnchor", TextAnchorNode],
|
|
92
|
+
["TextPaintable", TextPaintableNode],
|
|
93
|
+
["TextSegment", TextSegmentNode],
|
|
94
|
+
["TextTag", TextTagNode],
|
|
95
|
+
["Toggle", ToggleNode],
|
|
96
|
+
[Gtk.Application, ApplicationNode],
|
|
97
|
+
[Gtk.ShortcutController, ShortcutControllerNode],
|
|
98
|
+
[Gtk.EventController, EventControllerNode],
|
|
99
|
+
[GtkSource.View, SourceViewNode],
|
|
100
|
+
[Gtk.TextView, TextViewNode],
|
|
101
|
+
[WebKit.WebView, WebViewNode],
|
|
102
|
+
[Adw.Dialog, DialogNode],
|
|
103
|
+
[Gtk.Window, WindowNode],
|
|
104
|
+
[Gtk.Scale, ScaleNode],
|
|
105
|
+
[Gtk.LevelBar, LevelBarNode],
|
|
106
|
+
[Gtk.ScrolledWindow, ScrolledWindowNode],
|
|
107
|
+
[Gtk.Calendar, CalendarNode],
|
|
108
|
+
[Gtk.ColorDialogButton, ColorDialogButtonNode],
|
|
109
|
+
[Gtk.FontDialogButton, FontDialogButtonNode],
|
|
110
|
+
[Gtk.DrawingArea, DrawingAreaNode],
|
|
111
|
+
[Gtk.SearchBar, SearchBarNode],
|
|
112
|
+
[Adw.NavigationView, NavigationViewNode],
|
|
113
|
+
[Adw.ToggleGroup, ToggleGroupNode],
|
|
114
|
+
[Gtk.Notebook, NotebookNode],
|
|
115
|
+
[StackWidgets, StackNode],
|
|
116
|
+
[Gtk.ColumnView, ColumnViewNode],
|
|
117
|
+
[Gtk.ListView, ListViewNode],
|
|
118
|
+
[Gtk.GridView, GridViewNode],
|
|
119
|
+
[DropDownWidgets, DropDownNode],
|
|
120
|
+
[PopoverMenuWidgets, PopoverMenuNode],
|
|
121
|
+
[AdjustableWidgets, AdjustableNode],
|
|
122
|
+
[Gtk.Widget, WidgetNode],
|
|
123
|
+
];
|
package/src/render.tsx
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { start, stop } from "@gtkx/ffi";
|
|
2
|
+
import type * as Gio from "@gtkx/ffi/gio";
|
|
3
|
+
import type * as Gtk from "@gtkx/ffi/gtk";
|
|
4
|
+
import { createContext, type ReactNode, useContext } from "react";
|
|
5
|
+
import { formatBoundaryError, formatRenderError } from "./errors.js";
|
|
6
|
+
import { getSignalStore } from "./nodes/internal/signal-store.js";
|
|
7
|
+
import { reconciler } from "./reconciler.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* React Context providing access to the GTK Application instance.
|
|
11
|
+
*
|
|
12
|
+
* Use {@link useApplication} to access the application in components.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* const App = () => {
|
|
17
|
+
* const app = useApplication();
|
|
18
|
+
* console.log(app.applicationId);
|
|
19
|
+
* return <GtkLabel label="Hello" />;
|
|
20
|
+
* };
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const ApplicationContext = createContext<Gtk.Application | null>(null);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Hook to access the GTK Application instance.
|
|
27
|
+
*
|
|
28
|
+
* Must be called within a component rendered by {@link render}.
|
|
29
|
+
* Throws an error if called outside the application context.
|
|
30
|
+
*
|
|
31
|
+
* @returns The GTK Application instance
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* const MyComponent = () => {
|
|
36
|
+
* const app = useApplication();
|
|
37
|
+
* return <GtkLabel label={app.applicationId} />;
|
|
38
|
+
* };
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @see {@link ApplicationContext} for the underlying context
|
|
42
|
+
*/
|
|
43
|
+
export const useApplication = (): Gtk.Application => {
|
|
44
|
+
const context = useContext(ApplicationContext);
|
|
45
|
+
|
|
46
|
+
if (!context) {
|
|
47
|
+
throw new Error("Expected ApplicationContext: useApplication must be called within Application");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return context;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
let container: unknown = null;
|
|
54
|
+
let app: Gtk.Application | null = null;
|
|
55
|
+
let isHotReloading = false;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Sets the hot reloading state.
|
|
59
|
+
*
|
|
60
|
+
* Used internally by the dev server to prevent quit() from closing
|
|
61
|
+
* the application during HMR updates.
|
|
62
|
+
*
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
65
|
+
export const setHotReloading = (value: boolean): void => {
|
|
66
|
+
isHotReloading = value;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Renders a React element tree into a GTK4 application window.
|
|
71
|
+
*
|
|
72
|
+
* This is the main entry point for GTKX applications. It initializes the GTK4
|
|
73
|
+
* runtime, creates an application container, and begins the React reconciliation
|
|
74
|
+
* process.
|
|
75
|
+
*
|
|
76
|
+
* @param element - The root React element to render
|
|
77
|
+
* @param appId - Application ID in reverse domain notation (e.g., "com.example.myapp")
|
|
78
|
+
* @param flags - Optional GIO application flags for customizing behavior
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```tsx
|
|
82
|
+
* import { render, quit } from "@gtkx/react";
|
|
83
|
+
*
|
|
84
|
+
* const App = () => (
|
|
85
|
+
* <GtkApplicationWindow title="My App" onClose={quit}>
|
|
86
|
+
* <GtkLabel label="Hello, GTKX!" />
|
|
87
|
+
* </GtkApplicationWindow>
|
|
88
|
+
* );
|
|
89
|
+
*
|
|
90
|
+
* render(<App />, "com.example.myapp");
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @see {@link quit} for shutting down the application
|
|
94
|
+
* @see {@link update} for hot-reloading the rendered tree
|
|
95
|
+
*/
|
|
96
|
+
export const render = (element: ReactNode, appId: string, flags?: Gio.ApplicationFlags): void => {
|
|
97
|
+
const application = start(appId, flags);
|
|
98
|
+
app = application;
|
|
99
|
+
const instance = reconciler.getInstance();
|
|
100
|
+
|
|
101
|
+
container = instance.createContainer(
|
|
102
|
+
application,
|
|
103
|
+
1,
|
|
104
|
+
null,
|
|
105
|
+
false,
|
|
106
|
+
null,
|
|
107
|
+
"",
|
|
108
|
+
(error: unknown) => {
|
|
109
|
+
getSignalStore(application).forceUnblockAll();
|
|
110
|
+
throw formatRenderError(error);
|
|
111
|
+
},
|
|
112
|
+
(error: unknown) => {
|
|
113
|
+
getSignalStore(application).forceUnblockAll();
|
|
114
|
+
const formattedError = formatBoundaryError(error);
|
|
115
|
+
console.error(formattedError.toString());
|
|
116
|
+
},
|
|
117
|
+
() => {},
|
|
118
|
+
() => {},
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
instance.updateContainer(
|
|
122
|
+
<ApplicationContext.Provider value={application}>{element}</ApplicationContext.Provider>,
|
|
123
|
+
container,
|
|
124
|
+
null,
|
|
125
|
+
() => {},
|
|
126
|
+
);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Updates the rendered React element tree.
|
|
131
|
+
*
|
|
132
|
+
* Used primarily for hot module replacement (HMR) during development.
|
|
133
|
+
* Replaces the current component tree with a new element without
|
|
134
|
+
* reinitializing the GTK application.
|
|
135
|
+
*
|
|
136
|
+
* @param element - The new root React element to render
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```tsx
|
|
140
|
+
* // In HMR handler
|
|
141
|
+
* if (import.meta.hot) {
|
|
142
|
+
* import.meta.hot.accept(() => {
|
|
143
|
+
* update(<App />);
|
|
144
|
+
* });
|
|
145
|
+
* }
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
* @see {@link render} for initial rendering
|
|
149
|
+
*/
|
|
150
|
+
export const update = (element: ReactNode): Promise<void> => {
|
|
151
|
+
return new Promise((resolve) => {
|
|
152
|
+
reconciler
|
|
153
|
+
.getInstance()
|
|
154
|
+
.updateContainer(
|
|
155
|
+
<ApplicationContext.Provider value={app}>{element}</ApplicationContext.Provider>,
|
|
156
|
+
container,
|
|
157
|
+
null,
|
|
158
|
+
resolve,
|
|
159
|
+
);
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Gracefully shuts down the GTK application.
|
|
165
|
+
*
|
|
166
|
+
* Unmounts the React component tree and stops the GTK main loop.
|
|
167
|
+
* Typically used as the `onClose` handler for the application window.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```tsx
|
|
171
|
+
* import { quit } from "@gtkx/react";
|
|
172
|
+
*
|
|
173
|
+
* const App = () => (
|
|
174
|
+
* <GtkApplicationWindow title="My App" onClose={quit}>
|
|
175
|
+
* <GtkButton label="Quit" onClicked={quit} />
|
|
176
|
+
* </GtkApplicationWindow>
|
|
177
|
+
* );
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @see {@link render} for starting the application
|
|
181
|
+
*/
|
|
182
|
+
export const quit = (): void => {
|
|
183
|
+
if (isHotReloading) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
reconciler.getInstance().updateContainer(null, container, null, () => {
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
stop();
|
|
190
|
+
}, 0);
|
|
191
|
+
});
|
|
192
|
+
};
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type * as Gtk from "@gtkx/ffi/gtk";
|
|
2
|
+
|
|
3
|
+
export type Container = Gtk.Widget | Gtk.Application | Gtk.EventController;
|
|
4
|
+
|
|
5
|
+
export type Props = Record<string, unknown>;
|
|
6
|
+
|
|
7
|
+
export type ContainerClass = typeof Gtk.Widget | typeof Gtk.Application | typeof Gtk.EventController;
|