@bloom-housing/ui-components 5.1.1-alpha.7 → 6.0.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,82 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [6.0.0](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@5.1.0...@bloom-housing/ui-components@6.0.0) (2022-08-25)
7
+
8
+
9
+ * 2022-08-24 release (#2993) ([6f1deac](https://github.com/bloom-housing/bloom/commit/6f1deac5370fa8286b051b09431d153d22901b3a)), closes [#2993](https://github.com/bloom-housing/bloom/issues/2993) [#2821](https://github.com/bloom-housing/bloom/issues/2821) [#2764](https://github.com/bloom-housing/bloom/issues/2764) [#2767](https://github.com/bloom-housing/bloom/issues/2767) [#2787](https://github.com/bloom-housing/bloom/issues/2787) [#2769](https://github.com/bloom-housing/bloom/issues/2769) [#2781](https://github.com/bloom-housing/bloom/issues/2781) [#2827](https://github.com/bloom-housing/bloom/issues/2827) [Issue#2827](https://github.com/Issue/issues/2827) [#2788](https://github.com/bloom-housing/bloom/issues/2788) [#2842](https://github.com/bloom-housing/bloom/issues/2842) [#2822](https://github.com/bloom-housing/bloom/issues/2822) [#2847](https://github.com/bloom-housing/bloom/issues/2847) [#2830](https://github.com/bloom-housing/bloom/issues/2830) [#2788](https://github.com/bloom-housing/bloom/issues/2788) [#2842](https://github.com/bloom-housing/bloom/issues/2842) [#2827](https://github.com/bloom-housing/bloom/issues/2827) [Issue#2827](https://github.com/Issue/issues/2827) [#2822](https://github.com/bloom-housing/bloom/issues/2822) [#2846](https://github.com/bloom-housing/bloom/issues/2846) [#2851](https://github.com/bloom-housing/bloom/issues/2851) [#2594](https://github.com/bloom-housing/bloom/issues/2594) [#2812](https://github.com/bloom-housing/bloom/issues/2812) [#2799](https://github.com/bloom-housing/bloom/issues/2799) [#2828](https://github.com/bloom-housing/bloom/issues/2828) [#2843](https://github.com/bloom-housing/bloom/issues/2843) [#2827](https://github.com/bloom-housing/bloom/issues/2827) [#2875](https://github.com/bloom-housing/bloom/issues/2875) [#2859](https://github.com/bloom-housing/bloom/issues/2859) [#2848](https://github.com/bloom-housing/bloom/issues/2848) [#2785](https://github.com/bloom-housing/bloom/issues/2785)
10
+
11
+
12
+ ### BREAKING CHANGES
13
+
14
+ * prop name change for header from "text" to "content"
15
+
16
+ * chore(release): version
17
+
18
+ - @bloom-housing/shared-helpers@5.0.1-alpha.2
19
+ - @bloom-housing/partners@5.0.1-alpha.2
20
+ - @bloom-housing/public@5.0.1-alpha.2
21
+ - @bloom-housing/ui-components@5.0.1-alpha.1
22
+
23
+
24
+
25
+
26
+
27
+ ## [5.1.1-alpha.12](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@5.1.1-alpha.11...@bloom-housing/ui-components@5.1.1-alpha.12) (2022-08-24)
28
+
29
+
30
+ ### Features
31
+
32
+ * show preference details on listing form ([#2989](https://github.com/bloom-housing/bloom/issues/2989)) ([b4b2b9e](https://github.com/bloom-housing/bloom/commit/b4b2b9ee75c4895ea5b0694dddbf0c8979c0e251))
33
+
34
+
35
+
36
+
37
+
38
+ ## [5.1.1-alpha.11](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@5.1.1-alpha.10...@bloom-housing/ui-components@5.1.1-alpha.11) (2022-08-23)
39
+
40
+
41
+ * refactor!: preferences & programs data model merged (#2904) ([8e027ff](https://github.com/bloom-housing/bloom/commit/8e027ff905118f36c61bc0f974231d9bb8911131)), closes [#2904](https://github.com/bloom-housing/bloom/issues/2904)
42
+
43
+
44
+ ### BREAKING CHANGES
45
+
46
+ * The preference and program entities have been merged into a single entity called MultiselectQuestion
47
+
48
+
49
+
50
+
51
+
52
+ ## [5.1.1-alpha.10](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@5.1.1-alpha.9...@bloom-housing/ui-components@5.1.1-alpha.10) (2022-08-23)
53
+
54
+ **Note:** Version bump only for package @bloom-housing/ui-components
55
+
56
+
57
+
58
+
59
+
60
+ ## [5.1.1-alpha.9](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@5.1.1-alpha.8...@bloom-housing/ui-components@5.1.1-alpha.9) (2022-08-22)
61
+
62
+
63
+ ### Bug Fixes
64
+
65
+ * add a11y linting tools and fix errors ([#2974](https://github.com/bloom-housing/bloom/issues/2974)) ([e583d12](https://github.com/bloom-housing/bloom/commit/e583d1283511c83dd48f48f934be9a7794a67e74))
66
+
67
+
68
+
69
+
70
+
71
+ ## [5.1.1-alpha.8](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@5.1.1-alpha.7...@bloom-housing/ui-components@5.1.1-alpha.8) (2022-08-18)
72
+
73
+
74
+ ### Features
75
+
76
+ * **expandabletext:** add classname to expandable text button ([#2965](https://github.com/bloom-housing/bloom/issues/2965)) ([6d4b8a7](https://github.com/bloom-housing/bloom/commit/6d4b8a7132825c1aa3abcc0368529557cb3d2647))
77
+
78
+
79
+
80
+
81
+
6
82
  ## [5.1.1-alpha.7](https://github.com/bloom-housing/bloom/compare/@bloom-housing/ui-components@5.1.1-alpha.6...@bloom-housing/ui-components@5.1.1-alpha.7) (2022-08-18)
7
83
 
8
84
 
package/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /* Actions */
2
2
  export * from "./src/actions/Button"
3
+ export * from "./src/actions/ButtonGroup"
3
4
  export * from "./src/actions/ExpandableText"
4
5
  export * from "./src/actions/LinkButton"
5
6
  export * from "./src/actions/LocalizedLink"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloom-housing/ui-components",
3
- "version": "5.1.1-alpha.7",
3
+ "version": "6.0.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/bloom/tree/master/shared/ui-components",
@@ -85,6 +85,7 @@
85
85
  "@types/react-dom": "^16.9.5",
86
86
  "@types/react-text-mask": "^5.4.6",
87
87
  "@types/react-transition-group": "^4.4.0",
88
+ "@types/sanitize-html": "^2.6.2",
88
89
  "ag-grid-community": "^26.0.0",
89
90
  "ag-grid-react": "^26.0.0",
90
91
  "aria-autocomplete": "^1.4.0",
@@ -106,9 +107,10 @@
106
107
  "react-tabs": "^3.2.2",
107
108
  "react-text-mask": "^5.4.3",
108
109
  "react-transition-group": "^4.4.1",
110
+ "sanitize-html": "^2.7.1",
109
111
  "tailwindcss": "2.2.10",
110
112
  "ts-jest": "^26.4.1",
111
113
  "typesafe-actions": "^5.1.0"
112
114
  },
113
- "gitHead": "fd80654f0c4e2b3449734cb6ac7927a078304f47"
115
+ "gitHead": "4144d01ef184f31f6fd2c943ee2487025170126c"
114
116
  }
@@ -0,0 +1,30 @@
1
+ import { Canvas, Story, ArgsTable } from "@storybook/addon-docs"
2
+ import { Swatch } from "../prototypes/Swatch"
3
+ import { ButtonGroup } from "./ButtonGroup"
4
+
5
+ # ButtonGroup
6
+
7
+ The button group component lets you place multiple buttons along a horizontal or vertical (mobile primarily) axis and group/space buttons according to some simple flex rules.
8
+
9
+ <Canvas>
10
+ <Story id="actions-button-group--two-columns" />
11
+ </Canvas>
12
+
13
+ <br />
14
+ <br />
15
+
16
+ ## Component Properties
17
+
18
+ <ArgsTable of={ButtonGroup} />
19
+
20
+ ## Theming Variables
21
+
22
+ You can apply CSS variables to the `.button-group` selector to customize the appearance of the component.
23
+
24
+ | Name | Type | Description | Default |
25
+ | -------------------------- | ----- | ----------------------------------------------------------------------------------- | --------------------------------------------------- |
26
+ | `--background-color` | Color | Background behind the buttons | <Swatch colorVar="--bloom-color-primary-lighter" /> |
27
+ | `--padding-block` | Size | The space around the buttons in the block (vertical) direction | `--bloom-s8` |
28
+ | `--padding-inline-desktop` | Size | The space around the buttons in the inline (horizontal) direction on larger screens | `--bloom-s16` |
29
+ | `--padding-inline-mobile` | Size | The space around the buttons in the inline (horizontal) direction on small screens | `--bloom-s4` |
30
+ | `--inner-button-gap` | Size | The gap between buttons whether in separate columns or within the same column | `--bloom-s3` |
@@ -0,0 +1,61 @@
1
+ .button-group {
2
+ --background-color: var(--bloom-color-primary-lighter);
3
+ --padding-block: var(--bloom-s8);
4
+ --padding-inline-desktop: var(--bloom-s16);
5
+ --padding-inline-mobile: var(--bloom-s4);
6
+ --inner-button-gap: var(--bloom-s3);
7
+
8
+ --padding-inline: var(--padding-inline-desktop);
9
+
10
+ @media (max-width: $screen-sm) {
11
+ --padding-inline: var(--padding-inline-mobile);
12
+ }
13
+
14
+ background-color: var(--background-color);
15
+ padding-block: var(--padding-block);
16
+ padding-inline: var(--padding-inline);
17
+ display: flex;
18
+ flex-wrap: wrap;
19
+ gap: var(--inner-button-gap);
20
+
21
+ & > .button-group__column {
22
+ display: flex;
23
+ gap: var(--inner-button-gap);
24
+
25
+ .button {
26
+ @media (max-width: $screen-sm) {
27
+ --normal-rounded: var(--small-rounded);
28
+ --normal-padding: var(--small-padding);
29
+ --normal-font-size: var(--small-font-size);
30
+ }
31
+ }
32
+ }
33
+
34
+ &.has-between-spacing {
35
+ justify-content: space-between;
36
+ }
37
+
38
+ &.has-even-spacing {
39
+ justify-content: space-evenly;
40
+ }
41
+
42
+ &.has-fullwidth-mobile-buttons {
43
+ &,
44
+ & > .button-group__column {
45
+ @media (max-width: $screen-sm) {
46
+ flex-direction: column;
47
+
48
+ .button {
49
+ width: 100%;
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ &.is-reversed {
56
+ &,
57
+ & > .button-group__column {
58
+ flex-direction: row-reverse;
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,42 @@
1
+ import React from "react"
2
+ import "./ButtonGroup.scss"
3
+
4
+ export enum ButtonGroupSpacing {
5
+ between = "between",
6
+ even = "even",
7
+ }
8
+
9
+ export interface ButtonGroupProps {
10
+ /** Pass either Button components in, or fragments which can contain one or more buttons */
11
+ columns: React.ReactNodeArray
12
+ /** Between spacing pushes the columns far apart, even spacing keeps them closer together */
13
+ spacing?: ButtonGroupSpacing
14
+ /** When true, buttons will collapse to a single column on small screens and go full-width */
15
+ fullwidthMobile?: boolean
16
+ /** When true, the flex ordering of columns will reverse (aka RTL) */
17
+ reversed?: boolean
18
+ }
19
+
20
+ const ButtonGroup = ({
21
+ spacing = ButtonGroupSpacing.between,
22
+ columns,
23
+ fullwidthMobile,
24
+ reversed,
25
+ }: ButtonGroupProps) => {
26
+ const spacingClassName = `has-${spacing}-spacing`
27
+ const classNames = ["button-group", spacingClassName]
28
+ if (fullwidthMobile) classNames.push("has-fullwidth-mobile-buttons")
29
+ if (reversed) classNames.push("is-reversed")
30
+
31
+ return (
32
+ <div className={classNames.join(" ")}>
33
+ {columns.map((column, index) => (
34
+ <div key={index} className="button-group__column">
35
+ {column}
36
+ </div>
37
+ ))}
38
+ </div>
39
+ )
40
+ }
41
+
42
+ export { ButtonGroup as default, ButtonGroup }
@@ -12,6 +12,7 @@ export interface ExpandableTextProps {
12
12
  readLess: string
13
13
  }
14
14
  markdownProps?: MarkdownOptions
15
+ buttonClassName?: string
15
16
  }
16
17
 
17
18
  const getText = (text: string, expanded: boolean, maxLength: number) => {
@@ -29,12 +30,18 @@ const getText = (text: string, expanded: boolean, maxLength: number) => {
29
30
  const moreLessButton = (
30
31
  expanded: boolean,
31
32
  setExpanded: (newValue: boolean) => void,
32
- strings: ExpandableTextProps["strings"]
33
+ strings: ExpandableTextProps["strings"],
34
+ buttonClassName: ExpandableTextProps["buttonClassName"]
33
35
  ) => {
36
+ const classes = ["button-toggle ml-4"]
37
+ if (buttonClassName) {
38
+ classes.push(buttonClassName)
39
+ }
40
+
34
41
  return (
35
- <span className="button-toggle" onClick={() => setExpanded(!expanded)}>
42
+ <button className={classes.join(" ")} onClick={() => setExpanded(!expanded)}>
36
43
  {expanded ? strings?.readLess : strings?.readMore}
37
- </span>
44
+ </button>
38
45
  )
39
46
  }
40
47
 
@@ -46,7 +53,7 @@ const ExpandableText = (props: ExpandableTextProps) => {
46
53
  if (!props.children) return null
47
54
 
48
55
  if (props.children.length > maxLength) {
49
- button = moreLessButton(expanded, setExpanded, props.strings)
56
+ button = moreLessButton(expanded, setExpanded, props.strings, props.buttonClassName)
50
57
  }
51
58
  return (
52
59
  <div className={`expandable-text ${props?.className}`}>
@@ -69,7 +69,6 @@
69
69
 
70
70
  @screen print {
71
71
  @apply py-2;
72
- @apply px-0;
73
72
  }
74
73
  }
75
74
 
@@ -87,13 +86,7 @@
87
86
  }
88
87
 
89
88
  .form-card__group {
90
- @screen md {
91
- @apply px-8;
92
- }
93
-
94
- @screen print {
95
- @apply px-0;
96
- }
89
+ @apply px-8;
97
90
  }
98
91
 
99
92
  .form-card__header {
@@ -26,6 +26,10 @@
26
26
  cursor: pointer;
27
27
  }
28
28
 
29
+ .media-card__header-container {
30
+ width: 100%;
31
+ }
32
+
29
33
  .media-card__icon-container {
30
34
  display: flex;
31
35
  justify-content: center;
@@ -16,13 +16,17 @@ const MediaCard = (props: MediaCardProps) => {
16
16
  if (props.className) wrapperClasses.push(props.className)
17
17
  return (
18
18
  <div className={wrapperClasses.join(" ")}>
19
- <span onClick={props.handleClick}>
19
+ <button
20
+ onClick={props.handleClick}
21
+ className={"media-card__header-container"}
22
+ aria-label={"Launch video"}
23
+ >
20
24
  <div className="media-card__header">
21
25
  <div className="media-card__icon-container">
22
26
  <Icon symbol={props.icon ?? faCirclePlay} size="2xl" fill="white" />
23
27
  </div>
24
28
  </div>
25
- </span>
29
+ </button>
26
30
  <div className="media-card__body">
27
31
  <h3 className="media-card__title">{props.title}</h3>
28
32
  <div className={"media-card__subtitle"}>{props.subtitle}</div>
@@ -13,6 +13,7 @@ const Form = ({ id, children, className, onSubmit }: FormProps) => {
13
13
  }
14
14
 
15
15
  return (
16
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
16
17
  <form id={id} className={className} onSubmit={onSubmit} onKeyPress={onKeyPress} noValidate>
17
18
  {children}
18
19
  </form>
@@ -104,7 +104,11 @@ const SiteHeader = (props: SiteHeaderProps) => {
104
104
  return (
105
105
  <>
106
106
  {option.iconSrc && isDesktop && (
107
- <img src={option.iconSrc} className={option.iconClassName} />
107
+ <img
108
+ src={option.iconSrc}
109
+ className={option.iconClassName}
110
+ alt={`${option.title} icon`}
111
+ />
108
112
  )}
109
113
  {option.title}
110
114
  </>
@@ -143,7 +147,7 @@ const SiteHeader = (props: SiteHeaderProps) => {
143
147
  }
144
148
  dropdownOptionKeyDown(event, index)
145
149
  }}
146
- data-test-id={`${option.title}-${index}`}
150
+ data-test-id={`${option.title}`}
147
151
  >
148
152
  {dropdownOptionContent(option)}
149
153
  </button>
@@ -297,7 +301,7 @@ const SiteHeader = (props: SiteHeaderProps) => {
297
301
  className={`navbar-link ${props.menuItemClassName && props.menuItemClassName}`}
298
302
  href={menuLink.href}
299
303
  key={`${menuLink.title}-${index}`}
300
- data-test-id={`${menuLink.title}-${index}`}
304
+ data-test-id={`${menuLink.title}`}
301
305
  >
302
306
  {menuContent}
303
307
  </LinkComponent>
@@ -336,7 +340,8 @@ const SiteHeader = (props: SiteHeaderProps) => {
336
340
  }}
337
341
  onMouseEnter={() => changeMenuShow(menuLink.title, activeMenus, setActiveMenus)}
338
342
  onMouseLeave={() => changeMenuShow(menuLink.title, activeMenus, setActiveMenus)}
339
- data-test-id={`${menuLink.title}-${index}`}
343
+ role={"button"}
344
+ data-test-id={`${menuLink.title}`}
340
345
  >
341
346
  {menuContent}
342
347
  </span>
@@ -345,6 +345,7 @@
345
345
  "application.programs.rentBasedOnIncome.flatRent.description": "I would like to apply for an affordable flat rent apartment, which has a set monthly rent amount that is below market rate. Note - applicants with Section 8 Mobile Housing Choice Vouchers (HCV) are welcome to apply.",
346
346
  "application.programs.rentBasedOnIncome.flatRent.label": "Affordable apartment with flat rent",
347
347
  "application.programs.rentBasedOnIncome.summary": "Flat Rent & Rent Based on Income",
348
+ "application.programs.selectBelow": "Please select all that apply:",
348
349
  "application.programs.servedInMilitary.doNotConsider.label": "No",
349
350
  "application.programs.servedInMilitary.servedInMilitary.label": "Yes",
350
351
  "application.programs.servedInMilitary.summary": "Veteran of the US Military",
@@ -909,6 +910,7 @@
909
910
  "t.preferNotToSay": "Prefer not to say",
910
911
  "t.preferences": "Preferences",
911
912
  "t.previous": "Previous",
913
+ "t.programs": "Programs",
912
914
  "t.propertyAmenities": "Property Amenities",
913
915
  "t.range": "%{from} to %{to}",
914
916
  "t.readLess": "read less",
@@ -9,7 +9,7 @@
9
9
 
10
10
  .progress-nav__item {
11
11
  @apply text-2xs;
12
- @apply px-2;
12
+ @apply px-1;
13
13
  @apply py-3;
14
14
  @apply relative;
15
15
  @apply text-center;
@@ -22,6 +22,7 @@
22
22
  @screen md {
23
23
  @apply text-sm;
24
24
  @apply p-0;
25
+ @apply px-2;
25
26
  }
26
27
 
27
28
  &:before {
@@ -71,7 +72,7 @@
71
72
  @apply top-0;
72
73
  }
73
74
 
74
- a {
75
+ .progress-nav__item-container {
75
76
  @apply text-black;
76
77
  @apply font-bold;
77
78
  }
@@ -85,13 +86,13 @@
85
86
  @apply top-0;
86
87
  }
87
88
 
88
- a {
89
+ .progress-nav__item-container {
89
90
  @apply pointer-events-none;
90
91
  @apply cursor-default;
91
92
  }
92
93
  }
93
94
 
94
- a {
95
+ .progress-nav__item-container {
95
96
  @apply pt-4;
96
97
  @apply pl-1;
97
98
  @apply text-gray-700;
@@ -27,10 +27,10 @@ const ProgressNavItem = (props: {
27
27
 
28
28
  return (
29
29
  <li className={`progress-nav__item ${bgColor}`}>
30
- <a aria-disabled={bgColor === "is-disabled"} href={"#"}>
30
+ <span aria-disabled={bgColor === "is-disabled"} className={"progress-nav__item-container"}>
31
31
  {srText}
32
32
  {props.label}
33
- </a>
33
+ </span>
34
34
  </li>
35
35
  )
36
36
  }
@@ -104,3 +104,10 @@
104
104
  @apply pb-4;
105
105
  @apply overflow-y-visible;
106
106
  }
107
+
108
+ .drawer__small {
109
+ width: 100%;
110
+ @screen md {
111
+ width: 45rem;
112
+ }
113
+ }
@@ -52,7 +52,6 @@
52
52
  max-height: calc(100vh - 200px);
53
53
  overflow-y: auto;
54
54
  }
55
-
56
55
  p {
57
56
  color: var(--content-font-color);
58
57
  }
@@ -39,6 +39,9 @@ const OverlayInner = (props: OverlayProps) => {
39
39
  onClick={(e) => {
40
40
  if (e.target === e.currentTarget) closeHandler()
41
41
  }}
42
+ onKeyPress={(e) => {
43
+ if (e.key === "Escape") closeHandler()
44
+ }}
42
45
  >
43
46
  <div className={`fixed-overlay__inner ${props.slim ? "fixed-overlay__inner-slim" : ""}`}>
44
47
  <FocusLock>{props.children}</FocusLock>
@@ -95,9 +95,9 @@ const FormForgotPassword = ({
95
95
  </Button>
96
96
  </div>
97
97
  <div className="text-center mt-6">
98
- <a href="#" onClick={() => router.back()}>
98
+ <Button onClick={() => router.back()} unstyled={true}>
99
99
  {t("t.cancel")}
100
- </a>
100
+ </Button>
101
101
  </div>
102
102
  </section>
103
103
  </Form>
@@ -1,4 +1,4 @@
1
- import React, { useState, useCallback, useEffect, useMemo } from "react"
1
+ import React, { useState, useCallback, useEffect } from "react"
2
2
  import "mapbox-gl/dist/mapbox-gl.css"
3
3
  import MapGL, { Marker } from "react-map-gl"
4
4
 
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import { Heading, HeaderType, HeadingProps } from "../../../headers/Heading"
2
+ import { Heading, HeadingProps } from "../../../headers/Heading"
3
3
 
4
4
  export interface SidebarBlockProps extends Omit<HeadingProps, "children" | "className"> {
5
5
  children: React.ReactNode
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import Heading from "../../../../headers/Heading"
2
+ import { Heading } from "../../../../headers/Heading"
3
3
 
4
4
  export type EventType = {
5
5
  timeString?: string
@@ -88,7 +88,7 @@ const FormSignIn = ({
88
88
 
89
89
  <aside className="float-right text-tiny font-semibold">
90
90
  <LinkComponent href="/forgot-password">
91
- <a>{t("authentication.signIn.forgotPassword")}</a>
91
+ {t("authentication.signIn.forgotPassword")}
92
92
  </LinkComponent>
93
93
  </aside>
94
94
 
@@ -31,7 +31,7 @@ export type FormSignInMFAControl = {
31
31
  const FormSignInMFAType = ({
32
32
  onSubmit,
33
33
  networkError,
34
- control: { errors, register, handleSubmit, setValue },
34
+ control: { errors, register, handleSubmit },
35
35
  emailOnClick,
36
36
  smsOnClick,
37
37
  }: FormSignInMFAProps) => {
@@ -3,6 +3,7 @@ import * as React from "react"
3
3
  export const Swatch = (props: { colorVar: string }) => (
4
4
  <span
5
5
  style={{ backgroundColor: `var(${props.colorVar})` }}
6
+ title={props.colorVar}
6
7
  className="w-6 border border-gray-500 inline-block"
7
8
  >
8
9
  &nbsp;
@@ -22,7 +22,6 @@ const GridCell = (props: GridCellProps) => {
22
22
 
23
23
  export interface GridSectionProps {
24
24
  title?: React.ReactNode
25
- edit?: string
26
25
  subtitle?: string
27
26
  description?: string
28
27
  tinted?: boolean
@@ -67,11 +66,6 @@ const GridSection = (props: GridSectionProps) => {
67
66
  {(props.title || props.subtitle) && (
68
67
  <header className={headerClasses.join(" ")}>
69
68
  {props.title && <h2 className="grid-section__title">{props.title}</h2>}
70
- {props.edit && (
71
- <span className="ml-auto">
72
- <a className="edit-link">{props.edit}</a>
73
- </span>
74
- )}
75
69
  {props.subtitle && <h3 className={subtitleClasses.join(" ")}>{props.subtitle}</h3>}
76
70
  {props.description && (
77
71
  <span className={"grid-section__description"}>{props.description}</span>