From 65e53cc7bdd84a6dadabdd089f42186faa4b1f4e Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Tue, 17 Dec 2024 16:55:12 +0100
Subject: [PATCH 01/65] Auto connect if only one port available

---
 ui/arduino/store.js                    | 14 ++++++++++++++
 ui/arduino/views/components/toolbar.js |  2 +-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 09a373e..116c0dc 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -210,6 +210,20 @@ async function store(state, emitter) {
     emitter.emit('render')
   })
 
+  emitter.on('connect', async () => {
+    try {
+      state.availablePorts = await getAvailablePorts()
+    } catch(e) {
+      console.error('Could not get available ports. ', e)
+    }
+
+    if(state.availablePorts.length == 1) {
+      emitter.emit('select-port', state.availablePorts[0])
+    } else {
+      emitter.emit('open-connection-dialog')
+    }
+  })
+
   // CODE EXECUTION
   emitter.on('run', async (onlySelected = false) => {
     log('run')
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index 70982b0..eff0731 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -16,7 +16,7 @@ function Toolbar(state, emit) {
       ${Button({
         icon: state.isConnected ? 'connect.svg' : 'disconnect.svg',
         tooltip: state.isConnected ? `Disconnect (${metaKeyString}+Shift+D)` : `Connect (${metaKeyString}+Shift+C)`,
-        onClick: () => state.isConnected ? emit('disconnect') : emit('open-connection-dialog'),
+        onClick: () => state.isConnected ? emit('disconnect') : emit('connect'),
         active: state.isConnected
       })}
 

From 07fa1cea111127303b839bbc31c2da1c62d670c2 Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Tue, 17 Dec 2024 16:55:55 +0100
Subject: [PATCH 02/65] Display connection status

---
 ui/arduino/main.css                       | 15 ++++++++++++++-
 ui/arduino/views/components/repl-panel.js |  4 ++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index cc0e95c..37fa561 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -273,7 +273,7 @@ button.small .icon {
 }
 
 #panel #drag-handle {
-  width: 100%;
+  flex-grow: 2;
   height: 100%;
   cursor: grab;
 }
@@ -293,6 +293,19 @@ button.small .icon {
   background: #008184;
 }
 
+.panel-bar #connection-status {
+  display: flex;
+  align-items: center;
+  gap: 10px;
+  color: white;
+}
+
+.panel-bar #connection-status img {
+  width: 1.25em;
+  height: 1.25em;
+  filter: invert(1);
+}
+
 .panel-bar .term-operations {
   transition: opacity 0.15s;
   display: flex;
diff --git a/ui/arduino/views/components/repl-panel.js b/ui/arduino/views/components/repl-panel.js
index 3974d50..7a89fbd 100644
--- a/ui/arduino/views/components/repl-panel.js
+++ b/ui/arduino/views/components/repl-panel.js
@@ -13,6 +13,10 @@ function ReplPanel(state, emit) {
   return html`
     <div id="panel" style="height: ${state.panelHeight}px">
       <div class="panel-bar">
+        <div id="connection-status" style="visibility:${state.isConnected ? 'visible' : 'hidden'};">
+          <img src="media/connect.svg" />
+          <div>${state.isConnected ? 'Connected to ' + state.connectedPort : ''}</div>
+        </div>
         <div id="drag-handle"
           onmousedown=${() => emit('start-resizing-panel')}
           onmouseup=${() => emit('stop-resizing-panel')}

From e2784f4d043c8f2e66f3eb5a336a88bff06fe9ed Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 18 Dec 2024 18:24:57 +0100
Subject: [PATCH 03/65] WIP: new file from editor.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/index.html                         |  1 +
 ui/arduino/main.css                           | 17 +++++----
 ui/arduino/store.js                           | 38 +++++++++++++------
 .../views/components/connection-dialog.js     |  4 +-
 .../components/new-file-destination-dialog.js | 22 +++++++++++
 ui/arduino/views/components/toolbar.js        |  7 ++++
 ui/arduino/views/editor.js                    |  1 +
 ui/arduino/views/file-manager.js              |  1 +
 8 files changed, 71 insertions(+), 20 deletions(-)
 create mode 100644 ui/arduino/views/components/new-file-destination-dialog.js

diff --git a/ui/arduino/index.html b/ui/arduino/index.html
index 8478cc7..63a5981 100644
--- a/ui/arduino/index.html
+++ b/ui/arduino/index.html
@@ -25,6 +25,7 @@
     <!-- Components -->
     <script type="text/javascript" src="views/components/code-editor.js" charset="utf-8"></script>
     <script type="text/javascript" src="views/components/connection-dialog.js" charset="utf-8"></script>
+    <script type="text/javascript" src="views/components/new-file-destination-dialog.js" charset="utf-8"></script>
     <script type="text/javascript" src="views/components/file-actions.js" charset="utf-8"></script>
     <script type="text/javascript" src="views/components/file-list.js" charset="utf-8"></script>
     <script type="text/javascript" src="views/components/repl-panel.js" charset="utf-8"></script>
diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index cc0e95c..f25c61e 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -330,7 +330,7 @@ button.small .icon {
   opacity: 0.5;
 }
 
-#dialog {
+.dialog {
   display: flex;
   flex-direction: column;
   justify-content: center;
@@ -350,13 +350,16 @@ button.small .icon {
   line-height: normal;
   background: rgba(236, 241, 241, 0.50);
 }
-#dialog.open {
+
+.dialog.open {
   opacity: 1;
   pointer-events: inherit;
   transition: opacity 0.15s;
 }
 
-#dialog .dialog-content {
+
+
+.dialog .dialog-content {
   display: flex;
   width: 576px;
   padding: 36px;
@@ -372,16 +375,16 @@ button.small .icon {
   transition: transform 0.15s;
 }
 
-#dialog.open .dialog-content {
+.dialog.open .dialog-content {
   transform: translateY(0px);
   transition: transform 0.15s;
 }
 
-#dialog .dialog-content > * {
+.dialog .dialog-content > * {
   width: 100%;
 }
 
-#dialog .dialog-content .item {
+.dialog .dialog-content .item {
   border-radius: 4.5px;
   display: flex;
   padding: 10px;
@@ -391,7 +394,7 @@ button.small .icon {
   cursor: pointer;
 }
 
-#dialog .dialog-content .item:hover {
+.dialog .dialog-content .item:hover {
   background: #008184;
   color: #ffffff;
 }
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 09a373e..67b2b70 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -49,6 +49,8 @@ async function store(state, emitter) {
   state.isConnected = false
   state.connectedPort = null
 
+  state.isNewFileDialogOpen = false
+
   state.isSaving = false
   state.savingProgress = 0
   state.isTransferring = false
@@ -295,7 +297,17 @@ async function store(state, emitter) {
     window.removeEventListener('mousemove', state.resizePanel)
   })
 
-  // SAVING
+  // NEW FILE AND SAVING
+  emitter.on('create-new-file', () => {
+    log('create-new-file')
+    state.isNewFileDialogOpen = true
+    emitter.emit('render')
+  })
+  emitter.on('close-new-file-dialog', () => {
+    state.isNewFileDialogOpen = false
+    emitter.emit('render')
+  })
+
   emitter.on('save', async () => {
     log('save')
     let response = canSave({
@@ -514,18 +526,22 @@ async function store(state, emitter) {
     emitter.emit('render')
   })
 
-  emitter.on('create-file', (device) => {
+  emitter.on('create-file', (device, fileName = null) => {
     log('create-file', device)
     if (state.creatingFile !== null) return
     state.creatingFile = device
     state.creatingFolder = null
+    if (fileName != null) {
+      emitter.emit('finish-creating-file', fileName)
+    }
     emitter.emit('render')
   })
-  emitter.on('finish-creating-file', async (value) => {
-    log('finish-creating', value)
+  
+  emitter.on('finish-creating-file', async (fileNameParameter) => {
+    log('finish-creating', fileNameParameter)
     if (!state.creatingFile) return
 
-    if (!value) {
+    if (!fileNameParameter) {
       state.creatingFile = null
       emitter.emit('render')
       return
@@ -535,10 +551,10 @@ async function store(state, emitter) {
       let willOverwrite = await checkBoardFile({
         root: state.boardNavigationRoot,
         parentFolder: state.boardNavigationPath,
-        fileName: value
+        fileName: fileNameParameter
       })
       if (willOverwrite) {
-        const confirmAction = await confirm(`You are about to overwrite the file ${value} on your board.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
+        const confirmAction = await confirm(`You are about to overwrite the file ${fileNameParameter} on your board.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
         if (!confirmAction) {
           state.creatingFile = null
           emitter.emit('render')
@@ -550,7 +566,7 @@ async function store(state, emitter) {
         serialBridge.getFullPath(
           '/',
           state.boardNavigationPath,
-          value
+          fileNameParameter
         ),
         newFileContent
       )
@@ -558,10 +574,10 @@ async function store(state, emitter) {
       let willOverwrite = await checkDiskFile({
         root: state.diskNavigationRoot,
         parentFolder: state.diskNavigationPath,
-        fileName: value
+        fileName: fileNameParameter
       })
       if (willOverwrite) {
-        const confirmAction = await confirm(`You are about to overwrite the file ${value} on your disk.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
+        const confirmAction = await confirm(`You are about to overwrite the file ${fileNameParameter} on your disk.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
         if (!confirmAction) {
           state.creatingFile = null
           emitter.emit('render')
@@ -573,7 +589,7 @@ async function store(state, emitter) {
         disk.getFullPath(
           state.diskNavigationRoot,
           state.diskNavigationPath,
-          value
+          fileNameParameter
         ),
         newFileContent
       )
diff --git a/ui/arduino/views/components/connection-dialog.js b/ui/arduino/views/components/connection-dialog.js
index 2d99a47..56b1424 100644
--- a/ui/arduino/views/components/connection-dialog.js
+++ b/ui/arduino/views/components/connection-dialog.js
@@ -1,13 +1,13 @@
 function ConnectionDialog(state, emit) {
   const stateClass = state.isConnectionDialogOpen ? 'open' : 'closed'
   function onClick(e) {
-    if (e.target.id == 'dialog') {
+    if (e.target.id == 'dialog-connection') {
       emit('close-connection-dialog')
     }
   }
 
   return html`
-    <div id="dialog" class="${stateClass}" onclick=${onClick}>
+    <div id="dialog-connection" class="dialog ${stateClass}" onclick=${onClick}>
       <div class="dialog-content">
         ${state.availablePorts.map(
           (port) => html`
diff --git a/ui/arduino/views/components/new-file-destination-dialog.js b/ui/arduino/views/components/new-file-destination-dialog.js
new file mode 100644
index 0000000..9979443
--- /dev/null
+++ b/ui/arduino/views/components/new-file-destination-dialog.js
@@ -0,0 +1,22 @@
+function NewFileDestinationDialog(state, emit) {
+  const stateClass = state.isNewFileDialogOpen ? 'open' : 'closed'
+  function onClick(e) {
+    if (e.target.id == 'dialog-new-file') {
+      emit('close-new-file-dialog')
+    }
+  }
+  let boardOption = ''
+  if (state.isConnected) {
+    boardOption = html`
+      <div class="item" onclick=${() => {emit('create-file','board', 'board_capocchia.py')}}>Board</div>
+    `
+  }
+  return html`
+    <div id="dialog-new-file" class="dialog ${stateClass}" onclick=${onClick}>
+      <div class="dialog-content">
+        ${boardOption}
+        <div class="item" onclick=${() => {emit('create-file', 'disk', 'disk_capocchia.py')}}>Computer</div>
+      </div>
+    </div>
+  `
+}
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index 70982b0..2aaa447 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -49,6 +49,13 @@ function Toolbar(state, emit) {
 
       <div class="separator"></div>
 
+      ${Button({
+        icon: 'new-file.svg',
+        tooltip: `New (${metaKeyString}+N)`,
+        disabled: state.view != 'editor',
+        onClick: () => emit('create-new-file')
+      })}
+
       ${Button({
         icon: 'save.svg',
         tooltip: `Save (${metaKeyString}+S)`,
diff --git a/ui/arduino/views/editor.js b/ui/arduino/views/editor.js
index fd93b08..796bdea 100644
--- a/ui/arduino/views/editor.js
+++ b/ui/arduino/views/editor.js
@@ -7,5 +7,6 @@ function EditorView(state, emit) {
       ${ReplPanel(state, emit)}
     </div>
     ${ConnectionDialog(state, emit)}
+    ${NewFileDestinationDialog(state, emit)}
   `
 }
diff --git a/ui/arduino/views/file-manager.js b/ui/arduino/views/file-manager.js
index eafdf65..fd8a3c8 100644
--- a/ui/arduino/views/file-manager.js
+++ b/ui/arduino/views/file-manager.js
@@ -44,5 +44,6 @@ function FileManagerView(state, emit) {
       </div>
     </div>
     ${ConnectionDialog(state, emit)}
+    ${NewFileDestinationDialog(state, emit)}
   `
 }

From 6f025a78c165578801ab655adc8117bd8f816088 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 18 Dec 2024 19:36:14 +0100
Subject: [PATCH 04/65] WIP: dialog style.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                                        | 2 +-
 ui/arduino/views/components/new-file-destination-dialog.js | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index f25c61e..36e9468 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -381,7 +381,7 @@ button.small .icon {
 }
 
 .dialog .dialog-content > * {
-  width: 100%;
+  /* width: 100%; */
 }
 
 .dialog .dialog-content .item {
diff --git a/ui/arduino/views/components/new-file-destination-dialog.js b/ui/arduino/views/components/new-file-destination-dialog.js
index 9979443..cf6b620 100644
--- a/ui/arduino/views/components/new-file-destination-dialog.js
+++ b/ui/arduino/views/components/new-file-destination-dialog.js
@@ -14,6 +14,7 @@ function NewFileDestinationDialog(state, emit) {
   return html`
     <div id="dialog-new-file" class="dialog ${stateClass}" onclick=${onClick}>
       <div class="dialog-content">
+        <input type="text" id="file-name" placeholder="File name" />
         ${boardOption}
         <div class="item" onclick=${() => {emit('create-file', 'disk', 'disk_capocchia.py')}}>Computer</div>
       </div>

From 5a7bd0f6f77f50dd314b77d9e1d2c098f7ae8e96 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Thu, 19 Dec 2024 07:59:22 +0100
Subject: [PATCH 05/65] WIP: new file dialog box.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                           | 20 +++++++++
 ui/arduino/store.js                           |  3 ++
 .../components/new-file-destination-dialog.js | 42 +++++++++++++++++--
 ui/arduino/views/components/repl-panel.js     |  7 +++-
 4 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index 36e9468..e141767 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -272,6 +272,10 @@ button.small .icon {
   min-height: 45px;
 }
 
+#panel.dialog-open {
+  pointer-events: none;
+}
+
 #panel #drag-handle {
   width: 100%;
   height: 100%;
@@ -384,6 +388,10 @@ button.small .icon {
   /* width: 100%; */
 }
 
+.dialog .dialog-content input {
+  font-size: 1.4em;
+  width:100%;
+}
 .dialog .dialog-content .item {
   border-radius: 4.5px;
   display: flex;
@@ -399,6 +407,18 @@ button.small .icon {
   color: #ffffff;
 }
 
+.dialog .buttons-horizontal {
+  display: flex;
+  flex-direction: row;
+  justify-content: center;
+  width: 100%;
+  gap: 20px;
+}
+.dialog .buttons-horizontal .item {
+  flex-basis: 40%;
+  align-items: center;
+  background-color: #eee;;
+}
 #file-manager {
   display: flex;
   padding: 12px 32px 24px 32px;
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 67b2b70..51202d5 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1467,6 +1467,9 @@ async function store(state, emitter) {
       if (state.isConnectionDialogOpen) {
         emitter.emit('close-connection-dialog')
       }
+      if (state.isNewFileDialogOpen) {
+        emitter.emit('close-new-file-dialog')
+      }
     }
 
   })
diff --git a/ui/arduino/views/components/new-file-destination-dialog.js b/ui/arduino/views/components/new-file-destination-dialog.js
index cf6b620..c9944e9 100644
--- a/ui/arduino/views/components/new-file-destination-dialog.js
+++ b/ui/arduino/views/components/new-file-destination-dialog.js
@@ -11,13 +11,49 @@ function NewFileDestinationDialog(state, emit) {
       <div class="item" onclick=${() => {emit('create-file','board', 'board_capocchia.py')}}>Board</div>
     `
   }
+  const now = new Date();
+  const dateStr = String(now.getMonth() + 1).padStart(2, '0') +
+    String(now.getDate()).padStart(2, '0') +
+    String(now.getHours()).padStart(2, '0') +
+    String(now.getMinutes()).padStart(2, '0')
+
+  const fileName = `script_${dateStr}.py`;
+
+  const newFileDialog = html`
+  <div id="dialog-new-file" class="dialog ${stateClass}" onclick=${onClick}>
+    <div class="dialog-content">
+      <input type="text" id="file-name" placeholder="${generateFileName()}" autofocus />
+      <div class="buttons-horizontal">
+        ${boardOption}
+        <div class="item" onclick=${() => {emit('create-file', 'disk', 'disk_capocchia.py')}}>Computer</div>
+      </div>
+    </div>
+  </div>
+`
+
+  
+  const observer = new MutationObserver((mutations, obs) => {
+    const el = newFileDialog.querySelector('input')
+    if (el) {
+      el.focus()
+      obs.disconnect()
+    }
+  })
+  observer.observe(newFileDialog, { childList: true, subtree:true, attributes: true })
+  
+  return newFileDialog
+
   return html`
     <div id="dialog-new-file" class="dialog ${stateClass}" onclick=${onClick}>
       <div class="dialog-content">
-        <input type="text" id="file-name" placeholder="File name" />
-        ${boardOption}
-        <div class="item" onclick=${() => {emit('create-file', 'disk', 'disk_capocchia.py')}}>Computer</div>
+        <input type="text" id="file-name" placeholder="${generateFileName()}" />
+        <div class="buttons-horizontal">
+          ${boardOption}
+          <div class="item" onclick=${() => {emit('create-file', 'disk', 'disk_capocchia.py')}}>Computer</div>
+        </div>
       </div>
     </div>
   `
+  
+
 }
diff --git a/ui/arduino/views/components/repl-panel.js b/ui/arduino/views/components/repl-panel.js
index 3974d50..63a608e 100644
--- a/ui/arduino/views/components/repl-panel.js
+++ b/ui/arduino/views/components/repl-panel.js
@@ -7,8 +7,13 @@ function ReplPanel(state, emit) {
     }
   }
   const panelOpenClass = state.isPanelOpen ? 'open' : 'closed'
+  // const pointerEventsClass = state.isNewFileDialogOpen || state.isDialogOpen ? 'open' : 'closed'
   const termOperationsVisibility = state.panelHeight > PANEL_TOO_SMALL ? 'visible' : 'hidden'
-  const terminalDisabledClass = state.isConnected ? 'terminal-enabled' : 'terminal-disabled'
+  let terminalDisabledClass = 'terminal-enabled'
+  if (!state.isConnected || state.isNewFileDialogOpen) {
+    terminalDisabledClass = 'terminal-disabled'
+  }
+  // const terminalDisabledClass = state.isConnected ? 'terminal-enabled' : 'terminal-disabled'
 
   return html`
     <div id="panel" style="height: ${state.panelHeight}px">

From cc935436ef75cc80920c1a59c4e1017abc418fd5 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Thu, 19 Dec 2024 08:07:00 +0100
Subject: [PATCH 06/65] Removed ESC from global shortcuts to locally handle it
 in dialog.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 backend/shortcuts.js                             |  1 -
 ui/arduino/store.js                              | 10 +++++-----
 ui/arduino/views/components/connection-dialog.js | 13 +++++++++++++
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/backend/shortcuts.js b/backend/shortcuts.js
index e6b7159..49311a4 100644
--- a/backend/shortcuts.js
+++ b/backend/shortcuts.js
@@ -11,7 +11,6 @@ module.exports = {
     CLEAR_TERMINAL: 'CommandOrControl+L',
     EDITOR_VIEW: 'CommandOrControl+Alt+1',
     FILES_VIEW: 'CommandOrControl+Alt+2',
-    ESC: 'Escape'
   },
   menu: {
     CONNECT: 'CmdOrCtrl+Shift+C',
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 09a373e..28e3a0a 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1447,11 +1447,11 @@ async function store(state, emitter) {
       if (state.view != 'editor') return
       emitter.emit('change-view', 'file-manager')
     }
-    if (key === shortcuts.ESC) {
-      if (state.isConnectionDialogOpen) {
-        emitter.emit('close-connection-dialog')
-      }
-    }
+    // if (key === shortcuts.ESC) {
+    //   if (state.isConnectionDialogOpen) {
+    //     emitter.emit('close-connection-dialog')
+    //   }
+    // }
 
   })
 
diff --git a/ui/arduino/views/components/connection-dialog.js b/ui/arduino/views/components/connection-dialog.js
index 2d99a47..6b0e3ca 100644
--- a/ui/arduino/views/components/connection-dialog.js
+++ b/ui/arduino/views/components/connection-dialog.js
@@ -6,6 +6,19 @@ function ConnectionDialog(state, emit) {
     }
   }
 
+  function onKeyDown(e) {
+    if (e.key.toLowerCase() === 'escape') {
+      emit('close-connection-dialog')
+    }
+  }
+
+  // Add/remove event listener based on dialog state
+  if (state.isConnectionDialogOpen) {
+    document.addEventListener('keydown', onKeyDown)
+  } else {
+    document.removeEventListener('keydown', onKeyDown)
+  }
+
   return html`
     <div id="dialog" class="${stateClass}" onclick=${onClick}>
       <div class="dialog-content">

From 7fbc40caf8941d4cb30e829b8121a47ea494f9a6 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Fri, 20 Dec 2024 14:58:37 +0100
Subject: [PATCH 07/65] Refactor of Tab creation and new file action/button.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 backend/shortcuts.js                          |   6 +-
 ui/arduino/index.html                         |   2 +-
 ui/arduino/main.css                           |  19 +++
 ui/arduino/store.js                           | 149 ++++++++++++------
 .../views/components/connection-dialog.js     |  47 +++---
 .../components/new-file-destination-dialog.js |  59 -------
 .../views/components/new-file-dialog.js       |  76 +++++++++
 ui/arduino/views/editor.js                    |   2 +-
 ui/arduino/views/file-manager.js              |   2 +-
 9 files changed, 228 insertions(+), 134 deletions(-)
 delete mode 100644 ui/arduino/views/components/new-file-destination-dialog.js
 create mode 100644 ui/arduino/views/components/new-file-dialog.js

diff --git a/backend/shortcuts.js b/backend/shortcuts.js
index 49311a4..7d970fa 100644
--- a/backend/shortcuts.js
+++ b/backend/shortcuts.js
@@ -2,12 +2,13 @@ module.exports = {
   global: {
     CONNECT: 'CommandOrControl+Shift+C',
     DISCONNECT: 'CommandOrControl+Shift+D',
-    SAVE: 'CommandOrControl+S',
     RUN: 'CommandOrControl+R',
     RUN_SELECTION: 'CommandOrControl+Alt+R',
     RUN_SELECTION_WL: 'CommandOrControl+Alt+S',
     STOP: 'CommandOrControl+H',
     RESET: 'CommandOrControl+Shift+R',
+    NEW: 'CommandOrControl+N',
+    SAVE: 'CommandOrControl+S',
     CLEAR_TERMINAL: 'CommandOrControl+L',
     EDITOR_VIEW: 'CommandOrControl+Alt+1',
     FILES_VIEW: 'CommandOrControl+Alt+2',
@@ -15,12 +16,13 @@ module.exports = {
   menu: {
     CONNECT: 'CmdOrCtrl+Shift+C',
     DISCONNECT: 'CmdOrCtrl+Shift+D',
-    SAVE: 'CmdOrCtrl+S',
     RUN: 'CmdOrCtrl+R',
     RUN_SELECTION: 'CmdOrCtrl+Alt+R',
     RUN_SELECTION_WL: 'CmdOrCtrl+Alt+S',
     STOP: 'CmdOrCtrl+H',
     RESET: 'CmdOrCtrl+Shift+R',
+    NEW: 'CmdOrCtrl+N',
+    SAVE: 'CmdOrCtrl+S',
     CLEAR_TERMINAL: 'CmdOrCtrl+L',
     EDITOR_VIEW: 'CmdOrCtrl+Alt+1',
     FILES_VIEW: 'CmdOrCtrl+Alt+2'
diff --git a/ui/arduino/index.html b/ui/arduino/index.html
index 63a5981..332dfc3 100644
--- a/ui/arduino/index.html
+++ b/ui/arduino/index.html
@@ -25,7 +25,7 @@
     <!-- Components -->
     <script type="text/javascript" src="views/components/code-editor.js" charset="utf-8"></script>
     <script type="text/javascript" src="views/components/connection-dialog.js" charset="utf-8"></script>
-    <script type="text/javascript" src="views/components/new-file-destination-dialog.js" charset="utf-8"></script>
+    <script type="text/javascript" src="views/components/new-file-dialog.js" charset="utf-8"></script>
     <script type="text/javascript" src="views/components/file-actions.js" charset="utf-8"></script>
     <script type="text/javascript" src="views/components/file-list.js" charset="utf-8"></script>
     <script type="text/javascript" src="views/components/repl-panel.js" charset="utf-8"></script>
diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index e141767..68af001 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -392,6 +392,10 @@ button.small .icon {
   font-size: 1.4em;
   width:100%;
 }
+
+.dialog .dialog-content input:focus {
+  outline-color: #008184;
+}
 .dialog .dialog-content .item {
   border-radius: 4.5px;
   display: flex;
@@ -419,6 +423,21 @@ button.small .icon {
   align-items: center;
   background-color: #eee;;
 }
+
+.dialog-title{
+  width: 100%;
+  font-size: 0.8em;
+  padding: 0.7em;
+  margin: 0;
+  flex-basis: max-content;
+}
+.dialog-feedback {
+  font-size: 0.6em;
+  align-self: stretch;
+  padding: 0.5em;
+  background: #eee;
+}
+
 #file-manager {
   display: flex;
   padding: 12px 32px 24px 32px;
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index c25fdc1..948e7f7 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -10,9 +10,12 @@ const newFileContent = `# This program was created in Arduino Lab for MicroPytho
 print('Hello, MicroPython!')
 `
 
-async function confirm(msg, cancelMsg, confirmMsg) {
-  cancelMsg = cancelMsg || 'Cancel'
-  confirmMsg = confirmMsg || 'Yes'
+async function confirmDialog(msg, cancelMsg, confirmMsg) {
+  // cancelMsg = cancelMsg || 'Cancel'
+  // confirmMsg = confirmMsg || 'Yes'
+  let buttons = []
+  if (cancelMsg) buttons.push(cancelMsg)
+  if (confirmMsg) buttons.push(confirmMsg)
   let response = await win.openDialog({
     type: 'question',
     buttons: [cancelMsg, confirmMsg],
@@ -36,6 +39,8 @@ async function store(state, emitter) {
   state.boardFiles = []
   state.openFiles = []
   state.selectedFiles = []
+
+  state.newTabFileName = null
   state.editingFile = null
   state.creatingFile = null
   state.renamingFile = null
@@ -62,17 +67,7 @@ async function store(state, emitter) {
 
   state.isTerminalBound = false
 
-  const newFile = createEmptyFile({
-    parentFolder: null, // Null parent folder means not saved?
-    source: 'disk'
-  })
-  newFile.editor.onChange = function() {
-    newFile.hasChanges = true
-    emitter.emit('render')
-  }
-  state.openFiles.push(newFile)
-  state.editingFile = newFile.id
-
+  await createNewTab('disk')
   state.savedPanelHeight = PANEL_DEFAULT
   state.panelHeight = PANEL_CLOSED
   state.resizePanel = function(e) {
@@ -117,15 +112,19 @@ async function store(state, emitter) {
   emitter.on('open-connection-dialog', async () => {
     log('open-connection-dialog')
     // UI should be in disconnected state, no need to update
+    dismissOpenDialogs()
     await serialBridge.disconnect()
     state.availablePorts = await getAvailablePorts()
     state.isConnectionDialogOpen = true
     emitter.emit('render')
+    document.addEventListener('keydown', dismissOpenDialogs)
   })
   emitter.on('close-connection-dialog', () => {
     state.isConnectionDialogOpen = false
+    dismissOpenDialogs()
     emitter.emit('render')
   })
+  
   emitter.on('update-ports', async () => {
     state.availablePorts = await getAvailablePorts()
     emitter.emit('render')
@@ -300,14 +299,17 @@ async function store(state, emitter) {
   // NEW FILE AND SAVING
   emitter.on('create-new-file', () => {
     log('create-new-file')
+    dismissOpenDialogs()
     state.isNewFileDialogOpen = true
     emitter.emit('render')
+    document.addEventListener('keydown', dismissOpenDialogs)
   })
   emitter.on('close-new-file-dialog', () => {
     state.isNewFileDialogOpen = false
+    
+    dismissOpenDialogs()
     emitter.emit('render')
   })
-
   emitter.on('save', async () => {
     log('save')
     let response = canSave({
@@ -389,7 +391,7 @@ async function store(state, emitter) {
     }
 
     if (willOverwrite) {
-      const confirmation = await confirm(`You are about to overwrite the file ${openFile.fileName} on your ${openFile.source}.\n\n Are you sure you want to proceed?`, 'Cancel', 'Yes')
+      const confirmation = await confirmDialog(`You are about to overwrite the file ${openFile.fileName} on your ${openFile.source}.\n\n Are you sure you want to proceed?`, 'Cancel', 'Yes')
       if (!confirmation) {
         state.isSaving = false
         openFile.parentFolder = oldParentFolder
@@ -446,7 +448,7 @@ async function store(state, emitter) {
     log('close-tab', id)
     const currentTab = state.openFiles.find(f => f.id === id)
     if (currentTab.hasChanges) {
-      let response = await confirm("Your file has unsaved changes. Are you sure you want to proceed?")
+      let response = await confirmDialog("Your file has unsaved changes. Are you sure you want to proceed?", "Cancel", "Yes")
       if (!response) return false
     }
     state.openFiles = state.openFiles.filter(f => f.id !== id)
@@ -455,16 +457,7 @@ async function store(state, emitter) {
     if(state.openFiles.length > 0) {
       state.editingFile = state.openFiles[0].id
     } else {
-      const newFile = createEmptyFile({
-        source: 'disk',
-        parentFolder: null
-      })
-      newFile.editor.onChange = function() {
-        newFile.hasChanges = true
-        emitter.emit('render')
-      }
-      state.openFiles.push(newFile)
-      state.editingFile = newFile.id
+      await createNewTab('disk')
     }
 
     emitter.emit('render')
@@ -525,10 +518,19 @@ async function store(state, emitter) {
     })
     emitter.emit('render')
   })
-
+  emitter.on('create-new-tab', async (device, fileName = null) => {
+    const parentFolder = device == 'board' ? state.boardNavigationPath : state.diskNavigationPath
+    log('create-new-tab', device, fileName, parentFolder)
+    const success = await createNewTab(device, fileName, parentFolder)
+    if (success) {
+      emitter.emit('close-new-file-dialog')
+      emitter.emit('render')
+    }  
+  })
   emitter.on('create-file', (device, fileName = null) => {
     log('create-file', device)
     if (state.creatingFile !== null) return
+    
     state.creatingFile = device
     state.creatingFolder = null
     if (fileName != null) {
@@ -554,7 +556,7 @@ async function store(state, emitter) {
         fileName: fileNameParameter
       })
       if (willOverwrite) {
-        const confirmAction = await confirm(`You are about to overwrite the file ${fileNameParameter} on your board.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
+        const confirmAction = await confirmDialog(`You are about to overwrite the file ${fileNameParameter} on your board.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
         if (!confirmAction) {
           state.creatingFile = null
           emitter.emit('render')
@@ -577,7 +579,7 @@ async function store(state, emitter) {
         fileName: fileNameParameter
       })
       if (willOverwrite) {
-        const confirmAction = await confirm(`You are about to overwrite the file ${fileNameParameter} on your disk.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
+        const confirmAction = await confirmDialog(`You are about to overwrite the file ${fileNameParameter} on your disk.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
         if (!confirmAction) {
           state.creatingFile = null
           emitter.emit('render')
@@ -597,6 +599,7 @@ async function store(state, emitter) {
 
     setTimeout(() => {
       state.creatingFile = null
+      dismissOpenDialogs()
       emitter.emit('refresh-files')
       emitter.emit('render')
     }, 200)
@@ -625,7 +628,7 @@ async function store(state, emitter) {
         fileName: value
       })
       if (willOverwrite) {
-        const confirmAction = await confirm(`You are about to overwrite ${value} on your board.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
+        const confirmAction = await confirmDialog(`You are about to overwrite ${value} on your board.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
         if (!confirmAction) {
           state.creatingFolder = null
           emitter.emit('render')
@@ -654,7 +657,7 @@ async function store(state, emitter) {
         fileName: value
       })
       if (willOverwrite) {
-        const confirmAction = await confirm(`You are about to overwrite ${value} on your disk.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
+        const confirmAction = await confirmDialog(`You are about to overwrite ${value} on your disk.\n\nAre you sure you want to proceed?`, 'Cancel', 'Yes')
         if (!confirmAction) {
           state.creatingFolder = null
           emitter.emit('render')
@@ -711,7 +714,7 @@ async function store(state, emitter) {
     }
 
     message += `Are you sure you want to proceed?`
-    const confirmAction = await confirm(message, 'Cancel', 'Yes')
+    const confirmAction = await confirmDialog(message, 'Cancel', 'Yes')
     if (!confirmAction) {
       state.isRemoving = false
       emitter.emit('render')
@@ -799,7 +802,7 @@ async function store(state, emitter) {
         let message = `You are about to overwrite the following file/folder on your board:\n\n`
         message += `${value}\n\n`
         message += `Are you sure you want to proceed?`
-        const confirmAction = await confirm(message, 'Cancel', 'Yes')
+        const confirmAction = await confirmDialog(message, 'Cancel', 'Yes')
         if (!confirmAction) {
           state.isSaving = false
           state.renamingFile = null
@@ -838,7 +841,7 @@ async function store(state, emitter) {
         let message = `You are about to overwrite the following file/folder on your disk:\n\n`
         message += `${value}\n\n`
         message += `Are you sure you want to proceed?`
-        const confirmAction = await confirm(message, 'Cancel', 'Yes')
+        const confirmAction = await confirmDialog(message, 'Cancel', 'Yes')
         if (!confirmAction) {
           state.isSaving = false
           state.renamingFile = null
@@ -993,7 +996,7 @@ async function store(state, emitter) {
     }
 
     if (willOverwrite) {
-      const confirmation = await confirm(`You are about to overwrite the file ${openFile.fileName} on your ${openFile.source}.\n\n Are you sure you want to proceed?`, 'Cancel', 'Yes')
+      const confirmation = await confirmDialog(`You are about to overwrite the file ${openFile.fileName} on your ${openFile.source}.\n\n Are you sure you want to proceed?`, 'Cancel', 'Yes')
       if (!confirmation) {
         state.renamingTab = null
         state.isSaving = false
@@ -1256,7 +1259,7 @@ async function store(state, emitter) {
       willOverwrite.forEach(f => message += `${f.fileName}\n`)
       message += `\n`
       message += `Are you sure you want to proceed?`
-      const confirmAction = await confirm(message, 'Cancel', 'Yes')
+      const confirmAction = await confirmDialog(message, 'Cancel', 'Yes')
       if (!confirmAction) {
         state.isTransferring = false
         emitter.emit('render')
@@ -1321,7 +1324,7 @@ async function store(state, emitter) {
       willOverwrite.forEach(f => message += `${f.fileName}\n`)
       message += `\n`
       message += `Are you sure you want to proceed?`
-      const confirmAction = await confirm(message, 'Cancel', 'Yes')
+      const confirmAction = await confirmDialog(message, 'Cancel', 'Yes')
       if (!confirmAction) {
         state.isTransferring = false
         emitter.emit('render')
@@ -1408,7 +1411,7 @@ async function store(state, emitter) {
   win.beforeClose(async () => {
     const hasChanges = !!state.openFiles.find(f => f.hasChanges)
     if (hasChanges) {
-      const response = await confirm('You may have unsaved changes. Are you sure you want to proceed?', 'Cancel', 'Yes')
+      const response = await confirmDialog('You may have unsaved changes. Are you sure you want to proceed?', 'Cancel', 'Yes')
       if (!response) return false
     }
     await win.confirmClose()
@@ -1451,6 +1454,10 @@ async function store(state, emitter) {
       if (state.view != 'editor') return
       stopCode()
     }
+    if (key === shortcuts.NEW) {
+      if (state.view != 'editor') return
+      emitter.emit('create-new-file')
+    }
     if (key === shortcuts.SAVE) {
       if (state.view != 'editor') return
       emitter.emit('save')
@@ -1471,6 +1478,14 @@ async function store(state, emitter) {
 
   })
 
+  function dismissOpenDialogs(keyEvent = null) {
+    if (keyEvent && keyEvent.key != 'Escape') return
+    document.removeEventListener('keydown', dismissOpenDialogs)
+    state.isConnectionDialogOpen = false
+    state.isNewFileDialogOpen = false
+    emitter.emit('render')
+  }
+
   function runCode() {
     if (canExecute({ view: state.view, isConnected: state.isConnected })) {
       emitter.emit('run')
@@ -1507,14 +1522,60 @@ async function store(state, emitter) {
     }
   }
 
-  function createEmptyFile({ source, parentFolder }) {
-    return createFile({
-      fileName: generateFileName(),
-      parentFolder,
-      source,
+  // function createEmptyFile({ source, parentFolder }) {
+  //   return createFile({
+  //     fileName: generateFileName(),
+  //     parentFolder,
+  //     source,
+  //     hasChanges: true
+  //   })
+  // }
+
+  async function createNewTab(source, fileName = null, parentFolder = null) {
+    const navigationPath = source == 'board' ? state.boardNavigationPath : state.diskNavigationPath
+    const newFile = createFile({
+      fileName: fileName === null ? generateFileName() : fileName,
+      parentFolder: parentFolder,
+      source: source,
       hasChanges: true
     })
+    
+    let fullPathExists = false
+    
+    if (parentFolder != null) {
+      if (source == 'board') {
+        await serialBridge.getPrompt()
+        fullPathExists = await serialBridge.fileExists(
+          serialBridge.getFullPath(
+            state.boardNavigationRoot,
+            newFile.parentFolder,
+            newFile.fileName
+          )
+        )
+      } else if (source == 'disk') {
+        fullPathExists = await disk.fileExists(
+          disk.getFullPath(
+            state.diskNavigationRoot,
+            newFile.parentFolder,
+            newFile.fileName
+          )
+        )
+      }
+    }
+    const tabExists = state.openFiles.find(f => f.parentFolder === newFile.parentFolder && f.fileName === newFile.fileName && f.source === newFile.source)
+    if (tabExists || fullPathExists) {
+      const confirmation = confirmDialog(`File ${newFile.fileName} already exists on ${source}. Please choose another name.`, 'OK')
+      return false
+    }
+    newFile.editor.onChange = function() {
+      newFile.hasChanges = true
+      emitter.emit('render')
+    }
+    state.openFiles.push(newFile)
+    state.editingFile = newFile.id
+    return true
   }
+
 }
 
 
diff --git a/ui/arduino/views/components/connection-dialog.js b/ui/arduino/views/components/connection-dialog.js
index c75b21c..8723464 100644
--- a/ui/arduino/views/components/connection-dialog.js
+++ b/ui/arduino/views/components/connection-dialog.js
@@ -1,36 +1,31 @@
 function ConnectionDialog(state, emit) {
   const stateClass = state.isConnectionDialogOpen ? 'open' : 'closed'
-  function onClick(e) {
+  function clickDismiss(e) {
     if (e.target.id == 'dialog-connection') {
       emit('close-connection-dialog')
     }
   }
 
-  function onKeyDown(e) {
-    if (e.key.toLowerCase() === 'escape') {
-      emit('close-connection-dialog')
-    }
-  }
-
-  // Add/remove event listener based on dialog state
-  if (state.isConnectionDialogOpen) {
-    document.addEventListener('keydown', onKeyDown)
-  } else {
-    document.removeEventListener('keydown', onKeyDown)
-  }
-
-  return html`
-    <div id="dialog-connection" class="dialog ${stateClass}" onclick=${onClick}>
-      <div class="dialog-content">
-        ${state.availablePorts.map(
-          (port) => html`
-            <div class="item" onclick=${() => emit('select-port', port)}>
-              ${port.path}
-            </div>
-          `
-        )}
-        <div class="item" onclick=${() => emit('update-ports')}>Refresh</div>
-      </div>
+  const connectionDialog = html`
+  <div id="dialog-connection" class="dialog ${stateClass}" onclick=${clickDismiss}>
+    
+    <div class="dialog-content">
+    <div class="dialog-title">Connect to...</div>
+      ${state.availablePorts.map(
+        (port) => html`
+          <div class="item" onclick=${() => emit('select-port', port)}>
+            ${port.path}
+          </div>
+        `
+      )}
+      <div class="item" onclick=${() => emit('update-ports')}>Refresh</div>
+      <!--div class="dialog-feedback">Select a board to connect to.</div-->
     </div>
+    
+  </div>
   `
+  if (state.isConnectionDialogOpen) {
+    return connectionDialog
+  }
+  
 }
diff --git a/ui/arduino/views/components/new-file-destination-dialog.js b/ui/arduino/views/components/new-file-destination-dialog.js
deleted file mode 100644
index c9944e9..0000000
--- a/ui/arduino/views/components/new-file-destination-dialog.js
+++ /dev/null
@@ -1,59 +0,0 @@
-function NewFileDestinationDialog(state, emit) {
-  const stateClass = state.isNewFileDialogOpen ? 'open' : 'closed'
-  function onClick(e) {
-    if (e.target.id == 'dialog-new-file') {
-      emit('close-new-file-dialog')
-    }
-  }
-  let boardOption = ''
-  if (state.isConnected) {
-    boardOption = html`
-      <div class="item" onclick=${() => {emit('create-file','board', 'board_capocchia.py')}}>Board</div>
-    `
-  }
-  const now = new Date();
-  const dateStr = String(now.getMonth() + 1).padStart(2, '0') +
-    String(now.getDate()).padStart(2, '0') +
-    String(now.getHours()).padStart(2, '0') +
-    String(now.getMinutes()).padStart(2, '0')
-
-  const fileName = `script_${dateStr}.py`;
-
-  const newFileDialog = html`
-  <div id="dialog-new-file" class="dialog ${stateClass}" onclick=${onClick}>
-    <div class="dialog-content">
-      <input type="text" id="file-name" placeholder="${generateFileName()}" autofocus />
-      <div class="buttons-horizontal">
-        ${boardOption}
-        <div class="item" onclick=${() => {emit('create-file', 'disk', 'disk_capocchia.py')}}>Computer</div>
-      </div>
-    </div>
-  </div>
-`
-
-  
-  const observer = new MutationObserver((mutations, obs) => {
-    const el = newFileDialog.querySelector('input')
-    if (el) {
-      el.focus()
-      obs.disconnect()
-    }
-  })
-  observer.observe(newFileDialog, { childList: true, subtree:true, attributes: true })
-  
-  return newFileDialog
-
-  return html`
-    <div id="dialog-new-file" class="dialog ${stateClass}" onclick=${onClick}>
-      <div class="dialog-content">
-        <input type="text" id="file-name" placeholder="${generateFileName()}" />
-        <div class="buttons-horizontal">
-          ${boardOption}
-          <div class="item" onclick=${() => {emit('create-file', 'disk', 'disk_capocchia.py')}}>Computer</div>
-        </div>
-      </div>
-    </div>
-  `
-  
-
-}
diff --git a/ui/arduino/views/components/new-file-dialog.js b/ui/arduino/views/components/new-file-dialog.js
new file mode 100644
index 0000000..83ace3f
--- /dev/null
+++ b/ui/arduino/views/components/new-file-dialog.js
@@ -0,0 +1,76 @@
+function NewFileDialog(state, emit) {
+  const stateClass = state.isNewFileDialogOpen ? 'open' : 'closed'
+  function clickDismiss(e) {
+    if (e.target.id == 'dialog-new-file') {
+      emit('close-new-file-dialog')
+    }
+  }
+  
+  function triggerTabCreation(device) {
+    return () => {
+      const input = document.querySelector('#file-name')
+      const fileName = input.value.trim() || input.placeholder
+      emit('create-new-tab', device, fileName)
+    }
+  }
+
+  let boardOption = ''
+  let inputFocus = ''
+  if (state.isConnected) {
+    boardOption = html`
+      <div class="item" onclick=${triggerTabCreation('board')}>Board</div>
+    `
+  }
+   
+  const newFileDialogObserver = new MutationObserver((mutations, obs) => {
+    const input = document.querySelector('#dialog-new-file input')
+    if (input) {
+      input.focus()
+      obs.disconnect()
+    }
+  })
+
+  newFileDialogObserver.observe(document.body, { 
+    childList: true,
+    subtree: true
+  })
+
+  
+
+  let inputFieldValue = ``
+  let inputFieldPlaceholder = ``
+  
+  inputFieldPlaceholder = generateFileName()
+  
+  const inputAttrs = {
+    type: 'text',
+    id: 'file-name',
+    value: inputFieldValue,
+    placeholder: inputFieldPlaceholder
+  }
+  
+  const randomFileName = generateFileName()
+  const placeholderAttr = state.newFileName === null ? `placeholder="${randomFileName}"` : ''
+  const newFileDialog = html`
+  <div id="dialog-new-file" class="dialog ${stateClass}" onclick=${clickDismiss}>
+    <div class="dialog-content">
+      <div class="dialog-title">Create new file</div>
+      <input ${inputAttrs} />
+      <div class="buttons-horizontal">
+        ${boardOption}
+        <div class="item" onclick=${triggerTabCreation('disk')}>Computer</div>
+      </div>
+    </div>
+  </div>
+` 
+  
+  if (state.isNewFileDialogOpen) {
+    const el = newFileDialog.querySelector('#dialog-new-file .dialog-contents > input')
+    if (el) {
+      el.focus()
+    }
+    return newFileDialog
+  }
+
+
+}
diff --git a/ui/arduino/views/editor.js b/ui/arduino/views/editor.js
index 796bdea..c6267f0 100644
--- a/ui/arduino/views/editor.js
+++ b/ui/arduino/views/editor.js
@@ -7,6 +7,6 @@ function EditorView(state, emit) {
       ${ReplPanel(state, emit)}
     </div>
     ${ConnectionDialog(state, emit)}
-    ${NewFileDestinationDialog(state, emit)}
+    ${NewFileDialog(state, emit)}
   `
 }
diff --git a/ui/arduino/views/file-manager.js b/ui/arduino/views/file-manager.js
index fd8a3c8..89f7b89 100644
--- a/ui/arduino/views/file-manager.js
+++ b/ui/arduino/views/file-manager.js
@@ -44,6 +44,6 @@ function FileManagerView(state, emit) {
       </div>
     </div>
     ${ConnectionDialog(state, emit)}
-    ${NewFileDestinationDialog(state, emit)}
+    ${NewFileDialog(state, emit)}
   `
 }

From ea5b62063dc02257b95e1eae64415a6288f1c4a4 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Fri, 20 Dec 2024 18:22:57 +0100
Subject: [PATCH 08/65] Rework toolbar and CSS.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                           | 31 ++++++++++++++++---
 .../views/components/elements/button.js       |  3 ++
 ui/arduino/views/components/toolbar.js        |  8 +++++
 3 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index 68af001..f137269 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -1,8 +1,8 @@
 @font-face {
-  font-family: "RobotoMono", monospace;
+  font-family: "RobotoMono";
   src:
-    url("media/roboto-mono-latin-ext-400-normal.woff"),
-    url("media/roboto-mono-latin-ext-400-normal.woff2");
+    url("media/roboto-mono-latin-ext-400-normal.woff2") format("woff2"),
+    url("media/roboto-mono-latin-ext-400-normal.woff") format("woff");
   font-weight: normal;
   font-style: normal;
 }
@@ -73,6 +73,19 @@ button.small .icon {
 
 .button {
   position: relative;
+  display: flex;
+  flex-direction: column;
+  align-content: space-between;
+  align-items: center;
+  gap: 10px;
+}
+.button .label {
+  text-align: center;
+  color: #eee;
+  opacity: 50%;
+}
+.button .label.active {
+  opacity: 100%;
 }
 .button .tooltip {
   opacity: 0;
@@ -124,11 +137,21 @@ button.small .icon {
   display: flex;
   padding: 20px;
   align-items: center;
-  gap: 20px;
+  gap: 16px;
   align-self: stretch;
   background: #008184;
 }
 
+.separator {
+  height: 100%;
+  min-width: 1px;
+  flex-basis: fit-content;
+  background: #fff;
+  position: relative;
+  margin-left: 0.5em;
+  margin-right: 0.5em;
+}
+
 #tabs {
   display: flex;
   padding: 10px 10px 0px 60px;
diff --git a/ui/arduino/views/components/elements/button.js b/ui/arduino/views/components/elements/button.js
index 3d888dd..56cd77c 100644
--- a/ui/arduino/views/components/elements/button.js
+++ b/ui/arduino/views/components/elements/button.js
@@ -5,6 +5,7 @@ function Button(args) {
     onClick = (e) => false,
     disabled = false,
     active = false,
+    label,
     tooltip,
     background
   } = args
@@ -14,11 +15,13 @@ function Button(args) {
   }
   let activeClass = active ? 'active' : ''
   let backgroundClass = background ? 'inverted' : ''
+  let labelActiveClass = disabled ? '' : 'active'
   return html`
     <div class="button">
       <button class="${size} ${activeClass} ${backgroundClass}" onclick=${onClick} disabled=${disabled}>
         <img class="icon" src="media/${icon}" />
       </button>
+      <div class="label ${labelActiveClass}">${label}</div>
       ${tooltipEl}
     </div>
   `
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index 2aaa447..4f8f484 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -15,6 +15,7 @@ function Toolbar(state, emit) {
     <div id="toolbar">
       ${Button({
         icon: state.isConnected ? 'connect.svg' : 'disconnect.svg',
+        label: state.isConnected ? 'Disconnect' : 'Connect',
         tooltip: state.isConnected ? `Disconnect (${metaKeyString}+Shift+D)` : `Connect (${metaKeyString}+Shift+C)`,
         onClick: () => state.isConnected ? emit('disconnect') : emit('open-connection-dialog'),
         active: state.isConnected
@@ -24,6 +25,7 @@ function Toolbar(state, emit) {
 
       ${Button({
         icon: 'run.svg',
+        label: 'Run',
         tooltip: `Run (${metaKeyString}+R)`,
         disabled: !_canExecute,
         onClick: (e) => {
@@ -36,12 +38,14 @@ function Toolbar(state, emit) {
       })}
       ${Button({
         icon: 'stop.svg',
+        label: 'Stop',
         tooltip: `Stop (${metaKeyString}+H)`,
         disabled: !_canExecute,
         onClick: () => emit('stop')
       })}
       ${Button({
         icon: 'reboot.svg',
+        label: 'Reset',
         tooltip: `Reset (${metaKeyString}+Shift+R)`,
         disabled: !_canExecute,
         onClick: () => emit('reset')
@@ -51,6 +55,7 @@ function Toolbar(state, emit) {
 
       ${Button({
         icon: 'new-file.svg',
+        label: 'New',
         tooltip: `New (${metaKeyString}+N)`,
         disabled: state.view != 'editor',
         onClick: () => emit('create-new-file')
@@ -58,6 +63,7 @@ function Toolbar(state, emit) {
 
       ${Button({
         icon: 'save.svg',
+        label: 'Save',
         tooltip: `Save (${metaKeyString}+S)`,
         disabled: !_canSave,
         onClick: () => emit('save')
@@ -67,12 +73,14 @@ function Toolbar(state, emit) {
 
       ${Button({
         icon: 'code.svg',
+        label: 'Editor',
         tooltip: `Editor (${metaKeyString}+Alt+1)`,
         active: state.view === 'editor',
         onClick: () => emit('change-view', 'editor')
       })}
       ${Button({
         icon: 'files.svg',
+        label: 'Files',
         tooltip: `Files (${metaKeyString}+Alt+2)`,
         active: state.view === 'file-manager',
         onClick: () => emit('change-view', 'file-manager')

From 49d3ec82c4d1f1831c0e3e13424a4e93bbb63a9b Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Fri, 20 Dec 2024 19:28:11 +0100
Subject: [PATCH 09/65] UI font update, CSS update, labels.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                           |  34 +++++++++++++-----
 .../open-sans_5.0.29_latin-wght-normal.woff2  | Bin 0 -> 48236 bytes
 ui/arduino/store.js                           |   3 ++
 .../views/components/elements/button.js       |   6 ++--
 ui/arduino/views/components/toolbar.js        |   3 +-
 5 files changed, 35 insertions(+), 11 deletions(-)
 create mode 100644 ui/arduino/media/open-sans_5.0.29_latin-wght-normal.woff2

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index f137269..eff09bc 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -7,11 +7,18 @@
   font-style: normal;
 }
 
+@font-face {
+  font-family: "OpenSans";
+  src: url("media/open-sans_5.0.29_latin-wght-normal.woff2") format("woff2");
+  font-weight: normal;
+  font-style: normal;
+}
+
 * {
   -moz-user-select: none;
   -webkit-user-select: none;
   user-select: none;
-  font-family: "RobotoMono", monospace;
+  font-family: "OpenSans", sans-serif;
 }
 
 body, html {
@@ -78,14 +85,19 @@ button.small .icon {
   align-content: space-between;
   align-items: center;
   gap: 10px;
+  width: 50px
+}
+.button.first{
+  width:80px;
 }
 .button .label {
   text-align: center;
   color: #eee;
-  opacity: 50%;
+  opacity: 0.5;
+  font-family: "OpenSans", sans-serif;
 }
 .button .label.active {
-  opacity: 100%;
+  opacity: 1;
 }
 .button .tooltip {
   opacity: 0;
@@ -147,6 +159,7 @@ button.small .icon {
   min-width: 1px;
   flex-basis: fit-content;
   background: #fff;
+  opacity: 0.7;
   position: relative;
   margin-left: 0.5em;
   margin-right: 0.5em;
@@ -236,8 +249,12 @@ button.small .icon {
   font-size: 16px;
   height: 100%;
   overflow: hidden;
+  
 }
 
+#code-editor * {
+  font-family: "RobotoMono", monospace;
+}
 #code-editor .cm-editor {
   width: 100%;
   height: 100%;
@@ -411,9 +428,10 @@ button.small .icon {
   /* width: 100%; */
 }
 
-.dialog .dialog-content input {
-  font-size: 1.4em;
+.dialog .dialog-content #file-name {
+  font-size: 1.1em;
   width:100%;
+  font-family: "RobotoMono", monospace;
 }
 
 .dialog .dialog-content input:focus {
@@ -439,10 +457,10 @@ button.small .icon {
   flex-direction: row;
   justify-content: center;
   width: 100%;
-  gap: 20px;
+  gap: 12px;
 }
 .dialog .buttons-horizontal .item {
-  flex-basis: 40%;
+  flex-basis: 50%;
   align-items: center;
   background-color: #eee;;
 }
@@ -450,7 +468,7 @@ button.small .icon {
 .dialog-title{
   width: 100%;
   font-size: 0.8em;
-  padding: 0.7em;
+  padding: 0;
   margin: 0;
   flex-basis: max-content;
 }
diff --git a/ui/arduino/media/open-sans_5.0.29_latin-wght-normal.woff2 b/ui/arduino/media/open-sans_5.0.29_latin-wght-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..0beab54695b31975886051af14f1ab9763d29f0c
GIT binary patch
literal 48236
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
ABLDyZ

literal 0
HcmV?d00001

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 948e7f7..0d3d9c6 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1567,7 +1567,10 @@ async function store(state, emitter) {
       const confirmation = confirmDialog(`File ${newFile.fileName} already exists on ${source}. Please choose another name.`, 'OK')
       return false
     }
+    // LEAK > listeners keep getting added and not removed when tabs are closed
+    // additionally I found that closing a tab has actually added an extra listener
     newFile.editor.onChange = function() {
+      console.log('editor has changes')
       newFile.hasChanges = true
       emitter.emit('render')
     }
diff --git a/ui/arduino/views/components/elements/button.js b/ui/arduino/views/components/elements/button.js
index 56cd77c..b25a02e 100644
--- a/ui/arduino/views/components/elements/button.js
+++ b/ui/arduino/views/components/elements/button.js
@@ -7,7 +7,8 @@ function Button(args) {
     active = false,
     label,
     tooltip,
-    background
+    background,
+    first
   } = args
   let tooltipEl = html``
   if (tooltip) {
@@ -16,8 +17,9 @@ function Button(args) {
   let activeClass = active ? 'active' : ''
   let backgroundClass = background ? 'inverted' : ''
   let labelActiveClass = disabled ? '' : 'active'
+  let buttonFirstClass = first ? 'first' : ''
   return html`
-    <div class="button">
+    <div class="button ${buttonFirstClass}">
       <button class="${size} ${activeClass} ${backgroundClass}" onclick=${onClick} disabled=${disabled}>
         <img class="icon" src="media/${icon}" />
       </button>
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index 4f8f484..db6fecb 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -18,7 +18,8 @@ function Toolbar(state, emit) {
         label: state.isConnected ? 'Disconnect' : 'Connect',
         tooltip: state.isConnected ? `Disconnect (${metaKeyString}+Shift+D)` : `Connect (${metaKeyString}+Shift+C)`,
         onClick: () => state.isConnected ? emit('disconnect') : emit('open-connection-dialog'),
-        active: state.isConnected
+        active: state.isConnected,
+        first: true
       })}
 
       <div class="separator"></div>

From 5bf544d898ba7e012e948b6496173748b7e5d168 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Fri, 20 Dec 2024 23:55:18 +0100
Subject: [PATCH 10/65] Adjusted toolbar colours (hover) and layout.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                           | 23 +++++++++++++------
 .../views/components/elements/button.js       | 13 +++++++----
 ui/arduino/views/components/toolbar.js        | 17 +++++++-------
 3 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index eff09bc..bf077cc 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -43,7 +43,7 @@ button {
   align-items: center;
   border: none;
   border-radius: 45px;
-  background: rgba(255, 255, 255, 0.8);
+  background: rgba(255, 255, 255, 0.6);
   cursor: pointer;
   transition: all 0.1s;
 }
@@ -52,6 +52,9 @@ button.small {
   height: 28px;
   border-radius: 28px;
 }
+button.square {
+  border-radius: 8px;
+}
 button.inverted:hover,
 button.inverted.active {
   background: rgba(0, 129, 132, 0.8);
@@ -61,12 +64,18 @@ button.inverted {
 }
 
 button[disabled] {
-  opacity: 0.5;
+  background: rgba(255, 255, 255, 0.2);
   cursor: not-allowed;
 }
+button[disabled]:hover {
+  background: rgba(255, 255, 255, 0.2);
+}
 button:hover, button.active {
   background: rgba(255, 255, 255, 1);
 }
+/* button.inactive:hover {
+  background: rgba(255, 255, 255, 0.2);
+} */
 
 button .icon {
   width: 63%;
@@ -85,19 +94,19 @@ button.small .icon {
   align-content: space-between;
   align-items: center;
   gap: 10px;
-  width: 50px
+  width: auto
 }
 .button.first{
   width:80px;
 }
 .button .label {
   text-align: center;
-  color: #eee;
-  opacity: 0.5;
+  /* color: #eee; */
+  color: rgba(255, 255, 255, 0.2);
   font-family: "OpenSans", sans-serif;
 }
 .button .label.active {
-  opacity: 1;
+  color: rgba(255, 255, 255, 1);
 }
 .button .tooltip {
   opacity: 0;
@@ -147,7 +156,7 @@ button.small .icon {
 
 #toolbar {
   display: flex;
-  padding: 20px;
+  padding: 16px 10px 10px 10px;
   align-items: center;
   gap: 16px;
   align-self: stretch;
diff --git a/ui/arduino/views/components/elements/button.js b/ui/arduino/views/components/elements/button.js
index b25a02e..db2c576 100644
--- a/ui/arduino/views/components/elements/button.js
+++ b/ui/arduino/views/components/elements/button.js
@@ -8,22 +8,25 @@ function Button(args) {
     label,
     tooltip,
     background,
-    first
+    first,
+    square
   } = args
   let tooltipEl = html``
   if (tooltip) {
     tooltipEl = html`<div class="tooltip">${tooltip}</div>`
   }
-  let activeClass = active ? 'active' : ''
+  let activeClass = active ? 'active' : 'inactive'
   let backgroundClass = background ? 'inverted' : ''
-  let labelActiveClass = disabled ? '' : 'active'
+  let labelActiveClass = disabled ? 'inactive' : 'active'
   let buttonFirstClass = first ? 'first' : ''
+  let squareClass = square ? 'square' : ''
+  let labelItem = size === 'small' ? '' : html`<div class="label ${labelActiveClass}">${label}</div>`
   return html`
     <div class="button ${buttonFirstClass}">
-      <button class="${size} ${activeClass} ${backgroundClass}" onclick=${onClick} disabled=${disabled}>
+      <button disabled=${disabled} class="${squareClass}${size} ${activeClass} ${backgroundClass}" onclick=${onClick}>
         <img class="icon" src="media/${icon}" />
       </button>
-      <div class="label ${labelActiveClass}">${label}</div>
+      ${labelItem}
       ${tooltipEl}
     </div>
   `
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index db6fecb..4bc90b4 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -21,7 +21,13 @@ function Toolbar(state, emit) {
         active: state.isConnected,
         first: true
       })}
-
+      ${Button({
+        icon: 'reboot.svg',
+        label: 'Reset',
+        tooltip: `Reset (${metaKeyString}+Shift+R)`,
+        disabled: !_canExecute,
+        onClick: () => emit('reset')
+      })}
       <div class="separator"></div>
 
       ${Button({
@@ -44,13 +50,6 @@ function Toolbar(state, emit) {
         disabled: !_canExecute,
         onClick: () => emit('stop')
       })}
-      ${Button({
-        icon: 'reboot.svg',
-        label: 'Reset',
-        tooltip: `Reset (${metaKeyString}+Shift+R)`,
-        disabled: !_canExecute,
-        onClick: () => emit('reset')
-      })}
 
       <div class="separator"></div>
 
@@ -77,6 +76,7 @@ function Toolbar(state, emit) {
         label: 'Editor',
         tooltip: `Editor (${metaKeyString}+Alt+1)`,
         active: state.view === 'editor',
+        square: true,
         onClick: () => emit('change-view', 'editor')
       })}
       ${Button({
@@ -84,6 +84,7 @@ function Toolbar(state, emit) {
         label: 'Files',
         tooltip: `Files (${metaKeyString}+Alt+2)`,
         active: state.view === 'file-manager',
+        square: true,
         onClick: () => emit('change-view', 'file-manager')
       })}
     </div>

From 07c7bc29d03b2d3104596cfcb844a206f87da81c Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 01:13:30 +0100
Subject: [PATCH 11/65] Split navigation bar actions|views.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                    |  12 +++
 ui/arduino/views/components/toolbar.js | 143 +++++++++++++------------
 2 files changed, 85 insertions(+), 70 deletions(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index bf077cc..e7ec23a 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -154,6 +154,13 @@ button.small .icon {
   flex-shrink: 0;
 }
 
+#navigation-bar {
+  display: flex;
+  width: 100%;
+  background: #008184;
+  justify-content: space-between;
+}
+
 #toolbar {
   display: flex;
   padding: 16px 10px 10px 10px;
@@ -163,6 +170,11 @@ button.small .icon {
   background: #008184;
 }
 
+#app-views {
+  display: flex;
+  padding: 16px 10px 10px 10px;
+  gap: 16px;
+}
 .separator {
   height: 100%;
   min-width: 1px;
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index 4bc90b4..138d891 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -12,81 +12,84 @@ function Toolbar(state, emit) {
   const metaKeyString = state.platform === 'darwin' ? 'Cmd' : 'Ctrl'
   
   return html`
-    <div id="toolbar">
-      ${Button({
-        icon: state.isConnected ? 'connect.svg' : 'disconnect.svg',
-        label: state.isConnected ? 'Disconnect' : 'Connect',
-        tooltip: state.isConnected ? `Disconnect (${metaKeyString}+Shift+D)` : `Connect (${metaKeyString}+Shift+C)`,
-        onClick: () => state.isConnected ? emit('disconnect') : emit('open-connection-dialog'),
-        active: state.isConnected,
-        first: true
-      })}
-      ${Button({
-        icon: 'reboot.svg',
-        label: 'Reset',
-        tooltip: `Reset (${metaKeyString}+Shift+R)`,
-        disabled: !_canExecute,
-        onClick: () => emit('reset')
-      })}
-      <div class="separator"></div>
+    <div id="navigation-bar">
+      <div id="toolbar">
+        ${Button({
+          icon: state.isConnected ? 'connect.svg' : 'disconnect.svg',
+          label: state.isConnected ? 'Disconnect' : 'Connect',
+          tooltip: state.isConnected ? `Disconnect (${metaKeyString}+Shift+D)` : `Connect (${metaKeyString}+Shift+C)`,
+          onClick: () => state.isConnected ? emit('disconnect') : emit('open-connection-dialog'),
+          active: state.isConnected,
+          first: true
+        })}
+        ${Button({
+          icon: 'reboot.svg',
+          label: 'Reset',
+          tooltip: `Reset (${metaKeyString}+Shift+R)`,
+          disabled: !_canExecute,
+          onClick: () => emit('reset')
+        })}
+        <div class="separator"></div>
 
-      ${Button({
-        icon: 'run.svg',
-        label: 'Run',
-        tooltip: `Run (${metaKeyString}+R)`,
-        disabled: !_canExecute,
-        onClick: (e) => {
-          if (e.altKey) {
-            emit('run', true)
-          }else{
-            emit('run')
+        ${Button({
+          icon: 'run.svg',
+          label: 'Run',
+          tooltip: `Run (${metaKeyString}+R)`,
+          disabled: !_canExecute,
+          onClick: (e) => {
+            if (e.altKey) {
+              emit('run', true)
+            }else{
+              emit('run')
+            }
           }
-        }
-      })}
-      ${Button({
-        icon: 'stop.svg',
-        label: 'Stop',
-        tooltip: `Stop (${metaKeyString}+H)`,
-        disabled: !_canExecute,
-        onClick: () => emit('stop')
-      })}
+        })}
+        ${Button({
+          icon: 'stop.svg',
+          label: 'Stop',
+          tooltip: `Stop (${metaKeyString}+H)`,
+          disabled: !_canExecute,
+          onClick: () => emit('stop')
+        })}
 
-      <div class="separator"></div>
+        <div class="separator"></div>
 
-      ${Button({
-        icon: 'new-file.svg',
-        label: 'New',
-        tooltip: `New (${metaKeyString}+N)`,
-        disabled: state.view != 'editor',
-        onClick: () => emit('create-new-file')
-      })}
+        ${Button({
+          icon: 'new-file.svg',
+          label: 'New',
+          tooltip: `New (${metaKeyString}+N)`,
+          disabled: state.view != 'editor',
+          onClick: () => emit('create-new-file')
+        })}
 
-      ${Button({
-        icon: 'save.svg',
-        label: 'Save',
-        tooltip: `Save (${metaKeyString}+S)`,
-        disabled: !_canSave,
-        onClick: () => emit('save')
-      })}
-
-      <div class="separator"></div>
-
-      ${Button({
-        icon: 'code.svg',
-        label: 'Editor',
-        tooltip: `Editor (${metaKeyString}+Alt+1)`,
-        active: state.view === 'editor',
-        square: true,
-        onClick: () => emit('change-view', 'editor')
-      })}
-      ${Button({
-        icon: 'files.svg',
-        label: 'Files',
-        tooltip: `Files (${metaKeyString}+Alt+2)`,
-        active: state.view === 'file-manager',
-        square: true,
-        onClick: () => emit('change-view', 'file-manager')
-      })}
+        ${Button({
+          icon: 'save.svg',
+          label: 'Save',
+          tooltip: `Save (${metaKeyString}+S)`,
+          disabled: !_canSave,
+          onClick: () => emit('save')
+        })}
+      </div>
+        
+      <div id="app-views">
+        ${Button({
+          icon: 'code.svg',
+          label: 'Editor',
+          tooltip: `Editor (${metaKeyString}+Alt+1)`,
+          active: state.view === 'editor',
+          square: true,
+          onClick: () => emit('change-view', 'editor')
+        })}
+        ${Button({
+          icon: 'files.svg',
+          label: 'Files',
+          tooltip: `Files (${metaKeyString}+Alt+2)`,
+          active: state.view === 'file-manager',
+          square: true,
+          onClick: () => emit('change-view', 'file-manager')
+        })}
+      
+      </div>
     </div>
   `
 }

From 689863a6578603e500a1dc27502d98513beb6196 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 09:53:56 +0100
Subject: [PATCH 12/65] Fixed file actions buttons states and CSS.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                           | 12 ++++---
 .../views/components/elements/button.js       | 31 ++++++++++---------
 ui/arduino/views/components/file-actions.js   |  2 ++
 3 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index e7ec23a..50be8db 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -57,15 +57,15 @@ button.square {
 }
 button.inverted:hover,
 button.inverted.active {
-  background: rgba(0, 129, 132, 0.8);
+  background: rgba(0, 129, 132, 0.8) !important;
 }
 button.inverted {
-  background: rgba(0, 129, 132, 1);
+  background: rgba(0, 129, 132, 1) !important;
 }
 
 button[disabled] {
   background: rgba(255, 255, 255, 0.2);
-  cursor: not-allowed;
+  cursor: default;
 }
 button[disabled]:hover {
   background: rgba(255, 255, 255, 0.2);
@@ -531,13 +531,17 @@ button.small .icon {
   align-self: stretch;
 }
 
+#file-actions button[disabled], #file-actions button[disabled]:hover {
+  opacity: 0.4;
+}
+
 #file-actions button .icon {
   width: 100%;
   height: 100%;
 }
 
 #file-actions button:hover {
-  opacity: 0.2;
+  opacity: 0.5; */
 }
 
 .device-header {
diff --git a/ui/arduino/views/components/elements/button.js b/ui/arduino/views/components/elements/button.js
index db2c576..2a956c6 100644
--- a/ui/arduino/views/components/elements/button.js
+++ b/ui/arduino/views/components/elements/button.js
@@ -1,33 +1,34 @@
 function Button(args) {
   const {
+    first = false,
     size = '',
+    square = false,
     icon = 'connect.svg',
-    onClick = (e) => false,
+    onClick = (e) => {console.log(e); false},
     disabled = false,
     active = false,
-    label,
     tooltip,
-    background,
-    first,
-    square
+    label,
+    background
   } = args
   let tooltipEl = html``
   if (tooltip) {
     tooltipEl = html`<div class="tooltip">${tooltip}</div>`
   }
-  let activeClass = active ? 'active' : 'inactive'
+  let activeClass = active ? 'active' : ''
   let backgroundClass = background ? 'inverted' : ''
-  let labelActiveClass = disabled ? 'inactive' : 'active'
   let buttonFirstClass = first ? 'first' : ''
   let squareClass = square ? 'square' : ''
+  let labelActiveClass = disabled ? 'inactive' : 'active'
   let labelItem = size === 'small' ? '' : html`<div class="label ${labelActiveClass}">${label}</div>`
+
   return html`
-    <div class="button ${buttonFirstClass}">
-      <button disabled=${disabled} class="${squareClass}${size} ${activeClass} ${backgroundClass}" onclick=${onClick}>
-        <img class="icon" src="media/${icon}" />
-      </button>
-      ${labelItem}
-      ${tooltipEl}
-    </div>
-  `
+     <div class="button ${buttonFirstClass}">
+       <button disabled=${disabled} class="${squareClass}${size} ${activeClass} ${backgroundClass}" onclick=${onClick}>
+         <img class="icon" src="media/${icon}" />
+       </button>
+       ${labelItem}
+       ${tooltipEl}
+     </div>
+   `
 }
diff --git a/ui/arduino/views/components/file-actions.js b/ui/arduino/views/components/file-actions.js
index f48e0ad..75ffd54 100644
--- a/ui/arduino/views/components/file-actions.js
+++ b/ui/arduino/views/components/file-actions.js
@@ -15,6 +15,7 @@ function FileActions(state, emit) {
       icon: 'arrow-left-white.svg',
       size: 'small',
       background: 'inverted',
+      active: true,
       disabled: !canUpload({ isConnected, selectedFiles }),
       onClick: () => emit('upload-files')
     })}
@@ -22,6 +23,7 @@ function FileActions(state, emit) {
       icon: 'arrow-right-white.svg',
       size: 'small',
       background: 'inverted',
+      active: true,
       disabled: !canDownload({ isConnected, selectedFiles }),
       onClick: () => emit('download-files')
     })}

From 3a67bbbe4a223dbe2c945dc8cb77fa53b17ee11b Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 10:02:17 +0100
Subject: [PATCH 13/65] Fixed clear state.selectedFiles.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 0d3d9c6..0ebb572 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1209,6 +1209,7 @@ async function store(state, emitter) {
         // append it to the list of files that are already open
         filesAlreadyOpen.push(alreadyOpen)
       }
+      
     }
 
     // If opening an already open file, switch to its tab
@@ -1221,7 +1222,7 @@ async function store(state, emitter) {
     }
 
     state.openFiles = state.openFiles.concat(filesToOpen)
-
+    state.selectedFiles = []
     state.view = 'editor'
     updateMenu()
     emitter.emit('render')

From aede0a2668944288f0c9e0c4ad846ede166d535b Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 10:50:08 +0100
Subject: [PATCH 14/65] Separator height adjustments.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index 50be8db..493e0a8 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -184,6 +184,7 @@ button.small .icon {
   position: relative;
   margin-left: 0.5em;
   margin-right: 0.5em;
+  height: 65%;
 }
 
 #tabs {

From 0591824b1ee12c698bbcc84febad037e115d15cf Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 11:08:05 +0100
Subject: [PATCH 15/65] Removed redundant About menu item.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 backend/menu.js | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/backend/menu.js b/backend/menu.js
index 6db8023..bdd3452 100644
--- a/backend/menu.js
+++ b/backend/menu.js
@@ -11,8 +11,6 @@ module.exports = function registerMenu(win, state = {}) {
     ...(isMac ? [{
       label: app.name,
       submenu: [
-        { role: 'about'},
-        { type: 'separator' },
         { type: 'separator' },
         { role: 'hide', accelerator: 'CmdOrCtrl+Shift+H' },
         { role: 'hideOthers' },
@@ -167,7 +165,7 @@ module.exports = function registerMenu(win, state = {}) {
           }
         },
         {
-          label:'Info about this app',
+          label:'About Arduino Lab for MicroPython',
           click: () => {
               openAboutWindow({
                   icon_path: path.resolve(__dirname, '../ui/arduino/media/about_image.png'),

From c996824fe8ffa9da846bcd622cbd6f5f03ca986e Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 11:47:33 +0100
Subject: [PATCH 16/65] Toolbar: Reduced space between buttons and label.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index 493e0a8..e2219ef 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -93,7 +93,7 @@ button.small .icon {
   flex-direction: column;
   align-content: space-between;
   align-items: center;
-  gap: 10px;
+  gap: .5em;
   width: auto
 }
 .button.first{
@@ -106,7 +106,7 @@ button.small .icon {
   font-family: "OpenSans", sans-serif;
 }
 .button .label.active {
-  color: rgba(255, 255, 255, 1);
+  color: rgba(255, 255, 255, .9);
 }
 .button .tooltip {
   opacity: 0;

From fa82c79e7545630b91366a7a2b82bb76ea330ff3 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 17:48:08 +0100
Subject: [PATCH 17/65] Refactor menu, shortcuts, about window logic.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 backend/menu.js      | 67 ++++++++++++++++++++++++++------------------
 backend/shortcuts.js | 33 ++++++++++++++++++++--
 index.js             | 23 +++------------
 preload.js           |  8 +++++-
 ui/arduino/store.js  | 14 +++++----
 5 files changed, 90 insertions(+), 55 deletions(-)

diff --git a/backend/menu.js b/backend/menu.js
index bdd3452..11e41bc 100644
--- a/backend/menu.js
+++ b/backend/menu.js
@@ -1,10 +1,43 @@
 const { app, Menu } = require('electron')
+const { shortcuts, disableShortcuts } = require('./shortcuts.js')
 const path = require('path')
 const serial = require('./serial/serial.js').sharedInstance
 const openAboutWindow = require('about-window').default
-const shortcuts  = require('./shortcuts.js')
+
 const { type } = require('os')
 
+let appInfoWindow = null
+
+function closeAppInfo(win) {
+  disableShortcuts(win, false)
+  appInfoWindow.off('close', () => closeAppInfo(win))
+  appInfoWindow = null
+  
+}
+function openAppInfo(win) {
+  if (appInfoWindow != null) {
+    appInfoWindow.show()
+  } else {
+    appInfoWindow = openAboutWindow({
+      icon_path: path.resolve(__dirname, '../ui/arduino/media/about_image.png'),
+      css_path: path.resolve(__dirname, '../ui/arduino/views/about.css'),
+      copyright: '© Arduino SA 2022',
+      package_json_dir: path.resolve(__dirname, '..'),
+      bug_report_url: "https://github.com/arduino/lab-micropython-editor/issues",
+      bug_link_text: "report an issue",
+      homepage: "https://labs.arduino.cc",
+      use_version_info: false,
+      win_options: {
+          parent: win,
+          modal: true,
+      },
+      show_close_button: 'Close',
+    })
+    appInfoWindow.on('close', () => closeAppInfo(win));
+    disableShortcuts(win, true)
+  }
+}
+
 module.exports = function registerMenu(win, state = {}) {
   const isMac = process.platform === 'darwin'
   const template = [
@@ -22,6 +55,10 @@ module.exports = function registerMenu(win, state = {}) {
     {
       label: 'File',
       submenu: [
+        { label: 'Save', 
+          accelerator: shortcuts.menu.SAVE,
+          click: () => win.webContents.send('shortcut-cmd', shortcuts.global.SAVE)
+        },
         isMac ? { role: 'close' } : { role: 'quit' }
       ]
     },
@@ -166,23 +203,7 @@ module.exports = function registerMenu(win, state = {}) {
         },
         {
           label:'About Arduino Lab for MicroPython',
-          click: () => {
-              openAboutWindow({
-                  icon_path: path.resolve(__dirname, '../ui/arduino/media/about_image.png'),
-                  css_path: path.resolve(__dirname, '../ui/arduino/views/about.css'),
-                  copyright: '© Arduino SA 2022',
-                  package_json_dir: path.resolve(__dirname, '..'),
-                  bug_report_url: "https://github.com/arduino/lab-micropython-editor/issues",
-                  bug_link_text: "report an issue",
-                  homepage: "https://labs.arduino.cc",
-                  use_version_info: false,
-                  win_options: {
-                      parent: win,
-                      modal: true,
-                  },
-                  show_close_button: 'Close',
-              })
-            }
+          click: () => { openAppInfo(win) }
         },
       ]
     }
@@ -190,16 +211,6 @@ module.exports = function registerMenu(win, state = {}) {
 
   const menu = Menu.buildFromTemplate(template)
 
-  app.setAboutPanelOptions({
-    applicationName: app.name,
-    applicationVersion: app.getVersion(),
-    copyright: app.copyright,
-    credits: '(See "Info about this app" in the Help menu)',
-    authors: ['Arduino'],
-    website: 'https://arduino.cc',
-    iconPath: path.join(__dirname, '../assets/image.png'),
-  })
-
   Menu.setApplicationMenu(menu)
 
 }
diff --git a/backend/shortcuts.js b/backend/shortcuts.js
index e6b7159..1f6a2a3 100644
--- a/backend/shortcuts.js
+++ b/backend/shortcuts.js
@@ -1,4 +1,6 @@
-module.exports = {
+const { globalShortcut } = require('electron')
+let shortcutsActive = false
+const shortcuts = {
   global: {
     CONNECT: 'CommandOrControl+Shift+C',
     DISCONNECT: 'CommandOrControl+Shift+D',
@@ -25,5 +27,32 @@ module.exports = {
     CLEAR_TERMINAL: 'CmdOrCtrl+L',
     EDITOR_VIEW: 'CmdOrCtrl+Alt+1',
     FILES_VIEW: 'CmdOrCtrl+Alt+2'
-  }
+  },
+  // Shortcuts
+}
+
+function shortcutAction(key, win) {
+  console.log("key:", key)
+  win.send('shortcut-cmd', key);
+}
+
+function registerShortcuts (win) {
+  console.log("registering shortcuts")
+  win.send('ignore-shortcuts', false)
+}
+function unregisterShortcuts(win) {
+  console.log("unregistering shortcuts")
+  // globalShortcut.unregisterAll()
+  win.send('ignore-shortcuts', true)
+}
+
+function disableShortcuts (win, value) {
+  console.log("registering shortcuts")
+  win.send('ignore-shortcuts', value)
+}
+
+module.exports = {
+  shortcuts,
+  disableShortcuts
 }
+
diff --git a/index.js b/index.js
index a6fcc04..dda3fa4 100644
--- a/index.js
+++ b/index.js
@@ -1,8 +1,6 @@
 const { app, BrowserWindow, ipcMain, dialog, globalShortcut } = require('electron')
 const path = require('path')
 const fs = require('fs')
-const shortcuts = require('./backend/shortcuts.js').global
-
 const registerIPCHandlers = require('./backend/ipc.js')
 const registerMenu = require('./backend/menu.js')
 
@@ -63,28 +61,15 @@ function createWindow () {
   })
 }
 
-function shortcutAction(key) {
-  win.webContents.send('shortcut-cmd', key);
-}
-
-// Shortcuts
-function registerShortcuts() {
-  Object.entries(shortcuts).forEach(([command, shortcut]) => {
-    globalShortcut.register(shortcut, () => {
-      shortcutAction(shortcut)
-    });
-  })
-}
-
 app.on('ready', () => {
   createWindow()
-  registerShortcuts()
 
   win.on('focus', () => {
-    registerShortcuts()
+    console.log("win focus")
   })
+
   win.on('blur', () => {
-    globalShortcut.unregisterAll()
+    console.log("win blur")
   })
   
-})
\ No newline at end of file
+})
diff --git a/preload.js b/preload.js
index f67d43c..66b9ab0 100644
--- a/preload.js
+++ b/preload.js
@@ -1,7 +1,7 @@
 console.log('preload')
 const { contextBridge, ipcRenderer } = require('electron')
 const path = require('path')
-const shortcuts = require('./backend/shortcuts.js').global
+const shortcuts = require('./backend/shortcuts.js').shortcuts.global
 const { emit, platform } = require('process')
 const SerialBridge = require('./backend/serial/serial-bridge.js')
 
@@ -63,6 +63,12 @@ const Window = {
       callback(k);
     })
   },
+  onDisableShortcuts: (callback, value) => {
+    ipcRenderer.on('ignore-shortcuts', (e, value) => {
+      console.log("ipcRenderer ignore-shortcuts", value)
+      callback(value);
+    })
+  },
 
   beforeClose: (callback) => ipcRenderer.on('check-before-close', callback),
   confirmClose: () => ipcRenderer.invoke('confirm-close'),
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 09a373e..9844a88 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -60,6 +60,8 @@ async function store(state, emitter) {
 
   state.isTerminalBound = false
 
+  state.shortcutsDisabled = false
+
   const newFile = createEmptyFile({
     parentFolder: null, // Null parent folder means not saved?
     source: 'disk'
@@ -1398,12 +1400,14 @@ async function store(state, emitter) {
     await win.confirmClose()
   })
 
-  // win.shortcutCmdR(() => {
-  //   // Only run if we can execute
-    
-  // })
-
+  win.onDisableShortcuts((disable) => {
+    console.log('state.shortcutsDisabled', disable)
+    state.shortcutsDisabled = disable
+  }),
+  
   win.onKeyboardShortcut((key) => {
+    if (state.shortcutsDisabled) return
+
     if (key === shortcuts.CONNECT) {
       emitter.emit('open-connection-dialog')
     }

From ff5ca09a38d23cc70df74cb0ce7e648b74733755 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 18:11:31 +0100
Subject: [PATCH 18/65] Cleaned CSS typo.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index e2219ef..926108a 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -542,7 +542,7 @@ button.small .icon {
 }
 
 #file-actions button:hover {
-  opacity: 0.5; */
+  opacity: 0.5;
 }
 
 .device-header {

From 2791e006942bb401b7c5a4c8f484d8c8a0dcce4b Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 18:45:30 +0100
Subject: [PATCH 19/65] Added New/Save shortcuts to menu.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 backend/menu.js | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/backend/menu.js b/backend/menu.js
index 11e41bc..033420f 100644
--- a/backend/menu.js
+++ b/backend/menu.js
@@ -55,8 +55,14 @@ module.exports = function registerMenu(win, state = {}) {
     {
       label: 'File',
       submenu: [
+        { label: 'New', 
+          accelerator: shortcuts.menu.NEW,
+          enabled: state.view === 'editor',
+          click: () => win.webContents.send('shortcut-cmd', shortcuts.global.NEW)
+        },
         { label: 'Save', 
           accelerator: shortcuts.menu.SAVE,
+          enabled: state.view === 'editor',
           click: () => win.webContents.send('shortcut-cmd', shortcuts.global.SAVE)
         },
         isMac ? { role: 'close' } : { role: 'quit' }

From 838aa6f8102d928dbc1fa01e23b25eefe5eb64b6 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 20:19:05 +0100
Subject: [PATCH 20/65] Updated Connect shortcut.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index b558e4d..66b7ccf 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1443,7 +1443,7 @@ async function store(state, emitter) {
     if (state.shortcutsDisabled) return
 
     if (key === shortcuts.CONNECT) {
-      emitter.emit('open-connection-dialog')
+      emitter.emit('connect')
     }
     if (key === shortcuts.DISCONNECT) {
       emitter.emit('disconnect')

From 9a05dd90174d26e244e8396c2c855a487eccdfc6 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 20:48:38 +0100
Subject: [PATCH 21/65] Cleanup unused code.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 backend/shortcuts.js                           | 17 +----------------
 preload.js                                     |  1 -
 ui/arduino/store.js                            |  1 -
 ui/arduino/views/components/elements/button.js |  2 +-
 4 files changed, 2 insertions(+), 19 deletions(-)

diff --git a/backend/shortcuts.js b/backend/shortcuts.js
index 3f8bde0..2be714c 100644
--- a/backend/shortcuts.js
+++ b/backend/shortcuts.js
@@ -32,23 +32,8 @@ const shortcuts = {
   // Shortcuts
 }
 
-function shortcutAction(key, win) {
-  console.log("key:", key)
-  win.send('shortcut-cmd', key);
-}
-
-function registerShortcuts (win) {
-  console.log("registering shortcuts")
-  win.send('ignore-shortcuts', false)
-}
-function unregisterShortcuts(win) {
-  console.log("unregistering shortcuts")
-  // globalShortcut.unregisterAll()
-  win.send('ignore-shortcuts', true)
-}
-
 function disableShortcuts (win, value) {
-  console.log("registering shortcuts")
+  console.log(value ? 'disabling' : 'enabling', 'shortcuts')
   win.send('ignore-shortcuts', value)
 }
 
diff --git a/preload.js b/preload.js
index 66b9ab0..fbc1579 100644
--- a/preload.js
+++ b/preload.js
@@ -65,7 +65,6 @@ const Window = {
   },
   onDisableShortcuts: (callback, value) => {
     ipcRenderer.on('ignore-shortcuts', (e, value) => {
-      console.log("ipcRenderer ignore-shortcuts", value)
       callback(value);
     })
   },
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 66b7ccf..fca99fe 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1435,7 +1435,6 @@ async function store(state, emitter) {
   })
 
   win.onDisableShortcuts((disable) => {
-    console.log('state.shortcutsDisabled', disable)
     state.shortcutsDisabled = disable
   }),
   
diff --git a/ui/arduino/views/components/elements/button.js b/ui/arduino/views/components/elements/button.js
index 2a956c6..2e69931 100644
--- a/ui/arduino/views/components/elements/button.js
+++ b/ui/arduino/views/components/elements/button.js
@@ -4,7 +4,7 @@ function Button(args) {
     size = '',
     square = false,
     icon = 'connect.svg',
-    onClick = (e) => {console.log(e); false},
+    onClick = (e) => {},
     disabled = false,
     active = false,
     tooltip,

From b5c766ee98cac5de4a7db75d33cf95f30b13f97a Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 20:52:43 +0100
Subject: [PATCH 22/65] Concealed tooltips.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/views/components/elements/button.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ui/arduino/views/components/elements/button.js b/ui/arduino/views/components/elements/button.js
index 2e69931..1dd69ec 100644
--- a/ui/arduino/views/components/elements/button.js
+++ b/ui/arduino/views/components/elements/button.js
@@ -15,6 +15,7 @@ function Button(args) {
   if (tooltip) {
     tooltipEl = html`<div class="tooltip">${tooltip}</div>`
   }
+  tooltipEl = html``
   let activeClass = active ? 'active' : ''
   let backgroundClass = background ? 'inverted' : ''
   let buttonFirstClass = first ? 'first' : ''

From be5f149ca2ed2879d6a8fa289a00d587294d126a Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 21:34:26 +0100
Subject: [PATCH 23/65] CSS fix line-height to show underscores in come cases.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index 957c777..10b9cef 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -225,7 +225,7 @@ button.small .icon {
   color: #000;
   font-style: normal;
   font-weight: 400;
-  line-height: 1.1em;
+  line-height: 1.3em;
   flex: 1 0 0;
   max-width: calc(100% - 46px);
   overflow: hidden;
@@ -459,12 +459,9 @@ button.small .icon {
   transition: transform 0.15s;
 }
 
-.dialog .dialog-content > * {
-  /* width: 100%; */
-}
 
 .dialog .dialog-content #file-name {
-  font-size: 1.1em;
+  font-size: 1.3em;
   width:100%;
   font-family: "RobotoMono", monospace;
 }
@@ -678,7 +675,7 @@ button.small .icon {
   width: 100%;
   overflow: hidden;
   text-overflow: ellipsis;
-  line-height: 1.1em;
+  line-height: 1.3em;
 }
 
 .file-list .item .checkbox .icon.off,

From 5b81693178944771d0bbfc7192d8b1d6411b4d4d Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 21 Dec 2024 23:17:15 +0100
Subject: [PATCH 24/65] Added META+W (close tab) and META+Q (quit).

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 backend/menu.js      | 7 ++++++-
 backend/shortcuts.js | 2 ++
 ui/arduino/store.js  | 4 +++-
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/backend/menu.js b/backend/menu.js
index 033420f..fe543a2 100644
--- a/backend/menu.js
+++ b/backend/menu.js
@@ -65,7 +65,12 @@ module.exports = function registerMenu(win, state = {}) {
           enabled: state.view === 'editor',
           click: () => win.webContents.send('shortcut-cmd', shortcuts.global.SAVE)
         },
-        isMac ? { role: 'close' } : { role: 'quit' }
+        { label: 'Close tab',
+          accelerator: 'CmdOrCtrl+W',
+          enabled: state.view === 'editor',
+          click: () => win.webContents.send('shortcut-cmd', shortcuts.global.CLOSE)
+         },
+        { role: 'quit' }
       ]
     },
     {
diff --git a/backend/shortcuts.js b/backend/shortcuts.js
index 2be714c..925468e 100644
--- a/backend/shortcuts.js
+++ b/backend/shortcuts.js
@@ -2,6 +2,7 @@ const { globalShortcut } = require('electron')
 let shortcutsActive = false
 const shortcuts = {
   global: {
+    CLOSE: 'CommandOrControl+W',
     CONNECT: 'CommandOrControl+Shift+C',
     DISCONNECT: 'CommandOrControl+Shift+D',
     RUN: 'CommandOrControl+R',
@@ -16,6 +17,7 @@ const shortcuts = {
     FILES_VIEW: 'CommandOrControl+Alt+2',
   },
   menu: {
+    CLOSE: 'CmdOrCtrl+W',
     CONNECT: 'CmdOrCtrl+Shift+C',
     DISCONNECT: 'CmdOrCtrl+Shift+D',
     RUN: 'CmdOrCtrl+R',
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index fca99fe..bc41090 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1440,7 +1440,9 @@ async function store(state, emitter) {
   
   win.onKeyboardShortcut((key) => {
     if (state.shortcutsDisabled) return
-
+    if (key === shortcuts.CLOSE) {
+      emitter.emit('close-tab', state.editingFile)
+    }
     if (key === shortcuts.CONNECT) {
       emitter.emit('connect')
     }

From 3c1fc6c9744b3b271f55316cff58e8bab48b579c Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sun, 22 Dec 2024 00:03:55 +0100
Subject: [PATCH 25/65] Added multiple run safeguard to prevent too many
 Promises from crashing the app.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js                           | 34 +++++++++++++++++--
 .../views/components/elements/button.js       |  2 ++
 ui/arduino/views/components/toolbar.js        |  4 +--
 3 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index bc41090..04afdb3 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -228,6 +228,15 @@ async function store(state, emitter) {
   })
 
   // CODE EXECUTION
+  emitter.on('run-from-button', (onlySelected = false) => {
+    if (onlySelected) {
+      runCodeSelection()
+    } else {
+      runCode()
+    }
+  })
+
+
   emitter.on('run', async (onlySelected = false) => {
     log('run')
     const openFile = state.openFiles.find(f => f.id == state.editingFile)
@@ -1506,14 +1515,35 @@ async function store(state, emitter) {
     emitter.emit('render')
   }
 
+  // Ensures that even if the RUN button is clicked multiple times
+  // there's a 100ms delay between each execution to prevent double runs
+  // and entering an unstable state because of getPrompt() calls
+  let preventDoubleRun = false
+  function timedReset() {
+    preventDoubleRun = true
+    setTimeout(() => {
+      preventDoubleRun = false
+    }, 500);
+    
+  }
+
+  function filterDoubleRun(onlySelected = false) {
+    if (preventDoubleRun) return
+    console.log('>>> RUN CODE ACTUAL <<<')
+    emitter.emit('run', onlySelected)
+    timedReset()
+  }
+
   function runCode() {
+    console.log('>>> RUN CODE REQUEST <<<')
     if (canExecute({ view: state.view, isConnected: state.isConnected })) {
-      emitter.emit('run')
+      filterDoubleRun()
     }
   }
   function runCodeSelection() {
+    console.log('>>> RUN CODE REQUEST <<<')
     if (canExecute({ view: state.view, isConnected: state.isConnected })) {
-      emitter.emit('run', true)
+      filterDoubleRun(true)
     }
   }
   function stopCode() {
diff --git a/ui/arduino/views/components/elements/button.js b/ui/arduino/views/components/elements/button.js
index 1dd69ec..b1d1f55 100644
--- a/ui/arduino/views/components/elements/button.js
+++ b/ui/arduino/views/components/elements/button.js
@@ -11,6 +11,8 @@ function Button(args) {
     label,
     background
   } = args
+
+  
   let tooltipEl = html``
   if (tooltip) {
     tooltipEl = html`<div class="tooltip">${tooltip}</div>`
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index 5acc40d..cbdb82a 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -38,9 +38,9 @@ function Toolbar(state, emit) {
           disabled: !_canExecute,
           onClick: (e) => {
             if (e.altKey) {
-              emit('run', true)
+              emit('run-from-button', true)
             }else{
-              emit('run')
+              emit('run-from-button')
             }
           }
         })}

From f4426285017576b250aa84f914f6227765886332 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sun, 22 Dec 2024 00:27:12 +0100
Subject: [PATCH 26/65] Transfer operations lock shortcuts. Progress is reset.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 04afdb3..8ca4062 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -59,7 +59,7 @@ async function store(state, emitter) {
   state.isSaving = false
   state.savingProgress = 0
   state.isTransferring = false
-  state.transferringProgress = 0
+  state.transferringProgress = ''
   state.isRemoving = false
 
   state.isLoadingFiles = false
@@ -1312,7 +1312,9 @@ async function store(state, emitter) {
             state.transferringProgress = `${fileName}: ${progress}`
             emitter.emit('render')
           }
+          
         )
+        state.transferringProgress = ''
       } else {
         await serialBridge.uploadFile(
           srcPath, destPath,
@@ -1321,6 +1323,7 @@ async function store(state, emitter) {
             emitter.emit('render')
           }
         )
+        state.transferringProgress = ''
       }
     }
 
@@ -1448,6 +1451,7 @@ async function store(state, emitter) {
   }),
   
   win.onKeyboardShortcut((key) => {
+    if (state.isTransferring || state.isRemoving || state.isSaving || state.isConnectionDialogOpen || state.isNewFileDialogOpen) return
     if (state.shortcutsDisabled) return
     if (key === shortcuts.CLOSE) {
       emitter.emit('close-tab', state.editingFile)

From 9f2adfdcfa536a5e9081c6dfe6edf551d09756b8 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sun, 22 Dec 2024 00:46:49 +0100
Subject: [PATCH 27/65] Reworked panel bar to allow full area drag-to-resize.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                       | 6 ++++++
 ui/arduino/views/components/repl-panel.js | 2 ++
 2 files changed, 8 insertions(+)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index 10b9cef..d9bce9a 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -342,6 +342,8 @@ button.small .icon {
   flex-grow: 2;
   height: 100%;
   cursor: grab;
+  position: absolute;
+  width: 100%;
 }
 
 #panel #drag-handle:active {
@@ -357,6 +359,7 @@ button.small .icon {
   gap: 10px;
   align-self: stretch;
   background: #008184;
+  position: relative;
 }
 
 .panel-bar #connection-status {
@@ -372,6 +375,9 @@ button.small .icon {
   filter: invert(1);
 }
 
+.panel-bar .spacer {
+  flex-grow: 1;
+}
 .panel-bar .term-operations {
   transition: opacity 0.15s;
   display: flex;
diff --git a/ui/arduino/views/components/repl-panel.js b/ui/arduino/views/components/repl-panel.js
index 4c85fcc..eca67d9 100644
--- a/ui/arduino/views/components/repl-panel.js
+++ b/ui/arduino/views/components/repl-panel.js
@@ -22,6 +22,7 @@ function ReplPanel(state, emit) {
           <img src="media/connect.svg" />
           <div>${state.isConnected ? 'Connected to ' + state.connectedPort : ''}</div>
         </div>
+        <div class="spacer"></div>
         <div id="drag-handle"
           onmousedown=${() => emit('start-resizing-panel')}
           onmouseup=${() => emit('stop-resizing-panel')}
@@ -34,6 +35,7 @@ function ReplPanel(state, emit) {
           size: 'small',
           onClick: onToggle
         })}
+        
       </div>
       <div class=${terminalDisabledClass}>
         ${state.cache(XTerm, 'terminal').render()}

From aa91886f79a634538dc88af13f3e7dfeb0a12bda Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sun, 22 Dec 2024 08:07:50 +0100
Subject: [PATCH 28/65] Clearing state.selectedFiles on open/view-switch.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 8ca4062..0039775 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -102,10 +102,14 @@ async function store(state, emitter) {
     emitter.emit('render')
   })
   emitter.on('change-view', (view) => {
-    state.view = view
+    
     if (state.view === 'file-manager') {
+      if (view != state.view) {
+        state.selectedFiles = []
+      }
       emitter.emit('refresh-files')
     }
+    state.view = view
     emitter.emit('render')
     updateMenu()
   })

From 828f21b8573f2f7fa005ce945b2e4afca582628a Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sun, 22 Dec 2024 09:34:25 +0100
Subject: [PATCH 29/65] Renaming tabs/files will now reflect on the other view.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 73 ++++++++++++++++++++++-----------------------
 1 file changed, 35 insertions(+), 38 deletions(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 0039775..b40a1c8 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -927,6 +927,12 @@ async function store(state, emitter) {
           )
         )
       }
+      // Update tab is renaming successful
+      const tabToRenameIndex = state.openFiles.findIndex(f => f.fileName === file.fileName && f.source === file.source && f.parentFolder === file.parentFolder)
+      if (tabToRenameIndex > -1) {
+        state.openFiles[tabToRenameIndex].fileName = value
+        emitter.emit('render')
+      }
     } catch (e) {
       alert(`The file ${file.fileName} could not be renamed to ${value}`)
     }
@@ -955,17 +961,6 @@ async function store(state, emitter) {
       return
     }
 
-    let response = canSave({
-      view: state.view,
-      isConnected: state.isConnected,
-      openFiles: state.openFiles,
-      editingFile: state.editingFile
-    })
-    if (response == false) {
-      log("can't save")
-      return
-    }
-
     state.isSaving = true
     emitter.emit('render')
 
@@ -1037,34 +1032,36 @@ async function store(state, emitter) {
 
     if (fullPathExists) {
       // SAVE FILE CONTENTS
-      const contents = openFile.editor.editor.state.doc.toString()
-      try {
-        if (openFile.source == 'board') {
-          await serialBridge.getPrompt()
-          await serialBridge.saveFileContent(
-            serialBridge.getFullPath(
-              state.boardNavigationRoot,
-              openFile.parentFolder,
-              oldName
-            ),
-            contents,
-            (e) => {
-              state.savingProgress = e
-              emitter.emit('render')
-            }
-          )
-        } else if (openFile.source == 'disk') {
-          await disk.saveFileContent(
-            disk.getFullPath(
-              state.diskNavigationRoot,
-              openFile.parentFolder,
-              oldName
-            ),
-            contents
-          )
+      if (openFile.hasChanges) {
+        const contents = openFile.editor.editor.state.doc.toString()
+        try {
+          if (openFile.source == 'board') {
+            await serialBridge.getPrompt()
+            await serialBridge.saveFileContent(
+              serialBridge.getFullPath(
+                state.boardNavigationRoot,
+                openFile.parentFolder,
+                oldName
+              ),
+              contents,
+              (e) => {
+                state.savingProgress = e
+                emitter.emit('render')
+              }
+            )
+          } else if (openFile.source == 'disk') {
+            await disk.saveFileContent(
+              disk.getFullPath(
+                state.diskNavigationRoot,
+                openFile.parentFolder,
+                oldName
+              ),
+              contents
+            )
+          }
+        } catch (e) {
+          log('error', e)
         }
-      } catch (e) {
-        log('error', e)
       }
       // RENAME FILE
       try {

From 64aabf76bf92cc9634a94a8a6131e2483c333a7f Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sun, 22 Dec 2024 11:49:01 +0100
Subject: [PATCH 30/65] Sanitised path in getFullPath() to convert Windows
 separators to posix.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 backend/serial/serial-bridge.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/backend/serial/serial-bridge.js b/backend/serial/serial-bridge.js
index 90d4d2e..a7f5f35 100644
--- a/backend/serial/serial-bridge.js
+++ b/backend/serial/serial-bridge.js
@@ -97,7 +97,7 @@ const SerialBridge = {
     return path.posix.join(navigation, target)
   },
   getFullPath: (root, navigation, file) => {
-    return path.posix.join(root, navigation, file)
+    return path.posix.join(root, navigation.replaceAll(path.win32.sep, path.posix.sep), file.replaceAll(path.win32.sep, path.posix.sep))
   },
   getParentPath: (navigation) => {
     return path.posix.dirname(navigation)

From 2fcb6778cf134fe04c416db5919d0b1b0d7d01ae Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Thu, 26 Dec 2024 10:23:10 +0100
Subject: [PATCH 31/65] Minor adjustments to window size and file list padding.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 index.js            | 4 ++--
 ui/arduino/main.css | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/index.js b/index.js
index a6fcc04..2b8a5ed 100644
--- a/index.js
+++ b/index.js
@@ -14,8 +14,8 @@ let splashTimestamp = null
 function createWindow () {
   // Create the browser window.
   win = new BrowserWindow({
-    width: 720,
-    height: 640,
+    width: 820,
+    height: 700,
     webPreferences: {
       nodeIntegration: false,
       webSecurity: true,
diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index cc0e95c..a798aaf 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -503,7 +503,7 @@ button.small .icon {
 
 .file-list .list {
   display: flex;
-  padding: 10px 20px;
+  padding: 6px 8px;
   flex-direction: column;
   align-items: flex-start;
   flex: 1 0 0;

From 954010b75f654d0838180671768704f143bc0d47 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 11:15:47 +0100
Subject: [PATCH 32/65] Fixed auto-connect for FM view and amended text to
 connect.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/views/file-manager.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ui/arduino/views/file-manager.js b/ui/arduino/views/file-manager.js
index 89f7b89..fa43eff 100644
--- a/ui/arduino/views/file-manager.js
+++ b/ui/arduino/views/file-manager.js
@@ -1,5 +1,5 @@
 function FileManagerView(state, emit) {
-  let boardFullPath = 'Select a board...'
+  let boardFullPath = 'Connect to board'
   let diskFullPath = `${state.diskNavigationRoot}${state.diskNavigationPath}`
 
   if (state.isConnected) {
@@ -13,7 +13,7 @@ function FileManagerView(state, emit) {
         <div id="board-files">
           <div class="device-header">
             <img class="icon" src="media/${state.isConnected?'board':'disconnect'}.svg" />
-            <div onclick=${() => emit('open-connection-dialog')} class="text">
+            <div onclick=${() => emit('connect')} class="text">
               <span>${boardFullPath}</span>
             </div>
             <button disabled=${!state.isConnected} onclick=${() => emit('create-folder', 'board')}>

From 5266f50455bf1cbecf023d0816535a53db7d0144 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 11:30:08 +0100
Subject: [PATCH 33/65] Fixed toolbar icon opacity when disabled.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index d9bce9a..82eb0f6 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -63,19 +63,14 @@ button.inverted {
   background: rgba(0, 129, 132, 1) !important;
 }
 
-button[disabled] {
-  background: rgba(255, 255, 255, 0.2);
+button[disabled], button[disabled]:hover {
   cursor: default;
+  opacity: 0.5;
 }
-button[disabled]:hover {
-  background: rgba(255, 255, 255, 0.2);
-}
-button:hover, button.active {
+
+button:not([disabled]):hover {
   background: rgba(255, 255, 255, 1);
 }
-/* button.inactive:hover {
-  background: rgba(255, 255, 255, 0.2);
-} */
 
 button .icon {
   width: 63%;
@@ -101,7 +96,6 @@ button.small .icon {
 }
 .button .label {
   text-align: center;
-  /* color: #eee; */
   color: rgba(255, 255, 255, 0.2);
   font-family: "OpenSans", sans-serif;
 }

From f7840ab0a1fd450b39aac4c4d0147ba18e3ff1c5 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 12:08:12 +0100
Subject: [PATCH 34/65] App views buttons made into segmented control.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                    | 28 ++++++++++++++++++++++++--
 ui/arduino/media/files.svg             |  3 ---
 ui/arduino/views/components/toolbar.js |  2 +-
 3 files changed, 27 insertions(+), 6 deletions(-)
 delete mode 100644 ui/arduino/media/files.svg

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index 82eb0f6..df4551a 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -63,7 +63,7 @@ button.inverted {
   background: rgba(0, 129, 132, 1) !important;
 }
 
-button[disabled], button[disabled]:hover {
+button[disabled], button[disabled]:hover{
   cursor: default;
   opacity: 0.5;
 }
@@ -72,6 +72,10 @@ button:not([disabled]):hover {
   background: rgba(255, 255, 255, 1);
 }
 
+button.active {
+  background: rgba(255, 255, 255);
+}
+
 button .icon {
   width: 63%;
   height: 63%;
@@ -167,8 +171,28 @@ button.small .icon {
 #app-views {
   display: flex;
   padding: 16px 10px 10px 10px;
-  gap: 16px;
+  width: 120px;
+  /* gap: 16px; */
+}
+
+#app-views .button{
+  flex-grow: 1;
+  width: 100%;
 }
+
+#app-views .button button{
+  width: 100%
+}
+
+#app-views div:first-child button{
+  border-radius: 8px 0px 0px 8px;
+  
+}
+#app-views div:last-child button{
+  border-radius: 0px 8px 8px 0px;
+  
+}
+
 .separator {
   height: 100%;
   min-width: 1px;
diff --git a/ui/arduino/media/files.svg b/ui/arduino/media/files.svg
deleted file mode 100644
index 59ffe3f..0000000
--- a/ui/arduino/media/files.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg width="50" height="50" viewBox="-1 0 25 18" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M23.95 7.6C23.8685 7.49128 23.7629 7.40305 23.6414 7.34229C23.5198 7.28154 23.3859 7.24994 23.25 7.25H21.5V4.625C21.4993 4.39314 21.4069 4.17097 21.243 4.00702C21.079 3.84307 20.8569 3.75067 20.625 3.75H11.3587L8.12125 0.50375C7.95444 0.342525 7.73199 0.251665 7.5 0.25H1.375C1.14314 0.250669 0.92097 0.343072 0.757021 0.507021C0.593072 0.67097 0.500669 0.893141 0.5 1.125V16.875C0.500669 17.1069 0.593072 17.329 0.757021 17.493C0.92097 17.6569 1.14314 17.7493 1.375 17.75H20.625C20.8129 17.7494 20.9958 17.6888 21.1468 17.5771C21.2979 17.4653 21.4094 17.3083 21.465 17.1287L24.09 8.37875C24.1287 8.24698 24.1361 8.10802 24.1118 7.97286C24.0875 7.83771 24.0321 7.71005 23.95 7.6ZM2.25 2H7.14125L10.3787 5.24625C10.5456 5.40747 10.768 5.49834 11 5.5H19.75V7.25H4C3.81207 7.25059 3.62925 7.31117 3.47815 7.42292C3.32706 7.53466 3.2156 7.69174 3.16 7.87125L2.25 10.9075V2ZM19.9775 16H2.5475L4.6475 9H22.0775L19.9775 16Z" fill="black"/>
-</svg>
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index cbdb82a..a0b8a45 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -81,7 +81,7 @@ function Toolbar(state, emit) {
           onClick: () => emit('change-view', 'editor')
         })}
         ${Button({
-          icon: 'files.svg',
+          icon: 'folder.svg',
           label: 'Files',
           tooltip: `Files (${metaKeyString}+Alt+2)`,
           active: state.view === 'file-manager',

From 505ba9a191bed1f717ac1540636ed983d1f5898d Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 12:49:45 +0100
Subject: [PATCH 35/65] Fixed fonts inconsistencies. Updated woff2 files.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                           |  25 +++++++++++++++---
 .../open-sans_5.0.29_latin-wght-normal.woff2  | Bin 48236 -> 0 bytes
 ui/arduino/media/opensans-bold.woff2          | Bin 0 -> 18200 bytes
 ui/arduino/media/opensans-regular.woff2       | Bin 0 -> 18168 bytes
 .../roboto-mono-latin-ext-400-normal.woff     | Bin 12228 -> 0 bytes
 .../roboto-mono-latin-ext-400-normal.woff2    | Bin 9556 -> 0 bytes
 ui/arduino/media/roboto-regular.woff2         | Bin 0 -> 18996 bytes
 .../views/components/elements/button.js       |   3 ++-
 8 files changed, 24 insertions(+), 4 deletions(-)
 delete mode 100644 ui/arduino/media/open-sans_5.0.29_latin-wght-normal.woff2
 create mode 100644 ui/arduino/media/opensans-bold.woff2
 create mode 100644 ui/arduino/media/opensans-regular.woff2
 delete mode 100644 ui/arduino/media/roboto-mono-latin-ext-400-normal.woff
 delete mode 100644 ui/arduino/media/roboto-mono-latin-ext-400-normal.woff2
 create mode 100644 ui/arduino/media/roboto-regular.woff2

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index df4551a..c7f3e8c 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -1,19 +1,31 @@
+/*
+  On 20250303, due to font files inconsistencies, we sourced the updated fonts from here:
+  https://github.com/alsacreations/webfonts
+  
+*/
 @font-face {
   font-family: "RobotoMono";
   src:
-    url("media/roboto-mono-latin-ext-400-normal.woff2") format("woff2"),
-    url("media/roboto-mono-latin-ext-400-normal.woff") format("woff");
+    url("media/roboto-regular.woff2") format("woff2");
   font-weight: normal;
   font-style: normal;
 }
 
+
 @font-face {
   font-family: "OpenSans";
-  src: url("media/open-sans_5.0.29_latin-wght-normal.woff2") format("woff2");
+  src: url("media/opensans-regular.woff2") format("woff2");
   font-weight: normal;
   font-style: normal;
 }
 
+@font-face {
+  font-family: "OpenSans";
+  src: url("media/opensans-bold.woff2") format("woff2");
+  font-weight: bold;
+  font-style: normal;
+}
+
 * {
   -moz-user-select: none;
   -webkit-user-select: none;
@@ -184,6 +196,13 @@ button.small .icon {
   width: 100%
 }
 
+#app-views .button .label{
+  
+}
+#app-views .button .label.selected{
+  font-weight: bold;
+}
+
 #app-views div:first-child button{
   border-radius: 8px 0px 0px 8px;
   
diff --git a/ui/arduino/media/open-sans_5.0.29_latin-wght-normal.woff2 b/ui/arduino/media/open-sans_5.0.29_latin-wght-normal.woff2
deleted file mode 100644
index 0beab54695b31975886051af14f1ab9763d29f0c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 48236
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
ABLDyZ

diff --git a/ui/arduino/media/opensans-bold.woff2 b/ui/arduino/media/opensans-bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..04b3556691424b3912ae8d73b4b02f95c1fd902b
GIT binary patch
literal 18200
zcmV(_K-9l?Pew8T0RR9107n=A6951J0H~}007k3;0U4SA00000000000000000000
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
Pv4zvva76~%b;B<Mx=ls~

literal 0
HcmV?d00001

diff --git a/ui/arduino/media/opensans-regular.woff2 b/ui/arduino/media/opensans-regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..8ceeab50e1b88b45a509967019375651e61d100a
GIT binary patch
literal 18168
zcmV)AK*YayPew8T0RR9107m!#6951J0I4_t07i=d0U4SA00000000000000000000
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

literal 0
HcmV?d00001

diff --git a/ui/arduino/media/roboto-mono-latin-ext-400-normal.woff b/ui/arduino/media/roboto-mono-latin-ext-400-normal.woff
deleted file mode 100644
index 50943d5cc9fb1533331266fa67b7b5535204dd01..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12228
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
RrF^dGM$O+qkc+He{~rvJWB~vG

diff --git a/ui/arduino/media/roboto-mono-latin-ext-400-normal.woff2 b/ui/arduino/media/roboto-mono-latin-ext-400-normal.woff2
deleted file mode 100644
index cb00b8b5be81aaf4ecb3c93dbcc0c2a8a2f17601..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9556
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

diff --git a/ui/arduino/media/roboto-regular.woff2 b/ui/arduino/media/roboto-regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..c0b2dd6b16f34661e3e51efcf1770ad45a28870a
GIT binary patch
literal 18996
zcmV(?K-a%_Pew8T0RR9107^6f6951J0I?JR07=FG0ssI200000000000000000000
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

literal 0
HcmV?d00001

diff --git a/ui/arduino/views/components/elements/button.js b/ui/arduino/views/components/elements/button.js
index b1d1f55..4ed37b9 100644
--- a/ui/arduino/views/components/elements/button.js
+++ b/ui/arduino/views/components/elements/button.js
@@ -19,11 +19,12 @@ function Button(args) {
   }
   tooltipEl = html``
   let activeClass = active ? 'active' : ''
+  let labelSelectedClass = active ? 'selected' : ''
   let backgroundClass = background ? 'inverted' : ''
   let buttonFirstClass = first ? 'first' : ''
   let squareClass = square ? 'square' : ''
   let labelActiveClass = disabled ? 'inactive' : 'active'
-  let labelItem = size === 'small' ? '' : html`<div class="label ${labelActiveClass}">${label}</div>`
+  let labelItem = size === 'small' ? '' : html`<div class="label ${labelActiveClass} ${labelSelectedClass}">${label}</div>`
 
   return html`
      <div class="button ${buttonFirstClass}">

From a8a9307e0df190e32b5fdef1f4906aef8a84f59a Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 18:26:23 +0100
Subject: [PATCH 36/65] WIP: migration of actions v3 to v4.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 .github/workflows/build.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f7c6d53..2ad5575 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -92,7 +92,7 @@ jobs:
             npm run build
 
       - name: Upload [GitHub Actions]
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: ${{ env.JOB_TRANSFER_ARTIFACT }}
           path: dist
@@ -121,13 +121,13 @@ jobs:
 
     steps:
       - name: Download job transfer artifact
-        uses: actions/download-artifact@v3
+        uses: actions/download-artifact@v4
         with:
           name: ${{ env.JOB_TRANSFER_ARTIFACT }}
           path: ${{ env.JOB_TRANSFER_ARTIFACT }}
 
       - name: Upload tester build artifact
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: ${{ matrix.artifact.name }}
           path: ${{ env.JOB_TRANSFER_ARTIFACT }}/${{ matrix.artifact.path }}
@@ -138,7 +138,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Download [GitHub Actions]
-        uses: actions/download-artifact@v3
+        uses: actions/download-artifact@v4
         with:
           name: ${{ env.JOB_TRANSFER_ARTIFACT }}
           path: ${{ env.JOB_TRANSFER_ARTIFACT }}

From 37100c8746e96e91433feb9287590592496f9481 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 18:41:12 +0100
Subject: [PATCH 37/65] WIP: artifacts v4 upgrade.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 .github/workflows/build.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 2ad5575..856bacd 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -129,7 +129,7 @@ jobs:
       - name: Upload tester build artifact
         uses: actions/upload-artifact@v4
         with:
-          name: ${{ matrix.artifact.name }}
+          name: ${{ matrix.artifact.name }}-${{ github.run_id }}
           path: ${{ env.JOB_TRANSFER_ARTIFACT }}/${{ matrix.artifact.path }}
 
   release:

From 7483819b8b5239336692a20ac48da0eda0cc60ce Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 18:46:36 +0100
Subject: [PATCH 38/65] WIP: artifacts v4 upgrade.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 .github/workflows/build.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 856bacd..e3c512a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -123,8 +123,8 @@ jobs:
       - name: Download job transfer artifact
         uses: actions/download-artifact@v4
         with:
-          name: ${{ env.JOB_TRANSFER_ARTIFACT }}
-          path: ${{ env.JOB_TRANSFER_ARTIFACT }}
+          name: ${{ matrix.artifact.name }}-${{ github.run_id }}
+          path: ${{ env.JOB_TRANSFER_ARTIFACT }}/${{ matrix.artifact.path }}
 
       - name: Upload tester build artifact
         uses: actions/upload-artifact@v4

From 8eaf5845e656714b640ab3a776617d2306906b93 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 18:52:42 +0100
Subject: [PATCH 39/65] WIP: artifacts v4 upgrade.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 .github/workflows/build.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index e3c512a..ea5ba8c 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -123,8 +123,8 @@ jobs:
       - name: Download job transfer artifact
         uses: actions/download-artifact@v4
         with:
-          name: ${{ matrix.artifact.name }}-${{ github.run_id }}
-          path: ${{ env.JOB_TRANSFER_ARTIFACT }}/${{ matrix.artifact.path }}
+          name: ${{ env.JOB_TRANSFER_ARTIFACT }}  # Keep this as is
+          path: ${{ env.JOB_TRANSFER_ARTIFACT }}
 
       - name: Upload tester build artifact
         uses: actions/upload-artifact@v4

From f68c83590e7c1571662dbf8662acf174e84c3e8f Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 19:01:23 +0100
Subject: [PATCH 40/65] WIP: artifacts v4 upgrade.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 .github/workflows/build.yml | 36 ++++++++++++++++++++++++++----------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ea5ba8c..c1bd415 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -24,9 +24,13 @@ jobs:
       matrix:
         config:
           - os: [self-hosted, windows-sign-pc]
+            id: windows
           - os: ubuntu-latest
+            id: linux
           - os: macos-13
+            id: macos-x64
           - os: macos-14
+            id: macos-arm64
     runs-on: ${{ matrix.config.os }}
     timeout-minutes: 90
 
@@ -94,7 +98,7 @@ jobs:
       - name: Upload [GitHub Actions]
         uses: actions/upload-artifact@v4
         with:
-          name: ${{ env.JOB_TRANSFER_ARTIFACT }}
+          name: ${{ env.JOB_TRANSFER_ARTIFACT }}-${{ matrix.config.id }}
           path: dist
 
   artifacts:
@@ -108,28 +112,34 @@ jobs:
         artifact:
           - path: "*-linux_x64.zip"
             name: Arduino-Lab-for-MicroPython_Linux_X86-64
+            id: linux
           - path: "*-mac_x64.zip"
             name: Arduino-Lab-for-MicroPython_macOS_X86-64
+            id: macos-x64
           - path: "*-mac_arm64.zip"
             name: Arduino-Lab-for-MicroPython_macOS_arm-64
+            id: macos-arm64
           # - path: "*Windows_64bit.exe"
           #   name: Windows_X86-64_interactive_installer
+          #   id: windows
           # - path: "*Windows_64bit.msi"
           #   name: Windows_X86-64_MSI
+          #   id: windows
           - path: "*-win_x64.zip"
             name: Arduino-Lab-for-MicroPython_Windows_X86-64
+            id: windows
 
     steps:
       - name: Download job transfer artifact
         uses: actions/download-artifact@v4
         with:
-          name: ${{ env.JOB_TRANSFER_ARTIFACT }}  # Keep this as is
+          name: ${{ env.JOB_TRANSFER_ARTIFACT }}-${{ matrix.artifact.id }}
           path: ${{ env.JOB_TRANSFER_ARTIFACT }}
 
       - name: Upload tester build artifact
         uses: actions/upload-artifact@v4
         with:
-          name: ${{ matrix.artifact.name }}-${{ github.run_id }}
+          name: ${{ matrix.artifact.name }}
           path: ${{ env.JOB_TRANSFER_ARTIFACT }}/${{ matrix.artifact.path }}
 
   release:
@@ -137,23 +147,25 @@ jobs:
     if: github.repository == 'arduino/lab-micropython-editor' && startsWith(github.ref, 'refs/tags/')
     runs-on: ubuntu-latest
     steps:
-      - name: Download [GitHub Actions]
+      - name: Download all artifacts
         uses: actions/download-artifact@v4
         with:
-          name: ${{ env.JOB_TRANSFER_ARTIFACT }}
-          path: ${{ env.JOB_TRANSFER_ARTIFACT }}
+          path: artifacts
+          
+      - name: List artifacts
+        run: ls -R artifacts
 
       - name: Get Tag
         id: tag_name
         run: |
-          echo ::set-output name=TAG_NAME::${GITHUB_REF#refs/tags/}
+          echo "TAG_NAME=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
 
       - name: Publish Release [GitHub]
         uses: svenstaro/upload-release-action@2.2.0
         with:
           repo_token: ${{ secrets.GITHUB_TOKEN }}
           release_name: ${{ steps.tag_name.outputs.TAG_NAME }}
-          file: ${{ env.JOB_TRANSFER_ARTIFACT }}/*
+          file: artifacts/**/*
           tag: ${{ github.ref }}
           file_glob: true
 
@@ -167,7 +179,11 @@ jobs:
     runs-on: ubuntu-latest
 
     steps:
-      - name: Remove unneeded job transfer artifact
+      - name: Remove unneeded job transfer artifacts
         uses: geekyeggo/delete-artifact@v2
         with:
-          name: ${{ env.JOB_TRANSFER_ARTIFACT }}
+          name: |
+            ${{ env.JOB_TRANSFER_ARTIFACT }}-windows
+            ${{ env.JOB_TRANSFER_ARTIFACT }}-linux
+            ${{ env.JOB_TRANSFER_ARTIFACT }}-macos-x64
+            ${{ env.JOB_TRANSFER_ARTIFACT }}-macos-arm64
\ No newline at end of file

From 2fc901a189eed845db650cb7aa606b868594f636 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 3 Mar 2025 21:08:08 +0100
Subject: [PATCH 41/65] WIP: migrating actions v3 to v4 - universal mac build.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 .github/workflows/build.yml | 15 +++++----------
 package.json                |  5 ++++-
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index c1bd415..318b18a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -27,10 +27,8 @@ jobs:
             id: windows
           - os: ubuntu-latest
             id: linux
-          - os: macos-13
-            id: macos-x64
-          - os: macos-14
-            id: macos-arm64
+          - os: macos-latest
+            id: macos-universal
     runs-on: ${{ matrix.config.os }}
     timeout-minutes: 90
 
@@ -113,12 +111,9 @@ jobs:
           - path: "*-linux_x64.zip"
             name: Arduino-Lab-for-MicroPython_Linux_X86-64
             id: linux
-          - path: "*-mac_x64.zip"
-            name: Arduino-Lab-for-MicroPython_macOS_X86-64
-            id: macos-x64
-          - path: "*-mac_arm64.zip"
-            name: Arduino-Lab-for-MicroPython_macOS_arm-64
-            id: macos-arm64
+          - path: "*-mac_universal.zip"
+            name: Arduino-Lab-for-MicroPython_macOS_Universal
+            id: macos-universal
           # - path: "*Windows_64bit.exe"
           #   name: Windows_X86-64_interactive_installer
           #   id: windows
diff --git a/package.json b/package.json
index b3f5abb..751e1db 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,10 @@
     "artifactName": "${productName}-${os}_${arch}.${ext}",
     "extraResources": "./ui/arduino/helpers.py",
     "mac": {
-      "target": "zip",
+      "target": [{
+        "target": "zip",
+        "arch": ["universal"]
+      }],
       "icon": "build_resources/icon.icns"
     },
     "win": {

From 6602bf50b18782477b31ff354938085da635af65 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Tue, 4 Mar 2025 15:49:15 +0100
Subject: [PATCH 42/65] Fixed Roboto Mono font for editor view.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/main.css                           |  21 ++++++++++++------
 .../media/Roboto-Mono-Bold-webfont.woff       | Bin 0 -> 26840 bytes
 .../media/Roboto-Mono-Regular-webfont.woff    | Bin 0 -> 26792 bytes
 3 files changed, 14 insertions(+), 7 deletions(-)
 create mode 100644 ui/arduino/media/Roboto-Mono-Bold-webfont.woff
 create mode 100644 ui/arduino/media/Roboto-Mono-Regular-webfont.woff

diff --git a/ui/arduino/main.css b/ui/arduino/main.css
index c7f3e8c..84d1095 100644
--- a/ui/arduino/main.css
+++ b/ui/arduino/main.css
@@ -4,13 +4,20 @@
   
 */
 @font-face {
-  font-family: "RobotoMono";
+  font-family: "CodeFont";
   src:
-    url("media/roboto-regular.woff2") format("woff2");
+    url("media/Roboto-Mono-Regular-webfont.woff") format("woff");
   font-weight: normal;
   font-style: normal;
 }
 
+@font-face {
+  font-family: "CodeFont";
+  src:
+    url("media/Roboto-Mono-Bold-webfont.woff") format("woff");
+  font-weight: bold;
+  font-style: normal;
+}
 
 @font-face {
   font-family: "OpenSans";
@@ -151,7 +158,7 @@ button.small .icon {
   height: 100%;
   justify-content: center;
   align-items: center;
-  font-family: "RobotoMono", monospace;
+  font-family: "CodeFont", monospace;
   overflow: hidden;
 }
 
@@ -312,7 +319,7 @@ button.small .icon {
 }
 
 #code-editor * {
-  font-family: "RobotoMono", monospace;
+  font-family: "CodeFont", monospace;
 }
 #code-editor .cm-editor {
   width: 100%;
@@ -506,7 +513,7 @@ button.small .icon {
 .dialog .dialog-content #file-name {
   font-size: 1.3em;
   width:100%;
-  font-family: "RobotoMono", monospace;
+  font-family: "CodeFont", monospace;
 }
 
 .dialog .dialog-content input:focus {
@@ -623,7 +630,7 @@ button.small .icon {
   position: relative;
   cursor: pointer;
   color: #000;
-  font-family: "RobotoMono", monospace;
+  font-family: "CodeFont", monospace;
   font-size: 14px;
   font-style: normal;
   font-weight: 400;
@@ -709,7 +716,7 @@ button.small .icon {
 }
 .file-list .item .text {
   color: #000;
-  font-family: "RobotoMono", monospace;
+  font-family: "CodeFont", monospace;
   font-size: 14px;
   font-style: normal;
   font-weight: 400;
diff --git a/ui/arduino/media/Roboto-Mono-Bold-webfont.woff b/ui/arduino/media/Roboto-Mono-Bold-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..f0ca0655cec3193b5eef15967d5a45baa8f47d57
GIT binary patch
literal 26840
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

literal 0
HcmV?d00001

diff --git a/ui/arduino/media/Roboto-Mono-Regular-webfont.woff b/ui/arduino/media/Roboto-Mono-Regular-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..f6a50fcf591ccf1959300773576dbca8bc11e3e6
GIT binary patch
literal 26792
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

literal 0
HcmV?d00001


From a00649cfdcf8327effc7d5233603e9042484db75 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 5 Mar 2025 10:33:30 +0100
Subject: [PATCH 43/65] Loading files displays overlay and locks UI. Enter
 enabled in dialogs.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index b40a1c8..6fdf059 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -14,12 +14,14 @@ async function confirmDialog(msg, cancelMsg, confirmMsg) {
   // cancelMsg = cancelMsg || 'Cancel'
   // confirmMsg = confirmMsg || 'Yes'
   let buttons = []
-  if (cancelMsg) buttons.push(cancelMsg)
   if (confirmMsg) buttons.push(confirmMsg)
+  if (cancelMsg) buttons.push(cancelMsg)
+  
   let response = await win.openDialog({
     type: 'question',
-    buttons: [cancelMsg, confirmMsg],
-    cancelId: 0,
+    buttons: buttons,
+    defaultId: 0,
+    cancelId: 1,
     message: msg
   })
   console.log('confirm', response)
@@ -1172,6 +1174,9 @@ async function store(state, emitter) {
     log('open-selected-files')
     let filesToOpen = []
     let filesAlreadyOpen = []
+    if (state.isLoadingFiles) return
+    state.isLoadingFiles = true
+    emitter.emit('render')
     for (let i in state.selectedFiles) {
       let selectedFile = state.selectedFiles[i]
       if (selectedFile.type == 'folder') {
@@ -1251,6 +1256,7 @@ async function store(state, emitter) {
     state.selectedFiles = []
     state.view = 'editor'
     updateMenu()
+    state.isLoadingFiles = false
     emitter.emit('render')
   })
   emitter.on('open-file', (source, file) => {

From 6497fc915df69faed2ab29d2abc037ba80190a90 Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Wed, 18 Dec 2024 16:00:22 +0100
Subject: [PATCH 44/65] Add IPC handlers for opening an app and a URL

---
 backend/ipc.js | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/backend/ipc.js b/backend/ipc.js
index 62a404f..1e0ee53 100644
--- a/backend/ipc.js
+++ b/backend/ipc.js
@@ -1,6 +1,7 @@
 const fs = require('fs')
 const registerMenu = require('./menu.js')
 const serial = require('./serial/serial.js').sharedInstance
+const { shell } = require('electron');
 
 const {
   openFolderDialog,
@@ -138,6 +139,25 @@ module.exports = function registerIPCHandlers(win, ipcMain, app, dialog) {
     registerMenu(win, state)
   })
 
+  ipcMain.handle('launch-app', async (event, urlScheme) => {
+    // Launch an external app with a custom protocol
+    return new Promise((resolve, reject) => {
+      try {
+        shell.openExternal(urlScheme).then(() => {
+          resolve(true);  // App opened successfully
+        }).catch(() => {
+          resolve(false);  // App not installed
+        });
+      } catch (err) {
+        reject(err);
+      }
+    });
+  });
+  
+  ipcMain.handle('open-url', async (event, url) => {
+    shell.openExternal(url);
+  });
+
   win.on('close', (event) => {
     console.log('BrowserWindow', 'close')
     event.preventDefault()

From 10f9bf5a5bf43b20f688494c6ca5865b8ec56d8b Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Wed, 5 Mar 2025 10:55:54 +0100
Subject: [PATCH 45/65] Expose function to launch app in main world

---
 preload.js | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/preload.js b/preload.js
index fbc1579..daef453 100644
--- a/preload.js
+++ b/preload.js
@@ -2,7 +2,7 @@ console.log('preload')
 const { contextBridge, ipcRenderer } = require('electron')
 const path = require('path')
 const shortcuts = require('./backend/shortcuts.js').shortcuts.global
-const { emit, platform } = require('process')
+const { platform } = require('process')
 const SerialBridge = require('./backend/serial/serial-bridge.js')
 
 const Disk = {
@@ -85,6 +85,21 @@ const Window = {
   getShortcuts: () => shortcuts
 }
 
+/**
+ * Launches an app using the provided URL scheme (e.g. myapp://). If the app is not installed, it will
+ * fallback to open the provided fallback URL.
+ * @param {string} url The URL scheme to use to launch the app
+ * @param {string} fallbackUrl The URL to open if the app is not installed
+ */
+async function launchApp(url, fallbackUrl) {
+  const success = await ipcRenderer.invoke('launch-app', url);
+
+  if (!success) {      
+    await ipcRenderer.invoke('open-url', fallbackUrl); // Fallback to open a URL in the default browser
+  }
+}
+
+contextBridge.exposeInMainWorld('launchApp', launchApp)
 contextBridge.exposeInMainWorld('BridgeSerial', SerialBridge)
 contextBridge.exposeInMainWorld('BridgeDisk', Disk)
 contextBridge.exposeInMainWorld('BridgeWindow', Window)
\ No newline at end of file

From 3ccc7234271b47eac746b1c6d4621139dfba70ff Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Wed, 18 Dec 2024 16:04:57 +0100
Subject: [PATCH 46/65] Add event handler for launching an app

---
 ui/arduino/store.js | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 6fdf059..5b8e45d 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -116,6 +116,10 @@ async function store(state, emitter) {
     updateMenu()
   })
 
+  emitter.on('launch-app', async (url, fallbackUrl) => {
+    window.launchApp(url, fallbackUrl)
+  })
+
   // CONNECTION DIALOG
   emitter.on('open-connection-dialog', async () => {
     log('open-connection-dialog')

From f5b23e4d3c919d0039f8e64ade6dc56becce8f80 Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Wed, 5 Mar 2025 10:58:20 +0100
Subject: [PATCH 47/65] Add button to launch package installer

---
 ui/arduino/media/install-package.svg   | 33 ++++++++++++++++++++++++++
 ui/arduino/views/components/toolbar.js | 12 ++++++++++
 2 files changed, 45 insertions(+)
 create mode 100644 ui/arduino/media/install-package.svg

diff --git a/ui/arduino/media/install-package.svg b/ui/arduino/media/install-package.svg
new file mode 100644
index 0000000..f26feff
--- /dev/null
+++ b/ui/arduino/media/install-package.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 50 50">
+  <defs>
+    <style>
+      .cls-1 {
+        fill: none;
+        stroke: #000;
+        stroke-linecap: round;
+        stroke-linejoin: round;
+        stroke-width: 3.2px;
+      }
+    </style>
+  </defs>
+  <!-- Generator: Adobe Illustrator 28.7.1, SVG Export Plug-In . SVG Version: 1.2.0 Build 142)  -->
+  <g>
+    <g id="Layer_1">
+      <g>
+        <g>
+          <line class="cls-1" x1="25" y1="3.2" x2="25" y2="14.2"/>
+          <polyline class="cls-1" points="19.8 8.4 25 3.2 30.2 8.4"/>
+        </g>
+        <g>
+          <polyline class="cls-1" points="8.8 29.6 8.8 46.8 28.3 46.8 28.3 20.7 8.8 20.7"/>
+          <polyline class="cls-1" points="41.2 29.6 41.2 46.8 28.3 46.8 28.3 20.7 41.2 20.7"/>
+        </g>
+        <polygon class="cls-1" points="28.3 20.7 33.5 29.6 46.4 29.6 41.2 20.7 28.3 20.7"/>
+        <polygon class="cls-1" points="28.3 20.7 23.1 29.6 3.6 29.6 8.8 20.7 28.3 20.7"/>
+        <line class="cls-1" x1="13.1" y1="42.2" x2="21.4" y2="42.2"/>
+        <line class="cls-1" x1="13.1" y1="37.9" x2="16.6" y2="37.9"/>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index a0b8a45..0f3c4d1 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -90,6 +90,18 @@ function Toolbar(state, emit) {
         })}
       
       </div>
+
+      <div>
+        ${!window.BridgeWindow.isLinux() ? Button({
+          icon: 'install-package.svg',
+          tooltip: `Install Package`,
+          active: true,
+          onClick: () => {
+            if(state.isConnected) emit('disconnect') // Package installer requires exclusive access to the serial port
+            emit('launch-app', 'micropython-package-installer://', 'https://github.com/arduino/lab-micropython-package-installer/releases/latest')          
+          }
+        }) : '' }
+      </div>
     </div>
   `
 }

From 3f2636ed2ae308785647b998e8ea4d8792387f79 Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Wed, 5 Mar 2025 11:11:29 +0100
Subject: [PATCH 48/65] Add label

---
 ui/arduino/views/components/toolbar.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index 0f3c4d1..c559bc3 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -94,7 +94,7 @@ function Toolbar(state, emit) {
       <div>
         ${!window.BridgeWindow.isLinux() ? Button({
           icon: 'install-package.svg',
-          tooltip: `Install Package`,
+          label: `Install Package`,
           active: true,
           onClick: () => {
             if(state.isConnected) emit('disconnect') // Package installer requires exclusive access to the serial port

From 851b10e250facc3d2c9d9578b5f1a09d2971a6f9 Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Wed, 5 Mar 2025 11:18:16 +0100
Subject: [PATCH 49/65] Move button to primary toolbar actions

---
 ui/arduino/views/components/toolbar.js | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index c559bc3..c6bcb89 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -69,6 +69,17 @@ function Toolbar(state, emit) {
           disabled: !_canSave,
           onClick: () => emit('save')
         })}
+
+        <div class="separator"></div>
+
+        ${!window.BridgeWindow.isLinux() ? Button({
+          icon: 'install-package.svg',
+          label: `Add Package`,          
+          onClick: () => {
+            if(state.isConnected) emit('disconnect') // Package installer requires exclusive access to the serial port
+            emit('launch-app', 'micropython-package-installer://', 'https://github.com/arduino/lab-micropython-package-installer/releases/latest')          
+          }
+        }) : '' }
       </div>
         
       <div id="app-views">
@@ -88,19 +99,6 @@ function Toolbar(state, emit) {
           square: true,
           onClick: () => emit('change-view', 'file-manager')
         })}
-      
-      </div>
-
-      <div>
-        ${!window.BridgeWindow.isLinux() ? Button({
-          icon: 'install-package.svg',
-          label: `Install Package`,
-          active: true,
-          onClick: () => {
-            if(state.isConnected) emit('disconnect') // Package installer requires exclusive access to the serial port
-            emit('launch-app', 'micropython-package-installer://', 'https://github.com/arduino/lab-micropython-package-installer/releases/latest')          
-          }
-        }) : '' }
       </div>
     </div>
   `

From b81a84d3a82594a7fce0a0333ec894bbe8d0cbd9 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 5 Mar 2025 11:56:52 +0100
Subject: [PATCH 50/65] Hiding separator on Linux.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/views/components/toolbar.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/arduino/views/components/toolbar.js b/ui/arduino/views/components/toolbar.js
index c6bcb89..ad72a4f 100644
--- a/ui/arduino/views/components/toolbar.js
+++ b/ui/arduino/views/components/toolbar.js
@@ -70,7 +70,7 @@ function Toolbar(state, emit) {
           onClick: () => emit('save')
         })}
 
-        <div class="separator"></div>
+        ${!window.BridgeWindow.isLinux() ? html`<div class="separator"></div>` : ''}
 
         ${!window.BridgeWindow.isLinux() ? Button({
           icon: 'install-package.svg',

From 5e8abf8765831a2bde96ffc4c5107b4184fcbee8 Mon Sep 17 00:00:00 2001
From: Sebastian Romero <s.romero@arduino.cc>
Date: Wed, 12 Mar 2025 12:09:35 +0100
Subject: [PATCH 51/65] Add explicit check for registered application

---
 backend/ipc.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/backend/ipc.js b/backend/ipc.js
index 1e0ee53..0716d17 100644
--- a/backend/ipc.js
+++ b/backend/ipc.js
@@ -142,6 +142,11 @@ module.exports = function registerIPCHandlers(win, ipcMain, app, dialog) {
   ipcMain.handle('launch-app', async (event, urlScheme) => {
     // Launch an external app with a custom protocol
     return new Promise((resolve, reject) => {
+      if(app.getApplicationNameForProtocol(urlScheme) === '') {        
+        resolve(false); // App not installed
+        return;
+      }
+
       try {
         shell.openExternal(urlScheme).then(() => {
           resolve(true);  // App opened successfully

From 380b6bd9852442ee0b9db43d798efda69578c351 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 9 Apr 2025 10:51:57 +0200
Subject: [PATCH 52/65] Forcing stop when switching to File Manager.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 5b8e45d..29aa556 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -111,6 +111,9 @@ async function store(state, emitter) {
       }
       emitter.emit('refresh-files')
     }
+    if(view === 'file-manager') {
+      emitter.emit('stop')
+    }
     state.view = view
     emitter.emit('render')
     updateMenu()

From 03cc8934deac6d389ff558737af569b3adfcaab6 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 9 Apr 2025 10:55:48 +0200
Subject: [PATCH 53/65] Comments and logging cleanup.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 index.js            |  4 ++--
 ui/arduino/store.js | 11 +++--------
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/index.js b/index.js
index a5658cd..a16ea09 100644
--- a/index.js
+++ b/index.js
@@ -65,11 +65,11 @@ app.on('ready', () => {
   createWindow()
 
   win.on('focus', () => {
-    console.log("win focus")
+    // console.log("win focus")
   })
 
   win.on('blur', () => {
-    console.log("win blur")
+    // console.log("win blur")
   })
   
 })
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 29aa556..95ea087 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -24,7 +24,6 @@ async function confirmDialog(msg, cancelMsg, confirmMsg) {
     cancelId: 1,
     message: msg
   })
-  console.log('confirm', response)
   return Promise.resolve(response)
 }
 
@@ -103,8 +102,8 @@ async function store(state, emitter) {
     }
     emitter.emit('render')
   })
+
   emitter.on('change-view', (view) => {
-    
     if (state.view === 'file-manager') {
       if (view != state.view) {
         state.selectedFiles = []
@@ -161,7 +160,7 @@ async function store(state, emitter) {
         cancelId: 0,
         message: "Could not connect to the board. Reset it and try again."
       })
-      console.log('Reset request acknowledged', response)
+      // console.log('Reset request acknowledged', response)
       emitter.emit('connection-timeout')
     }, 3500)
     try {
@@ -1197,7 +1196,7 @@ async function store(state, emitter) {
               && f.source == selectedFile.source
               && f.parentFolder == selectedFile.parentFolder
       })
-      console.log('already open', alreadyOpen)
+      // console.log('already open', alreadyOpen)
 
       if (!alreadyOpen) {
         // This file is not open yet,
@@ -1547,19 +1546,16 @@ async function store(state, emitter) {
 
   function filterDoubleRun(onlySelected = false) {
     if (preventDoubleRun) return
-    console.log('>>> RUN CODE ACTUAL <<<')
     emitter.emit('run', onlySelected)
     timedReset()
   }
 
   function runCode() {
-    console.log('>>> RUN CODE REQUEST <<<')
     if (canExecute({ view: state.view, isConnected: state.isConnected })) {
       filterDoubleRun()
     }
   }
   function runCodeSelection() {
-    console.log('>>> RUN CODE REQUEST <<<')
     if (canExecute({ view: state.view, isConnected: state.isConnected })) {
       filterDoubleRun(true)
     }
@@ -1638,7 +1634,6 @@ async function store(state, emitter) {
     // LEAK > listeners keep getting added and not removed when tabs are closed
     // additionally I found that closing a tab has actually added an extra listener
     newFile.editor.onChange = function() {
-      console.log('editor has changes')
       newFile.hasChanges = true
       emitter.emit('render')
     }

From 78afa75062b9e4f4d61d3fb38235d49048ff389d Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 9 Apr 2025 16:14:49 +0200
Subject: [PATCH 54/65] Addressed review feedback.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 index.js            | 2 --
 ui/arduino/store.js | 8 ++++----
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/index.js b/index.js
index a16ea09..3b3a0fd 100644
--- a/index.js
+++ b/index.js
@@ -65,11 +65,9 @@ app.on('ready', () => {
   createWindow()
 
   win.on('focus', () => {
-    // console.log("win focus")
   })
 
   win.on('blur', () => {
-    // console.log("win blur")
   })
   
 })
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 95ea087..e463685 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -160,7 +160,6 @@ async function store(state, emitter) {
         cancelId: 0,
         message: "Could not connect to the board. Reset it and try again."
       })
-      // console.log('Reset request acknowledged', response)
       emitter.emit('connection-timeout')
     }, 3500)
     try {
@@ -1196,7 +1195,6 @@ async function store(state, emitter) {
               && f.source == selectedFile.source
               && f.parentFolder == selectedFile.parentFolder
       })
-      // console.log('already open', alreadyOpen)
 
       if (!alreadyOpen) {
         // This file is not open yet,
@@ -1628,8 +1626,10 @@ async function store(state, emitter) {
     }
     const tabExists = state.openFiles.find(f => f.parentFolder === newFile.parentFolder && f.fileName === newFile.fileName && f.source === newFile.source)
     if (tabExists || fullPathExists) {
-      const confirmation = confirmDialog(`File ${newFile.fileName} already exists on ${source}. Please choose another name.`, 'OK')
-      return false
+      const confirmation = await confirmDialog(`File ${newFile.fileName} already exists on ${source}. Please choose another name.`, 'OK')
+      if (!confirmation) {
+        return false
+      }
     }
     // LEAK > listeners keep getting added and not removed when tabs are closed
     // additionally I found that closing a tab has actually added an extra listener

From 110193a32e1b03e81b4c2b5eafe62e6f48ef9270 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 9 Apr 2025 18:56:57 +0200
Subject: [PATCH 55/65] Amended return false on duplicate tab alert.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index e463685..04889b4 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1627,9 +1627,7 @@ async function store(state, emitter) {
     const tabExists = state.openFiles.find(f => f.parentFolder === newFile.parentFolder && f.fileName === newFile.fileName && f.source === newFile.source)
     if (tabExists || fullPathExists) {
       const confirmation = await confirmDialog(`File ${newFile.fileName} already exists on ${source}. Please choose another name.`, 'OK')
-      if (!confirmation) {
-        return false
-      }
+      return false
     }
     // LEAK > listeners keep getting added and not removed when tabs are closed
     // additionally I found that closing a tab has actually added an extra listener

From 9b0285a6b5e731fc50fbcb2e515b422f9e61dae6 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Fri, 11 Apr 2025 16:16:58 +0200
Subject: [PATCH 56/65] File Manager view triggers file-list on switch.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 .gitignore          |  3 ++-
 ui/arduino/store.js | 16 ++++++++++------
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/.gitignore b/.gitignore
index c4b0f7e..ea7bad6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,4 +7,5 @@ dist/
 .vscode
 .npmrc
 Resources
-temp
\ No newline at end of file
+temp
+claude
\ No newline at end of file
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 04889b4..9029a12 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -9,6 +9,9 @@ const newFileContent = `# This program was created in Arduino Lab for MicroPytho
 
 print('Hello, MicroPython!')
 `
+async function sleep(ms) {
+  return new Promise(resolve => setTimeout(resolve, ms));
+}
 
 async function confirmDialog(msg, cancelMsg, confirmMsg) {
   // cancelMsg = cancelMsg || 'Cancel'
@@ -103,15 +106,16 @@ async function store(state, emitter) {
     emitter.emit('render')
   })
 
-  emitter.on('change-view', (view) => {
-    if (state.view === 'file-manager') {
-      if (view != state.view) {
-        state.selectedFiles = []
-      }
-      emitter.emit('refresh-files')
+  emitter.on('change-view', async (view) => {
+    if (state.view === view) {
+      return
+    } else {
+      state.selectedFiles = []
     }
     if(view === 'file-manager') {
       emitter.emit('stop')
+      await sleep(500)
+      emitter.emit('refresh-files')
     }
     state.view = view
     emitter.emit('render')

From c039ea59c2fe8d8922f6e50bd1e29e3c019cf6d4 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sat, 12 Apr 2025 22:44:06 +0200
Subject: [PATCH 57/65] Implemented board root detection (/ or /flash).

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/helpers.py |  8 ++++++++
 ui/arduino/store.js   | 18 ++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/ui/arduino/helpers.py b/ui/arduino/helpers.py
index cb7b757..2731091 100644
--- a/ui/arduino/helpers.py
+++ b/ui/arduino/helpers.py
@@ -1,6 +1,14 @@
 import os
 import json
+import sys
 os.chdir('/')
+
+def get_root(has_flash_mount = True):
+  if '/flash' in sys.path:
+    print('/flash', end = '')
+  else:
+    print('/', end = '')
+
 def is_directory(path):
   return True if os.stat(path)[0] == 0x4000 else False
 
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 04889b4..c69e5e7 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -175,6 +175,7 @@ async function store(state, emitter) {
     // Connected and ready
     state.isConnecting = false
     state.isConnected = true
+    state.boardNavigationRoot = await getBoardRoot()
     updateMenu()
     if (state.view === 'editor' && state.panelHeight <= PANEL_CLOSED) {
       state.panelHeight = state.savedPanelHeight
@@ -1691,6 +1692,23 @@ async function getAvailablePorts() {
   return await serialBridge.loadPorts()
 }
 
+async function getBoardRoot() {
+  let output = await serialBridge.execFile(await getHelperFullPath())
+  output = await serialBridge.run(`get_root()`)
+  let boardRoot = ''
+  try {
+    // Extracting the json output from serial response
+    output = output.substring(
+      output.indexOf('OK')+2,
+      output.indexOf('\x04')
+    )
+    boardRoot = output
+  } catch (e) {
+    log('error', output)
+  }
+  return boardRoot
+}
+
 async function getBoardFiles(path) {
   await serialBridge.getPrompt()
   let files = await serialBridge.ilistFiles(path)

From 80e37a3692234314f3ee400141e0961549f9eec6 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sun, 13 Apr 2025 00:04:12 +0200
Subject: [PATCH 58/65] Refactored getRoot with interface for consumer.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/helpers.py | 10 +++++++---
 ui/arduino/store.js   |  2 +-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/ui/arduino/helpers.py b/ui/arduino/helpers.py
index 2731091..ac4ec34 100644
--- a/ui/arduino/helpers.py
+++ b/ui/arduino/helpers.py
@@ -1,13 +1,12 @@
 import os
 import json
 import sys
-os.chdir('/')
 
 def get_root(has_flash_mount = True):
   if '/flash' in sys.path:
-    print('/flash', end = '')
+    return '/flash'
   else:
-    print('/', end = '')
+    return '/'
 
 def is_directory(path):
   return True if os.stat(path)[0] == 0x4000 else False
@@ -26,6 +25,9 @@ def get_all_files(path, array_of_files = []):
     return array_of_files
 
 
+def iget_root():
+  print(get_root(), end='')
+
 def ilist_all(path):
     print(json.dumps(get_all_files(path)))
 
@@ -38,3 +40,5 @@ def delete_folder(path):
         if file['type'] == 'folder':
             os.rmdir(file['path'])
     os.rmdir(path)
+
+os.chdir(get_root())
\ No newline at end of file
diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index c69e5e7..bd03a2a 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -1694,7 +1694,7 @@ async function getAvailablePorts() {
 
 async function getBoardRoot() {
   let output = await serialBridge.execFile(await getHelperFullPath())
-  output = await serialBridge.run(`get_root()`)
+  output = await serialBridge.run(`iget_root()`)
   let boardRoot = ''
   try {
     // Extracting the json output from serial response

From 06de27a8908bf1a826d9fc60f98f2aa0f874b55e Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Sun, 13 Apr 2025 11:56:18 +0200
Subject: [PATCH 59/65] Working implementation of Board Root detection.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index bd03a2a..373c816 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -285,7 +285,10 @@ async function store(state, emitter) {
     }
     emitter.emit('open-panel')
     emitter.emit('render')
-    await serialBridge.getPrompt()
+    if (state.isConnected) {
+      await serialBridge.getPrompt()
+    }
+
   })
   emitter.on('reset', async () => {
     log('reset')
@@ -603,7 +606,7 @@ async function store(state, emitter) {
       }
       await serialBridge.saveFileContent(
         serialBridge.getFullPath(
-          '/',
+          state.boardNavigationRoot,
           state.boardNavigationPath,
           fileNameParameter
         ),
@@ -782,7 +785,7 @@ async function store(state, emitter) {
         if (file.source === 'board') {
           await serialBridge.removeFile(
             serialBridge.getFullPath(
-              '/',
+              state.boardNavigationRoot,
               state.boardNavigationPath,
               file.fileName
             )

From 0ddffa7c33349cf158d6c6c2c5091d6c4ba7f2f6 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 14 Apr 2025 09:10:22 +0200
Subject: [PATCH 60/65] Fixed query selector typo.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/views/components/new-file-dialog.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/arduino/views/components/new-file-dialog.js b/ui/arduino/views/components/new-file-dialog.js
index 83ace3f..8e00d9e 100644
--- a/ui/arduino/views/components/new-file-dialog.js
+++ b/ui/arduino/views/components/new-file-dialog.js
@@ -65,7 +65,7 @@ function NewFileDialog(state, emit) {
 ` 
   
   if (state.isNewFileDialogOpen) {
-    const el = newFileDialog.querySelector('#dialog-new-file .dialog-contents > input')
+    const el = newFileDialog.querySelector('#dialog-new-file .dialog-content > input')
     if (el) {
       el.focus()
     }

From efd83500917a128ac9488340f91ec04a6426630f Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 14 Apr 2025 09:11:24 +0200
Subject: [PATCH 61/65] Removed .gitignore entry in favour of local personal
 configuration.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 .gitignore | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore
index ea7bad6..c4b0f7e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,5 +7,4 @@ dist/
 .vscode
 .npmrc
 Resources
-temp
-claude
\ No newline at end of file
+temp
\ No newline at end of file

From 46dcd656415caae44349d0268c4e882f8de849ee Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Mon, 14 Apr 2025 17:44:31 +0200
Subject: [PATCH 62/65] Amended ununsed signature parameter in get_root().

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/helpers.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/arduino/helpers.py b/ui/arduino/helpers.py
index ac4ec34..15ab644 100644
--- a/ui/arduino/helpers.py
+++ b/ui/arduino/helpers.py
@@ -2,7 +2,7 @@
 import json
 import sys
 
-def get_root(has_flash_mount = True):
+def get_root():
   if '/flash' in sys.path:
     return '/flash'
   else:

From f057b1547caeee38876a86a27be4515623d4475e Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Tue, 15 Apr 2025 10:51:26 +0200
Subject: [PATCH 63/65] Amended sleep with comment from Sebastian's feedback.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 9029a12..f82c992 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -114,7 +114,7 @@ async function store(state, emitter) {
     }
     if(view === 'file-manager') {
       emitter.emit('stop')
-      await sleep(500)
+      await sleep(250) // Give the board time to stop the program and return to the prompt
       emitter.emit('refresh-files')
     }
     state.view = view

From 3915443fbc5642b42109eca15d15cd9a44a3277c Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Tue, 15 Apr 2025 12:53:51 +0200
Subject: [PATCH 64/65] Pointing BoardNavigationPath to /flash when it's the
 default writable mount-point.

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 ui/arduino/store.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ui/arduino/store.js b/ui/arduino/store.js
index 6526f99..966e906 100644
--- a/ui/arduino/store.js
+++ b/ui/arduino/store.js
@@ -179,7 +179,7 @@ async function store(state, emitter) {
     // Connected and ready
     state.isConnecting = false
     state.isConnected = true
-    state.boardNavigationRoot = await getBoardRoot()
+    state.boardNavigationPath = await getBoardNavigationPath()
     updateMenu()
     if (state.view === 'editor' && state.panelHeight <= PANEL_CLOSED) {
       state.panelHeight = state.savedPanelHeight
@@ -1699,7 +1699,7 @@ async function getAvailablePorts() {
   return await serialBridge.loadPorts()
 }
 
-async function getBoardRoot() {
+async function getBoardNavigationPath() {
   let output = await serialBridge.execFile(await getHelperFullPath())
   output = await serialBridge.run(`iget_root()`)
   let boardRoot = ''

From 65273aa90262e603642c0b5d2e1fa67a3bfde720 Mon Sep 17 00:00:00 2001
From: ubi de feo <me@ubidefeo.com>
Date: Wed, 30 Apr 2025 20:27:24 +0200
Subject: [PATCH 65/65] Bumped version to 0.20.0

Signed-off-by: ubi de feo <me@ubidefeo.com>
---
 package-lock.json | 262 +++++++++++++++++++++++++++++-----------------
 package.json      |   2 +-
 2 files changed, 169 insertions(+), 95 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index c40dfba..0ad9236 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "arduino-lab-micropython-ide",
-  "version": "0.11.1",
+  "version": "0.20.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "arduino-lab-micropython-ide",
-      "version": "0.11.1",
+      "version": "0.20.0",
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
@@ -210,9 +210,9 @@
       }
     },
     "node_modules/@npmcli/fs/node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
@@ -510,15 +510,15 @@
       "optional": true
     },
     "node_modules/@types/ms": {
-      "version": "0.7.34",
-      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
-      "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+      "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "16.18.119",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.119.tgz",
-      "integrity": "sha512-ia7V9a2FnhUFfetng4/sRPBMTwHZUkPFY736rb1cg9AgG7MZdR97q7/nLR9om+sq5f1la9C857E0l/nrI0RiFQ==",
+      "version": "16.18.126",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz",
+      "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==",
       "dev": true
     },
     "node_modules/@types/plist": {
@@ -542,9 +542,9 @@
       }
     },
     "node_modules/@types/verror": {
-      "version": "1.10.10",
-      "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.10.tgz",
-      "integrity": "sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==",
+      "version": "1.10.11",
+      "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz",
+      "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==",
       "dev": true,
       "optional": true
     },
@@ -602,9 +602,9 @@
       }
     },
     "node_modules/agentkeepalive": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
-      "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz",
+      "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==",
       "dev": true,
       "dependencies": {
         "humanize-ms": "^1.2.1"
@@ -745,9 +745,9 @@
       }
     },
     "node_modules/app-builder-lib/node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
@@ -1246,6 +1246,19 @@
         "node": ">=8"
       }
     },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "dev": true,
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -1498,9 +1511,9 @@
       }
     },
     "node_modules/cross-spawn": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
-      "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "dev": true,
       "dependencies": {
         "path-key": "^3.1.0",
@@ -1512,9 +1525,9 @@
       }
     },
     "node_modules/debug": {
-      "version": "4.3.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
-      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+      "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
       "dependencies": {
         "ms": "^2.1.3"
       },
@@ -1609,9 +1622,9 @@
       "dev": true
     },
     "node_modules/detect-libc": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
-      "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+      "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
       "dev": true,
       "engines": {
         "node": ">=8"
@@ -1756,6 +1769,20 @@
       "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
       "dev": true
     },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "dev": true,
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/duplexer3": {
       "version": "0.1.5",
       "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
@@ -2259,9 +2286,9 @@
       }
     },
     "node_modules/electron-rebuild/node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
@@ -2330,14 +2357,10 @@
       "dev": true
     },
     "node_modules/es-define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
-      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
       "dev": true,
-      "optional": true,
-      "dependencies": {
-        "get-intrinsic": "^1.2.4"
-      },
       "engines": {
         "node": ">= 0.4"
       }
@@ -2347,7 +2370,33 @@
       "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
       "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
       "dev": true,
-      "optional": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "dev": true,
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+      "dev": true,
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      },
       "engines": {
         "node": ">= 0.4"
       }
@@ -2382,9 +2431,9 @@
       }
     },
     "node_modules/exponential-backoff": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
-      "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz",
+      "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==",
       "dev": true
     },
     "node_modules/extract-zip": {
@@ -2479,13 +2528,14 @@
       }
     },
     "node_modules/form-data": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
-      "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+      "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
       "dev": true,
       "dependencies": {
         "asynckit": "^0.4.0",
         "combined-stream": "^1.0.8",
+        "es-set-tostringtag": "^2.1.0",
         "mime-types": "^2.1.12"
       },
       "engines": {
@@ -2529,7 +2579,6 @@
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
       "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
       "dev": true,
-      "optional": true,
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -2564,17 +2613,21 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
-      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
       "dev": true,
-      "optional": true,
       "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
         "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
         "function-bind": "^1.1.2",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3",
-        "hasown": "^2.0.0"
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -2583,6 +2636,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "dev": true,
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/get-stream": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
@@ -2635,9 +2701,9 @@
       }
     },
     "node_modules/global-agent/node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
       "dev": true,
       "optional": true,
       "bin": {
@@ -2681,13 +2747,12 @@
       }
     },
     "node_modules/gopd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
       "dev": true,
-      "optional": true,
-      "dependencies": {
-        "get-intrinsic": "^1.1.3"
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -2749,12 +2814,11 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/has-proto": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
-      "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
       "dev": true,
-      "optional": true,
       "engines": {
         "node": ">= 0.4"
       },
@@ -2762,12 +2826,14 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+    "node_modules/has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
       "dev": true,
-      "optional": true,
+      "dependencies": {
+        "has-symbols": "^1.0.3"
+      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -2786,7 +2852,6 @@
       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
       "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
       "dev": true,
-      "optional": true,
       "dependencies": {
         "function-bind": "^1.1.2"
       },
@@ -3264,9 +3329,18 @@
         "node": ">=10"
       }
     },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/micropython.js": {
-      "version": "1.5.0",
-      "resolved": "git+ssh://git@github.com/arduino/micropython.js.git#7657256c7f7c37d9f3b3112deb98d64665c68c65",
+      "version": "1.5.1",
+      "resolved": "git+ssh://git@github.com/arduino/micropython.js.git#62696afbf4c3eb2d520eebbcb676cf7b88c1d1d6",
       "dependencies": {
         "serialport": "^10.4.0"
       },
@@ -3463,9 +3537,9 @@
       }
     },
     "node_modules/node-abi": {
-      "version": "3.71.0",
-      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz",
-      "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==",
+      "version": "3.74.0",
+      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz",
+      "integrity": "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==",
       "dev": true,
       "dependencies": {
         "semver": "^7.3.5"
@@ -3475,9 +3549,9 @@
       }
     },
     "node_modules/node-abi/node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
@@ -3503,9 +3577,9 @@
       }
     },
     "node_modules/node-api-version/node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
@@ -3540,9 +3614,9 @@
       }
     },
     "node_modules/node-gyp-build": {
-      "version": "4.8.3",
-      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.3.tgz",
-      "integrity": "sha512-EMS95CMJzdoSKoIiXo8pxKoL8DYxwIZXYlLmgPb8KUv794abpnLK6ynsCAWNliOjREKruYKdzbh76HHYUHX7nw==",
+      "version": "4.8.4",
+      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
+      "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
       "bin": {
         "node-gyp-build": "bin.js",
         "node-gyp-build-optional": "optional.js",
@@ -3550,9 +3624,9 @@
       }
     },
     "node_modules/node-gyp/node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
@@ -4102,9 +4176,9 @@
       }
     },
     "node_modules/socks": {
-      "version": "2.8.3",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
-      "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
+      "version": "2.8.4",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz",
+      "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==",
       "dev": true,
       "dependencies": {
         "ip-address": "^9.0.5",
diff --git a/package.json b/package.json
index 751e1db..2074bb4 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "arduino-lab-micropython-ide",
   "productName": "Arduino Lab for MicroPython",
-  "version": "0.11.1",
+  "version": "0.20.0",
   "description": "Arduino Lab for MicroPython is a project sponsored by Arduino, based on original work by Murilo Polese.\nThis is an experimental pre-release software, please direct any questions exclusively to Github issues.",
   "main": "index.js",
   "scripts": {