@magicfeedback/popup-sdk 1.6.0 → 1.7.1

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.
@@ -141,11 +141,273 @@ function buildFontFaceCss(family, url) {
141
141
  return `@font-face{font-family:"${safe}";src:${src};font-display:swap;}`;
142
142
  }
143
143
 
144
+ // src/i18n/labels.ts
145
+ var EN = {
146
+ accept: "Send",
147
+ decline: "Cancel",
148
+ start: "Start survey",
149
+ complete: "Complete survey",
150
+ back: "Back",
151
+ question: "Question",
152
+ of: "of",
153
+ followUp: "Follow-up",
154
+ closeAria: "Close popup",
155
+ loadingAria: "Loading survey",
156
+ errorRequired: "Please answer the required question to continue.",
157
+ errorSubmit: "An error occurred while submitting. Please try again or close the popup."
158
+ };
159
+ var ES = {
160
+ accept: "Enviar",
161
+ decline: "Cancelar",
162
+ start: "Empezar encuesta",
163
+ complete: "Completar encuesta",
164
+ back: "Atr\xE1s",
165
+ question: "Pregunta",
166
+ of: "de",
167
+ followUp: "Seguimiento",
168
+ closeAria: "Cerrar ventana emergente",
169
+ loadingAria: "Cargando encuesta",
170
+ errorRequired: "Responde la pregunta obligatoria para continuar.",
171
+ errorSubmit: "Se produjo un error al enviar. Int\xE9ntalo de nuevo o cierra la ventana."
172
+ };
173
+ var DA = {
174
+ accept: "Send",
175
+ decline: "Annuller",
176
+ start: "Start unders\xF8gelse",
177
+ complete: "Afslut unders\xF8gelse",
178
+ back: "Tilbage",
179
+ question: "Sp\xF8rgsm\xE5l",
180
+ of: "af",
181
+ followUp: "Opf\xF8lgning",
182
+ closeAria: "Luk pop op",
183
+ loadingAria: "Indl\xE6ser unders\xF8gelse",
184
+ errorRequired: "Besvar venligst det obligatoriske sp\xF8rgsm\xE5l for at forts\xE6tte.",
185
+ errorSubmit: "Der opstod en fejl under afsendelsen. Pr\xF8v igen, eller luk pop op-vinduet."
186
+ };
187
+ var NO = {
188
+ accept: "Send",
189
+ decline: "Avbryt",
190
+ start: "Start unders\xF8kelse",
191
+ complete: "Fullf\xF8r unders\xF8kelse",
192
+ back: "Tilbake",
193
+ question: "Sp\xF8rsm\xE5l",
194
+ of: "av",
195
+ followUp: "Oppf\xF8lging",
196
+ closeAria: "Lukk popup",
197
+ loadingAria: "Laster unders\xF8kelse",
198
+ errorRequired: "Svar p\xE5 det obligatoriske sp\xF8rsm\xE5let for \xE5 fortsette.",
199
+ errorSubmit: "Det oppstod en feil under innsendingen. Pr\xF8v igjen, eller lukk popupen."
200
+ };
201
+ var SV = {
202
+ accept: "Skicka",
203
+ decline: "Avbryt",
204
+ start: "Starta unders\xF6kning",
205
+ complete: "Slutf\xF6r unders\xF6kning",
206
+ back: "Tillbaka",
207
+ question: "Fr\xE5ga",
208
+ of: "av",
209
+ followUp: "Uppf\xF6ljning",
210
+ closeAria: "St\xE4ng popup",
211
+ loadingAria: "Laddar unders\xF6kning",
212
+ errorRequired: "Svara p\xE5 den obligatoriska fr\xE5gan f\xF6r att forts\xE4tta.",
213
+ errorSubmit: "Ett fel uppstod vid inskickningen. F\xF6rs\xF6k igen eller st\xE4ng popupen."
214
+ };
215
+ var FI = {
216
+ accept: "L\xE4het\xE4",
217
+ decline: "Peruuta",
218
+ start: "Aloita kysely",
219
+ complete: "Viimeistele kysely",
220
+ back: "Takaisin",
221
+ question: "Kysymys",
222
+ of: "/",
223
+ followUp: "Jatkokysymys",
224
+ closeAria: "Sulje ponnahdusikkuna",
225
+ loadingAria: "Ladataan kysely\xE4",
226
+ errorRequired: "Vastaa pakolliseen kysymykseen jatkaaksesi.",
227
+ errorSubmit: "L\xE4hetyksess\xE4 tapahtui virhe. Yrit\xE4 uudelleen tai sulje ponnahdusikkuna."
228
+ };
229
+ var DE = {
230
+ accept: "Senden",
231
+ decline: "Abbrechen",
232
+ start: "Umfrage starten",
233
+ complete: "Umfrage abschlie\xDFen",
234
+ back: "Zur\xFCck",
235
+ question: "Frage",
236
+ of: "von",
237
+ followUp: "Folgefrage",
238
+ closeAria: "Popup schlie\xDFen",
239
+ loadingAria: "Umfrage wird geladen",
240
+ errorRequired: "Bitte beantworte die Pflichtfrage, um fortzufahren.",
241
+ errorSubmit: "Beim Senden ist ein Fehler aufgetreten. Versuche es erneut oder schlie\xDFe das Popup."
242
+ };
243
+ var FR = {
244
+ accept: "Envoyer",
245
+ decline: "Annuler",
246
+ start: "Commencer l'enqu\xEAte",
247
+ complete: "Terminer l'enqu\xEAte",
248
+ back: "Retour",
249
+ question: "Question",
250
+ of: "sur",
251
+ followUp: "Question compl\xE9mentaire",
252
+ closeAria: "Fermer la fen\xEAtre",
253
+ loadingAria: "Chargement de l'enqu\xEAte",
254
+ errorRequired: "Veuillez r\xE9pondre \xE0 la question obligatoire pour continuer.",
255
+ errorSubmit: "Une erreur s'est produite lors de l'envoi. R\xE9essayez ou fermez la fen\xEAtre."
256
+ };
257
+ var PT = {
258
+ accept: "Enviar",
259
+ decline: "Cancelar",
260
+ start: "Iniciar question\xE1rio",
261
+ complete: "Concluir question\xE1rio",
262
+ back: "Voltar",
263
+ question: "Pergunta",
264
+ of: "de",
265
+ followUp: "Seguimento",
266
+ closeAria: "Fechar janela",
267
+ loadingAria: "A carregar question\xE1rio",
268
+ errorRequired: "Responda \xE0 pergunta obrigat\xF3ria para continuar.",
269
+ errorSubmit: "Ocorreu um erro ao enviar. Tente novamente ou feche a janela."
270
+ };
271
+ var AR = {
272
+ accept: "\u0625\u0631\u0633\u0627\u0644",
273
+ decline: "\u0625\u0644\u063A\u0627\u0621",
274
+ start: "\u0627\u0628\u062F\u0623 \u0627\u0644\u0627\u0633\u062A\u0628\u064A\u0627\u0646",
275
+ complete: "\u0625\u0646\u0647\u0627\u0621 \u0627\u0644\u0627\u0633\u062A\u0628\u064A\u0627\u0646",
276
+ back: "\u0631\u062C\u0648\u0639",
277
+ question: "\u0633\u0624\u0627\u0644",
278
+ of: "\u0645\u0646",
279
+ followUp: "\u0633\u0624\u0627\u0644 \u0645\u062A\u0627\u0628\u0639\u0629",
280
+ closeAria: "\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0645\u0646\u0628\u062B\u0642\u0629",
281
+ loadingAria: "\u062C\u0627\u0631\u064D \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0627\u0633\u062A\u0628\u064A\u0627\u0646",
282
+ errorRequired: "\u064A\u0631\u062C\u0649 \u0627\u0644\u0625\u062C\u0627\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0633\u0624\u0627\u0644 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
283
+ errorSubmit: "\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0625\u0631\u0633\u0627\u0644. \u064A\u0631\u062C\u0649 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0623\u0648 \u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u0646\u0627\u0641\u0630\u0629."
284
+ };
285
+ var BN = {
286
+ accept: "\u09AA\u09BE\u09A0\u09BE\u09A8",
287
+ decline: "\u09AC\u09BE\u09A4\u09BF\u09B2",
288
+ start: "\u099C\u09B0\u09BF\u09AA \u09B6\u09C1\u09B0\u09C1 \u0995\u09B0\u09C1\u09A8",
289
+ complete: "\u099C\u09B0\u09BF\u09AA \u09B8\u09AE\u09CD\u09AA\u09C2\u09B0\u09CD\u09A3 \u0995\u09B0\u09C1\u09A8",
290
+ back: "\u09AA\u09BF\u099B\u09A8\u09C7",
291
+ question: "\u09AA\u09CD\u09B0\u09B6\u09CD\u09A8",
292
+ of: "/",
293
+ followUp: "\u09AB\u09B2\u09CB-\u0986\u09AA",
294
+ closeAria: "\u09AA\u09AA\u0986\u09AA \u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C1\u09A8",
295
+ loadingAria: "\u099C\u09B0\u09BF\u09AA \u09B2\u09CB\u09A1 \u09B9\u099A\u09CD\u099B\u09C7",
296
+ errorRequired: "\u099A\u09BE\u09B2\u09BF\u09AF\u09BC\u09C7 \u09AF\u09C7\u09A4\u09C7 \u0986\u09AC\u09B6\u09CD\u09AF\u0995 \u09AA\u09CD\u09B0\u09B6\u09CD\u09A8\u09C7\u09B0 \u0989\u09A4\u09CD\u09A4\u09B0 \u09A6\u09BF\u09A8\u0964",
297
+ errorSubmit: "\u099C\u09AE\u09BE \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09B8\u09AE\u09AF\u09BC \u098F\u0995\u099F\u09BF \u09A4\u09CD\u09B0\u09C1\u099F\u09BF \u0998\u099F\u09C7\u099B\u09C7\u0964 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8 \u09AC\u09BE \u09AA\u09AA\u0986\u09AA \u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C1\u09A8\u0964"
298
+ };
299
+ var ZH_CN = {
300
+ accept: "\u53D1\u9001",
301
+ decline: "\u53D6\u6D88",
302
+ start: "\u5F00\u59CB\u95EE\u5377",
303
+ complete: "\u5B8C\u6210\u95EE\u5377",
304
+ back: "\u8FD4\u56DE",
305
+ question: "\u95EE\u9898",
306
+ of: "/",
307
+ followUp: "\u8FFD\u95EE",
308
+ closeAria: "\u5173\u95ED\u5F39\u7A97",
309
+ loadingAria: "\u6B63\u5728\u52A0\u8F7D\u95EE\u5377",
310
+ errorRequired: "\u8BF7\u56DE\u7B54\u5FC5\u7B54\u9898\u540E\u7EE7\u7EED\u3002",
311
+ errorSubmit: "\u63D0\u4EA4\u65F6\u51FA\u9519\u3002\u8BF7\u91CD\u8BD5\u6216\u5173\u95ED\u5F39\u7A97\u3002"
312
+ };
313
+ var LABELS = {
314
+ en: EN,
315
+ es: ES,
316
+ da: DA,
317
+ no: NO,
318
+ sv: SV,
319
+ fi: FI,
320
+ de: DE,
321
+ fr: FR,
322
+ pt: PT,
323
+ ar: AR,
324
+ bn: BN,
325
+ "zh-CN": ZH_CN
326
+ };
327
+ function resolveLocale(lang) {
328
+ if (typeof lang !== "string") return "en";
329
+ const normalized = lang.trim().toLowerCase().replace(/_/g, "-");
330
+ if (!normalized) return "en";
331
+ if (normalized === "zh" || normalized.startsWith("zh-")) return "zh-CN";
332
+ const primary = normalized.split("-")[0];
333
+ switch (primary) {
334
+ case "en":
335
+ return "en";
336
+ case "es":
337
+ return "es";
338
+ case "da":
339
+ return "da";
340
+ case "no":
341
+ case "nb":
342
+ case "nn":
343
+ return "no";
344
+ case "sv":
345
+ return "sv";
346
+ case "fi":
347
+ return "fi";
348
+ case "de":
349
+ return "de";
350
+ case "fr":
351
+ return "fr";
352
+ case "pt":
353
+ return "pt";
354
+ case "ar":
355
+ return "ar";
356
+ case "bn":
357
+ return "bn";
358
+ default:
359
+ return "en";
360
+ }
361
+ }
362
+ var RTL_LOCALES = ["ar"];
363
+ function isRtlLanguage(lang) {
364
+ return RTL_LOCALES.includes(resolveLocale(lang));
365
+ }
366
+ function directionFor(lang) {
367
+ return isRtlLanguage(lang) ? "rtl" : "ltr";
368
+ }
369
+ function getLabels(lang) {
370
+ return LABELS[resolveLocale(lang)];
371
+ }
372
+ function resolveActionLabels(actions, lang) {
373
+ const labels = getLabels(lang);
374
+ const pick = (value, fallback) => {
375
+ const trimmed = typeof value === "string" ? value.trim() : "";
376
+ return trimmed ? value : fallback;
377
+ };
378
+ return {
379
+ accept: pick(actions?.accept?.label, labels.accept),
380
+ decline: pick(actions?.decline?.label, labels.decline),
381
+ start: pick(actions?.start?.label, labels.start),
382
+ complete: pick(actions?.complete?.label, labels.complete),
383
+ back: pick(actions?.back?.label, labels.back)
384
+ };
385
+ }
386
+ var RESOLVE_LOCALE_JS = `function ddResolveLocale(lang){
387
+ if(typeof lang!=='string') return 'en';
388
+ var n=lang.trim().toLowerCase().replace(/_/g,'-');
389
+ if(!n) return 'en';
390
+ if(n==='zh'||n.indexOf('zh-')===0) return 'zh-CN';
391
+ var p=n.split('-')[0];
392
+ if(p==='en') return 'en';
393
+ if(p==='es') return 'es';
394
+ if(p==='da') return 'da';
395
+ if(p==='no'||p==='nb'||p==='nn') return 'no';
396
+ if(p==='sv') return 'sv';
397
+ if(p==='fi') return 'fi';
398
+ if(p==='de') return 'de';
399
+ if(p==='fr') return 'fr';
400
+ if(p==='pt') return 'pt';
401
+ if(p==='ar') return 'ar';
402
+ if(p==='bn') return 'bn';
403
+ return 'en';
404
+ }`;
405
+
144
406
  // src/assets/style.css
