@gtkx/animated 1.3.0 → 1.5.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.
package/README.md CHANGED
@@ -5,9 +5,9 @@
5
5
  <h1 align="center">GTKX</h1>
6
6
 
7
7
  <p align="center">
8
- The React framework for Linux.<br />
9
- Write native Linux applications with React and TypeScript.
10
- Built on the GNOME stack and standard web tooling.
8
+ The React framework for Linux, built on GTK.<br />
9
+ Write native GTK4 desktop applications with React and TypeScript.
10
+ Real GTK widgets, the GNOME stack, and standard web tooling.
11
11
  </p>
12
12
 
13
13
  <p align="center">
@@ -98,7 +98,7 @@ GTK4 is mature, and GtkBuilder XML can lay out a static interface, but nothing r
98
98
  - a React reconciler that exposes every GObject as a JSX element,
99
99
  - a CLI for scaffolding, development, and production builds,
100
100
  - a dev server with Fast Refresh that patches your running UI in place,
101
- - CSS-in-JS styling, React Spring animations, and high-level list, grid, and dialog components,
101
+ - CSS-in-JS styling, React Hook Form-powered Adwaita controls, gettext-backed react-i18next localization, React Spring animations, React Navigation stack, tab, drawer, and split view navigators, and high-level list, grid, and dialog components,
102
102
  - a Testing Library-style API for querying and driving your widgets in tests,
103
103
  - and a Model Context Protocol (MCP) server that exposes your live app to AI agents.
104
104
 
