Skip to content

Commit bd7d04d

Browse files
committed
feat: Migrate to Charmbracelet Bubbletea and Bubbles libraries to v2.
Signed-off-by: marwan562 <mixing.gamer546@gmail.com>
1 parent a08cb1f commit bd7d04d

68 files changed

Lines changed: 223 additions & 213 deletions

File tree

Some content is hidden

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

cmd/harbor/root/configurations/apply.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"path/filepath"
2222
"strings"
2323

24-
"github.com/charmbracelet/lipgloss"
24+
"charm.land/lipgloss/v2"
2525
"github.com/goharbor/go-client/pkg/sdk/v2.0/models"
2626
"github.com/goharbor/harbor-cli/pkg/api"
2727
"github.com/goharbor/harbor-cli/pkg/utils"

go.mod

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ module github.com/goharbor/harbor-cli
33
go 1.24.8
44

55
require (
6+
charm.land/bubbles/v2 v2.0.0
7+
charm.land/bubbletea/v2 v2.0.2
68
github.com/atotto/clipboard v0.1.4
7-
github.com/charmbracelet/bubbles v1.0.0
8-
github.com/charmbracelet/bubbletea v1.3.10
99
github.com/charmbracelet/huh v0.8.0
1010
github.com/charmbracelet/lipgloss v1.1.0
1111
github.com/sahilm/fuzzy v0.1.1
@@ -21,16 +21,21 @@ require (
2121

2222
require (
2323
al.essio.dev/pkg/shellescape v1.5.1 // indirect
24+
charm.land/lipgloss/v2 v2.0.0 // indirect
2425
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
2526
github.com/catppuccin/go v0.3.0 // indirect
26-
github.com/charmbracelet/colorprofile v0.4.1 // indirect
27+
github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 // indirect
28+
github.com/charmbracelet/bubbletea v1.3.6 // indirect
29+
github.com/charmbracelet/colorprofile v0.4.2 // indirect
30+
github.com/charmbracelet/ultraviolet v0.0.0-20260205113103-524a6607adb8 // indirect
2731
github.com/charmbracelet/x/ansi v0.11.6 // indirect
2832
github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
2933
github.com/charmbracelet/x/exp/strings v0.0.0-20241222104055-e1130b311607 // indirect
3034
github.com/charmbracelet/x/term v0.2.2 // indirect
31-
github.com/clipperhouse/displaywidth v0.9.0 // indirect
32-
github.com/clipperhouse/stringish v0.1.1 // indirect
33-
github.com/clipperhouse/uax29/v2 v2.5.0 // indirect
35+
github.com/charmbracelet/x/termios v0.1.1 // indirect
36+
github.com/charmbracelet/x/windows v0.2.2 // indirect
37+
github.com/clipperhouse/displaywidth v0.11.0 // indirect
38+
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
3439
github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
3540
github.com/danieljoos/wincred v1.2.2 // indirect
3641
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
@@ -42,7 +47,7 @@ require (
4247
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
4348
github.com/mattn/go-isatty v0.0.20 // indirect
4449
github.com/mattn/go-localereader v0.0.1 // indirect
45-
github.com/mattn/go-runewidth v0.0.19 // indirect
50+
github.com/mattn/go-runewidth v0.0.20 // indirect
4651
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
4752
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
4853
github.com/muesli/cancelreader v0.2.2 // indirect

go.sum

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
al.essio.dev/pkg/shellescape v1.5.1 h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXyho=
22
al.essio.dev/pkg/shellescape v1.5.1/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890=
3+
charm.land/bubbles/v2 v2.0.0 h1:tE3eK/pHjmtrDiRdoC9uGNLgpopOd8fjhEe31B/ai5s=
4+
charm.land/bubbles/v2 v2.0.0/go.mod h1:rCHoleP2XhU8um45NTuOWBPNVHxnkXKTiZqcclL/qOI=
5+
charm.land/bubbletea/v2 v2.0.2 h1:4CRtRnuZOdFDTWSff9r8QFt/9+z6Emubz3aDMnf/dx0=
6+
charm.land/bubbletea/v2 v2.0.2/go.mod h1:3LRff2U4WIYXy7MTxfbAQ+AdfM3D8Xuvz2wbsOD9OHQ=
7+
charm.land/lipgloss/v2 v2.0.0 h1:sd8N/B3x892oiOjFfBQdXBQp3cAkvjGaU5TvVZC3ivo=
8+
charm.land/lipgloss/v2 v2.0.0/go.mod h1:w6SnmsBFBmEFBodiEDurGS/sdUY/u1+v72DqUzc6J14=
39
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
410
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
511
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
612
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
713
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
814
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
9-
github.com/aymanbagabas/go-udiff v0.3.1 h1:LV+qyBQ2pqe0u42ZsUEtPiCaUoqgA9gYRDs3vj1nolY=
10-
github.com/aymanbagabas/go-udiff v0.3.1/go.mod h1:G0fsKmG+P6ylD0r6N/KgQD/nWzgfnl8ZBcNLgcbrw8E=
15+
github.com/aymanbagabas/go-udiff v0.4.0 h1:TKnLPh7IbnizJIBKFWa9mKayRUBQ9Kh1BPCk6w2PnYM=
16+
github.com/aymanbagabas/go-udiff v0.4.0/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w=
1117
github.com/catppuccin/go v0.3.0 h1:d+0/YicIq+hSTo5oPuRi5kOpqkVA5tAsU6dNhvRu+aY=
1218
github.com/catppuccin/go v0.3.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc=
13-
github.com/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc=
14-
github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E=
15-
github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw=
16-
github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4=
17-
github.com/charmbracelet/colorprofile v0.4.1 h1:a1lO03qTrSIRaK8c3JRxJDZOvhvIeSco3ej+ngLk1kk=
18-
github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk=
19+
github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 h1:JFgG/xnwFfbezlUnFMJy0nusZvytYysV4SCS2cYbvws=
20+
github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7/go.mod h1:ISC1gtLcVilLOf23wvTfoQuYbW2q0JevFxPfUzZ9Ybw=
21+
github.com/charmbracelet/bubbletea v1.3.6 h1:VkHIxPJQeDt0aFJIsVxw8BQdh/F/L2KKZGsK6et5taU=
22+
github.com/charmbracelet/bubbletea v1.3.6/go.mod h1:oQD9VCRQFF8KplacJLo28/jofOI2ToOfGYeFgBBxHOc=
23+
github.com/charmbracelet/colorprofile v0.4.2 h1:BdSNuMjRbotnxHSfxy+PCSa4xAmz7szw70ktAtWRYrY=
24+
github.com/charmbracelet/colorprofile v0.4.2/go.mod h1:0rTi81QpwDElInthtrQ6Ni7cG0sDtwAd4C4le060fT8=
1925
github.com/charmbracelet/huh v0.8.0 h1:Xz/Pm2h64cXQZn/Jvele4J3r7DDiqFCNIVteYukxDvY=
2026
github.com/charmbracelet/huh v0.8.0/go.mod h1:5YVc+SlZ1IhQALxRPpkGwwEKftN/+OlJlnJYlDRFqN4=
2127
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
2228
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
29+
github.com/charmbracelet/ultraviolet v0.0.0-20260205113103-524a6607adb8 h1:eyFRbAmexyt43hVfeyBofiGSEmJ7krjLOYt/9CF5NKA=
30+
github.com/charmbracelet/ultraviolet v0.0.0-20260205113103-524a6607adb8/go.mod h1:SQpCTRNBtzJkwku5ye4S3HEuthAlGy2n9VXZnWkEW98=
2331
github.com/charmbracelet/x/ansi v0.11.6 h1:GhV21SiDz/45W9AnV2R61xZMRri5NlLnl6CVF7ihZW8=
2432
github.com/charmbracelet/x/ansi v0.11.6/go.mod h1:2JNYLgQUsyqaiLovhU2Rv/pb8r6ydXKS3NIttu3VGZQ=
2533
github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI=
@@ -28,22 +36,22 @@ github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSTh
2836
github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ=
2937
github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA=
3038
github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0=
31-
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ=
32-
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
39+
github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA=
40+
github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f/go.mod h1:IfZAMTHB6XkZSeXUqriemErjAWCCzT0LwjKFYCZyw0I=
3341
github.com/charmbracelet/x/exp/strings v0.0.0-20241222104055-e1130b311607 h1:D5Di9oyZpU7yeL2wkc5E4VaCXyg+8QYYN4kxMsLufDs=
3442
github.com/charmbracelet/x/exp/strings v0.0.0-20241222104055-e1130b311607/go.mod h1:pBhA0ybfXv6hDjQUZ7hk1lVxBiUbupdw5R31yPUViVQ=
3543
github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
3644
github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
3745
github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY=
3846
github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo=
47+
github.com/charmbracelet/x/windows v0.2.2 h1:IofanmuvaxnKHuV04sC0eBy/smG6kIKrWG2/jYn2GuM=
48+
github.com/charmbracelet/x/windows v0.2.2/go.mod h1:/8XtdKZzedat74NQFn0NGlGL4soHB0YQZrETF96h75k=
3949
github.com/charmbracelet/x/xpty v0.1.2 h1:Pqmu4TEJ8KeA9uSkISKMU3f+C1F6OGBn8ABuGlqCbtI=
4050
github.com/charmbracelet/x/xpty v0.1.2/go.mod h1:XK2Z0id5rtLWcpeNiMYBccNNBrP2IJnzHI0Lq13Xzq4=
41-
github.com/clipperhouse/displaywidth v0.9.0 h1:Qb4KOhYwRiN3viMv1v/3cTBlz3AcAZX3+y9OLhMtAtA=
42-
github.com/clipperhouse/displaywidth v0.9.0/go.mod h1:aCAAqTlh4GIVkhQnJpbL0T/WfcrJXHcj8C0yjYcjOZA=
43-
github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs=
44-
github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA=
45-
github.com/clipperhouse/uax29/v2 v2.5.0 h1:x7T0T4eTHDONxFJsL94uKNKPHrclyFI0lm7+w94cO8U=
46-
github.com/clipperhouse/uax29/v2 v2.5.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g=
51+
github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8=
52+
github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0=
53+
github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
54+
github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
4755
github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=
4856
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
4957
github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
@@ -118,8 +126,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
118126
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
119127
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
120128
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
121-
github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
122-
github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
129+
github.com/mattn/go-runewidth v0.0.20 h1:WcT52H91ZUAwy8+HUkdM3THM6gXqXuLJi9O3rjcQQaQ=
130+
github.com/mattn/go-runewidth v0.0.20/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
123131
github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
124132
github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
125133
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=

pkg/utils/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"strings"
2525
"syscall"
2626

27-
"github.com/charmbracelet/bubbles/table"
27+
"charm.land/bubbles/v2/table"
2828
"github.com/goharbor/go-client/pkg/sdk/v2.0/client/user"
2929
uview "github.com/goharbor/harbor-cli/pkg/views/user/select"
3030
log "github.com/sirupsen/logrus"

pkg/views/artifact/list/view.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import (
1919
"strconv"
2020
"strings"
2121

22-
"github.com/charmbracelet/bubbles/table"
23-
tea "github.com/charmbracelet/bubbletea"
22+
"charm.land/bubbles/v2/table"
23+
tea "charm.land/bubbletea/v2"
2424
"github.com/goharbor/go-client/pkg/sdk/v2.0/models"
2525
"github.com/goharbor/harbor-cli/pkg/utils"
2626
"github.com/goharbor/harbor-cli/pkg/views/base/tablelist"

pkg/views/artifact/select/view.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import (
1717
"fmt"
1818
"os"
1919

20-
"github.com/charmbracelet/bubbles/list"
21-
tea "github.com/charmbracelet/bubbletea"
20+
"charm.land/bubbles/v2/list"
21+
tea "charm.land/bubbletea/v2"
2222
"github.com/goharbor/go-client/pkg/sdk/v2.0/models"
2323
"github.com/goharbor/harbor-cli/pkg/views/base/selection"
2424
)
@@ -32,7 +32,7 @@ func ListArtifacts(artifacts []*models.Artifact, choice chan<- string) {
3232

3333
m := selection.NewModel(itemsList, "Artifact")
3434

35-
p, err := tea.NewProgram(m, tea.WithAltScreen()).Run()
35+
p, err := tea.NewProgram(m).Run()
3636
if err != nil {
3737
fmt.Println("Error running program:", err)
3838
os.Exit(1)

pkg/views/artifact/tags/list/view.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import (
1717
"fmt"
1818
"os"
1919

20-
"github.com/charmbracelet/bubbles/table"
21-
tea "github.com/charmbracelet/bubbletea"
20+
"charm.land/bubbles/v2/table"
21+
tea "charm.land/bubbletea/v2"
2222
"github.com/goharbor/go-client/pkg/sdk/v2.0/models"
2323
"github.com/goharbor/harbor-cli/pkg/utils"
2424
"github.com/goharbor/harbor-cli/pkg/views/base/tablelist"

pkg/views/artifact/tags/select/view.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import (
1717
"fmt"
1818
"os"
1919

20-
"github.com/charmbracelet/bubbles/list"
21-
tea "github.com/charmbracelet/bubbletea"
20+
"charm.land/bubbles/v2/list"
21+
tea "charm.land/bubbletea/v2"
2222
"github.com/goharbor/go-client/pkg/sdk/v2.0/models"
2323
"github.com/goharbor/harbor-cli/pkg/views/base/selection"
2424
)
@@ -32,7 +32,7 @@ func ListTags(tag []*models.Tag, choice chan<- string) {
3232

3333
m := selection.NewModel(itemsList, "Tag")
3434

35-
p, err := tea.NewProgram(m, tea.WithAltScreen()).Run()
35+
p, err := tea.NewProgram(m).Run()
3636

3737
if err != nil {
3838
fmt.Println("Error running program:", err)

pkg/views/artifact/view/view.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import (
2020
"strconv"
2121
"strings"
2222

23-
"github.com/charmbracelet/bubbles/table"
24-
tea "github.com/charmbracelet/bubbletea"
23+
"charm.land/bubbles/v2/table"
24+
tea "charm.land/bubbletea/v2"
2525
"github.com/goharbor/go-client/pkg/sdk/v2.0/models"
2626
"github.com/goharbor/harbor-cli/pkg/utils"
2727
"github.com/goharbor/harbor-cli/pkg/views/base/tablelist"

pkg/views/base/multiselect/model.go

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@ import (
1717
"fmt"
1818
"strings"
1919

20-
"github.com/charmbracelet/bubbles/viewport"
21-
tea "github.com/charmbracelet/bubbletea"
22-
"github.com/charmbracelet/lipgloss"
20+
"charm.land/bubbles/v2/viewport"
21+
tea "charm.land/bubbletea/v2"
22+
"charm.land/lipgloss/v2"
2323
"github.com/goharbor/go-client/pkg/sdk/v2.0/models"
2424
)
2525

26-
const useHighPerformanceRenderer = false
27-
2826
var (
2927
titleStyle = func() lipgloss.Style {
3028
b := lipgloss.RoundedBorder()
@@ -67,7 +65,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
6765
)
6866

6967
switch msg := msg.(type) {
70-
case tea.KeyMsg:
68+
case tea.KeyPressMsg:
7169
switch msg.String() {
7270
case "ctrl+c", "q", "esc":
7371
return m, tea.Quit
@@ -82,7 +80,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
8280
if m.cursor < len(m.choices)-1 {
8381
m.cursor++
8482
}
85-
case "enter", " ":
83+
case "enter", "space":
8684
_, ok := m.selected[m.cursor]
8785
if ok {
8886
delete(m.selected, m.cursor)
@@ -97,19 +95,17 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
9795
verticalMarginHeight := headerHeight + footerHeight
9896

9997
if !m.ready {
100-
m.viewport = viewport.New(msg.Width, msg.Height-verticalMarginHeight)
98+
m.viewport = viewport.New(
99+
viewport.WithWidth(msg.Width),
100+
viewport.WithHeight(msg.Height-verticalMarginHeight),
101+
)
101102
m.viewport.YPosition = headerHeight
102-
m.viewport.HighPerformanceRendering = useHighPerformanceRenderer
103103
m.viewport.SetContent(m.listView())
104104
m.ready = true
105105
m.viewport.YPosition = headerHeight - 1
106106
} else {
107-
m.viewport.Width = msg.Width
108-
m.viewport.Height = msg.Height - verticalMarginHeight - 1
109-
}
110-
111-
if useHighPerformanceRenderer {
112-
cmds = append(cmds, viewport.Sync(m.viewport))
107+
m.viewport.SetWidth(msg.Width)
108+
m.viewport.SetHeight(msg.Height - verticalMarginHeight - 1)
113109
}
114110
}
115111

@@ -120,16 +116,18 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
120116
return m, tea.Batch(cmds...)
121117
}
122118

123-
func (m Model) View() string {
119+
func (m Model) View() tea.View {
124120
if !m.ready {
125-
return "\n Initializing..."
121+
return tea.NewView("\n Initializing...")
126122
}
127-
return fmt.Sprintf("%s\n%s\n%s", m.headerView(), m.viewport.View(), m.footerView())
123+
v := tea.NewView(fmt.Sprintf("%s\n%s\n%s", m.headerView(), m.viewport.View(), m.footerView()))
124+
v.AltScreen = true
125+
return v
128126
}
129127

130128
func (m Model) headerView() string {
131129
title := titleStyle.Render("Select Permissions for Robot Account")
132-
line := strings.Repeat("─", max(0, m.viewport.Width-lipgloss.Width(title)))
130+
line := strings.Repeat("─", max(0, m.viewport.Width()-lipgloss.Width(title)))
133131
return lipgloss.JoinHorizontal(lipgloss.Center, title, line)
134132
}
135133

@@ -140,7 +138,7 @@ func (m Model) footerView() string {
140138
),
141139
)
142140
info := infoStyle.Render(fmt.Sprintf("%3.f%%", m.viewport.ScrollPercent()*100))
143-
line := strings.Repeat("─", max(0, m.viewport.Width-lipgloss.Width(info)-lipgloss.Width(help)))
141+
line := strings.Repeat("─", max(0, m.viewport.Width()-lipgloss.Width(info)-lipgloss.Width(help)))
144142
return lipgloss.JoinHorizontal(lipgloss.Center, help, line, info)
145143
}
146144

@@ -191,13 +189,6 @@ func (m Model) GetSelectedPermissions() *[]models.Permission {
191189
return m.selects
192190
}
193191

194-
func max(a, b int) int {
195-
if a > b {
196-
return a
197-
}
198-
return b
199-
}
200-
201192
func NewModel(choices []models.Permission, selects *[]models.Permission) Model {
202193
return Model{
203194
choices: choices,

0 commit comments

Comments
 (0)