Skip to content

Add TypeScript types and port Welcome demo #227

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 146 commits into from
Mar 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
5c61d75
chore: rename all .js files to .ts
vixalien Aug 12, 2024
38d7aa4
chore: add README.typescript.md
vixalien Aug 12, 2024
318a353
feat: add tsconfig
vixalien Aug 12, 2024
e1c3acb
chore: add generated types
vixalien Aug 12, 2024
c76eaf0
port: Welcome
vixalien Aug 12, 2024
c776aa0
port: Accessibility
vixalien Aug 12, 2024
810f6c7
port: Account
vixalien Aug 12, 2024
956dce1
port: Action Bar
vixalien Aug 12, 2024
59ca30c
port: Actions
vixalien Aug 12, 2024
e5cec5e
port: Animation
vixalien Aug 12, 2024
be48701
port: Audio
vixalien Aug 12, 2024
c54b13a
port: Avatar
vixalien Aug 12, 2024
e4a2747
port: Banner
vixalien Aug 12, 2024
7b580ed
port: Box
vixalien Aug 12, 2024
5e9c9a9
port: Boxed Lists
vixalien Aug 12, 2024
308e34d
port: Breakpoints
vixalien Aug 12, 2024
348d1fe
port: Button
vixalien Aug 12, 2024
717e2aa
port: Calendar
vixalien Aug 12, 2024
76cc4be
chore: ignore all JavaScript files
vixalien Aug 20, 2024
dd9bea7
port: CSS Gradients
vixalien Aug 20, 2024
dc2e49c
port: Camera
vixalien Aug 20, 2024
aaca02f
port: Carousel
vixalien Aug 20, 2024
ab1c64e
port: Checkboxes
vixalien Aug 20, 2024
e3a07e7
port: Clamp
vixalien Aug 20, 2024
51295d4
port: Color Dialog
vixalien Aug 20, 2024
30c41e4
port: Color Picker
vixalien Aug 20, 2024
36279a3
port: Column View
vixalien Aug 20, 2024
39f418c
port: Context Menu
vixalien Aug 20, 2024
0816d7b
port: Dialog
vixalien Aug 20, 2024
5e8a886
port: Drop Down
vixalien Aug 20, 2024
0905ef7
port: Drop Zone
vixalien Aug 20, 2024
3e2ca7c
port: Email
vixalien Aug 20, 2024
f11d1e7
port: Emoji Chooser
vixalien Aug 20, 2024
f7eee08
port: Event Controllers
vixalien Aug 20, 2024
0bc1090
port: File Monitor
vixalien Aug 20, 2024
41cb181
port: WebSocket Client
vixalien Aug 24, 2024
5d9beb0
port: Web View
vixalien Aug 24, 2024
c3d7aed
port: Wallpaper
vixalien Aug 24, 2024
612bc92
port: View Switcher
vixalien Aug 24, 2024
9d5e870
port: Video
vixalien Aug 24, 2024
1166fa3
port: Toggle Button
vixalien Aug 24, 2024
3490763
port: Toasts
vixalien Aug 24, 2024
be6a17e
port: Text View
vixalien Aug 24, 2024
a1f516d
port: Text Fields
vixalien Aug 24, 2024
88cf48a
port: Text Colors
vixalien Aug 24, 2024
91fb546
port: Tooltip
vixalien Aug 24, 2024
ea1aed6
port: Tab View
vixalien Aug 24, 2024
b49bc9e
port: Switch
vixalien Aug 24, 2024
b8fde6f
port: Styling with CSS
vixalien Aug 24, 2024
5b4103b
port: Stack
vixalien Aug 24, 2024
6a2e8f9
port: Spinner
vixalien Aug 24, 2024
4343f78
port: Spin Button
vixalien Aug 24, 2024
0e8f51b
port: Spell Checker
vixalien Aug 24, 2024
c42c30f
port: Source View
vixalien Aug 24, 2024
74e78a5
port: Snapshot
vixalien Aug 24, 2024
d50c6a7
port: Session Monitor and Inhibit
vixalien Aug 24, 2024
83cb1c5
port: Separator
vixalien Aug 24, 2024
62cb4a5
port: Select Folder
vixalien Aug 24, 2024
09dc652
port: Search
vixalien Aug 24, 2024
7a27dc7
port: Scrolled Window
vixalien Aug 24, 2024
fb21e1a
port: Screenshot
vixalien Aug 24, 2024
48ae252
port: Screencast
vixalien Aug 24, 2024
cadbe00
port: Scale
vixalien Aug 24, 2024
1f32e1e
port: Save File
vixalien Aug 24, 2024
ae64c2b
port: SVG
vixalien Aug 24, 2024
c2f7f86
port: Revealer
vixalien Aug 24, 2024
127f121
port: Radio Buttons
vixalien Aug 24, 2024
dbeb3a7
port: Progress Bar
vixalien Aug 24, 2024
28c7bef
port: Preferences Dialog
vixalien Aug 24, 2024
af5a004
port: Power Profile Monitor
vixalien Aug 24, 2024
5dd3613
port: Picture
vixalien Sep 3, 2024
0980ce8
port: Overlay
vixalien Sep 3, 2024
63052c9
port: Overlay Split View
vixalien Sep 3, 2024
46ac291
port: Open File
vixalien Sep 3, 2024
e691f0e
port: Network Monitor
vixalien Sep 3, 2024
b3fcb00
port: Navigation View
vixalien Sep 3, 2024
37b1477
port: Message Dialogs
vixalien Sep 3, 2024
fb40523
port: Menu
vixalien Sep 3, 2024
f0379a5
port: Menu Button
vixalien Sep 3, 2024
8cea618
port: Map
vixalien Sep 3, 2024
6347381
port: Location
vixalien Sep 3, 2024
c92d3da
port: List View
vixalien Sep 3, 2024
a866c15
port: List Model
vixalien Sep 3, 2024
e30a718
port: Level Bars
vixalien Sep 3, 2024
9734957
port: Launcher
vixalien Sep 3, 2024
e44809c
port: Label
vixalien Sep 3, 2024
49c38ae
port: Image
vixalien Sep 3, 2024
2ff26ee
port: HTTP Server
vixalien Sep 3, 2024
7e9e044
port: HTTP Request
vixalien Sep 3, 2024
6e3a142
port: HTTP Image
vixalien Sep 3, 2024
441aa06
port: Grid
vixalien Sep 3, 2024
cec3b11
port: Grid View
vixalien Sep 3, 2024
3f9fab6
port: Frame
vixalien Sep 3, 2024
72245ef
port: Font Dialog
vixalien Sep 3, 2024
3c98cf6
chore: regenerate types with `@ts-for-gir/[email protected]`
vixalien Sep 3, 2024
946b1df
port: Drawing Area
vixalien Sep 3, 2024
2570ec1
port: Drag and Drop
vixalien Sep 3, 2024
e18e596
port: List View with a Tree
vixalien Oct 31, 2024
8fd56c2
port: List View with Sections
vixalien Oct 31, 2024
79a381f
doc: update typescript instructions
vixalien Oct 31, 2024
7fa2cba
chore: update types
vixalien Oct 31, 2024
20e9d6e
port: Database
vixalien Oct 31, 2024
b38aab7
port: Gamepad
vixalien Oct 31, 2024
5a8c6b0
Use generic get_object
UrtsiSantsi Oct 31, 2024
f870918
Use generic get_object
UrtsiSantsi Oct 31, 2024
e1b164d
Use generic get_object
UrtsiSantsi Oct 31, 2024
f9b0619
Use generic get_object
UrtsiSantsi Oct 31, 2024
bdace52
Use generic get_object
UrtsiSantsi Oct 31, 2024
c12392f
Use generic get_object
UrtsiSantsi Oct 31, 2024
305822f
Use generic get_object
UrtsiSantsi Oct 31, 2024
2268b4c
Use generic get_object
UrtsiSantsi Oct 31, 2024
a5e5549
Use generic get_object
UrtsiSantsi Oct 31, 2024
11579c0
Use generic get_object
UrtsiSantsi Oct 31, 2024
bab55db
Use generic get_object
UrtsiSantsi Oct 31, 2024
f5a5214
Use generic get_object
UrtsiSantsi Oct 31, 2024
90d9b71
Use generic get_object
UrtsiSantsi Oct 31, 2024
f8f1818
Use generic get_object
UrtsiSantsi Oct 31, 2024
dd0fb50
Use generic get_object
UrtsiSantsi Oct 31, 2024
2bf3849
Use generic get_object
UrtsiSantsi Oct 31, 2024
f979327
Use generic get_object
UrtsiSantsi Oct 31, 2024
431e3d6
Use generic get_object
UrtsiSantsi Oct 31, 2024
f090d10
Use generic get_object
UrtsiSantsi Oct 31, 2024
588a46d
Use generic get_object
UrtsiSantsi Oct 31, 2024
61b3845
Use generic get_object
UrtsiSantsi Oct 31, 2024
681fc6d
Use generic get_object
UrtsiSantsi Oct 31, 2024
901f8b1
Use generic get_object
UrtsiSantsi Oct 31, 2024
e1b3b0a
Use generic get_object
UrtsiSantsi Oct 31, 2024
5bd43ce
Use generic get_object
UrtsiSantsi Oct 31, 2024
bea52b8
Use generic get_object
UrtsiSantsi Oct 31, 2024
6882a0c
Use generic get_object
UrtsiSantsi Oct 31, 2024
266f33e
Use generic get_object
UrtsiSantsi Oct 31, 2024
5b1d2ae
Use generic get_object
UrtsiSantsi Oct 31, 2024
59ae29b
Use generic get_object
UrtsiSantsi Oct 31, 2024
e23e347
Use generic get_object
UrtsiSantsi Oct 31, 2024
78e99ec
Use generic get_object
UrtsiSantsi Oct 31, 2024
5c9f45f
Use generic get_object
UrtsiSantsi Oct 31, 2024
c8e798d
Use generic get_object
UrtsiSantsi Oct 31, 2024
c533e28
Use generic get_object
UrtsiSantsi Oct 31, 2024
d493f50
Use generic get_object
UrtsiSantsi Oct 31, 2024
c2d46c5
Use generic get_object
UrtsiSantsi Oct 31, 2024
cbcbac2
Use generic get_object
UrtsiSantsi Oct 31, 2024
7567893
Use generic get_object
UrtsiSantsi Oct 31, 2024
bd68229
Use generic get_object
UrtsiSantsi Oct 31, 2024
e613179
revert moving js to ts
sonnyp Mar 11, 2025
784780c
Welcome: Port to TypeScript
sonnyp Mar 11, 2025
4957f7c
Merge branch 'main' into pre-ts
sonnyp Mar 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ __pycache__
.idea
.vscode

