@reliability-design/web 1.0.6 → 1.1.1
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/components/rel-accordion/rel-accordion.ts +4 -0
- package/dist/components/rel-alert/rel-alert.ts +83 -13
- package/dist/components/rel-avatar/rel-avatar.ts +3 -2
- package/dist/components/rel-badge/rel-badge.ts +6 -2
- package/dist/components/rel-button/rel-button.ts +64 -8
- package/dist/components/rel-calendar/rel-calendar.ts +3 -3
- package/dist/components/rel-carousel/rel-carousel.ts +10 -11
- package/dist/components/rel-checkbox/rel-checkbox.ts +33 -2
- package/dist/components/rel-chip/rel-chip.ts +63 -5
- package/dist/components/rel-divider/rel-divider.ts +9 -0
- package/dist/components/rel-drawer/rel-drawer-footer.ts +29 -0
- package/dist/components/rel-drawer/rel-drawer.ts +17 -26
- package/dist/components/rel-menu/rel-menu.ts +53 -21
- package/dist/components/rel-menubar/rel-menubar.ts +52 -23
- package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +240 -143
- package/dist/components/rel-nav-menu/rel-nav-menu.ts +227 -331
- package/dist/components/rel-navbar/rel-navbar.ts +13 -0
- package/dist/components/rel-pagination/rel-pagination.ts +11 -6
- package/dist/components/rel-popover/rel-popover.ts +16 -13
- package/dist/components/rel-radio/rel-radio.ts +18 -1
- package/dist/components/rel-resizable/rel-resizable-handle.ts +4 -8
- package/dist/components/rel-select/rel-select.ts +14 -0
- package/dist/components/rel-sheet/rel-sheet.ts +7 -6
- package/dist/components/rel-sidebar/rel-sidebar.ts +13 -5
- package/dist/components/rel-slider/rel-slider.ts +25 -2
- package/dist/components/rel-snackbar/rel-snackbar.ts +46 -16
- package/dist/components/rel-stepper/rel-stepper.ts +32 -21
- package/dist/components/rel-switch/rel-switch.ts +19 -6
- package/dist/components/rel-tab/rel-tab.ts +49 -15
- package/dist/components/rel-table/rel-table-body.ts +5 -0
- package/dist/components/rel-table/rel-table-caption.ts +6 -1
- package/dist/components/rel-table/rel-table-cell.ts +42 -49
- package/dist/components/rel-table/rel-table-footer.ts +5 -0
- package/dist/components/rel-table/rel-table-head.ts +13 -1
- package/dist/components/rel-table/rel-table-header.ts +5 -0
- package/dist/components/rel-table/rel-table-row.ts +7 -3
- package/dist/components/rel-table/rel-table.ts +8 -2
- package/dist/components/rel-textfield/rel-textfield.ts +20 -20
- package/dist/components/rel-toast/rel-toast.ts +31 -10
- package/dist/components/rel-tooltip/rel-tooltip.ts +123 -80
- package/dist/components/rel-topbar/rel-topbar-actions.ts +23 -0
- package/dist/components/rel-topbar/rel-topbar-brand.ts +46 -0
- package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +33 -0
- package/dist/components/rel-topbar/rel-topbar-dropdown.ts +28 -0
- package/dist/components/rel-topbar/rel-topbar-item.ts +315 -0
- package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +23 -0
- package/dist/components/rel-topbar/rel-topbar-profile.ts +248 -0
- package/dist/components/rel-topbar/rel-topbar-utilities.ts +23 -0
- package/dist/components/rel-topbar/rel-topbar.ts +329 -0
- package/dist/index.d.mts +278 -289
- package/dist/index.d.ts +278 -289
- package/dist/index.js +4498 -5727
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4535 -5756
- package/dist/index.mjs.map +1 -1
- package/dist/styles/vars.css +346 -294
- package/dist/{vars-ITL2K3KO.css → vars-TBB4BMSD.css} +346 -294
- package/package.json +2 -1
- package/dist/components/rel-quote-page/README.md +0 -166
- package/dist/components/rel-quote-page/rel-quote-page.ts +0 -816
|
@@ -1,816 +0,0 @@
|
|
|
1
|
-
import { LitElement, html, css } from "lit";
|
|
2
|
-
import { customElement, property, state } from "lit/decorators.js";
|
|
3
|
-
|
|
4
|
-
export interface QuoteFormData {
|
|
5
|
-
pickupLocation: string;
|
|
6
|
-
dropoffLocation: string;
|
|
7
|
-
serviceLevel: "standard" | "guaranteed";
|
|
8
|
-
originType: "commercial" | "residential";
|
|
9
|
-
destinationType: "commercial" | "residential";
|
|
10
|
-
loadingRequirements: string;
|
|
11
|
-
deliveryRequirements: string;
|
|
12
|
-
loadingLimitedAccessType: string;
|
|
13
|
-
deliveryLimitedAccessType: string;
|
|
14
|
-
pickupDate: string;
|
|
15
|
-
isHazmat: boolean;
|
|
16
|
-
commodity: string;
|
|
17
|
-
commodityDescription: string;
|
|
18
|
-
handlingUnits: number;
|
|
19
|
-
handlingType: string;
|
|
20
|
-
length: number;
|
|
21
|
-
width: number;
|
|
22
|
-
height: number;
|
|
23
|
-
totalWeight: number;
|
|
24
|
-
class: string;
|
|
25
|
-
insuredValue: number;
|
|
26
|
-
nmfcNumber: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@customElement("rel-quote-page")
|
|
30
|
-
export class RelQuotePage extends LitElement {
|
|
31
|
-
@state() private formData: QuoteFormData = {
|
|
32
|
-
pickupLocation: "",
|
|
33
|
-
dropoffLocation: "",
|
|
34
|
-
serviceLevel: "standard",
|
|
35
|
-
originType: "commercial",
|
|
36
|
-
destinationType: "commercial",
|
|
37
|
-
loadingRequirements: "",
|
|
38
|
-
deliveryRequirements: "",
|
|
39
|
-
loadingLimitedAccessType: "",
|
|
40
|
-
deliveryLimitedAccessType: "",
|
|
41
|
-
pickupDate: "",
|
|
42
|
-
isHazmat: false,
|
|
43
|
-
commodity: "",
|
|
44
|
-
commodityDescription: "",
|
|
45
|
-
handlingUnits: 0,
|
|
46
|
-
handlingType: "",
|
|
47
|
-
length: 0,
|
|
48
|
-
width: 0,
|
|
49
|
-
height: 0,
|
|
50
|
-
totalWeight: 0,
|
|
51
|
-
class: "",
|
|
52
|
-
insuredValue: 0,
|
|
53
|
-
nmfcNumber: "",
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
static styles = css`
|
|
57
|
-
:host {
|
|
58
|
-
display: block;
|
|
59
|
-
font-family: var(--rel-fontFamilies-primary);
|
|
60
|
-
background: var(--rel-colors-white);
|
|
61
|
-
padding: var(--rel-spacing-space-xl);
|
|
62
|
-
border-radius: var(--rel-borders-radius-border-radius-300);
|
|
63
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.quote-page {
|
|
67
|
-
max-width: 900px;
|
|
68
|
-
margin: 0 auto;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.section {
|
|
72
|
-
margin-bottom: var(--rel-spacing-space-2xl);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.section-title {
|
|
76
|
-
font-size: var(--rel-fontSizes-xl);
|
|
77
|
-
font-weight: var(--rel-fontWeights-bold);
|
|
78
|
-
margin: 0 0 var(--rel-spacing-space-lg) 0;
|
|
79
|
-
color: var(--rel-colors-black);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.section-row {
|
|
83
|
-
display: grid;
|
|
84
|
-
grid-template-columns: 1fr 1fr;
|
|
85
|
-
gap: var(--rel-spacing-space-lg);
|
|
86
|
-
margin-bottom: var(--rel-spacing-space-lg);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.section-row.single {
|
|
90
|
-
grid-template-columns: 1fr;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.field-group {
|
|
94
|
-
display: flex;
|
|
95
|
-
flex-direction: column;
|
|
96
|
-
gap: var(--rel-spacing-space-2xs);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.field-label {
|
|
100
|
-
font-size: var(--rel-fontSizes-sm);
|
|
101
|
-
font-weight: var(--rel-fontWeights-medium);
|
|
102
|
-
color: var(--rel-colors-gray-heading);
|
|
103
|
-
display: flex;
|
|
104
|
-
align-items: center;
|
|
105
|
-
gap: var(--rel-spacing-space-3xs);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.required {
|
|
109
|
-
color: var(--rel-colors-red-primary);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
.info-icon {
|
|
113
|
-
width: 16px;
|
|
114
|
-
height: 16px;
|
|
115
|
-
border: 1px solid var(--rel-colors-gray-border);
|
|
116
|
-
border-radius: 50%;
|
|
117
|
-
display: inline-flex;
|
|
118
|
-
align-items: center;
|
|
119
|
-
justify-content: center;
|
|
120
|
-
font-size: 11px;
|
|
121
|
-
cursor: help;
|
|
122
|
-
color: var(--rel-colors-gray-primary);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.subsection-title {
|
|
126
|
-
font-size: var(--rel-fontSizes-md);
|
|
127
|
-
font-weight: var(--rel-fontWeights-semibold);
|
|
128
|
-
margin: var(--rel-spacing-space-md) 0 var(--rel-spacing-space-sm) 0;
|
|
129
|
-
color: var(--rel-colors-gray-heading);
|
|
130
|
-
display: flex;
|
|
131
|
-
align-items: center;
|
|
132
|
-
gap: var(--rel-spacing-space-xs);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.subsection-title::before {
|
|
136
|
-
content: "";
|
|
137
|
-
width: 8px;
|
|
138
|
-
height: 8px;
|
|
139
|
-
border-radius: 50%;
|
|
140
|
-
background: var(--rel-colors-green-primary);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
.service-level-tabs {
|
|
144
|
-
display: flex;
|
|
145
|
-
gap: 0;
|
|
146
|
-
border: 1px solid var(--rel-colors-gray-border);
|
|
147
|
-
border-radius: var(--rel-borders-radius-border-radius-300);
|
|
148
|
-
overflow: hidden;
|
|
149
|
-
width: fit-content;
|
|
150
|
-
margin-bottom: var(--rel-spacing-space-md);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
.tab-button {
|
|
154
|
-
padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-lg);
|
|
155
|
-
background: var(--rel-colors-white);
|
|
156
|
-
border: none;
|
|
157
|
-
cursor: pointer;
|
|
158
|
-
font-family: var(--rel-fontFamilies-primary);
|
|
159
|
-
font-size: var(--rel-fontSizes-sm);
|
|
160
|
-
font-weight: var(--rel-fontWeights-medium);
|
|
161
|
-
color: var(--rel-colors-gray-primary);
|
|
162
|
-
transition: all 0.2s;
|
|
163
|
-
border-right: 1px solid var(--rel-colors-gray-border);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
.tab-button:last-child {
|
|
167
|
-
border-right: none;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
.tab-button.active {
|
|
171
|
-
background: var(--rel-colors-black);
|
|
172
|
-
color: var(--rel-colors-white);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.radio-group {
|
|
176
|
-
display: flex;
|
|
177
|
-
gap: var(--rel-spacing-space-lg);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
.radio-option {
|
|
181
|
-
display: flex;
|
|
182
|
-
align-items: center;
|
|
183
|
-
gap: var(--rel-spacing-space-xs);
|
|
184
|
-
cursor: pointer;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
.radio-input {
|
|
188
|
-
width: 20px;
|
|
189
|
-
height: 20px;
|
|
190
|
-
border: 2px solid var(--rel-colors-gray-border);
|
|
191
|
-
border-radius: 50%;
|
|
192
|
-
position: relative;
|
|
193
|
-
flex-shrink: 0;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
.radio-input.checked {
|
|
197
|
-
border-color: var(--rel-colors-black);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
.radio-input.checked::after {
|
|
201
|
-
content: "";
|
|
202
|
-
position: absolute;
|
|
203
|
-
inset: 4px;
|
|
204
|
-
background: var(--rel-colors-black);
|
|
205
|
-
border-radius: 50%;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
.radio-label {
|
|
209
|
-
font-size: var(--rel-fontSizes-sm);
|
|
210
|
-
font-weight: var(--rel-fontWeights-medium);
|
|
211
|
-
color: var(--rel-colors-gray-heading);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.input-field {
|
|
215
|
-
padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-sm);
|
|
216
|
-
border: 1px solid var(--rel-colors-gray-border);
|
|
217
|
-
border-radius: var(--rel-borders-radius-border-radius-300);
|
|
218
|
-
font-family: var(--rel-fontFamilies-primary);
|
|
219
|
-
font-size: var(--rel-fontSizes-sm);
|
|
220
|
-
outline: none;
|
|
221
|
-
transition: border-color 0.2s;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
.input-field:focus-visible {
|
|
225
|
-
border-color: var(--rel-colors-black);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
.input-with-icon {
|
|
229
|
-
position: relative;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
.input-icon {
|
|
233
|
-
position: absolute;
|
|
234
|
-
right: var(--rel-spacing-space-sm);
|
|
235
|
-
top: 50%;
|
|
236
|
-
transform: translateY(-50%);
|
|
237
|
-
color: var(--rel-colors-gray-primary);
|
|
238
|
-
pointer-events: none;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
.input-with-icon .input-field {
|
|
242
|
-
padding-right: var(--rel-spacing-space-2xl);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
select {
|
|
246
|
-
padding: var(--rel-spacing-space-xs) var(--rel-spacing-space-sm);
|
|
247
|
-
border: 1px solid var(--rel-colors-gray-border);
|
|
248
|
-
border-radius: var(--rel-borders-radius-border-radius-300);
|
|
249
|
-
font-family: var(--rel-fontFamilies-primary);
|
|
250
|
-
font-size: var(--rel-fontSizes-sm);
|
|
251
|
-
outline: none;
|
|
252
|
-
background: var(--rel-colors-white);
|
|
253
|
-
cursor: pointer;
|
|
254
|
-
transition: border-color 0.2s;
|
|
255
|
-
appearance: none;
|
|
256
|
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 9L1 4h10z'/%3E%3C/svg%3E");
|
|
257
|
-
background-repeat: no-repeat;
|
|
258
|
-
background-position: right 12px center;
|
|
259
|
-
padding-right: var(--rel-spacing-space-2xl);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
select:focus-visible {
|
|
263
|
-
border-color: var(--rel-colors-black);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
.helper-text {
|
|
267
|
-
font-size: var(--rel-fontSizes-xs);
|
|
268
|
-
color: var(--rel-colors-gray-placeholder);
|
|
269
|
-
margin-top: var(--rel-spacing-space-2xs);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
.dimension-inputs {
|
|
273
|
-
display: grid;
|
|
274
|
-
grid-template-columns: repeat(4, 1fr);
|
|
275
|
-
gap: var(--rel-spacing-space-sm);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
.dimension-field {
|
|
279
|
-
display: flex;
|
|
280
|
-
flex-direction: column;
|
|
281
|
-
gap: var(--rel-spacing-space-3xs);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
.dimension-label {
|
|
285
|
-
font-size: var(--rel-fontSizes-xs);
|
|
286
|
-
font-weight: var(--rel-fontWeights-medium);
|
|
287
|
-
color: var(--rel-colors-gray-heading);
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
.dimension-input-wrapper {
|
|
291
|
-
display: flex;
|
|
292
|
-
align-items: center;
|
|
293
|
-
gap: var(--rel-spacing-space-xs);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
.dimension-input {
|
|
297
|
-
flex: 1;
|
|
298
|
-
padding: var(--rel-spacing-space-xs);
|
|
299
|
-
border: 1px solid var(--rel-colors-gray-border);
|
|
300
|
-
border-radius: var(--rel-borders-radius-border-radius-300);
|
|
301
|
-
font-family: var(--rel-fontFamilies-primary);
|
|
302
|
-
font-size: var(--rel-fontSizes-sm);
|
|
303
|
-
outline: none;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
.dimension-unit {
|
|
307
|
-
font-size: var(--rel-fontSizes-xs);
|
|
308
|
-
color: var(--rel-colors-gray-primary);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
.max-note {
|
|
312
|
-
font-size: var(--rel-fontSizes-xs);
|
|
313
|
-
color: var(--rel-colors-gray-placeholder);
|
|
314
|
-
margin-top: 2px;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
@media (max-width: 768px) {
|
|
318
|
-
.section-row {
|
|
319
|
-
grid-template-columns: 1fr;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
.dimension-inputs {
|
|
323
|
-
grid-template-columns: repeat(2, 1fr);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
`;
|
|
327
|
-
|
|
328
|
-
private updateField(field: keyof QuoteFormData, value: any) {
|
|
329
|
-
this.formData = { ...this.formData, [field]: value };
|
|
330
|
-
this.dispatchEvent(
|
|
331
|
-
new CustomEvent("form-change", {
|
|
332
|
-
detail: this.formData,
|
|
333
|
-
bubbles: true,
|
|
334
|
-
composed: true,
|
|
335
|
-
})
|
|
336
|
-
);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
render() {
|
|
340
|
-
return html`
|
|
341
|
-
<div class="quote-page">
|
|
342
|
-
<!-- Shipping Details Section -->
|
|
343
|
-
<div class="section">
|
|
344
|
-
<h2 class="section-title">Shipping Details</h2>
|
|
345
|
-
|
|
346
|
-
<div class="subsection-title">Origin</div>
|
|
347
|
-
<div class="section-row">
|
|
348
|
-
<div class="field-group">
|
|
349
|
-
<label class="field-label">
|
|
350
|
-
Pickup Location <span class="required">*</span>
|
|
351
|
-
</label>
|
|
352
|
-
<div class="input-with-icon">
|
|
353
|
-
<input
|
|
354
|
-
type="text"
|
|
355
|
-
class="input-field"
|
|
356
|
-
placeholder="Enter pickup location"
|
|
357
|
-
.value="${this.formData.pickupLocation}"
|
|
358
|
-
@input="${(e: Event) =>
|
|
359
|
-
this.updateField(
|
|
360
|
-
"pickupLocation",
|
|
361
|
-
(e.target as HTMLInputElement).value
|
|
362
|
-
)}"
|
|
363
|
-
/>
|
|
364
|
-
<span class="input-icon">🔍</span>
|
|
365
|
-
</div>
|
|
366
|
-
</div>
|
|
367
|
-
|
|
368
|
-
<div class="field-group">
|
|
369
|
-
<label class="field-label">
|
|
370
|
-
Drop off Location <span class="required">*</span>
|
|
371
|
-
</label>
|
|
372
|
-
<div class="input-with-icon">
|
|
373
|
-
<input
|
|
374
|
-
type="text"
|
|
375
|
-
class="input-field"
|
|
376
|
-
placeholder="Enter drop off location"
|
|
377
|
-
.value="${this.formData.dropoffLocation}"
|
|
378
|
-
@input="${(e: Event) =>
|
|
379
|
-
this.updateField(
|
|
380
|
-
"dropoffLocation",
|
|
381
|
-
(e.target as HTMLInputElement).value
|
|
382
|
-
)}"
|
|
383
|
-
/>
|
|
384
|
-
<span class="input-icon">🔍</span>
|
|
385
|
-
</div>
|
|
386
|
-
</div>
|
|
387
|
-
</div>
|
|
388
|
-
|
|
389
|
-
<div class="field-group" style="margin-bottom: var(--rel-spacing-space-md);">
|
|
390
|
-
<label class="field-label">Service Level</label>
|
|
391
|
-
<div class="service-level-tabs">
|
|
392
|
-
<button
|
|
393
|
-
class="tab-button ${this.formData.serviceLevel === "standard"
|
|
394
|
-
? "active"
|
|
395
|
-
: ""}"
|
|
396
|
-
@click="${() => this.updateField("serviceLevel", "standard")}"
|
|
397
|
-
>
|
|
398
|
-
Standard
|
|
399
|
-
</button>
|
|
400
|
-
<button
|
|
401
|
-
class="tab-button ${this.formData.serviceLevel === "guaranteed"
|
|
402
|
-
? "active"
|
|
403
|
-
: ""}"
|
|
404
|
-
@click="${() => this.updateField("serviceLevel", "guaranteed")}"
|
|
405
|
-
>
|
|
406
|
-
Guaranteed
|
|
407
|
-
</button>
|
|
408
|
-
</div>
|
|
409
|
-
</div>
|
|
410
|
-
|
|
411
|
-
<div class="section-row">
|
|
412
|
-
<div class="field-group">
|
|
413
|
-
<label class="field-label">Origin Type</label>
|
|
414
|
-
<div class="radio-group">
|
|
415
|
-
<div
|
|
416
|
-
class="radio-option"
|
|
417
|
-
@click="${() => this.updateField("originType", "commercial")}"
|
|
418
|
-
>
|
|
419
|
-
<div
|
|
420
|
-
class="radio-input ${this.formData.originType === "commercial"
|
|
421
|
-
? "checked"
|
|
422
|
-
: ""}"
|
|
423
|
-
></div>
|
|
424
|
-
<span class="radio-label">Commercial</span>
|
|
425
|
-
</div>
|
|
426
|
-
<div
|
|
427
|
-
class="radio-option"
|
|
428
|
-
@click="${() => this.updateField("originType", "residential")}"
|
|
429
|
-
>
|
|
430
|
-
<div
|
|
431
|
-
class="radio-input ${this.formData.originType === "residential"
|
|
432
|
-
? "checked"
|
|
433
|
-
: ""}"
|
|
434
|
-
></div>
|
|
435
|
-
<span class="radio-label">Residential</span>
|
|
436
|
-
</div>
|
|
437
|
-
</div>
|
|
438
|
-
</div>
|
|
439
|
-
|
|
440
|
-
<div class="field-group">
|
|
441
|
-
<label class="field-label">Destination Type</label>
|
|
442
|
-
<div class="radio-group">
|
|
443
|
-
<div
|
|
444
|
-
class="radio-option"
|
|
445
|
-
@click="${() =>
|
|
446
|
-
this.updateField("destinationType", "commercial")}"
|
|
447
|
-
>
|
|
448
|
-
<div
|
|
449
|
-
class="radio-input ${this.formData.destinationType ===
|
|
450
|
-
"commercial"
|
|
451
|
-
? "checked"
|
|
452
|
-
: ""}"
|
|
453
|
-
></div>
|
|
454
|
-
<span class="radio-label">Commercial</span>
|
|
455
|
-
</div>
|
|
456
|
-
<div
|
|
457
|
-
class="radio-option"
|
|
458
|
-
@click="${() =>
|
|
459
|
-
this.updateField("destinationType", "residential")}"
|
|
460
|
-
>
|
|
461
|
-
<div
|
|
462
|
-
class="radio-input ${this.formData.destinationType ===
|
|
463
|
-
"residential"
|
|
464
|
-
? "checked"
|
|
465
|
-
: ""}"
|
|
466
|
-
></div>
|
|
467
|
-
<span class="radio-label">Residential</span>
|
|
468
|
-
</div>
|
|
469
|
-
</div>
|
|
470
|
-
</div>
|
|
471
|
-
</div>
|
|
472
|
-
|
|
473
|
-
<div class="section-row">
|
|
474
|
-
<div class="field-group">
|
|
475
|
-
<label class="field-label">Loading Requirements</label>
|
|
476
|
-
<select
|
|
477
|
-
.value="${this.formData.loadingRequirements}"
|
|
478
|
-
@change="${(e: Event) =>
|
|
479
|
-
this.updateField(
|
|
480
|
-
"loadingRequirements",
|
|
481
|
-
(e.target as HTMLSelectElement).value
|
|
482
|
-
)}"
|
|
483
|
-
>
|
|
484
|
-
<option value="">Select</option>
|
|
485
|
-
<option value="dock">Dock</option>
|
|
486
|
-
<option value="liftgate">Liftgate</option>
|
|
487
|
-
<option value="inside">Inside Pickup</option>
|
|
488
|
-
</select>
|
|
489
|
-
<p class="helper-text">
|
|
490
|
-
If inside pickup/delivery is selected, the driver will bring a
|
|
491
|
-
pallet jack to move the goods from the dock to the truck (or
|
|
492
|
-
vice-versa). If inside pickup or delivery is at a residence or a
|
|
493
|
-
non-dock location, please also select the "Lift gate" as well.
|
|
494
|
-
</p>
|
|
495
|
-
</div>
|
|
496
|
-
|
|
497
|
-
<div class="field-group">
|
|
498
|
-
<label class="field-label">Delivery Requirements</label>
|
|
499
|
-
<select
|
|
500
|
-
.value="${this.formData.deliveryRequirements}"
|
|
501
|
-
@change="${(e: Event) =>
|
|
502
|
-
this.updateField(
|
|
503
|
-
"deliveryRequirements",
|
|
504
|
-
(e.target as HTMLSelectElement).value
|
|
505
|
-
)}"
|
|
506
|
-
>
|
|
507
|
-
<option value="">Select</option>
|
|
508
|
-
<option value="dock">Dock</option>
|
|
509
|
-
<option value="liftgate">Liftgate</option>
|
|
510
|
-
<option value="inside">Inside Delivery</option>
|
|
511
|
-
</select>
|
|
512
|
-
</div>
|
|
513
|
-
</div>
|
|
514
|
-
|
|
515
|
-
<div class="section-row">
|
|
516
|
-
<div class="field-group">
|
|
517
|
-
<label class="field-label">Loading Limited Access Type</label>
|
|
518
|
-
<select
|
|
519
|
-
.value="${this.formData.loadingLimitedAccessType}"
|
|
520
|
-
@change="${(e: Event) =>
|
|
521
|
-
this.updateField(
|
|
522
|
-
"loadingLimitedAccessType",
|
|
523
|
-
(e.target as HTMLSelectElement).value
|
|
524
|
-
)}"
|
|
525
|
-
>
|
|
526
|
-
<option value="">Select</option>
|
|
527
|
-
<option value="none">None</option>
|
|
528
|
-
<option value="residential">Residential</option>
|
|
529
|
-
<option value="construction">Construction Site</option>
|
|
530
|
-
</select>
|
|
531
|
-
</div>
|
|
532
|
-
|
|
533
|
-
<div class="field-group">
|
|
534
|
-
<label class="field-label">Delivery Limited Access Type</label>
|
|
535
|
-
<select
|
|
536
|
-
.value="${this.formData.deliveryLimitedAccessType}"
|
|
537
|
-
@change="${(e: Event) =>
|
|
538
|
-
this.updateField(
|
|
539
|
-
"deliveryLimitedAccessType",
|
|
540
|
-
(e.target as HTMLSelectElement).value
|
|
541
|
-
)}"
|
|
542
|
-
>
|
|
543
|
-
<option value="">Select</option>
|
|
544
|
-
<option value="none">None</option>
|
|
545
|
-
<option value="residential">Residential</option>
|
|
546
|
-
<option value="construction">Construction Site</option>
|
|
547
|
-
</select>
|
|
548
|
-
</div>
|
|
549
|
-
</div>
|
|
550
|
-
|
|
551
|
-
<div class="section-row single">
|
|
552
|
-
<div class="field-group">
|
|
553
|
-
<label class="field-label">
|
|
554
|
-
Pickup Date <span class="required">*</span>
|
|
555
|
-
</label>
|
|
556
|
-
<input
|
|
557
|
-
type="date"
|
|
558
|
-
class="input-field"
|
|
559
|
-
.value="${this.formData.pickupDate}"
|
|
560
|
-
@input="${(e: Event) =>
|
|
561
|
-
this.updateField(
|
|
562
|
-
"pickupDate",
|
|
563
|
-
(e.target as HTMLInputElement).value
|
|
564
|
-
)}"
|
|
565
|
-
/>
|
|
566
|
-
</div>
|
|
567
|
-
</div>
|
|
568
|
-
</div>
|
|
569
|
-
|
|
570
|
-
<!-- Commodity Details Section -->
|
|
571
|
-
<div class="section">
|
|
572
|
-
<h2 class="section-title">Commodity Details</h2>
|
|
573
|
-
|
|
574
|
-
<div class="field-group" style="margin-bottom: var(--rel-spacing-space-md);">
|
|
575
|
-
<label class="field-label">Is this a hazmat commodity?</label>
|
|
576
|
-
<div class="radio-group">
|
|
577
|
-
<div
|
|
578
|
-
class="radio-option"
|
|
579
|
-
@click="${() => this.updateField("isHazmat", true)}"
|
|
580
|
-
>
|
|
581
|
-
<div
|
|
582
|
-
class="radio-input ${this.formData.isHazmat ? "checked" : ""}"
|
|
583
|
-
></div>
|
|
584
|
-
<span class="radio-label">Yes</span>
|
|
585
|
-
</div>
|
|
586
|
-
<div
|
|
587
|
-
class="radio-option"
|
|
588
|
-
@click="${() => this.updateField("isHazmat", false)}"
|
|
589
|
-
>
|
|
590
|
-
<div
|
|
591
|
-
class="radio-input ${!this.formData.isHazmat ? "checked" : ""}"
|
|
592
|
-
></div>
|
|
593
|
-
<span class="radio-label">No</span>
|
|
594
|
-
</div>
|
|
595
|
-
</div>
|
|
596
|
-
</div>
|
|
597
|
-
|
|
598
|
-
<div class="section-row">
|
|
599
|
-
<div class="field-group">
|
|
600
|
-
<label class="field-label">
|
|
601
|
-
Commodity <span class="required">*</span>
|
|
602
|
-
</label>
|
|
603
|
-
<input
|
|
604
|
-
type="text"
|
|
605
|
-
class="input-field"
|
|
606
|
-
.value="${this.formData.commodity}"
|
|
607
|
-
@input="${(e: Event) =>
|
|
608
|
-
this.updateField(
|
|
609
|
-
"commodity",
|
|
610
|
-
(e.target as HTMLInputElement).value
|
|
611
|
-
)}"
|
|
612
|
-
/>
|
|
613
|
-
</div>
|
|
614
|
-
|
|
615
|
-
<div class="field-group">
|
|
616
|
-
<label class="field-label">
|
|
617
|
-
Commodity Description <span class="required">*</span>
|
|
618
|
-
</label>
|
|
619
|
-
<input
|
|
620
|
-
type="text"
|
|
621
|
-
class="input-field"
|
|
622
|
-
.value="${this.formData.commodityDescription}"
|
|
623
|
-
@input="${(e: Event) =>
|
|
624
|
-
this.updateField(
|
|
625
|
-
"commodityDescription",
|
|
626
|
-
(e.target as HTMLInputElement).value
|
|
627
|
-
)}"
|
|
628
|
-
/>
|
|
629
|
-
</div>
|
|
630
|
-
</div>
|
|
631
|
-
|
|
632
|
-
<div class="section-row">
|
|
633
|
-
<div class="field-group">
|
|
634
|
-
<label class="field-label">
|
|
635
|
-
Handling Units <span class="required">*</span>
|
|
636
|
-
<span class="info-icon">ⓘ</span>
|
|
637
|
-
</label>
|
|
638
|
-
<input
|
|
639
|
-
type="number"
|
|
640
|
-
class="input-field"
|
|
641
|
-
.value="${this.formData.handlingUnits}"
|
|
642
|
-
@input="${(e: Event) =>
|
|
643
|
-
this.updateField(
|
|
644
|
-
"handlingUnits",
|
|
645
|
-
parseInt((e.target as HTMLInputElement).value) || 0
|
|
646
|
-
)}"
|
|
647
|
-
/>
|
|
648
|
-
</div>
|
|
649
|
-
|
|
650
|
-
<div class="field-group">
|
|
651
|
-
<label class="field-label">
|
|
652
|
-
Handling Type <span class="required">*</span>
|
|
653
|
-
</label>
|
|
654
|
-
<select
|
|
655
|
-
.value="${this.formData.handlingType}"
|
|
656
|
-
@change="${(e: Event) =>
|
|
657
|
-
this.updateField(
|
|
658
|
-
"handlingType",
|
|
659
|
-
(e.target as HTMLSelectElement).value
|
|
660
|
-
)}"
|
|
661
|
-
>
|
|
662
|
-
<option value="">Select</option>
|
|
663
|
-
<option value="pallet">Pallet</option>
|
|
664
|
-
<option value="crate">Crate</option>
|
|
665
|
-
<option value="box">Box</option>
|
|
666
|
-
</select>
|
|
667
|
-
</div>
|
|
668
|
-
</div>
|
|
669
|
-
|
|
670
|
-
<div class="field-group" style="margin-bottom: var(--rel-spacing-space-md);">
|
|
671
|
-
<div class="dimension-inputs">
|
|
672
|
-
<div class="dimension-field">
|
|
673
|
-
<label class="dimension-label">
|
|
674
|
-
Length <span class="required">*</span>
|
|
675
|
-
</label>
|
|
676
|
-
<div class="dimension-input-wrapper">
|
|
677
|
-
<input
|
|
678
|
-
type="number"
|
|
679
|
-
class="dimension-input"
|
|
680
|
-
.value="${this.formData.length}"
|
|
681
|
-
@input="${(e: Event) =>
|
|
682
|
-
this.updateField(
|
|
683
|
-
"length",
|
|
684
|
-
parseFloat((e.target as HTMLInputElement).value) || 0
|
|
685
|
-
)}"
|
|
686
|
-
/>
|
|
687
|
-
<span class="dimension-unit">inches</span>
|
|
688
|
-
</div>
|
|
689
|
-
</div>
|
|
690
|
-
|
|
691
|
-
<div class="dimension-field">
|
|
692
|
-
<label class="dimension-label">
|
|
693
|
-
Width <span class="required">*</span>
|
|
694
|
-
</label>
|
|
695
|
-
<div class="dimension-input-wrapper">
|
|
696
|
-
<input
|
|
697
|
-
type="number"
|
|
698
|
-
class="dimension-input"
|
|
699
|
-
.value="${this.formData.width}"
|
|
700
|
-
@input="${(e: Event) =>
|
|
701
|
-
this.updateField(
|
|
702
|
-
"width",
|
|
703
|
-
parseFloat((e.target as HTMLInputElement).value) || 0
|
|
704
|
-
)}"
|
|
705
|
-
/>
|
|
706
|
-
<span class="dimension-unit">inches</span>
|
|
707
|
-
</div>
|
|
708
|
-
<div class="max-note">96" max</div>
|
|
709
|
-
</div>
|
|
710
|
-
|
|
711
|
-
<div class="dimension-field">
|
|
712
|
-
<label class="dimension-label">
|
|
713
|
-
Height <span class="required">*</span>
|
|
714
|
-
</label>
|
|
715
|
-
<div class="dimension-input-wrapper">
|
|
716
|
-
<input
|
|
717
|
-
type="number"
|
|
718
|
-
class="dimension-input"
|
|
719
|
-
.value="${this.formData.height}"
|
|
720
|
-
@input="${(e: Event) =>
|
|
721
|
-
this.updateField(
|
|
722
|
-
"height",
|
|
723
|
-
parseFloat((e.target as HTMLInputElement).value) || 0
|
|
724
|
-
)}"
|
|
725
|
-
/>
|
|
726
|
-
<span class="dimension-unit">inches</span>
|
|
727
|
-
</div>
|
|
728
|
-
<div class="max-note">96" max</div>
|
|
729
|
-
</div>
|
|
730
|
-
|
|
731
|
-
<div class="dimension-field">
|
|
732
|
-
<label class="dimension-label">
|
|
733
|
-
Total Weight <span class="required">*</span>
|
|
734
|
-
</label>
|
|
735
|
-
<div class="dimension-input-wrapper">
|
|
736
|
-
<input
|
|
737
|
-
type="number"
|
|
738
|
-
class="dimension-input"
|
|
739
|
-
.value="${this.formData.totalWeight}"
|
|
740
|
-
@input="${(e: Event) =>
|
|
741
|
-
this.updateField(
|
|
742
|
-
"totalWeight",
|
|
743
|
-
parseFloat((e.target as HTMLInputElement).value) || 0
|
|
744
|
-
)}"
|
|
745
|
-
/>
|
|
746
|
-
<span class="dimension-unit">lbs</span>
|
|
747
|
-
</div>
|
|
748
|
-
</div>
|
|
749
|
-
</div>
|
|
750
|
-
</div>
|
|
751
|
-
|
|
752
|
-
<div class="section-row">
|
|
753
|
-
<div class="field-group">
|
|
754
|
-
<label class="field-label">
|
|
755
|
-
Class <span class="required">*</span>
|
|
756
|
-
</label>
|
|
757
|
-
<select
|
|
758
|
-
.value="${this.formData.class}"
|
|
759
|
-
@change="${(e: Event) =>
|
|
760
|
-
this.updateField("class", (e.target as HTMLSelectElement).value)}"
|
|
761
|
-
>
|
|
762
|
-
<option value="">Select</option>
|
|
763
|
-
<option value="50">Class 50</option>
|
|
764
|
-
<option value="55">Class 55</option>
|
|
765
|
-
<option value="60">Class 60</option>
|
|
766
|
-
<option value="65">Class 65</option>
|
|
767
|
-
<option value="70">Class 70</option>
|
|
768
|
-
<option value="77.5">Class 77.5</option>
|
|
769
|
-
<option value="85">Class 85</option>
|
|
770
|
-
<option value="92.5">Class 92.5</option>
|
|
771
|
-
<option value="100">Class 100</option>
|
|
772
|
-
</select>
|
|
773
|
-
</div>
|
|
774
|
-
|
|
775
|
-
<div class="field-group">
|
|
776
|
-
<label class="field-label">
|
|
777
|
-
Insured Value
|
|
778
|
-
<span class="info-icon">ⓘ</span>
|
|
779
|
-
</label>
|
|
780
|
-
<input
|
|
781
|
-
type="number"
|
|
782
|
-
class="input-field"
|
|
783
|
-
.value="${this.formData.insuredValue}"
|
|
784
|
-
@input="${(e: Event) =>
|
|
785
|
-
this.updateField(
|
|
786
|
-
"insuredValue",
|
|
787
|
-
parseFloat((e.target as HTMLInputElement).value) || 0
|
|
788
|
-
)}"
|
|
789
|
-
/>
|
|
790
|
-
</div>
|
|
791
|
-
</div>
|
|
792
|
-
|
|
793
|
-
<div class="section-row single">
|
|
794
|
-
<div class="field-group">
|
|
795
|
-
<label class="field-label">NMFC Number</label>
|
|
796
|
-
<input
|
|
797
|
-
type="text"
|
|
798
|
-
class="input-field"
|
|
799
|
-
.value="${this.formData.nmfcNumber}"
|
|
800
|
-
@input="${(e: Event) =>
|
|
801
|
-
this.updateField(
|
|
802
|
-
"nmfcNumber",
|
|
803
|
-
(e.target as HTMLInputElement).value
|
|
804
|
-
)}"
|
|
805
|
-
/>
|
|
806
|
-
<p class="helper-text">
|
|
807
|
-
Failure to provide NMFC may result in additional variance
|
|
808
|
-
charges
|
|
809
|
-
</p>
|
|
810
|
-
</div>
|
|
811
|
-
</div>
|
|
812
|
-
</div>
|
|
813
|
-
</div>
|
|
814
|
-
`;
|
|
815
|
-
}
|
|
816
|
-
}
|