Browse Source

d02 Обновление вендоринга

SVI 2 years ago
parent
commit
3389d959a1

+ 22 - 0
vendor/fyne.io/fyne/v2/CHANGELOG.md

@@ -3,6 +3,28 @@
 This file lists the main changes with each version of the Fyne toolkit.
 More detailed release notes can be found on the [releases page](https://github.com/fyne-io/fyne/releases). 
 
+## 2.3.5 - 6 June 2023
+
+### Fixed
+
+* Panic with unsupported font (#3646)
+* Temporary manifest file not closed after building on Windows
+* Panic when using autogenerated quit menu and having unshown windows (#3870)
+* Using `canvas.ImageScaleFastest` not working on arm64 (#3891)
+* Disabled password Entry should also disable the ActionItem (#3908)
+* Disabled RadioGroup does not display status (#3882)
+* Negative TableCellID Row (#2857)
+* Make sure we have sufficient space for the bar as well if content is tiny (#3898)
+* Leak in image painter when replacing image.Image source regularly
+* Links in Markdown/Rich Text lists breaks formatting (#2911)
+* Crash when reducing window to taskbar with popup opened (#3877)
+* RichText vertical scroll will truncate long content with horizontal lines (#3929)
+* Custom metadata would not apply with `fyne release` command
+* Horizontal CheckGroup overlap when having long text (#3005)
+* Fix focused colour of coloured buttons (#3462)
+* Menu separator not visible with light theme (#3814)
+
+
 ## 2.3.4 - 3 May 2023
 
 ### Fixed

+ 8 - 4
vendor/fyne.io/fyne/v2/README.md

@@ -31,6 +31,10 @@ Using the standard go tools you can install Fyne's core library using:
 
     go get fyne.io/fyne/v2
 
+After importing a new module, run the following command before compiling the code for the first time. Avoid running it before writing code that uses the module to prevent accidental removal of dependencies:
+
+    go mod tidy
+
 # Widget demo
 
 To run a showcase of the features of Fyne execute the following:
@@ -177,10 +181,10 @@ However, if looking to support Fyne in a bigger way on your operating system the
 
 It is recommended that you install the following additional apps:
 
-| app | go install | description |
-| --- | ------ | ----------- |
-| fyne_settings | `fyne.io/fyne/v2/cmd/fyne_settings` | A GUI for managing your global Fyne settings like theme and scaling |
-| apps | `github.com/fyne-io/apps` | A graphical installer for the Fyne apps listed at https://apps.fyne.io |
+| app           | go install                          | description                                                            |
+| ------------- | ----------------------------------- | ---------------------------------------------------------------------- |
+| fyne_settings | `fyne.io/fyne/v2/cmd/fyne_settings` | A GUI for managing your global Fyne settings like theme and scaling    |
+| apps          | `github.com/fyne-io/apps`           | A graphical installer for the Fyne apps listed at https://apps.fyne.io |
 
 These are optional applications but can help to create a more complete desktop experience.
 

+ 20 - 2
vendor/fyne.io/fyne/v2/container/tabs.go

@@ -365,7 +365,23 @@ func (r *baseTabsRenderer) layout(t baseTabs, size fyne.Size) {
 }
 
 func (r *baseTabsRenderer) minSize(t baseTabs) fyne.Size {
+	pad := theme.Padding()
+	buttonPad := pad
 	barMin := r.bar.MinSize()
+	tabsMin := r.bar.Objects[0].MinSize()
+	accessory := r.bar.Objects[1]
+	accessoryMin := accessory.MinSize()
+	if scroll, ok := r.bar.Objects[0].(*Scroll); ok && len(scroll.Content.(*fyne.Container).Objects) == 0 {
+		tabsMin = fyne.Size{} // scroller forces 32 where we don't need any space
+		buttonPad = 0
+	} else if group, ok := r.bar.Objects[0].(*fyne.Container); ok && len(group.Objects) > 0 {
+		tabsMin = group.Objects[0].MinSize()
+		buttonPad = 0
+	}
+	if !accessory.Visible() || accessoryMin.Width == 0 {
+		buttonPad = 0
+		accessoryMin = fyne.Size{}
+	}
 
 	contentMin := fyne.NewSize(0, 0)
 	for _, content := range t.items() {
@@ -374,9 +390,11 @@ func (r *baseTabsRenderer) minSize(t baseTabs) fyne.Size {
 
 	switch t.tabLocation() {
 	case TabLocationLeading, TabLocationTrailing:
-		return fyne.NewSize(barMin.Width+contentMin.Width+theme.Padding(), contentMin.Height)
+		return fyne.NewSize(barMin.Width+contentMin.Width+pad,
+			fyne.Max(contentMin.Height, accessoryMin.Height+buttonPad+tabsMin.Height))
 	default:
-		return fyne.NewSize(contentMin.Width, barMin.Height+contentMin.Height+theme.Padding())
+		return fyne.NewSize(fyne.Max(contentMin.Width, accessoryMin.Width+buttonPad+tabsMin.Width),
+			barMin.Height+contentMin.Height+pad)
 	}
 }
 

+ 23 - 6
vendor/fyne.io/fyne/v2/internal/driver/glfw/driver_desktop.go

@@ -121,12 +121,7 @@ func (d *gLDriver) refreshSystray(m *fyne.Menu) {
 	systray.ResetMenu()
 	d.refreshSystrayMenu(m, nil)
 
-	systray.AddSeparator()
-	quit := systray.AddMenuItem("Quit", "Quit application")
-	go func() {
-		<-quit.ClickedCh
-		d.Quit()
-	}()
+	addMissingQuitForMenu(m, d)
 }
 
 func (d *gLDriver) refreshSystrayMenu(m *fyne.Menu, parent *systray.MenuItem) {
@@ -165,3 +160,25 @@ func (d *gLDriver) SetSystemTrayIcon(resource fyne.Resource) {
 func (d *gLDriver) SystemTrayMenu() *fyne.Menu {
 	return d.systrayMenu
 }
+
+func addMissingQuitForMenu(menu *fyne.Menu, d *gLDriver) {
+	var lastItem *fyne.MenuItem
+	if len(menu.Items) > 0 {
+		lastItem = menu.Items[len(menu.Items)-1]
+		if lastItem.Label == "Quit" {
+			lastItem.IsQuit = true
+		}
+	}
+	if lastItem == nil || !lastItem.IsQuit { // make sure the menu always has a quit option
+		quitItem := fyne.NewMenuItem("Quit", nil)
+		quitItem.IsQuit = true
+		menu.Items = append(menu.Items, fyne.NewMenuItemSeparator(), quitItem)
+	}
+	for _, item := range menu.Items {
+		if item.IsQuit && item.Action == nil {
+			item.Action = func() {
+				d.Quit()
+			}
+		}
+	}
+}

+ 2 - 2
vendor/fyne.io/fyne/v2/internal/driver/glfw/menu.go

@@ -10,11 +10,11 @@ func buildMenuOverlay(menus *fyne.MainMenu, w *window) fyne.CanvasObject {
 		return nil
 	}
 
-	menus = addMissingQuit(menus, w)
+	menus = addMissingQuitForMainMenu(menus, w)
 	return NewMenuBar(menus, w.canvas)
 }
 
-func addMissingQuit(menus *fyne.MainMenu, w *window) *fyne.MainMenu {
+func addMissingQuitForMainMenu(menus *fyne.MainMenu, w *window) *fyne.MainMenu {
 	var lastItem *fyne.MenuItem
 	if len(menus.Items[0].Items) > 0 {
 		lastItem = menus.Items[0].Items[len(menus.Items[0].Items)-1]

+ 3 - 1
vendor/fyne.io/fyne/v2/internal/driver/glfw/window_desktop.go

@@ -317,7 +317,9 @@ func (w *window) refresh(_ *glfw.Window) {
 }
 
 func (w *window) closed(viewport *glfw.Window) {
-	viewport.SetShouldClose(false) // reset the closed flag until we check the veto in processClosed
+	if viewport != nil {
+		viewport.SetShouldClose(false) // reset the closed flag until we check the veto in processClosed
+	}
 
 	w.processClosed()
 }

+ 4 - 0
vendor/fyne.io/fyne/v2/internal/driver/mobile/driver.go

@@ -288,6 +288,10 @@ func (d *mobileDriver) paintWindow(window fyne.Window, size fyne.Size) {
 			inner := clips.Push(pos, obj.Size())
 			c.Painter().StartClipping(inner.Rect())
 		}
+
+		if size.Width <= 0 || size.Height <= 0 { // iconifying on Windows can do bad things
+			return
+		}
 		c.Painter().Paint(obj, pos, size)
 	}
 	afterDraw := func(node *common.RenderCacheNode) {

+ 16 - 0
vendor/fyne.io/fyne/v2/internal/painter/font.go

@@ -84,18 +84,33 @@ func CachedFontFace(style fyne.TextStyle, fontDP float32, texScale float32) (fon
 		switch {
 		case style.Monospace:
 			measureFace = loadMeasureFont(theme.TextMonospaceFont())
+			if measureFace == nil {
+				measureFace = loadMeasureFont(theme.DefaultTextMonospaceFont())
+			}
 		case style.Bold:
 			if style.Italic {
 				measureFace = loadMeasureFont(theme.TextBoldItalicFont())
+				if measureFace == nil {
+					measureFace = loadMeasureFont(theme.DefaultTextBoldItalicFont())
+				}
 			} else {
 				measureFace = loadMeasureFont(theme.TextBoldFont())
+				if measureFace == nil {
+					measureFace = loadMeasureFont(theme.DefaultTextBoldFont())
+				}
 			}
 		case style.Italic:
 			measureFace = loadMeasureFont(theme.TextItalicFont())
+			if measureFace == nil {
+				measureFace = loadMeasureFont(theme.DefaultTextItalicFont())
+			}
 		case style.Symbol:
 			measureFace = loadMeasureFont(theme.DefaultSymbolFont())
 		default:
 			measureFace = loadMeasureFont(theme.TextFont())
+			if measureFace == nil {
+				measureFace = loadMeasureFont(theme.DefaultTextFont())
+			}
 		}
 
 		comp.facesMutex.Lock()
@@ -148,6 +163,7 @@ func loadMeasureFont(data fyne.Resource) gotext.Face {
 	loaded, err := gotext.ParseTTF(bytes.NewReader(data.Content()))
 	if err != nil {
 		fyne.LogError("font load error", err)
+		return nil
 	}
 
 	return loaded

+ 1 - 1
vendor/fyne.io/fyne/v2/internal/painter/gl/gl_es.go

@@ -67,7 +67,7 @@ type (
 	Uniform int32
 )
 
-var textureFilterToGL = []int32{gl.LINEAR, gl.NEAREST}
+var textureFilterToGL = []int32{gl.LINEAR, gl.NEAREST, gl.LINEAR}
 
 func (p *painter) Init() {
 	p.ctx = &esContext{}

+ 8 - 1
vendor/fyne.io/fyne/v2/internal/painter/image.go

@@ -29,6 +29,11 @@ func GetAspect(img *canvas.Image) float32 {
 		aspect = aspects[img.Resource.Name()]
 	} else if img.File != "" {
 		aspect = aspects[img.File]
+	} else if img.Image != nil {
+		// HOTFIX until Fyne 2.4 proper fix:
+		// we are not storing the aspect ratio in the map for the image.Image case
+		size := img.Image.Bounds().Size()
+		return float32(size.X) / float32(size.Y)
 	}
 
 	if aspect == 0 {
@@ -132,7 +137,9 @@ func paintImage(img *canvas.Image, width, height int, wantOrigSize bool, wantOri
 	case img.Image != nil:
 		origSize := img.Image.Bounds().Size()
 		origW, origH = origSize.X, origSize.Y
-		if checkSize(origSize.X, origSize.Y) {
+		// HOTFIX until Fyne 2.4: don't store aspect ratio in map, as checkSize(x, y) does.
+		// Doing so leaks a reference to the image.Image data
+		if !wantOrigSize || (wantOrigW == origW && wantOrigH == origH) {
 			dst = scaleImage(img.Image, width, height, img.ScaleMode)
 		}
 	default:

+ 1 - 1
vendor/fyne.io/fyne/v2/theme/theme.go

@@ -760,7 +760,7 @@ func lightPaletColorNamed(name fyne.ThemeColorName) color.Color {
 	case ColorNameScrollBar:
 		return color.NRGBA{A: 0x99}
 	case ColorNameSeparator:
-		return color.NRGBA{R: 0xf5, G: 0xf5, B: 0xf5, A: 0xff}
+		return color.NRGBA{R: 0xe3, G: 0xe3, B: 0xe3, A: 0xff}
 	case ColorNameShadow:
 		return color.NRGBA{A: 0x33}
 	case ColorNameSuccess:

+ 15 - 2
vendor/fyne.io/fyne/v2/widget/button.go

@@ -231,7 +231,16 @@ func (b *Button) buttonColor() color.Color {
 		}
 		return theme.DisabledButtonColor()
 	case b.focused:
-		return blendColor(theme.ButtonColor(), theme.FocusColor())
+		bg := theme.ButtonColor()
+		if b.Importance == HighImportance {
+			bg = theme.PrimaryColor()
+		} else if b.Importance == DangerImportance {
+			bg = theme.ErrorColor()
+		} else if b.Importance == WarningImportance {
+			bg = theme.WarningColor()
+		}
+
+		return blendColor(bg, theme.FocusColor())
 	case b.hovered:
 		bg := theme.ButtonColor()
 		if b.Importance == HighImportance {
@@ -356,7 +365,11 @@ func (r *buttonRenderer) applyTheme() {
 	case r.button.disabled:
 		r.label.Segments[0].(*TextSegment).Style.ColorName = theme.ColorNameDisabled
 	case r.button.Importance == HighImportance || r.button.Importance == DangerImportance || r.button.Importance == WarningImportance:
-		r.label.Segments[0].(*TextSegment).Style.ColorName = theme.ColorNameBackground
+		if r.button.focused {
+			r.label.Segments[0].(*TextSegment).Style.ColorName = theme.ColorNameForeground
+		} else {
+			r.label.Segments[0].(*TextSegment).Style.ColorName = theme.ColorNameBackground
+		}
 	}
 	r.label.Refresh()
 	if r.icon != nil && r.icon.Resource != nil {

+ 9 - 7
vendor/fyne.io/fyne/v2/widget/check_group.go

@@ -217,13 +217,15 @@ func (r *checkGroupRenderer) MinSize() fyne.Size {
 	height := float32(0)
 	for _, item := range r.items {
 		itemMin := item.MinSize()
-		if r.checks.Horizontal {
-			height = fyne.Max(height, itemMin.Height)
-			width += itemMin.Width
-		} else {
-			width = fyne.Max(width, itemMin.Width)
-			height += itemMin.Height
-		}
+
+		width = fyne.Max(width, itemMin.Width)
+		height = fyne.Max(height, itemMin.Height)
+	}
+
+	if r.checks.Horizontal {
+		width = width * float32(len(r.items))
+	} else {
+		height = height * float32(len(r.items))
 	}
 
 	return fyne.NewSize(width, height)

+ 8 - 0
vendor/fyne.io/fyne/v2/widget/entry_password.go

@@ -40,6 +40,10 @@ func (r *passwordRevealer) Cursor() desktop.Cursor {
 }
 
 func (r *passwordRevealer) Tapped(*fyne.PointEvent) {
+	if r.entry.Disabled() {
+		return
+	}
+
 	r.entry.setFieldsAndRefresh(func() {
 		r.entry.Password = !r.entry.Password
 	})
@@ -71,5 +75,9 @@ func (r *passwordRevealerRenderer) Refresh() {
 	} else {
 		r.icon.Resource = theme.VisibilityOffIcon()
 	}
+
+	if r.entry.disabled {
+		r.icon.Resource = theme.NewDisabledResource(r.icon.Resource)
+	}
 	canvas.Refresh(r.icon)
 }

+ 5 - 1
vendor/fyne.io/fyne/v2/widget/radio_item.go

@@ -205,7 +205,11 @@ func (r *radioItemRenderer) update() {
 		out.ColorName = theme.ColorNameForeground
 	}
 	if r.item.Disabled() {
-		in.ColorName = theme.ColorNameBackground
+		if r.item.Selected {
+			in.ColorName = theme.ColorNameDisabled
+		} else {
+			in.ColorName = theme.ColorNameBackground
+		}
 		out.ColorName = theme.ColorNameDisabled
 	}
 	r.icon.Resource = in

+ 10 - 5
vendor/fyne.io/fyne/v2/widget/richtext.go

@@ -352,14 +352,16 @@ func (t *RichText) updateRowBounds() {
 	maxWidth := t.size.Width - 2*innerPadding + 2*t.inset.Width
 	wrapWidth := maxWidth
 
+	var currentBound *rowBoundary
 	var iterateSegments func(segList []RichTextSegment)
 	iterateSegments = func(segList []RichTextSegment) {
-		var currentBound *rowBoundary
 		for _, seg := range segList {
 			if parent, ok := seg.(RichTextBlock); ok {
-				iterateSegments(parent.Segments())
-				if !seg.Inline() {
+				segs := parent.Segments()
+				iterateSegments(segs)
+				if len(segs) > 0 && !segs[len(segs)-1].Inline() {
 					wrapWidth = maxWidth
+					currentBound = nil
 				}
 				continue
 			}
@@ -464,7 +466,8 @@ func (r *textRenderer) Layout(size fyne.Size) {
 	innerPadding := theme.InnerPadding()
 	lineSpacing := theme.LineSpacing()
 
-	left := innerPadding - r.obj.inset.Width
+	xInset := innerPadding - r.obj.inset.Width
+	left := xInset
 	yPos := innerPadding - r.obj.inset.Height
 	lineWidth := size.Width - left*2
 	var rowItems []fyne.CanvasObject
@@ -483,12 +486,14 @@ func (r *textRenderer) Layout(size fyne.Size) {
 				if len(rowItems) != 0 {
 					width, _ := r.layoutRow(rowItems, rowAlign, left, yPos, lineWidth)
 					left += width
+					rowItems = nil
 				}
 				height := obj.MinSize().Height
 
 				obj.Move(fyne.NewPos(left, yPos))
 				obj.Resize(fyne.NewSize(lineWidth, height))
-				yPos += height + lineSpacing
+				yPos += height
+				left = xInset
 				continue
 			}
 			rowItems = append(rowItems, obj)

+ 4 - 10
vendor/fyne.io/fyne/v2/widget/richtext_objects.go

@@ -226,16 +226,10 @@ func (l *ListSegment) Segments() []RichTextSegment {
 			txt = strconv.Itoa(i+1) + "."
 		}
 		bullet := &TextSegment{Text: txt + " ", Style: RichTextStyleStrong}
-		if para, ok := in.(*ParagraphSegment); ok {
-			seg := &ParagraphSegment{Texts: []RichTextSegment{bullet}}
-			seg.Texts = append(seg.Texts, para.Texts...)
-			out[i] = seg
-		} else {
-			out[i] = &ParagraphSegment{Texts: []RichTextSegment{
-				bullet,
-				in,
-			}}
-		}
+		out[i] = &ParagraphSegment{Texts: []RichTextSegment{
+			bullet,
+			in,
+		}}
 	}
 	return out
 }

+ 6 - 0
vendor/fyne.io/fyne/v2/widget/table.go

@@ -222,6 +222,9 @@ func (t *Table) ScrollToBottom() {
 	rows, _ := t.Length()
 	cellY, cellHeight := t.findY(rows - 1)
 	y := cellY + cellHeight - t.scroll.Size().Height
+	if y <= 0 {
+		return
+	}
 
 	t.scroll.Offset.Y = y
 	t.offset.Y = y
@@ -265,6 +268,9 @@ func (t *Table) ScrollToTrailing() {
 	_, cols := t.Length()
 	cellX, cellWidth := t.findX(cols - 1)
 	scrollX := cellX + cellWidth - t.scroll.Size().Width
+	if scrollX <= 0 {
+		return
+	}
 
 	t.scroll.Offset.X = scrollX
 	t.offset.X = scrollX

+ 2 - 2
vendor/fyne.io/systray/systray_menu_unix.go

@@ -319,7 +319,7 @@ func refresh() {
 	dbusErr := instance.menuProps.Set("com.canonical.dbusmenu", "Version",
 		dbus.MakeVariant(instance.menuVersion))
 	if dbusErr != nil {
-		log.Printf("systray error: failed to update menu version: %s\n", dbusErr)
+		log.Printf("systray error: failed to update menu version: %v\n", dbusErr)
 		return
 	}
 	err := menu.Emit(instance.conn, &menu.Dbusmenu_LayoutUpdatedSignal{
@@ -329,7 +329,7 @@ func refresh() {
 		},
 	})
 	if err != nil {
-		log.Printf("systray error: failed to emit layout updated signal: %s\n", err)
+		log.Printf("systray error: failed to emit layout updated signal: %v\n", err)
 	}
 
 }

+ 8 - 12
vendor/fyne.io/systray/systray_unix.go

@@ -60,12 +60,8 @@ func SetIcon(iconBytes []byte) {
 		return
 	}
 
-	dbusErr := props.Set("org.kde.StatusNotifierItem", "IconPixmap",
-		dbus.MakeVariant([]PX{convertToPixels(iconBytes)}))
-	if dbusErr != nil {
-		log.Printf("systray error: failed to set IconPixmap prop: %s\n", dbusErr)
-		return
-	}
+	props.SetMust("org.kde.StatusNotifierItem", "IconPixmap",
+		[]PX{convertToPixels(iconBytes)})
 	if conn == nil {
 		return
 	}
@@ -164,18 +160,18 @@ func quit() {
 
 func nativeStart() {
 	systrayReady()
-	conn, _ := dbus.ConnectSessionBus()
-	if conn == nil {
-		log.Printf("systray error: failed to connect to DBus")
+	conn, err := dbus.SessionBus()
+	if err != nil {
+		log.Printf("systray error: failed to connect to DBus: %v\n", err)
 		return
 	}
-	err := notifier.ExportStatusNotifierItem(conn, path, &notifier.UnimplementedStatusNotifierItem{})
+	err = notifier.ExportStatusNotifierItem(conn, path, &notifier.UnimplementedStatusNotifierItem{})
 	if err != nil {
-		log.Printf("systray error: failed to export status notifier item: %s\n", err)
+		log.Printf("systray error: failed to export status notifier item: %v\n", err)
 	}
 	err = menu.ExportDbusmenu(conn, menuPath, instance)
 	if err != nil {
-		log.Printf("systray error: failed to export status notifier item: %s\n", err)
+		log.Printf("systray error: failed to export status notifier menu: %v\n", err)
 		return
 	}
 

+ 10 - 6
vendor/github.com/charmbracelet/bubbletea/standard_renderer.go

@@ -88,6 +88,11 @@ func (r *standardRenderer) start() {
 
 // stop permanently halts the renderer, rendering the final frame.
 func (r *standardRenderer) stop() {
+	// Stop the renderer before acquiring the mutex to avoid a deadlock.
+	r.once.Do(func() {
+		r.done <- struct{}{}
+	})
+
 	// flush locks the mutex
 	r.flush()
 
@@ -95,9 +100,6 @@ func (r *standardRenderer) stop() {
 	defer r.mtx.Unlock()
 
 	r.out.ClearLine()
-	r.once.Do(func() {
-		r.done <- struct{}{}
-	})
 
 	if r.useANSICompressor {
 		if w, ok := r.out.TTY().(io.WriteCloser); ok {
@@ -108,13 +110,15 @@ func (r *standardRenderer) stop() {
 
 // kill halts the renderer. The final frame will not be rendered.
 func (r *standardRenderer) kill() {
+	// Stop the renderer before acquiring the mutex to avoid a deadlock.
+	r.once.Do(func() {
+		r.done <- struct{}{}
+	})
+
 	r.mtx.Lock()
 	defer r.mtx.Unlock()
 
 	r.out.ClearLine()
-	r.once.Do(func() {
-		r.done <- struct{}{}
-	})
 }
 
 // listen waits for ticks on the ticker, or a signal to stop the renderer.

+ 3 - 3
vendor/modules.txt

@@ -1,4 +1,4 @@
-# fyne.io/fyne/v2 v2.3.4
+# fyne.io/fyne/v2 v2.3.5
 ## explicit; go 1.14
 fyne.io/fyne/v2
 fyne.io/fyne/v2/app
@@ -39,7 +39,7 @@ fyne.io/fyne/v2/storage/repository
 fyne.io/fyne/v2/test
 fyne.io/fyne/v2/theme
 fyne.io/fyne/v2/widget
-# fyne.io/systray v1.10.1-0.20230403195833-7dc3c09283d6
+# fyne.io/systray v1.10.1-0.20230602210930-b6a2d6ca2a7b
 ## explicit; go 1.13
 fyne.io/systray
 fyne.io/systray/internal/generated/menu
@@ -47,7 +47,7 @@ fyne.io/systray/internal/generated/notifier
 # github.com/aymanbagabas/go-osc52/v2 v2.0.1
 ## explicit; go 1.16
 github.com/aymanbagabas/go-osc52/v2
-# github.com/charmbracelet/bubbletea v0.24.1
+# github.com/charmbracelet/bubbletea v0.24.2
 ## explicit; go 1.17
 github.com/charmbracelet/bubbletea
 # github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81