Compare commits

..

No commits in common. "4afb709b87f13e53f36d5232c39a8e0e312edd23" and "3e8832709af1e3598997541cdcd418bdcf7ba6cd" have entirely different histories.

55 changed files with 755 additions and 2608 deletions

4
.gitignore vendored
View file

@ -1,6 +1,8 @@
dist/ dist/
# Node # NPM
package-lock.json
package.json
node_modules/ node_modules/
# Database # Database

View file

@ -6,29 +6,5 @@ module.exports = {
}, },
extend: {}, extend: {},
}, },
plugins: [ plugins: [],
// https://gist.github.com/Merott/d2a19b32db07565e94f10d13d11a8574
function ({ addBase, theme }) {
function extractColorVars(colorObj, colorGroup = "") {
return Object.keys(colorObj).reduce((vars, colorKey) => {
const value = colorObj[colorKey];
const cssVariable =
colorKey === "DEFAULT"
? `--color${colorGroup}`
: `--color${colorGroup}-${colorKey}`;
const newVars =
typeof value === "string"
? { [cssVariable]: value }
: extractColorVars(value, `-${colorKey}`);
return { ...vars, ...newVars };
}, {});
}
addBase({
":root": extractColorVars(theme("colors")),
});
},
],
}; };

View file

@ -1,20 +0,0 @@
# Deploy the application to fly.io
deploy-fly:
fly deploy --ha=false -c deploy/fly.toml -i {{DOCKER_IMAGE}}
# Read local jwt key and set it as fly secret
deploy-fly-set-jwt-key-secrets:
#!/bin/bash
# https://github.com/superfly/flyctl/issues/589
cat <<EOF | fly secrets import -c deploy/fly.toml
JWT_PRIVATE_KEY="""{{JWT_PRIVATE_KEY}}"""
JWT_PUBLIC_KEY="""{{JWT_PUBLIC_KEY}}"""
EOF
# Deploy locally with docker compose
deploy-docker:
cd deploy && docker compose up
# Build the application
build:
docker build -f build/Dockerfile -t {{DOCKER_IMAGE}} .

View file

@ -1,7 +1,9 @@
{ {
"packages": [ "packages": [
"go@1.21", "go@1.21",
"temporal-cli@latest",
"watchexec@latest", "watchexec@latest",
"tailwindcss@latest",
"flyctl@latest", "flyctl@latest",
"just@latest", "just@latest",
"nodePackages.npm@latest", "nodePackages.npm@latest",

View file

@ -115,6 +115,46 @@
} }
} }
}, },
"tailwindcss@latest": {
"last_modified": "2024-01-27T14:55:31Z",
"resolved": "github:NixOS/nixpkgs/160b762eda6d139ac10ae081f8f78d640dd523eb#tailwindcss",
"source": "devbox-search",
"version": "3.4.1",
"systems": {
"aarch64-darwin": {
"store_path": "/nix/store/dii6r8cwfav7r8kd779f3ma5bs71ny54-tailwindcss-3.4.1"
},
"aarch64-linux": {
"store_path": "/nix/store/b83zqgln5z5wpxiiccrlcmzgvgqj24wq-tailwindcss-3.4.1"
},
"x86_64-darwin": {
"store_path": "/nix/store/lpgbpk0lpiqp8my34l0agcz26qcdlshq-tailwindcss-3.4.1"
},
"x86_64-linux": {
"store_path": "/nix/store/xag8bx7ld2k2ixg52yw5c9knbqw5a3bs-tailwindcss-3.4.1"
}
}
},
"temporal-cli@latest": {
"last_modified": "2024-02-05T02:15:44Z",
"resolved": "github:NixOS/nixpkgs/0a254180b4cad6be45aa46dce896bdb8db5d2930#temporal-cli",
"source": "devbox-search",
"version": "1.18.0",
"systems": {
"aarch64-darwin": {
"store_path": "/nix/store/6897s8ww6fhkiqvqdwfiji7497gvcxj6-temporal-cli-1.18.0"
},
"aarch64-linux": {
"store_path": "/nix/store/d0lvc4fq5y9cql0fshy32285ldzyvhjz-temporal-cli-1.18.0"
},
"x86_64-darwin": {
"store_path": "/nix/store/dxwlx019wah1pj0hr3j50skrbdlb3x9g-temporal-cli-1.18.0"
},
"x86_64-linux": {
"store_path": "/nix/store/v6z5knwsyxymnsk1gfmlnm51j22gf1df-temporal-cli-1.18.0"
}
}
},
"watchexec@latest": { "watchexec@latest": {
"last_modified": "2024-01-27T14:55:31Z", "last_modified": "2024-01-27T14:55:31Z",
"resolved": "github:NixOS/nixpkgs/160b762eda6d139ac10ae081f8f78d640dd523eb#watchexec", "resolved": "github:NixOS/nixpkgs/160b762eda6d139ac10ae081f8f78d640dd523eb#watchexec",

View file

@ -12,28 +12,19 @@ import (
"github.com/mentos1386/zdravko/web/templates/components" "github.com/mentos1386/zdravko/web/templates/components"
) )
type HistoryOutcome string
const (
HistoryOutcomeHealthy HistoryOutcome = "HEALTHY"
HistoryOutcomeDegraded HistoryOutcome = "DEGRADED"
HistoryOutcomeUnknown HistoryOutcome = "UNKNOWN"
HistoryOutcomeDown HistoryOutcome = "DOWN"
)
type IndexData struct { type IndexData struct {
*components.Base *components.Base
Targets map[string]TargetsAndStatus Targets map[string]TargetsAndStatus
TargetsLength int TargetsLength int
TimeRange string TimeRange string
Outcome HistoryOutcome Status models.TargetStatus
} }
type Target struct { type Target struct {
Name string Name string
Visibility models.TargetVisibility Visibility models.TargetVisibility
Group string Group string
Outcome HistoryOutcome Status models.TargetStatus
History []*HistoryItem History []*HistoryItem
Uptime float64 Uptime float64
} }
@ -44,7 +35,7 @@ type History struct {
} }
type HistoryItem struct { type HistoryItem struct {
Outcome HistoryOutcome Status models.TargetStatus
StatusCounts map[models.TargetStatus]int StatusCounts map[models.TargetStatus]int
Counts int Counts int
Date time.Time Date time.Time
@ -62,7 +53,7 @@ type HistoryItemCheck struct {
} }
type TargetsAndStatus struct { type TargetsAndStatus struct {
Outcome HistoryOutcome Status models.TargetStatus
Targets []*Target Targets []*Target
} }
@ -70,17 +61,6 @@ func getDateString(date time.Time) string {
return date.UTC().Format("2006-01-02T15:04:05") return date.UTC().Format("2006-01-02T15:04:05")
} }
func TargetStatusToHistoryOutcome(status models.TargetStatus) HistoryOutcome {
switch status {
case models.TargetStatusSuccess:
return HistoryOutcomeHealthy
case models.TargetStatusFailure:
return HistoryOutcomeDown
default:
return HistoryOutcomeUnknown
}
}
func getHistory(history []*services.TargetHistory, period time.Duration, buckets int) *History { func getHistory(history []*services.TargetHistory, period time.Duration, buckets int) *History {
historyMap := map[string]*HistoryItem{} historyMap := map[string]*HistoryItem{}
numOfSuccess := 0.0 numOfSuccess := 0.0
@ -94,7 +74,7 @@ func getHistory(history []*services.TargetHistory, period time.Duration, buckets
mapKeys[i] = dateString mapKeys[i] = dateString
historyMap[dateString] = &HistoryItem{ historyMap[dateString] = &HistoryItem{
Outcome: HistoryOutcomeUnknown, Status: models.TargetStatusUnknown,
StatusCounts: map[models.TargetStatus]int{}, StatusCounts: map[models.TargetStatus]int{},
Date: date, Date: date,
Checks: []*HistoryItemCheck{}, Checks: []*HistoryItemCheck{},
@ -115,6 +95,15 @@ func getHistory(history []*services.TargetHistory, period time.Duration, buckets
numOfSuccess++ numOfSuccess++
} }
if entry.Status == models.TargetStatusUnknown {
entry.Status = _history.Status
}
// If not yet failure, and failing check. Mark as failing.
if _history.Status == models.TargetStatusFailure && entry.Status != models.TargetStatusFailure {
entry.Status = models.TargetStatusFailure
}
entry.StatusCounts[_history.Status]++ entry.StatusCounts[_history.Status]++
entry.Counts++ entry.Counts++
entry.SuccessRate = 100.0 * float64(entry.StatusCounts[models.TargetStatusSuccess]) / float64(entry.Counts) entry.SuccessRate = 100.0 * float64(entry.StatusCounts[models.TargetStatusSuccess]) / float64(entry.Counts)
@ -157,14 +146,6 @@ func getHistory(history []*services.TargetHistory, period time.Duration, buckets
}) })
} }
if entry.SuccessRate == 100.0 {
entry.Outcome = HistoryOutcomeHealthy
} else if entry.SuccessRate == 0.0 {
entry.Outcome = HistoryOutcomeDown
} else {
entry.Outcome = HistoryOutcomeDegraded
}
historyMap[dateString] = entry historyMap[dateString] = entry
} }
@ -193,30 +174,30 @@ func (h *BaseHandler) Index(c echo.Context) error {
} }
timeRangeQuery := c.QueryParam("time-range") timeRangeQuery := c.QueryParam("time-range")
if timeRangeQuery != "48hours" && timeRangeQuery != "60days" && timeRangeQuery != "60minutes" { if timeRangeQuery != "48hours" && timeRangeQuery != "90days" && timeRangeQuery != "90minutes" {
timeRangeQuery = "60days" timeRangeQuery = "90days"
} }
var timeBuckets int var timeBuckets int
var timeInterval time.Duration var timeInterval time.Duration
var timeRange services.TargetHistoryDateRange var timeRange services.TargetHistoryDateRange
switch timeRangeQuery { switch timeRangeQuery {
case "60days": case "90days":
timeRange = services.TargetHistoryDateRange60Days timeRange = services.TargetHistoryDateRange90Days
timeInterval = time.Hour * 24 timeInterval = time.Hour * 24
timeBuckets = 60 timeBuckets = 90
case "48hours": case "48hours":
timeRange = services.TargetHistoryDateRange48Hours timeRange = services.TargetHistoryDateRange48Hours
timeInterval = time.Hour timeInterval = time.Hour
timeBuckets = 48 timeBuckets = 48
case "60minutes": case "90minutes":
timeRange = services.TargetHistoryDateRange60Minutes timeRange = services.TargetHistoryDateRange90Minutes
timeInterval = time.Minute timeInterval = time.Minute
timeBuckets = 60 timeBuckets = 90
} }
overallOutcome := HistoryOutcomeUnknown overallStatus := models.TargetStatusUnknown
outcomeByGroup := make(map[string]HistoryOutcome) statusByGroup := make(map[string]models.TargetStatus)
targetsWithHistory := make([]*Target, len(targets)) targetsWithHistory := make([]*Target, len(targets))
for i, target := range targets { for i, target := range targets {
@ -227,29 +208,29 @@ func (h *BaseHandler) Index(c echo.Context) error {
historyResult := getHistory(history, timeInterval, timeBuckets) historyResult := getHistory(history, timeInterval, timeBuckets)
if outcomeByGroup[target.Group] == "" { if statusByGroup[target.Group] == "" {
outcomeByGroup[target.Group] = HistoryOutcomeUnknown statusByGroup[target.Group] = models.TargetStatusUnknown
} }
status := historyResult.List[len(historyResult.List)-1] status := historyResult.List[len(historyResult.List)-1]
if status.Outcome == HistoryOutcomeHealthy { if status.Status == models.TargetStatusSuccess {
if overallOutcome == HistoryOutcomeUnknown { if overallStatus == models.TargetStatusUnknown {
overallOutcome = status.Outcome overallStatus = status.Status
} }
if outcomeByGroup[target.Group] == HistoryOutcomeUnknown { if statusByGroup[target.Group] == models.TargetStatusUnknown {
outcomeByGroup[target.Group] = status.Outcome statusByGroup[target.Group] = status.Status
} }
} }
if status.Outcome != HistoryOutcomeHealthy && status.Outcome != HistoryOutcomeUnknown { if status.Status != models.TargetStatusSuccess && status.Status != models.TargetStatusUnknown {
overallOutcome = status.Outcome overallStatus = status.Status
outcomeByGroup[target.Group] = status.Outcome statusByGroup[target.Group] = status.Status
} }
targetsWithHistory[i] = &Target{ targetsWithHistory[i] = &Target{
Name: target.Name, Name: target.Name,
Visibility: target.Visibility, Visibility: target.Visibility,
Group: target.Group, Group: target.Group,
Outcome: status.Outcome, Status: status.Status,
History: historyResult.List, History: historyResult.List,
Uptime: historyResult.Uptime, Uptime: historyResult.Uptime,
} }
@ -258,7 +239,7 @@ func (h *BaseHandler) Index(c echo.Context) error {
targetsByGroup := map[string]TargetsAndStatus{} targetsByGroup := map[string]TargetsAndStatus{}
for _, target := range targetsWithHistory { for _, target := range targetsWithHistory {
targetsByGroup[target.Group] = TargetsAndStatus{ targetsByGroup[target.Group] = TargetsAndStatus{
Outcome: outcomeByGroup[target.Group], Status: statusByGroup[target.Group],
Targets: append(targetsByGroup[target.Group].Targets, target), Targets: append(targetsByGroup[target.Group].Targets, target),
} }
} }
@ -272,6 +253,6 @@ func (h *BaseHandler) Index(c echo.Context) error {
}, },
Targets: targetsByGroup, Targets: targetsByGroup,
TimeRange: timeRangeQuery, TimeRange: timeRangeQuery,
Outcome: overallOutcome, Status: overallStatus,
}) })
} }

