@bloom-housing/ui-components 14.0.2 → 14.1.0

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.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ import React from "react";
2
+ import { render, cleanup, fireEvent } from "@testing-library/react";
3
+ import { PasswordField } from "../../src/forms/PasswordField";
4
+ import { useForm } from "react-hook-form";
5
+ afterEach(cleanup);
6
+ var PasswordFieldDefault = function () {
7
+ // eslint-disable-next-line @typescript-eslint/unbound-method
8
+ var register = useForm({ mode: "onChange" }).register;
9
+ return React.createElement(PasswordField, { register: register, name: "password", label: "Password" });
10
+ };
11
+ var PasswordFieldError = function () {
12
+ // eslint-disable-next-line @typescript-eslint/unbound-method
13
+ var register = useForm({ mode: "onChange" }).register;
14
+ return (React.createElement(PasswordField, { register: register, name: "password", label: "Password", error: true, errorMessage: "Wrong password" }));
15
+ };
16
+ var PasswordFieldCustomLabels = function () {
17
+ // eslint-disable-next-line @typescript-eslint/unbound-method
18
+ var register = useForm({ mode: "onChange" }).register;
19
+ return (React.createElement(PasswordField, { register: register, name: "password", label: "Password", showPasswordLabel: "Disclose password" }));
20
+ };
21
+ describe("<PasswordField>", function () {
22
+ it("renders a password input with a show password checkbox", function () {
23
+ var getByLabelText = render(React.createElement(PasswordFieldDefault, null)).getByLabelText;
24
+ var input = getByLabelText("Password");
25
+ expect(input.type).toBe("password");
26
+ expect(getByLabelText("Show password")).toBeTruthy();
27
+ });
28
+ it("toggles the input type when the checkbox is clicked", function () {
29
+ var getByLabelText = render(React.createElement(PasswordFieldDefault, null)).getByLabelText;
30
+ var input = getByLabelText("Password");
31
+ var checkbox = getByLabelText("Show password");
32
+ fireEvent.click(checkbox);
33
+ expect(input.type).toBe("text");
34
+ fireEvent.click(checkbox);
35
+ expect(input.type).toBe("password");
36
+ });
37
+ it("preserves the typed value when toggling visibility", function () {
38
+ var getByLabelText = render(React.createElement(PasswordFieldDefault, null)).getByLabelText;
39
+ var input = getByLabelText("Password");
40
+ fireEvent.change(input, { target: { value: "hunter2" } });
41
+ fireEvent.click(getByLabelText("Show password"));
42
+ expect(input.value).toBe("hunter2");
43
+ });
44
+ it("renders the error message when passed through", function () {
45
+ var getByText = render(React.createElement(PasswordFieldError, null)).getByText;
46
+ expect(getByText("Wrong password")).toBeTruthy();
47
+ });
48
+ it("supports a custom show password label", function () {
49
+ var getByLabelText = render(React.createElement(PasswordFieldCustomLabels, null)).getByLabelText;
50
+ expect(getByLabelText("Disclose password")).toBeTruthy();
51
+ });
52
+ });
53
+ //# sourceMappingURL=PasswordField.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordField.test.js","sourceRoot":"","sources":["../../../__tests__/forms/PasswordField.test.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -26,6 +26,7 @@ export * from "./src/forms/DateField";
26
26
  export * from "./src/forms/DOBField";
27
27
  export * from "./src/forms/Dropzone";
28
28
  export * from "./src/forms/Field";
29
+ export * from "./src/forms/PasswordField";
29
30
  export * from "./src/forms/PhoneField";
30
31
  export * from "./src/forms/PhoneMask";
31
32
  export * from "./src/forms/HouseholdMemberForm";
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ export * from "./src/forms/DateField";
31
31
  export * from "./src/forms/DOBField";
32
32
  export * from "./src/forms/Dropzone";
33
33
  export * from "./src/forms/Field";
34
+ export * from "./src/forms/PasswordField";
34
35
  export * from "./src/forms/PhoneField";
35
36
  export * from "./src/forms/PhoneMask";
36
37
  export * from "./src/forms/HouseholdMemberForm";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { FieldProps } from "./Field";
