mirror of
https://github.com/XFox111/PasswordGeneratorExtension.git
synced 2026-04-22 08:08:01 +03:00
a4de3139bf
* Force no-wrap for special characters tooltip (resolves #551) (#555) * Increase width of password count field in advanced generator (resolves #548) (#554) * Added password length limit in advanced generator (#552) * Added password length limit in advanced generator (resolves #547) * Add radix to parseInt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove unnecessary callback dependency Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * npm audit fix (#556) * Added length slider range limits (#557) * Added length slider range limits (resolves #546) * Fix validateMaxLimit logic Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Added password length update on input field blur (resolves #549) (#559) * Separator option for advanced password generator (#558) * Added separator option for advanced password generator (resolves #545) * Fix typos * Fixed merge typo * Update package.json * Bump @fluentui/react-components from 9.64.0 to 9.66.5 (#561) Bumps [@fluentui/react-components](https://github.com/microsoft/fluentui) from 9.64.0 to 9.66.5. - [Release notes](https://github.com/microsoft/fluentui/releases) - [Changelog](https://github.com/microsoft/fluentui/blob/master/azure-pipelines.release.yml) - [Commits](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.64.0...@fluentui/react-components_v9.66.5) --- updated-dependencies: - dependency-name: "@fluentui/react-components" dependency-version: 9.66.5 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @typescript-eslint/parser from 8.33.1 to 8.35.1 (#562) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.33.1 to 8.35.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.35.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-version: 8.35.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @eslint/js from 9.28.0 to 9.30.0 (#564) Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.28.0 to 9.30.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.30.0/packages/js) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-version: 9.30.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump eslint from 9.28.0 to 9.30.0 (#566) Bumps [eslint](https://github.com/eslint/eslint) from 9.28.0 to 9.30.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.28.0...v9.30.0) --- updated-dependencies: - dependency-name: eslint dependency-version: 9.30.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @typescript-eslint/eslint-plugin from 8.33.1 to 8.35.1 (#563) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.33.1 to 8.35.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.35.1/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.35.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @fluentui/react-icons from 2.0.302 to 2.0.305 (#565) Bumps [@fluentui/react-icons](https://github.com/microsoft/fluentui-system-icons) from 2.0.302 to 2.0.305. - [Changelog](https://github.com/microsoft/fluentui-system-icons/blob/main/fluentui-android-system-icons-release.yml) - [Commits](https://github.com/microsoft/fluentui-system-icons/commits) --- updated-dependencies: - dependency-name: "@fluentui/react-icons" dependency-version: 2.0.305 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Moved default password lengths to constants (#553) * Added radix 10 for parseInt (#553) * Removed ts-expect-error microsoft/fluentui#27090 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
90 lines
3.5 KiB
TypeScript
90 lines
3.5 KiB
TypeScript
import generatePassphrase, { PassphraseProps } from "@/utils/generators/generatePassphrase";
|
|
import infoLabel from "@/utils/infoLabel";
|
|
import { Checkbox, Field, Input, InputOnChangeData } from "@fluentui/react-components";
|
|
import { ReactElement } from "react";
|
|
import GeneratorForm from "../components/GeneratorForm";
|
|
import { GeneratorProps } from "../Page";
|
|
import { useStyles } from "./PassphraseSection.styles";
|
|
|
|
export default function PassphraseSection(props: GeneratorProps): ReactElement
|
|
{
|
|
const [wordCount, private_setWordCount] = useState<number | null>(2);
|
|
const [swapCharacters, setSwapCharacters] = useState<boolean>(false);
|
|
const [separate, setSeparate] = useState<boolean>(true);
|
|
const [separator, setSeparator] = useState<string>("");
|
|
const [allowRepeating, setAllowRepeating] = useState<boolean>(false);
|
|
const [randomizeCase, setRandomizeCase] = useState<boolean>(false);
|
|
|
|
const config = useMemo<PassphraseProps>(() => ({
|
|
wordCount: wordCount ?? 2,
|
|
allowRepeating,
|
|
swapCharacters,
|
|
randomizeCase,
|
|
separator: separate ? (separator ? separator : " ") : ""
|
|
}), [wordCount, allowRepeating, swapCharacters, randomizeCase, separate, separator]);
|
|
|
|
const cls = useStyles();
|
|
|
|
const setWordCount = useCallback((_: any, e: InputOnChangeData) =>
|
|
{
|
|
const n = parseInt(e.value ?? "", 10);
|
|
private_setWordCount(isNaN(n) || n < 1 ? null : Math.min(n, 100));
|
|
}, []);
|
|
|
|
const saveConfiguration = useCallback(
|
|
async () => await browser.storage.sync.set({ AdvancedPassphraseOptions: config }),
|
|
[config]
|
|
);
|
|
|
|
const generate = useCallback((count: number) =>
|
|
{
|
|
const passwords: string[] = [];
|
|
|
|
for (let i = 0; i < count; i++)
|
|
passwords.push(generatePassphrase(config));
|
|
|
|
props.onGenerated(passwords);
|
|
}, [config, props.onGenerated]);
|
|
|
|
useEffect(() =>
|
|
{
|
|
browser.storage.sync.get("AdvancedPassphraseOptions").then(({ AdvancedPassphraseOptions }) =>
|
|
{
|
|
if (!AdvancedPassphraseOptions)
|
|
return;
|
|
|
|
private_setWordCount(AdvancedPassphraseOptions.wordCount ?? 2);
|
|
setAllowRepeating(AdvancedPassphraseOptions.allowRepeating);
|
|
setSwapCharacters(AdvancedPassphraseOptions.swapCharacters);
|
|
setRandomizeCase(AdvancedPassphraseOptions.randomizeCase);
|
|
setSeparate(!!AdvancedPassphraseOptions.separator);
|
|
setSeparator(AdvancedPassphraseOptions.separator ?? "");
|
|
});
|
|
}, []);
|
|
|
|
return (
|
|
<GeneratorForm onGenerate={ generate } onSave={ saveConfiguration }>
|
|
<div className={ cls.root }>
|
|
<Field label={ i18n.t("advanced.passphrase.length") }>
|
|
<Input value={ wordCount?.toString() ?? "" } onChange={ setWordCount } />
|
|
</Field>
|
|
<div className={ cls.checkboxes }>
|
|
<Checkbox label={ i18n.t("advanced.passphrase.replace") }
|
|
checked={ swapCharacters } onChange={ (_, e) => setSwapCharacters(e.checked as boolean) } />
|
|
<Checkbox label={ i18n.t("advanced.passphrase.random_case") }
|
|
checked={ randomizeCase } onChange={ (_, e) => setRandomizeCase(e.checked as boolean) } />
|
|
<Checkbox label={ infoLabel(i18n.t("advanced.passphrase.allow_repat.label"), i18n.t("advanced.passphrase.allow_repat.hint")) }
|
|
checked={ allowRepeating } onChange={ (_, e) => setAllowRepeating(e.checked as boolean) } />
|
|
|
|
<div>
|
|
<Checkbox label={ infoLabel(i18n.t("advanced.passphrase.separate_words.label"), i18n.t("advanced.passphrase.separate_words.hint")) }
|
|
checked={ separate } onChange={ (_, e) => setSeparate(e.checked as boolean) } />
|
|
<Input disabled={ !separate } size="small"
|
|
value={ separator } onChange={ (_, e) => setSeparator(e.value) } />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</GeneratorForm>
|
|
);
|
|
}
|