@phatvu/web-component-poc 1.0.5 → 1.0.7
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/cjs/fast-button.cjs.entry.js +46 -0
- package/dist/cjs/{fast-button_4.cjs.entry.js → fast-carousel.cjs.entry.js} +1 -231
- package/dist/cjs/fast-input_4.cjs.entry.js +499 -0
- package/dist/cjs/{index-B2BTpdbN.js → index-BEvZs91D.js} +2 -2
- package/dist/cjs/job-card.cjs.entry.js +138 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/web-component-poc.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +4 -1
- package/dist/collection/components/button/button.js +2 -2
- package/dist/collection/components/fast-input/fast-input.css +55 -0
- package/dist/collection/components/fast-input/fast-input.js +335 -0
- package/dist/collection/components/job-card/job-card.css +247 -0
- package/dist/collection/components/job-card/job-card.js +435 -0
- package/dist/collection/components/jobs-item/jobs-item.js +5 -5
- package/dist/collection/components/jobs-list-only/jobs-list-only.js +185 -8
- package/dist/collection/components/jobs-list-reactive/jobs-list-reactive.css +8 -0
- package/dist/collection/components/jobs-list-reactive/jobs-list-reactive.js +203 -0
- package/dist/components/fast-button.js +1 -1
- package/dist/components/fast-carousel.js +1 -1
- package/dist/components/fast-input.d.ts +11 -0
- package/dist/components/fast-input.js +1 -0
- package/dist/components/index.js +1 -1
- package/dist/components/job-card.d.ts +11 -0
- package/dist/components/job-card.js +1 -0
- package/dist/components/jobs-item.js +1 -1
- package/dist/components/jobs-list-only.js +1 -1
- package/dist/components/jobs-list-reactive.d.ts +11 -0
- package/dist/components/jobs-list-reactive.js +1 -0
- package/dist/components/{p-ClQDwJJB.js → p-DQiaLjLf.js} +1 -1
- package/dist/esm/fast-button.entry.js +44 -0
- package/dist/esm/{fast-button_4.entry.js → fast-carousel.entry.js} +2 -229
- package/dist/esm/fast-input_4.entry.js +494 -0
- package/dist/esm/{index-Dk5CvWmb.js → index-C_ZLQIpp.js} +2 -2
- package/dist/esm/job-card.entry.js +136 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/web-component-poc.js +3 -3
- package/dist/types/components/fast-input/fast-input.d.ts +37 -0
- package/dist/types/components/job-card/job-card.d.ts +93 -0
- package/dist/types/components/jobs-item/jobs-item.d.ts +2 -2
- package/dist/types/components/jobs-list-only/jobs-list-only.d.ts +24 -2
- package/dist/types/components/jobs-list-reactive/jobs-list-reactive.d.ts +26 -0
- package/dist/types/components.d.ts +469 -7
- package/dist/types/mock/jobs-list-only.mock.d.ts +2 -2
- package/dist/types/types/jobs-list.d.ts +6 -2
- package/dist/web-component-poc/p-618fba28.entry.js +1 -0
- package/dist/web-component-poc/p-7d45772f.entry.js +1 -0
- package/dist/web-component-poc/p-bef7c8e2.entry.js +1 -0
- package/dist/web-component-poc/p-cfb9aed9.entry.js +1 -0
- package/dist/web-component-poc/web-component-poc.esm.js +1 -1
- package/hydrate/index.js +534 -6
- package/hydrate/index.mjs +534 -6
- package/package.json +9 -1
- package/dist/web-component-poc/p-df843533.entry.js +0 -1
- /package/dist/components/{p-UM9TUfe3.js → p-BiaJAQXY.js} +0 -0
- /package/dist/web-component-poc/{p-Dk5CvWmb.js → p-C_ZLQIpp.js} +0 -0
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
|
|
8
8
|
import { ButtonType, ButtonVariant } from "./components/button/button";
|
|
9
|
-
import {
|
|
9
|
+
import { Job } from "./types/jobs-list";
|
|
10
10
|
export { ButtonType, ButtonVariant } from "./components/button/button";
|
|
11
|
-
export {
|
|
11
|
+
export { Job } from "./types/jobs-list";
|
|
12
12
|
export namespace Components {
|
|
13
13
|
interface FastButton {
|
|
14
14
|
/**
|
|
@@ -70,6 +70,124 @@ export namespace Components {
|
|
|
70
70
|
*/
|
|
71
71
|
"slideClass": string;
|
|
72
72
|
}
|
|
73
|
+
interface FastInput {
|
|
74
|
+
/**
|
|
75
|
+
* @default '/api/jobs/autocomplete'
|
|
76
|
+
*/
|
|
77
|
+
"autocompleteUrl": string;
|
|
78
|
+
/**
|
|
79
|
+
* @default 300
|
|
80
|
+
*/
|
|
81
|
+
"debounceMs": number;
|
|
82
|
+
/**
|
|
83
|
+
* @default false
|
|
84
|
+
*/
|
|
85
|
+
"enableAutocomplete": boolean;
|
|
86
|
+
/**
|
|
87
|
+
* @default 3
|
|
88
|
+
*/
|
|
89
|
+
"minChars": number;
|
|
90
|
+
/**
|
|
91
|
+
* @default 'keyword'
|
|
92
|
+
*/
|
|
93
|
+
"paramName": string;
|
|
94
|
+
/**
|
|
95
|
+
* @default 'Search...'
|
|
96
|
+
*/
|
|
97
|
+
"placeholder": string;
|
|
98
|
+
"targetPath": string | undefined;
|
|
99
|
+
/**
|
|
100
|
+
* @default ''
|
|
101
|
+
*/
|
|
102
|
+
"value": string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* JobCard Component
|
|
106
|
+
* A reusable card component for displaying job information based on the React JobItem component.
|
|
107
|
+
* Features include:
|
|
108
|
+
* - Job title with apply link
|
|
109
|
+
* - Location with distance
|
|
110
|
+
* - Brand/company name
|
|
111
|
+
* - Employment type
|
|
112
|
+
* - Reference number (optional)
|
|
113
|
+
* - Remote indicator (optional)
|
|
114
|
+
* - Multi-location support
|
|
115
|
+
* - Custom extra fields
|
|
116
|
+
* @example ```html
|
|
117
|
+
* <job-card
|
|
118
|
+
* .job={jobData}
|
|
119
|
+
* applyButtonText="Apply"
|
|
120
|
+
* showBrand="true"
|
|
121
|
+
* showEmploymentType="true"
|
|
122
|
+
* ></job-card>
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
interface JobCard {
|
|
126
|
+
/**
|
|
127
|
+
* Text for the apply button
|
|
128
|
+
* @default 'Apply Now'
|
|
129
|
+
*/
|
|
130
|
+
"applyButtonText": string;
|
|
131
|
+
/**
|
|
132
|
+
* Whether to show distances in kilometers instead of miles
|
|
133
|
+
* @default false
|
|
134
|
+
*/
|
|
135
|
+
"enableKilometers": boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Custom extra fields configuration
|
|
138
|
+
* @default []
|
|
139
|
+
*/
|
|
140
|
+
"extraFieldsConfig": Array<{ name: string; value: string }>;
|
|
141
|
+
/**
|
|
142
|
+
* Index of the job in a list (used for accessibility)
|
|
143
|
+
* @default 0
|
|
144
|
+
*/
|
|
145
|
+
"index": number;
|
|
146
|
+
/**
|
|
147
|
+
* The job data object to display. Accepts either a Job object or a JSON string.
|
|
148
|
+
*/
|
|
149
|
+
"job": Job | string;
|
|
150
|
+
/**
|
|
151
|
+
* Text shown for multiple locations
|
|
152
|
+
* @default 'More locations'
|
|
153
|
+
*/
|
|
154
|
+
"multiLocationText": string;
|
|
155
|
+
/**
|
|
156
|
+
* Text shown for remote jobs
|
|
157
|
+
* @default 'Remote'
|
|
158
|
+
*/
|
|
159
|
+
"remoteLocationText": string;
|
|
160
|
+
/**
|
|
161
|
+
* Extra CSS class on the root inner element (avoid prop name "className", reserved on HTMLElement).
|
|
162
|
+
* @default ''
|
|
163
|
+
*/
|
|
164
|
+
"rootClass": string;
|
|
165
|
+
/**
|
|
166
|
+
* Whether to show the brand/company name
|
|
167
|
+
* @default true
|
|
168
|
+
*/
|
|
169
|
+
"showBrand": boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Whether to show commute time
|
|
172
|
+
* @default false
|
|
173
|
+
*/
|
|
174
|
+
"showCommuteTime": boolean;
|
|
175
|
+
/**
|
|
176
|
+
* Whether to show employment type
|
|
177
|
+
* @default true
|
|
178
|
+
*/
|
|
179
|
+
"showEmploymentType": boolean;
|
|
180
|
+
/**
|
|
181
|
+
* Whether to show the reference number
|
|
182
|
+
* @default false
|
|
183
|
+
*/
|
|
184
|
+
"showReference": boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Format string for street address (not used in base web component)
|
|
187
|
+
* @default '{street}, {city_state_abbr}'
|
|
188
|
+
*/
|
|
189
|
+
"streetFormat": string;
|
|
190
|
+
}
|
|
73
191
|
interface JobsItem {
|
|
74
192
|
/**
|
|
75
193
|
* @default 'Apply Now'
|
|
@@ -83,7 +201,7 @@ export namespace Components {
|
|
|
83
201
|
* @default 0
|
|
84
202
|
*/
|
|
85
203
|
"index": number;
|
|
86
|
-
"job":
|
|
204
|
+
"job": Job;
|
|
87
205
|
/**
|
|
88
206
|
* @default 'More locations'
|
|
89
207
|
*/
|
|
@@ -106,10 +224,20 @@ export namespace Components {
|
|
|
106
224
|
"showReference": boolean;
|
|
107
225
|
}
|
|
108
226
|
interface JobsListOnly {
|
|
227
|
+
/**
|
|
228
|
+
* Jobs search endpoint
|
|
229
|
+
* @default '/api/get-jobs'
|
|
230
|
+
*/
|
|
231
|
+
"apiUrl": string;
|
|
109
232
|
/**
|
|
110
233
|
* @default 'Apply Now'
|
|
111
234
|
*/
|
|
112
235
|
"applyButtonText": string;
|
|
236
|
+
/**
|
|
237
|
+
* When true, component manages its own data fetching
|
|
238
|
+
* @default false
|
|
239
|
+
*/
|
|
240
|
+
"autoFetch": boolean;
|
|
113
241
|
/**
|
|
114
242
|
* @default 'Try different keywords'
|
|
115
243
|
*/
|
|
@@ -138,7 +266,7 @@ export namespace Components {
|
|
|
138
266
|
* List of jobs to display. Pass as JSON string from attribute or as array via property (e.g. from React). Ignored when mock-data="true".
|
|
139
267
|
* @default []
|
|
140
268
|
*/
|
|
141
|
-
"jobs":
|
|
269
|
+
"jobs": Job[] | string;
|
|
142
270
|
/**
|
|
143
271
|
* Show loading spinner. Ignored when mock-data="true" (mock shows data immediately).
|
|
144
272
|
* @default false
|
|
@@ -174,6 +302,11 @@ export namespace Components {
|
|
|
174
302
|
* @default true
|
|
175
303
|
*/
|
|
176
304
|
"showBrand": boolean;
|
|
305
|
+
/**
|
|
306
|
+
* Template string for count display. Tokens: {count} = jobs on page, {total} = total from API.
|
|
307
|
+
* @default ''
|
|
308
|
+
*/
|
|
309
|
+
"showCountText": string;
|
|
177
310
|
/**
|
|
178
311
|
* @default true
|
|
179
312
|
*/
|
|
@@ -195,12 +328,46 @@ export namespace Components {
|
|
|
195
328
|
* @default 0
|
|
196
329
|
*/
|
|
197
330
|
"totalJob": number;
|
|
331
|
+
/**
|
|
332
|
+
* Comma-separated URL param names to watch and forward to the API
|
|
333
|
+
* @default 'keyword'
|
|
334
|
+
*/
|
|
335
|
+
"watchParams": string;
|
|
336
|
+
}
|
|
337
|
+
interface JobsListReactive {
|
|
338
|
+
/**
|
|
339
|
+
* Jobs search endpoint
|
|
340
|
+
* @default '/api/get-jobs'
|
|
341
|
+
*/
|
|
342
|
+
"apiUrl": string;
|
|
343
|
+
/**
|
|
344
|
+
* CSS class added to container while fetching
|
|
345
|
+
* @default 'loading'
|
|
346
|
+
*/
|
|
347
|
+
"loadingClass": string;
|
|
348
|
+
/**
|
|
349
|
+
* Comma-separated URL param names to watch and forward to the API
|
|
350
|
+
* @default 'keyword,location_name'
|
|
351
|
+
*/
|
|
352
|
+
"watchParams": string;
|
|
198
353
|
}
|
|
199
354
|
}
|
|
200
355
|
export interface FastButtonCustomEvent<T> extends CustomEvent<T> {
|
|
201
356
|
detail: T;
|
|
202
357
|
target: HTMLFastButtonElement;
|
|
203
358
|
}
|
|
359
|
+
export interface FastInputCustomEvent<T> extends CustomEvent<T> {
|
|
360
|
+
detail: T;
|
|
361
|
+
target: HTMLFastInputElement;
|
|
362
|
+
}
|
|
363
|
+
export interface JobsListOnlyCustomEvent<T> extends CustomEvent<T> {
|
|
364
|
+
detail: T;
|
|
365
|
+
target: HTMLJobsListOnlyElement;
|
|
366
|
+
}
|
|
367
|
+
export interface JobsListReactiveCustomEvent<T> extends CustomEvent<T> {
|
|
368
|
+
detail: T;
|
|
369
|
+
target: HTMLJobsListReactiveElement;
|
|
370
|
+
}
|
|
204
371
|
declare global {
|
|
205
372
|
interface HTMLFastButtonElementEventMap {
|
|
206
373
|
"buttonClick": MouseEvent;
|
|
@@ -225,23 +392,99 @@ declare global {
|
|
|
225
392
|
prototype: HTMLFastCarouselElement;
|
|
226
393
|
new (): HTMLFastCarouselElement;
|
|
227
394
|
};
|
|
395
|
+
interface HTMLFastInputElementEventMap {
|
|
396
|
+
"searchExecuted": { keyword: string };
|
|
397
|
+
"inputChanged": { value: string };
|
|
398
|
+
}
|
|
399
|
+
interface HTMLFastInputElement extends Components.FastInput, HTMLStencilElement {
|
|
400
|
+
addEventListener<K extends keyof HTMLFastInputElementEventMap>(type: K, listener: (this: HTMLFastInputElement, ev: FastInputCustomEvent<HTMLFastInputElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
401
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
402
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
403
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
404
|
+
removeEventListener<K extends keyof HTMLFastInputElementEventMap>(type: K, listener: (this: HTMLFastInputElement, ev: FastInputCustomEvent<HTMLFastInputElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
405
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
406
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
407
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
408
|
+
}
|
|
409
|
+
var HTMLFastInputElement: {
|
|
410
|
+
prototype: HTMLFastInputElement;
|
|
411
|
+
new (): HTMLFastInputElement;
|
|
412
|
+
};
|
|
413
|
+
/**
|
|
414
|
+
* JobCard Component
|
|
415
|
+
* A reusable card component for displaying job information based on the React JobItem component.
|
|
416
|
+
* Features include:
|
|
417
|
+
* - Job title with apply link
|
|
418
|
+
* - Location with distance
|
|
419
|
+
* - Brand/company name
|
|
420
|
+
* - Employment type
|
|
421
|
+
* - Reference number (optional)
|
|
422
|
+
* - Remote indicator (optional)
|
|
423
|
+
* - Multi-location support
|
|
424
|
+
* - Custom extra fields
|
|
425
|
+
* @example ```html
|
|
426
|
+
* <job-card
|
|
427
|
+
* .job={jobData}
|
|
428
|
+
* applyButtonText="Apply"
|
|
429
|
+
* showBrand="true"
|
|
430
|
+
* showEmploymentType="true"
|
|
431
|
+
* ></job-card>
|
|
432
|
+
* ```
|
|
433
|
+
*/
|
|
434
|
+
interface HTMLJobCardElement extends Components.JobCard, HTMLStencilElement {
|
|
435
|
+
}
|
|
436
|
+
var HTMLJobCardElement: {
|
|
437
|
+
prototype: HTMLJobCardElement;
|
|
438
|
+
new (): HTMLJobCardElement;
|
|
439
|
+
};
|
|
228
440
|
interface HTMLJobsItemElement extends Components.JobsItem, HTMLStencilElement {
|
|
229
441
|
}
|
|
230
442
|
var HTMLJobsItemElement: {
|
|
231
443
|
prototype: HTMLJobsItemElement;
|
|
232
444
|
new (): HTMLJobsItemElement;
|
|
233
445
|
};
|
|
446
|
+
interface HTMLJobsListOnlyElementEventMap {
|
|
447
|
+
"fetchComplete": { jobs: any[]; totalJob: number };
|
|
448
|
+
}
|
|
234
449
|
interface HTMLJobsListOnlyElement extends Components.JobsListOnly, HTMLStencilElement {
|
|
450
|
+
addEventListener<K extends keyof HTMLJobsListOnlyElementEventMap>(type: K, listener: (this: HTMLJobsListOnlyElement, ev: JobsListOnlyCustomEvent<HTMLJobsListOnlyElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
451
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
452
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
453
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
454
|
+
removeEventListener<K extends keyof HTMLJobsListOnlyElementEventMap>(type: K, listener: (this: HTMLJobsListOnlyElement, ev: JobsListOnlyCustomEvent<HTMLJobsListOnlyElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
455
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
456
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
457
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
235
458
|
}
|
|
236
459
|
var HTMLJobsListOnlyElement: {
|
|
237
460
|
prototype: HTMLJobsListOnlyElement;
|
|
238
461
|
new (): HTMLJobsListOnlyElement;
|
|
239
462
|
};
|
|
463
|
+
interface HTMLJobsListReactiveElementEventMap {
|
|
464
|
+
"fetchComplete": { jobs: Job[]; totalJob: number };
|
|
465
|
+
}
|
|
466
|
+
interface HTMLJobsListReactiveElement extends Components.JobsListReactive, HTMLStencilElement {
|
|
467
|
+
addEventListener<K extends keyof HTMLJobsListReactiveElementEventMap>(type: K, listener: (this: HTMLJobsListReactiveElement, ev: JobsListReactiveCustomEvent<HTMLJobsListReactiveElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
468
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
469
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
470
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
471
|
+
removeEventListener<K extends keyof HTMLJobsListReactiveElementEventMap>(type: K, listener: (this: HTMLJobsListReactiveElement, ev: JobsListReactiveCustomEvent<HTMLJobsListReactiveElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
472
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
473
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
474
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
475
|
+
}
|
|
476
|
+
var HTMLJobsListReactiveElement: {
|
|
477
|
+
prototype: HTMLJobsListReactiveElement;
|
|
478
|
+
new (): HTMLJobsListReactiveElement;
|
|
479
|
+
};
|
|
240
480
|
interface HTMLElementTagNameMap {
|
|
241
481
|
"fast-button": HTMLFastButtonElement;
|
|
242
482
|
"fast-carousel": HTMLFastCarouselElement;
|
|
483
|
+
"fast-input": HTMLFastInputElement;
|
|
484
|
+
"job-card": HTMLJobCardElement;
|
|
243
485
|
"jobs-item": HTMLJobsItemElement;
|
|
244
486
|
"jobs-list-only": HTMLJobsListOnlyElement;
|
|
487
|
+
"jobs-list-reactive": HTMLJobsListReactiveElement;
|
|
245
488
|
}
|
|
246
489
|
}
|
|
247
490
|
declare namespace LocalJSX {
|
|
@@ -293,6 +536,126 @@ declare namespace LocalJSX {
|
|
|
293
536
|
*/
|
|
294
537
|
"slideClass"?: string;
|
|
295
538
|
}
|
|
539
|
+
interface FastInput {
|
|
540
|
+
/**
|
|
541
|
+
* @default '/api/jobs/autocomplete'
|
|
542
|
+
*/
|
|
543
|
+
"autocompleteUrl"?: string;
|
|
544
|
+
/**
|
|
545
|
+
* @default 300
|
|
546
|
+
*/
|
|
547
|
+
"debounceMs"?: number;
|
|
548
|
+
/**
|
|
549
|
+
* @default false
|
|
550
|
+
*/
|
|
551
|
+
"enableAutocomplete"?: boolean;
|
|
552
|
+
/**
|
|
553
|
+
* @default 3
|
|
554
|
+
*/
|
|
555
|
+
"minChars"?: number;
|
|
556
|
+
"onInputChanged"?: (event: FastInputCustomEvent<{ value: string }>) => void;
|
|
557
|
+
"onSearchExecuted"?: (event: FastInputCustomEvent<{ keyword: string }>) => void;
|
|
558
|
+
/**
|
|
559
|
+
* @default 'keyword'
|
|
560
|
+
*/
|
|
561
|
+
"paramName"?: string;
|
|
562
|
+
/**
|
|
563
|
+
* @default 'Search...'
|
|
564
|
+
*/
|
|
565
|
+
"placeholder"?: string;
|
|
566
|
+
"targetPath"?: string | undefined;
|
|
567
|
+
/**
|
|
568
|
+
* @default ''
|
|
569
|
+
*/
|
|
570
|
+
"value"?: string;
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* JobCard Component
|
|
574
|
+
* A reusable card component for displaying job information based on the React JobItem component.
|
|
575
|
+
* Features include:
|
|
576
|
+
* - Job title with apply link
|
|
577
|
+
* - Location with distance
|
|
578
|
+
* - Brand/company name
|
|
579
|
+
* - Employment type
|
|
580
|
+
* - Reference number (optional)
|
|
581
|
+
* - Remote indicator (optional)
|
|
582
|
+
* - Multi-location support
|
|
583
|
+
* - Custom extra fields
|
|
584
|
+
* @example ```html
|
|
585
|
+
* <job-card
|
|
586
|
+
* .job={jobData}
|
|
587
|
+
* applyButtonText="Apply"
|
|
588
|
+
* showBrand="true"
|
|
589
|
+
* showEmploymentType="true"
|
|
590
|
+
* ></job-card>
|
|
591
|
+
* ```
|
|
592
|
+
*/
|
|
593
|
+
interface JobCard {
|
|
594
|
+
/**
|
|
595
|
+
* Text for the apply button
|
|
596
|
+
* @default 'Apply Now'
|
|
597
|
+
*/
|
|
598
|
+
"applyButtonText"?: string;
|
|
599
|
+
/**
|
|
600
|
+
* Whether to show distances in kilometers instead of miles
|
|
601
|
+
* @default false
|
|
602
|
+
*/
|
|
603
|
+
"enableKilometers"?: boolean;
|
|
604
|
+
/**
|
|
605
|
+
* Custom extra fields configuration
|
|
606
|
+
* @default []
|
|
607
|
+
*/
|
|
608
|
+
"extraFieldsConfig"?: Array<{ name: string; value: string }>;
|
|
609
|
+
/**
|
|
610
|
+
* Index of the job in a list (used for accessibility)
|
|
611
|
+
* @default 0
|
|
612
|
+
*/
|
|
613
|
+
"index"?: number;
|
|
614
|
+
/**
|
|
615
|
+
* The job data object to display. Accepts either a Job object or a JSON string.
|
|
616
|
+
*/
|
|
617
|
+
"job"?: Job | string;
|
|
618
|
+
/**
|
|
619
|
+
* Text shown for multiple locations
|
|
620
|
+
* @default 'More locations'
|
|
621
|
+
*/
|
|
622
|
+
"multiLocationText"?: string;
|
|
623
|
+
/**
|
|
624
|
+
* Text shown for remote jobs
|
|
625
|
+
* @default 'Remote'
|
|
626
|
+
*/
|
|
627
|
+
"remoteLocationText"?: string;
|
|
628
|
+
/**
|
|
629
|
+
* Extra CSS class on the root inner element (avoid prop name "className", reserved on HTMLElement).
|
|
630
|
+
* @default ''
|
|
631
|
+
*/
|
|
632
|
+
"rootClass"?: string;
|
|
633
|
+
/**
|
|
634
|
+
* Whether to show the brand/company name
|
|
635
|
+
* @default true
|
|
636
|
+
*/
|
|
637
|
+
"showBrand"?: boolean;
|
|
638
|
+
/**
|
|
639
|
+
* Whether to show commute time
|
|
640
|
+
* @default false
|
|
641
|
+
*/
|
|
642
|
+
"showCommuteTime"?: boolean;
|
|
643
|
+
/**
|
|
644
|
+
* Whether to show employment type
|
|
645
|
+
* @default true
|
|
646
|
+
*/
|
|
647
|
+
"showEmploymentType"?: boolean;
|
|
648
|
+
/**
|
|
649
|
+
* Whether to show the reference number
|
|
650
|
+
* @default false
|
|
651
|
+
*/
|
|
652
|
+
"showReference"?: boolean;
|
|
653
|
+
/**
|
|
654
|
+
* Format string for street address (not used in base web component)
|
|
655
|
+
* @default '{street}, {city_state_abbr}'
|
|
656
|
+
*/
|
|
657
|
+
"streetFormat"?: string;
|
|
658
|
+
}
|
|
296
659
|
interface JobsItem {
|
|
297
660
|
/**
|
|
298
661
|
* @default 'Apply Now'
|
|
@@ -306,7 +669,7 @@ declare namespace LocalJSX {
|
|
|
306
669
|
* @default 0
|
|
307
670
|
*/
|
|
308
671
|
"index"?: number;
|
|
309
|
-
"job"?:
|
|
672
|
+
"job"?: Job;
|
|
310
673
|
/**
|
|
311
674
|
* @default 'More locations'
|
|
312
675
|
*/
|
|
@@ -329,10 +692,20 @@ declare namespace LocalJSX {
|
|
|
329
692
|
"showReference"?: boolean;
|
|
330
693
|
}
|
|
331
694
|
interface JobsListOnly {
|
|
695
|
+
/**
|
|
696
|
+
* Jobs search endpoint
|
|
697
|
+
* @default '/api/get-jobs'
|
|
698
|
+
*/
|
|
699
|
+
"apiUrl"?: string;
|
|
332
700
|
/**
|
|
333
701
|
* @default 'Apply Now'
|
|
334
702
|
*/
|
|
335
703
|
"applyButtonText"?: string;
|
|
704
|
+
/**
|
|
705
|
+
* When true, component manages its own data fetching
|
|
706
|
+
* @default false
|
|
707
|
+
*/
|
|
708
|
+
"autoFetch"?: boolean;
|
|
336
709
|
/**
|
|
337
710
|
* @default 'Try different keywords'
|
|
338
711
|
*/
|
|
@@ -361,7 +734,7 @@ declare namespace LocalJSX {
|
|
|
361
734
|
* List of jobs to display. Pass as JSON string from attribute or as array via property (e.g. from React). Ignored when mock-data="true".
|
|
362
735
|
* @default []
|
|
363
736
|
*/
|
|
364
|
-
"jobs"?:
|
|
737
|
+
"jobs"?: Job[] | string;
|
|
365
738
|
/**
|
|
366
739
|
* Show loading spinner. Ignored when mock-data="true" (mock shows data immediately).
|
|
367
740
|
* @default false
|
|
@@ -384,6 +757,7 @@ declare namespace LocalJSX {
|
|
|
384
757
|
* @default defaultNoResultsLine2
|
|
385
758
|
*/
|
|
386
759
|
"noResultsLine2"?: string;
|
|
760
|
+
"onFetchComplete"?: (event: JobsListOnlyCustomEvent<{ jobs: any[]; totalJob: number }>) => void;
|
|
387
761
|
/**
|
|
388
762
|
* @default 'Remote'
|
|
389
763
|
*/
|
|
@@ -397,6 +771,11 @@ declare namespace LocalJSX {
|
|
|
397
771
|
* @default true
|
|
398
772
|
*/
|
|
399
773
|
"showBrand"?: boolean;
|
|
774
|
+
/**
|
|
775
|
+
* Template string for count display. Tokens: {count} = jobs on page, {total} = total from API.
|
|
776
|
+
* @default ''
|
|
777
|
+
*/
|
|
778
|
+
"showCountText"?: string;
|
|
400
779
|
/**
|
|
401
780
|
* @default true
|
|
402
781
|
*/
|
|
@@ -418,6 +797,29 @@ declare namespace LocalJSX {
|
|
|
418
797
|
* @default 0
|
|
419
798
|
*/
|
|
420
799
|
"totalJob"?: number;
|
|
800
|
+
/**
|
|
801
|
+
* Comma-separated URL param names to watch and forward to the API
|
|
802
|
+
* @default 'keyword'
|
|
803
|
+
*/
|
|
804
|
+
"watchParams"?: string;
|
|
805
|
+
}
|
|
806
|
+
interface JobsListReactive {
|
|
807
|
+
/**
|
|
808
|
+
* Jobs search endpoint
|
|
809
|
+
* @default '/api/get-jobs'
|
|
810
|
+
*/
|
|
811
|
+
"apiUrl"?: string;
|
|
812
|
+
/**
|
|
813
|
+
* CSS class added to container while fetching
|
|
814
|
+
* @default 'loading'
|
|
815
|
+
*/
|
|
816
|
+
"loadingClass"?: string;
|
|
817
|
+
"onFetchComplete"?: (event: JobsListReactiveCustomEvent<{ jobs: Job[]; totalJob: number }>) => void;
|
|
818
|
+
/**
|
|
819
|
+
* Comma-separated URL param names to watch and forward to the API
|
|
820
|
+
* @default 'keyword,location_name'
|
|
821
|
+
*/
|
|
822
|
+
"watchParams"?: string;
|
|
421
823
|
}
|
|
422
824
|
|
|
423
825
|
interface FastButtonAttributes {
|
|
@@ -433,6 +835,30 @@ declare namespace LocalJSX {
|
|
|
433
835
|
"slideClass": string;
|
|
434
836
|
"itemClass": string;
|
|
435
837
|
}
|
|
838
|
+
interface FastInputAttributes {
|
|
839
|
+
"placeholder": string;
|
|
840
|
+
"value": string;
|
|
841
|
+
"paramName": string;
|
|
842
|
+
"enableAutocomplete": boolean;
|
|
843
|
+
"autocompleteUrl": string;
|
|
844
|
+
"targetPath": string | undefined;
|
|
845
|
+
"debounceMs": number;
|
|
846
|
+
"minChars": number;
|
|
847
|
+
}
|
|
848
|
+
interface JobCardAttributes {
|
|
849
|
+
"job": Job | string;
|
|
850
|
+
"index": number;
|
|
851
|
+
"applyButtonText": string;
|
|
852
|
+
"showBrand": boolean;
|
|
853
|
+
"showReference": boolean;
|
|
854
|
+
"showEmploymentType": boolean;
|
|
855
|
+
"multiLocationText": string;
|
|
856
|
+
"remoteLocationText": string;
|
|
857
|
+
"enableKilometers": boolean;
|
|
858
|
+
"showCommuteTime": boolean;
|
|
859
|
+
"streetFormat": string;
|
|
860
|
+
"rootClass": string;
|
|
861
|
+
}
|
|
436
862
|
interface JobsItemAttributes {
|
|
437
863
|
"index": number;
|
|
438
864
|
"applyButtonText": string;
|
|
@@ -445,7 +871,7 @@ declare namespace LocalJSX {
|
|
|
445
871
|
}
|
|
446
872
|
interface JobsListOnlyAttributes {
|
|
447
873
|
"mockData": boolean;
|
|
448
|
-
"jobs":
|
|
874
|
+
"jobs": Job[] | string;
|
|
449
875
|
"loading": boolean;
|
|
450
876
|
"totalJob": number;
|
|
451
877
|
"noResultsLine1": string;
|
|
@@ -459,19 +885,31 @@ declare namespace LocalJSX {
|
|
|
459
885
|
"remoteLocationText": string;
|
|
460
886
|
"enableKilometers": boolean;
|
|
461
887
|
"rootClass": string;
|
|
888
|
+
"showCountText": string;
|
|
462
889
|
"showSuggestions": boolean;
|
|
463
890
|
"clearResultSuggestionsTitleText": string;
|
|
464
891
|
"clearResultSuggestionsLine1": string;
|
|
465
892
|
"clearResultSuggestionsLine2": string;
|
|
466
893
|
"clearResultSuggestionsLine3": string;
|
|
467
894
|
"clearResultSuggestionsLine4": string;
|
|
895
|
+
"autoFetch": boolean;
|
|
896
|
+
"apiUrl": string;
|
|
897
|
+
"watchParams": string;
|
|
898
|
+
}
|
|
899
|
+
interface JobsListReactiveAttributes {
|
|
900
|
+
"apiUrl": string;
|
|
901
|
+
"watchParams": string;
|
|
902
|
+
"loadingClass": string;
|
|
468
903
|
}
|
|
469
904
|
|
|
470
905
|
interface IntrinsicElements {
|
|
471
906
|
"fast-button": Omit<FastButton, keyof FastButtonAttributes> & { [K in keyof FastButton & keyof FastButtonAttributes]?: FastButton[K] } & { [K in keyof FastButton & keyof FastButtonAttributes as `attr:${K}`]?: FastButtonAttributes[K] } & { [K in keyof FastButton & keyof FastButtonAttributes as `prop:${K}`]?: FastButton[K] };
|
|
472
907
|
"fast-carousel": Omit<FastCarousel, keyof FastCarouselAttributes> & { [K in keyof FastCarousel & keyof FastCarouselAttributes]?: FastCarousel[K] } & { [K in keyof FastCarousel & keyof FastCarouselAttributes as `attr:${K}`]?: FastCarouselAttributes[K] } & { [K in keyof FastCarousel & keyof FastCarouselAttributes as `prop:${K}`]?: FastCarousel[K] };
|
|
908
|
+
"fast-input": Omit<FastInput, keyof FastInputAttributes> & { [K in keyof FastInput & keyof FastInputAttributes]?: FastInput[K] } & { [K in keyof FastInput & keyof FastInputAttributes as `attr:${K}`]?: FastInputAttributes[K] } & { [K in keyof FastInput & keyof FastInputAttributes as `prop:${K}`]?: FastInput[K] };
|
|
909
|
+
"job-card": Omit<JobCard, keyof JobCardAttributes> & { [K in keyof JobCard & keyof JobCardAttributes]?: JobCard[K] } & { [K in keyof JobCard & keyof JobCardAttributes as `attr:${K}`]?: JobCardAttributes[K] } & { [K in keyof JobCard & keyof JobCardAttributes as `prop:${K}`]?: JobCard[K] };
|
|
473
910
|
"jobs-item": Omit<JobsItem, keyof JobsItemAttributes> & { [K in keyof JobsItem & keyof JobsItemAttributes]?: JobsItem[K] } & { [K in keyof JobsItem & keyof JobsItemAttributes as `attr:${K}`]?: JobsItemAttributes[K] } & { [K in keyof JobsItem & keyof JobsItemAttributes as `prop:${K}`]?: JobsItem[K] };
|
|
474
911
|
"jobs-list-only": Omit<JobsListOnly, keyof JobsListOnlyAttributes> & { [K in keyof JobsListOnly & keyof JobsListOnlyAttributes]?: JobsListOnly[K] } & { [K in keyof JobsListOnly & keyof JobsListOnlyAttributes as `attr:${K}`]?: JobsListOnlyAttributes[K] } & { [K in keyof JobsListOnly & keyof JobsListOnlyAttributes as `prop:${K}`]?: JobsListOnly[K] };
|
|
912
|
+
"jobs-list-reactive": Omit<JobsListReactive, keyof JobsListReactiveAttributes> & { [K in keyof JobsListReactive & keyof JobsListReactiveAttributes]?: JobsListReactive[K] } & { [K in keyof JobsListReactive & keyof JobsListReactiveAttributes as `attr:${K}`]?: JobsListReactiveAttributes[K] } & { [K in keyof JobsListReactive & keyof JobsListReactiveAttributes as `prop:${K}`]?: JobsListReactive[K] };
|
|
475
913
|
}
|
|
476
914
|
}
|
|
477
915
|
export { LocalJSX as JSX };
|
|
@@ -480,8 +918,32 @@ declare module "@stencil/core" {
|
|
|
480
918
|
interface IntrinsicElements {
|
|
481
919
|
"fast-button": LocalJSX.IntrinsicElements["fast-button"] & JSXBase.HTMLAttributes<HTMLFastButtonElement>;
|
|
482
920
|
"fast-carousel": LocalJSX.IntrinsicElements["fast-carousel"] & JSXBase.HTMLAttributes<HTMLFastCarouselElement>;
|
|
921
|
+
"fast-input": LocalJSX.IntrinsicElements["fast-input"] & JSXBase.HTMLAttributes<HTMLFastInputElement>;
|
|
922
|
+
/**
|
|
923
|
+
* JobCard Component
|
|
924
|
+
* A reusable card component for displaying job information based on the React JobItem component.
|
|
925
|
+
* Features include:
|
|
926
|
+
* - Job title with apply link
|
|
927
|
+
* - Location with distance
|
|
928
|
+
* - Brand/company name
|
|
929
|
+
* - Employment type
|
|
930
|
+
* - Reference number (optional)
|
|
931
|
+
* - Remote indicator (optional)
|
|
932
|
+
* - Multi-location support
|
|
933
|
+
* - Custom extra fields
|
|
934
|
+
* @example ```html
|
|
935
|
+
* <job-card
|
|
936
|
+
* .job={jobData}
|
|
937
|
+
* applyButtonText="Apply"
|
|
938
|
+
* showBrand="true"
|
|
939
|
+
* showEmploymentType="true"
|
|
940
|
+
* ></job-card>
|
|
941
|
+
* ```
|
|
942
|
+
*/
|
|
943
|
+
"job-card": LocalJSX.IntrinsicElements["job-card"] & JSXBase.HTMLAttributes<HTMLJobCardElement>;
|
|
483
944
|
"jobs-item": LocalJSX.IntrinsicElements["jobs-item"] & JSXBase.HTMLAttributes<HTMLJobsItemElement>;
|
|
484
945
|
"jobs-list-only": LocalJSX.IntrinsicElements["jobs-list-only"] & JSXBase.HTMLAttributes<HTMLJobsListOnlyElement>;
|
|
946
|
+
"jobs-list-reactive": LocalJSX.IntrinsicElements["jobs-list-reactive"] & JSXBase.HTMLAttributes<HTMLJobsListReactiveElement>;
|
|
485
947
|
}
|
|
486
948
|
}
|
|
487
949
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Job } from '../types/jobs-list';
|
|
2
2
|
/**
|
|
3
3
|
* Mock jobs for local development and docs.
|
|
4
4
|
* Use in www or static HTML: jobs='...' (JSON.stringify(mockJobs)).
|
|
5
5
|
*/
|
|
6
|
-
export declare const mockJobsListOnly:
|
|
6
|
+
export declare const mockJobsListOnly: Job[];
|
|
7
7
|
export declare function getMockJobsJson(): string;
|
|
@@ -21,7 +21,11 @@ export interface JobCardExtraFieldSummary {
|
|
|
21
21
|
value: string | string[];
|
|
22
22
|
classname: string;
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Job data shape for job-card and jobs-list-only components.
|
|
26
|
+
* Compatible with ReactJob from career-sites-renderer.
|
|
27
|
+
*/
|
|
28
|
+
export interface Job {
|
|
25
29
|
title?: string;
|
|
26
30
|
reference?: string;
|
|
27
31
|
originalURL?: string;
|
|
@@ -34,7 +38,7 @@ export interface JobSummary {
|
|
|
34
38
|
[key: string]: unknown;
|
|
35
39
|
}
|
|
36
40
|
export interface JobsListOnlyProps {
|
|
37
|
-
jobs?:
|
|
41
|
+
jobs?: Job[];
|
|
38
42
|
loading?: boolean;
|
|
39
43
|
totalJob?: number;
|
|
40
44
|
noResultsLine1?: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as t,c as o,h as r}from"./p-C_ZLQIpp.js";const c=class{constructor(r){t(this,r),this.buttonClick=o(this,"buttonClick")}variant="primary";type="button";disabled=!1;buttonClick;handleClick=t=>{if(this.disabled)return t.preventDefault(),void t.stopPropagation();this.buttonClick.emit(t)};render(){return r("button",{key:"3b74909afe4e305dfd38f0b07657202e3d5bfccd",type:this.type,class:{"custom-button":!0,[`custom-button--${this.variant}`]:!0,"custom-button--disabled":this.disabled},disabled:this.disabled,onClick:this.handleClick},r("slot",{key:"49845d350e4665c5c66e30bd9262f788eaaa1e20"}))}};c.style=":host{display:inline-block}.custom-button{display:inline-flex;align-items:center;justify-content:center;padding:0.5rem 1rem;font-family:inherit;font-size:0.875rem;font-weight:500;line-height:1.25;border:none;border-radius:0.375rem;cursor:pointer;transition:background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease}.custom-button:focus{outline:2px solid var(--custom-button-focus-ring, #2563eb);outline-offset:2px}.custom-button:focus:not(:focus-visible){outline:none}.custom-button--primary{background-color:var(--custom-button-primary-bg, #2563eb);color:var(--custom-button-primary-color, #fff)}.custom-button--primary:hover:not(.custom-button--disabled){background-color:var(--custom-button-primary-hover-bg, #1d4ed8)}.custom-button--primary:active:not(.custom-button--disabled){background-color:var(--custom-button-primary-active-bg, #1e40af)}.custom-button--secondary{background-color:var(--custom-button-secondary-bg, #e5e7eb);color:var(--custom-button-secondary-color, #1f2937)}.custom-button--secondary:hover:not(.custom-button--disabled){background-color:var(--custom-button-secondary-hover-bg, #d1d5db)}.custom-button--secondary:active:not(.custom-button--disabled){background-color:var(--custom-button-secondary-active-bg, #9ca3af)}.custom-button--text{background-color:transparent;color:var(--custom-button-text-color, #2563eb)}.custom-button--text:hover:not(.custom-button--disabled){background-color:var(--custom-button-text-hover-bg, rgba(37, 99, 235, 0.08))}.custom-button--text:active:not(.custom-button--disabled){background-color:var(--custom-button-text-active-bg, rgba(37, 99, 235, 0.12))}.custom-button--disabled,.custom-button:disabled{opacity:0.6;cursor:not-allowed}";export{c as fast_button}
|