pinokiod 7.5.45 → 7.5.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pinokiod",
3
- "version": "7.5.45",
3
+ "version": "7.5.50",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -70,9 +70,22 @@ body.dark .app-header-identity {
70
70
  0 1px 2px rgba(2, 6, 23, 0.35);
71
71
  color: rgba(248, 250, 252, 0.94);
72
72
  }
73
+ body.app-page > header.navheader h1 {
74
+ width: 100%;
75
+ max-width: 100%;
76
+ min-width: 0;
77
+ box-sizing: border-box;
78
+ flex-wrap: nowrap;
79
+ }
80
+ body.app-page > header.navheader h1 > .home,
81
+ body.app-page > header.navheader h1 > .btn2,
82
+ body.app-page > header.navheader h1 > .sep,
83
+ body.app-page > header.navheader h1 > .home-server-popover {
84
+ flex: 0 0 auto;
85
+ }
73
86
  .app-header-info {
74
87
  position: relative;
75
- flex: 0 1 auto;
88
+ flex: 1 1 auto;
76
89
  min-width: 0;
77
90
  display: inline-flex;
78
91
  align-items: center;
@@ -87,7 +100,8 @@ body.dark .app-header-identity {
87
100
  align-items: center;
88
101
  gap: 8px;
89
102
  min-width: 0;
90
- max-width: min(260px, 32vw);
103
+ width: 100%;
104
+ max-width: none;
91
105
  height: 22px;
92
106
  padding: 0 4px;
93
107
  margin: 0 -4px;
@@ -266,6 +280,7 @@ body.dark .app-header-identity-separator {
266
280
  body.app-page header.navheader h1 > .flexible {
267
281
  flex: 0 0 0;
268
282
  min-width: 0;
283
+ margin-left: auto;
269
284
  }
270
285
  body.app-page header.navheader .nav-labeled-action {
271
286
  width: auto;
@@ -309,9 +324,17 @@ body.app-page header.navheader .nav-labeled-action:focus-visible {
309
324
  background: var(--pinokio-sidebar-tab-active-bg);
310
325
  color: var(--pinokio-sidebar-tab-active-color);
311
326
  }
327
+ @media only screen and (max-width: 1180px) {
328
+ body.app-page header.navheader .app-header-identity-separator,
329
+ body.app-page header.navheader .resource-chip--cpu,
330
+ body.app-page header.navheader .resource-chip--ram,
331
+ body.app-page header.navheader .resource-chip--vram {
332
+ display: none !important;
333
+ }
334
+ }
312
335
  .resource-usage {
313
336
  position: relative;
314
- flex: 0 0 auto;
337
+ flex: 0 1 auto;
315
338
  min-width: 0;
316
339
  display: inline-flex;
317
340
  align-items: center;
@@ -327,6 +350,8 @@ body.app-page header.navheader .nav-labeled-action:focus-visible {
327
350
  gap: 8px;
328
351
  height: 22px;
329
352
  min-width: 0;
353
+ max-width: 100%;
354
+ overflow: hidden;
330
355
  padding: 0 7px;
331
356
  margin: 0;
332
357
  border-radius: 999px;
@@ -122,30 +122,7 @@ body.frozen {
122
122
  <header class='grabbable'>
123
123
  <h1>
124
124
  <a class='home' href="/home"><img class='icon' src="/pinokio-black.png"></a>
125
- <button class='btn2' id='minimize-header' data-tippy-content="fullscreen" title='fullscreen'>
126
- <div><i class="fa-solid fa-expand"></i></div>
127
- </button>
128
- <a class='btn2 pinokio-explore-nav-button' href="/home?mode=explore" data-pinokio-explore-nav="true" data-tippy-content="Explore" title="Explore" aria-label="Explore">
129
- <div><i class="fa-solid fa-globe" aria-hidden="true"></i></div>
130
- </a>
131
- <button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
132
- <button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
133
- <button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
134
- <button class='btn2' id='screenshot' data-tippy-content="screen capture"><i class="fa-solid fa-camera"></i></button>
135
- <button class='btn2' id='inspector' data-tippy-content="X-ray mode"><i class="fa-solid fa-eye"></i></button>
136
125
  <div class='flexible'></div>
137
- <a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
138
- <div><i class="fa-solid fa-table-columns"></i></div>
139
- </a>
140
- <a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
141
- <div><i class="fa-solid fa-table-columns fa-rotate-270"></i></div>
142
- </a>
143
- <button class='btn2' id='new-window' data-tippy-content="open a new window" title='open a new window' data-agent="<%=agent%>">
144
- <div><i class="fa-solid fa-plus"></i></div>
145
- </button>
146
- <button class='btn2 hidden' id='close-window' data-tippy-content='close this section'>
147
- <div><i class="fa-solid fa-xmark"></i></div>
148
- </button>
149
126
  </h1>
150
127
  </header>
151
128
  <% if (requirements_pending) { %>
@@ -636,6 +636,33 @@ test("navbar URL picker is hidden without removing URL dropdown behavior", async
636
636
  assert.match(script, /showMobileModal/)
637
637
  })
638
638
 
639
+ test("app navbar stays on one line when app identity and Home Server controls are present", async () => {
640
+ const appView = await fs.readFile(path.resolve(root, "server/views/app.ejs"), "utf8")
641
+
642
+ assert.match(appView, /body\.app-page > header\.navheader h1\s*\{[\s\S]*box-sizing:\s*border-box;[\s\S]*flex-wrap:\s*nowrap;/)
643
+ assert.match(appView, /body\.app-page > header\.navheader h1 > \.home,[\s\S]*body\.app-page > header\.navheader h1 > \.home-server-popover\s*\{[\s\S]*flex:\s*0 0 auto;/)
644
+ assert.match(appView, /body\.app-page header\.navheader h1 > \.flexible\s*\{[\s\S]*flex:\s*0 0 0;[\s\S]*margin-left:\s*auto;/)
645
+ assert.match(appView, /\.app-header-identity\s*\{[\s\S]*flex:\s*1 1 auto;[\s\S]*max-width:\s*none;/)
646
+ assert.doesNotMatch(appView, /nav-action-label\s*\{[^}]*display:\s*none;/)
647
+ assert.match(appView, /@media only screen and \(max-width: 1180px\)\s*\{[\s\S]*\.resource-chip--vram[\s\S]*display:\s*none !important;/)
648
+ })
649
+
650
+ test("download page header does not show browser chrome controls", async () => {
651
+ const downloadView = await fs.readFile(path.resolve(root, "server/views/download.ejs"), "utf8")
652
+
653
+ assert.match(downloadView, /<header class='grabbable'>[\s\S]*<a class='home' href="\/home">[\s\S]*<div class='flexible'><\/div>[\s\S]*<\/header>/)
654
+ assert.doesNotMatch(downloadView, /id=['"]minimize-header['"]/)
655
+ assert.doesNotMatch(downloadView, /pinokio-explore-nav-button/)
656
+ assert.doesNotMatch(downloadView, /id=['"]back['"]/)
657
+ assert.doesNotMatch(downloadView, /id=['"]forward['"]/)
658
+ assert.doesNotMatch(downloadView, /id=['"]refresh-page['"]/)
659
+ assert.doesNotMatch(downloadView, /id=['"]screenshot['"]/)
660
+ assert.doesNotMatch(downloadView, /id=['"]inspector['"]/)
661
+ assert.doesNotMatch(downloadView, /href="\/columns"/)
662
+ assert.doesNotMatch(downloadView, /href="\/rows"/)
663
+ assert.doesNotMatch(downloadView, /id=['"]new-window['"]/)
664
+ })
665
+
639
666
  test("home server dropdown exposes router-discovered non-Pinokio routes separately", () => {
640
667
  const server = Object.create(Server.prototype)
641
668
  const routes = server.collectHomeServerRoutes({