@innspel/react-native 0.7.1 → 0.9.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,40 @@ 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
+ /** Knappen på første steg med innspill fra før (DD-62): tallet er det som gjør den til en inngang. */
818
+ mineMedAntall: (n) => `Mine innspill \xB7 ${n}`,
819
+ mineEtikett: (n) => `Mine innspill, ${n} innspill`,
820
+ mineUnder: "Status og hva du kan vente deg.",
570
821
  mineTom: "Du har ikke sendt noe enn\xE5.",
571
822
  mineIkkeSendt: "Ikke sendt enn\xE5",
572
- mineSak: (nr) => `Sak ${nr}`,
823
+ mineSak: (nr) => `Sak ${saksnr(nr)}`,
824
+ /** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
825
+ sakHode: (spor, nr) => `${stor(spor)} \xB7 sak ${saksnr(nr)}`,
573
826
  // Leietakeren fjernet vedlegget. Bare AT — aldri hvorfor, av hvem eller når.
574
827
  bildeFjernet: "Bildet er fjernet.",
575
828
  svarFra: (leietaker) => `Svar fra ${leietaker}`,
576
829
  svarFraGenerisk: "Svar",
577
830
  sendNytt: "Send nytt innspill",
831
+ /** Tom tilstand: det finnes ikke noe «nytt» å sende når ingenting er sendt. */
832
+ sendForste: "Send innspill",
578
833
  // 3a — invitasjonsbanneret (DD-12)
579
834
  invitasjonRegion: "Invitasjon til betaprogram",
580
835
  invitasjonHva: (navn) => `Vil du teste \xAB${navn}\xBB?`,
