@innspel/react-native 0.1.0 → 0.2.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/dist/index.d.cts CHANGED
@@ -1,9 +1,61 @@
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';
1
+ import { MaskRect, InnspelClient, OpenFeedbackOptions, InnspelStorage, SubmissionStatus, SubmissionType } from '@innspel/core';
2
+ export { AttachmentInput, AttachmentOutcome, CaptureInput, ContextInput, InnspelClient, InnspelOptions, InnspelStorage, MySubmission, OpenFeedbackOptions, SubmissionStatusView } from '@innspel/core';
3
+ import React, { RefObject, ComponentRef } from 'react';
4
+ import { View, StyleProp, ViewStyle } from 'react-native';
4
5
 
6
+ /** Host-elementet bak en `View` — det som kan måles og fanges. RN 0.87: `View` er en funksjonskomponent, så typen hentes herfra. */
7
+ type ViewRef = ComponentRef<typeof View>;
5
8
  /**
6
- * tokens.ts — GENERERT fra theme/theme.ts (avtrykk f03570c596e2).
9
+ * Fangst av skjermbilde er det ene stedet widgeten trenger noe React Native
10
+ * ikke har innebygd. Pakken tar INGEN avhengighet på det (K19, samme mønster som
11
+ * `createStorage`): verten sender inn `captureRef` fra `react-native-view-shot`,
12
+ * og uten adapter finnes ikke skjermbilde-steget (DD-26) — ikke som en grå
13
+ * knapp, det finnes ikke.
14
+ *
15
+ * Alt som rører plattformen går gjennom adapteren, også måling og fillesing, så
16
+ * widgeten kan testes med en fake og maskeringen bevises uten native kode.
17
+ */
18
+ interface ScreenshotCapture {
19
+ /** Fil-URI fra fangsten. Forlater aldri enheten før den er maskert og rekomponert. */
20
+ uri: string;
21
+ /** Bitmapens størrelse i piksler. */
22
+ width: number;
23
+ height: number;
24
+ }
25
+ interface CaptureOptions {
26
+ format: 'jpg' | 'png';
27
+ /** 0–1, kun JPEG. */
28
+ quality: number;
29
+ }
30
+ interface ScreenshotAdapter {
31
+ /** Fanger viewen bak referansen til en fil. Kalles ved «Legg ved skjermbilde» (K4), og igjen på forhåndsvisningen for å rekomponere. */
32
+ capture(ref: RefObject<ViewRef | null>, options: CaptureOptions): Promise<ScreenshotCapture>;
33
+ /** Viewens rektangel i vinduskoordinater, i punkter. Null når den ikke er montert. */
34
+ measure(ref: RefObject<ViewRef | null>): Promise<MaskRect | null>;
35
+ /** Leser en fangst som Blob for opplasting. */
36
+ read(uri: string): Promise<Blob>;
37
+ }
38
+ /** Signaturen til `captureRef` i react-native-view-shot — det eneste verten trenger å sende inn. */
39
+ type CaptureRefFn = (ref: RefObject<ViewRef | null> | ViewRef, options: {
40
+ format: 'jpg' | 'png';
41
+ quality: number;
42
+ result: 'tmpfile';
43
+ }) => Promise<string>;
44
+ /**
45
+ * Lager adapteren av vertens `captureRef`. Dimensjonene hentes med `Image.getSize`,
46
+ * målingen med `measureInWindow`, og fila leses med `fetch(uri).blob()` — alt fra
47
+ * React Native selv.
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * import { captureRef } from 'react-native-view-shot';
52
+ * <InnspelProvider client={innspel} screenshot={createScreenshotAdapter(captureRef)}>
53
+ * ```
54
+ */
55
+ declare function createScreenshotAdapter(captureRef: CaptureRefFn): ScreenshotAdapter;
56
+
57
+ /**
58
+ * tokens.ts — GENERERT fra theme/theme.ts (avtrykk 96a5d02e08c9).
7
59
  * Rediger aldri denne filen. Endre temaet i kilden og kjør
8
60
  * `node scripts/generate-tokens.ts`, som CI verifiserer med `--check`.
9
61
  *
@@ -194,6 +246,8 @@ declare const screenRules: {
194
246
  readonly autoMaskFill: "#101114";
195
247
  readonly autoMaskStroke: "#E5007D";
196
248
  readonly previewBackdrop: "#000000";
249
+ readonly brushWidth: 28;
250
+ readonly textBlurRadius: 24;
197
251
  };
198
252
  /** Formen widgeten tar imot. Verten sender et delvis tema; resten faller tilbake hit. */
