Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
c206072
chore: sanitize helper
triniwiz May 12, 2026
6a1c7e3
feat(webpack5): support windows
triniwiz May 12, 2026
578b640
chore(core): windows platform initial support
triniwiz May 12, 2026
eb05462
feat(windows): color, timer & text-core
triniwiz May 13, 2026
bf6aa23
feat(windows): application
triniwiz May 13, 2026
5d2719e
feat(windows): application-settings
triniwiz May 13, 2026
a9d0898
feat(windows): connectivity
triniwiz May 13, 2026
96b3f33
feat: windows assets
triniwiz May 18, 2026
3b5d802
fix(webpack): windows global
triniwiz May 18, 2026
b52c36f
feat(vite): windows support
triniwiz May 18, 2026
5ff02e4
feat(types-minimal): windows
triniwiz May 18, 2026
03d56f1
chore: windows core updates
triniwiz May 18, 2026
a7f6090
chore: polish windows support
triniwiz May 25, 2026
dc95111
chore(windows): polish
triniwiz May 26, 2026
8a87e28
chore: updates
triniwiz May 27, 2026
b23b481
chore(windows): updates
triniwiz May 28, 2026
96f2d72
chore(windows): polish
triniwiz Jun 10, 2026
3342802
chore: clean up
triniwiz Jun 10, 2026
9554dfc
chore(windows): polish
triniwiz Jun 12, 2026
66e3246
chore: polish
triniwiz Jun 13, 2026
d3e9ebf
chore(windows): polish
triniwiz Jun 17, 2026
ba62845
chore(types-minimal): missing type arrayBufferFromBuffer
triniwiz Jun 20, 2026
2bd61ea
fix(windows): density
triniwiz Jun 26, 2026
0900f0c
fix(windows): cache density
triniwiz Jun 26, 2026
33370c6
fix(windows): flexbox stretch
triniwiz Jul 28, 2026
d0a186b
chore(windows): missing config
triniwiz Aug 5, 2026
f1d5e33
Merge remote-tracking branch 'origin/main' into feat/windows
triniwiz Sep 23, 2026
ff7ebbd
feat(vite): windows platform support and HMR
triniwiz Sep 24, 2026
59654a8
fix(windows): resetRootView for vite HMR, comment cleanup
triniwiz Sep 24, 2026
c93088c
fix(windows): gesture handlers that detach, and no mouse-move traffic…
triniwiz Sep 26, 2026
8cbcbfd
perf(windows): find panel children in one call; fix view reuse and ba…
triniwiz Sep 26, 2026
d44b323
fix(core): css var() fallbacks, initial, and order-independent custom…
triniwiz Sep 27, 2026
7822f15
Merge remote-tracking branch 'origin/main' into feat/windows
triniwiz Sep 27, 2026
ef95ff8
fix(vite): windows path handling for /@fs/ urls and node_modules checks
triniwiz Sep 27, 2026
59f2ab5
fix(core): unset css property when its value fails to apply
triniwiz Sep 27, 2026
bb80ba2
fix(windows): report native view bounds and raise layoutChanged
triniwiz Sep 28, 2026
54125e1
fix(windows): register NativeScript.Widgets classes under their own i…
triniwiz Sep 28, 2026
c97e455
Merge remote-tracking branch 'origin/main' into feat/windows
triniwiz Sep 30, 2026
01bbd97
fix(vite): windows /@fs ids for workspace-anchored specs
triniwiz Sep 30, 2026
ebe8d24
Merge branch 'main' into feat/windows
triniwiz Sep 30, 2026
58d4d3e
Merge branch 'main' into feat/windows
triniwiz Oct 5, 2026
b90cfc0
fix(windows): inset the ActionBar title and back button from the bar …
triniwiz Oct 9, 2026
29716fc
fix(windows): take the ActionBar spacing from WinUI's TitleBar template
triniwiz Oct 9, 2026
3fa38d2
fix(windows): use WinUI's back button for the ActionBar unless a Navi…
triniwiz Oct 9, 2026
783eb03
Merge branch 'main' into feat/windows
triniwiz Oct 13, 2026
6f89f99
fix(windows): the title bar follows the app's light or dark appearance
triniwiz Oct 13, 2026
211fb3e
feat: export isWindows from @nativescript/core
triniwiz Oct 13, 2026
5823b14
fix(windows): views with gestures take the pointer anywhere on their box
triniwiz Oct 13, 2026
545f99a
fix(windows): touch move only fires while the pointer is in contact
triniwiz Oct 14, 2026
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
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ vite.config.*.timestamp*
vitest.config.*.timestamp*
.cursor/rules/nx-rules.mdc
.github/instructions/nx.instructions.md
/packages/ui-mobile-base/windows/widgets-cpp/NativeSc.B6D1F2A0
/packages/ui-mobile-base/windows/widgets-cpp/obj
/packages/ui-mobile-base/windows/widgets-cpp/x64/Debug
/packages/ui-mobile-base/windows/widgets-cpp/x64/Release
/packages/ui-mobile-base/windows/widgets-cpp/ARM64

