1
0
mirror of https://github.com/XFox111/PasswordGeneratorExtension.git synced 2026-04-22 08:08:01 +03:00
Files
PasswordGeneratorExtension/entrypoints/advanced/sections/PassphraseSection.tsx
T
xfox111 a4de3139bf Minor 5.1.0 (#560)
* 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>
2025-07-01 11:25:32 +03:00

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>
);
}