GoSetup-bubble/setup/ui/style.go

245 lines
9.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package ui
import (
"github.com/charmbracelet/lipgloss"
)
const (
ApplicationMinWidth = 60
ApplicationMaxHeight = 40
ApplicationMinHeight = 20
ApplicationHorizontalOffset = 3
ApplicationVerticalOffset = 1
ApplicationContainerPadding = 4
ModalMaxWidth = 50
ModalMaxHeight = 15
ListWithRatio = 0.4
TableWithRatio = 0.8
)
// ContentSizes вычисляет размеры для контейнера внутри окна и контента внутри контейнера.
//
// Принимает 2 параметра типа int, screenWidth и screenHeight ширина и высота окна.
//
// Возвращает 4 значения типа int.
//
// containerWidth это ширина контейнера внутри окна с отступами от левого и правого краёв, и с учетом границ
//
// containerHeight это высота контейнера внутри окна с отступами от верхнего и нижнего краёв, и с учетом границ
//
// contentWidth это ширина контента внутри контейнера с отступами от левого и правого краёв контейнера
//
// contentHeight это высота контента внутри контейнера с отступами от верхнего и нижнего краёв контейнера
func ContentSizes(screenWidth, screenHeight int) (containerWidth, containerHeight, contentWidth, contentHeight int) {
containerWidth = screenWidth - 2*ApplicationHorizontalOffset
if containerWidth < ApplicationMinWidth {
//если ширина слишком маленькая ставим минимальную поддерживаемую
containerWidth = ApplicationMinWidth
}
containerWidth = containerWidth - 2*1
//Вычитаем из ширины контейнера 2 условных единицы для границ
//Пример, окно 70, контейнер будет 64, места для контента тогда 62
containerHeight = screenHeight - 2*ApplicationVerticalOffset
if containerHeight < ApplicationMinHeight {
//если высота слишком маленькая ставим минимально поддерживаемую
containerHeight = ApplicationMinHeight
}
containerHeight = containerHeight - 2*1
//Вычитаем из высоты контейнера 2 условных единицы для границ
//Пример, окно 30, контейнер будет 28, места для контента тогда 26
contentWidth = containerWidth - 2*ApplicationHorizontalOffset
//Вычитаем из ширины контейнера отступы для контента внутри
contentHeight = containerHeight - 2*ApplicationVerticalOffset
//Вычитаем из высоты контейнера отступы для контента внутри
return
}
// Используемые цвета
var (
// ColorForeground = lipgloss.Color("#c0caf5")
// ColorBackground = lipgloss.Color("#1a1b26")
// ColorAccent = lipgloss.Color("#7aa2f7")
// ColorSuccess = lipgloss.Color("#9ece6a")
// ColorError = lipgloss.Color("#f7768e")
// ColorWarning = lipgloss.Color("#e0af68")
// ColorInfo = lipgloss.Color("#7dcfff")
ColorFg = lipgloss.Color("#eeeeee")
ColorBg = lipgloss.Color("#0d1117")
ColorAccent = lipgloss.Color("#a6e3a1")
ColorAccent2 = lipgloss.Color("#747cec")
ColorWarning = lipgloss.Color("#f9e2af")
ColorError = lipgloss.Color("#f38ba8")
ColorPurple = lipgloss.Color("#cba6f7")
ColorGrey = lipgloss.Color("#585b70")
ColorDarkGrey = lipgloss.Color("#313244")
)
var AppContainer = lipgloss.NewStyle().
Padding(ApplicationVerticalOffset, ApplicationHorizontalOffset).
Border(lipgloss.RoundedBorder()).
BorderForeground(ColorAccent)
// Стили для списка приложений
var (
ListContainerStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.RoundedBorder()).
BorderForeground(ColorPurple).
AlignVertical(lipgloss.Top)
ListDescriptionContainerStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.RoundedBorder()).
BorderForeground(ColorError).
Foreground(ColorAccent2).
AlignVertical(lipgloss.Top)
ListTitleStyle = lipgloss.NewStyle().Foreground(ColorPurple).Italic(true).Bold(true)
ListSelectedStyle = lipgloss.NewStyle().Foreground(ColorError).Bold(true)
ListDescriptionStyle = lipgloss.NewStyle().Foreground(ColorAccent2)
)
// Стили для about
var (
AboutTitle = lipgloss.NewStyle().
Foreground(ColorAccent).
Bold(true).
AlignHorizontal(lipgloss.Center)
AboutH2 = lipgloss.NewStyle().
Foreground(ColorAccent).
Bold(true)
AboutH3 = lipgloss.NewStyle().
Foreground(ColorAccent).
Bold(true)
AboutBullet = lipgloss.NewStyle().
Foreground(ColorGrey)
AboutNormal = lipgloss.NewStyle().
Foreground(ColorFg)
)
// Стили для форм и полей ввода
var (
FormFieldFocused = lipgloss.NewStyle().Foreground(ColorError).Bold(true)
FormFieldUnfocused = lipgloss.NewStyle().Foreground(ColorAccent2)
FormNextButton = lipgloss.NewStyle().Foreground(ColorPurple).Bold(true)
SelectFileDirDeniedStyle = lipgloss.NewStyle().Foreground(ColorGrey)
SelectFileDirParentStyle = lipgloss.NewStyle().Foreground(ColorPurple)
SelectFileStyle = lipgloss.NewStyle().Foreground(ColorAccent)
SelectDirStyle = lipgloss.NewStyle().Foreground(ColorAccent2)
)
// Стили для таблицы переменных Final
var (
FinalHeader = lipgloss.NewStyle().
Background(ColorDarkGrey).
Foreground(ColorPurple).
Bold(true).
Align(lipgloss.Center).
MarginBottom(1).
Padding(1, 0)
FinalFooter = lipgloss.NewStyle().
Foreground(ColorGrey).
MarginTop(1).
Align(lipgloss.Center)
FinalTableBorder = lipgloss.NewStyle().
Foreground(ColorPurple)
FinalTableHeader = lipgloss.NewStyle().
Foreground(ColorPurple).
Bold(true).
Align(lipgloss.Center).
Padding(0, 1)
FinalTableEvenRow = lipgloss.NewStyle().
Background(ColorDarkGrey).
Padding(0, 2)
FinalTableOddRow = lipgloss.NewStyle().
Padding(0, 2)
)
// Стили для модальных окон
var (
ModalContainer = lipgloss.NewStyle().
Border(lipgloss.DoubleBorder()).
Align(lipgloss.Center, lipgloss.Center)
ModalTitleError = lipgloss.NewStyle().BorderForeground(ColorError).Bold(true)
ModalTitleWarning = lipgloss.NewStyle().BorderForeground(ColorWarning).Bold(true)
ModalTitleDefault = lipgloss.NewStyle().BorderForeground(ColorPurple).Bold(true)
ModalButtonNormal = lipgloss.NewStyle().
Padding(0, 3).
Border(lipgloss.RoundedBorder()).
BorderForeground(ColorGrey).
Foreground(ColorAccent2)
ModalButtonFocused = lipgloss.NewStyle().
Padding(0, 3).
Border(lipgloss.RoundedBorder()).
BorderForeground(ColorError).
Foreground(ColorError).
Bold(true)
)
//Старые стили
//var (
//ColorWhite = lipgloss.Color("#ffffff")
//ColorGrey = lipgloss.Color("#626262")
//ColorBlack = lipgloss.Color("#000000")
//ColorRed = lipgloss.Color("#FF0000")
//ColorGreen = lipgloss.Color("#00FF00")
//ColorBlue = lipgloss.Color("#0000FF")
//ColorPurple = lipgloss.Color("#6f03fc")
//ColorGreenCyan = lipgloss.Color("#11CAAA")
//
//AppContainerStyle = lipgloss.NewStyle().
// Padding(1, 3).
// Border(lipgloss.RoundedBorder()).
// BorderForeground(ColorPurple)
//
//AppHeaderStyle = lipgloss.NewStyle().
// Bold(true).
// Foreground(ColorPurple).
// Align(lipgloss.Center).
// Padding(1, 0).
// Background(ColorWhite).
// Foreground(ColorBlack)
//
//AppFooterStyle = lipgloss.NewStyle().
// Foreground(ColorGrey).
// Align(lipgloss.Center).
// Padding(0, 1)
//
//TableHeaderStyle = lipgloss.NewStyle().Foreground(ColorPurple).Bold(true).Align(lipgloss.Center)
//TableCellStyle = lipgloss.NewStyle().Padding(0, 1).Width(14)
//TableOddRowStyle = TableCellStyle.Foreground(ColorWhite).Background(ColorGrey)
//TableEvenRowStyle = TableCellStyle.Foreground(ColorWhite)
//TableBorderStyle = lipgloss.NewStyle().Foreground(ColorPurple)
//
//
//SelectStyle = lipgloss.NewStyle().Foreground(ColorGreenCyan)
//InputStyle = lipgloss.NewStyle().Foreground(ColorGreenCyan)
//ComputeStyle = lipgloss.NewStyle().Foreground(ColorGrey)
//CheckboxStyle = lipgloss.NewStyle().Foreground(ColorGreenCyan)
//
//FormFocusedStyle = lipgloss.NewStyle().Foreground(ColorRed).Bold(true).
// Border(lipgloss.NormalBorder(), false, false, false, true).BorderForeground(ColorRed)
//FormUnfocusedStyle = lipgloss.NewStyle().Foreground(ColorGreenCyan)
//FormStyle = lipgloss.NewStyle().Padding(1, 2).Foreground(ColorBlack).
// Border(lipgloss.RoundedBorder()).BorderForeground(ColorRed)
//
//ListStyle = lipgloss.NewStyle().Padding(1, 3).Border(lipgloss.RoundedBorder()).BorderForeground(ColorRed)
//ListSelectedItemStyle = lipgloss.NewStyle().Foreground(ColorRed).Bold(true)
//ListTitleStyle = lipgloss.NewStyle().Foreground(ColorPurple).Italic(true)
//ListDescriptionStyle = lipgloss.NewStyle().Foreground(ColorGreenCyan).MarginTop(1)
//)