diff --git a/VERSION b/VERSION index 12d56af..b6b590c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2026.6.0004 +2026.6.0005 diff --git a/src/core/ui/launcher.templ b/src/core/ui/launcher.templ index 3f76a7a..45a85b9 100644 --- a/src/core/ui/launcher.templ +++ b/src/core/ui/launcher.templ @@ -1,5 +1,7 @@ package ui +import appver "git.lohmar.co.uk/lexton-it/NextWks/core/version" + templ LauncherPage(userName string, role string, apps []AppTile) { @@ -21,6 +23,9 @@ templ LauncherPage(userName string, role string, apps []AppTile) { @greetingSection(userName) @AppGrid(apps) + @@ -149,40 +154,20 @@ templ workspaceCSS() { .app-card.disabled{opacity:0.35;cursor:default} .app-card.disabled:active{transform:none} - /* Overlay & Modal */ - .overlay{ - position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:1000; - display:flex;align-items:center;justify-content:center; - backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px) + /* Footer */ + .footer{ + text-align:center;padding:16px;color:var(--text3);font-size:0.7rem; + border-top:1px solid var(--border);margin-top:auto } - .modal{ - background:var(--surface); border:1px solid var(--border); - border-radius:var(--radius); width:92%; max-width:420px; max-height:85vh; overflow-y:auto - } - .modal-head{ - display:flex;justify-content:space-between;align-items:center; - padding:18px 20px 12px - } - .modal-head h2{font-size:1.1rem;font-weight:600} - .modal-body{padding:0 20px 20px} - .close-btn{ - width:32px;height:32px;border-radius:50%;border:none;background:transparent; - color:var(--text2);font-size:22px;cursor:pointer;display:flex;align-items:center;justify-content:center - } - .modal-body h3{font-size:0.85rem;font-weight:600;color:var(--text2);margin:14px 0 6px;text-transform:uppercase;letter-spacing:0.5px} - .modal-body ol{padding-left:18px} - .modal-body li{font-size:0.85rem;color:var(--text);margin-bottom:4px;line-height:1.5} - .modal-body code{background:var(--surface2);padding:1px 5px;border-radius:4px;font-size:0.8rem} - .modal-body .btn{ - display:block;width:100%;padding:12px;margin-top:16px;border:none;border-radius:var(--radius-sm); - background:var(--blue);color:#fff;font-size:0.9rem;font-weight:600;cursor:pointer;text-align:center - } - .modal-body .btn:hover{opacity:0.9} } // --- Helpers --- +func version() string { + return appver.Version +} + func initials(name string) string { if name == "" { return "?" } if len(name) == 1 { return name } diff --git a/src/core/ui/launcher_templ.go b/src/core/ui/launcher_templ.go index 825b648..46a30ab 100644 --- a/src/core/ui/launcher_templ.go +++ b/src/core/ui/launcher_templ.go @@ -8,6 +8,8 @@ package ui import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" +import appver "git.lohmar.co.uk/lexton-it/NextWks/core/version" + func LauncherPage(userName string, role string, apps []AppTile) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context @@ -49,7 +51,20 @@ func LauncherPage(userName string, role string, apps []AppTile) templ.Component if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "

Install Next Workspace

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "
NextWks v") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var2 string + templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(appver.Version) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 27, Col: 36} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "

Install Next Workspace

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -57,7 +72,7 @@ func LauncherPage(userName string, role string, apps []AppTile) templ.Component if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -81,51 +96,51 @@ func greetingSection(userName string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var2 := templ.GetChildren(ctx) - if templ_7745c5c3_Var2 == nil { - templ_7745c5c3_Var2 = templ.NopComponent + templ_7745c5c3_Var3 := templ.GetChildren(ctx) + if templ_7745c5c3_Var3 == nil { + templ_7745c5c3_Var3 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var3 string - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(initials(userName)) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 46, Col: 42} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "

Good ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var4 string - templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(timeOfDay()) + templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(initials(userName)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 48, Col: 25} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 51, Col: 42} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, ", ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "

Good ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var5 string - templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(userName) + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(timeOfDay()) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 48, Col: 39} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 53, Col: 25} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "

Your workspace is ready

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, ", ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var6 string + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(userName) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 53, Col: 39} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "

Your workspace is ready

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -149,25 +164,25 @@ func topBar(userName string, role string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var6 := templ.GetChildren(ctx) - if templ_7745c5c3_Var6 == nil { - templ_7745c5c3_Var6 = templ.NopComponent + templ_7745c5c3_Var7 := templ.GetChildren(ctx) + if templ_7745c5c3_Var7 == nil { + templ_7745c5c3_Var7 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "
N
NextWks
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
N
NextWks
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var7 string - templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(initials(userName)) + var templ_7745c5c3_Var8 string + templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(initials(userName)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 65, Col: 47} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/launcher.templ`, Line: 70, Col: 47} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -191,12 +206,12 @@ func workspaceCSS() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var8 := templ.GetChildren(ctx) - if templ_7745c5c3_Var8 == nil { - templ_7745c5c3_Var8 = templ.NopComponent + templ_7745c5c3_Var9 := templ.GetChildren(ctx) + if templ_7745c5c3_Var9 == nil { + templ_7745c5c3_Var9 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -206,6 +221,10 @@ func workspaceCSS() templ.Component { // --- Helpers --- +func version() string { + return appver.Version +} + func initials(name string) string { if name == "" { return "?" @@ -238,12 +257,12 @@ func pwaInstructions() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var9 := templ.GetChildren(ctx) - if templ_7745c5c3_Var9 == nil { - templ_7745c5c3_Var9 = templ.NopComponent + templ_7745c5c3_Var10 := templ.GetChildren(ctx) + if templ_7745c5c3_Var10 == nil { + templ_7745c5c3_Var10 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "

Desktop Chrome/Edge

  1. Click the icon in the address bar
  2. Click Install

iOS Safari

  1. Tap Share
  2. Tap Add to Home Screen

Android Chrome

  1. Tap menu
  2. Tap Install app
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "

Desktop Chrome/Edge

  1. Click the icon in the address bar
  2. Click Install

iOS Safari

  1. Tap Share
  2. Tap Add to Home Screen

Android Chrome

  1. Tap menu
  2. Tap Install app
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -268,12 +287,12 @@ func launcherJS() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var10 := templ.GetChildren(ctx) - if templ_7745c5c3_Var10 == nil { - templ_7745c5c3_Var10 = templ.NopComponent + templ_7745c5c3_Var11 := templ.GetChildren(ctx) + if templ_7745c5c3_Var11 == nil { + templ_7745c5c3_Var11 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err }