@inploi/plugin-chatbot 14.9.0 → 14.10.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.
Files changed (36) hide show
  1. package/cdn/index.js +7 -7
  2. package/cdn/style.css +1 -1
  3. package/dist/chatbot-body-b3e7212a.cjs +5 -0
  4. package/dist/chatbot-body-d3fd468f.js +4094 -0
  5. package/dist/chatbot.d.ts +6 -0
  6. package/dist/chatbot.idb.d.ts +2 -2
  7. package/dist/chatbot.resume.d.ts +15 -0
  8. package/dist/chatbot.resume.test.d.ts +1 -0
  9. package/dist/chatbot.state.d.ts +24 -406
  10. package/dist/chatbot.storage.test.d.ts +1 -0
  11. package/dist/chatbot.utils.d.ts +1 -255
  12. package/dist/components/chat-input/chat-input.address.d.ts +1 -14
  13. package/dist/components/chat-input/chat-input.boolean.d.ts +1 -13
  14. package/dist/components/chat-input/chat-input.d.ts +1 -12
  15. package/dist/components/chat-input/chat-input.file.d.ts +1 -12
  16. package/dist/components/chat-input/chat-input.multiple-choice.d.ts +1 -14
  17. package/dist/components/chat-input/chat-input.number.d.ts +1 -14
  18. package/dist/components/chat-input/chat-input.phone-number.d.ts +1 -17
  19. package/dist/components/chat-input/chat-input.submit.d.ts +1 -10
  20. package/dist/components/chat-input/chat-input.text.d.ts +1 -16
  21. package/dist/components/chatbot-body.lifecycle.test.d.ts +1 -0
  22. package/dist/components/message.link.d.ts +1 -1
  23. package/dist/components/useChatService.d.ts +1 -1
  24. package/dist/components/useChatService.test.d.ts +1 -0
  25. package/dist/i18n.d.ts +42 -0
  26. package/dist/index-4aad840b.cjs +5 -0
  27. package/dist/{index-75330fed.js → index-b8dab3ec.js} +1184 -1122
  28. package/dist/plugin-chatbot.cjs +1 -1
  29. package/dist/plugin-chatbot.js +1 -1
  30. package/dist/style/tokens.d.ts +4 -4
  31. package/dist/style.css +1 -1
  32. package/package.json +4 -4
  33. package/dist/chatbot-body-45ccac19.js +0 -4695
  34. package/dist/chatbot-body-b6a4eef8.cjs +0 -5
  35. package/dist/index-47f31542.cjs +0 -5
  36. package/dist/interpreter.d.ts +0 -67
@@ -1,262 +1,8 @@
1
- import { FlowNode } from '@inploi/core/flows';
2
- import { FlowStateData, FlowSubmission } from './chatbot.state';
1
+ import { FlowStateData, FlowSubmission } from '@inploi/flows/engine';
3
2
 