145
407
  var style_default = `/**
146
408
  * NO EDITAR A MANO \u2014 generado por scripts/vendor-survey-css.mjs
147
409
  *
148
- * Copia de @magicfeedback/native@2.2.8 \u2192 dist/styles/magicfeedback-default.css
410
+ * Copia de @magicfeedback/native@2.2.22 \u2192 dist/styles/magicfeedback-default.css
149
411
  * (la hoja can\xF3nica del paquete, la que apunta su campo "style"), con estos cambios locales:
150
412
  *
151
413
  * 1. Sin el @import de Google Fonts (Nunito): no queremos una petici\xF3n externa desde la
@@ -365,7 +627,7 @@ var style_default = `/**
365
627
  font-weight: var(--mf-font-weight-bold);
366
628
  line-height: 1.3;
367
629
  margin: var(--mf-space-lg) 0 var(--mf-space-sm);
368
- text-align: left;
630
+ text-align: start;
369
631
  }
370
632
 
371
633
  .magicfeedback-info-message h1, .magicfeedback-start-message h1 { font-size: var(--mf-font-size-xl); }
@@ -404,7 +666,7 @@ var style_default = `/**
404
666
  .magicfeedback-start-message ul,
405
667
  .magicfeedback-start-message ol {
406
668
  margin: 0 0 var(--mf-space-md);
407
- padding-left: var(--mf-space-xl);
669
+ padding-inline-start: var(--mf-space-xl);
408
670
  color: var(--mf-text-secondary);
409
671
  line-height: var(--mf-line-height);
410
672
  }
@@ -418,7 +680,7 @@ var style_default = `/**
418
680
  .magicfeedback-start-message blockquote {
419
681
  margin: 0 0 var(--mf-space-md);
420
682
  padding: var(--mf-space-sm) var(--mf-space-md);
421
- border-left: 3px solid var(--mf-primary-border);
683
+ border-inline-start: 3px solid var(--mf-primary-border);
422
684
  color: var(--mf-text-secondary);
423
685
  font-style: italic;
424
686
  }
@@ -507,7 +769,7 @@ var style_default = `/**
507
769
  font-weight: var(--mf-font-weight-bold);
508
770
  color: var(--mf-text-primary);
509
771
  line-height: var(--mf-line-height);
510
- text-align: left;
772
+ text-align: start;
511
773
  letter-spacing: -0.01em;
512
774
  }
513
775
 
@@ -583,7 +845,7 @@ var style_default = `/**
583
845
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M6 9L1 4h10z'/%3E%3C/svg%3E");
584
846
  background-repeat: no-repeat;
585
847
  background-position: right var(--mf-space-md) center;
586
- padding-right: var(--mf-space-xl);
848
+ padding-inline-end: var(--mf-space-xl);
587
849
  }
588
850
 
589
851
  /* Error State */
