@thebuoyant-tsdev/mui-ts-library 3.22.0 → 3.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/README.de.md +4 -0
  2. package/README.md +4 -0
  3. package/dist/components/color-picker/ColorPicker.d.ts +1 -1
  4. package/dist/components/color-picker/ColorPicker.js +282 -266
  5. package/dist/components/color-picker/ColorPicker.types.d.ts +3 -1
  6. package/dist/components/color-picker/colorPickerClasses.d.ts +35 -0
  7. package/dist/components/color-picker/colorPickerClasses.js +15 -0
  8. package/dist/components/password-strength-meter/PasswordStrengthBar.d.ts +2 -1
  9. package/dist/components/password-strength-meter/PasswordStrengthBar.js +3 -1
  10. package/dist/components/password-strength-meter/PasswordStrengthMeter.js +258 -237
  11. package/dist/components/password-strength-meter/passwordStrengthMeterClasses.d.ts +40 -0
  12. package/dist/components/password-strength-meter/passwordStrengthMeterClasses.js +16 -0
  13. package/dist/components/rich-text-editor/RichTextEditorToolbar.js +115 -111
  14. package/dist/components/tag-selection/TagSelection.js +82 -79
  15. package/dist/components/tag-selection/TagSelectionAutocomplete.js +102 -98
  16. package/dist/components/tag-selection/TagSelectionChip.js +24 -21
  17. package/dist/components/tag-selection/TagSelectionSelectedTags.js +44 -38
  18. package/dist/components/tag-selection/tagSelectionClasses.d.ts +34 -0
  19. package/dist/components/tag-selection/tagSelectionClasses.js +15 -0
  20. package/dist/index.cjs +2 -2
  21. package/dist/index.d.cts +4 -0
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.js +31 -27
  24. package/dist/utils/muiTsClasses.d.ts +7 -0
  25. package/dist/utils/muiTsClasses.js +9 -0
  26. package/package.json +1 -1