@@ -158,6 +158,7 @@ Explore the [example apps](https://github.com/gtkx-org/gtkx/tree/main/examples):
158
158
  - [`gtk-demo`](https://github.com/gtkx-org/gtkx/tree/main/examples/gtk-demo): a React port of the official GTK4 widget showcase, covering lists, dialogs, gestures, CSS, and OpenGL.
159
159
  - [`browser`](https://github.com/gtkx-org/gtkx/tree/main/examples/browser): a WebKitWebView-based web browser.
160
160
  - [`animations`](https://github.com/gtkx-org/gtkx/tree/main/examples/animations): a tour of `@gtkx/animated`, React Spring animations driven by the GTK frame clock.
161
+ - [`navigation`](https://github.com/gtkx-org/gtkx/tree/main/examples/navigation): a tour of `@gtkx/navigation`, React Navigation's stack, tab, and drawer navigators rendered with libadwaita.
161
162
  - [`tutorial`](https://github.com/gtkx-org/gtkx/tree/main/examples/tutorial): the Tasks app the documentation builds.
162
163
 
163
164
  ## Status
@@ -1 +1 @@
1
- {"version":3,"file":"apply-animated-values.d.ts","sourceRoot":"","sources":["../src/apply-animated-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAuGlD,QAAA,MAAM,sBAAsB,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,OAUlE,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"apply-animated-values.d.ts","sourceRoot":"","sources":["../src/apply-animated-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAwGlD,QAAA,MAAM,sBAAsB,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,OAUlE,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import * as Gtk from "@gtkx/gi/gtk";
2
2
  import { applyStyle, applyWrite } from "@gtkx/react/internal";
3
3
  import { coerceObjectProperty } from "@gtkx/runtime";
4
+ const LABEL_PROP = "label";
4
5
  const setterCache = new WeakMap();
5
6
  const hasSetterInChain = (prototype, name) => {
6
7
  for (let current = prototype; current !== null; current = Object.getPrototypeOf(current)) {
@@ -44,7 +45,7 @@ const didApplyText = (instance, value) => {
44
45
  if (text === null || !(instance instanceof Gtk.Label)) {
45
46
  return false;
46
47
  }
47
- applyWrite(() => {
48
+ applyWrite(LABEL_PROP, () => {
48
49
  instance.setLabel(text);
49
50
  });
50
51
  return true;
@@ -66,7 +67,7 @@ const didApplyValue = (instance, name, value) => {
66
67
  if (!hasSetter(instance, name)) {
67
68
  return false;
68
69
  }
69
- applyWrite(() => {
70
+ applyWrite(name, () => {
70
71
  Reflect.set(instance, name, coerceObjectProperty(instance, name, value));
71
72
  });
72
73
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"apply-animated-values.js","sourceRoot":"","sources":["../src/apply-animated-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Lookup } from \"@react-spring/types\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { applyStyle, applyWrite } from \"@gtkx/react/internal\";\nimport { coerceObjectProperty } from \"@gtkx/runtime\";\n\nconst setterCache: WeakMap<object, Map<string, boolean>> = new WeakMap();\n\nconst hasSetterInChain = (prototype: object | null, name: string): boolean => {\n for (let current = prototype; current !== null; current = Object.getPrototypeOf(current) as object | null) {\n const descriptor = Object.getOwnPropertyDescriptor(current, name);\n\n if (descriptor !== undefined) {\n return descriptor.set !== undefined;\n }\n }\n\n return false;\n};\n\nconst hasSetter = (instance: object, name: string): boolean => {\n const prototype = Object.getPrototypeOf(instance) as object | null;\n\n if (prototype === null) {\n return false;\n }\n\n let known = setterCache.get(prototype);\n\n if (known === undefined) {\n known = new Map();\n setterCache.set(prototype, known);\n }\n\n let isWritable = known.get(name);\n\n if (isWritable === undefined) {\n isWritable = hasSetterInChain(prototype, name);\n known.set(name, isWritable);\n }\n\n return isWritable;\n};\n\nconst isText = (value: unknown): value is string | number => typeof value === \"string\" || typeof value === \"number\";\n\nconst getText = (value: unknown): string | null => {\n if (isText(value)) {\n return String(value);\n }\n\n if (!Array.isArray(value)) {\n return null;\n }\n\n const texts = value.map((item) => getText(item));\n\n return texts.every((item) => item !== null) ? texts.join(\"\") : null;\n};\n\nconst didApplyText = (instance: object, value: unknown): boolean => {\n const text = getText(value);\n\n if (text === null || !(instance instanceof Gtk.Label)) {\n return false;\n }\n\n applyWrite(() => {\n instance.setLabel(text);\n });\n\n return true;\n};\n\nconst didApplyStyle = (instance: object, value: unknown): boolean => {\n if (!(instance instanceof Gtk.Widget)) {\n return false;\n }\n\n applyStyle(instance, value);\n\n return true;\n};\n\nconst didApplyValue = (instance: object, name: string, value: unknown): boolean => {\n if (name === \"children\") {\n return didApplyText(instance, value);\n }\n\n if (name === \"style\") {\n return didApplyStyle(instance, value);\n }\n\n if (!hasSetter(instance, name)) {\n return false;\n }\n\n applyWrite(() => {\n Reflect.set(instance, name, coerceObjectProperty(instance, name, value));\n });\n\n return true;\n};\n\nconst didApplyAnimatedValues = (instance: object, values: Lookup): boolean => {\n let isApplied = true;\n\n for (const name in values) {\n if (!didApplyValue(instance, name, values[name])) {\n isApplied = false;\n }\n }\n\n return isApplied;\n};\n\nexport { didApplyAnimatedValues };\n"]}
1
+ {"version":3,"file":"apply-animated-values.js","sourceRoot":"","sources":["../src/apply-animated-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Lookup } from \"@react-spring/types\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { applyStyle, applyWrite } from \"@gtkx/react/internal\";\nimport { coerceObjectProperty } from \"@gtkx/runtime\";\n\nconst LABEL_PROP = \"label\";\nconst setterCache: WeakMap<object, Map<string, boolean>> = new WeakMap();\n\nconst hasSetterInChain = (prototype: object | null, name: string): boolean => {\n for (let current = prototype; current !== null; current = Object.getPrototypeOf(current) as object | null) {\n const descriptor = Object.getOwnPropertyDescriptor(current, name);\n\n if (descriptor !== undefined) {\n return descriptor.set !== undefined;\n }\n }\n\n return false;\n};\n\nconst hasSetter = (instance: object, name: string): boolean => {\n const prototype = Object.getPrototypeOf(instance) as object | null;\n\n if (prototype === null) {\n return false;\n }\n\n let known = setterCache.get(prototype);\n\n if (known === undefined) {\n known = new Map();\n setterCache.set(prototype, known);\n }\n\n let isWritable = known.get(name);\n\n if (isWritable === undefined) {\n isWritable = hasSetterInChain(prototype, name);\n known.set(name, isWritable);\n }\n\n return isWritable;\n};\n\nconst isText = (value: unknown): value is string | number => typeof value === \"string\" || typeof value === \"number\";\n\nconst getText = (value: unknown): string | null => {\n if (isText(value)) {\n return String(value);\n }\n\n if (!Array.isArray(value)) {\n return null;\n }\n\n const texts = value.map((item) => getText(item));\n\n return texts.every((item) => item !== null) ? texts.join(\"\") : null;\n};\n\nconst didApplyText = (instance: object, value: unknown): boolean => {\n const text = getText(value);\n\n if (text === null || !(instance instanceof Gtk.Label)) {\n return false;\n }\n\n applyWrite(LABEL_PROP, () => {\n instance.setLabel(text);\n });\n\n return true;\n};\n\nconst didApplyStyle = (instance: object, value: unknown): boolean => {\n if (!(instance instanceof Gtk.Widget)) {\n return false;\n }\n\n applyStyle(instance, value);\n\n return true;\n};\n\nconst didApplyValue = (instance: object, name: string, value: unknown): boolean => {\n if (name === \"children\") {\n return didApplyText(instance, value);\n }\n\n if (name === \"style\") {\n return didApplyStyle(instance, value);\n }\n\n if (!hasSetter(instance, name)) {\n return false;\n }\n\n applyWrite(name, () => {\n Reflect.set(instance, name, coerceObjectProperty(instance, name, value));\n });\n\n return true;\n};\n\nconst didApplyAnimatedValues = (instance: object, values: Lookup): boolean => {\n let isApplied = true;\n\n for (const name in values) {\n if (!didApplyValue(instance, name, values[name])) {\n isApplied = false;\n }\n }\n\n return isApplied;\n};\n\nexport { didApplyAnimatedValues };\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gtkx/animated",
3
- "version": "1.3.0",
4
- "description": "React Spring animations for GTKX: animated widget components driven by the GTK frame clock",
3
+ "version": "1.5.0",
4
+ "description": "Spring animations for GTK widgets, driven by the GTK4 frame clock.",
5
5
  "keywords": [
6
6
  "gtkx",
7
7
  "gtk",
@@ -59,17 +59,17 @@
59
59
  "@react-spring/core": "^10.1.2",
60
60
  "@react-spring/shared": "^10.1.2",
61
61
  "@react-spring/types": "^10.1.2",
62
- "@gtkx/react": "1.3.0",
63
- "@gtkx/runtime": "1.3.0"
62
+ "@gtkx/runtime": "1.5.0",
63
+ "@gtkx/react": "1.5.0"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "react": "^19.2"
67
67
  },
68
68
  "devDependencies": {
69
69
  "vitest": "^4.1.11",
70
- "@gtkx/config": "1.3.0",
71
- "@gtkx/testing": "1.3.0",
72
- "@gtkx/vitest": "1.3.0"
70
+ "@gtkx/config": "1.5.0",
71
+ "@gtkx/testing": "1.5.0",
72
+ "@gtkx/vitest": "1.5.0"
73
73
  },
74
74
  "scripts": {
75
75
  "release": "tsx ../../scripts/release-package.ts"
@@ -3,6 +3,7 @@ import * as Gtk from "@gtkx/gi/gtk";
3
3
  import { applyStyle, applyWrite } from "@gtkx/react/internal";
4
4
  import { coerceObjectProperty } from "@gtkx/runtime";
5
5
 
6
+ const LABEL_PROP = "label";
6
7
  const setterCache: WeakMap<object, Map<string, boolean>> = new WeakMap();
7
8
 
8
9
  const hasSetterInChain = (prototype: object | null, name: string): boolean => {
@@ -64,7 +65,7 @@ const didApplyText = (instance: object, value: unknown): boolean => {
64
65
  return false;
65
66
  }
66
67
 
67
- applyWrite(() => {
68
+ applyWrite(LABEL_PROP, () => {
68
69
  instance.setLabel(text);
69
70
  });
70
71
 
@@ -94,7 +95,7 @@ const didApplyValue = (instance: object, name: string, value: unknown): boolean
94
95
  return false;
95
96
  }
96
97
 
97
- applyWrite(() => {
98
+ applyWrite(name, () => {
98
99
  Reflect.set(instance, name, coerceObjectProperty(instance, name, value));
99
100
  });
100
101