22import { watchEffect } from ' vue'
33import { definePageMeta } from ' #imports'
44import { useClient } from ' ~/composables/client'
5+ import { ensureDevAuthToken , isDevAuthed } from ' ~/composables/dev-auth'
56import { rpc } from ' ~/composables/rpc'
67import { getCategorizedTabs , useAllTabs } from ' ~/composables/state-tabs'
78import { telemetryEnabled } from ' ~/composables/telemetry'
@@ -62,28 +63,48 @@ const MinimizeInactiveOptions = [
6263
6364const categories = getCategorizedTabs (useAllTabs ())
6465
66+ // Persisting settings is a token-gated action (see storage-options watcher).
67+ // When the user deliberately edits a setting on this page, ensure the session
68+ // is authenticated once so the change is actually written to disk.
69+ let authEnsured = false
70+ async function onEdit() {
71+ if (authEnsured || isDevAuthed .value )
72+ return
73+ authEnsured = true
74+ try {
75+ await ensureDevAuthToken ()
76+ }
77+ catch {
78+ authEnsured = false
79+ }
80+ }
81+
6582function toggleTab(name : string , v ? : boolean ) {
83+ onEdit ()
6684 if (v )
6785 hiddenTabs .value = hiddenTabs .value .filter (i => i !== name )
6886 else
6987 hiddenTabs .value .push (name )
7088}
7189
7290function toggleTabCategory(name : string , v ? : boolean ) {
91+ onEdit ()
7392 if (v )
7493 hiddenTabCategories .value = hiddenTabCategories .value .filter (i => i !== name )
7594 else
7695 hiddenTabCategories .value .push (name )
7796}
7897
7998function togglePinTab(name : string ) {
99+ onEdit ()
80100 if (pinnedTabs .value .includes (name ))
81101 pinnedTabs .value = pinnedTabs .value .filter (i => i !== name )
82102 else
83103 pinnedTabs .value .push (name )
84104}
85105
86106function pinMove(name : string , delta : number ) {
107+ onEdit ()
87108 const index = pinnedTabs .value .indexOf (name )
88109 if (index === - 1 )
89110 return
@@ -105,7 +126,7 @@ async function clearOptions() {
105126 if (key .startsWith (' nuxt-devtools-' ))
106127 localStorage .removeItem (key )
107128 })
108- await rpc .clearOptions ()
129+ await rpc .clearOptions (await ensureDevAuthToken () )
109130 client .value ?.app ?.reload ?.()
110131 window .location .reload ()
111132 }
@@ -200,18 +221,18 @@ watchEffect(() => {
200221 </div >
201222 <div mx--2 my1 h-1px border =" b base" op75 />
202223 <p >UI Scale</p >
203- <NSelect v-model =" scale " n="primary">
224+ <NSelect v-model =" scale " n="primary" @ update : model-value = " onEdit " >
204225 <option v-for =" i of scaleOptions" :key =" i[0]" :value =" i[1]" >
205226 {{ i[0] }}
206227 </option >
207228 </NSelect >
208229 <div mx--2 my1 h-1px border =" b base" op75 />
209- <NCheckbox v-model =" sidebarExpanded " n-primary>
230+ <NCheckbox v-model =" sidebarExpanded " n-primary @ update : model-value = " onEdit " >
210231 <span >
211232 Expand Sidebar
212233 </span >
213234 </NCheckbox >
214- <NCheckbox v-model =" sidebarScrollable " :disabled =" sidebarExpanded " n-primary>
235+ <NCheckbox v-model =" sidebarScrollable " :disabled =" sidebarExpanded " n-primary @ update : model-value = " onEdit " >
215236 <span >
216237 Scrollable Sidebar
217238 </span >
@@ -222,24 +243,24 @@ watchEffect(() => {
222243 Features
223244 </h3 >
224245 <NCard p4 flex="~ col gap-2">
225- <NCheckbox v-model =" interactionCloseOnOutsideClick " n-primary>
246+ <NCheckbox v-model =" interactionCloseOnOutsideClick " n-primary @ update : model-value = " onEdit " >
226247 <span >Close DevTools when clicking outside</span >
227248 </NCheckbox >
228249 <!-- <NCheckbox v-model="showExperimentalFeatures" n-primary>
229250 <span>Show experimental features</span>
230251 </NCheckbox> -->
231- <NCheckbox v-model =" showHelpButtons " n-primary>
252+ <NCheckbox v-model =" showHelpButtons " n-primary @ update : model-value = " onEdit " >
232253 <span >Show help buttons</span >
233254 </NCheckbox >
234255
235- <NCheckbox v-model =" showPanel " n-primary>
256+ <NCheckbox v-model =" showPanel " n-primary @ update : model-value = " onEdit " >
236257 <span >Show the floating panel</span >
237258 </NCheckbox >
238259
239260 <div mx--2 my1 h-1px border =" b base" op75 />
240261
241262 <p >Minimize floating panel on inactive</p >
242- <NSelect v-model .number =" minimizePanelInactive " n-primary>
263+ <NSelect v-model .number =" minimizePanelInactive " n-primary @ update : model-value = " onEdit " >
243264 <option v-for =" i of MinimizeInactiveOptions" :key =" i[0]" :value =" i[1]" >
244265 {{ i[0] }}
245266 </option >
@@ -248,7 +269,7 @@ watchEffect(() => {
248269 <div mx--2 my1 h-1px border =" b base" op75 />
249270
250271 <p >Open In Editor</p >
251- <NSelect v-model =" openInEditor " n-primary>
272+ <NSelect v-model =" openInEditor " n-primary @ update : model-value = " onEdit " >
252273 <option v-for =" i of editorOptions" :key =" i[0]" :value =" i[1]" >
253274 {{ i[0] }}
254275 </option >
0 commit comments