@mrfylke/contact-form 0.1.31 → 0.1.32

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.
Files changed (76) hide show
  1. package/README.md +19 -3
  2. package/lib/components/icon/generated-icons.d.ts +6 -6
  3. package/lib/components/icon/generated-icons.js +8 -8
  4. package/lib/index.d.ts +1 -1
  5. package/lib/index.d.ts.map +1 -1
  6. package/lib/index.js +3 -2
  7. package/lib/lines/use-lines.d.ts +2 -2
  8. package/lib/lines/use-lines.d.ts.map +1 -1
  9. package/lib/lines/use-lines.js +14 -21
  10. package/lib/means-of-transport/means-of-transport-form-machine.d.ts +2 -2
  11. package/lib/modules/config/context.d.ts.map +1 -1
  12. package/lib/modules/config/types.d.ts +26 -17
  13. package/lib/modules/config/types.d.ts.map +1 -1
  14. package/lib/refund/forms/refund-and-travel-guarantee/index.d.ts.map +1 -1
  15. package/lib/refund/forms/refund-and-travel-guarantee/index.js +2 -2
  16. package/lib/refund/forms/refund-and-travel-guarantee/refundCarForm.d.ts.map +1 -1
  17. package/lib/refund/forms/refund-and-travel-guarantee/refundCarForm.js +5 -2
  18. package/lib/refund/forms/refund-and-travel-guarantee/refundTaxiForm.d.ts.map +1 -1
  19. package/lib/refund/forms/refund-and-travel-guarantee/refundTaxiForm.js +7 -4
  20. package/lib/refund/forms/refund-ticket/appTicketRefund.d.ts.map +1 -1
  21. package/lib/refund/forms/refund-ticket/appTicketRefund.js +7 -2
  22. package/lib/refund/forms/refund-ticket/index.d.ts.map +1 -1
  23. package/lib/refund/forms/refund-ticket/index.js +2 -5
  24. package/lib/refund/forms/refund-ticket/otherTicketRefund.js +2 -2
  25. package/lib/refund/forms/residualValueOnTravelCard/index.d.ts.map +1 -1
  26. package/lib/refund/forms/residualValueOnTravelCard/index.js +2 -7
  27. package/lib/refund/index.d.ts.map +1 -1
  28. package/lib/refund/index.js +6 -2
  29. package/lib/refund/refundFormMachine.d.ts +6 -2
  30. package/lib/refund/refundFormMachine.d.ts.map +1 -1
  31. package/lib/refund/refundFormMachine.js +14 -7
  32. package/lib/ticketing/forms/travel-card/orderTravelCard.d.ts.map +1 -1
  33. package/lib/ticketing/forms/travel-card/orderTravelCard.js +2 -11
  34. package/lib/ticketing/ticketingStateMachine.d.ts +4 -4
  35. package/lib/translations/commons.d.ts +8 -2
  36. package/lib/translations/commons.d.ts.map +1 -1
  37. package/lib/translations/commons.js +4 -0
  38. package/lib/translations/index.d.ts +3 -2
  39. package/lib/translations/index.d.ts.map +1 -1
  40. package/lib/translations/index.js +5 -1
  41. package/lib/translations/language-context.d.ts +4 -10
  42. package/lib/translations/language-context.d.ts.map +1 -1
  43. package/lib/translations/language-context.js +12 -5
  44. package/lib/translations/lobot.d.ts +9 -0
  45. package/lib/translations/lobot.d.ts.map +1 -0
  46. package/lib/translations/lobot.js +6 -0
  47. package/lib/translations/merge-overrides.d.ts +2 -0
  48. package/lib/translations/merge-overrides.d.ts.map +1 -1
  49. package/lib/translations/merge-overrides.js +2 -0
  50. package/lib/translations/pages/contact.d.ts +4 -13
  51. package/lib/translations/pages/contact.d.ts.map +1 -1
  52. package/lib/translations/pages/contact.js +38 -35
  53. package/lib/translations/terms/default-terms.d.ts +23 -0
  54. package/lib/translations/terms/default-terms.d.ts.map +1 -0
  55. package/lib/translations/terms/default-terms.js +25 -0
  56. package/lib/translations/terms/index.d.ts +4 -0
  57. package/lib/translations/terms/index.d.ts.map +1 -0
  58. package/lib/translations/terms/index.js +9 -0
  59. package/lib/translations/terms/placeholders.d.ts +16 -0
  60. package/lib/translations/terms/placeholders.d.ts.map +1 -0
  61. package/lib/translations/terms/placeholders.js +16 -0
  62. package/lib/translations/terms/types.d.ts +17 -0
  63. package/lib/translations/terms/types.d.ts.map +1 -0
  64. package/lib/translations/terms/types.js +2 -0
  65. package/lib/translations/translations-context.d.ts +6 -0
  66. package/lib/translations/translations-context.d.ts.map +1 -1
  67. package/lib/translations/translations-context.js +25 -0
  68. package/lib/translations/types.d.ts +2 -0
  69. package/lib/translations/types.d.ts.map +1 -1
  70. package/lib/types.d.ts +2 -2
  71. package/lib/types.d.ts.map +1 -1
  72. package/lib/utils/rich-text.d.ts +9 -0
  73. package/lib/utils/rich-text.d.ts.map +1 -0
  74. package/lib/utils/rich-text.js +33 -0
  75. package/lib/utils/rich-text.module.css +5 -0
  76. package/package.json +2 -1
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Contact = void 0;
4
4
  const commons_1 = require("../../translations/commons");
5
+ const terms_1 = require("../terms");
5
6
  const types_1 = require("../../types");
