@bloom-housing/ui-components 4.2.2-alpha.3 → 4.2.2-alpha.30

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 (65) hide show
  1. package/CHANGELOG.md +273 -0
  2. package/README.md +10 -4
  3. package/index.ts +14 -10
  4. package/package.json +6 -4
  5. package/scripts/generate-translations.ts +60 -0
  6. package/src/actions/Button.docs.mdx +76 -0
  7. package/src/actions/Button.scss +58 -61
  8. package/src/authentication/timeout.tsx +1 -0
  9. package/src/blocks/DashBlock.tsx +5 -3
  10. package/src/blocks/DashBlocks.scss +4 -1
  11. package/src/global/app-css.scss +7 -0
  12. package/src/global/markdown.scss +20 -0
  13. package/src/global/mixins.scss +66 -49
  14. package/src/global/tables.scss +236 -58
  15. package/src/global/text.scss +11 -3
  16. package/src/global/tokens/borders.scss +15 -0
  17. package/src/global/tokens/colors.scss +64 -0
  18. package/src/global/tokens/fonts.scss +45 -0
  19. package/src/global/tokens/screens.scss +6 -0
  20. package/src/global/tokens/sizes.scss +48 -0
  21. package/src/headers/Heading.tsx +2 -0
  22. package/src/headers/PageHeader.docs.mdx +45 -0
  23. package/src/headers/PageHeader.scss +30 -17
  24. package/src/headers/PageHeader.tsx +2 -10
  25. package/src/headers/SiteHeader.tsx +7 -1
  26. package/src/helpers/MultiLineAddress.tsx +37 -0
  27. package/src/helpers/OneLineAddress.tsx +21 -0
  28. package/src/helpers/tableSummaries.tsx +34 -23
  29. package/src/locales/es.json +165 -33
  30. package/src/locales/general.json +18 -9
  31. package/src/locales/tl.json +655 -1
  32. package/src/locales/vi.json +165 -33
  33. package/src/locales/zh.json +165 -33
  34. package/src/navigation/FooterNav.scss +9 -3
  35. package/src/overlays/Drawer.tsx +11 -3
  36. package/src/overlays/Modal.tsx +16 -7
  37. package/src/overlays/Overlay.tsx +4 -3
  38. package/src/page_components/ApplicationTimeline.scss +36 -0
  39. package/src/page_components/ApplicationTimeline.tsx +33 -0
  40. package/src/page_components/forgot-password/FormForgotPassword.tsx +5 -4
  41. package/src/page_components/listing/AdditionalFees.tsx +38 -31
  42. package/src/page_components/listing/ListingCard.scss +12 -0
  43. package/src/page_components/listing/ListingCard.tsx +5 -3
  44. package/src/page_components/listing/ListingMap.tsx +8 -3
  45. package/src/page_components/listing/UnitTables.tsx +19 -18
  46. package/src/page_components/listing/listing_sidebar/Contact.tsx +110 -0
  47. package/src/page_components/listing/listing_sidebar/ContactAddress.tsx +41 -0
  48. package/src/page_components/listing/listing_sidebar/GetApplication.tsx +35 -15
  49. package/src/page_components/listing/listing_sidebar/QuantityRowSection.tsx +46 -0
  50. package/src/page_components/listing/listing_sidebar/SubmitApplication.tsx +52 -57
  51. package/src/page_components/listing/listing_sidebar/events/EventSection.tsx +3 -2
  52. package/src/page_components/sign-in/FormSignIn.tsx +2 -1
  53. package/src/page_components/sign-in/ResendConfirmationModal.tsx +106 -0
  54. package/src/prototypes/Swatch.tsx +10 -0
  55. package/src/tables/CategoryTable.tsx +33 -0
  56. package/src/tables/GroupedTable.tsx +5 -5
  57. package/src/tables/MinimalTable.tsx +12 -2
  58. package/src/tables/StackedTable.tsx +38 -26
  59. package/src/tables/StandardTable.tsx +26 -10
  60. package/tailwind.config.js +76 -81
  61. package/tailwind.tosass.js +2 -1
  62. package/src/helpers/address.tsx +0 -46
  63. package/src/page_components/listing/listing_sidebar/LeasingAgent.tsx +0 -72
  64. package/src/page_components/listing/listing_sidebar/SidebarAddress.tsx +0 -56
  65. package/src/page_components/listing/listing_sidebar/Waitlist.tsx +0 -49