# ============================================
# AI agents: local / personal / ephemeral state
Expand Down
4 changes: 2 additions & 2 deletions apps/automated/src/ui/styling/style-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1996,7 +1996,7 @@ export function test_css_variable_fallback() {
},
{
className: 'undefined-css-variable-with-multiple-fallbacks',
expectedColor: limeColor,
expectedColor: undefined,
},
{
className: 'undefined-css-variable-with-missing-fallback-value',
Expand Down Expand Up @@ -2037,7 +2037,7 @@ export function test_css_variable_fallback() {

.undefined-css-variable-with-multiple-fallbacks {
--my-fallback-var: lime;
color: var(--undefined-var, var(--my-fallback-var), yellow); /* resolved as color: lime; */
color: var(--undefined-var, var(--my-fallback-var), yellow); /* resolved as color: unset; */
}

.undefined-css-variable-with-missing-fallback-value {
Expand Down
Binary file added apps/toolbox/fonts/Twemoji.Mozilla.ttf
Binary file not shown.
1 change: 1 addition & 0 deletions apps/toolbox/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"@nativescript/visionos": "~9.0.0",
"@nativescript/vite": "file:../../dist/packages/vite",
"@nativescript/webpack": "file:../../dist/packages/webpack5",
"@nativescript/windows": "0.1.0-beta.1",
"typescript": "~5.9.3"
}
}
59 changes: 59 additions & 0 deletions apps/toolbox/src/_app-platform.windows.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/* Import theme rules for Windows and include additional core rules so Windows gets the same
look as other platforms without modifying the NativeScript runtime. */
@import '../../../node_modules/nativescript-theme-core/css/core.light.windows.css';

/* Only include the Windows-specific theme file here. Importing iOS/Android theme
files in the Windows platform CSS can introduce conflicting rules and
unexpected colors; platform-specific CSS should be kept separate. */

/* Fallbacks / platform-specific tweaks for Windows host environments */

/* Ensure pages default to white background like the theme */
.page, Page {
background-color: #fff;
}

/* Visibility helper used across the theme */
.invisible {
visibility: collapse;
}

/* h-full is referenced in markup but was never defined; map it to full height so a
ScrollView inside an auto-sized StackLayout gets a bounded viewport and can scroll. */
.h-full {
height: 100%;
}

/* Simple shadow/gradient fallbacks: some Windows hosts may not fully support composition */
.shadow {
box-shadow: 0 2 6 rgba(0,0,0,0.2);
border-radius: 4;
}
.gradient {
background: linear-gradient(to bottom, #f12711, #f5af19);
}

/* Make list items readable on Windows hosts */
.list-group .list-group-item {
padding: 16;
color: #212121;
}

/* TabView / SegmentedBar defaults */
.tab-view {
selected-color: #30bcff;
tabs-background-color: #fff;
}
.tab-view .tab-view-item {
background-color: #fff;
}

/* Ensure ScrollView / ListView backgrounds don't hide content */
ScrollView, ListView, Repeater {
background-color: transparent;
}

/* Make sure controls have a sensible default enabled/disabled appearance */
Button[isEnabled=false], TextField[isEnabled=false], TextView[isEnabled=false] {
opacity: 0.6;
}
6 changes: 3 additions & 3 deletions apps/toolbox/src/pages/a11y.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export class AccessibilityModel extends Observable {
accessibilityLiveRegions = AccessibilityLiveRegion;
accessibilityRole = AccessibilityRole;
accessibilityState = AccessibilityState;
largeImageSrc = 'https://i.picsum.photos/id/669/5000/5000.jpg?hmac=VlpchW0ODhflKm0SKOYQrc8qysLWbqKmDS1MGT9apAc';
largeImageSrc = 'https://picsum.photos/seed/VlpchW0ODhflKm0SKOYQrc8qysLWbqKmDS1MGT9apAc/5000/5000';

constructor() {
super();
Expand All @@ -31,8 +31,8 @@ export class AccessibilityModel extends Observable {

// prettier-ignore
this.notifyPropertyChange('largeImageSrc', checked ?
'https://i.picsum.photos/id/669/5000/5000.jpg?hmac=VlpchW0ODhflKm0SKOYQrc8qysLWbqKmDS1MGT9apAc' :
'https://i.picsum.photos/id/684/5000/5000.jpg?hmac=loiXO_OQ-y86XY_hc7p3qJdY39fSd9CuDM0iA_--P4Q');
'https://picsum.photos/seed/VlpchW0ODhflKm0SKOYQrc8qysLWbqKmDS1MGT9apAc/5000/5000' :
'https://picsum.photos/seed/loiXO_OQ-y86XY_hc7p3qJdY39fSd9CuDM0iA_--P4Q/5000/5000');
}

openModal() {
Expand Down
2 changes: 1 addition & 1 deletion apps/toolbox/src/pages/box-shadow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,4 +178,4 @@ export class BoxShadowModel extends Observable {
});
}
}
}
}
3 changes: 1 addition & 2 deletions apps/toolbox/src/pages/box-shadow.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo" class="page">
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo" navigatedTo="navigatedTo" class="page">
<Page.actionBar>
<ActionBar title="Box Shadow" icon="" class="action-bar">
</ActionBar>
</Page.actionBar>

