Skip to content

Commit f39e373

Browse files
(chore): patch notes for upcoming release (#2293)
* chore: Archive old weekly notes and update prompt files to reference the latest notes. * feat: commits tool run 1 * docs: Add weekly release notes for 2026-02-19 (V2) detailing UI/UX polish, theming, authentication, developer experience enhancements, and bug fixes. * feat: merge weekly notes versions into one file and clean up * feat: clean up * feat: populate with links * feat: update links * feat: add what's changed section * docs: Remove the "Enhanced Theme Color Picker" section and the detailed "What's Changed" changelog from the weekly notes. * refactor: Rename `ResizeablePanel` to `ResizablePanel` with updated sizing, refactor `Button` APIs for variants, icons, and URL targets, and change the OAuth callback URL. --------- Co-authored-by: rorychatt <pavel.rinne@gmail.com>
1 parent 976108b commit f39e373

File tree

9 files changed

+608
-4
lines changed

9 files changed

+608
-4
lines changed

src/.releases/CreateNotes.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ else {
4747

4848
if (-not $SkipDownloads) {
4949
$downloadScript = Join-Path $scriptDir "DownloadCommits.ps1"
50-
& $downloadScript -Repo https://github.com/Ivy-Interactive/Ivy -OutputFolder $commitsFolder -LastDays 21 -Prefix ivy
51-
& $downloadScript -Repo https://github.com/Ivy-Interactive/Ivy-Framework -OutputFolder $commitsFolder -LastDays 21 -Prefix ivy-framework
50+
& $downloadScript -Repo https://github.com/Ivy-Interactive/Ivy -OutputFolder $commitsFolder -LastDays 13 -Prefix ivy
51+
& $downloadScript -Repo https://github.com/Ivy-Interactive/Ivy-Framework -OutputFolder $commitsFolder -LastDays 13 -Prefix ivy-framework
5252
}
5353

5454
$promptFile = Join-Path $scriptDir "prompt.md"
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Button URL Default Target Changed to Same Tab - v1.2.15
2+
3+
## Summary
4+
5+
Buttons with `.Url()` now open in the **same tab** by default. Previously, URL buttons always opened in a new tab (`_blank`). Use the new `.OpenInNewTab()` extension method to restore the old behavior.
6+
7+
## What Changed
8+
9+
### Before (v1.2.14 and earlier)
10+
11+
```csharp
12+
// Opened in a NEW tab by default
13+
new Button("Visit Docs").Url("https://docs.example.com")
14+
```
15+
16+
### After (v1.2.15+)
17+
18+
```csharp
19+
// Opens in the SAME tab by default
20+
new Button("Visit Docs").Url("https://docs.example.com")
21+
22+
// To open in a new tab, explicitly call .OpenInNewTab()
23+
new Button("Visit Docs").Url("https://docs.example.com").OpenInNewTab()
24+
```
25+
26+
## How to Find Affected Code
27+
28+
This is a **behavioral change**, not a compilation error. Search for buttons using `.Url()`:
29+
30+
```regex
31+
\.Url\(
32+
```
33+
34+
## How to Refactor
35+
36+
### If you want links to open in a new tab (old behavior)
37+
38+
Add `.OpenInNewTab()` to any Button that uses `.Url()` where new-tab behavior is desired:
39+
40+
**Before:**
41+
42+
```csharp
43+
new Button("External Link", variant: ButtonVariant.Secondary)
44+
.Url("https://github.com/Ivy-Interactive/Ivy-Framework")
45+
.Icon(Icons.ExternalLink, Align.Right)
46+
```
47+
48+
**After:**
49+
50+
```csharp
51+
new Button("External Link").Secondary()
52+
.Url("https://github.com/Ivy-Interactive/Ivy-Framework")
53+
.OpenInNewTab()
54+
.Icon(Icons.ExternalLink, Align.Right)
55+
```
56+
57+
### If same-tab navigation is fine
58+
59+
No changes needed — the new default behavior will apply automatically.
60+
61+
## Verification
62+
63+
Visually inspect buttons with URLs to ensure they open in the correct tab context.
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# Button Variant & Icon Constructor Parameters Removed - v1.2.15
2+
3+
## Summary
4+
5+
The `Button` constructor no longer accepts `variant:` or `icon:` named parameters. Variants are now set via fluent extension methods (`.Destructive()`, `.Outline()`, `.Ghost()`, `.Secondary()`, `.Link()`, `.Success()`, `.Warning()`, `.Info()`), and icons are set via the `.Icon()` method. `ButtonVariant.Primary` is the default and no longer needs to be specified.
6+
7+
## What Changed
8+
9+
### Before (v1.2.14 and earlier)
10+
11+
```csharp
12+
new Button("Delete", variant: ButtonVariant.Destructive)
13+
new Button("Cancel", _ => Close(), variant: ButtonVariant.Outline)
14+
new Button("Save", variant: ButtonVariant.Primary)
15+
new Button(null, icon: Icons.Settings, variant: ButtonVariant.Ghost)
16+
new Button("Search", icon: Icons.Search, variant: ButtonVariant.Outline)
17+
```
18+
19+
### After (v1.2.15+)
20+
21+
```csharp
22+
new Button("Delete").Destructive()
23+
new Button("Cancel", _ => Close()).Outline()
24+
new Button("Save") // Primary is default, no method needed
25+
new Button().Icon(Icons.Settings).Ghost()
26+
new Button("Search").Icon(Icons.Search).Outline()
27+
```
28+
29+
> **Note:** `ButtonVariant.Primary` is the default variant. Remove `variant: ButtonVariant.Primary` entirely — no replacement method is needed.
30+
31+
## How to Find Affected Code
32+
33+
Run a `dotnet build`.
34+
35+
Or search for these patterns in the codebase:
36+
37+
### Pattern 1: variant parameter
38+
39+
```regex
40+
variant:\s*ButtonVariant\.
41+
```
42+
43+
### Pattern 2: icon constructor parameter
44+
45+
```regex
46+
new Button\(.*icon:\s*Icons\.
47+
```
48+
49+
## How to Refactor
50+
51+
### Variant Mapping
52+
53+
| Old Constructor Parameter | New Fluent Method |
54+
|--------------------------|-------------------|
55+
| `variant: ButtonVariant.Primary` | *(remove — it's the default)* |
56+
| `variant: ButtonVariant.Secondary` | `.Secondary()` |
57+
| `variant: ButtonVariant.Destructive` | `.Destructive()` |
58+
| `variant: ButtonVariant.Outline` | `.Outline()` |
59+
| `variant: ButtonVariant.Ghost` | `.Ghost()` |
60+
| `variant: ButtonVariant.Link` | `.Link()` |
61+
| `variant: ButtonVariant.Success` | `.Success()` |
62+
| `variant: ButtonVariant.Warning` | `.Warning()` |
63+
| `variant: ButtonVariant.Info` | `.Info()` |
64+
| `variant: ButtonVariant.Ai` | `.Ai()` |
65+
66+
### Icon Migration
67+
68+
Replace `icon:` constructor parameter with `.Icon()` method:
69+
70+
**Before:**
71+
72+
```csharp
73+
new Button("Search", icon: Icons.Search, variant: ButtonVariant.Outline)
74+
```
75+
76+
**After:**
77+
78+
```csharp
79+
new Button("Search").Icon(Icons.Search).Outline()
80+
```
81+
82+
### Complex Example
83+
84+
**Before:**
85+
86+
```csharp
87+
new DialogFooter(
88+
new Button("Cancel", _ => isOpen.Set(false), variant: ButtonVariant.Outline),
89+
new Button("Confirm", _ => Submit(), variant: ButtonVariant.Primary)
90+
)
91+
```
92+
93+
**After:**
94+
95+
```csharp
96+
new DialogFooter(
97+
new Button("Cancel", _ => isOpen.Set(false)).Outline(),
98+
new Button("Confirm", _ => Submit())
99+
)
100+
```
101+
102+
## Key Refactoring Rules
103+
104+
1. Move `variant:` from constructor to fluent method call **after** the constructor
105+
2. Move `icon:` from constructor to `.Icon()` method call
106+
3. Remove `variant: ButtonVariant.Primary` entirely (it's the default)
107+
4. Remove `null` as button text if it was only used to pass `icon:` — use parameterless `new Button()` instead
108+
109+
## Verification
110+
111+
After refactoring, run:
112+
113+
```bash
114+
dotnet build
115+
```
116+
117+
All usages should compile without errors.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# OAuth Callback URL Changed - v1.2.15
2+
3+
## Summary
4+
5+
The OAuth callback URL has changed from `/ivy/webhook` to `/ivy/auth/callback`. If you use OAuth authentication (Auth0, GitHub, Microsoft Entra, Supabase, Clerk), you must update the callback/redirect URL in your provider's settings.
6+
7+
## What Changed
8+
9+
### Before (v1.2.14 and earlier)
10+
11+
```
12+
http://localhost:5010/ivy/webhook
13+
```
14+
15+
### After (v1.2.15+)
16+
17+
```
18+
http://localhost:5010/ivy/auth/callback
19+
```
20+
21+
## How to Find Affected Code
22+
23+
This is a **configuration change**, not a code change. Search your OAuth provider dashboard settings.
24+
25+
You can also search your codebase for hardcoded webhook URLs:
26+
27+
```regex
28+
/ivy/webhook
29+
```
30+
31+
## How to Refactor
32+
33+
### Update your OAuth provider settings
34+
35+
| Provider | Setting to Update |
36+
|----------|------------------|
37+
| **Auth0** | Applications → Settings → Allowed Callback URLs |
38+
| **GitHub** | OAuth Apps → Authorization callback URL |
39+
| **Microsoft Entra** | App registrations → Authentication → Redirect URIs |
40+
| **Supabase** | Authentication → URL Configuration → Redirect URLs |
41+
| **Clerk** | No manual change needed (handled by SDK) |
42+
43+
### Example URL Updates
44+
45+
| Old URL | New URL |
46+
|---------|---------|
47+
| `http://localhost:5010/ivy/webhook` | `http://localhost:5010/ivy/auth/callback` |
48+
| `https://myapp.com/ivy/webhook` | `https://myapp.com/ivy/auth/callback` |
49+
| `https://myapp.com/ivy/webhook/*` | `https://myapp.com/ivy/auth/callback/*` |
50+
51+
## Verification
52+
53+
After updating your provider settings, test the OAuth login flow to confirm authentication completes successfully.
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# ResizeablePanel Renamed to ResizablePanel - v1.2.15
2+
3+
## Summary
4+
5+
`ResizeablePanelGroup` and `ResizeablePanel` have been renamed to `ResizablePanelGroup` and `ResizablePanel` (fixing the typo in "Resizeable"). Additionally, the `ResizablePanel` constructor now accepts `Size?` instead of `int?` for sizing, using `Size.Fraction()` with support for `.Min()` and `.Max()` constraints.
6+
7+
## What Changed
8+
9+
### Before (v1.2.14 and earlier)
10+
11+
```csharp
12+
new ResizeablePanelGroup(
13+
new ResizeablePanel(25, new Card("Left")),
14+
new ResizeablePanel(75, new Card("Right"))
15+
)
16+
```
17+
18+
### After (v1.2.15+)
19+
20+
```csharp
21+
new ResizablePanelGroup(
22+
new ResizablePanel(Size.Fraction(0.25f), new Card("Left")),
23+
new ResizablePanel(Size.Fraction(0.75f), new Card("Right"))
24+
)
25+
```
26+
27+
> **Note:** The integer percentage (e.g. `25`) is replaced with a fractional value (e.g. `0.25f`). You can also add `.Min()` and `.Max()` constraints: `Size.Fraction(0.3f).Min(0.15f).Max(0.5f)`.
28+
29+
## How to Find Affected Code
30+
31+
Run a `dotnet build`.
32+
33+
Or search for these patterns:
34+
35+
### Pattern 1: Old class name
36+
37+
```regex
38+
Resizeable(Panel|PanelGroup)
39+
```
40+
41+
### Pattern 2: Extension methods
42+
43+
```regex
44+
ResizeablePanelsExtensions
45+
```
46+
47+
## How to Refactor
48+
49+
### Class Renames
50+
51+
| Old Name | New Name |
52+
|----------|----------|
53+
| `ResizeablePanelGroup` | `ResizablePanelGroup` |
54+
| `ResizeablePanel` | `ResizablePanel` |
55+
| `ResizeablePanelsExtensions` | `ResizablePanelsExtensions` |
56+
57+
### Size Parameter Conversion
58+
59+
| Old (int?) | New (Size?) |
60+
|-----------|-------------|
61+
| `20` | `Size.Fraction(0.2f)` |
62+
| `25` | `Size.Fraction(0.25f)` |
63+
| `30` | `Size.Fraction(0.3f)` |
64+
| `40` | `Size.Fraction(0.4f)` |
65+
| `50` | `Size.Fraction(0.5f)` |
66+
| `60` | `Size.Fraction(0.6f)` |
67+
| `70` | `Size.Fraction(0.7f)` |
68+
| `75` | `Size.Fraction(0.75f)` |
69+
| `null` | `null` |
70+
71+
### Complex Example with Min/Max
72+
73+
**Before:**
74+
75+
```csharp
76+
new ResizeablePanelGroup(
77+
new ResizeablePanel(25, sidebar),
78+
new ResizeablePanel(75,
79+
new ResizeablePanelGroup(
80+
new ResizeablePanel(60, mainContent),
81+
new ResizeablePanel(40, detailsPanel)
82+
).Vertical())
83+
).Horizontal()
84+
```
85+
86+
**After:**
87+
88+
```csharp
89+
new ResizablePanelGroup(
90+
new ResizablePanel(Size.Fraction(0.25f).Min(0.1f).Max(0.4f), sidebar),
91+
new ResizablePanel(Size.Fraction(0.75f),
92+
new ResizablePanelGroup(
93+
new ResizablePanel(Size.Fraction(0.6f), mainContent),
94+
new ResizablePanel(Size.Fraction(0.4f), detailsPanel)
95+
).Vertical())
96+
).Horizontal()
97+
```
98+
99+
## Key Refactoring Rules
100+
101+
1. Rename all `Resizeable``Resizable` (remove the extra "e")
102+
2. Convert integer percentages to `Size.Fraction(value / 100f)` — e.g. `25``Size.Fraction(0.25f)`
103+
3. Keep `null` as `null` for auto-sized panels
104+
4. Optionally add `.Min()` / `.Max()` constraints for better UX
105+
106+
## Verification
107+
108+
After refactoring, run:
109+
110+
```bash
111+
dotnet build
112+
```
113+
114+
All usages should compile without errors.

src/.releases/prompt-refine.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Read /Users/rorychatt/git/ivy/Ivy-Framework/src/.releases/weekly-notes-2026-02-06.md
1+
Read /Users/rorychatt/git/ivy/Ivy-Framework/src/.releases/weekly-notes-2026-02-19.md
22

33
This is a weekly summary of changes made to the Ivy Framework.
44
Ivy is an open source framework for building apps in pure .Net and C#.

src/.releases/prompt.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ it to be interesting for someone using the framework and the CLI and short and d
1212

1313
For API changes/additions, we want to show code examples on how to use the new APIs.
1414

15-
Read /Users/rorychatt/git/ivy/Ivy-Framework/src/.releases/weekly-notes-2026-02-06.md (NOTES)
15+
Read /Users/rorychatt/git/ivy/Ivy-Framework/src/.releases/weekly-notes-2026-02-19.md (NOTES)
1616

1717
Read the COMMIT and update NOTES with the new changes. We will trigger this agent for each commit so don't spend time reading the others.
1818

0 commit comments

Comments
 (0)