3
+ export interface PasswordFieldProps extends Omit<FieldProps, "type" | "postInputContent" | "className"> {
4
+ showPasswordLabel?: string;
5
+ checkboxDataTestId?: string;
6
+ className?: string;
7
+ fieldClassName?: string;
8
+ }
9
+ declare const PasswordField: (props: PasswordFieldProps) => React.JSX.Element;
10
+ export { PasswordField as default, PasswordField };
@@ -0,0 +1,40 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import * as React from "react";
24
+ import { useState } from "react";
25
+ import { Field } from "./Field";
26
+ var PasswordField = function (props) {
27
+ var _a = props.showPasswordLabel, showPasswordLabel = _a === void 0 ? "Show password" : _a, checkboxDataTestId = props.checkboxDataTestId, className = props.className, fieldClassName = props.fieldClassName, fieldProps = __rest(props, ["showPasswordLabel", "checkboxDataTestId", "className", "fieldClassName"]);
28
+ var classes = ["password-field"];
29
+ if (className) {
30
+ classes.push(className);
31
+ }
32
+ var _b = useState(false), visible = _b[0], setVisible = _b[1];
33
+ var idOrName = props.id || props.name;
34
+ var checkboxIdOrName = "".concat(idOrName, "-show-password");
35
+ return (React.createElement("div", { className: classes.join(" ") },
36
+ React.createElement(Field, __assign({}, fieldProps, { className: fieldClassName, type: visible ? "text" : "password" })),
37
+ React.createElement(Field, { type: "checkbox", id: checkboxIdOrName, name: checkboxIdOrName, label: showPasswordLabel, onChange: function () { return setVisible(function (prevVisible) { return !prevVisible; }); }, dataTestId: checkboxDataTestId })));
38
+ };
39
+ export { PasswordField as default, PasswordField };
40
+ //# sourceMappingURL=PasswordField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordField.js","sourceRoot":"","sources":["../../../src/forms/PasswordField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,KAAK,EAAc,MAAM,SAAS,CAAA;AAU3C,IAAM,aAAa,GAAG,UAAC,KAAyB;IAE5C,IAAA,KAKE,KAAK,kBAL4B,EAAnC,iBAAiB,mBAAG,eAAe,KAAA,EACnC,kBAAkB,GAIhB,KAAK,mBAJW,EAClB,SAAS,GAGP,KAAK,UAHE,EACT,cAAc,GAEZ,KAAK,eAFO,EACX,UAAU,UACX,KAAK,EANH,0EAML,CADc,CACN;IAET,IAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAElC,IAAI,SAAS,EAAE;QACb,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;KACxB;IAEK,IAAA,KAAwB,QAAQ,CAAC,KAAK,CAAC,EAAtC,OAAO,QAAA,EAAE,UAAU,QAAmB,CAAA;IAE7C,IAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAA;IACvC,IAAM,gBAAgB,GAAG,UAAG,QAAQ,mBAAgB,CAAA;IAEpD,OAAO,CACL,6BAAK,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,oBAAC,KAAK,eAAK,UAAU,IAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI;QACzF,oBAAC,KAAK,IACJ,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,gBAAgB,EACpB,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,cAAM,OAAA,UAAU,CAAC,UAAC,WAAW,IAAK,OAAA,CAAC,WAAW,EAAZ,CAAY,CAAC,EAAzC,CAAyC,EACzD,UAAU,EAAE,kBAAkB,GAC9B,CACE,CACP,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ declare const _default: {
3
+ title: string;
4
+ decorators: ((storyFn: any) => React.JSX.Element)[];
5
+ };
6
+ export default _default;
7
+ export declare const PasswordFieldDefault: () => React.JSX.Element;
8
+ export declare const PasswordFieldWithError: () => React.JSX.Element;
9
+ export declare const PasswordFieldWithNote: () => React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { useForm } from "react-hook-form";
3
+ import { PasswordField } from "./PasswordField";
4
+ export default {
5
+ title: "Forms/PasswordField",
6
+ decorators: [function (storyFn) { return React.createElement("div", { style: { padding: "1rem" } }, storyFn()); }],
7
+ };
8
+ export var PasswordFieldDefault = function () {
9
+ var register = useForm({ mode: "onChange" }).register;
10
+ return React.createElement(PasswordField, { id: "password-1", register: register, name: "password", label: "Password" });
11
+ };
12
+ export var PasswordFieldWithError = function () {
13
+ var register = useForm({ mode: "onChange" }).register;
14
+ return (React.createElement(PasswordField, { id: "password2", register: register, name: "password", label: "Password", error: true, errorMessage: "Password must be at least 8 characters" }));
15
+ };
16
+ export var PasswordFieldWithNote = function () {
17
+ var register = useForm({ mode: "onChange" }).register;
18
+ return (React.createElement(PasswordField, { id: "password-3", register: register, name: "password", label: "Password", note: "Must be at least 8 characters and include a number." }));
19
+ };
20
+ //# sourceMappingURL=PasswordField.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordField.stories.js","sourceRoot":"","sources":["../../../src/forms/PasswordField.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,eAAe;IACb,KAAK,EAAE,qBAAqB;IAC5B,UAAU,EAAE,CAAC,UAAC,OAAY,IAAK,OAAA,6BAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAG,OAAO,EAAE,CAAO,EAAlD,CAAkD,CAAC;CACnF,CAAA;AAED,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAC1B,IAAA,QAAQ,GAAK,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,SAAlC,CAAkC;IAClD,OAAO,oBAAC,aAAa,IAAC,EAAE,EAAC,YAAY,EAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAI,CAAA;AACnG,CAAC,CAAA;AAED,MAAM,CAAC,IAAM,sBAAsB,GAAG;IAC5B,IAAA,QAAQ,GAAK,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,SAAlC,CAAkC;IAClD,OAAO,CACL,oBAAC,aAAa,IACZ,EAAE,EAAC,WAAW,EACd,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,IAAI,EACX,YAAY,EAAE,wCAAwC,GACtD,CACH,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,IAAM,qBAAqB,GAAG;IAC3B,IAAA,QAAQ,GAAK,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,SAAlC,CAAkC;IAClD,OAAO,CACL,oBAAC,aAAa,IACZ,EAAE,EAAC,YAAY,EACf,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,qDAAqD,GAC3D,CACH,CAAA;AACH,CAAC,CAAA"}
package/index.ts CHANGED
@@ -35,6 +35,7 @@ export * from "./src/forms/DateField"
35
35
  export * from "./src/forms/DOBField"
