Skip to content
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

Add Init TUI #4046

Open
wants to merge 107 commits into
base: v3-alpha
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
3204287
Fix sponsors workflow
leaanthony Jul 10, 2024
ffcfa1b
fix: compute dropped file path before css handling (#3595)
FrancescoLuzzi Jul 10, 2024
c4c0d64
chore: update sponsors.svg (#3591)
github-actions[bot] Jul 11, 2024
9efaedf
chore: update sponsors.svg (#3604)
github-actions[bot] Jul 12, 2024
dd6eb0f
chore: update sponsors.svg (#3618)
github-actions[bot] Jul 17, 2024
482f19e
chore: update sponsors.svg (#3619)
github-actions[bot] Jul 18, 2024
e941f36
#3200: Use OutputFilename instead of Name (#3551)
plutov Jul 19, 2024
7a40cc5
chore: update sponsors.svg (#3624)
github-actions[bot] Jul 20, 2024
fe9495d
chore: update sponsors.svg (#3641)
github-actions[bot] Jul 28, 2024
5b091db
Fixed an error that occurred when an author name contains a string th…
taisei-86 Jul 29, 2024
ddf2703
chore: update sponsors.svg (#3661)
github-actions[bot] Aug 6, 2024
2b35861
Fix doctor command not finding pkg-config on Solus (#3670)
ianmjones Aug 10, 2024
fe1f23b
If a field is exported, generate json even in the absence of tags (#3…
pbnjay Aug 13, 2024
0f61873
chore: update sponsors.svg (#3679)
github-actions[bot] Aug 14, 2024
d36d171
Modified ZoomFactor and IsZoomControlEnabled options to be Windows-on…
levinit Aug 18, 2024
9995dae
Nil pointer check for DnD (#3597)
leaanthony Aug 18, 2024
3f83b42
FIX: Address Mac CGO Crash (#3590)
leaanthony Aug 20, 2024
868931f
Fix typos (#3628)
deining Aug 20, 2024
4b6a8e1
fix: failsafe JavaScript event emitter `notifyListeners` (#3695)
mrf345 Aug 20, 2024
f8c8611
Fix drag and drop missing cursor icon (#3703)
mrf345 Aug 25, 2024
87b1325
Update Sponsor Image (#3706)
github-actions[bot] Aug 25, 2024
1a23102
Modified docs to reflect the correct password syntax for the `gon-sig…
iberflow Aug 25, 2024
8e810d5
Update templates.mdx (#3567)
edai-git Aug 25, 2024
475534c
V2 bugfix/windows syscall go 1.23 (#3707)
leaanthony Aug 28, 2024
d218384
Update Sponsor Image (#3711)
github-actions[bot] Sep 1, 2024
3721d73
More syscall fixes (#3713)
leaanthony Sep 2, 2024
c3a7266
Update Sponsor Image (#3725)
github-actions[bot] Sep 4, 2024
265d2e4
Update Sponsor Image (#3727)
github-actions[bot] Sep 5, 2024
f4b21a6
chore: fix DeskGap author link on credits page (#3724)
matta Sep 5, 2024
5d2b430
Removed unnecessary files. Fixes #3737 (#3738)
ssahillppatell Sep 8, 2024
f302c80
v2.9.2
leaanthony Sep 17, 2024
429e94f
Update Sponsor Image (#3767)
github-actions[bot] Sep 22, 2024
bd2c1ea
bugfix : fix error on building runnable .app on MacOS when 'name' and…
nickisworking Sep 29, 2024
a6288c4
Update Sponsor Image (#3769)
github-actions[bot] Sep 30, 2024
5b85949
Update Sponsor Image (#3799)
github-actions[bot] Oct 10, 2024
7a5e41f
Add Resizem to community showcase (#3813)
barats Oct 10, 2024
a2e32fe
Updated documentation with new wails template (#3802)
xvertile Oct 10, 2024
8a5a050
fix: pass platform and arch to GenerateBindings for cross compilation…
fcying Oct 10, 2024
10abe24
Update Sponsor Image (#3818)
github-actions[bot] Oct 12, 2024
26ff639
Updated documentation with new wails template (#3820)
tongque0 Oct 13, 2024
14cc9ec
Update Sponsor Image (#3824)
github-actions[bot] Oct 14, 2024
1b6ed1b
Allow set window class name via options for Windows (#3828)
APshenkin Oct 20, 2024
f33e627
docs: add korean translation for Introduction (#3780)
azamara Oct 20, 2024
a964be1
Allow to specify macos-min-version externally (#3756)
APshenkin Oct 20, 2024
f08f4be
Rebuild runtime js
leaanthony Oct 20, 2024
5ebccf1
[Documentation]Adding notes for latest linux version and libwebkit is…
pratikmota Oct 20, 2024
bb4e95e
Update Sponsor Image (#3855)
github-actions[bot] Oct 24, 2024
f288182
Update Sponsor Image (#3858)
github-actions[bot] Oct 26, 2024
758a636
Update Sponsor Image (#3863)
github-actions[bot] Oct 30, 2024
157c8fd
Update to go-webview 0.1.17
leaanthony Nov 2, 2024
9772523
Add wails-nextjs-tailwind-template (#3871)
kairo913 Nov 3, 2024
e573bf4
Update go.sum
leaanthony Nov 3, 2024
bdb4151
Update Sponsor Image (#3874)
github-actions[bot] Nov 4, 2024
1c16342
Fixed example for macOS menu (#3847)
takuyahara Nov 6, 2024
d1ba26a
Fixed typo (#3846)
takuyahara Nov 7, 2024
13d4b21
Update Sponsor Image (#3883)
github-actions[bot] Nov 13, 2024
dca2064
Update Sponsor Image (#3884)
github-actions[bot] Nov 15, 2024
5df8ecc
Update PR template
leaanthony Nov 15, 2024
10e3a13
chore: removed incorrect go.mod instructions (#3878)
damiensedgwick Nov 16, 2024
86e3d51
Bump the go_modules group across 2 directories with 1 update (#3408)
dependabot[bot] Nov 17, 2024
ba38474
Bump the go_modules group across 3 directories with 1 update (#3410)
dependabot[bot] Nov 17, 2024
cadbccf
Update Sponsor Image (#3892)
github-actions[bot] Nov 19, 2024
39c922b
Update Sponsor Image (#3899)
github-actions[bot] Nov 22, 2024
63e1f3c
Fix TS definition of WindowSetSize
leaanthony Nov 23, 2024
e5be3c5
Update MacOS requirements
leaanthony Nov 23, 2024
93b4939
chore: update svelte CLI command (#3912)
pernydev Nov 25, 2024
8deb8a0
Add WailsTerm to community showcases (#3914)
rlshukhov Nov 26, 2024
bd57598
Update Mac AppStore Guide to support app names containing spaces (#3923)
cristianrgreco Nov 29, 2024
dade880
Update Sponsor Image (#3918)
github-actions[bot] Nov 30, 2024
2c45ae6
Update go-webview2 to v1.0.18.
leaanthony Dec 1, 2024
6345b64
Update templates.mdx (#3930)
xijaja Dec 4, 2024
dd4aa56
chore: fix some comments (#3932)
lvyaoting Dec 6, 2024
c27d2ce
Update Sponsor Image (#3938)
github-actions[bot] Dec 8, 2024
896a90f
Add Minesweeper XP to Community Showcase (#3940)
AkshayKalose Dec 9, 2024
42e7750
Update Sponsor Image (#3943)
github-actions[bot] Dec 13, 2024
e219e3b
Update Sponsor Image (#3952)
github-actions[bot] Dec 16, 2024
fc0aea1
Update Sponsor Image (#3956)
github-actions[bot] Dec 18, 2024
d730c96
docs: add Kafka King to showcase (#3964)
Bronya0 Dec 23, 2024
ee2156e
Added Go requirements for Mac 15+
leaanthony Dec 23, 2024
461d34c
fix: prevent unnecessary redraws during window minimize/restore (#3955)
562589540 Dec 26, 2024
82fd9de
Fix:Adjust the first-level heading to fix the page display format (#3…
Bronya0 Dec 27, 2024
90be707
Update Sponsor Image (#3983)
github-actions[bot] Jan 5, 2025
7566ed4
Do not attempt to export fields that cannot be json-encoded (#3975)
pbnjay Jan 10, 2025
67afec3
Add grpcmd-gui to Community Showcase (#3994)
AkshayKalose Jan 10, 2025
caf05ad
Update Sponsor Image (#3998)
github-actions[bot] Jan 11, 2025
3a4c3e7
Ensure showHiddenFiles works with directory dialog (#3904)
leaanthony Jan 11, 2025
d638336
Update Sponsor Image (#4002)
github-actions[bot] Jan 12, 2025
d9b99a9
Update Sponsor Image (#4004)
github-actions[bot] Jan 13, 2025
c4fdfd6
Fix miscellaneous bindings and typescript export bugs (#3978)
pbnjay Jan 13, 2025
4598af4
recover from process message instead crash the whole app (#4016)
RonaldinhoL Jan 17, 2025
51c7453
Update Sponsor Image (#4018)
github-actions[bot] Jan 17, 2025
481c145
Update deps
leaanthony Jan 20, 2025
55b90a5
Update Sponsor Image (#4022)
github-actions[bot] Jan 23, 2025
00be6f2
[v2] Fix reloaddirs wails.json config (#4005)
atterpac Jan 23, 2025
d824318
fix dev mode logging bug (#3972)
atterpac Jan 23, 2025
4a1d101
Fix invalid path for windows dialogs (#4019)
leaanthony Jan 23, 2025
e72a0d7
add initial version
PylotLight Feb 5, 2025
3605fdf
Update dependencies. Fix `buildvcs` compile error
leaanthony Feb 8, 2025
fa7c6d8
Fix ErrorCancelled typo
leaanthony Feb 8, 2025
536422d
Update contributors
leaanthony Feb 9, 2025
bedebe0
Update Sponsor Image (#4036)
github-actions[bot] Feb 9, 2025
9bc3a7c
Merge branch 'v3-alpha' into feature/interactiveInit
leaanthony Feb 9, 2025
da56b38
Merge branch 'wailsapp:master' into feature/interactiveInit
PylotLight Feb 10, 2025
86f4d49
Revert "Merge branch 'wailsapp:master' into feature/interactiveInit"
PylotLight Feb 10, 2025
add9ae4
update projectDetails ref and returning
PylotLight Feb 10, 2025
d1c8a12
remove verbose commenting
PylotLight Feb 10, 2025
e525fcb
update error return
PylotLight Feb 10, 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
17 changes: 15 additions & 2 deletions v3/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,18 @@ require (
modernc.org/sqlite v1.21.0
)

require (
github.com/atotto/clipboard v0.1.4 // indirect
github.com/catppuccin/go v0.2.0 // indirect
github.com/charmbracelet/bubbles v0.20.0 // indirect
github.com/charmbracelet/bubbletea v1.1.0 // indirect
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 // indirect
github.com/charmbracelet/x/term v0.2.0 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/mattn/go-localereader v0.0.1 // indirect
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
)

require (
atomicgo.dev/cursor v0.1.1 // indirect
atomicgo.dev/keyboard v0.2.8 // indirect
Expand All @@ -62,8 +74,9 @@ require (
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb // indirect
github.com/cavaliergopher/cpio v1.0.1 // indirect
github.com/chainguard-dev/git-urls v1.0.2 // indirect
github.com/charmbracelet/lipgloss v0.12.1 // indirect
github.com/charmbracelet/x/ansi v0.1.4 // indirect
github.com/charmbracelet/huh v0.6.0
github.com/charmbracelet/lipgloss v0.13.0 // indirect
github.com/charmbracelet/x/ansi v0.2.3 // indirect
github.com/cloudflare/circl v1.5.0 // indirect
github.com/containerd/console v1.0.4 // indirect
github.com/cyphar/filepath-securejoin v0.4.0 // indirect
Expand Down
25 changes: 25 additions & 0 deletions v3/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk=
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/atterpac/refresh v0.8.3 h1:Xj0rtd6Wfv/u03wZOdauASBOPxGZOJeik065S0wISNg=
github.com/atterpac/refresh v0.8.3/go.mod h1:fJpWySLdpbANS8Ej5OvfZVZIVvi/9bmnhTjKS5EjQes=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
Expand All @@ -69,18 +71,34 @@ github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI=
github.com/caarlos0/testfs v0.4.4 h1:3PHvzHi5Lt+g332CiShwS8ogTgS3HjrmzZxCm6JCDr8=
github.com/caarlos0/testfs v0.4.4/go.mod h1:bRN55zgG4XCUVVHZCeU+/Tz1Q6AxEJOEJTliBy+1DMk=
github.com/catppuccin/go v0.2.0 h1:ktBeIrIP42b/8FGiScP9sgrWOss3lw0Z5SktRoithGA=
github.com/catppuccin/go v0.2.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc=
github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM=
github.com/cavaliergopher/cpio v1.0.1/go.mod h1:pBdaqQjnvXxdS/6CvNDwIANIFSP0xRKI16PX4xejRQc=
github.com/chainguard-dev/git-urls v1.0.2 h1:pSpT7ifrpc5X55n4aTTm7FFUE+ZQHKiqpiwNkJrVcKQ=
github.com/chainguard-dev/git-urls v1.0.2/go.mod h1:rbGgj10OS7UgZlbzdUQIQpT0k/D4+An04HJY7Ol+Y/o=
github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE=
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
github.com/charmbracelet/bubbletea v1.1.0 h1:FjAl9eAL3HBCHenhz/ZPjkKdScmaS5SK69JAK2YJK9c=
github.com/charmbracelet/bubbletea v1.1.0/go.mod h1:9Ogk0HrdbHolIKHdjfFpyXJmiCzGwy+FesYkZr7hYU4=
github.com/charmbracelet/glamour v0.8.0 h1:tPrjL3aRcQbn++7t18wOpgLyl8wrOHUEDS7IZ68QtZs=
github.com/charmbracelet/glamour v0.8.0/go.mod h1:ViRgmKkf3u5S7uakt2czJ272WSg2ZenlYEZXT2x7Bjw=
github.com/charmbracelet/huh v0.6.0 h1:mZM8VvZGuE0hoDXq6XLxRtgfWyTI3b2jZNKh0xWmax8=
github.com/charmbracelet/huh v0.6.0/go.mod h1:GGNKeWCeNzKpEOh/OJD8WBwTQjV3prFAtQPpLv+AVwU=
github.com/charmbracelet/lipgloss v0.12.1 h1:/gmzszl+pedQpjCOH+wFkZr/N90Snz40J/NR7A0zQcs=
github.com/charmbracelet/lipgloss v0.12.1/go.mod h1:V2CiwIuhx9S1S1ZlADfOj9HmxeMAORuz5izHb0zGbB8=
github.com/charmbracelet/lipgloss v0.13.0 h1:4X3PPeoWEDCMvzDvGmTajSyYPcZM4+y8sCA/SsA3cjw=
github.com/charmbracelet/lipgloss v0.13.0/go.mod h1:nw4zy0SBX/F/eAO1cWdcvy6qnkDUxr8Lw7dvFrAIbbY=
github.com/charmbracelet/x/ansi v0.1.4 h1:IEU3D6+dWwPSgZ6HBH+v6oUuZ/nVawMiWj5831KfiLM=
github.com/charmbracelet/x/ansi v0.1.4/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
github.com/charmbracelet/x/ansi v0.2.3 h1:VfFN0NUpcjBRd4DnKfRaIRo53KRgey/nhOoEqosGDEY=
github.com/charmbracelet/x/ansi v0.2.3/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
github.com/charmbracelet/x/exp/golden v0.0.0-20240715153702-9ba8adf781c4 h1:6KzMkQeAF56rggw2NZu1L+TH7j9+DM1/2Kmh7KUxg1I=
github.com/charmbracelet/x/exp/golden v0.0.0-20240715153702-9ba8adf781c4/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 h1:qko3AQ4gK1MTS/de7F5hPGx6/k1u0w4TeYmBFwzYVP4=
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0/go.mod h1:pBhA0ybfXv6hDjQUZ7hk1lVxBiUbupdw5R31yPUViVQ=
github.com/charmbracelet/x/term v0.2.0 h1:cNB9Ot9q8I711MyZ7myUR5HFWL/lc3OpU8jZ4hwm0x0=
github.com/charmbracelet/x/term v0.2.0/go.mod h1:GVxgxAbjUrmpvIINHIQnJJKpMlHiZ4cktEQCN6GWyF0=
github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys=
github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
Expand All @@ -105,6 +123,8 @@ github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ
github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
Expand Down Expand Up @@ -224,6 +244,8 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
Expand All @@ -244,6 +266,8 @@ github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zx
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mmcloughlin/avo v0.6.0 h1:QH6FU8SKoTLaVs80GA8TJuLNkUYl4VokHKlPhVDg4YY=
github.com/mmcloughlin/avo v0.6.0/go.mod h1:8CoAGaCSYXtCPR+8y18Y9aB/kxb8JSS6FRI7mSkvD+8=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
Expand Down Expand Up @@ -373,6 +397,7 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Expand Down
144 changes: 141 additions & 3 deletions v3/internal/commands/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,19 @@ package commands

import (
"fmt"
"github.com/go-git/go-git/v5/config"
"github.com/wailsapp/wails/v3/internal/term"
"os"
"path/filepath"
"regexp"
"strings"

"github.com/charmbracelet/huh"
"github.com/charmbracelet/lipgloss"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/config"
"github.com/pterm/pterm"
"github.com/wailsapp/wails/v3/internal/flags"
"github.com/wailsapp/wails/v3/internal/templates"
"github.com/wailsapp/wails/v3/internal/term"
)

var DisableFooter bool
Expand Down Expand Up @@ -120,7 +122,14 @@ func Init(options *flags.Init) error {
}

if options.ProjectName == "" {
return fmt.Errorf("please use the -n flag to specify a project name")
interactiveOptions, err := startInteractive(options)
if err != nil {
return err
}
options = interactiveOptions
if options.ProjectName == "" {
return fmt.Errorf("project name is required")
}
}

options.ProjectName = sanitizeFileName(options.ProjectName)
Expand Down Expand Up @@ -188,3 +197,132 @@ func sanitizeFileName(fileName string) string {
// Replace matched characters with an underscore or any other safe character
return reg.ReplaceAllString(fileName, "_")
}

func startInteractive(initialOptions *flags.Init) (*flags.Init, error) {
var templateOptions []huh.Option[string]
var templateSelect *huh.Select[string]
confirmProjectCreation := false

options := initialOptions

if options == nil {
options = &flags.Init{
ProductVersion: "1.0.0",
}
} else if options.ProductVersion == "" {
options.ProductVersion = "1.0.0"
}
templateName := &options.TemplateName

templateSelect = huh.NewSelect[string]().
Title("Template").
Description("Project template to use (Enter to list)").
Options(templateOptions...).
Value(templateName)

form := huh.NewForm(
huh.NewGroup(
huh.NewInput().
Title("Project Name").
Description("Name of project").
Value(&options.ProjectName),

huh.NewInput().
Title("Project Dir").
Description("Target directory (empty for default)").
Value(&options.ProjectDir),

templateSelect,
),
huh.NewGroup(
huh.NewInput().
Title("Git Repo URL (optional)").
Description("Git repo to initialize (optional)").
Value(&options.Git),
),
huh.NewGroup(
huh.NewInput().
Title("Company (optional)").
Value(&options.ProductCompany),
huh.NewInput().
Title("Product Name (optional)").
Value(&options.ProductName),
huh.NewInput().
Title("Version (optional)").
Value(&options.ProductVersion),
huh.NewInput().
Title("ID (optional)").
Value(&options.ProductIdentifier),
huh.NewInput().
Title("Copyright (optional)").
Value(&options.ProductCopyright),
huh.NewText().
Title("Description (optional)").
Lines(1).
Value(&options.ProductDescription),
huh.NewText().
Title("Comments (optional)").
Lines(1).
Value(&options.ProductComments),
),
huh.NewGroup(
huh.NewConfirm().
Title("Confirm?").
Value(&confirmProjectCreation),
),
)
Comment on lines +223 to +273
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add input validation for critical fields.

The form lacks validation for critical fields like project name and directory.

Add validation to ensure:

  1. Project name follows naming conventions
  2. Directory path is valid and writable
  3. Git URL format is valid (if provided)

Apply this diff to add validation:

 huh.NewInput().
 	Title("Project Name").
 	Description("Name of project").
-	Value(&options.ProjectName),
+	Value(&options.ProjectName).
+	Validate(func(s string) error {
+		if s == "" {
+			return fmt.Errorf("project name cannot be empty")
+		}
+		if !regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9_-]*$`).MatchString(s) {
+			return fmt.Errorf("invalid project name: must start with a letter and contain only letters, numbers, underscores, or hyphens")
+		}
+		return nil
+	}),

 huh.NewInput().
 	Title("Project Dir").
 	Description("Target directory (empty for default)").
-	Value(&options.ProjectDir),
+	Value(&options.ProjectDir).
+	Validate(func(s string) error {
+		if s == "" {
+			return nil
+		}
+		if _, err := os.Stat(s); err == nil {
+			return fmt.Errorf("directory already exists")
+		}
+		return nil
+	}),

 huh.NewInput().
 	Title("Git Repo URL (optional)").
 	Description("Git repo to initialize (optional)").
-	Value(&options.Git),
+	Value(&options.Git).
+	Validate(func(s string) error {
+		if s == "" {
+			return nil
+		}
+		if !regexp.MustCompile(`^(https?|git|ssh)://|^git@`).MatchString(s) {
+			return fmt.Errorf("invalid git URL format")
+		}
+		return nil
+	}),
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
form := huh.NewForm(
huh.NewGroup(
huh.NewInput().
Title("Project Name").
Description("Name of project").
Value(&options.ProjectName),
huh.NewInput().
Title("Project Dir").
Description("Target directory (empty for default)").
Value(&options.ProjectDir),
templateSelect,
),
huh.NewGroup(
huh.NewInput().
Title("Git Repo URL (optional)").
Description("Git repo to initialize (optional)").
Value(&options.Git),
),
huh.NewGroup(
huh.NewInput().
Title("Company (optional)").
Value(&options.ProductCompany),
huh.NewInput().
Title("Product Name (optional)").
Value(&options.ProductName),
huh.NewInput().
Title("Version (optional)").
Value(&options.ProductVersion),
huh.NewInput().
Title("ID (optional)").
Value(&options.ProductIdentifier),
huh.NewInput().
Title("Copyright (optional)").
Value(&options.ProductCopyright),
huh.NewText().
Title("Description (optional)").
Lines(1).
Value(&options.ProductDescription),
huh.NewText().
Title("Comments (optional)").
Lines(1).
Value(&options.ProductComments),
),
huh.NewGroup(
huh.NewConfirm().
Title("Confirm?").
Value(&confirmProjectCreation),
),
)
form := huh.NewForm(
huh.NewGroup(
huh.NewInput().
Title("Project Name").
Description("Name of project").
Value(&options.ProjectName).
Validate(func(s string) error {
if s == "" {
return fmt.Errorf("project name cannot be empty")
}
if !regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9_-]*$`).MatchString(s) {
return fmt.Errorf("invalid project name: must start with a letter and contain only letters, numbers, underscores, or hyphens")
}
return nil
}),
huh.NewInput().
Title("Project Dir").
Description("Target directory (empty for default)").
Value(&options.ProjectDir).
Validate(func(s string) error {
if s == "" {
return nil
}
if _, err := os.Stat(s); err == nil {
return fmt.Errorf("directory already exists")
}
return nil
}),
templateSelect,
),
huh.NewGroup(
huh.NewInput().
Title("Git Repo URL (optional)").
Description("Git repo to initialize (optional)").
Value(&options.Git).
Validate(func(s string) error {
if s == "" {
return nil
}
if !regexp.MustCompile(`^(https?|git|ssh)://|^git@`).MatchString(s) {
return fmt.Errorf("invalid git URL format")
}
return nil
}),
),
huh.NewGroup(
huh.NewInput().
Title("Company (optional)").
Value(&options.ProductCompany),
huh.NewInput().
Title("Product Name (optional)").
Value(&options.ProductName),
huh.NewInput().
Title("Version (optional)").
Value(&options.ProductVersion),
huh.NewInput().
Title("ID (optional)").
Value(&options.ProductIdentifier),
huh.NewInput().
Title("Copyright (optional)").
Value(&options.ProductCopyright),
huh.NewText().
Title("Description (optional)").
Lines(1).
Value(&options.ProductDescription),
huh.NewText().
Title("Comments (optional)").
Lines(1).
Value(&options.ProductComments),
),
huh.NewGroup(
huh.NewConfirm().
Title("Confirm?").
Value(&confirmProjectCreation),
),
)


templateSelect.OptionsFunc(func() []huh.Option[string] {
defaultTemplates := templates.GetDefaultTemplates()

vanillaTemplate := templates.TemplateData{Name: "vanilla", Description: ""}
orderedTemplates := []templates.TemplateData{}
vanillaFound := false
for _, t := range defaultTemplates {
if t.Name == vanillaTemplate.Name {
orderedTemplates = append([]templates.TemplateData{t}, orderedTemplates...)
vanillaFound = true
} else {
orderedTemplates = append(orderedTemplates, t)
}
}
if !vanillaFound {
orderedTemplates = append([]templates.TemplateData{vanillaTemplate}, orderedTemplates...)
}

templateOptions = nil
for _, t := range orderedTemplates {
templateOptions = append(templateOptions, huh.NewOption(t.Name, t.Name))
}

*templateName = "vanilla"

return templateOptions
}, nil)

formStyle := lipgloss.NewStyle().
BorderStyle(lipgloss.RoundedBorder()).
BorderForeground(lipgloss.Color("62")).
Padding(1, 2).
Margin(1, 0)

formRenderer := lipgloss.NewRenderer(os.Stdout)

err := form.Run()
if err != nil {
term.Error(fmt.Errorf("Interactive form failed: %w", err))
return nil, fmt.Errorf("form execution failed: %w", err)
}

formString := formRenderer.NewStyle().Render(form.View())
styledForm := formStyle.Render(formString)
fmt.Println(styledForm)

if confirmProjectCreation {
fmt.Println("Creating project...")
return options, nil
} else {
fmt.Println("Project creation cancelled.")
return nil, fmt.Errorf("project creation cancelled by user")
}
}
Loading