@@ -38,8 +38,10 @@ export type ColorPickerProps = {
38
38
  onChange: (hex: string, info: ColorPickerColorInfo) => void;
39
39
  /** Fires once per "gesture" instead of continuously: on pointer-up after a drag, on blur after typing, or immediately for atomic actions (swatch click, eyedropper). Same dual-callback pattern as MUI's own `Slider` — use this instead of debouncing `onChange` yourself for expensive side effects (persisting to a backend, etc.). */
40
40
  onChangeCommitted?: (hex: string, info: ColorPickerColorInfo) => void;
41
- /** Initial display format for the value field — uncontrolled after mount (default: 'hex'). */
41
+ /** Initial display format — uncontrolled after mount (default: `'hex'`). Ignored when `format` is set. */
42
42
  defaultFormat?: ColorPickerFormat;
43
+ /** Controlled display format. When set, the parent owns the active format — combine with `onFormatChange` to update it. When omitted, falls back to `defaultFormat` (uncontrolled). @since 3.23.0 */
44
+ format?: ColorPickerFormat;
43
45
  /** Fires when the user switches the display format via the dropdown. */
44
46
  onFormatChange?: (format: ColorPickerFormat) => void;
45
47
  /** Shows the alpha slider and opacity field (default: true). */
@@ -0,0 +1,35 @@
1
+ /**
2
+ * CSS class names for every named slot in the ColorPicker component.
3
+ *
4
+ * Use these to style individual parts of the component without relying on
5
+ * MUI's internal class names, which can change between versions.
6
+ *
7
+ * @example
8
+ * ```css
9
+ * .MuiTsColorPicker-root { border-radius: 12px; box-shadow: 0 4px 24px rgba(0,0,0,0.15); }
10
+ * .MuiTsColorPicker-swatch:hover { transform: scale(1.2); }
11
+ * .MuiTsColorPicker-root.MuiTs-disabled { pointer-events: none; }
12
+ * ```
13
+ */
14
+ export declare const colorPickerClasses: {
15
+ /** The outermost wrapper element. Also receives `MuiTs-disabled` when `disabled={true}`. */
16
+ readonly root: "MuiTsColorPicker-root";
17
+ /** The 2D gradient area used to pick saturation and brightness. */
18
+ readonly gradientArea: "MuiTsColorPicker-gradientArea";
19
+ /** The draggable circle (thumb) inside the gradient area. */
20
+ readonly gradientThumb: "MuiTsColorPicker-gradientThumb";
21
+ /** The row containing the eyedropper button and the hue/alpha sliders (when `showSliderSection={true}`). */
22
+ readonly sliderSection: "MuiTsColorPicker-sliderSection";
23
+ /** The horizontal hue slider bar. */
24
+ readonly hueSlider: "MuiTsColorPicker-hueSlider";
25
+ /** The horizontal alpha (opacity) slider bar (when `showAlpha={true}`). */
26
+ readonly alphaSlider: "MuiTsColorPicker-alphaSlider";
27
+ /** The row containing the format dropdown and hex/RGB/HSL input fields (when `showInputSection={true}`). */
28
+ readonly inputSection: "MuiTsColorPicker-inputSection";
29
+ /** The saved-colors section wrapper (when `savedColors` is non-empty). */
30
+ readonly savedColors: "MuiTsColorPicker-savedColors";
31
+ /** The flex row that wraps all swatch buttons. */
32
+ readonly swatchList: "MuiTsColorPicker-swatchList";
33
+ /** Each individual saved-color swatch button. */
34
+ readonly swatch: "MuiTsColorPicker-swatch";
35
+ };
@@ -0,0 +1,15 @@
1
+ //#region src/components/color-picker/colorPickerClasses.ts
2
+ var e = {
3
+ root: "MuiTsColorPicker-root",
4
+ gradientArea: "MuiTsColorPicker-gradientArea",
5
+ gradientThumb: "MuiTsColorPicker-gradientThumb",
6
+ sliderSection: "MuiTsColorPicker-sliderSection",
7
+ hueSlider: "MuiTsColorPicker-hueSlider",
8
+ alphaSlider: "MuiTsColorPicker-alphaSlider",
9
+ inputSection: "MuiTsColorPicker-inputSection",
10
+ savedColors: "MuiTsColorPicker-savedColors",
11
+ swatchList: "MuiTsColorPicker-swatchList",
12
+ swatch: "MuiTsColorPicker-swatch"
13
+ };
14
+ //#endregion
15
+ export { e as colorPickerClasses };
@@ -4,11 +4,12 @@ type PasswordStrengthBarProps = {
4
4
  ariaLabel: string;
5
5
  /** When true, renders 4 separate animated segments instead of a single bar. */
6
6
  segments?: boolean;
7
+ className?: string;
7
8
  };
8
9
  /**
9
10
  * Visuelle Fortschrittsleiste für die Passwortstärke.
10
11
  * role="progressbar" macht die Anzeige für Screenreader zugänglich —
11
12
  * ohne aria-Attribute wäre sie für assistive Technologien unsichtbar.
12
13
  */
13
- export declare function PasswordStrengthBar({ percent, color, ariaLabel, segments }: PasswordStrengthBarProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function PasswordStrengthBar({ percent, color, ariaLabel, segments, className }: PasswordStrengthBarProps): import("react/jsx-runtime").JSX.Element;
14
15
  export {};
@@ -1,7 +1,7 @@
1
1
  import { Box as e } from "@mui/material";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  //#region src/components/password-strength-meter/PasswordStrengthBar.tsx
4
- function n({ percent: n, color: r, ariaLabel: i, segments: a = !1 }) {
4
+ function n({ percent: n, color: r, ariaLabel: i, segments: a = !1, className: o }) {
5
5
  if (a) {
6
6
  let a = Math.round(n / 25);
7
7
  return /* @__PURE__ */ t(e, {
@@ -10,6 +10,7 @@ function n({ percent: n, color: r, ariaLabel: i, segments: a = !1 }) {
10
10
  "aria-valuenow": n,
11
11
  "aria-valuemin": 0,
12
12
  "aria-valuemax": 100,
13
+ className: o,
13
14
  sx: {
14
15
  width: "100%",
15
16
  display: "flex",
@@ -41,6 +42,7 @@ function n({ percent: n, color: r, ariaLabel: i, segments: a = !1 }) {
41
42
  "aria-valuenow": n,
42
43
  "aria-valuemin": 0,
43
44
  "aria-valuemax": 100,
45
+ className: o,
44
46
  sx: {
45
47
  width: "100%",
46
48
  height: "8px",
@@ -1,21 +1,23 @@
1
- import { useTimedFlag as e } from "../shared/useTimedFlag.js";
2
- import { scorePassword as t } from "./util/password-strength.util.js";
3
- import { PasswordStrengthBar as n } from "./PasswordStrengthBar.js";
4
- import { DEFAULT_CHECK_COLORS as r, DEFAULT_METER_COLORS as i, DEFAULT_PASSWORD_TRANSLATIONS as a } from "./PasswordStrengthMeter.types.js";
5
- import { useId as o, useMemo as s, useState as c } from "react";
6
- import { Box as ee, Button as te, FormControl as l, FormHelperText as u, IconButton as d, InputAdornment as f, InputLabel as p, OutlinedInput as m, Stack as h, Tooltip as g, Typography as _ } from "@mui/material";
1
+ import { muiTsStateClasses as e } from "../../utils/muiTsClasses.js";
2
+ import { passwordStrengthMeterClasses as t } from "./passwordStrengthMeterClasses.js";
3
+ import { useTimedFlag as n } from "../shared/useTimedFlag.js";
4
+ import { scorePassword as r } from "./util/password-strength.util.js";
5
+ import { PasswordStrengthBar as i } from "./PasswordStrengthBar.js";
6
+ import { DEFAULT_CHECK_COLORS as a, DEFAULT_METER_COLORS as o, DEFAULT_PASSWORD_TRANSLATIONS as s } from "./PasswordStrengthMeter.types.js";
7
+ import { useId as ee, useMemo as te, useState as c } from "react";
8
+ import { Box as ne, Button as re, FormControl as l, FormHelperText as u, IconButton as d, InputAdornment as f, InputLabel as p, OutlinedInput as m, Stack as h, Tooltip as g, Typography as _ } from "@mui/material";
7
9
  import { jsx as v, jsxs as y } from "react/jsx-runtime";
8
- import ne from "@mui/icons-material/ContentCopy";
9
- import re from "@mui/icons-material/Check";
10
- import ie from "@mui/icons-material/AutoFixHigh";
10
+ import ie from "@mui/icons-material/ContentCopy";
11
+ import ae from "@mui/icons-material/Check";
12
+ import oe from "@mui/icons-material/AutoFixHigh";
11
13
  import b from "@mui/icons-material/CheckCircleOutlined";
12
14
  import x from "@mui/icons-material/ErrorOutlined";
13
- import ae from "@mui/icons-material/CheckCircle";
14
- import oe from "@mui/icons-material/Cancel";
15
+ import se from "@mui/icons-material/CheckCircle";
16
+ import ce from "@mui/icons-material/Cancel";
15
17
  import S from "@mui/icons-material/Visibility";
16
18
  import C from "@mui/icons-material/VisibilityOff";
17
19
  //#region src/components/password-strength-meter/PasswordStrengthMeter.tsx
18
- function se(e) {
20
+ function le(e) {
19
21
  let t = [];
20
22
  e.upper && t.push("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), e.lower && t.push("abcdefghijklmnopqrstuvwxyz"), e.numbers && t.push("0123456789"), e.symbols && t.push("!@#$%^&*()-_=+[]{}|;:,.<>?"), t.length === 0 && t.push("abcdefghijklmnopqrstuvwxyz");
21
23
  let n = t.join(""), r = Math.max(e.length, t.length), i = new Uint32Array(Math.max(0, r - t.length));
@@ -27,7 +29,7 @@ function se(e) {
27
29
  }
28
30
  return s.join("");
29
31
  }
30
- function w({ label: e, fulfilled: t, checkColors: n }) {
32
+ function w({ label: e, fulfilled: n, checkColors: r }) {
31
33
  return /* @__PURE__ */ y(h, {
32
34
  direction: "row",
33
35
  sx: {
@@ -35,261 +37,280 @@ function w({ label: e, fulfilled: t, checkColors: n }) {
35
37
  mb: .25
36
38
  },
37
39
  spacing: .5,
40
+ className: t.requirementItem,
38
41
  children: [/* @__PURE__ */ v(_, {
39
42
  variant: "caption",
40
43
  children: e
41
- }), t ? /* @__PURE__ */ v(b, {
44
+ }), n ? /* @__PURE__ */ v(b, {
42
45
  "data-testid": "psm-req-success",
43
46
  style: {
44
47
  fontSize: 16,
45
- color: n.success
48
+ color: r.success
46
49
  }
47
50
  }) : /* @__PURE__ */ v(x, {
48
51
  "data-testid": "psm-req-failure",
49
52
  style: {
50
53
  fontSize: 16,
51
- color: n.failure
54
+ color: r.failure
52
55
  }
53
56
  })]
54
57
  });
55
58
  }
56
- function T({ value: b, confirmValue: x, name: T, inputRef: ce, disabled: E = !1, error: le = !1, helperText: D, autoComplete: ue, customRequirements: de, generatorOptions: O, showConfirmField: k = !1, showPasswordAdornment: A = !0, showMeter: j = !0, showPasswordGenerator: fe = !1, showSegmentedBar: pe = !1, showSummary: me = !0, showCopyButton: M = !1, inputSize: N = "medium", translation: he, meterColors: ge, passwordMinLength: P = 8, checkColors: F = r, onPasswordChange: I, onConfirmChange: _e, onPasswordGenerated: ve }) {
59
+ function T({ value: b, confirmValue: x, name: T, inputRef: ue, disabled: E = !1, error: D = !1, helperText: O, autoComplete: de, customRequirements: fe, generatorOptions: k, showConfirmField: A = !1, showPasswordAdornment: j = !0, showMeter: pe = !0, showPasswordGenerator: me = !1, showSegmentedBar: he = !1, showSummary: ge = !0, showCopyButton: M = !1, inputSize: N = "medium", translation: _e, meterColors: ve, passwordMinLength: P = 8, checkColors: F = a, onPasswordChange: I, onConfirmChange: ye, onPasswordGenerated: be }) {
57
60
  let L = {
58
- ...a,
59
- ...he
61
+ ...s,
62
+ ..._e
60
63
  }, R = {
61
- ...i,
62
- ...ge
63
- }, z = o(), B = `${z}-password`, [V, H] = c(!1), [U, ye] = c(!1), [be, W] = c(""), [xe, G] = c(""), [K, Se] = e(), q = b === void 0 ? be : b, J = x === void 0 ? xe : x, Y = k && J.length > 0, X = Y && q === J, Z = s(() => t(q, P), [q, P]), Ce = () => {
64
+ ...o,
65
+ ...ve
66
+ }, z = ee(), B = `${z}-password`, [V, H] = c(!1), [U, xe] = c(!1), [Se, W] = c(""), [Ce, G] = c(""), [K, we] = n(), q = b === void 0 ? Se : b, J = x === void 0 ? Ce : x, Y = A && J.length > 0, X = Y && q === J, Z = te(() => r(q, P), [q, P]), Te = () => {
64
67
  H((e) => !e);
65
68
  }, Q = (e) => {
66
69
  e.preventDefault();
67
70
  }, $ = (e) => {
68
71
  e.preventDefault();
69
- };
70
- return /* @__PURE__ */ y(h, { children: [
71
- /* @__PURE__ */ y(l, {
72
- variant: "outlined",
73
- fullWidth: !0,
74
- error: le,
75
- children: [
76
- /* @__PURE__ */ v(p, {
77
- htmlFor: B,
78
- size: N,
79
- children: L.label
80
- }),
81
- /* @__PURE__ */ v(m, {
82
- id: B,
83
- type: V ? "text" : "password",
84
- fullWidth: !0,
85
- size: N,
86
- value: q,
87
- onChange: (e) => {
88
- let n = e.target.value;
89
- b === void 0 && W(n), I && I(n, t(n, P));
90
- },
91
- disabled: E,
92
- inputRef: ce,
93
- inputProps: {
94
- "data-testid": "psm-input",
95
- name: T,
96
- autoComplete: ue
97
- },
98
- endAdornment: A || M && q.length > 0 ? /* @__PURE__ */ y(f, {
99
- position: "end",
100
- children: [M && q.length > 0 && /* @__PURE__ */ v(g, {
101
- title: K ? L.copiedLabel : L.copyPasswordLabel,
102
- arrow: !0,
103
- children: /* @__PURE__ */ v("span", { children: /* @__PURE__ */ v(d, {
104
- "data-testid": "psm-copy",
72
+ }, Ee = (e) => {
73
+ let t = e.target.value;
74
+ b === void 0 && W(t), I && I(t, r(t, P));
75
+ }, De = (e) => {
76
+ let t = e.target.value;
77
+ x === void 0 && G(t), ye?.(t, t === q);
78
+ }, Oe = () => {
79
+ let e = le({
80
+ length: k?.length ?? Math.max(16, P),
81
+ upper: k?.upper ?? !0,
82
+ lower: k?.lower ?? !0,
83
+ numbers: k?.numbers ?? !0,
84
+ symbols: k?.symbols ?? !0
85
+ });
86
+ b === void 0 && W(e), x === void 0 && G(""), I?.(e, r(e, P)), be?.(e), H(!0);
87
+ }, ke = () => {
88
+ navigator.clipboard.writeText(q).then(() => {
89
+ we();
90
+ });
91
+ }, Ae = (e) => {
92
+ switch (e.meterStatus) {
93
+ case "weak": return R.weak;
94
+ case "ok": return R.ok;
95
+ case "good": return R.good;
96
+ case "very good": return R.veryGood;
97
+ default: return "transparent";
98
+ }
99
+ }, je = [
100
+ t.strengthBar,
101
+ Z.meterStatus === "weak" && t.strengthBarWeak,
102
+ Z.meterStatus === "ok" && t.strengthBarOk,
103
+ Z.meterStatus === "good" && t.strengthBarGood,
104
+ Z.meterStatus === "very good" && t.strengthBarVeryGood
105
+ ].filter(Boolean).join(" ");
106
+ return /* @__PURE__ */ y(h, {
107
+ className: [
108
+ t.root,
109
+ E && e.disabled,
110
+ D && e.error
111
+ ].filter(Boolean).join(" "),
112
+ children: [
113
+ /* @__PURE__ */ y(l, {
114
+ variant: "outlined",
115
+ fullWidth: !0,
116
+ error: D,
117
+ className: t.input,
118
+ children: [
119
+ /* @__PURE__ */ v(p, {
120
+ htmlFor: B,
121
+ size: N,
122
+ children: L.label
123
+ }),
124
+ /* @__PURE__ */ v(m, {
125
+ id: B,
126
+ type: V ? "text" : "password",
127
+ fullWidth: !0,
128
+ size: N,
129
+ value: q,
130
+ onChange: Ee,
131
+ disabled: E,
132
+ inputRef: ue,
133
+ inputProps: {
134
+ "data-testid": "psm-input",
135
+ name: T,
136
+ autoComplete: de
137
+ },
138
+ endAdornment: j || M && q.length > 0 ? /* @__PURE__ */ y(f, {
139
+ position: "end",
140
+ children: [M && q.length > 0 && /* @__PURE__ */ v(g, {
141
+ title: K ? L.copiedLabel : L.copyPasswordLabel,
142
+ arrow: !0,
143
+ children: /* @__PURE__ */ v("span", { children: /* @__PURE__ */ v(d, {
144
+ "data-testid": "psm-copy",
145
+ disabled: E,
146
+ "aria-label": K ? L.copiedLabel : L.copyPasswordLabel,
147
+ onClick: ke,
148
+ onMouseDown: Q,
149
+ onMouseUp: $,
150
+ edge: j ? !1 : "end",
151
+ children: K ? /* @__PURE__ */ v(ae, {
152
+ fontSize: "small",
153
+ color: "success"
154
+ }) : /* @__PURE__ */ v(ie, { fontSize: "small" })
155
+ }) })
156
+ }), j && /* @__PURE__ */ v(d, {
157
+ "data-testid": "psm-toggle",
105
158
  disabled: E,
106
- "aria-label": K ? L.copiedLabel : L.copyPasswordLabel,
107
- onClick: () => {
108
- navigator.clipboard.writeText(q).then(() => {
109
- Se();
110
- });
111
- },
159
+ "aria-label": V ? L.hidePasswordLabel : L.showPasswordLabel,
160
+ onClick: Te,
112
161
  onMouseDown: Q,
113
162
  onMouseUp: $,
114
- edge: A ? !1 : "end",
115
- children: K ? /* @__PURE__ */ v(re, {
116
- fontSize: "small",
117
- color: "success"
118
- }) : /* @__PURE__ */ v(ne, { fontSize: "small" })
119
- }) })
120
- }), A && /* @__PURE__ */ v(d, {
121
- "data-testid": "psm-toggle",
122
- disabled: E,
123
- "aria-label": V ? L.hidePasswordLabel : L.showPasswordLabel,
124
- onClick: Ce,
125
- onMouseDown: Q,
126
- onMouseUp: $,
127
- edge: "end",
128
- children: v(V ? C : S, {})
129
- })]
130
- }) : null,
131
- label: L.label
132
- }),
133
- D && /* @__PURE__ */ v(u, { children: D })
134
- ]
135
- }),
136
- fe && /* @__PURE__ */ v(g, {
137
- title: L.generatePasswordLabel,
138
- arrow: !0,
139
- children: /* @__PURE__ */ v("span", { children: /* @__PURE__ */ v(te, {
140
- "data-testid": "psm-generate",
141
- size: "small",
142
- variant: "text",
143
- startIcon: /* @__PURE__ */ v(ie, { fontSize: "small" }),
144
- disabled: E,
145
- onClick: () => {
146
- let e = se({
147
- length: O?.length ?? Math.max(16, P),
148
- upper: O?.upper ?? !0,
149
- lower: O?.lower ?? !0,
150
- numbers: O?.numbers ?? !0,
151
- symbols: O?.symbols ?? !0
152
- });
153
- b === void 0 && W(e), x === void 0 && G(""), I?.(e, t(e, P)), ve?.(e), H(!0);
154
- },
155
- sx: {
156
- mt: .5,
157
- alignSelf: "flex-start",
158
- textTransform: "none"
159
- },
160
- children: L.generatePasswordLabel
161
- }) })
162
- }),
163
- k && /* @__PURE__ */ y(l, {
164
- variant: "outlined",
165
- fullWidth: !0,
166
- error: Y && !X,
167
- sx: { mt: 1 },
168
- children: [
169
- /* @__PURE__ */ v(p, {
170
- htmlFor: `${z}-confirm`,
171
- size: N,
172
- children: L.confirmLabel
173
- }),
174
- /* @__PURE__ */ v(m, {
175
- id: `${z}-confirm`,
176
- type: U ? "text" : "password",
177
- fullWidth: !0,
178
- size: N,
179
- value: J,
180
- onChange: (e) => {
181
- let t = e.target.value;
182
- x === void 0 && G(t), _e?.(t, t === q);
183
- },
163
+ edge: "end",
164
+ children: v(V ? C : S, {})
165
+ })]
166
+ }) : null,
167
+ label: L.label
168
+ }),
169
+ O && /* @__PURE__ */ v(u, { children: O })
170
+ ]
171
+ }),
172
+ me && /* @__PURE__ */ v(g, {
173
+ title: L.generatePasswordLabel,
174
+ arrow: !0,
175
+ children: /* @__PURE__ */ v("span", { children: /* @__PURE__ */ v(re, {
176
+ "data-testid": "psm-generate",
177
+ size: "small",
178
+ variant: "text",
179
+ startIcon: /* @__PURE__ */ v(oe, { fontSize: "small" }),
184
180
  disabled: E,
185
- inputProps: { "data-testid": "psm-confirm-input" },
186
- endAdornment: /* @__PURE__ */ y(f, {
187
- position: "end",
188
- children: [Y && (X ? /* @__PURE__ */ v(ae, {
189
- "data-testid": "psm-confirm-match",
190
- sx: {
191
- color: F.success,
192
- mr: .5
193
- },
194
- fontSize: "small"
195
- }) : /* @__PURE__ */ v(oe, {
196
- "data-testid": "psm-confirm-mismatch",
197
- sx: {
198
- color: F.failure,
199
- mr: .5
200
- },
201
- fontSize: "small"
202
- })), /* @__PURE__ */ v(d, {
203
- size: "small",
204
- disabled: E,
205
- onClick: () => ye((e) => !e),
206
- onMouseDown: (e) => e.preventDefault(),
207
- edge: "end",
208
- "aria-label": U ? L.hidePasswordLabel : L.showPasswordLabel,
209
- children: v(U ? C : S, {})
210
- })]
181
+ onClick: Oe,
182
+ className: t.generatorButton,
183
+ sx: {
184
+ mt: .5,
185
+ alignSelf: "flex-start",
186
+ textTransform: "none"
187
+ },
188
+ children: L.generatePasswordLabel
189
+ }) })
190
+ }),
191
+ A && /* @__PURE__ */ y(l, {
192
+ variant: "outlined",
193
+ fullWidth: !0,
194
+ error: Y && !X,
195
+ sx: { mt: 1 },
196
+ className: t.confirmInput,
197
+ children: [
198
+ /* @__PURE__ */ v(p, {
199
+ htmlFor: `${z}-confirm`,
200
+ size: N,
201
+ children: L.confirmLabel
211
202
  }),
212
- label: L.confirmLabel
213
- }),
214
- Y && /* @__PURE__ */ v(u, {
215
- sx: { color: X ? F.success : F.failure },
216
- children: X ? L.confirmMatchLabel : L.confirmMismatchLabel
217
- })
218
- ]
219
- }),
220
- j && /* @__PURE__ */ v(n, {
221
- percent: Z.percent,
222
- color: ((e) => {
223
- switch (e.meterStatus) {
224
- case "weak": return R.weak;
225
- case "ok": return R.ok;
226
- case "good": return R.good;
227
- case "very good": return R.veryGood;
228
- default: return "transparent";
229
- }
230
- })(Z),
231
- ariaLabel: L.meterAriaLabel,
232
- segments: pe
233
- }),
234
- me && /* @__PURE__ */ y(ee, {
235
- "data-testid": "psm-summary",
236
- sx: {
237
- mt: .5,
238
- p: .5
239
- },
240
- children: [/* @__PURE__ */ v(_, {
241
- variant: "caption",
242
- gutterBottom: !0,
203
+ /* @__PURE__ */ v(m, {
204
+ id: `${z}-confirm`,
205
+ type: U ? "text" : "password",
206
+ fullWidth: !0,
207
+ size: N,
208
+ value: J,
209
+ onChange: De,
210
+ disabled: E,
211
+ inputProps: { "data-testid": "psm-confirm-input" },
212
+ endAdornment: /* @__PURE__ */ y(f, {
213
+ position: "end",
214
+ children: [Y && (X ? /* @__PURE__ */ v(se, {
215
+ "data-testid": "psm-confirm-match",
216
+ sx: {
217
+ color: F.success,
218
+ mr: .5
219
+ },
220
+ fontSize: "small"
221
+ }) : /* @__PURE__ */ v(ce, {
222
+ "data-testid": "psm-confirm-mismatch",
223
+ sx: {
224
+ color: F.failure,
225
+ mr: .5
226
+ },
227
+ fontSize: "small"
228
+ })), /* @__PURE__ */ v(d, {
229
+ size: "small",
230
+ disabled: E,
231
+ onClick: () => xe((e) => !e),
232
+ onMouseDown: (e) => e.preventDefault(),
233
+ edge: "end",
234
+ "aria-label": U ? L.hidePasswordLabel : L.showPasswordLabel,
235
+ children: v(U ? C : S, {})
236
+ })]
237
+ }),
238
+ label: L.confirmLabel
239
+ }),
240
+ Y && /* @__PURE__ */ v(u, {
241
+ sx: { color: X ? F.success : F.failure },
242
+ children: X ? L.confirmMatchLabel : L.confirmMismatchLabel
243
+ })
244
+ ]
245
+ }),
246
+ pe && /* @__PURE__ */ v(i, {
247
+ percent: Z.percent,
248
+ color: Ae(Z),
249
+ ariaLabel: L.meterAriaLabel,
250
+ segments: he,
251
+ className: je
252
+ }),
253
+ ge && /* @__PURE__ */ y(ne, {
254
+ "data-testid": "psm-summary",
243
255
  sx: {
244
- display: "block",
245
- fontSize: 14
256
+ mt: .5,
257
+ p: .5
246
258
  },
247
- children: L.summaryHeaderLabel
248
- }), /* @__PURE__ */ y(h, {
249
- direction: "row",
250
- spacing: 6,
251
- children: [/* @__PURE__ */ y(h, {
252
- direction: "column",
253
- children: [
254
- /* @__PURE__ */ v(w, {
255
- label: L.summaryMinChars.replace("{n}", String(P)),
256
- fulfilled: Z.length >= P,
257
- checkColors: F
258
- }),
259
- /* @__PURE__ */ v(w, {
260
- label: L.summaryCapitalLetter,
261
- fulfilled: Z.hasUpper,
262
- checkColors: F
263
- }),
264
- /* @__PURE__ */ v(w, {
265
- label: L.summaryLowerCaseLetter,
266
- fulfilled: Z.hasLower,
267
- checkColors: F
268
- })
269
- ]
259
+ className: t.summary,
260
+ children: [/* @__PURE__ */ v(_, {
261
+ variant: "caption",
262
+ gutterBottom: !0,
263
+ sx: {
264
+ display: "block",
265
+ fontSize: 14
266
+ },
267
+ children: L.summaryHeaderLabel
270
268
  }), /* @__PURE__ */ y(h, {
271
- direction: "column",
272
- children: [
273
- /* @__PURE__ */ v(w, {
274
- label: L.summaryNumber,
275
- fulfilled: Z.hasDigit,
276
- checkColors: F
277
- }),
278
- /* @__PURE__ */ v(w, {
279
- label: L.summarySpecialChar,
280
- fulfilled: Z.hasSymbol,
281
- checkColors: F
282
- }),
283
- de?.map((e, t) => /* @__PURE__ */ v(w, {
284
- label: e.label,
285
- fulfilled: typeof e.fulfilled == "function" ? e.fulfilled(q) : e.fulfilled,
286
- checkColors: F
287
- }, t))
288
- ]
269
+ direction: "row",
270
+ spacing: 6,
271
+ children: [/* @__PURE__ */ y(h, {
272
+ direction: "column",
273
+ children: [
274
+ /* @__PURE__ */ v(w, {
275
+ label: L.summaryMinChars.replace("{n}", String(P)),
276
+ fulfilled: Z.length >= P,
277
+ checkColors: F
278
+ }),
279
+ /* @__PURE__ */ v(w, {
280
+ label: L.summaryCapitalLetter,
281
+ fulfilled: Z.hasUpper,
282
+ checkColors: F
283
+ }),
284
+ /* @__PURE__ */ v(w, {
285
+ label: L.summaryLowerCaseLetter,
286
+ fulfilled: Z.hasLower,
287
+ checkColors: F
288
+ })
289
+ ]
290
+ }), /* @__PURE__ */ y(h, {
291
+ direction: "column",
292
+ children: [
293
+ /* @__PURE__ */ v(w, {
294
+ label: L.summaryNumber,
295
+ fulfilled: Z.hasDigit,
296
+ checkColors: F
297
+ }),
298
+ /* @__PURE__ */ v(w, {
299
+ label: L.summarySpecialChar,
300
+ fulfilled: Z.hasSymbol,
301
+ checkColors: F
302
+ }),
303
+ fe?.map((e, t) => /* @__PURE__ */ v(w, {
304
+ label: e.label,
305
+ fulfilled: typeof e.fulfilled == "function" ? e.fulfilled(q) : e.fulfilled,
306
+ checkColors: F
307
+ }, t))
308
+ ]
309
+ })]
289
310
  })]
290
- })]
291
- })
292
- ] });
311
+ })
312
+ ]
313
+ });
293
314
  }
294
315
  //#endregion
295
316
  export { T as PasswordStrengthMeter };