@innspel/react-native 0.7.0 → 0.8.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.js CHANGED
@@ -232,11 +232,104 @@ var light = {
232
232
  screenPadding: 24,
233
233
  hairline: 1
234
234
  };
235
+ var submissionStatus = {
236
+ ny: {
237
+ statusType: "reviewing",
238
+ ikon: "ellipse-outline",
239
+ etikett: { feil: "Mottatt", onske: "Mottatt" },
240
+ lofte: { feil: "Vi har f\xE5tt den. Du h\xF8rer fra oss.", onske: "Vi har f\xE5tt den. Du h\xF8rer fra oss." },
241
+ fg: "textSecondary",
242
+ bg: "neutralBg",
243
+ variant: "outline"
244
+ },
245
+ vurderes: {
246
+ statusType: "reviewing",
247
+ ikon: "hourglass-outline",
248
+ etikett: { feil: "Vurderes", onske: "Vurderes" },
249
+ lofte: { feil: "Svar innen {frist} \u2014 ogs\xE5 hvis det er nei.", onske: "Svar innen {frist} \u2014 ogs\xE5 hvis det er nei." },
250
+ fg: "info",
251
+ bg: "infoBg",
252
+ variant: "outline"
253
+ },
254
+ planlagt: {
255
+ statusType: "active",
256
+ ikon: "calendar-outline",
257
+ etikett: { feil: "Planlagt", onske: "Planlagt" },
258
+ lofte: { feil: "Du f\xE5r beskjed n\xE5r den er rettet.", onske: "Du f\xE5r beskjed n\xE5r det er levert." },
259
+ fg: "brand",
260
+ bg: "brandBg",
261
+ variant: "outline"
262
+ },
263
+ bygges: {
264
+ statusType: "active",
265
+ ikon: "construct-outline",
266
+ etikett: { feil: "Retter n\xE5", onske: "Bygger" },
267
+ lofte: { feil: "Du f\xE5r beskjed n\xE5r den er rettet.", onske: "Du f\xE5r beskjed n\xE5r det er levert." },
268
+ fg: "brand",
269
+ bg: "brandBg",
270
+ variant: "filled"
271
+ },
272
+ kjent_feil: {
273
+ statusType: "active",
274
+ ikon: "warning-outline",
275
+ etikett: { feil: "Kjent feil", onske: "Kjent feil" },
276
+ lofte: { feil: "Kjent feil. Du f\xE5r beskjed n\xE5r den er rettet.", onske: "Kjent feil. Du f\xE5r beskjed n\xE5r den er rettet." },
277
+ fg: "warning",
278
+ bg: "warningBg",
279
+ variant: "outline"
280
+ },
281
+ levert: {
282
+ statusType: "complete",
283
+ ikon: "checkmark-circle-outline",
284
+ etikett: { feil: "Rettet", onske: "Levert" },
285
+ lofte: { feil: "Ferdig. Ser du feilen igjen, send et nytt innspill.", onske: "Ferdig. Takk for \xF8nsket." },
286
+ fg: "success",
287
+ bg: "successBg",
288
+ variant: "outline"
289
+ },
290
+ avvist: {
291
+ statusType: "closed",
292
+ ikon: "close-circle-outline",
293
+ etikett: { feil: "Avvist", onske: "Avvist" },
294
+ lofte: { feil: "Vi har svart p\xE5 denne.", onske: "Vi har svart p\xE5 denne." },
295
+ fg: "danger",
296
+ bg: "dangerBg",
297
+ variant: "outline"
298
+ },
299
+ duplikat: {
300
+ statusType: "closed",
301
+ ikon: "git-merge-outline",
302
+ etikett: { feil: "Sl\xE5tt sammen", onske: "Sl\xE5tt sammen" },
303
+ lofte: { feil: "Sl\xE5tt sammen med et innspill som ligner.", onske: "Sl\xE5tt sammen med et innspill som ligner." },
304
+ fg: "neutral",
305
+ bg: "neutralBg",
306
+ variant: "outline"
307
+ }
308
+ };
309
+ var knownIssueStatus = {
310
+ aktiv: {
311
+ ikon: "warning-outline",
312
+ etikett: "Aktiv",
313
+ fg: "warning",
314
+ bg: "warningBg",
315
+ variant: "outline"
316
+ },
317
+ fikset: {
318
+ ikon: "checkmark-circle-outline",
319
+ etikett: "Rettet",
320
+ fg: "success",
321
+ bg: "successBg",
322
+ variant: "dashed"
323
+ }
324
+ };
325
+ var lofteUtenFrist = "Du f\xE5r svar \u2014 ogs\xE5 hvis det er nei.";
235
326
  var screenRules = {
236
327
  brushFill: "#E5007D",
237
328
  autoMaskFill: "#101114",
238
329
  autoMaskStroke: "#E5007D",
330
+ autoMaskText: "#FFFFFF",
239
331
  previewBackdrop: "#000000",
332
+ qrBackdrop: "#FFFFFF",
240
333
  brushWidth: 28,
241
334
  textBlurRadius: 24
242
335
  };
@@ -263,9 +356,160 @@ import {
263
356
  InnspelQueueFullError
264
357
  } from "@innspel/core";
265
358
  import { useCallback as useCallback2, useContext as useContext3, useEffect, useRef as useRef2, useState as useState3 } from "react";
266
- import { KeyboardAvoidingView, Modal, Pressable as Pressable5, Text as Text8, View as View8 } from "react-native";
359
+ import { KeyboardAvoidingView, Modal, Pressable as Pressable5, View as View8 } from "react-native";
267
360
  import { initialWindowMetrics, SafeAreaInsetsContext } from "react-native-safe-area-context";
268
361
 
362
+ // src/Ikon.tsx
363
+ import "react";
364
+ import { SvgXml } from "react-native-svg";
365
+
366
+ // ../../node_modules/ionicons/dist/svg/arrow-back-outline.svg
367
+ var arrow_back_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M244 400 100 256l144-144M120 256h292" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48px"/></svg>';
368
+
369
+ // ../../node_modules/ionicons/dist/svg/brush-outline.svg
370
+ var brush_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M452.37 59.63a40.49 40.49 0 0 0-57.26 0L184 294.74c23.08 4.7 46.12 27.29 49.26 49.26l219.11-227.11a40.49 40.49 0 0 0 0-57.26M138 336c-29.88 0-54 24.5-54 54.86 0 23.95-20.88 36.57-36 36.57C64.56 449.74 92.82 464 120 464c39.78 0 72-32.73 72-73.14 0-30.36-24.12-54.86-54-54.86" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
371
+
372
+ // ../../node_modules/ionicons/dist/svg/bug-outline.svg
373
+ var bug_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M370 378c28.89 23.52 46 46.07 46 86M142 378c-28.89 23.52-46 46.06-46 86M384 208c28.89-23.52 32-56.07 32-96M128 206c-28.89-23.52-32-54.06-32-94M464 288.13h-80M128 288.13H48M256 192v256" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="M256 448c-70.4 0-128-57.6-128-128v-96.07c0-65.07 57.6-96 128-96h0c70.4 0 128 25.6 128 96V320c0 70.4-57.6 128-128 128" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="M179.43 143.52a49.1 49.1 0 0 1-3.43-15.73A80 80 0 0 1 255.79 48h.42A80 80 0 0 1 336 127.79a41.9 41.9 0 0 1-3.12 14.3" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
374
+
375
+ // ../../node_modules/ionicons/dist/svg/bulb-outline.svg
376
+ var bulb_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M304 384v-24c0-29 31.54-56.43 52-76 28.84-27.57 44-64.61 44-108 0-80-63.73-144-144-144a143.6 143.6 0 0 0-144 144c0 41.84 15.81 81.39 44 108 20.35 19.21 52 46.7 52 76v24M224 480h64M208 432h96M256 384V256" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="M294 240s-21.51 16-38 16-38-16-38-16" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
377
+
378
+ // ../../node_modules/ionicons/dist/svg/calendar-outline.svg
379
+ var calendar_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><rect width="416" height="384" x="48" y="80" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32" rx="48"/><circle cx="296" cy="232" r="24"/><circle cx="376" cy="232" r="24"/><circle cx="296" cy="312" r="24"/><circle cx="376" cy="312" r="24"/><circle cx="136" cy="312" r="24"/><circle cx="216" cy="312" r="24"/><circle cx="136" cy="392" r="24"/><circle cx="216" cy="392" r="24"/><circle cx="296" cy="392" r="24"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="M128 48v32M384 48v32"/><path fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32" d="M464 160H48"/></svg>';
380
+
381
+ // ../../node_modules/ionicons/dist/svg/camera-outline.svg
382
+ var camera_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="m350.54 148.68-26.62-42.06C318.31 100.08 310.62 96 302 96h-92c-8.62 0-16.31 4.08-21.92 10.62l-26.62 42.06C155.85 155.23 148.62 160 140 160H80a32 32 0 0 0-32 32v192a32 32 0 0 0 32 32h352a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32h-59c-8.65 0-16.85-4.77-22.46-11.32" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><circle cx="256" cy="272" r="80" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32px"/><path d="M124 158v-22h-24v22" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
383
+
384
+ // ../../node_modules/ionicons/dist/svg/checkmark-circle-outline.svg
385
+ var checkmark_circle_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192 192-86 192-192Z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32px"/><path d="M352 176 217.6 336 160 272" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
386
+
387
+ // ../../node_modules/ionicons/dist/svg/chevron-down-outline.svg
388
+ var chevron_down_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="m112 184 144 144 144-144" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48px"/></svg>';
389
+
390
+ // ../../node_modules/ionicons/dist/svg/chevron-up-outline.svg
391
+ var chevron_up_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="m112 328 144-144 144 144" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48px"/></svg>';
392
+
393
+ // ../../node_modules/ionicons/dist/svg/close-circle-outline.svg
394
+ var close_circle_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192 192-86 192-192Z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32px"/><path d="M320 320 192 192M192 320l128-128" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
395
+
396
+ // ../../node_modules/ionicons/dist/svg/close-outline.svg
397
+ var close_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M368 368 144 144M368 144 144 368" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
398
+
399
+ // ../../node_modules/ionicons/dist/svg/cloud-offline-outline.svg
400
+ var cloud_offline_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M93.72 183.25C49.49 198.05 16 233.1 16 288c0 66 54 112 120 112h184.37M467.82 377.74C485.24 363.3 496 341.61 496 312c0-59.82-53-85.76-96-88-8.89-89.54-71-144-144-144-26.16 0-48.79 6.93-67.6 18.14" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="M448 448 64 64" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32px"/></svg>';
401
+
402
+ // ../../node_modules/ionicons/dist/svg/construct-outline.svg
403
+ var construct_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M436.67 184.11a27.17 27.17 0 0 1-38.3 0l-22.48-22.49a27.15 27.15 0 0 1 0-38.29l50.89-50.89a.85.85 0 0 0-.26-1.38C393.68 57 351.09 64.15 324.05 91c-25.88 25.69-27.35 64.27-17.87 98a27 27 0 0 1-7.67 27.14l-173 160.76a40.76 40.76 0 1 0 57.57 57.54l162.15-173.3a27 27 0 0 1 26.77-7.7c33.46 8.94 71.49 7.26 97.07-17.94 27.49-27.08 33.42-74.94 20.1-102.33a.85.85 0 0 0-1.36-.22Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32px"/><path d="M224 284c-17.48-17-25.49-24.91-31-30.29a18.24 18.24 0 0 1-3.33-21.35 20.8 20.8 0 0 1 3.5-4.62l15.68-15.29a18.7 18.7 0 0 1 5.63-3.87 18.11 18.11 0 0 1 20 3.62c5.45 5.29 15.43 15 33.41 32.52M317.07 291.3c40.95 38.1 90.62 83.27 110 99.41a13.46 13.46 0 0 1 .94 19.92L394.63 444a14 14 0 0 1-20.29-.76c-16.53-19.18-61.09-67.11-99.27-107" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="m17.34 193.5 29.41-28.74a4.7 4.7 0 0 1 3.41-1.35 4.85 4.85 0 0 1 3.41 1.35h0a9.86 9.86 0 0 0 8.19 2.77c3.83-.42 7.92-1.6 10.57-4.12 6-5.8-.94-17.23 4.34-24.54a207 207 0 0 1 19.78-22.6c6-5.88 29.84-28.32 69.9-44.45A107.3 107.3 0 0 1 206.67 64c22.59 0 40 10 46.26 15.67a89.5 89.5 0 0 1 10.28 11.64 79 79 0 0 0-9.21-2.77 68.8 68.8 0 0 0-20-1.26c-13.33 1.09-29.41 7.26-38 14-13.9 11-19.87 25.72-20.81 44.71-.68 14.12 2.72 22.1 36.1 55.49a6.6 6.6 0 0 1-.34 9.16l-18.22 18a6.88 6.88 0 0 1-9.54.09c-21.94-21.94-36.65-33.09-45-38.16s-15.07-6.5-18.3-6.85a30.85 30.85 0 0 0-18.27 3.87 11.4 11.4 0 0 0-2.64 2 14.14 14.14 0 0 0 .42 20.08l1.71 1.6a4.63 4.63 0 0 1 0 6.64L71.73 246.6a4.7 4.7 0 0 1-3.41 1.4 4.86 4.86 0 0 1-3.41-1.35l-47.57-46.43a4.88 4.88 0 0 1 0-6.72" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
404
+
405
+ // ../../node_modules/ionicons/dist/svg/contrast-outline.svg
406
+ var contrast_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><circle cx="256" cy="256" r="208" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32px"/><path d="M256 464c-114.88 0-208-93.12-208-208S141.12 48 256 48Z"/></svg>';
407
+
408
+ // ../../node_modules/ionicons/dist/svg/ellipse-outline.svg
409
+ var ellipse_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><circle cx="256" cy="256" r="192" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
410
+
411
+ // ../../node_modules/ionicons/dist/svg/exit-outline.svg
412
+ var exit_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M320 176v-40a40 40 0 0 0-40-40H88a40 40 0 0 0-40 40v240a40 40 0 0 0 40 40h192a40 40 0 0 0 40-40v-40M384 176l80 80-80 80M191 256h273" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
413
+
414
+ // ../../node_modules/ionicons/dist/svg/flask-outline.svg
415
+ var flask_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M176 48h160M118 304h276M208 48v93.48a64.1 64.1 0 0 1-9.88 34.18L73.21 373.49C48.4 412.78 76.63 464 123.08 464h265.84c46.45 0 74.68-51.22 49.87-90.51L313.87 175.66a64.1 64.1 0 0 1-9.87-34.18V48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32px"/></svg>';
416
+
417
+ // ../../node_modules/ionicons/dist/svg/grid-outline.svg
418
+ var grid_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><rect width="176" height="176" x="48" y="48" rx="20" ry="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><rect width="176" height="176" x="288" y="48" rx="20" ry="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><rect width="176" height="176" x="48" y="288" rx="20" ry="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><rect width="176" height="176" x="288" y="288" rx="20" ry="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
419
+
420
+ // ../../node_modules/ionicons/dist/svg/hourglass-outline.svg
421
+ var hourglass_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M145.61 464h220.78c19.8 0 35.55-16.29 33.42-35.06C386.06 308 304 310 304 256s83.11-51 95.8-172.94c2-18.78-13.61-35.06-33.41-35.06H145.61c-19.8 0-35.37 16.28-33.41 35.06C124.89 205 208 201 208 256s-82.06 52-95.8 172.94c-2.14 18.77 13.61 35.06 33.41 35.06" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="M343.3 432H169.13c-15.6 0-20-18-9.06-29.16C186.55 376 240 356.78 240 326V224c0-19.85-38-35-61.51-67.2-3.88-5.31-3.49-12.8 6.37-12.8h142.73c8.41 0 10.23 7.43 6.4 12.75C310.82 189 272 204.05 272 224v102c0 30.53 55.71 47 80.4 76.87 9.95 12.04 6.47 29.13-9.1 29.13"/></svg>';
422
+
423
+ // ../../node_modules/ionicons/dist/svg/image-outline.svg
424
+ var image_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><rect width="416" height="352" x="48" y="80" rx="48" ry="48" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32px"/><circle cx="336" cy="176" r="32" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32px"/><path d="m304 335.79-90.66-90.49a32 32 0 0 0-43.87-1.3L48 352M224 432l123.34-123.34a32 32 0 0 1 43.11-2L464 368" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
425
+
426
+ // ../../node_modules/ionicons/dist/svg/images-outline.svg
427
+ var images_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M432 112V96a48.14 48.14 0 0 0-48-48H64a48.14 48.14 0 0 0-48 48v256a48.14 48.14 0 0 0 48 48h16" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32px"/><rect width="400" height="336" x="96" y="128" rx="45.99" ry="45.99" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32px"/><ellipse cx="372.92" cy="219.64" rx="30.77" ry="30.55" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32px"/><path d="M342.15 372.17 255 285.78a30.93 30.93 0 0 0-42.18-1.21L96 387.64M265.23 464l118.59-117.73a31 31 0 0 1 41.46-1.87L496 402.91" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
428
+
429
+ // ../../node_modules/ionicons/dist/svg/list-outline.svg
430
+ var list_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M160 144h288M160 256h288M160 368h288" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><circle cx="80" cy="144" r="16" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><circle cx="80" cy="256" r="16" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><circle cx="80" cy="368" r="16" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
431
+
432
+ // ../../node_modules/ionicons/dist/svg/lock-closed-outline.svg
433
+ var lock_closed_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M336 208v-95a80 80 0 0 0-160 0v95" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><rect width="320" height="272" x="96" y="208" rx="48" ry="48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
434
+
435
+ // ../../node_modules/ionicons/dist/svg/git-merge-outline.svg
436
+ var git_merge_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><circle cx="129" cy="96" r="48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><circle cx="129" cy="416" r="48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="M129 144v224" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><circle cx="385" cy="288" r="48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="M129 144c0 96 112 144 208 144" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
437
+
438
+ // ../../node_modules/ionicons/dist/svg/open-outline.svg
439
+ var open_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M384 224v184a40 40 0 0 1-40 40H104a40 40 0 0 1-40-40V168a40 40 0 0 1 40-40h167.48M336 64h112v112M224 288 440 72" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
440
+
441
+ // ../../node_modules/ionicons/dist/svg/scan-outline.svg
442
+ var scan_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M336 448h56a56 56 0 0 0 56-56v-56M448 176v-56a56 56 0 0 0-56-56h-56M176 448h-56a56 56 0 0 1-56-56v-56M64 176v-56a56 56 0 0 1 56-56h56" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
443
+
444
+ // ../../node_modules/ionicons/dist/svg/swap-vertical-outline.svg
445
+ var swap_vertical_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M464 208 352 96 240 208M352 113.13V416M48 304l112 112 112-112M160 398V96" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
446
+
447
+ // ../../node_modules/ionicons/dist/svg/trash-outline.svg
448
+ var trash_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="m112 112 20 320c.95 18.49 14.4 32 32 32h184c17.67 0 30.87-13.51 32-32l20-320" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="M80 112h352" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32px"/><path d="M192 112V72h0a23.93 23.93 0 0 1 24-24h80a23.93 23.93 0 0 1 24 24h0v40M256 176v224M184 176l8 224M328 176l-8 224" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/></svg>';
449
+
450
+ // ../../node_modules/ionicons/dist/svg/warning-outline.svg
451
+ var warning_outline_default = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="ionicon"><path d="M85.57 446.25h340.86a32 32 0 0 0 28.17-47.17L284.18 82.58c-12.09-22.44-44.27-22.44-56.36 0L57.4 399.08a32 32 0 0 0 28.17 47.17" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path d="m250.26 195.39 5.74 122 5.73-121.95a5.74 5.74 0 0 0-5.79-6h0a5.74 5.74 0 0 0-5.68 5.95" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32px"/><path fill="currentColor" d="M256 397.25a20 20 0 1 1 20-20 20 20 0 0 1-20 20"/></svg>';
452
+
453
+ // src/Ikon.tsx
454
+ import { jsx } from "react/jsx-runtime";
455
+ var utenTittel = (svg) => svg.replace(/<title>[\s\S]*?<\/title>/g, "");
456
+ var IKONER = Object.fromEntries(
457
+ Object.entries({
458
+ "arrow-back-outline": arrow_back_outline_default,
459
+ "brush-outline": brush_outline_default,
460
+ "bug-outline": bug_outline_default,
461
+ "bulb-outline": bulb_outline_default,
462
+ "calendar-outline": calendar_outline_default,
463
+ "camera-outline": camera_outline_default,
464
+ "checkmark-circle-outline": checkmark_circle_outline_default,
465
+ "chevron-down-outline": chevron_down_outline_default,
466
+ "chevron-up-outline": chevron_up_outline_default,
467
+ "close-circle-outline": close_circle_outline_default,
468
+ "close-outline": close_outline_default,
469
+ "cloud-offline-outline": cloud_offline_outline_default,
470
+ "construct-outline": construct_outline_default,
471
+ "contrast-outline": contrast_outline_default,
472
+ "ellipse-outline": ellipse_outline_default,
473
+ "exit-outline": exit_outline_default,
474
+ "flask-outline": flask_outline_default,
475
+ "git-merge-outline": git_merge_outline_default,
476
+ "grid-outline": grid_outline_default,
477
+ "hourglass-outline": hourglass_outline_default,
478
+ "image-outline": image_outline_default,
479
+ "images-outline": images_outline_default,
480
+ "list-outline": list_outline_default,
481
+ "lock-closed-outline": lock_closed_outline_default,
482
+ "open-outline": open_outline_default,
483
+ "scan-outline": scan_outline_default,
484
+ "swap-vertical-outline": swap_vertical_outline_default,
485
+ "trash-outline": trash_outline_default,
486
+ "warning-outline": warning_outline_default
487
+ }).map(([navn, svg]) => [navn, utenTittel(svg)])
488
+ );
489
+ var IKONNAVN = Object.keys(IKONER);
490
+ function Ikon({
491
+ navn,
492
+ storrelse: storrelse2 = "inline",
493
+ farge
494
+ }) {
495
+ const tema = useTema();
496
+ const svg = IKONER[navn];
497
+ if (!svg) throw new Error(`[innspel] Ikonet \xAB${navn}\xBB er ikke tatt med i Ikon.tsx.`);
498
+ const maal = storrelse2 === "minste" ? tema.icon.minste : storrelse2 === "stor" ? 2 * tema.icon.inline : tema.icon.inline;
499
+ return /* @__PURE__ */ jsx(
500
+ SvgXml,
501
+ {
502
+ testID: `ikon-${navn}`,
503
+ xml: svg,
504
+ width: maal,
505
+ height: maal,
506
+ color: farge ?? tema.color.textPrimary,
507
+ accessibilityElementsHidden: true,
508
+ importantForAccessibility: "no"
509
+ }
510
+ );
511
+ }
512
+
269
513
  // src/widget/Felt.tsx
