@innspel/react-native 0.5.1 → 0.6.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
@@ -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";
@@ -652,4 +709,4 @@ declare const lofte: {
652
709
  readonly avvist: "Vi har svart på denne.";
653
710
  };
654
711
 
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 };
712
+ 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";
@@ -652,4 +709,4 @@ declare const lofte: {
652
709
  readonly avvist: "Vi har svart på denne.";
653
710
  };
654
711
 
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 };
712
+ 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 createScreenshotAdapter(captureRef) {
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, options) {
11
- const uri = await captureRef(ref, { format: options.format, quality: options.quality, result: "tmpfile" });
12
- const { width, height } = await new Promise(
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",
@@ -655,6 +669,8 @@ function Felt({
655
669
  onSend,
656
670
  sender,
657
671
  onSkjermbilde,
672
+ onVelgBilde,
673
+ bildeNotat,
658
674
  harVedlegg,
659
675
  onFjernVedlegg
660
676
  }) {
@@ -845,17 +861,31 @@ function Felt({
845
861
  )
846
862
  ]
847
863
  }
848
- ) : onSkjermbilde ? /* @__PURE__ */ jsx2(
849
- Btn,
850
- {
851
- variant: "secondary",
852
- testID: "legg-ved-skjermbilde",
853
- ikon: "\u{1F4F7}",
854
- label: tekst.leggVedSkjermbilde,
855
- hint: tekst.leggVedHint,
856
- onPress: onSkjermbilde
857
- }
858
- ) : null,
864
+ ) : onSkjermbilde || onVelgBilde ? /* @__PURE__ */ jsxs2(View2, { style: { gap: tema.space.sm }, children: [
865
+ onSkjermbilde ? /* @__PURE__ */ jsx2(
866
+ Btn,
867
+ {
868
+ variant: "secondary",
869
+ testID: "legg-ved-skjermbilde",
870
+ ikon: "\u{1F4F7}",
871
+ label: tekst.leggVedSkjermbilde,
872
+ hint: tekst.leggVedHint,
873
+ onPress: onSkjermbilde
874
+ }
875
+ ) : null,
876
+ onVelgBilde ? /* @__PURE__ */ jsx2(
877
+ Btn,
878
+ {
879
+ variant: "secondary",
880
+ testID: "velg-bilde",
881
+ ikon: "\u{1F5BC}",
882
+ label: tekst.velgBilde,
883
+ hint: tekst.velgBildeHint,
884
+ onPress: onVelgBilde
885
+ }
886
+ ) : null,
887
+ bildeNotat ? /* @__PURE__ */ jsx2(View2, { testID: "bilde-notat", children: /* @__PURE__ */ jsx2(Hint, { children: bildeNotat }) }) : null
888
+ ] }) : null,
859
889
  /* @__PURE__ */ jsxs2(View2, { style: { borderTopWidth: tema.hairline, borderTopColor: tema.color.border, paddingTop: tema.space.sm }, children: [
860
890
  /* @__PURE__ */ jsx2(
861
891
  Pressable2,
@@ -1270,6 +1300,8 @@ function Skjermbilde({
1270
1300
  rotStorrelse,
1271
1301
  previewRef,
1272
1302
  komponerer,
1303
+ kilde = "skjerm",
1304
+ notat,
1273
1305
  onFjern,
1274
1306
  onLeggVed
1275
1307
  }) {
@@ -1362,7 +1394,8 @@ function Skjermbilde({
1362
1394
  };
1363
1395
  const a11y = tekst.skjermbildeA11y(automasker.length, egne.length, allTekst);
1364
1396
  return /* @__PURE__ */ jsxs7(View7, { style: { flex: 1, gap: tema.space.md }, children: [
1365
- /* @__PURE__ */ jsx7(H, { sub: tekst.skjermbildeUnder, children: tekst.skjermbildeTittel }),
1397
+ /* @__PURE__ */ jsx7(H, { sub: kilde === "galleri" ? tekst.skjermbildeUnderGalleri : tekst.skjermbildeUnder, children: tekst.skjermbildeTittel }),
1398
+ notat ? /* @__PURE__ */ jsx7(View7, { testID: "bilde-notat", children: /* @__PURE__ */ jsx7(Hint, { children: notat }) }) : null,
1366
1399
  /* @__PURE__ */ jsxs7(View7, { accessibilityRole: "toolbar", accessibilityLabel: tekst.maskering, style: { flexDirection: "row", gap: tema.space.sm }, children: [
1367
1400
  knapp("felt", "\u25A3", tekst.maskerFelt),
1368
1401
  knapp("pensel", "\u270E", tekst.tegnOver),
@@ -1467,7 +1500,8 @@ function Widget({
1467
1500
  synlig,
1468
1501
  apneOpsjoner,
1469
1502
  onLukk,
1470
- tenantName
1503
+ tenantName,
1504
+ imageStepNote
1471
1505
  }) {
1472
1506
  const tema = useTema();
1473
1507
  const insets = useContext3(SafeAreaInsetsContext) ?? initialWindowMetrics?.insets ?? { top: 0, bottom: 0, left: 0, right: 0 };
@@ -1490,9 +1524,13 @@ function Widget({
1490
1524
  const [automasker, setAutomasker] = useState3([]);
1491
1525
  const [rotStorrelse, setRotStorrelse] = useState3({ width: 1, height: 1 });
1492
1526
  const [komponerer, setKomponerer] = useState3(false);
1527
+ const [kilde, setKilde] = useState3("skjerm");
1493
1528
  const [vedlegg, setVedlegg] = useState3();
1494
1529
  const [innstillinger, setInnstillinger] = useState3({ ...client.settings });
1495
1530
  const skjermbildeMulig = innstillinger.screenshotsEnabled && skjermbilde?.adapter != null;
1531
+ const fangstMulig = skjermbildeMulig && skjermbilde?.adapter?.captureScreen !== false;
1532
+ const galleriMulig = skjermbildeMulig && typeof skjermbilde?.adapter?.pick === "function";
1533
+ const bildeNotat = typeof imageStepNote === "string" ? imageStepNote : imageStepNote?.[spor];
1496
1534
  const nullstill = useCallback2(() => {
1497
1535
  setSteg("valg");
1498
1536
  setSpor("feil");
@@ -1569,11 +1607,28 @@ function Widget({
1569
1607
  setAutomasker([]);
1570
1608
  }
1571
1609
  setBilde(fangst);
1610
+ setKilde("skjerm");
1572
1611
  setSteg("skjermbilde");
1573
1612
  } catch {
1574
1613
  setFeil(tekst.skjermbildeFeilet);
1575
1614
  }
1576
1615
  }, [skjermbilde]);
1616
+ const velgBilde = useCallback2(async () => {
1617
+ const pick = skjermbilde?.adapter?.pick;
1618
+ if (!pick) return;
1619
+ setFeil(void 0);
1620
+ try {
1621
+ const valgt = await pick.call(skjermbilde.adapter);
1622
+ if (!valgt) return;
1623
+ setRotStorrelse({ width: valgt.width, height: valgt.height });
1624
+ setAutomasker([]);
1625
+ setBilde(valgt);
1626
+ setKilde("galleri");
1627
+ setSteg("skjermbilde");
1628
+ } catch {
1629
+ setFeil(tekst.bildeFeilet);
1630
+ }
1631
+ }, [skjermbilde]);
1577
1632
  const leggVedBilde = useCallback2(async () => {
1578
1633
  if (!skjermbilde?.adapter) return;
1579
1634
  setKomponerer(true);
@@ -1737,7 +1792,9 @@ function Widget({
1737
1792
  funn,
1738
1793
  onSend: send,
1739
1794
  sender,
1740
- ...skjermbildeMulig ? { onSkjermbilde: taSkjermbilde } : {},
1795
+ ...fangstMulig ? { onSkjermbilde: taSkjermbilde } : {},
1796
+ ...galleriMulig ? { onVelgBilde: velgBilde } : {},
1797
+ ...bildeNotat ? { bildeNotat } : {},
1741
1798
  harVedlegg: vedlegg !== void 0,
1742
1799
  onFjernVedlegg: fjernBilde
1743
1800
  }
@@ -1750,6 +1807,8 @@ function Widget({
1750
1807
  rotStorrelse,
1751
1808
  previewRef,
1752
1809
  komponerer,
1810
+ kilde,
1811
+ ...bildeNotat ? { notat: bildeNotat } : {},
1753
1812
  onFjern: fjernBilde,
1754
1813
  onLeggVed: leggVedBilde
1755
1814
  }
@@ -1797,7 +1856,8 @@ function InnspelProvider({
1797
1856
  theme,
1798
1857
  colorScheme = "dark",
1799
1858
  tenantName,
1800
- screenshot
1859
+ screenshot,
1860
+ imageStepNote
1801
1861
  }) {
1802
1862
  const [synlig, setSynlig] = useState4(false);
1803
1863
  const [apneOpsjoner, setApneOpsjoner] = useState4();
@@ -1831,6 +1891,7 @@ function InnspelProvider({
1831
1891
  synlig,
1832
1892
  ...apneOpsjoner ? { apneOpsjoner } : {},
1833
1893
  ...tenantName ? { tenantName } : {},
1894
+ ...imageStepNote ? { imageStepNote } : {},
1834
1895
  onLukk: close
1835
1896
  }
1836
1897
  )