<GridLayout rows="*, auto, *" class="box-shadow-demo">
<StackLayout backgroundColor="#ededed" row="0" id="boxShadowDemo">
<!-- layouts -->
Expand Down
2 changes: 1 addition & 1 deletion apps/toolbox/src/pages/css-playground.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export class CssPlaygroundModel extends Observable {

applyCSS(args) {
this.resetCSS();
addTaggedAdditionalCSS(`#play { ${this.currentCSS}`, CSSTag);
addTaggedAdditionalCSS(`#play { ${this.currentCSS} }`, CSSTag);
playLabel._onCssStateChange();
playLabel.requestLayout();
}
Expand Down
2 changes: 1 addition & 1 deletion apps/toolbox/src/pages/list-page-model-sticky.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1430,4 +1430,4 @@ export class ListPageModelSticky extends Observable {
.filter((group) => group.items.length > 0)
);
}
}
}
2 changes: 1 addition & 1 deletion apps/toolbox/src/pages/list-page-sticky.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<ListView.itemTemplates>
<template key="main">
<GridLayout columns="auto,auto,*" padding="14 12 14 12" margin="2 6 2 6" borderRadius="10" backgroundColor="#fff" boxShadow="0px 1px 2px rgba(0,0,0,0.2)">
<Label color="black" text="{{ flag }}" marginLeft="4"></Label>
<Label color="black" text="{{ flag }}" marginLeft="4" fontFamily="ms-appx:///app/fonts/Twemoji.Mozilla.ttf#Twemoji Mozilla"></Label>
<Label col="1" text="{{ name }}" marginLeft="6" color="black"></Label>
<Label col="2" text="{{ code }}" marginLeft="4" color="#999"></Label>
</GridLayout>
Expand Down
6 changes: 6 additions & 0 deletions apps/toolbox/src/pages/list-page.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
<Label text="{{ iconText }}" class="icon-label"/>
</StackLayout>
</android>
<windows>
<Label text="{{ iconText }}" class="icon-around icon-label"/>
</windows>
<StackLayout class="va-middle">
<Label text="{{ name }}" class="component-label"></Label>
</StackLayout>
Expand All @@ -47,6 +50,9 @@
<Label text="{{ iconText }}" class="icon-label"/>
</StackLayout>
</android>
<windows>
<Label text="{{ iconText }}" class="icon-around icon-label"/>
</windows>
<StackLayout class="va-middle">
<Label text="{{ name }}" class="component-label"></Label>
</StackLayout>
Expand Down
4 changes: 3 additions & 1 deletion apps/toolbox/src/split-view/split-view-primary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ let page: Page;

