@innspel/react-native 0.1.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/LICENSE +21 -0
- package/README.md +115 -0
- package/dist/index.cjs +1397 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +444 -0
- package/dist/index.d.ts +444 -0
- package/dist/index.js +1361 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import { InnspelClient, OpenFeedbackOptions, InnspelStorage, SubmissionStatus, SubmissionType } from '@innspel/core';
|
|
2
|
+
export { CaptureInput, ContextInput, InnspelClient, InnspelOptions, InnspelStorage, MySubmission, OpenFeedbackOptions, SubmissionStatusView } from '@innspel/core';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* tokens.ts — GENERERT fra theme/theme.ts (avtrykk f03570c596e2).
|
|
7
|
+
* Rediger aldri denne filen. Endre temaet i kilden og kjør
|
|
8
|
+
* `node scripts/generate-tokens.ts`, som CI verifiserer med `--check`.
|
|
9
|
+
*
|
|
10
|
+
* Tokenene @innspel/react-native faller tilbake på når verten ikke sender egne.
|
|
11
|
+
* Widgeten lever inne i vertsappen og skal arve dens flate (DD-21); dette er
|
|
12
|
+
* bunnen, ikke fasiten.
|
|
13
|
+
*
|
|
14
|
+
* 72 kontrastpar er målt mot WCAG AA i begge paletter, og generatoren
|
|
15
|
+
* nekter å skrive hvis ett faller under kravet. Farge bærer aldri mening alene
|
|
16
|
+
* — hver status har ikon og tekstetikett (DD-08).
|
|
17
|
+
*
|
|
18
|
+
* fontFamily finnes ikke her med vilje: systemfonten er standard i React
|
|
19
|
+
* Native, og å sette den ville brutt med vertsappen.
|
|
20
|
+
*/
|
|
21
|
+
/** Mørk palett — fallback når verten ikke sender egne tokens. */
|
|
22
|
+
declare const t: {
|
|
23
|
+
readonly color: {
|
|
24
|
+
readonly bg: "#111417";
|
|
25
|
+
readonly surface: "#1A1E22";
|
|
26
|
+
readonly surfaceRaised: "#232830";
|
|
27
|
+
readonly border: "#2E343B";
|
|
28
|
+
readonly borderStrong: "#3D444D";
|
|
29
|
+
readonly borderInteractive: "#7C8894";
|
|
30
|
+
readonly textPrimary: "#F2F4F6";
|
|
31
|
+
readonly textSecondary: "#B4BCC5";
|
|
32
|
+
readonly textMuted: "#8D96A1";
|
|
33
|
+
readonly textDisabled: "#5A626B";
|
|
34
|
+
readonly actionPrimary: "#5AD3E2";
|
|
35
|
+
readonly onActionPrimary: "#04252A";
|
|
36
|
+
readonly actionSecondaryBorder: "#7C8894";
|
|
37
|
+
readonly actionSecondaryText: "#F2F4F6";
|
|
38
|
+
readonly brand: "#5AD3E2";
|
|
39
|
+
readonly onBrand: "#04252A";
|
|
40
|
+
readonly brandFill: "#0E7C8C";
|
|
41
|
+
readonly onBrandFill: "#FFFFFF";
|
|
42
|
+
readonly brandBg: "#0C2A30";
|
|
43
|
+
readonly danger: "#FF7A8C";
|
|
44
|
+
readonly dangerFill: "#C4001F";
|
|
45
|
+
readonly onDangerFill: "#FFFFFF";
|
|
46
|
+
readonly dangerBg: "#2C1116";
|
|
47
|
+
readonly success: "#3ED88A";
|
|
48
|
+
readonly onSuccess: "#062015";
|
|
49
|
+
readonly successBg: "#0E2A1E";
|
|
50
|
+
readonly warning: "#FFC24D";
|
|
51
|
+
readonly onWarning: "#2A1C02";
|
|
52
|
+
readonly warningBg: "#2C2107";
|
|
53
|
+
readonly info: "#5CC0FF";
|
|
54
|
+
readonly onInfo: "#04222F";
|
|
55
|
+
readonly infoBg: "#0E2531";
|
|
56
|
+
readonly neutral: "#A3ACB6";
|
|
57
|
+
readonly onNeutral: "#111417";
|
|
58
|
+
readonly neutralBg: "#242A31";
|
|
59
|
+
readonly scrim: "rgba(0, 0, 0, 0.72)";
|
|
60
|
+
};
|
|
61
|
+
readonly space: {
|
|
62
|
+
readonly xs: 4;
|
|
63
|
+
readonly sm: 8;
|
|
64
|
+
readonly md: 16;
|
|
65
|
+
readonly lg: 24;
|
|
66
|
+
readonly xl: 32;
|
|
67
|
+
readonly xxl: 48;
|
|
68
|
+
};
|
|
69
|
+
readonly radius: {
|
|
70
|
+
readonly sm: 6;
|
|
71
|
+
readonly md: 8;
|
|
72
|
+
readonly lg: 12;
|
|
73
|
+
readonly pill: 999;
|
|
74
|
+
};
|
|
75
|
+
readonly font: {
|
|
76
|
+
readonly h1: 24;
|
|
77
|
+
readonly h2: 21;
|
|
78
|
+
readonly h3: 18;
|
|
79
|
+
readonly body: 16;
|
|
80
|
+
readonly small: 13;
|
|
81
|
+
readonly tiny: 11;
|
|
82
|
+
};
|
|
83
|
+
readonly lineHeight: {
|
|
84
|
+
readonly h1: 30;
|
|
85
|
+
readonly h2: 27;
|
|
86
|
+
readonly h3: 24;
|
|
87
|
+
readonly body: 24;
|
|
88
|
+
readonly small: 18;
|
|
89
|
+
readonly tiny: 16;
|
|
90
|
+
};
|
|
91
|
+
readonly weight: {
|
|
92
|
+
readonly regular: "400";
|
|
93
|
+
readonly medium: "500";
|
|
94
|
+
readonly semibold: "600";
|
|
95
|
+
readonly bold: "700";
|
|
96
|
+
};
|
|
97
|
+
readonly motion: {
|
|
98
|
+
readonly fast: 120;
|
|
99
|
+
readonly base: 200;
|
|
100
|
+
readonly slow: 320;
|
|
101
|
+
};
|
|
102
|
+
readonly touch: 48;
|
|
103
|
+
readonly screenPadding: 24;
|
|
104
|
+
readonly hairline: 1;
|
|
105
|
+
};
|
|
106
|
+
/** Lys palett. */
|
|
107
|
+
declare const light: {
|
|
108
|
+
readonly color: {
|
|
109
|
+
readonly bg: "#F6F7F9";
|
|
110
|
+
readonly surface: "#FFFFFF";
|
|
111
|
+
readonly surfaceRaised: "#EDEFF3";
|
|
112
|
+
readonly border: "#D2D7DE";
|
|
113
|
+
readonly borderStrong: "#B9C0C9";
|
|
114
|
+
readonly borderInteractive: "#6F7883";
|
|
115
|
+
readonly textPrimary: "#14181D";
|
|
116
|
+
readonly textSecondary: "#454D57";
|
|
117
|
+
readonly textMuted: "#5C6470";
|
|
118
|
+
readonly textDisabled: "#9AA2AD";
|
|
119
|
+
readonly actionPrimary: "#0A6673";
|
|
120
|
+
readonly onActionPrimary: "#FFFFFF";
|
|
121
|
+
readonly actionSecondaryBorder: "#6F7883";
|
|
122
|
+
readonly actionSecondaryText: "#14181D";
|
|
123
|
+
readonly brand: "#0A6673";
|
|
124
|
+
readonly onBrand: "#FFFFFF";
|
|
125
|
+
readonly brandFill: "#0A6673";
|
|
126
|
+
readonly onBrandFill: "#FFFFFF";
|
|
127
|
+
readonly brandBg: "#E0F0F2";
|
|
128
|
+
readonly danger: "#B3001B";
|
|
129
|
+
readonly dangerFill: "#B3001B";
|
|
130
|
+
readonly onDangerFill: "#FFFFFF";
|
|
131
|
+
readonly dangerBg: "#FCE8EA";
|
|
132
|
+
readonly success: "#04693C";
|
|
133
|
+
readonly onSuccess: "#FFFFFF";
|
|
134
|
+
readonly successBg: "#E4F4EC";
|
|
135
|
+
readonly warning: "#7A5200";
|
|
136
|
+
readonly onWarning: "#FFFFFF";
|
|
137
|
+
readonly warningBg: "#FBF1DE";
|
|
138
|
+
readonly info: "#00588F";
|
|
139
|
+
readonly onInfo: "#FFFFFF";
|
|
140
|
+
readonly infoBg: "#E4F0F8";
|
|
141
|
+
readonly neutral: "#5C6470";
|
|
142
|
+
readonly onNeutral: "#FFFFFF";
|
|
143
|
+
readonly neutralBg: "#EEF0F3";
|
|
144
|
+
readonly scrim: "rgba(10, 14, 18, 0.45)";
|
|
145
|
+
};
|
|
146
|
+
readonly space: {
|
|
147
|
+
readonly xs: 4;
|
|
148
|
+
readonly sm: 8;
|
|
149
|
+
readonly md: 16;
|
|
150
|
+
readonly lg: 24;
|
|
151
|
+
readonly xl: 32;
|
|
152
|
+
readonly xxl: 48;
|
|
153
|
+
};
|
|
154
|
+
readonly radius: {
|
|
155
|
+
readonly sm: 6;
|
|
156
|
+
readonly md: 8;
|
|
157
|
+
readonly lg: 12;
|
|
158
|
+
readonly pill: 999;
|
|
159
|
+
};
|
|
160
|
+
readonly font: {
|
|
161
|
+
readonly h1: 24;
|
|
162
|
+
readonly h2: 21;
|
|
163
|
+
readonly h3: 18;
|
|
164
|
+
readonly body: 16;
|
|
165
|
+
readonly small: 13;
|
|
166
|
+
readonly tiny: 11;
|
|
167
|
+
};
|
|
168
|
+
readonly lineHeight: {
|
|
169
|
+
readonly h1: 30;
|
|
170
|
+
readonly h2: 27;
|
|
171
|
+
readonly h3: 24;
|
|
172
|
+
readonly body: 24;
|
|
173
|
+
readonly small: 18;
|
|
174
|
+
readonly tiny: 16;
|
|
175
|
+
};
|
|
176
|
+
readonly weight: {
|
|
177
|
+
readonly regular: "400";
|
|
178
|
+
readonly medium: "500";
|
|
179
|
+
readonly semibold: "600";
|
|
180
|
+
readonly bold: "700";
|
|
181
|
+
};
|
|
182
|
+
readonly motion: {
|
|
183
|
+
readonly fast: 120;
|
|
184
|
+
readonly base: 200;
|
|
185
|
+
readonly slow: 320;
|
|
186
|
+
};
|
|
187
|
+
readonly touch: 48;
|
|
188
|
+
readonly screenPadding: 24;
|
|
189
|
+
readonly hairline: 1;
|
|
190
|
+
};
|
|
191
|
+
/** Skjermbilde-maskering. Faste signalfarger, uavhengig av palett (DD-39, DD-40). Vedlegg er M1.3. */
|
|
192
|
+
declare const screenRules: {
|
|
193
|
+
readonly brushFill: "#E5007D";
|
|
194
|
+
readonly autoMaskFill: "#101114";
|
|
195
|
+
readonly autoMaskStroke: "#E5007D";
|
|
196
|
+
readonly previewBackdrop: "#000000";
|
|
197
|
+
};
|
|
198
|
+
/** Formen widgeten tar imot. Verten sender et delvis tema; resten faller tilbake hit. */
|
|
199
|
+
type InnspelTheme = typeof t;
|
|
200
|
+
type InnspelColors = InnspelTheme['color'];
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Widgeten lever INNE i vertsappen (DD-21) og skal arve dens flate. Verten
|
|
204
|
+
* sender et delvis tema; alt den ikke sender faller tilbake på Innspels eget
|
|
205
|
+
* (M0.4), som er generert fra `theme/theme.ts` og målt mot WCAG AA.
|
|
206
|
+
*
|
|
207
|
+
* Ingen hex-verdi, px-verdi eller fontstørrelse skrives i en komponent — alt
|
|
208
|
+
* hentes herfra (CLAUDE.md, «Styling»). `fontFamily` finnes ikke: systemfonten
|
|
209
|
+
* er standard i React Native, og å sette den ville brutt med vertsappen.
|
|
210
|
+
*/
|
|
211
|
+
/**
|
|
212
|
+
* De genererte tokenene er `as const`, så `t.touch` har typen `48` og ikke
|
|
213
|
+
* `number`. Det er riktig for KILDEN — den skal ikke kunne endres ved et uhell
|
|
214
|
+
* — men gjør temaet umulig å overstyre: verten ville måttet sende nøyaktig 48.
|
|
215
|
+
* Denne typen åpner verdiene uten å åpne nøkkelsettet: en vert kan bytte en
|
|
216
|
+
* farge, men ikke finne på en ny.
|
|
217
|
+
*/
|
|
218
|
+
type Tema = Omit<InnspelTheme, 'color' | 'space' | 'radius' | 'font' | 'lineHeight' | 'motion' | 'touch' | 'screenPadding' | 'hairline'> & {
|
|
219
|
+
color: Record<keyof InnspelColors, string>;
|
|
220
|
+
space: Record<keyof InnspelTheme['space'], number>;
|
|
221
|
+
radius: Record<keyof InnspelTheme['radius'], number>;
|
|
222
|
+
font: Record<keyof InnspelTheme['font'], number>;
|
|
223
|
+
lineHeight: Record<keyof InnspelTheme['lineHeight'], number>;
|
|
224
|
+
motion: Record<keyof InnspelTheme['motion'], number>;
|
|
225
|
+
touch: number;
|
|
226
|
+
screenPadding: number;
|
|
227
|
+
hairline: number;
|
|
228
|
+
};
|
|
229
|
+
type PartialTheme = {
|
|
230
|
+
color?: Partial<Tema['color']>;
|
|
231
|
+
} & Partial<Omit<Tema, 'color'>>;
|
|
232
|
+
/**
|
|
233
|
+
* Fletter vertens tokens over Innspels egne.
|
|
234
|
+
*
|
|
235
|
+
* @param vertens Delvis tema fra `<InnspelProvider theme={…}>`.
|
|
236
|
+
* @param palett `dark` er standard: widgeten åpnes oftest over en app i mørk
|
|
237
|
+
* modus, og et lyst ark over en mørk app blender.
|
|
238
|
+
*/
|
|
239
|
+
declare function byggTema(vertens?: PartialTheme, palett?: 'dark' | 'light'): Tema;
|
|
240
|
+
/** Tokenene som gjelder her. Bruk ALDRI en literal farge eller avstand i stedet. */
|
|
241
|
+
declare function useTema(): Tema;
|
|
242
|
+
|
|
243
|
+
interface InnspelKontekst {
|
|
244
|
+
client: InnspelClient;
|
|
245
|
+
/** Åpner widgeten. Samme som `client.openFeedback()`. */
|
|
246
|
+
open: (options?: OpenFeedbackOptions) => Promise<void>;
|
|
247
|
+
close: () => void;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Pakk appen i denne, og widgeten finnes.
|
|
251
|
+
*
|
|
252
|
+
* Provideren gjør tre ting: den registrerer visningen hos kjernen (så
|
|
253
|
+
* `client.openFeedback()` virker hvor som helst i appen, også utenfor React),
|
|
254
|
+
* den holder temaet, og den rendrer selve arket.
|
|
255
|
+
*
|
|
256
|
+
* @example
|
|
257
|
+
* ```tsx
|
|
258
|
+
* const innspel = init({ … });
|
|
259
|
+
*
|
|
260
|
+
* export default function App() {
|
|
261
|
+
* return (
|
|
262
|
+
* <InnspelProvider client={innspel}>
|
|
263
|
+
* <MinApp />
|
|
264
|
+
* </InnspelProvider>
|
|
265
|
+
* );
|
|
266
|
+
* }
|
|
267
|
+
* ```
|
|
268
|
+
*/
|
|
269
|
+
declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, }: {
|
|
270
|
+
client: InnspelClient;
|
|
271
|
+
children?: React.ReactNode;
|
|
272
|
+
/** Vertens egne tokens. Alt som utelates faller tilbake på Innspels tema. */
|
|
273
|
+
theme?: PartialTheme;
|
|
274
|
+
colorScheme?: 'dark' | 'light';
|
|
275
|
+
/** Navnet som står på svaret i «Mine innspill» — leietakerens, ikke Innspels. */
|
|
276
|
+
tenantName?: string;
|
|
277
|
+
}): React.JSX.Element;
|
|
278
|
+
/**
|
|
279
|
+
* Klienten og `open` fra nærmeste {@link InnspelProvider}.
|
|
280
|
+
*
|
|
281
|
+
* Kaster utenfor provideren i stedet for å gi `null`: en knapp som stille ikke
|
|
282
|
+
* gjør noe er verre enn en feil under utvikling (tech-decisions.md, «Feil bruk
|
|
283
|
+
* feiler høyt og tidlig»).
|
|
284
|
+
*/
|
|
285
|
+
declare function useInnspel(): InnspelKontekst;
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Formen på lagringspakkene i React Native-økosystemet: AsyncStorage, MMKV med
|
|
289
|
+
* async-fasade, expo-secure-store. Alle tre har disse tre metodene.
|
|
290
|
+
*/
|
|
291
|
+
interface AsyncStorageLike {
|
|
292
|
+
getItem(key: string): Promise<string | null>;
|
|
293
|
+
setItem(key: string, value: string): Promise<void>;
|
|
294
|
+
removeItem(key: string): Promise<void>;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Lager en {@link InnspelStorage} av vertens egen lagringspakke.
|
|
298
|
+
*
|
|
299
|
+
* Pakken tar ingen avhengighet på AsyncStorage eller MMKV med vilje: verten har
|
|
300
|
+
* som regel én av dem allerede, og to kopier av samme lagring i én app er verre
|
|
301
|
+
* enn litt oppsett. Send inn den du bruker:
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```ts
|
|
305
|
+
* import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
306
|
+
* const storage = createStorage(AsyncStorage);
|
|
307
|
+
* ```
|
|
308
|
+
*
|
|
309
|
+
* Det eneste som lagres er offline-køen (DD-41) — aldri feedback-tokenet, aldri
|
|
310
|
+
* en install- eller enhets-ID (K20). Lagringen trenger derfor ikke være kryptert.
|
|
311
|
+
*/
|
|
312
|
+
declare function createStorage(pakke: AsyncStorageLike): InnspelStorage;
|
|
313
|
+
/**
|
|
314
|
+
* Lagring i minne. Køen overlever da ikke at appen lukkes, så den er til
|
|
315
|
+
* utvikling og test — ikke til produksjon. `InnspelProvider` sier fra i
|
|
316
|
+
* konsollen hvis den brukes uten at det er sagt eksplisitt.
|
|
317
|
+
*/
|
|
318
|
+
declare function createMemoryStorage(): InnspelStorage;
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* DD-22: `complete` heter «Rettet» i feilsporet og «Levert» i ønskesporet —
|
|
322
|
+
* samme maskinstatus, to navn. Klienten velger navnet; serveren gjør det ikke.
|
|
323
|
+
*
|
|
324
|
+
* DD-08 / «Styling» i CLAUDE.md: **farge bærer aldri mening alene.** Hver status
|
|
325
|
+
* har ikon OG tekstetikett. `brand ↔ info` og `brand ↔ danger` er målt til under
|
|
326
|
+
* 1,5 i kontrast mot hverandre av tema-generatoren — to statuser er altså ikke
|
|
327
|
+
* skillbare på farge for alle, og etiketten er det som faktisk bærer meningen.
|
|
328
|
+
*/
|
|
329
|
+
interface StatusVisning {
|
|
330
|
+
ikon: string;
|
|
331
|
+
etikett: string;
|
|
332
|
+
/** Tokennavn i den aktive paletten, ikke en farge. */
|
|
333
|
+
farge: 'info' | 'success' | 'warning' | 'neutral' | 'danger';
|
|
334
|
+
lofte: string;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Oversetter en innsending til det innsenderen skal se.
|
|
338
|
+
*
|
|
339
|
+
* @param status Maskinens status fra kontrakten.
|
|
340
|
+
* @param type Sporet — avgjør «Rettet» mot «Levert» (DD-22).
|
|
341
|
+
* @param deadlineAt Svarfristen, satt kun i `vurderes`.
|
|
342
|
+
*/
|
|
343
|
+
declare function statusVisning(status: SubmissionStatus, type: SubmissionType, deadlineAt?: string): StatusVisning;
|
|
344
|
+
/** Raden som venter på nett (DD-41). Den har ingen saksnummer og intet løfte om svar. */
|
|
345
|
+
declare const venterVisning: StatusVisning;
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Hver streng innsenderen ser, ett sted.
|
|
349
|
+
*
|
|
350
|
+
* Ordlyden er ikke fri: den er tegnet i `design/wireframes/innsending-widget.jsx`
|
|
351
|
+
* og bundet av beslutninger. Løftene under er DD-08 og skal stå ORDRETT likt i
|
|
352
|
+
* SDK-et og i panelet — en innsender som får «Svar innen 3. desember» i appen og
|
|
353
|
+
* noe annet i portalen har fått to løfter.
|
|
354
|
+
*
|
|
355
|
+
* Norsk bokmål. Ingen leietakernavn: strengen som nevner avsenderen tar navnet
|
|
356
|
+
* som parameter, siden pakken skal kunne brukes av hvem som helst.
|
|
357
|
+
*/
|
|
358
|
+
declare const tekst: {
|
|
359
|
+
readonly valgTittel: "Hva gjelder det?";
|
|
360
|
+
readonly valgUnder: "Ett valg. Vi spør aldri om kategori eller alvorlighet.";
|
|
361
|
+
readonly sporFeil: "Noe virker ikke";
|
|
362
|
+
readonly sporFeilUnder: "Feilsporet — kontekst legges ved";
|
|
363
|
+
readonly sporOnske: "Jeg ønsker meg noe";
|
|
364
|
+
readonly sporOnskeUnder: "Ønskesporet — aldri spørsmål om reproduksjon";
|
|
365
|
+
readonly kjenteFeilTittelFeil: "Er det dette du ser?";
|
|
366
|
+
readonly kjenteFeilUnderFeil: "«Ja» registrerer deg på saken. «Ligner» sender ditt eget med lenke.";
|
|
367
|
+
readonly kjenteFeilTittelOnske: "Har noen ønsket dette?";
|
|
368
|
+
readonly kjenteFeilUnderOnske: "Ett trykk legger deg til på ønsket — ingen ny sak.";
|
|
369
|
+
readonly svarJa: "Ja, jeg også";
|
|
370
|
+
readonly svarLigner: "Ligner, men ikke helt";
|
|
371
|
+
readonly svarNei: "Nei, det er noe annet";
|
|
372
|
+
readonly omvei: "Omvei:";
|
|
373
|
+
readonly rettesI: (versjon: string) => string;
|
|
374
|
+
readonly rettetI: (versjon: string) => string;
|
|
375
|
+
readonly feltLabelFeil: "Din feil";
|
|
376
|
+
readonly feltLabelOnske: "Ditt ønske";
|
|
377
|
+
/** DD-45: to spørsmål i feilsporet. Kilde: Sentry «What's the bug? What did you expect?» */
|
|
378
|
+
readonly placeholderFeil: "Hva skjedde? Hva forventet du?";
|
|
379
|
+
readonly placeholderOnske: "Hva ønsker du deg?";
|
|
380
|
+
readonly send: "Send";
|
|
381
|
+
readonly nesteOnske: "Neste — sjekk om noen har ønsket dette";
|
|
382
|
+
/** DD-44: minimum tegn er det ENESTE kravet. */
|
|
383
|
+
readonly forKort: (min: number) => string;
|
|
384
|
+
readonly tellerFull: " — kort og konkret holder";
|
|
385
|
+
readonly kontekstLinje: "Legges ved: skjerm, appversjon, plattform, OS";
|
|
386
|
+
readonly kontekstVis: " — Vis";
|
|
387
|
+
readonly kontekstFjern: "Fjern";
|
|
388
|
+
readonly kontekstAldri: "Aldri: navn, e-post, telefon, posisjon eller det som står på skjermen.";
|
|
389
|
+
readonly lenketTil: (tittel: string) => string;
|
|
390
|
+
readonly fjernLenke: "Fjern lenken til den kjente feilen";
|
|
391
|
+
readonly monsterSpm: {
|
|
392
|
+
readonly email: "Dette ser ut som en e-postadresse. Vil du fjerne den?";
|
|
393
|
+
readonly phone: "Dette ser ut som et telefonnummer. Vil du fjerne det?";
|
|
394
|
+
readonly card: "Dette ser ut som et kortnummer. Vil du fjerne det?";
|
|
395
|
+
readonly ip: "Dette ser ut som en IP-adresse. Vil du fjerne den?";
|
|
396
|
+
readonly token: "Dette ser ut som en tilgangsnøkkel. Vil du fjerne den?";
|
|
397
|
+
};
|
|
398
|
+
readonly monsterFjern: "Fjern";
|
|
399
|
+
readonly monsterBehold: "Behold";
|
|
400
|
+
readonly monsterForklaring: "Teksten endres bare hvis du trykker Fjern. Vi fjerner aldri noe stille.";
|
|
401
|
+
readonly kvitteringSendt: "Sendt";
|
|
402
|
+
readonly kvitteringRegistrert: "Registrert";
|
|
403
|
+
readonly kvitteringFeil: "Du får beskjed når den er rettet, eller hvis vi trenger mer.";
|
|
404
|
+
readonly kvitteringOnske: "Vurderes innen 90 dager. Du får et personlig svar — også hvis det er nei.";
|
|
405
|
+
readonly kvitteringJaOgsa: "Du får beskjed når den er rettet.";
|
|
406
|
+
readonly saksnummer: (nr: string) => string;
|
|
407
|
+
readonly tilbakeTilAppen: "Tilbake til appen";
|
|
408
|
+
readonly offlineTittel: "Ingen nett";
|
|
409
|
+
readonly offlineBanner: "Ingen nett. Lagres og sendes automatisk — du ser det under «Mine innspill» til det er sendt.";
|
|
410
|
+
readonly offlineLagre: "Lagre — sendes automatisk";
|
|
411
|
+
readonly sendefeilBanner: (arsak: string) => string;
|
|
412
|
+
readonly provIgjen: "Prøv igjen";
|
|
413
|
+
readonly mineTittel: "Mine innspill";
|
|
414
|
+
readonly mineUnder: "Status og hva du kan vente deg — samme løfte som i kvitteringen.";
|
|
415
|
+
readonly mineTom: "Du har ikke sendt noe ennå.";
|
|
416
|
+
readonly mineIkkeSendt: "Ikke sendt ennå";
|
|
417
|
+
readonly mineSak: (nr: string) => string;
|
|
418
|
+
readonly svarFra: (leietaker: string) => string;
|
|
419
|
+
readonly svarFraGenerisk: "Svar";
|
|
420
|
+
readonly sendNytt: "Send nytt innspill";
|
|
421
|
+
readonly tilbake: "Tilbake";
|
|
422
|
+
readonly lukk: "Lukk";
|
|
423
|
+
readonly venterPaaNett: "Venter på nett — sendes automatisk";
|
|
424
|
+
};
|
|
425
|
+
/**
|
|
426
|
+
* Løftet per status (DD-08). Samme streng i SDK og panel. Det eneste tidsløftet
|
|
427
|
+
* er svarfristen som DATO (DD-28) — aldri «innen X dager», som ville betydd noe
|
|
428
|
+
* nytt hver gang innsenderen leser det.
|
|
429
|
+
*/
|
|
430
|
+
declare const lofte: {
|
|
431
|
+
readonly venterNett: "Sendes automatisk når du er på nett — kvitteringen kommer da.";
|
|
432
|
+
readonly vurderes: (frist: string) => string;
|
|
433
|
+
readonly vurderesUtenFrist: "Du får svar — også hvis det er nei.";
|
|
434
|
+
readonly bygges: "Du får beskjed når den er rettet.";
|
|
435
|
+
readonly planlagt: "Du får beskjed når den er rettet.";
|
|
436
|
+
readonly rettet: "Ferdig. Ser du feilen igjen, send et nytt innspill.";
|
|
437
|
+
readonly levert: "Ferdig. Takk for ønsket.";
|
|
438
|
+
readonly ny: "Vi har fått den. Du hører fra oss.";
|
|
439
|
+
readonly kjentFeil: "Kjent feil. Du får beskjed når den er rettet.";
|
|
440
|
+
readonly duplikat: "Slått sammen med et innspill som ligner.";
|
|
441
|
+
readonly avvist: "Vi har svart på denne.";
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
export { type AsyncStorageLike, type InnspelColors, InnspelProvider, type InnspelTheme, type PartialTheme, type StatusVisning, type Tema, byggTema, createMemoryStorage, createStorage, t as darkTokens, light, lofte, screenRules, statusVisning, tekst, useInnspel, useTema, venterVisning };
|