6
7
  exports.Contact = {
7
8
  pageTitle: (0, commons_1.translation)('Kontakt', 'Contact', 'Kontakt'),
@@ -18,7 +19,7 @@ exports.Contact = {
18
19
  info: (0, commons_1.translation)('Hvis du har fått gebyr på feil grunnlag, kan du sende oss en skriftlig klage.', 'If you have received a fee on incorrect grounds, you can submit a written complaint to us.', 'Dersom du har fått gebyr på feil grunnlag, kan du sende oss ei skriftleg klage.'),
19
20
  ticketStorage: {
20
21
  question: (0, commons_1.translation)('Hvor pleier du å ha billetten din?', 'Where do you usually keep your ticket?', 'Kor pleier du å ha billetten din?'),
21
- app: { title: (0, commons_1.translation)('Mobilapp', 'Mobile app', 'Mobilapp') },
22
+ app: { title: (0, commons_1.translation)(terms_1.T.ticketApp.Base, terms_1.T.ticketApp.Base, terms_1.T.ticketApp.Base) },
22
23
  },
23
24
  firstAgreement: {
24
25
  title: (0, commons_1.translation)('Har du fått gebyr etter billettkontroll?', 'Have you received a fine after a ticket inspection?', 'Har du fått gebyr etter billettkontroll?'),
@@ -40,7 +41,7 @@ exports.Contact = {
40
41
  (0, commons_1.translation)('Kunden kjøper billett til seg selv eller andre for seint, for eksempel etter ombordstiging.', 'The customer buys a ticket for themselves or others too late, for example, after boarding.', 'Kunden kjøper billett til seg sjølv eller andre for seint, for eksempel etter ombordstiging.'),
41
42
  (0, commons_1.translation)('Kunden har glemt å fornye periodebillett.', 'The customer has forgotten to renew the ticket.', 'Kunden har gløymt å fornye periodebillett.'),
42
43
  (0, commons_1.translation)('Kunden reiser med gyldig billett på mobilen, men mobiltelefonen har gått tom for strøm.', 'The customer travels with a valid ticket on their mobile phone, but the phone has run out of battery.', 'Kunden reiser med gyldig billett på mobilen, men mobiltelefonen har gått tom for straum.'),
43
- (0, commons_1.translation)('Reisekortet ligger igjen hjemme.', 'The travel card is left at home.', 'Reisekortet ligg igjen heime.'),
44
+ (0, commons_1.translation)(`${terms_1.T.travelCard.Definite} ligger igjen hjemme.`, `${terms_1.T.travelCard.Definite} is left at home.`, `${terms_1.T.travelCard.Definite} ligg igjen heime.`),
44
45
  ],
45
46
  checkbox: (0, commons_1.translation)('Jeg forstår reglene og ønsker å klage på gebyret.', 'I understand the rules and want to complain about the fine.', 'Eg forstår reglane og ønsker å klage på gebyret.'),
46
47
  },
@@ -75,24 +76,26 @@ exports.Contact = {
75
76
  description: (0, commons_1.translation)('Billett kjøpt på buss', 'Ticket bought on bus', 'Billett kjøpt på buss'),
76
77
  },
77
78
  residualValueOnTravelCard: {
78
- description: (0, commons_1.translation)('Restverdi på reisekort (reisepenger)', 'Residual value on travel card (travel allowance)', 'Restverdi på reisekort (reisepengar)'),
79
+ description: (0, commons_1.translation)(`Restverdi på ${terms_1.T.travelCard.base} (reisepenger)`, `Residual value on ${terms_1.T.travelCard.base} (travel allowance)`, `Restverdi på ${terms_1.T.travelCard.base} (reisepengar)`),
79
80
  webshopRefundLabel: (0, commons_1.translation)('Billett kjøpt i nettbutikk', 'Ticket purchased in webshop', 'Billett kjøpt i nettbutikk'),
80
- title: (0, commons_1.translation)('Søk refusjon av restverdien på et reisekort', 'Apply for a refund of the residual value on a travel card', 'Søk refusjon av restverdien på eit reisekort'),
81
- link: {
82
- text: (0, commons_1.translation)('Skjema for refusjon av restverdien på et reisekort', 'Form for refund of residual value on a travel card', 'Skjema for refusjon av restverdien på eit reisekort'),
83
- href: (0, commons_1.translation)('https://forms.office.com/Pages/ResponsePage.aspx?id=5-wyud-clE20wRUlbkPH6qGF2mFbrapOg9lnALAiJk9UMkROS0dORUdaTTZURzJHNFNSSVhVTzE4Ti4u', 'https://forms.office.com/Pages/ResponsePage.aspx?id=5-wyud-clE20wRUlbkPH6qGF2mFbrapOg9lnALAiJk9UMkROS0dORUdaTTZURzJHNFNSSVhVTzE4Ti4u', 'https://forms.office.com/Pages/ResponsePage.aspx?id=5-wyud-clE20wRUlbkPH6qGF2mFbrapOg9lnALAiJk9UMkROS0dORUdaTTZURzJHNFNSSVhVTzE4Ti4u'),
84
- },
85
- monthlyPayoutDetails: (0, commons_1.translation)('Restverdien blir betalt ut i slutten av hver måned (med forbehold). Hvis du har flere reisekort du vil ha refundert, må du sende inn ett skjema per reisekort.', 'The residual value is paid out at the end of each month (with reservations). If you have multiple travel cards that you want refunded, you must submit one form per travel card.', 'Restverdien blir betalt ut i slutten av kvar månad (med atterhald). Viss du har fleire reisekort du vil ha refundert, må du sende inn eitt skjema per reisekort.'),
81
+ title: (0, commons_1.translation)(`Søk refusjon av restverdien på ${terms_1.T.travelCard.indefinite}`, `Apply for a refund of the residual value on ${terms_1.T.travelCard.indefinite}`, `Søk refusjon av restverdien på ${terms_1.T.travelCard.indefinite}`),
82
+ text: (0, commons_1.richTranslation)(`[Skjema for refusjon av restverdien på ${terms_1.T.travelCard.indefinite}](https://forms.office.com/Pages/ResponsePage.aspx?id=5-wyud-clE20wRUlbkPH6qGF2mFbrapOg9lnALAiJk9UMkROS0dORUdaTTZURzJHNFNSSVhVTzE4Ti4u)
83
+
84
+ Restverdien blir betalt ut i slutten av hver måned (med forbehold). Hvis du har flere ${terms_1.T.travelCard.plural} du vil ha refundert, må du sende inn ett skjema per ${terms_1.T.travelCard.base}.`, `[Form for refund of residual value on ${terms_1.T.travelCard.indefinite}](https://forms.office.com/Pages/ResponsePage.aspx?id=5-wyud-clE20wRUlbkPH6qGF2mFbrapOg9lnALAiJk9UMkROS0dORUdaTTZURzJHNFNSSVhVTzE4Ti4u)
85
+
86
+ The residual value is paid out at the end of each month (with reservations). If you have multiple ${terms_1.T.travelCard.plural} that you want refunded, you must submit one form per ${terms_1.T.travelCard.base}.`, `[Skjema for refusjon av restverdien på ${terms_1.T.travelCard.indefinite}](https://forms.office.com/Pages/ResponsePage.aspx?id=5-wyud-clE20wRUlbkPH6qGF2mFbrapOg9lnALAiJk9UMkROS0dORUdaTTZURzJHNFNSSVhVTzE4Ti4u)
87
+
88
+ Restverdien blir betalt ut i slutten av kvar månad (med atterhald). Viss du har fleire ${terms_1.T.travelCard.plural} du vil ha refundert, må du sende inn eitt skjema per ${terms_1.T.travelCard.base}.`),
86
89
  paymentWhen: (0, commons_1.translation)('Du får tilbakebetalt det beløpet som gjenstår i kortet, minus et administrasjonsgebyr på 100,- kr. Beløpet må være satt inn i løpet av de tre siste årene.', 'You will be reimbursed the amount remaining on the card, minus an administration fee of NOK 100,-. The amount must have been deposited within the last three years.', 'Du får tilbakebetalt det beløpet som gjenstår i kortet, minus eit administrasjonsgebyr på 100,- kr. Beløpet må være satt inn i løpet av dei siste tre åra.'),
87
90
  automatedProcessNotice: {
88
91
  note: (0, commons_1.translation)('Merk!', 'Note!', 'Merk!'),
89
- text: (0, commons_1.translation)('Dette skjemaet gjelder bare for refusjon av restverdi på reisekort. Det er en automatisert prosess som bare fungerer for denne typen refusjon.', 'This form only applies to refunds of residual value on travel cards. It is an automated process that only works for this type of refund.', 'Dette skjemaet gjeld berre for refusjon av restverdi på reisekort. Det er ein automatisert prosess som berre fungerar for denne typen refusjon.'),
92
+ text: (0, commons_1.translation)(`Dette skjemaet gjelder bare for refusjon av restverdi på ${terms_1.T.travelCard.plural}. Det er en automatisert prosess som bare fungerer for denne typen refusjon.`, `This form only applies to refunds of residual value on ${terms_1.T.travelCard.plural}. It is an automated process that only works for this type of refund.`, `Dette skjemaet gjeld berre for refusjon av restverdi på ${terms_1.T.travelCard.plural}. Det er ein automatisert prosess som berre fungerar for denne typen refusjon.`),
90
93
  },
91
94
  },
92
95
  agreement: {
93
96
  title: (0, commons_1.translation)('Refusjon og reisegaranti', 'Refund and travel guarantee', 'Refusjon og reisegaranti'),
94
97
  delayedRefundText: (0, commons_1.translation)('Ble du forsinket fordi vi ikke var i rute? Du kan ha krav på å få refundert utgifter til alternativ transport som for eksempel drosje, bil og annen kollektivtransport.', 'Were you delayed because we were not on schedule? You may be entitled to reimbursement for expenses related to alternative transportation such as taxi, car, and other public transportation.', 'Vart du forseinka fordi vi ikkje var i rute? Du kan du ha krav på å få refundert utlegg til alternativ transport som for eksempel drosje, bil og annan kollektivtransport.'),
95
- ticketRefundText: (0, commons_1.translation)('Ønsker du refusjon av feilkjøpt eller ikke brukt billett, skal du ikke søke reisegaranti, men refusjon. Dette finner du under Billetter og app.', 'If you want a refund for a mistakenly purchased or unused ticket, you should not apply for travel guarantee, but rather for a refund. You can find this under Tickets and app.', 'Ønsker du refusjon av feilkjøpt eller ikkje brukt billett, skal du ikkje søke reisegaranti, men refusjon. Dette finn du under Billettar og app.'),
98
+ ticketRefundText: (0, commons_1.richTranslation)('Ønsker du refusjon av feilkjøpt eller ikke brukt billett, skal du ikke søke reisegaranti, men refusjon. Dette finner du under [Refusjon av billett](?type=refundOfTicket).', 'If you want a refund for a mistakenly purchased or unused ticket, you should not apply for travel guarantee, but rather for a refund. You can find this under [Refund of ticket](?type=refundOfTicket).', 'Ønsker du refusjon av feilkjøpt eller ikkje brukt billett, skal du ikkje søke reisegaranti, men refusjon. Dette finn du under [Refusjon av billett](?type=refundOfTicket).'),
96
99
  travelGuaranteeExceptions: {
97
100
  label: (0, commons_1.translation)('I hvilke tilfeller gjelder ikke reisegarantien?', 'In which cases does the travel guarentee not apply?', 'I kva tilfelle gjeld ikkje reisegarantien?'),
98
101
  exceptions: [
@@ -210,7 +213,7 @@ exports.Contact = {
210
213
  },
211
214
  },
212
215
  ticketing: {
213
- title: (0, commons_1.translation)('Billetter og app', 'Tickets and app', 'Billettar og app'),
216
+ title: (0, commons_1.translation)(`Billetter og ${terms_1.T.orgApp.base}`, `Tickets and ${terms_1.T.orgApp.base}`, `Billettar og ${terms_1.T.orgApp.base}`),
214
217
  additionalTicketingInfo: {
215
218
  detail: (0, commons_1.translation)('For informasjon om betaling på ferge, se', 'For information on payment on the ferry, see', 'For informasjon om betaling på ferje, sjå'),
216
219
  linkText: (0, commons_1.translation)('betaling for ferge', 'payment on the ferry', 'betaling for ferje'),
@@ -220,7 +223,7 @@ exports.Contact = {
220
223
  description: (0, commons_1.translation)('Priser og billettyper', 'Prices and ticket types', 'Prisar og billettypar'),
221
224
  },
222
225
  app: {
223
- description: (0, commons_1.translation)('App', 'App', 'App'),
226
+ description: (0, commons_1.translation)(terms_1.T.orgApp.Base, terms_1.T.orgApp.Base, terms_1.T.orgApp.Base),
224
227
  appTicketing: {
225
228
  title: (0, commons_1.translation)('Hvilken billett gjelder det?', 'Which ticket is it about?', 'Kva billett gjeld det?'),
226
229
  label: (0, commons_1.translation)('Kjøp billett', 'Purchase ticket', 'Kjøp billett'),
@@ -243,22 +246,18 @@ exports.Contact = {
243
246
  },
244
247
  },
245
248
  travelCard: {
246
- description: (0, commons_1.translation)('Reisekort', 'Travel card', 'Reisekort'),
249
+ description: (0, commons_1.translation)(terms_1.T.travelCard.Base, terms_1.T.travelCard.Base, terms_1.T.travelCard.Base),
247
250
  question: (0, commons_1.translation)('Hva gjelder forespørselen?', 'What is the request about?', 'Kva gjeld førespurnaden'),
248
251
  orderTravelCard: {
249
- label: (0, commons_1.translation)('Bestill reisekort', 'Order travel card', 'Bestill reisekort'),
252
+ label: (0, commons_1.translation)(`Bestill ${terms_1.T.travelCard.base}`, `Order ${terms_1.T.travelCard.base}`, `Bestill ${terms_1.T.travelCard.base}`),
250
253
  detailsList: [
251
- (0, commons_1.translation)('Et reisekort er et fysisk plastkort. På reisekortet kan du legge periodebilletter.', 'A travel card is a physical plastic card. You can add period tickets to the travel card', 'Eit reisekort er eit fysisk plastkort. På reisekortet kan du legge periodebillettar.'),
252
- (0, commons_1.translation)('Reisekort får du tak i hos sjåføren om bord i bussen, eller matrosen om bord i hurtigbåten.', 'Travel cards can be provided by the bus driver, or the sailor on board the express boat.', 'Reisekort får du tak i hos sjåføren om bord i bussen, eller matrosen om bord i hurtigbåten.'),
254
+ (0, commons_1.translation)(`${terms_1.T.travelCard.Indefinite} er et fysisk plastkort. På ${terms_1.T.travelCard.definite} kan du legge periodebilletter.`, `${terms_1.T.travelCard.Indefinite} is a physical plastic card. You can add period tickets to ${terms_1.T.travelCard.definite}`, `${terms_1.T.travelCard.Indefinite} er eit fysisk plastkort. På ${terms_1.T.travelCard.definite} kan du legge periodebillettar.`),
255
+ (0, commons_1.translation)(`${terms_1.T.travelCard.Base} får du tak i hos sjåføren om bord i bussen, eller matrosen om bord i hurtigbåten.`, `${terms_1.T.travelCard.Base} is available from the bus driver, or the sailor on board the express boat.`, `${terms_1.T.travelCard.Base} får du tak i hos sjåføren om bord i bussen, eller matrosen om bord i hurtigbåten.`),
256
+ (0, commons_1.translation)('Du trenger ikke kjøpe produktet hos sjåfør. Du kan ta med deg et kort og fylle på det produktet du vil i nettbutikken', 'You don’t need to purchase the product from the driver. You can take a card with you and top up the desired product later in the webshop', 'Du treng ikkje kjøpe produktet hos sjåfør. Du kan ta med deg eit kort og fylle på det produktet du vil i nettbutikken'),
253
257
  ],
254
- detailWithUrl: {
255
- detail: (0, commons_1.translation)('Du trenger ikke kjøpe produktet hos sjåfør. Du kan ta med deg et kort og fylle på det produktet du vil i', 'You don’t need to purchase the product from the driver. You can take a card with you and top up the desired product later in the', 'Du treng ikkje kjøpe produktet hos sjåfør. Du kan ta med deg eit kort og fylle på det produktet du vil i'),
256
- linkText: (0, commons_1.translation)('nettbutikken', 'webshop', 'nettbutikken'),
257
- href: (0, commons_1.translation)('', '', ''),
258
- },
259
258
  },
260
259
  travelCardQuestion: {
261
- label: (0, commons_1.translation)('Andre spørsmål om reisekort', 'Other questions regarding travel card', 'Andre spørsmål om reisekort'),
260
+ label: (0, commons_1.translation)(`Andre spørsmål om ${terms_1.T.travelCard.base}`, `Other questions regarding ${terms_1.T.travelCard.base}`, `Andre spørsmål om ${terms_1.T.travelCard.base}`),
262
261
  },
263
262
  },
264
263
  refund: {
@@ -277,13 +276,12 @@ exports.Contact = {
277
276
  (0, commons_1.translation)('Periodebillett 7 dager: Du får refusjon for antall resterende døgn.', 'Period ticket 7 days: You will receive a refund for the number of days remaining.', 'Periodebillett 7 dagar: Du får refusjon for antall resterande døgn.'),
278
277
  (0, commons_1.translation)('Periodebillett 30 dager: Du får refusjon for antall resterende døgn.', 'Period ticket 30 days: You will receive a refund for the number of remaining days.', 'Periodebillett 30 dagar: Du får refusjon for antall resterande døgn.'),
279
278
  (0, commons_1.translation)('Periodebillettene for hele fylket: Du får refusjon for antall resterende døgn.', 'The period tickets for the entire county: You will receive a refund for numbers remaining on the day.', 'Periodebillettane for heile fylket: Du får refusjon for antall resterande døgn. '),
280
- (0, commons_1.translation)('Reisekort: Du får tilbakebetalt verdien som gjenstår på reisekortet. ', 'Travel card: You will be reimbursed the value remaining on the travel card.', 'Reisekort: Du får tilbakebetalt verdien som gjenstår på reisekortet. '),
279
+ (0, commons_1.translation)(`${terms_1.T.travelCard.Base}: Du får tilbakebetalt verdien som gjenstår på ${terms_1.T.travelCard.definite}. `, `${terms_1.T.travelCard.Base}: You will be reimbursed the value remaining on ${terms_1.T.travelCard.definite}.`, `${terms_1.T.travelCard.Base}: Du får tilbakebetalt verdien som gjenstår på ${terms_1.T.travelCard.definite}. `),
281
280
  (0, commons_1.translation)('Enkeltbilletter etter feilkjøp og når ny, riktig billett er kjøpt. ', 'Single tickets after incorrect purchase and when a new, correct ticket has been purchased.', 'Enkeltbillettar etter feilkjøp og når ny, riktig billett er kjøpt. '),
282
281
  (0, commons_1.translation)('Klippekort: Du får refusjon for antall gjenværende klipp.', 'Carnet: You will receive a refund for the number of remaining clips.', 'Klippekort: Du får refusjon for tal resterande klipp.'),
283
282
  ],
284
283
  info: {
285
- text: (0, commons_1.translation)('Gjelder kravet reisegaranti, dvs refusjon for utgifter til andre transportmiddel fordi buss eller hurtigbåt ikke var i rute? Da skal du søke om', 'Does the claim apply to a travel guarantee, i.e. refund for expenses for other means of transport because the bus or express boat was not on schedule? Then you should not apply for', 'Gjeld kravet reisegaranti, dvs refusjon for utgifter til andre transportmiddel fordi buss eller hurtigbåt ikkje var i rute? Då skal du søke om'),
286
- link: (0, commons_1.translation)('reisegaranti.', 'travel guarantee.', 'reisegaranti.'),
284
+ text: (0, commons_1.richTranslation)('Gjelder kravet reisegaranti, dvs refusjon for utgifter til andre transportmiddel fordi buss eller hurtigbåt ikke var i rute? Da skal du søke om [reisegaranti](?type=refundAndTravelGuarantee&agreed=true).', 'Does the claim apply to a travel guarantee, i.e. refund for expenses for other means of transport because the bus or express boat was not on schedule? Then you should not apply for [travel guarantee](?type=refundAndTravelGuarantee&agreed=true).', 'Gjeld kravet reisegaranti, dvs refusjon for utgifter til andre transportmiddel fordi buss eller hurtigbåt ikkje var i rute? Då skal du søke om [reisegaranti](?type=refundAndTravelGuarantee&agreed=true).'),
287
285
  note: (0, commons_1.translation)('', '', ''),
288
286
  },
289
287
  checkbox: (0, commons_1.translation)('Jeg forstår', 'I understand', 'Eg forstår'),
@@ -293,9 +291,11 @@ exports.Contact = {
293
291
  rules: [],
294
292
  },
295
293
  },
294
+ /* eslint-disable terms/no-hardcoded -- any app, incl. Entur */
296
295
  appTicketRefund: {
297
296
  label: (0, commons_1.translation)('Billett kjøpt i app eller nettbutikk', 'Ticket purchased in an app or webshop', 'Billett kjøpt i app eller nettbutikk'),
298
297
  },
298
+ /* eslint-enable terms/no-hardcoded */
299
299
  otherTicketRefund: {
300
300
  label: (0, commons_1.translation)('Billett kjøpt om bord eller på trafikkterminal', 'Ticket purchased onboard or at a terminal', 'Billett kjøpt om bord eller på trafikkterminal'),
301
301
  },
@@ -423,6 +423,7 @@ exports.Contact = {
423
423
  optionLabel: (0, commons_1.translation)('Velg transportmiddel', 'Select transport mode', 'Vel transportmiddel'),
424
424
  modes: {
425
425
  bus: (0, commons_1.translation)('Buss', 'Bus', 'Buss'),
426
+ tram: (0, commons_1.translation)('Trikk', 'Tram', 'Trikk'),
426
427
  expressboat: (0, commons_1.translation)('Hurtigbåt', 'Express boat', 'Hurtigbåt'),
427
428
  ferry: (0, commons_1.translation)('Ferge', 'Ferry', 'Ferje'),
428
429
  bestillingstransport: (0, commons_1.translation)('Bestillingstransport', 'On-demand transport', 'Bestillingstransport'),
@@ -431,12 +432,13 @@ exports.Contact = {
431
432
  empty: (0, commons_1.translation)('Velg transportmiddel', 'Select transport mode', 'Vel transportmiddel'),
432
433
  },
433
434
  },
435
+ /* eslint-disable terms/no-hardcoded -- lists the Entur app alongside the org's own, so "app" is generic here */
434
436
  purchasePlatform: {
435
437
  label: (0, commons_1.translation)('Kjøpsplattform', 'Purchase platform', 'Kjøpsplattform'),
436
438
  optionLabel: (0, commons_1.translation)('Velg app eller nettbutikk billetten ble kjøpt i', 'Select the app or webshop where the ticket was purchased', 'Vel app eller nettbutikk der billetten vart kjøpt'),
437
439
  platforms: {
438
440
  enturApp: (0, commons_1.translation)('Entur-appen', 'Entur app', 'Entur-appen'),
439
- framApp: (0, commons_1.translation)('App', 'App', 'App'),
441
+ framApp: (0, commons_1.translation)(terms_1.T.orgApp.Base, terms_1.T.orgApp.Base, terms_1.T.orgApp.Base),
440
442
  enturWeb: (0, commons_1.translation)('Entur nettbutikk', 'Entur webshop', 'Entur nettbutikk'),
441
443
  framWeb: (0, commons_1.translation)('Nettbutikk', 'Webshop', 'Nettbutikk'),
442
444
  },
@@ -444,6 +446,7 @@ exports.Contact = {
444
446
  empty: (0, commons_1.translation)('Velg app eller nettbutikk', 'Select app or webshop', 'Vel app eller nettbutikk'),
445
447
  },
446
448
  },
449
+ /* eslint-enable terms/no-hardcoded */
447
450
  line: {
448
451
  label: (0, commons_1.translation)('Linje', 'Line', 'Linje'),
449
452
  optionLabel: (0, commons_1.translation)('Velg linje', 'Choose line', 'Vel linje'),
@@ -521,7 +524,7 @@ exports.Contact = {
521
524
  },
522
525
  {
523
526
  id: 'incorrectAppInformation',
524
- name: (0, commons_1.translation)('Feil informasjon i app eller reiseplanlegger', 'Incorrect information in app or travel planner', 'Feil informasjon i app eller reiseplanlegger'),
527
+ name: (0, commons_1.translation)(`Feil informasjon i ${terms_1.T.orgApp.base} eller reiseplanlegger`, `Incorrect information in ${terms_1.T.orgApp.base} or travel planner`, `Feil informasjon i ${terms_1.T.orgApp.base} eller reiseplanlegger`),
525
528
  },
526
529
  ],
527
530
  errorMessages: { empty: (0, commons_1.translation)('Velg årsak', 'Select reason', 'Vel årsak') },
@@ -582,19 +585,19 @@ exports.Contact = {
582
585
  customerNumber: {
583
586
  label: (0, commons_1.translation)('Kundenummer', 'Customer number', 'Kundenummer'),
584
587
  labelOptional: (0, commons_1.translation)('Kundenummer - (valgfritt)', 'Customer number - (optional)', 'Kundenummer - (valfritt)'),
585
- description: (0, commons_1.translation)('Kundenummeret består av 7 siffer og du finner det under Min bruker i appen, eller i nettbutikken.', 'The customer number consists of 7 digits and can be found under My user in the app, or in the webshop', 'Kundenummeret består av 7 siffer og du finn det under Min bruker i appen, eller i nettbutikken.'),
588
+ description: (0, commons_1.translation)(`Kundenummeret består av 7 siffer og du finner det under Min bruker i ${terms_1.T.orgApp.definite}, eller i nettbutikken.`, `The customer number consists of 7 digits and can be found under My user in ${terms_1.T.orgApp.definite}, or in the webshop`, `Kundenummeret består av 7 siffer og du finn det under Min bruker i ${terms_1.T.orgApp.definite}, eller i nettbutikken.`),
586
589
  errorMessages: {
587
590
  empty: (0, commons_1.translation)('Fyll inn kundenummer', 'Enter customer number', 'Fyll inn kundenummer'),
588
591
  invalidFormat: (0, commons_1.translation)('Ugyldig kundenummer. Skriv inn et gyldig kundenummer med 7 eller 8 siffer.', 'Invalid customer number. Please enter a valid 7 or 8-digit number.', 'Ugyldig kundenummer. Skriv inn eit gyldig kundenummer med 7 eller 8 siffer.'),
589
592
  },
590
593
  },
591
594
  travelCardNumber: {
592
- labelRadioButton: (0, commons_1.translation)('Reisekort', 'Travel card', 'Reisekort'),
593
- label: (0, commons_1.translation)('Reisekortnummer', 'Travel card number', 'Reisekortnummer'),
594
- info: (0, commons_1.translation)('Legg inn reisekortnummeret her hvis du allerede har et reisekort. Reisekortnummeret består av 9 siffer og du finner det på baksiden av reisekortet ditt', 'Enter the travel card number here if you already have a travel card. The travel card number consists of 9 digits and can be found on the back of your travel card', 'Legg inn reisekortnummeret her viss du allereie har eit reisekort. Reisekortnummeret består av 9 siffer, og du finn det bak på reisekortet ditt.'),
595
+ labelRadioButton: (0, commons_1.translation)(terms_1.T.travelCard.Base, terms_1.T.travelCard.Base, terms_1.T.travelCard.Base),
596
+ label: (0, commons_1.translation)(terms_1.T.travelCardNumber.Base, terms_1.T.travelCardNumber.Base, terms_1.T.travelCardNumber.Base),
597
+ info: (0, commons_1.translation)(`Legg inn ${terms_1.T.travelCardNumber.definite} her hvis du allerede har ${terms_1.T.travelCard.indefinite}. ${terms_1.T.travelCardNumber.Definite} består av 9 siffer og du finner det på baksiden av ${terms_1.T.travelCard.definite} ditt`, `Enter ${terms_1.T.travelCardNumber.definite} here if you already have ${terms_1.T.travelCard.indefinite}. ${terms_1.T.travelCardNumber.Definite} consists of 9 digits and can be found on the back of your ${terms_1.T.travelCard.base}`, `Legg inn ${terms_1.T.travelCardNumber.definite} her viss du allereie har ${terms_1.T.travelCard.indefinite}. ${terms_1.T.travelCardNumber.Definite} består av 9 siffer, og du finn det bak på ${terms_1.T.travelCard.definite} ditt.`),
595
598
  errorMessages: {
596
- empty: (0, commons_1.translation)('Legg til reisekortnummer', 'Enter travel card number', 'Legg til reisekortnummer'),
597
- invalidFormat: (0, commons_1.translation)('Ugyldig reisekortnummer. Skriv inn et gyldig reisekortnummer med 9 siffer.', 'Invalid travel card number. Please enter a valid 9-digit number.', 'Ugyldig reisekortnummer. Skriv inn eit gyldig reisekortnummer med 9 siffer.'),
599
+ empty: (0, commons_1.translation)(`Legg til ${terms_1.T.travelCardNumber.base}`, `Enter ${terms_1.T.travelCardNumber.base}`, `Legg til ${terms_1.T.travelCardNumber.base}`),
600
+ invalidFormat: (0, commons_1.translation)(`Ugyldig ${terms_1.T.travelCardNumber.base}. Skriv inn et gyldig ${terms_1.T.travelCardNumber.base} med 9 siffer.`, `Invalid ${terms_1.T.travelCardNumber.base}. Please enter a valid 9-digit number.`, `Ugyldig ${terms_1.T.travelCardNumber.base}. Skriv inn eit gyldig ${terms_1.T.travelCardNumber.base} med 9 siffer.`),
598
601
  },
599
602
  },
600
603
  question: {
@@ -621,7 +624,7 @@ exports.Contact = {
621
624
  : (0, commons_1.translation)('Ordre-id(er)', 'Order ID(s)', 'Ordre-id(er)'),
622
625
  description: (0, commons_1.translation)('Hvis du vil ha hjelp med en billett du allerede har kjøpt, trenger vi å vite ordre-id. Ordre-id finner du følgende steder:', 'If you want help with a ticket you have already bought, we need to know the order ID. You can find the order ID in the following places:', 'Viss du vil ha hjelp med ein billett du allereie har kjøpt, treng vi å vite ordre-id. Ordre-id finn du følgende stadar:'),
623
626
  descriptionBulletPoints: [
624
- (0, commons_1.translation)('På billetten i appen.', 'On the ticket in the app.', 'På billetten i appen.'),
627
+ (0, commons_1.translation)(`På billetten i ${terms_1.T.orgApp.definite}.`, `On the ticket in ${terms_1.T.orgApp.definite}.`, `På billetten i ${terms_1.T.orgApp.definite}.`),
625
628
  (0, commons_1.translation)('På kvitteringen din.', 'On your receipt.', 'På kvitteringa di.'),
626
629
  (0, commons_1.translation)('Du finner også ordre-id på utgåtte billetter.', 'You can also find the order ID on expired tickets.', 'Du finn også ordre-id på utgåtte billettar.'),
627
630
  ],
@@ -0,0 +1,23 @@
1
+ import { TranslatedString } from '../commons';
2
+ export declare const defaultTerms: {
3
+ travelCard: {
4
+ base: TranslatedString;
5
+ indefinite: TranslatedString;
6
+ definite: TranslatedString;
7
+ plural: TranslatedString;
8
+ };
9
+ travelCardNumber: {
10
+ base: TranslatedString;
11
+ definite: TranslatedString;
12
+ };
13
+ /** The org's own app. */
14
+ orgApp: {
15
+ base: TranslatedString;
16
+ definite: TranslatedString;
17
+ };
18
+ /** The app the customer keeps their ticket in. */
19
+ ticketApp: {
20
+ base: TranslatedString;
21
+ };
22
+ };
23
+ //# sourceMappingURL=default-terms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-terms.d.ts","sourceRoot":"","sources":["../../../src/translations/terms/default-terms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhE,eAAO,MAAM,YAAY;;;;;;;;;;;IAevB,yBAAyB;;;;;IAKzB,kDAAkD;;;;CAIQ,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultTerms = void 0;
4
+ const commons_1 = require("../commons");
5
+ exports.defaultTerms = {
6
+ travelCard: {
7
+ base: (0, commons_1.translation)('reisekort', 'travel card', 'reisekort'),
8
+ indefinite: (0, commons_1.translation)('et reisekort', 'a travel card', 'eit reisekort'),
9
+ definite: (0, commons_1.translation)('reisekortet', 'the travel card', 'reisekortet'),
10
+ plural: (0, commons_1.translation)('reisekort', 'travel cards', 'reisekort'),
11
+ },
12
+ travelCardNumber: {
13
+ base: (0, commons_1.translation)('reisekortnummer', 'travel card number', 'reisekortnummer'),
14
+ definite: (0, commons_1.translation)('reisekortnummeret', 'the travel card number', 'reisekortnummeret'),
15
+ },
16
+ /** The org's own app. */
17
+ orgApp: {
18
+ base: (0, commons_1.translation)('app', 'app', 'app'),
19
+ definite: (0, commons_1.translation)('appen', 'the app', 'appen'),
20
+ },
21
+ /** The app the customer keeps their ticket in. */
22
+ ticketApp: {
23
+ base: (0, commons_1.translation)('mobilapp', 'mobile app', 'mobilapp'),
24
+ },
25
+ };
@@ -0,0 +1,4 @@
1
+ export { defaultTerms } from './default-terms';
2
+ export { T, TERM_PLACEHOLDER, capitalize } from './placeholders';
3
+ export type { TermForm, TermForms, TermGroup, Terms } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/translations/terms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.capitalize = exports.TERM_PLACEHOLDER = exports.T = exports.defaultTerms = void 0;
4
+ var default_terms_1 = require("./default-terms");
5
+ Object.defineProperty(exports, "defaultTerms", { enumerable: true, get: function () { return default_terms_1.defaultTerms; } });
6
+ var placeholders_1 = require("./placeholders");
7
+ Object.defineProperty(exports, "T", { enumerable: true, get: function () { return placeholders_1.T; } });
8
+ Object.defineProperty(exports, "TERM_PLACEHOLDER", { enumerable: true, get: function () { return placeholders_1.TERM_PLACEHOLDER; } });
9
+ Object.defineProperty(exports, "capitalize", { enumerable: true, get: function () { return placeholders_1.capitalize; } });
@@ -0,0 +1,16 @@
1
+ import { defaultTerms } from './default-terms';
2
+ export declare const capitalize: (text: string) => string;
3
+ type DefaultTerms = typeof defaultTerms;
4
+ type TermPlaceholders = {
5
+ [G in keyof DefaultTerms]: {
6
+ [F in keyof DefaultTerms[G]]: `{${G}.${F & string}}`;
7
+ } & {
8
+ [F in keyof DefaultTerms[G] as Capitalize<F & string>]: `{${G}.${Capitalize<F & string>}}`;
9
+ };
10
+ };
11
+ /** Placeholders for use inside translation template literals. */
12
+ export declare const T: TermPlaceholders;
13
+ /** Matches the placeholders produced by `T`, capturing group and form. */
14
+ export declare const TERM_PLACEHOLDER: RegExp;
15
+ export {};
16
+ //# sourceMappingURL=placeholders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholders.d.ts","sourceRoot":"","sources":["../../../src/translations/terms/placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WACO,CAAC;AAE/C,KAAK,YAAY,GAAG,OAAO,YAAY,CAAC;AAGxC,KAAK,gBAAgB,GAAG;KACrB,CAAC,IAAI,MAAM,YAAY,GAAG;SACxB,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG;KACrD,GAAG;SAEA,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,GACnD,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG;KACtC;CACF,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,CAAC,EAUT,gBAAgB,CAAC;AAEtB,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,QAAqB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TERM_PLACEHOLDER = exports.T = exports.capitalize = void 0;
4
+ const default_terms_1 = require("./default-terms");
5
+ const capitalize = (text) => text.charAt(0).toUpperCase() + text.slice(1);
6
+ exports.capitalize = capitalize;
7
+ /** Placeholders for use inside translation template literals. */
8
+ exports.T = Object.fromEntries(Object.entries(default_terms_1.defaultTerms).map(([group, forms]) => [
9
+ group,
10
+ Object.fromEntries(Object.keys(forms).flatMap((form) => [
11
+ [form, `{${group}.${form}}`],
12
+ [(0, exports.capitalize)(form), `{${group}.${(0, exports.capitalize)(form)}}`],
13
+ ])),
14
+ ]));
15
+ /** Matches the placeholders produced by `T`, capturing group and form. */
16
+ exports.TERM_PLACEHOLDER = /\{(\w+)\.(\w+)}/g;
@@ -0,0 +1,17 @@
1
+ import type { TranslatedString } from '../commons';
2
+ import type { defaultTerms } from './default-terms';
3
+ type DefaultTerms = typeof defaultTerms;
4
+ export type TermGroup = keyof DefaultTerms;
5
+ export type TermForm<G extends TermGroup> = keyof DefaultTerms[G] & string;
6
+ /**
7
+ * Every form of a term. `capitalized` overrides the derived capitalization
8
+ * for forms where upper-casing the first letter is wrong.
9
+ */
10
+ export type TermForms<G extends TermGroup> = Record<TermForm<G>, TranslatedString> & {
11
+ capitalized?: Partial<Record<TermForm<G>, TranslatedString>>;
12
+ };
13
+ export type Terms = {
14
+ [G in TermGroup]: TermForms<G>;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/translations/terms/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,KAAK,YAAY,GAAG,OAAO,YAAY,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC;AAC3C,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,IAAI,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAE3E;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,SAAS,IAAI,MAAM,CACjD,QAAQ,CAAC,CAAC,CAAC,EACX,gBAAgB,CACjB,GAAG;IACF,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;KAAG,CAAC,IAAI,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -8,5 +8,11 @@ export declare function TranslationsProvider({ overrides, children, }: {
8
8
  }): import("react").JSX.Element;
9
9
  export declare function useMergedTranslations(): MergedTranslations;
10
10
  export declare function usePageText(): typeof PageText;
11
+ /**
12
+ * Returns a function that fills `{group.form}` term placeholders in translated
13
+ * text. A capitalized form (`Definite`) uses the org's `capitalized` value, or
14
+ * else upper-cases the first letter. Unknown placeholders are kept.
15
+ */
16
+ export declare function useFillTerms(): (text: string) => string;
11
17
  export {};
12
18
  //# sourceMappingURL=translations-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"translations-context.d.ts","sourceRoot":"","sources":["../../src/translations/translations-context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AAEpC,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAIvE,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,+BAA+B,CAAC;IAC3C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,+BAWA;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAS1D;AAED,wBAAgB,WAAW,IAAI,OAAO,QAAQ,CAG7C"}
1
+ {"version":3,"file":"translations-context.d.ts","sourceRoot":"","sources":["../../src/translations/translations-context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AAUpC,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAIvE,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,+BAA+B,CAAC;IAC3C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,+BAWA;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAS1D;AAED,wBAAgB,WAAW,IAAI,OAAO,QAAQ,CAG7C;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAgBvD"}
@@ -36,10 +36,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TranslationsProvider = TranslationsProvider;
37
37
  exports.useMergedTranslations = useMergedTranslations;
38
38
  exports.usePageText = usePageText;
39
+ exports.useFillTerms = useFillTerms;
39
40
  const jsx_runtime_1 = require("react/jsx-runtime");
40
41
  const react_1 = require("react");
41
42
  const merge_overrides_1 = require("./merge-overrides");
42
43
  const PageText = __importStar(require("./pages"));
44
+ const commons_1 = require("./commons");
45
+ const terms_1 = require("./terms");
46
+ const lobot_1 = require("./lobot");
43
47
  const TranslationsContext = (0, react_1.createContext)(null);
44
48
  function TranslationsProvider({ overrides, children, }) {
45
49
  const merged = (0, react_1.useMemo)(() => (0, merge_overrides_1.mergeTranslationOverrides)(overrides), [overrides]);
@@ -57,3 +61,24 @@ function usePageText() {
57
61
  const context = (0, react_1.useContext)(TranslationsContext);
58
62
  return context ? context.PageText : PageText;
59
63
  }
64
+ /**
65
+ * Returns a function that fills `{group.form}` term placeholders in translated
66
+ * text. A capitalized form (`Definite`) uses the org's `capitalized` value, or
67
+ * else upper-cases the first letter. Unknown placeholders are kept.
68
+ */
69
+ function useFillTerms() {
70
+ const context = (0, react_1.useContext)(TranslationsContext);
71
+ const { t } = lobot_1.lobot.useTranslation();
72
+ const terms = context ? context.terms : terms_1.defaultTerms;
73
+ return (text) => text.replace(terms_1.TERM_PLACEHOLDER, (match, group, form) => {
74
+ const forms = terms[group];
75
+ const lowerForm = form.charAt(0).toLowerCase() + form.slice(1);
76
+ const value = forms?.[lowerForm];
77
+ if (!forms || !value || !(0, commons_1.isTranslatedString)(value))
78
+ return match;
79
+ if (form === lowerForm)
80
+ return t(value);
81
+ const capitalized = forms.capitalized?.[lowerForm];
82
+ return capitalized ? t(capitalized) : (0, terms_1.capitalize)(t(value));
83
+ });
84
+ }
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import * as PageText from './pages';
3
+ import type { Terms } from './terms';
3
4
  export declare enum LanguageAndTextLanguagesEnum {
4
5
  nob = "nob",
5
6
  nno = "nno",
@@ -29,5 +30,6 @@ export type DeepPartial<T> = {
29
30
  */
30
31
  export type ContactFormTranslationsOverride = {
31
32
  pages?: DeepPartial<typeof PageText>;
33
+ terms?: Partial<Terms>;
32
34
  };
33
35
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/translations/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AAEpC,oBAAY,4BAA4B;IACtC,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,EAAE,OAAO;CACV;AAED,eAAO,MAAM,qBAAqB;;;;;;mBAShC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAChE,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,QAAQ,CAAC,CAAC;CACtC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/translations/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,oBAAY,4BAA4B;IACtC,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,EAAE,OAAO;CACV;AAED,eAAO,MAAM,qBAAqB;;;;;;mBAShC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAChE,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,QAAQ,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;CACxB,CAAC"}
package/lib/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { TranslatedString } from './translations';
2
- export type TransportModeType = 'bus' | 'expressboat' | 'ferry' | 'bestillingstransport';
2
+ export type TransportModeType = 'bus' | 'tram' | 'expressboat' | 'ferry' | 'bestillingstransport';
3
3
  export type ReasonForTransportFailure = {
4
4
  id: string;
5
5
  name: TranslatedString;
@@ -9,7 +9,7 @@ export declare enum TicketTypeId {
9
9
  PeriodTicket = "periodTicket"
10
10
  }
11
11
  export type TicketType = {
12
- id: TicketTypeId;
12
+ id: TicketTypeId | (string & {});
13
13
  name: TranslatedString;
14
14
  };
15
15
  export type PurchasePlatformType = 'framApp' | 'enturApp' | 'framWeb' | 'enturWeb';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,MAAM,iBAAiB,GAC3B,KAAK,GAAG,aAAa,GAAG,OAAO,GAAG,sBAAsB,CAAC;AAC3D,MAAM,MAAM,yBAAyB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/E,oBAAY,YAAY;IACtB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;CAC9B;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,YAAY,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,oBAAoB,GAC9B,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,MAAM,iBAAiB,GAC3B,KAAK,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,sBAAsB,CAAC;AACpE,MAAM,MAAM,yBAAyB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/E,oBAAY,YAAY;IACtB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;CAC9B;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACjC,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,oBAAoB,GAC9B,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Renders a translated string with `[text](href)` as links opening in a new
3
+ * tab and `**text**` as bold. A blank line (`\n\n`) starts a new paragraph,
4
+ * a single `\n` is a line break.
5
+ */
6
+ export declare function RichText({ children }: {
7
+ children: string;
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=rich-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-text.d.ts","sourceRoot":"","sources":["../../src/utils/rich-text.tsx"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,+BAkB1D"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RichText = RichText;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const typography_1 = require("../components/typography");
10
+ const rich_text_module_css_1 = __importDefault(require("./rich-text.module.css"));
11
+ /**
12
+ * Renders a translated string with `[text](href)` as links opening in a new
13
+ * tab and `**text**` as bold. A blank line (`\n\n`) starts a new paragraph,
14
+ * a single `\n` is a line break.
15
+ */
16
+ function RichText({ children }) {
17
+ return ((0, jsx_runtime_1.jsx)("div", { className: rich_text_module_css_1.default.richText, children: children
18
+ .split(/\n\s*\n/)
19
+ .filter((paragraph) => paragraph.trim())
20
+ .map((paragraph, index) => ((0, jsx_runtime_1.jsx)(typography_1.Typo.p, { textType: "body__m", children: paragraph.split('\n').map((line, lineIndex) => ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [lineIndex > 0 && (0, jsx_runtime_1.jsx)("br", {}), renderInline(line)] }, lineIndex))) }, index))) }));
21
+ }
22
+ const MARKDOWN = /\[([^\]]+)]\(([^)\s]+)\)|\*\*(.+?)\*\*/g;
23
+ function renderInline(text) {
24
+ const nodes = [];
25
+ let textStart = 0;
26
+ for (const match of text.matchAll(MARKDOWN)) {
27
+ const [markdown, linkText, href, boldText] = match;
28
+ nodes.push(text.slice(textStart, match.index), boldText !== undefined ? ((0, jsx_runtime_1.jsx)(typography_1.Typo.span, { textType: "body__m__strong", children: boldText }, match.index)) : ((0, jsx_runtime_1.jsx)("a", { href: href, target: "_blank", rel: "noopener noreferrer", children: linkText }, match.index)));
29
+ textStart = match.index + markdown.length;
30
+ }
31
+ nodes.push(text.slice(textStart));
32
+ return nodes;
33
+ }
@@ -0,0 +1,5 @@
1
+ .richText {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: token('spacing.medium');
5
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrfylke/contact-form",
3
- "version": "0.1.31",
3
+ "version": "0.1.32",
4
4
  "license": "EUPL-1.2",
5
5
  "private": false,
6
6
  "main": "./lib/index.js",
@@ -79,6 +79,7 @@
79
79
  "eslint": "^9",
80
80
  "eslint-plugin-react": "^7.37.5",
81
81
  "eslint-plugin-react-hooks": "^7.1.1",
82
+ "jiti": "^2",
82
83
  "jsdom": "^28.1.0",
83
84
  "prettier": "^3.9.6",
84
85
  "typescript-eslint": "^8.69.0",