@meetelise/chat 1.30.5 → 1.31.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/dist/src/WebComponent/FeeCalculator/components/fee-calculator-layout/fee-calculator-layout.d.ts +1 -1
- package/dist/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector.d.ts +1 -1
- package/dist/src/WebComponent/FeeCalculator/components/incentive-banner/incentive-banner-styles.d.ts +1 -0
- package/dist/src/WebComponent/FeeCalculator/components/incentive-banner/incentive-banner.d.ts +8 -0
- package/dist/src/WebComponent/FeeCalculator/components/incentive-banner/index.d.ts +1 -0
- package/dist/src/WebComponent/FeeCalculator/fee-calculator.d.ts +2 -3
- package/dist/src/WebComponent/FeeCalculator/model/building-fee.d.ts +2 -0
- package/dist/src/WebComponent/icons/DollarOutlineIcon.d.ts +5 -1
- package/dist/src/WebComponent/loaders/index.d.ts +4 -0
- package/dist/src/WebComponent/loaders/skeleton-card.d.ts +12 -0
- package/dist/src/WebComponent/loaders/skeleton-loader-styles.d.ts +3 -0
- package/dist/src/WebComponent/loaders/skeleton-loader.d.ts +13 -0
- package/dist/src/services/fees/fetchBuildingFees.d.ts +2 -0
- package/dist/src/types/incentive-v2.d.ts +23 -0
- package/package.json +1 -1
- package/public/dist/index.js +406 -252
- package/src/WebComponent/FeeCalculator/components/addon-item/addon-item.ts +2 -2
- package/src/WebComponent/FeeCalculator/components/fee-calculator-layout/fee-calculator-layout-styles.ts +19 -12
- package/src/WebComponent/FeeCalculator/components/fee-calculator-layout/fee-calculator-layout.ts +5 -2
- package/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector-styles.ts +11 -9
- package/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector.ts +1 -1
- package/src/WebComponent/FeeCalculator/components/floorplan-image-card/floorplan-image-card-styles.ts +9 -1
- package/src/WebComponent/FeeCalculator/components/incentive-banner/incentive-banner-styles.ts +40 -0
- package/src/WebComponent/FeeCalculator/components/incentive-banner/incentive-banner.ts +43 -0
- package/src/WebComponent/FeeCalculator/components/incentive-banner/index.ts +1 -0
- package/src/WebComponent/FeeCalculator/fee-calculator-styles.ts +50 -74
- package/src/WebComponent/FeeCalculator/fee-calculator.ts +22 -49
- package/src/WebComponent/FeeCalculator/model/building-fee.ts +2 -0
- package/src/WebComponent/icons/DollarOutlineIcon.ts +11 -3
- package/src/WebComponent/loaders/index.ts +7 -0
- package/src/WebComponent/loaders/skeleton-card.ts +31 -0
- package/src/WebComponent/loaders/skeleton-loader-styles.ts +112 -0
- package/src/WebComponent/loaders/skeleton-loader.ts +34 -0
- package/src/services/fees/fetchBuildingFees.ts +4 -0
- package/src/types/incentive-v2.ts +24 -0
- /package/dist/src/WebComponent/{mega-loader.d.ts → loaders/mega-loader.d.ts} +0 -0
- /package/src/WebComponent/{mega-loader.ts → loaders/mega-loader.ts} +0 -0
|
@@ -30,12 +30,12 @@ export class AddonItem extends LitElement {
|
|
|
30
30
|
|
|
31
31
|
get atMaxUnits(): boolean {
|
|
32
32
|
const maxUnits =
|
|
33
|
-
this.feeItem?.blueprint.addOnInfo?.
|
|
33
|
+
this.feeItem?.blueprint.addOnInfo?.maxUnitsAllowed ?? Infinity;
|
|
34
34
|
return this.quantity >= maxUnits;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
get atMinUnits(): boolean {
|
|
38
|
-
const minUnits = this.feeItem?.blueprint.addOnInfo?.
|
|
38
|
+
const minUnits = this.feeItem?.blueprint.addOnInfo?.minUnitsAllowed ?? 0;
|
|
39
39
|
return this.quantity <= minUnits;
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -61,12 +61,13 @@ export default css`
|
|
|
61
61
|
|
|
62
62
|
.loading-container {
|
|
63
63
|
display: flex;
|
|
64
|
-
justify-content:
|
|
65
|
-
align-items:
|
|
64
|
+
justify-content: flex-start;
|
|
65
|
+
align-items: flex-start;
|
|
66
66
|
width: 100%;
|
|
67
67
|
height: 100%;
|
|
68
68
|
min-height: 300px;
|
|
69
69
|
flex: 1;
|
|
70
|
+
padding-top: 16px;
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
.empty-state {
|
|
@@ -79,36 +80,38 @@ export default css`
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
@media (max-width: 768px) {
|
|
82
|
-
.fee-calculator-layout
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
.sidepanel-section {
|
|
83
|
+
.fee-calculator-layout {
|
|
84
|
+
flex-direction: column;
|
|
85
|
+
gap: 10px;
|
|
86
86
|
width: 100%;
|
|
87
87
|
margin: 0;
|
|
88
88
|
padding: 0;
|
|
89
89
|
box-sizing: border-box;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
.fee-calculator-layout {
|
|
93
|
-
flex-direction: column;
|
|
94
|
-
gap: 10px;
|
|
95
|
-
height: 100%;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
92
|
.sidepanel {
|
|
99
93
|
max-width: 100%;
|
|
100
94
|
order: 1;
|
|
101
95
|
flex: none;
|
|
96
|
+
width: 100%;
|
|
97
|
+
margin: 0;
|
|
98
|
+
box-sizing: border-box;
|
|
102
99
|
}
|
|
103
100
|
|
|
104
101
|
.fees-container {
|
|
105
102
|
order: 2;
|
|
106
103
|
min-height: auto;
|
|
104
|
+
width: 100%;
|
|
105
|
+
margin: 0;
|
|
106
|
+
box-sizing: border-box;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
.sidepanel-section {
|
|
110
110
|
border-radius: 0;
|
|
111
111
|
margin: 0 0 8px 0;
|
|
112
|
+
padding: 16px;
|
|
113
|
+
width: 100%;
|
|
114
|
+
box-sizing: border-box;
|
|
112
115
|
}
|
|
113
116
|
|
|
114
117
|
.loading-container {
|
|
@@ -116,11 +119,15 @@ export default css`
|
|
|
116
119
|
min-height: 100px;
|
|
117
120
|
padding-top: 20px;
|
|
118
121
|
align-items: flex-start;
|
|
122
|
+
width: 100%;
|
|
123
|
+
box-sizing: border-box;
|
|
119
124
|
}
|
|
120
125
|
|
|
121
126
|
.empty-state {
|
|
122
127
|
height: auto;
|
|
123
128
|
min-height: 100px;
|
|
129
|
+
width: 100%;
|
|
130
|
+
box-sizing: border-box;
|
|
124
131
|
}
|
|
125
132
|
}
|
|
126
133
|
`;
|
package/src/WebComponent/FeeCalculator/components/fee-calculator-layout/fee-calculator-layout.ts
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import "../floor-plan-selector/floor-plan-selector";
|
|
14
14
|
import "../fee-card/fee-card";
|
|
15
15
|
import "../addon-item/addon-item";
|
|
16
|
-
import "../../../
|
|
16
|
+
import "../../../loaders/skeleton-loader";
|
|
17
17
|
|
|
18
18
|
@customElement("fee-calculator-layout")
|
|
19
19
|
export class FeeCalculatorLayout extends LitElement {
|
|
@@ -149,7 +149,10 @@ export class FeeCalculatorLayout extends LitElement {
|
|
|
149
149
|
${this.isLoading
|
|
150
150
|
? html`
|
|
151
151
|
<div class="loading-container">
|
|
152
|
-
<
|
|
152
|
+
<skeleton-loader
|
|
153
|
+
.cards=${3}
|
|
154
|
+
.rowsPerCard=${[3, 2, 1]}
|
|
155
|
+
></skeleton-loader>
|
|
153
156
|
</div>
|
|
154
157
|
`
|
|
155
158
|
: this.renderFeeSections()}
|
package/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector-styles.ts
CHANGED
|
@@ -19,19 +19,21 @@ const floorPlanSelectorStyles = css`
|
|
|
19
19
|
|
|
20
20
|
.floor-plan-selector-badges {
|
|
21
21
|
display: flex;
|
|
22
|
-
|
|
22
|
+
overflow-x: scroll;
|
|
23
23
|
gap: 8px;
|
|
24
24
|
margin-bottom: 12px;
|
|
25
|
+
scrollbar-width: thin;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
.floor-plan-badge {
|
|
28
29
|
padding: 6px 12px;
|
|
29
30
|
border-radius: 16px;
|
|
31
|
+
min-width: 2rem;
|
|
32
|
+
text-align: center;
|
|
30
33
|
font-size: 0.9rem;
|
|
31
34
|
cursor: pointer;
|
|
32
35
|
background-color: #f0f0f0;
|
|
33
36
|
border: 1px solid #ddd;
|
|
34
|
-
transition: all 0.15s ease;
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
.floor-plan-badge:hover {
|
|
@@ -47,12 +49,10 @@ const floorPlanSelectorStyles = css`
|
|
|
47
49
|
.advanced-section {
|
|
48
50
|
max-height: 0;
|
|
49
51
|
overflow: hidden;
|
|
50
|
-
transition: max-height 0.15s ease-out;
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
.advanced-section.open {
|
|
54
55
|
max-height: 800px;
|
|
55
|
-
transition: max-height 0.2s ease-in;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
.date-fields {
|
|
@@ -60,7 +60,6 @@ const floorPlanSelectorStyles = css`
|
|
|
60
60
|
flex-direction: row;
|
|
61
61
|
gap: 16px;
|
|
62
62
|
margin-bottom: 16px;
|
|
63
|
-
transition: gap 0.15s ease;
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
.date-field {
|
|
@@ -91,16 +90,12 @@ const floorPlanSelectorStyles = css`
|
|
|
91
90
|
gap: 16px;
|
|
92
91
|
padding: 12px 0;
|
|
93
92
|
scroll-behavior: smooth;
|
|
94
|
-
transition: flex-direction 0.15s ease, max-height 0.15s ease,
|
|
95
|
-
width 0.15s ease, overflow-x 0.15s ease;
|
|
96
93
|
}
|
|
97
94
|
|
|
98
95
|
.unit-selection {
|
|
99
96
|
margin-top: 16px;
|
|
100
97
|
max-height: 16rem;
|
|
101
98
|
overflow-y: auto;
|
|
102
|
-
transition: max-height 0.15s ease, overflow-y 0.15s ease,
|
|
103
|
-
overflow-x 0.15s ease;
|
|
104
99
|
}
|
|
105
100
|
|
|
106
101
|
.unit-label {
|
|
@@ -114,6 +109,13 @@ const floorPlanSelectorStyles = css`
|
|
|
114
109
|
align-items: center;
|
|
115
110
|
}
|
|
116
111
|
|
|
112
|
+
@media (max-width: 840px) {
|
|
113
|
+
.date-fields {
|
|
114
|
+
flex-direction: column;
|
|
115
|
+
gap: 12px;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
117
119
|
@media (max-width: 768px) {
|
|
118
120
|
.date-fields {
|
|
119
121
|
gap: 10px;
|
package/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector.ts
CHANGED
|
@@ -11,7 +11,7 @@ import floorPlanSelectorStyles from "./floor-plan-selector-styles";
|
|
|
11
11
|
import { addMonths, startOfMonth } from "date-fns";
|
|
12
12
|
|
|
13
13
|
import "../floorplan-image-card/floorplan-image-card";
|
|
14
|
-
import "../../../mega-loader";
|
|
14
|
+
import "../../../loaders/mega-loader";
|
|
15
15
|
|
|
16
16
|
const FIRST_OF_NEXT_MONTH = startOfMonth(addMonths(new Date(), 1));
|
|
17
17
|
|
|
@@ -13,7 +13,8 @@ const floorplanImageCardStyles = css`
|
|
|
13
13
|
display: flex;
|
|
14
14
|
flex-direction: row;
|
|
15
15
|
background-color: #f8f9fa;
|
|
16
|
-
width: 18rem;
|
|
16
|
+
min-width: 18rem;
|
|
17
|
+
width: 100%;
|
|
17
18
|
padding: 12px;
|
|
18
19
|
gap: 8px;
|
|
19
20
|
border-radius: 4px;
|
|
@@ -23,6 +24,7 @@ const floorplanImageCardStyles = css`
|
|
|
23
24
|
|
|
24
25
|
.section-left {
|
|
25
26
|
flex: 0 0 auto;
|
|
27
|
+
position: relative;
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
.floorplan-image-card.selected {
|
|
@@ -59,6 +61,12 @@ const floorplanImageCardStyles = css`
|
|
|
59
61
|
object-fit: cover;
|
|
60
62
|
border: 1px solid #ddd;
|
|
61
63
|
cursor: pointer;
|
|
64
|
+
position: relative;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
img:hover {
|
|
68
|
+
border-color: var(--primary-color, #646987);
|
|
69
|
+
box-shadow: 0 0 10px 3px rgba(100, 105, 135, 0.4);
|
|
62
70
|
}
|
|
63
71
|
|
|
64
72
|
@media (max-width: 768px) {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { css } from "lit";
|
|
2
|
+
|
|
3
|
+
export const incentiveBannerStyles = css`
|
|
4
|
+
:host {
|
|
5
|
+
display: block;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.incentive-banner {
|
|
9
|
+
width: 100%;
|
|
10
|
+
background-color: #e8f2ff;
|
|
11
|
+
padding: 8px 12px;
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: 8px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.incentive-icon {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
width: 3rem;
|
|
22
|
+
height: 3rem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.incentive-content {
|
|
26
|
+
flex: 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.incentive-title {
|
|
30
|
+
margin: 0;
|
|
31
|
+
font-size: 1.1rem;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.incentive-subtitle {
|
|
35
|
+
margin: 4px 0 0 0;
|
|
36
|
+
color: #868e96;
|
|
37
|
+
font-size: 0.9rem;
|
|
38
|
+
opacity: 0.9;
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { LitElement, html, TemplateResult } from "lit";
|
|
2
|
+
import { customElement, property } from "lit/decorators.js";
|
|
3
|
+
import { IncentiveV2 } from "../../../../types/incentive-v2";
|
|
4
|
+
import { incentiveBannerStyles } from "./incentive-banner-styles";
|
|
5
|
+
import DollarOutlineIcon from "../../../icons/DollarOutlineIcon";
|
|
6
|
+
|
|
7
|
+
@customElement("incentive-banner")
|
|
8
|
+
export class IncentiveBanner extends LitElement {
|
|
9
|
+
static styles = incentiveBannerStyles;
|
|
10
|
+
|
|
11
|
+
@property({ type: Object })
|
|
12
|
+
incentive!: IncentiveV2;
|
|
13
|
+
|
|
14
|
+
getFormattedEndDate(incentive: IncentiveV2): string {
|
|
15
|
+
const endDate = new Date(incentive.endDate);
|
|
16
|
+
return endDate.toLocaleDateString("en-US", {
|
|
17
|
+
month: "long",
|
|
18
|
+
day: "numeric",
|
|
19
|
+
year: "numeric",
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
render(): TemplateResult {
|
|
24
|
+
if (!this.incentive) {
|
|
25
|
+
return html``;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return html`
|
|
29
|
+
<div class="incentive-banner">
|
|
30
|
+
<div class="incentive-icon">${DollarOutlineIcon({ size: 32 })}</div>
|
|
31
|
+
<div class="incentive-content">
|
|
32
|
+
<h2 class="incentive-title">
|
|
33
|
+
${this.incentive.originalIncentiveString}
|
|
34
|
+
</h2>
|
|
35
|
+
<p class="incentive-subtitle">
|
|
36
|
+
Valid through ${this.getFormattedEndDate(this.incentive)} for
|
|
37
|
+
${this.incentive.qualifier}
|
|
38
|
+
</p>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./incentive-banner";
|
|
@@ -7,19 +7,22 @@ export const feeCalculatorStyles = css`
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
.fee-calculator-container {
|
|
10
|
-
background-color:
|
|
10
|
+
background-color: white;
|
|
11
11
|
border-radius: 8px;
|
|
12
12
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
|
13
13
|
padding: 20px;
|
|
14
|
+
height: 80vh;
|
|
14
15
|
width: 80vw;
|
|
15
|
-
max-width: 1200px;
|
|
16
|
-
margin: 0 auto;
|
|
17
16
|
display: flex;
|
|
18
17
|
flex-direction: column;
|
|
19
|
-
height: 70vh;
|
|
20
18
|
overflow: hidden;
|
|
21
19
|
transition: width 0.15s ease, height 0.15s ease, padding 0.15s ease,
|
|
22
20
|
margin 0.15s ease;
|
|
21
|
+
position: fixed;
|
|
22
|
+
top: 50%;
|
|
23
|
+
left: 50%;
|
|
24
|
+
transform: translate(-50%, -50%);
|
|
25
|
+
z-index: 1000;
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
.fee-calculator-container.compact {
|
|
@@ -37,7 +40,6 @@ export const feeCalculatorStyles = css`
|
|
|
37
40
|
|
|
38
41
|
.calculator-header h1 {
|
|
39
42
|
font-size: 1.2rem;
|
|
40
|
-
font-weight: normal;
|
|
41
43
|
color: #333;
|
|
42
44
|
transition: font-size 0.15s ease;
|
|
43
45
|
}
|
|
@@ -45,6 +47,7 @@ export const feeCalculatorStyles = css`
|
|
|
45
47
|
.calculator-header-right {
|
|
46
48
|
display: flex;
|
|
47
49
|
gap: 10px;
|
|
50
|
+
align-items: center;
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
.calculator-header-divider {
|
|
@@ -61,10 +64,50 @@ export const feeCalculatorStyles = css`
|
|
|
61
64
|
transition: padding-top 0.15s ease, width 0.15s ease;
|
|
62
65
|
}
|
|
63
66
|
|
|
67
|
+
.incentives-container {
|
|
68
|
+
width: 100%;
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
gap: 1px;
|
|
72
|
+
margin-bottom: 12px;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.incentive-banner {
|
|
76
|
+
width: 100%;
|
|
77
|
+
background-color: #e8f2ff;
|
|
78
|
+
padding: 12px 16px;
|
|
79
|
+
display: flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
gap: 12px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.incentive-icon {
|
|
85
|
+
display: flex;
|
|
86
|
+
align-items: center;
|
|
87
|
+
justify-content: center;
|
|
88
|
+
height: 3rem;
|
|
89
|
+
width: 3rem;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.incentive-content {
|
|
93
|
+
flex: 1;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.incentive-title {
|
|
97
|
+
margin: 0;
|
|
98
|
+
font-size: 1.1rem;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.incentive-subtitle {
|
|
102
|
+
margin: 4px 0 0 0;
|
|
103
|
+
color: #868e96;
|
|
104
|
+
font-size: 0.9rem;
|
|
105
|
+
opacity: 0.9;
|
|
106
|
+
}
|
|
107
|
+
|
|
64
108
|
.close-button {
|
|
65
109
|
background: none;
|
|
66
110
|
border: none;
|
|
67
|
-
color: #6c757d;
|
|
68
111
|
font-size: 24px;
|
|
69
112
|
cursor: pointer;
|
|
70
113
|
padding: 0;
|
|
@@ -141,15 +184,6 @@ export const feeCalculatorStyles = css`
|
|
|
141
184
|
cursor: not-allowed;
|
|
142
185
|
}
|
|
143
186
|
|
|
144
|
-
.reset-button {
|
|
145
|
-
background-color: #6c757d;
|
|
146
|
-
margin-top: 16px;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
.reset-button:hover {
|
|
150
|
-
background-color: #5a6268;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
187
|
.calculation-results {
|
|
154
188
|
margin-top: 24px;
|
|
155
189
|
padding-top: 16px;
|
|
@@ -199,50 +233,6 @@ export const feeCalculatorStyles = css`
|
|
|
199
233
|
border-top: 1px solid #e0e0e0;
|
|
200
234
|
}
|
|
201
235
|
|
|
202
|
-
.close-circle-button {
|
|
203
|
-
position: absolute;
|
|
204
|
-
bottom: -50px;
|
|
205
|
-
right: 20px;
|
|
206
|
-
width: 50px;
|
|
207
|
-
height: 50px;
|
|
208
|
-
border-radius: 50%;
|
|
209
|
-
background-color: #007bff;
|
|
210
|
-
color: white;
|
|
211
|
-
display: flex;
|
|
212
|
-
align-items: center;
|
|
213
|
-
justify-content: center;
|
|
214
|
-
cursor: pointer;
|
|
215
|
-
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
|
216
|
-
border: none;
|
|
217
|
-
font-size: 24px;
|
|
218
|
-
z-index: 10;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
.close-circle-button:hover {
|
|
222
|
-
background-color: #0069d9;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
#calculator-additional-actions {
|
|
226
|
-
position: fixed;
|
|
227
|
-
box-sizing: border-box;
|
|
228
|
-
z-index: 1000000;
|
|
229
|
-
margin-left: -1rem;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
.hideActions {
|
|
233
|
-
display: none;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
.showActions {
|
|
237
|
-
display: block;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
.additional-actions-container {
|
|
241
|
-
display: flex;
|
|
242
|
-
justify-content: space-around;
|
|
243
|
-
gap: 10px;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
236
|
.action-button {
|
|
247
237
|
flex: 1;
|
|
248
238
|
background-color: #f8f9fa;
|
|
@@ -278,15 +268,6 @@ export const feeCalculatorStyles = css`
|
|
|
278
268
|
background-color: var(--primary-color, #ffffff);
|
|
279
269
|
}
|
|
280
270
|
|
|
281
|
-
.mobile-close-button {
|
|
282
|
-
display: none;
|
|
283
|
-
background: none;
|
|
284
|
-
border: none;
|
|
285
|
-
padding: 8px;
|
|
286
|
-
cursor: pointer;
|
|
287
|
-
color: #6c757d;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
271
|
@media (max-width: 768px) {
|
|
291
272
|
.fee-calculator-container {
|
|
292
273
|
width: 100vw;
|
|
@@ -303,6 +284,7 @@ export const feeCalculatorStyles = css`
|
|
|
303
284
|
left: 0;
|
|
304
285
|
right: 0;
|
|
305
286
|
bottom: 0;
|
|
287
|
+
transform: none;
|
|
306
288
|
z-index: 9999;
|
|
307
289
|
}
|
|
308
290
|
|
|
@@ -324,11 +306,5 @@ export const feeCalculatorStyles = css`
|
|
|
324
306
|
.calculator-header-divider {
|
|
325
307
|
margin: 2px 0;
|
|
326
308
|
}
|
|
327
|
-
|
|
328
|
-
.mobile-close-button {
|
|
329
|
-
display: flex;
|
|
330
|
-
align-items: center;
|
|
331
|
-
justify-content: center;
|
|
332
|
-
}
|
|
333
309
|
}
|
|
334
310
|
`;
|
|
@@ -18,10 +18,12 @@ import {
|
|
|
18
18
|
import { defaultBackgroundColor, defaultPrimaryColor } from "../../themes";
|
|
19
19
|
import debounce from "lodash/debounce";
|
|
20
20
|
import { XOutlineIcon } from "../icons/XOutlineIcon";
|
|
21
|
+
import { IncentiveV2 } from "../../types/incentive-v2";
|
|
21
22
|
|
|
22
23
|
import "./components";
|
|
23
24
|
import "./components/fee-calculator-layout/fee-calculator-layout";
|
|
24
25
|
import "../chat-additional-actions";
|
|
26
|
+
import "./components/incentive-banner";
|
|
25
27
|
|
|
26
28
|
@customElement("fee-calculator")
|
|
27
29
|
export class FeeCalculator extends LitElement {
|
|
@@ -81,6 +83,9 @@ export class FeeCalculator extends LitElement {
|
|
|
81
83
|
@state()
|
|
82
84
|
private buildingWebchatView: BuildingWebchatView | null = null;
|
|
83
85
|
|
|
86
|
+
@state()
|
|
87
|
+
private incentives: IncentiveV2[] = [];
|
|
88
|
+
|
|
84
89
|
@state()
|
|
85
90
|
enabledChatWidgets: {
|
|
86
91
|
callDesktop: boolean;
|
|
@@ -131,16 +136,6 @@ export class FeeCalculator extends LitElement {
|
|
|
131
136
|
return this.buildingWebchatView?.layoutOptions ?? [];
|
|
132
137
|
}
|
|
133
138
|
|
|
134
|
-
connectedCallback(): void {
|
|
135
|
-
super.connectedCallback();
|
|
136
|
-
window.addEventListener("resize", this.adjustPositionAdditionalActions);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
disconnectedCallback(): void {
|
|
140
|
-
window.removeEventListener("resize", this.adjustPositionAdditionalActions);
|
|
141
|
-
super.disconnectedCallback();
|
|
142
|
-
}
|
|
143
|
-
|
|
144
139
|
firstUpdated = async (): Promise<void> => {
|
|
145
140
|
this.style.setProperty("--primary-color", this.primaryColor);
|
|
146
141
|
this.style.setProperty("--background-color", this.backgroundColor);
|
|
@@ -151,7 +146,6 @@ export class FeeCalculator extends LitElement {
|
|
|
151
146
|
setupCalculator = async (): Promise<void> => {
|
|
152
147
|
if (!this.buildingSlug || !this.orgSlug) return;
|
|
153
148
|
|
|
154
|
-
// TODO(Leo): Faster async loading
|
|
155
149
|
const [buildingWebchatView, buildingFeeResponse] = await Promise.all([
|
|
156
150
|
fetchBuildingWebchatView(this.orgSlug, this.buildingSlug),
|
|
157
151
|
fetchBuildingFees(this.buildingSlug),
|
|
@@ -161,6 +155,7 @@ export class FeeCalculator extends LitElement {
|
|
|
161
155
|
|
|
162
156
|
this.buildingWebchatView = buildingWebchatView;
|
|
163
157
|
this.groupedFees = this.groupFees(buildingFeeResponse.fees);
|
|
158
|
+
this.incentives = buildingFeeResponse.buildingIncentives;
|
|
164
159
|
|
|
165
160
|
this.enabledChatWidgets = {
|
|
166
161
|
callDesktop: this.buildingWebchatView?.shouldShowPhoneDesktop ?? false,
|
|
@@ -179,7 +174,6 @@ export class FeeCalculator extends LitElement {
|
|
|
179
174
|
this.style.setProperty("--primary-color", this.primaryColor);
|
|
180
175
|
this.style.setProperty("--background-color", this.backgroundColor);
|
|
181
176
|
}
|
|
182
|
-
this.adjustPositionAdditionalActions();
|
|
183
177
|
}
|
|
184
178
|
|
|
185
179
|
calculateQuote = async (): Promise<void> => {
|
|
@@ -278,33 +272,12 @@ export class FeeCalculator extends LitElement {
|
|
|
278
272
|
this.selectedLayoutIds = layoutIds;
|
|
279
273
|
};
|
|
280
274
|
|
|
281
|
-
adjustPositionAdditionalActions = (): void => {
|
|
282
|
-
const additionalActionsElement = this.shadowRoot?.getElementById(
|
|
283
|
-
"calculator-additional-actions"
|
|
284
|
-
);
|
|
285
|
-
if (!additionalActionsElement) return;
|
|
286
|
-
|
|
287
|
-
const calculatorContainer = this.shadowRoot?.querySelector(
|
|
288
|
-
".fee-calculator-container"
|
|
289
|
-
);
|
|
290
|
-
|
|
291
|
-
const containerCoords = calculatorContainer?.getBoundingClientRect();
|
|
292
|
-
if (!containerCoords) return;
|
|
293
|
-
|
|
294
|
-
additionalActionsElement.style.left = `${containerCoords.left}px`;
|
|
295
|
-
additionalActionsElement.style.top = `${containerCoords.bottom + 10}px`;
|
|
296
|
-
additionalActionsElement.style.width = `${containerCoords.width}px`;
|
|
297
|
-
};
|
|
298
|
-
|
|
299
275
|
render(): TemplateResult {
|
|
300
276
|
const containerClasses = {
|
|
301
277
|
"fee-calculator-container": true,
|
|
302
278
|
compact: this.compactDesign,
|
|
303
279
|
};
|
|
304
280
|
|
|
305
|
-
const primaryColorWithFallback = this.primaryColor || "#007bff";
|
|
306
|
-
const backgroundColorWithFallback = this.backgroundColor || "#ffffff";
|
|
307
|
-
|
|
308
281
|
return html`
|
|
309
282
|
<div
|
|
310
283
|
class=${classMap(containerClasses)}
|
|
@@ -319,10 +292,10 @@ export class FeeCalculator extends LitElement {
|
|
|
319
292
|
<button class="apply-button">Apply</button>
|
|
320
293
|
<button
|
|
321
294
|
aria-label="Close fee calculator"
|
|
322
|
-
class="
|
|
295
|
+
class="close-button"
|
|
323
296
|
@click=${this.handleClose}
|
|
324
297
|
>
|
|
325
|
-
${XOutlineIcon("
|
|
298
|
+
${XOutlineIcon("gray")}
|
|
326
299
|
</button>
|
|
327
300
|
</div>
|
|
328
301
|
</div>
|
|
@@ -330,6 +303,20 @@ export class FeeCalculator extends LitElement {
|
|
|
330
303
|
<div class="calculator-header-divider"></div>
|
|
331
304
|
|
|
332
305
|
<div class="calculator-content">
|
|
306
|
+
${this.incentives.length
|
|
307
|
+
? html`
|
|
308
|
+
<div class="incentives-container">
|
|
309
|
+
${this.incentives.map(
|
|
310
|
+
(incentive) => html`
|
|
311
|
+
<incentive-banner
|
|
312
|
+
.incentive=${incentive}
|
|
313
|
+
></incentive-banner>
|
|
314
|
+
`
|
|
315
|
+
)}
|
|
316
|
+
</div>
|
|
317
|
+
`
|
|
318
|
+
: ""}
|
|
319
|
+
|
|
333
320
|
<fee-calculator-layout
|
|
334
321
|
.buildingSlug=${this.buildingSlug}
|
|
335
322
|
.isLoading=${this.isLoading}
|
|
@@ -350,20 +337,6 @@ export class FeeCalculator extends LitElement {
|
|
|
350
337
|
<p>Prices subject to change. Additional fees may apply.</p>
|
|
351
338
|
</div>
|
|
352
339
|
</div>
|
|
353
|
-
|
|
354
|
-
<chat-additional-actions
|
|
355
|
-
id="calculator-additional-actions"
|
|
356
|
-
.showChatAdditionalActions=${true}
|
|
357
|
-
.buildingWebchatView=${this.buildingWebchatView}
|
|
358
|
-
.primaryColor=${primaryColorWithFallback}
|
|
359
|
-
.backgroundColor=${backgroundColorWithFallback}
|
|
360
|
-
.enabledChatWidgets=${this.enabledChatWidgets}
|
|
361
|
-
.onClose=${() => this.handleClose()}
|
|
362
|
-
.onClickEmailOption=${this.handleClickEmailOption}
|
|
363
|
-
.onClickPhoneOption=${this.handleClickPhoneOption}
|
|
364
|
-
.onClickSSTOption=${this.handleClickSSTOption}
|
|
365
|
-
.onClickTextUsOption=${this.handleClickTextUsOption}
|
|
366
|
-
></chat-additional-actions>
|
|
367
340
|
`;
|
|
368
341
|
}
|
|
369
342
|
}
|