@bloom-housing/ui-components 2.0.0-pre-tailwind
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/.jest/setup-tests.js +24 -0
- package/CHANGELOG.md +20 -0
- package/README.md +195 -0
- package/index.ts +148 -0
- package/jest.config.js +41 -0
- package/package.json +98 -0
- package/public/images/alameda-logo-white.svg +1 -0
- package/public/images/arrow-down.png +0 -0
- package/public/images/arrow-down.svg +1 -0
- package/public/images/check.png +0 -0
- package/public/images/check.svg +11 -0
- package/public/images/eho-logo-white.svg +1 -0
- package/public/images/eho-logo.svg +1 -0
- package/public/images/logo_glyph.svg +11 -0
- package/src/actions/Button.scss +157 -0
- package/src/actions/Button.tsx +80 -0
- package/src/actions/ExpandableContent.tsx +29 -0
- package/src/actions/ExpandableText.scss +18 -0
- package/src/actions/ExpandableText.tsx +52 -0
- package/src/actions/LinkButton.tsx +30 -0
- package/src/actions/LocalizedLink.tsx +11 -0
- package/src/authentication/AuthContext.ts +327 -0
- package/src/authentication/RequireLogin.tsx +62 -0
- package/src/authentication/index.ts +5 -0
- package/src/authentication/timeout.tsx +127 -0
- package/src/authentication/token.ts +17 -0
- package/src/authentication/useRequireLoggedInUser.ts +19 -0
- package/src/blocks/ActionBlock.scss +108 -0
- package/src/blocks/ActionBlock.tsx +51 -0
- package/src/blocks/AppStatusItem.scss +140 -0
- package/src/blocks/AppStatusItem.tsx +75 -0
- package/src/blocks/DashBlock.tsx +42 -0
- package/src/blocks/DashBlocks.scss +56 -0
- package/src/blocks/DashBlocks.tsx +7 -0
- package/src/blocks/FormCard.scss +201 -0
- package/src/blocks/FormCard.tsx +29 -0
- package/src/blocks/HousingCounselor.tsx +51 -0
- package/src/blocks/ImageCard.scss +91 -0
- package/src/blocks/ImageCard.tsx +77 -0
- package/src/blocks/InfoCard.scss +42 -0
- package/src/blocks/InfoCard.tsx +44 -0
- package/src/blocks/StatusBar.scss +30 -0
- package/src/blocks/StatusBar.tsx +31 -0
- package/src/blocks/ViewItem.scss +59 -0
- package/src/blocks/ViewItem.tsx +32 -0
- package/src/config/ConfigContext.tsx +36 -0
- package/src/config/NavigationContext.tsx +54 -0
- package/src/config/index.ts +2 -0
- package/src/footers/ExygyFooter.tsx +12 -0
- package/src/footers/SiteFooter.scss +28 -0
- package/src/footers/SiteFooter.tsx +10 -0
- package/src/forms/CloudinaryUpload.ts +50 -0
- package/src/forms/DOBField.tsx +132 -0
- package/src/forms/DateField.tsx +120 -0
- package/src/forms/Dropzone.scss +17 -0
- package/src/forms/Dropzone.tsx +67 -0
- package/src/forms/Field.tsx +115 -0
- package/src/forms/FieldGroup.tsx +82 -0
- package/src/forms/Form.tsx +22 -0
- package/src/forms/HouseholdMemberForm.tsx +41 -0
- package/src/forms/HouseholdSizeField.tsx +74 -0
- package/src/forms/PhoneField.tsx +69 -0
- package/src/forms/PhoneMask.tsx +24 -0
- package/src/forms/Select.tsx +80 -0
- package/src/forms/Textarea.scss +40 -0
- package/src/forms/Textarea.tsx +64 -0
- package/src/forms/TimeField.tsx +176 -0
- package/src/global/AppearanceTypes.ts +46 -0
- package/src/global/ApplicationStatusType.ts +6 -0
- package/src/global/accordion.scss +4 -0
- package/src/global/blocks.scss +137 -0
- package/src/global/custom_counter.scss +50 -0
- package/src/global/forms.scss +362 -0
- package/src/global/headers.scss +89 -0
- package/src/global/homepage.scss +8 -0
- package/src/global/index.scss +72 -0
- package/src/global/lists.scss +21 -0
- package/src/global/markdown.scss +33 -0
- package/src/global/mixins.scss +175 -0
- package/src/global/navbar.scss +280 -0
- package/src/global/print.scss +59 -0
- package/src/global/tables.scss +197 -0
- package/src/global/text.scss +141 -0
- package/src/global/vendor/AgPagination.tsx +133 -0
- package/src/global/vendor/_setup_bulma.scss +31 -0
- package/src/global/vendor/ag_grid.scss +140 -0
- package/src/headers/Hero.scss +56 -0
- package/src/headers/Hero.tsx +76 -0
- package/src/headers/PageHeader.scss +31 -0
- package/src/headers/PageHeader.tsx +39 -0
- package/src/headers/SiteHeader.tsx +136 -0
- package/src/helpers/address.tsx +46 -0
- package/src/helpers/blankApplication.ts +108 -0
- package/src/helpers/capitalize.tsx +7 -0
- package/src/helpers/dateToString.ts +11 -0
- package/src/helpers/debounce.ts +12 -0
- package/src/helpers/formOptions.tsx +229 -0
- package/src/helpers/formatYesNoLabel.ts +9 -0
- package/src/helpers/getTranslationWithArguments.ts +14 -0
- package/src/helpers/links.ts +7 -0
- package/src/helpers/localeRoute.tsx +13 -0
- package/src/helpers/mergeDeep.ts +12 -0
- package/src/helpers/nextjs.ts +7 -0
- package/src/helpers/numberOrdinal.ts +17 -0
- package/src/helpers/occupancyFormatting.tsx +46 -0
- package/src/helpers/pdfs.ts +19 -0
- package/src/helpers/photos.ts +19 -0
- package/src/helpers/preferences.tsx +426 -0
- package/src/helpers/resolveObject.ts +5 -0
- package/src/helpers/state.tsx +7 -0
- package/src/helpers/tableSummaries.tsx +80 -0
- package/src/helpers/translator.tsx +37 -0
- package/src/helpers/useKeyPress.ts +17 -0
- package/src/helpers/useMutate.ts +40 -0
- package/src/helpers/useOutsideClick.ts +25 -0
- package/src/helpers/validators.ts +3 -0
- package/src/icons/HeaderBadge.scss +29 -0
- package/src/icons/HeaderBadge.tsx +38 -0
- package/src/icons/Icon.scss +76 -0
- package/src/icons/Icon.tsx +145 -0
- package/src/icons/Icons.tsx +556 -0
- package/src/lists/PreferencesList.scss +72 -0
- package/src/lists/PreferencesList.tsx +60 -0
- package/src/locales/es.json +745 -0
- package/src/locales/general.json +1307 -0
- package/src/locales/general_OLD.json +868 -0
- package/src/locales/vi.json +745 -0
- package/src/locales/zh.json +745 -0
- package/src/navigation/Breadcrumbs.scss +25 -0
- package/src/navigation/Breadcrumbs.tsx +27 -0
- package/src/navigation/FooterNav.scss +47 -0
- package/src/navigation/FooterNav.tsx +19 -0
- package/src/navigation/LanguageNav.scss +32 -0
- package/src/navigation/LanguageNav.tsx +53 -0
- package/src/navigation/ProgressNav.scss +102 -0
- package/src/navigation/ProgressNav.tsx +50 -0
- package/src/navigation/TabNav.scss +38 -0
- package/src/navigation/TabNav.tsx +69 -0
- package/src/navigation/Tabs.scss +65 -0
- package/src/navigation/Tabs.tsx +93 -0
- package/src/navigation/UserNav.tsx +37 -0
- package/src/notifications/AlertBox.scss +78 -0
- package/src/notifications/AlertBox.tsx +79 -0
- package/src/notifications/AlertNotice.scss +58 -0
- package/src/notifications/AlertNotice.tsx +37 -0
- package/src/notifications/ApplicationStatus.scss +10 -0
- package/src/notifications/ApplicationStatus.tsx +64 -0
- package/src/notifications/ErrorMessage.tsx +15 -0
- package/src/notifications/SiteAlert.tsx +54 -0
- package/src/notifications/StatusAside.scss +11 -0
- package/src/notifications/StatusAside.tsx +25 -0
- package/src/notifications/StatusMessage.scss +25 -0
- package/src/notifications/StatusMessage.tsx +59 -0
- package/src/notifications/alertTypes.ts +7 -0
- package/src/notifications/index.ts +4 -0
- package/src/overlays/Drawer.scss +105 -0
- package/src/overlays/Drawer.tsx +51 -0
- package/src/overlays/LoadingOverlay.scss +25 -0
- package/src/overlays/LoadingOverlay.tsx +29 -0
- package/src/overlays/Modal.scss +55 -0
- package/src/overlays/Modal.tsx +61 -0
- package/src/overlays/Overlay.scss +50 -0
- package/src/overlays/Overlay.tsx +100 -0
- package/src/page_components/listing/AdditionalFees.tsx +56 -0
- package/src/page_components/listing/ListingCard.scss +47 -0
- package/src/page_components/listing/ListingCard.tsx +34 -0
- package/src/page_components/listing/ListingDetailHeader.tsx +25 -0
- package/src/page_components/listing/ListingDetails.tsx +29 -0
- package/src/page_components/listing/ListingMap.scss +36 -0
- package/src/page_components/listing/ListingMap.tsx +138 -0
- package/src/page_components/listing/ListingsGroup.scss +65 -0
- package/src/page_components/listing/ListingsGroup.tsx +49 -0
- package/src/page_components/listing/UnitTables.tsx +111 -0
- package/src/page_components/listing/listing_sidebar/ApplicationSection.tsx +49 -0
- package/src/page_components/listing/listing_sidebar/Apply.tsx +225 -0
- package/src/page_components/listing/listing_sidebar/LeasingAgent.tsx +77 -0
- package/src/page_components/listing/listing_sidebar/ListingUpdated.tsx +20 -0
- package/src/page_components/listing/listing_sidebar/ReferralApplication.tsx +28 -0
- package/src/page_components/listing/listing_sidebar/SidebarAddress.tsx +56 -0
- package/src/page_components/listing/listing_sidebar/Waitlist.tsx +94 -0
- package/src/page_components/listing/listing_sidebar/WhatToExpect.tsx +22 -0
- package/src/page_components/listing/listing_sidebar/events/DownloadLotteryResults.tsx +34 -0
- package/src/page_components/listing/listing_sidebar/events/EventDateSection.tsx +24 -0
- package/src/page_components/listing/listing_sidebar/events/LotteryResultsEvent.tsx +26 -0
- package/src/page_components/listing/listing_sidebar/events/OpenHouseEvent.tsx +27 -0
- package/src/page_components/listing/listing_sidebar/events/PublicLotteryEvent.tsx +22 -0
- package/src/prototypes/AppCard.scss +64 -0
- package/src/prototypes/Back.scss +19 -0
- package/src/prototypes/ButtonGroup.scss +6 -0
- package/src/prototypes/ButtonPager.scss +22 -0
- package/src/prototypes/FieldSection.scss +35 -0
- package/src/prototypes/FieldSection.tsx +31 -0
- package/src/prototypes/GridItem.tsx +15 -0
- package/src/prototypes/SideNav.scss +32 -0
- package/src/prototypes/SideNav.tsx +14 -0
- package/src/prototypes/SummaryCard.scss +34 -0
- package/src/sections/ContentSection.scss +15 -0
- package/src/sections/ContentSection.tsx +25 -0
- package/src/sections/FooterSection.scss +6 -0
- package/src/sections/FooterSection.tsx +16 -0
- package/src/sections/GridSection.scss +72 -0
- package/src/sections/GridSection.tsx +82 -0
- package/src/sections/InfoCardGrid.scss +45 -0
- package/src/sections/InfoCardGrid.tsx +20 -0
- package/src/sections/ListSection.scss +7 -0
- package/src/sections/ListSection.tsx +23 -0
- package/src/sections/MarkdownSection.scss +13 -0
- package/src/sections/MarkdownSection.tsx +21 -0
- package/src/sections/ResponsiveContentList.tsx +67 -0
- package/src/sections/ResponsiveWrappers.tsx +23 -0
- package/src/tables/GroupedTable.tsx +86 -0
- package/src/tables/MinimalTable.tsx +32 -0
- package/src/tables/ResponsiveTable.tsx +24 -0
- package/src/tables/StandardTable.tsx +229 -0
- package/src/text/Description.scss +52 -0
- package/src/text/Description.tsx +24 -0
- package/src/text/Message.scss +16 -0
- package/src/text/Message.tsx +16 -0
- package/src/text/Tag.scss +94 -0
- package/src/text/Tag.tsx +22 -0
- package/tailwind.config.js +128 -0
- package/tailwind.tosass.js +29 -0
- package/tsconfig.json +31 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
@media print {
|
|
2
|
+
img,
|
|
3
|
+
button,
|
|
4
|
+
.button,
|
|
5
|
+
button.button,
|
|
6
|
+
.navbar-burger,
|
|
7
|
+
.site-footer,
|
|
8
|
+
a.logo:link:after,
|
|
9
|
+
.navbar-notice {
|
|
10
|
+
display: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
font: 12px;
|
|
15
|
+
line-height: 1.3;
|
|
16
|
+
text-align: left !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
h1 {
|
|
20
|
+
font-size: 20px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
h2 {
|
|
24
|
+
font-size: 18px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
h3 {
|
|
28
|
+
font-size: 16px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
h4 {
|
|
32
|
+
font-size: 14px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
small {
|
|
36
|
+
font-size: 12px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
a:link:after {
|
|
40
|
+
display: block;
|
|
41
|
+
text-transform: none;
|
|
42
|
+
font-size: 12px;
|
|
43
|
+
// add full URL in front of relative links like "/listings"
|
|
44
|
+
content: "/" attr(href);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
a[href^="http"]:link:after {
|
|
48
|
+
// if link already starts with http, then just print that
|
|
49
|
+
content: attr(href);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.show-for-print {
|
|
53
|
+
display: block;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.hide-for-print {
|
|
57
|
+
display: none !important;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
table {
|
|
2
|
+
@apply text-gray-750;
|
|
3
|
+
|
|
4
|
+
strong {
|
|
5
|
+
@apply font-semibold;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
tr {
|
|
9
|
+
@apply bg-white;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
thead tr th {
|
|
13
|
+
@apply text-left;
|
|
14
|
+
@apply uppercase;
|
|
15
|
+
@apply bg-primary-lighter;
|
|
16
|
+
@apply p-5;
|
|
17
|
+
@apply font-semibold;
|
|
18
|
+
@apply tracking-wider;
|
|
19
|
+
@apply border-0;
|
|
20
|
+
@apply border-b;
|
|
21
|
+
@apply border-primary;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&.th-plain {
|
|
25
|
+
thead tr {
|
|
26
|
+
background: transparent;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
thead tr th {
|
|
30
|
+
@apply border-0;
|
|
31
|
+
@apply py-2;
|
|
32
|
+
background: transparent;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&.td-plain {
|
|
37
|
+
tr,
|
|
38
|
+
tr:nth-of-type(even) {
|
|
39
|
+
background: transparent;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
tr td {
|
|
43
|
+
@apply border-b;
|
|
44
|
+
background: transparent;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
&.is-flush-left {
|
|
48
|
+
thead tr th:first-of-type {
|
|
49
|
+
padding-left: 0 !important;
|
|
50
|
+
}
|
|
51
|
+
tr td:first-of-type {
|
|
52
|
+
padding-left: 0 !important;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
&.is-flush-right {
|
|
56
|
+
thead tr th:last-of-type {
|
|
57
|
+
padding-right: 0 !important;
|
|
58
|
+
}
|
|
59
|
+
tr td:last-of-type {
|
|
60
|
+
padding-right: 0 !important;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&.base {
|
|
65
|
+
thead tr {
|
|
66
|
+
background: transparent;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
tr:nth-of-type(even) {
|
|
70
|
+
background: transparent;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
thead tr th {
|
|
74
|
+
background: transparent;
|
|
75
|
+
@apply border-gray-450;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
tbody td {
|
|
79
|
+
@apply border-b;
|
|
80
|
+
@apply border-gray-450;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
td:last-child,
|
|
84
|
+
th:last-child {
|
|
85
|
+
text-align: right;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
table tr:nth-of-type(even) {
|
|
91
|
+
@apply bg-primary-lighter;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
td.reserved {
|
|
95
|
+
@apply font-sans;
|
|
96
|
+
@apply font-bold;
|
|
97
|
+
@apply uppercase;
|
|
98
|
+
@apply text-2xs;
|
|
99
|
+
@apply leading-tight;
|
|
100
|
+
@apply py-2;
|
|
101
|
+
@apply text-gray-750;
|
|
102
|
+
@apply bg-accent-warm-lighter;
|
|
103
|
+
@apply tracking-widest;
|
|
104
|
+
@apply pl-2;
|
|
105
|
+
@apply border-l-8;
|
|
106
|
+
@apply border-b;
|
|
107
|
+
@apply border-t;
|
|
108
|
+
@apply border-solid;
|
|
109
|
+
@apply border-accent-warm;
|
|
110
|
+
|
|
111
|
+
.reserved-icon {
|
|
112
|
+
@apply text-accent-warm;
|
|
113
|
+
@apply text-sm;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
tr.group-reserved td:first-of-type {
|
|
118
|
+
@apply border-l-8;
|
|
119
|
+
@apply border-solid;
|
|
120
|
+
@apply border-accent-warm;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* Hat tip to this CSS solution:
|
|
124
|
+
https://www.cssscript.com/pure-html5-css3-responsive-table-solution/ */
|
|
125
|
+
|
|
126
|
+
@media screen and (max-width: 639px) {
|
|
127
|
+
table.responsive-collapse {
|
|
128
|
+
thead {
|
|
129
|
+
@apply hidden;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
tr {
|
|
133
|
+
@apply block;
|
|
134
|
+
@apply mb-6;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
tr:nth-of-type(even) {
|
|
138
|
+
background: inherit;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
td:nth-of-type(even) {
|
|
142
|
+
@apply bg-primary-lighter;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
td {
|
|
146
|
+
@apply block;
|
|
147
|
+
@apply text-right;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
td:before {
|
|
151
|
+
@apply font-bold;
|
|
152
|
+
@apply uppercase;
|
|
153
|
+
@apply float-left;
|
|
154
|
+
content: attr(data-label);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
td:last-child {
|
|
158
|
+
@apply border-b-0;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
table.base {
|
|
162
|
+
td:nth-of-type(even) {
|
|
163
|
+
background: transparent;
|
|
164
|
+
}
|
|
165
|
+
tbody td {
|
|
166
|
+
@apply border-0;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
tr.group-reserved td {
|
|
171
|
+
@apply border-l-8;
|
|
172
|
+
@apply border-solid;
|
|
173
|
+
@apply border-accent-warm;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.table__thumbnail img {
|
|
178
|
+
max-height: 80px;
|
|
179
|
+
max-width: 142px;
|
|
180
|
+
@apply -my-3;
|
|
181
|
+
@apply inline-block;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
table.td-plain {
|
|
185
|
+
.table__thumbnail img {
|
|
186
|
+
@apply -my-1;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.table__draggable-cell {
|
|
191
|
+
width: 60px;
|
|
192
|
+
padding: 0px;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.table__is-dragging {
|
|
196
|
+
display: table;
|
|
197
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
h1,
|
|
2
|
+
h2,
|
|
3
|
+
h3,
|
|
4
|
+
h4,
|
|
5
|
+
h5,
|
|
6
|
+
h6 {
|
|
7
|
+
@apply font-serif;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
h1 {
|
|
11
|
+
@apply text-3xl;
|
|
12
|
+
|
|
13
|
+
@screen md {
|
|
14
|
+
@apply text-4xl;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
h2 {
|
|
19
|
+
@apply text-2xl;
|
|
20
|
+
|
|
21
|
+
@screen md {
|
|
22
|
+
@apply text-3xl;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
h3 {
|
|
27
|
+
@apply text-xl;
|
|
28
|
+
|
|
29
|
+
@screen md {
|
|
30
|
+
@apply text-2xl;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
h4 {
|
|
35
|
+
@apply text-xl;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
h5 {
|
|
39
|
+
@apply text-lg;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
h6 {
|
|
43
|
+
@apply text-base;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
a {
|
|
47
|
+
@apply text-primary;
|
|
48
|
+
|
|
49
|
+
&:hover {
|
|
50
|
+
@apply text-primary;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&:focus {
|
|
54
|
+
outline: none;
|
|
55
|
+
box-shadow: 0 0 3px 4px $tailwind-accent-cool;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&.lined {
|
|
59
|
+
@apply underline;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&.alert {
|
|
63
|
+
@apply text-alert;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&.darker {
|
|
67
|
+
@apply text-primary-darker;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
h1.title {
|
|
72
|
+
@apply text-4xl;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.text-caps-underline {
|
|
76
|
+
@apply font-alt-sans;
|
|
77
|
+
@apply uppercase;
|
|
78
|
+
@apply text-tiny;
|
|
79
|
+
@apply mb-5;
|
|
80
|
+
@apply pb-2;
|
|
81
|
+
@apply border-0;
|
|
82
|
+
@apply border-b-4;
|
|
83
|
+
@apply border-primary;
|
|
84
|
+
@apply font-semibold;
|
|
85
|
+
@apply text-gray-800;
|
|
86
|
+
@apply tracking-widest;
|
|
87
|
+
@apply inline-block;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.text-caps-tiny {
|
|
91
|
+
@apply mb-4;
|
|
92
|
+
@apply text-gray-700;
|
|
93
|
+
@apply uppercase;
|
|
94
|
+
@apply font-sans;
|
|
95
|
+
@apply font-bold;
|
|
96
|
+
@apply text-tiny;
|
|
97
|
+
@apply tracking-wide;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.text-serif-lg {
|
|
101
|
+
@apply font-serif;
|
|
102
|
+
@apply text-lg;
|
|
103
|
+
@apply mb-4;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.info-group__item {
|
|
107
|
+
@apply border-b;
|
|
108
|
+
@apply border-gray-450;
|
|
109
|
+
@apply mb-4;
|
|
110
|
+
|
|
111
|
+
&:last-child {
|
|
112
|
+
@apply border-0;
|
|
113
|
+
@apply mb-0;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.edit-link {
|
|
118
|
+
@apply underline;
|
|
119
|
+
@apply font-alt-sans;
|
|
120
|
+
@apply text-tiny;
|
|
121
|
+
@apply uppercase;
|
|
122
|
+
@apply block;
|
|
123
|
+
@apply text-primary;
|
|
124
|
+
@apply font-semibold;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.pill {
|
|
128
|
+
@apply inline-block;
|
|
129
|
+
@apply bg-primary-lighter;
|
|
130
|
+
@apply rounded-full;
|
|
131
|
+
@apply px-2;
|
|
132
|
+
@apply py-1;
|
|
133
|
+
@apply text-sm;
|
|
134
|
+
@apply font-semibold;
|
|
135
|
+
@apply text-gray-700;
|
|
136
|
+
@apply mr-2;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.icon-item {
|
|
140
|
+
@apply block;
|
|
141
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import React from "react"
|
|
2
|
+
import { Button, t } from "@bloom-housing/ui-components"
|
|
3
|
+
|
|
4
|
+
type AgPaginationProps = {
|
|
5
|
+
totalItems: number
|
|
6
|
+
totalPages: number
|
|
7
|
+
currentPage: number
|
|
8
|
+
itemsPerPage: number
|
|
9
|
+
quantityLabel?: string
|
|
10
|
+
setCurrentPage: React.Dispatch<React.SetStateAction<number>>
|
|
11
|
+
setItemsPerPage: React.Dispatch<React.SetStateAction<number>>
|
|
12
|
+
onPageChange?: (page: number) => void
|
|
13
|
+
onPerPageChange?: (size: number) => void
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const AG_PER_PAGE_OPTIONS = [8, 100, 500, 1000]
|
|
17
|
+
|
|
18
|
+
const AgPagination = ({
|
|
19
|
+
totalItems,
|
|
20
|
+
totalPages,
|
|
21
|
+
currentPage,
|
|
22
|
+
itemsPerPage,
|
|
23
|
+
quantityLabel,
|
|
24
|
+
setCurrentPage,
|
|
25
|
+
setItemsPerPage,
|
|
26
|
+
onPageChange,
|
|
27
|
+
onPerPageChange,
|
|
28
|
+
}: AgPaginationProps) => {
|
|
29
|
+
const onNextClick = () => {
|
|
30
|
+
setCurrentPage(currentPage + 1)
|
|
31
|
+
onPageChange && onPageChange(currentPage)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const onPrevClick = () => {
|
|
35
|
+
setCurrentPage(currentPage - 1)
|
|
36
|
+
onPageChange && onPageChange(currentPage)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const onRowLimitChange = (size: string) => {
|
|
40
|
+
setItemsPerPage(parseInt(size))
|
|
41
|
+
onPerPageChange && onPerPageChange(itemsPerPage)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div className="data-pager flex flex-col md:flex-row">
|
|
46
|
+
<div className="hidden md:block">
|
|
47
|
+
<Button
|
|
48
|
+
className="data-pager__previous data-pager__control"
|
|
49
|
+
onClick={onPrevClick}
|
|
50
|
+
disabled={currentPage === 1}
|
|
51
|
+
>
|
|
52
|
+
{t("t.previous")}
|
|
53
|
+
</Button>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<div className="data-pager__control-group ml-0 md:ml-auto w-full md:w-auto md:flex md:items-center">
|
|
57
|
+
<div className="data-pager__control">
|
|
58
|
+
<span className="field-label" id="lbTotalPages">
|
|
59
|
+
{totalItems}
|
|
60
|
+
</span>
|
|
61
|
+
{quantityLabel && <span className="field-label">{quantityLabel}</span>}
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<div className="flex mt-5 md:mt-0 md:items-center">
|
|
65
|
+
<div className="field data-pager__control md:mb-0">
|
|
66
|
+
<label className="field-label font-sans" htmlFor="page-size">
|
|
67
|
+
{t("t.show")}
|
|
68
|
+
</label>
|
|
69
|
+
<select
|
|
70
|
+
name="page-size"
|
|
71
|
+
id="page-size"
|
|
72
|
+
value={itemsPerPage}
|
|
73
|
+
onChange={({ target }) => onRowLimitChange(target.value)}
|
|
74
|
+
>
|
|
75
|
+
{AG_PER_PAGE_OPTIONS.map((item) => (
|
|
76
|
+
<option key={item} value={item}>
|
|
77
|
+
{item}
|
|
78
|
+
</option>
|
|
79
|
+
))}
|
|
80
|
+
</select>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<div className="field data-pager__control">
|
|
84
|
+
<label className="field-label font-sans" htmlFor="page-jump">
|
|
85
|
+
{t("t.jumpTo")}
|
|
86
|
+
</label>
|
|
87
|
+
<select
|
|
88
|
+
name="page-jump"
|
|
89
|
+
id="page-jump"
|
|
90
|
+
onChange={(e: React.ChangeEvent<HTMLSelectElement>) =>
|
|
91
|
+
setCurrentPage(parseInt(e.target.value))
|
|
92
|
+
}
|
|
93
|
+
value={currentPage}
|
|
94
|
+
>
|
|
95
|
+
{Array(totalPages)
|
|
96
|
+
.fill(totalPages)
|
|
97
|
+
.map((_, i) => {
|
|
98
|
+
const value = i + 1
|
|
99
|
+
return (
|
|
100
|
+
<option key={value} value={value}>
|
|
101
|
+
{value}
|
|
102
|
+
</option>
|
|
103
|
+
)
|
|
104
|
+
})}
|
|
105
|
+
</select>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<div className="w-full md:w-auto flex justify-between mt-5 md:mt-0 ">
|
|
111
|
+
<div className="md:hidden">
|
|
112
|
+
<Button
|
|
113
|
+
className="data-pager__previous data-pager__control"
|
|
114
|
+
onClick={onPrevClick}
|
|
115
|
+
disabled={currentPage === 1}
|
|
116
|
+
>
|
|
117
|
+
{t("t.previous")}
|
|
118
|
+
</Button>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<Button
|
|
122
|
+
className="data-pager__next data-pager__control"
|
|
123
|
+
onClick={onNextClick}
|
|
124
|
+
disabled={totalPages === currentPage || totalPages === 0}
|
|
125
|
+
>
|
|
126
|
+
{t("t.next")}
|
|
127
|
+
</Button>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { AgPagination as default, AgPagination, AG_PER_PAGE_OPTIONS }
|