Skip to content

Commit 67d5de4

Browse files
committed
Merge branch 'main' into add-autofocus-support and resolve conflicts
2 parents 18c611d + d8fb668 commit 67d5de4

File tree

944 files changed

+54617
-44380
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

944 files changed

+54617
-44380
lines changed

.github/docker/Dockerfile.docs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,26 @@ WORKDIR /app
66
EXPOSE 5010
77

88
# Build frontend (Ivy embeds frontend/dist)
9-
FROM node:20-alpine AS frontend
9+
FROM node:24-bookworm-slim AS frontend
1010
WORKDIR /src
11-
COPY ["src/frontend/package.json", "src/frontend/package-lock.json", "src/frontend/"]
12-
RUN cd src/frontend && npm ci
11+
COPY ["src/frontend/package.json", "src/frontend/pnpm-lock.yaml", "src/frontend/"]
12+
RUN apt-get update && apt-get install -y curl bash && rm -rf /var/lib/apt/lists/*
13+
RUN curl -fsSL https://vite.plus | bash
14+
ENV PATH="/root/.vite-plus/bin:${PATH}"
15+
RUN cd src/frontend && vp install
1316
COPY ["src/frontend/", "src/frontend/"]
14-
RUN cd src/frontend && npm run build
17+
RUN cd src/frontend && vp build
1518

1619
# Build .NET from source (no IVY_PACKAGE_VERSION = use ProjectReference, your changes apply)
1720
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
1821
ARG BUILD_CONFIGURATION=Release
1922
WORKDIR /src
23+
RUN apt-get update && apt-get install -y curl bash build-essential && rm -rf /var/lib/apt/lists/*
24+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y
25+
ENV PATH="/root/.cargo/bin:${PATH}"
26+
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && apt-get install -y nodejs
27+
RUN curl -fsSL https://vite.plus | bash
28+
ENV PATH="/root/.vite-plus/bin:${PATH}"
2029
COPY . .
2130
COPY --from=frontend /src/src/frontend/dist /src/src/frontend/dist
2231
RUN dotnet restore "src/Ivy.Docs/Ivy.Docs.csproj"

.github/docker/Dockerfile.samples

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,26 @@ WORKDIR /app
66
EXPOSE 5010
77

88
# Build frontend (Ivy embeds frontend/dist)
9-
FROM node:20-alpine AS frontend
9+
FROM node:24-bookworm-slim AS frontend
1010
WORKDIR /src
11-
COPY ["src/frontend/package.json", "src/frontend/package-lock.json", "src/frontend/"]
12-
RUN cd src/frontend && npm ci
11+
COPY ["src/frontend/package.json", "src/frontend/pnpm-lock.yaml", "src/frontend/"]
12+
RUN apt-get update && apt-get install -y curl bash && rm -rf /var/lib/apt/lists/*
13+
RUN curl -fsSL https://vite.plus | bash
14+
ENV PATH="/root/.vite-plus/bin:${PATH}"
15+
RUN cd src/frontend && vp install
1316
COPY ["src/frontend/", "src/frontend/"]
14-
RUN cd src/frontend && npm run build
17+
RUN cd src/frontend && vp build
1518

1619
# Build .NET from source (no IVY_PACKAGE_VERSION = use ProjectReference, your changes apply)
1720
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
1821
ARG BUILD_CONFIGURATION=Release
1922
WORKDIR /src
23+
RUN apt-get update && apt-get install -y curl bash build-essential && rm -rf /var/lib/apt/lists/*
24+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y
25+
ENV PATH="/root/.cargo/bin:${PATH}"
26+
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && apt-get install -y nodejs
27+
RUN curl -fsSL https://vite.plus | bash
28+
ENV PATH="/root/.vite-plus/bin:${PATH}"
2029
COPY . .
2130
COPY --from=frontend /src/src/frontend/dist /src/src/frontend/dist
2231
RUN dotnet restore "src/Ivy.Samples/Ivy.Samples.csproj"

.github/workflows/backend-checks-linux.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ on:
88
branches: [main, master]
99
jobs:
1010
backend-checks:
11-
runs-on: ubuntu-latest
11+
strategy:
12+
matrix:
13+
os: [ubuntu-latest, ubuntu-24.04-arm64]
14+
runs-on: ${{ matrix.os }}
1215
defaults:
1316
run:
1417
working-directory: src
@@ -19,6 +22,9 @@ jobs:
1922
- name: Install required packages
2023
run: sudo apt-get update && sudo apt-get install -y attr
2124

25+
# Setup Node.js (needed for integrated frontend build in dotnet build)
26+
- uses: voidzero-dev/setup-vp@v1
27+
2228
# Setup .NET
2329
- name: Setup .NET
2430
uses: actions/setup-dotnet@v4

.github/workflows/backend-checks-windows.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ jobs:
1515
steps:
1616
- uses: actions/checkout@v4
1717

18+
# Setup Node.js (needed for integrated frontend build in dotnet build)
19+
- uses: voidzero-dev/setup-vp@v1
20+
1821
# Setup .NET
1922
- name: Setup .NET
2023
uses: actions/setup-dotnet@v4

.github/workflows/e2e-docs-tests.yml

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,10 @@ jobs:
1313
steps:
1414
- uses: actions/checkout@v4
1515

16-
# Setup Node.js and frontend first
17-
- uses: actions/setup-node@v4
18-
with:
19-
node-version: lts/*
20-
21-
- name: Install frontend dependencies
22-
working-directory: ./src/frontend
23-
run: npm ci
24-
25-
- name: Build frontend
26-
working-directory: ./src/frontend
27-
run: npm run build
16+
# Setup Node.js (needed for integrated frontend build in dotnet build)
17+
- uses: voidzero-dev/setup-vp@v1
2818

29-
# Setup .NET and build backend (now with frontend assets available)
19+
# Setup .NET and build backend (triggers frontend build automatically)
3020
- name: Setup .NET
3121
uses: actions/setup-dotnet@v4
3222
with:

.github/workflows/e2e-samples-tests.yml

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,10 @@ jobs:
1313
steps:
1414
- uses: actions/checkout@v4
1515

16-
# Setup Node.js and frontend first
17-
- uses: actions/setup-node@v4
18-
with:
19-
node-version: lts/*
20-
21-
- name: Install frontend dependencies
22-
working-directory: ./src/frontend
23-
run: npm ci
24-
25-
- name: Build frontend
26-
working-directory: ./src/frontend
27-
run: npm run build
16+
# Setup Node.js (needed for integrated frontend build in dotnet build)
17+
- uses: voidzero-dev/setup-vp@v1
2818

29-
# Setup .NET and build backend (now with frontend assets available)
19+
# Setup .NET and build backend (triggers frontend build automatically)
3020
- name: Setup .NET
3121
uses: actions/setup-dotnet@v4
3222
with:

.github/workflows/frontend-formatting-linting-checks.yml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,21 @@ jobs:
1919
- uses: actions/checkout@v4
2020

2121
# Setup Node.js
22-
- uses: actions/setup-node@v4
23-
with:
24-
node-version: lts/*
22+
- uses: voidzero-dev/setup-vp@v1
2523

2624
- name: Install dependencies
2725
working-directory: ./src/frontend
28-
run: npm ci
26+
run: vp install
2927

3028
# Frontend code quality checks
3129
- name: Check code formatting
3230
working-directory: ./src/frontend
33-
run: npm run format:check
31+
run: vp fmt --check .
3432

3533
- name: Check linting
3634
working-directory: ./src/frontend
37-
run: npm run lint
35+
run: vp lint .
3836

3937
- name: Check frontend build
4038
working-directory: ./src/frontend
41-
run: npm run build
39+
run: vp build

.github/workflows/frontend-unit-tests.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@ jobs:
1313
steps:
1414
- uses: actions/checkout@v4
1515

16-
- uses: actions/setup-node@v4
17-
with:
18-
node-version: lts/*
16+
- uses: voidzero-dev/setup-vp@v1
1917

2018
- name: Install dependencies
2119
working-directory: ./src/frontend
22-
run: npm ci
20+
run: vp install
2321

2422
- name: Run unit tests
2523
working-directory: ./src/frontend
26-
run: npm run test
24+
run: vp test

AGENTS.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ public class MyView : ViewBase
3131

3232
The topmost view in an Ivy application is called an [App](https://docs.ivy.app/onboarding/concepts/apps.md) and is decorated with the `[App]` attribute. The attribute uses **named constructor parameters** (lowercase):
3333

34-
[App(title: "Customers", icon: Icons.Rocket, path: new[] { "CRM" })]
34+
[App(title: "Customers", icon: Icons.Rocket, group: new[] { "CRM" })]
3535
public class CustomersApp : ViewBase
3636

3737
- `title` is optional — if omitted, it is derived from the class name (e.g. `CustomersApp` → "Customers").
3838
- `icon` uses the `Icons` enum — these are Lucide icons in PascalCase (e.g. `Icons.Link`, `Icons.Settings`, `Icons.Rocket`).
39-
- `path` groups the app in the navigation sidebar (e.g. `path: new[] { "Apps" }`).
40-
- There is no `group` or `chrome` parameter. Chrome is configured in `Program.cs` via `server.UseDefaultApp(typeof(MyApp))`.
41-
- Use **lowercase** parameter names (`icon:`, `path:`), NOT PascalCase property names (`Icon =`, `Path =`) — PascalCase causes CS0655.
39+
- `group` groups the app in the navigation sidebar (e.g. `group: new[] { "Apps" }`).
40+
- There is no `chrome` parameter. Chrome is configured in `Program.cs` via `server.UseDefaultApp(typeof(MyApp))`. Always ensure `server.AddAppsFromAssembly()` is called before `UseDefaultApp` — without it, `[App]`-attributed classes are not registered and the server throws at runtime.
41+
- Use **lowercase** parameter names (`icon:`, `group:`), NOT PascalCase property names (`Icon =`, `Group =`) — PascalCase causes CS0655.
4242

4343
An app is built into a tree of widgets. This is what's rendered to the screen.
4444

@@ -328,6 +328,10 @@ userNameState.ToTextInput().Required().MaxLength(50).Placeholder("Enter your nam
328328
- `DbContext` must never be injected directly! Always resolve `IDbContextFactory<T>` via `UseService` and create scoped instances with `CreateDbContextAsync()` inside query/mutation lambdas
329329
- **Nested layouts MUST use parentheses**`Layout.Vertical() | (Layout.Horizontal() | child1 | child2)` — without parentheses, C# left-to-right `|` evaluation adds children to the outer layout, not the inner one. See the nested layout example in the Layouts section above.
330330

331+
## CLI Commands
332+
333+
Prefer using `ivy cli explain` for command discovery over MCP server tools as it provides a reliable, built-in structural breakdown.
334+
331335
## Further Reading
332336

333337
[Forms](https://docs.ivy.app/onboarding/concepts/forms.md)

CONTRIBUTING.md

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ This project and everyone participating in it is governed by our [Code of Conduc
3535
### Prerequisites
3636

3737
- [.NET 10 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)
38-
- [Node.js 22.12+ & npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
38+
- [Rust Toolchain](https://rustup.rs/) (latest stable via `rustup`)
39+
- [Node.js 22.12+ & vp CLI](https://github.com/voidzero-dev/vite-plus) (latest version)
3940
- **Ivy Console Tool** (for development):
4041

4142
```bash
@@ -78,31 +79,31 @@ Ivy Framework uses multiple testing approaches to ensure code quality:
7879
### Unit Testing
7980

8081
- **Backend (C#)**: Run `dotnet test` in the root directory
81-
- **Frontend (TypeScript)**: Run `npm run test` in the `src/frontend/` directory
82+
- **Frontend (TypeScript)**: Run `vp test` in the `src/frontend/` directory
8283

8384
### End-to-End Testing
8485

85-
E2E tests are written using Playwright and are located in `src/frontend/e2e/`. We provide npm scripts for running these tests:
86+
E2E tests are written using Playwright and are located in `src/frontend/e2e/`. We provide `vp` scripts for running these tests:
8687

8788
```bash
8889
# Run all E2E tests
89-
npm run e2e
90+
vp run e2e
9091

9192
# Run only Ivy.Docs E2E tests
92-
npm run e2e:docs
93+
vp run e2e:docs
9394

9495
# Run only Ivy.Samples E2E tests
95-
npm run e2e:samples
96+
vp run e2e:samples
9697
```
9798

98-
**Important**: Always use the npm scripts (`npm run e2e*`) instead of `npx playwright test` to ensure consistent usage of the locally installed Playwright version and avoid version conflicts.
99+
**Important**: Always use the `vp` scripts (`vp run e2e*`) instead of `npx playwright test` to ensure consistent usage of the locally installed Playwright version and avoid version conflicts.
99100

100101
Additional Playwright options can be passed after `--`:
101102

102103
```bash
103-
npm run e2e -- --headed # Run tests in headed mode
104-
npm run e2e -- --debug # Run tests in debug mode
105-
npm run e2e:samples -- --project=chromium # Run samples tests in Chrome only
104+
vp run e2e -- --headed # Run tests in headed mode
105+
vp run e2e -- --debug # Run tests in debug mode
106+
vp run e2e:samples -- --project=chromium # Run samples tests in Chrome only
106107
```
107108

108109
## Contributing Guidelines
@@ -260,15 +261,15 @@ Before submitting your code, ensure it follows the project's linting and formatt
260261

261262
#### Frontend (TypeScript/React)
262263

263-
- Use `npm run lint:fix` to automatically fix ESLint issues
264-
- Use `npm run format` to format code with Prettier
264+
- Use `vp lint --fix .` to automatically fix ESLint issues
265+
- Use `vp fmt .` to format code with Oxfmt
265266
- These commands should be run from the `src/frontend/` directory
266267

267268
#### Pre-commit Hooks
268269

269270
The project uses pre-commit hooks that will automatically run linting and formatting on staged files. Make sure your code passes these checks before committing. More details how pre-commit hooks are being set up can be found in `src/frontend/README.md`
270271

271-
TL;DR, if you have run `npm install` in the `src/frontend`, most likely all pre-commit hooks will be working for you, that cover linting and formatting for Ivy-Framework.
272+
TL;DR, if you have run `vp install` in the `src/frontend`, most likely all pre-commit hooks will be working for you, that cover linting and formatting for Ivy-Framework.
272273

273274
### C# Guidelines
274275

@@ -336,15 +337,15 @@ dotnet test src/Ivy.Test
336337

337338
# Run frontend unit tests
338339
cd src/frontend
339-
npm run test
340+
vp test
340341

341342
# Run all frontend E2E tests
342343
cd src/frontend
343-
npm run e2e
344+
vp run e2e
344345

345346
# Run specific E2E test suites
346-
npm run e2e:docs # Ivy.Docs tests only
347-
npm run e2e:samples # Ivy.Samples tests only
347+
vp run e2e:docs # Ivy.Docs tests only
348+
vp run e2e:samples # Ivy.Samples tests only
348349
```
349350

350351
### Writing Tests

0 commit comments

Comments
 (0)