feat(security,ci,ui): harden CI/CD, LuCI ACL, low-space updates and mobile layout
- ci: make frontend CI read-only with strict diff check and deterministic calls.json - ci: pin external GitHub Actions in workflows to immutable commit SHAs - ci: add openwrt-e2e blocking gate job running docker_e2e_test.sh - fix(diagnostic): fix contstants.ts typo and update all 13 import sites - fix(acl): remove unused /bin/busybox exec from rpcd ACL and add regression test - feat(updates): add low-space update fallback when creating sing-box.old is impossible - fix(routes): preserve dedicated Discord gateway subnets (162.159.128.0/21) - feat(ui): implement responsive auto-fit grid and mobile modal viewport bounds - test: add viewport regression test suite in vitest
This commit is contained in:
@@ -5859,7 +5859,7 @@ function getCheckTitle(name) {
|
||||
return `${name} ${_("checks")}`;
|
||||
}
|
||||
|
||||
// src/tachyon/tabs/diagnostic/checks/contstants.ts
|
||||
// src/tachyon/tabs/diagnostic/checks/constants.ts
|
||||
var DIAGNOSTICS_CHECKS = /* @__PURE__ */ ((DIAGNOSTICS_CHECKS2) => {
|
||||
DIAGNOSTICS_CHECKS2["DNS"] = "DNS";
|
||||
DIAGNOSTICS_CHECKS2["SINGBOX"] = "SINGBOX";
|
||||
@@ -9411,9 +9411,9 @@ var styles = `
|
||||
}
|
||||
|
||||
.tachyon_dashboard-page {
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
display: block;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
--dashboard-grid-columns: 4;
|
||||
--dashboard-grid-min-width: 180px;
|
||||
}
|
||||
@@ -9526,11 +9526,13 @@ var styles = `
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
gap: 6px;
|
||||
flex: 0 0 auto;
|
||||
flex: 0 1 auto;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.tachyon_dashboard-page .btn.tachyon_dashboard-page__outbound-section__subscription-update {
|
||||
min-width: 130px;
|
||||
min-width: 0;
|
||||
width: auto;
|
||||
min-height: 28px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
@@ -9551,7 +9553,8 @@ var styles = `
|
||||
}
|
||||
|
||||
.tachyon_dashboard-page .btn.dashboard-sections-grid-item-test-latency {
|
||||
min-width: 99px;
|
||||
min-width: 0;
|
||||
width: auto;
|
||||
min-height: 28px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
@@ -13041,7 +13044,7 @@ function renderStrategyFuzzerModal(ruleNames = []) {
|
||||
if (activeTab2 === "history") renderHistoryTab();
|
||||
};
|
||||
const controlsGrid = E("div", {
|
||||
style: "display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; align-items: end;"
|
||||
style: "display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 160px), 1fr)); gap: 10px; align-items: end;"
|
||||
});
|
||||
const engineSelect = E(
|
||||
"select",
|
||||
@@ -23092,9 +23095,10 @@ ${PartialStyles}
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
/* Global Mobile & Responsive Layout Enhancements */
|
||||
/* Tachyon Mobile & Responsive Layout Enhancements */
|
||||
@media (max-width: 768px) {
|
||||
.cbi-section-table {
|
||||
[id^="cbi-${TACHYON_UCI_PACKAGE}"] .cbi-section-table,
|
||||
.tachyon-view .cbi-section-table {
|
||||
display: block;
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
@@ -23102,33 +23106,41 @@ ${PartialStyles}
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.cbi-section-table-cell {
|
||||
[id^="cbi-${TACHYON_UCI_PACKAGE}"] .cbi-section-table-cell,
|
||||
.tachyon-view .cbi-section-table-cell {
|
||||
min-width: 0;
|
||||
word-break: break-word;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.cbi-section-actions {
|
||||
[id^="cbi-${TACHYON_UCI_PACKAGE}"] .cbi-section-actions,
|
||||
.tachyon-view .cbi-section-actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.cbi-dropdown {
|
||||
[id^="cbi-${TACHYON_UCI_PACKAGE}"] .cbi-dropdown,
|
||||
.tachyon-view .cbi-dropdown {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.cbi-input-textarea,
|
||||
.cbi-input-text,
|
||||
.cbi-input-select {
|
||||
[id^="cbi-${TACHYON_UCI_PACKAGE}"] .cbi-input-textarea,
|
||||
[id^="cbi-${TACHYON_UCI_PACKAGE}"] .cbi-input-text,
|
||||
[id^="cbi-${TACHYON_UCI_PACKAGE}"] .cbi-input-select,
|
||||
.tachyon-view .cbi-input-textarea,
|
||||
.tachyon-view .cbi-input-text,
|
||||
.tachyon-view .cbi-input-select {
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* Modal responsiveness */
|
||||
.modal,
|
||||
.cbi-modal {
|
||||
max-width: 96vw !important;
|
||||
/* Modal responsiveness scoped to Tachyon */
|
||||
.modal .fkp-server-info-modal,
|
||||
.cbi-modal .fkp-server-info-modal,
|
||||
.modal:has([class*="tachyon"]),
|
||||
.cbi-modal:has([class*="tachyon"]) {
|
||||
max-width: min(96vw, 1100px) !important;
|
||||
box-sizing: border-box;
|
||||
margin: 10px auto;
|
||||
}
|
||||
|
||||
@@ -468,10 +468,10 @@ function injectServerStyles() {
|
||||
#cbi-${UCI_PACKAGE}-server .cbi-section-actions > div{display:inline-flex;align-items:center;gap:4px}
|
||||
#cbi-${UCI_PACKAGE}-server .cbi-section-actions{text-align:right}
|
||||
|
||||
.fkp-server-info-modal{display:flex;flex-direction:column;gap:14px;width:560px;max-width:100%;box-sizing:border-box}
|
||||
.fkp-server-info-modal{display:flex;flex-direction:column;gap:14px;width:min(560px,calc(100vw - 32px));max-width:100%;box-sizing:border-box}
|
||||
.fkp-server-info-modal__container{display:flex;gap:24px;align-items:flex-start;width:100%;box-sizing:border-box}
|
||||
.fkp-server-info-modal__qr-col{display:flex;flex-direction:column;align-items:center;gap:12px;flex-shrink:0;width:180px}
|
||||
.fkp-server-info-modal__qr-image{width:180px;height:180px;display:block;image-rendering:pixelated}
|
||||
.fkp-server-info-modal__qr-image{width:180px;height:180px;max-width:min(180px,60vw);max-height:min(180px,60vw);display:block;image-rendering:pixelated}
|
||||
.fkp-server-info-modal__details-col{display:flex;flex-direction:column;gap:16px;flex-grow:1;min-width:0;box-sizing:border-box}
|
||||
.fkp-server-info-modal__details-grid{display:flex;flex-direction:column;gap:10px;background:rgba(128,128,128,0.08);padding:14px;border:1px solid rgba(128,128,128,0.15);box-sizing:border-box}
|
||||
.fkp-server-info-modal__detail-item{display:flex;justify-content:space-between;align-items:center;gap:16px}
|
||||
@@ -486,9 +486,11 @@ function injectServerStyles() {
|
||||
|
||||
@media (max-width:640px){
|
||||
.fkp-server-info-modal{width:100%}
|
||||
.fkp-server-info-modal__container{flex-direction:column;align-items:center;gap:20px}
|
||||
.fkp-server-info-modal__qr-col{width:100%;max-width:180px}
|
||||
.fkp-server-info-modal__details-col{width:100%}
|
||||
.fkp-server-info-modal__container{flex-direction:column;align-items:center;gap:16px}
|
||||
.fkp-server-info-modal__qr-col{width:100%;max-width:180px;align-items:center}
|
||||
.fkp-server-info-modal__details-col{width:100%;min-width:0}
|
||||
.fkp-server-info-modal__details-grid{padding:10px}
|
||||
.fkp-server-info-modal__detail-item{flex-wrap:wrap;gap:4px 8px}
|
||||
}
|
||||
`,
|
||||
),
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: TACHYON\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-09-14 14:18+0300\n"
|
||||
"PO-Revision-Date: 2026-09-14 14:18+0300\n"
|
||||
"POT-Creation-Date: 2026-09-14 22:41+0300\n"
|
||||
"PO-Revision-Date: 2026-09-14 22:41+0300\n"
|
||||
"Last-Translator: Dushnilin\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
|
||||
+1670
-1681
File diff suppressed because it is too large
Load Diff
@@ -62,9 +62,6 @@
|
||||
],
|
||||
"/usr/bin/nslookup": [
|
||||
"exec"
|
||||
],
|
||||
"/bin/busybox": [
|
||||
"exec"
|
||||
]
|
||||
},
|
||||
"ubus": {
|
||||
|
||||
Reference in New Issue
Block a user