4
- export type DistributivePick<T, K extends keyof T> = T extends unknown ? Pick<T, K> : never;
5
- export declare const getHeadOrThrow: (nodes: FlowNode[]) => {
6
- type: "flow-section";
7
- id: string;
8
- data: {
9
- title: string;
10
- };
11
- isHead?: boolean | undefined;
12
- nextId?: string | undefined;
13
- } | {
14
- type: "pre-apply-result";
15
- id: string;
16
- data: {
17
- key: string;
18
- participationKey: string;
19
- messages: {
20
- hard: string;
21
- advisory: string;
22
- matched: string;
23
- };
24
- continueLabel: string;
25
- alternativeLink?: {
26
- href: string;
27
- label: string;
28
- } | undefined;
29
- };
30
- isHead?: boolean | undefined;
31
- nextId?: string | undefined;
32
- } | {
33
- type: "text";
34
- id: string;
35
- data: {
36
- text: string;
37
- };
38
- isHead?: boolean | undefined;
39
- nextId?: string | undefined;
40
- } | {
41
- type: "end-flow";
42
- id: string;
43
- data: {
44
- systemMessage: string;
45
- };
46
- isHead?: boolean | undefined;
47
- nextId?: string | undefined;
48
- } | {
49
- type: "integration-application-submit";
50
- id: string;
51
- data: {
52
- integrationId: string;
53
- skipConfirmation: boolean;
54
- submitLabel: string;
55
- submitKeys: "all" | string[];
56
- key?: string | undefined;
57
- successMessage?: string | undefined;
58
- captcha?: boolean | undefined;
59
- };
60
- isHead?: boolean | undefined;
61
- nextId?: string | undefined;
62
- } | {
63
- type: "integration-workflow-get";
64
- id: string;
65
- data: {
66
- integrationId: string;
67
- };
68
- isHead?: boolean | undefined;
69
- nextId?: string | undefined;
70
- } | {
71
- type: "link";
72
- id: string;
73
- data: {
74
- href: string;
75
- cta: string;
76
- };
77
- isHead?: boolean | undefined;
78
- nextId?: string | undefined;
79
- } | {
80
- type: "image";
81
- id: string;
82
- data: {
83
- url: string;
84
- width: number;
85
- height: number;
86
- };
87
- isHead?: boolean | undefined;
88
- nextId?: string | undefined;
89
- } | {
90
- type: "question-boolean";
91
- id: string;
92
- data: {
93
- key: string;
94
- question: string;
95
- trueLabel: string;
96
- falseLabel: string;
97
- optional: boolean;
98
- preApply?: {
99
- severity: "hard" | "advisory";
100
- mismatchMessage: string;
101
- expectedValue: boolean;
102
- } | undefined;
103
- };
104
- isHead?: boolean | undefined;
105
- nextId?: string | undefined;
106
- } | {
107
- type: "question-text";
108
- id: string;
109
- data: {
110
- key: string;
111
- question: string;
112
- optional: boolean;
113
- format: "date" | "text" | "url" | "email" | "phone";
114
- placeholder?: string | undefined;
115
- maxChars?: number | undefined;
116
- minChars?: number | undefined;
117
- multiline?: boolean | undefined;
118
- };
119
- isHead?: boolean | undefined;
120
- nextId?: string | undefined;
121
- } | {
122
- type: "question-number";
123
- id: string;
124
- data: {
125
- key: string;
126
- question: string;
127
- optional: boolean;
128
- placeholder?: string | undefined;
129
- decimalCases?: number | undefined;
130
- min?: number | undefined;
131
- max?: number | undefined;
132
- };
133
- isHead?: boolean | undefined;
134
- nextId?: string | undefined;
135
- } | {
136
- type: "question-phone";
137
- id: string;
138
- data: {
139
- key: string;
140
- question: string;
141
- optional: boolean;
142
- placeholder: string;
143
- minChars: number;
144
- defaultCountryCode: string;
145
- };
146
- isHead?: boolean | undefined;
147
- nextId?: string | undefined;
148
- } | {
149
- type: "question-enum";
150
- id: string;
151
- data: {
152
- options: {
153
- value: string;
154
- label: string;
155
- }[];
156
- key: string;
157
- question: string;
158
- maxSelected: number;
159
- minSelected: number;
160
- preApply?: {
161
- severity: "hard" | "advisory";
162
- mismatchMessage: string;
163
- expectedValue: string;
164
- } | undefined;
165
- };
166
- isHead?: boolean | undefined;
167
- nextId?: string | undefined;
168
- } | {
169
- type: "question-file";
170
- id: string;
171
- data: {
172
- key: string;
173
- question: string;
174
- optional: boolean;
175
- extensions: string[];
176
- multiple?: boolean | undefined;
177
- maxSizeKb?: number | undefined;
178
- };
179
- isHead?: boolean | undefined;
180
- nextId?: string | undefined;
181
- } | {
182
- type: "question-address";
183
- id: string;
184
- data: {
185
- keys: {
186
- line1: string | null;
187
- line2: string | null;
188
- line3: string | null;
189
- city: string | null;
190
- state: string | null;
191
- postcode: string | null;
192
- country: string | null;
193
- };
194
- key: string;
195
- question: string;
196
- optional: boolean;
197
- placeholder?: string | undefined;
198
- line2Required?: boolean | undefined;
199
- };
200
- isHead?: boolean | undefined;
201
- nextId?: string | undefined;
202
- } | {
203
- type: "if-block";
204
- id: string;
205
- data: {
206
- compareKey: string;
207
- compareValue: string;
208
- compare: "equals" | "notEquals" | "contains" | "notContains" | "greaterThan" | "lessThan" | "greaterThanOrEqualTo" | "lessThanOrEqualTo";
209
- } | {
210
- combinator: "and" | "or";
211
- conditions: {
212
- compareKey: string;
213
- compareValue: string;
214
- compare: "equals" | "notEquals" | "contains" | "notContains" | "greaterThan" | "lessThan" | "greaterThanOrEqualTo" | "lessThanOrEqualTo";
215
- }[];
216
- };
217
- isHead?: boolean | undefined;
218
- nextId?: string | undefined;
219
- branchId?: string | undefined;
220
- } | {
221
- type: "jump";
222
- id: string;
223
- data: {
224
- targetId: string;
225
- };
226
- isHead?: boolean | undefined;
227
- nextId?: string | undefined;
228
- } | {
229
- type: "add-submission";
230
- id: string;
231
- data: {
232
- value: string;
233
- key: string;
234
- };
235
- isHead?: boolean | undefined;
236
- nextId?: string | undefined;
237
- } | {
238
- type: "check-duplicate";
239
- id: string;
240
- data: {
241
- key: string;
242
- email: string;
243
- scope: "job" | "company";
244
- };
245
- isHead?: boolean | undefined;
246
- nextId?: string | undefined;
247
- } | {
248
- type: "feedback";
249
- id: string;
250
- data: {};
251
- isHead?: boolean | undefined;
252
- nextId?: string | undefined;
253
- };
254
3
  export declare const isSubmissionOfType: <T extends FlowSubmission["type"]>(type: T) => (submission?: FlowSubmission) => submission is Extract<FlowSubmission, {
255
4
  type: T;
256
5
  }>;