View file

@ -83,7 +83,7 @@ func (h *BaseHandler) SettingsTargetsDescribeGET(c echo.Context) error {
return err return err
} }
history, err := services.GetTargetHistoryForTarget(context.Background(), h.db, slug, services.TargetHistoryDateRange60Minutes) history, err := services.GetTargetHistoryForTarget(context.Background(), h.db, slug, services.TargetHistoryDateRange90Minutes)
if err != nil { if err != nil {
return err return err
} }

View file

@ -18,20 +18,20 @@ type TargetHistory struct {
type TargetHistoryDateRange string type TargetHistoryDateRange string
const ( const (
TargetHistoryDateRange60Days TargetHistoryDateRange = "60_DAYS" TargetHistoryDateRange90Days TargetHistoryDateRange = "90_DAYS"
TargetHistoryDateRange48Hours TargetHistoryDateRange = "48_HOURS" TargetHistoryDateRange48Hours TargetHistoryDateRange = "48_HOURS"
TargetHistoryDateRange60Minutes TargetHistoryDateRange = "60_MINUTES" TargetHistoryDateRange90Minutes TargetHistoryDateRange = "90_MINUTES"
) )
func GetTargetHistoryForTarget(ctx context.Context, db *sqlx.DB, targetId string, dateRange TargetHistoryDateRange) ([]*TargetHistory, error) { func GetTargetHistoryForTarget(ctx context.Context, db *sqlx.DB, targetId string, dateRange TargetHistoryDateRange) ([]*TargetHistory, error) {
dateRangeFilter := "" dateRangeFilter := ""
switch dateRange { switch dateRange {
case TargetHistoryDateRange60Days: case TargetHistoryDateRange90Days:
dateRangeFilter = "AND strftime('%Y-%m-%dT%H:%M:%fZ', th.created_at) >= datetime('now', 'localtime', '-60 days')" dateRangeFilter = "AND strftime('%Y-%m-%dT%H:%M:%fZ', th.created_at) >= datetime('now', 'localtime', '-90 days')"
case TargetHistoryDateRange48Hours: case TargetHistoryDateRange48Hours:
dateRangeFilter = "AND strftime('%Y-%m-%dT%H:%M:%fZ', th.created_at) >= datetime('now', 'localtime', '-48 hours')" dateRangeFilter = "AND strftime('%Y-%m-%dT%H:%M:%fZ', th.created_at) >= datetime('now', 'localtime', '-48 hours')"
case TargetHistoryDateRange60Minutes: case TargetHistoryDateRange90Minutes:
dateRangeFilter = "AND strftime('%Y-%m-%dT%H:%M:%fZ', th.created_at) >= datetime('now', 'localtime', '-60 minutes')" dateRangeFilter = "AND strftime('%Y-%m-%dT%H:%M:%fZ', th.created_at) >= datetime('now', 'localtime', '-90 minutes')"
} }
var targetHistory []*TargetHistory var targetHistory []*TargetHistory

View file

@ -3,8 +3,6 @@ set shell := ["devbox", "run"]
# Load dotenv # Load dotenv
set dotenv-load set dotenv-load
import 'deploy.just'
# Load public and private keys # Load public and private keys
export JWT_PRIVATE_KEY := `cat jwt.private.pem || echo ""` export JWT_PRIVATE_KEY := `cat jwt.private.pem || echo ""`
export JWT_PUBLIC_KEY := `cat jwt.public.pem || echo ""` export JWT_PUBLIC_KEY := `cat jwt.public.pem || echo ""`
@ -18,7 +16,7 @@ _default:
# Run full development environment # Run full development environment
run: run:
watchexec -r -e tmpl,css just tailwindcss | sed -e 's/^/tailwind: /;' & watchexec -r -e tmpl,css just _tailwindcss-build | sed -e 's/^/tailwind: /;' &
sleep 1 sleep 1
just run-temporal | sed -e 's/^/temporal: /;' & just run-temporal | sed -e 's/^/temporal: /;' &
sleep 1 sleep 1
@ -26,15 +24,18 @@ run:
# Start worker # Start worker
run-worker: run-worker:
go run cmd/zdravko/main.go --worker go build -o dist/zdravko cmd/zdravko/main.go
./dist/zdravko --worker
# Start server # Start server
run-server: run-server:
go run cmd/zdravko/main.go --server go build -o dist/zdravko cmd/zdravko/main.go
./dist/zdravko --server
# Start temporal # Start temporal
run-temporal: run-temporal:
go run cmd/zdravko/main.go --temporal go build -o dist/zdravko cmd/zdravko/main.go
./dist/zdravko --temporal
# Test # Test
test: test:
@ -45,6 +46,27 @@ generate-jwt-key:
openssl genrsa -out jwt.private.pem 2048 openssl genrsa -out jwt.private.pem 2048
openssl rsa -pubout -in jwt.private.pem -out jwt.public.pem openssl rsa -pubout -in jwt.private.pem -out jwt.public.pem
# Deploy the application to fly.io
deploy-fly:
fly deploy --ha=false -c deploy/fly.toml -i {{DOCKER_IMAGE}}
# Read local jwt key and set it as fly secret
deploy-fly-set-jwt-key-secrets:
#!/bin/bash
# https://github.com/superfly/flyctl/issues/589
cat <<EOF | fly secrets import -c deploy/fly.toml
JWT_PRIVATE_KEY="""{{JWT_PRIVATE_KEY}}"""
JWT_PUBLIC_KEY="""{{JWT_PUBLIC_KEY}}"""
EOF
# Deploy locally with docker compose
deploy-docker:
cd deploy && docker compose up
# Build the application
build:
docker build -f build/Dockerfile -t {{DOCKER_IMAGE}} .
# Run Docker application. # Run Docker application.
run-docker: run-docker:
docker run -p 8080:8080 \ docker run -p 8080:8080 \
@ -81,27 +103,22 @@ migration-new name:
echo "Created migration file: $FILENAME" echo "Created migration file: $FILENAME"
# Generate and download all external dependencies. # Generate and download all external dependencies.
generate: static generate: _tailwindcss-build _htmx-download _monaco-download _feather-icons-download
go generate ./... go generate ./...
tailwindcss: _tailwindcss-build:
mkdir -p {{STATIC_DIR}}/css tailwindcss build -c build/tailwind.config.js -i {{STATIC_DIR}}/css/main.css -o {{STATIC_DIR}}/css/tailwind.css
npx tailwindcss build -c build/tailwind.config.js -i {{STATIC_DIR}}/css/main.css -o {{STATIC_DIR}}/css/tailwind.css
static: _htmx-download:
npm install mkdir -p {{STATIC_DIR}}/js
# Clean up static directory curl -sLo {{STATIC_DIR}}/js/htmx.min.js https://unpkg.com/htmx.org/dist/htmx.min.js
find {{STATIC_DIR}} -type f -not -path '{{STATIC_DIR}}/static.go' -not -path '{{STATIC_DIR}}/css/*' -exec rm -f {} \;
# Tailwind CSS _monaco-download:
just tailwindcss rm -rf {{STATIC_DIR}}/monaco
npm install monaco-editor@0.46.0
mv node_modules/monaco-editor/min {{STATIC_DIR}}/monaco
rm -rf node_modules
# HTMX
mkdir -p {{STATIC_DIR}}/js
cp node_modules/htmx.org/dist/htmx.min.js {{STATIC_DIR}}/js/htmx.min.js
# Monaco
cp -r node_modules/monaco-editor/min/* {{STATIC_DIR}}/monaco
# We only care about javascript language # We only care about javascript language
find {{STATIC_DIR}}/monaco/vs/basic-languages/ \ find {{STATIC_DIR}}/monaco/vs/basic-languages/ \
-type d \ -type d \
@ -111,6 +128,6 @@ static:
-not -name 'basic-languages' \ -not -name 'basic-languages' \
-prune -exec rm -rf {} \; -prune -exec rm -rf {} \;
# Feather Icons _feather-icons-download:
mkdir -p {{STATIC_DIR}}/icons mkdir -p {{STATIC_DIR}}/icons
cp node_modules/feather-icons/dist/feather-sprite.svg {{STATIC_DIR}}/icons/feather-sprite.svg curl -sLo {{STATIC_DIR}}/icons/feather-sprite.svg https://unpkg.com/feather-icons/dist/feather-sprite.svg

1483
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,11 +0,0 @@
{
"devDependencies": {
"caniuse-lite": "^1.0.30001624",
"feather-icons": "^4.29.2",
"htmx.org": "^1.9.12",
"monaco-editor": "^0.49.0",
"prettier": "^3.2.5",
"prettier-plugin-go-template": "^0.0.15",
"tailwindcss": "^3.4.3"
}
}

View file

@ -32,135 +32,100 @@ code {
@apply font-mono text-sm bg-gray-100 rounded-lg p-1; @apply font-mono text-sm bg-gray-100 rounded-lg p-1;
} }
.navbar {
@apply justify-center flex flex-wrap space-x-2 gap-2 mt-10;
}
.navbar a { .navbar a {
@apply font-medium px-5 py-2 rounded-lg; @apply font-bold py-2 px-4 rounded-lg;
@apply text-center text-black bg-gray-100 hover:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-gray-400;
} }
.navbar a.active { .navbar a:hover {
@apply bg-white hover:bg-gray-300 shadow; @apply bg-gray-200 shadow-inner;
} }
.navbar a:focus {
#page-index .targets .time-range > a {
@apply font-medium text-sm px-2.5 py-1 rounded-lg;
@apply text-black bg-gray-100 hover:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-gray-400;
}
#page-index .targets .time-range > a.active {
@apply bg-white hover:bg-gray-300 shadow;
}
#page-index .history > .bar {
@apply h-full self-end;
}
#page-index .history.healthy > .bar {
@apply bg-green-400 hover:bg-green-500;
}
#page-index .history.unknown > .bar {
@apply bg-gray-200 h-1/3;
}
#page-index .history.unknown:hover > .bar {
@apply h-full bg-gray-300;
}
#page-index .history.down > .bar {
background: repeating-linear-gradient(
45deg,
var(--color-red-300),
var(--color-red-300) 10%,
var(--color-red-400) 10%,
var(--color-red-400) 20%
);
}
#page-index .history.down:hover > .bar {
background: repeating-linear-gradient(
45deg,
var(--color-red-400),
var(--color-red-400) 10%,
var(--color-red-500) 10%,
var(--color-red-500) 20%
);
}
#page-index .history.degraded > .bar {
background: repeating-linear-gradient(
0deg,
var(--color-orange-300),
var(--color-orange-300) 10%,
var(--color-orange-400) 10%,
var(--color-orange-400) 20%
);
}
#page-index .history.degraded:hover > .bar {
background: repeating-linear-gradient(
0deg,
var(--color-orange-400),
var(--color-orange-400) 10%,
var(--color-orange-500) 10%,
var(--color-orange-500) 20%
);
}
#page-settings .sidebar a {
@apply w-full block rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-700 focus:text-blue-700;
}
#page-settings .sidebar a:focus {
@apply outline-none ring-2 ring-blue-700 text-blue-700; @apply outline-none ring-2 ring-blue-700 text-blue-700;
} }
#page-settings .sidebar a:hover { .navbar a.active {
@apply bg-gray-300 text-black shadow;
}
.navbar a.active:hover {
@apply shadow;
}
.sidebar a {
@apply w-full block rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-700 focus:text-blue-700;
}
.sidebar a:focus {
@apply outline-none ring-2 ring-blue-700 text-blue-700;
}
.sidebar a:hover {
@apply shadow-inner bg-gray-200 text-blue-700; @apply shadow-inner bg-gray-200 text-blue-700;
} }
#page-settings .sidebar a.active { .sidebar a.active {
@apply bg-blue-700 text-white; @apply bg-blue-700 text-white;
} }
#page-settings section { .targets .time-range > a {
@apply font-medium text-sm px-2.5 py-1 rounded-lg;
@apply text-black bg-gray-100 hover:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-gray-400;
}
.targets .time-range > a.active {
@apply bg-white hover:bg-gray-300 shadow;
}
.settings {
@apply grid grid-cols-1 gap-5 grid-rows-[min-content] h-fit;
}
.settings section {
@apply relative overflow-x-auto shadow-md sm:rounded-lg text-gray-700 bg-white h-min; @apply relative overflow-x-auto shadow-md sm:rounded-lg text-gray-700 bg-white h-min;
} }
#page-settings section h2 { .settings section h2 {
@apply text-lg font-semibold text-gray-900; @apply text-lg font-semibold text-gray-900;
} }
#page-settings section form { .settings section form {
@apply grid gap-4 grid-cols-1 sm:grid-cols-[2fr_1fr]; @apply grid gap-4 grid-cols-1 sm:grid-cols-[2fr_1fr];
} }
#page-settings section form select, .settings section form select,
#page-settings section form input { .settings section form input {
@apply h-min bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5; @apply h-min bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5;
} }
#page-settings section form label { .settings section form label {
@apply sm:col-span-2 block text-sm font-medium text-gray-900; @apply sm:col-span-2 block text-sm font-medium text-gray-900;
} }
#page-settings section form p { .settings section form p {
@apply text-sm font-normal text-gray-500; @apply text-sm font-normal text-gray-500;
} }
#page-settings section form button[type="submit"] { .settings section form button[type="submit"] {
@apply text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center; @apply text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center;
@apply sm:col-span-2; @apply sm:col-span-2;
} }
#page-settings section table { .settings section table {
@apply w-full text-sm text-left rtl:text-right text-gray-500; @apply w-full text-sm text-left rtl:text-right text-gray-500;
} }
#page-settings section table caption { .settings section table caption {
@apply p-5 text-lg font-semibold text-left rtl:text-right text-gray-900 bg-white; @apply p-5 text-lg font-semibold text-left rtl:text-right text-gray-900 bg-white;
} }
#page-settings section table caption p { .settings section table caption p {
@apply mt-1 text-sm font-normal text-gray-700; @apply mt-1 text-sm font-normal text-gray-700;
} }
#page-settings section table thead { .settings section table thead {
@apply text-xs text-gray-700 uppercase bg-gray-50; @apply text-xs text-gray-700 uppercase bg-gray-50;
} }
#page-settings section table thead th { .settings section table thead th {
@apply px-6 py-4 text-center text-xs font-semibold text-gray-600 uppercase tracking-wider; @apply px-6 py-4 text-center text-xs font-semibold text-gray-600 uppercase tracking-wider;
} }
#page-settings section table tbody tr { .settings section table tbody tr {
@apply odd:bg-white even:bg-gray-50; @apply odd:bg-white even:bg-gray-50;
} }
#page-settings section table tbody tr th { .settings section table tbody tr th {
@apply px-6 py-4 font-medium text-gray-900 whitespace-nowrap text-center; @apply px-6 py-4 font-medium text-gray-900 whitespace-nowrap text-center;
} }
#page-settings section table tbody tr td { .settings section table tbody tr td {
@apply px-6 py-4 text-center whitespace-nowrap; @apply px-6 py-4 text-center whitespace-nowrap;
} }
#page-settings section table tbody tr.row-special { .settings section table tbody tr.row-special {
@apply bg-gray-100; @apply bg-gray-100;
@apply font-semibold text-xs uppercase tracking-wider; @apply font-semibold text-xs uppercase tracking-wider;
} }

View file

@ -22,7 +22,7 @@ summary {
list-style: none; list-style: none;
} }
/* ! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com */ /* ! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com */
/* /*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
@ -233,8 +233,6 @@ textarea {
/* 1 */ /* 1 */
line-height: inherit; line-height: inherit;
/* 1 */ /* 1 */
letter-spacing: inherit;
/* 1 */
color: inherit; color: inherit;
/* 1 */ /* 1 */
margin: 0; margin: 0;
@ -258,9 +256,9 @@ select {
*/ */
button, button,
input:where([type='button']), [type='button'],
input:where([type='reset']), [type='reset'],
input:where([type='submit']) { [type='submit'] {
-webkit-appearance: button; -webkit-appearance: button;
/* 1 */ /* 1 */
background-color: transparent; background-color: transparent;
@ -468,256 +466,6 @@ video {
display: none; display: none;
} }
:root {
--color-inherit: inherit;
--color-current: currentColor;
--color-transparent: transparent;
--color-black: #000;
--color-white: #fff;
--color-slate-50: #f8fafc;
--color-slate-100: #f1f5f9;
--color-slate-200: #e2e8f0;
--color-slate-300: #cbd5e1;
--color-slate-400: #94a3b8;
--color-slate-500: #64748b;
--color-slate-600: #475569;
--color-slate-700: #334155;
--color-slate-800: #1e293b;
--color-slate-900: #0f172a;
--color-slate-950: #020617;
--color-gray-50: #f9fafb;
--color-gray-100: #f3f4f6;
--color-gray-200: #e5e7eb;
--color-gray-300: #d1d5db;
--color-gray-400: #9ca3af;
--color-gray-500: #6b7280;
--color-gray-600: #4b5563;
--color-gray-700: #374151;
--color-gray-800: #1f2937;
--color-gray-900: #111827;
--color-gray-950: #030712;
--color-zinc-50: #fafafa;
--color-zinc-100: #f4f4f5;
--color-zinc-200: #e4e4e7;
--color-zinc-300: #d4d4d8;
--color-zinc-400: #a1a1aa;
--color-zinc-500: #71717a;
--color-zinc-600: #52525b;
--color-zinc-700: #3f3f46;
--color-zinc-800: #27272a;
--color-zinc-900: #18181b;
--color-zinc-950: #09090b;
--color-neutral-50: #fafafa;
--color-neutral-100: #f5f5f5;
--color-neutral-200: #e5e5e5;
--color-neutral-300: #d4d4d4;
--color-neutral-400: #a3a3a3;
--color-neutral-500: #737373;
--color-neutral-600: #525252;
--color-neutral-700: #404040;
--color-neutral-800: #262626;
--color-neutral-900: #171717;
--color-neutral-950: #0a0a0a;
--color-stone-50: #fafaf9;
--color-stone-100: #f5f5f4;
--color-stone-200: #e7e5e4;
--color-stone-300: #d6d3d1;
--color-stone-400: #a8a29e;
--color-stone-500: #78716c;
--color-stone-600: #57534e;
--color-stone-700: #44403c;
--color-stone-800: #292524;
--color-stone-900: #1c1917;
--color-stone-950: #0c0a09;
--color-red-50: #fef2f2;
--color-red-100: #fee2e2;
--color-red-200: #fecaca;
--color-red-300: #fca5a5;
--color-red-400: #f87171;
--color-red-500: #ef4444;
--color-red-600: #dc2626;
--color-red-700: #b91c1c;
--color-red-800: #991b1b;
--color-red-900: #7f1d1d;
--color-red-950: #450a0a;
--color-orange-50: #fff7ed;
--color-orange-100: #ffedd5;
--color-orange-200: #fed7aa;
--color-orange-300: #fdba74;
--color-orange-400: #fb923c;
--color-orange-500: #f97316;
--color-orange-600: #ea580c;
--color-orange-700: #c2410c;
--color-orange-800: #9a3412;
--color-orange-900: #7c2d12;
--color-orange-950: #431407;
--color-amber-50: #fffbeb;
--color-amber-100: #fef3c7;
--color-amber-200: #fde68a;
--color-amber-300: #fcd34d;
--color-amber-400: #fbbf24;
--color-amber-500: #f59e0b;
--color-amber-600: #d97706;
--color-amber-700: #b45309;
--color-amber-800: #92400e;
--color-amber-900: #78350f;
--color-amber-950: #451a03;
--color-yellow-50: #fefce8;
--color-yellow-100: #fef9c3;
--color-yellow-200: #fef08a;
--color-yellow-300: #fde047;
--color-yellow-400: #facc15;
--color-yellow-500: #eab308;
--color-yellow-600: #ca8a04;
--color-yellow-700: #a16207;
--color-yellow-800: #854d0e;
--color-yellow-900: #713f12;
--color-yellow-950: #422006;
--color-lime-50: #f7fee7;
--color-lime-100: #ecfccb;
--color-lime-200: #d9f99d;
--color-lime-300: #bef264;
--color-lime-400: #a3e635;
--color-lime-500: #84cc16;
--color-lime-600: #65a30d;
--color-lime-700: #4d7c0f;
--color-lime-800: #3f6212;
--color-lime-900: #365314;
--color-lime-950: #1a2e05;
--color-green-50: #f0fdf4;
--color-green-100: #dcfce7;
--color-green-200: #bbf7d0;
--color-green-300: #86efac;
--color-green-400: #4ade80;
--color-green-500: #22c55e;
--color-green-600: #16a34a;
--color-green-700: #15803d;
--color-green-800: #166534;
--color-green-900: #14532d;
--color-green-950: #052e16;
--color-emerald-50: #ecfdf5;
--color-emerald-100: #d1fae5;
--color-emerald-200: #a7f3d0;
--color-emerald-300: #6ee7b7;
--color-emerald-400: #34d399;
--color-emerald-500: #10b981;
--color-emerald-600: #059669;
--color-emerald-700: #047857;
--color-emerald-800: #065f46;
--color-emerald-900: #064e3b;
--color-emerald-950: #022c22;
--color-teal-50: #f0fdfa;
--color-teal-100: #ccfbf1;
--color-teal-200: #99f6e4;
--color-teal-300: #5eead4;
--color-teal-400: #2dd4bf;
--color-teal-500: #14b8a6;
--color-teal-600: #0d9488;
--color-teal-700: #0f766e;
--color-teal-800: #115e59;
--color-teal-900: #134e4a;
--color-teal-950: #042f2e;
--color-cyan-50: #ecfeff;
--color-cyan-100: #cffafe;
--color-cyan-200: #a5f3fc;
--color-cyan-300: #67e8f9;
--color-cyan-400: #22d3ee;
--color-cyan-500: #06b6d4;
--color-cyan-600: #0891b2;
--color-cyan-700: #0e7490;
--color-cyan-800: #155e75;
--color-cyan-900: #164e63;
--color-cyan-950: #083344;
--color-sky-50: #f0f9ff;
--color-sky-100: #e0f2fe;
--color-sky-200: #bae6fd;
--color-sky-300: #7dd3fc;
--color-sky-400: #38bdf8;
--color-sky-500: #0ea5e9;
--color-sky-600: #0284c7;
--color-sky-700: #0369a1;
--color-sky-800: #075985;
--color-sky-900: #0c4a6e;
--color-sky-950: #082f49;
--color-blue-50: #eff6ff;
--color-blue-100: #dbeafe;
--color-blue-200: #bfdbfe;
--color-blue-300: #93c5fd;
--color-blue-400: #60a5fa;
--color-blue-500: #3b82f6;
--color-blue-600: #2563eb;
--color-blue-700: #1d4ed8;
--color-blue-800: #1e40af;
--color-blue-900: #1e3a8a;
--color-blue-950: #172554;
--color-indigo-50: #eef2ff;
--color-indigo-100: #e0e7ff;
--color-indigo-200: #c7d2fe;
--color-indigo-300: #a5b4fc;
--color-indigo-400: #818cf8;
--color-indigo-500: #6366f1;
--color-indigo-600: #4f46e5;
--color-indigo-700: #4338ca;
--color-indigo-800: #3730a3;
--color-indigo-900: #312e81;
--color-indigo-950: #1e1b4b;
--color-violet-50: #f5f3ff;
--color-violet-100: #ede9fe;
--color-violet-200: #ddd6fe;
--color-violet-300: #c4b5fd;
--color-violet-400: #a78bfa;
--color-violet-500: #8b5cf6;
--color-violet-600: #7c3aed;
--color-violet-700: #6d28d9;
--color-violet-800: #5b21b6;
--color-violet-900: #4c1d95;
--color-violet-950: #2e1065;
--color-purple-50: #faf5ff;
--color-purple-100: #f3e8ff;
--color-purple-200: #e9d5ff;
--color-purple-300: #d8b4fe;
--color-purple-400: #c084fc;
--color-purple-500: #a855f7;
--color-purple-600: #9333ea;
--color-purple-700: #7e22ce;
--color-purple-800: #6b21a8;
--color-purple-900: #581c87;
--color-purple-950: #3b0764;
--color-fuchsia-50: #fdf4ff;
--color-fuchsia-100: #fae8ff;
--color-fuchsia-200: #f5d0fe;
--color-fuchsia-300: #f0abfc;
--color-fuchsia-400: #e879f9;
--color-fuchsia-500: #d946ef;
--color-fuchsia-600: #c026d3;
--color-fuchsia-700: #a21caf;
--color-fuchsia-800: #86198f;
--color-fuchsia-900: #701a75;
--color-fuchsia-950: #4a044e;
--color-pink-50: #fdf2f8;
--color-pink-100: #fce7f3;
--color-pink-200: #fbcfe8;
--color-pink-300: #f9a8d4;
--color-pink-400: #f472b6;
--color-pink-500: #ec4899;
--color-pink-600: #db2777;
--color-pink-700: #be185d;
--color-pink-800: #9d174d;
--color-pink-900: #831843;
--color-pink-950: #500724;
--color-rose-50: #fff1f2;
--color-rose-100: #ffe4e6;
--color-rose-200: #fecdd3;
--color-rose-300: #fda4af;
--color-rose-400: #fb7185;
--color-rose-500: #f43f5e;
--color-rose-600: #e11d48;
--color-rose-700: #be123c;
--color-rose-800: #9f1239;
--color-rose-900: #881337;
--color-rose-950: #4c0519;
}
*, ::before, ::after { *, ::before, ::after {
--tw-border-spacing-x: 0; --tw-border-spacing-x: 0;
--tw-border-spacing-y: 0; --tw-border-spacing-y: 0;
@ -766,10 +514,6 @@ video {
--tw-backdrop-opacity: ; --tw-backdrop-opacity: ;
--tw-backdrop-saturate: ; --tw-backdrop-saturate: ;
--tw-backdrop-sepia: ; --tw-backdrop-sepia: ;
--tw-contain-size: ;
--tw-contain-layout: ;
--tw-contain-paint: ;
--tw-contain-style: ;
} }
::backdrop { ::backdrop {
@ -820,10 +564,6 @@ video {
--tw-backdrop-opacity: ; --tw-backdrop-opacity: ;
--tw-backdrop-saturate: ; --tw-backdrop-saturate: ;
--tw-backdrop-sepia: ; --tw-backdrop-sepia: ;
--tw-contain-size: ;
--tw-contain-layout: ;
--tw-contain-paint: ;
--tw-contain-style: ;
} }
.container { .container {
@ -1020,10 +760,6 @@ video {
height: min-content; height: min-content;
} }
.w-12 {
width: 3rem;
}
.w-20 { .w-20 {
width: 5rem; width: 5rem;
} }
@ -1081,10 +817,6 @@ video {
grid-template-columns: auto min-content; grid-template-columns: auto min-content;
} }
.grid-rows-\[min-content\] {
grid-template-rows: min-content;
}
.flex-row { .flex-row {
flex-direction: row; flex-direction: row;
} }
@ -1125,10 +857,6 @@ video {
gap: 1rem; gap: 1rem;
} }
.gap-5 {
gap: 1.25rem;
}
.gap-8 { .gap-8 {
gap: 2rem; gap: 2rem;
} }
@ -1137,12 +865,6 @@ video {
gap: 1px; gap: 1px;
} }
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
}
.self-center { .self-center {
align-self: center; align-self: center;
} }
@ -1235,9 +957,9 @@ video {
background-color: rgb(243 244 246 / var(--tw-bg-opacity)); background-color: rgb(243 244 246 / var(--tw-bg-opacity));
} }
.bg-gray-300 { .bg-gray-200 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(209 213 219 / var(--tw-bg-opacity)); background-color: rgb(229 231 235 / var(--tw-bg-opacity));
} }
.bg-gray-50 { .bg-gray-50 {
@ -1255,9 +977,9 @@ video {
background-color: rgb(134 239 172 / var(--tw-bg-opacity)); background-color: rgb(134 239 172 / var(--tw-bg-opacity));
} }
.bg-orange-100 { .bg-green-400 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 237 213 / var(--tw-bg-opacity)); background-color: rgb(74 222 128 / var(--tw-bg-opacity));
} }
.bg-orange-300 { .bg-orange-300 {
@ -1280,6 +1002,11 @@ video {
background-color: rgb(252 165 165 / var(--tw-bg-opacity)); background-color: rgb(252 165 165 / var(--tw-bg-opacity));
} }
.bg-red-400 {
--tw-bg-opacity: 1;
background-color: rgb(248 113 113 / var(--tw-bg-opacity));
}
.bg-red-700 { .bg-red-700 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(185 28 28 / var(--tw-bg-opacity)); background-color: rgb(185 28 28 / var(--tw-bg-opacity));
@ -1386,11 +1113,6 @@ video {
line-height: 1.5rem; line-height: 1.5rem;
} }
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-sm { .text-sm {
font-size: 0.875rem; font-size: 0.875rem;
line-height: 1.25rem; line-height: 1.25rem;
@ -1504,11 +1226,6 @@ video {
color: rgb(22 101 52 / var(--tw-text-opacity)); color: rgb(22 101 52 / var(--tw-text-opacity));
} }
.text-orange-800 {
--tw-text-opacity: 1;
color: rgb(154 52 18 / var(--tw-text-opacity));
}
.text-purple-800 { .text-purple-800 {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(107 33 168 / var(--tw-text-opacity)); color: rgb(107 33 168 / var(--tw-text-opacity));
@ -1607,49 +1324,105 @@ code {
line-height: 1.25rem; line-height: 1.25rem;
} }
.navbar {
margin-top: 2.5rem;
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.5rem;
}
.navbar > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
}
.navbar a { .navbar a {
border-radius: 0.5rem; border-radius: 0.5rem;
padding-left: 1.25rem;
padding-right: 1.25rem;
padding-top: 0.5rem; padding-top: 0.5rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
font-weight: 500; padding-left: 1rem;
--tw-bg-opacity: 1; padding-right: 1rem;
background-color: rgb(243 244 246 / var(--tw-bg-opacity)); font-weight: 700;
text-align: center;
--tw-text-opacity: 1;
color: rgb(0 0 0 / var(--tw-text-opacity));
} }
.navbar a:hover { .navbar a:hover {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(209 213 219 / var(--tw-bg-opacity)); background-color: rgb(229 231 235 / var(--tw-bg-opacity));
--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
} }
.navbar a:focus { .navbar a:focus {
--tw-text-opacity: 1;
color: rgb(29 78 216 / var(--tw-text-opacity));
outline: 2px solid transparent; outline: 2px solid transparent;
outline-offset: 2px; outline-offset: 2px;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
--tw-ring-opacity: 1; --tw-ring-opacity: 1;
--tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity)); --tw-ring-color: rgb(29 78 216 / var(--tw-ring-opacity));
} }
.navbar a.active { .navbar a.active {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(209 213 219 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(0 0 0 / var(--tw-text-opacity));
--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
} }
.navbar a.active:hover { .navbar a.active:hover {
--tw-bg-opacity: 1; --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
background-color: rgb(209 213 219 / var(--tw-bg-opacity)); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
} }
#page-index .targets .time-range > a { .sidebar a {
display: block;
width: 100%;
border-radius: 0.5rem;
padding-left: 1rem;
padding-right: 1rem;
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
.sidebar a:focus {
--tw-text-opacity: 1;
color: rgb(29 78 216 / var(--tw-text-opacity));
outline: 2px solid transparent;
outline-offset: 2px;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
--tw-ring-opacity: 1;
--tw-ring-color: rgb(29 78 216 / var(--tw-ring-opacity));
}
.sidebar a:hover {
--tw-bg-opacity: 1;
background-color: rgb(229 231 235 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(29 78 216 / var(--tw-text-opacity));
--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.sidebar a.active {
--tw-bg-opacity: 1;
background-color: rgb(29 78 216 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity));
}
.targets .time-range > a {
border-radius: 0.5rem; border-radius: 0.5rem;
padding-left: 0.625rem; padding-left: 0.625rem;
padding-right: 0.625rem; padding-right: 0.625rem;
@ -1664,12 +1437,12 @@ code {
color: rgb(0 0 0 / var(--tw-text-opacity)); color: rgb(0 0 0 / var(--tw-text-opacity));
} }
#page-index .targets .time-range > a:hover { .targets .time-range > a:hover {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(209 213 219 / var(--tw-bg-opacity)); background-color: rgb(209 213 219 / var(--tw-bg-opacity));
} }
#page-index .targets .time-range > a:focus { .targets .time-range > a:focus {
outline: 2px solid transparent; outline: 2px solid transparent;
outline-offset: 2px; outline-offset: 2px;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
@ -1679,7 +1452,7 @@ code {
--tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity)); --tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity));
} }
#page-index .targets .time-range > a.active { .targets .time-range > a.active {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(255 255 255 / var(--tw-bg-opacity));
--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
@ -1687,118 +1460,21 @@ code {
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
} }
#page-index .targets .time-range > a.active:hover { .targets .time-range > a.active:hover {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(209 213 219 / var(--tw-bg-opacity)); background-color: rgb(209 213 219 / var(--tw-bg-opacity));
} }
#page-index .history > .bar { .settings {
height: 100%; display: grid;
align-self: flex-end; height: -moz-fit-content;
height: fit-content;
grid-template-columns: repeat(1, minmax(0, 1fr));
grid-template-rows: min-content;
gap: 1.25rem;
} }
#page-index .history.healthy > .bar { .settings section {
--tw-bg-opacity: 1;
background-color: rgb(74 222 128 / var(--tw-bg-opacity));
}
#page-index .history.healthy > .bar:hover {
--tw-bg-opacity: 1;
background-color: rgb(34 197 94 / var(--tw-bg-opacity));
}
#page-index .history.unknown > .bar {
height: 33.333333%;
--tw-bg-opacity: 1;
background-color: rgb(229 231 235 / var(--tw-bg-opacity));
}
#page-index .history.unknown:hover > .bar {
height: 100%;
--tw-bg-opacity: 1;
background-color: rgb(209 213 219 / var(--tw-bg-opacity));
}
#page-index .history.down > .bar {
background: repeating-linear-gradient(
45deg,
var(--color-red-300),
var(--color-red-300) 10%,
var(--color-red-400) 10%,
var(--color-red-400) 20%
);
}
#page-index .history.down:hover > .bar {
background: repeating-linear-gradient(
45deg,
var(--color-red-400),
var(--color-red-400) 10%,
var(--color-red-500) 10%,
var(--color-red-500) 20%
);
}
#page-index .history.degraded > .bar {
background: repeating-linear-gradient(
0deg,
var(--color-orange-300),
var(--color-orange-300) 10%,
var(--color-orange-400) 10%,
var(--color-orange-400) 20%
);
}
#page-index .history.degraded:hover > .bar {
background: repeating-linear-gradient(
0deg,
var(--color-orange-400),
var(--color-orange-400) 10%,
var(--color-orange-500) 10%,
var(--color-orange-500) 20%
);
}
#page-settings .sidebar a {
display: block;
width: 100%;
border-radius: 0.5rem;
padding-left: 1rem;
padding-right: 1rem;
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
#page-settings .sidebar a:focus {
--tw-text-opacity: 1;
color: rgb(29 78 216 / var(--tw-text-opacity));
outline: 2px solid transparent;
outline-offset: 2px;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
--tw-ring-opacity: 1;
--tw-ring-color: rgb(29 78 216 / var(--tw-ring-opacity));
}
#page-settings .sidebar a:hover {
--tw-bg-opacity: 1;
background-color: rgb(229 231 235 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(29 78 216 / var(--tw-text-opacity));
--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
#page-settings .sidebar a.active {
--tw-bg-opacity: 1;
background-color: rgb(29 78 216 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity));
}
#page-settings section {
position: relative; position: relative;
height: -moz-min-content; height: -moz-min-content;
height: min-content; height: min-content;
@ -1813,12 +1489,12 @@ code {
} }
@media (min-width: 640px) { @media (min-width: 640px) {
#page-settings section { .settings section {
border-radius: 0.5rem; border-radius: 0.5rem;
} }
} }
#page-settings section h2 { .settings section h2 {
font-size: 1.125rem; font-size: 1.125rem;
line-height: 1.75rem; line-height: 1.75rem;
font-weight: 600; font-weight: 600;
@ -1826,20 +1502,20 @@ code {
color: rgb(17 24 39 / var(--tw-text-opacity)); color: rgb(17 24 39 / var(--tw-text-opacity));
} }
#page-settings section form { .settings section form {
display: grid; display: grid;
grid-template-columns: repeat(1, minmax(0, 1fr)); grid-template-columns: repeat(1, minmax(0, 1fr));
gap: 1rem; gap: 1rem;
} }
@media (min-width: 640px) { @media (min-width: 640px) {
#page-settings section form { .settings section form {
grid-template-columns: 2fr 1fr; grid-template-columns: 2fr 1fr;
} }
} }
#page-settings section form select, .settings section form select,
#page-settings section form input { .settings section form input {
display: block; display: block;
height: -moz-min-content; height: -moz-min-content;
height: min-content; height: min-content;
@ -1857,15 +1533,15 @@ code {
color: rgb(17 24 39 / var(--tw-text-opacity)); color: rgb(17 24 39 / var(--tw-text-opacity));
} }
#page-settings section form select:focus, .settings section form select:focus,
#page-settings section form input:focus { .settings section form input:focus {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(59 130 246 / var(--tw-border-opacity)); border-color: rgb(59 130 246 / var(--tw-border-opacity));
--tw-ring-opacity: 1; --tw-ring-opacity: 1;
--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)); --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
} }
#page-settings section form label { .settings section form label {
display: block; display: block;
font-size: 0.875rem; font-size: 0.875rem;
line-height: 1.25rem; line-height: 1.25rem;
@ -1875,12 +1551,12 @@ code {
} }
@media (min-width: 640px) { @media (min-width: 640px) {
#page-settings section form label { .settings section form label {
grid-column: span 2 / span 2; grid-column: span 2 / span 2;
} }
} }
#page-settings section form p { .settings section form p {
font-size: 0.875rem; font-size: 0.875rem;
line-height: 1.25rem; line-height: 1.25rem;
font-weight: 400; font-weight: 400;
@ -1888,7 +1564,7 @@ code {
color: rgb(107 114 128 / var(--tw-text-opacity)); color: rgb(107 114 128 / var(--tw-text-opacity));
} }
#page-settings section form button[type="submit"] { .settings section form button[type="submit"] {
border-radius: 0.5rem; border-radius: 0.5rem;
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(29 78 216 / var(--tw-bg-opacity)); background-color: rgb(29 78 216 / var(--tw-bg-opacity));
@ -1904,12 +1580,12 @@ code {
color: rgb(255 255 255 / var(--tw-text-opacity)); color: rgb(255 255 255 / var(--tw-text-opacity));
} }
#page-settings section form button[type="submit"]:hover { .settings section form button[type="submit"]:hover {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(30 64 175 / var(--tw-bg-opacity)); background-color: rgb(30 64 175 / var(--tw-bg-opacity));
} }
#page-settings section form button[type="submit"]:focus { .settings section form button[type="submit"]:focus {
outline: 2px solid transparent; outline: 2px solid transparent;
outline-offset: 2px; outline-offset: 2px;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
@ -1920,12 +1596,12 @@ code {
} }
@media (min-width: 640px) { @media (min-width: 640px) {
#page-settings section form button[type="submit"] { .settings section form button[type="submit"] {
grid-column: span 2 / span 2; grid-column: span 2 / span 2;
} }
} }
#page-settings section table { .settings section table {
width: 100%; width: 100%;
text-align: left; text-align: left;
font-size: 0.875rem; font-size: 0.875rem;
@ -1934,11 +1610,11 @@ code {
color: rgb(107 114 128 / var(--tw-text-opacity)); color: rgb(107 114 128 / var(--tw-text-opacity));
} }
#page-settings section table:where([dir="rtl"], [dir="rtl"] *) { .settings section table:where([dir="rtl"], [dir="rtl"] *) {
text-align: right; text-align: right;
} }
#page-settings section table caption { .settings section table caption {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(255 255 255 / var(--tw-bg-opacity));
padding: 1.25rem; padding: 1.25rem;
@ -1950,11 +1626,11 @@ code {
color: rgb(17 24 39 / var(--tw-text-opacity)); color: rgb(17 24 39 / var(--tw-text-opacity));
} }
#page-settings section table caption:where([dir="rtl"], [dir="rtl"] *) { .settings section table caption:where([dir="rtl"], [dir="rtl"] *) {
text-align: right; text-align: right;
} }
#page-settings section table caption p { .settings section table caption p {
margin-top: 0.25rem; margin-top: 0.25rem;
font-size: 0.875rem; font-size: 0.875rem;
line-height: 1.25rem; line-height: 1.25rem;
@ -1963,7 +1639,7 @@ code {
color: rgb(55 65 81 / var(--tw-text-opacity)); color: rgb(55 65 81 / var(--tw-text-opacity));
} }
#page-settings section table thead { .settings section table thead {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity)); background-color: rgb(249 250 251 / var(--tw-bg-opacity));
font-size: 0.75rem; font-size: 0.75rem;
@ -1973,7 +1649,7 @@ code {
color: rgb(55 65 81 / var(--tw-text-opacity)); color: rgb(55 65 81 / var(--tw-text-opacity));
} }
#page-settings section table thead th { .settings section table thead th {
padding-left: 1.5rem; padding-left: 1.5rem;
padding-right: 1.5rem; padding-right: 1.5rem;
padding-top: 1rem; padding-top: 1rem;
@ -1988,17 +1664,17 @@ code {
color: rgb(75 85 99 / var(--tw-text-opacity)); color: rgb(75 85 99 / var(--tw-text-opacity));
} }
#page-settings section table tbody tr:nth-child(odd) { .settings section table tbody tr:nth-child(odd) {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(255 255 255 / var(--tw-bg-opacity));
} }
#page-settings section table tbody tr:nth-child(even) { .settings section table tbody tr:nth-child(even) {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity)); background-color: rgb(249 250 251 / var(--tw-bg-opacity));
} }
#page-settings section table tbody tr th { .settings section table tbody tr th {
white-space: nowrap; white-space: nowrap;
padding-left: 1.5rem; padding-left: 1.5rem;
padding-right: 1.5rem; padding-right: 1.5rem;
@ -2010,7 +1686,7 @@ code {
color: rgb(17 24 39 / var(--tw-text-opacity)); color: rgb(17 24 39 / var(--tw-text-opacity));
} }
#page-settings section table tbody tr td { .settings section table tbody tr td {
white-space: nowrap; white-space: nowrap;
padding-left: 1.5rem; padding-left: 1.5rem;
padding-right: 1.5rem; padding-right: 1.5rem;
@ -2019,7 +1695,7 @@ code {
text-align: center; text-align: center;
} }
#page-settings section table tbody tr.row-special { .settings section table tbody tr.row-special {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(243 244 246 / var(--tw-bg-opacity)); background-color: rgb(243 244 246 / var(--tw-bg-opacity));
font-size: 0.75rem; font-size: 0.75rem;
@ -2052,6 +1728,21 @@ code {
background-color: rgb(243 244 246 / var(--tw-bg-opacity)); background-color: rgb(243 244 246 / var(--tw-bg-opacity));
} }
.hover\:bg-gray-300:hover {
--tw-bg-opacity: 1;
background-color: rgb(209 213 219 / var(--tw-bg-opacity));
}
.hover\:bg-green-500:hover {
--tw-bg-opacity: 1;
background-color: rgb(34 197 94 / var(--tw-bg-opacity));
}
.hover\:bg-red-500:hover {
--tw-bg-opacity: 1;
background-color: rgb(239 68 68 / var(--tw-bg-opacity));
}
.hover\:bg-red-800:hover { .hover\:bg-red-800:hover {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(153 27 27 / var(--tw-bg-opacity)); background-color: rgb(153 27 27 / var(--tw-bg-opacity));
@ -2133,10 +1824,6 @@ code {
justify-content: center; justify-content: center;
} }
.sm\:justify-evenly {
justify-content: space-evenly;
}
.sm\:px-8 { .sm\:px-8 {
padding-left: 2rem; padding-left: 2rem;
padding-right: 2rem; padding-right: 2rem;

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.de",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["Array","Boolescher Wert","Klasse","Konstante","Konstruktor","Enumeration","Enumerationsmember","Ereignis","Feld","Datei","Funktion","Schnittstelle","Schl\xFCssel","Methode","Modul","Namespace","NULL","Zahl","Objekt","Operator","Paket","Eigenschaft","Zeichenfolge","Struktur","Typparameter","Variable","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.de",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["Array","Boolescher Wert","Klasse","Konstante","Konstruktor","Enumeration","Enumerationsmember","Ereignis","Feld","Datei","Funktion","Schnittstelle","Schl\xFCssel","Methode","Modul","Namespace","NULL","Zahl","Objekt","Operator","Paket","Eigenschaft","Zeichenfolge","Struktur","Typparameter","Variable","{0} ({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.es",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matriz","booleano","clase","constante","constructor","enumeraci\xF3n","miembro de la enumeraci\xF3n","evento","campo","archivo","funci\xF3n","interfaz","clave","m\xE9todo","m\xF3dulo","espacio de nombres","NULL","n\xFAmero","objeto","operador","paquete","propiedad","cadena","estructura","par\xE1metro de tipo","variable","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.es",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matriz","booleano","clase","constante","constructor","enumeraci\xF3n","miembro de la enumeraci\xF3n","evento","campo","archivo","funci\xF3n","interfaz","clave","m\xE9todo","m\xF3dulo","espacio de nombres","NULL","n\xFAmero","objeto","operador","paquete","propiedad","cadena","estructura","par\xE1metro de tipo","variable","{0} ({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.fr",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["tableau","bool\xE9en","classe","constante","constructeur","\xE9num\xE9ration","membre d'\xE9num\xE9ration","\xE9v\xE9nement","champ","fichier","fonction","interface","cl\xE9","m\xE9thode","module","espace de noms","NULL","nombre","objet","op\xE9rateur","package","propri\xE9t\xE9","cha\xEEne","struct","param\xE8tre de type","variable","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.fr",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["tableau","bool\xE9en","classe","constante","constructeur","\xE9num\xE9ration","membre d'\xE9num\xE9ration","\xE9v\xE9nement","champ","fichier","fonction","interface","cl\xE9","m\xE9thode","module","espace de noms","NULL","nombre","objet","op\xE9rateur","package","propri\xE9t\xE9","cha\xEEne","struct","param\xE8tre de type","variable","{0} ({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.it",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matrice","valore booleano","classe","costante","costruttore","enumerazione","membro di enumerazione","evento","campo","file","funzione","interfaccia","chiave","metodo","modulo","spazio dei nomi","Null","numero","oggetto","operatore","pacchetto","propriet\xE0","stringa","struct","parametro di tipo","variabile","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.it",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matrice","valore booleano","classe","costante","costruttore","enumerazione","membro di enumerazione","evento","campo","file","funzione","interfaccia","chiave","metodo","modulo","spazio dei nomi","Null","numero","oggetto","operatore","pacchetto","propriet\xE0","stringa","struct","parametro di tipo","variabile","{0} ({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ja",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u914D\u5217","\u30D6\u30FC\u30EB\u5024","\u30AF\u30E9\u30B9","\u5B9A\u6570","\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u30FC","\u5217\u6319\u578B","\u5217\u6319\u578B\u30E1\u30F3\u30D0\u30FC","\u30A4\u30D9\u30F3\u30C8","\u30D5\u30A3\u30FC\u30EB\u30C9","\u30D5\u30A1\u30A4\u30EB","\u95A2\u6570","\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9","\u30AD\u30FC","\u30E1\u30BD\u30C3\u30C9","\u30E2\u30B8\u30E5\u30FC\u30EB","\u540D\u524D\u7A7A\u9593","NULL","\u6570\u5024","\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8","\u6F14\u7B97\u5B50","\u30D1\u30C3\u30B1\u30FC\u30B8","\u30D7\u30ED\u30D1\u30C6\u30A3","\u6587\u5B57\u5217","\u69CB\u9020\u4F53","\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC","\u5909\u6570","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ja",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u914D\u5217","\u30D6\u30FC\u30EB\u5024","\u30AF\u30E9\u30B9","\u5B9A\u6570","\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u30FC","\u5217\u6319\u578B","\u5217\u6319\u578B\u30E1\u30F3\u30D0\u30FC","\u30A4\u30D9\u30F3\u30C8","\u30D5\u30A3\u30FC\u30EB\u30C9","\u30D5\u30A1\u30A4\u30EB","\u95A2\u6570","\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9","\u30AD\u30FC","\u30E1\u30BD\u30C3\u30C9","\u30E2\u30B8\u30E5\u30FC\u30EB","\u540D\u524D\u7A7A\u9593","NULL","\u6570\u5024","\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8","\u6F14\u7B97\u5B50","\u30D1\u30C3\u30B1\u30FC\u30B8","\u30D7\u30ED\u30D1\u30C6\u30A3","\u6587\u5B57\u5217","\u69CB\u9020\u4F53","\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC","\u5909\u6570","{0} ({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["array","boolean","class","constant","constructor","enumeration","enumeration member","event","field","file","function","interface","key","method","module","namespace","null","number","object","operator","package","property","string","struct","type parameter","variable","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["array","boolean","class","constant","constructor","enumeration","enumeration member","event","field","file","function","interface","key","method","module","namespace","null","number","object","operator","package","property","string","struct","type parameter","variable","{0} ({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ko",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\uBC30\uC5F4","\uBD80\uC6B8","\uD074\uB798\uC2A4","\uC0C1\uC218","\uC0DD\uC131\uC790","\uC5F4\uAC70\uD615","\uC5F4\uAC70\uD615 \uBA64\uBC84","\uC774\uBCA4\uD2B8","\uD544\uB4DC","\uD30C\uC77C","\uD568\uC218","\uC778\uD130\uD398\uC774\uC2A4","\uD0A4","\uBA54\uC11C\uB4DC","\uBAA8\uB4C8","\uB124\uC784\uC2A4\uD398\uC774\uC2A4","Null","\uC22B\uC790","\uAC1C\uCCB4","\uC5F0\uC0B0\uC790","\uD328\uD0A4\uC9C0","\uC18D\uC131","\uBB38\uC790\uC5F4","\uAD6C\uC870\uCCB4","\uD615\uC2DD \uB9E4\uAC1C \uBCC0\uC218","\uBCC0\uC218","{0}({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ko",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\uBC30\uC5F4","\uBD80\uC6B8","\uD074\uB798\uC2A4","\uC0C1\uC218","\uC0DD\uC131\uC790","\uC5F4\uAC70\uD615","\uC5F4\uAC70\uD615 \uBA64\uBC84","\uC774\uBCA4\uD2B8","\uD544\uB4DC","\uD30C\uC77C","\uD568\uC218","\uC778\uD130\uD398\uC774\uC2A4","\uD0A4","\uBA54\uC11C\uB4DC","\uBAA8\uB4C8","\uB124\uC784\uC2A4\uD398\uC774\uC2A4","Null","\uC22B\uC790","\uAC1C\uCCB4","\uC5F0\uC0B0\uC790","\uD328\uD0A4\uC9C0","\uC18D\uC131","\uBB38\uC790\uC5F4","\uAD6C\uC870\uCCB4","\uD615\uC2DD \uB9E4\uAC1C \uBCC0\uC218","\uBCC0\uC218","{0}({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ru",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u043C\u0430\u0441\u0441\u0438\u0432","\u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435","\u043A\u043B\u0430\u0441\u0441","\u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430","\u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440","\u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435","\u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F","\u0441\u043E\u0431\u044B\u0442\u0438\u0435","\u043F\u043E\u043B\u0435","\u0444\u0430\u0439\u043B","\u0444\u0443\u043D\u043A\u0446\u0438\u044F","\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441","\u043A\u043B\u044E\u0447","\u043C\u0435\u0442\u043E\u0434","\u043C\u043E\u0434\u0443\u043B\u044C","\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0438\u043C\u0435\u043D","NULL","\u0447\u0438\u0441\u043B\u043E","\u043E\u0431\u044A\u0435\u043A\u0442","\u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440","\u043F\u0430\u043A\u0435\u0442","\u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E","\u0441\u0442\u0440\u043E\u043A\u0430","\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430","\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0442\u0438\u043F\u0430","\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0430\u044F","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ru",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u043C\u0430\u0441\u0441\u0438\u0432","\u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435","\u043A\u043B\u0430\u0441\u0441","\u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430","\u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440","\u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435","\u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F","\u0441\u043E\u0431\u044B\u0442\u0438\u0435","\u043F\u043E\u043B\u0435","\u0444\u0430\u0439\u043B","\u0444\u0443\u043D\u043A\u0446\u0438\u044F","\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441","\u043A\u043B\u044E\u0447","\u043C\u0435\u0442\u043E\u0434","\u043C\u043E\u0434\u0443\u043B\u044C","\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0438\u043C\u0435\u043D","NULL","\u0447\u0438\u0441\u043B\u043E","\u043E\u0431\u044A\u0435\u043A\u0442","\u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440","\u043F\u0430\u043A\u0435\u0442","\u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E","\u0441\u0442\u0440\u043E\u043A\u0430","\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430","\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0442\u0438\u043F\u0430","\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0430\u044F","{0} ({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-cn",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u6570\u7EC4","\u5E03\u5C14\u503C","\u7C7B","\u5E38\u6570","\u6784\u9020\u51FD\u6570","\u679A\u4E3E","\u679A\u4E3E\u6210\u5458","\u4E8B\u4EF6","\u5B57\u6BB5","\u6587\u4EF6","\u51FD\u6570","\u63A5\u53E3","\u952E","\u65B9\u6CD5","\u6A21\u5757","\u547D\u540D\u7A7A\u95F4","Null","\u6570\u5B57","\u5BF9\u8C61","\u8FD0\u7B97\u7B26","\u5305","\u5C5E\u6027","\u5B57\u7B26\u4E32","\u7ED3\u6784","\u7C7B\u578B\u53C2\u6570","\u53D8\u91CF","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-cn",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u6570\u7EC4","\u5E03\u5C14\u503C","\u7C7B","\u5E38\u6570","\u6784\u9020\u51FD\u6570","\u679A\u4E3E","\u679A\u4E3E\u6210\u5458","\u4E8B\u4EF6","\u5B57\u6BB5","\u6587\u4EF6","\u51FD\u6570","\u63A5\u53E3","\u952E","\u65B9\u6CD5","\u6A21\u5757","\u547D\u540D\u7A7A\u95F4","Null","\u6570\u5B57","\u5BF9\u8C61","\u8FD0\u7B97\u7B26","\u5305","\u5C5E\u6027","\u5B57\u7B26\u4E32","\u7ED3\u6784","\u7C7B\u578B\u53C2\u6570","\u53D8\u91CF","{0} ({1})"]});

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------- /*!-----------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/vscode/blob/main/LICENSE.txt * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
*-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-tw",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u9663\u5217","\u5E03\u6797\u503C","\u985E\u5225","\u5E38\u6578","\u5EFA\u69CB\u51FD\u5F0F","\u5217\u8209","\u5217\u8209\u6210\u54E1","\u4E8B\u4EF6","\u6B04\u4F4D","\u6A94\u6848","\u51FD\u5F0F","\u4ECB\u9762","\u7D22\u5F15\u9375","\u65B9\u6CD5","\u6A21\u7D44","\u547D\u540D\u7A7A\u9593","null","\u6578\u5B57","\u7269\u4EF6","\u904B\u7B97\u5B50","\u5957\u4EF6","\u5C6C\u6027","\u5B57\u4E32","\u7D50\u69CB","\u578B\u5225\u53C3\u6578","\u8B8A\u6578","{0} ({1})"]}); *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-tw",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u9663\u5217","\u5E03\u6797\u503C","\u985E\u5225","\u5E38\u6578","\u5EFA\u69CB\u51FD\u5F0F","\u5217\u8209","\u5217\u8209\u6210\u54E1","\u4E8B\u4EF6","\u6B04\u4F4D","\u6A94\u6848","\u51FD\u5F0F","\u4ECB\u9762","\u7D22\u5F15\u9375","\u65B9\u6CD5","\u6A21\u7D44","\u547D\u540D\u7A7A\u9593","null","\u6578\u5B57","\u7269\u4EF6","\u904B\u7B97\u5B50","\u5957\u4EF6","\u5C6C\u6027","\u5B57\u4E32","\u7D50\u69CB","\u578B\u5225\u53C3\u6578","\u8B8A\u6578","{0} ({1})"]});

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

View file

@ -1,6 +1,6 @@
/*!----------------------------------------------------------------------------- /*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.49.0(383fdf3fc0e1e1a024068b8d0fd4f3dcbae74d04) * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)
* Released under the MIT license * Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/

File diff suppressed because one or more lines are too long

View file

@ -4,6 +4,8 @@ import (
"embed" "embed"
) )
//go:generate just static //go:generate just _tailwindcss-build
//go:generate just _htmx-download
//go:generate just _feather-icons-download
//go:embed * //go:embed *
var Static embed.FS var Static embed.FS

View file

@ -17,29 +17,21 @@
<link rel="stylesheet" href="/static/css/tailwind.css" /> <link rel="stylesheet" href="/static/css/tailwind.css" />
</head> </head>
<body class="bg-gray-100 flex flex-col"> <body class="bg-gray-100 flex flex-col">
<header class="flex flex-col sm:flex-row items-center sm:justify-evenly p-4 gap-2"> <nav class="navbar">
<a href="/" class="text-2xl font-bold">zdravko.mnts.dev</a> {{ range .Navbar }}
<nav class="navbar flex sm:flex-row flex-col flex-wrap space-x-2 gap-1"> <a
{{ range .Navbar }} {{ $active := eq .Path $path }}
<a {{ if $active }}aria-current="true"{{ end }}
{{ $active := eq .Path $path }} href="{{ .Path }}"
{{ if $active }}aria-current="true"{{ end }} class="{{ if $active }}active{{ end }}"
href="{{ .Path }}" >
class="{{ if $active }}active{{ end }}" {{ .Title }}
> </a>
{{ .Title }} {{ end }}
</a> </nav>
{{ end }}
</nav>
<img
src="https://avatars.githubusercontent.com/u/1910649?v=4"
alt="Profile Image"
class="rounded-full w-12 h-12"
></img>
</header>
{{ template "main" . }} {{ template "main" . }}
<div class="container mx-auto"> <div class="container mx-auto">
<footer class="text-center text-gray-600 text-xs mt-8 mb-4"> <footer class="text-center text-gray-500 text-xs mt-8 mb-4">
&copy; {{ Now.UTC.Year }} Zdravko - &copy; {{ Now.UTC.Year }} Zdravko -
<a <a
class="hover:underline" class="hover:underline"

View file

@ -8,7 +8,6 @@
<div <div
id="page-settings"
class="md:px-4 lg:px-8 mx-auto mt-8 w-full max-w-screen-xl lg:mt-20 grid grid-cols-1 lg:grid-cols-[min-content_minmax(0,1fr)] gap-8" class="md:px-4 lg:px-8 mx-auto mt-8 w-full max-w-screen-xl lg:mt-20 grid grid-cols-1 lg:grid-cols-[min-content_minmax(0,1fr)] gap-8"
> >
<ul <ul
@ -64,7 +63,7 @@
</li> </li>
{{ end }} {{ end }}
</ul> </ul>
<div class="grid grid-cols-1 gap-5 grid-rows-[min-content] h-fit"> <div class="settings">
<nav <nav
aria-label="Breadcrumb" aria-label="Breadcrumb"
class="mx-8 lg:mx-0 grid justify-center lg:justify-start" class="mx-8 lg:mx-0 grid justify-center lg:justify-start"

View file

@ -1,8 +1,5 @@
{{ define "main" }} {{ define "main" }}
<div <div class="container max-w-screen-md flex flex-col mt-20 gap-20">
id="page-index"
class="container max-w-screen-md flex flex-col mt-20 gap-20"
>
{{ $length := len .Targets }} {{ $length := len .Targets }}
{{ if eq $length 0 }} {{ if eq $length 0 }}
<section> <section>
@ -32,55 +29,40 @@
</div> </div>
</section> </section>
{{ else }} {{ else }}
{{ if eq .Outcome "HEALTHY" }} {{ if or (eq .Status "UNKNOWN") (eq .Status "SUCCESS") }}
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<svg <svg
class="feather h-20 w-20 rounded-full bg-green-300 p-4 overflow-visible" class="feather h-20 w-20 rounded-full bg-green-300 p-4 overflow-visible"
> >
<use href="/static/icons/feather-sprite.svg#check" /> <use href="/static/icons/feather-sprite.svg#check" />
</svg> </svg>
<h1 class="text-gray-700 mt-4 text-lg">All services are online</h1> <h1 class="text-gray-700 mt-4">All services are online</h1>
<p class="text-gray-700 text-sm"> <p class="text-gray-700 text-sm">
Last updated on Last updated on
{{ Now.UTC.Format "Jan 02 at 15:04 MST" }} {{ Now.UTC.Format "Jan 02 at 15:04 MST" }}
</p> </p>
</div> </div>
{{ else if eq .Outcome "UNKNOWN" }} {{ else if eq .Status "INCIDENT" }}
<div class="flex flex-col items-center">
<svg
class="feather h-20 w-20 rounded-full bg-gray-300 p-4 overflow-visible"
>
<use href="/static/icons/feather-sprite.svg#help-circle" />
</svg>
<h1 class="text-gray-700 mt-4 text-lg">
We are unable to determine current status
</h1>
<p class="text-gray-700 text-sm">
Last updated on
{{ Now.UTC.Format "Jan 02 at 15:04 MST" }}
</p>
</div>
{{ else if eq .Outcome "DOWN" }}
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<svg <svg
class="feather h-20 w-20 rounded-full bg-red-300 p-4 overflow-visible" class="feather h-20 w-20 rounded-full bg-red-300 p-4 overflow-visible"
> >
<use href="/static/icons/feather-sprite.svg#alert-circle" /> <use href="/static/icons/feather-sprite.svg#alert-triangle" />
</svg> </svg>
<h1 class="text-gray-700 mt-4 text-lg">Some services are down</h1> <h1 class="text-gray-700 mt-4">Incident in progress</h1>
<p class="text-gray-700 text-sm"> <p class="text-gray-700 text-sm">
Last updated on Last updated on
{{ Now.UTC.Format "Jan 02 at 15:04 MST" }} {{ Now.UTC.Format "Jan 02 at 15:04 MST" }}
</p> </p>
</div> </div>
{{ else if eq .Outcome "DEGRADED" }} {{ else }}
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<svg <svg
class="feather h-20 w-20 rounded-full bg-orange-300 p-4 overflow-visible" class="feather h-20 w-20 rounded-full bg-orange-300 p-4 overflow-visible"
> >
<use href="/static/icons/feather-sprite.svg#alert-triangle" /> <use href="/static/icons/feather-sprite.svg#alert-triangle" />
</svg> </svg>
<h1 class="text-gray-700 mt-4 text-lg">Degraded services</h1> <h1 class="text-gray-700 mt-4">Degraded performance</h1>
<p class="text-gray-700 text-sm"> <p class="text-gray-700 text-sm">
Last updated on Last updated on
{{ Now.UTC.Format "Jan 02 at 15:04 MST" }} {{ Now.UTC.Format "Jan 02 at 15:04 MST" }}
@ -93,10 +75,10 @@
role="group" role="group"
> >
<a <a
href="/?time-range=60days" href="/?time-range=90days"
class="{{ if eq .TimeRange "60days" }}active{{ end }}" class="{{ if eq .TimeRange "90days" }}active{{ end }}"
type="button" type="button"
>60 Days</a >90 Days</a
> >
<a <a
href="/?time-range=48hours" href="/?time-range=48hours"
@ -105,10 +87,10 @@
>48 Hours</a >48 Hours</a
> >
<a <a
href="/?time-range=60minutes" href="/?time-range=90minutes"
class="{{ if eq .TimeRange "60minutes" }}active{{ end }}" class="{{ if eq .TimeRange "90minutes" }}active{{ end }}"
type="button" type="button"
>60 Minutes</a >90 Minutes</a
> >
</div> </div>
{{ range $group, $targetsAndStatus := .Targets }} {{ range $group, $targetsAndStatus := .Targets }}
@ -121,16 +103,14 @@
> >
<span <span
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full
{{ if eq $targetsAndStatus.Outcome "HEALTHY" }} {{ if eq $targetsAndStatus.Status "SUCCESS" }}
bg-green-100 text-green-800 bg-green-100 text-green-800
{{ else if eq $targetsAndStatus.Outcome "DOWN" }} {{ else if eq $targetsAndStatus.Status "FAILURE" }}
bg-red-100 text-red-800 bg-red-100 text-red-800
{{ else if eq $targetsAndStatus.Outcome "DEGRADED" }}
bg-orange-100 text-orange-800
{{ else }} {{ else }}
bg-gray-100 text-gray-800 bg-gray-100 text-gray-800
{{ end }}" {{ end }}"
>{{ .Outcome }}</span >{{ .Status }}</span
> >
<h2 class="flex-1 font-semibold capitalize"> <h2 class="flex-1 font-semibold capitalize">
{{ $group }} {{ $group }}
@ -148,20 +128,23 @@
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span <span
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full
{{ if eq .Outcome "HEALTHY" }} {{ if eq .Status "SUCCESS" }}
bg-green-100 text-green-800 bg-green-100 text-green-800
{{ else if eq .Outcome "DOWN" }} {{ else if eq .Status "FAILURE" }}
bg-red-100 text-red-800 bg-red-100 text-red-800
{{ else if eq .Outcome "DEGRADED" }}
bg-orange-100 text-orange-800
{{ else }} {{ else }}
bg-gray-100 text-gray-800 bg-gray-100 text-gray-800
{{ end }}" {{ end }}"
>{{ .Outcome }}</span >{{ .Status }}</span
> >
<h4> <h4>
{{ .Name }} {{ .Name }}
{{ if eq .Visibility "PUBLIC" }} {{ if eq .Visibility "PUBLIC" }}
<span
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800"
>
Public
</span>
{{ else if eq .Visibility "PRIVATE" }} {{ else if eq .Visibility "PRIVATE" }}
<span <span
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-fuchsia-100 text-fuchsia-800" class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-fuchsia-100 text-fuchsia-800"
@ -180,63 +163,86 @@
<div class="justify-self-end text-sm"> <div class="justify-self-end text-sm">
{{ printf "%.2f" .Uptime }}% uptime {{ printf "%.2f" .Uptime }}% uptime
</div> </div>
<div <div
class="grid gap-px col-span-2 grid-flow-col h-8 rounded overflow-hidden" class="grid gap-px col-span-2 grid-flow-col h-8 rounded overflow-hidden"
> >
{{ range .History }} {{ range .History }}
<div <div
class="has-tooltip [&_.tooltip]:hover:flex [&_.tooltip]:hover:visible flex class="has-tooltip [&_.tooltip]:hover:flex [&_.tooltip]:hover:visible flex"
{{ if eq .Outcome "HEALTHY" }}
history healthy
{{ else if eq .Outcome "DOWN" }}
history down
{{ else if eq .Outcome "DEGRADED" }}
history degraded
{{ else }}
history unknown
{{ end }}"
> >
<div class="flex-auto bar"></div> {{ if eq .Status "SUCCESS" }}
<div
class="bg-green-400 hover:bg-green-500 flex-auto"
></div>
{{ else if eq .Status "FAILURE" }}
<div
class="bg-red-400 hover:bg-red-500 flex-auto"
></div>
{{ else }}
<div
class="bg-gray-200 hover:bg-gray-300 flex-auto"
></div>
{{ end }}
<div <div
class="tooltip flex flex-col gap-2 bg-white border border-gray-200 rounded p-2 shadow-lg hidden z-50 absolute mt-10 -ml-4 flex-row text-xs" class="tooltip flex flex-col gap-2 bg-white border border-gray-200 rounded p-2 shadow-lg hidden z-50 absolute mt-10 -ml-4 flex-row text-xs"
> >
<div class="flex flex-row gap-2 justify-between"> <div
{{ if eq $.TimeRange "60days" }} class="flex flex-row gap-2 justify-between pb-2 border-b border-gray-200"
>
{{ if eq $.TimeRange "90days" }}
{{ .Date.Format "Jan 02" }} {{ .Date.Format "Jan 02" }}
{{ else if eq $.TimeRange "48hours" }} {{ else if eq $.TimeRange "48hours" }}
{{ .Date.Format "Jan 02, 15:00 MST" }} {{ .Date.Format "Jan 02, 15:00 MST" }}
{{ else if eq $.TimeRange "60minutes" }} {{ else if eq $.TimeRange "90minutes" }}
{{ .Date.Format "Jan 02, 15:04 MST" }} {{ .Date.Format "Jan 02, 15:04 MST" }}
{{ end }} {{ end }}
<span <span
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full
{{ if eq .Outcome "HEALTHY" }} {{ if eq .Status "SUCCESS" }}
bg-green-100 text-green-800 bg-green-100 text-green-800
{{ else if eq .Outcome "DOWN" }} {{ else if eq .Status "FAILURE" }}
bg-red-100 text-red-800 bg-red-100 text-red-800
{{ else if eq .Outcome "DEGRADED" }}
bg-orange-100 text-orange-800
{{ else }} {{ else }}
bg-gray-100 text-gray-800 bg-gray-100 text-gray-800
{{ end }}" {{ end }}"
>{{ .Outcome }} >{{ .Status }}
({{ printf "%.2f" .SuccessRate }}%)
</span> </span>
</div> </div>
{{ range .Checks }}
<div class="flex flex-row gap-2 justify-between">
<p>
{{ .Name }} on
{{ .WorkerGroupName }}
</p>
<span
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full
{{ if eq .Status "SUCCESS" }}
bg-green-100 text-green-800
{{ else if eq .Status "FAILURE" }}
bg-red-100 text-red-800
{{ else }}
bg-gray-100 text-gray-800
{{ end }}"
>{{ .Status }}
({{ printf "%.2f" .SuccessRate }}%)
</span>
</div>
{{ end }}
</div> </div>
</div> </div>
{{ end }} {{ end }}
</div> </div>
<div <div
class="text-slate-500 justify-self-start text-xs tracking-wider" class="text-slate-500 justify-self-start text-xs tracking-wider"
> >
{{ if eq $.TimeRange "60days" }} {{ if eq $.TimeRange "90days" }}
60 days ago 90 days ago
{{ else if eq $.TimeRange "48hours" }} {{ else if eq $.TimeRange "48hours" }}
48 hours ago 48 hours ago
{{ else if eq $.TimeRange "60minutes" }} {{ else if eq $.TimeRange "90minutes" }}
60 minutes ago 90 minutes ago
{{ end }} {{ end }}
</div> </div>
<div <div