199
253
  type InnspelTheme = typeof t;
@@ -249,9 +303,11 @@ interface InnspelKontekst {
249
303
  /**
250
304
  * Pakk appen i denne, og widgeten finnes.
251
305
  *
252
- * Provideren gjør tre ting: den registrerer visningen hos kjernen (så
306
+ * Provideren gjør fire ting: den registrerer visningen hos kjernen (så
253
307
  * `client.openFeedback()` virker hvor som helst i appen, også utenfor React),
254
- * den holder temaet, og den rendrer selve arket.
308
+ * den holder temaet, den rendrer selve arket — og den pakker vertsappen i én
309
+ * `View` med referanse, som er det skjermbildet tas av (K4). Modalen ligger
310
+ * utenfor den viewen og kommer aldri med på bildet.
255
311
  *
256
312
  * @example
257
313
  * ```tsx
@@ -259,14 +315,14 @@ interface InnspelKontekst {
259
315
  *
260
316
  * export default function App() {
261
317
  * return (
262
- * <InnspelProvider client={innspel}>
318
+ * <InnspelProvider client={innspel} screenshot={createScreenshotAdapter(captureRef)}>
263
319
  * <MinApp />
264
320
  * </InnspelProvider>
265
321
  * );
266
322
  * }
267
323
  * ```
268
324
  */
269
- declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, }: {
325
+ declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, screenshot, }: {
270
326
  client: InnspelClient;
271
327
  children?: React.ReactNode;
272
328
  /** Vertens egne tokens. Alt som utelates faller tilbake på Innspels tema. */
@@ -274,6 +330,12 @@ declare function InnspelProvider({ client, children, theme, colorScheme, tenantN
274
330
  colorScheme?: 'dark' | 'light';
275
331
  /** Navnet som står på svaret i «Mine innspill» — leietakerens, ikke Innspels. */
276
332
  tenantName?: string;
333
+ /**
334
+ * Fangst av skjermbilde, typisk `createScreenshotAdapter(captureRef)` fra
335
+ * react-native-view-shot. Uten den finnes ikke skjermbilde-steget (DD-26) —
336
+ * og det finnes uansett ikke når `screenshotsEnabled` er av (K18).
337
+ */
338
+ screenshot?: ScreenshotAdapter;
277
339
  }): React.JSX.Element;
278
340
  /**
279
341
  * Klienten og `open` fra nærmeste {@link InnspelProvider}.
@@ -284,6 +346,24 @@ declare function InnspelProvider({ client, children, theme, colorScheme, tenantN
284
346
  */
285
347
  declare function useInnspel(): InnspelKontekst;
286
348
 
349
+ /**
350
+ * Merk det som aldri skal være med på et skjermbilde (DD-39): navn i en liste,
351
+ * et kontonummer, en samtale. Pakk det inn, og widgeten maskerer det FØR
352
+ * innsenderen ser forhåndsvisningen — som «Maskert av appen», og penselen kan
353
+ * ikke oppheve det. Din kode er sannheten, ikke brukerens presisjon.
354
+ *
355
+ * Uten skjermbilde-adapter gjør komponenten ingenting utover å rendre barna.
356
+ *
357
+ * @example
358
+ * ```tsx
359
+ * <InnspelPrivate><Text>{bruker.navn}</Text></InnspelPrivate>
360
+ * ```
361
+ */
362
+ declare function InnspelPrivate({ children, style }: {
363
+ children?: React.ReactNode;
364
+ style?: StyleProp<ViewStyle>;
365
+ }): React.JSX.Element;
366
+
287
367
  /**
288
368
  * Formen på lagringspakkene i React Native-økosystemet: AsyncStorage, MMKV med
289
369
  * async-fasade, expo-secure-store. Alle tre har disse tre metodene.
@@ -388,6 +468,26 @@ declare const tekst: {
388
468
  readonly kontekstAldri: "Aldri: navn, e-post, telefon, posisjon eller det som står på skjermen.";
389
469
  readonly lenketTil: (tittel: string) => string;
390
470
  readonly fjernLenke: "Fjern lenken til den kjente feilen";
471
+ readonly leggVedSkjermbilde: "Legg ved skjermbilde";
472
+ readonly leggVedHint: "Bildet tas først når du trykker — du ser det før det sendes.";
473
+ readonly skjermbildeTittel: "Se over bildet";
474
+ readonly skjermbildeUnder: "Bildet ble tatt da du trykket. Det du maskerer, ser vi aldri.";
475
+ readonly maskering: "Maskering";
476
+ readonly maskerFelt: "Masker felt";
477
+ readonly tegnOver: "Tegn over";
478
+ readonly maskerAllTekst: "Masker all tekst";
479
+ readonly maskertAvAppen: "Maskert av appen";
480
+ readonly maskertAvAppenHint: "Registrert privat view. Penselen kan ikke oppheve den.";
481
+ readonly dittStrok: "▲ ditt strøk — maskert (kan angres med ett trykk)";
482
+ readonly allTekstHint: "Hele bildet er gjort uskarpt så tekst ikke kan leses. Layouten er synlig.";
483
+ readonly fjernBildet: "Fjern bildet";
484
+ readonly leggVedOgFortsett: "Legg ved og fortsett";
485
+ readonly leggVedHintDD42: "Teksten sendes først; bildet lastes opp for seg.";
486
+ readonly skjermbildeLagtVed: "Skjermbilde lagt ved — maskert";
487
+ readonly fjernSkjermbilde: "Fjern skjermbildet";
488
+ readonly sendHintMedBilde: "Teksten sendes først; bildet lastes opp for seg.";
489
+ readonly skjermbildeFeilet: "kunne ikke ta skjermbilde. Du kan sende uten.";
490
+ readonly skjermbildeA11y: (auto: number, egne: number, uskarpt: boolean) => string;
391
491
  readonly monsterSpm: {
392
492
  readonly email: "Dette ser ut som en e-postadresse. Vil du fjerne den?";
393
493
  readonly phone: "Dette ser ut som et telefonnummer. Vil du fjerne det?";
@@ -405,9 +505,16 @@ declare const tekst: {
405
505
  readonly kvitteringJaOgsa: "Du får beskjed når den er rettet.";
406
506
  readonly saksnummer: (nr: string) => string;
407
507
  readonly tilbakeTilAppen: "Tilbake til appen";
508
+ /** DD-42: saken er sendt, bildet kom ikke med — aldri en blokkert innsending. */
509
+ readonly kvitteringVedleggFeilet: "Sendt — skjermbildet kunne ikke legges ved";
510
+ readonly tekstenErLagret: "Teksten din er lagret.";
511
+ readonly vedleggFeiletBanner: "Bildet ble ikke lastet opp. Saken er sendt uten det — vil du, kan du sende et nytt innspill med bilde.";
512
+ readonly saksnummerUtenVedlegg: (nr: string) => string;
408
513
  readonly offlineTittel: "Ingen nett";
409
514
  readonly offlineBanner: "Ingen nett. Lagres og sendes automatisk — du ser det under «Mine innspill» til det er sendt.";
410
515
  readonly offlineLagre: "Lagre — sendes automatisk";
516
+ /** DD-41: et skjermbilde køes aldri. */
517
+ readonly offlineUtenBilde: "Skjermbilde kan ikke legges ved uten nett. Teksten sendes; bildet ble ikke lagret.";
411
518
  readonly sendefeilBanner: (arsak: string) => string;
412
519
  readonly provIgjen: "Prøv igjen";
413
520
  readonly mineTittel: "Mine innspill";
@@ -441,4 +548,4 @@ declare const lofte: {
441
548
  readonly avvist: "Vi har svart på denne.";
442
549
  };
443
550
 
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 };
551
+ export { type AsyncStorageLike, type CaptureOptions, type CaptureRefFn, type InnspelColors, InnspelPrivate, InnspelProvider, type InnspelTheme, type PartialTheme, type ScreenshotAdapter, type ScreenshotCapture, type StatusVisning, type Tema, byggTema, createMemoryStorage, createScreenshotAdapter, createStorage, t as darkTokens, light, lofte, screenRules, statusVisning, tekst, useInnspel, useTema, venterVisning };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,61 @@
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';
1
+ import { MaskRect, InnspelClient, OpenFeedbackOptions, InnspelStorage, SubmissionStatus, SubmissionType } from '@innspel/core';
2
+ export { AttachmentInput, AttachmentOutcome, CaptureInput, ContextInput, InnspelClient, InnspelOptions, InnspelStorage, MySubmission, OpenFeedbackOptions, SubmissionStatusView } from '@innspel/core';
3
+ import React, { RefObject, ComponentRef } from 'react';
4
+ import { View, StyleProp, ViewStyle } from 'react-native';
4
5
 