# compiled typescript
out

# extra GIRs from Workbench
workbench-girs

# Project files - sync with Makefile
src/*/settings
src/*/workbench.vala
Expand Down
52 changes: 52 additions & 0 deletions README.typescript.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Demos TypeScript

Here is how you generate TypeScript declaration files for the various platform
GIRs (Gtk4, Adw, GObject, etc..) and other dependencies used by Workbench
(Libportal/Xdp, Jsonrpc, Shumate, Vte, etc..).

Due to current limitations
(https://github.com/workbenchdev/Workbench/issues/980), you cannot directly
generate the types from within Workbench's sandbox automatically.

### 0. Copy the built GIRs from Workbench

First enter the Build Terminal. On VSCode you can easily do this by pressing
`Ctrl+P` then selecting `Flatpak: Enter Build Terminal`.

You can also enter Workbench Terminal using the following command:

```bash
flatpak run --command=bash --filesystem=$(pwd) re.sonny.Workbench.Devel
```

Then you can copy all the GIRs build from Workbench

```bash
mkdir -p workbench-girs
cp /app/share/gir-1.0/* workbench-girs
```

### 1. Enter the flatpak sandbox

```bash
FLATPAK_ENABLE_SDK_EXT=node20,typescript flatpak run --share=network --command=bash --filesystem=$(pwd) org.gnome.Sdk//master

# Enable the node20 and typescript SDK extensions
source /usr/lib/sdk/node20/enable.sh
export PATH=/usr/lib/sdk/typescript/bin:$PATH
```

### 2. Install ts-for-gir (in the flatpak sandbox)

```bash
YARN_GLOBAL_DIR=/tmp/yarn-global
export PATH="$YARN_GLOBAL_DIR/node_modules/.bin:$PATH"

yarn --global-folder $YARN_GLOBAL_DIR global add @ts-for-gir/[email protected]
```

### Generate modules

```bash
ts-for-gir generate -g workbench-girs/ -g /usr/share/gir-1.0/ -o workbench-types/ --ignoreVersionConflicts
```
20 changes: 20 additions & 0 deletions ambient/workbench.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/// <reference path="../workbench-types/adw-1.d.ts" />
/// <reference path="../workbench-types/gtk-4.0.d.ts" />
/// <reference path="../workbench-types/gobject-2.0.d.ts" />

import Gtk from "gi://Gtk?version=4.0";
import Adw from "gi://Adw";
import GObject from "gi://GObject";

declare global {
// global workbench object
declare const workbench: {
window: Adw.ApplicationWindow;
application: Adw.Application;
builder: Gtk.Builder;
template: string;
resolve(path: string): string;
preview(object: Gtk.Widget): void;
build(params: Record<string, Function | GObject.Object>): void;
};
}
30 changes: 30 additions & 0 deletions src/Welcome/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import Adw from "gi://Adw";
import Gio from "gi://Gio";
import Gtk from "gi://Gtk?version=4.0";

Gio._promisify(Adw.AlertDialog.prototype, "choose", "choose_finish");

const box = workbench.builder.get_object<Gtk.Box>("subtitle");

const button = new Gtk.Button({
label: "Press me",
margin_top: 6,
css_classes: ["suggested-action"],
});
button.connect("clicked", () => {
greet().catch(console.error);
});
box.append(button);

console.log("Welcome to Workbench!");

async function greet() {
const dialog = new Adw.AlertDialog({
body: "Hello World!",
});

dialog.add_response("ok", "OK");

const response = await dialog.choose(workbench.window, null);
console.log(response);
}
15 changes: 15 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"compilerOptions": {
"module": "ES2022",
"moduleResolution": "Bundler",
"target": "ES2022",
"outDir": "out",
"skipLibCheck": true,
"lib": ["ES2022"]
},
"include": [
"src/**/*.ts",
"./workbench-types/index.d.ts",
"./ambient/workbench.d.ts",
]
}
Loading
Loading