@@ -647,7 +909,7 @@ div.magicfeedback-radio {
647
909
  .magicfeedback-checkbox label,
648
910
  .magicfeedback-radio-container label {
649
911
  font-size: var(--mf-font-size-base);
650
- text-align: left;
912
+ text-align: start;
651
913
  color: var(--mf-text-primary);
652
914
  cursor: pointer;
653
915
  margin: 0;
@@ -745,7 +1007,7 @@ div.magicfeedback-radio {
745
1007
  }
746
1008
 
747
1009
  .magicfeedback-rating-placeholder-value:last-child {
748
- text-align: right;
1010
+ text-align: end;
749
1011
  }
750
1012
 
751
1013
  /* Rating with Images */
@@ -828,7 +1090,7 @@ div.magicfeedback-radio {
828
1090
  }
829
1091
 
830
1092
  .magicfeedback-rating-number-scale-label:last-child {
831
- text-align: right;
1093
+ text-align: end;
832
1094
  }
833
1095
 
834
1096
  /* Column, no per-option text: each row is its own separated chip, so
@@ -1146,7 +1408,7 @@ div.magicfeedback-radio {
1146
1408
  }
1147
1409
 
1148
1410
  .magicfeedback-multi-question-matrix-label {
1149
- text-align: left;
1411
+ text-align: start;
1150
1412
  font-size: var(--mf-font-size-base);
1151
1413
  color: var(--mf-text-primary);
1152
1414
  }
@@ -1181,7 +1443,7 @@ div.magicfeedback-radio {
1181
1443
  .magicfeedback-priority-list-item-label {
1182
1444
  flex: 1;
1183
1445
  font-size: var(--mf-font-size-base);
1184
- text-align: left;
1446
+ text-align: start;
1185
1447
  color: var(--mf-text-primary);
1186
1448
  margin: 0;
1187
1449
  }
@@ -1273,7 +1535,7 @@ div.magicfeedback-radio {
1273
1535
  .magicfeedback-consent-container label {
1274
1536
  flex: 1;
1275
1537
  font-size: var(--mf-font-size-sm);
1276
- text-align: left;
1538
+ text-align: start;
1277
1539
  color: var(--mf-text-secondary);
1278
1540
  line-height: var(--mf-line-height);
1279
1541
  cursor: pointer;
@@ -1425,7 +1687,7 @@ div.magicfeedback-radio {
1425
1687
  }
1426
1688
 
1427
1689
  .magicfeedback-modal-counter {
1428
- margin-right: auto;
1690
+ margin-inline-end: auto;
1429
1691
  display: flex;
1430
1692
  align-items: center;
1431
1693
  font-size: 14px;
@@ -1670,7 +1932,7 @@ div.magicfeedback-radio {
1670
1932
  .magicfeedback-modal-close {
1671
1933
  position: absolute;
1672
1934
  top: 8px;
1673
- right: 8px;
1935
+ inset-inline-end: 8px;
1674
1936
  background: transparent;
1675
1937
  border: none;
1676
1938
  font-size: 20px;
@@ -1891,6 +2153,55 @@ div.magicfeedback-radio {
1891
2153
  display: block;
1892
2154
  }
1893
2155
 
2156
+ /* ========================================
2157
+ RTL (Arabic)
2158
+ ========================================
2159
+ The SDK stamps dir="rtl" (and .magicfeedback-rtl) on the survey container
2160
+ for right-to-left languages. Everything else in this stylesheet uses logical
2161
+ properties (text-align: start, padding-inline-*, inset-inline-*), so it
2162
+ mirrors on its own; only the handful of rules that cannot be expressed
2163
+ logically live here.
2164
+
2165
+ Rules are scoped to [dir="rtl"] inside our own subtree so a host page that is
2166
+ itself RTL, or one that embeds an Arabic survey in an LTR page, both render
2167
+ correctly. */
2168
+
2169
+ /* background-position has no logical form: move the select caret to the
2170
+ left edge, opposite the padding that inset-inline-end already mirrored. */
2171
+ [dir="rtl"] select {
2172
+ background-position: left var(--mf-space-md) center;
2173
+ }
2174
+
2175
+ /* Emails, URLs, numbers, dates and phone numbers are latin/numeric content
2176
+ even in an Arabic survey: keep their own direction LTR so punctuation
2177
+ (@, ., +, /) lands where the user expects, but align them to the start of
2178
+ the RTL line so they still read as part of the form. */
2179
+ [dir="rtl"] input[type="email"],
2180
+ [dir="rtl"] input[type="url"],
2181
+ [dir="rtl"] input[type="number"],
2182
+ [dir="rtl"] input[type="tel"],
2183
+ [dir="rtl"] input[type="date"],
2184
+ [dir="rtl"] input[type="time"] {
2185
+ direction: ltr;
2186
+ text-align: right;
2187
+ }
2188
+
2189
+ /* Mirror of mf-slide-in: questions enter from the reading edge. */
2190
+ @keyframes mf-slide-in-rtl {
2191
+ from {
2192
+ opacity: 0;
2193
+ transform: translateX(16px);
2194
+ }
2195
+ to {
2196
+ opacity: 1;
2197
+ transform: translateX(0);
2198
+ }
2199
+ }
2200
+
2201
+ [dir="rtl"] .magicfeedback-div {
2202
+ animation-name: mf-slide-in-rtl;
2203
+ }
2204
+
1894
2205
  /* ========================================
1895
2206
  LOCAL \u2014 reglas del popup, no vienen del paquete
1896
2207
  ======================================== */
@@ -1935,10 +2246,16 @@ export {
1935
2246
  TrackingManager,
1936
2247
  buildFontFamilyValue,
1937
2248
  buildFontFaceCss,
2249
+ LABELS,
2250
+ RTL_LOCALES,
2251
+ directionFor,
2252
+ getLabels,
2253
+ resolveActionLabels,
2254
+ RESOLVE_LOCALE_JS,
1938
2255
  style_default,
1939
2256
  setLogger,
1940
2257
  sdkLog,
1941
2258
  sdkWarn,
1942
2259
  sdkError
1943
2260
  };
1944
- //# sourceMappingURL=chunk-Z3LLJMSH.mjs.map
2261
+ //# sourceMappingURL=chunk-WNIUIOKF.mjs.map