36
36
  export * from "./src/forms/Dropzone"
37
37
  export * from "./src/forms/Field"
38
+ export * from "./src/forms/PasswordField"
38
39
  export * from "./src/forms/PhoneField"
39
40
  export * from "./src/forms/PhoneMask"
40
41
  export * from "./src/forms/HouseholdMemberForm"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloom-housing/ui-components",
3
- "version": "14.0.2",
3
+ "version": "14.1.0",
4
4
  "author": "Sean Albert <sean.albert@exygy.com>",
5
5
  "description": "Shared user interface components for Bloom affordable housing system",
6
6
  "homepage": "https://github.com/bloom-housing/ui-components",
@@ -169,7 +169,7 @@
169
169
  }
170
170
  },
171
171
  "lint-staged": {
172
- "*.{js,ts,tsx}": "eslint --max-warnings 0"
172
+ "!(*.stories).{js,ts,tsx}": "eslint --max-warnings 0"
173
173
  },
174
174
  "resolutions": {
175
175
  "react": "19.2.3",
@@ -0,0 +1,40 @@
1
+ import React from "react"
2
+ import { useForm } from "react-hook-form"
3
+ import { PasswordField } from "./PasswordField"
4
+
5
+ export default {
6
+ title: "Forms/PasswordField",
7
+ decorators: [(storyFn: any) => <div style={{ padding: "1rem" }}>{storyFn()}</div>],
8
+ }
9
+
10
+ export const PasswordFieldDefault = () => {
11
+ const { register } = useForm({ mode: "onChange" })
12
+ return <PasswordField id="password-1" register={register} name={"password"} label={"Password"} />
13
+ }
14
+
15
+ export const PasswordFieldWithError = () => {
16
+ const { register } = useForm({ mode: "onChange" })
17
+ return (
18
+ <PasswordField
19
+ id="password2"
20
+ register={register}
21
+ name={"password"}
22
+ label={"Password"}
23
+ error={true}
24
+ errorMessage={"Password must be at least 8 characters"}
25
+ />
26
+ )
27
+ }
28
+
29
+ export const PasswordFieldWithNote = () => {
30
+ const { register } = useForm({ mode: "onChange" })
31
+ return (
32
+ <PasswordField
33
+ id="password-3"
34
+ register={register}
35
+ name={"password"}
36
+ label={"Password"}
37
+ note={"Must be at least 8 characters and include a number."}
38
+ />
39
+ )
40
+ }
@@ -0,0 +1,48 @@
1
+ import * as React from "react"
2
+ import { useState } from "react"
3
+ import { Field, FieldProps } from "./Field"
4
+
5
+ export interface PasswordFieldProps
6
+ extends Omit<FieldProps, "type" | "postInputContent" | "className"> {
7
+ showPasswordLabel?: string
8
+ checkboxDataTestId?: string
9
+ className?: string
10
+ fieldClassName?: string
11
+ }
12
+
13
+ const PasswordField = (props: PasswordFieldProps) => {
14
+ const {
15
+ showPasswordLabel = "Show password",
16
+ checkboxDataTestId,
17
+ className,
18
+ fieldClassName,
19
+ ...fieldProps
20
+ } = props
21
+
22
+ const classes = ["password-field"]
23
+
24
+ if (className) {
25
+ classes.push(className)
26
+ }
27
+
28
+ const [visible, setVisible] = useState(false)
29
+
30
+ const idOrName = props.id || props.name
31
+ const checkboxIdOrName = `${idOrName}-show-password`
32
+
33
+ return (
34
+ <div className={classes.join(" ")}>
35
+ <Field {...fieldProps} className={fieldClassName} type={visible ? "text" : "password"} />
36
+ <Field
37
+ type="checkbox"
38
+ id={checkboxIdOrName}
39
+ name={checkboxIdOrName}
40
+ label={showPasswordLabel}
41
+ onChange={() => setVisible((prevVisible) => !prevVisible)}
42
+ dataTestId={checkboxDataTestId}
43
+ />
44
+ </div>
45
+ )
46
+ }
47
+
48
+ export { PasswordField as default, PasswordField }
@@ -412,3 +412,10 @@ progress,
412
412
  @apply bg-primary;
413
413
  transition: width 0.25s;
414
414
  }
415
+
416
+ .password-field {
417
+ margin-block-end: 1.25rem;
418
+ * > &:last-child {
419
+ margin-block-end: 0;
420
+ }
421
+ }