270
514
  import { useMemo, useState } from "react";
271
515
  import { Pressable as Pressable2, ScrollView, Text as Text2, TextInput, View as View2 } from "react-native";
@@ -273,7 +517,7 @@ import { Pressable as Pressable2, ScrollView, Text as Text2, TextInput, View as
273
517
  // src/widget/primitiver.tsx
274
518
  import "react";
275
519
  import { Pressable, Text, View } from "react-native";
276
- import { jsx, jsxs } from "react/jsx-runtime";
520
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
277
521
  function Btn({
278
522
  label,
279
523
  onPress,
@@ -283,7 +527,8 @@ function Btn({
283
527
  disabled,
284
528
  accessibilityLabel,
285
529
  grow,
286
- testID
530
+ testID,
531
+ busy
287
532
  }) {
288
533
  const tema = useTema();
289
534
  const c = tema.color;
@@ -297,7 +542,7 @@ function Btn({
297
542
  testID,
298
543
  accessibilityRole: "button",
299
544
  accessibilityLabel: accessibilityLabel ?? (hint ? `${label}. ${hint}` : label),
300
- accessibilityState: { disabled: !!disabled },
545
+ accessibilityState: { disabled: !!disabled, busy: !!busy },
301
546
  disabled,
302
547
  onPress,
303
548
  style: {
@@ -314,8 +559,8 @@ function Btn({
314
559
  opacity: disabled ? 0.6 : 1
315
560
  },
316
561
  children: [
317
- ikon ? /* @__PURE__ */ jsx(Text, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.body }, children: ikon }) : null,
318
- /* @__PURE__ */ jsx(
562
+ ikon ? /* @__PURE__ */ jsx2(Ikon, { navn: ikon, farge: disabled ? c.textDisabled : tekstfarge }) : null,
563
+ /* @__PURE__ */ jsx2(
319
564
  Text,
320
565
  {
321
566
  style: {
@@ -329,13 +574,13 @@ function Btn({
329
574
  ]
330
575
  }
331
576
  ),
332
- hint ? /* @__PURE__ */ jsx(Hint, { children: hint }) : null
577
+ hint ? /* @__PURE__ */ jsx2(Hint, { children: hint }) : null
333
578
  ] });
334
579
  }
335
580
  function H({ children, sub }) {
336
581
  const tema = useTema();
337
582
  return /* @__PURE__ */ jsxs(View, { style: { gap: tema.space.xs }, children: [
338
- /* @__PURE__ */ jsx(
583
+ /* @__PURE__ */ jsx2(
339
584
  Text,
340
585
  {
341
586
  accessibilityRole: "header",
@@ -348,7 +593,7 @@ function H({ children, sub }) {
348
593
  children
349
594
  }
350
595
  ),
351
- sub ? /* @__PURE__ */ jsx(
596
+ sub ? /* @__PURE__ */ jsx2(
352
597
  Text,
353
598
  {
354
599
  style: {
@@ -363,7 +608,7 @@ function H({ children, sub }) {
363
608
  }
364
609
  function Hint({ children }) {
365
610
  const tema = useTema();
366
- return /* @__PURE__ */ jsx(
611
+ return /* @__PURE__ */ jsx2(
367
612
  Text,
368
613
  {
369
614
  style: {
@@ -381,7 +626,7 @@ function Card({
381
626
  style
382
627
  }) {
383
628
  const tema = useTema();
384
- return /* @__PURE__ */ jsx(
629
+ return /* @__PURE__ */ jsx2(
385
630
  View,
386
631
  {
387
632
  style: [
@@ -400,12 +645,9 @@ function Card({
400
645
  }
401
646
  );
402
647
  }
403
- function StatusPill({
404
- ikon,
405
- etikett,
406
- farge
407
- }) {
648
+ function StatusPill({ ikon, etikett, fg, bg }) {
408
649
  const tema = useTema();
650
+ const farge = (navn, reserve) => tema.color[navn] ?? reserve;
409
651
  return /* @__PURE__ */ jsxs(
410
652
  View,
411
653
  {
@@ -417,11 +659,11 @@ function StatusPill({
417
659
  paddingHorizontal: tema.space.sm,
418
660
  paddingVertical: tema.space.xs,
419
661
  borderRadius: tema.radius.pill,
420
- backgroundColor: tema.color[`${farge}Bg`]
662
+ backgroundColor: farge(bg, tema.color.neutralBg)
421
663
  },
422
664
  children: [
423
- /* @__PURE__ */ jsx(Text, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.small }, children: ikon }),
424
- /* @__PURE__ */ jsx(Text, { style: { color: tema.color[farge], fontSize: tema.font.small, fontWeight: tema.weight.medium }, children: etikett })
665
+ /* @__PURE__ */ jsx2(Ikon, { navn: ikon, storrelse: "minste", farge: farge(fg, tema.color.textSecondary) }),
666
+ /* @__PURE__ */ jsx2(Text, { style: { color: farge(fg, tema.color.textSecondary), fontSize: tema.font.small, fontWeight: tema.weight.medium }, children: etikett })
425
667
  ]
426
668
  }
427
669
  );
@@ -430,12 +672,14 @@ function Banner({
430
672
  ikon,
431
673
  tone,
432
674
  children,
433
- live
675
+ live,
676
+ testID
434
677
  }) {
435
678
  const tema = useTema();
436
679
  return /* @__PURE__ */ jsxs(
437
680
  View,
438
681
  {
682
+ testID,
439
683
  style: {
440
684
  flexDirection: "row",
441
685
  gap: tema.space.sm,
@@ -444,8 +688,8 @@ function Banner({
444
688
  padding: tema.space.md
445
689
  },
446
690
  children: [
447
- /* @__PURE__ */ jsx(Text, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.body }, children: ikon }),
448
- /* @__PURE__ */ jsx(
691
+ /* @__PURE__ */ jsx2(Ikon, { navn: ikon, farge: tema.color[tone] }),
692
+ /* @__PURE__ */ jsx2(
449
693
  Text,
450
694
  {
451
695
  accessibilityRole: "alert",
@@ -465,17 +709,21 @@ function Banner({
465
709
  }
466
710
 
467
711
  // src/widget/tekster.ts
712
+ function saksnr(id) {
713
+ const i = id.indexOf("_");
714
+ return i >= 0 ? id.slice(i + 1) : id;
715
+ }
716
+ var stor = (s) => s ? s.charAt(0).toUpperCase() + s.slice(1) : s;
468
717
  var tekst = {
469
718
  // 2b — første valg
470
719
  valgTittel: "Hva gjelder det?",
471
- valgUnder: "Ett valg. Vi sp\xF8r aldri om kategori eller alvorlighet.",
472
720
  sporFeil: "Noe virker ikke",
473
- sporFeilUnder: "Feilsporet \u2014 kontekst legges ved",
721
+ sporFeilUnder: "Noe er galt eller virker rart",
474
722
  sporOnske: "Jeg \xF8nsker meg noe",
475
- sporOnskeUnder: "\xD8nskesporet \u2014 aldri sp\xF8rsm\xE5l om reproduksjon",
723
+ sporOnskeUnder: "Noe du savner eller vil ha annerledes",
476
724
  // 2c — kjente feil (DD-29, DD-30)
477
725
  kjenteFeilTittelFeil: "Er det dette du ser?",
478
- kjenteFeilUnderFeil: "\xABJa\xBB registrerer deg p\xE5 saken. \xABLigner\xBB sender ditt eget med lenke.",
726
+ kjenteFeilUnderFeil: "Kjenner du igjen en av disse?",
479
727
  kjenteFeilTittelOnske: "Har noen \xF8nsket dette?",
480
728
  kjenteFeilUnderOnske: "Ett trykk legger deg til p\xE5 \xF8nsket \u2014 ingen ny sak.",
481
729
  svarJa: "Ja, jeg ogs\xE5",
@@ -497,7 +745,7 @@ var tekst = {
497
745
  placeholderFeil: "Hva skjedde? Hva forventet du?",
498
746
  placeholderOnske: "Hva \xF8nsker du deg?",
499
747
  send: "Send",
500
- nesteOnske: "Neste \u2014 sjekk om noen har \xF8nsket dette",
748
+ sender: "Sender \u2026",
501
749
  /** DD-44: minimum tegn er det ENESTE kravet. */
502
750
  forKort: (min) => `Minst ${min} tegn. Ingenting annet er obligatorisk.`,
503
751
  tellerFull: " \u2014 kort og konkret holder",
@@ -521,14 +769,15 @@ var tekst = {
521
769
  tegnOver: "Tegn over",
522
770
  maskerAllTekst: "Masker all tekst",
523
771
  maskertAvAppen: "Maskert av appen",
524
- maskertAvAppenHint: "Registrert privat view. Penselen kan ikke oppheve den.",
525
- dittStrok: "\u25B2 ditt str\xF8k \u2014 maskert (kan angres med ett trykk)",
772
+ maskertAvAppenHint: "Dette feltet er alltid dekket og kan ikke avdekkes.",
773
+ dittStrok: "Trykk p\xE5 et dekket felt for \xE5 angre.",
774
+ angreSiste: "Angre siste",
775
+ angreSisteA11y: "Angre det siste feltet du dekket",
526
776
  allTekstHint: "Hele bildet er gjort uskarpt s\xE5 tekst ikke kan leses. Layouten er synlig.",
527
777
  fjernBildet: "Fjern bildet",
528
- leggVedOgFortsett: "Legg ved og fortsett",
529
- leggVedHintDD42: "Teksten sendes f\xF8rst; bildet lastes opp for seg.",
530
- skjermbildeLagtVed: "Skjermbilde lagt ved \u2014 maskert",
531
- fjernSkjermbilde: "Fjern skjermbildet",
778
+ leggVed: "Legg ved",
779
+ bildeLagtVed: "Bilde lagt ved",
780
+ fjernSkjermbilde: "Fjern bildet",
532
781
  sendHintMedBilde: "Teksten sendes f\xF8rst; bildet lastes opp for seg.",
533
782
  skjermbildeFeilet: "kunne ikke ta skjermbilde. Du kan sende uten.",
534
783
  skjermbildeA11y: (auto, egne, uskarpt) => `Forh\xE5ndsvisning av skjermbildet. ${auto ? `${auto} felt maskert av appen og kan ikke avmaskeres. ` : ""}${egne ? `${egne} felt maskert av deg. ` : ""}${uskarpt ? "All tekst er gjort uskarp. " : ""}Trykk for \xE5 maskere et felt, dra for \xE5 tegne over.`,
@@ -547,34 +796,37 @@ var tekst = {
547
796
  kvitteringSendt: "Sendt",
548
797
  kvitteringRegistrert: "Registrert",
549
798
  kvitteringFeil: "Du f\xE5r beskjed n\xE5r den er rettet, eller hvis vi trenger mer.",
550
- kvitteringOnske: "Vurderes innen 90 dager. Du f\xE5r et personlig svar \u2014 ogs\xE5 hvis det er nei.",
551
799
  kvitteringJaOgsa: "Du f\xE5r beskjed n\xE5r den er rettet.",
552
- saksnummer: (nr) => `Saksnummer ${nr} \u2014 vis dette hvis du sp\xF8r support.`,
800
+ saksnummer: (nr) => `Sak ${saksnr(nr)}`,
553
801
  tilbakeTilAppen: "Tilbake til appen",
554
802
  /** DD-42: saken er sendt, bildet kom ikke med — aldri en blokkert innsending. */
555
803
  kvitteringVedleggFeilet: "Sendt \u2014 skjermbildet kunne ikke legges ved",
556
804
  tekstenErLagret: "Teksten din er lagret.",
557
805
  vedleggFeiletBanner: "Bildet ble ikke lastet opp. Saken er sendt uten det \u2014 vil du, kan du sende et nytt innspill med bilde.",
558
- saksnummerUtenVedlegg: (nr) => `Saksnummer ${nr} \xB7 uten vedlegg`,
806
+ saksnummerUtenVedlegg: (nr) => `Sak ${saksnr(nr)} \xB7 uten vedlegg`,
559
807
  // 2i — tilstander
560
- offlineTittel: "Ingen nett",
808
+ koKvitteringTittel: "Lagret \u2014 sendes n\xE5r du er p\xE5 nett",
561
809
  offlineBanner: "Ingen nett. Lagres og sendes automatisk \u2014 du ser det under \xABMine innspill\xBB til det er sendt.",
562
- offlineLagre: "Lagre \u2014 sendes automatisk",
810
+ offlineLagre: "Lagre \u2014 sendes n\xE5r du er p\xE5 nett",
563
811
  /** DD-41: et skjermbilde køes aldri. */
564
812
  offlineUtenBilde: "Skjermbilde kan ikke legges ved uten nett. Teksten sendes; bildet ble ikke lagret.",
565
813
  sendefeilBanner: (arsak) => `Kunne ikke sende: ${arsak} Teksten din er beholdt.`,
566
814
  provIgjen: "Pr\xF8v igjen",
567
815
  // 2j — mine innspill
568
816
  mineTittel: "Mine innspill",
569
- mineUnder: "Status og hva du kan vente deg \u2014 samme l\xF8fte som i kvitteringen.",
817
+ mineUnder: "Status og hva du kan vente deg.",
570
818
  mineTom: "Du har ikke sendt noe enn\xE5.",
571
819
  mineIkkeSendt: "Ikke sendt enn\xE5",
572
- mineSak: (nr) => `Sak ${nr}`,
820
+ mineSak: (nr) => `Sak ${saksnr(nr)}`,
821
+ /** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
822
+ sakHode: (spor, nr) => `${stor(spor)} \xB7 sak ${saksnr(nr)}`,
573
823
  // Leietakeren fjernet vedlegget. Bare AT — aldri hvorfor, av hvem eller når.
574
824
  bildeFjernet: "Bildet er fjernet.",
575
825
  svarFra: (leietaker) => `Svar fra ${leietaker}`,
576
826
  svarFraGenerisk: "Svar",
577
827
  sendNytt: "Send nytt innspill",
828
+ /** Tom tilstand: det finnes ikke noe «nytt» å sende når ingenting er sendt. */
829
+ sendForste: "Send innspill",
578
830
  // 3a — invitasjonsbanneret (DD-12)
579
831
  invitasjonRegion: "Invitasjon til betaprogram",
580
832
  invitasjonHva: (navn) => `Vil du teste \xAB${navn}\xBB?`,
@@ -602,7 +854,7 @@ var tekst = {
602
854
  akseptFeil: (arsak) => `Kunne ikke bli med: ${arsak}`,
603
855
  // 3c (M3.1-delen) — deltakelsen og «Gå ut» (DD-36)
604
856
  deltakelseRegion: "Ditt betaprogram",
605
- deltakelsePeriode: (periode2, brukt, maks) => `${periode2} \xB7 ${brukt} av ${maks} kontakter brukt`,
857
+ deltakelsePeriode: (periode2, brukt, maks) => `${periode2} \xB7 Vi tar kontakt maks ${maks} ganger \u2014 ${brukt} brukt`,
606
858
  deltakelseOppgaverKommer: "Oppgavene kan gj\xF8res n\xE5r det passer deg.",
607
859
  gaaUt: "G\xE5 ut av programmet",
608
860
  gaaUtTittel: "G\xE5 ut av programmet?",
@@ -614,11 +866,11 @@ var tekst = {
614
866
  oppgaveIkkeBegynt: "Ikke begynt",
615
867
  oppgaveGjort: "Gjort",
616
868
  oppgaveGjortLabel: (tittel) => `Gjort: ${tittel}`,
617
- oppgaveGjortMed: (utfall) => `Gjort \xB7 ${utfall}`,
869
+ oppgaveGjortMed: (utfall) => `Pr\xF8vd \xB7 ${utfall}`,
618
870
  hvordanGikkDet: "Hvordan gikk det?",
619
871
  utfallFungerte: "Fungerte",
620
- utfallDelvis: "Delvis",
621
- utfallIkke: "Ikke",
872
+ utfallDelvis: "Fungerte delvis",
873
+ utfallIkke: "Fungerte ikke",
622
874
  setningLabel: "Vil du si \xE9n setning om det? (valgfritt)",
623
875
  setningPlaceholder: "Kopien kom, men rullesjefen manglet p\xE5 torsdag.",
624
876
  lagre: "Lagre",
@@ -638,24 +890,16 @@ var tekst = {
638
890
  // Felles
639
891
  tilbake: "Tilbake",
640
892
  lukk: "Lukk",
641
- venterPaaNett: "Venter p\xE5 nett \u2014 sendes automatisk"
893
+ venterPaaNett: "Venter p\xE5 nett \u2014 sendes automatisk",
894
+ feil: "feil",
895
+ onske: "\xF8nske"
642
896
  };
643
897
  var lofte = {
644
- venterNett: "Sendes automatisk n\xE5r du er p\xE5 nett \u2014 kvitteringen kommer da.",
645
- vurderes: (frist) => `Svar innen ${frist} \u2014 ogs\xE5 hvis det er nei.`,
646
- vurderesUtenFrist: "Du f\xE5r svar \u2014 ogs\xE5 hvis det er nei.",
647
- bygges: "Du f\xE5r beskjed n\xE5r den er rettet.",
648
- planlagt: "Du f\xE5r beskjed n\xE5r den er rettet.",
649
- rettet: "Ferdig. Ser du feilen igjen, send et nytt innspill.",
650
- levert: "Ferdig. Takk for \xF8nsket.",
651
- ny: "Vi har f\xE5tt den. Du h\xF8rer fra oss.",
652
- kjentFeil: "Kjent feil. Du f\xE5r beskjed n\xE5r den er rettet.",
653
- duplikat: "Sl\xE5tt sammen med et innspill som ligner.",
654
- avvist: "Vi har svart p\xE5 denne."
898
+ venterNett: "Sendes automatisk n\xE5r du er p\xE5 nett \u2014 kvitteringen kommer da."
655
899
  };
656
900
 
657
901
  // src/widget/Felt.tsx
658
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
902
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
659
903
  function Felt({
660
904
  spor,
661
905
  verdi,
@@ -670,6 +914,8 @@ function Felt({
670
914
  funn,
671
915
  onSend,
672
916
  sender,
917
+ harFeil,
918
+ offline,
673
919
  onSkjermbilde,
674
920
  onVelgBilde,
675
921
  bildeNotat,
@@ -722,8 +968,8 @@ function Felt({
722
968
  paddingRight: tema.space.xs
723
969
  },
724
970
  children: [
725
- /* @__PURE__ */ jsx2(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: tekst.lenketTil(lenketTil.title) }),
726
- /* @__PURE__ */ jsx2(
971
+ /* @__PURE__ */ jsx3(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: tekst.lenketTil(lenketTil.title) }),
972
+ /* @__PURE__ */ jsx3(
727
973
  Pressable2,
728
974
  {
729
975
  testID: "fjern-lenke",
@@ -731,7 +977,7 @@ function Felt({
731
977
  accessibilityLabel: tekst.fjernLenke,
732
978
  onPress: onFjernLenke,
733
979
  style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
734
- children: /* @__PURE__ */ jsx2(Text2, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: "\u2715" })
980
+ children: /* @__PURE__ */ jsx3(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
735
981
  }
736
982
  )
737
983
  ]
@@ -747,7 +993,7 @@ function Felt({
747
993
  padding: tema.space.md
748
994
  },
749
995
  children: [
750
- /* @__PURE__ */ jsx2(
996
+ /* @__PURE__ */ jsx3(
751
997
  Text2,
752
998
  {
753
999
  accessibilityRole: "alert",
@@ -762,7 +1008,7 @@ function Felt({
762
1008
  }
763
1009
  ),
764
1010
  /* @__PURE__ */ jsxs2(View2, { style: { flexDirection: "row", gap: tema.space.sm }, children: [
765
- /* @__PURE__ */ jsx2(
1011
+ /* @__PURE__ */ jsx3(
766
1012
  Btn,
767
1013
  {
768
1014
  grow: true,
@@ -772,7 +1018,7 @@ function Felt({
772
1018
  onPress: () => onEndre(verdi.slice(0, uavklart.start) + verdi.slice(uavklart.end))
773
1019
  }
774
1020
  ),
775
- /* @__PURE__ */ jsx2(
1021
+ /* @__PURE__ */ jsx3(
776
1022
  Btn,
777
1023
  {
778
1024
  grow: true,
@@ -783,12 +1029,12 @@ function Felt({
783
1029
  }
784
1030
  )
785
1031
  ] }),
786
- /* @__PURE__ */ jsx2(Hint, { children: tekst.monsterForklaring })
1032
+ /* @__PURE__ */ jsx3(Hint, { children: tekst.monsterForklaring })
787
1033
  ]
788
1034
  }
789
1035
  ) : null,
790
- /* @__PURE__ */ jsx2(H, { children: spor === "onske" ? tekst.feltLabelOnske : tekst.feltLabelFeil }),
791
- /* @__PURE__ */ jsx2(
1036
+ /* @__PURE__ */ jsx3(H, { children: spor === "onske" ? tekst.feltLabelOnske : tekst.feltLabelFeil }),
1037
+ /* @__PURE__ */ jsx3(
792
1038
  TextInput,
793
1039
  {
794
1040
  testID: "innspill-tekst",
@@ -848,9 +1094,9 @@ function Felt({
848
1094
  paddingRight: tema.space.xs
849
1095
  },
850
1096
  children: [
851
- /* @__PURE__ */ jsx2(Text2, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.small }, children: "\u{1F4F7}" }),
852
- /* @__PURE__ */ jsx2(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: tekst.skjermbildeLagtVed }),
853
- /* @__PURE__ */ jsx2(
1097
+ /* @__PURE__ */ jsx3(Ikon, { navn: "image-outline", storrelse: "minste", farge: tema.color.textPrimary }),
1098
+ /* @__PURE__ */ jsx3(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: tekst.bildeLagtVed }),
1099
+ /* @__PURE__ */ jsx3(
854
1100
  Pressable2,
855
1101
  {
856
1102
  testID: "fjern-vedlegg",
@@ -858,38 +1104,38 @@ function Felt({
858
1104
  accessibilityLabel: tekst.fjernSkjermbilde,
859
1105
  onPress: onFjernVedlegg,
860
1106
  style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
861
- children: /* @__PURE__ */ jsx2(Text2, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: "\u2715" })
1107
+ children: /* @__PURE__ */ jsx3(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
862
1108
  }
863
1109
  )
864
1110
  ]
865
1111
  }
866
1112
  ) : onSkjermbilde || onVelgBilde ? /* @__PURE__ */ jsxs2(View2, { style: { gap: tema.space.sm }, children: [
867
- onSkjermbilde ? /* @__PURE__ */ jsx2(
1113
+ onSkjermbilde ? /* @__PURE__ */ jsx3(
868
1114
  Btn,
869
1115
  {
870
1116
  variant: "secondary",
871
1117
  testID: "legg-ved-skjermbilde",
872
- ikon: "\u{1F4F7}",
1118
+ ikon: "camera-outline",
873
1119
  label: tekst.leggVedSkjermbilde,
874
1120
  hint: tekst.leggVedHint,
875
1121
  onPress: onSkjermbilde
876
1122
  }
877
1123
  ) : null,
878
- onVelgBilde ? /* @__PURE__ */ jsx2(
1124
+ onVelgBilde ? /* @__PURE__ */ jsx3(
879
1125
  Btn,
880
1126
  {
881
1127
  variant: "secondary",
882
1128
  testID: "velg-bilde",
883
- ikon: "\u{1F5BC}",
1129
+ ikon: "images-outline",
884
1130
  label: tekst.velgBilde,
885
1131
  hint: tekst.velgBildeHint,
886
1132
  onPress: onVelgBilde
887
1133
  }
888
1134
  ) : null,
889
- bildeNotat ? /* @__PURE__ */ jsx2(View2, { testID: "bilde-notat", children: /* @__PURE__ */ jsx2(Hint, { children: bildeNotat }) }) : null
1135
+ bildeNotat ? /* @__PURE__ */ jsx3(View2, { testID: "bilde-notat", children: /* @__PURE__ */ jsx3(Hint, { children: bildeNotat }) }) : null
890
1136
  ] }) : null,
891
1137
  /* @__PURE__ */ jsxs2(View2, { style: { borderTopWidth: tema.hairline, borderTopColor: tema.color.border, paddingTop: tema.space.sm }, children: [
892
- /* @__PURE__ */ jsx2(
1138
+ /* @__PURE__ */ jsx3(
893
1139
  Pressable2,
894
1140
  {
895
1141
  testID: "kontekst-bryter",
@@ -898,11 +1144,19 @@ function Felt({
898
1144
  accessibilityLabel: `${tekst.kontekstLinje}${apen ? "" : tekst.kontekstVis}`,
899
1145
  onPress: () => setApen((a) => !a),
900
1146
  style: { minHeight: tema.touch, justifyContent: "center" },
901
- children: /* @__PURE__ */ jsxs2(Text2, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: [
902
- apen ? "\u25B4" : "\u25BE",
903
- " ",
904
- tekst.kontekstLinje,
905
- apen ? "" : tekst.kontekstVis
1147
+ children: /* @__PURE__ */ jsxs2(View2, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
1148
+ /* @__PURE__ */ jsx3(
1149
+ Ikon,
1150
+ {
1151
+ navn: apen ? "chevron-up-outline" : "chevron-down-outline",
1152
+ storrelse: "minste",
1153
+ farge: tema.color.textSecondary
1154
+ }
1155
+ ),
1156
+ /* @__PURE__ */ jsxs2(Text2, { style: { flex: 1, color: tema.color.textSecondary, fontSize: tema.font.small }, children: [
1157
+ tekst.kontekstLinje,
1158
+ apen ? "" : tekst.kontekstVis
1159
+ ] })
906
1160
  ] })
907
1161
  }
908
1162
  ),
@@ -919,9 +1173,9 @@ function Felt({
919
1173
  borderBottomColor: tema.color.border
920
1174
  },
921
1175
  children: [
922
- /* @__PURE__ */ jsx2(Text2, { style: { color: tema.color.textMuted, fontSize: tema.font.small, minWidth: tema.touch * 2 }, children: l.etikett }),
923
- /* @__PURE__ */ jsx2(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: l.verdi }),
924
- /* @__PURE__ */ jsx2(
1176
+ /* @__PURE__ */ jsx3(Text2, { style: { color: tema.color.textMuted, fontSize: tema.font.small, minWidth: tema.touch * 2 }, children: l.etikett }),
1177
+ /* @__PURE__ */ jsx3(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: l.verdi }),
1178
+ /* @__PURE__ */ jsx3(
925
1179
  Pressable2,
926
1180
  {
927
1181
  testID: `fjern-${l.felt}`,
@@ -929,9 +1183,9 @@ function Felt({
929
1183
  accessibilityLabel: `${tekst.kontekstFjern} ${l.etikett.toLowerCase()} fra innsendingen`,
930
1184
  onPress: () => onFjernKontekst(l.felt),
931
1185
  style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
932
- children: /* @__PURE__ */ jsxs2(Text2, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: [
933
- "\u2715 ",
934
- tekst.kontekstFjern
1186
+ children: /* @__PURE__ */ jsxs2(View2, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
1187
+ /* @__PURE__ */ jsx3(Ikon, { navn: "close-outline", storrelse: "minste", farge: tema.color.textSecondary }),
1188
+ /* @__PURE__ */ jsx3(Text2, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tekst.kontekstFjern })
935
1189
  ] })
936
1190
  }
937
1191
  )
@@ -939,18 +1193,19 @@ function Felt({
939
1193
  },
940
1194
  l.felt
941
1195
  )),
942
- /* @__PURE__ */ jsx2(View2, { style: { paddingTop: tema.space.sm }, children: /* @__PURE__ */ jsx2(Hint, { children: tekst.kontekstAldri }) })
1196
+ /* @__PURE__ */ jsx3(View2, { style: { paddingTop: tema.space.sm }, children: /* @__PURE__ */ jsx3(Hint, { children: tekst.kontekstAldri }) })
943
1197
  ] }) : null
944
1198
  ] })
945
1199
  ]
946
1200
  }
947
1201
  ),
948
- /* @__PURE__ */ jsx2(View2, { testID: "skjema-fot", style: { flexGrow: 1, flexShrink: 0, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx2(
1202
+ /* @__PURE__ */ jsx3(View2, { testID: "skjema-fot", style: { flexGrow: 1, flexShrink: 0, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx3(
949
1203
  Btn,
950
1204
  {
951
1205
  testID: "send",
952
- label: spor === "onske" && !forKort ? tekst.nesteOnske : tekst.send,
1206
+ label: sender ? tekst.sender : harFeil ? tekst.provIgjen : offline ? tekst.offlineLagre : tekst.send,
953
1207
  disabled: forKort || sender,
1208
+ busy: sender,
954
1209
  hint: forKort ? tekst.forKort(minTextLength) : harVedlegg ? tekst.sendHintMedBilde : void 0,
955
1210
  onPress: onSend
956
1211
  }
@@ -961,7 +1216,7 @@ function Felt({
961
1216
  // src/widget/Valg.tsx
962
1217
  import "react";
963
1218
  import { Pressable as Pressable3, Text as Text3, View as View3 } from "react-native";
964
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
1219
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
965
1220
  function Valg({ onVelg }) {
966
1221
  const tema = useTema();
967
1222
  const flate = (spor, ikon, label, under) => /* @__PURE__ */ jsxs3(
@@ -984,8 +1239,8 @@ function Valg({ onVelg }) {
984
1239
  padding: tema.space.md
985
1240
  },
986
1241
  children: [
987
- /* @__PURE__ */ jsx3(Text3, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.h1 }, children: ikon }),
988
- /* @__PURE__ */ jsx3(
1242
+ /* @__PURE__ */ jsx4(Ikon, { navn: ikon, storrelse: "stor", farge: tema.color.textPrimary }),
1243
+ /* @__PURE__ */ jsx4(
989
1244
  Text3,
990
1245
  {
991
1246
  style: {
@@ -997,15 +1252,15 @@ function Valg({ onVelg }) {
997
1252
  children: label
998
1253
  }
999
1254
  ),
1000
- /* @__PURE__ */ jsx3(Text3, { style: { color: tema.color.textMuted, fontSize: tema.font.small, textAlign: "center" }, children: under })
1255
+ /* @__PURE__ */ jsx4(Text3, { style: { color: tema.color.textMuted, fontSize: tema.font.small, textAlign: "center" }, children: under })
1001
1256
  ]
1002
1257
  }
1003
1258
  );
1004
1259
  return /* @__PURE__ */ jsxs3(View3, { style: { flex: 1, gap: tema.space.lg }, children: [
1005
- /* @__PURE__ */ jsx3(H, { sub: tekst.valgUnder, children: tekst.valgTittel }),
1006
- /* @__PURE__ */ jsx3(View3, { style: { flex: 1, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsxs3(View3, { style: { flexDirection: "row", gap: tema.space.md }, children: [
1007
- flate("feil", "\u{1F41E}", tekst.sporFeil, tekst.sporFeilUnder),
1008
- flate("onske", "\u{1F4A1}", tekst.sporOnske, tekst.sporOnskeUnder)
1260
+ /* @__PURE__ */ jsx4(H, { children: tekst.valgTittel }),
1261
+ /* @__PURE__ */ jsx4(View3, { style: { flex: 1, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsxs3(View3, { style: { flexDirection: "row", gap: tema.space.md }, children: [
1262
+ flate("feil", "bug-outline", tekst.sporFeil, tekst.sporFeilUnder),
1263
+ flate("onske", "bulb-outline", tekst.sporOnske, tekst.sporOnskeUnder)
1009
1264
  ] }) })
1010
1265
  ] });
1011
1266
  }
@@ -1013,11 +1268,13 @@ function Valg({ onVelg }) {
1013
1268
  // src/widget/KjenteFeil.tsx
1014
1269
  import "react";
1015
1270
  import { ActivityIndicator, ScrollView as ScrollView2, Text as Text4, View as View4 } from "react-native";
1016
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1271
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
1272
+ var MAKS_KORT = 3;
1017
1273
  function KjenteFeil({
1018
1274
  kort,
1019
1275
  spor,
1020
1276
  laster,
1277
+ sender,
1021
1278
  onJaOgsa,
1022
1279
  onLigner,
1023
1280
  onNei
@@ -1025,24 +1282,25 @@ function KjenteFeil({
1025
1282
  const tema = useTema();
1026
1283
  if (laster) {
1027
1284
  return /* @__PURE__ */ jsxs4(View4, { style: { flex: 1, gap: tema.space.md }, children: [
1028
- /* @__PURE__ */ jsx4(H, { sub: spor === "onske" ? tekst.kjenteFeilUnderOnske : tekst.kjenteFeilUnderFeil, children: spor === "onske" ? tekst.kjenteFeilTittelOnske : tekst.kjenteFeilTittelFeil }),
1029
- /* @__PURE__ */ jsx4(ActivityIndicator, { accessibilityLabel: "Sjekker kjente feil", color: tema.color.textSecondary })
1285
+ /* @__PURE__ */ jsx5(H, { sub: spor === "onske" ? tekst.kjenteFeilUnderOnske : tekst.kjenteFeilUnderFeil, children: spor === "onske" ? tekst.kjenteFeilTittelOnske : tekst.kjenteFeilTittelFeil }),
1286
+ /* @__PURE__ */ jsx5(ActivityIndicator, { accessibilityLabel: "Sjekker kjente feil", color: tema.color.textSecondary })
1030
1287
  ] });
1031
1288
  }
1032
1289
  return /* @__PURE__ */ jsxs4(View4, { testID: "kjente-feil", style: { flexGrow: 1, flexShrink: 1, gap: tema.space.md }, children: [
1033
- /* @__PURE__ */ jsx4(H, { sub: spor === "onske" ? tekst.kjenteFeilUnderOnske : tekst.kjenteFeilUnderFeil, children: spor === "onske" ? tekst.kjenteFeilTittelOnske : tekst.kjenteFeilTittelFeil }),
1034
- /* @__PURE__ */ jsx4(
1290
+ /* @__PURE__ */ jsx5(H, { sub: spor === "onske" ? tekst.kjenteFeilUnderOnske : tekst.kjenteFeilUnderFeil, children: spor === "onske" ? tekst.kjenteFeilTittelOnske : tekst.kjenteFeilTittelFeil }),
1291
+ /* @__PURE__ */ jsx5(
1035
1292
  ScrollView2,
1036
1293
  {
1037
1294
  testID: "kjente-feil-liste",
1038
1295
  style: { flexGrow: 0, flexShrink: 1 },
1039
1296
  contentContainerStyle: { gap: tema.space.md },
1040
1297
  keyboardShouldPersistTaps: "handled",
1041
- children: kort.map((k) => {
1298
+ children: kort.slice(0, MAKS_KORT).map((k) => {
1299
+ const o = knownIssueStatus[k.status] ?? knownIssueStatus.aktiv;
1042
1300
  const versjon = k.fixedIn ? k.status === "fikset" ? tekst.rettetI(k.fixedIn) : tekst.rettesI(k.fixedIn) : void 0;
1043
- const kontekst = versjon ? `${k.title}. ${versjon}` : k.title;
1301
+ const kontekst = versjon ? `${k.title}. ${o.etikett}. ${versjon}` : `${k.title}. ${o.etikett}`;
1044
1302
  return /* @__PURE__ */ jsxs4(Card, { children: [
1045
- /* @__PURE__ */ jsx4(
1303
+ /* @__PURE__ */ jsx5(
1046
1304
  Text4,
1047
1305
  {
1048
1306
  style: {
@@ -1069,26 +1327,24 @@ function KjenteFeil({
1069
1327
  ]
1070
1328
  }
1071
1329
  ) : null,
1072
- versjon ? /* @__PURE__ */ jsx4(
1073
- StatusPill,
1074
- {
1075
- ikon: k.status === "fikset" ? "\u2713" : "\u{1F527}",
1076
- etikett: versjon,
1077
- farge: k.status === "fikset" ? "success" : "info"
1078
- }
1079
- ) : null,
1330
+ /* @__PURE__ */ jsxs4(View4, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.sm, flexWrap: "wrap" }, children: [
1331
+ /* @__PURE__ */ jsx5(StatusPill, { ikon: o.ikon, etikett: o.etikett, fg: o.fg, bg: o.bg }),
1332
+ versjon ? /* @__PURE__ */ jsx5(Text4, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: versjon }) : null
1333
+ ] }),
1080
1334
  /* @__PURE__ */ jsxs4(View4, { style: { flexDirection: "row", gap: tema.space.sm }, children: [
1081
- /* @__PURE__ */ jsx4(
1335
+ /* @__PURE__ */ jsx5(
1082
1336
  Btn,
1083
1337
  {
1084
1338
  grow: true,
1085
1339
  testID: `ja-ogsa-${k.id}`,
1086
1340
  label: tekst.svarJa,
1087
1341
  accessibilityLabel: `${tekst.svarJa}. ${kontekst}`,
1342
+ disabled: sender,
1343
+ busy: sender,
1088
1344
  onPress: () => onJaOgsa(k)
1089
1345
  }
1090
1346
  ),
1091
- /* @__PURE__ */ jsx4(
1347
+ /* @__PURE__ */ jsx5(
1092
1348
  Btn,
1093
1349
  {
1094
1350
  grow: true,
@@ -1096,6 +1352,7 @@ function KjenteFeil({
1096
1352
  testID: `ligner-${k.id}`,
1097
1353
  label: tekst.svarLigner,
1098
1354
  accessibilityLabel: `${tekst.svarLigner}. ${kontekst}`,
1355
+ disabled: sender,
1099
1356
  onPress: () => onLigner(k)
1100
1357
  }
1101
1358
  )
@@ -1104,46 +1361,79 @@ function KjenteFeil({
1104
1361
  })
1105
1362
  }
1106
1363
  ),
1107
- /* @__PURE__ */ jsx4(View4, { testID: "kjente-feil-fot", style: { flexShrink: 0 }, children: /* @__PURE__ */ jsx4(Btn, { variant: "secondary", testID: "nei-noe-annet", label: tekst.svarNei, onPress: onNei }) })
1364
+ /* @__PURE__ */ jsx5(View4, { testID: "kjente-feil-fot", style: { flexShrink: 0 }, children: /* @__PURE__ */ jsx5(Btn, { variant: "secondary", testID: "nei-noe-annet", label: tekst.svarNei, disabled: sender, onPress: onNei }) })
1108
1365
  ] });
1109
1366
  }
1110
1367
 
1111
1368
  // src/widget/Kvittering.tsx
1112
1369
  import "react";
1113
1370
  import { Text as Text5, View as View5 } from "react-native";
1114
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
1371
+
1372
+ // src/widget/status.ts
1373
+ function formaterFrist(iso) {
1374
+ const d = new Date(iso);
1375
+ if (Number.isNaN(d.getTime())) return iso;
1376
+ return new Intl.DateTimeFormat("nb-NO", { day: "numeric", month: "long" }).format(d);
1377
+ }
1378
+ function statusVisning(status, type, deadlineAt) {
1379
+ const o = submissionStatus[status];
1380
+ const spor = type === "onske" ? "onske" : "feil";
1381
+ return {
1382
+ ikon: o.ikon,
1383
+ etikett: o.etikett[spor],
1384
+ fg: o.fg,
1385
+ bg: o.bg,
1386
+ lofte: settInnFrist(o.lofte[spor], deadlineAt)
1387
+ };
1388
+ }
1389
+ function settInnFrist(mal, deadlineAt) {
1390
+ if (!mal.includes("{frist}")) return mal;
1391
+ return deadlineAt ? mal.replace("{frist}", formaterFrist(deadlineAt)) : lofteUtenFrist;
1392
+ }
1393
+ var venterVisning = {
1394
+ ikon: "cloud-offline-outline",
1395
+ etikett: "Venter p\xE5 nett",
1396
+ fg: "textSecondary",
1397
+ bg: "neutralBg",
1398
+ lofte: lofte.venterNett
1399
+ };
1400
+
1401
+ // src/widget/Kvittering.tsx
1402
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
1115
1403
  function Kvittering({
1116
1404
  art,
1117
1405
  saksnummer,
1118
1406
  vedlegg,
1407
+ frist,
1119
1408
  onLukk
1120
1409
  }) {
1121
1410
  const tema = useTema();
1122
1411
  const innhold = {
1123
1412
  feil: { h: tekst.kvitteringSendt, p: tekst.kvitteringFeil },
1124
- onske: { h: tekst.kvitteringSendt, p: tekst.kvitteringOnske },
1413
+ // Løftet er NØYAKTIG det «Mine innspill» og panelet viser for «Vurderes»:
1414
+ // det leses fra temaet, så kvitteringen og statusen ikke kan si to ting.
1415
+ onske: { h: tekst.kvitteringSendt, p: statusVisning("vurderes", "onske", frist).lofte },
1125
1416
  jaOgsa: { h: tekst.kvitteringRegistrert, p: tekst.kvitteringJaOgsa },
1126
1417
  // Køet offline: kvitteringen kan IKKE love svar på noe som ikke er sendt
1127
1418
  // (DD-41 presiserer DD-07). Den lover bare at det sendes.
1128
- k\u00F8: { h: tekst.offlineTittel, p: tekst.offlineBanner }
1419
+ k\u00F8: { h: tekst.koKvitteringTittel, p: tekst.offlineBanner }
1129
1420
  }[art];
1130
1421
  const overskrift = vedlegg === "feilet" ? tekst.kvitteringVedleggFeilet : innhold.h;
1131
1422
  const brodtekst = vedlegg === "feilet" ? `${tekst.tekstenErLagret} ${innhold.p}` : innhold.p;
1132
1423
  return /* @__PURE__ */ jsxs5(View5, { style: { flex: 1, justifyContent: "center", gap: tema.space.lg }, children: [
1133
1424
  /* @__PURE__ */ jsxs5(View5, { style: { alignItems: "center", gap: tema.space.md }, children: [
1134
- /* @__PURE__ */ jsx5(
1135
- Text5,
1425
+ /* @__PURE__ */ jsx6(
1426
+ Ikon,
1136
1427
  {
1137
- accessibilityElementsHidden: true,
1138
- importantForAccessibility: "no",
1139
- style: { fontSize: tema.font.h1 * 2, color: art === "k\xF8" ? tema.color.neutral : tema.color.success },
1140
- children: art === "k\xF8" ? "\u21C5" : "\u2713"
1428
+ navn: art === "k\xF8" ? "swap-vertical-outline" : "checkmark-circle-outline",
1429
+ storrelse: "stor",
1430
+ farge: art === "k\xF8" ? tema.color.neutral : tema.color.success
1141
1431
  }
1142
1432
  ),
1143
- /* @__PURE__ */ jsx5(H, { children: overskrift }),
1144
- vedlegg === "feilet" ? /* @__PURE__ */ jsx5(Banner, { ikon: "\u26A0", tone: "warning", children: tekst.vedleggFeiletBanner }) : null,
1145
- vedlegg === "forkastet" ? /* @__PURE__ */ jsx5(Banner, { ikon: "\u{1F4F7}", tone: "info", children: tekst.offlineUtenBilde }) : null,
1146
- /* @__PURE__ */ jsx5(
1433
+ /* @__PURE__ */ jsx6(H, { children: overskrift }),
1434
+ vedlegg === "feilet" ? /* @__PURE__ */ jsx6(Banner, { ikon: "warning-outline", tone: "warning", children: tekst.vedleggFeiletBanner }) : null,
1435
+ vedlegg === "forkastet" ? /* @__PURE__ */ jsx6(Banner, { ikon: "image-outline", tone: "info", children: tekst.offlineUtenBilde }) : null,
1436
+ /* @__PURE__ */ jsx6(
1147
1437
  Text5,
1148
1438
  {
1149
1439
  testID: "kvittering-tekst",
@@ -1158,72 +1448,16 @@ function Kvittering({
1158
1448
  children: brodtekst
1159
1449
  }
1160
1450
  ),
1161
- saksnummer ? /* @__PURE__ */ jsx5(Hint, { children: vedlegg === "feilet" ? tekst.saksnummerUtenVedlegg(saksnummer) : tekst.saksnummer(saksnummer) }) : null
1451
+ saksnummer ? /* @__PURE__ */ jsx6(Hint, { children: vedlegg === "feilet" ? tekst.saksnummerUtenVedlegg(saksnummer) : tekst.saksnummer(saksnummer) }) : null
1162
1452
  ] }),
1163
- /* @__PURE__ */ jsx5(Btn, { testID: "tilbake-til-appen", label: tekst.tilbakeTilAppen, onPress: onLukk })
1453
+ /* @__PURE__ */ jsx6(Btn, { testID: "tilbake-til-appen", label: tekst.tilbakeTilAppen, onPress: onLukk })
1164
1454
  ] });
1165
1455
  }
1166
1456
 
1167
1457
  // src/widget/MineInnspill.tsx
1168
1458
  import "react";
1169
1459
  import { ActivityIndicator as ActivityIndicator2, ScrollView as ScrollView3, Text as Text6, View as View6 } from "react-native";
1170
-
1171
- // src/widget/status.ts
1172
- var IKON = {
1173
- ny: "\u23F1",
1174
- vurderes: "\u23F1",
1175
- planlagt: "\u{1F4C5}",
1176
- bygges: "\u{1F527}",
1177
- levert: "\u2713",
1178
- kjent_feil: "\u{1F441}",
1179
- duplikat: "\u2715",
1180
- avvist: "\u2715",
1181
- venterNett: "\u23F3"
1182
- };
1183
- function formaterFrist(iso) {
1184
- const d = new Date(iso);
1185
- if (Number.isNaN(d.getTime())) return iso;
1186
- return new Intl.DateTimeFormat("nb-NO", { day: "numeric", month: "long" }).format(d);
1187
- }
1188
- function statusVisning(status, type, deadlineAt) {
1189
- switch (status) {
1190
- case "ny":
1191
- return { ikon: IKON.ny, etikett: "Mottatt", farge: "neutral", lofte: lofte.ny };
1192
- case "vurderes":
1193
- return {
1194
- ikon: IKON.vurderes,
1195
- etikett: "Vurderes",
1196
- farge: "warning",
1197
- lofte: deadlineAt ? lofte.vurderes(formaterFrist(deadlineAt)) : lofte.vurderesUtenFrist
1198
- };
1199
- case "planlagt":
1200
- return { ikon: IKON.planlagt, etikett: "Planlagt", farge: "success", lofte: lofte.planlagt };
1201
- case "bygges":
1202
- return { ikon: IKON.bygges, etikett: "Retter n\xE5", farge: "info", lofte: lofte.bygges };
1203
- case "levert":
1204
- return type === "onske" ? { ikon: IKON.levert, etikett: "Levert", farge: "success", lofte: lofte.levert } : { ikon: IKON.levert, etikett: "Rettet", farge: "success", lofte: lofte.rettet };
1205
- case "kjent_feil":
1206
- return {
1207
- ikon: IKON.kjent_feil,
1208
- etikett: "Kjent, ikke planlagt",
1209
- farge: "neutral",
1210
- lofte: lofte.kjentFeil
1211
- };
1212
- case "duplikat":
1213
- return { ikon: IKON.duplikat, etikett: "Sl\xE5tt sammen", farge: "neutral", lofte: lofte.duplikat };
1214
- case "avvist":
1215
- return { ikon: IKON.avvist, etikett: "Avvist", farge: "danger", lofte: lofte.avvist };
1216
- }
1217
- }
1218
- var venterVisning = {
1219
- ikon: IKON.venterNett,
1220
- etikett: "Venter p\xE5 nett",
1221
- farge: "neutral",
1222
- lofte: lofte.venterNett
1223
- };
1224
-
1225
- // src/widget/MineInnspill.tsx
1226
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
1460
+ import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
1227
1461
  function MineInnspill({
1228
1462
  rader,
1229
1463
  laster,
@@ -1232,20 +1466,15 @@ function MineInnspill({
1232
1466
  }) {
1233
1467
  const tema = useTema();
1234
1468
  return /* @__PURE__ */ jsxs6(View6, { style: { flex: 1, gap: tema.space.md }, children: [
1235
- /* @__PURE__ */ jsx6(H, { sub: tekst.mineUnder, children: tekst.mineTittel }),
1236
- laster ? /* @__PURE__ */ jsx6(ActivityIndicator2, { accessibilityLabel: "Henter innspillene dine", color: tema.color.textSecondary }) : rader.length === 0 ? /* @__PURE__ */ jsx6(Hint, { children: tekst.mineTom }) : /* @__PURE__ */ jsx6(ScrollView3, { style: { flex: 1 }, contentContainerStyle: { gap: tema.space.sm }, children: rader.map((rad) => {
1469
+ /* @__PURE__ */ jsx7(H, { sub: tekst.mineUnder, children: tekst.mineTittel }),
1470
+ 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) => {
1237
1471
  const venter = rad.pending === true;
1238
1472
  const v = venter ? venterVisning : statusVisning(rad.status, rad.type, rad.deadlineAt);
1239
1473
  const nokkel = venter ? rad.clientRef : rad.id;
1240
1474
  const svar = venter ? void 0 : rad.reply;
1241
1475
  return /* @__PURE__ */ jsxs6(Card, { dashed: venter, children: [
1242
- /* @__PURE__ */ jsxs6(Hint, { children: [
1243
- venter ? tekst.mineIkkeSendt : tekst.mineSak(rad.id),
1244
- " \xB7",
1245
- " ",
1246
- rad.type === "onske" ? "\xF8nske" : "feil"
1247
- ] }),
1248
- /* @__PURE__ */ jsx6(
1476
+ /* @__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) }),
1477
+ /* @__PURE__ */ jsx7(
1249
1478
  Text6,
1250
1479
  {
1251
1480
  style: {
@@ -1257,12 +1486,12 @@ function MineInnspill({
1257
1486
  }
1258
1487
  ),
1259
1488
  /* @__PURE__ */ jsxs6(View6, { style: { gap: tema.space.xs }, children: [
1260
- /* @__PURE__ */ jsx6(StatusPill, { ikon: v.ikon, etikett: v.etikett, farge: v.farge }),
1261
- /* @__PURE__ */ jsx6(Hint, { children: v.lofte })
1489
+ /* @__PURE__ */ jsx7(StatusPill, { ikon: v.ikon, etikett: v.etikett, fg: v.fg, bg: v.bg }),
1490
+ /* @__PURE__ */ jsx7(Hint, { children: v.lofte })
1262
1491
  ] }),
1263
1492
  !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 })
1493
+ /* @__PURE__ */ jsx7(Ikon, { navn: "trash-outline", storrelse: "minste", farge: tema.color.textMuted }),
1494
+ /* @__PURE__ */ jsx7(Hint, { children: tekst.bildeFjernet })
1266
1495
  ] }) : null,
1267
1496
  svar ? /* @__PURE__ */ jsxs6(
1268
1497
  View6,
@@ -1274,8 +1503,8 @@ function MineInnspill({
1274
1503
  gap: tema.space.xs
1275
1504
  },
1276
1505
  children: [
1277
- /* @__PURE__ */ jsx6(Text6, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tenantName ? tekst.svarFra(tenantName) : tekst.svarFraGenerisk }),
1278
- /* @__PURE__ */ jsx6(
1506
+ /* @__PURE__ */ jsx7(Text6, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tenantName ? tekst.svarFra(tenantName) : tekst.svarFraGenerisk }),
1507
+ /* @__PURE__ */ jsx7(
1279
1508
  Text6,
1280
1509
  {
1281
1510
  style: {
@@ -1291,15 +1520,15 @@ function MineInnspill({
1291
1520
  ) : null
1292
1521
  ] }, nokkel);
1293
1522
  }) }),
1294
- /* @__PURE__ */ jsx6(Btn, { testID: "send-nytt", label: tekst.sendNytt, onPress: onNytt })
1523
+ /* @__PURE__ */ jsx7(Btn, { testID: "send-nytt", label: rader.length === 0 ? tekst.sendForste : tekst.sendNytt, onPress: onNytt })
1295
1524
  ] });
1296
1525
  }
1297
1526
 
1298
1527
  // src/widget/Skjermbilde.tsx
1299
1528
  import { skaler, strokTilRekter, treffer, trykkTilRekt } from "@innspel/core";
1300
1529
  import { useCallback, useMemo as useMemo2, useRef, useState as useState2 } from "react";
1301
- import { Image as Image2, Pressable as Pressable4, Text as Text7, View as View7 } from "react-native";
1302
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
1530
+ import { Image as Image2, Pressable as Pressable4, StyleSheet, Text as Text7, View as View7 } from "react-native";
1531
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
1303
1532
  function Skjermbilde({
1304
1533
  bilde,
1305
1534
  automaskerRot,
@@ -1381,8 +1610,8 @@ function Skjermbilde({
1381
1610
  backgroundColor: valgt ? tema.color.surfaceRaised : "transparent"
1382
1611
  },
1383
1612
  children: [
1384
- /* @__PURE__ */ jsx7(Text7, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.body }, children: ikon }),
1385
- /* @__PURE__ */ jsx7(
1613
+ /* @__PURE__ */ jsx8(Ikon, { navn: ikon, farge: tema.color.textPrimary }),
1614
+ /* @__PURE__ */ jsx8(
1386
1615
  Text7,
1387
1616
  {
1388
1617
  style: {
@@ -1399,29 +1628,29 @@ function Skjermbilde({
1399
1628
  );
1400
1629
  };
1401
1630
  const a11y = tekst.skjermbildeA11y(automasker.length, egne.length, allTekst);
1402
- return /* @__PURE__ */ jsxs7(View7, { style: { flex: 1, gap: tema.space.md }, children: [
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,
1631
+ return /* @__PURE__ */ jsxs7(View7, { testID: "skjermbilde-steg", style: { flexGrow: 1, flexShrink: 1, gap: tema.space.md }, children: [
1632
+ /* @__PURE__ */ jsx8(H, { sub: kilde === "galleri" ? tekst.skjermbildeUnderGalleri : tekst.skjermbildeUnder, children: tekst.skjermbildeTittel }),
1633
+ notat ? /* @__PURE__ */ jsx8(View7, { testID: "bilde-notat", children: /* @__PURE__ */ jsx8(Hint, { children: notat }) }) : null,
1405
1634
  /* @__PURE__ */ jsxs7(View7, { accessibilityRole: "toolbar", accessibilityLabel: tekst.maskering, style: { flexDirection: "row", gap: tema.space.sm }, children: [
1406
- knapp("felt", "\u25A3", tekst.maskerFelt),
1407
- knapp("pensel", "\u270E", tekst.tegnOver),
1408
- knapp("allTekst", "\u25A6", tekst.maskerAllTekst)
1635
+ knapp("felt", "scan-outline", tekst.maskerFelt),
1636
+ knapp("pensel", "brush-outline", tekst.tegnOver),
1637
+ knapp("allTekst", "grid-outline", tekst.maskerAllTekst)
1409
1638
  ] }),
1410
- /* @__PURE__ */ jsx7(
1639
+ /* @__PURE__ */ jsx8(
1411
1640
  View7,
1412
1641
  {
1413
1642
  testID: "skjermbilde-ramme",
1414
1643
  onLayout,
1415
1644
  style: {
1416
- flex: 1,
1645
+ flexGrow: 1,
1646
+ flexShrink: 1,
1647
+ flexBasis: 0,
1417
1648
  minHeight: tema.touch * 5,
1418
- alignItems: "center",
1419
- justifyContent: "center",
1420
1649
  backgroundColor: screenRules.previewBackdrop,
1421
1650
  borderRadius: tema.radius.md,
1422
1651
  overflow: "hidden"
1423
1652
  },
1424
- children: visning ? /* @__PURE__ */ jsxs7(
1653
+ children: /* @__PURE__ */ jsx8(View7, { testID: "skjermbilde-flate", pointerEvents: "box-none", style: [StyleSheet.absoluteFill, { alignItems: "center", justifyContent: "center" }], children: visning ? /* @__PURE__ */ jsxs7(
1425
1654
  View7,
1426
1655
  {
1427
1656
  ref: previewRef,
@@ -1437,7 +1666,7 @@ function Skjermbilde({
1437
1666
  onResponderTerminate: onRelease,
1438
1667
  style: { width: visning.width, height: visning.height, backgroundColor: screenRules.previewBackdrop },
1439
1668
  children: [
1440
- /* @__PURE__ */ jsx7(
1669
+ /* @__PURE__ */ jsx8(
1441
1670
  Image2,
1442
1671
  {
1443
1672
  testID: "skjermbilde-bilde",
@@ -1447,7 +1676,7 @@ function Skjermbilde({
1447
1676
  accessibilityIgnoresInvertColors: true
1448
1677
  }
1449
1678
  ),
1450
- automasker.map((r, i) => /* @__PURE__ */ jsx7(
1679
+ automasker.map((r, i) => /* @__PURE__ */ jsx8(
1451
1680
  View7,
1452
1681
  {
1453
1682
  testID: `automask-${i}`,
@@ -1464,14 +1693,20 @@ function Skjermbilde({
1464
1693
  alignItems: "center",
1465
1694
  justifyContent: "center"
1466
1695
  },
1467
- children: !komponerer ? /* @__PURE__ */ jsxs7(Text7, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, numberOfLines: 1, children: [
1468
- "\u{1F512} ",
1469
- tekst.maskertAvAppen
1470
- ] }) : null
1696
+ children: !komponerer ? (
1697
+ // Etiketten står PÅ den maskerte flaten og måles mot NETTOPP den
1698
+ // (skjermKontrastpar i theme.ts). textSecondary var 2,2:1 (C11a).
1699
+ // Ikonet arver samme farge: det er unntaket i «Styling» — maskeringen
1700
+ // tegnes i faste signalfarger, ikke i palettens.
1701
+ /* @__PURE__ */ jsxs7(View7, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
1702
+ /* @__PURE__ */ jsx8(Ikon, { navn: "lock-closed-outline", storrelse: "minste", farge: screenRules.autoMaskText }),
1703
+ /* @__PURE__ */ jsx8(Text7, { style: { color: screenRules.autoMaskText, fontSize: tema.font.small }, numberOfLines: 1, children: tekst.maskertAvAppen })
1704
+ ] })
1705
+ ) : null
1471
1706
  },
1472
1707
  `auto-${i}`
1473
1708
  )),
1474
- egne.map((r, i) => /* @__PURE__ */ jsx7(
1709
+ egne.map((r, i) => /* @__PURE__ */ jsx8(
1475
1710
  View7,
1476
1711
  {
1477
1712
  testID: `maske-${i}`,
@@ -1482,24 +1717,45 @@ function Skjermbilde({
1482
1717
  ))
1483
1718
  ]
1484
1719
  }
1485
- ) : null
1720
+ ) : null })
1486
1721
  }
1487
1722
  ),
1488
- automasker.length ? /* @__PURE__ */ jsxs7(Hint, { children: [
1489
- "\u{1F512} ",
1490
- tekst.maskertAvAppenHint
1723
+ automasker.length ? /* @__PURE__ */ jsxs7(View7, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
1724
+ /* @__PURE__ */ jsx8(Ikon, { navn: "lock-closed-outline", storrelse: "minste", farge: tema.color.textMuted }),
1725
+ /* @__PURE__ */ jsx8(Hint, { children: tekst.maskertAvAppenHint })
1491
1726
  ] }) : null,
1492
- egne.length ? /* @__PURE__ */ jsx7(Hint, { children: tekst.dittStrok }) : null,
1493
- allTekst ? /* @__PURE__ */ jsx7(Hint, { children: tekst.allTekstHint }) : null,
1494
- /* @__PURE__ */ jsxs7(View7, { style: { gap: tema.space.sm }, children: [
1495
- /* @__PURE__ */ jsx7(Btn, { variant: "danger", testID: "fjern-bildet", ikon: "\u{1F5D1}", label: tekst.fjernBildet, onPress: onFjern, disabled: komponerer }),
1496
- /* @__PURE__ */ jsx7(Btn, { testID: "legg-ved", label: tekst.leggVedOgFortsett, onPress: onLeggVed, disabled: komponerer || !visning, hint: tekst.leggVedHintDD42 })
1727
+ egne.length ? /* @__PURE__ */ jsx8(Hint, { children: tekst.dittStrok }) : null,
1728
+ allTekst ? /* @__PURE__ */ jsx8(Hint, { children: tekst.allTekstHint }) : null,
1729
+ /* @__PURE__ */ jsxs7(View7, { testID: "skjermbilde-fot", style: { flexShrink: 0, gap: tema.space.sm }, children: [
1730
+ /* @__PURE__ */ jsx8(
1731
+ Btn,
1732
+ {
1733
+ variant: "secondary",
1734
+ testID: "angre-siste",
1735
+ label: tekst.angreSiste,
1736
+ accessibilityLabel: tekst.angreSisteA11y,
1737
+ disabled: komponerer || egne.length === 0,
1738
+ onPress: () => setEgne((x) => x.slice(0, -1))
1739
+ }
1740
+ ),
1741
+ /* @__PURE__ */ jsx8(
1742
+ Btn,
1743
+ {
1744
+ variant: "danger",
1745
+ testID: "fjern-bildet",
1746
+ ikon: "trash-outline",
1747
+ label: tekst.fjernBildet,
1748
+ onPress: onFjern,
1749
+ disabled: komponerer
1750
+ }
1751
+ ),
1752
+ /* @__PURE__ */ jsx8(Btn, { testID: "legg-ved", label: tekst.leggVed, onPress: onLeggVed, disabled: komponerer || !visning })
1497
1753
  ] })
1498
1754
  ] });
1499
1755
  }
1500
1756
 
1501
1757
  // src/widget/Widget.tsx
1502
- import { Fragment, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
1758
+ import { Fragment, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
1503
1759
  var FANGST = { format: "jpg", quality: 0.85 };
1504
1760
  function Widget({
1505
1761
  client,
@@ -1522,6 +1778,7 @@ function Widget({
1522
1778
  const [funn, setFunn] = useState3([]);
1523
1779
  const [fjernede, setFjernede] = useState3([]);
1524
1780
  const [sender, setSender] = useState3(false);
1781
+ const online = useNettstatus(client);
1525
1782
  const [feil, setFeil] = useState3();
1526
1783
  const [kvittering, setKvittering] = useState3();
1527
1784
  const [mine, setMine] = useState3([]);
@@ -1657,12 +1914,21 @@ function Widget({
1657
1914
  setVedlegg(void 0);
1658
1915
  setSteg("felt");
1659
1916
  }, []);
1660
- const send = useCallback2(async () => {
1661
- if (spor === "onske" && steg === "felt" && kort.length === 0 && !lasterKort) {
1917
+ const gaaTilbake = useCallback2(() => {
1918
+ setFeil(void 0);
1919
+ if (steg === "skjermbilde") {
1920
+ setBilde(void 0);
1921
+ setAutomasker([]);
1922
+ setSteg("felt");
1923
+ return;
1924
+ }
1925
+ if (steg === "felt" && spor === "feil" && kort.length > 0) {
1662
1926
  setSteg("kjenteFeil");
1663
- await hentKort();
1664
1927
  return;
1665
1928
  }
1929
+ setSteg("valg");
1930
+ }, [steg, spor, kort.length]);
1931
+ const send = useCallback2(async () => {
1666
1932
  setSender(true);
1667
1933
  setFeil(void 0);
1668
1934
  try {
@@ -1679,6 +1945,8 @@ function Widget({
1679
1945
  setKvittering({
1680
1946
  art: spor,
1681
1947
  nr: res.submission.id,
1948
+ // Tidsløftet i kvitteringen er DATOEN fra svaret, aldri «innen 90 dager» (DD-07, DD-28).
1949
+ ...res.submission.deadlineAt ? { frist: res.submission.deadlineAt } : {},
1682
1950
  ...res.attachment?.status === "failed" ? { vedlegg: "feilet" } : {}
1683
1951
  });
1684
1952
  }
@@ -1690,7 +1958,7 @@ function Widget({
1690
1958
  } finally {
1691
1959
  setSender(false);
1692
1960
  }
1693
- }, [client, spor, steg, verdi, vedlegg, lenketTil, fjernede, kort.length, lasterKort, hentKort]);
1961
+ }, [client, spor, verdi, vedlegg, lenketTil, fjernede]);
1694
1962
  const jaOgsa = useCallback2(
1695
1963
  async (k) => {
1696
1964
  setSender(true);
@@ -1717,7 +1985,7 @@ function Widget({
1717
1985
  setLasterMine(false);
1718
1986
  }
1719
1987
  }, [client]);
1720
- return /* @__PURE__ */ jsx8(
1988
+ return /* @__PURE__ */ jsx9(
1721
1989
  Modal,
1722
1990
  {
1723
1991
  visible: synlig,
@@ -1725,7 +1993,7 @@ function Widget({
1725
1993
  animationType: "slide",
1726
1994
  onRequestClose: lukk,
1727
1995
  accessibilityViewIsModal: true,
1728
- children: /* @__PURE__ */ jsx8(
1996
+ children: /* @__PURE__ */ jsx9(
1729
1997
  KeyboardAvoidingView,
1730
1998
  {
1731
1999
  behavior: "padding",
@@ -1747,12 +2015,15 @@ function Widget({
1747
2015
  paddingRight: tema.screenPadding + insets.right,
1748
2016
  gap: tema.space.md,
1749
2017
  maxHeight: "92%",
1750
- minHeight: "60%"
2018
+ minHeight: "60%",
2019
+ // Bildesteget får fast høyde: forhåndsvisningen tilpasses plassen som er igjen, og
2020
+ // uten en kjent høyde har den ingen øvre grense (se Skjermbilde.tsx).
2021
+ ...steg === "skjermbilde" ? { height: "92%" } : {}
1751
2022
  },
1752
2023
  children: [
1753
2024
  /* @__PURE__ */ jsxs8(View8, { style: { flexDirection: "row", justifyContent: "space-between", alignItems: "center" }, children: [
1754
- steg === "skjermbilde" ? /* @__PURE__ */ jsx8(Btn, { variant: "ghost", testID: "tilbake", ikon: "\u2190", label: tekst.tilbake, onPress: fjernBilde }) : steg !== "valg" && steg !== "kvittering" ? /* @__PURE__ */ jsx8(Btn, { variant: "ghost", testID: "tilbake", ikon: "\u2190", label: tekst.tilbake, onPress: nullstill }) : /* @__PURE__ */ jsx8(View8, {}),
1755
- /* @__PURE__ */ jsx8(
2025
+ steg !== "valg" && steg !== "kvittering" ? /* @__PURE__ */ jsx9(Btn, { variant: "ghost", testID: "tilbake", ikon: "arrow-back-outline", label: tekst.tilbake, onPress: gaaTilbake }) : /* @__PURE__ */ jsx9(View8, {}),
2026
+ /* @__PURE__ */ jsx9(
1756
2027
  Pressable5,
1757
2028
  {
1758
2029
  testID: "lukk",
@@ -1760,30 +2031,32 @@ function Widget({
1760
2031
  accessibilityLabel: tekst.lukk,
1761
2032
  onPress: lukk,
1762
2033
  style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
1763
- children: /* @__PURE__ */ jsx8(Text8, { style: { color: tema.color.textSecondary, fontSize: tema.font.body }, children: "\u2715" })
2034
+ children: /* @__PURE__ */ jsx9(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
1764
2035
  }
1765
2036
  )
1766
2037
  ] }),
1767
- feil ? /* @__PURE__ */ jsx8(Banner, { live: true, ikon: "\u26A0", tone: "danger", children: tekst.sendefeilBanner(feil) }) : null,
2038
+ feil ? /* @__PURE__ */ jsx9(Banner, { live: true, ikon: "warning-outline", tone: "danger", children: tekst.sendefeilBanner(feil) }) : null,
2039
+ !online && steg !== "kvittering" && steg !== "mine" ? /* @__PURE__ */ jsx9(Banner, { ikon: "cloud-offline-outline", tone: "info", testID: "offline-banner", children: tekst.offlineBanner }) : null,
1768
2040
  steg === "valg" ? /* @__PURE__ */ jsxs8(Fragment, { children: [
1769
- /* @__PURE__ */ jsx8(Valg, { onVelg: velgSpor }),
1770
- /* @__PURE__ */ jsx8(Btn, { variant: "ghost", testID: "mine-innspill", ikon: "\u{1F4CB}", label: tekst.mineTittel, onPress: visMine })
2041
+ /* @__PURE__ */ jsx9(Valg, { onVelg: velgSpor }),
2042
+ /* @__PURE__ */ jsx9(Btn, { variant: "ghost", testID: "mine-innspill", ikon: "list-outline", label: tekst.mineTittel, onPress: visMine })
1771
2043
  ] }) : null,
1772
- steg === "kjenteFeil" ? /* @__PURE__ */ jsx8(
2044
+ steg === "kjenteFeil" ? /* @__PURE__ */ jsx9(
1773
2045
  KjenteFeil,
1774
2046
  {
1775
2047
  kort,
1776
2048
  spor,
1777
2049
  laster: lasterKort,
2050
+ sender,
1778
2051
  onJaOgsa: jaOgsa,
1779
2052
  onLigner: (k) => {
1780
2053
  setLenketTil(k);
1781
2054
  setSteg("felt");
1782
2055
  },
1783
- onNei: () => spor === "onske" ? void send() : setSteg("felt")
2056
+ onNei: () => setSteg("felt")
1784
2057
  }
1785
2058
  ) : null,
1786
- steg === "felt" ? /* @__PURE__ */ jsx8(
2059
+ steg === "felt" ? /* @__PURE__ */ jsx9(
1787
2060
  Felt,
1788
2061
  {
1789
2062
  spor,
@@ -1798,6 +2071,8 @@ function Widget({
1798
2071
  funn,
1799
2072
  onSend: send,
1800
2073
  sender,
2074
+ harFeil: feil !== void 0,
2075
+ offline: !online,
1801
2076
  ...fangstMulig ? { onSkjermbilde: taSkjermbilde } : {},
1802
2077
  ...galleriMulig ? { onVelgBilde: velgBilde } : {},
1803
2078
  ...bildeNotat ? { bildeNotat } : {},
@@ -1805,7 +2080,7 @@ function Widget({
1805
2080
  onFjernVedlegg: fjernBilde
1806
2081
  }
1807
2082
  ) : null,
1808
- steg === "skjermbilde" && bilde ? /* @__PURE__ */ jsx8(
2083
+ steg === "skjermbilde" && bilde ? /* @__PURE__ */ jsx9(
1809
2084
  Skjermbilde,
1810
2085
  {
1811
2086
  bilde,
@@ -1819,16 +2094,17 @@ function Widget({
1819
2094
  onLeggVed: leggVedBilde
1820
2095
  }
1821
2096
  ) : null,
1822
- steg === "kvittering" && kvittering ? /* @__PURE__ */ jsx8(
2097
+ steg === "kvittering" && kvittering ? /* @__PURE__ */ jsx9(
1823
2098
  Kvittering,
1824
2099
  {
1825
2100
  art: kvittering.art,
1826
2101
  ...kvittering.nr ? { saksnummer: kvittering.nr } : {},
1827
2102
  ...kvittering.vedlegg ? { vedlegg: kvittering.vedlegg } : {},
2103
+ ...kvittering.frist ? { frist: kvittering.frist } : {},
1828
2104
  onLukk: lukk
1829
2105
  }
1830
2106
  ) : null,
1831
- steg === "mine" ? /* @__PURE__ */ jsx8(
2107
+ steg === "mine" ? /* @__PURE__ */ jsx9(
1832
2108
  MineInnspill,
1833
2109
  {
1834
2110
  rader: mine,
@@ -1845,6 +2121,16 @@ function Widget({
1845
2121
  }
1846
2122
  );
1847
2123
  }
2124
+ function useNettstatus(client) {
2125
+ const c = client.connectivity;
2126
+ const [online, setOnline] = useState3(() => c?.isOnline() ?? true);
2127
+ useEffect(() => {
2128
+ if (!c) return void 0;
2129
+ setOnline(c.isOnline());
2130
+ return c.subscribe?.((v) => setOnline(v));
2131
+ }, [c]);
2132
+ return online;
2133
+ }
1848
2134
  function fjernetKontekst(client, fjernede) {
1849
2135
  const ut = {};
1850
2136
  for (const k of Object.keys(client.context)) {
@@ -1854,7 +2140,7 @@ function fjernetKontekst(client, fjernede) {
1854
2140
  }
1855
2141
 
1856
2142
  // src/InnspelProvider.tsx
1857
- import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
2143
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
1858
2144
  var Kontekst = createContext3(null);
1859
2145
  function InnspelProvider({
1860
2146
  client,
@@ -1888,9 +2174,9 @@ function InnspelProvider({
1888
2174
  () => ({ adapter: screenshot ?? null, rootRef, privat }),
1889
2175
  [screenshot, privat]
1890
2176
  );
1891
- return /* @__PURE__ */ jsx9(Kontekst.Provider, { value: verdi, children: /* @__PURE__ */ jsx9(SkjermbildeContext.Provider, { value: skjermbilde, children: /* @__PURE__ */ jsxs9(TemaProvider, { value: tema, children: [
1892
- /* @__PURE__ */ jsx9(View9, { ref: rootRef, collapsable: false, style: { flex: 1 }, testID: "innspel-rot", children }),
1893
- /* @__PURE__ */ jsx9(
2177
+ return /* @__PURE__ */ jsx10(Kontekst.Provider, { value: verdi, children: /* @__PURE__ */ jsx10(SkjermbildeContext.Provider, { value: skjermbilde, children: /* @__PURE__ */ jsxs9(TemaProvider, { value: tema, children: [
2178
+ /* @__PURE__ */ jsx10(View9, { ref: rootRef, collapsable: false, style: { flex: 1 }, testID: "innspel-rot", children }),
2179
+ /* @__PURE__ */ jsx10(
1894
2180
  Widget,
1895
2181
  {
1896
2182
  client,
@@ -1916,7 +2202,7 @@ function useInnspel() {
1916
2202
  // src/InnspelPrivate.tsx
1917
2203
  import { useEffect as useEffect2, useRef as useRef4 } from "react";
1918
2204
  import { View as View10 } from "react-native";
1919
- import { jsx as jsx10 } from "react/jsx-runtime";
2205
+ import { jsx as jsx11 } from "react/jsx-runtime";
1920
2206
  function InnspelPrivate({ children, style }) {
1921
2207
  const ref = useRef4(null);
1922
2208
  const kontekst = useSkjermbilde();
@@ -1925,7 +2211,7 @@ function InnspelPrivate({ children, style }) {
1925
2211
  if (!registrer) return;
1926
2212
  return registrer(ref);
1927
2213
  }, [registrer]);
1928
- return /* @__PURE__ */ jsx10(View10, { ref, collapsable: false, style, testID: "innspel-privat", children });
2214
+ return /* @__PURE__ */ jsx11(View10, { ref, collapsable: false, style, testID: "innspel-privat", children });
1929
2215
  }
1930
2216
 
1931
2217
  // src/program/InnspelProgram.tsx
@@ -1933,11 +2219,11 @@ import {
1933
2219
  InnspelApiError as InnspelApiError2
1934
2220
  } from "@innspel/core";
1935
2221
  import { useCallback as useCallback4, useEffect as useEffect3, useState as useState6 } from "react";
1936
- import { Modal as Modal4, Pressable as Pressable8, Text as Text13, View as View15 } from "react-native";
2222
+ import { Modal as Modal4, Pressable as Pressable8, Text as Text12, View as View15 } from "react-native";
1937
2223
 
1938
2224
  // src/program/Aksept.tsx
1939
2225
  import "react";
1940
- import { Linking, Modal as Modal2, Pressable as Pressable6, ScrollView as ScrollView4, Text as Text9, View as View11 } from "react-native";
2226
+ import { Linking, Modal as Modal2, Pressable as Pressable6, ScrollView as ScrollView4, Text as Text8, View as View11 } from "react-native";
1941
2227
 
1942
2228
  // src/program/periode.ts
1943
2229
  var MANEDER = [
@@ -1967,7 +2253,7 @@ function minutterPerOppgave(tasks) {
1967
2253
  }
1968
2254
 
1969
2255
  // src/program/Aksept.tsx
1970
- import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
2256
+ import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
1971
2257
  function Aksept({
1972
2258
  program,
1973
2259
  harToken,
@@ -1983,7 +2269,7 @@ function Aksept({
1983
2269
  periode(program.opensAt, program.closesAt),
1984
2270
  program.maxContacts
1985
2271
  );
1986
- return /* @__PURE__ */ jsx11(Modal2, { visible: true, transparent: true, animationType: "slide", onRequestClose: onLukk, accessibilityViewIsModal: true, children: /* @__PURE__ */ jsx11(View11, { style: { flex: 1, backgroundColor: tema.color.scrim, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsxs10(
2272
+ return /* @__PURE__ */ jsx12(Modal2, { visible: true, transparent: true, animationType: "slide", onRequestClose: onLukk, accessibilityViewIsModal: true, children: /* @__PURE__ */ jsx12(View11, { style: { flex: 1, backgroundColor: tema.color.scrim, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsxs10(
1987
2273
  View11,
1988
2274
  {
1989
2275
  testID: "program-aksept",
@@ -1999,14 +2285,14 @@ function Aksept({
1999
2285
  },
2000
2286
  children: [
2001
2287
  /* @__PURE__ */ jsxs10(View11, { style: { flexDirection: "row", justifyContent: "space-between", alignItems: "center" }, children: [
2002
- /* @__PURE__ */ jsx11(Btn, { variant: "ghost", testID: "aksept-tilbake", ikon: "\u2190", label: tekst.tilbake, onPress: onLukk }),
2003
- /* @__PURE__ */ jsx11(View11, {})
2288
+ /* @__PURE__ */ jsx12(Btn, { variant: "ghost", testID: "aksept-tilbake", ikon: "arrow-back-outline", label: tekst.tilbake, onPress: onLukk }),
2289
+ /* @__PURE__ */ jsx12(View11, {})
2004
2290
  ] }),
2005
- feil ? /* @__PURE__ */ jsx11(Banner, { live: true, ikon: "\u26A0", tone: "danger", children: tekst.akseptFeil(feil) }) : null,
2291
+ feil ? /* @__PURE__ */ jsx12(Banner, { live: true, ikon: "warning-outline", tone: "danger", children: tekst.akseptFeil(feil) }) : null,
2006
2292
  /* @__PURE__ */ jsxs10(ScrollView4, { contentContainerStyle: { gap: tema.space.md }, children: [
2007
- /* @__PURE__ */ jsx11(H, { sub: tekst.akseptHva, children: program.name }),
2008
- /* @__PURE__ */ jsx11(
2009
- Text9,
2293
+ /* @__PURE__ */ jsx12(H, { sub: tekst.akseptHva, children: program.name }),
2294
+ /* @__PURE__ */ jsx12(
2295
+ Text8,
2010
2296
  {
2011
2297
  accessibilityRole: "text",
2012
2298
  style: {
@@ -2018,11 +2304,11 @@ function Aksept({
2018
2304
  children: tall
2019
2305
  }
2020
2306
  ),
2021
- /* @__PURE__ */ jsx11(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: program.hypothesis }),
2307
+ /* @__PURE__ */ jsx12(Text8, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: program.hypothesis }),
2022
2308
  /* @__PURE__ */ jsxs10(Card, { children: [
2023
- /* @__PURE__ */ jsx11(H, { children: tekst.akseptOppgaver }),
2309
+ /* @__PURE__ */ jsx12(H, { children: tekst.akseptOppgaver }),
2024
2310
  program.tasks.map((o) => /* @__PURE__ */ jsxs10(View11, { style: { gap: tema.space.xs }, children: [
2025
- /* @__PURE__ */ jsx11(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: o.title }),
2311
+ /* @__PURE__ */ jsx12(Text8, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: o.title }),
2026
2312
  /* @__PURE__ */ jsxs10(Hint, { children: [
2027
2313
  tekst.akseptOppgaveTid(o.estimatedMinutes),
2028
2314
  o.screenHint ? ` \xB7 ${o.screenHint}` : ""
@@ -2030,30 +2316,34 @@ function Aksept({
2030
2316
  ] }, o.id))
2031
2317
  ] }),
2032
2318
  program.knownIssues.length > 0 ? /* @__PURE__ */ jsxs10(Card, { children: [
2033
- /* @__PURE__ */ jsx11(H, { sub: tekst.akseptKjenteFeilUnder, children: tekst.akseptKjenteFeil(program.knownIssues.length) }),
2034
- program.knownIssues.map((k) => /* @__PURE__ */ jsxs10(View11, { style: { gap: tema.space.xs }, children: [
2035
- /* @__PURE__ */ jsx11(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.small, lineHeight: tema.lineHeight.small }, children: k.title }),
2036
- k.workaround ? /* @__PURE__ */ jsxs10(Text9, { style: { color: tema.color.textSecondary, fontSize: tema.font.small, lineHeight: tema.lineHeight.small }, children: [
2037
- tekst.omvei,
2038
- " ",
2039
- k.workaround
2040
- ] }) : null,
2041
- k.fixedIn ? /* @__PURE__ */ jsx11(
2042
- StatusPill,
2043
- {
2044
- ikon: k.status === "fikset" ? "\u2713" : "\u{1F527}",
2045
- etikett: k.status === "fikset" ? tekst.rettetI(k.fixedIn) : tekst.rettesI(k.fixedIn),
2046
- farge: k.status === "fikset" ? "success" : "info"
2047
- }
2048
- ) : null
2049
- ] }, k.id))
2319
+ /* @__PURE__ */ jsx12(H, { sub: tekst.akseptKjenteFeilUnder, children: tekst.akseptKjenteFeil(program.knownIssues.length) }),
2320
+ program.knownIssues.map((k) => {
2321
+ const o = knownIssueStatus[k.status] ?? knownIssueStatus.aktiv;
2322
+ return /* @__PURE__ */ jsxs10(View11, { style: { gap: tema.space.xs }, children: [
2323
+ /* @__PURE__ */ jsx12(Text8, { style: { color: tema.color.textPrimary, fontSize: tema.font.small, lineHeight: tema.lineHeight.small }, children: k.title }),
2324
+ k.workaround ? /* @__PURE__ */ jsxs10(Text8, { style: { color: tema.color.textSecondary, fontSize: tema.font.small, lineHeight: tema.lineHeight.small }, children: [
2325
+ tekst.omvei,
2326
+ " ",
2327
+ k.workaround
2328
+ ] }) : null,
2329
+ k.fixedIn ? /* @__PURE__ */ jsx12(
2330
+ StatusPill,
2331
+ {
2332
+ ikon: o.ikon,
2333
+ etikett: k.status === "fikset" ? tekst.rettetI(k.fixedIn) : tekst.rettesI(k.fixedIn),
2334
+ fg: o.fg,
2335
+ bg: o.bg
2336
+ }
2337
+ ) : null
2338
+ ] }, k.id);
2339
+ })
2050
2340
  ] }) : null,
2051
2341
  /* @__PURE__ */ jsxs10(Card, { children: [
2052
- /* @__PURE__ */ jsx11(H, { sub: tekst.akseptInnsamlingTekst, children: tekst.akseptInnsamling }),
2053
- /* @__PURE__ */ jsx11(Hint, { children: tekst.kontekstAldri })
2342
+ /* @__PURE__ */ jsx12(H, { sub: tekst.akseptInnsamlingTekst, children: tekst.akseptInnsamling }),
2343
+ /* @__PURE__ */ jsx12(Hint, { children: tekst.kontekstAldri })
2054
2344
  ] }),
2055
2345
  program.termsUrl && !program.commitmentFree ? /* @__PURE__ */ jsxs10(View11, { style: { gap: tema.space.xs }, children: [
2056
- /* @__PURE__ */ jsx11(
2346
+ /* @__PURE__ */ jsx12(
2057
2347
  Pressable6,
2058
2348
  {
2059
2349
  testID: "vilkar-lenke",
@@ -2061,20 +2351,32 @@ function Aksept({
2061
2351
  accessibilityLabel: tekst.akseptVilkar,
2062
2352
  onPress: () => void Linking.openURL(String(program.termsUrl)),
2063
2353
  style: { minHeight: tema.touch, justifyContent: "center" },
2064
- children: /* @__PURE__ */ jsxs10(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, textDecorationLine: "underline" }, children: [
2065
- "\u{1F517} ",
2066
- tekst.akseptVilkar
2354
+ children: /* @__PURE__ */ jsxs10(View11, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
2355
+ /* @__PURE__ */ jsx12(Ikon, { navn: "open-outline", farge: tema.color.textPrimary }),
2356
+ /* @__PURE__ */ jsx12(
2357
+ Text8,
2358
+ {
2359
+ style: { color: tema.color.textPrimary, fontSize: tema.font.body, textDecorationLine: "underline" },
2360
+ children: tekst.akseptVilkar
2361
+ }
2362
+ )
2067
2363
  ] })
2068
2364
  }
2069
2365
  ),
2070
- /* @__PURE__ */ jsx11(Hint, { children: tekst.akseptVilkarHint })
2071
- ] }) : /* @__PURE__ */ jsx11(Hint, { children: tekst.akseptIngenVilkar }),
2072
- /* @__PURE__ */ jsxs10(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: [
2073
- "\u{1F6AA} ",
2074
- tekst.akseptUtgang
2366
+ /* @__PURE__ */ jsx12(Hint, { children: tekst.akseptVilkarHint })
2367
+ ] }) : /* @__PURE__ */ jsx12(Hint, { children: tekst.akseptIngenVilkar }),
2368
+ /* @__PURE__ */ jsxs10(View11, { style: { flexDirection: "row", alignItems: "flex-start", gap: tema.space.sm }, children: [
2369
+ /* @__PURE__ */ jsx12(Ikon, { navn: "exit-outline", farge: tema.color.textPrimary }),
2370
+ /* @__PURE__ */ jsx12(
2371
+ Text8,
2372
+ {
2373
+ style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body },
2374
+ children: tekst.akseptUtgang
2375
+ }
2376
+ )
2075
2377
  ] })
2076
2378
  ] }),
2077
- /* @__PURE__ */ jsx11(
2379
+ /* @__PURE__ */ jsx12(
2078
2380
  Btn,
2079
2381
  {
2080
2382
  testID: "bli-med",
@@ -2091,12 +2393,12 @@ function Aksept({
2091
2393
 
2092
2394
  // src/program/HvordanGikkDet.tsx
2093
2395
  import { useState as useState5 } from "react";
2094
- import { Modal as Modal3, Pressable as Pressable7, Text as Text10, TextInput as TextInput2, View as View12 } from "react-native";
2095
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
2396
+ import { Modal as Modal3, Pressable as Pressable7, Text as Text9, TextInput as TextInput2, View as View12 } from "react-native";
2397
+ import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
2096
2398
  var UTFALL = [
2097
- { verdi: "fungerte", ikon: "\u2713", etikett: tekst.utfallFungerte },
2098
- { verdi: "delvis", ikon: "\u25D0", etikett: tekst.utfallDelvis },
2099
- { verdi: "ikke", ikon: "\u2715", etikett: tekst.utfallIkke }
2399
+ { verdi: "fungerte", ikon: "checkmark-circle-outline", etikett: tekst.utfallFungerte },
2400
+ { verdi: "delvis", ikon: "contrast-outline", etikett: tekst.utfallDelvis },
2401
+ { verdi: "ikke", ikon: "close-circle-outline", etikett: tekst.utfallIkke }
2100
2402
  ];
2101
2403
  var SETNING_MAKS = 140;
2102
2404
  function utfallEtikett(verdi) {
@@ -2112,7 +2414,7 @@ function HvordanGikkDet({
2112
2414
  const tema = useTema();
2113
2415
  const [valgt, setValgt] = useState5();
2114
2416
  const [setning, setSetning] = useState5("");
2115
- return /* @__PURE__ */ jsx12(Modal3, { visible: true, transparent: true, animationType: "fade", onRequestClose: onLukk, accessibilityViewIsModal: true, children: /* @__PURE__ */ jsx12(View12, { style: { flex: 1, backgroundColor: tema.color.scrim, justifyContent: "flex-end", padding: tema.space.md }, children: /* @__PURE__ */ jsxs11(
2417
+ 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(
2116
2418
  View12,
2117
2419
  {
2118
2420
  testID: "hvordan-gikk-det",
@@ -2126,10 +2428,10 @@ function HvordanGikkDet({
2126
2428
  gap: tema.space.md
2127
2429
  },
2128
2430
  children: [
2129
- /* @__PURE__ */ jsx12(Btn, { variant: "ghost", testID: "hvordan-tilbake", ikon: "\u2190", label: tekst.tilbake, onPress: onLukk }),
2130
- /* @__PURE__ */ jsx12(Hint, { children: under }),
2131
- /* @__PURE__ */ jsx12(H, { children: tekst.hvordanGikkDet }),
2132
- /* @__PURE__ */ jsx12(View12, { testID: "utfall-gruppe", accessibilityRole: "radiogroup", accessibilityLabel: tekst.hvordanGikkDet, style: { flexDirection: "row", gap: tema.space.sm }, children: UTFALL.map((u) => {
2431
+ /* @__PURE__ */ jsx13(Btn, { variant: "ghost", testID: "hvordan-tilbake", ikon: "arrow-back-outline", label: tekst.tilbake, onPress: onLukk }),
2432
+ /* @__PURE__ */ jsx13(Hint, { children: under }),
2433
+ /* @__PURE__ */ jsx13(H, { children: tekst.hvordanGikkDet }),
2434
+ /* @__PURE__ */ jsx13(View12, { testID: "utfall-gruppe", accessibilityRole: "radiogroup", accessibilityLabel: tekst.hvordanGikkDet, style: { flexDirection: "row", gap: tema.space.sm }, children: UTFALL.map((u) => {
2133
2435
  const aktiv = valgt === u.verdi;
2134
2436
  return /* @__PURE__ */ jsxs11(
2135
2437
  Pressable7,
@@ -2152,16 +2454,16 @@ function HvordanGikkDet({
2152
2454
  backgroundColor: aktiv ? tema.color.brandBg : tema.color.surfaceRaised
2153
2455
  },
2154
2456
  children: [
2155
- /* @__PURE__ */ jsx12(Text10, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.h3, color: tema.color.textPrimary }, children: u.ikon }),
2156
- /* @__PURE__ */ jsx12(Text10, { style: { color: tema.color.textPrimary, fontSize: tema.font.small, fontWeight: aktiv ? tema.weight.semibold : tema.weight.regular }, children: u.etikett })
2457
+ /* @__PURE__ */ jsx13(Ikon, { navn: u.ikon, farge: tema.color.textPrimary }),
2458
+ /* @__PURE__ */ jsx13(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.small, fontWeight: aktiv ? tema.weight.semibold : tema.weight.regular }, children: u.etikett })
2157
2459
  ]
2158
2460
  },
2159
2461
  u.verdi
2160
2462
  );
2161
2463
  }) }),
2162
2464
  /* @__PURE__ */ jsxs11(View12, { style: { gap: tema.space.xs }, children: [
2163
- /* @__PURE__ */ jsx12(Text10, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tekst.setningLabel }),
2164
- /* @__PURE__ */ jsx12(
2465
+ /* @__PURE__ */ jsx13(Text9, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tekst.setningLabel }),
2466
+ /* @__PURE__ */ jsx13(
2165
2467
  TextInput2,
2166
2468
  {
2167
2469
  testID: "hvordan-setning",
@@ -2188,8 +2490,8 @@ function HvordanGikkDet({
2188
2490
  }
2189
2491
  )
2190
2492
  ] }),
2191
- feil ? /* @__PURE__ */ jsx12(Banner, { live: true, ikon: "\u26A0", tone: "danger", children: tekst.svarFeil(feil) }) : null,
2192
- /* @__PURE__ */ jsx12(
2493
+ feil ? /* @__PURE__ */ jsx13(Banner, { live: true, ikon: "warning-outline", tone: "danger", children: tekst.svarFeil(feil) }) : null,
2494
+ /* @__PURE__ */ jsx13(
2193
2495
  Btn,
2194
2496
  {
2195
2497
  testID: "hvordan-lagre",
@@ -2210,8 +2512,8 @@ function HvordanGikkDet({
2210
2512
 
2211
2513
  // src/program/Oppfolging.tsx
2212
2514
  import "react";
2213
- import { Text as Text11, View as View13 } from "react-native";
2214
- import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
2515
+ import { Text as Text10, View as View13 } from "react-native";
2516
+ import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
2215
2517
  function tarSvar(kind) {
2216
2518
  return kind === "hvordan_gikk_det" || kind === "sjekkpunkt";
2217
2519
  }
@@ -2226,7 +2528,7 @@ function Oppfolging({
2226
2528
  }) {
2227
2529
  const tema = useTema();
2228
2530
  const art = tarSvar(oppfolging.kind) ? "spoersmaal" : oppfolging.kind === "tilbud_om_utgang" ? "utgang" : "paaminnelse";
2229
- const ikon = art === "spoersmaal" ? "\u{1F9EA}" : art === "utgang" ? "\u{1F6AA}" : "\u{1F4C5}";
2531
+ const ikon = art === "spoersmaal" ? "flask-outline" : art === "utgang" ? "exit-outline" : "calendar-outline";
2230
2532
  const hint = art === "spoersmaal" ? tekst.oppfolgingKontakt(kontaktNr, maksKontakter) : art === "utgang" ? tekst.oppfolgingUtgangHint(kontaktNr, maksKontakter) : tekst.oppfolgingPaaminnelseHint(kontaktNr, maksKontakter);
2231
2533
  return /* @__PURE__ */ jsxs12(
2232
2534
  View13,
@@ -2243,18 +2545,28 @@ function Oppfolging({
2243
2545
  },
2244
2546
  children: [
2245
2547
  /* @__PURE__ */ jsxs12(View13, { style: { flexDirection: "row", gap: tema.space.sm, alignItems: "flex-start" }, children: [
2246
- /* @__PURE__ */ jsx13(Text11, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.h3 }, children: ikon }),
2548
+ /* @__PURE__ */ jsx14(Ikon, { navn: ikon, farge: tema.color.textPrimary }),
2247
2549
  /* @__PURE__ */ jsxs12(View13, { style: { flex: 1, gap: tema.space.xs }, children: [
2248
- /* @__PURE__ */ jsx13(Text11, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: oppfolging.question }),
2249
- /* @__PURE__ */ jsx13(Hint, { children: hint })
2550
+ /* @__PURE__ */ jsx14(Text10, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: oppfolging.question }),
2551
+ /* @__PURE__ */ jsx14(Hint, { children: hint })
2250
2552
  ] })
2251
2553
  ] }),
2252
- /* @__PURE__ */ jsx13(View13, { style: { flexDirection: "row", gap: tema.space.sm }, children: art === "utgang" ? /* @__PURE__ */ jsxs12(Fragment2, { children: [
2253
- /* @__PURE__ */ jsx13(Btn, { grow: true, variant: "secondary", testID: `bli-vaerende-${oppfolging.id}`, label: tekst.bliVaerende, onPress: onSenere }),
2254
- /* @__PURE__ */ jsx13(Btn, { grow: true, variant: "danger", testID: `gaa-ut-${oppfolging.id}`, ikon: "\u{1F6AA}", label: tekst.gaaUtBekreft, onPress: onGaaUt })
2554
+ /* @__PURE__ */ jsx14(View13, { style: { flexDirection: "row", gap: tema.space.sm }, children: art === "utgang" ? /* @__PURE__ */ jsxs12(Fragment2, { children: [
2555
+ /* @__PURE__ */ jsx14(Btn, { grow: true, variant: "secondary", testID: `bli-vaerende-${oppfolging.id}`, label: tekst.bliVaerende, onPress: onSenere }),
2556
+ /* @__PURE__ */ jsx14(
2557
+ Btn,
2558
+ {
2559
+ grow: true,
2560
+ variant: "danger",
2561
+ testID: `gaa-ut-${oppfolging.id}`,
2562
+ ikon: "exit-outline",
2563
+ label: tekst.gaaUtBekreft,
2564
+ onPress: onGaaUt
2565
+ }
2566
+ )
2255
2567
  ] }) : /* @__PURE__ */ jsxs12(Fragment2, { children: [
2256
- /* @__PURE__ */ jsx13(Btn, { grow: true, variant: "secondary", testID: `senere-${oppfolging.id}`, label: tekst.senere, onPress: onSenere }),
2257
- art === "spoersmaal" ? /* @__PURE__ */ jsx13(Btn, { grow: true, testID: `svar-naa-${oppfolging.id}`, label: tekst.svarNaa, onPress: onSvar }) : /* @__PURE__ */ jsx13(Btn, { grow: true, testID: `aapne-oppgavene-${oppfolging.id}`, label: tekst.aapneOppgavene, onPress: onAapneOppgavene })
2568
+ /* @__PURE__ */ jsx14(Btn, { grow: true, variant: "secondary", testID: `senere-${oppfolging.id}`, label: tekst.senere, onPress: onSenere }),
2569
+ art === "spoersmaal" ? /* @__PURE__ */ jsx14(Btn, { grow: true, testID: `svar-naa-${oppfolging.id}`, label: tekst.svarNaa, onPress: onSvar }) : /* @__PURE__ */ jsx14(Btn, { grow: true, testID: `aapne-oppgavene-${oppfolging.id}`, label: tekst.aapneOppgavene, onPress: onAapneOppgavene })
2258
2570
  ] }) })
2259
2571
  ]
2260
2572
  }
@@ -2263,8 +2575,8 @@ function Oppfolging({
2263
2575
 
2264
2576
  // src/program/Oppgaver.tsx
2265
2577
  import "react";
2266
- import { Text as Text12, View as View14 } from "react-native";
2267
- import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
2578
+ import { Text as Text11, View as View14 } from "react-native";
2579
+ import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
2268
2580
  function Oppgaver({
2269
2581
  tasks,
2270
2582
  completions,
@@ -2272,7 +2584,7 @@ function Oppgaver({
2272
2584
  }) {
2273
2585
  const tema = useTema();
2274
2586
  const ferdig = new Map(completions.map((c) => [c.taskId, c]));
2275
- return /* @__PURE__ */ jsx14(View14, { testID: "oppgaver", accessibilityLabel: tekst.oppgaverTittel, style: { gap: tema.space.sm }, children: [...tasks].sort((a, b) => a.order - b.order).map((o) => {
2587
+ return /* @__PURE__ */ jsx15(View14, { testID: "oppgaver", accessibilityLabel: tekst.oppgaverTittel, style: { gap: tema.space.sm }, children: [...tasks].sort((a, b) => a.order - b.order).map((o) => {
2276
2588
  const c = ferdig.get(o.id);
2277
2589
  return /* @__PURE__ */ jsxs13(
2278
2590
  View14,
@@ -2288,13 +2600,27 @@ function Oppgaver({
2288
2600
  },
2289
2601
  children: [
2290
2602
  /* @__PURE__ */ jsxs13(View14, { style: { flex: 1, gap: tema.space.xs }, children: [
2291
- /* @__PURE__ */ jsx14(Text12, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: o.title }),
2603
+ /* @__PURE__ */ jsx15(Text11, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: o.title }),
2292
2604
  /* @__PURE__ */ jsxs13(Hint, { children: [
2293
2605
  c ? tekst.oppgaveGjortMed(utfallEtikett(c.outcome)) : `${tekst.oppgaveIkkeBegynt} \xB7 ${tekst.akseptOppgaveTid(o.estimatedMinutes)}`,
2294
2606
  c?.text ? ` \xB7 \xAB${c.text}\xBB` : ""
2295
2607
  ] })
2296
2608
  ] }),
2297
- c ? /* @__PURE__ */ jsx14(Text12, { accessibilityLabel: tekst.oppgaveGjortMed(utfallEtikett(c.outcome)), style: { color: tema.color.success, fontSize: tema.font.h3 }, children: "\u2713" }) : /* @__PURE__ */ jsx14(Btn, { variant: "secondary", testID: `gjort-${o.id}`, ikon: "\u2713", label: tekst.oppgaveGjort, accessibilityLabel: tekst.oppgaveGjortLabel(o.title), onPress: () => onGjort(o) })
2609
+ c ? (
2610
+ // Merket er den eneste flaten der ikonet står alene, så etiketten
2611
+ // ligger på containeren: skjermleseren hører utfallet, ikke «hake».
2612
+ /* @__PURE__ */ jsx15(View14, { accessibilityLabel: tekst.oppgaveGjortMed(utfallEtikett(c.outcome)), accessible: true, children: /* @__PURE__ */ jsx15(Ikon, { navn: "checkmark-circle-outline", farge: tema.color.success }) })
2613
+ ) : /* @__PURE__ */ jsx15(
2614
+ Btn,
2615
+ {
2616
+ variant: "secondary",
2617
+ testID: `gjort-${o.id}`,
2618
+ ikon: "checkmark-circle-outline",
2619
+ label: tekst.oppgaveGjort,
2620
+ accessibilityLabel: tekst.oppgaveGjortLabel(o.title),
2621
+ onPress: () => onGjort(o)
2622
+ }
2623
+ )
2298
2624
  ]
2299
2625
  },
2300
2626
  o.id
@@ -2303,7 +2629,7 @@ function Oppgaver({
2303
2629
  }
2304
2630
 
2305
2631
  // src/program/InnspelProgram.tsx
2306
- import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
2632
+ import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
2307
2633
  function InnspelProgram({
2308
2634
  invitationToken,
2309
2635
  onEndring,
@@ -2394,7 +2720,7 @@ function InnspelProgram({
2394
2720
  const kort = (mine?.pendingFollowUps ?? []).filter((f) => f.programId === program.id && !lagtBort.has(f.id)).sort((a, b) => a.emittedAt.localeCompare(b.emittedAt));
2395
2721
  const forsteKontaktNr = Math.max(1, deltakelse.contactsSent - kort.length + 1);
2396
2722
  return /* @__PURE__ */ jsxs14(View15, { testID: "program-deltakelse", accessibilityLabel: tekst.deltakelseRegion, style: { gap: tema.space.sm }, children: [
2397
- kort.map((f, i) => /* @__PURE__ */ jsx15(
2723
+ kort.map((f, i) => /* @__PURE__ */ jsx16(
2398
2724
  Oppfolging,
2399
2725
  {
2400
2726
  oppfolging: f,
@@ -2411,8 +2737,8 @@ function InnspelProgram({
2411
2737
  f.id
2412
2738
  )),
2413
2739
  /* @__PURE__ */ jsxs14(Card, { children: [
2414
- /* @__PURE__ */ jsx15(H, { sub: tekst.deltakelsePeriode(periode(program.opensAt, program.closesAt), deltakelse.contactsSent, program.maxContacts), children: program.name }),
2415
- /* @__PURE__ */ jsx15(
2740
+ /* @__PURE__ */ jsx16(H, { sub: tekst.deltakelsePeriode(periode(program.opensAt, program.closesAt), deltakelse.contactsSent, program.maxContacts), children: program.name }),
2741
+ /* @__PURE__ */ jsx16(
2416
2742
  Oppgaver,
2417
2743
  {
2418
2744
  tasks: program.tasks,
@@ -2424,13 +2750,13 @@ function InnspelProgram({
2424
2750
  }
2425
2751
  ),
2426
2752
  meldFeilFor && onMeldFeil ? /* @__PURE__ */ jsxs14(View15, { style: { gap: tema.space.xs }, children: [
2427
- /* @__PURE__ */ jsx15(Hint, { children: tekst.meldFeilHint }),
2428
- /* @__PURE__ */ jsx15(
2753
+ /* @__PURE__ */ jsx16(Hint, { children: tekst.meldFeilHint }),
2754
+ /* @__PURE__ */ jsx16(
2429
2755
  Btn,
2430
2756
  {
2431
2757
  variant: "secondary",
2432
2758
  testID: "meld-feil",
2433
- ikon: "\u{1F41E}",
2759
+ ikon: "bug-outline",
2434
2760
  label: tekst.meldFeil,
2435
2761
  onPress: () => {
2436
2762
  const task = meldFeilFor;
@@ -2440,9 +2766,9 @@ function InnspelProgram({
2440
2766
  }
2441
2767
  )
2442
2768
  ] }) : null,
2443
- /* @__PURE__ */ jsx15(Btn, { variant: "ghost", testID: "gaa-ut", ikon: "\u{1F6AA}", label: tekst.gaaUt, onPress: () => setViserGaaUt(true) })
2769
+ /* @__PURE__ */ jsx16(Btn, { variant: "ghost", testID: "gaa-ut", ikon: "exit-outline", label: tekst.gaaUt, onPress: () => setViserGaaUt(true) })
2444
2770
  ] }),
2445
- dialog ? /* @__PURE__ */ jsx15(
2771
+ dialog ? /* @__PURE__ */ jsx16(
2446
2772
  HvordanGikkDet,
2447
2773
  {
2448
2774
  under: dialog.type === "oppgave" ? dialog.task.title : dialog.oppfolging.question,
@@ -2452,7 +2778,7 @@ function InnspelProgram({
2452
2778
  onLukk: () => setDialog(void 0)
2453
2779
  }
2454
2780
  ) : null,
2455
- viserGaaUt ? /* @__PURE__ */ jsx15(Modal4, { visible: true, transparent: true, animationType: "fade", onRequestClose: () => setViserGaaUt(false), accessibilityViewIsModal: true, children: /* @__PURE__ */ jsx15(View15, { style: { flex: 1, backgroundColor: tema.color.scrim, justifyContent: "flex-end", padding: tema.space.md }, children: /* @__PURE__ */ jsxs14(
2781
+ viserGaaUt ? /* @__PURE__ */ jsx16(Modal4, { visible: true, transparent: true, animationType: "fade", onRequestClose: () => setViserGaaUt(false), accessibilityViewIsModal: true, children: /* @__PURE__ */ jsx16(View15, { style: { flex: 1, backgroundColor: tema.color.scrim, justifyContent: "flex-end", padding: tema.space.md }, children: /* @__PURE__ */ jsxs14(
2456
2782
  View15,
2457
2783
  {
2458
2784
  testID: "gaa-ut-dialog",
@@ -2466,11 +2792,22 @@ function InnspelProgram({
2466
2792
  gap: tema.space.md
2467
2793
  },
2468
2794
  children: [
2469
- /* @__PURE__ */ jsx15(H, { children: tekst.gaaUtTittel }),
2470
- /* @__PURE__ */ jsx15(Text13, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: tekst.gaaUtTekst(program.name) }),
2795
+ /* @__PURE__ */ jsx16(H, { children: tekst.gaaUtTittel }),
2796
+ /* @__PURE__ */ jsx16(Text12, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: tekst.gaaUtTekst(program.name) }),
2471
2797
  /* @__PURE__ */ jsxs14(View15, { style: { flexDirection: "row", gap: tema.space.sm }, children: [
2472
- /* @__PURE__ */ jsx15(Btn, { grow: true, variant: "secondary", testID: "bli-vaerende", label: tekst.bliVaerende, onPress: () => setViserGaaUt(false) }),
2473
- /* @__PURE__ */ jsx15(Btn, { grow: true, variant: "danger", testID: "bekreft-gaa-ut", ikon: "\u{1F6AA}", label: tekst.gaaUtBekreft, disabled: sender, onPress: () => void gaaUt() })
2798
+ /* @__PURE__ */ jsx16(Btn, { grow: true, variant: "secondary", testID: "bli-vaerende", label: tekst.bliVaerende, onPress: () => setViserGaaUt(false) }),
2799
+ /* @__PURE__ */ jsx16(
2800
+ Btn,
2801
+ {
2802
+ grow: true,
2803
+ variant: "danger",
2804
+ testID: "bekreft-gaa-ut",
2805
+ ikon: "exit-outline",
2806
+ label: tekst.gaaUtBekreft,
2807
+ disabled: sender,
2808
+ onPress: () => void gaaUt()
2809
+ }
2810
+ )
2474
2811
  ] })
2475
2812
  ]
2476
2813
  }
@@ -2494,12 +2831,12 @@ function InnspelProgram({
2494
2831
  },
2495
2832
  children: [
2496
2833
  /* @__PURE__ */ jsxs14(View15, { style: { flexDirection: "row", gap: tema.space.sm, alignItems: "flex-start" }, children: [
2497
- /* @__PURE__ */ jsx15(Text13, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.h3 }, children: "\u{1F9EA}" }),
2834
+ /* @__PURE__ */ jsx16(Ikon, { navn: "flask-outline", farge: tema.color.textPrimary }),
2498
2835
  /* @__PURE__ */ jsxs14(View15, { style: { flex: 1, gap: tema.space.xs }, children: [
2499
- /* @__PURE__ */ jsx15(Text13, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: tekst.invitasjonHva(program.name) }),
2500
- /* @__PURE__ */ jsx15(Hint, { children: tekst.invitasjonKontakter(program.maxContacts) })
2836
+ /* @__PURE__ */ jsx16(Text12, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: tekst.invitasjonHva(program.name) }),
2837
+ /* @__PURE__ */ jsx16(Hint, { children: tekst.invitasjonKontakter(program.maxContacts) })
2501
2838
  ] }),
2502
- /* @__PURE__ */ jsx15(
2839
+ /* @__PURE__ */ jsx16(
2503
2840
  Pressable8,
2504
2841
  {
2505
2842
  testID: "avvis-invitasjon",
@@ -2507,16 +2844,16 @@ function InnspelProgram({
2507
2844
  accessibilityLabel: tekst.avvisInvitasjon,
2508
2845
  onPress: () => setAvvist(true),
2509
2846
  style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
2510
- children: /* @__PURE__ */ jsx15(Text13, { style: { color: tema.color.textSecondary, fontSize: tema.font.body }, children: "\u2715" })
2847
+ children: /* @__PURE__ */ jsx16(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
2511
2848
  }
2512
2849
  )
2513
2850
  ] }),
2514
- feil && !viserAksept ? /* @__PURE__ */ jsx15(Banner, { live: true, ikon: "\u26A0", tone: "danger", children: tekst.akseptFeil(feil) }) : null,
2515
- /* @__PURE__ */ jsx15(Btn, { variant: "secondary", testID: "les-mer", label: tekst.lesMer, onPress: () => setViserAksept(true) })
2851
+ feil && !viserAksept ? /* @__PURE__ */ jsx16(Banner, { live: true, ikon: "warning-outline", tone: "danger", children: tekst.akseptFeil(feil) }) : null,
2852
+ /* @__PURE__ */ jsx16(Btn, { variant: "secondary", testID: "les-mer", label: tekst.lesMer, onPress: () => setViserAksept(true) })
2516
2853
  ]
2517
2854
  }
2518
2855
  ),
2519
- viserAksept ? /* @__PURE__ */ jsx15(
2856
+ viserAksept ? /* @__PURE__ */ jsx16(
2520
2857
  Aksept,
2521
2858
  {
2522
2859
  program,