@@ -602,7 +857,7 @@ var tekst = {
602
857
  akseptFeil: (arsak) => `Kunne ikke bli med: ${arsak}`,
603
858
  // 3c (M3.1-delen) — deltakelsen og «Gå ut» (DD-36)
604
859
  deltakelseRegion: "Ditt betaprogram",
605
- deltakelsePeriode: (periode2, brukt, maks) => `${periode2} \xB7 ${brukt} av ${maks} kontakter brukt`,
860
+ deltakelsePeriode: (periode2, brukt, maks) => `${periode2} \xB7 Vi tar kontakt maks ${maks} ganger \u2014 ${brukt} brukt`,
606
861
  deltakelseOppgaverKommer: "Oppgavene kan gj\xF8res n\xE5r det passer deg.",
607
862
  gaaUt: "G\xE5 ut av programmet",
608
863
  gaaUtTittel: "G\xE5 ut av programmet?",
@@ -614,11 +869,11 @@ var tekst = {
614
869
  oppgaveIkkeBegynt: "Ikke begynt",
615
870
  oppgaveGjort: "Gjort",
616
871
  oppgaveGjortLabel: (tittel) => `Gjort: ${tittel}`,
617
- oppgaveGjortMed: (utfall) => `Gjort \xB7 ${utfall}`,
872
+ oppgaveGjortMed: (utfall) => `Pr\xF8vd \xB7 ${utfall}`,
618
873
  hvordanGikkDet: "Hvordan gikk det?",
619
874
  utfallFungerte: "Fungerte",
620
- utfallDelvis: "Delvis",
621
- utfallIkke: "Ikke",
875
+ utfallDelvis: "Fungerte delvis",
876
+ utfallIkke: "Fungerte ikke",
622
877
  setningLabel: "Vil du si \xE9n setning om det? (valgfritt)",
623
878
  setningPlaceholder: "Kopien kom, men rullesjefen manglet p\xE5 torsdag.",
624
879
  lagre: "Lagre",
@@ -638,24 +893,16 @@ var tekst = {
638
893
  // Felles
639
894
  tilbake: "Tilbake",
640
895
  lukk: "Lukk",
641
- venterPaaNett: "Venter p\xE5 nett \u2014 sendes automatisk"
896
+ venterPaaNett: "Venter p\xE5 nett \u2014 sendes automatisk",
897
+ feil: "feil",
898
+ onske: "\xF8nske"
642
899
  };
643
900
  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."
901
+ venterNett: "Sendes automatisk n\xE5r du er p\xE5 nett \u2014 kvitteringen kommer da."
655
902
  };
656
903
 
657
904
  // src/widget/Felt.tsx
658
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
905
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
659
906
  function Felt({
660
907
  spor,
661
908
  verdi,
@@ -670,6 +917,8 @@ function Felt({
670
917
  funn,
671
918
  onSend,
672
919
  sender,
920
+ harFeil,
921
+ offline,
673
922
  onSkjermbilde,
674
923
  onVelgBilde,
675
924
  bildeNotat,
@@ -722,8 +971,8 @@ function Felt({
722
971
  paddingRight: tema.space.xs
723
972
  },
724
973
  children: [
725
- /* @__PURE__ */ jsx2(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: tekst.lenketTil(lenketTil.title) }),
726
- /* @__PURE__ */ jsx2(
974
+ /* @__PURE__ */ jsx3(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: tekst.lenketTil(lenketTil.title) }),
975
+ /* @__PURE__ */ jsx3(
727
976
  Pressable2,
728
977
  {
729
978
  testID: "fjern-lenke",
@@ -731,7 +980,7 @@ function Felt({
731
980
  accessibilityLabel: tekst.fjernLenke,
732
981
  onPress: onFjernLenke,
733
982
  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" })
983
+ children: /* @__PURE__ */ jsx3(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
735
984
  }
736
985
  )
737
986
  ]
@@ -747,7 +996,7 @@ function Felt({
747
996
  padding: tema.space.md
748
997
  },
749
998
  children: [
750
- /* @__PURE__ */ jsx2(
999
+ /* @__PURE__ */ jsx3(
751
1000
  Text2,
752
1001
  {
753
1002
  accessibilityRole: "alert",
@@ -762,7 +1011,7 @@ function Felt({
762
1011
  }
763
1012
  ),
764
1013
  /* @__PURE__ */ jsxs2(View2, { style: { flexDirection: "row", gap: tema.space.sm }, children: [
765
- /* @__PURE__ */ jsx2(
1014
+ /* @__PURE__ */ jsx3(
766
1015
  Btn,
767
1016
  {
768
1017
  grow: true,
@@ -772,7 +1021,7 @@ function Felt({
772
1021
  onPress: () => onEndre(verdi.slice(0, uavklart.start) + verdi.slice(uavklart.end))
773
1022
  }
774
1023
  ),
775
- /* @__PURE__ */ jsx2(
1024
+ /* @__PURE__ */ jsx3(
776
1025
  Btn,
777
1026
  {
778
1027
  grow: true,
@@ -783,12 +1032,12 @@ function Felt({
783
1032
  }
784
1033
  )
785
1034
  ] }),
786
- /* @__PURE__ */ jsx2(Hint, { children: tekst.monsterForklaring })
1035
+ /* @__PURE__ */ jsx3(Hint, { children: tekst.monsterForklaring })
787
1036
  ]
788
1037
  }
789
1038
  ) : null,
790
- /* @__PURE__ */ jsx2(H, { children: spor === "onske" ? tekst.feltLabelOnske : tekst.feltLabelFeil }),
791
- /* @__PURE__ */ jsx2(
1039
+ /* @__PURE__ */ jsx3(H, { children: spor === "onske" ? tekst.feltLabelOnske : tekst.feltLabelFeil }),
1040
+ /* @__PURE__ */ jsx3(
792
1041
  TextInput,
793
1042
  {
794
1043
  testID: "innspill-tekst",
@@ -848,9 +1097,9 @@ function Felt({
848
1097
  paddingRight: tema.space.xs
849
1098
  },
850
1099
  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(
1100
+ /* @__PURE__ */ jsx3(Ikon, { navn: "image-outline", storrelse: "minste", farge: tema.color.textPrimary }),
1101
+ /* @__PURE__ */ jsx3(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: tekst.bildeLagtVed }),
1102
+ /* @__PURE__ */ jsx3(
854
1103
  Pressable2,
855
1104
  {
856
1105
  testID: "fjern-vedlegg",
@@ -858,38 +1107,38 @@ function Felt({
858
1107
  accessibilityLabel: tekst.fjernSkjermbilde,
859
1108
  onPress: onFjernVedlegg,
860
1109
  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" })
1110
+ children: /* @__PURE__ */ jsx3(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
862
1111
  }
863
1112
  )
864
1113
  ]
865
1114
  }
866
1115
  ) : onSkjermbilde || onVelgBilde ? /* @__PURE__ */ jsxs2(View2, { style: { gap: tema.space.sm }, children: [
867
- onSkjermbilde ? /* @__PURE__ */ jsx2(
1116
+ onSkjermbilde ? /* @__PURE__ */ jsx3(
868
1117
  Btn,
869
1118
  {
870
1119
  variant: "secondary",
871
1120
  testID: "legg-ved-skjermbilde",
872
- ikon: "\u{1F4F7}",
1121
+ ikon: "camera-outline",
873
1122
  label: tekst.leggVedSkjermbilde,
874
1123
  hint: tekst.leggVedHint,
875
1124
  onPress: onSkjermbilde
876
1125
  }
877
1126
  ) : null,
878
- onVelgBilde ? /* @__PURE__ */ jsx2(
1127
+ onVelgBilde ? /* @__PURE__ */ jsx3(
879
1128
  Btn,
880
1129
  {
881
1130
  variant: "secondary",
882
1131
  testID: "velg-bilde",
883
- ikon: "\u{1F5BC}",
1132
+ ikon: "images-outline",
884
1133
  label: tekst.velgBilde,
885
1134
  hint: tekst.velgBildeHint,
886
1135
  onPress: onVelgBilde
887
1136
  }
888
1137
  ) : null,
889
- bildeNotat ? /* @__PURE__ */ jsx2(View2, { testID: "bilde-notat", children: /* @__PURE__ */ jsx2(Hint, { children: bildeNotat }) }) : null
1138
+ bildeNotat ? /* @__PURE__ */ jsx3(View2, { testID: "bilde-notat", children: /* @__PURE__ */ jsx3(Hint, { children: bildeNotat }) }) : null
890
1139
  ] }) : null,
891
1140
  /* @__PURE__ */ jsxs2(View2, { style: { borderTopWidth: tema.hairline, borderTopColor: tema.color.border, paddingTop: tema.space.sm }, children: [
892
- /* @__PURE__ */ jsx2(
1141
+ /* @__PURE__ */ jsx3(
893
1142
  Pressable2,
894
1143
  {
895
1144
  testID: "kontekst-bryter",
@@ -898,11 +1147,19 @@ function Felt({
898
1147
  accessibilityLabel: `${tekst.kontekstLinje}${apen ? "" : tekst.kontekstVis}`,
899
1148
  onPress: () => setApen((a) => !a),
900
1149
  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
1150
+ children: /* @__PURE__ */ jsxs2(View2, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
1151
+ /* @__PURE__ */ jsx3(
1152
+ Ikon,
1153
+ {
1154
+ navn: apen ? "chevron-up-outline" : "chevron-down-outline",
1155
+ storrelse: "minste",
1156
+ farge: tema.color.textSecondary
1157
+ }
1158
+ ),
1159
+ /* @__PURE__ */ jsxs2(Text2, { style: { flex: 1, color: tema.color.textSecondary, fontSize: tema.font.small }, children: [
1160
+ tekst.kontekstLinje,
1161
+ apen ? "" : tekst.kontekstVis
1162
+ ] })
906
1163
  ] })
907
1164
  }
908
1165
  ),
@@ -919,9 +1176,9 @@ function Felt({
919
1176
  borderBottomColor: tema.color.border
920
1177
  },
921
1178
  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(
1179
+ /* @__PURE__ */ jsx3(Text2, { style: { color: tema.color.textMuted, fontSize: tema.font.small, minWidth: tema.touch * 2 }, children: l.etikett }),
1180
+ /* @__PURE__ */ jsx3(Text2, { style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.small }, children: l.verdi }),
1181
+ /* @__PURE__ */ jsx3(
925
1182
  Pressable2,
926
1183
  {
927
1184
  testID: `fjern-${l.felt}`,
@@ -929,9 +1186,9 @@ function Felt({
929
1186
  accessibilityLabel: `${tekst.kontekstFjern} ${l.etikett.toLowerCase()} fra innsendingen`,
930
1187
  onPress: () => onFjernKontekst(l.felt),
931
1188
  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
1189
+ children: /* @__PURE__ */ jsxs2(View2, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
1190
+ /* @__PURE__ */ jsx3(Ikon, { navn: "close-outline", storrelse: "minste", farge: tema.color.textSecondary }),
1191
+ /* @__PURE__ */ jsx3(Text2, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tekst.kontekstFjern })
935
1192
  ] })
936
1193
  }
937
1194
  )
@@ -939,18 +1196,19 @@ function Felt({
939
1196
  },
940
1197
  l.felt
941
1198
  )),
942
- /* @__PURE__ */ jsx2(View2, { style: { paddingTop: tema.space.sm }, children: /* @__PURE__ */ jsx2(Hint, { children: tekst.kontekstAldri }) })
1199
+ /* @__PURE__ */ jsx3(View2, { style: { paddingTop: tema.space.sm }, children: /* @__PURE__ */ jsx3(Hint, { children: tekst.kontekstAldri }) })
943
1200
  ] }) : null
944
1201
  ] })
945
1202
  ]
946
1203
  }
947
1204
  ),
948
- /* @__PURE__ */ jsx2(View2, { testID: "skjema-fot", style: { flexGrow: 1, flexShrink: 0, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx2(
1205
+ /* @__PURE__ */ jsx3(View2, { testID: "skjema-fot", style: { flexGrow: 1, flexShrink: 0, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx3(
949
1206
  Btn,
950
1207
  {
951
1208
  testID: "send",
952
- label: spor === "onske" && !forKort ? tekst.nesteOnske : tekst.send,
1209
+ label: sender ? tekst.sender : harFeil ? tekst.provIgjen : offline ? tekst.offlineLagre : tekst.send,
953
1210
  disabled: forKort || sender,
1211
+ busy: sender,
954
1212
  hint: forKort ? tekst.forKort(minTextLength) : harVedlegg ? tekst.sendHintMedBilde : void 0,
955
1213
  onPress: onSend
956
1214
  }
@@ -961,7 +1219,7 @@ function Felt({
961
1219
  // src/widget/Valg.tsx
962
1220
  import "react";
963
1221
  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";
1222
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
965
1223
  function Valg({ onVelg }) {
966
1224
  const tema = useTema();
967
1225
  const flate = (spor, ikon, label, under) => /* @__PURE__ */ jsxs3(
@@ -984,8 +1242,8 @@ function Valg({ onVelg }) {
984
1242
  padding: tema.space.md
985
1243
  },
986
1244
  children: [
987
- /* @__PURE__ */ jsx3(Text3, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.h1 }, children: ikon }),
988
- /* @__PURE__ */ jsx3(
1245
+ /* @__PURE__ */ jsx4(Ikon, { navn: ikon, storrelse: "stor", farge: tema.color.textPrimary }),
1246
+ /* @__PURE__ */ jsx4(
989
1247
  Text3,
990
1248
  {
991
1249
  style: {
@@ -997,15 +1255,15 @@ function Valg({ onVelg }) {
997
1255
  children: label
998
1256
  }
999
1257
  ),
1000
- /* @__PURE__ */ jsx3(Text3, { style: { color: tema.color.textMuted, fontSize: tema.font.small, textAlign: "center" }, children: under })
1258
+ /* @__PURE__ */ jsx4(Text3, { style: { color: tema.color.textMuted, fontSize: tema.font.small, textAlign: "center" }, children: under })
1001
1259
  ]
1002
1260
  }
1003
1261
  );
1004
1262
  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)
1263
+ /* @__PURE__ */ jsx4(H, { children: tekst.valgTittel }),
1264
+ /* @__PURE__ */ jsx4(View3, { style: { flex: 1, justifyContent: "flex-end" }, children: /* @__PURE__ */ jsxs3(View3, { style: { flexDirection: "row", gap: tema.space.md }, children: [
1265
+ flate("feil", "bug-outline", tekst.sporFeil, tekst.sporFeilUnder),
1266
+ flate("onske", "bulb-outline", tekst.sporOnske, tekst.sporOnskeUnder)
1009
1267
  ] }) })
1010
1268
  ] });
1011
1269
  }
@@ -1013,11 +1271,13 @@ function Valg({ onVelg }) {
1013
1271
  // src/widget/KjenteFeil.tsx
1014
1272
  import "react";
1015
1273
  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";
1274
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
1275
+ var MAKS_KORT = 3;
1017
1276
  function KjenteFeil({
1018
1277
  kort,
1019
1278
  spor,
1020
1279
  laster,
1280
+ sender,
1021
1281
  onJaOgsa,
1022
1282
  onLigner,
1023
1283
  onNei
@@ -1025,24 +1285,25 @@ function KjenteFeil({
1025
1285
  const tema = useTema();
1026
1286
  if (laster) {
1027
1287
  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 })
1288
+ /* @__PURE__ */ jsx5(H, { sub: spor === "onske" ? tekst.kjenteFeilUnderOnske : tekst.kjenteFeilUnderFeil, children: spor === "onske" ? tekst.kjenteFeilTittelOnske : tekst.kjenteFeilTittelFeil }),
1289
+ /* @__PURE__ */ jsx5(ActivityIndicator, { accessibilityLabel: "Sjekker kjente feil", color: tema.color.textSecondary })
1030
1290
  ] });
1031
1291
  }
1032
1292
  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(
1293
+ /* @__PURE__ */ jsx5(H, { sub: spor === "onske" ? tekst.kjenteFeilUnderOnske : tekst.kjenteFeilUnderFeil, children: spor === "onske" ? tekst.kjenteFeilTittelOnske : tekst.kjenteFeilTittelFeil }),
1294
+ /* @__PURE__ */ jsx5(
1035
1295
  ScrollView2,
1036
1296
  {
1037
1297
  testID: "kjente-feil-liste",
1038
1298
  style: { flexGrow: 0, flexShrink: 1 },
1039
1299
  contentContainerStyle: { gap: tema.space.md },
1040
1300
  keyboardShouldPersistTaps: "handled",
1041
- children: kort.map((k) => {
1301
+ children: kort.slice(0, MAKS_KORT).map((k) => {
1302
+ const o = knownIssueStatus[k.status] ?? knownIssueStatus.aktiv;
1042
1303
  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;
1304
+ const kontekst = versjon ? `${k.title}. ${o.etikett}. ${versjon}` : `${k.title}. ${o.etikett}`;
1044
1305
  return /* @__PURE__ */ jsxs4(Card, { children: [
1045
- /* @__PURE__ */ jsx4(
1306
+ /* @__PURE__ */ jsx5(
1046
1307
  Text4,
1047
1308
  {
1048
1309
  style: {
@@ -1069,26 +1330,24 @@ function KjenteFeil({
1069
1330
  ]
1070
1331
  }
1071
1332
  ) : 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,
1333
+ /* @__PURE__ */ jsxs4(View4, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.sm, flexWrap: "wrap" }, children: [
1334
+ /* @__PURE__ */ jsx5(StatusPill, { ikon: o.ikon, etikett: o.etikett, fg: o.fg, bg: o.bg }),
1335
+ versjon ? /* @__PURE__ */ jsx5(Text4, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: versjon }) : null
1336
+ ] }),
1080
1337
  /* @__PURE__ */ jsxs4(View4, { style: { flexDirection: "row", gap: tema.space.sm }, children: [
1081
- /* @__PURE__ */ jsx4(
1338
+ /* @__PURE__ */ jsx5(
1082
1339
  Btn,
1083
1340
  {
1084
1341
  grow: true,
1085
1342
  testID: `ja-ogsa-${k.id}`,
1086
1343
  label: tekst.svarJa,
1087
1344
  accessibilityLabel: `${tekst.svarJa}. ${kontekst}`,
1345
+ disabled: sender,
1346
+ busy: sender,
1088
1347
  onPress: () => onJaOgsa(k)
1089
1348
  }
1090
1349
  ),
1091
- /* @__PURE__ */ jsx4(
1350
+ /* @__PURE__ */ jsx5(
1092
1351
  Btn,
1093
1352
  {
1094
1353
  grow: true,
@@ -1096,6 +1355,7 @@ function KjenteFeil({
1096
1355
  testID: `ligner-${k.id}`,
1097
1356
  label: tekst.svarLigner,
1098
1357
  accessibilityLabel: `${tekst.svarLigner}. ${kontekst}`,
1358
+ disabled: sender,
1099
1359
  onPress: () => onLigner(k)
1100
1360
  }
1101
1361
  )
@@ -1104,46 +1364,79 @@ function KjenteFeil({
1104
1364
  })
1105
1365
  }
1106
1366
  ),
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 }) })
1367
+ /* @__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
1368
  ] });
1109
1369
  }
1110
1370
 
1111
1371
  // src/widget/Kvittering.tsx
1112
1372
  import "react";
1113
1373
  import { Text as Text5, View as View5 } from "react-native";
1114
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
1374
+
1375
+ // src/widget/status.ts
1376
+ function formaterFrist(iso) {
1377
+ const d = new Date(iso);
1378
+ if (Number.isNaN(d.getTime())) return iso;
1379
+ return new Intl.DateTimeFormat("nb-NO", { day: "numeric", month: "long" }).format(d);
1380
+ }
1381
+ function statusVisning(status, type, deadlineAt) {
1382
+ const o = submissionStatus[status];
1383
+ const spor = type === "onske" ? "onske" : "feil";
1384
+ return {
1385
+ ikon: o.ikon,
1386
+ etikett: o.etikett[spor],
1387
+ fg: o.fg,
1388
+ bg: o.bg,
1389
+ lofte: settInnFrist(o.lofte[spor], deadlineAt)
1390
+ };
1391
+ }
1392
+ function settInnFrist(mal, deadlineAt) {
1393
+ if (!mal.includes("{frist}")) return mal;
1394
+ return deadlineAt ? mal.replace("{frist}", formaterFrist(deadlineAt)) : lofteUtenFrist;
1395
+ }
1396
+ var venterVisning = {
1397
+ ikon: "cloud-offline-outline",
1398
+ etikett: "Venter p\xE5 nett",
1399
+ fg: "textSecondary",
1400
+ bg: "neutralBg",
1401
+ lofte: lofte.venterNett
1402
+ };
1403
+
1404
+ // src/widget/Kvittering.tsx
1405
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
1115
1406
  function Kvittering({
1116
1407
  art,
1117
1408
  saksnummer,
1118
1409
  vedlegg,
1410
+ frist,
1119
1411
  onLukk
1120
1412
  }) {
1121
1413
  const tema = useTema();
1122
1414
  const innhold = {
1123
1415
  feil: { h: tekst.kvitteringSendt, p: tekst.kvitteringFeil },
1124
- onske: { h: tekst.kvitteringSendt, p: tekst.kvitteringOnske },
1416
+ // Løftet er NØYAKTIG det «Mine innspill» og panelet viser for «Vurderes»:
1417
+ // det leses fra temaet, så kvitteringen og statusen ikke kan si to ting.
1418
+ onske: { h: tekst.kvitteringSendt, p: statusVisning("vurderes", "onske", frist).lofte },
1125
1419
  jaOgsa: { h: tekst.kvitteringRegistrert, p: tekst.kvitteringJaOgsa },
1126
1420
  // Køet offline: kvitteringen kan IKKE love svar på noe som ikke er sendt
1127
1421
  // (DD-41 presiserer DD-07). Den lover bare at det sendes.
1128
- k\u00F8: { h: tekst.offlineTittel, p: tekst.offlineBanner }
1422
+ k\u00F8: { h: tekst.koKvitteringTittel, p: tekst.offlineBanner }
1129
1423
  }[art];
1130
1424
  const overskrift = vedlegg === "feilet" ? tekst.kvitteringVedleggFeilet : innhold.h;
1131
1425
  const brodtekst = vedlegg === "feilet" ? `${tekst.tekstenErLagret} ${innhold.p}` : innhold.p;
1132
1426
  return /* @__PURE__ */ jsxs5(View5, { style: { flex: 1, justifyContent: "center", gap: tema.space.lg }, children: [
1133
1427
  /* @__PURE__ */ jsxs5(View5, { style: { alignItems: "center", gap: tema.space.md }, children: [
1134
- /* @__PURE__ */ jsx5(
1135
- Text5,
1428
+ /* @__PURE__ */ jsx6(
1429
+ Ikon,
1136
1430
  {
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"
1431
+ navn: art === "k\xF8" ? "swap-vertical-outline" : "checkmark-circle-outline",
1432
+ storrelse: "stor",
1433
+ farge: art === "k\xF8" ? tema.color.neutral : tema.color.success
1141
1434
  }
1142
1435
  ),
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(
1436
+ /* @__PURE__ */ jsx6(H, { children: overskrift }),
1437
+ vedlegg === "feilet" ? /* @__PURE__ */ jsx6(Banner, { ikon: "warning-outline", tone: "warning", children: tekst.vedleggFeiletBanner }) : null,
1438
+ vedlegg === "forkastet" ? /* @__PURE__ */ jsx6(Banner, { ikon: "image-outline", tone: "info", children: tekst.offlineUtenBilde }) : null,
1439
+ /* @__PURE__ */ jsx6(
1147
1440
  Text5,
1148
1441
  {
1149
1442
  testID: "kvittering-tekst",
@@ -1158,72 +1451,16 @@ function Kvittering({
1158
1451
  children: brodtekst
1159
1452
  }
1160
1453
  ),
1161
- saksnummer ? /* @__PURE__ */ jsx5(Hint, { children: vedlegg === "feilet" ? tekst.saksnummerUtenVedlegg(saksnummer) : tekst.saksnummer(saksnummer) }) : null
1454
+ saksnummer ? /* @__PURE__ */ jsx6(Hint, { children: vedlegg === "feilet" ? tekst.saksnummerUtenVedlegg(saksnummer) : tekst.saksnummer(saksnummer) }) : null
1162
1455
  ] }),
1163
- /* @__PURE__ */ jsx5(Btn, { testID: "tilbake-til-appen", label: tekst.tilbakeTilAppen, onPress: onLukk })
1456
+ /* @__PURE__ */ jsx6(Btn, { testID: "tilbake-til-appen", label: tekst.tilbakeTilAppen, onPress: onLukk })
1164
1457
  ] });
1165
1458
  }
1166
1459
 
1167
1460
  // src/widget/MineInnspill.tsx
1168
1461
  import "react";
1169
1462
  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";
1463
+ import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
1227
1464
  function MineInnspill({
1228
1465
  rader,
1229
1466
  laster,
@@ -1232,20 +1469,15 @@ function MineInnspill({
1232
1469
  }) {
1233
1470
  const tema = useTema();
1234
1471
  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) => {
1472
+ /* @__PURE__ */ jsx7(H, { sub: tekst.mineUnder, children: tekst.mineTittel }),
1473
+ 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
1474
  const venter = rad.pending === true;
1238
1475
  const v = venter ? venterVisning : statusVisning(rad.status, rad.type, rad.deadlineAt);
1239
1476
  const nokkel = venter ? rad.clientRef : rad.id;
1240
1477
  const svar = venter ? void 0 : rad.reply;
1241
1478
  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(
1479
+ /* @__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) }),
1480
+ /* @__PURE__ */ jsx7(
1249
1481
  Text6,
1250
1482
  {
1251
1483
  style: {
@@ -1257,12 +1489,12 @@ function MineInnspill({
1257
1489
  }
1258
1490
  ),
1259
1491
  /* @__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 })
1492
+ /* @__PURE__ */ jsx7(StatusPill, { ikon: v.ikon, etikett: v.etikett, fg: v.fg, bg: v.bg }),
1493
+ /* @__PURE__ */ jsx7(Hint, { children: v.lofte })
1262
1494
  ] }),
1263
1495
  !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 })
1496
+ /* @__PURE__ */ jsx7(Ikon, { navn: "trash-outline", storrelse: "minste", farge: tema.color.textMuted }),
1497
+ /* @__PURE__ */ jsx7(Hint, { children: tekst.bildeFjernet })
1266
1498
  ] }) : null,
1267
1499
  svar ? /* @__PURE__ */ jsxs6(
1268
1500
  View6,
@@ -1274,8 +1506,8 @@ function MineInnspill({
1274
1506
  gap: tema.space.xs
1275
1507
  },
1276
1508
  children: [
1277
- /* @__PURE__ */ jsx6(Text6, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tenantName ? tekst.svarFra(tenantName) : tekst.svarFraGenerisk }),
1278
- /* @__PURE__ */ jsx6(
1509
+ /* @__PURE__ */ jsx7(Text6, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tenantName ? tekst.svarFra(tenantName) : tekst.svarFraGenerisk }),
1510
+ /* @__PURE__ */ jsx7(
1279
1511
  Text6,
1280
1512
  {
1281
1513
  style: {
@@ -1291,7 +1523,7 @@ function MineInnspill({
1291
1523
  ) : null
1292
1524
  ] }, nokkel);
1293
1525
  }) }),
1294
- /* @__PURE__ */ jsx6(Btn, { testID: "send-nytt", label: tekst.sendNytt, onPress: onNytt })
1526
+ /* @__PURE__ */ jsx7(Btn, { testID: "send-nytt", label: rader.length === 0 ? tekst.sendForste : tekst.sendNytt, onPress: onNytt })
1295
1527
  ] });
1296
1528
  }
1297
1529
 
@@ -1299,7 +1531,7 @@ function MineInnspill({
1299
1531
  import { skaler, strokTilRekter, treffer, trykkTilRekt } from "@innspel/core";
1300
1532
  import { useCallback, useMemo as useMemo2, useRef, useState as useState2 } from "react";
1301
1533
  import { Image as Image2, Pressable as Pressable4, StyleSheet, Text as Text7, View as View7 } from "react-native";
1302
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
1534
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
1303
1535
  function Skjermbilde({
1304
1536
  bilde,
1305
1537
  automaskerRot,
@@ -1381,8 +1613,8 @@ function Skjermbilde({
1381
1613
  backgroundColor: valgt ? tema.color.surfaceRaised : "transparent"
1382
1614
  },
1383
1615
  children: [
1384
- /* @__PURE__ */ jsx7(Text7, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.body }, children: ikon }),
1385
- /* @__PURE__ */ jsx7(
1616
+ /* @__PURE__ */ jsx8(Ikon, { navn: ikon, farge: tema.color.textPrimary }),
1617
+ /* @__PURE__ */ jsx8(
1386
1618
  Text7,
1387
1619
  {
1388
1620
  style: {
@@ -1400,14 +1632,14 @@ function Skjermbilde({
1400
1632
  };
1401
1633
  const a11y = tekst.skjermbildeA11y(automasker.length, egne.length, allTekst);
1402
1634
  return /* @__PURE__ */ jsxs7(View7, { testID: "skjermbilde-steg", style: { flexGrow: 1, flexShrink: 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,
1635
+ /* @__PURE__ */ jsx8(H, { sub: kilde === "galleri" ? tekst.skjermbildeUnderGalleri : tekst.skjermbildeUnder, children: tekst.skjermbildeTittel }),
1636
+ notat ? /* @__PURE__ */ jsx8(View7, { testID: "bilde-notat", children: /* @__PURE__ */ jsx8(Hint, { children: notat }) }) : null,
1405
1637
  /* @__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)
1638
+ knapp("felt", "scan-outline", tekst.maskerFelt),
1639
+ knapp("pensel", "brush-outline", tekst.tegnOver),
1640
+ knapp("allTekst", "grid-outline", tekst.maskerAllTekst)
1409
1641
  ] }),
1410
- /* @__PURE__ */ jsx7(
1642
+ /* @__PURE__ */ jsx8(
1411
1643
  View7,
1412
1644
  {
1413
1645
  testID: "skjermbilde-ramme",
@@ -1421,7 +1653,7 @@ function Skjermbilde({
1421
1653
  borderRadius: tema.radius.md,
1422
1654
  overflow: "hidden"
1423
1655
  },
1424
- children: /* @__PURE__ */ jsx7(View7, { testID: "skjermbilde-flate", pointerEvents: "box-none", style: [StyleSheet.absoluteFill, { alignItems: "center", justifyContent: "center" }], children: visning ? /* @__PURE__ */ jsxs7(
1656
+ children: /* @__PURE__ */ jsx8(View7, { testID: "skjermbilde-flate", pointerEvents: "box-none", style: [StyleSheet.absoluteFill, { alignItems: "center", justifyContent: "center" }], children: visning ? /* @__PURE__ */ jsxs7(
1425
1657
  View7,
1426
1658
  {
1427
1659
  ref: previewRef,
@@ -1437,7 +1669,7 @@ function Skjermbilde({
1437
1669
  onResponderTerminate: onRelease,
1438
1670
  style: { width: visning.width, height: visning.height, backgroundColor: screenRules.previewBackdrop },
1439
1671
  children: [
1440
- /* @__PURE__ */ jsx7(
1672
+ /* @__PURE__ */ jsx8(
1441
1673
  Image2,
1442
1674
  {
1443
1675
  testID: "skjermbilde-bilde",
@@ -1447,7 +1679,7 @@ function Skjermbilde({
1447
1679
  accessibilityIgnoresInvertColors: true
1448
1680
  }
1449
1681
  ),
1450
- automasker.map((r, i) => /* @__PURE__ */ jsx7(
1682
+ automasker.map((r, i) => /* @__PURE__ */ jsx8(
1451
1683
  View7,
1452
1684
  {
1453
1685
  testID: `automask-${i}`,
@@ -1464,14 +1696,20 @@ function Skjermbilde({
1464
1696
  alignItems: "center",
1465
1697
  justifyContent: "center"
1466
1698
  },
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
1699
+ children: !komponerer ? (
1700
+ // Etiketten står PÅ den maskerte flaten og måles mot NETTOPP den
1701
+ // (skjermKontrastpar i theme.ts). textSecondary var 2,2:1 (C11a).
1702
+ // Ikonet arver samme farge: det er unntaket i «Styling» — maskeringen
1703
+ // tegnes i faste signalfarger, ikke i palettens.
1704
+ /* @__PURE__ */ jsxs7(View7, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
1705
+ /* @__PURE__ */ jsx8(Ikon, { navn: "lock-closed-outline", storrelse: "minste", farge: screenRules.autoMaskText }),
1706
+ /* @__PURE__ */ jsx8(Text7, { style: { color: screenRules.autoMaskText, fontSize: tema.font.small }, numberOfLines: 1, children: tekst.maskertAvAppen })
1707
+ ] })
1708
+ ) : null
1471
1709
  },
1472
1710
  `auto-${i}`
1473
1711
  )),
1474
- egne.map((r, i) => /* @__PURE__ */ jsx7(
1712
+ egne.map((r, i) => /* @__PURE__ */ jsx8(
1475
1713
  View7,
1476
1714
  {
1477
1715
  testID: `maske-${i}`,
@@ -1485,21 +1723,42 @@ function Skjermbilde({
1485
1723
  ) : null })
1486
1724
  }
1487
1725
  ),
1488
- automasker.length ? /* @__PURE__ */ jsxs7(Hint, { children: [
1489
- "\u{1F512} ",
1490
- tekst.maskertAvAppenHint
1726
+ automasker.length ? /* @__PURE__ */ jsxs7(View7, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
1727
+ /* @__PURE__ */ jsx8(Ikon, { navn: "lock-closed-outline", storrelse: "minste", farge: tema.color.textMuted }),
1728
+ /* @__PURE__ */ jsx8(Hint, { children: tekst.maskertAvAppenHint })
1491
1729
  ] }) : null,
1492
- egne.length ? /* @__PURE__ */ jsx7(Hint, { children: tekst.dittStrok }) : null,
1493
- allTekst ? /* @__PURE__ */ jsx7(Hint, { children: tekst.allTekstHint }) : null,
1730
+ egne.length ? /* @__PURE__ */ jsx8(Hint, { children: tekst.dittStrok }) : null,
1731
+ allTekst ? /* @__PURE__ */ jsx8(Hint, { children: tekst.allTekstHint }) : null,
1494
1732
  /* @__PURE__ */ jsxs7(View7, { testID: "skjermbilde-fot", style: { flexShrink: 0, 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 })
1733
+ /* @__PURE__ */ jsx8(
1734
+ Btn,
1735
+ {
1736
+ variant: "secondary",
1737
+ testID: "angre-siste",
1738
+ label: tekst.angreSiste,
1739
+ accessibilityLabel: tekst.angreSisteA11y,
1740
+ disabled: komponerer || egne.length === 0,
1741
+ onPress: () => setEgne((x) => x.slice(0, -1))
1742
+ }
1743
+ ),
1744
+ /* @__PURE__ */ jsx8(
1745
+ Btn,
1746
+ {
1747
+ variant: "danger",
1748
+ testID: "fjern-bildet",
1749
+ ikon: "trash-outline",
1750
+ label: tekst.fjernBildet,
1751
+ onPress: onFjern,
1752
+ disabled: komponerer
1753
+ }
1754
+ ),
1755
+ /* @__PURE__ */ jsx8(Btn, { testID: "legg-ved", label: tekst.leggVed, onPress: onLeggVed, disabled: komponerer || !visning })
1497
1756
  ] })
1498
1757
  ] });
1499
1758
  }
1500
1759
 
1501
1760
  // src/widget/Widget.tsx
1502
- import { Fragment, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
1761
+ import { Fragment, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
1503
1762
  var FANGST = { format: "jpg", quality: 0.85 };
1504
1763
  function Widget({
1505
1764
  client,
@@ -1522,6 +1781,7 @@ function Widget({
1522
1781
  const [funn, setFunn] = useState3([]);
1523
1782
  const [fjernede, setFjernede] = useState3([]);
1524
1783
  const [sender, setSender] = useState3(false);
1784
+ const online = useNettstatus(client);
1525
1785
  const [feil, setFeil] = useState3();
1526
1786
  const [kvittering, setKvittering] = useState3();
1527
1787
  const [mine, setMine] = useState3([]);
@@ -1561,7 +1821,11 @@ function Widget({
1561
1821
  client.track({ name: "widget_opened" });
1562
1822
  void client.queue.flush().catch(() => void 0);
1563
1823
  void client.loadSettings().then((s) => setInnstillinger({ ...s })).catch(() => void 0);
1564
- if (apneOpsjoner?.track) velgSpor(apneOpsjoner.track);
1824
+ if (!client.isAnonymous) {
1825
+ void client.subjects.submissions().then(setMine).catch(() => void 0);
1826
+ }
1827
+ if (apneOpsjoner?.view === "mine" && !client.isAnonymous) void visMine();
1828
+ else if (apneOpsjoner?.track) velgSpor(apneOpsjoner.track);
1565
1829
  }, [synlig]);
1566
1830
  const hentKort = useCallback2(async () => {
1567
1831
  setLasterKort(true);
@@ -1657,12 +1921,21 @@ function Widget({
1657
1921
  setVedlegg(void 0);
1658
1922
  setSteg("felt");
1659
1923
  }, []);
1660
- const send = useCallback2(async () => {
1661
- if (spor === "onske" && steg === "felt" && kort.length === 0 && !lasterKort) {
1924
+ const gaaTilbake = useCallback2(() => {
1925
+ setFeil(void 0);
1926
+ if (steg === "skjermbilde") {
1927
+ setBilde(void 0);
1928
+ setAutomasker([]);
1929
+ setSteg("felt");
1930
+ return;
1931
+ }
1932
+ if (steg === "felt" && spor === "feil" && kort.length > 0) {
1662
1933
  setSteg("kjenteFeil");
1663
- await hentKort();
1664
1934
  return;
1665
1935
  }
1936
+ setSteg("valg");
1937
+ }, [steg, spor, kort.length]);
1938
+ const send = useCallback2(async () => {
1666
1939
  setSender(true);
1667
1940
  setFeil(void 0);
1668
1941
  try {
@@ -1679,6 +1952,8 @@ function Widget({
1679
1952
  setKvittering({
1680
1953
  art: spor,
1681
1954
  nr: res.submission.id,
1955
+ // Tidsløftet i kvitteringen er DATOEN fra svaret, aldri «innen 90 dager» (DD-07, DD-28).
1956
+ ...res.submission.deadlineAt ? { frist: res.submission.deadlineAt } : {},
1682
1957
  ...res.attachment?.status === "failed" ? { vedlegg: "feilet" } : {}
1683
1958
  });
1684
1959
  }
@@ -1690,7 +1965,7 @@ function Widget({
1690
1965
  } finally {
1691
1966
  setSender(false);
1692
1967
  }
1693
- }, [client, spor, steg, verdi, vedlegg, lenketTil, fjernede, kort.length, lasterKort, hentKort]);
1968
+ }, [client, spor, verdi, vedlegg, lenketTil, fjernede]);
1694
1969
  const jaOgsa = useCallback2(
1695
1970
  async (k) => {
1696
1971
  setSender(true);
@@ -1717,7 +1992,7 @@ function Widget({
1717
1992
  setLasterMine(false);
1718
1993
  }
1719
1994
  }, [client]);
1720
- return /* @__PURE__ */ jsx8(
1995
+ return /* @__PURE__ */ jsx9(
1721
1996
  Modal,
1722
1997
  {
1723
1998
  visible: synlig,
@@ -1725,7 +2000,7 @@ function Widget({
1725
2000
  animationType: "slide",
1726
2001
  onRequestClose: lukk,
1727
2002
  accessibilityViewIsModal: true,
1728
- children: /* @__PURE__ */ jsx8(
2003
+ children: /* @__PURE__ */ jsx9(
1729
2004
  KeyboardAvoidingView,
1730
2005
  {
1731
2006
  behavior: "padding",
@@ -1754,8 +2029,8 @@ function Widget({
1754
2029
  },
1755
2030
  children: [
1756
2031
  /* @__PURE__ */ jsxs8(View8, { style: { flexDirection: "row", justifyContent: "space-between", alignItems: "center" }, children: [
1757
- 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, {}),
1758
- /* @__PURE__ */ jsx8(
2032
+ steg !== "valg" && steg !== "kvittering" ? /* @__PURE__ */ jsx9(Btn, { variant: "ghost", testID: "tilbake", ikon: "arrow-back-outline", label: tekst.tilbake, onPress: gaaTilbake }) : /* @__PURE__ */ jsx9(View8, {}),
2033
+ /* @__PURE__ */ jsx9(
1759
2034
  Pressable5,
1760
2035
  {
1761
2036
  testID: "lukk",
@@ -1763,30 +2038,42 @@ function Widget({
1763
2038
  accessibilityLabel: tekst.lukk,
1764
2039
  onPress: lukk,
1765
2040
  style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
1766
- children: /* @__PURE__ */ jsx8(Text8, { style: { color: tema.color.textSecondary, fontSize: tema.font.body }, children: "\u2715" })
2041
+ children: /* @__PURE__ */ jsx9(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
1767
2042
  }
1768
2043
  )
1769
2044
  ] }),
1770
- feil ? /* @__PURE__ */ jsx8(Banner, { live: true, ikon: "\u26A0", tone: "danger", children: tekst.sendefeilBanner(feil) }) : null,
2045
+ feil ? /* @__PURE__ */ jsx9(Banner, { live: true, ikon: "warning-outline", tone: "danger", children: tekst.sendefeilBanner(feil) }) : null,
2046
+ !online && steg !== "kvittering" && steg !== "mine" ? /* @__PURE__ */ jsx9(Banner, { ikon: "cloud-offline-outline", tone: "info", testID: "offline-banner", children: tekst.offlineBanner }) : null,
1771
2047
  steg === "valg" ? /* @__PURE__ */ jsxs8(Fragment, { children: [
1772
- /* @__PURE__ */ jsx8(Valg, { onVelg: velgSpor }),
1773
- /* @__PURE__ */ jsx8(Btn, { variant: "ghost", testID: "mine-innspill", ikon: "\u{1F4CB}", label: tekst.mineTittel, onPress: visMine })
2048
+ /* @__PURE__ */ jsx9(Valg, { onVelg: velgSpor }),
2049
+ !client.isAnonymous ? /* @__PURE__ */ jsx9(
2050
+ Btn,
2051
+ {
2052
+ variant: mine.length > 0 ? "secondary" : "ghost",
2053
+ testID: "mine-innspill",
2054
+ ikon: "list-outline",
2055
+ label: mine.length > 0 ? tekst.mineMedAntall(mine.length) : tekst.mineTittel,
2056
+ accessibilityLabel: mine.length > 0 ? tekst.mineEtikett(mine.length) : tekst.mineTittel,
2057
+ onPress: visMine
2058
+ }
2059
+ ) : null
1774
2060
  ] }) : null,
1775
- steg === "kjenteFeil" ? /* @__PURE__ */ jsx8(
2061
+ steg === "kjenteFeil" ? /* @__PURE__ */ jsx9(
1776
2062
  KjenteFeil,
1777
2063
  {
1778
2064
  kort,
1779
2065
  spor,
1780
2066
  laster: lasterKort,
2067
+ sender,
1781
2068
  onJaOgsa: jaOgsa,
1782
2069
  onLigner: (k) => {
1783
2070
  setLenketTil(k);
1784
2071
  setSteg("felt");
1785
2072
  },
1786
- onNei: () => spor === "onske" ? void send() : setSteg("felt")
2073
+ onNei: () => setSteg("felt")
1787
2074
  }
1788
2075
  ) : null,
1789
- steg === "felt" ? /* @__PURE__ */ jsx8(
2076
+ steg === "felt" ? /* @__PURE__ */ jsx9(
1790
2077
  Felt,
1791
2078
  {
1792
2079
  spor,
@@ -1801,6 +2088,8 @@ function Widget({
1801
2088
  funn,
1802
2089
  onSend: send,
1803
2090
  sender,
2091
+ harFeil: feil !== void 0,
2092
+ offline: !online,
1804
2093
  ...fangstMulig ? { onSkjermbilde: taSkjermbilde } : {},
1805
2094
  ...galleriMulig ? { onVelgBilde: velgBilde } : {},
1806
2095
  ...bildeNotat ? { bildeNotat } : {},
@@ -1808,7 +2097,7 @@ function Widget({
1808
2097
  onFjernVedlegg: fjernBilde
1809
2098
  }
1810
2099
  ) : null,
1811
- steg === "skjermbilde" && bilde ? /* @__PURE__ */ jsx8(
2100
+ steg === "skjermbilde" && bilde ? /* @__PURE__ */ jsx9(
1812
2101
  Skjermbilde,
1813
2102
  {
1814
2103
  bilde,
@@ -1822,16 +2111,17 @@ function Widget({
1822
2111
  onLeggVed: leggVedBilde
1823
2112
  }
1824
2113
  ) : null,
1825
- steg === "kvittering" && kvittering ? /* @__PURE__ */ jsx8(
2114
+ steg === "kvittering" && kvittering ? /* @__PURE__ */ jsx9(
1826
2115
  Kvittering,
1827
2116
  {
1828
2117
  art: kvittering.art,
1829
2118
  ...kvittering.nr ? { saksnummer: kvittering.nr } : {},
1830
2119
  ...kvittering.vedlegg ? { vedlegg: kvittering.vedlegg } : {},
2120
+ ...kvittering.frist ? { frist: kvittering.frist } : {},
1831
2121
  onLukk: lukk
1832
2122
  }
1833
2123
  ) : null,
1834
- steg === "mine" ? /* @__PURE__ */ jsx8(
2124
+ steg === "mine" ? /* @__PURE__ */ jsx9(
1835
2125
  MineInnspill,
1836
2126
  {
1837
2127
  rader: mine,
@@ -1848,6 +2138,16 @@ function Widget({
1848
2138
  }
1849
2139
  );
1850
2140
  }
2141
+ function useNettstatus(client) {
2142
+ const c = client.connectivity;
2143
+ const [online, setOnline] = useState3(() => c?.isOnline() ?? true);
2144
+ useEffect(() => {
2145
+ if (!c) return void 0;
2146
+ setOnline(c.isOnline());
2147
+ return c.subscribe?.((v) => setOnline(v));
2148
+ }, [c]);
2149
+ return online;
2150
+ }
1851
2151
  function fjernetKontekst(client, fjernede) {
1852
2152
  const ut = {};
1853
2153
  for (const k of Object.keys(client.context)) {
@@ -1857,7 +2157,7 @@ function fjernetKontekst(client, fjernede) {
1857
2157
  }
1858
2158
 
1859
2159
  // src/InnspelProvider.tsx
1860
- import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
2160
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
1861
2161
  var Kontekst = createContext3(null);
1862
2162
  function InnspelProvider({
1863
2163
  client,
@@ -1891,9 +2191,9 @@ function InnspelProvider({
1891
2191
  () => ({ adapter: screenshot ?? null, rootRef, privat }),
1892
2192
  [screenshot, privat]
1893
2193
  );
1894
- return /* @__PURE__ */ jsx9(Kontekst.Provider, { value: verdi, children: /* @__PURE__ */ jsx9(SkjermbildeContext.Provider, { value: skjermbilde, children: /* @__PURE__ */ jsxs9(TemaProvider, { value: tema, children: [
1895
- /* @__PURE__ */ jsx9(View9, { ref: rootRef, collapsable: false, style: { flex: 1 }, testID: "innspel-rot", children }),
1896
- /* @__PURE__ */ jsx9(
2194
+ return /* @__PURE__ */ jsx10(Kontekst.Provider, { value: verdi, children: /* @__PURE__ */ jsx10(SkjermbildeContext.Provider, { value: skjermbilde, children: /* @__PURE__ */ jsxs9(TemaProvider, { value: tema, children: [
2195
+ /* @__PURE__ */ jsx10(View9, { ref: rootRef, collapsable: false, style: { flex: 1 }, testID: "innspel-rot", children }),
2196
+ /* @__PURE__ */ jsx10(
1897
2197
  Widget,
1898
2198
  {
1899
2199
  client,
@@ -1919,7 +2219,7 @@ function useInnspel() {
1919
2219
  // src/InnspelPrivate.tsx
1920
2220
  import { useEffect as useEffect2, useRef as useRef4 } from "react";
1921
2221
  import { View as View10 } from "react-native";
1922
- import { jsx as jsx10 } from "react/jsx-runtime";
2222
+ import { jsx as jsx11 } from "react/jsx-runtime";
1923
2223
  function InnspelPrivate({ children, style }) {
1924
2224
  const ref = useRef4(null);
1925
2225
  const kontekst = useSkjermbilde();
@@ -1928,7 +2228,7 @@ function InnspelPrivate({ children, style }) {
1928
2228
  if (!registrer) return;
1929
2229
  return registrer(ref);
1930
2230
  }, [registrer]);
1931
- return /* @__PURE__ */ jsx10(View10, { ref, collapsable: false, style, testID: "innspel-privat", children });
2231
+ return /* @__PURE__ */ jsx11(View10, { ref, collapsable: false, style, testID: "innspel-privat", children });
1932
2232
  }
1933
2233
 
1934
2234
  // src/program/InnspelProgram.tsx
@@ -1936,11 +2236,11 @@ import {
1936
2236
  InnspelApiError as InnspelApiError2
1937
2237
  } from "@innspel/core";
1938
2238
  import { useCallback as useCallback4, useEffect as useEffect3, useState as useState6 } from "react";
1939
- import { Modal as Modal4, Pressable as Pressable8, Text as Text13, View as View15 } from "react-native";
2239
+ import { Modal as Modal4, Pressable as Pressable8, Text as Text12, View as View15 } from "react-native";
1940
2240
 
1941
2241
  // src/program/Aksept.tsx
1942
2242
  import "react";
1943
- import { Linking, Modal as Modal2, Pressable as Pressable6, ScrollView as ScrollView4, Text as Text9, View as View11 } from "react-native";
2243
+ import { Linking, Modal as Modal2, Pressable as Pressable6, ScrollView as ScrollView4, Text as Text8, View as View11 } from "react-native";
1944
2244
 
1945
2245
  // src/program/periode.ts
1946
2246
  var MANEDER = [
@@ -1970,7 +2270,7 @@ function minutterPerOppgave(tasks) {
1970
2270
  }
1971
2271
 
1972
2272
  // src/program/Aksept.tsx
1973
- import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
2273
+ import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
1974
2274
  function Aksept({
1975
2275
  program,
1976
2276
  harToken,
@@ -1986,7 +2286,7 @@ function Aksept({
1986
2286
  periode(program.opensAt, program.closesAt),
1987
2287
  program.maxContacts
1988
2288
  );
1989
- 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(
2289
+ 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(
1990
2290
  View11,
1991
2291
  {
1992
2292
  testID: "program-aksept",
@@ -2002,14 +2302,14 @@ function Aksept({
2002
2302
  },
2003
2303
  children: [
2004
2304
  /* @__PURE__ */ jsxs10(View11, { style: { flexDirection: "row", justifyContent: "space-between", alignItems: "center" }, children: [
2005
- /* @__PURE__ */ jsx11(Btn, { variant: "ghost", testID: "aksept-tilbake", ikon: "\u2190", label: tekst.tilbake, onPress: onLukk }),
2006
- /* @__PURE__ */ jsx11(View11, {})
2305
+ /* @__PURE__ */ jsx12(Btn, { variant: "ghost", testID: "aksept-tilbake", ikon: "arrow-back-outline", label: tekst.tilbake, onPress: onLukk }),
2306
+ /* @__PURE__ */ jsx12(View11, {})
2007
2307
  ] }),
2008
- feil ? /* @__PURE__ */ jsx11(Banner, { live: true, ikon: "\u26A0", tone: "danger", children: tekst.akseptFeil(feil) }) : null,
2308
+ feil ? /* @__PURE__ */ jsx12(Banner, { live: true, ikon: "warning-outline", tone: "danger", children: tekst.akseptFeil(feil) }) : null,
2009
2309
  /* @__PURE__ */ jsxs10(ScrollView4, { contentContainerStyle: { gap: tema.space.md }, children: [
2010
- /* @__PURE__ */ jsx11(H, { sub: tekst.akseptHva, children: program.name }),
2011
- /* @__PURE__ */ jsx11(
2012
- Text9,
2310
+ /* @__PURE__ */ jsx12(H, { sub: tekst.akseptHva, children: program.name }),
2311
+ /* @__PURE__ */ jsx12(
2312
+ Text8,
2013
2313
  {
2014
2314
  accessibilityRole: "text",
2015
2315
  style: {
@@ -2021,11 +2321,11 @@ function Aksept({
2021
2321
  children: tall
2022
2322
  }
2023
2323
  ),
2024
- /* @__PURE__ */ jsx11(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: program.hypothesis }),
2324
+ /* @__PURE__ */ jsx12(Text8, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: program.hypothesis }),
2025
2325
  /* @__PURE__ */ jsxs10(Card, { children: [
2026
- /* @__PURE__ */ jsx11(H, { children: tekst.akseptOppgaver }),
2326
+ /* @__PURE__ */ jsx12(H, { children: tekst.akseptOppgaver }),
2027
2327
  program.tasks.map((o) => /* @__PURE__ */ jsxs10(View11, { style: { gap: tema.space.xs }, children: [
2028
- /* @__PURE__ */ jsx11(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: o.title }),
2328
+ /* @__PURE__ */ jsx12(Text8, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: o.title }),
2029
2329
  /* @__PURE__ */ jsxs10(Hint, { children: [
2030
2330
  tekst.akseptOppgaveTid(o.estimatedMinutes),
2031
2331
  o.screenHint ? ` \xB7 ${o.screenHint}` : ""
@@ -2033,30 +2333,34 @@ function Aksept({
2033
2333
  ] }, o.id))
2034
2334
  ] }),
2035
2335
  program.knownIssues.length > 0 ? /* @__PURE__ */ jsxs10(Card, { children: [
2036
- /* @__PURE__ */ jsx11(H, { sub: tekst.akseptKjenteFeilUnder, children: tekst.akseptKjenteFeil(program.knownIssues.length) }),
2037
- program.knownIssues.map((k) => /* @__PURE__ */ jsxs10(View11, { style: { gap: tema.space.xs }, children: [
2038
- /* @__PURE__ */ jsx11(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.small, lineHeight: tema.lineHeight.small }, children: k.title }),
2039
- k.workaround ? /* @__PURE__ */ jsxs10(Text9, { style: { color: tema.color.textSecondary, fontSize: tema.font.small, lineHeight: tema.lineHeight.small }, children: [
2040
- tekst.omvei,
2041
- " ",
2042
- k.workaround
2043
- ] }) : null,
2044
- k.fixedIn ? /* @__PURE__ */ jsx11(
2045
- StatusPill,
2046
- {
2047
- ikon: k.status === "fikset" ? "\u2713" : "\u{1F527}",
2048
- etikett: k.status === "fikset" ? tekst.rettetI(k.fixedIn) : tekst.rettesI(k.fixedIn),
2049
- farge: k.status === "fikset" ? "success" : "info"
2050
- }
2051
- ) : null
2052
- ] }, k.id))
2336
+ /* @__PURE__ */ jsx12(H, { sub: tekst.akseptKjenteFeilUnder, children: tekst.akseptKjenteFeil(program.knownIssues.length) }),
2337
+ program.knownIssues.map((k) => {
2338
+ const o = knownIssueStatus[k.status] ?? knownIssueStatus.aktiv;
2339
+ return /* @__PURE__ */ jsxs10(View11, { style: { gap: tema.space.xs }, children: [
2340
+ /* @__PURE__ */ jsx12(Text8, { style: { color: tema.color.textPrimary, fontSize: tema.font.small, lineHeight: tema.lineHeight.small }, children: k.title }),
2341
+ k.workaround ? /* @__PURE__ */ jsxs10(Text8, { style: { color: tema.color.textSecondary, fontSize: tema.font.small, lineHeight: tema.lineHeight.small }, children: [
2342
+ tekst.omvei,
2343
+ " ",
2344
+ k.workaround
2345
+ ] }) : null,
2346
+ k.fixedIn ? /* @__PURE__ */ jsx12(
2347
+ StatusPill,
2348
+ {
2349
+ ikon: o.ikon,
2350
+ etikett: k.status === "fikset" ? tekst.rettetI(k.fixedIn) : tekst.rettesI(k.fixedIn),
2351
+ fg: o.fg,
2352
+ bg: o.bg
2353
+ }
2354
+ ) : null
2355
+ ] }, k.id);
2356
+ })
2053
2357
  ] }) : null,
2054
2358
  /* @__PURE__ */ jsxs10(Card, { children: [
2055
- /* @__PURE__ */ jsx11(H, { sub: tekst.akseptInnsamlingTekst, children: tekst.akseptInnsamling }),
2056
- /* @__PURE__ */ jsx11(Hint, { children: tekst.kontekstAldri })
2359
+ /* @__PURE__ */ jsx12(H, { sub: tekst.akseptInnsamlingTekst, children: tekst.akseptInnsamling }),
2360
+ /* @__PURE__ */ jsx12(Hint, { children: tekst.kontekstAldri })
2057
2361
  ] }),
2058
2362
  program.termsUrl && !program.commitmentFree ? /* @__PURE__ */ jsxs10(View11, { style: { gap: tema.space.xs }, children: [
2059
- /* @__PURE__ */ jsx11(
2363
+ /* @__PURE__ */ jsx12(
2060
2364
  Pressable6,
2061
2365
  {
2062
2366
  testID: "vilkar-lenke",
@@ -2064,20 +2368,32 @@ function Aksept({
2064
2368
  accessibilityLabel: tekst.akseptVilkar,
2065
2369
  onPress: () => void Linking.openURL(String(program.termsUrl)),
2066
2370
  style: { minHeight: tema.touch, justifyContent: "center" },
2067
- children: /* @__PURE__ */ jsxs10(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, textDecorationLine: "underline" }, children: [
2068
- "\u{1F517} ",
2069
- tekst.akseptVilkar
2371
+ children: /* @__PURE__ */ jsxs10(View11, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs }, children: [
2372
+ /* @__PURE__ */ jsx12(Ikon, { navn: "open-outline", farge: tema.color.textPrimary }),
2373
+ /* @__PURE__ */ jsx12(
2374
+ Text8,
2375
+ {
2376
+ style: { color: tema.color.textPrimary, fontSize: tema.font.body, textDecorationLine: "underline" },
2377
+ children: tekst.akseptVilkar
2378
+ }
2379
+ )
2070
2380
  ] })
2071
2381
  }
2072
2382
  ),
2073
- /* @__PURE__ */ jsx11(Hint, { children: tekst.akseptVilkarHint })
2074
- ] }) : /* @__PURE__ */ jsx11(Hint, { children: tekst.akseptIngenVilkar }),
2075
- /* @__PURE__ */ jsxs10(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: [
2076
- "\u{1F6AA} ",
2077
- tekst.akseptUtgang
2383
+ /* @__PURE__ */ jsx12(Hint, { children: tekst.akseptVilkarHint })
2384
+ ] }) : /* @__PURE__ */ jsx12(Hint, { children: tekst.akseptIngenVilkar }),
2385
+ /* @__PURE__ */ jsxs10(View11, { style: { flexDirection: "row", alignItems: "flex-start", gap: tema.space.sm }, children: [
2386
+ /* @__PURE__ */ jsx12(Ikon, { navn: "exit-outline", farge: tema.color.textPrimary }),
2387
+ /* @__PURE__ */ jsx12(
2388
+ Text8,
2389
+ {
2390
+ style: { flex: 1, color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body },
2391
+ children: tekst.akseptUtgang
2392
+ }
2393
+ )
2078
2394
  ] })
2079
2395
  ] }),
2080
- /* @__PURE__ */ jsx11(
2396
+ /* @__PURE__ */ jsx12(
2081
2397
  Btn,
2082
2398
  {
2083
2399
  testID: "bli-med",
@@ -2094,12 +2410,12 @@ function Aksept({
2094
2410
 
2095
2411
  // src/program/HvordanGikkDet.tsx
2096
2412
  import { useState as useState5 } from "react";
2097
- import { Modal as Modal3, Pressable as Pressable7, Text as Text10, TextInput as TextInput2, View as View12 } from "react-native";
2098
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
2413
+ import { Modal as Modal3, Pressable as Pressable7, Text as Text9, TextInput as TextInput2, View as View12 } from "react-native";
2414
+ import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
2099
2415
  var UTFALL = [
2100
- { verdi: "fungerte", ikon: "\u2713", etikett: tekst.utfallFungerte },
2101
- { verdi: "delvis", ikon: "\u25D0", etikett: tekst.utfallDelvis },
2102
- { verdi: "ikke", ikon: "\u2715", etikett: tekst.utfallIkke }
2416
+ { verdi: "fungerte", ikon: "checkmark-circle-outline", etikett: tekst.utfallFungerte },
2417
+ { verdi: "delvis", ikon: "contrast-outline", etikett: tekst.utfallDelvis },
2418
+ { verdi: "ikke", ikon: "close-circle-outline", etikett: tekst.utfallIkke }
2103
2419
  ];
2104
2420
  var SETNING_MAKS = 140;
2105
2421
  function utfallEtikett(verdi) {
@@ -2115,7 +2431,7 @@ function HvordanGikkDet({
2115
2431
  const tema = useTema();
2116
2432
  const [valgt, setValgt] = useState5();
2117
2433
  const [setning, setSetning] = useState5("");
2118
- 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(
2434
+ 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(
2119
2435
  View12,
2120
2436
  {
2121
2437
  testID: "hvordan-gikk-det",
@@ -2129,10 +2445,10 @@ function HvordanGikkDet({
2129
2445
  gap: tema.space.md
2130
2446
  },
2131
2447
  children: [
2132
- /* @__PURE__ */ jsx12(Btn, { variant: "ghost", testID: "hvordan-tilbake", ikon: "\u2190", label: tekst.tilbake, onPress: onLukk }),
2133
- /* @__PURE__ */ jsx12(Hint, { children: under }),
2134
- /* @__PURE__ */ jsx12(H, { children: tekst.hvordanGikkDet }),
2135
- /* @__PURE__ */ jsx12(View12, { testID: "utfall-gruppe", accessibilityRole: "radiogroup", accessibilityLabel: tekst.hvordanGikkDet, style: { flexDirection: "row", gap: tema.space.sm }, children: UTFALL.map((u) => {
2448
+ /* @__PURE__ */ jsx13(Btn, { variant: "ghost", testID: "hvordan-tilbake", ikon: "arrow-back-outline", label: tekst.tilbake, onPress: onLukk }),
2449
+ /* @__PURE__ */ jsx13(Hint, { children: under }),
2450
+ /* @__PURE__ */ jsx13(H, { children: tekst.hvordanGikkDet }),
2451
+ /* @__PURE__ */ jsx13(View12, { testID: "utfall-gruppe", accessibilityRole: "radiogroup", accessibilityLabel: tekst.hvordanGikkDet, style: { flexDirection: "row", gap: tema.space.sm }, children: UTFALL.map((u) => {
2136
2452
  const aktiv = valgt === u.verdi;
2137
2453
  return /* @__PURE__ */ jsxs11(
2138
2454
  Pressable7,
@@ -2155,16 +2471,16 @@ function HvordanGikkDet({
2155
2471
  backgroundColor: aktiv ? tema.color.brandBg : tema.color.surfaceRaised
2156
2472
  },
2157
2473
  children: [
2158
- /* @__PURE__ */ jsx12(Text10, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.h3, color: tema.color.textPrimary }, children: u.ikon }),
2159
- /* @__PURE__ */ jsx12(Text10, { style: { color: tema.color.textPrimary, fontSize: tema.font.small, fontWeight: aktiv ? tema.weight.semibold : tema.weight.regular }, children: u.etikett })
2474
+ /* @__PURE__ */ jsx13(Ikon, { navn: u.ikon, farge: tema.color.textPrimary }),
2475
+ /* @__PURE__ */ jsx13(Text9, { style: { color: tema.color.textPrimary, fontSize: tema.font.small, fontWeight: aktiv ? tema.weight.semibold : tema.weight.regular }, children: u.etikett })
2160
2476
  ]
2161
2477
  },
2162
2478
  u.verdi
2163
2479
  );
2164
2480
  }) }),
2165
2481
  /* @__PURE__ */ jsxs11(View12, { style: { gap: tema.space.xs }, children: [
2166
- /* @__PURE__ */ jsx12(Text10, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tekst.setningLabel }),
2167
- /* @__PURE__ */ jsx12(
2482
+ /* @__PURE__ */ jsx13(Text9, { style: { color: tema.color.textSecondary, fontSize: tema.font.small }, children: tekst.setningLabel }),
2483
+ /* @__PURE__ */ jsx13(
2168
2484
  TextInput2,
2169
2485
  {
2170
2486
  testID: "hvordan-setning",
@@ -2191,8 +2507,8 @@ function HvordanGikkDet({
2191
2507
  }
2192
2508
  )
2193
2509
  ] }),
2194
- feil ? /* @__PURE__ */ jsx12(Banner, { live: true, ikon: "\u26A0", tone: "danger", children: tekst.svarFeil(feil) }) : null,
2195
- /* @__PURE__ */ jsx12(
2510
+ feil ? /* @__PURE__ */ jsx13(Banner, { live: true, ikon: "warning-outline", tone: "danger", children: tekst.svarFeil(feil) }) : null,
2511
+ /* @__PURE__ */ jsx13(
2196
2512
  Btn,
2197
2513
  {
2198
2514
  testID: "hvordan-lagre",
@@ -2213,8 +2529,8 @@ function HvordanGikkDet({
2213
2529
 
2214
2530
  // src/program/Oppfolging.tsx
2215
2531
  import "react";
2216
- import { Text as Text11, View as View13 } from "react-native";
2217
- import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
2532
+ import { Text as Text10, View as View13 } from "react-native";
2533
+ import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
2218
2534
  function tarSvar(kind) {
2219
2535
  return kind === "hvordan_gikk_det" || kind === "sjekkpunkt";
2220
2536
  }
@@ -2229,7 +2545,7 @@ function Oppfolging({
2229
2545
  }) {
2230
2546
  const tema = useTema();
2231
2547
  const art = tarSvar(oppfolging.kind) ? "spoersmaal" : oppfolging.kind === "tilbud_om_utgang" ? "utgang" : "paaminnelse";
2232
- const ikon = art === "spoersmaal" ? "\u{1F9EA}" : art === "utgang" ? "\u{1F6AA}" : "\u{1F4C5}";
2548
+ const ikon = art === "spoersmaal" ? "flask-outline" : art === "utgang" ? "exit-outline" : "calendar-outline";
2233
2549
  const hint = art === "spoersmaal" ? tekst.oppfolgingKontakt(kontaktNr, maksKontakter) : art === "utgang" ? tekst.oppfolgingUtgangHint(kontaktNr, maksKontakter) : tekst.oppfolgingPaaminnelseHint(kontaktNr, maksKontakter);
2234
2550
  return /* @__PURE__ */ jsxs12(
2235
2551
  View13,
@@ -2246,18 +2562,28 @@ function Oppfolging({
2246
2562
  },
2247
2563
  children: [
2248
2564
  /* @__PURE__ */ jsxs12(View13, { style: { flexDirection: "row", gap: tema.space.sm, alignItems: "flex-start" }, children: [
2249
- /* @__PURE__ */ jsx13(Text11, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.h3 }, children: ikon }),
2565
+ /* @__PURE__ */ jsx14(Ikon, { navn: ikon, farge: tema.color.textPrimary }),
2250
2566
  /* @__PURE__ */ jsxs12(View13, { style: { flex: 1, gap: tema.space.xs }, children: [
2251
- /* @__PURE__ */ jsx13(Text11, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: oppfolging.question }),
2252
- /* @__PURE__ */ jsx13(Hint, { children: hint })
2567
+ /* @__PURE__ */ jsx14(Text10, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: oppfolging.question }),
2568
+ /* @__PURE__ */ jsx14(Hint, { children: hint })
2253
2569
  ] })
2254
2570
  ] }),
2255
- /* @__PURE__ */ jsx13(View13, { style: { flexDirection: "row", gap: tema.space.sm }, children: art === "utgang" ? /* @__PURE__ */ jsxs12(Fragment2, { children: [
2256
- /* @__PURE__ */ jsx13(Btn, { grow: true, variant: "secondary", testID: `bli-vaerende-${oppfolging.id}`, label: tekst.bliVaerende, onPress: onSenere }),
2257
- /* @__PURE__ */ jsx13(Btn, { grow: true, variant: "danger", testID: `gaa-ut-${oppfolging.id}`, ikon: "\u{1F6AA}", label: tekst.gaaUtBekreft, onPress: onGaaUt })
2571
+ /* @__PURE__ */ jsx14(View13, { style: { flexDirection: "row", gap: tema.space.sm }, children: art === "utgang" ? /* @__PURE__ */ jsxs12(Fragment2, { children: [
2572
+ /* @__PURE__ */ jsx14(Btn, { grow: true, variant: "secondary", testID: `bli-vaerende-${oppfolging.id}`, label: tekst.bliVaerende, onPress: onSenere }),
2573
+ /* @__PURE__ */ jsx14(
2574
+ Btn,
2575
+ {
2576
+ grow: true,
2577
+ variant: "danger",
2578
+ testID: `gaa-ut-${oppfolging.id}`,
2579
+ ikon: "exit-outline",
2580
+ label: tekst.gaaUtBekreft,
2581
+ onPress: onGaaUt
2582
+ }
2583
+ )
2258
2584
  ] }) : /* @__PURE__ */ jsxs12(Fragment2, { children: [
2259
- /* @__PURE__ */ jsx13(Btn, { grow: true, variant: "secondary", testID: `senere-${oppfolging.id}`, label: tekst.senere, onPress: onSenere }),
2260
- 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 })
2585
+ /* @__PURE__ */ jsx14(Btn, { grow: true, variant: "secondary", testID: `senere-${oppfolging.id}`, label: tekst.senere, onPress: onSenere }),
2586
+ 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 })
2261
2587
  ] }) })
2262
2588
  ]
2263
2589
  }
@@ -2266,8 +2592,8 @@ function Oppfolging({
2266
2592
 
2267
2593
  // src/program/Oppgaver.tsx
2268
2594
  import "react";
2269
- import { Text as Text12, View as View14 } from "react-native";
2270
- import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
2595
+ import { Text as Text11, View as View14 } from "react-native";
2596
+ import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
2271
2597
  function Oppgaver({
2272
2598
  tasks,
2273
2599
  completions,
@@ -2275,7 +2601,7 @@ function Oppgaver({
2275
2601
  }) {
2276
2602
  const tema = useTema();
2277
2603
  const ferdig = new Map(completions.map((c) => [c.taskId, c]));
2278
- 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) => {
2604
+ 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) => {
2279
2605
  const c = ferdig.get(o.id);
2280
2606
  return /* @__PURE__ */ jsxs13(
2281
2607
  View14,
@@ -2291,13 +2617,27 @@ function Oppgaver({
2291
2617
  },
2292
2618
  children: [
2293
2619
  /* @__PURE__ */ jsxs13(View14, { style: { flex: 1, gap: tema.space.xs }, children: [
2294
- /* @__PURE__ */ jsx14(Text12, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: o.title }),
2620
+ /* @__PURE__ */ jsx15(Text11, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: o.title }),
2295
2621
  /* @__PURE__ */ jsxs13(Hint, { children: [
2296
2622
  c ? tekst.oppgaveGjortMed(utfallEtikett(c.outcome)) : `${tekst.oppgaveIkkeBegynt} \xB7 ${tekst.akseptOppgaveTid(o.estimatedMinutes)}`,
2297
2623
  c?.text ? ` \xB7 \xAB${c.text}\xBB` : ""
2298
2624
  ] })
2299
2625
  ] }),
2300
- 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) })
2626
+ c ? (
2627
+ // Merket er den eneste flaten der ikonet står alene, så etiketten
2628
+ // ligger på containeren: skjermleseren hører utfallet, ikke «hake».
2629
+ /* @__PURE__ */ jsx15(View14, { accessibilityLabel: tekst.oppgaveGjortMed(utfallEtikett(c.outcome)), accessible: true, children: /* @__PURE__ */ jsx15(Ikon, { navn: "checkmark-circle-outline", farge: tema.color.success }) })
2630
+ ) : /* @__PURE__ */ jsx15(
2631
+ Btn,
2632
+ {
2633
+ variant: "secondary",
2634
+ testID: `gjort-${o.id}`,
2635
+ ikon: "checkmark-circle-outline",
2636
+ label: tekst.oppgaveGjort,
2637
+ accessibilityLabel: tekst.oppgaveGjortLabel(o.title),
2638
+ onPress: () => onGjort(o)
2639
+ }
2640
+ )
2301
2641
  ]
2302
2642
  },
2303
2643
  o.id
@@ -2306,7 +2646,7 @@ function Oppgaver({
2306
2646
  }
2307
2647
 
2308
2648
  // src/program/InnspelProgram.tsx
2309
- import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
2649
+ import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
2310
2650
  function InnspelProgram({
2311
2651
  invitationToken,
2312
2652
  onEndring,
@@ -2397,7 +2737,7 @@ function InnspelProgram({
2397
2737
  const kort = (mine?.pendingFollowUps ?? []).filter((f) => f.programId === program.id && !lagtBort.has(f.id)).sort((a, b) => a.emittedAt.localeCompare(b.emittedAt));
2398
2738
  const forsteKontaktNr = Math.max(1, deltakelse.contactsSent - kort.length + 1);
2399
2739
  return /* @__PURE__ */ jsxs14(View15, { testID: "program-deltakelse", accessibilityLabel: tekst.deltakelseRegion, style: { gap: tema.space.sm }, children: [
2400
- kort.map((f, i) => /* @__PURE__ */ jsx15(
2740
+ kort.map((f, i) => /* @__PURE__ */ jsx16(
2401
2741
  Oppfolging,
2402
2742
  {
2403
2743
  oppfolging: f,
@@ -2414,8 +2754,8 @@ function InnspelProgram({
2414
2754
  f.id
2415
2755
  )),
2416
2756
  /* @__PURE__ */ jsxs14(Card, { children: [
2417
- /* @__PURE__ */ jsx15(H, { sub: tekst.deltakelsePeriode(periode(program.opensAt, program.closesAt), deltakelse.contactsSent, program.maxContacts), children: program.name }),
2418
- /* @__PURE__ */ jsx15(
2757
+ /* @__PURE__ */ jsx16(H, { sub: tekst.deltakelsePeriode(periode(program.opensAt, program.closesAt), deltakelse.contactsSent, program.maxContacts), children: program.name }),
2758
+ /* @__PURE__ */ jsx16(
2419
2759
  Oppgaver,
2420
2760
  {
2421
2761
  tasks: program.tasks,
@@ -2427,13 +2767,13 @@ function InnspelProgram({
2427
2767
  }
2428
2768
  ),
2429
2769
  meldFeilFor && onMeldFeil ? /* @__PURE__ */ jsxs14(View15, { style: { gap: tema.space.xs }, children: [
2430
- /* @__PURE__ */ jsx15(Hint, { children: tekst.meldFeilHint }),
2431
- /* @__PURE__ */ jsx15(
2770
+ /* @__PURE__ */ jsx16(Hint, { children: tekst.meldFeilHint }),
2771
+ /* @__PURE__ */ jsx16(
2432
2772
  Btn,
2433
2773
  {
2434
2774
  variant: "secondary",
2435
2775
  testID: "meld-feil",
2436
- ikon: "\u{1F41E}",
2776
+ ikon: "bug-outline",
2437
2777
  label: tekst.meldFeil,
2438
2778
  onPress: () => {
2439
2779
  const task = meldFeilFor;
@@ -2443,9 +2783,9 @@ function InnspelProgram({
2443
2783
  }
2444
2784
  )
2445
2785
  ] }) : null,
2446
- /* @__PURE__ */ jsx15(Btn, { variant: "ghost", testID: "gaa-ut", ikon: "\u{1F6AA}", label: tekst.gaaUt, onPress: () => setViserGaaUt(true) })
2786
+ /* @__PURE__ */ jsx16(Btn, { variant: "ghost", testID: "gaa-ut", ikon: "exit-outline", label: tekst.gaaUt, onPress: () => setViserGaaUt(true) })
2447
2787
  ] }),
2448
- dialog ? /* @__PURE__ */ jsx15(
2788
+ dialog ? /* @__PURE__ */ jsx16(
2449
2789
  HvordanGikkDet,
2450
2790
  {
2451
2791
  under: dialog.type === "oppgave" ? dialog.task.title : dialog.oppfolging.question,
@@ -2455,7 +2795,7 @@ function InnspelProgram({
2455
2795
  onLukk: () => setDialog(void 0)
2456
2796
  }
2457
2797
  ) : null,
2458
- 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(
2798
+ 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(
2459
2799
  View15,
2460
2800
  {
2461
2801
  testID: "gaa-ut-dialog",
@@ -2469,11 +2809,22 @@ function InnspelProgram({
2469
2809
  gap: tema.space.md
2470
2810
  },
2471
2811
  children: [
2472
- /* @__PURE__ */ jsx15(H, { children: tekst.gaaUtTittel }),
2473
- /* @__PURE__ */ jsx15(Text13, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: tekst.gaaUtTekst(program.name) }),
2812
+ /* @__PURE__ */ jsx16(H, { children: tekst.gaaUtTittel }),
2813
+ /* @__PURE__ */ jsx16(Text12, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: tekst.gaaUtTekst(program.name) }),
2474
2814
  /* @__PURE__ */ jsxs14(View15, { style: { flexDirection: "row", gap: tema.space.sm }, children: [
2475
- /* @__PURE__ */ jsx15(Btn, { grow: true, variant: "secondary", testID: "bli-vaerende", label: tekst.bliVaerende, onPress: () => setViserGaaUt(false) }),
2476
- /* @__PURE__ */ jsx15(Btn, { grow: true, variant: "danger", testID: "bekreft-gaa-ut", ikon: "\u{1F6AA}", label: tekst.gaaUtBekreft, disabled: sender, onPress: () => void gaaUt() })
2815
+ /* @__PURE__ */ jsx16(Btn, { grow: true, variant: "secondary", testID: "bli-vaerende", label: tekst.bliVaerende, onPress: () => setViserGaaUt(false) }),
2816
+ /* @__PURE__ */ jsx16(
2817
+ Btn,
2818
+ {
2819
+ grow: true,
2820
+ variant: "danger",
2821
+ testID: "bekreft-gaa-ut",
2822
+ ikon: "exit-outline",
2823
+ label: tekst.gaaUtBekreft,
2824
+ disabled: sender,
2825
+ onPress: () => void gaaUt()
2826
+ }
2827
+ )
2477
2828
  ] })
2478
2829
  ]
2479
2830
  }
@@ -2497,12 +2848,12 @@ function InnspelProgram({
2497
2848
  },
2498
2849
  children: [
2499
2850
  /* @__PURE__ */ jsxs14(View15, { style: { flexDirection: "row", gap: tema.space.sm, alignItems: "flex-start" }, children: [
2500
- /* @__PURE__ */ jsx15(Text13, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: { fontSize: tema.font.h3 }, children: "\u{1F9EA}" }),
2851
+ /* @__PURE__ */ jsx16(Ikon, { navn: "flask-outline", farge: tema.color.textPrimary }),
2501
2852
  /* @__PURE__ */ jsxs14(View15, { style: { flex: 1, gap: tema.space.xs }, children: [
2502
- /* @__PURE__ */ jsx15(Text13, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: tekst.invitasjonHva(program.name) }),
2503
- /* @__PURE__ */ jsx15(Hint, { children: tekst.invitasjonKontakter(program.maxContacts) })
2853
+ /* @__PURE__ */ jsx16(Text12, { style: { color: tema.color.textPrimary, fontSize: tema.font.body, lineHeight: tema.lineHeight.body }, children: tekst.invitasjonHva(program.name) }),
2854
+ /* @__PURE__ */ jsx16(Hint, { children: tekst.invitasjonKontakter(program.maxContacts) })
2504
2855
  ] }),
2505
- /* @__PURE__ */ jsx15(
2856
+ /* @__PURE__ */ jsx16(
2506
2857
  Pressable8,
2507
2858
  {
2508
2859
  testID: "avvis-invitasjon",
@@ -2510,16 +2861,16 @@ function InnspelProgram({
2510
2861
  accessibilityLabel: tekst.avvisInvitasjon,
2511
2862
  onPress: () => setAvvist(true),
2512
2863
  style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
2513
- children: /* @__PURE__ */ jsx15(Text13, { style: { color: tema.color.textSecondary, fontSize: tema.font.body }, children: "\u2715" })
2864
+ children: /* @__PURE__ */ jsx16(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
2514
2865
  }
2515
2866
  )
2516
2867
  ] }),
2517
- feil && !viserAksept ? /* @__PURE__ */ jsx15(Banner, { live: true, ikon: "\u26A0", tone: "danger", children: tekst.akseptFeil(feil) }) : null,
2518
- /* @__PURE__ */ jsx15(Btn, { variant: "secondary", testID: "les-mer", label: tekst.lesMer, onPress: () => setViserAksept(true) })
2868
+ feil && !viserAksept ? /* @__PURE__ */ jsx16(Banner, { live: true, ikon: "warning-outline", tone: "danger", children: tekst.akseptFeil(feil) }) : null,
2869
+ /* @__PURE__ */ jsx16(Btn, { variant: "secondary", testID: "les-mer", label: tekst.lesMer, onPress: () => setViserAksept(true) })
2519
2870
  ]
2520
2871
  }
2521
2872
  ),
2522
- viserAksept ? /* @__PURE__ */ jsx15(
2873
+ viserAksept ? /* @__PURE__ */ jsx16(
2523
2874
  Aksept,
2524
2875
  {
2525
2876
  program,