export function navigatingTo(args: EventData) {
page = <Page>args.object;
page.bindingContext = new SplitViewPrimaryModel();
const model = new SplitViewPrimaryModel();
page.bindingContext = model;
try { console.log('[Primary] navigatingTo, items.length=', model.items?.length); } catch (_e) {}
}

export class SplitViewPrimaryModel extends Observable {
Expand Down
3 changes: 2 additions & 1 deletion apps/toolbox/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
"paths": {
"~/*": ["src/*"]
}
}
},
"exclude": ["node_modules", "tmp", "platforms", "__tests__", "vite.config.ts"]
}
6 changes: 6 additions & 0 deletions apps/toolbox/webpack.config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const webpack = require("@nativescript/webpack");
const path = require("path");

module.exports = (env) => {
webpack.init(env);
Expand All @@ -11,6 +12,11 @@ module.exports = (env) => {

return args
})

// Stub Windows-unsupported packages
if (env.windows) {
config.resolve.alias.set('@nativescript/imagepicker', path.resolve(__dirname, 'src/stubs/imagepicker.js'));
}
})

return webpack.resolveConfig();
Expand Down
1 change: 1 addition & 0 deletions apps/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"@nativescript/ios": "~9.0.0",
"@nativescript/visionos": "~9.0.0",
"@nativescript/webpack": "file:../../dist/packages/webpack5",
"@nativescript/windows": "0.1.0-beta.1",
"typescript": "~5.9.3"
},
"gitHead": "8ab7726d1ee9991706069c1359c552e67ee0d1a4",
Expand Down
64 changes: 64 additions & 0 deletions apps/ui/src/animation/effect-summary-details-page.windows.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { getViewById, View, Page, Animation, Screen, TextView } from '@nativescript/core';

let toggle = false;

export function pageLoaded(args) {
const page = args.object;
const screenHeight = Screen.mainScreen.heightDIPs;
const screenYCenter = screenHeight / 2;
page.bindingContext = {
screenHeight,
screenYCenter,
detailsHeight: 96,
summary: 'Space! 🌌',
ipsum: `Houston, Tranquillity Base here. The Eagle has landed.

For those who have seen the Earth from space, and for the hundreds and perhaps thousands more who will, the experience most certainly changes your perspective. The things that we share in our world are far more valuable than those which divide us.

As we got further and further away, it [the Earth] diminished in size. Finally it shrank to the size of a marble, the most beautiful you can imagine. That beautiful, warm, living object looked so fragile, so delicate, that if you touched it with a finger it would crumble and fall apart. Seeing this has to change a man.

What was most significant about the lunar voyage was not that man set foot on the Moon but that they set eye on the earth.

Spaceflights cannot be stopped. This is not the work of any one man or even a group of men. It is a historical process which mankind is carrying out in accordance with the natural laws of human development.

NASA is not about the 'Adventure of Human Space Exploration'…We won't be doing it just to get out there in space – we'll be doing it because the things we learn out there will be making life better for a lot of people who won't be able to go.

Science has not yet mastered prophecy. We predict too much for the next year and yet far too little for the next 10.

Science cuts two ways, of course; its products can be used for both good and evil. But there's no turning back from science. The early warnings about technological dangers also come from science.

Here men from the planet Earth first set foot upon the Moon. July 1969 AD. We came in peace for all mankind.

When I orbited the Earth in a spaceship, I saw for the first time how beautiful our planet is. Mankind, let us preserve and increase this beauty, and not destroy it!

http://spaceipsum.com`,
};
}

export function theFinalFrontier(args) {
const clicked = args.object as View;
const page: Page = clicked.page;
const details = getViewById(page, 'details') as TextView;
const ctx = page.bindingContext;
const detailHeaderHeight: number = ctx.detailsHeight;
const textViewHeight: number = ctx.screenHeight - detailHeaderHeight;
const transitions = [
{
target: clicked,
height: toggle ? '100%' : detailHeaderHeight,
duration: 200,
curve: 'ease',
},
{
target: details,
opacity: toggle ? 0 : 1,
height: textViewHeight,
translate: { x: 0, y: toggle ? 50 : 0 },
duration: 200,
curve: 'easeIn',
},
];
const animationSet = new Animation(transitions, false);
animationSet.play();
toggle = !toggle;
}
3 changes: 3 additions & 0 deletions packages/core/animation-frame/animation-native.windows.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function getTimeInFrameBase(): number {
return Date.now();
}
Loading
Loading