257
6
  export declare function gzip(string: string): string | Promise<string>;
258
- export declare class AbortedError extends Error {
259
- constructor();
260
- }
261
7
  export declare const initialiseFlowStateData: () => FlowStateData;
262
8
  export declare const getFormSubmitter: (e: Event) => HTMLButtonElement | HTMLInputElement;
@@ -1,18 +1,5 @@
1
- import { QuestionAddressNode } from '@inploi/core/flows';
1
+ import { AddressInputPayload } from '@inploi/flows/engine';
2
2
  import { JSX } from 'preact';
3
- import { FlowSubmissionAddress } from '../../chatbot.state';
4
3
  import { ChatInputProps } from './chat-input';
5
4
 
6
- export type AddressInputPayload = {
7
- type: 'address';
8
- /** submission id to wrap the address fields. */
9
- key: string | undefined;
10
- config: {
11
- optional: boolean;
12
- keys: QuestionAddressNode['data']['keys'];
13
- line2Required?: boolean;
14
- placeholder?: string;
15
- };
16
- submission: FlowSubmissionAddress | null;
17
- };
18
5
  export declare const ChatInputAddress: ({ input, onSubmitSuccess, logger }: ChatInputProps<AddressInputPayload>) => JSX.Element;
@@ -1,18 +1,6 @@
1
- import { FlowSubmissionBoolean } from '../../chatbot.state';
1
+ import { BooleanChoicePayload } from '@inploi/flows/engine';
2
2
  import { ChatInputProps } from './chat-input';
3
3
 
4
- export type BooleanChoicePayload = {
5
- type: 'boolean';
6
- config: {
7
- labels: {
8
- true: string;
9
- false: string;
10
- };
11
- optional: boolean;
12
- };
13
- key: string | undefined;
14
- submission: FlowSubmissionBoolean | null;
15
- };
16
4
  export declare const booleanButtonListClass = "flex items-center flex-wrap gap-2 p-2.5";
17
5
  export declare const booleanButtonListItemClass = "min-w-0 max-w-full flex-auto";