6
+ /** Host-elementet bak en `View` — det som kan måles og fanges. RN 0.87: `View` er en funksjonskomponent, så typen hentes herfra. */
7
+ type ViewRef = ComponentRef<typeof View>;
5
8
  /**
6
- * tokens.ts — GENERERT fra theme/theme.ts (avtrykk f03570c596e2).
9
+ * Fangst av skjermbilde er det ene stedet widgeten trenger noe React Native
10
+ * ikke har innebygd. Pakken tar INGEN avhengighet på det (K19, samme mønster som
11
+ * `createStorage`): verten sender inn `captureRef` fra `react-native-view-shot`,
12
+ * og uten adapter finnes ikke skjermbilde-steget (DD-26) — ikke som en grå
13
+ * knapp, det finnes ikke.
14
+ *
15
+ * Alt som rører plattformen går gjennom adapteren, også måling og fillesing, så
16
+ * widgeten kan testes med en fake og maskeringen bevises uten native kode.
17
+ */
18
+ interface ScreenshotCapture {
19
+ /** Fil-URI fra fangsten. Forlater aldri enheten før den er maskert og rekomponert. */
20
+ uri: string;
21
+ /** Bitmapens størrelse i piksler. */
22
+ width: number;
23
+ height: number;
24
+ }
25
+ interface CaptureOptions {
26
+ format: 'jpg' | 'png';
27
+ /** 0–1, kun JPEG. */
28
+ quality: number;
29
+ }
30
+ interface ScreenshotAdapter {
31
+ /** Fanger viewen bak referansen til en fil. Kalles ved «Legg ved skjermbilde» (K4), og igjen på forhåndsvisningen for å rekomponere. */
32
+ capture(ref: RefObject<ViewRef | null>, options: CaptureOptions): Promise<ScreenshotCapture>;
33
+ /** Viewens rektangel i vinduskoordinater, i punkter. Null når den ikke er montert. */
34
+ measure(ref: RefObject<ViewRef | null>): Promise<MaskRect | null>;
35
+ /** Leser en fangst som Blob for opplasting. */
36
+ read(uri: string): Promise<Blob>;
37
+ }
38
+ /** Signaturen til `captureRef` i react-native-view-shot — det eneste verten trenger å sende inn. */
39
+ type CaptureRefFn = (ref: RefObject<ViewRef | null> | ViewRef, options: {
40
+ format: 'jpg' | 'png';
41
+ quality: number;
42
+ result: 'tmpfile';
43
+ }) => Promise<string>;
44
+ /**
45
+ * Lager adapteren av vertens `captureRef`. Dimensjonene hentes med `Image.getSize`,
46
+ * målingen med `measureInWindow`, og fila leses med `fetch(uri).blob()` — alt fra
47
+ * React Native selv.
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * import { captureRef } from 'react-native-view-shot';
52
+ * <InnspelProvider client={innspel} screenshot={createScreenshotAdapter(captureRef)}>
53
+ * ```
54
+ */
55
+ declare function createScreenshotAdapter(captureRef: CaptureRefFn): ScreenshotAdapter;
56
+
57
+ /**
58
+ * tokens.ts — GENERERT fra theme/theme.ts (avtrykk 96a5d02e08c9).
7
59
  * Rediger aldri denne filen. Endre temaet i kilden og kjør
8
60
  * `node scripts/generate-tokens.ts`, som CI verifiserer med `--check`.
9
61
  *
@@ -194,6 +246,8 @@ declare const screenRules: {
194
246
  readonly autoMaskFill: "#101114";
195
247
  readonly autoMaskStroke: "#E5007D";
196
248
  readonly previewBackdrop: "#000000";
249
+ readonly brushWidth: 28;
250
+ readonly textBlurRadius: 24;
197
251
  };
198
252
  /** Formen widgeten tar imot. Verten sender et delvis tema; resten faller tilbake hit. */
