@medalsocial/booking 0.4.0 → 0.5.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/CHANGELOG.md +34 -0
- package/README.md +1 -0
- package/dist/core/config.d.mts +3 -0
- package/dist/core/config.mjs +5 -2
- package/dist/core/config.mjs.map +1 -1
- package/dist/core/draft-store.d.mts +2 -0
- package/dist/core/draft-store.mjs +1 -0
- package/dist/core/draft-store.mjs.map +1 -1
- package/dist/core/index.d.mts +2 -1
- package/dist/core/index.mjs +2 -1
- package/dist/core/machine.d.mts +16 -0
- package/dist/core/machine.mjs +59 -3
- package/dist/core/machine.mjs.map +1 -1
- package/dist/core/party-slots.d.mts +6 -1
- package/dist/core/party-slots.mjs +6 -5
- package/dist/core/party-slots.mjs.map +1 -1
- package/dist/core/range.d.mts +30 -0
- package/dist/core/range.mjs +32 -0
- package/dist/core/range.mjs.map +1 -0
- package/dist/next/catalogue.mjs +4 -5
- package/dist/next/catalogue.mjs.map +1 -1
- package/dist/next/handler.mjs +63 -5
- package/dist/next/handler.mjs.map +1 -1
- package/dist/next/medal.mjs +47 -15
- package/dist/next/medal.mjs.map +1 -1
- package/dist/next/routes/create.mjs +3 -6
- package/dist/next/routes/create.mjs.map +1 -1
- package/dist/next/routes/manage.mjs +5 -8
- package/dist/next/routes/manage.mjs.map +1 -1
- package/dist/next/routes/shared.mjs +57 -14
- package/dist/next/routes/shared.mjs.map +1 -1
- package/dist/react/BookingWizard.d.mts +7 -1
- package/dist/react/BookingWizard.mjs +20 -2
- package/dist/react/BookingWizard.mjs.map +1 -1
- package/dist/react/index.d.mts +2 -2
- package/dist/react/labels/screens.mjs +4 -0
- package/dist/react/labels/screens.mjs.map +1 -1
- package/dist/react/useBooking.d.mts +11 -1
- package/dist/react/useBooking.mjs +152 -31
- package/dist/react/useBooking.mjs.map +1 -1
- package/dist/react/wizard/adapters.mjs +33 -1
- package/dist/react/wizard/adapters.mjs.map +1 -1
- package/dist/react/wizard/index.d.mts +2 -2
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screens.mjs","names":[],"sources":["../../../src/react/labels/screens.ts"],"sourcesContent":["/**\n * The built-in copy for every `@medalsocial/meda/booking` screen, in `nb` and\n * `en`: neutral wording with no business named in it. A site passes its own\n * words through `labels`, merged over these key by key (`mergeLabels`).\n *\n * Kept in step with meda's `BOOKING_LABEL_KEYS` by `tests/react/labels.test.ts`.\n */\n\nimport type { BookingLabels as MedaBookingLabels } from '@medalsocial/meda/booking';\nimport type { BookingLabel } from '../../core/labels';\n\n/**\n * Every meda screen key, each a `BookingLabel`: a string renders as one text\n * node, an array one per element (meda ≥ 3.4). The built-in packs are all\n * strings.\n */\nexport type ScreenLabels = { [K in keyof MedaBookingLabels]-?: BookingLabel };\n\nexport const SCREEN_LABELS_NB: ScreenLabels = {\n 'addChild.birthMonth': 'Fødselsmåned (valgfritt)',\n 'addChild.birthMonthUnknown': 'Vet ikke',\n 'addChild.birthYear': 'Fødselsår',\n 'addChild.birthYearPlaceholder': 'Velg år',\n 'addChild.close': 'Lukk',\n 'addChild.description.local': 'Gjelder bare denne bestillingen.',\n 'addChild.description.saved': 'Barnet lagres på profilen din til neste gang.',\n 'addChild.missing': 'Skriv inn navn og velg fødselsår.',\n 'addChild.name': 'Navn',\n 'addChild.notes': 'Notat til salongen (valgfritt)',\n 'addChild.submit': 'Legg til',\n 'addChild.title': 'Legg til barn',\n 'addChild.trigger': 'Legg til barn',\n 'ageConfirm.birthMonth': 'Fødselsmåned (frivillig)',\n 'ageConfirm.birthMonthUnknown': 'Vet ikke',\n 'ageConfirm.birthYear': 'Fødselsår',\n 'ageConfirm.confirm': 'Bekreft',\n 'ageConfirm.dismiss': 'Senere',\n 'ageConfirm.heading': 'Stemmer alderen til {name}?',\n 'ageConfirm.lead': 'Legg gjerne inn fødselsmåned, så blir alderen helt riktig.',\n 'ageConfirm.legend': 'Alder for {name}',\n 'bookingSkeleton.opening': 'Laster timebestilling …',\n 'childCards.book': 'Bestill til {name}',\n 'childCards.empty': 'Ingen barn registrert ennå.',\n 'childCards.lastVisit': '{age} · sist: {service}, {date}',\n 'childCards.lastVisitNoService': '{age} · sist: {date}',\n 'childCards.neverVisited': '{age} · ikke vært hos oss ennå',\n 'childCards.next': 'Neste time',\n 'childCards.none': '–',\n 'childCards.stylist': 'Fast stylist',\n 'confirmation.calendar': 'Legg i kalenderen',\n 'confirmation.heading': 'Timen er bestilt',\n 'confirmation.manage': 'Flytt eller avbestill',\n 'confirmation.manageFor': 'Flytt eller avbestill {who} kl. {time}',\n 'confirmation.party.heading': 'Felles besøk · {day}',\n 'confirmation.party.line': '{time} {name} – {service} {stylist} – {price}',\n 'confirmation.party.stylist': 'hos {name}',\n 'confirmation.party.total': 'Til sammen {total} · betales i salongen',\n 'confirmation.portal': 'Se alle timene dine',\n 'confirmation.serviceFor': '{service} for {name}',\n 'confirmation.startOver': 'Bestill en ny time',\n 'confirmation.when': '{day} kl. {time}',\n 'dataControls.cancel': 'Avbryt',\n 'dataControls.confirmHeading': 'Vil du virkelig slette kontoen?',\n 'dataControls.confirmHelp': 'Dette kan ikke gjøres om.',\n 'dataControls.confirmLabel': 'Skriv {word} for å bekrefte',\n 'dataControls.confirmWord': 'SLETT',\n 'dataControls.consequences':\n 'Timer du har bestilt, blir avbestilt, historikken blir anonymisert, og du kan ikke logge inn igjen.',\n 'dataControls.delete': 'Slett kontoen',\n 'dataControls.deleteForever': 'Slett kontoen for godt',\n 'dataControls.export': 'Last ned en kopi',\n 'dataControls.heading': 'Dataene dine',\n 'dataControls.unreachable': 'Vi nådde ikke bookingsystemet. Prøv igjen straks.',\n 'dataControls.wrongWord': 'Skriv {word} nøyaktig slik, med store bokstaver.',\n 'details.call.link': 'Ring {phone}',\n 'details.call.none': 'Ring salongen, så hjelper vi deg.',\n 'details.child.name': 'Navn på den som kommer',\n 'details.child.year': 'Født år',\n 'details.child.yearPlaceholder': '2018',\n 'details.email.error': 'E-postadressen ser ikke riktig ut.',\n 'details.email.help': 'Vi sender bekreftelsen og en kalenderfil hit.',\n 'details.email.label': 'E-postadresse',\n 'details.email.lockedHelp': 'E-posten du logget inn med',\n 'details.error.conflict': 'Timen kunne ikke settes opp. Prøv igjen.',\n 'details.error.inProgress':\n 'Bestillingen er allerede mottatt. Se etter bekreftelsen på e-post, eller ring oss.',\n 'details.error.invalidInput': 'Noen felt er ikke riktig fylt ut. Se over og prøv igjen.',\n 'details.error.maxParty': 'Du kan bestille for opptil tre personer om gangen.',\n 'details.error.slotTaken': 'Noen andre rakk å ta tiden. Velg en ny tid.',\n 'details.error.unconfigured': 'Timeboken er ikke tilgjengelig akkurat nå.',\n 'details.error.upstreamError':\n 'Vi fikk ikke svar fra timeboken, så vi vet ikke om timen ble registrert. Trykk på knappen igjen – du blir ikke booket to ganger.',\n 'details.heading': 'Snart ferdig',\n 'details.known.adult': 'en voksen',\n 'details.known.child': 'barnet',\n 'details.known.for': 'til {who}',\n 'details.known.label': 'Timene gjelder',\n 'details.known.self': 'deg',\n 'details.marketing.text': 'Send meg påminnelser og tilbud på e-post.',\n 'details.name.label': 'Navnet ditt',\n 'details.notes.label': 'Beskjed til salongen',\n 'details.notes.placeholder': 'For eksempel ønsker eller hensyn vi bør kjenne til',\n 'details.phone.error': 'Mobilnummeret ser ikke komplett ut. Sjekk sifrene.',\n 'details.phone.label': 'Mobil',\n 'details.phone.prefix': '+47',\n 'details.submit': 'Bestill – {price} betales i salongen',\n 'details.terms.link': 'Les vilkårene',\n 'details.terms.text': 'Jeg vet at timen kan flyttes eller avlyses gratis innen salongens frist.',\n 'familyEditor.add': 'Legg til person',\n 'familyEditor.ageConfirmed': 'Takk, alderen til {name} er bekreftet.',\n 'familyEditor.ageSaved': 'Takk, alderen til {name} er lagret.',\n 'familyEditor.birthMonth': 'Fødselsmåned (frivillig)',\n 'familyEditor.birthMonthUnknown': 'Vet ikke',\n 'familyEditor.birthYear': 'Fødselsår',\n 'familyEditor.birthYearPlaceholder': 'Velg år',\n 'familyEditor.empty': 'Ingen er lagt inn ennå.',\n 'familyEditor.heading': 'Familien',\n 'familyEditor.lead': 'Med alderen kan vi foreslå riktig behandling og pris for hver enkelt.',\n 'familyEditor.legend': 'Familiemedlemmer',\n 'familyEditor.name': 'Navn',\n 'familyEditor.newRow': 'Ny person',\n 'familyEditor.notes': 'Beskjed til stylisten',\n 'familyEditor.notesPlaceholder': 'For eksempel: blir urolig av lyden fra maskinen',\n 'familyEditor.partial': 'Fyll inn både navn og fødselsår.',\n 'familyEditor.remove': 'Fjern',\n 'familyEditor.removeNamed': 'Fjern {name}',\n 'familyEditor.removeRow': 'Fjern raden',\n 'familyEditor.removed': 'Fjernet',\n 'familyEditor.save': 'Lagre',\n 'familyEditor.saved': 'Lagret',\n 'familyEditor.savedNoDetails':\n 'Lagret. Måned, stylist og beskjed kunne ikke lagres nå – prøv igjen senere.',\n 'familyEditor.stylist': 'Foretrukket stylist',\n 'familyEditor.stylistFormer': 'Tidligere stylist',\n 'familyEditor.stylistNone': 'Ingen bestemt',\n 'familyEditor.unreachable': 'Vi nådde ikke bookingsystemet. Prøv igjen straks.',\n 'history.count.one': '{count} besøk i {year}',\n 'history.count.other': '{count} besøk i {year}',\n 'history.empty': 'Ingen besøk ennå. Her dukker de opp etter første time.',\n 'history.heading': 'Tidligere besøk',\n 'history.serviceFallback': 'Besøk',\n 'history.unknownAmount': '—',\n 'login.codeHeading': 'Se etter koden i e-posten',\n 'login.codeHelp': 'Seks sifre, sendt til {email}. Koden varer i ti minutter.',\n 'login.codeHelpVipps': 'Seks sifre. Riktig kode kobler Vipps til kontoen din.',\n 'login.codeLabel': 'Kode',\n 'login.continueEmail': 'Fortsett med e-post',\n 'login.cooldownReady': 'Nå kan du be om en ny kode.',\n 'login.cooldownWait': 'Du kan be om en ny kode om {seconds} sekunder.',\n 'login.emailIntro': 'Bruk e-postadressen du bestilte med, så sender vi deg en kode.',\n 'login.emailLabel': 'E-postadresse',\n 'login.heading': 'Logg inn',\n 'login.notice.badEmail': 'Den e-postadressen ser ikke riktig ut.',\n 'login.notice.invalid': 'Koden er feil eller utløpt. Prøv igjen, eller be om en ny.',\n 'login.notice.resent':\n 'Finnes adressen hos oss, er en ny kode på vei. Se i innboksen, og i søppelposten.',\n 'login.notice.sent':\n 'Finnes adressen hos oss, er en kode på vei. Se i innboksen, og i søppelposten.',\n 'login.notice.throttled': 'For mange forsøk på kort tid. Vent litt.',\n 'login.notice.unreachable': 'Vi når ikke timeboken akkurat nå. Prøv igjen straks.',\n 'login.notice.vippsConflict':\n 'Denne Vipps-kontoen hører til en annen konto hos oss. Logg inn med e-post, eller ring oss.',\n 'login.notice.vippsInvalid': 'Koden er feil eller utløpt.',\n 'login.or': 'eller',\n 'login.resend': 'Send en ny kode',\n 'login.resendIn': 'Ny kode om {time}',\n 'login.sendCode': 'Send meg en kode',\n 'login.submitCode': 'Logg inn',\n 'login.switchEmail': 'Bytt e-postadresse',\n 'login.useEmailInstead': 'Bruk e-post i stedet',\n 'login.vippsSentTo': 'Koden er sendt til {to}.',\n 'login.vippsSentToUnknown': 'Koden er sendt til e-postadressen vi har registrert på deg.',\n 'loginSheet.close': 'Lukk',\n 'loginSheet.intro': 'Vi fyller ut navn og nummer, og timen dukker opp på kontoen din.',\n 'loginSheet.prompt': 'Kunde fra før? {trigger}, så fyller vi ut det vi vet.',\n 'loginSheet.trigger': 'Logg inn',\n 'loginSheet.vipps': 'Fortsett med Vipps',\n 'logout.button': 'Logg ut',\n 'logout.unreachable': 'Vi nådde ikke bookingsystemet. Prøv igjen straks.',\n 'manage.appointment.named': '{name}s time',\n 'manage.appointment.namedSibilant': \"{name}' time\",\n 'manage.appointment.unnamed': 'timen',\n 'manage.back': 'Tilbake',\n 'manage.blocked': 'Under {hours} timer igjen –',\n 'manage.blocked.plain': 'ring oss, så finner vi ut av det.',\n 'manage.blocked.suffix': ', så finner vi ut av det.',\n 'manage.bookNew': 'Bestill en ny time',\n 'manage.calendar': 'Legg i kalenderen',\n 'manage.callToCancel': 'Ring for å avbestille (under {hours} t igjen)',\n 'manage.callToChange': 'Ring for å endre (under {hours} t igjen)',\n 'manage.callUs': 'Ring oss',\n 'manage.callUsOn': 'Ring oss på {phone}',\n 'manage.cancel': 'Avbestill',\n 'manage.cancel.confirm': 'Ja, avbestill',\n 'manage.cancel.keep': 'Behold timen',\n 'manage.cancel.question':\n 'Avbestille {appointment} {dateTime}? Det er gratis fram til {hours} t før.',\n 'manage.cancel.reason.illness': 'Sykdom',\n 'manage.cancel.reason.noLongerSuits': 'Passer ikke lenger',\n 'manage.cancel.reason.other': 'Annet',\n 'manage.cancel.reasonLegend': 'Grunn (valgfritt)',\n 'manage.cancelled': 'Timen er avbestilt. Vil du finne en ny tid med en gang?',\n 'manage.cancelled.findNew': 'Finn en ny tid',\n 'manage.card.named': '{name} – {service}',\n 'manage.card.when': '{dateTime} · {price}',\n 'manage.card.whenWithStylist': '{dateTime} hos {stylist} · {price}',\n 'manage.change': 'Endre tid',\n 'manage.closed.cancelled': 'Denne timen er avbestilt.',\n 'manage.closed.completed': 'Denne timen er fullført.',\n 'manage.closed.noShow': 'Denne timen er avsluttet.',\n 'manage.closed.pending': 'Denne timen er ikke bekreftet ennå.',\n 'manage.closed.pendingCall': 'Ta kontakt på {phone}, så ordner vi det.',\n 'manage.closed.pendingCallPlain': 'Ring oss, så hjelper vi deg.',\n 'manage.error.conflict': 'Timen kan ikke endres nå – {ringUs}.',\n 'manage.error.invalidInput': 'Den tiden kan ikke brukes. Velg en annen.',\n 'manage.error.notFound': 'Vi finner ikke denne timen. {callUs}, så hjelper vi deg.',\n 'manage.error.slotTaken': 'Den tiden ble akkurat tatt. Velg en annen.',\n 'manage.error.unavailable': 'Noe gikk galt. Prøv igjen, eller {ringUs}.',\n 'manage.error.windowPassed': 'Det er for kort tid igjen til å endre selv – {ringUs}.',\n 'manage.freeUntil': 'Gratis å endre fram til {dateTime}',\n 'manage.heading': 'Din time',\n 'manage.move.confirm': 'Bekreft ny tid',\n 'manage.move.pickAnother': 'Velg en annen tid',\n 'manage.move.question': 'Flytte {appointment} fra {from} til {to}?',\n 'manage.move.questionWithStylist': 'Flytte {appointment} fra {from} til {to} hos {stylist}?',\n 'manage.move.surcharge': 'Merk: {weekday}spris {price} (+{pct}\\u00A0% helgetillegg)',\n 'manage.moved': 'Timen er flyttet.',\n 'manage.moved.noLink': 'Endringen er lagret.',\n 'manage.moved.noLinkSuffix': 'hvis du vil endre den igjen.',\n 'manage.moved.view': 'Se timen',\n 'manage.movedTo': 'Timen er flyttet til {dateTime}.',\n 'manage.party.heading': 'Flytte hele besøket, eller bare {who}?',\n 'manage.party.justThisOne': 'Bare {who}',\n 'manage.party.note': 'De andre beholder timene sine. Skal hele besøket flyttes,',\n 'manage.party.noteSuffix': ', så flytter vi alle.',\n 'manage.party.unnamed': 'denne timen',\n 'manage.portal': 'Se alle timene dine',\n 'manage.remaining.day.one': '{count} dag',\n 'manage.remaining.day.other': '{count} dager',\n 'manage.remaining.daysAndHours': 'om {days} og {hours}',\n 'manage.remaining.hour.one': '{count} time',\n 'manage.remaining.hour.other': '{count} timer',\n 'manage.remaining.in': 'om {amount}',\n 'manage.remaining.minute.one': '{count} minutt',\n 'manage.remaining.minute.other': '{count} minutter',\n 'manage.remaining.underMinute': 'om under ett minutt',\n 'manage.reschedule.failed': 'Vi får ikke hentet ledige tider nå –',\n 'manage.reschedule.failedSuffix': ', så finner vi en tid.',\n 'manage.reschedule.lead': '{service} – velg ny tid',\n 'manage.reschedule.leadWithStylist': '{service} hos {stylist} – velg ny tid',\n 'manage.reschedule.loading': 'Henter ledige tider …',\n 'manage.ringUs': 'ring oss',\n 'manage.ringUsOn': 'ring oss på {phone}',\n 'manage.serviceFallback': 'Time',\n 'otp.label': 'Kode fra e-posten',\n 'portalShell.nav': 'Kontoen din',\n 'portalShell.navBar': 'Kontomeny',\n 'portalUnreachable.body':\n 'Timene dine ligger trygt – det er bare vi som ikke når timeboken. Prøv igjen straks, eller ring oss.',\n 'portalUnreachable.call': 'Ring {phone}',\n 'portalUnreachable.heading': 'Kontoen din er utilgjengelig akkurat nå',\n 'portalUnreachable.retry': 'Last inn på nytt',\n 'profileForm.email': 'E-postadresse',\n 'profileForm.emailHelp': 'Vil du bytte e-postadresse, må du kontakte oss.',\n 'profileForm.firstName': 'Fornavn',\n 'profileForm.heading': 'Dine opplysninger',\n 'profileForm.lastName': 'Etternavn',\n 'profileForm.marketing': 'Ja takk, send meg nyheter og tilbud på e-post',\n 'profileForm.phone': 'Mobil',\n 'profileForm.restored': 'Navnet kan ikke stå tomt, så vi beholdt det du hadde.',\n 'profileForm.save': 'Lagre',\n 'profileForm.saved': 'Lagret',\n 'profileForm.unreachable': 'Vi nådde ikke bookingsystemet. Prøv igjen straks.',\n 'rebook.anyStylist': 'Hvem som helst',\n 'rebook.cta': 'Bestill det samme',\n 'rebook.empty': 'Etter første besøk kan du bestille det samme igjen herfra.',\n 'rebook.heading': 'Bestill på nytt',\n 'rebook.serviceFallback': 'Time',\n 'service.ageDivider.named': 'Passer vanligvis ikke for alderen til {name}',\n 'service.ageDivider.unnamed': 'Passer vanligvis ikke for alderen',\n 'service.categoriesLegend': 'Kategorier',\n 'service.chooseFirst': 'Velg minst én tjeneste',\n 'service.chooseOther': 'Velg noe annet',\n 'service.continue': 'Neste',\n 'service.duration': '{minutes} min',\n 'service.heading': 'Hva vil du bestille?',\n 'service.multiHint': 'Velg én eller flere',\n 'service.party.adultAlone': '{label} må bestilles som en egen time.',\n 'service.party.listLabel': 'Tjenester for {label}',\n 'service.party.nothingBookable': 'Ingen tjenester kan bestilles på nett for {label}.',\n 'service.party.nothingFits': 'Ingen tjenester kan bestilles for {label} i en så stor gruppe.',\n 'service.party.remove': 'Fjern {label} fra denne timen',\n 'service.phoneOnly': 'Bestilles på telefon',\n 'service.phoneOnlyLinkLabel': 'Bestilles på telefon – ring {phone}',\n 'service.sameAsLast': 'Samme som sist',\n 'service.tabDone': 'ferdig',\n 'service.total': '{minutes} min · {price}',\n 'stylist.firstAvailable': 'Første ledige',\n 'stylist.firstAvailableBadge': '★',\n 'stylist.firstAvailableSubtitle': 'Første stol som er ledig',\n 'stylist.heading': 'Hvem vil du bestille hos?',\n 'stylist.loading': 'Henter behandlere …',\n 'stylist.nextAvailable': 'Neste ledige:',\n 'stylist.party.legend': 'Hvordan vil dere ha timene?',\n 'stylist.party.parallel.other': 'Flere behandlere samtidig',\n 'stylist.party.parallel.three': 'Tre behandlere samtidig',\n 'stylist.party.parallel.two': 'To behandlere samtidig',\n 'stylist.party.parallelMinutes': 'Ferdig på {minutes} min',\n 'stylist.party.parallelNote.other': 'Vi finner {count} behandlere som er ledige samtidig.',\n 'stylist.party.parallelNote.three': 'Vi finner tre behandlere som er ledige samtidig.',\n 'stylist.party.parallelNote.two': 'Vi finner to behandlere som er ledige samtidig.',\n 'stylist.party.sequential': 'Samme behandler, etter hverandre',\n 'stylist.party.sequentialMinutes': 'Til sammen {minutes} min',\n 'stylist.pendingName': 'Valgt behandler',\n 'summary.next': 'Videre',\n 'summary.placeholder.service': 'Velg en behandling',\n 'summary.placeholder.who': 'Velg hvem timen gjelder',\n 'time.current': '{time} · Din time nå',\n 'time.dayStrip.legend': 'Velg dag',\n 'time.empty.callLink': 'ring oss på {phone}',\n 'time.empty.callLinkAria': 'Ring oss på {phone}',\n 'time.empty.callPlain': 'ring oss, så hjelper vi deg.',\n 'time.empty.callSuffix': ', så hjelper vi deg.',\n 'time.empty.closed': 'Stengt {day} – prøv en annen dag.',\n 'time.empty.full': 'Fullbooket {day} –',\n 'time.empty.over': 'Ikke flere tider {day} – prøv en annen dag.',\n 'time.empty.stylist': '{stylist} er fullbooket {day} –',\n 'time.empty.unknown': 'Ingen ledige tider {day} –',\n 'time.heading': 'Når vil du komme?',\n 'time.loading': 'Henter ledige tider …',\n 'time.month.heading': '{month} {year}',\n 'time.month.hide': 'Skjul måneden',\n 'time.month.next': 'Neste måned',\n 'time.month.note': 'Du kan bestille inntil sju dager fram. Velg en dag for å se ledige tider.',\n 'time.month.previous': 'Forrige måned',\n 'time.month.show': 'Se hele måneden',\n 'time.nearest': 'nærmeste ledige',\n 'time.nextFree': 'Første ledige time',\n 'time.parallel.accept': 'Velg {time} samtidig',\n 'time.parallel.offer.other':\n 'Ingen tider etter hverandre {day} – men alle kan komme samtidig kl. {time}.',\n 'time.parallel.offer.two':\n 'Ingen tider etter hverandre {day} – men dere kan komme samtidig kl. {time}.',\n 'time.party.parallel': '{time} ({seats})',\n 'time.party.seat': '{who} hos {stylist}',\n 'time.party.seatSeparator': ' · ',\n 'time.party.sequential': '{start} → {end}',\n 'time.shortNotice': 'Ring oss hvis du vil komme i dag',\n 'time.skeleton.dayPlaceholder': 'man. 00.',\n 'time.taken.close': 'Lukk',\n 'time.taken.message': 'Den tiden ble akkurat tatt – her er de nærmeste',\n 'time.weekend.mixed': 'Helg: inkludert helgetillegg ({price})',\n 'time.weekend.pct': 'Helg: +{pct}\\u00A0% helgetillegg ({price})',\n 'upcoming.anyStylist': 'Hvem som helst',\n 'upcoming.book': 'Bestill en time',\n 'upcoming.call': 'ring {phone}',\n 'upcoming.empty': 'Du har ingen timer framover.',\n 'upcoming.heading': 'Neste timer',\n 'upcoming.inDays': 'om {count} dager',\n 'upcoming.manage': 'Flytt eller avlys',\n 'upcoming.next': 'Neste time – {when}',\n 'upcoming.noManage': 'Kontakt oss for å gjøre endringer.',\n 'upcoming.noManageWithPhone': 'Kontakt oss for å gjøre endringer – {call}.',\n 'upcoming.serviceFallback': 'Time',\n 'upcoming.today': 'i dag',\n 'upcoming.tomorrow': 'i morgen',\n 'upcoming.when': '{day} kl. {time}',\n 'vipps.button': 'Logg inn med Vipps',\n 'vipps.throttled': 'Vent litt, og prøv igjen.',\n 'vipps.unavailable': 'Innlogging med Vipps er nede akkurat nå. Bruk e-post i stedet.',\n 'vippsLink.button': 'Koble til Vipps',\n 'vippsLink.conflict':\n 'Denne Vipps-kontoen hører allerede til en annen profil. Kontakt oss om du trenger hjelp.',\n 'vippsLink.failed': 'Vi fikk ikke til å koble til Vipps. Prøv en gang til.',\n 'vippsLink.heading': 'Vipps',\n 'vippsLink.linked': 'Kontoen er koblet til Vipps',\n 'vippsLink.pitch': 'Koble til Vipps, så logger du inn med ett trykk.',\n 'vippsLink.success': 'Vipps er nå koblet til',\n 'vippsLink.throttled': 'Vent litt, og prøv igjen.',\n 'vippsLink.unavailable': 'Vipps er utilgjengelig akkurat nå. Prøv igjen litt senere.',\n 'who.family.legend': 'Velg opptil {max}',\n 'who.family.limit': 'En bestilling kan gjelde opptil {max} personer.',\n 'who.family.self': 'Meg selv (voksen)',\n 'who.guest.addedList': 'Barn i denne bestillingen',\n 'who.guest.adult': 'Voksen',\n 'who.guest.children.one': '{count} barn',\n 'who.guest.children.other': '{count} barn',\n 'who.guest.groupLabel': 'Hvor mange gjelder timen?',\n 'who.heading': 'Hvem gjelder timen?',\n // Opt-in screens (`config.screens`): recap, «free soon», day fullness, bar hints, guest party.\n 'recap.label': 'Timen du bestiller',\n 'recap.time': 'Kl. {start}–{end}',\n 'recap.line': '{services} hos {stylist}',\n 'recap.lineFor': '{who}: {services} hos {stylist}',\n 'recap.anyStylist': 'første ledige',\n 'recap.total': '{price} totalt',\n 'recap.edit': 'Endre',\n 'recap.editLabel': 'Endre dag og tid',\n 'recap.alsoFree': 'Også ledig kl. {time}:',\n 'recap.swapTo': 'Bestill hos {name} i stedet',\n 'time.soonest.heading': 'Ledig snart',\n 'time.soonest.pick': '{day} kl. {time}',\n 'time.soonest.with': 'hos {stylist}',\n 'time.dayChip.free': '{count} ledige',\n 'time.dayChip.freeOne': '{count} ledig',\n 'time.dayChip.full': 'fullt',\n 'time.week.none': 'Ingen ledige',\n 'time.week.more': '{count} til',\n 'summary.hint.who': 'Velg hvem som kommer',\n 'summary.hint.service': 'Trykk på en tjeneste',\n 'summary.hint.when': 'Trykk på en tid',\n 'who.party.children': 'Barn',\n 'who.party.childrenNote': '',\n 'who.party.adult': 'Jeg skal også ha time',\n 'who.party.adultNote': 'Samtidig, ved siden av',\n 'who.party.fewer': 'Ett barn færre',\n 'who.party.more': 'Ett barn til',\n 'who.party.count': '{count} barn',\n};\n\nexport const SCREEN_LABELS_EN: ScreenLabels = {\n 'addChild.birthMonth': 'Month of birth (optional)',\n 'addChild.birthMonthUnknown': 'Not sure',\n 'addChild.birthYear': 'Year of birth',\n 'addChild.birthYearPlaceholder': 'Choose year',\n 'addChild.close': 'Close',\n 'addChild.description.local': 'Only for this booking.',\n 'addChild.description.saved': 'We keep the child on your profile for next time.',\n 'addChild.missing': 'Enter a name and choose a year of birth.',\n 'addChild.name': 'Name',\n 'addChild.notes': 'Note for the salon (optional)',\n 'addChild.submit': 'Add',\n 'addChild.title': 'Add a child',\n 'addChild.trigger': 'Add a child',\n 'ageConfirm.birthMonth': 'Month of birth (optional)',\n 'ageConfirm.birthMonthUnknown': 'Not sure',\n 'ageConfirm.birthYear': 'Year of birth',\n 'ageConfirm.confirm': 'Confirm',\n 'ageConfirm.dismiss': 'Later',\n 'ageConfirm.heading': 'Is {name}’s age right?',\n 'ageConfirm.lead': 'Add a birth month and we will get the age exactly right.',\n 'ageConfirm.legend': 'Age for {name}',\n 'bookingSkeleton.opening': 'Opening booking …',\n 'childCards.book': 'Book for {name}',\n 'childCards.empty': 'No children added yet.',\n 'childCards.lastVisit': '{age} · last: {service}, {date}',\n 'childCards.lastVisitNoService': '{age} · last: {date}',\n 'childCards.neverVisited': '{age} · not been in yet',\n 'childCards.next': 'Next appointment',\n 'childCards.none': '–',\n 'childCards.stylist': 'Usual stylist',\n 'confirmation.calendar': 'Add to calendar',\n 'confirmation.heading': 'You are booked in',\n 'confirmation.manage': 'Change or cancel',\n 'confirmation.manageFor': 'Change or cancel {who} at {time}',\n 'confirmation.party.heading': 'Group visit · {day}',\n 'confirmation.party.line': '{time} {name} – {service} {stylist} – {price}',\n 'confirmation.party.stylist': 'with {name}',\n 'confirmation.party.total': 'Total {total} · paid at the salon',\n 'confirmation.portal': 'See all your bookings',\n 'confirmation.serviceFor': '{service} for {name}',\n 'confirmation.startOver': 'Book another appointment',\n 'confirmation.when': '{day} at {time}',\n 'dataControls.cancel': 'Cancel',\n 'dataControls.confirmHeading': 'Really delete your account?',\n 'dataControls.confirmHelp': 'This cannot be undone.',\n 'dataControls.confirmLabel': 'Type {word} to confirm',\n 'dataControls.confirmWord': 'DELETE',\n 'dataControls.consequences':\n 'Upcoming appointments are cancelled, your history is anonymised, and you will not be able to log in again.',\n 'dataControls.delete': 'Delete my account',\n 'dataControls.deleteForever': 'Delete my account for good',\n 'dataControls.export': 'Download a copy',\n 'dataControls.heading': 'Your data',\n 'dataControls.unreachable': 'We could not reach the booking system. Please try again shortly.',\n 'dataControls.wrongWord': 'Type {word} exactly, in capital letters.',\n 'details.call.link': 'Call {phone}',\n 'details.call.none': 'Call the salon and we will help.',\n 'details.child.name': 'Name of the person coming',\n 'details.child.year': 'Year of birth',\n 'details.child.yearPlaceholder': '2018',\n 'details.email.error': 'That email address does not look right.',\n 'details.email.help': 'We send the confirmation and a calendar file here.',\n 'details.email.label': 'Email address',\n 'details.email.lockedHelp': 'The e-mail you signed in with',\n 'details.error.conflict': 'We could not set up the appointment. Please try again.',\n 'details.error.inProgress':\n 'We already have this booking. Look for the confirmation email, or give us a call.',\n 'details.error.invalidInput': 'Some fields are not filled in correctly. Please check them.',\n 'details.error.maxParty': 'You can book for up to three people at a time.',\n 'details.error.slotTaken': 'Someone else took that time. Please pick another.',\n 'details.error.unconfigured': 'Online booking is unavailable right now.',\n 'details.error.upstreamError':\n 'The booking system did not answer, so we do not know if the appointment was made. Press the button again – you will not be booked twice.',\n 'details.heading': 'Almost done',\n 'details.known.adult': 'an adult',\n 'details.known.child': 'your child',\n 'details.known.for': 'for {who}',\n 'details.known.label': 'These appointments are for',\n 'details.known.self': 'you',\n 'details.marketing.text': 'Send me reminders and offers by e-mail.',\n 'details.name.label': 'Your name',\n 'details.notes.label': 'Message for the salon',\n 'details.notes.placeholder': 'Anything we should know in advance',\n 'details.phone.error': 'That number looks incomplete. Please check the digits.',\n 'details.phone.label': 'Mobile',\n 'details.phone.prefix': '+44',\n 'details.submit': 'Book – {price} paid at the salon',\n 'details.terms.link': 'Read the terms',\n 'details.terms.text':\n 'I understand the appointment can be moved or cancelled free of charge before the salon’s deadline.',\n 'familyEditor.add': 'Add a person',\n 'familyEditor.ageConfirmed': 'Thanks, {name}’s age is confirmed.',\n 'familyEditor.ageSaved': 'Thanks, {name}’s age is saved.',\n 'familyEditor.birthMonth': 'Month of birth (optional)',\n 'familyEditor.birthMonthUnknown': 'Not sure',\n 'familyEditor.birthYear': 'Year of birth',\n 'familyEditor.birthYearPlaceholder': 'Pick a year',\n 'familyEditor.empty': 'Nobody added yet.',\n 'familyEditor.heading': 'Your family',\n 'familyEditor.lead': 'Knowing ages lets us suggest the right treatment and price for everyone.',\n 'familyEditor.legend': 'Family members',\n 'familyEditor.name': 'Name',\n 'familyEditor.newRow': 'New person',\n 'familyEditor.notes': 'Note for the stylist',\n 'familyEditor.notesPlaceholder': 'For example: does not like the clipper noise',\n 'familyEditor.partial': 'Please fill in both a name and a year of birth.',\n 'familyEditor.remove': 'Remove',\n 'familyEditor.removeNamed': 'Remove {name}',\n 'familyEditor.removeRow': 'Remove this row',\n 'familyEditor.removed': 'Removed',\n 'familyEditor.save': 'Save',\n 'familyEditor.saved': 'Saved',\n 'familyEditor.savedNoDetails':\n 'Saved. Month, stylist and note could not be stored right now – please try again later.',\n 'familyEditor.stylist': 'Preferred stylist',\n 'familyEditor.stylistFormer': 'Former stylist',\n 'familyEditor.stylistNone': 'No preference',\n 'familyEditor.unreachable': 'We could not reach the booking system. Please try again shortly.',\n 'history.count.one': '{count} visit in {year}',\n 'history.count.other': '{count} visits in {year}',\n 'history.empty': 'No visits yet. They show up here after the first appointment.',\n 'history.heading': 'Past visits',\n 'history.serviceFallback': 'Visit',\n 'history.unknownAmount': '—',\n 'login.codeHeading': 'Check your e-mail for the code',\n 'login.codeHelp': 'Six digits, sent to {email}. The code lasts ten minutes.',\n 'login.codeHelpVipps': 'Six digits. The right code links Vipps to your account.',\n 'login.codeLabel': 'Code',\n 'login.continueEmail': 'Continue with e-mail',\n 'login.cooldownReady': 'You can ask for a new code now.',\n 'login.cooldownWait': 'You can ask for a new code in {seconds} seconds.',\n 'login.emailIntro': 'Use the e-mail address you booked with and we will send you a code.',\n 'login.emailLabel': 'E-mail address',\n 'login.heading': 'Log in',\n 'login.notice.badEmail': 'That e-mail address does not look right.',\n 'login.notice.invalid': 'That code is wrong or expired. Try again, or ask for a new one.',\n 'login.notice.resent':\n 'If we know that address, a new code is on its way. Check your inbox, and your spam folder.',\n 'login.notice.sent':\n 'If we know that address, a code is on its way. Check your inbox, and your spam folder.',\n 'login.notice.throttled': 'Too many tries in a short time. Wait a little.',\n 'login.notice.unreachable': 'We cannot reach the booking system right now. Try again shortly.',\n 'login.notice.vippsConflict':\n 'This Vipps account belongs to another account with us. Log in with e-mail, or call us.',\n 'login.notice.vippsInvalid': 'That code is wrong or expired.',\n 'login.or': 'or',\n 'login.resend': 'Send a new code',\n 'login.resendIn': 'New code in {time}',\n 'login.sendCode': 'Send me a code',\n 'login.submitCode': 'Log in',\n 'login.switchEmail': 'Use a different address',\n 'login.useEmailInstead': 'Use e-mail instead',\n 'login.vippsSentTo': 'The code went to {to}.',\n 'login.vippsSentToUnknown': 'The code went to the e-mail address we have on file for you.',\n 'loginSheet.close': 'Close',\n 'loginSheet.intro': 'We fill in your name and number, and the booking shows up in your account.',\n 'loginSheet.prompt': 'Been here before? {trigger} and we fill in what we know.',\n 'loginSheet.trigger': 'Log in',\n 'loginSheet.vipps': 'Continue with Vipps',\n 'logout.button': 'Log out',\n 'logout.unreachable': 'We could not reach the booking system. Please try again shortly.',\n 'manage.appointment.named': \"{name}'s appointment\",\n 'manage.appointment.namedSibilant': \"{name}' appointment\",\n 'manage.appointment.unnamed': 'the appointment',\n 'manage.back': 'Back',\n 'manage.blocked': 'Under {hours} hours left –',\n 'manage.blocked.plain': 'call us and we will sort it out.',\n 'manage.blocked.suffix': ' and we will sort it out.',\n 'manage.bookNew': 'Book a new appointment',\n 'manage.calendar': 'Add to calendar',\n 'manage.callToCancel': 'Call to cancel (under {hours} h left)',\n 'manage.callToChange': 'Call to change (under {hours} h left)',\n 'manage.callUs': 'Call us',\n 'manage.callUsOn': 'Call us on {phone}',\n 'manage.cancel': 'Cancel',\n 'manage.cancel.confirm': 'Yes, cancel',\n 'manage.cancel.keep': 'Keep the appointment',\n 'manage.cancel.question': 'Cancel {appointment} {dateTime}? It is free until {hours} h before.',\n 'manage.cancel.reason.illness': 'Illness',\n 'manage.cancel.reason.noLongerSuits': 'No longer suits',\n 'manage.cancel.reason.other': 'Other',\n 'manage.cancel.reasonLegend': 'Reason (optional)',\n 'manage.cancelled': 'The appointment is cancelled. Would you like to find a new time now?',\n 'manage.cancelled.findNew': 'Find a new time',\n 'manage.card.named': '{name} – {service}',\n 'manage.card.when': '{dateTime} · {price}',\n 'manage.card.whenWithStylist': '{dateTime} with {stylist} · {price}',\n 'manage.change': 'Change time',\n 'manage.closed.cancelled': 'This appointment has been cancelled.',\n 'manage.closed.completed': 'This appointment has been completed.',\n 'manage.closed.noShow': 'This appointment is closed.',\n 'manage.closed.pending': 'This appointment is not confirmed yet.',\n 'manage.closed.pendingCall': 'Call us on {phone} and we will help.',\n 'manage.closed.pendingCallPlain': 'Call us and we will help.',\n 'manage.error.conflict': 'The appointment cannot be changed right now – {ringUs}.',\n 'manage.error.invalidInput': 'That time cannot be used. Please choose another.',\n 'manage.error.notFound': 'We cannot find this appointment. {callUs} and we will help.',\n 'manage.error.slotTaken': 'That time was just taken. Please choose another.',\n 'manage.error.unavailable': 'Something went wrong. Try again, or {ringUs}.',\n 'manage.error.windowPassed': 'It is too late to change this yourself – {ringUs}.',\n 'manage.freeUntil': 'Free to change until {dateTime}',\n 'manage.heading': 'Your appointment',\n 'manage.move.confirm': 'Confirm new time',\n 'manage.move.pickAnother': 'Choose another time',\n 'manage.move.question': 'Move {appointment} from {from} to {to}?',\n 'manage.move.questionWithStylist': 'Move {appointment} from {from} to {to} with {stylist}?',\n 'manage.move.surcharge': 'Note: {weekday} price {price} (+{pct}\\u00A0% weekend surcharge)',\n 'manage.moved': 'The appointment has been moved.',\n 'manage.moved.noLink': 'The change is saved.',\n 'manage.moved.noLinkSuffix': 'if you want to change it again.',\n 'manage.moved.view': 'View the appointment',\n 'manage.movedTo': 'The appointment has been moved to {dateTime}.',\n 'manage.party.heading': 'Move the whole visit, or just {who}?',\n 'manage.party.justThisOne': 'Just {who}',\n 'manage.party.note': 'Everyone else keeps their times. To move the whole visit,',\n 'manage.party.noteSuffix': ' and we will move everyone.',\n 'manage.party.unnamed': 'this appointment',\n 'manage.portal': 'See all your appointments',\n 'manage.remaining.day.one': '{count} day',\n 'manage.remaining.day.other': '{count} days',\n 'manage.remaining.daysAndHours': 'in {days} and {hours}',\n 'manage.remaining.hour.one': '{count} hour',\n 'manage.remaining.hour.other': '{count} hours',\n 'manage.remaining.in': 'in {amount}',\n 'manage.remaining.minute.one': '{count} minute',\n 'manage.remaining.minute.other': '{count} minutes',\n 'manage.remaining.underMinute': 'in under a minute',\n 'manage.reschedule.failed': 'We cannot load free times right now –',\n 'manage.reschedule.failedSuffix': ' and we will find a time.',\n 'manage.reschedule.lead': '{service} – choose a new time',\n 'manage.reschedule.leadWithStylist': '{service} with {stylist} – choose a new time',\n 'manage.reschedule.loading': 'Loading free times …',\n 'manage.ringUs': 'call us',\n 'manage.ringUsOn': 'call us on {phone}',\n 'manage.serviceFallback': 'Appointment',\n 'otp.label': 'One-time code',\n 'portalShell.nav': 'Your account',\n 'portalShell.navBar': 'Account menu',\n 'portalUnreachable.body':\n 'Your bookings are safe – we just cannot reach the booking system. Try again shortly, or call us.',\n 'portalUnreachable.call': 'Call {phone}',\n 'portalUnreachable.heading': 'Your account is unavailable right now',\n 'portalUnreachable.retry': 'Reload',\n 'profileForm.email': 'E-mail address',\n 'profileForm.emailHelp': 'To change your e-mail address, please get in touch with us.',\n 'profileForm.firstName': 'First name',\n 'profileForm.heading': 'Your details',\n 'profileForm.lastName': 'Last name',\n 'profileForm.marketing': 'Yes, e-mail me news and offers',\n 'profileForm.phone': 'Mobile',\n 'profileForm.restored': 'A name cannot be empty, so we kept the one you had.',\n 'profileForm.save': 'Save',\n 'profileForm.saved': 'Saved',\n 'profileForm.unreachable': 'We could not reach the booking system. Please try again shortly.',\n 'rebook.anyStylist': 'Anyone available',\n 'rebook.cta': 'Book the same',\n 'rebook.empty': 'After your first visit you can book the same again from here.',\n 'rebook.heading': 'Book again',\n 'rebook.serviceFallback': 'Appointment',\n 'service.ageDivider.named': 'Usually not suited to {nameGenitive} age',\n 'service.ageDivider.unnamed': 'Usually not suited to this age',\n 'service.categoriesLegend': 'Categories',\n 'service.chooseFirst': 'Choose at least one service',\n 'service.chooseOther': 'Choose something else',\n 'service.continue': 'Next',\n 'service.duration': '{minutes} min',\n 'service.heading': 'What would you like to book?',\n 'service.multiHint': 'Choose one or more',\n 'service.party.adultAlone': '{label} needs a separate appointment.',\n 'service.party.listLabel': 'Services for {label}',\n 'service.party.nothingBookable': 'Nothing can be booked online for {label}.',\n 'service.party.nothingFits': 'Nothing can be booked for {label} in a group this size.',\n 'service.party.remove': 'Remove {label} from this appointment',\n 'service.phoneOnly': 'Book by phone',\n 'service.phoneOnlyLinkLabel': 'Book by phone – call {phone}',\n 'service.sameAsLast': 'Same as last time',\n 'service.tabDone': 'done',\n 'service.total': '{minutes} min · {price}',\n 'stylist.firstAvailable': 'First available',\n 'stylist.firstAvailableBadge': '★',\n 'stylist.firstAvailableSubtitle': 'We find the first free time',\n 'stylist.heading': 'Who would you like to see?',\n 'stylist.loading': 'Loading stylists …',\n 'stylist.nextAvailable': 'Next free:',\n 'stylist.party.legend': 'How would you like the appointments?',\n 'stylist.party.parallel.other': 'Several stylists at once',\n 'stylist.party.parallel.three': 'Three stylists at once',\n 'stylist.party.parallel.two': 'Two stylists at once',\n 'stylist.party.parallelMinutes': 'Done in {minutes} min',\n 'stylist.party.parallelNote.other': 'We find {count} stylists who are free at the same time.',\n 'stylist.party.parallelNote.three': 'We find three stylists who are free at the same time.',\n 'stylist.party.parallelNote.two': 'We find two stylists who are free at the same time.',\n 'stylist.party.sequential': 'Same stylist, one after the other',\n 'stylist.party.sequentialMinutes': '{minutes} min in total',\n 'stylist.pendingName': 'Chosen stylist',\n 'summary.next': 'Continue',\n 'summary.placeholder.service': 'Choose a service',\n 'summary.placeholder.who': 'Choose who the booking is for',\n 'time.current': '{time} · Your current time',\n 'time.dayStrip.legend': 'Choose a day',\n 'time.empty.callLink': 'call us on {phone}',\n 'time.empty.callLinkAria': 'Call us on {phone}',\n 'time.empty.callPlain': 'call us and we will help.',\n 'time.empty.callSuffix': ' and we will help.',\n 'time.empty.closed': 'Closed {day} – try another day.',\n 'time.empty.full': 'Fully booked {day} –',\n 'time.empty.over': 'No more times {day} – try another day.',\n 'time.empty.stylist': '{stylist} is fully booked {day} –',\n 'time.empty.unknown': 'No free times {day} –',\n 'time.heading': 'When would you like to come?',\n 'time.loading': 'Loading free times …',\n 'time.month.heading': '{month} {year}',\n 'time.month.hide': 'Hide the month',\n 'time.month.next': 'Next month',\n 'time.month.note': 'You can book up to seven days ahead. Choose a day to see free times.',\n 'time.month.previous': 'Previous month',\n 'time.month.show': 'See the whole month',\n 'time.nearest': 'nearest available',\n 'time.nextFree': 'First available time',\n 'time.parallel.accept': 'Take {time} together',\n 'time.parallel.offer.other':\n 'No back-to-back times {day} – but you can all come at the same time at {time}.',\n 'time.parallel.offer.two':\n 'No back-to-back times {day} – but you can both come at the same time at {time}.',\n 'time.party.parallel': '{time} ({seats})',\n 'time.party.seat': '{who} with {stylist}',\n 'time.party.seatSeparator': ' · ',\n 'time.party.sequential': '{start} → {end}',\n 'time.shortNotice': 'Call us if you want to come today',\n 'time.skeleton.dayPlaceholder': 'Mon 00',\n 'time.taken.close': 'Close',\n 'time.taken.message': 'That time was just taken – here are the nearest ones',\n 'time.weekend.mixed': 'Weekend: surcharge included ({price})',\n 'time.weekend.pct': 'Weekend: +{pct}\\u00A0% surcharge ({price})',\n 'upcoming.anyStylist': 'Anyone available',\n 'upcoming.book': 'Book an appointment',\n 'upcoming.call': 'call {phone}',\n 'upcoming.empty': 'You have no appointments coming up.',\n 'upcoming.heading': 'Coming up',\n 'upcoming.inDays': 'in {count} days',\n 'upcoming.manage': 'Move or cancel',\n 'upcoming.next': 'Next appointment – {when}',\n 'upcoming.noManage': 'Contact us to make changes.',\n 'upcoming.noManageWithPhone': 'Contact us to make changes – {call}.',\n 'upcoming.serviceFallback': 'Appointment',\n 'upcoming.today': 'today',\n 'upcoming.tomorrow': 'tomorrow',\n 'upcoming.when': '{day} at {time}',\n 'vipps.button': 'Log in with Vipps',\n 'vipps.throttled': 'Wait a moment and try again.',\n 'vipps.unavailable': 'Vipps login is down right now. Use e-mail instead.',\n 'vippsLink.button': 'Link Vipps',\n 'vippsLink.conflict':\n 'This Vipps account already belongs to another profile. Get in touch if you need help.',\n 'vippsLink.failed': 'We could not link Vipps. Please try once more.',\n 'vippsLink.heading': 'Vipps',\n 'vippsLink.linked': 'Your account is linked to Vipps',\n 'vippsLink.pitch': 'Link Vipps and log in with a single tap next time.',\n 'vippsLink.success': 'Vipps is now linked',\n 'vippsLink.throttled': 'Please wait a moment and try again.',\n 'vippsLink.unavailable': 'Vipps is unavailable right now. Please try again a little later.',\n 'who.family.legend': 'Choose up to {max}',\n 'who.family.limit': 'One booking can include up to {max} people.',\n 'who.family.self': 'Myself (adult)',\n 'who.guest.addedList': 'Children in this booking',\n 'who.guest.adult': 'Adult',\n 'who.guest.children.one': '{count} child',\n 'who.guest.children.other': '{count} children',\n 'who.guest.groupLabel': 'How many people?',\n 'who.heading': 'Who is the appointment for?',\n // Opt-in screens (`config.screens`): recap, «free soon», day fullness, bar hints, guest party.\n 'recap.label': 'The appointment you are booking',\n 'recap.time': '{start}–{end}',\n 'recap.line': '{services} with {stylist}',\n 'recap.lineFor': '{who}: {services} with {stylist}',\n 'recap.anyStylist': 'the first available',\n 'recap.total': '{price} in total',\n 'recap.edit': 'Change',\n 'recap.editLabel': 'Change day and time',\n 'recap.alsoFree': 'Also free at {time}:',\n 'recap.swapTo': 'Book with {name} instead',\n 'time.soonest.heading': 'Free soon',\n 'time.soonest.pick': '{day} at {time}',\n 'time.soonest.with': 'with {stylist}',\n 'time.dayChip.free': '{count} free',\n 'time.dayChip.freeOne': '{count} free',\n 'time.dayChip.full': 'full',\n 'time.week.none': 'Nothing free',\n 'time.week.more': '{count} more',\n 'summary.hint.who': 'Choose who is coming',\n 'summary.hint.service': 'Tap a service',\n 'summary.hint.when': 'Tap a time',\n 'who.party.children': 'Children',\n 'who.party.childrenNote': '',\n 'who.party.adult': 'I need an appointment too',\n 'who.party.adultNote': 'At the same time, side by side',\n 'who.party.fewer': 'One child fewer',\n 'who.party.more': 'One more child',\n 'who.party.count': '{count} children',\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"screens.mjs","names":[],"sources":["../../../src/react/labels/screens.ts"],"sourcesContent":["/**\n * The built-in copy for every `@medalsocial/meda/booking` screen, in `nb` and\n * `en`: neutral wording with no business named in it. A site passes its own\n * words through `labels`, merged over these key by key (`mergeLabels`).\n *\n * Kept in step with meda's `BOOKING_LABEL_KEYS` by `tests/react/labels.test.ts`.\n */\n\nimport type { BookingLabels as MedaBookingLabels } from '@medalsocial/meda/booking';\nimport type { BookingLabel } from '../../core/labels';\n\n/**\n * Every meda screen key, each a `BookingLabel`: a string renders as one text\n * node, an array one per element (meda ≥ 3.4). The built-in packs are all\n * strings.\n */\nexport type ScreenLabels = { [K in keyof MedaBookingLabels]-?: BookingLabel };\n\nexport const SCREEN_LABELS_NB: ScreenLabels = {\n 'addChild.birthMonth': 'Fødselsmåned (valgfritt)',\n 'addChild.birthMonthUnknown': 'Vet ikke',\n 'addChild.birthYear': 'Fødselsår',\n 'addChild.birthYearPlaceholder': 'Velg år',\n 'addChild.close': 'Lukk',\n 'addChild.description.local': 'Gjelder bare denne bestillingen.',\n 'addChild.description.saved': 'Barnet lagres på profilen din til neste gang.',\n 'addChild.missing': 'Skriv inn navn og velg fødselsår.',\n 'addChild.name': 'Navn',\n 'addChild.notes': 'Notat til salongen (valgfritt)',\n 'addChild.submit': 'Legg til',\n 'addChild.title': 'Legg til barn',\n 'addChild.trigger': 'Legg til barn',\n 'ageConfirm.birthMonth': 'Fødselsmåned (frivillig)',\n 'ageConfirm.birthMonthUnknown': 'Vet ikke',\n 'ageConfirm.birthYear': 'Fødselsår',\n 'ageConfirm.confirm': 'Bekreft',\n 'ageConfirm.dismiss': 'Senere',\n 'ageConfirm.heading': 'Stemmer alderen til {name}?',\n 'ageConfirm.lead': 'Legg gjerne inn fødselsmåned, så blir alderen helt riktig.',\n 'ageConfirm.legend': 'Alder for {name}',\n 'bookingSkeleton.opening': 'Laster timebestilling …',\n 'childCards.book': 'Bestill til {name}',\n 'childCards.empty': 'Ingen barn registrert ennå.',\n 'childCards.lastVisit': '{age} · sist: {service}, {date}',\n 'childCards.lastVisitNoService': '{age} · sist: {date}',\n 'childCards.neverVisited': '{age} · ikke vært hos oss ennå',\n 'childCards.next': 'Neste time',\n 'childCards.none': '–',\n 'childCards.stylist': 'Fast stylist',\n 'confirmation.calendar': 'Legg i kalenderen',\n 'confirmation.heading': 'Timen er bestilt',\n 'confirmation.manage': 'Flytt eller avbestill',\n 'confirmation.manageFor': 'Flytt eller avbestill {who} kl. {time}',\n 'confirmation.party.heading': 'Felles besøk · {day}',\n 'confirmation.party.line': '{time} {name} – {service} {stylist} – {price}',\n 'confirmation.party.stylist': 'hos {name}',\n 'confirmation.party.total': 'Til sammen {total} · betales i salongen',\n 'confirmation.portal': 'Se alle timene dine',\n 'confirmation.serviceFor': '{service} for {name}',\n 'confirmation.startOver': 'Bestill en ny time',\n 'confirmation.when': '{day} kl. {time}',\n 'dataControls.cancel': 'Avbryt',\n 'dataControls.confirmHeading': 'Vil du virkelig slette kontoen?',\n 'dataControls.confirmHelp': 'Dette kan ikke gjøres om.',\n 'dataControls.confirmLabel': 'Skriv {word} for å bekrefte',\n 'dataControls.confirmWord': 'SLETT',\n 'dataControls.consequences':\n 'Timer du har bestilt, blir avbestilt, historikken blir anonymisert, og du kan ikke logge inn igjen.',\n 'dataControls.delete': 'Slett kontoen',\n 'dataControls.deleteForever': 'Slett kontoen for godt',\n 'dataControls.export': 'Last ned en kopi',\n 'dataControls.heading': 'Dataene dine',\n 'dataControls.unreachable': 'Vi nådde ikke bookingsystemet. Prøv igjen straks.',\n 'dataControls.wrongWord': 'Skriv {word} nøyaktig slik, med store bokstaver.',\n 'details.call.link': 'Ring {phone}',\n 'details.call.none': 'Ring salongen, så hjelper vi deg.',\n 'details.child.name': 'Navn på den som kommer',\n 'details.child.year': 'Født år',\n 'details.child.yearPlaceholder': '2018',\n 'details.email.error': 'E-postadressen ser ikke riktig ut.',\n 'details.email.help': 'Vi sender bekreftelsen og en kalenderfil hit.',\n 'details.email.label': 'E-postadresse',\n 'details.email.lockedHelp': 'E-posten du logget inn med',\n 'details.error.conflict': 'Timen kunne ikke settes opp. Prøv igjen.',\n 'details.error.inProgress':\n 'Bestillingen er allerede mottatt. Se etter bekreftelsen på e-post, eller ring oss.',\n 'details.error.invalidInput': 'Noen felt er ikke riktig fylt ut. Se over og prøv igjen.',\n 'details.error.maxParty': 'Du kan bestille for opptil tre personer om gangen.',\n 'details.error.slotTaken': 'Noen andre rakk å ta tiden. Velg en ny tid.',\n 'details.error.unconfigured': 'Timeboken er ikke tilgjengelig akkurat nå.',\n 'details.error.upstreamError':\n 'Vi fikk ikke svar fra timeboken, så vi vet ikke om timen ble registrert. Trykk på knappen igjen – du blir ikke booket to ganger.',\n 'details.heading': 'Snart ferdig',\n 'details.known.adult': 'en voksen',\n 'details.known.child': 'barnet',\n 'details.known.for': 'til {who}',\n 'details.known.label': 'Timene gjelder',\n 'details.known.self': 'deg',\n 'details.marketing.text': 'Send meg påminnelser og tilbud på e-post.',\n 'details.name.label': 'Navnet ditt',\n 'details.notes.label': 'Beskjed til salongen',\n 'details.notes.placeholder': 'For eksempel ønsker eller hensyn vi bør kjenne til',\n 'details.phone.error': 'Mobilnummeret ser ikke komplett ut. Sjekk sifrene.',\n 'details.phone.label': 'Mobil',\n 'details.phone.prefix': '+47',\n 'details.submit': 'Bestill – {price} betales i salongen',\n 'details.terms.link': 'Les vilkårene',\n 'details.terms.text': 'Jeg vet at timen kan flyttes eller avlyses gratis innen salongens frist.',\n 'familyEditor.add': 'Legg til person',\n 'familyEditor.ageConfirmed': 'Takk, alderen til {name} er bekreftet.',\n 'familyEditor.ageSaved': 'Takk, alderen til {name} er lagret.',\n 'familyEditor.birthMonth': 'Fødselsmåned (frivillig)',\n 'familyEditor.birthMonthUnknown': 'Vet ikke',\n 'familyEditor.birthYear': 'Fødselsår',\n 'familyEditor.birthYearPlaceholder': 'Velg år',\n 'familyEditor.empty': 'Ingen er lagt inn ennå.',\n 'familyEditor.heading': 'Familien',\n 'familyEditor.lead': 'Med alderen kan vi foreslå riktig behandling og pris for hver enkelt.',\n 'familyEditor.legend': 'Familiemedlemmer',\n 'familyEditor.name': 'Navn',\n 'familyEditor.newRow': 'Ny person',\n 'familyEditor.notes': 'Beskjed til stylisten',\n 'familyEditor.notesPlaceholder': 'For eksempel: blir urolig av lyden fra maskinen',\n 'familyEditor.partial': 'Fyll inn både navn og fødselsår.',\n 'familyEditor.remove': 'Fjern',\n 'familyEditor.removeNamed': 'Fjern {name}',\n 'familyEditor.removeRow': 'Fjern raden',\n 'familyEditor.removed': 'Fjernet',\n 'familyEditor.save': 'Lagre',\n 'familyEditor.saved': 'Lagret',\n 'familyEditor.savedNoDetails':\n 'Lagret. Måned, stylist og beskjed kunne ikke lagres nå – prøv igjen senere.',\n 'familyEditor.stylist': 'Foretrukket stylist',\n 'familyEditor.stylistFormer': 'Tidligere stylist',\n 'familyEditor.stylistNone': 'Ingen bestemt',\n 'familyEditor.unreachable': 'Vi nådde ikke bookingsystemet. Prøv igjen straks.',\n 'history.count.one': '{count} besøk i {year}',\n 'history.count.other': '{count} besøk i {year}',\n 'history.empty': 'Ingen besøk ennå. Her dukker de opp etter første time.',\n 'history.heading': 'Tidligere besøk',\n 'history.serviceFallback': 'Besøk',\n 'history.unknownAmount': '—',\n 'login.codeHeading': 'Se etter koden i e-posten',\n 'login.codeHelp': 'Seks sifre, sendt til {email}. Koden varer i ti minutter.',\n 'login.codeHelpVipps': 'Seks sifre. Riktig kode kobler Vipps til kontoen din.',\n 'login.codeLabel': 'Kode',\n 'login.continueEmail': 'Fortsett med e-post',\n 'login.cooldownReady': 'Nå kan du be om en ny kode.',\n 'login.cooldownWait': 'Du kan be om en ny kode om {seconds} sekunder.',\n 'login.emailIntro': 'Bruk e-postadressen du bestilte med, så sender vi deg en kode.',\n 'login.emailLabel': 'E-postadresse',\n 'login.heading': 'Logg inn',\n 'login.notice.badEmail': 'Den e-postadressen ser ikke riktig ut.',\n 'login.notice.invalid': 'Koden er feil eller utløpt. Prøv igjen, eller be om en ny.',\n 'login.notice.resent':\n 'Finnes adressen hos oss, er en ny kode på vei. Se i innboksen, og i søppelposten.',\n 'login.notice.sent':\n 'Finnes adressen hos oss, er en kode på vei. Se i innboksen, og i søppelposten.',\n 'login.notice.throttled': 'For mange forsøk på kort tid. Vent litt.',\n 'login.notice.unreachable': 'Vi når ikke timeboken akkurat nå. Prøv igjen straks.',\n 'login.notice.vippsConflict':\n 'Denne Vipps-kontoen hører til en annen konto hos oss. Logg inn med e-post, eller ring oss.',\n 'login.notice.vippsInvalid': 'Koden er feil eller utløpt.',\n 'login.or': 'eller',\n 'login.resend': 'Send en ny kode',\n 'login.resendIn': 'Ny kode om {time}',\n 'login.sendCode': 'Send meg en kode',\n 'login.submitCode': 'Logg inn',\n 'login.switchEmail': 'Bytt e-postadresse',\n 'login.useEmailInstead': 'Bruk e-post i stedet',\n 'login.vippsSentTo': 'Koden er sendt til {to}.',\n 'login.vippsSentToUnknown': 'Koden er sendt til e-postadressen vi har registrert på deg.',\n 'loginSheet.close': 'Lukk',\n 'loginSheet.intro': 'Vi fyller ut navn og nummer, og timen dukker opp på kontoen din.',\n 'loginSheet.prompt': 'Kunde fra før? {trigger}, så fyller vi ut det vi vet.',\n 'loginSheet.trigger': 'Logg inn',\n 'loginSheet.vipps': 'Fortsett med Vipps',\n 'logout.button': 'Logg ut',\n 'logout.unreachable': 'Vi nådde ikke bookingsystemet. Prøv igjen straks.',\n 'manage.appointment.named': '{name}s time',\n 'manage.appointment.namedSibilant': \"{name}' time\",\n 'manage.appointment.unnamed': 'timen',\n 'manage.back': 'Tilbake',\n 'manage.blocked': 'Under {hours} timer igjen –',\n 'manage.blocked.plain': 'ring oss, så finner vi ut av det.',\n 'manage.blocked.suffix': ', så finner vi ut av det.',\n 'manage.bookNew': 'Bestill en ny time',\n 'manage.calendar': 'Legg i kalenderen',\n 'manage.callToCancel': 'Ring for å avbestille (under {hours} t igjen)',\n 'manage.callToChange': 'Ring for å endre (under {hours} t igjen)',\n 'manage.callUs': 'Ring oss',\n 'manage.callUsOn': 'Ring oss på {phone}',\n 'manage.cancel': 'Avbestill',\n 'manage.cancel.confirm': 'Ja, avbestill',\n 'manage.cancel.keep': 'Behold timen',\n 'manage.cancel.question':\n 'Avbestille {appointment} {dateTime}? Det er gratis fram til {hours} t før.',\n 'manage.cancel.reason.illness': 'Sykdom',\n 'manage.cancel.reason.noLongerSuits': 'Passer ikke lenger',\n 'manage.cancel.reason.other': 'Annet',\n 'manage.cancel.reasonLegend': 'Grunn (valgfritt)',\n 'manage.cancelled': 'Timen er avbestilt. Vil du finne en ny tid med en gang?',\n 'manage.cancelled.findNew': 'Finn en ny tid',\n 'manage.card.named': '{name} – {service}',\n 'manage.card.when': '{dateTime} · {price}',\n 'manage.card.whenWithStylist': '{dateTime} hos {stylist} · {price}',\n 'manage.change': 'Endre tid',\n 'manage.closed.cancelled': 'Denne timen er avbestilt.',\n 'manage.closed.completed': 'Denne timen er fullført.',\n 'manage.closed.noShow': 'Denne timen er avsluttet.',\n 'manage.closed.pending': 'Denne timen er ikke bekreftet ennå.',\n 'manage.closed.pendingCall': 'Ta kontakt på {phone}, så ordner vi det.',\n 'manage.closed.pendingCallPlain': 'Ring oss, så hjelper vi deg.',\n 'manage.error.conflict': 'Timen kan ikke endres nå – {ringUs}.',\n 'manage.error.invalidInput': 'Den tiden kan ikke brukes. Velg en annen.',\n 'manage.error.notFound': 'Vi finner ikke denne timen. {callUs}, så hjelper vi deg.',\n 'manage.error.slotTaken': 'Den tiden ble akkurat tatt. Velg en annen.',\n 'manage.error.unavailable': 'Noe gikk galt. Prøv igjen, eller {ringUs}.',\n 'manage.error.windowPassed': 'Det er for kort tid igjen til å endre selv – {ringUs}.',\n 'manage.freeUntil': 'Gratis å endre fram til {dateTime}',\n 'manage.heading': 'Din time',\n 'manage.move.confirm': 'Bekreft ny tid',\n 'manage.move.pickAnother': 'Velg en annen tid',\n 'manage.move.question': 'Flytte {appointment} fra {from} til {to}?',\n 'manage.move.questionWithStylist': 'Flytte {appointment} fra {from} til {to} hos {stylist}?',\n 'manage.move.surcharge': 'Merk: {weekday}spris {price} (+{pct}\\u00A0% helgetillegg)',\n 'manage.moved': 'Timen er flyttet.',\n 'manage.moved.noLink': 'Endringen er lagret.',\n 'manage.moved.noLinkSuffix': 'hvis du vil endre den igjen.',\n 'manage.moved.view': 'Se timen',\n 'manage.movedTo': 'Timen er flyttet til {dateTime}.',\n 'manage.party.heading': 'Flytte hele besøket, eller bare {who}?',\n 'manage.party.justThisOne': 'Bare {who}',\n 'manage.party.note': 'De andre beholder timene sine. Skal hele besøket flyttes,',\n 'manage.party.noteSuffix': ', så flytter vi alle.',\n 'manage.party.unnamed': 'denne timen',\n 'manage.portal': 'Se alle timene dine',\n 'manage.remaining.day.one': '{count} dag',\n 'manage.remaining.day.other': '{count} dager',\n 'manage.remaining.daysAndHours': 'om {days} og {hours}',\n 'manage.remaining.hour.one': '{count} time',\n 'manage.remaining.hour.other': '{count} timer',\n 'manage.remaining.in': 'om {amount}',\n 'manage.remaining.minute.one': '{count} minutt',\n 'manage.remaining.minute.other': '{count} minutter',\n 'manage.remaining.underMinute': 'om under ett minutt',\n 'manage.reschedule.failed': 'Vi får ikke hentet ledige tider nå –',\n 'manage.reschedule.failedSuffix': ', så finner vi en tid.',\n 'manage.reschedule.lead': '{service} – velg ny tid',\n 'manage.reschedule.leadWithStylist': '{service} hos {stylist} – velg ny tid',\n 'manage.reschedule.loading': 'Henter ledige tider …',\n 'manage.ringUs': 'ring oss',\n 'manage.ringUsOn': 'ring oss på {phone}',\n 'manage.serviceFallback': 'Time',\n 'otp.label': 'Kode fra e-posten',\n 'portalShell.nav': 'Kontoen din',\n 'portalShell.navBar': 'Kontomeny',\n 'portalUnreachable.body':\n 'Timene dine ligger trygt – det er bare vi som ikke når timeboken. Prøv igjen straks, eller ring oss.',\n 'portalUnreachable.call': 'Ring {phone}',\n 'portalUnreachable.heading': 'Kontoen din er utilgjengelig akkurat nå',\n 'portalUnreachable.retry': 'Last inn på nytt',\n 'profileForm.email': 'E-postadresse',\n 'profileForm.emailHelp': 'Vil du bytte e-postadresse, må du kontakte oss.',\n 'profileForm.firstName': 'Fornavn',\n 'profileForm.heading': 'Dine opplysninger',\n 'profileForm.lastName': 'Etternavn',\n 'profileForm.marketing': 'Ja takk, send meg nyheter og tilbud på e-post',\n 'profileForm.phone': 'Mobil',\n 'profileForm.restored': 'Navnet kan ikke stå tomt, så vi beholdt det du hadde.',\n 'profileForm.save': 'Lagre',\n 'profileForm.saved': 'Lagret',\n 'profileForm.unreachable': 'Vi nådde ikke bookingsystemet. Prøv igjen straks.',\n 'rebook.anyStylist': 'Hvem som helst',\n 'rebook.cta': 'Bestill det samme',\n 'rebook.empty': 'Etter første besøk kan du bestille det samme igjen herfra.',\n 'rebook.heading': 'Bestill på nytt',\n 'rebook.serviceFallback': 'Time',\n 'service.ageDivider.named': 'Passer vanligvis ikke for alderen til {name}',\n 'service.ageDivider.unnamed': 'Passer vanligvis ikke for alderen',\n 'service.categoriesLegend': 'Kategorier',\n 'service.chooseFirst': 'Velg minst én tjeneste',\n 'service.chooseOther': 'Velg noe annet',\n 'service.continue': 'Neste',\n 'service.duration': '{minutes} min',\n 'service.heading': 'Hva vil du bestille?',\n 'service.multiHint': 'Velg én eller flere',\n 'service.party.adultAlone': '{label} må bestilles som en egen time.',\n 'service.party.listLabel': 'Tjenester for {label}',\n 'service.party.nothingBookable': 'Ingen tjenester kan bestilles på nett for {label}.',\n 'service.party.nothingFits': 'Ingen tjenester kan bestilles for {label} i en så stor gruppe.',\n 'service.party.remove': 'Fjern {label} fra denne timen',\n 'service.phoneOnly': 'Bestilles på telefon',\n 'service.phoneOnlyLinkLabel': 'Bestilles på telefon – ring {phone}',\n 'service.sameAsLast': 'Samme som sist',\n 'service.tabDone': 'ferdig',\n 'service.total': '{minutes} min · {price}',\n 'stylist.firstAvailable': 'Første ledige',\n 'stylist.firstAvailableBadge': '★',\n 'stylist.firstAvailableSubtitle': 'Første stol som er ledig',\n 'stylist.heading': 'Hvem vil du bestille hos?',\n 'stylist.loading': 'Henter behandlere …',\n 'stylist.nextAvailable': 'Neste ledige:',\n 'stylist.party.legend': 'Hvordan vil dere ha timene?',\n 'stylist.party.parallel.other': 'Flere behandlere samtidig',\n 'stylist.party.parallel.three': 'Tre behandlere samtidig',\n 'stylist.party.parallel.two': 'To behandlere samtidig',\n 'stylist.party.parallelMinutes': 'Ferdig på {minutes} min',\n 'stylist.party.parallelNote.other': 'Vi finner {count} behandlere som er ledige samtidig.',\n 'stylist.party.seatsHeading': 'Hvem skal ha hvem? (valgfritt)',\n 'stylist.party.seat': 'Behandler for {who}',\n 'stylist.party.parallelNote.three': 'Vi finner tre behandlere som er ledige samtidig.',\n 'stylist.party.parallelNote.two': 'Vi finner to behandlere som er ledige samtidig.',\n 'stylist.party.sequential': 'Samme behandler, etter hverandre',\n 'stylist.party.sequentialMinutes': 'Til sammen {minutes} min',\n 'stylist.pendingName': 'Valgt behandler',\n 'summary.next': 'Videre',\n 'summary.placeholder.service': 'Velg en behandling',\n 'summary.placeholder.who': 'Velg hvem timen gjelder',\n 'time.current': '{time} · Din time nå',\n 'time.dayStrip.legend': 'Velg dag',\n 'time.empty.callLink': 'ring oss på {phone}',\n 'time.empty.callLinkAria': 'Ring oss på {phone}',\n 'time.empty.callPlain': 'ring oss, så hjelper vi deg.',\n 'time.empty.callSuffix': ', så hjelper vi deg.',\n 'time.empty.closed': 'Stengt {day} – prøv en annen dag.',\n 'time.empty.full': 'Fullbooket {day} –',\n 'time.empty.over': 'Ikke flere tider {day} – prøv en annen dag.',\n 'time.empty.stylist': '{stylist} er fullbooket {day} –',\n 'time.empty.unknown': 'Ingen ledige tider {day} –',\n 'time.heading': 'Når vil du komme?',\n 'time.loading': 'Henter ledige tider …',\n 'time.month.heading': '{month} {year}',\n 'time.month.hide': 'Skjul måneden',\n 'time.month.next': 'Neste måned',\n 'time.month.note': 'Du kan bestille inntil sju dager fram. Velg en dag for å se ledige tider.',\n 'time.month.previous': 'Forrige måned',\n 'time.month.show': 'Se hele måneden',\n 'time.nearest': 'nærmeste ledige',\n 'time.nextFree': 'Første ledige time',\n 'time.parallel.accept': 'Velg {time} samtidig',\n 'time.parallel.offer.other':\n 'Ingen tider etter hverandre {day} – men alle kan komme samtidig kl. {time}.',\n 'time.parallel.offer.two':\n 'Ingen tider etter hverandre {day} – men dere kan komme samtidig kl. {time}.',\n 'time.party.parallel': '{time} ({seats})',\n 'time.party.seat': '{who} hos {stylist}',\n 'time.party.seatSeparator': ' · ',\n 'time.party.sequential': '{start} → {end}',\n 'time.shortNotice': 'Ring oss hvis du vil komme i dag',\n 'time.skeleton.dayPlaceholder': 'man. 00.',\n 'time.taken.close': 'Lukk',\n 'time.taken.message': 'Den tiden ble akkurat tatt – her er de nærmeste',\n 'time.weekend.mixed': 'Helg: inkludert helgetillegg ({price})',\n 'time.weekend.pct': 'Helg: +{pct}\\u00A0% helgetillegg ({price})',\n 'upcoming.anyStylist': 'Hvem som helst',\n 'upcoming.book': 'Bestill en time',\n 'upcoming.call': 'ring {phone}',\n 'upcoming.empty': 'Du har ingen timer framover.',\n 'upcoming.heading': 'Neste timer',\n 'upcoming.inDays': 'om {count} dager',\n 'upcoming.manage': 'Flytt eller avlys',\n 'upcoming.next': 'Neste time – {when}',\n 'upcoming.noManage': 'Kontakt oss for å gjøre endringer.',\n 'upcoming.noManageWithPhone': 'Kontakt oss for å gjøre endringer – {call}.',\n 'upcoming.serviceFallback': 'Time',\n 'upcoming.today': 'i dag',\n 'upcoming.tomorrow': 'i morgen',\n 'upcoming.when': '{day} kl. {time}',\n 'vipps.button': 'Logg inn med Vipps',\n 'vipps.throttled': 'Vent litt, og prøv igjen.',\n 'vipps.unavailable': 'Innlogging med Vipps er nede akkurat nå. Bruk e-post i stedet.',\n 'vippsLink.button': 'Koble til Vipps',\n 'vippsLink.conflict':\n 'Denne Vipps-kontoen hører allerede til en annen profil. Kontakt oss om du trenger hjelp.',\n 'vippsLink.failed': 'Vi fikk ikke til å koble til Vipps. Prøv en gang til.',\n 'vippsLink.heading': 'Vipps',\n 'vippsLink.linked': 'Kontoen er koblet til Vipps',\n 'vippsLink.pitch': 'Koble til Vipps, så logger du inn med ett trykk.',\n 'vippsLink.success': 'Vipps er nå koblet til',\n 'vippsLink.throttled': 'Vent litt, og prøv igjen.',\n 'vippsLink.unavailable': 'Vipps er utilgjengelig akkurat nå. Prøv igjen litt senere.',\n 'who.family.legend': 'Velg opptil {max}',\n 'who.family.limit': 'En bestilling kan gjelde opptil {max} personer.',\n 'who.family.self': 'Meg selv (voksen)',\n 'who.guest.addedList': 'Barn i denne bestillingen',\n 'who.guest.adult': 'Voksen',\n 'who.guest.children.one': '{count} barn',\n 'who.guest.children.other': '{count} barn',\n 'who.guest.groupLabel': 'Hvor mange gjelder timen?',\n 'who.heading': 'Hvem gjelder timen?',\n // Opt-in screens (`config.screens`): recap, «free soon», day fullness, bar hints, guest party.\n 'recap.label': 'Timen du bestiller',\n 'recap.time': 'Kl. {start}–{end}',\n 'recap.line': '{services} hos {stylist}',\n 'recap.lineFor': '{who}: {services} hos {stylist}',\n 'recap.anyStylist': 'første ledige',\n 'recap.total': '{price} totalt',\n 'recap.edit': 'Endre',\n 'recap.editLabel': 'Endre dag og tid',\n 'recap.alsoFree': 'Også ledig kl. {time}:',\n 'recap.swapTo': 'Bestill hos {name} i stedet',\n 'time.soonest.heading': 'Ledig snart',\n 'time.soonest.pick': '{day} kl. {time}',\n 'time.soonest.with': 'hos {stylist}',\n 'time.dayChip.free': '{count} ledige',\n 'time.dayChip.freeOne': '{count} ledig',\n 'time.dayChip.full': 'fullt',\n 'time.week.none': 'Ingen ledige',\n 'time.week.more': '{count} til',\n 'summary.hint.who': 'Velg hvem som kommer',\n 'summary.hint.service': 'Trykk på en tjeneste',\n 'summary.hint.when': 'Trykk på en tid',\n 'who.party.children': 'Barn',\n 'who.party.childrenNote': '',\n 'who.party.adult': 'Jeg skal også ha time',\n 'who.party.adultNote': 'Samtidig, ved siden av',\n 'who.party.fewer': 'Ett barn færre',\n 'who.party.more': 'Ett barn til',\n 'who.party.count': '{count} barn',\n};\n\nexport const SCREEN_LABELS_EN: ScreenLabels = {\n 'addChild.birthMonth': 'Month of birth (optional)',\n 'addChild.birthMonthUnknown': 'Not sure',\n 'addChild.birthYear': 'Year of birth',\n 'addChild.birthYearPlaceholder': 'Choose year',\n 'addChild.close': 'Close',\n 'addChild.description.local': 'Only for this booking.',\n 'addChild.description.saved': 'We keep the child on your profile for next time.',\n 'addChild.missing': 'Enter a name and choose a year of birth.',\n 'addChild.name': 'Name',\n 'addChild.notes': 'Note for the salon (optional)',\n 'addChild.submit': 'Add',\n 'addChild.title': 'Add a child',\n 'addChild.trigger': 'Add a child',\n 'ageConfirm.birthMonth': 'Month of birth (optional)',\n 'ageConfirm.birthMonthUnknown': 'Not sure',\n 'ageConfirm.birthYear': 'Year of birth',\n 'ageConfirm.confirm': 'Confirm',\n 'ageConfirm.dismiss': 'Later',\n 'ageConfirm.heading': 'Is {name}’s age right?',\n 'ageConfirm.lead': 'Add a birth month and we will get the age exactly right.',\n 'ageConfirm.legend': 'Age for {name}',\n 'bookingSkeleton.opening': 'Opening booking …',\n 'childCards.book': 'Book for {name}',\n 'childCards.empty': 'No children added yet.',\n 'childCards.lastVisit': '{age} · last: {service}, {date}',\n 'childCards.lastVisitNoService': '{age} · last: {date}',\n 'childCards.neverVisited': '{age} · not been in yet',\n 'childCards.next': 'Next appointment',\n 'childCards.none': '–',\n 'childCards.stylist': 'Usual stylist',\n 'confirmation.calendar': 'Add to calendar',\n 'confirmation.heading': 'You are booked in',\n 'confirmation.manage': 'Change or cancel',\n 'confirmation.manageFor': 'Change or cancel {who} at {time}',\n 'confirmation.party.heading': 'Group visit · {day}',\n 'confirmation.party.line': '{time} {name} – {service} {stylist} – {price}',\n 'confirmation.party.stylist': 'with {name}',\n 'confirmation.party.total': 'Total {total} · paid at the salon',\n 'confirmation.portal': 'See all your bookings',\n 'confirmation.serviceFor': '{service} for {name}',\n 'confirmation.startOver': 'Book another appointment',\n 'confirmation.when': '{day} at {time}',\n 'dataControls.cancel': 'Cancel',\n 'dataControls.confirmHeading': 'Really delete your account?',\n 'dataControls.confirmHelp': 'This cannot be undone.',\n 'dataControls.confirmLabel': 'Type {word} to confirm',\n 'dataControls.confirmWord': 'DELETE',\n 'dataControls.consequences':\n 'Upcoming appointments are cancelled, your history is anonymised, and you will not be able to log in again.',\n 'dataControls.delete': 'Delete my account',\n 'dataControls.deleteForever': 'Delete my account for good',\n 'dataControls.export': 'Download a copy',\n 'dataControls.heading': 'Your data',\n 'dataControls.unreachable': 'We could not reach the booking system. Please try again shortly.',\n 'dataControls.wrongWord': 'Type {word} exactly, in capital letters.',\n 'details.call.link': 'Call {phone}',\n 'details.call.none': 'Call the salon and we will help.',\n 'details.child.name': 'Name of the person coming',\n 'details.child.year': 'Year of birth',\n 'details.child.yearPlaceholder': '2018',\n 'details.email.error': 'That email address does not look right.',\n 'details.email.help': 'We send the confirmation and a calendar file here.',\n 'details.email.label': 'Email address',\n 'details.email.lockedHelp': 'The e-mail you signed in with',\n 'details.error.conflict': 'We could not set up the appointment. Please try again.',\n 'details.error.inProgress':\n 'We already have this booking. Look for the confirmation email, or give us a call.',\n 'details.error.invalidInput': 'Some fields are not filled in correctly. Please check them.',\n 'details.error.maxParty': 'You can book for up to three people at a time.',\n 'details.error.slotTaken': 'Someone else took that time. Please pick another.',\n 'details.error.unconfigured': 'Online booking is unavailable right now.',\n 'details.error.upstreamError':\n 'The booking system did not answer, so we do not know if the appointment was made. Press the button again – you will not be booked twice.',\n 'details.heading': 'Almost done',\n 'details.known.adult': 'an adult',\n 'details.known.child': 'your child',\n 'details.known.for': 'for {who}',\n 'details.known.label': 'These appointments are for',\n 'details.known.self': 'you',\n 'details.marketing.text': 'Send me reminders and offers by e-mail.',\n 'details.name.label': 'Your name',\n 'details.notes.label': 'Message for the salon',\n 'details.notes.placeholder': 'Anything we should know in advance',\n 'details.phone.error': 'That number looks incomplete. Please check the digits.',\n 'details.phone.label': 'Mobile',\n 'details.phone.prefix': '+44',\n 'details.submit': 'Book – {price} paid at the salon',\n 'details.terms.link': 'Read the terms',\n 'details.terms.text':\n 'I understand the appointment can be moved or cancelled free of charge before the salon’s deadline.',\n 'familyEditor.add': 'Add a person',\n 'familyEditor.ageConfirmed': 'Thanks, {name}’s age is confirmed.',\n 'familyEditor.ageSaved': 'Thanks, {name}’s age is saved.',\n 'familyEditor.birthMonth': 'Month of birth (optional)',\n 'familyEditor.birthMonthUnknown': 'Not sure',\n 'familyEditor.birthYear': 'Year of birth',\n 'familyEditor.birthYearPlaceholder': 'Pick a year',\n 'familyEditor.empty': 'Nobody added yet.',\n 'familyEditor.heading': 'Your family',\n 'familyEditor.lead': 'Knowing ages lets us suggest the right treatment and price for everyone.',\n 'familyEditor.legend': 'Family members',\n 'familyEditor.name': 'Name',\n 'familyEditor.newRow': 'New person',\n 'familyEditor.notes': 'Note for the stylist',\n 'familyEditor.notesPlaceholder': 'For example: does not like the clipper noise',\n 'familyEditor.partial': 'Please fill in both a name and a year of birth.',\n 'familyEditor.remove': 'Remove',\n 'familyEditor.removeNamed': 'Remove {name}',\n 'familyEditor.removeRow': 'Remove this row',\n 'familyEditor.removed': 'Removed',\n 'familyEditor.save': 'Save',\n 'familyEditor.saved': 'Saved',\n 'familyEditor.savedNoDetails':\n 'Saved. Month, stylist and note could not be stored right now – please try again later.',\n 'familyEditor.stylist': 'Preferred stylist',\n 'familyEditor.stylistFormer': 'Former stylist',\n 'familyEditor.stylistNone': 'No preference',\n 'familyEditor.unreachable': 'We could not reach the booking system. Please try again shortly.',\n 'history.count.one': '{count} visit in {year}',\n 'history.count.other': '{count} visits in {year}',\n 'history.empty': 'No visits yet. They show up here after the first appointment.',\n 'history.heading': 'Past visits',\n 'history.serviceFallback': 'Visit',\n 'history.unknownAmount': '—',\n 'login.codeHeading': 'Check your e-mail for the code',\n 'login.codeHelp': 'Six digits, sent to {email}. The code lasts ten minutes.',\n 'login.codeHelpVipps': 'Six digits. The right code links Vipps to your account.',\n 'login.codeLabel': 'Code',\n 'login.continueEmail': 'Continue with e-mail',\n 'login.cooldownReady': 'You can ask for a new code now.',\n 'login.cooldownWait': 'You can ask for a new code in {seconds} seconds.',\n 'login.emailIntro': 'Use the e-mail address you booked with and we will send you a code.',\n 'login.emailLabel': 'E-mail address',\n 'login.heading': 'Log in',\n 'login.notice.badEmail': 'That e-mail address does not look right.',\n 'login.notice.invalid': 'That code is wrong or expired. Try again, or ask for a new one.',\n 'login.notice.resent':\n 'If we know that address, a new code is on its way. Check your inbox, and your spam folder.',\n 'login.notice.sent':\n 'If we know that address, a code is on its way. Check your inbox, and your spam folder.',\n 'login.notice.throttled': 'Too many tries in a short time. Wait a little.',\n 'login.notice.unreachable': 'We cannot reach the booking system right now. Try again shortly.',\n 'login.notice.vippsConflict':\n 'This Vipps account belongs to another account with us. Log in with e-mail, or call us.',\n 'login.notice.vippsInvalid': 'That code is wrong or expired.',\n 'login.or': 'or',\n 'login.resend': 'Send a new code',\n 'login.resendIn': 'New code in {time}',\n 'login.sendCode': 'Send me a code',\n 'login.submitCode': 'Log in',\n 'login.switchEmail': 'Use a different address',\n 'login.useEmailInstead': 'Use e-mail instead',\n 'login.vippsSentTo': 'The code went to {to}.',\n 'login.vippsSentToUnknown': 'The code went to the e-mail address we have on file for you.',\n 'loginSheet.close': 'Close',\n 'loginSheet.intro': 'We fill in your name and number, and the booking shows up in your account.',\n 'loginSheet.prompt': 'Been here before? {trigger} and we fill in what we know.',\n 'loginSheet.trigger': 'Log in',\n 'loginSheet.vipps': 'Continue with Vipps',\n 'logout.button': 'Log out',\n 'logout.unreachable': 'We could not reach the booking system. Please try again shortly.',\n 'manage.appointment.named': \"{name}'s appointment\",\n 'manage.appointment.namedSibilant': \"{name}' appointment\",\n 'manage.appointment.unnamed': 'the appointment',\n 'manage.back': 'Back',\n 'manage.blocked': 'Under {hours} hours left –',\n 'manage.blocked.plain': 'call us and we will sort it out.',\n 'manage.blocked.suffix': ' and we will sort it out.',\n 'manage.bookNew': 'Book a new appointment',\n 'manage.calendar': 'Add to calendar',\n 'manage.callToCancel': 'Call to cancel (under {hours} h left)',\n 'manage.callToChange': 'Call to change (under {hours} h left)',\n 'manage.callUs': 'Call us',\n 'manage.callUsOn': 'Call us on {phone}',\n 'manage.cancel': 'Cancel',\n 'manage.cancel.confirm': 'Yes, cancel',\n 'manage.cancel.keep': 'Keep the appointment',\n 'manage.cancel.question': 'Cancel {appointment} {dateTime}? It is free until {hours} h before.',\n 'manage.cancel.reason.illness': 'Illness',\n 'manage.cancel.reason.noLongerSuits': 'No longer suits',\n 'manage.cancel.reason.other': 'Other',\n 'manage.cancel.reasonLegend': 'Reason (optional)',\n 'manage.cancelled': 'The appointment is cancelled. Would you like to find a new time now?',\n 'manage.cancelled.findNew': 'Find a new time',\n 'manage.card.named': '{name} – {service}',\n 'manage.card.when': '{dateTime} · {price}',\n 'manage.card.whenWithStylist': '{dateTime} with {stylist} · {price}',\n 'manage.change': 'Change time',\n 'manage.closed.cancelled': 'This appointment has been cancelled.',\n 'manage.closed.completed': 'This appointment has been completed.',\n 'manage.closed.noShow': 'This appointment is closed.',\n 'manage.closed.pending': 'This appointment is not confirmed yet.',\n 'manage.closed.pendingCall': 'Call us on {phone} and we will help.',\n 'manage.closed.pendingCallPlain': 'Call us and we will help.',\n 'manage.error.conflict': 'The appointment cannot be changed right now – {ringUs}.',\n 'manage.error.invalidInput': 'That time cannot be used. Please choose another.',\n 'manage.error.notFound': 'We cannot find this appointment. {callUs} and we will help.',\n 'manage.error.slotTaken': 'That time was just taken. Please choose another.',\n 'manage.error.unavailable': 'Something went wrong. Try again, or {ringUs}.',\n 'manage.error.windowPassed': 'It is too late to change this yourself – {ringUs}.',\n 'manage.freeUntil': 'Free to change until {dateTime}',\n 'manage.heading': 'Your appointment',\n 'manage.move.confirm': 'Confirm new time',\n 'manage.move.pickAnother': 'Choose another time',\n 'manage.move.question': 'Move {appointment} from {from} to {to}?',\n 'manage.move.questionWithStylist': 'Move {appointment} from {from} to {to} with {stylist}?',\n 'manage.move.surcharge': 'Note: {weekday} price {price} (+{pct}\\u00A0% weekend surcharge)',\n 'manage.moved': 'The appointment has been moved.',\n 'manage.moved.noLink': 'The change is saved.',\n 'manage.moved.noLinkSuffix': 'if you want to change it again.',\n 'manage.moved.view': 'View the appointment',\n 'manage.movedTo': 'The appointment has been moved to {dateTime}.',\n 'manage.party.heading': 'Move the whole visit, or just {who}?',\n 'manage.party.justThisOne': 'Just {who}',\n 'manage.party.note': 'Everyone else keeps their times. To move the whole visit,',\n 'manage.party.noteSuffix': ' and we will move everyone.',\n 'manage.party.unnamed': 'this appointment',\n 'manage.portal': 'See all your appointments',\n 'manage.remaining.day.one': '{count} day',\n 'manage.remaining.day.other': '{count} days',\n 'manage.remaining.daysAndHours': 'in {days} and {hours}',\n 'manage.remaining.hour.one': '{count} hour',\n 'manage.remaining.hour.other': '{count} hours',\n 'manage.remaining.in': 'in {amount}',\n 'manage.remaining.minute.one': '{count} minute',\n 'manage.remaining.minute.other': '{count} minutes',\n 'manage.remaining.underMinute': 'in under a minute',\n 'manage.reschedule.failed': 'We cannot load free times right now –',\n 'manage.reschedule.failedSuffix': ' and we will find a time.',\n 'manage.reschedule.lead': '{service} – choose a new time',\n 'manage.reschedule.leadWithStylist': '{service} with {stylist} – choose a new time',\n 'manage.reschedule.loading': 'Loading free times …',\n 'manage.ringUs': 'call us',\n 'manage.ringUsOn': 'call us on {phone}',\n 'manage.serviceFallback': 'Appointment',\n 'otp.label': 'One-time code',\n 'portalShell.nav': 'Your account',\n 'portalShell.navBar': 'Account menu',\n 'portalUnreachable.body':\n 'Your bookings are safe – we just cannot reach the booking system. Try again shortly, or call us.',\n 'portalUnreachable.call': 'Call {phone}',\n 'portalUnreachable.heading': 'Your account is unavailable right now',\n 'portalUnreachable.retry': 'Reload',\n 'profileForm.email': 'E-mail address',\n 'profileForm.emailHelp': 'To change your e-mail address, please get in touch with us.',\n 'profileForm.firstName': 'First name',\n 'profileForm.heading': 'Your details',\n 'profileForm.lastName': 'Last name',\n 'profileForm.marketing': 'Yes, e-mail me news and offers',\n 'profileForm.phone': 'Mobile',\n 'profileForm.restored': 'A name cannot be empty, so we kept the one you had.',\n 'profileForm.save': 'Save',\n 'profileForm.saved': 'Saved',\n 'profileForm.unreachable': 'We could not reach the booking system. Please try again shortly.',\n 'rebook.anyStylist': 'Anyone available',\n 'rebook.cta': 'Book the same',\n 'rebook.empty': 'After your first visit you can book the same again from here.',\n 'rebook.heading': 'Book again',\n 'rebook.serviceFallback': 'Appointment',\n 'service.ageDivider.named': 'Usually not suited to {nameGenitive} age',\n 'service.ageDivider.unnamed': 'Usually not suited to this age',\n 'service.categoriesLegend': 'Categories',\n 'service.chooseFirst': 'Choose at least one service',\n 'service.chooseOther': 'Choose something else',\n 'service.continue': 'Next',\n 'service.duration': '{minutes} min',\n 'service.heading': 'What would you like to book?',\n 'service.multiHint': 'Choose one or more',\n 'service.party.adultAlone': '{label} needs a separate appointment.',\n 'service.party.listLabel': 'Services for {label}',\n 'service.party.nothingBookable': 'Nothing can be booked online for {label}.',\n 'service.party.nothingFits': 'Nothing can be booked for {label} in a group this size.',\n 'service.party.remove': 'Remove {label} from this appointment',\n 'service.phoneOnly': 'Book by phone',\n 'service.phoneOnlyLinkLabel': 'Book by phone – call {phone}',\n 'service.sameAsLast': 'Same as last time',\n 'service.tabDone': 'done',\n 'service.total': '{minutes} min · {price}',\n 'stylist.firstAvailable': 'First available',\n 'stylist.firstAvailableBadge': '★',\n 'stylist.firstAvailableSubtitle': 'We find the first free time',\n 'stylist.heading': 'Who would you like to see?',\n 'stylist.loading': 'Loading stylists …',\n 'stylist.nextAvailable': 'Next free:',\n 'stylist.party.legend': 'How would you like the appointments?',\n 'stylist.party.parallel.other': 'Several stylists at once',\n 'stylist.party.parallel.three': 'Three stylists at once',\n 'stylist.party.parallel.two': 'Two stylists at once',\n 'stylist.party.parallelMinutes': 'Done in {minutes} min',\n 'stylist.party.parallelNote.other': 'We find {count} stylists who are free at the same time.',\n 'stylist.party.seatsHeading': 'Who cuts whom? (optional)',\n 'stylist.party.seat': 'Stylist for {who}',\n 'stylist.party.parallelNote.three': 'We find three stylists who are free at the same time.',\n 'stylist.party.parallelNote.two': 'We find two stylists who are free at the same time.',\n 'stylist.party.sequential': 'Same stylist, one after the other',\n 'stylist.party.sequentialMinutes': '{minutes} min in total',\n 'stylist.pendingName': 'Chosen stylist',\n 'summary.next': 'Continue',\n 'summary.placeholder.service': 'Choose a service',\n 'summary.placeholder.who': 'Choose who the booking is for',\n 'time.current': '{time} · Your current time',\n 'time.dayStrip.legend': 'Choose a day',\n 'time.empty.callLink': 'call us on {phone}',\n 'time.empty.callLinkAria': 'Call us on {phone}',\n 'time.empty.callPlain': 'call us and we will help.',\n 'time.empty.callSuffix': ' and we will help.',\n 'time.empty.closed': 'Closed {day} – try another day.',\n 'time.empty.full': 'Fully booked {day} –',\n 'time.empty.over': 'No more times {day} – try another day.',\n 'time.empty.stylist': '{stylist} is fully booked {day} –',\n 'time.empty.unknown': 'No free times {day} –',\n 'time.heading': 'When would you like to come?',\n 'time.loading': 'Loading free times …',\n 'time.month.heading': '{month} {year}',\n 'time.month.hide': 'Hide the month',\n 'time.month.next': 'Next month',\n 'time.month.note': 'You can book up to seven days ahead. Choose a day to see free times.',\n 'time.month.previous': 'Previous month',\n 'time.month.show': 'See the whole month',\n 'time.nearest': 'nearest available',\n 'time.nextFree': 'First available time',\n 'time.parallel.accept': 'Take {time} together',\n 'time.parallel.offer.other':\n 'No back-to-back times {day} – but you can all come at the same time at {time}.',\n 'time.parallel.offer.two':\n 'No back-to-back times {day} – but you can both come at the same time at {time}.',\n 'time.party.parallel': '{time} ({seats})',\n 'time.party.seat': '{who} with {stylist}',\n 'time.party.seatSeparator': ' · ',\n 'time.party.sequential': '{start} → {end}',\n 'time.shortNotice': 'Call us if you want to come today',\n 'time.skeleton.dayPlaceholder': 'Mon 00',\n 'time.taken.close': 'Close',\n 'time.taken.message': 'That time was just taken – here are the nearest ones',\n 'time.weekend.mixed': 'Weekend: surcharge included ({price})',\n 'time.weekend.pct': 'Weekend: +{pct}\\u00A0% surcharge ({price})',\n 'upcoming.anyStylist': 'Anyone available',\n 'upcoming.book': 'Book an appointment',\n 'upcoming.call': 'call {phone}',\n 'upcoming.empty': 'You have no appointments coming up.',\n 'upcoming.heading': 'Coming up',\n 'upcoming.inDays': 'in {count} days',\n 'upcoming.manage': 'Move or cancel',\n 'upcoming.next': 'Next appointment – {when}',\n 'upcoming.noManage': 'Contact us to make changes.',\n 'upcoming.noManageWithPhone': 'Contact us to make changes – {call}.',\n 'upcoming.serviceFallback': 'Appointment',\n 'upcoming.today': 'today',\n 'upcoming.tomorrow': 'tomorrow',\n 'upcoming.when': '{day} at {time}',\n 'vipps.button': 'Log in with Vipps',\n 'vipps.throttled': 'Wait a moment and try again.',\n 'vipps.unavailable': 'Vipps login is down right now. Use e-mail instead.',\n 'vippsLink.button': 'Link Vipps',\n 'vippsLink.conflict':\n 'This Vipps account already belongs to another profile. Get in touch if you need help.',\n 'vippsLink.failed': 'We could not link Vipps. Please try once more.',\n 'vippsLink.heading': 'Vipps',\n 'vippsLink.linked': 'Your account is linked to Vipps',\n 'vippsLink.pitch': 'Link Vipps and log in with a single tap next time.',\n 'vippsLink.success': 'Vipps is now linked',\n 'vippsLink.throttled': 'Please wait a moment and try again.',\n 'vippsLink.unavailable': 'Vipps is unavailable right now. Please try again a little later.',\n 'who.family.legend': 'Choose up to {max}',\n 'who.family.limit': 'One booking can include up to {max} people.',\n 'who.family.self': 'Myself (adult)',\n 'who.guest.addedList': 'Children in this booking',\n 'who.guest.adult': 'Adult',\n 'who.guest.children.one': '{count} child',\n 'who.guest.children.other': '{count} children',\n 'who.guest.groupLabel': 'How many people?',\n 'who.heading': 'Who is the appointment for?',\n // Opt-in screens (`config.screens`): recap, «free soon», day fullness, bar hints, guest party.\n 'recap.label': 'The appointment you are booking',\n 'recap.time': '{start}–{end}',\n 'recap.line': '{services} with {stylist}',\n 'recap.lineFor': '{who}: {services} with {stylist}',\n 'recap.anyStylist': 'the first available',\n 'recap.total': '{price} in total',\n 'recap.edit': 'Change',\n 'recap.editLabel': 'Change day and time',\n 'recap.alsoFree': 'Also free at {time}:',\n 'recap.swapTo': 'Book with {name} instead',\n 'time.soonest.heading': 'Free soon',\n 'time.soonest.pick': '{day} at {time}',\n 'time.soonest.with': 'with {stylist}',\n 'time.dayChip.free': '{count} free',\n 'time.dayChip.freeOne': '{count} free',\n 'time.dayChip.full': 'full',\n 'time.week.none': 'Nothing free',\n 'time.week.more': '{count} more',\n 'summary.hint.who': 'Choose who is coming',\n 'summary.hint.service': 'Tap a service',\n 'summary.hint.when': 'Tap a time',\n 'who.party.children': 'Children',\n 'who.party.childrenNote': '',\n 'who.party.adult': 'I need an appointment too',\n 'who.party.adultNote': 'At the same time, side by side',\n 'who.party.fewer': 'One child fewer',\n 'who.party.more': 'One more child',\n 'who.party.count': '{count} children',\n};\n"],"mappings":"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"}
|
|
@@ -67,6 +67,15 @@ export interface BookingConfirmation {
|
|
|
67
67
|
}>;
|
|
68
68
|
submitted: SubmittedVisit;
|
|
69
69
|
}
|
|
70
|
+
/** The three reads the time step waits on. */
|
|
71
|
+
export type BookingReadEndpoint = 'availability' | 'resources' | 'schedule';
|
|
72
|
+
/** A read the wizard could not use: its endpoint, and the HTTP status (`null`: no answer at all). */
|
|
73
|
+
export interface BookingReadError {
|
|
74
|
+
endpoint: BookingReadEndpoint;
|
|
75
|
+
status: number | null;
|
|
76
|
+
/** Bumped per failure, so two identical failures are two events. */
|
|
77
|
+
seq: number;
|
|
78
|
+
}
|
|
70
79
|
/**
|
|
71
80
|
* Whether a create answer is a whole one: exactly one booking, with its own
|
|
72
81
|
* distinct id, per submitted line. Anything else — none, fewer, more, an id
|
|
@@ -183,8 +192,9 @@ export declare function useBooking(options: UseBookingOptions): {
|
|
|
183
192
|
submissionNonce: string | undefined;
|
|
184
193
|
confirmed: BookingConfirmation | null;
|
|
185
194
|
startOver: () => void;
|
|
186
|
-
/** Ask for the openings again after a failure. */
|
|
187
195
|
refresh: () => void;
|
|
196
|
+
/** The recent reads that failed, oldest first (`onEvent`'s `read_error`). */
|
|
197
|
+
readErrors: readonly BookingReadError[];
|
|
188
198
|
restore: {
|
|
189
199
|
hydrated: boolean;
|
|
190
200
|
restoring: boolean;
|