diff --git a/apps/web/messages/af.json b/apps/web/messages/af.json index 4c0a859a..1e68baf4 100644 --- a/apps/web/messages/af.json +++ b/apps/web/messages/af.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env na knipbord gekopieer", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/ar.json b/apps/web/messages/ar.json index ef789f4c..ece4cdb7 100644 --- a/apps/web/messages/ar.json +++ b/apps/web/messages/ar.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": "تم نسخ .env إلى الحافظة", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/ca.json b/apps/web/messages/ca.json index b6d3040b..48f3abcd 100644 --- a/apps/web/messages/ca.json +++ b/apps/web/messages/ca.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env copiat al porta-retalls", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/cs.json b/apps/web/messages/cs.json index 2733dca8..039f0df0 100644 --- a/apps/web/messages/cs.json +++ b/apps/web/messages/cs.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env zkopírováno do schránky", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/da.json b/apps/web/messages/da.json index a424ae1d..7e0ccaf6 100644 --- a/apps/web/messages/da.json +++ b/apps/web/messages/da.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env kopieret til udklipsholder", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/de.json b/apps/web/messages/de.json index 0f694cc5..7b1f395b 100644 --- a/apps/web/messages/de.json +++ b/apps/web/messages/de.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env in die Zwischenablage kopiert", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/el.json b/apps/web/messages/el.json index 21b63921..4e2184ec 100644 --- a/apps/web/messages/el.json +++ b/apps/web/messages/el.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": "Το .env αντιγράφηκε στο πρόχειρο", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index fd8206b6..695f7d99 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -918,7 +918,14 @@ "cancel": "Cancel", "confirmDelete": "Delete", "deleteDialogTitle": "Delete environment set?", - "deleteDialogDescription": "This removes the encrypted blob from your account. You cannot undo this." + "deleteDialogDescription": "This removes the encrypted blob from your account. You cannot undo this.", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env copied to clipboard", @@ -964,7 +971,9 @@ "toastUpdateFailed": "Failed to update", "toastPasteEmpty": "No KEY=value lines found", "toastPasteApplied": "Merged {count} variables from paste", - "toastProjectEnvRequired": "Project and environment are required" + "toastProjectEnvRequired": "Project and environment are required", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/es.json b/apps/web/messages/es.json index eba69f2a..711df720 100644 --- a/apps/web/messages/es.json +++ b/apps/web/messages/es.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env copiado al portapapeles", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/fa.json b/apps/web/messages/fa.json index 73858be4..3e551e86 100644 --- a/apps/web/messages/fa.json +++ b/apps/web/messages/fa.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env در کلیپ‌بورد کپی شد", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/fr.json b/apps/web/messages/fr.json index 3e6790df..3bb2e54f 100644 --- a/apps/web/messages/fr.json +++ b/apps/web/messages/fr.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env copié dans le presse-papiers", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/id.json b/apps/web/messages/id.json index feb1e71a..0f772778 100644 --- a/apps/web/messages/id.json +++ b/apps/web/messages/id.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env disalin ke papan klip", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/it.json b/apps/web/messages/it.json index db76825b..c9f8be30 100644 --- a/apps/web/messages/it.json +++ b/apps/web/messages/it.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env copiato negli appunti", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/ja.json b/apps/web/messages/ja.json index 1a3f43d7..4599f6e2 100644 --- a/apps/web/messages/ja.json +++ b/apps/web/messages/ja.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env をクリップボードにコピーしました", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/ko.json b/apps/web/messages/ko.json index 60fb1038..ab79f390 100644 --- a/apps/web/messages/ko.json +++ b/apps/web/messages/ko.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env가 클립보드에 복사됨", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/ms.json b/apps/web/messages/ms.json index fdffaa50..7c8ce8fc 100644 --- a/apps/web/messages/ms.json +++ b/apps/web/messages/ms.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env disalin ke papan keratan", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/nb.json b/apps/web/messages/nb.json index e2be4c9c..0b9bc1c6 100644 --- a/apps/web/messages/nb.json +++ b/apps/web/messages/nb.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env kopiert til utklippstavle", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/nl.json b/apps/web/messages/nl.json index 519e648e..9a79864b 100644 --- a/apps/web/messages/nl.json +++ b/apps/web/messages/nl.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env naar klembord gekopieerd", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/pl.json b/apps/web/messages/pl.json index 92904895..fa489bd7 100644 --- a/apps/web/messages/pl.json +++ b/apps/web/messages/pl.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env skopiowano do schowka", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/pt-BR.json b/apps/web/messages/pt-BR.json index 57901ee6..0ceb6043 100644 --- a/apps/web/messages/pt-BR.json +++ b/apps/web/messages/pt-BR.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env copiado para a área de transferência", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/pt.json b/apps/web/messages/pt.json index 4b483dfd..653b6b10 100644 --- a/apps/web/messages/pt.json +++ b/apps/web/messages/pt.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env copiado para a área de transferência", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/ru.json b/apps/web/messages/ru.json index 972e8bf0..b7200449 100644 --- a/apps/web/messages/ru.json +++ b/apps/web/messages/ru.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env скопирован в буфер обмена", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/sv.json b/apps/web/messages/sv.json index 18d63658..a0829ee6 100644 --- a/apps/web/messages/sv.json +++ b/apps/web/messages/sv.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env kopierat till urklipp", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/tr.json b/apps/web/messages/tr.json index 3cc29c1a..2996d120 100644 --- a/apps/web/messages/tr.json +++ b/apps/web/messages/tr.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env panoya kopyalandı", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/uk.json b/apps/web/messages/uk.json index 7605a583..e0d1dbbd 100644 --- a/apps/web/messages/uk.json +++ b/apps/web/messages/uk.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": ".env скопійовано в буфер обміну", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/vi.json b/apps/web/messages/vi.json index 3712be44..fa658c3f 100644 --- a/apps/web/messages/vi.json +++ b/apps/web/messages/vi.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": "Đã sao chép .env vào clipboard", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/messages/zh.json b/apps/web/messages/zh.json index 941835ed..47cbc74c 100644 --- a/apps/web/messages/zh.json +++ b/apps/web/messages/zh.json @@ -916,7 +916,14 @@ "viewDialogSubtitle": "Decrypted variables in .env format. Do not share your screen in untrusted environments.", "viewNoVariables": "No variables in this set.", "viewNotesHeading": "Notes", - "closeView": "Close" + "closeView": "Close", + "noResultsTitle": "No results", + "noResultsHint": "No sets match your search or filter. Try adjusting your query.", + "sort": { + "updatedDesc": "Newest first", + "updatedAsc": "Oldest first", + "nameAsc": "Name A→Z" + } }, "toasts": { "copiedDotEnv": "已复制 .env 到剪贴板", @@ -962,7 +969,9 @@ "addCommentedVariables": "Add commented variables", "toastPasteAutoMerged": "{count, plural, one {Merged # variable from paste} other {Merged # variables from paste}}", "toastPasteCommentedOnly": "Only commented-out variables found — add them with the button below if you need them.", - "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}" + "toastCommentedAdded": "{count, plural, one {Added # commented variable} other {Added # commented variables}}", + "showValues": "Show values", + "hideValues": "Hide values" } }, "Bookmarks": { diff --git a/apps/web/src/app/app/environment-manager/page.tsx b/apps/web/src/app/app/environment-manager/page.tsx index b3ee9b11..b1a9842b 100644 --- a/apps/web/src/app/app/environment-manager/page.tsx +++ b/apps/web/src/app/app/environment-manager/page.tsx @@ -28,19 +28,22 @@ export default function EnvironmentManagerPage() { useEffect(() => { if (!encryptionKey || loadedRef.current) return loadedRef.current = true - loadSets(encryptionKey) + let cancelled = false + loadSets(encryptionKey, () => cancelled) return () => { + cancelled = true clearSets() loadedRef.current = false } // eslint-disable-next-line react-hooks/exhaustive-deps }, [encryptionKey]) - const loadSets = async (key: CryptoKey) => { + const loadSets = async (key: CryptoKey, isCancelled: () => boolean) => { setLoading(true) try { const rows = await listEnvSetEntries() + if (isCancelled()) return const decrypted = await Promise.all( rows.map(async (row) => { try { @@ -58,11 +61,12 @@ export default function EnvironmentManagerPage() { } }) ) + if (isCancelled()) return setSets(decrypted.filter((x): x is EnvSetEntry => x !== null)) } catch { - toast.error(t("loadFailed")) + if (!isCancelled()) toast.error(t("loadFailed")) } finally { - setLoading(false) + if (!isCancelled()) setLoading(false) } } diff --git a/apps/web/src/components/environment-manager/add-environment-set-dialog.tsx b/apps/web/src/components/environment-manager/add-environment-set-dialog.tsx index d5945173..48b05420 100644 --- a/apps/web/src/components/environment-manager/add-environment-set-dialog.tsx +++ b/apps/web/src/components/environment-manager/add-environment-set-dialog.tsx @@ -8,7 +8,7 @@ import { useIsMobile } from "@/components/hooks/use-mobile" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" -import { Plus, Trash2 } from "lucide-react" +import { Plus, Trash2, Eye, EyeOff } from "lucide-react" import { useEnvironmentManagerStore, type EnvVariableRow, @@ -23,8 +23,10 @@ import { cn } from "@/lib/utils" import { toast } from "sonner" import { useTranslations } from "next-intl" -function emptyVariable(): EnvVariableRow { - return { key: "", value: "" } +type VarRow = EnvVariableRow & { _uid: string } + +function emptyVariable(): VarRow { + return { key: "", value: "", _uid: crypto.randomUUID() } } export function AddEnvironmentSetDialog({ children }: { children?: React.ReactNode }) { @@ -33,9 +35,10 @@ export function AddEnvironmentSetDialog({ children }: { children?: React.ReactNo const { addSet } = useEnvironmentManagerStore() const [open, setOpen] = useState(false) const [loading, setLoading] = useState(false) + const [showValues, setShowValues] = useState(false) const [project, setProject] = useState("") const [environment, setEnvironment] = useState("") - const [variables, setVariables] = useState([emptyVariable()]) + const [variables, setVariables] = useState([emptyVariable()]) const [tags, setTags] = useState([]) const [tagInput, setTagInput] = useState("") const [notes, setNotes] = useState("") @@ -55,6 +58,7 @@ export function AddEnvironmentSetDialog({ children }: { children?: React.ReactNo setPasteOpen(false) setPendingCommented([]) setPlainCommentLines(0) + setShowValues(false) } const handleAddTag = (e: React.KeyboardEvent) => { @@ -82,7 +86,9 @@ export function AddEnvironmentSetDialog({ children }: { children?: React.ReactNo return } - const cleanedVars = variables.filter((r) => r.key.trim()) + const cleanedVars = variables + .filter((r) => r.key.trim()) + .map(({ key, value }) => ({ key, value })) const payload = { project: proj, environment: env, variables: cleanedVars, tags, notes } setLoading(true) @@ -150,28 +156,55 @@ export function AddEnvironmentSetDialog({ children }: { children?: React.ReactNo plainCommentLines={plainCommentLines} onPendingCommentedChange={setPendingCommented} onPlainCommentLinesChange={setPlainCommentLines} - setVariables={setVariables} - emptyRow={emptyVariable()} + onMergeVariables={(incoming) => + setVariables((prev) => { + const base = prev.filter((r) => r.key.trim() || r.value.trim()) + const keyIndex = new Map(base.map((r, i) => [r.key, i])) + const result = [...base] + for (const row of incoming) { + const idx = keyIndex.get(row.key) + if (idx !== undefined) { + result[idx] = { ...row, _uid: result[idx]._uid } + } else { + keyIndex.set(row.key, result.length) + result.push({ ...row, _uid: crypto.randomUUID() }) + } + } + return result.length > 0 ? result : [emptyVariable()] + }) + } t={t as (key: string, values?: Record) => string} />
- +
+ + +
{variables.map((row, i) => ( -
+
{ const next = [...variables] diff --git a/apps/web/src/components/environment-manager/edit-environment-set-dialog.tsx b/apps/web/src/components/environment-manager/edit-environment-set-dialog.tsx index ddb1d68a..a0fd4af5 100644 --- a/apps/web/src/components/environment-manager/edit-environment-set-dialog.tsx +++ b/apps/web/src/components/environment-manager/edit-environment-set-dialog.tsx @@ -8,7 +8,7 @@ import { useIsMobile } from "@/components/hooks/use-mobile" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" -import { Plus, Trash2 } from "lucide-react" +import { Plus, Trash2, Eye, EyeOff } from "lucide-react" import { useEnvironmentManagerStore, type EnvSetEntry, @@ -24,8 +24,10 @@ import { cn } from "@/lib/utils" import { toast } from "sonner" import { useTranslations } from "next-intl" -function emptyVariable(): EnvVariableRow { - return { key: "", value: "" } +type VarRow = EnvVariableRow & { _uid: string } + +function emptyVariable(): VarRow { + return { key: "", value: "", _uid: crypto.randomUUID() } } type EditEnvironmentSetDialogProps = { @@ -39,9 +41,10 @@ export function EditEnvironmentSetDialog({ entry, open, onOpenChange }: EditEnvi const { encryptionKey } = useMasterKeyStore() const { updateSet } = useEnvironmentManagerStore() const [loading, setLoading] = useState(false) + const [showValues, setShowValues] = useState(false) const [project, setProject] = useState("") const [environment, setEnvironment] = useState("") - const [variables, setVariables] = useState([emptyVariable()]) + const [variables, setVariables] = useState([emptyVariable()]) const [tags, setTags] = useState([]) const [tagInput, setTagInput] = useState("") const [notes, setNotes] = useState("") @@ -54,7 +57,12 @@ export function EditEnvironmentSetDialog({ entry, open, onOpenChange }: EditEnvi if (!entry || !open) return setProject(entry.project) setEnvironment(entry.environment) - setVariables(entry.variables.length ? [...entry.variables] : [emptyVariable()]) + setVariables( + entry.variables.length + ? entry.variables.map((v) => ({ ...v, _uid: crypto.randomUUID() })) + : [emptyVariable()] + ) + setShowValues(false) setTags([...entry.tags]) setNotes(entry.notes) setTagInput("") @@ -89,7 +97,9 @@ export function EditEnvironmentSetDialog({ entry, open, onOpenChange }: EditEnvi return } - const cleanedVars = variables.filter((r) => r.key.trim()) + const cleanedVars = variables + .filter((r) => r.key.trim()) + .map(({ key, value }) => ({ key, value })) const payload = { project: proj, environment: env, variables: cleanedVars, tags, notes } setLoading(true) @@ -152,28 +162,55 @@ export function EditEnvironmentSetDialog({ entry, open, onOpenChange }: EditEnvi plainCommentLines={plainCommentLines} onPendingCommentedChange={setPendingCommented} onPlainCommentLinesChange={setPlainCommentLines} - setVariables={setVariables} - emptyRow={emptyVariable()} + onMergeVariables={(incoming) => + setVariables((prev) => { + const base = prev.filter((r) => r.key.trim() || r.value.trim()) + const keyIndex = new Map(base.map((r, i) => [r.key, i])) + const result = [...base] + for (const row of incoming) { + const idx = keyIndex.get(row.key) + if (idx !== undefined) { + result[idx] = { ...row, _uid: result[idx]._uid } + } else { + keyIndex.set(row.key, result.length) + result.push({ ...row, _uid: crypto.randomUUID() }) + } + } + return result.length > 0 ? result : [emptyVariable()] + }) + } t={t as (key: string, values?: Record) => string} />
- +
+ + +
{variables.map((row, i) => ( -
+
{ const next = [...variables] @@ -214,6 +251,7 @@ export function EditEnvironmentSetDialog({ entry, open, onOpenChange }: EditEnvi