@innspel/react-native 0.5.1 → 0.7.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 +42 -1
- package/dist/index.cjs +89 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +61 -3
- package/dist/index.d.ts +61 -3
- package/dist/index.js +89 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -30,6 +30,18 @@ interface CaptureOptions {
|
|
|
30
30
|
interface ScreenshotAdapter {
|
|
31
31
|
/** Fanger viewen bak referansen til en fil. Kalles ved «Legg ved skjermbilde» (K4), og igjen på forhåndsvisningen for å rekomponere. */
|
|
32
32
|
capture(ref: RefObject<ViewRef | null>, options: CaptureOptions): Promise<ScreenshotCapture>;
|
|
33
|
+
/**
|
|
34
|
+
* Velger et bilde fra enhetens bildebibliotek — «Velg bilde». `null` når innsenderen
|
|
35
|
+
* avbryter. Uten metoden finnes ikke valget. Bildet går gjennom samme forhåndsvisning
|
|
36
|
+
* og maskering, og det som lastes opp er komposittet fra `capture`, aldri fila.
|
|
37
|
+
*/
|
|
38
|
+
pick?(): Promise<ScreenshotCapture | null>;
|
|
39
|
+
/**
|
|
40
|
+
* `false` fjerner «Legg ved skjermbilde» og lar bare «Velg bilde» stå — når skjermen
|
|
41
|
+
* widgeten åpnes fra sjelden er der feilen er. `capture` trengs likevel til å
|
|
42
|
+
* rekomponere forhåndsvisningen. Standard er `true`.
|
|
43
|
+
*/
|
|
44
|
+
captureScreen?: boolean;
|
|
33
45
|
/** Viewens rektangel i vinduskoordinater, i punkter. Null når den ikke er montert. */
|
|
34
46
|
measure(ref: RefObject<ViewRef | null>): Promise<MaskRect | null>;
|
|
35
47
|
/** Leser en fangst som Blob for opplasting. */
|
|
@@ -41,6 +53,38 @@ type CaptureRefFn = (ref: RefObject<ViewRef | null> | ViewRef, options: {
|
|
|
41
53
|
quality: number;
|
|
42
54
|
result: 'tmpfile';
|
|
43
55
|
}) => Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Vertens bildevelger. Resultatet trenger bare `uri`; mangler størrelsen, måles den.
|
|
58
|
+
* Returner `null` når innsenderen avbryter.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* import * as ImagePicker from 'expo-image-picker';
|
|
63
|
+
* const pickImage: PickImageFn = async () => {
|
|
64
|
+
* const r = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ['images'], exif: false });
|
|
65
|
+
* return r.canceled ? null : { uri: r.assets[0]!.uri, width: r.assets[0]!.width, height: r.assets[0]!.height };
|
|
66
|
+
* };
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
type PickImageFn = () => Promise<{
|
|
70
|
+
uri: string;
|
|
71
|
+
width?: number;
|
|
72
|
+
height?: number;
|
|
73
|
+
} | null>;
|
|
74
|
+
/**
|
|
75
|
+
* Leietakerens setning ved bildesteget: én for begge spor, eller én per spor.
|
|
76
|
+
* Et spor uten setning viser ingen.
|
|
77
|
+
*/
|
|
78
|
+
type ImageStepNote = string | {
|
|
79
|
+
feil?: string;
|
|
80
|
+
onske?: string;
|
|
81
|
+
};
|
|
82
|
+
interface ScreenshotAdapterOptions {
|
|
83
|
+
/** Gir «Velg bilde». Pakken tar ingen avhengighet på en velger (K19). */
|
|
84
|
+
pickImage?: PickImageFn;
|
|
85
|
+
/** `false` fjerner «Legg ved skjermbilde». Standard er `true`. */
|
|
86
|
+
captureScreen?: boolean;
|
|
87
|
+
}
|
|
44
88
|
/**
|
|
45
89
|
* Lager adapteren av vertens `captureRef`. Dimensjonene hentes med `Image.getSize`,
|
|
46
90
|
* målingen med `measureInWindow`, og fila leses med `fetch(uri).blob()` — alt fra
|
|
@@ -50,9 +94,11 @@ type CaptureRefFn = (ref: RefObject<ViewRef | null> | ViewRef, options: {
|
|
|
50
94
|
* ```tsx
|
|
51
95
|
* import { captureRef } from 'react-native-view-shot';
|
|
52
96
|
* <InnspelProvider client={innspel} screenshot={createScreenshotAdapter(captureRef)}>
|
|
97
|
+
* // Med bildevelger, og uten fangst av skjermen widgeten åpnes fra:
|
|
98
|
+
* <InnspelProvider client={innspel} screenshot={createScreenshotAdapter(captureRef, { pickImage, captureScreen: false })}>
|
|
53
99
|
* ```
|
|
54
100
|
*/
|
|
55
|
-
declare function createScreenshotAdapter(captureRef: CaptureRefFn): ScreenshotAdapter;
|
|
101
|
+
declare function createScreenshotAdapter(captureRef: CaptureRefFn, options?: ScreenshotAdapterOptions): ScreenshotAdapter;
|
|
56
102
|
|
|
57
103
|
/**
|
|
58
104
|
* tokens.ts — GENERERT fra theme/theme.ts (avtrykk 9c17bc0e5f8c).
|
|
@@ -334,7 +380,7 @@ interface InnspelKontekst {
|
|
|
334
380
|
* }
|
|
335
381
|
* ```
|
|
336
382
|
*/
|
|
337
|
-
declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, screenshot, }: {
|
|
383
|
+
declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, screenshot, imageStepNote, }: {
|
|
338
384
|
client: InnspelClient;
|
|
339
385
|
children?: React.ReactNode;
|
|
340
386
|
/** Vertens egne tokens. Alt som utelates faller tilbake på Innspels tema. */
|
|
@@ -348,6 +394,13 @@ declare function InnspelProvider({ client, children, theme, colorScheme, tenantN
|
|
|
348
394
|
* og det finnes uansett ikke når `screenshotsEnabled` er av (K18).
|
|
349
395
|
*/
|
|
350
396
|
screenshot?: ScreenshotAdapter;
|
|
397
|
+
/**
|
|
398
|
+
* Leietakerens egen setning ved bildesteget, f.eks. «Legg ved et skjermbilde av feilen.
|
|
399
|
+
* Ikke send bilder av andre personer.» Står ved knappene og i forhåndsvisningen. Én
|
|
400
|
+
* streng gjelder begge spor; `{ feil, onske }` gir hvert spor sin. Leietakeren kjenner
|
|
401
|
+
* brukerne sine; plattformen eier ikke den setningen.
|
|
402
|
+
*/
|
|
403
|
+
imageStepNote?: ImageStepNote;
|
|
351
404
|
}): React.JSX.Element;
|
|
352
405
|
/**
|
|
353
406
|
* Klienten og `open` fra nærmeste {@link InnspelProvider}.
|
|
@@ -519,6 +572,10 @@ declare const tekst: {
|
|
|
519
572
|
readonly fjernLenke: "Fjern lenken til den kjente feilen";
|
|
520
573
|
readonly leggVedSkjermbilde: "Legg ved skjermbilde";
|
|
521
574
|
readonly leggVedHint: "Bildet tas først når du trykker — du ser det før det sendes.";
|
|
575
|
+
readonly velgBilde: "Velg bilde";
|
|
576
|
+
readonly velgBildeHint: "Fra bildene dine. Du ser det og kan maskere det før det sendes.";
|
|
577
|
+
readonly skjermbildeUnderGalleri: "Bildet er fra galleriet. Appen maskerer ingenting i det for deg — mal over det som ikke skal med.";
|
|
578
|
+
readonly bildeFeilet: "kunne ikke hente bildet. Du kan sende uten.";
|
|
522
579
|
readonly skjermbildeTittel: "Se over bildet";
|
|
523
580
|
readonly skjermbildeUnder: "Bildet ble tatt da du trykket. Det du maskerer, ser vi aldri.";
|
|
524
581
|
readonly maskering: "Maskering";
|
|
@@ -571,6 +628,7 @@ declare const tekst: {
|
|
|
571
628
|
readonly mineTom: "Du har ikke sendt noe ennå.";
|
|
572
629
|
readonly mineIkkeSendt: "Ikke sendt ennå";
|
|
573
630
|
readonly mineSak: (nr: string) => string;
|
|
631
|
+
readonly bildeFjernet: "Bildet er fjernet.";
|
|
574
632
|
readonly svarFra: (leietaker: string) => string;
|
|
575
633
|
readonly svarFraGenerisk: "Svar";
|
|
576
634
|
readonly sendNytt: "Send nytt innspill";
|
|
@@ -652,4 +710,4 @@ declare const lofte: {
|
|
|
652
710
|
readonly avvist: "Vi har svart på denne.";
|
|
653
711
|
};
|
|
654
712
|
|
|
655
|
-
export { type AsyncStorageLike, type CaptureOptions, type CaptureRefFn, type InnspelColors, InnspelPrivate, InnspelProgram, 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 };
|
|
713
|
+
export { type AsyncStorageLike, type CaptureOptions, type CaptureRefFn, type ImageStepNote, type InnspelColors, InnspelPrivate, InnspelProgram, InnspelProvider, type InnspelTheme, type PartialTheme, type PickImageFn, type ScreenshotAdapter, type ScreenshotAdapterOptions, 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
|
@@ -30,6 +30,18 @@ interface CaptureOptions {
|
|
|
30
30
|
interface ScreenshotAdapter {
|
|
31
31
|
/** Fanger viewen bak referansen til en fil. Kalles ved «Legg ved skjermbilde» (K4), og igjen på forhåndsvisningen for å rekomponere. */
|
|
32
32
|
capture(ref: RefObject<ViewRef | null>, options: CaptureOptions): Promise<ScreenshotCapture>;
|
|
33
|
+
/**
|
|
34
|
+
* Velger et bilde fra enhetens bildebibliotek — «Velg bilde». `null` når innsenderen
|
|
35
|
+
* avbryter. Uten metoden finnes ikke valget. Bildet går gjennom samme forhåndsvisning
|
|
36
|
+
* og maskering, og det som lastes opp er komposittet fra `capture`, aldri fila.
|
|
37
|
+
*/
|
|
38
|
+
pick?(): Promise<ScreenshotCapture | null>;
|
|
39
|
+
/**
|
|
40
|
+
* `false` fjerner «Legg ved skjermbilde» og lar bare «Velg bilde» stå — når skjermen
|
|
41
|
+
* widgeten åpnes fra sjelden er der feilen er. `capture` trengs likevel til å
|
|
42
|
+
* rekomponere forhåndsvisningen. Standard er `true`.
|
|
43
|
+
*/
|
|
44
|
+
captureScreen?: boolean;
|
|
33
45
|
/** Viewens rektangel i vinduskoordinater, i punkter. Null når den ikke er montert. */
|
|
34
46
|
measure(ref: RefObject<ViewRef | null>): Promise<MaskRect | null>;
|
|
35
47
|
/** Leser en fangst som Blob for opplasting. */
|
|
@@ -41,6 +53,38 @@ type CaptureRefFn = (ref: RefObject<ViewRef | null> | ViewRef, options: {
|
|
|
41
53
|
quality: number;
|
|
42
54
|
result: 'tmpfile';
|
|
43
55
|
}) => Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Vertens bildevelger. Resultatet trenger bare `uri`; mangler størrelsen, måles den.
|
|
58
|
+
* Returner `null` når innsenderen avbryter.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* import * as ImagePicker from 'expo-image-picker';
|
|
63
|
+
* const pickImage: PickImageFn = async () => {
|
|
64
|
+
* const r = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ['images'], exif: false });
|
|
65
|
+
* return r.canceled ? null : { uri: r.assets[0]!.uri, width: r.assets[0]!.width, height: r.assets[0]!.height };
|
|
66
|
+
* };
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
type PickImageFn = () => Promise<{
|
|
70
|
+
uri: string;
|
|
71
|
+
width?: number;
|
|
72
|
+
height?: number;
|
|
73
|
+
} | null>;
|
|
74
|
+
/**
|
|
75
|
+
* Leietakerens setning ved bildesteget: én for begge spor, eller én per spor.
|
|
76
|
+
* Et spor uten setning viser ingen.
|
|
77
|
+
*/
|
|
78
|
+
type ImageStepNote = string | {
|
|
79
|
+
feil?: string;
|
|
80
|
+
onske?: string;
|
|
81
|
+
};
|
|
82
|
+
interface ScreenshotAdapterOptions {
|
|
83
|
+
/** Gir «Velg bilde». Pakken tar ingen avhengighet på en velger (K19). */
|
|
84
|
+
pickImage?: PickImageFn;
|
|
85
|
+
/** `false` fjerner «Legg ved skjermbilde». Standard er `true`. */
|
|
86
|
+
captureScreen?: boolean;
|
|
87
|
+
}
|
|
44
88
|
/**
|
|
45
89
|
* Lager adapteren av vertens `captureRef`. Dimensjonene hentes med `Image.getSize`,
|
|
46
90
|
* målingen med `measureInWindow`, og fila leses med `fetch(uri).blob()` — alt fra
|
|
@@ -50,9 +94,11 @@ type CaptureRefFn = (ref: RefObject<ViewRef | null> | ViewRef, options: {
|
|
|
50
94
|
* ```tsx
|
|
51
95
|
* import { captureRef } from 'react-native-view-shot';
|
|
52
96
|
* <InnspelProvider client={innspel} screenshot={createScreenshotAdapter(captureRef)}>
|
|
97
|
+
* // Med bildevelger, og uten fangst av skjermen widgeten åpnes fra:
|
|
98
|
+
* <InnspelProvider client={innspel} screenshot={createScreenshotAdapter(captureRef, { pickImage, captureScreen: false })}>
|
|
53
99
|
* ```
|
|
54
100
|
*/
|
|
55
|
-
declare function createScreenshotAdapter(captureRef: CaptureRefFn): ScreenshotAdapter;
|
|
101
|
+
declare function createScreenshotAdapter(captureRef: CaptureRefFn, options?: ScreenshotAdapterOptions): ScreenshotAdapter;
|
|
56
102
|
|
|
57
103
|
/**
|
|
58
104
|
* tokens.ts — GENERERT fra theme/theme.ts (avtrykk 9c17bc0e5f8c).
|
|
@@ -334,7 +380,7 @@ interface InnspelKontekst {
|
|
|
334
380
|
* }
|
|
335
381
|
* ```
|
|
336
382
|
*/
|
|
337
|
-
declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, screenshot, }: {
|
|
383
|
+
declare function InnspelProvider({ client, children, theme, colorScheme, tenantName, screenshot, imageStepNote, }: {
|
|
338
384
|
client: InnspelClient;
|
|
339
385
|
children?: React.ReactNode;
|
|
340
386
|
/** Vertens egne tokens. Alt som utelates faller tilbake på Innspels tema. */
|
|
@@ -348,6 +394,13 @@ declare function InnspelProvider({ client, children, theme, colorScheme, tenantN
|
|
|
348
394
|
* og det finnes uansett ikke når `screenshotsEnabled` er av (K18).
|
|
349
395
|
*/
|
|
350
396
|
screenshot?: ScreenshotAdapter;
|
|
397
|
+
/**
|
|
398
|
+
* Leietakerens egen setning ved bildesteget, f.eks. «Legg ved et skjermbilde av feilen.
|
|
399
|
+
* Ikke send bilder av andre personer.» Står ved knappene og i forhåndsvisningen. Én
|
|
400
|
+
* streng gjelder begge spor; `{ feil, onske }` gir hvert spor sin. Leietakeren kjenner
|
|
401
|
+
* brukerne sine; plattformen eier ikke den setningen.
|
|
402
|
+
*/
|
|
403
|
+
imageStepNote?: ImageStepNote;
|
|
351
404
|
}): React.JSX.Element;
|
|
352
405
|
/**
|
|
353
406
|
* Klienten og `open` fra nærmeste {@link InnspelProvider}.
|
|
@@ -519,6 +572,10 @@ declare const tekst: {
|
|
|
519
572
|
readonly fjernLenke: "Fjern lenken til den kjente feilen";
|
|
520
573
|
readonly leggVedSkjermbilde: "Legg ved skjermbilde";
|
|
521
574
|
readonly leggVedHint: "Bildet tas først når du trykker — du ser det før det sendes.";
|
|
575
|
+
readonly velgBilde: "Velg bilde";
|
|
576
|
+
readonly velgBildeHint: "Fra bildene dine. Du ser det og kan maskere det før det sendes.";
|
|
577
|
+
readonly skjermbildeUnderGalleri: "Bildet er fra galleriet. Appen maskerer ingenting i det for deg — mal over det som ikke skal med.";
|
|
578
|
+
readonly bildeFeilet: "kunne ikke hente bildet. Du kan sende uten.";
|
|
522
579
|
readonly skjermbildeTittel: "Se over bildet";
|
|
523
580
|
readonly skjermbildeUnder: "Bildet ble tatt da du trykket. Det du maskerer, ser vi aldri.";
|
|
524
581
|
readonly maskering: "Maskering";
|
|
@@ -571,6 +628,7 @@ declare const tekst: {
|
|
|
571
628
|
readonly mineTom: "Du har ikke sendt noe ennå.";
|
|
572
629
|
readonly mineIkkeSendt: "Ikke sendt ennå";
|
|
573
630
|
readonly mineSak: (nr: string) => string;
|
|
631
|
+
readonly bildeFjernet: "Bildet er fjernet.";
|
|
574
632
|
readonly svarFra: (leietaker: string) => string;
|
|
575
633
|
readonly svarFraGenerisk: "Svar";
|
|
576
634
|
readonly sendNytt: "Send nytt innspill";
|
|
@@ -652,4 +710,4 @@ declare const lofte: {
|
|
|
652
710
|
readonly avvist: "Vi har svart på denne.";
|
|
653
711
|
};
|
|
654
712
|
|
|
655
|
-
export { type AsyncStorageLike, type CaptureOptions, type CaptureRefFn, type InnspelColors, InnspelPrivate, InnspelProgram, 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 };
|
|
713
|
+
export { type AsyncStorageLike, type CaptureOptions, type CaptureRefFn, type ImageStepNote, type InnspelColors, InnspelPrivate, InnspelProgram, InnspelProvider, type InnspelTheme, type PartialTheme, type PickImageFn, type ScreenshotAdapter, type ScreenshotAdapterOptions, type ScreenshotCapture, type StatusVisning, type Tema, byggTema, createMemoryStorage, createScreenshotAdapter, createStorage, t as darkTokens, light, lofte, screenRules, statusVisning, tekst, useInnspel, useTema, venterVisning };
|
package/dist/index.js
CHANGED
|
@@ -5,15 +5,25 @@ import { View as View9 } from "react-native";
|
|
|
5
5
|
// src/skjermbilde.ts
|
|
6
6
|
import { createContext, useContext } from "react";
|
|
7
7
|
import { Image } from "react-native";
|
|
8
|
-
function
|
|
8
|
+
function storrelse(uri) {
|
|
9
|
+
return new Promise((resolve, reject) => Image.getSize(uri, (w, h) => resolve({ width: w, height: h }), reject));
|
|
10
|
+
}
|
|
11
|
+
function createScreenshotAdapter(captureRef, options = {}) {
|
|
12
|
+
const { pickImage, captureScreen } = options;
|
|
9
13
|
return {
|
|
10
|
-
async capture(ref,
|
|
11
|
-
const uri = await captureRef(ref, { format:
|
|
12
|
-
|
|
13
|
-
(resolve, reject) => Image.getSize(uri, (w, h) => resolve({ width: w, height: h }), reject)
|
|
14
|
-
);
|
|
15
|
-
return { uri, width, height };
|
|
14
|
+
async capture(ref, opts) {
|
|
15
|
+
const uri = await captureRef(ref, { format: opts.format, quality: opts.quality, result: "tmpfile" });
|
|
16
|
+
return { uri, ...await storrelse(uri) };
|
|
16
17
|
},
|
|
18
|
+
...pickImage ? {
|
|
19
|
+
async pick() {
|
|
20
|
+
const valgt = await pickImage();
|
|
21
|
+
if (!valgt) return null;
|
|
22
|
+
const { width, height } = valgt.width && valgt.height ? { width: valgt.width, height: valgt.height } : await storrelse(valgt.uri);
|
|
23
|
+
return { uri: valgt.uri, width, height };
|
|
24
|
+
}
|
|
25
|
+
} : {},
|
|
26
|
+
...captureScreen === false ? { captureScreen: false } : {},
|
|
17
27
|
measure(ref) {
|
|
18
28
|
return new Promise((resolve) => {
|
|
19
29
|
const view = ref.current;
|
|
@@ -500,6 +510,10 @@ var tekst = {
|
|
|
500
510
|
// 2f — skjermbilde (K4, DD-39, DD-40, DD-42)
|
|
501
511
|
leggVedSkjermbilde: "Legg ved skjermbilde",
|
|
502
512
|
leggVedHint: "Bildet tas f\xF8rst n\xE5r du trykker \u2014 du ser det f\xF8r det sendes.",
|
|
513
|
+
velgBilde: "Velg bilde",
|
|
514
|
+
velgBildeHint: "Fra bildene dine. Du ser det og kan maskere det f\xF8r det sendes.",
|
|
515
|
+
skjermbildeUnderGalleri: "Bildet er fra galleriet. Appen maskerer ingenting i det for deg \u2014 mal over det som ikke skal med.",
|
|
516
|
+
bildeFeilet: "kunne ikke hente bildet. Du kan sende uten.",
|
|
503
517
|
skjermbildeTittel: "Se over bildet",
|
|
504
518
|
skjermbildeUnder: "Bildet ble tatt da du trykket. Det du maskerer, ser vi aldri.",
|
|
505
519
|
maskering: "Maskering",
|
|
@@ -556,6 +570,8 @@ var tekst = {
|
|
|
556
570
|
mineTom: "Du har ikke sendt noe enn\xE5.",
|
|
557
571
|
mineIkkeSendt: "Ikke sendt enn\xE5",
|
|
558
572
|
mineSak: (nr) => `Sak ${nr}`,
|
|
573
|
+
// Leietakeren fjernet vedlegget. Bare AT — aldri hvorfor, av hvem eller når.
|
|
574
|
+
bildeFjernet: "Bildet er fjernet.",
|
|
559
575
|
svarFra: (leietaker) => `Svar fra ${leietaker}`,
|
|
560
576
|
svarFraGenerisk: "Svar",
|
|
561
577
|
sendNytt: "Send nytt innspill",
|
|
@@ -655,6 +671,8 @@ function Felt({
|
|
|
655
671
|
onSend,
|
|
656
672
|
sender,
|
|
657
673
|
onSkjermbilde,
|
|
674
|
+
onVelgBilde,
|
|
675
|
+
bildeNotat,
|
|
658
676
|
harVedlegg,
|
|
659
677
|
onFjernVedlegg
|
|
660
678
|
}) {
|
|
@@ -845,17 +863,31 @@ function Felt({
|
|
|
845
863
|
)
|
|
846
864
|
]
|
|
847
865
|
}
|
|
848
|
-
) : onSkjermbilde ? /* @__PURE__ */
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
866
|
+
) : onSkjermbilde || onVelgBilde ? /* @__PURE__ */ jsxs2(View2, { style: { gap: tema.space.sm }, children: [
|
|
867
|
+
onSkjermbilde ? /* @__PURE__ */ jsx2(
|
|
868
|
+
Btn,
|
|
869
|
+
{
|
|
870
|
+
variant: "secondary",
|
|
871
|
+
testID: "legg-ved-skjermbilde",
|
|
872
|
+
ikon: "\u{1F4F7}",
|
|
873
|
+
label: tekst.leggVedSkjermbilde,
|
|
874
|
+
hint: tekst.leggVedHint,
|
|
875
|
+
onPress: onSkjermbilde
|
|
876
|
+
}
|
|
877
|
+
) : null,
|
|
878
|
+
onVelgBilde ? /* @__PURE__ */ jsx2(
|
|
879
|
+
Btn,
|
|
880
|
+
{
|
|
881
|
+
variant: "secondary",
|
|
882
|
+
testID: "velg-bilde",
|
|
883
|
+
ikon: "\u{1F5BC}",
|
|
884
|
+
label: tekst.velgBilde,
|
|
885
|
+
hint: tekst.velgBildeHint,
|
|
886
|
+
onPress: onVelgBilde
|
|
887
|
+
}
|
|
888
|
+
) : null,
|
|
889
|
+
bildeNotat ? /* @__PURE__ */ jsx2(View2, { testID: "bilde-notat", children: /* @__PURE__ */ jsx2(Hint, { children: bildeNotat }) }) : null
|
|
890
|
+
] }) : null,
|
|
859
891
|
/* @__PURE__ */ jsxs2(View2, { style: { borderTopWidth: tema.hairline, borderTopColor: tema.color.border, paddingTop: tema.space.sm }, children: [
|
|
860
892
|
/* @__PURE__ */ jsx2(
|
|
861
893
|
Pressable2,
|
|
@@ -1228,6 +1260,10 @@ function MineInnspill({
|
|
|
1228
1260
|
/* @__PURE__ */ jsx6(StatusPill, { ikon: v.ikon, etikett: v.etikett, farge: v.farge }),
|
|
1229
1261
|
/* @__PURE__ */ jsx6(Hint, { children: v.lofte })
|
|
1230
1262
|
] }),
|
|
1263
|
+
!venter && rad.attachmentRemoved ? /* @__PURE__ */ jsxs6(View6, { testID: `bilde-fjernet-${rad.id}`, style: { flexDirection: "row", gap: tema.space.xs, alignItems: "center" }, children: [
|
|
1264
|
+
/* @__PURE__ */ jsx6(Text6, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.small }, children: "\u{1F5D1}" }),
|
|
1265
|
+
/* @__PURE__ */ jsx6(Hint, { children: tekst.bildeFjernet })
|
|
1266
|
+
] }) : null,
|
|
1231
1267
|
svar ? /* @__PURE__ */ jsxs6(
|
|
1232
1268
|
View6,
|
|
1233
1269
|
{
|
|
@@ -1270,6 +1306,8 @@ function Skjermbilde({
|
|
|
1270
1306
|
rotStorrelse,
|
|
1271
1307
|
previewRef,
|
|
1272
1308
|
komponerer,
|
|
1309
|
+
kilde = "skjerm",
|
|
1310
|
+
notat,
|
|
1273
1311
|
onFjern,
|
|
1274
1312
|
onLeggVed
|
|
1275
1313
|
}) {
|
|
@@ -1362,7 +1400,8 @@ function Skjermbilde({
|
|
|
1362
1400
|
};
|
|
1363
1401
|
const a11y = tekst.skjermbildeA11y(automasker.length, egne.length, allTekst);
|
|
1364
1402
|
return /* @__PURE__ */ jsxs7(View7, { style: { flex: 1, gap: tema.space.md }, children: [
|
|
1365
|
-
/* @__PURE__ */ jsx7(H, { sub: tekst.skjermbildeUnder, children: tekst.skjermbildeTittel }),
|
|
1403
|
+
/* @__PURE__ */ jsx7(H, { sub: kilde === "galleri" ? tekst.skjermbildeUnderGalleri : tekst.skjermbildeUnder, children: tekst.skjermbildeTittel }),
|
|
1404
|
+
notat ? /* @__PURE__ */ jsx7(View7, { testID: "bilde-notat", children: /* @__PURE__ */ jsx7(Hint, { children: notat }) }) : null,
|
|
1366
1405
|
/* @__PURE__ */ jsxs7(View7, { accessibilityRole: "toolbar", accessibilityLabel: tekst.maskering, style: { flexDirection: "row", gap: tema.space.sm }, children: [
|
|
1367
1406
|
knapp("felt", "\u25A3", tekst.maskerFelt),
|
|
1368
1407
|
knapp("pensel", "\u270E", tekst.tegnOver),
|
|
@@ -1467,7 +1506,8 @@ function Widget({
|
|
|
1467
1506
|
synlig,
|
|
1468
1507
|
apneOpsjoner,
|
|
1469
1508
|
onLukk,
|
|
1470
|
-
tenantName
|
|
1509
|
+
tenantName,
|
|
1510
|
+
imageStepNote
|
|
1471
1511
|
}) {
|
|
1472
1512
|
const tema = useTema();
|
|
1473
1513
|
const insets = useContext3(SafeAreaInsetsContext) ?? initialWindowMetrics?.insets ?? { top: 0, bottom: 0, left: 0, right: 0 };
|
|
@@ -1490,9 +1530,13 @@ function Widget({
|
|
|
1490
1530
|
const [automasker, setAutomasker] = useState3([]);
|
|
1491
1531
|
const [rotStorrelse, setRotStorrelse] = useState3({ width: 1, height: 1 });
|
|
1492
1532
|
const [komponerer, setKomponerer] = useState3(false);
|
|
1533
|
+
const [kilde, setKilde] = useState3("skjerm");
|
|
1493
1534
|
const [vedlegg, setVedlegg] = useState3();
|
|
1494
1535
|
const [innstillinger, setInnstillinger] = useState3({ ...client.settings });
|
|
1495
1536
|
const skjermbildeMulig = innstillinger.screenshotsEnabled && skjermbilde?.adapter != null;
|
|
1537
|
+
const fangstMulig = skjermbildeMulig && skjermbilde?.adapter?.captureScreen !== false;
|
|
1538
|
+
const galleriMulig = skjermbildeMulig && typeof skjermbilde?.adapter?.pick === "function";
|
|
1539
|
+
const bildeNotat = typeof imageStepNote === "string" ? imageStepNote : imageStepNote?.[spor];
|
|
1496
1540
|
const nullstill = useCallback2(() => {
|
|
1497
1541
|
setSteg("valg");
|
|
1498
1542
|
setSpor("feil");
|
|
@@ -1569,11 +1613,28 @@ function Widget({
|
|
|
1569
1613
|
setAutomasker([]);
|
|
1570
1614
|
}
|
|
1571
1615
|
setBilde(fangst);
|
|
1616
|
+
setKilde("skjerm");
|
|
1572
1617
|
setSteg("skjermbilde");
|
|
1573
1618
|
} catch {
|
|
1574
1619
|
setFeil(tekst.skjermbildeFeilet);
|
|
1575
1620
|
}
|
|
1576
1621
|
}, [skjermbilde]);
|
|
1622
|
+
const velgBilde = useCallback2(async () => {
|
|
1623
|
+
const pick = skjermbilde?.adapter?.pick;
|
|
1624
|
+
if (!pick) return;
|
|
1625
|
+
setFeil(void 0);
|
|
1626
|
+
try {
|
|
1627
|
+
const valgt = await pick.call(skjermbilde.adapter);
|
|
1628
|
+
if (!valgt) return;
|
|
1629
|
+
setRotStorrelse({ width: valgt.width, height: valgt.height });
|
|
1630
|
+
setAutomasker([]);
|
|
1631
|
+
setBilde(valgt);
|
|
1632
|
+
setKilde("galleri");
|
|
1633
|
+
setSteg("skjermbilde");
|
|
1634
|
+
} catch {
|
|
1635
|
+
setFeil(tekst.bildeFeilet);
|
|
1636
|
+
}
|
|
1637
|
+
}, [skjermbilde]);
|
|
1577
1638
|
const leggVedBilde = useCallback2(async () => {
|
|
1578
1639
|
if (!skjermbilde?.adapter) return;
|
|
1579
1640
|
setKomponerer(true);
|
|
@@ -1737,7 +1798,9 @@ function Widget({
|
|
|
1737
1798
|
funn,
|
|
1738
1799
|
onSend: send,
|
|
1739
1800
|
sender,
|
|
1740
|
-
...
|
|
1801
|
+
...fangstMulig ? { onSkjermbilde: taSkjermbilde } : {},
|
|
1802
|
+
...galleriMulig ? { onVelgBilde: velgBilde } : {},
|
|
1803
|
+
...bildeNotat ? { bildeNotat } : {},
|
|
1741
1804
|
harVedlegg: vedlegg !== void 0,
|
|
1742
1805
|
onFjernVedlegg: fjernBilde
|
|
1743
1806
|
}
|
|
@@ -1750,6 +1813,8 @@ function Widget({
|
|
|
1750
1813
|
rotStorrelse,
|
|
1751
1814
|
previewRef,
|
|
1752
1815
|
komponerer,
|
|
1816
|
+
kilde,
|
|
1817
|
+
...bildeNotat ? { notat: bildeNotat } : {},
|
|
1753
1818
|
onFjern: fjernBilde,
|
|
1754
1819
|
onLeggVed: leggVedBilde
|
|
1755
1820
|
}
|
|
@@ -1797,7 +1862,8 @@ function InnspelProvider({
|
|
|
1797
1862
|
theme,
|
|
1798
1863
|
colorScheme = "dark",
|
|
1799
1864
|
tenantName,
|
|
1800
|
-
screenshot
|
|
1865
|
+
screenshot,
|
|
1866
|
+
imageStepNote
|
|
1801
1867
|
}) {
|
|
1802
1868
|
const [synlig, setSynlig] = useState4(false);
|
|
1803
1869
|
const [apneOpsjoner, setApneOpsjoner] = useState4();
|
|
@@ -1831,6 +1897,7 @@ function InnspelProvider({
|
|
|
1831
1897
|
synlig,
|
|
1832
1898
|
...apneOpsjoner ? { apneOpsjoner } : {},
|
|
1833
1899
|
...tenantName ? { tenantName } : {},
|
|
1900
|
+
...imageStepNote ? { imageStepNote } : {},
|
|
1834
1901
|
onLukk: close
|
|
1835
1902
|
}
|
|
1836
1903
|
)
|