18
6
  export declare const BooleanOption: import('preact').FunctionalComponent<Omit<import("preact").JSX.HTMLAttributes<HTMLButtonElement> & {
@@ -1,14 +1,5 @@
1
+ import { ChatbotInput, FlowSubmission } from '@inploi/flows/engine';
1
2
  import { AnalyticsService, Logger } from '@inploi/sdk';
2
- import { DistributivePick } from '../../chatbot.utils';
3
- import { FlowSubmission } from '../../chatbot.state';
4
- import { AddressInputPayload } from './chat-input.address';
5
- import { BooleanChoicePayload } from './chat-input.boolean';
6
- import { FilePayload } from './chat-input.file';
7
- import { MultipleChoicePayload } from './chat-input.multiple-choice';
8
- import { NumberPayload } from './chat-input.number';
9
- import { PhonePayload } from './chat-input.phone-number';
10
- import { SubmitPayload } from './chat-input.submit';
11
- import { TextPayload } from './chat-input.text';
12
3
 
13
4
  export type SubmitSuccessFn = (submission: FlowSubmission | null) => void;
14
5
  export type ChatInputProps<T extends ChatbotInput> = {
@@ -17,6 +8,4 @@ export type ChatInputProps<T extends ChatbotInput> = {
17
8
  logger: Logger;
18
9
  analytics: Pick<AnalyticsService, 'log'>;
19
10
  };
20
- export type ChatbotInput = TextPayload | NumberPayload | MultipleChoicePayload | BooleanChoicePayload | FilePayload | SubmitPayload | AddressInputPayload | PhonePayload;
21
- export type ChatInput = DistributivePick<ChatbotInput, 'type' | 'config' | 'key'>;
22
11
  export declare const ChatInput: ({ logger, analytics }: Pick<ChatInputProps<ChatbotInput>, "logger" | "analytics">) => import("preact").JSX.Element;
@@ -1,18 +1,7 @@
1
+ import { FilePayload, FileToUpload } from '@inploi/flows/engine';
1
2
  import { ComponentProps } from 'preact';
2
- import { FileToUpload, FlowSubmissionFile } from '../../chatbot.state';
3
3
  import { ChatInputProps } from './chat-input';
4
4
 
5
- export type FilePayload = {
6
- type: 'file';
7
- config: {
8
- optional: boolean;
9
- extensions: string[];
10
- fileSizeLimitKib?: number;
11
- allowMultiple: boolean;
12
- };
13
- key: string;
14
- submission: FlowSubmissionFile | null;
15
- };
16
5
  export declare const FileThumbnail: ({ file, class: className, ...props }: ComponentProps<"div"> & {
17
6
  file: Pick<FileToUpload, "name" | "sizeKb">;
18
7
  }) => import("preact").JSX.Element;
@@ -1,17 +1,4 @@
1
- import { FlowSubmissionEnum } from '../../chatbot.state';
1
+ import { MultipleChoicePayload } from '@inploi/flows/engine';
2
2
  import { ChatInputProps } from './chat-input';
3
3
 
4
- export type MultipleChoicePayload = {
5
- type: 'multiple-choice';
6
- key: string | undefined;
7
- config: {
8
- options: {
9
- value: string;
10
- label: string;
11
- }[];
12
- minSelected?: number;
13
- maxSelected?: number;
14
- };
15
- submission: FlowSubmissionEnum;
16
- };
17
4
  export declare const ChatInputMultipleChoice: ({ input, onSubmitSuccess }: ChatInputProps<MultipleChoicePayload>) => import("preact").JSX.Element;
@@ -1,17 +1,4 @@
1
- import { FlowSubmissionNumber } from '../../chatbot.state';
1
+ import { NumberPayload } from '@inploi/flows/engine';
2
2
  import { ChatInputProps } from './chat-input';
3
3
 
4
- export type NumberPayload = {
5
- type: 'number';
6
- key: string | undefined;
7
- config: {
8
- optional: boolean;
9
- placeholder?: string;
10
- defaultValue?: string;
11
- decimalCases?: number;
12
- min?: number;
13
- max?: number;
14
- };
15
- submission: FlowSubmissionNumber | null;
16
- };
17
4
  export declare const ChatInputNumber: ({ input, onSubmitSuccess }: ChatInputProps<NumberPayload>) => import("preact").JSX.Element;
@@ -1,20 +1,4 @@
1
- import { FlowSubmissionPhone, FlowSubmissionString } from '../../chatbot.state';
1
+ import { PhonePayload } from '@inploi/flows/engine';
2
2
  import { ChatInputProps } from './chat-input';
3
3
 
4
- export type PhonePayload = {
5
- type: 'phone';
6
- key: string | undefined;
7
- config: {
8
- optional: boolean;
9
- submissionFormat: 'phone' | 'text';
10
- placeholder?: string;
11
- defaultValue: {
12
- countryCode?: string;
13
- phoneNumber?: string;
14
- };
15
- minChars?: number;
16
- maxChars?: number;
17
- };
18
- submission: FlowSubmissionPhone | FlowSubmissionString | null;
19
- };
20
4
  export declare const ChatInputPhoneNumber: ({ input, onSubmitSuccess }: ChatInputProps<PhonePayload>) => import("preact").JSX.Element;
@@ -1,13 +1,4 @@
1
+ import { SubmitPayload } from '@inploi/flows/engine';
1
2
  import { ChatInputProps } from './chat-input';
2
3
 
3
- export type SubmitPayload = {
4
- type: 'submit';
5
- /** `availableAt` (epoch ms) keeps submit unavailable until then, after an unsuccessful attempt (PROD-7112). */
6
- config: {
7
- label: string;
8
- availableAt?: number;
9
- };
10
- key: string | undefined;
11
- submission: null;
12
- };
13
4
  export declare const ChatInputSubmit: ({ input, onSubmitSuccess }: ChatInputProps<SubmitPayload>) => import("preact").JSX.Element;
@@ -1,20 +1,5 @@
1
+ import { TextPayload } from '@inploi/flows/engine';
1
2
  import { JSX } from 'preact';
2
- import { FlowSubmissionString } from '../../chatbot.state';
3
3
  import { ChatInputProps } from './chat-input';
4
4
 
5
- export type TextPayload = {
6
- type: 'text';
7
- key: string | undefined;
8
- config: {
9
- optional: boolean;
10
- placeholder?: string;
11
- format: 'date' | 'text' | 'email' | 'url';
12
- defaultValue?: string;
13
- maxChars: number | undefined;
14
- minChars: number | undefined;
15
- /** Long answer: a box that grows with its content. Only honoured for `format: 'text'`. */
16
- multiline?: boolean;
17
- };
18
- submission: FlowSubmissionString | null;
19
- };
20
5
  export declare const ChatInputText: ({ input, onSubmitSuccess }: ChatInputProps<TextPayload>) => JSX.Element;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import { LinkMessage as LinkMessageProps } from '../chatbot.state';
1
+ import { LinkMessage as LinkMessageProps } from '@inploi/flows/engine';
2
2
 
3
3
  export declare const LinkMessage: ({ message }: {
4
4
  message: LinkMessageProps;
@@ -1,4 +1,4 @@
1
- import { ChatService } from '../interpreter';
1
+ import { ChatService } from '@inploi/flows/engine';
2
2
  import { SubmitSuccessFn } from './chat-input/chat-input';
3
3
 
4
4
  export declare const chatStore: {
@@ -0,0 +1 @@
1
+ export {};
package/dist/i18n.d.ts CHANGED
@@ -52,6 +52,12 @@ export declare const TranslationProvider: (props: {
52
52
  readonly complete_submission: "Complete submission";
53
53
  readonly submission_completed: "Submission completed!";
54
54
  readonly submission_pending: "Thanks, we've received your application and are processing it.";
55
+ readonly submission_provider_maintenance: "Sorry, our recruitment system is down for scheduled maintenance until about {{time}}. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
56
+ readonly submission_provider_maintenance_later: "Sorry, our recruitment system is down for scheduled maintenance until later today. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
57
+ readonly submission_available_at: "Submit will be available again at {{time}}.";
58
+ readonly resume_prompt: "You have an unfinished application for this role. Continue where you left off?";
59
+ readonly resume_continue: "Continue";
60
+ readonly resume_start_again: "Start again";
55
61
  readonly captcha_failed: "Cloudflare seems to think you're a robot. If that's not the case, please try again in a moment.";
56
62
  readonly close_application: "Close application";
57
63
  readonly invalid_state: "Invalid application state";
@@ -99,6 +105,7 @@ export declare const TranslationProvider: (props: {
99
105
  readonly other: "Please only upload up to {{count}} files";
100
106
  };
101
107
  readonly validation_file_size: "Your file is too big. Please upload a file smaller than {{size}}";
108
+ readonly validation_file_empty: "This file is empty. If it\u2019s saved in iCloud, Google Drive or OneDrive, download it to your device, then select it again.";
102
109
  readonly validation_required: "This field is required.";
103
110
  readonly validation_multiple_choice_min: {
104
111
  readonly one: "Please select at least {{count}} option";
@@ -165,6 +172,12 @@ export declare const TranslationProvider: (props: {
165
172
  readonly complete_submission: "Complete submission";
166
173
  readonly submission_completed: "Submission completed!";
167
174
  readonly submission_pending: "Thanks, we've received your application and are processing it.";
175
+ readonly submission_provider_maintenance: "Sorry, our recruitment system is down for scheduled maintenance until about {{time}}. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
176
+ readonly submission_provider_maintenance_later: "Sorry, our recruitment system is down for scheduled maintenance until later today. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
177
+ readonly submission_available_at: "Submit will be available again at {{time}}.";
178
+ readonly resume_prompt: "You have an unfinished application for this role. Continue where you left off?";
179
+ readonly resume_continue: "Continue";
180
+ readonly resume_start_again: "Start again";
168
181
  readonly captcha_failed: "Cloudflare seems to think you're a robot. If that's not the case, please try again in a moment.";
169
182
  readonly close_application: "Close application";
170
183
  readonly invalid_state: "Invalid application state";
@@ -212,6 +225,7 @@ export declare const TranslationProvider: (props: {
212
225
  readonly other: "Please only upload up to {{count}} files";
213
226
  };
214
227
  readonly validation_file_size: "Your file is too big. Please upload a file smaller than {{size}}";
228
+ readonly validation_file_empty: "This file is empty. If it\u2019s saved in iCloud, Google Drive or OneDrive, download it to your device, then select it again.";
215
229
  readonly validation_required: "This field is required.";
216
230
  readonly validation_multiple_choice_min: {
217
231
  readonly one: "Please select at least {{count}} option";
@@ -275,6 +289,12 @@ export declare const TranslationProvider: (props: {
275
289
  readonly complete_submission: "Complete submission";
276
290
  readonly submission_completed: "Submission completed!";
277
291
  readonly submission_pending: "Thanks, we've received your application and are processing it.";
292
+ readonly submission_provider_maintenance: "Sorry, our recruitment system is down for scheduled maintenance until about {{time}}. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
293
+ readonly submission_provider_maintenance_later: "Sorry, our recruitment system is down for scheduled maintenance until later today. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
294
+ readonly submission_available_at: "Submit will be available again at {{time}}.";
295
+ readonly resume_prompt: "You have an unfinished application for this role. Continue where you left off?";
296
+ readonly resume_continue: "Continue";
297
+ readonly resume_start_again: "Start again";
278
298
  readonly captcha_failed: "Cloudflare seems to think you're a robot. If that's not the case, please try again in a moment.";
279
299
  readonly close_application: "Close application";
280
300
  readonly invalid_state: "Invalid application state";
@@ -322,6 +342,7 @@ export declare const TranslationProvider: (props: {
322
342
  readonly other: "Please only upload up to {{count}} files";
323
343
  };
324
344
  readonly validation_file_size: "Your file is too big. Please upload a file smaller than {{size}}";
345
+ readonly validation_file_empty: "This file is empty. If it\u2019s saved in iCloud, Google Drive or OneDrive, download it to your device, then select it again.";
325
346
  readonly validation_required: "This field is required.";
326
347
  readonly validation_multiple_choice_min: {
327
348
  readonly one: "Please select at least {{count}} option";
@@ -388,6 +409,12 @@ export declare const TranslationProvider: (props: {
388
409
  readonly complete_submission: "Complete submission";
389
410
  readonly submission_completed: "Submission completed!";
390
411
  readonly submission_pending: "Thanks, we've received your application and are processing it.";
412
+ readonly submission_provider_maintenance: "Sorry, our recruitment system is down for scheduled maintenance until about {{time}}. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
413
+ readonly submission_provider_maintenance_later: "Sorry, our recruitment system is down for scheduled maintenance until later today. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
414
+ readonly submission_available_at: "Submit will be available again at {{time}}.";
415
+ readonly resume_prompt: "You have an unfinished application for this role. Continue where you left off?";
416
+ readonly resume_continue: "Continue";
417
+ readonly resume_start_again: "Start again";
391
418
  readonly captcha_failed: "Cloudflare seems to think you're a robot. If that's not the case, please try again in a moment.";
392
419
  readonly close_application: "Close application";
393
420
  readonly invalid_state: "Invalid application state";
@@ -435,6 +462,7 @@ export declare const TranslationProvider: (props: {
435
462
  readonly other: "Please only upload up to {{count}} files";
436
463
  };
437
464
  readonly validation_file_size: "Your file is too big. Please upload a file smaller than {{size}}";
465
+ readonly validation_file_empty: "This file is empty. If it\u2019s saved in iCloud, Google Drive or OneDrive, download it to your device, then select it again.";
438
466
  readonly validation_required: "This field is required.";
439
467
  readonly validation_multiple_choice_min: {
440
468
  readonly one: "Please select at least {{count}} option";
@@ -498,6 +526,12 @@ export declare const TranslationProvider: (props: {
498
526
  readonly complete_submission: "Complete submission";
499
527
  readonly submission_completed: "Submission completed!";
500
528
  readonly submission_pending: "Thanks, we've received your application and are processing it.";
529
+ readonly submission_provider_maintenance: "Sorry, our recruitment system is down for scheduled maintenance until about {{time}}. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
530
+ readonly submission_provider_maintenance_later: "Sorry, our recruitment system is down for scheduled maintenance until later today. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
531
+ readonly submission_available_at: "Submit will be available again at {{time}}.";
532
+ readonly resume_prompt: "You have an unfinished application for this role. Continue where you left off?";
533
+ readonly resume_continue: "Continue";
534
+ readonly resume_start_again: "Start again";
501
535
  readonly captcha_failed: "Cloudflare seems to think you're a robot. If that's not the case, please try again in a moment.";
502
536
  readonly close_application: "Close application";
503
537
  readonly invalid_state: "Invalid application state";
@@ -545,6 +579,7 @@ export declare const TranslationProvider: (props: {
545
579
  readonly other: "Please only upload up to {{count}} files";
546
580
  };
547
581
  readonly validation_file_size: "Your file is too big. Please upload a file smaller than {{size}}";
582
+ readonly validation_file_empty: "This file is empty. If it\u2019s saved in iCloud, Google Drive or OneDrive, download it to your device, then select it again.";
548
583
  readonly validation_required: "This field is required.";
549
584
  readonly validation_multiple_choice_min: {
550
585
  readonly one: "Please select at least {{count}} option";
@@ -609,6 +644,12 @@ export declare const TranslationProvider: (props: {
609
644
  readonly complete_submission: "Complete submission";
610
645
  readonly submission_completed: "Submission completed!";
611
646
  readonly submission_pending: "Thanks, we've received your application and are processing it.";
647
+ readonly submission_provider_maintenance: "Sorry, our recruitment system is down for scheduled maintenance until about {{time}}. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
648
+ readonly submission_provider_maintenance_later: "Sorry, our recruitment system is down for scheduled maintenance until later today. Your answers are saved, so you can come back after then and submit your application. We apologise for the inconvenience.";
649
+ readonly submission_available_at: "Submit will be available again at {{time}}.";
650
+ readonly resume_prompt: "You have an unfinished application for this role. Continue where you left off?";
651
+ readonly resume_continue: "Continue";
652
+ readonly resume_start_again: "Start again";
612
653
  readonly captcha_failed: "Cloudflare seems to think you're a robot. If that's not the case, please try again in a moment.";
613
654
  readonly close_application: "Close application";
614
655
  readonly invalid_state: "Invalid application state";
@@ -656,6 +697,7 @@ export declare const TranslationProvider: (props: {
656
697
  readonly other: "Please only upload up to {{count}} files";
657
698
  };
658
699
  readonly validation_file_size: "Your file is too big. Please upload a file smaller than {{size}}";
700
+ readonly validation_file_empty: "This file is empty. If it\u2019s saved in iCloud, Google Drive or OneDrive, download it to your device, then select it again.";
659
701
  readonly validation_required: "This field is required.";
660
702
  readonly validation_multiple_choice_min: {
661
703
  readonly one: "Please select at least {{count}} option";