efficient-shell 4.175.0 → 4.179.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +426 -6
- package/dist/{Browser-PZIVSYLM.js → Browser-LZMLL4CZ.js} +14 -14
- package/dist/Calculator-R5OEHQ67.js +29 -0
- package/dist/ConfirmDialog-CMNQZQA3.js +1 -0
- package/dist/{CurrencyConverter-4RZZ5STO.js → CurrencyConverter-AMXUOQR2.js} +7 -7
- package/dist/{Documents-ERSFDOCV.js → Documents-M4HKZAPJ.js} +12 -12
- package/dist/{Files-3J2DW6ET.js → Files-OY5GKCXA.js} +24 -24
- package/dist/Notepad-JLDNTMVB.js +25 -0
- package/dist/PdfViewer-3SC3LE4U.js +1 -0
- package/dist/{PomodoroTimer-D6VQJICB.js → PomodoroTimer-LE6J2KUU.js} +24 -24
- package/dist/Preview-2KHLL6NP.js +188 -0
- package/dist/{Sidebar-2BZJ2MEI.js → Sidebar-BQ4P5LBI.js} +25 -25
- package/dist/Spreadsheet-B5Z5MSX4.js +37 -0
- package/dist/{Stock-KRPM6NSB.js → Stock-GWVG2INU.js} +4 -4
- package/dist/{Weather-HRH4JHTF.js → Weather-APBCG4TO.js} +13 -13
- package/dist/{WorldClock-OUSV52XM.js → WorldClock-2LMZYKWR.js} +7 -7
- package/dist/apps/index.d.ts +4 -2
- package/dist/apps/index.js +1 -1
- package/dist/bin/ui-check.js +1 -1
- package/dist/{chunk-L3U2R7DH.js → chunk-3DGTIWZP.js} +1 -1
- package/dist/{chunk-6BZCJQCT.js → chunk-47VJNVB6.js} +643 -643
- package/dist/{chunk-KS7OSQ3Y.js → chunk-5ZDM6WIC.js} +11 -11
- package/dist/{chunk-E2D54MVV.js → chunk-6CFBF543.js} +2 -2
- package/dist/{chunk-LCTSBQBJ.js → chunk-7WZEFHPS.js} +1 -1
- package/dist/{chunk-PGVUO7GB.js → chunk-AA4TMQOS.js} +3 -3
- package/dist/chunk-AZURXTRB.js +1 -0
- package/dist/chunk-C3QOHMR6.js +1 -0
- package/dist/{chunk-YJRC6IKD.js → chunk-CIXQKCFA.js} +4 -4
- package/dist/chunk-CZK2VKIO.js +9 -0
- package/dist/{chunk-KG4NRNFS.js → chunk-FORN7LG7.js} +1 -1
- package/dist/chunk-J3LIIIHJ.js +1 -0
- package/dist/chunk-KDRAU4XQ.js +27 -0
- package/dist/{chunk-ZOPYAOUP.js → chunk-KVOFUFPP.js} +1 -1
- package/dist/{chunk-KDHXRJIX.js → chunk-LK7V32MR.js} +1 -1
- package/dist/{chunk-GCO3A63X.js → chunk-N6STBYXR.js} +111 -111
- package/dist/{chunk-54OP3M3K.js → chunk-NHIGOEZF.js} +1 -1
- package/dist/{chunk-EXXHI5DO.js → chunk-OGXU7QFW.js} +2 -2
- package/dist/{chunk-JOOXVX4A.js → chunk-PE4F4MJE.js} +4 -4
- package/dist/chunk-R7EBJKN2.js +69 -0
- package/dist/{chunk-TMQEH7WA.js → chunk-SVO3ES2E.js} +1 -1
- package/dist/{chunk-RKR5V4QR.js → chunk-T4CFSGSL.js} +6 -6
- package/dist/{chunk-D3UQLWIZ.js → chunk-UAIVAA5X.js} +11 -11
- package/dist/{chunk-REXHKIIJ.js → chunk-WNEO7TSP.js} +1 -1
- package/dist/{chunk-XJYXKO7K.js → chunk-ZAE6ROV7.js} +15 -15
- package/dist/file-intake/index.js +1 -1
- package/dist/i18n/index.d.ts +79 -0
- package/dist/i18n/index.js +2 -0
- package/dist/{index-DIaav9a1.d.ts → index-DcUj0nXY.d.ts} +39 -927
- package/dist/index.d.ts +3 -2
- package/dist/index.js +656 -656
- package/dist/locales/zh-Hans.d.ts +59 -0
- package/dist/locales/zh-Hans.js +1 -0
- package/dist/map/index.js +3 -3
- package/dist/page-tabs/index.js +5 -5
- package/dist/pdf/index.js +1 -1
- package/dist/strings-ZbotP_I6.d.ts +1292 -0
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.js +1 -1
- package/package.json +21 -1
- package/dist/Calculator-6BJVESFN.js +0 -29
- package/dist/ConfirmDialog-6PVUVYXZ.js +0 -1
- package/dist/Notepad-MVMFJE2F.js +0 -25
- package/dist/PdfViewer-RKRGO7Q2.js +0 -1
- package/dist/Preview-VIHMVC7B.js +0 -187
- package/dist/Spreadsheet-KTB6JLBV.js +0 -37
- package/dist/chunk-3YTHR7IC.js +0 -1
- package/dist/chunk-7LAPNAKS.js +0 -1
- package/dist/chunk-FEK5ELXS.js +0 -27
- package/dist/chunk-VIIBZ6DE.js +0 -69
- package/dist/chunk-VRLHUZSC.js +0 -9
|
@@ -0,0 +1,1292 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface ShellStrings {
|
|
5
|
+
/** Window chrome: control tooltips and the title bar's accessible name. */
|
|
6
|
+
window: {
|
|
7
|
+
minimize: string;
|
|
8
|
+
/** Bring a hand-minimized window back — the tab's own control. */
|
|
9
|
+
restore: string;
|
|
10
|
+
maximize: string;
|
|
11
|
+
windowed: string;
|
|
12
|
+
pinOnTop: string;
|
|
13
|
+
unpin: string;
|
|
14
|
+
close: string;
|
|
15
|
+
/** Suffix of the title bar's aria-label: `"{title} — {windowSuffix}"`. */
|
|
16
|
+
windowSuffix: string;
|
|
17
|
+
prev: string;
|
|
18
|
+
next: string;
|
|
19
|
+
snapLayouts: string;
|
|
20
|
+
snapLeft: string;
|
|
21
|
+
snapRight: string;
|
|
22
|
+
snapTopLeft: string;
|
|
23
|
+
snapTopRight: string;
|
|
24
|
+
snapBottomLeft: string;
|
|
25
|
+
snapBottomRight: string;
|
|
26
|
+
};
|
|
27
|
+
/** Taskbar and exposé. */
|
|
28
|
+
taskbar: {
|
|
29
|
+
closeWindow: string;
|
|
30
|
+
offscreenHint: string;
|
|
31
|
+
offscreenDot: string;
|
|
32
|
+
expose: string;
|
|
33
|
+
addToDesktop: string;
|
|
34
|
+
removeFromDesktop: string;
|
|
35
|
+
/** Group menu — a taskbar tab standing for more than one window. The
|
|
36
|
+
* count is appended by the caller, e.g. "Close all (3)". */
|
|
37
|
+
minimizeAllWindows: string;
|
|
38
|
+
restoreAllWindows: string;
|
|
39
|
+
closeAllWindows: string;
|
|
40
|
+
};
|
|
41
|
+
/** The logout cover. */
|
|
42
|
+
logout: {
|
|
43
|
+
goodbye: string;
|
|
44
|
+
seeYou: string;
|
|
45
|
+
};
|
|
46
|
+
/** About + What's New dialogs. */
|
|
47
|
+
about: {
|
|
48
|
+
aboutPrefix: string;
|
|
49
|
+
thisApp: string;
|
|
50
|
+
openSourceLicenses: string;
|
|
51
|
+
whatsNew: string;
|
|
52
|
+
noChangelog: string;
|
|
53
|
+
};
|
|
54
|
+
/** Data-display defaults (DataTable, lists). */
|
|
55
|
+
table: {
|
|
56
|
+
empty: string;
|
|
57
|
+
loading: string;
|
|
58
|
+
selectAll: string;
|
|
59
|
+
selectRow: string;
|
|
60
|
+
};
|
|
61
|
+
/** Picker defaults (SearchableSelect, TagInput). */
|
|
62
|
+
select: {
|
|
63
|
+
none: string;
|
|
64
|
+
noMatches: string;
|
|
65
|
+
allSelected: string;
|
|
66
|
+
clear: string;
|
|
67
|
+
/** aria-label of a TagInput chip's remove button: `"{remove} {label}"`. */
|
|
68
|
+
remove: string;
|
|
69
|
+
/** The whole chip label, when the word order is not "{remove} {label}".
|
|
70
|
+
* Wins over `remove` when supplied. */
|
|
71
|
+
removeItem?: (label: string) => string;
|
|
72
|
+
};
|
|
73
|
+
/** Notification bell + popup. */
|
|
74
|
+
notifications: {
|
|
75
|
+
title: string;
|
|
76
|
+
markAllRead: string;
|
|
77
|
+
dnd: string;
|
|
78
|
+
dndOn: string;
|
|
79
|
+
caughtUp: string;
|
|
80
|
+
empty: string;
|
|
81
|
+
viewAll: string;
|
|
82
|
+
cardLabel: string;
|
|
83
|
+
dismiss: string;
|
|
84
|
+
};
|
|
85
|
+
/** Form-level messages. */
|
|
86
|
+
form: {
|
|
87
|
+
errorSummaryTitle: string;
|
|
88
|
+
};
|
|
89
|
+
/** HelpCenter chrome. */
|
|
90
|
+
help: {
|
|
91
|
+
title: string;
|
|
92
|
+
searchPlaceholder: string;
|
|
93
|
+
empty: string;
|
|
94
|
+
noResults: string;
|
|
95
|
+
loading: string;
|
|
96
|
+
pickArticle: string;
|
|
97
|
+
noBody: string;
|
|
98
|
+
draft: string;
|
|
99
|
+
newArticle: string;
|
|
100
|
+
edit: string;
|
|
101
|
+
};
|
|
102
|
+
/** The app-update banner (a deploy happened under a long-lived tab). */
|
|
103
|
+
update: {
|
|
104
|
+
available: string;
|
|
105
|
+
refreshNow: string;
|
|
106
|
+
};
|
|
107
|
+
/** The page-tab strip (`efficient-shell/page-tabs`). */
|
|
108
|
+
pageTabs: {
|
|
109
|
+
/** The strip's accessible name. */
|
|
110
|
+
label: string;
|
|
111
|
+
/** A tab's close button, and the menu item: `"{close} {title}"` for the button. */
|
|
112
|
+
close: string;
|
|
113
|
+
/** The close button's whole label, when the word order is not
|
|
114
|
+
* "{close} {title}". Wins over `close` for the button when supplied. */
|
|
115
|
+
closeTab?: (title: string) => string;
|
|
116
|
+
closeOthers: string;
|
|
117
|
+
closeRight: string;
|
|
118
|
+
closeAll: string;
|
|
119
|
+
/** Marks a tab with unsaved changes (the dot's accessible text). */
|
|
120
|
+
unsaved: string;
|
|
121
|
+
/** The active tab's copy icon: `"Copy SO-0041"`. */
|
|
122
|
+
copy: (text: string) => string;
|
|
123
|
+
/** The copy icon's label for a moment after it copied. */
|
|
124
|
+
copied: string;
|
|
125
|
+
/** The active tab's icon, where it opens the page's own menu. */
|
|
126
|
+
tabMenu: string;
|
|
127
|
+
/** Asked before a tab with unsaved changes closes. */
|
|
128
|
+
discardTitle: string;
|
|
129
|
+
discardOne: string;
|
|
130
|
+
/** Several at once — the count is prefixed by the caller: "3 pages have…". */
|
|
131
|
+
discardMany: string;
|
|
132
|
+
/** The whole several-at-once sentence, for a language whose noun follows
|
|
133
|
+
* the count's plural form. Wins over `discardMany` when supplied. */
|
|
134
|
+
discardCount?: (count: number) => string;
|
|
135
|
+
discardConfirm: string;
|
|
136
|
+
keepEditing: string;
|
|
137
|
+
};
|
|
138
|
+
/** `Dialog` and `Drawer`'s close control, and the dialogs behind `confirm`,
|
|
139
|
+
* `confirmDestructive` and `prompt` (each option a caller passes wins). */
|
|
140
|
+
dialog: {
|
|
141
|
+
close: string;
|
|
142
|
+
cancel: string;
|
|
143
|
+
ok: string;
|
|
144
|
+
/** `confirm`'s heading when the caller gives no `title`. */
|
|
145
|
+
confirmTitle: string;
|
|
146
|
+
/** `confirmDestructive`'s heading, cancel and confirm defaults. */
|
|
147
|
+
destructiveTitle: string;
|
|
148
|
+
destructiveCancel: string;
|
|
149
|
+
destructiveConfirm: string;
|
|
150
|
+
/** The line over the type-to-confirm box; the word is drawn in a `<kbd>`
|
|
151
|
+
* wherever the sentence puts it. */
|
|
152
|
+
typeToConfirm: (word: string) => string;
|
|
153
|
+
/** `prompt`'s heading when the caller gives no `title`. */
|
|
154
|
+
promptTitle: string;
|
|
155
|
+
};
|
|
156
|
+
/** The month grid (`Calendar`, and the pickers that open it). Month and
|
|
157
|
+
* weekday NAMES are not here — they come from `locale`. */
|
|
158
|
+
calendar: {
|
|
159
|
+
previousMonth: string;
|
|
160
|
+
nextMonth: string;
|
|
161
|
+
previousYear: string;
|
|
162
|
+
nextYear: string;
|
|
163
|
+
previousYears: string;
|
|
164
|
+
nextYears: string;
|
|
165
|
+
/** The month and year panels' accessible names. */
|
|
166
|
+
monthPanel: string;
|
|
167
|
+
yearPanel: string;
|
|
168
|
+
/** The heading's month button. */
|
|
169
|
+
chooseMonth: (month: string) => string;
|
|
170
|
+
/** The heading's year button. */
|
|
171
|
+
chooseYear: (year: number) => string;
|
|
172
|
+
};
|
|
173
|
+
/** `DatePicker`'s trigger and popover. */
|
|
174
|
+
datePicker: {
|
|
175
|
+
placeholder: string;
|
|
176
|
+
/** The popover's accessible name when the field has no `aria-label`. */
|
|
177
|
+
dialog: string;
|
|
178
|
+
clear: string;
|
|
179
|
+
today: string;
|
|
180
|
+
/**
|
|
181
|
+
* Part of a `required` trigger's DESCRIPTION ("Due date, button,
|
|
182
|
+
* 11 August 2026, Required"). The trigger is a button, and ARIA gives a
|
|
183
|
+
* button no `aria-required`, so the fact is said in words instead.
|
|
184
|
+
*/
|
|
185
|
+
required: string;
|
|
186
|
+
};
|
|
187
|
+
/** `DateRangePicker`. */
|
|
188
|
+
dateRange: {
|
|
189
|
+
placeholder: string;
|
|
190
|
+
/** The trigger's × button. */
|
|
191
|
+
clearRange: string;
|
|
192
|
+
/** The popover's and the grid's accessible name. */
|
|
193
|
+
dialog: string;
|
|
194
|
+
from: string;
|
|
195
|
+
to: string;
|
|
196
|
+
/** The From/To boxes before a day is chosen. */
|
|
197
|
+
start: string;
|
|
198
|
+
end: string;
|
|
199
|
+
/** The trigger with only one end of the range set. */
|
|
200
|
+
fromOnly: (date: string) => string;
|
|
201
|
+
toOnly: (date: string) => string;
|
|
202
|
+
/**
|
|
203
|
+
* The whole range as a sentence — what a labelled trigger is DESCRIBED
|
|
204
|
+
* as, after its label names it ("Period, button, 1 August 2026 to
|
|
205
|
+
* 3 October 2026"). Both dates arrive spelled out in the locale.
|
|
206
|
+
*/
|
|
207
|
+
range: (from: string, to: string) => string;
|
|
208
|
+
/**
|
|
209
|
+
* Part of a `required` trigger's description, as `datePicker.required` is
|
|
210
|
+
* for one date. Its own entry, not that one borrowed: an override merges
|
|
211
|
+
* per section, so a host that translated `dateRange` is never left with one
|
|
212
|
+
* English word from a section it did not; and in a language whose
|
|
213
|
+
* adjective agrees with its noun the word for a required range is not the
|
|
214
|
+
* word for a required date (`obligatorio` / `obligatoria`).
|
|
215
|
+
*/
|
|
216
|
+
required: string;
|
|
217
|
+
last2Weeks: string;
|
|
218
|
+
lastMonth: string;
|
|
219
|
+
last3Months: string;
|
|
220
|
+
last6Months: string;
|
|
221
|
+
last12Months: string;
|
|
222
|
+
custom: string;
|
|
223
|
+
clear: string;
|
|
224
|
+
cancel: string;
|
|
225
|
+
apply: string;
|
|
226
|
+
};
|
|
227
|
+
/** `Pagination` (and `DataTable`'s pager). */
|
|
228
|
+
pagination: {
|
|
229
|
+
label: string;
|
|
230
|
+
first: string;
|
|
231
|
+
previous: string;
|
|
232
|
+
next: string;
|
|
233
|
+
last: string;
|
|
234
|
+
};
|
|
235
|
+
/** `ListFooter` and `ListLoadError`, and what `EntityList` says in the same
|
|
236
|
+
* words: its row menu's heading and the line under its last row. `label` is
|
|
237
|
+
* the caller's own noun ("records"); the counts are numbers, for the plural. */
|
|
238
|
+
list: {
|
|
239
|
+
/** Before the em dash: "3 selected — 40 records". */
|
|
240
|
+
selected: (count: number) => string;
|
|
241
|
+
/** In its place when a filter is hiding ticked rows: "2 selected, 5 not
|
|
242
|
+
* shown". `count` is the ticked rows on screen and can be zero. */
|
|
243
|
+
selectedNotShown: (count: number, notShown: number) => string;
|
|
244
|
+
allLoaded: (total: number, label: string) => string;
|
|
245
|
+
count: (total: number, label: string) => string;
|
|
246
|
+
loadedOf: (loaded: number, total: number, label: string) => string;
|
|
247
|
+
/** After a middle dot: "40 of 900 records · Loading more...". `EntityList`
|
|
248
|
+
* says it again under the last row, where the next page will land. */
|
|
249
|
+
loadingMore: string;
|
|
250
|
+
loadError: string;
|
|
251
|
+
loadErrorMessage: string;
|
|
252
|
+
retry: string;
|
|
253
|
+
};
|
|
254
|
+
/** `Kanban`'s defaults (its own props win). */
|
|
255
|
+
kanban: {
|
|
256
|
+
loading: string;
|
|
257
|
+
empty: string;
|
|
258
|
+
dropHere: string;
|
|
259
|
+
addItem: string;
|
|
260
|
+
};
|
|
261
|
+
/** File intake: `FilePicker`, `ComposerAttachments`, and the rejection
|
|
262
|
+
* messages every upload control shares. */
|
|
263
|
+
files: {
|
|
264
|
+
attach: string;
|
|
265
|
+
drop: string;
|
|
266
|
+
remove: (name: string) => string;
|
|
267
|
+
chooseMany: string;
|
|
268
|
+
chooseOne: string;
|
|
269
|
+
/** After the choose link, in the same line. */
|
|
270
|
+
dragMany: string;
|
|
271
|
+
dragOne: string;
|
|
272
|
+
/** `hint` is the caller's `acceptHint` when it is a string, else ''. */
|
|
273
|
+
notAccepted: (name: string, hint: string) => string;
|
|
274
|
+
/** `size` and `limit` arrive written out — "6.2 MB". */
|
|
275
|
+
tooLarge: (name: string, size: string, limit: string) => string;
|
|
276
|
+
tooMany: (name: string, max: number) => string;
|
|
277
|
+
bytes: (value: number) => string;
|
|
278
|
+
kilobytes: (value: number) => string;
|
|
279
|
+
megabytes: (value: number) => string;
|
|
280
|
+
};
|
|
281
|
+
/** `MediaUploadField` and `MediaUploadGrid`. */
|
|
282
|
+
media: {
|
|
283
|
+
uploadImage: string;
|
|
284
|
+
uploadVideo: string;
|
|
285
|
+
uploadFile: string;
|
|
286
|
+
/** The drop zone's accessible name when its prompt is not a string. */
|
|
287
|
+
upload: string;
|
|
288
|
+
cta: string;
|
|
289
|
+
replace: string;
|
|
290
|
+
remove: string;
|
|
291
|
+
uploading: string;
|
|
292
|
+
cover: string;
|
|
293
|
+
add: string;
|
|
294
|
+
addMedia: string;
|
|
295
|
+
empty: string;
|
|
296
|
+
removeItem: (name: string) => string;
|
|
297
|
+
/** A reorderable thumbnail's accessible name. */
|
|
298
|
+
reorder: (name: string, position: number, total: number) => string;
|
|
299
|
+
};
|
|
300
|
+
/** `BrandAssetEditor`. `noun` is the last word of `assetName`, lower-cased
|
|
301
|
+
* ("Portal logo" → "logo"); a translation that cannot use it has
|
|
302
|
+
* `assetName` itself. */
|
|
303
|
+
brandAsset: {
|
|
304
|
+
save: (noun: string, assetName: string) => string;
|
|
305
|
+
remove: (noun: string, assetName: string) => string;
|
|
306
|
+
discard: string;
|
|
307
|
+
saveFailed: (noun: string, assetName: string) => string;
|
|
308
|
+
removeFailed: (noun: string, assetName: string) => string;
|
|
309
|
+
region: (assetName: string, subjectName: string) => string;
|
|
310
|
+
usedFor: (subjectName: string) => string;
|
|
311
|
+
previews: (assetName: string) => string;
|
|
312
|
+
preview: string;
|
|
313
|
+
alt: (subjectName: string, assetName: string) => string;
|
|
314
|
+
};
|
|
315
|
+
/** `Snippet`'s copy button, `CopyButton` beside a record's number in a
|
|
316
|
+
* window title, and the clipboard's toasts. */
|
|
317
|
+
copy: {
|
|
318
|
+
copy: string;
|
|
319
|
+
copyLabel: (label: string) => string;
|
|
320
|
+
/** Snippet's spoken confirmation. */
|
|
321
|
+
copied: string;
|
|
322
|
+
/** `CopyButton`'s tooltip. It names the VALUE it copies, where
|
|
323
|
+
* `copyLabel` names a field: "Copy SO-0041". */
|
|
324
|
+
copyValue: (value: string) => string;
|
|
325
|
+
/** …and for a moment after it copied. */
|
|
326
|
+
copiedValue: string;
|
|
327
|
+
/** `copyToClipboard`'s success toast; `label` names what was copied. */
|
|
328
|
+
copiedLabel: (label: string) => string;
|
|
329
|
+
failed: string;
|
|
330
|
+
};
|
|
331
|
+
/** `NumericKeypad`. */
|
|
332
|
+
keypad: {
|
|
333
|
+
backspace: string;
|
|
334
|
+
enter: string;
|
|
335
|
+
};
|
|
336
|
+
/** `Banner`. */
|
|
337
|
+
banner: {
|
|
338
|
+
dismiss: string;
|
|
339
|
+
};
|
|
340
|
+
/** A closable `ColoredBadge`'s × (its `closeLabel` wins). */
|
|
341
|
+
badge: {
|
|
342
|
+
/** When the badge's content is not plain text. */
|
|
343
|
+
remove: string;
|
|
344
|
+
removeItem: (label: string) => string;
|
|
345
|
+
};
|
|
346
|
+
/** `Breadcrumbs`. */
|
|
347
|
+
breadcrumbs: {
|
|
348
|
+
label: string;
|
|
349
|
+
/** The ellipsis standing for the crumbs `maxItems` folded away. */
|
|
350
|
+
hidden: string;
|
|
351
|
+
};
|
|
352
|
+
/** `EmptyState`'s line when the caller gives neither a title nor a message. */
|
|
353
|
+
emptyState: {
|
|
354
|
+
message: string;
|
|
355
|
+
};
|
|
356
|
+
/** `ErrorPage`, `ErrorBoundary` and `Result`'s status defaults. */
|
|
357
|
+
errors: {
|
|
358
|
+
notFound: string;
|
|
359
|
+
notFoundBody: string;
|
|
360
|
+
forbidden: string;
|
|
361
|
+
forbiddenBody: string;
|
|
362
|
+
/** `Result status="403"`'s title — gentler than `ErrorPage`'s. */
|
|
363
|
+
noAccess: string;
|
|
364
|
+
serverError: string;
|
|
365
|
+
serverErrorBody: string;
|
|
366
|
+
retry: string;
|
|
367
|
+
details: string;
|
|
368
|
+
};
|
|
369
|
+
/** `GlobalSearch`. */
|
|
370
|
+
search: {
|
|
371
|
+
placeholder: string;
|
|
372
|
+
/** The key cap beside the input. */
|
|
373
|
+
escBadge: string;
|
|
374
|
+
searching: string;
|
|
375
|
+
noResults: string;
|
|
376
|
+
minChars: (min: number) => string;
|
|
377
|
+
navigate: string;
|
|
378
|
+
open: string;
|
|
379
|
+
close: string;
|
|
380
|
+
enterKey: string;
|
|
381
|
+
escKey: string;
|
|
382
|
+
/** Section titles of the empty-state palette and of the quick-action group. */
|
|
383
|
+
recent: string;
|
|
384
|
+
favorites: string;
|
|
385
|
+
actions: string;
|
|
386
|
+
/** Accessible name of the result list. */
|
|
387
|
+
listLabel: string;
|
|
388
|
+
/** The count beside a group header; `more` when the providers cut the group short ("5+"). */
|
|
389
|
+
groupCount: (count: number, more: boolean) => string;
|
|
390
|
+
/** Accessible name of a result group: its title and how many rows it holds. */
|
|
391
|
+
groupLabel: (title: string, count: number, more: boolean) => string;
|
|
392
|
+
/** The last row of a cut-short group, opening the type's own list with the query filled in. */
|
|
393
|
+
seeAll: (listLabel: string) => string;
|
|
394
|
+
/** Every provider failed: shown instead of "no results". */
|
|
395
|
+
searchFailed: string;
|
|
396
|
+
/** Some providers failed: one line under the results that did arrive. */
|
|
397
|
+
partialFailure: string;
|
|
398
|
+
/** Footer hint for the Tab key, shown when there is more than one group. */
|
|
399
|
+
tabKey: string;
|
|
400
|
+
nextGroup: string;
|
|
401
|
+
};
|
|
402
|
+
/** `EditableGrid`. */
|
|
403
|
+
grid: {
|
|
404
|
+
selectAll: string;
|
|
405
|
+
insertRowAbove: string;
|
|
406
|
+
insertRowBelow: string;
|
|
407
|
+
deleteRow: (row: number) => string;
|
|
408
|
+
insertColumnLeft: string;
|
|
409
|
+
insertColumnRight: string;
|
|
410
|
+
deleteColumn: (column: string) => string;
|
|
411
|
+
resize: string;
|
|
412
|
+
fill: string;
|
|
413
|
+
};
|
|
414
|
+
/** `SidebarLayout`'s resize handle. */
|
|
415
|
+
sidebar: {
|
|
416
|
+
resize: string;
|
|
417
|
+
};
|
|
418
|
+
/** `ResizeHandle` — the drag grip on a side panel's edge. */
|
|
419
|
+
resizeHandle: {
|
|
420
|
+
/** Its accessible name, when the caller gives none. */
|
|
421
|
+
label: string;
|
|
422
|
+
/** Its tooltip: how to use it. */
|
|
423
|
+
hint: string;
|
|
424
|
+
};
|
|
425
|
+
/** `InputNumber`'s `steppers`: the two arrow buttons' accessible names. */
|
|
426
|
+
number: {
|
|
427
|
+
increase: string;
|
|
428
|
+
decrease: string;
|
|
429
|
+
};
|
|
430
|
+
/** `Slider`. The label arrives as the caller wrote it. */
|
|
431
|
+
slider: {
|
|
432
|
+
/** The typed value box beside the range: "Opacity value". */
|
|
433
|
+
value: (label: string) => string;
|
|
434
|
+
};
|
|
435
|
+
/** `ColorPicker`, `ColorPickerPanel` and `ColorSwatch`. The label arrives
|
|
436
|
+
* as the caller wrote it; a colour arrives as the hex that is printed. */
|
|
437
|
+
color: {
|
|
438
|
+
/** The swatch that opens the picker: "Text color: #0B5CFF". */
|
|
439
|
+
swatch: (label: string, value: string) => string;
|
|
440
|
+
/** What a swatch reads while there is no colour. */
|
|
441
|
+
none: string;
|
|
442
|
+
/** The picker panel's name: "Text color picker". */
|
|
443
|
+
panel: (label: string) => string;
|
|
444
|
+
/** The saturation-and-brightness square… */
|
|
445
|
+
square: string;
|
|
446
|
+
/** …and what it says it is at. Both arrive as 0–100. */
|
|
447
|
+
squareValue: (saturation: number, brightness: number) => string;
|
|
448
|
+
hue: string;
|
|
449
|
+
/** The hex box: "Text color hex code". */
|
|
450
|
+
hex: (label: string) => string;
|
|
451
|
+
/** The row of preset swatches. */
|
|
452
|
+
presets: string;
|
|
453
|
+
/** The swatch that takes the colour away. */
|
|
454
|
+
clear: string;
|
|
455
|
+
};
|
|
456
|
+
/** `TreeEmptySlot`, a draggable `TreeRow`'s grip and `TreeSeam`. */
|
|
457
|
+
tree: {
|
|
458
|
+
/** What an empty list says at rest. */
|
|
459
|
+
empty: string;
|
|
460
|
+
/** What it says while a drag may land in it. */
|
|
461
|
+
dropHere: string;
|
|
462
|
+
/** A draggable row's grip, on hover. */
|
|
463
|
+
dragHint: string;
|
|
464
|
+
/** A row `onMove` moves: its accessible description, the keys. */
|
|
465
|
+
moveHint: string;
|
|
466
|
+
/** A seam's "+": it adds a row at that place. */
|
|
467
|
+
insertHere: string;
|
|
468
|
+
};
|
|
469
|
+
/** Layout Mode — the Desktop and Sidebar layouts, the Sidebar layout's menu
|
|
470
|
+
* rail and its strip of open windows. */
|
|
471
|
+
layout: {
|
|
472
|
+
/** The two choices in Preferences → Customization → Layout Mode. */
|
|
473
|
+
desktop: string;
|
|
474
|
+
sidebar: string;
|
|
475
|
+
/** The one-click switches: the rail's account menu, the Start menu and
|
|
476
|
+
* the taskbar's right-click menu. */
|
|
477
|
+
switchToDesktop: string;
|
|
478
|
+
switchToSidebar: string;
|
|
479
|
+
collapseSidebar: string;
|
|
480
|
+
expandSidebar: string;
|
|
481
|
+
/** The rail's search box (it opens the search palette). */
|
|
482
|
+
search: string;
|
|
483
|
+
/** The rail's accessible name. */
|
|
484
|
+
navLabel: string;
|
|
485
|
+
/** The strip of open windows' accessible name. */
|
|
486
|
+
openWindows: string;
|
|
487
|
+
/** The tag on a page result in the search palette. */
|
|
488
|
+
pageResult: string;
|
|
489
|
+
/** The account menu at the foot of the rail. */
|
|
490
|
+
accountMenu: (name: string) => string;
|
|
491
|
+
profile: string;
|
|
492
|
+
notifications: string;
|
|
493
|
+
reportIssue: string;
|
|
494
|
+
signOut: string;
|
|
495
|
+
signOutTitle: string;
|
|
496
|
+
signOutMessage: string;
|
|
497
|
+
};
|
|
498
|
+
/** `MarkdownLite`. */
|
|
499
|
+
markdown: {
|
|
500
|
+
/** Before an image placeholder's caption, with an em dash between. */
|
|
501
|
+
screenshot: string;
|
|
502
|
+
};
|
|
503
|
+
/** The word a severity marker is spoken and tooltipped with. */
|
|
504
|
+
severity: {
|
|
505
|
+
success: string;
|
|
506
|
+
warning: string;
|
|
507
|
+
danger: string;
|
|
508
|
+
/** A token that is not one of the three, as received. */
|
|
509
|
+
unrecognised: (token: string) => string;
|
|
510
|
+
};
|
|
511
|
+
/** `MetricBar` and `BudgetBar`. */
|
|
512
|
+
meter: {
|
|
513
|
+
noData: string;
|
|
514
|
+
warningAt: (bound: number) => string;
|
|
515
|
+
criticalAt: (bound: number) => string;
|
|
516
|
+
noReading: string;
|
|
517
|
+
noBudget: string;
|
|
518
|
+
/** The meter's spoken value: "84% of budget". */
|
|
519
|
+
ofBudget: (value: string) => string;
|
|
520
|
+
/** The deadline marker's tooltip. */
|
|
521
|
+
budget: string;
|
|
522
|
+
hoursMinutes: (hours: number, minutes: number) => string;
|
|
523
|
+
minutesSeconds: (minutes: number, seconds: number) => string;
|
|
524
|
+
seconds: (seconds: number) => string;
|
|
525
|
+
};
|
|
526
|
+
/** The chart family. Series, axis and category names are the caller's. */
|
|
527
|
+
charts: {
|
|
528
|
+
showTable: string;
|
|
529
|
+
loading: string;
|
|
530
|
+
noData: string;
|
|
531
|
+
windowStart: string;
|
|
532
|
+
windowEnd: string;
|
|
533
|
+
window: (from: string, to: string, count: number) => string;
|
|
534
|
+
overIntervals: (series: string[], count: number) => string;
|
|
535
|
+
acrossCategories: (series: string[], count: number) => string;
|
|
536
|
+
acrossMeasures: (series: string[], count: number) => string;
|
|
537
|
+
/** The pie's accessible name; `total` is written by the caller's `formatValue`. */
|
|
538
|
+
breakdown: (total: string, segments: number) => string;
|
|
539
|
+
funnel: (stages: number, first: string, last: string) => string;
|
|
540
|
+
radialTrack: (count: number) => string;
|
|
541
|
+
radialCycle: (count: number) => string;
|
|
542
|
+
/** Column heads of the screen-reader tables some charts carry. */
|
|
543
|
+
tableFrom: string;
|
|
544
|
+
tableTo: string;
|
|
545
|
+
tableItem: string;
|
|
546
|
+
tableLevel: string;
|
|
547
|
+
tableSeries: string;
|
|
548
|
+
inBucket: (total: string) => string;
|
|
549
|
+
inCategory: (total: string) => string;
|
|
550
|
+
value: string;
|
|
551
|
+
share: string;
|
|
552
|
+
count: string;
|
|
553
|
+
flow: string;
|
|
554
|
+
totalFlow: string;
|
|
555
|
+
throughput: string;
|
|
556
|
+
open: string;
|
|
557
|
+
high: string;
|
|
558
|
+
low: string;
|
|
559
|
+
close: string;
|
|
560
|
+
maximum: string;
|
|
561
|
+
q3: string;
|
|
562
|
+
median: string;
|
|
563
|
+
q1: string;
|
|
564
|
+
minimum: string;
|
|
565
|
+
distribution: string;
|
|
566
|
+
fiveNumber: (label: string, count: number) => string;
|
|
567
|
+
outliers: (count: number) => string;
|
|
568
|
+
price: string;
|
|
569
|
+
ohlc: (label: string, count: number) => string;
|
|
570
|
+
closedAbove: string;
|
|
571
|
+
closedBelow: string;
|
|
572
|
+
noFlows: string;
|
|
573
|
+
chord: (count: number) => string;
|
|
574
|
+
noStages: string;
|
|
575
|
+
ofFirstStage: string;
|
|
576
|
+
droppedHere: string;
|
|
577
|
+
intensity: string;
|
|
578
|
+
noActivity: string;
|
|
579
|
+
heatmap: (label: string, rows: number, columns: number) => string;
|
|
580
|
+
/** A histogram's y-axis title. */
|
|
581
|
+
countAxis: string;
|
|
582
|
+
histogram: (label: string, bins: number, observations: number) => string;
|
|
583
|
+
observations: string;
|
|
584
|
+
/** `Meter` with no value to judge. */
|
|
585
|
+
notEnough: string;
|
|
586
|
+
objectiveMet: (objective: string) => string;
|
|
587
|
+
objectiveMissed: (objective: string) => string;
|
|
588
|
+
nothingToPlot: string;
|
|
589
|
+
nothingToCompare: string;
|
|
590
|
+
/** The pie slice the small segments are folded into. */
|
|
591
|
+
other: string;
|
|
592
|
+
nothingToBreakDown: string;
|
|
593
|
+
range: string;
|
|
594
|
+
rangeLabel: (label: string, count: number) => string;
|
|
595
|
+
nothingToRank: string;
|
|
596
|
+
/** Spoken after the emphasised row of `RankedBars`. */
|
|
597
|
+
emphasised: string;
|
|
598
|
+
sankey: (nodes: number, links: number) => string;
|
|
599
|
+
noObservations: string;
|
|
600
|
+
xAxis: string;
|
|
601
|
+
yAxis: string;
|
|
602
|
+
size: string;
|
|
603
|
+
scatter: (series: string[], yLabel: string, xLabel: string) => string;
|
|
604
|
+
outsideRange: (count: number) => string;
|
|
605
|
+
waterfall: (steps: number, from: string, to: string) => string;
|
|
606
|
+
balance: string;
|
|
607
|
+
increase: string;
|
|
608
|
+
decrease: string;
|
|
609
|
+
runningTotal: string;
|
|
610
|
+
sunburst: (total: string, depth: number) => string;
|
|
611
|
+
treemap: (count: number) => string;
|
|
612
|
+
/** `StatTile`'s delta direction, spoken after the arrow glyph. */
|
|
613
|
+
trendUp: string;
|
|
614
|
+
trendDown: string;
|
|
615
|
+
trendFlat: string;
|
|
616
|
+
};
|
|
617
|
+
/** `TimelineTrack` and `MilestoneTimeline`. */
|
|
618
|
+
timeline: {
|
|
619
|
+
/** A cut in the axis: "412 days". */
|
|
620
|
+
days: (count: number) => string;
|
|
621
|
+
daysToToday: (count: number) => string;
|
|
622
|
+
notReached: string;
|
|
623
|
+
/** Before the first pending entry, with a middle dot after it. */
|
|
624
|
+
next: string;
|
|
625
|
+
more: (count: number) => string;
|
|
626
|
+
today: string;
|
|
627
|
+
todayTitle: (date: string) => string;
|
|
628
|
+
open: (name: string) => string;
|
|
629
|
+
openButton: string;
|
|
630
|
+
scrub: string;
|
|
631
|
+
alsoToCome: (names: string[]) => string;
|
|
632
|
+
start: (date: string) => string;
|
|
633
|
+
/** A folded run of marks: its count, then each member's own name. */
|
|
634
|
+
events: (count: number, names: string[]) => string;
|
|
635
|
+
started: (date: string) => string;
|
|
636
|
+
duration: (days: number) => string;
|
|
637
|
+
reached: (dated: number, total: number) => string;
|
|
638
|
+
milestones: (title: string) => string;
|
|
639
|
+
};
|
|
640
|
+
/** `ProductionTimeline`. */
|
|
641
|
+
production: {
|
|
642
|
+
heading: string;
|
|
643
|
+
/** The synthetic report standing for the production start. */
|
|
644
|
+
start: string;
|
|
645
|
+
/** The synthetic report between two real ones. */
|
|
646
|
+
estimated: string;
|
|
647
|
+
estimatedCompletion: string;
|
|
648
|
+
estDone: string;
|
|
649
|
+
play: string;
|
|
650
|
+
pause: string;
|
|
651
|
+
playTitle: string;
|
|
652
|
+
backTo: (report: string) => string;
|
|
653
|
+
/** The report is drawn bold wherever the sentence puts it. */
|
|
654
|
+
showing: (report: string) => string;
|
|
655
|
+
overall: (percent: number) => string;
|
|
656
|
+
inStock: (pieces: number) => string;
|
|
657
|
+
noReport: string;
|
|
658
|
+
leadTime: (days: number) => string;
|
|
659
|
+
report: string;
|
|
660
|
+
shipment: string;
|
|
661
|
+
inspection: string;
|
|
662
|
+
invoice: string;
|
|
663
|
+
scrub: string;
|
|
664
|
+
label: (from: string, to: string) => string;
|
|
665
|
+
};
|
|
666
|
+
/** `ContainerFillChart`. Volumes are cubic metres. */
|
|
667
|
+
containers: {
|
|
668
|
+
items: (count: number) => string;
|
|
669
|
+
pieces: (count: number) => string;
|
|
670
|
+
split: (instructed: number, loaded: number) => string;
|
|
671
|
+
added: (count: number, pieces: number) => string;
|
|
672
|
+
fill: (volume: number, capacity: number) => string;
|
|
673
|
+
total: string;
|
|
674
|
+
instructed: (volume: number) => string;
|
|
675
|
+
loaded: (volume: number) => string;
|
|
676
|
+
volume: (volume: number) => string;
|
|
677
|
+
noVolume: string;
|
|
678
|
+
};
|
|
679
|
+
/** `toast.notify`'s card. */
|
|
680
|
+
toast: {
|
|
681
|
+
notification: string;
|
|
682
|
+
};
|
|
683
|
+
/** `efficient-shell/map`: `EntityMap` and what sits over it. Pins, groups
|
|
684
|
+
* and marks are named by the caller's own labels; these are the words
|
|
685
|
+
* around them. `noun` is `EntityMap`'s `noun` for the count, or `places`. */
|
|
686
|
+
map: {
|
|
687
|
+
/** Over a map that could not be drawn (no WebGL, MapLibre not loaded). */
|
|
688
|
+
failed: string;
|
|
689
|
+
/** A pin placed at an area, not its address: its accessible name. */
|
|
690
|
+
approximate: (label: string) => string;
|
|
691
|
+
/** …and its tooltip. */
|
|
692
|
+
approximateTitle: (label: string) => string;
|
|
693
|
+
/** What the map's pins are, when `EntityMap` is not told: "place" / "places". */
|
|
694
|
+
places: (count: number) => string;
|
|
695
|
+
/** A group of pins that are not stops: "3 places here". */
|
|
696
|
+
group: (count: number, noun: string) => string;
|
|
697
|
+
/** A group of a route's stops, by number: "Stops 3–4". */
|
|
698
|
+
stops: (numbers: string) => string;
|
|
699
|
+
/** Pins left off under a stop, counted on it. */
|
|
700
|
+
closeBy: (count: number, noun: string) => string;
|
|
701
|
+
/** What pressing a group does: zooms in until its pins stand apart… */
|
|
702
|
+
spread: string;
|
|
703
|
+
/** …or, as close as the map goes, chooses the next of them. */
|
|
704
|
+
cycle: string;
|
|
705
|
+
/** `EntityMap`'s full-screen control. */
|
|
706
|
+
fullScreen: string;
|
|
707
|
+
leaveFullScreen: string;
|
|
708
|
+
/** `SelectedCard`'s accessible name: the record's own label in it. */
|
|
709
|
+
chosen: (label: string) => string;
|
|
710
|
+
/** `SelectedCard`'s close button… */
|
|
711
|
+
closeCard: string;
|
|
712
|
+
/** …and the button that opens the record's own page or window. */
|
|
713
|
+
openRecord: string;
|
|
714
|
+
};
|
|
715
|
+
/** `PdfViewer`'s toolbar (`efficient-shell/pdf`, and the Preview window's
|
|
716
|
+
* PDF panel). Page numbers arrive as numbers, unformatted. */
|
|
717
|
+
pdf: {
|
|
718
|
+
previousPage: string;
|
|
719
|
+
nextPage: string;
|
|
720
|
+
/** The counter between the two: "2 / 5". */
|
|
721
|
+
pageOf: (page: number, total: number) => string;
|
|
722
|
+
zoomOut: string;
|
|
723
|
+
zoomIn: string;
|
|
724
|
+
/** The zoom select's accessible name and tooltip. */
|
|
725
|
+
zoom: string;
|
|
726
|
+
/** The zoom select's auto-fit choice, for each `fit`. */
|
|
727
|
+
fitWidth: string;
|
|
728
|
+
fitPage: string;
|
|
729
|
+
/** The Fit button, and its tooltip. */
|
|
730
|
+
fit: string;
|
|
731
|
+
fitHint: string;
|
|
732
|
+
print: string;
|
|
733
|
+
download: string;
|
|
734
|
+
email: string;
|
|
735
|
+
loading: string;
|
|
736
|
+
/** Toasts: the document could not be read, and Print's window was blocked. */
|
|
737
|
+
loadFailed: string;
|
|
738
|
+
allowPopups: string;
|
|
739
|
+
};
|
|
740
|
+
/** The plain line a list, or a window whose code is still arriving, shows
|
|
741
|
+
* in place of its content (`shell/LoadingSpinner`; the kit's ring of the
|
|
742
|
+
* same export name says only what its `label` prop does). */
|
|
743
|
+
loading: {
|
|
744
|
+
label: string;
|
|
745
|
+
};
|
|
746
|
+
/** `LanguageSelect` and `LanguagePanel`. The languages' own names are not
|
|
747
|
+
* here: each is written in its own language and comes from the host's list
|
|
748
|
+
* (`ShellLanguage.name`). */
|
|
749
|
+
language: {
|
|
750
|
+
/** The panel's heading, and the compact picker's accessible name. */
|
|
751
|
+
title: string;
|
|
752
|
+
/** What the choice changes, under the heading. A host that keeps the
|
|
753
|
+
* choice on an account says so through the panel's `description`. */
|
|
754
|
+
description: string;
|
|
755
|
+
/** Under the list: choosing one reloads the page. */
|
|
756
|
+
reloadNote: string;
|
|
757
|
+
};
|
|
758
|
+
/** `EntityList`'s row menu, and what it says after a copy or an export. The
|
|
759
|
+
* menu's heading and the list's footer are `list`'s; a page's own
|
|
760
|
+
* `contextActions` carry their own labels. */
|
|
761
|
+
entityList: {
|
|
762
|
+
/** Opens the row that was right-clicked. */
|
|
763
|
+
open: string;
|
|
764
|
+
/** Copies the text selected under the pointer. */
|
|
765
|
+
copy: string;
|
|
766
|
+
/** Copies the first column of the ticked rows, by its heading: "Copy PO Number". */
|
|
767
|
+
copyColumn: (column: string) => string;
|
|
768
|
+
/** Copies the ticked rows as a table: "Copy row", "Copy 3 rows". */
|
|
769
|
+
copyRows: (count: number) => string;
|
|
770
|
+
exportSelected: string;
|
|
771
|
+
selectAll: string;
|
|
772
|
+
/** In its place while the list holds fewer rows than exist. */
|
|
773
|
+
selectAllLoaded: (loaded: number) => string;
|
|
774
|
+
clearSelection: string;
|
|
775
|
+
refresh: string;
|
|
776
|
+
/** What a copy names in `copy.copiedLabel`'s toast: "Text copied"… */
|
|
777
|
+
copiedText: string;
|
|
778
|
+
/** …"Row copied", "3 rows copied". */
|
|
779
|
+
copiedRows: (count: number) => string;
|
|
780
|
+
/** The export's toast, when the file holds every row that was ticked. */
|
|
781
|
+
exported: (count: number) => string;
|
|
782
|
+
/** The server capped the export: `kept` of the `asked` rows are in the file… */
|
|
783
|
+
exportTruncated: (kept: number, asked: number) => string;
|
|
784
|
+
/** …or it did not say how many are. */
|
|
785
|
+
exportTruncatedUnknown: (asked: number) => string;
|
|
786
|
+
exportFailed: string;
|
|
787
|
+
};
|
|
788
|
+
/** `ResizableTable`'s footer controls: the column chooser, and on a phone
|
|
789
|
+
* the switch that brings the tick-box column back. Column names are the
|
|
790
|
+
* caller's. */
|
|
791
|
+
columns: {
|
|
792
|
+
/** The chooser's button, as a tooltip, and the heading over its list. */
|
|
793
|
+
choose: string;
|
|
794
|
+
heading: string;
|
|
795
|
+
reset: string;
|
|
796
|
+
/** An admin's link under the list, and what it reads once it has saved. */
|
|
797
|
+
saveDefault: string;
|
|
798
|
+
savedDefault: string;
|
|
799
|
+
/** The phone's switch: its two faces, then the tooltip for each. */
|
|
800
|
+
select: string;
|
|
801
|
+
selectDone: string;
|
|
802
|
+
showSelection: string;
|
|
803
|
+
hideSelection: string;
|
|
804
|
+
};
|
|
805
|
+
/** `EntityWindowState`: what a record's window says while it has no record
|
|
806
|
+
* to draw. A refusal (403) is `errors.noAccess`, by way of `Result`. */
|
|
807
|
+
record: {
|
|
808
|
+
loading: string;
|
|
809
|
+
signInRequired: string;
|
|
810
|
+
signInBody: string;
|
|
811
|
+
notFound: string;
|
|
812
|
+
loadFailed: string;
|
|
813
|
+
/** Under `loadFailed`, when trying again may help… */
|
|
814
|
+
checkConnection: string;
|
|
815
|
+
/** …and when the server refused the request itself. */
|
|
816
|
+
rejected: string;
|
|
817
|
+
retry: string;
|
|
818
|
+
};
|
|
819
|
+
/** `ChangePasswordForm` (its `submitLabel` and `doneLabel` win). */
|
|
820
|
+
password: {
|
|
821
|
+
current: string;
|
|
822
|
+
newPassword: string;
|
|
823
|
+
confirm: string;
|
|
824
|
+
submit: string;
|
|
825
|
+
/** The submit button while the change is in flight. */
|
|
826
|
+
submitting: string;
|
|
827
|
+
/** The button under the confirmation. */
|
|
828
|
+
done: string;
|
|
829
|
+
currentRequired: string;
|
|
830
|
+
tooShort: (minLength: number) => string;
|
|
831
|
+
mismatch: string;
|
|
832
|
+
/** When the host's `onSubmit` rejects without a message of its own. */
|
|
833
|
+
failed: string;
|
|
834
|
+
changed: string;
|
|
835
|
+
};
|
|
836
|
+
/** `PdfActionButton`: its menu, its toasts, and what it puts in the Preview
|
|
837
|
+
* window while the document is on its way (its `label` wins). */
|
|
838
|
+
pdfAction: {
|
|
839
|
+
label: string;
|
|
840
|
+
/** The button while a document is being fetched. */
|
|
841
|
+
loading: string;
|
|
842
|
+
preview: string;
|
|
843
|
+
download: string;
|
|
844
|
+
email: string;
|
|
845
|
+
downloaded: (filename: string) => string;
|
|
846
|
+
/** A download or an email that stopped waiting for the document. */
|
|
847
|
+
tookTooLong: (filename: string) => string;
|
|
848
|
+
/** The Preview window's placeholder, and the two ways it can end without a
|
|
849
|
+
* document: the fetch never settled, or it settled with nothing. */
|
|
850
|
+
previewLoading: string;
|
|
851
|
+
previewTookTooLong: string;
|
|
852
|
+
previewFailed: string;
|
|
853
|
+
};
|
|
854
|
+
/** `UndoControls`. `label` is the step's own name, as the form registered
|
|
855
|
+
* it; `keys` is the shortcut as the reader's platform writes it. */
|
|
856
|
+
undo: {
|
|
857
|
+
undo: string;
|
|
858
|
+
redo: string;
|
|
859
|
+
/** The buttons' tooltips: "Undo supplier (Ctrl+Z)". */
|
|
860
|
+
undoStep: (label: string, keys: string) => string;
|
|
861
|
+
redoStep: (label: string, keys: string) => string;
|
|
862
|
+
nothingToUndo: string;
|
|
863
|
+
nothingToRedo: string;
|
|
864
|
+
};
|
|
865
|
+
/** `SoundsPanel`, and the same grid in Preferences → Customization. Only the
|
|
866
|
+
* NAMES are here: the scheme and event keys stored under `erp_sound_config`
|
|
867
|
+
* are identifiers and never translated. */
|
|
868
|
+
sounds: {
|
|
869
|
+
title: string;
|
|
870
|
+
/** The switch over the grid. */
|
|
871
|
+
enable: string;
|
|
872
|
+
autosave: string;
|
|
873
|
+
/** One round button of the grid, by its row and column: "Click — Classic". */
|
|
874
|
+
choice: (event: string, pack: string) => string;
|
|
875
|
+
/** The schemes, a column each. */
|
|
876
|
+
packClassic: string;
|
|
877
|
+
packMinimal: string;
|
|
878
|
+
packRetro: string;
|
|
879
|
+
packSoft: string;
|
|
880
|
+
packArcade: string;
|
|
881
|
+
packSilent: string;
|
|
882
|
+
/** The events, a row each. */
|
|
883
|
+
eventClick: string;
|
|
884
|
+
eventSuccess: string;
|
|
885
|
+
eventError: string;
|
|
886
|
+
eventNotification: string;
|
|
887
|
+
eventStartup: string;
|
|
888
|
+
eventTimerDone: string;
|
|
889
|
+
eventLogout: string;
|
|
890
|
+
};
|
|
891
|
+
/** `ServerStatusIndicator`: the tray globe's tooltip and the card it opens.
|
|
892
|
+
* A time arrives written in the locale. The host, the protocol, the user
|
|
893
|
+
* agent and a latency (`42 ms`) are data and notation, so they are not here. */
|
|
894
|
+
serverStatus: {
|
|
895
|
+
connected: string;
|
|
896
|
+
disconnected: string;
|
|
897
|
+
/** Before the first poll answers, and while a manual one is in flight. */
|
|
898
|
+
checking: string;
|
|
899
|
+
/** The globe's tooltip once a poll has succeeded: "Connected · last ok 10:42:07". */
|
|
900
|
+
lastOkTitle: (status: string, time: string) => string;
|
|
901
|
+
/** The card's accessible name. */
|
|
902
|
+
details: string;
|
|
903
|
+
/** Under the status: "Last poll 5s ago." */
|
|
904
|
+
lastPoll: (ago: string) => string;
|
|
905
|
+
lastFailure: (ago: string) => string;
|
|
906
|
+
firstPoll: string;
|
|
907
|
+
/** The rows, by their labels. */
|
|
908
|
+
server: string;
|
|
909
|
+
protocol: string;
|
|
910
|
+
browser: string;
|
|
911
|
+
/** What the Browser row reads. */
|
|
912
|
+
online: string;
|
|
913
|
+
offline: string;
|
|
914
|
+
lastOk: string;
|
|
915
|
+
lastFail: string;
|
|
916
|
+
latency: string;
|
|
917
|
+
poll: string;
|
|
918
|
+
/** What the Poll row reads: "every 15 s". */
|
|
919
|
+
pollEvery: (seconds: number) => string;
|
|
920
|
+
/** The two headings further down, and the rows under each. */
|
|
921
|
+
session: string;
|
|
922
|
+
user: string;
|
|
923
|
+
notSignedIn: string;
|
|
924
|
+
role: string;
|
|
925
|
+
build: string;
|
|
926
|
+
app: string;
|
|
927
|
+
userAgent: string;
|
|
928
|
+
/** The footer: a hint, and the button it points at. */
|
|
929
|
+
pingHint: string;
|
|
930
|
+
refresh: string;
|
|
931
|
+
};
|
|
932
|
+
/** `BulkImportGrid`: the paste-or-upload grid, its CSV column mapper and its
|
|
933
|
+
* two duplicate reviews. Column titles are the caller's, and its
|
|
934
|
+
* `description` wins. Counts are numbers, for the plural. */
|
|
935
|
+
bulkImport: {
|
|
936
|
+
description: string;
|
|
937
|
+
/** After the description, in brackets: "12 lines"… */
|
|
938
|
+
lines: (count: number) => string;
|
|
939
|
+
/** …then each totalled column, its sum written in the locale: "Qty: 1,200". */
|
|
940
|
+
total: (label: string, value: string) => string;
|
|
941
|
+
clear: string;
|
|
942
|
+
upload: string;
|
|
943
|
+
importLines: (count: number) => string;
|
|
944
|
+
/** The import button while the caller's `onImport` runs. */
|
|
945
|
+
importing: string;
|
|
946
|
+
importFailed: string;
|
|
947
|
+
/** Nothing was typed. `noun` is the first column's title, lower-cased
|
|
948
|
+
* ("part number"), and `title` is it as given; both are '' without one. */
|
|
949
|
+
enterAtLeastOne: (noun: string, title: string) => string;
|
|
950
|
+
/** Every duplicate was skipped, and nothing else was left. */
|
|
951
|
+
allSkipped: string;
|
|
952
|
+
cancel: string;
|
|
953
|
+
/** The column mapper, for a CSV whose columns could not be told apart. */
|
|
954
|
+
mapTitle: string;
|
|
955
|
+
skip: string;
|
|
956
|
+
/** A CSV column in the mapper's list, with its first value: "Column 2 (e.g. 18x8)". */
|
|
957
|
+
columnOption: (column: number, sample: string) => string;
|
|
958
|
+
rowsDetected: (count: number) => string;
|
|
959
|
+
confirmMapping: string;
|
|
960
|
+
/** The duplicate review: one card per repeated value, and a choice for each. */
|
|
961
|
+
duplicatesTitle: string;
|
|
962
|
+
duplicatesFound: (count: number) => string;
|
|
963
|
+
occurrences: (count: number) => string;
|
|
964
|
+
keepFirst: string;
|
|
965
|
+
keepLast: string;
|
|
966
|
+
keepAll: string;
|
|
967
|
+
skipAll: string;
|
|
968
|
+
keptDropped: (kept: number, dropped: number) => string;
|
|
969
|
+
proceed: string;
|
|
970
|
+
/** The same review under `mergeDuplicates`: the rows are summed, not chosen. */
|
|
971
|
+
duplicatesMerged: (count: number) => string;
|
|
972
|
+
mergedFrom: string;
|
|
973
|
+
mergedRows: (count: number) => string;
|
|
974
|
+
mergeSummary: (rows: number, lines: number) => string;
|
|
975
|
+
};
|
|
976
|
+
/** The Preview window (`efficient-shell/apps`): its toolbar, its empty canvas
|
|
977
|
+
* and drop zone, the placeholder a file waits behind, the image panel, and
|
|
978
|
+
* the words its drawing and 3D panels share. The PDF panel is `pdf`. File
|
|
979
|
+
* extensions and package names are notation and stay in the markup; a
|
|
980
|
+
* file's own name is data. */
|
|
981
|
+
preview: {
|
|
982
|
+
/** The window's title: "invoice.pdf - Preview"… */
|
|
983
|
+
windowTitle: (name: string) => string;
|
|
984
|
+
/** …and the name it gives a window with no file in it. */
|
|
985
|
+
untitled: string;
|
|
986
|
+
open: string;
|
|
987
|
+
/** Beside Open: what it reads. */
|
|
988
|
+
formats: string;
|
|
989
|
+
/** The empty canvas. `open` is drawn as a link wherever the sentence puts it. */
|
|
990
|
+
dropHere: (open: string) => string;
|
|
991
|
+
supportedFormats: string;
|
|
992
|
+
/** What each kind of file opens as, after its extensions and an em dash.
|
|
993
|
+
* The package is drawn in monospace wherever the sentence puts it. */
|
|
994
|
+
formatPdf: string;
|
|
995
|
+
formatDxf: (packageName: string) => string;
|
|
996
|
+
format3d: (packageName: string) => string;
|
|
997
|
+
formatImage: string;
|
|
998
|
+
dwgNote: string;
|
|
999
|
+
/** Over the window while a file is dragged across it. */
|
|
1000
|
+
dropToOpen: string;
|
|
1001
|
+
/** Toasts for a file it cannot read. `extension` has no dot, and is '' for
|
|
1002
|
+
* a name without one. */
|
|
1003
|
+
dwgUnsupported: string;
|
|
1004
|
+
unsupportedType: (extension: string) => string;
|
|
1005
|
+
/** The placeholder's headline, when the caller staged no `convertingMessage`. */
|
|
1006
|
+
converting: string;
|
|
1007
|
+
/** Every panel's toolbar. */
|
|
1008
|
+
download: string;
|
|
1009
|
+
email: string;
|
|
1010
|
+
/** The drawing and 3D panels' toolbars, hint pills and floating panels. */
|
|
1011
|
+
howToNavigate: string;
|
|
1012
|
+
stopMeasuring: string;
|
|
1013
|
+
scrollToZoom: string;
|
|
1014
|
+
closePanel: string;
|
|
1015
|
+
/** The image panel: into the annotator, and what its toolbar offers there. */
|
|
1016
|
+
annotate: string;
|
|
1017
|
+
annotateHint: string;
|
|
1018
|
+
view: string;
|
|
1019
|
+
viewHint: string;
|
|
1020
|
+
copy: string;
|
|
1021
|
+
save: string;
|
|
1022
|
+
imageFailed: string;
|
|
1023
|
+
downloadFailed: string;
|
|
1024
|
+
};
|
|
1025
|
+
/** Preview's drawing (DXF) panel: its toolbar, the measuring tool, the layer
|
|
1026
|
+
* list and the AutoCAD-style command bar. The command names (`DI`, `DIM`,
|
|
1027
|
+
* `H`, `V`, `Z`, `LA`) are what is typed, in every language, and `ΔX` / `ΔY`
|
|
1028
|
+
* are notation. A distance arrives written out ("18.56 mm"). */
|
|
1029
|
+
drawing: {
|
|
1030
|
+
loading: string;
|
|
1031
|
+
notInstalled: string;
|
|
1032
|
+
/** When the viewer fails without a message of its own. */
|
|
1033
|
+
renderFailed: string;
|
|
1034
|
+
/** The toolbar's button, and the heading of the panel it opens. */
|
|
1035
|
+
layers: string;
|
|
1036
|
+
layersHint: string;
|
|
1037
|
+
allLayers: string;
|
|
1038
|
+
noLayers: string;
|
|
1039
|
+
measure: string;
|
|
1040
|
+
measureHint: string;
|
|
1041
|
+
/** The mode pill beside Measure: `H` and `V` are the commands themselves. */
|
|
1042
|
+
auto: string;
|
|
1043
|
+
autoHint: string;
|
|
1044
|
+
horizontalHint: string;
|
|
1045
|
+
verticalHint: string;
|
|
1046
|
+
point: string;
|
|
1047
|
+
pointHint: string;
|
|
1048
|
+
/** The fixed-distance box in H or V mode: its placeholders, its tooltip and its ×. */
|
|
1049
|
+
fixX: string;
|
|
1050
|
+
fixY: string;
|
|
1051
|
+
fixHint: string;
|
|
1052
|
+
clearFixed: string;
|
|
1053
|
+
/** The measured value's tooltip. `auto` when Auto chose the axis. */
|
|
1054
|
+
horizontalDistance: (auto: boolean) => string;
|
|
1055
|
+
verticalDistance: (auto: boolean) => string;
|
|
1056
|
+
straightDistance: string;
|
|
1057
|
+
fit: string;
|
|
1058
|
+
fitHint: string;
|
|
1059
|
+
/** The hint pill; `preview.scrollToZoom` sits between these two. */
|
|
1060
|
+
dragToPan: string;
|
|
1061
|
+
fitToReset: string;
|
|
1062
|
+
/** `commands` is "DI / DIM", each drawn in monospace. */
|
|
1063
|
+
typeToMeasure: (commands: string) => string;
|
|
1064
|
+
commandPlaceholder: string;
|
|
1065
|
+
/** What `?` answers. */
|
|
1066
|
+
commandHelp: string;
|
|
1067
|
+
/** The command bar's line after a measurement. `axis` is `ΔX` or `ΔY`. */
|
|
1068
|
+
echoDistance: (distance: string, deltaX: string, deltaY: string) => string;
|
|
1069
|
+
echoLinear: (distance: string, axis: string) => string;
|
|
1070
|
+
/** One axis held to a typed value, the other measured. */
|
|
1071
|
+
echoLocked: (axis: string, distance: string, lockedAxis: string, locked: string) => string;
|
|
1072
|
+
/** …and after a typed command. */
|
|
1073
|
+
axisLocked: (axis: string, distance: string) => string;
|
|
1074
|
+
fixedCleared: string;
|
|
1075
|
+
fixedNeedsAxis: string;
|
|
1076
|
+
echoDist: string;
|
|
1077
|
+
echoDimLinear: string;
|
|
1078
|
+
echoHorizontal: string;
|
|
1079
|
+
echoVertical: string;
|
|
1080
|
+
echoAuto: string;
|
|
1081
|
+
measureOn: string;
|
|
1082
|
+
measureOff: string;
|
|
1083
|
+
pickRemoved: string;
|
|
1084
|
+
zoomExtents: string;
|
|
1085
|
+
layersToggled: string;
|
|
1086
|
+
measurementCleared: string;
|
|
1087
|
+
/** An AutoCAD drawing command, by its name: the viewer cannot draw. */
|
|
1088
|
+
readOnly: (command: string) => string;
|
|
1089
|
+
unknownCommand: (command: string) => string;
|
|
1090
|
+
/** Esc with a command half typed. */
|
|
1091
|
+
cancelled: string;
|
|
1092
|
+
};
|
|
1093
|
+
/** Preview's 3D panel: its toolbar, the mesh tree and the display settings.
|
|
1094
|
+
* The axis letters and `⊥` are notation. */
|
|
1095
|
+
model: {
|
|
1096
|
+
loading: string;
|
|
1097
|
+
/** Under `loading`, for a STEP file. */
|
|
1098
|
+
stepNote: string;
|
|
1099
|
+
notInstalled: string;
|
|
1100
|
+
loadFailed: string;
|
|
1101
|
+
/** A mesh-tree node the file gave no name: the root, and any other. */
|
|
1102
|
+
rootNode: string;
|
|
1103
|
+
node: string;
|
|
1104
|
+
collapse: string;
|
|
1105
|
+
expand: string;
|
|
1106
|
+
/** The toolbar's button, and the same on a row of the mesh tree. */
|
|
1107
|
+
fitToView: string;
|
|
1108
|
+
hide: string;
|
|
1109
|
+
show: string;
|
|
1110
|
+
/** The camera presets: the button's short face, then its tooltip. */
|
|
1111
|
+
isometric: string;
|
|
1112
|
+
isometricView: string;
|
|
1113
|
+
top: string;
|
|
1114
|
+
topView: string;
|
|
1115
|
+
front: string;
|
|
1116
|
+
frontView: string;
|
|
1117
|
+
side: string;
|
|
1118
|
+
sideView: string;
|
|
1119
|
+
/** The projection switch: the one in force, and the tooltip for the other. */
|
|
1120
|
+
perspective: string;
|
|
1121
|
+
orthographic: string;
|
|
1122
|
+
toPerspective: string;
|
|
1123
|
+
toOrthographic: string;
|
|
1124
|
+
snapshot: string;
|
|
1125
|
+
measureHint: string;
|
|
1126
|
+
point: string;
|
|
1127
|
+
pointHint: string;
|
|
1128
|
+
perpendicularHint: string;
|
|
1129
|
+
/** The measured value's tooltip, in each mode. */
|
|
1130
|
+
straightDistance: string;
|
|
1131
|
+
perpendicularDistance: string;
|
|
1132
|
+
meshesHint: string;
|
|
1133
|
+
displayHint: string;
|
|
1134
|
+
downloadOriginal: string;
|
|
1135
|
+
/** The Meshes panel. */
|
|
1136
|
+
meshes: string;
|
|
1137
|
+
readingModel: string;
|
|
1138
|
+
noStructure: string;
|
|
1139
|
+
allVisible: string;
|
|
1140
|
+
hiddenCount: (count: number) => string;
|
|
1141
|
+
/** The hint pill; `preview.scrollToZoom` ends it. */
|
|
1142
|
+
dragToRotate: string;
|
|
1143
|
+
rightDragToPan: string;
|
|
1144
|
+
/** The Model Display panel. */
|
|
1145
|
+
display: string;
|
|
1146
|
+
backgroundColor: string;
|
|
1147
|
+
showEdges: string;
|
|
1148
|
+
edgeColor: string;
|
|
1149
|
+
edgeThreshold: string;
|
|
1150
|
+
sectionView: string;
|
|
1151
|
+
angle: string;
|
|
1152
|
+
axis: string;
|
|
1153
|
+
flipHint: string;
|
|
1154
|
+
/** The flip button's two faces, arrows included. */
|
|
1155
|
+
flip: string;
|
|
1156
|
+
flipped: string;
|
|
1157
|
+
position: string;
|
|
1158
|
+
resetDisplay: string;
|
|
1159
|
+
};
|
|
1160
|
+
/** `ImageAnnotator` — Preview's image panel in Annotate mode, and wherever a
|
|
1161
|
+
* host embeds it. A colour swatch is named by its hex, which is notation. */
|
|
1162
|
+
annotator: {
|
|
1163
|
+
/** The tools, as their buttons' tooltips. */
|
|
1164
|
+
toolSelect: string;
|
|
1165
|
+
toolDraw: string;
|
|
1166
|
+
toolRect: string;
|
|
1167
|
+
toolEllipse: string;
|
|
1168
|
+
toolArrow: string;
|
|
1169
|
+
toolMosaic: string;
|
|
1170
|
+
toolText: string;
|
|
1171
|
+
toolCrop: string;
|
|
1172
|
+
/** The sliders a shape or a label brings up. */
|
|
1173
|
+
weight: string;
|
|
1174
|
+
radius: string;
|
|
1175
|
+
size: string;
|
|
1176
|
+
padding: string;
|
|
1177
|
+
/** A text label's fonts. */
|
|
1178
|
+
fontSystem: string;
|
|
1179
|
+
fontSerif: string;
|
|
1180
|
+
fontMono: string;
|
|
1181
|
+
fontCursive: string;
|
|
1182
|
+
/** …and its styles: the tooltip, then the letter on the button. */
|
|
1183
|
+
bold: string;
|
|
1184
|
+
boldLetter: string;
|
|
1185
|
+
italic: string;
|
|
1186
|
+
italicLetter: string;
|
|
1187
|
+
underline: string;
|
|
1188
|
+
underlineLetter: string;
|
|
1189
|
+
/** A text label's box: its border and its fill, each added or removed. */
|
|
1190
|
+
border: string;
|
|
1191
|
+
borderColor: string;
|
|
1192
|
+
addBorder: string;
|
|
1193
|
+
removeBorder: string;
|
|
1194
|
+
fill: string;
|
|
1195
|
+
fillColor: string;
|
|
1196
|
+
addFill: string;
|
|
1197
|
+
removeFill: string;
|
|
1198
|
+
/** The button that adds either. */
|
|
1199
|
+
add: string;
|
|
1200
|
+
zoomOut: string;
|
|
1201
|
+
zoomIn: string;
|
|
1202
|
+
fit: string;
|
|
1203
|
+
fitHint: string;
|
|
1204
|
+
undo: string;
|
|
1205
|
+
applyCrop: string;
|
|
1206
|
+
cancel: string;
|
|
1207
|
+
/** Standalone mode's button, which hands the picture back to the host. */
|
|
1208
|
+
apply: string;
|
|
1209
|
+
/** The footer's line: with the select tool and something selected, with it
|
|
1210
|
+
* and nothing selected, then for the text, crop and pen tools and a shape. */
|
|
1211
|
+
hintSelected: string;
|
|
1212
|
+
hintSelect: string;
|
|
1213
|
+
hintText: string;
|
|
1214
|
+
hintCrop: string;
|
|
1215
|
+
hintDraw: string;
|
|
1216
|
+
hintShape: string;
|
|
1217
|
+
/** In a text label while it is being typed. */
|
|
1218
|
+
textPlaceholder: string;
|
|
1219
|
+
/** Toasts. */
|
|
1220
|
+
loadFailed: string;
|
|
1221
|
+
exportFailed: string;
|
|
1222
|
+
clipboardUnsupported: string;
|
|
1223
|
+
copyFailed: string;
|
|
1224
|
+
copied: string;
|
|
1225
|
+
copyRefused: string;
|
|
1226
|
+
};
|
|
1227
|
+
/** `openAttachment`: what it says when a stored file cannot be shown in a
|
|
1228
|
+
* window, and what the window says while the caller fetches the file (its
|
|
1229
|
+
* `loadingMessage` wins). */
|
|
1230
|
+
attachment: {
|
|
1231
|
+
/** The file's name in the window, when the attachment has none. */
|
|
1232
|
+
fallbackName: string;
|
|
1233
|
+
noLink: string;
|
|
1234
|
+
spreadsheetFailed: string;
|
|
1235
|
+
/** A binary workbook, which is opened as a file on purpose. */
|
|
1236
|
+
workbookUnavailable: string;
|
|
1237
|
+
noViewer: string;
|
|
1238
|
+
loading: string;
|
|
1239
|
+
/** When the caller's `fetchBlob` rejects without a message of its own. */
|
|
1240
|
+
loadFailed: string;
|
|
1241
|
+
};
|
|
1242
|
+
/** A bundled app's own About dialog (`BUILTIN_APP_INFO`). The app's name is
|
|
1243
|
+
* its window-registry label, and is not here. */
|
|
1244
|
+
aboutApp: {
|
|
1245
|
+
/** The window menu's item and the dialog's title: "About Preview". */
|
|
1246
|
+
title: (name: string) => string;
|
|
1247
|
+
version: (version: string) => string;
|
|
1248
|
+
/** The package's name is drawn in a heavier weight wherever the sentence puts it. */
|
|
1249
|
+
partOf: (shell: string) => string;
|
|
1250
|
+
shellVersion: (version: string) => string;
|
|
1251
|
+
/** One line for each app, by its id. */
|
|
1252
|
+
spreadsheet: string;
|
|
1253
|
+
notepad: string;
|
|
1254
|
+
documents: string;
|
|
1255
|
+
preview: string;
|
|
1256
|
+
files: string;
|
|
1257
|
+
browser: string;
|
|
1258
|
+
};
|
|
1259
|
+
}
|
|
1260
|
+
declare const DEFAULT_SHELL_STRINGS: ShellStrings;
|
|
1261
|
+
/** A per-section partial: override any subset of a section's strings. */
|
|
1262
|
+
type ShellStringsOverride = {
|
|
1263
|
+
[S in keyof ShellStrings]?: Partial<ShellStrings[S]>;
|
|
1264
|
+
};
|
|
1265
|
+
/**
|
|
1266
|
+
* Mount once, near the top of the app. `value` is a partial — sections and
|
|
1267
|
+
* keys you do not translate keep their English defaults, so a catalog never
|
|
1268
|
+
* breaks by falling behind a release.
|
|
1269
|
+
*
|
|
1270
|
+
* `locale` is a BCP 47 tag (`'de-DE'`, `'ja'`, `'zh-Hant'`) for how numbers and
|
|
1271
|
+
* dates are written; omit it and they are written exactly as without a
|
|
1272
|
+
* provider. A nested provider without a `locale` keeps its parent's — a subtree
|
|
1273
|
+
* that overrides one string should not lose the app's number format. Strings
|
|
1274
|
+
* do not cascade that way: a nested provider's `value` merges onto the English
|
|
1275
|
+
* defaults, as it always has.
|
|
1276
|
+
*/
|
|
1277
|
+
declare function ShellStringsProvider({ value, locale, children }: {
|
|
1278
|
+
value?: ShellStringsOverride;
|
|
1279
|
+
locale?: string;
|
|
1280
|
+
children: ReactNode;
|
|
1281
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1282
|
+
/** The active catalog — English defaults when no provider is mounted. */
|
|
1283
|
+
declare function useShellStrings(): ShellStrings;
|
|
1284
|
+
/**
|
|
1285
|
+
* The provider's `locale`, canonicalised — `undefined` when there is no
|
|
1286
|
+
* provider or it was given none. Hand it to `formatDate(value, { locale })`,
|
|
1287
|
+
* `fmtSliderDate(ms, locale)`, or `Intl` directly, so a host's own cells write
|
|
1288
|
+
* numbers and dates the way the kit's do.
|
|
1289
|
+
*/
|
|
1290
|
+
declare function useShellLocale(): string | undefined;
|
|
1291
|
+
|
|
1292
|
+
export { DEFAULT_SHELL_STRINGS as D, type ShellStringsOverride as S, type ShellStrings as a, ShellStringsProvider as b, useShellStrings as c, useShellLocale as u };
|