@innspel/react-native 0.9.1 → 0.9.3

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
@@ -630,6 +630,8 @@ declare const tekst: {
630
630
  readonly mineSak: (nr: string) => string;
631
631
  /** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
632
632
  readonly sakHode: (spor: string, nr: string) => string;
633
+ /** F14: svaret kom siden forrige gang denne enheten viste lista. */
634
+ readonly nyttSvar: "Nytt svar";
633
635
  readonly bildeFjernet: "Bildet er fjernet.";
634
636
  readonly svarFra: (leietaker: string) => string;
635
637
  readonly svarFraGenerisk: "Svar";
package/dist/index.d.ts CHANGED
@@ -630,6 +630,8 @@ declare const tekst: {
630
630
  readonly mineSak: (nr: string) => string;
631
631
  /** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
632
632
  readonly sakHode: (spor: string, nr: string) => string;
633
+ /** F14: svaret kom siden forrige gang denne enheten viste lista. */
634
+ readonly nyttSvar: "Nytt svar";
633
635
  readonly bildeFjernet: "Bildet er fjernet.";
634
636
  readonly svarFra: (leietaker: string) => string;
635
637
  readonly svarFraGenerisk: "Svar";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/InnspelProvider.tsx
2
- import { createContext as createContext3, useCallback as useCallback3, useContext as useContext4, useMemo as useMemo3, useRef as useRef3, useState as useState4 } from "react";
2
+ import { createContext as createContext3, useCallback as useCallback3, useContext as useContext4, useMemo as useMemo4, useRef as useRef4, useState as useState5 } from "react";
3
3
  import { View as View9 } from "react-native";
4
4
 
5
5
  // src/skjermbilde.ts
@@ -355,7 +355,7 @@ import {
355
355
  InnspelApiError,
356
356
  InnspelQueueFullError
357
357
  } from "@innspel/core";
358
- import { useCallback as useCallback2, useContext as useContext3, useEffect, useRef as useRef2, useState as useState3 } from "react";
358
+ import { useCallback as useCallback2, useContext as useContext3, useEffect as useEffect2, useRef as useRef3, useState as useState4 } from "react";
359
359
  import { KeyboardAvoidingView, Modal, Pressable as Pressable5, View as View8 } from "react-native";
360
360
  import { initialWindowMetrics, SafeAreaInsetsContext } from "react-native-safe-area-context";
361
361
 
@@ -517,11 +517,11 @@ function Ikon({
517
517
  }
518
518
 
519
519
  // src/widget/Felt.tsx
520
- import { useMemo, useState } from "react";
520
+ import { useMemo as useMemo2, useState } from "react";
521
521
  import { Pressable as Pressable2, ScrollView, Text as Text2, TextInput, View as View2 } from "react-native";
522
522
 
523
523
  // src/widget/primitiver.tsx
524
- import "react";
524
+ import { useMemo, useRef } from "react";
525
525
  import { Pressable, Text, View } from "react-native";
526
526
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
527
527
  function Btn({
@@ -534,10 +534,12 @@ function Btn({
534
534
  accessibilityLabel,
535
535
  grow,
536
536
  testID,
537
- busy
537
+ busy,
538
+ trykkForbiForelder
538
539
  }) {
539
540
  const tema = useTema();
540
541
  const c = tema.color;
542
+ const forbi = useTrykkForbiForelder(onPress, !!disabled, tema.touch / 2);
541
543
  const bakgrunn = variant === "primary" ? c.actionPrimary : variant === "secondary" ? c.surfaceRaised : "transparent";
542
544
  const tekstfarge = variant === "primary" ? c.onActionPrimary : variant === "danger" ? c.danger : c.actionSecondaryText;
543
545
  const kant = variant === "ghost" ? "transparent" : variant === "primary" ? c.actionPrimary : c.actionSecondaryBorder;
@@ -551,6 +553,7 @@ function Btn({
551
553
  accessibilityState: { disabled: !!disabled, busy: !!busy },
552
554
  disabled,
553
555
  onPress,
556
+ ...trykkForbiForelder ? forbi : {},
554
557
  style: {
555
558
  minHeight: tema.touch,
556
559
  borderRadius: tema.radius.md,
@@ -583,6 +586,37 @@ function Btn({
583
586
  hint ? /* @__PURE__ */ jsx2(Hint, { children: hint }) : null
584
587
  ] });
585
588
  }
589
+ function useTrykkForbiForelder(onPress, laast, slingring) {
590
+ const start = useRef(null);
591
+ const fikkResponder = useRef(false);
592
+ const siste = useRef({ onPress, laast });
593
+ siste.current = { onPress, laast };
594
+ return useMemo(
595
+ () => ({
596
+ onPressIn: () => {
597
+ fikkResponder.current = true;
598
+ },
599
+ onTouchStart: (e) => {
600
+ start.current = { x: e.nativeEvent.pageX, y: e.nativeEvent.pageY };
601
+ },
602
+ onTouchEnd: (e) => {
603
+ const s = start.current;
604
+ start.current = null;
605
+ const innenfor = s !== null && Math.abs(e.nativeEvent.pageX - s.x) <= slingring && Math.abs(e.nativeEvent.pageY - s.y) <= slingring;
606
+ setTimeout(() => {
607
+ const tatt = fikkResponder.current;
608
+ fikkResponder.current = false;
609
+ if (!tatt && innenfor && !siste.current.laast) siste.current.onPress?.();
610
+ }, 0);
611
+ },
612
+ onTouchCancel: () => {
613
+ start.current = null;
614
+ fikkResponder.current = false;
615
+ }
616
+ }),
617
+ [slingring]
618
+ );
619
+ }
586
620
  function H({ children, sub }) {
587
621
  const tema = useTema();
588
622
  return /* @__PURE__ */ jsxs(View, { style: { gap: tema.space.xs }, children: [
@@ -830,6 +864,8 @@ var tekst = {
830
864
  mineSak: (nr) => `Sak ${saksnr(nr)}`,
831
865
  /** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
832
866
  sakHode: (spor, nr) => `${stor(spor)} \xB7 sak ${saksnr(nr)}`,
867
+ /** F14: svaret kom siden forrige gang denne enheten viste lista. */
868
+ nyttSvar: "Nytt svar",
833
869
  // Leietakeren fjernet vedlegget. Bare AT — aldri hvorfor, av hvem eller når.
834
870
  bildeFjernet: "Bildet er fjernet.",
835
871
  svarFra: (leietaker) => `Svar fra ${leietaker}`,
@@ -940,7 +976,7 @@ function Felt({
940
976
  const full = brukt >= textMaxLength;
941
977
  const visTeller = brukt >= textMaxLength * 0.8;
942
978
  const uavklart = funn.find((f) => !beholdt.includes(f.match));
943
- const linjer = useMemo(() => {
979
+ const linjer = useMemo2(() => {
944
980
  const etiketter = {
945
981
  screen: "Skjerm",
946
982
  appVersion: "Appversjon",
@@ -1217,7 +1253,8 @@ function Felt({
1217
1253
  disabled: forKort || sender,
1218
1254
  busy: sender,
1219
1255
  hint: forKort ? tekst.forKort(minTextLength) : harVedlegg ? tekst.sendHintMedBilde : void 0,
1220
- onPress: onSend
1256
+ onPress: onSend,
1257
+ trykkForbiForelder: true
1221
1258
  }
1222
1259
  ) })
1223
1260
  ] });
@@ -1479,25 +1516,80 @@ function Kvittering({
1479
1516
  }
1480
1517
 
1481
1518
  // src/widget/MineInnspill.tsx
1482
- import "react";
1519
+ import { useEffect, useState as useState2 } from "react";
1483
1520
  import { ActivityIndicator as ActivityIndicator2, ScrollView as ScrollView3, Text as Text6, View as View6 } from "react-native";
1521
+
1522
+ // src/widget/nyttSvar.ts
1523
+ var N\u00D8KKEL = "innspel:svar-sett";
1524
+ async function merkNyeSvar(rader, storage) {
1525
+ let grense = 0;
1526
+ try {
1527
+ grense = Number.parseInt(await storage.get(N\u00D8KKEL) ?? "", 10) || 0;
1528
+ } catch {
1529
+ grense = 0;
1530
+ }
1531
+ const tid = (r) => r.pending === true ? NaN : Date.parse(r.reply?.at ?? "");
1532
+ const merket = rader.map((rad) => ({ rad, nytt: tid(rad) > grense }));
1533
+ return [...merket.filter((m) => m.nytt), ...merket.filter((m) => !m.nytt)];
1534
+ }
1535
+ async function markerSvarSett(storage, n\u00E5 = Date.now()) {
1536
+ try {
1537
+ await storage.set(N\u00D8KKEL, String(n\u00E5));
1538
+ } catch {
1539
+ }
1540
+ }
1541
+
1542
+ // src/widget/MineInnspill.tsx
1484
1543
  import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
1485
1544
  function MineInnspill({
1486
1545
  rader,
1487
1546
  laster,
1488
1547
  tenantName,
1489
- onNytt
1548
+ onNytt,
1549
+ storage
1490
1550
  }) {
1491
1551
  const tema = useTema();
1552
+ const [visning, setVisning] = useState2(() => rader.map((rad) => ({ rad, nytt: false })));
1553
+ useEffect(() => {
1554
+ let gjelder = true;
1555
+ void merkNyeSvar(rader, storage).then((m) => {
1556
+ if (gjelder) setVisning(m);
1557
+ }).catch(() => {
1558
+ if (gjelder) setVisning(rader.map((rad) => ({ rad, nytt: false })));
1559
+ });
1560
+ return () => {
1561
+ gjelder = false;
1562
+ };
1563
+ }, [storage, rader]);
1564
+ useEffect(() => {
1565
+ if (!laster && rader.length) void markerSvarSett(storage).catch(() => void 0);
1566
+ }, [storage, laster, rader]);
1492
1567
  return /* @__PURE__ */ jsxs6(View6, { style: { flex: 1, gap: tema.space.md }, children: [
1493
1568
  /* @__PURE__ */ jsx7(H, { sub: tekst.mineUnder, children: tekst.mineTittel }),
1494
- laster ? /* @__PURE__ */ jsx7(ActivityIndicator2, { accessibilityLabel: "Henter innspillene dine", color: tema.color.textSecondary }) : rader.length === 0 ? /* @__PURE__ */ jsx7(Hint, { children: tekst.mineTom }) : /* @__PURE__ */ jsx7(ScrollView3, { style: { flex: 1 }, contentContainerStyle: { gap: tema.space.sm }, children: rader.map((rad) => {
1569
+ laster ? /* @__PURE__ */ jsx7(ActivityIndicator2, { accessibilityLabel: "Henter innspillene dine", color: tema.color.textSecondary }) : rader.length === 0 ? /* @__PURE__ */ jsx7(Hint, { children: tekst.mineTom }) : /* @__PURE__ */ jsx7(ScrollView3, { style: { flex: 1 }, contentContainerStyle: { gap: tema.space.sm }, children: visning.map(({ rad, nytt }) => {
1495
1570
  const venter = rad.pending === true;
1496
1571
  const v = venter ? venterVisning : statusVisning(rad.status, rad.type, rad.deadlineAt);
1497
1572
  const nokkel = venter ? rad.clientRef : rad.id;
1498
1573
  const svar = venter ? void 0 : rad.reply;
1499
1574
  return /* @__PURE__ */ jsxs6(Card, { dashed: venter, children: [
1500
- /* @__PURE__ */ jsx7(Hint, { children: venter ? `${tekst.mineIkkeSendt} \xB7 ${rad.type === "onske" ? tekst.onske : tekst.feil}` : tekst.sakHode(rad.type === "onske" ? tekst.onske : tekst.feil, rad.id) }),
1575
+ /* @__PURE__ */ jsxs6(View6, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs, flexWrap: "wrap" }, children: [
1576
+ /* @__PURE__ */ jsx7(Hint, { children: venter ? `${tekst.mineIkkeSendt} \xB7 ${rad.type === "onske" ? tekst.onske : tekst.feil}` : tekst.sakHode(rad.type === "onske" ? tekst.onske : tekst.feil, rad.id) }),
1577
+ nytt ? /* @__PURE__ */ jsx7(
1578
+ Text6,
1579
+ {
1580
+ testID: "nytt-svar",
1581
+ style: {
1582
+ color: tema.color.info,
1583
+ backgroundColor: tema.color.infoBg,
1584
+ fontSize: tema.font.tiny,
1585
+ fontWeight: tema.weight.semibold,
1586
+ borderRadius: tema.radius.pill,
1587
+ paddingHorizontal: tema.space.sm
1588
+ },
1589
+ children: tekst.nyttSvar
1590
+ }
1591
+ ) : null
1592
+ ] }),
1501
1593
  /* @__PURE__ */ jsx7(
1502
1594
  Text6,
1503
1595
  {
@@ -1550,7 +1642,7 @@ function MineInnspill({
1550
1642
 
1551
1643
  // src/widget/Skjermbilde.tsx
1552
1644
  import { skaler, strokTilRekter, treffer, trykkTilRekt } from "@innspel/core";
1553
- import { useCallback, useMemo as useMemo2, useRef, useState as useState2 } from "react";
1645
+ import { useCallback, useMemo as useMemo3, useRef as useRef2, useState as useState3 } from "react";
1554
1646
  import { Image as Image2, Pressable as Pressable4, StyleSheet, Text as Text7, View as View7 } from "react-native";
1555
1647
  import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
1556
1648
  function Skjermbilde({
@@ -1565,17 +1657,17 @@ function Skjermbilde({
1565
1657
  onLeggVed
1566
1658
  }) {
1567
1659
  const tema = useTema();
1568
- const [verktoy, setVerktoy] = useState2("pensel");
1569
- const [allTekst, setAllTekst] = useState2(false);
1570
- const [egne, setEgne] = useState2([]);
1571
- const [ramme, setRamme] = useState2(null);
1572
- const strok = useRef([]);
1573
- const visning = useMemo2(() => {
1660
+ const [verktoy, setVerktoy] = useState3("pensel");
1661
+ const [allTekst, setAllTekst] = useState3(false);
1662
+ const [egne, setEgne] = useState3([]);
1663
+ const [ramme, setRamme] = useState3(null);
1664
+ const strok = useRef2([]);
1665
+ const visning = useMemo3(() => {
1574
1666
  if (!ramme) return null;
1575
1667
  const s = Math.min(ramme.width / bilde.width, ramme.height / bilde.height);
1576
1668
  return { width: Math.floor(bilde.width * s), height: Math.floor(bilde.height * s) };
1577
1669
  }, [ramme, bilde.width, bilde.height]);
1578
- const automasker = useMemo2(
1670
+ const automasker = useMemo3(
1579
1671
  () => visning ? automaskerRot.map((r) => skaler(r, rotStorrelse, visning)) : [],
1580
1672
  [automaskerRot, rotStorrelse, visning]
1581
1673
  );
@@ -1792,28 +1884,28 @@ function Widget({
1792
1884
  const tema = useTema();
1793
1885
  const insets = useContext3(SafeAreaInsetsContext) ?? initialWindowMetrics?.insets ?? { top: 0, bottom: 0, left: 0, right: 0 };
1794
1886
  const skjermbilde = useSkjermbilde();
1795
- const previewRef = useRef2(null);
1796
- const [steg, setSteg] = useState3("valg");
1797
- const [spor, setSpor] = useState3("feil");
1798
- const [verdi, setVerdi] = useState3("");
1799
- const [kort, setKort] = useState3([]);
1800
- const [lasterKort, setLasterKort] = useState3(false);
1801
- const [lenketTil, setLenketTil] = useState3();
1802
- const [funn, setFunn] = useState3([]);
1803
- const [fjernede, setFjernede] = useState3([]);
1804
- const [sender, setSender] = useState3(false);
1887
+ const previewRef = useRef3(null);
1888
+ const [steg, setSteg] = useState4("valg");
1889
+ const [spor, setSpor] = useState4("feil");
1890
+ const [verdi, setVerdi] = useState4("");
1891
+ const [kort, setKort] = useState4([]);
1892
+ const [lasterKort, setLasterKort] = useState4(false);
1893
+ const [lenketTil, setLenketTil] = useState4();
1894
+ const [funn, setFunn] = useState4([]);
1895
+ const [fjernede, setFjernede] = useState4([]);
1896
+ const [sender, setSender] = useState4(false);
1805
1897
  const online = useNettstatus(client);
1806
- const [feil, setFeil] = useState3();
1807
- const [kvittering, setKvittering] = useState3();
1808
- const [mine, setMine] = useState3([]);
1809
- const [lasterMine, setLasterMine] = useState3(false);
1810
- const [bilde, setBilde] = useState3();
1811
- const [automasker, setAutomasker] = useState3([]);
1812
- const [rotStorrelse, setRotStorrelse] = useState3({ width: 1, height: 1 });
1813
- const [komponerer, setKomponerer] = useState3(false);
1814
- const [kilde, setKilde] = useState3("skjerm");
1815
- const [vedlegg, setVedlegg] = useState3();
1816
- const [innstillinger, setInnstillinger] = useState3({ ...client.settings });
1898
+ const [feil, setFeil] = useState4();
1899
+ const [kvittering, setKvittering] = useState4();
1900
+ const [mine, setMine] = useState4([]);
1901
+ const [lasterMine, setLasterMine] = useState4(false);
1902
+ const [bilde, setBilde] = useState4();
1903
+ const [automasker, setAutomasker] = useState4([]);
1904
+ const [rotStorrelse, setRotStorrelse] = useState4({ width: 1, height: 1 });
1905
+ const [komponerer, setKomponerer] = useState4(false);
1906
+ const [kilde, setKilde] = useState4("skjerm");
1907
+ const [vedlegg, setVedlegg] = useState4();
1908
+ const [innstillinger, setInnstillinger] = useState4({ ...client.settings });
1817
1909
  const skjermbildeMulig = innstillinger.screenshotsEnabled && skjermbilde?.adapter != null;
1818
1910
  const fangstMulig = skjermbildeMulig && skjermbilde?.adapter?.captureScreen !== false;
1819
1911
  const galleriMulig = skjermbildeMulig && typeof skjermbilde?.adapter?.pick === "function";
@@ -1833,11 +1925,25 @@ function Widget({
1833
1925
  setVedlegg(void 0);
1834
1926
  setKomponerer(false);
1835
1927
  }, []);
1928
+ const [mineDirekte, setMineDirekte] = useState4(false);
1929
+ const [stegForMine, setStegForMine] = useState4("valg");
1930
+ const stegRef = useRef3(steg);
1931
+ stegRef.current = steg;
1932
+ const harUtkast = verdi.trim().length > 0 || vedlegg !== void 0;
1836
1933
  const lukk = useCallback2(() => {
1934
+ onLukk();
1935
+ if (stegRef.current === "mine" && mineDirekte) {
1936
+ setSteg(stegForMine);
1937
+ setMineDirekte(false);
1938
+ }
1939
+ }, [onLukk, mineDirekte, stegForMine]);
1940
+ const lukkOgNullstill = useCallback2(() => {
1837
1941
  onLukk();
1838
1942
  nullstill();
1943
+ setMineDirekte(false);
1944
+ setStegForMine("valg");
1839
1945
  }, [onLukk, nullstill]);
1840
- useEffect(() => {
1946
+ useEffect2(() => {
1841
1947
  if (!synlig) return;
1842
1948
  client.track({ name: "widget_opened" });
1843
1949
  void client.queue.flush().catch(() => void 0);
@@ -1845,8 +1951,8 @@ function Widget({
1845
1951
  if (!client.isAnonymous) {
1846
1952
  void client.subjects.submissions().then(setMine).catch(() => void 0);
1847
1953
  }
1848
- if (apneOpsjoner?.view === "mine" && !client.isAnonymous) void visMine();
1849
- else if (apneOpsjoner?.track) velgSpor(apneOpsjoner.track);
1954
+ if (apneOpsjoner?.view === "mine" && !client.isAnonymous) void visMine(true);
1955
+ else if (apneOpsjoner?.track && !harUtkast) void velgSpor(apneOpsjoner.track);
1850
1956
  }, [synlig]);
1851
1957
  const hentKort = useCallback2(async () => {
1852
1958
  setLasterKort(true);
@@ -1870,7 +1976,7 @@ function Widget({
1870
1976
  },
1871
1977
  [client, hentKort]
1872
1978
  );
1873
- useEffect(() => {
1979
+ useEffect2(() => {
1874
1980
  if (steg === "kjenteFeil" && !lasterKort && kort.length === 0) setSteg("felt");
1875
1981
  }, [steg, lasterKort, kort.length]);
1876
1982
  const endreTekst = useCallback2(
@@ -1944,6 +2050,11 @@ function Widget({
1944
2050
  }, []);
1945
2051
  const gaaTilbake = useCallback2(() => {
1946
2052
  setFeil(void 0);
2053
+ if (steg === "mine") {
2054
+ if (mineDirekte) lukk();
2055
+ else setSteg("valg");
2056
+ return;
2057
+ }
1947
2058
  if (steg === "skjermbilde") {
1948
2059
  setBilde(void 0);
1949
2060
  setAutomasker([]);
@@ -1955,7 +2066,12 @@ function Widget({
1955
2066
  return;
1956
2067
  }
1957
2068
  setSteg("valg");
1958
- }, [steg, spor, kort.length]);
2069
+ }, [steg, spor, kort.length, mineDirekte, lukk]);
2070
+ const androidTilbake = useCallback2(() => {
2071
+ if (steg === "valg") lukk();
2072
+ else if (steg === "kvittering") lukkOgNullstill();
2073
+ else gaaTilbake();
2074
+ }, [steg, lukk, lukkOgNullstill, gaaTilbake]);
1959
2075
  const send = useCallback2(async () => {
1960
2076
  setSender(true);
1961
2077
  setFeil(void 0);
@@ -1965,7 +2081,7 @@ function Widget({
1965
2081
  text: verdi,
1966
2082
  ...vedlegg ? { attachment: vedlegg } : {},
1967
2083
  ...spor === "feil" && lenketTil ? { relatedKnownIssueId: lenketTil.id } : {},
1968
- ...fjernede.length ? { context: fjernetKontekst(client, fjernede) } : {}
2084
+ context: fjernetKontekst(client, fjernede, apneOpsjoner?.screen)
1969
2085
  });
1970
2086
  if (res.status === "queued") {
1971
2087
  setKvittering({ art: "k\xF8", ...res.attachment ? { vedlegg: "forkastet" } : {} });
@@ -1986,7 +2102,7 @@ function Widget({
1986
2102
  } finally {
1987
2103
  setSender(false);
1988
2104
  }
1989
- }, [client, spor, verdi, vedlegg, lenketTil, fjernede]);
2105
+ }, [client, spor, verdi, vedlegg, lenketTil, fjernede, apneOpsjoner?.screen]);
1990
2106
  const jaOgsa = useCallback2(
1991
2107
  async (k) => {
1992
2108
  setSender(true);
@@ -2002,7 +2118,13 @@ function Widget({
2002
2118
  },
2003
2119
  [client]
2004
2120
  );
2005
- const visMine = useCallback2(async () => {
2121
+ const visMine = useCallback2(async (direkte = false) => {
2122
+ if (direkte) {
2123
+ if (stegRef.current !== "mine") setStegForMine(stegRef.current);
2124
+ } else {
2125
+ setStegForMine("valg");
2126
+ }
2127
+ setMineDirekte(direkte);
2006
2128
  setSteg("mine");
2007
2129
  setLasterMine(true);
2008
2130
  try {
@@ -2013,13 +2135,18 @@ function Widget({
2013
2135
  setLasterMine(false);
2014
2136
  }
2015
2137
  }, [client]);
2138
+ const nyttFraMine = useCallback2(() => {
2139
+ setMineDirekte(false);
2140
+ if (harUtkast) setSteg(stegForMine);
2141
+ else nullstill();
2142
+ }, [harUtkast, stegForMine, nullstill]);
2016
2143
  return /* @__PURE__ */ jsx9(
2017
2144
  Modal,
2018
2145
  {
2019
2146
  visible: synlig,
2020
2147
  transparent: true,
2021
2148
  animationType: "slide",
2022
- onRequestClose: lukk,
2149
+ onRequestClose: androidTilbake,
2023
2150
  accessibilityViewIsModal: true,
2024
2151
  children: /* @__PURE__ */ jsx9(
2025
2152
  KeyboardAvoidingView,
@@ -2057,7 +2184,7 @@ function Widget({
2057
2184
  testID: "lukk",
2058
2185
  accessibilityRole: "button",
2059
2186
  accessibilityLabel: tekst.lukk,
2060
- onPress: lukk,
2187
+ onPress: steg === "kvittering" ? lukkOgNullstill : lukk,
2061
2188
  style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
2062
2189
  children: /* @__PURE__ */ jsx9(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
2063
2190
  }
@@ -2075,7 +2202,7 @@ function Widget({
2075
2202
  ikon: "list-outline",
2076
2203
  label: mine.length > 0 ? tekst.mineMedAntall(mine.length) : tekst.mineTittel,
2077
2204
  accessibilityLabel: mine.length > 0 ? tekst.mineEtikett(mine.length) : tekst.mineTittel,
2078
- onPress: visMine
2205
+ onPress: () => void visMine()
2079
2206
  }
2080
2207
  ) : null
2081
2208
  ] }) : null,
@@ -2102,7 +2229,7 @@ function Widget({
2102
2229
  onEndre: endreTekst,
2103
2230
  minTextLength: innstillinger.minTextLength,
2104
2231
  textMaxLength: innstillinger.textMaxLength,
2105
- kontekst: client.context,
2232
+ kontekst: { ...client.context, ...apneOpsjoner?.screen ? { screen: apneOpsjoner.screen } : {} },
2106
2233
  fjernedeFelter: fjernede,
2107
2234
  onFjernKontekst: (f) => setFjernede((x) => [...x, f]),
2108
2235
  ...lenketTil ? { lenketTil, onFjernLenke: () => setLenketTil(void 0) } : {},
@@ -2139,16 +2266,17 @@ function Widget({
2139
2266
  ...kvittering.nr ? { saksnummer: kvittering.nr } : {},
2140
2267
  ...kvittering.vedlegg ? { vedlegg: kvittering.vedlegg } : {},
2141
2268
  ...kvittering.frist ? { frist: kvittering.frist } : {},
2142
- onLukk: lukk
2269
+ onLukk: lukkOgNullstill
2143
2270
  }
2144
2271
  ) : null,
2145
2272
  steg === "mine" ? /* @__PURE__ */ jsx9(
2146
2273
  MineInnspill,
2147
2274
  {
2275
+ storage: client.storage,
2148
2276
  rader: mine,
2149
2277
  laster: lasterMine,
2150
2278
  ...tenantName ? { tenantName } : {},
2151
- onNytt: nullstill
2279
+ onNytt: nyttFraMine
2152
2280
  }
2153
2281
  ) : null
2154
2282
  ]
@@ -2161,17 +2289,18 @@ function Widget({
2161
2289
  }
2162
2290
  function useNettstatus(client) {
2163
2291
  const c = client.connectivity;
2164
- const [online, setOnline] = useState3(() => c?.isOnline() ?? true);
2165
- useEffect(() => {
2292
+ const [online, setOnline] = useState4(() => c?.isOnline() ?? true);
2293
+ useEffect2(() => {
2166
2294
  if (!c) return void 0;
2167
2295
  setOnline(c.isOnline());
2168
2296
  return c.subscribe?.((v) => setOnline(v));
2169
2297
  }, [c]);
2170
2298
  return online;
2171
2299
  }
2172
- function fjernetKontekst(client, fjernede) {
2300
+ function fjernetKontekst(client, fjernede, skjerm) {
2173
2301
  const ut = {};
2174
- for (const k of Object.keys(client.context)) {
2302
+ if (skjerm) ut["screen"] = skjerm;
2303
+ for (const k of [...Object.keys(client.context), "screen"]) {
2175
2304
  if (k !== "sdkVersion" && fjernede.includes(k)) ut[k] = void 0;
2176
2305
  }
2177
2306
  return ut;
@@ -2189,11 +2318,11 @@ function InnspelProvider({
2189
2318
  screenshot,
2190
2319
  imageStepNote
2191
2320
  }) {
2192
- const [synlig, setSynlig] = useState4(false);
2193
- const [apneOpsjoner, setApneOpsjoner] = useState4();
2194
- const registrert = useRef3(false);
2195
- const rootRef = useRef3(null);
2196
- const privat = useMemo3(createPrivateRegistry, []);
2321
+ const [synlig, setSynlig] = useState5(false);
2322
+ const [apneOpsjoner, setApneOpsjoner] = useState5();
2323
+ const registrert = useRef4(false);
2324
+ const rootRef = useRef4(null);
2325
+ const privat = useMemo4(createPrivateRegistry, []);
2197
2326
  const open = useCallback3(
2198
2327
  async (options) => {
2199
2328
  setApneOpsjoner(options);
@@ -2206,9 +2335,9 @@ function InnspelProvider({
2206
2335
  client.registerPresenter({ open });
2207
2336
  registrert.current = true;
2208
2337
  }
2209
- const tema = useMemo3(() => byggTema(theme, colorScheme), [theme, colorScheme]);
2210
- const verdi = useMemo3(() => ({ client, open, close }), [client, open, close]);
2211
- const skjermbilde = useMemo3(
2338
+ const tema = useMemo4(() => byggTema(theme, colorScheme), [theme, colorScheme]);
2339
+ const verdi = useMemo4(() => ({ client, open, close }), [client, open, close]);
2340
+ const skjermbilde = useMemo4(
2212
2341
  () => ({ adapter: screenshot ?? null, rootRef, privat }),
2213
2342
  [screenshot, privat]
2214
2343
  );
@@ -2238,14 +2367,14 @@ function useInnspel() {
2238
2367
  }
2239
2368
 
2240
2369
  // src/InnspelPrivate.tsx
2241
- import { useEffect as useEffect2, useRef as useRef4 } from "react";
2370
+ import { useEffect as useEffect3, useRef as useRef5 } from "react";
2242
2371
  import { View as View10 } from "react-native";
2243
2372
  import { jsx as jsx11 } from "react/jsx-runtime";
2244
2373
  function InnspelPrivate({ children, style }) {
2245
- const ref = useRef4(null);
2374
+ const ref = useRef5(null);
2246
2375
  const kontekst = useSkjermbilde();
2247
2376
  const registrer = kontekst?.privat.register;
2248
- useEffect2(() => {
2377
+ useEffect3(() => {
2249
2378
  if (!registrer) return;
2250
2379
  return registrer(ref);
2251
2380
  }, [registrer]);
@@ -2256,7 +2385,7 @@ function InnspelPrivate({ children, style }) {
2256
2385
  import {
2257
2386
  InnspelApiError as InnspelApiError2
2258
2387
  } from "@innspel/core";
2259
- import { useCallback as useCallback4, useEffect as useEffect3, useState as useState6 } from "react";
2388
+ import { useCallback as useCallback4, useEffect as useEffect4, useState as useState7 } from "react";
2260
2389
  import { Modal as Modal4, Pressable as Pressable8, Text as Text12, View as View15 } from "react-native";
2261
2390
 
2262
2391
  // src/program/Aksept.tsx
@@ -2430,7 +2559,7 @@ function Aksept({
2430
2559
  }
2431
2560
 
2432
2561
  // src/program/HvordanGikkDet.tsx
2433
- import { useState as useState5 } from "react";
2562
+ import { useState as useState6 } from "react";
2434
2563
  import { Modal as Modal3, Pressable as Pressable7, Text as Text9, TextInput as TextInput2, View as View12 } from "react-native";
2435
2564
  import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
2436
2565
  var UTFALL = [
@@ -2450,8 +2579,8 @@ function HvordanGikkDet({
2450
2579
  onLukk
2451
2580
  }) {
2452
2581
  const tema = useTema();
2453
- const [valgt, setValgt] = useState5();
2454
- const [setning, setSetning] = useState5("");
2582
+ const [valgt, setValgt] = useState6();
2583
+ const [setning, setSetning] = useState6("");
2455
2584
  return /* @__PURE__ */ jsx13(Modal3, { visible: true, transparent: true, animationType: "fade", onRequestClose: onLukk, accessibilityViewIsModal: true, children: /* @__PURE__ */ jsx13(View12, { style: { flex: 1, backgroundColor: tema.color.scrim, justifyContent: "flex-end", padding: tema.space.md }, children: /* @__PURE__ */ jsxs11(
2456
2585
  View12,
2457
2586
  {
@@ -2675,17 +2804,17 @@ function InnspelProgram({
2675
2804
  }) {
2676
2805
  const { client } = useInnspel();
2677
2806
  const tema = useTema();
2678
- const [mine, setMine] = useState6();
2679
- const [deltakelse, setDeltakelse] = useState6();
2680
- const [viserAksept, setViserAksept] = useState6(false);
2681
- const [viserGaaUt, setViserGaaUt] = useState6(false);
2682
- const [avvist, setAvvist] = useState6(false);
2683
- const [sender, setSender] = useState6(false);
2684
- const [feil, setFeil] = useState6();
2685
- const [dialog, setDialog] = useState6();
2686
- const [svarFeil, setSvarFeil] = useState6();
2687
- const [lagtBort, setLagtBort] = useState6(/* @__PURE__ */ new Set());
2688
- const [meldFeilFor, setMeldFeilFor] = useState6();
2807
+ const [mine, setMine] = useState7();
2808
+ const [deltakelse, setDeltakelse] = useState7();
2809
+ const [viserAksept, setViserAksept] = useState7(false);
2810
+ const [viserGaaUt, setViserGaaUt] = useState7(false);
2811
+ const [avvist, setAvvist] = useState7(false);
2812
+ const [sender, setSender] = useState7(false);
2813
+ const [feil, setFeil] = useState7();
2814
+ const [dialog, setDialog] = useState7();
2815
+ const [svarFeil, setSvarFeil] = useState7();
2816
+ const [lagtBort, setLagtBort] = useState7(/* @__PURE__ */ new Set());
2817
+ const [meldFeilFor, setMeldFeilFor] = useState7();
2689
2818
  const leggBort = useCallback4((id) => setLagtBort((s) => /* @__PURE__ */ new Set([...s, id])), []);
2690
2819
  const lagreSvar = useCallback4(
2691
2820
  async (outcome, text) => {
@@ -2710,7 +2839,7 @@ function InnspelProgram({
2710
2839
  },
2711
2840
  [client, deltakelse, dialog, onMeldFeil]
2712
2841
  );
2713
- useEffect3(() => {
2842
+ useEffect4(() => {
2714
2843
  if (client.isAnonymous) return;
2715
2844
  let levende = true;
2716
2845
  void client.programs.list().then((svar) => {