Files
3m-ui/frontend
Z User fac3d88929 fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
fix(settings): port change now shows explicit restart warning
Problem: Changing the panel port in Settings → Panel/NAT only saved
to config.yaml and updated in-memory cfg.Server.Port, but the HTTP
server kept listening on the old port. The success toast said 'restart
service to apply' but was easy to miss — users expected the port
change to take effect immediately.
Root cause: the HTTP server (gin r.Run) binds once at startup to
cfg.Server.Port. Changing the port in-memory doesn't rebind. A panel
restart is required. The response included restart_required:true and
a message, but the frontend only showed a generic success toast.
Fix: when the port actually changes (prevPort != newPort), show a
Modal.warning with:
- old port → new port
- explicit 'systemctl restart 3m-ui' command
- new access URL http://IP:newPort
When only listen/public_url changes (port unchanged), keep the
existing success toast.
2026-08-30 09:25:11 +00:00
..

React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules.

Currently, two official plugins are available:

React Compiler

The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.

Expanding the Oxlint configuration

If you are developing a production application, we recommend enabling type-aware lint rules by installing oxlint-tsgolint and editing .oxlintrc.json:

{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "plugins": ["react", "typescript", "oxc"],
  "options": {
    "typeAware": true
  },
  "rules": {
    "react/rules-of-hooks": "error",
    "react/only-export-components": ["warn", { "allowConstantExport": true }]
  }
}

See the Oxlint rules documentation for the full list of rules and categories.