199
253
  type InnspelTheme = typeof t;
@@ -249,9 +303,11 @@ interface InnspelKontekst {
249
303
  /**
250
304
  * Pakk appen i denne, og widgeten finnes.
251
305
  *
252
- * Provideren gjør tre ting: den registrerer visningen hos kjernen (så
306
+ * Provideren gjør fire ting: den registrerer visningen hos kjernen (så
253
307
  * `client.openFeedback()` virker hvor som helst i appen, også utenfor React),
254
- * den holder temaet, og den rendrer selve arket.
308
+ * den holder temaet, den rendrer selve arket — og den pakker vertsappen i én
309
+ * `View` med referanse, som er det skjermbildet tas av (K4). Modalen ligger
310
+ * utenfor den viewen og kommer aldri med på bildet.
255
311
  *
256
312
  * @example
257
313
  * ```tsx
@@ -259,14 +315,14 @@ interface InnspelKontekst {
259
315
  *
260
316
  * export default function App() {
261
317
  * return (
262
- * <InnspelProvider client={innspel}>
318
+ * <InnspelProvider client={innspel} screenshot={createScreenshotAdapter(captureRef)}>
263
319
  * <MinApp />
264
320
  * </InnspelProvider>
265
321
  * );
266
322
  * }
267
323
  * ```
268
324
  */
269
- declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, }: {
325
+ declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, screenshot, }: {
270
326
  client: InnspelClient;
271
327
  children?: React.ReactNode;
272
328
  /** Vertens egne tokens. Alt som utelates faller tilbake på Innspels tema. */
@@ -274,6 +330,12 @@ declare function InnspelProvider({ client, children, theme, colorScheme, tenantN
274
330
  colorScheme?: 'dark' | 'light';
275
331
  /** Navnet som står på svaret i «Mine innspill» — leietakerens, ikke Innspels. */
276
332
  tenantName?: string;
333
+ /**
334
+ * Fangst av skjermbilde, typisk `createScreenshotAdapter(captureRef)` fra
335
+ * react-native-view-shot. Uten den finnes ikke skjermbilde-steget (DD-26) —
336
+ * og det finnes uansett ikke når `screenshotsEnabled` er av (K18).
337
+ */
338
+ screenshot?: ScreenshotAdapter;
277
339
  }): React.JSX.Element;
278
340
  /**
279
341
  * Klienten og `open` fra nærmeste {@link InnspelProvider}.
@@ -284,6 +346,24 @@ declare function InnspelProvider({ client, children, theme, colorScheme, tenantN
284
346
  */
285
347
  declare function useInnspel(): InnspelKontekst;
286
348
 
349
+ /**
350
+ * Merk det som aldri skal være med på et skjermbilde (DD-39): navn i en liste,
351
+ * et kontonummer, en samtale. Pakk det inn, og widgeten maskerer det FØR
352
+ * innsenderen ser forhåndsvisningen — som «Maskert av appen», og penselen kan
353
+ * ikke oppheve det. Din kode er sannheten, ikke brukerens presisjon.
354
+ *
355
+ * Uten skjermbilde-adapter gjør komponenten ingenting utover å rendre barna.
356
+ *
357
+ * @example
358
+ * ```tsx
359
+ * <InnspelPrivate><Text>{bruker.navn}</Text></InnspelPrivate>
360
+ * ```
361
+ */
362
+ declare function InnspelPrivate({ children, style }: {
363
+ children?: React.ReactNode;
364
+ style?: StyleProp<ViewStyle>;
365
+ }): React.JSX.Element;
366
+
287
367
  /**
288
368
  * Formen på lagringspakkene i React Native-økosystemet: AsyncStorage, MMKV med
289
369
  * async-fasade, expo-secure-store. Alle tre har disse tre metodene.
@@ -388,6 +468,26 @@ declare const tekst: {
388
468
  readonly kontekstAldri: "Aldri: navn, e-post, telefon, posisjon eller det som står på skjermen.";
389
469
  readonly lenketTil: (tittel: string) => string;
390
470
  readonly fjernLenke: "Fjern lenken til den kjente feilen";
471
+ readonly leggVedSkjermbilde: "Legg ved skjermbilde";
472
+ readonly leggVedHint: "Bildet tas først når du trykker — du ser det før det sendes.";
473
+ readonly skjermbildeTittel: "Se over bildet";
474
+ readonly skjermbildeUnder: "Bildet ble tatt da du trykket. Det du maskerer, ser vi aldri.";
475
+ readonly maskering: "Maskering";
476
+ readonly maskerFelt: "Masker felt";
477
+ readonly tegnOver: "Tegn over";
478
+ readonly maskerAllTekst: "Masker all tekst";
479
+ readonly maskertAvAppen: "Maskert av appen";
480
+ readonly maskertAvAppenHint: "Registrert privat view. Penselen kan ikke oppheve den.";
481
+ readonly dittStrok: "▲ ditt strøk — maskert (kan angres med ett trykk)";
482
+ readonly allTekstHint: "Hele bildet er gjort uskarpt så tekst ikke kan leses. Layouten er synlig.";
483
+ readonly fjernBildet: "Fjern bildet";
484
+ readonly leggVedOgFortsett: "Legg ved og fortsett";
485
+ readonly leggVedHintDD42: "Teksten sendes først; bildet lastes opp for seg.";
486
+ readonly skjermbildeLagtVed: "Skjermbilde lagt ved — maskert";
487
+ readonly fjernSkjermbilde: "Fjern skjermbildet";
488
+ readonly sendHintMedBilde: "Teksten sendes først; bildet lastes opp for seg.";
489
+ readonly skjermbildeFeilet: "kunne ikke ta skjermbilde. Du kan sende uten.";
490
+ readonly skjermbildeA11y: (auto: number, egne: number, uskarpt: boolean) => string;
391
491
  readonly monsterSpm: {
392
492
  readonly email: "Dette ser ut som en e-postadresse. Vil du fjerne den?";
393
493
  readonly phone: "Dette ser ut som et telefonnummer. Vil du fjerne det?";
@@ -405,9 +505,16 @@ declare const tekst: {
405
505
  readonly kvitteringJaOgsa: "Du får beskjed når den er rettet.";
406
506
  readonly saksnummer: (nr: string) => string;
407
507
  readonly tilbakeTilAppen: "Tilbake til appen";
508
+ /** DD-42: saken er sendt, bildet kom ikke med — aldri en blokkert innsending. */
509
+ readonly kvitteringVedleggFeilet: "Sendt — skjermbildet kunne ikke legges ved";
510
+ readonly tekstenErLagret: "Teksten din er lagret.";
511
+ readonly vedleggFeiletBanner: "Bildet ble ikke lastet opp. Saken er sendt uten det — vil du, kan du sende et nytt innspill med bilde.";
512
+ readonly saksnummerUtenVedlegg: (nr: string) => string;
408
513
  readonly offlineTittel: "Ingen nett";
409
514
  readonly offlineBanner: "Ingen nett. Lagres og sendes automatisk — du ser det under «Mine innspill» til det er sendt.";
410
515
  readonly offlineLagre: "Lagre — sendes automatisk";
516
+ /** DD-41: et skjermbilde køes aldri. */
517
+ readonly offlineUtenBilde: "Skjermbilde kan ikke legges ved uten nett. Teksten sendes; bildet ble ikke lagret.";
411
518
  readonly sendefeilBanner: (arsak: string) => string;
412
519
  readonly provIgjen: "Prøv igjen";
413
520
  readonly mineTittel: "Mine innspill";
@@ -441,4 +548,4 @@ declare const lofte: {
441
548
  readonly avvist: "Vi har svart på denne.";
442
549
  };
443
550
 
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 };
551
+ export { type AsyncStorageLike, type CaptureOptions, type CaptureRefFn, type InnspelColors, InnspelPrivate, InnspelProvider, type InnspelTheme, type PartialTheme, type ScreenshotAdapter, type ScreenshotCapture, type StatusVisning, type Tema, byggTema, createMemoryStorage, createScreenshotAdapter, createStorage, t as darkTokens, light, lofte, screenRules, statusVisning, tekst, useInnspel, useTema, venterVisning };