@@ -1,59 +1,58 @@
1
1
  @import "../global/mixins.scss";
2
2
 
3
3
  .button {
4
- @apply relative;
5
- @apply rounded;
6
- @apply px-6;
7
- @apply py-4;
8
- @apply text-lg;
9
- @apply text-center;
10
- @apply uppercase;
11
- @apply font-alt-sans;
12
- @apply inline-block;
13
- @apply tracking-widest;
14
- @apply text-sm;
15
- @apply font-bold;
16
- @apply leading-snug;
4
+ position: relative;
5
+ border-radius: var(--normal-rounded, var(--bloom-rounded));
6
+ padding: var(--normal-padding, var(--bloom-s4) var(--bloom-s6));
7
+ text-align: center;
8
+ text-transform: var(--label-transform, uppercase);
9
+ font-family: var(--label-font, var(--bloom-font-alt-sans));
10
+ display: inline-block;
11
+ letter-spacing: var(--label-letter-spacing, var(--bloom-letter-spacing-widest));
12
+ font-size: var(--normal-font-size, var(--bloom-font-size-sm));
13
+ font-weight: var(--label-weight, bold);
14
+ line-height: var(--bloom-line-height-snug);
17
15
 
18
16
  &:focus {
19
17
  outline: none;
20
- box-shadow: 0 0 0 2px #fff, 0 0 3px 4px $tailwind-accent-cool;
18
+ box-shadow: 0 0 0 2px #fff, 0 0 3px 4px var(--bloom-color-accent-cool);
21
19
  }
22
20
 
23
21
  &:hover {
24
- @apply border-primary-dark;
22
+ border-color: var(--bloom-color-primary-dark);
25
23
  }
26
24
 
27
25
  &:disabled {
28
26
  pointer-events: none;
29
- @apply bg-white;
30
- @apply border-gray-450;
31
- @apply text-gray-450;
27
+ background-color: var(--bloom-color-white);
28
+ border-color: var(--bloom-color-gray-450);
29
+ color: var(--bloom-color-gray-450);
32
30
  }
33
31
 
34
32
  &.is-secondary {
35
- @apply border-gray-700;
36
- @apply text-gray-700;
33
+ border-color: var(--bloom-color-gray-700);
34
+ color: var(--bloom-color-gray-700);
37
35
 
38
36
  &:hover {
39
- @apply bg-gray-700;
40
- @apply text-white;
37
+ background-color: var(--bloom-color-gray-700);
38
+ color: var(--bloom-color-white);
41
39
  }
42
40
  }
43
41
 
44
42
  &.is-small {
45
- @apply text-xs;
46
- @apply px-6;
47
- @apply py-3;
43
+ border-radius: var(--small-rounded, var(--bloom-rounded));
44
+ padding: var(--small-padding, var(--bloom-s3) var(--bloom-s6));
45
+ font-size: var(--small-font-size, var(--bloom-font-size-xs));
48
46
  }
49
47
 
50
48
  &.is-big {
51
- @apply px-6;
52
- @apply py-6;
49
+ border-radius: var(--big-rounded, var(--bloom-rounded));
50
+ padding: var(--big-padding, var(--bloom-s6));
51
+ font-size: var(--big-font-size, var(--bloom-font-size-sm));
53
52
  }
54
53
 
55
54
  &.is-normal-case {
56
- @apply normal-case;
55
+ text-transform: none;
57
56
  }
58
57
 
59
58
  &.is-unstyled {
@@ -62,74 +61,72 @@
62
61
 
63
62
  &.is-unstyled,
64
63
  &.is-inline {
65
- @apply normal-case;
66
- @apply border-0;
67
- @apply p-0;
68
- @apply font-sans;
69
- @apply tracking-normal;
70
- @apply font-normal;
71
- @apply underline;
72
- @apply m-4;
73
- @apply text-tiny;
64
+ text-transform: none;
65
+ border: none;
66
+ padding: 0;
67
+ font-family: var(--bloom-font-sans);
68
+ letter-spacing: normal;
69
+ font-weight: 400;
70
+ text-decoration: underline;
71
+ margin: var(--bloom-s4);
72
+ font-size: var(--bloom-font-size-tiny);
74
73
 
75
74
  &:hover {
76
- @apply text-primary;
75
+ color: var(--bloom-color-primary);
77
76
  background: transparent;
78
77
  }
79
78
  }
80
79
 
81
80
  &.is-inline {
82
- @apply text-primary;
83
- @apply font-semibold;
84
- @apply text-tiny;
85
- @apply m-0;
86
- @apply no-underline;
81
+ color: var(--bloom-color-primary);
82
+ font-weight: 600;
83
+ font-size: var(--bloom-font-size-tiny);
84
+ margin: 0;
85
+ text-decoration: none;
87
86
 
88
87
  &.has-icon-left {
89
88
  .button__icon {
90
- @apply mr-1;
89
+ margin-right: var(--bloom-s1);
91
90
  }
92
91
  }
93
92
  &.has-icon-right {
94
93
  .button__icon {
95
- @apply ml-1;
94
+ margin-left: var(--bloom-s1);
96
95
  }
97
96
  }
98
97
  }
99
98
 
100
99
  &.has-icon-left {
101
100
  .button__icon {
102
- @apply mr-3;
101
+ margin-right: var(--bloom-s3);
103
102
  }
104
103
  }
105
104
  &.has-icon-right {
106
105
  .button__icon {
107
- @apply ml-3;
106
+ margin-left: var(--bloom-s3);
108
107
  }
109
108
  }
110
109
 
111
110
  &.is-text-caps {
112
- @apply text-primary-dark;
113
- @apply normal-case;
114
- @apply border-0;
115
- @apply p-0;
116
- @apply font-sans;
117
- @apply tracking-normal;
118
- @apply font-normal;
119
- @apply underline;
120
- @apply m-4;
121
- @apply uppercase;
122
- @apply text-tiny;
123
- @apply block;
111
+ color: var(--bloom-color-primary-dark);
112
+ border: none;
113
+ padding: 0;
114
+ font-family: var(--bloom-font-sans);
115
+ letter-spacing: normal;
116
+ text-decoration: underline;
117
+ margin: var(--bloom-s4);
118
+ text-transform: uppercase;
119
+ font-size: var(--bloom-font-size-tiny);
120
+ display: block;
124
121
 
125
122
  &:hover {
126
- @apply text-primary-dark;
123
+ color: var(--bloom-color-primary-dark);
127
124
  background: transparent;
128
125
  }
129
126
  }
130
127
 
131
128
  &.is-fullwidth {
132
- @apply w-full;
129
+ width: 100%;
133
130
  }
134
131
 
135
132
  &.is-loading {
@@ -98,6 +98,7 @@ export const IdleTimeout: FunctionComponent<IdleTimeoutProps> = ({
98
98
  ariaDescription={promptText}
99
99
  actions={modalActions}
100
100
  hideCloseIcon
101
+ role="alertdialog"
101
102
  >
102
103
  {promptText}
103
104
  </Modal>
@@ -1,5 +1,6 @@
1
- import React from "react"
1
+ import React, { useContext } from "react"
2
2
  import "./DashBlocks.scss"
3
+ import { NavigationContext } from "../config/NavigationContext"
3
4
 
4
5
  interface DashBlockProps {
5
6
  href?: string
@@ -10,6 +11,7 @@ interface DashBlockProps {
10
11
  dataTestId?: string
11
12
  }
12
13
  const DashBlock = (props: DashBlockProps) => {
14
+ const { LinkComponent } = useContext(NavigationContext)
13
15
  const { href, title, subtitle, icon, children } = props
14
16
  let content, wrapper
15
17
  if (children) {
@@ -24,9 +26,9 @@ const DashBlock = (props: DashBlockProps) => {
24
26
  )
25
27
  if (href) {
26
28
  wrapper = (
27
- <a href={href} className="dash-item">
29
+ <LinkComponent href={href} className="dash-item">
28
30
  {header}
29
- </a>
31
+ </LinkComponent>
30
32
  )
31
33
  } else {
32
34
  wrapper = (
@@ -1,5 +1,6 @@
1
1
  .dash-blocks {
2
2
  @apply w-full;
3
+ @apply mb-8;
3
4
 
4
5
  @screen md {
5
6
  @apply flex;
@@ -8,6 +9,7 @@
8
9
  }
9
10
 
10
11
  .dash-block {
12
+ align-self: stretch;
11
13
  @screen md {
12
14
  @apply px-2;
13
15
  flex: 50%;
@@ -24,13 +26,14 @@
24
26
  @apply bg-white;
25
27
  @apply p-4;
26
28
  @apply pt-8;
29
+ @apply pb-8;
27
30
  @apply text-tiny;
28
31
 
29
32
  @screen md {
30
33
  @apply rounded-lg;
31
34
  @apply border;
32
35
  @apply p-8;
33
- @apply mb-8;
36
+ @apply h-full;
34
37
  }
35
38
 
36
39
  p {
@@ -1,3 +1,10 @@
1
+ /* Design Tokens: */
2
+ @import "tokens/borders.scss";
3
+ @import "tokens/colors.scss";
4
+ @import "tokens/fonts.scss";
5
+ @import "tokens/screens.scss";
6
+ @import "tokens/sizes.scss";
7
+
1
8
  html {
2
9
  @apply antialiased;
3
10
  }
@@ -30,4 +30,24 @@
30
30
  list-style: disc;
31
31
  @apply ml-6;
32
32
  }
33
+
34
+ &.markdown-informational {
35
+ font-size: 0.9em;
36
+ @apply text-gray-750;
37
+
38
+ h3 {
39
+ @apply font-sans;
40
+ @apply font-bold;
41
+ @apply text-base;
42
+ @apply text-black;
43
+ }
44
+
45
+ li {
46
+ @apply mb-4;
47
+ }
48
+
49
+ a {
50
+ @apply underline;
51
+ }
52
+ }
33
53
  }
@@ -13,42 +13,45 @@
13
13
 
14
14
  // Adds full screen image to pseudo element
15
15
  @mixin overlay-image() {
16
- @apply block;
17
- @apply absolute;
18
- @apply inset-0;
16
+ display: block;
17
+ position: absolute;
18
+ top: 0px;
19
+ right: 0px;
20
+ bottom: 0px;
21
+ left: 0px;
19
22
  content: "";
20
23
  z-index: 2;
21
24
  }
22
25
 
23
26
  @mixin clearfix() {
24
27
  &::after {
25
- @apply table;
26
- @apply clear-both;
28
+ display: table;
29
+ clear: both;
27
30
  content: "";
28
31
  }
29
32
  }
30
33
 
31
34
  @mixin has-toggle() {
32
35
  &:after {
33
- @apply font-bold;
34
- @apply inline-block;
35
- @apply ml-2;
36
- @apply mr-2;
37
- @apply text-sm;
36
+ font-weight: bold;
37
+ display: inline-block;
38
+ margin-left: var(--bloom-s2);
39
+ margin-right: var(--bloom-s2);
40
+ font-size: var(--bloom-font-size-sm);
38
41
  content: "⌃";
39
42
  transform: rotate(180deg) translateY(2px);
40
43
  }
41
44
  &[aria-expanded="true"]:after {
42
- @apply mr-5;
45
+ margin-right: var(--bloom-s5);
43
46
  transform: rotate(0deg) translateY(2px);
44
47
  }
45
48
  }
46
49
 
47
50
  @mixin has-image-skeleton() {
48
- @apply bg-gray-500;
51
+ background-color: var(--bloom-color-gray-500);
49
52
 
50
53
  &::before {
51
- @apply float-left;
54
+ float: left;
52
55
  content: "";
53
56
  width: 1px;
54
57
  margin-left: -1px;
@@ -58,104 +61,118 @@
58
61
 
59
62
  &::after {
60
63
  /* to clear float */
61
- @apply table;
62
- @apply clear-both;
64
+ display: table;
65
+ clear: both;
63
66
  content: "";
64
67
  }
65
68
  }
66
69
 
67
70
  @mixin filled-appearances() {
68
71
  &.is-primary {
69
- @apply bg-primary;
70
- @apply border-primary;
71
- @apply text-white;
72
+ background-color: var(--primary-appearance-background-color, var(--bloom-color-primary));
73
+ border-color: var(--primary-appearance-border-color, var(--bloom-color-primary));
74
+ color: var(--primary-appearance-label-color, var(--bloom-color-white));
72
75
 
73
76
  &:hover {
74
- @apply bg-primary-dark;
75
- @apply border-primary-dark;
77
+ background-color: var(
78
+ --primary-appearance-hover-background-color,
79
+ var(--bloom-color-primary-dark)
80
+ );
81
+ border-color: var(--primary-appearance-hover-border-color, var(--bloom-color-primary-dark));
82
+ color: var(--primary-appearance-hover-label-color, var(--bloom-color-white));
76
83
  }
77
84
  }
78
85
 
79
86
  &.is-success {
80
- @apply bg-success;
81
- @apply border-success;
82
- @apply text-white;
87
+ background-color: var(--success-appearance-background-color, var(--bloom-color-success));
88
+ border-color: var(--success-appearance-border-color, var(--bloom-color-success));
89
+ color: var(--success-appearance-label-color, var(--bloom-color-white));
83
90
 
84
91
  &:hover {
85
- @apply bg-success-dark;
92
+ background-color: var(
93
+ --success-appearance-hover-background-color,
94
+ var(--bloom-color-success-dark)
95
+ );
96
+ border-color: var(--success-appearance-hover-border-color, var(--bloom-color-success));
97
+ color: var(--success-appearance-hover-label-color, var(--bloom-color-white));
86
98
  }
87
99
  }
88
100
 
89
101
  &.is-alert {
90
- @apply bg-alert;
91
- @apply border-alert;
92
- @apply text-white;
102
+ background-color: var(--bloom-color-alert);
103
+ border-color: var(--bloom-color-alert);
104
+ color: var(--bloom-color-white);
93
105
 
94
106
  &:hover {
95
- @apply bg-alert-dark;
96
- @apply border-alert-dark;
107
+ background-color: var(--bloom-color-alert-dark);
108
+ border-color: var(--bloom-color-alert-dark);
97
109
  }
98
110
  }
99
111
 
100
112
  &.is-warning {
101
- @apply bg-warn;
102
- @apply border-warn;
103
- @apply text-gray-800;
113
+ background-color: var(--bloom-color-warn);
114
+ border-color: var(--bloom-color-warn);
115
+ color: var(--bloom-color-gray-800);
104
116
 
105
117
  &:hover {
106
- @apply text-white;
107
- @apply bg-warn-dark;
108
- @apply border-warn-dark;
118
+ color: var(--bloom-color-white);
119
+ background-color: var(--bloom-color-warn-dark);
120
+ border-color: var(--bloom-color-warn-dark);
109
121
  }
110
122
  }
111
123
 
112
124
  &.is-borderless {
113
- @apply text-primary-darker;
125
+ color: var(--bloom-color-primary-darker);
114
126
  border-color: transparent;
115
127
  background: transparent;
116
128
 
117
129
  &:hover {
118
130
  background: transparent;
119
- @apply text-primary-darker;
131
+ border-color: transparent;
132
+ color: var(--bloom-color-primary-darker);
120
133
  }
121
134
  }
122
135
  }
123
136
 
124
137
  @mixin outlined-appearances() {
125
- @apply bg-white;
126
- @apply text-primary;
127
- @apply border-2;
128
- @apply border-primary;
138
+ background-color: var(--bloom-color-white);
139
+ color: var(--bloom-color-primary);
140
+ border-width: var(--bloom-border-2);
141
+ border-color: var(--bloom-color-primary);
129
142
 
130
143
  &:hover {
131
- @apply bg-primary-dark;
132
- @apply text-white;
144
+ background-color: var(
145
+ --outlined-appearance-hover-background-color,
146
+ var(--bloom-color-primary-dark)
147
+ );
148
+ border-color: var(--outlined-appearance-hover-border-color, var(--bloom-color-primary));
149
+ color: var(--outlined-appearance-hover-label-color, var(--bloom-color-white));
133
150
  }
134
151
 
135
152
  &.is-outlined {
136
153
  background: transparent;
137
154
 
138
155
  &.is-success {
139
- @apply text-success;
156
+ color: var(--bloom-color-success);
140
157
 
141
158
  &:hover {
142
- @apply text-white;
159
+ color: var(--bloom-color-white);
143
160
  }
144
161
  }
145
162
 
146
163
  &.is-alert {
147
- @apply text-alert;
164
+ color: var(--bloom-color-alert);
148
165
 
149
166
  &:hover {
150
- @apply text-white;
167
+ color: var(--bloom-color-white);
151
168
  }
152
169
  }
153
170
 
154
171
  &.is-warning {
155
- @apply text-gray-800;
172
+ color: var(--bloom-color-gray-800);
156
173
 
157
174
  &:hover {
158
- @apply text-white;
175
+ color: var(--bloom-color-white);
159
176
  }
160
177
  }
161
178
  }