@alfadocs/ui-kit-debug 1.91.0 → 1.92.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/README.md +24 -0
- package/dist/_chunks/{practice-results-CQ_KvEXK.js → practice-results-Bls-mygM.js} +383 -361
- package/dist/_chunks/practice-results-Bls-mygM.js.map +1 -0
- package/dist/_chunks/{booking-opt_h7Uc.js → reserved.agent-C1gLyK2R.js} +1031 -1011
- package/dist/_chunks/reserved.agent-C1gLyK2R.js.map +1 -0
- package/dist/ag-grid.css +2746 -0
- package/dist/agent-catalog.json +15 -1
- package/dist/apexcharts.css +40 -0
- package/dist/components/booking/index.d.ts +3 -0
- package/dist/components/booking/index.d.ts.map +1 -1
- package/dist/components/booking/index.js +6 -4
- package/dist/components/booking/reserved.agent.d.ts +4 -0
- package/dist/components/booking/reserved.agent.d.ts.map +1 -0
- package/dist/components/booking/reserved.d.ts +9 -6
- package/dist/components/booking/reserved.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/practice-results/practice-results.d.ts +1 -1
- package/dist/components/practice-results/practice-results.d.ts.map +1 -1
- package/dist/core.css +2 -0
- package/dist/fullcalendar.css +56 -0
- package/dist/i18n/config.d.ts.map +1 -1
- package/dist/i18n/config.js +81 -81
- package/dist/i18n/config.js.map +1 -1
- package/dist/i18n/locales/ar.d.ts +1 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +2 -1
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +1 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +2 -1
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +1 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +2 -1
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +3 -2
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +2 -1
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +1 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +2 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +1 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +2 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +1 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +2 -1
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +1 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +2 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +1 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +2 -1
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +1 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +2 -1
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +1 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +2 -1
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +1 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +2 -1
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +1 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +2 -1
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +1 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +2 -1
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +1 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +2 -1
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +1 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +2 -1
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +1 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +2 -1
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +1 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +2 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +451 -449
- package/dist/locales/ar.json +2 -1
- package/dist/locales/de.json +2 -1
- package/dist/locales/el.json +2 -1
- package/dist/locales/en.json +2 -1
- package/dist/locales/es.json +2 -1
- package/dist/locales/fr.json +2 -1
- package/dist/locales/hi.json +2 -1
- package/dist/locales/it.json +2 -1
- package/dist/locales/ja.json +2 -1
- package/dist/locales/nl.json +2 -1
- package/dist/locales/pl.json +2 -1
- package/dist/locales/pt.json +2 -1
- package/dist/locales/ro.json +2 -1
- package/dist/locales/ru.json +2 -1
- package/dist/locales/sq.json +2 -1
- package/dist/locales/sv.json +2 -1
- package/dist/locales/tr.json +2 -1
- package/dist/locales/zh.json +2 -1
- package/dist/redactor.css +54 -0
- package/package.json +10 -3
- package/dist/_chunks/booking-opt_h7Uc.js.map +0 -1
- package/dist/_chunks/practice-results-CQ_KvEXK.js.map +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
@layer utilities{.ds\:\[\&_\.fc-scrollgrid-section-header\.fc-scrollgrid-section-sticky\>\*\]\:\!top-\[var\(--inc1-header-offset\,0px\)\] .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:var(--inc1-header-offset,0px)!important}.ds\:\[\&_\.fc-view\]\:\!overflow-visible .fc-view,.ds\:\[\&_\.fc-view\>table\]\:\!overflow-visible .fc-view>table{overflow:visible!important}.ds\:\[\&_\:is\(\.fc-event\,\.fc-bg-event_button\,\.fc-daygrid-more-link\,a\[data-navlink\]\)\]\:\[scroll-margin-block-start\:var\(--inc1-pinned-block-size\,0px\)\] :is(.fc-event,.fc-bg-event button,.fc-daygrid-more-link,a[data-navlink]){scroll-margin-block-start:var(--inc1-pinned-block-size,0px)}}
|
|
2
|
+
@media(prefers-reduced-motion:reduce){
|
|
3
|
+
.fc-theme-alfadocs .fc-event,.fc-theme-alfadocs .fc-button{transition:none!important}
|
|
4
|
+
.fc-theme-alfadocs .calendar-event-focused{transition:none}
|
|
5
|
+
.fc-theme-alfadocs .calendar-col-loading{animation:none}}
|
|
6
|
+
@media(forced-colors:active){
|
|
7
|
+
.fc-theme-alfadocs .calendar-event-selected{outline-color:Highlight}
|
|
8
|
+
.fc-theme-alfadocs.calendar-availability-mode a.fc-event:not(.calendar-event-selected){opacity:1}
|
|
9
|
+
.fc-theme-alfadocs.calendar-composing-mode a.fc-event:not(.calendar-event-draft,.calendar-event-selected){opacity:1}
|
|
10
|
+
.fc-theme-alfadocs .calendar-col-loading{animation:none;outline:1px dashed CanvasText;outline-offset:-1px}}
|
|
11
|
+
.fc-theme-alfadocs{--fc-page-bg-color: var(--background);--fc-neutral-bg-color: var(--background);--fc-neutral-text-color: var(--foreground);--fc-border-color: var(--border);--fc-today-bg-color: color-mix(in srgb, var(--accent) 8%, transparent);--fc-event-bg-color: transparent;--fc-event-border-color: transparent;--fc-event-text-color: var(--foreground);--fc-event-selected-overlay-color: color-mix( in srgb, var(--foreground) 12%, transparent );--fc-now-indicator-color: var(--now-indicator);--fc-list-event-hover-bg-color: color-mix( in srgb, var(--muted) 50%, transparent );--fc-highlight-color: color-mix(in srgb, var(--primary) 12%, transparent);font-family:var(--font-sans);color:var(--foreground);background:var(--background)}
|
|
12
|
+
.fc-theme-alfadocs .fc-button{background-color:var(--secondary);border-color:var(--border);color:var(--secondary-foreground);font-family:var(--font-sans);font-weight:var(--font-weight-medium);border-radius:var(--radius-md);transition:background-color var(--animation-duration) var(--ease-out);min-block-size:var(--min-target-size);padding-inline:var(--spacing-md)}
|
|
13
|
+
.fc-theme-alfadocs .fc-button:hover{background-color:var(--secondary-hover)}
|
|
14
|
+
.fc-theme-alfadocs .fc-button-primary:not(:disabled).fc-button-active,.fc-theme-alfadocs .fc-button-primary:not(:disabled):active{background-color:var(--primary);border-color:var(--primary);color:var(--primary-foreground)}
|
|
15
|
+
.fc-theme-alfadocs .fc-button:focus-visible{outline:var(--focus-ring-width) solid var(--ring);outline-offset:var(--focus-ring-offset)}
|
|
16
|
+
.fc-theme-alfadocs a.fc-event:focus-visible{outline:var(--focus-ring-width) solid var(--ring);outline-offset:var(--focus-ring-offset)}
|
|
17
|
+
.fc-theme-alfadocs :is(.fc-timegrid-event-harness,.fc-daygrid-event-harness,.fc-timeline-event-harness):has(>:is(a.fc-event:focus-visible,.calendar-event-focused,.calendar-event-selected)){z-index:50!important}
|
|
18
|
+
.fc-theme-alfadocs .fc-button:disabled{opacity:var(--opacity-50);cursor:not-allowed}
|
|
19
|
+
.fc-theme-alfadocs .fc-resource{min-block-size:var(--min-target-size)}
|
|
20
|
+
.fc-theme-alfadocs .fc-timegrid-slot{block-size:var(--calendar-slot-size, var(--calendar-slot-size-compact))}
|
|
21
|
+
.fc-theme-alfadocs.calendar-density-comfortable{--calendar-slot-size: var(--calendar-slot-size-comfortable)}
|
|
22
|
+
.fc-theme-alfadocs .fc-event,.fc-theme-alfadocs .fc-event-main{border-radius:var(--radius-sm);font-size:var(--font-size-sm);padding-inline:0}
|
|
23
|
+
.fc-theme-alfadocs .fc-timegrid-event .fc-event-main{padding:0}
|
|
24
|
+
.fc-theme-alfadocs .fc-list-event-dot{border-color:var(--muted-foreground)}
|
|
25
|
+
.fc-theme-alfadocs .fc-daygrid-more-link{background-color:var(--background);color:var(--foreground);border:1px solid var(--border);border-radius:var(--radius-sm);padding-inline:var(--spacing-xs);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);text-decoration:none;min-block-size:var(--min-target-size);display:inline-flex;align-items:center}
|
|
26
|
+
.fc-theme-alfadocs .fc-daygrid-more-link:hover{background-color:var(--muted)}
|
|
27
|
+
.fc-theme-alfadocs .fc-daygrid-more-link:focus-visible{outline:var(--focus-ring-width) solid var(--ring);outline-offset:var(--focus-ring-offset)}
|
|
28
|
+
.fc-theme-alfadocs .calendar-event-focused{outline:none;box-shadow:var(--shadow-focus);transition:box-shadow var(--animation-duration) var(--ease-out)}
|
|
29
|
+
.fc-theme-alfadocs .resource-dot{display:inline-block;inline-size:12px;block-size:12px;border-radius:var(--radius-full);margin-inline-end:var(--spacing-xs);vertical-align:middle;flex-shrink:0;background-color:var(--border)}
|
|
30
|
+
.fc-theme-alfadocs:not(.calendar-vertical-resource-labels) .fc-resource.fc-col-header-cell .fc-col-header-cell-cushion{max-inline-size:100%;box-sizing:border-box}
|
|
31
|
+
.fc-theme-alfadocs .calendar-resource-label{min-inline-size:0;max-inline-size:100%}
|
|
32
|
+
.fc-theme-alfadocs .calendar-resource-label>span:last-child{min-inline-size:0}
|
|
33
|
+
.fc-theme-alfadocs .resource-initials{display:inline-flex;align-items:center;justify-content:center;inline-size:28px;block-size:28px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);margin-inline-end:var(--spacing-xs);background-color:var(--muted);color:var(--foreground)}
|
|
34
|
+
.fc-theme-alfadocs .fc-resource-timegrid-day-frame+.fc-resource-timegrid-day-frame,.fc-theme-alfadocs .fc-timeline-slot-frame[data-date]+.fc-timeline-slot-frame[data-date]{border-inline-start:2px solid var(--border)}
|
|
35
|
+
.fc-theme-alfadocs .fc-col-header-cell,.fc-theme-alfadocs .fc-col-header-cell.fc-day-today,.fc-theme-alfadocs .fc-timeline-header,.fc-theme-alfadocs .fc-timeline-header-row,.fc-theme-alfadocs .fc-timeline-slot-label,.fc-theme-alfadocs .fc-timeline-slot-label.fc-day-today,.fc-theme-alfadocs .fc-datagrid-header,.fc-theme-alfadocs .fc-datagrid-header .fc-datagrid-cell{background-color:var(--background)}
|
|
36
|
+
.fc-theme-alfadocs .calendar-col-hidden{display:none}
|
|
37
|
+
.fc-theme-alfadocs .calendar-event-selected{outline:var(--focus-ring-width) solid var(--ring);outline-offset:1px}
|
|
38
|
+
.fc-theme-alfadocs.calendar-availability-mode .fc-bg-event{background:color-mix(in srgb,var(--success) 8%,transparent);opacity:1;border:1px solid var(--success);border-radius:var(--radius-sm);margin:1px;cursor:pointer;transition:background-color var(--animation-duration) var(--ease-out),box-shadow var(--animation-duration) var(--ease-out);display:flex;align-items:center;justify-content:center}
|
|
39
|
+
.fc-theme-alfadocs.calendar-availability-mode .fc-bg-event>*{display:flex;align-items:center;justify-content:center;max-inline-size:100%}
|
|
40
|
+
.fc-theme-alfadocs.calendar-availability-mode .fc-bg-event:hover{background:color-mix(in srgb,var(--success) 16%,transparent);box-shadow:var(--shadow-sm)}
|
|
41
|
+
.fc-theme-alfadocs .calendar-bg-event-label{display:inline-flex;align-items:center;gap:var(--spacing-2xs);padding-inline:var(--spacing-xs);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--success-foreground);max-inline-size:100%;overflow:hidden;white-space:nowrap}
|
|
42
|
+
.fc-theme-alfadocs .fc-bg-event:has(button[data-event-id]){opacity:1}
|
|
43
|
+
.fc-theme-alfadocs.calendar-availability-mode a.fc-event:not(.calendar-event-selected,:has([data-kind=task])){opacity:.35}
|
|
44
|
+
.fc-theme-alfadocs.calendar-composing-mode a.fc-event:not(.calendar-event-draft,.calendar-event-selected,:has([data-kind=task])){opacity:.35}
|
|
45
|
+
.fc-theme-alfadocs.calendar-composing-mode a.fc-event.calendar-event-draft{cursor:grab}
|
|
46
|
+
.fc-theme-alfadocs.calendar-composing-mode a.fc-event.calendar-event-draft:active{cursor:grabbing}
|
|
47
|
+
.fc-theme-alfadocs .calendar-col-loading{background-image:repeating-linear-gradient(135deg,color-mix(in srgb,var(--muted-foreground) 14%,transparent) 0 6px,transparent 6px 12px);animation:calendar-col-loading-drift calc(var(--animation-duration) * 6) linear infinite}
|
|
48
|
+
@keyframes calendar-col-loading-drift{to{background-position:0 calc(12px * 1.4142)}}
|
|
49
|
+
.fc-theme-alfadocs .fc-resource.fc-col-header-cell .fc-col-header-cell-cushion{box-sizing:border-box;max-inline-size:100%}
|
|
50
|
+
.calendar-vertical-resource-labels .fc-resource.fc-col-header-cell .fc-col-header-cell-cushion:not(:has([data-component=resource-chip],[data-component=avatar])){writing-mode:vertical-rl;rotate:180deg;max-inline-size:7.5rem}
|
|
51
|
+
.calendar-vertical-resource-labels .fc-resource.fc-col-header-cell .fc-col-header-cell-cushion>span>span:last-child{min-inline-size:0}
|
|
52
|
+
.fc-theme-alfadocs .fc-timegrid-slot-label-cushion,.fc-theme-alfadocs .fc-timegrid-axis-cushion{font-size:var(--font-size-xs);color:var(--muted-foreground);font-variant-numeric:tabular-nums}
|
|
53
|
+
.fc-theme-alfadocs.calendar-zebra-rows .fc-timegrid-slots tr:nth-child(odd){background-color:color-mix(in srgb,var(--muted) 70%,transparent)}
|
|
54
|
+
.fc-theme-alfadocs .fc .fc-scrollgrid{border-width:0}
|
|
55
|
+
.fc-theme-alfadocs .fc .fc-scrollgrid-section>td{border-right-width:0}
|
|
56
|
+
.fc-theme-alfadocs .fc .fc-scrollgrid>tbody>tr:last-child>td{border-bottom-width:0}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/i18n/config.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,KAAK,IAAI,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/i18n/config.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,KAAK,IAAI,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAgD7D,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIlE;AAqUD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,YAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAEf;AAwJD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,GAAE,YAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,0DAA0D;AAC1D,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,YAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,+DAA+D;AAC/D,wBAAsB,cAAc,CAClC,QAAQ,GAAE,YAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAIf;AA4CD,eAAe,OAAO,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/i18n/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { default as
|
|
3
|
-
import { initReactI18next as
|
|
4
|
-
const
|
|
1
|
+
import f from "i18next";
|
|
2
|
+
import { default as Q } from "i18next";
|
|
3
|
+
import { initReactI18next as N } from "react-i18next";
|
|
4
|
+
const F = [
|
|
5
5
|
"en",
|
|
6
6
|
"it",
|
|
7
7
|
"de",
|
|
@@ -21,7 +21,7 @@ const W = [
|
|
|
21
21
|
"zh",
|
|
22
22
|
"hi"
|
|
23
23
|
];
|
|
24
|
-
function
|
|
24
|
+
function T(e, r, t = f) {
|
|
25
25
|
t.addResourceBundle(
|
|
26
26
|
e,
|
|
27
27
|
"ui",
|
|
@@ -51,8 +51,8 @@ const A = !1, L = {
|
|
|
51
51
|
ja: () => import("./locales/ja.js").then((e) => e.jaUi),
|
|
52
52
|
zh: () => import("./locales/zh.js").then((e) => e.zhUi),
|
|
53
53
|
hi: () => import("./locales/hi.js").then((e) => e.hiUi)
|
|
54
|
-
}, q = /* @__PURE__ */ new WeakMap();
|
|
55
|
-
function
|
|
54
|
+
}, q = /* @__PURE__ */ new WeakMap(), S = /* @__PURE__ */ new WeakSet();
|
|
55
|
+
function B(e) {
|
|
56
56
|
if (!e) return;
|
|
57
57
|
const r = e.toLowerCase().replaceAll("_", "-").split("-")[0];
|
|
58
58
|
return Object.hasOwn(L, r) ? r : void 0;
|
|
@@ -69,28 +69,28 @@ function p(e) {
|
|
|
69
69
|
waiters: /* @__PURE__ */ new Set(),
|
|
70
70
|
requested: /* @__PURE__ */ new Set()
|
|
71
71
|
};
|
|
72
|
-
q.set(e, t),
|
|
72
|
+
q.set(e, t), M(e, t);
|
|
73
73
|
const i = e.changeLanguage.bind(e);
|
|
74
74
|
return e.changeLanguage = (n, o) => {
|
|
75
75
|
const u = ++t.languageRequest;
|
|
76
76
|
if (!n) return i(n, o);
|
|
77
|
-
const
|
|
78
|
-
(
|
|
79
|
-
), g = e.options.supportedLngs && !l ?
|
|
77
|
+
const a = e.services.languageUtils, s = B(n), h = e.getDataByLanguage(n), l = s && s !== n && I(n, e).includes(s) && h && Object.keys(h).some(
|
|
78
|
+
(d) => d !== "ui" || t.completed.get(n) !== e.getResourceBundle(n, "ui")
|
|
79
|
+
), g = e.options.supportedLngs && !l ? a.getBestMatchFromCodes([n]) : n;
|
|
80
80
|
if (!g) {
|
|
81
|
-
const
|
|
82
|
-
return o == null || o(null,
|
|
81
|
+
const d = e.t.bind(e);
|
|
82
|
+
return o == null || o(null, d), Promise.resolve(d);
|
|
83
83
|
}
|
|
84
84
|
return t.changing++, R(g, e).then(
|
|
85
85
|
() => {
|
|
86
86
|
if (u !== t.languageRequest) {
|
|
87
|
-
const
|
|
88
|
-
return o == null || o(null,
|
|
87
|
+
const d = e.t.bind(e);
|
|
88
|
+
return o == null || o(null, d), d;
|
|
89
89
|
}
|
|
90
90
|
return i(g, o);
|
|
91
91
|
},
|
|
92
|
-
(
|
|
93
|
-
throw o == null || o(
|
|
92
|
+
(d) => {
|
|
93
|
+
throw o == null || o(d, e.t.bind(e)), d;
|
|
94
94
|
}
|
|
95
95
|
).finally(() => {
|
|
96
96
|
t.changing--;
|
|
@@ -100,53 +100,53 @@ function p(e) {
|
|
|
100
100
|
}), U(t);
|
|
101
101
|
}), e.on("languageChanged", () => U(t)), t;
|
|
102
102
|
}
|
|
103
|
-
function
|
|
103
|
+
function M(e, r) {
|
|
104
104
|
const t = e.hasLoadedNamespace.bind(e);
|
|
105
|
-
e.hasLoadedNamespace = (u,
|
|
106
|
-
const
|
|
107
|
-
return
|
|
105
|
+
e.hasLoadedNamespace = (u, a) => {
|
|
106
|
+
const s = t(u, a);
|
|
107
|
+
return y(u) && e.isInitialized && b(
|
|
108
108
|
e,
|
|
109
109
|
r,
|
|
110
|
-
typeof (
|
|
111
|
-
),
|
|
110
|
+
typeof (a == null ? void 0 : a.lng) == "string" ? a.lng : e.language
|
|
111
|
+
), s;
|
|
112
112
|
};
|
|
113
113
|
const i = e.t.bind(e);
|
|
114
114
|
e.t = ((...u) => {
|
|
115
|
-
const
|
|
116
|
-
return typeof
|
|
115
|
+
const a = i(...u);
|
|
116
|
+
return typeof a == "string" && O(e, r, u) ? "" : a;
|
|
117
117
|
});
|
|
118
118
|
const n = e.loadNamespaces.bind(e);
|
|
119
|
-
e.loadNamespaces = (u,
|
|
119
|
+
e.loadNamespaces = (u, a) => y(u) ? P(e, r).then(() => n(u, a)) : n(u, a);
|
|
120
120
|
const o = e.loadLanguages.bind(e);
|
|
121
|
-
e.loadLanguages = (u,
|
|
122
|
-
const
|
|
123
|
-
return !e.isInitialized ||
|
|
124
|
-
|
|
125
|
-
).then(() => o(u,
|
|
121
|
+
e.loadLanguages = (u, a) => {
|
|
122
|
+
const s = (Array.isArray(u) ? u : [u]).map((l) => m(l, e)).filter((l) => !!l), h = [].concat(e.options.ns ?? []);
|
|
123
|
+
return !e.isInitialized || s.length === 0 || !h.includes("ui") ? o(u, a) : Promise.all(
|
|
124
|
+
s.map((l) => c(l, e).catch(() => !1))
|
|
125
|
+
).then(() => o(u, a));
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
|
-
function
|
|
128
|
+
function O(e, r, t) {
|
|
129
129
|
if (!e.isInitialized) return !1;
|
|
130
130
|
const i = [t[1], t[2]].find(
|
|
131
|
-
(
|
|
131
|
+
(s) => typeof s == "object" && s !== null
|
|
132
132
|
), n = Array.isArray(t[0]) ? t[0][0] : t[0], u = (typeof n == "string" && n.includes(":") ? n.split(":")[0] : "") || (i == null ? void 0 : i.ns) || e.options.defaultNS;
|
|
133
|
-
if (!u || !
|
|
134
|
-
const
|
|
135
|
-
return w(e,
|
|
133
|
+
if (!u || !y(u)) return !1;
|
|
134
|
+
const a = typeof (i == null ? void 0 : i.lng) == "string" ? i.lng : e.language;
|
|
135
|
+
return w(e, a) ? !1 : (b(e, r, a), !0);
|
|
136
136
|
}
|
|
137
137
|
function b(e, r, t) {
|
|
138
138
|
if (!t || w(e, t)) return;
|
|
139
139
|
const i = m(t, e);
|
|
140
|
-
i && (t === e.language && r.changing > 0 || (r.requested.add(i),
|
|
140
|
+
i && (t === e.language && r.changing > 0 || (r.requested.add(i), c(i, e).catch((n) => {
|
|
141
141
|
})));
|
|
142
142
|
}
|
|
143
|
-
const
|
|
143
|
+
const y = (e) => typeof e == "string" ? e === "ui" : e.includes("ui");
|
|
144
144
|
function w(e, r) {
|
|
145
145
|
if (!r) return !0;
|
|
146
146
|
const t = m(r, e);
|
|
147
147
|
if (!t) return !0;
|
|
148
148
|
const i = p(e);
|
|
149
|
-
return
|
|
149
|
+
return x(t, e).every(
|
|
150
150
|
(n) => v(n, e, i) || i.failed.has(n) || j(n, e)
|
|
151
151
|
);
|
|
152
152
|
}
|
|
@@ -154,7 +154,7 @@ function j(e, r) {
|
|
|
154
154
|
const t = r.getResourceBundle(e, "ui");
|
|
155
155
|
return !!(t != null && t.common && t.errorPage);
|
|
156
156
|
}
|
|
157
|
-
function
|
|
157
|
+
function P(e, r) {
|
|
158
158
|
return e.isInitialized && w(e, e.language) ? Promise.resolve() : new Promise((t) => {
|
|
159
159
|
const i = () => {
|
|
160
160
|
e.isInitialized && w(e, e.language) && (r.waiters.delete(i), t());
|
|
@@ -166,19 +166,19 @@ function O(e, r) {
|
|
|
166
166
|
function U(e) {
|
|
167
167
|
for (const r of [...e.waiters]) r();
|
|
168
168
|
}
|
|
169
|
-
function
|
|
169
|
+
function I(e, r) {
|
|
170
170
|
return r.services.languageUtils.toResolveHierarchy(e);
|
|
171
171
|
}
|
|
172
172
|
async function R(e, r) {
|
|
173
173
|
const t = m(e, r);
|
|
174
|
-
return t ?
|
|
174
|
+
return t ? c(t, r) : !1;
|
|
175
175
|
}
|
|
176
176
|
function m(e, r) {
|
|
177
|
-
return [.../* @__PURE__ */ new Set([e, ...
|
|
177
|
+
return [.../* @__PURE__ */ new Set([e, ...I(e, r)])].filter(Boolean).find((t) => B(t));
|
|
178
178
|
}
|
|
179
|
-
function
|
|
180
|
-
const t =
|
|
181
|
-
return e !== t && !
|
|
179
|
+
function x(e, r) {
|
|
180
|
+
const t = B(e);
|
|
181
|
+
return e !== t && !I(e, r).includes(t) ? [t, e] : [t];
|
|
182
182
|
}
|
|
183
183
|
function v(e, r, t) {
|
|
184
184
|
const i = r.getResourceBundle(e, "ui");
|
|
@@ -187,22 +187,22 @@ function v(e, r, t) {
|
|
|
187
187
|
async function z(e) {
|
|
188
188
|
p(e).changing > 0 || await R(e.language, e);
|
|
189
189
|
}
|
|
190
|
-
async function
|
|
191
|
-
await
|
|
190
|
+
async function E(e, r = f) {
|
|
191
|
+
await c(e, r);
|
|
192
192
|
}
|
|
193
|
-
async function
|
|
193
|
+
async function c(e, r) {
|
|
194
194
|
if (!r.isInitialized)
|
|
195
195
|
throw new Error(
|
|
196
196
|
"Initialise the host i18next instance before loading UI locales."
|
|
197
197
|
);
|
|
198
|
-
const t =
|
|
198
|
+
const t = B(e);
|
|
199
199
|
if (!t) return !1;
|
|
200
|
-
const i = p(r), n =
|
|
201
|
-
if (n.every((
|
|
200
|
+
const i = p(r), n = x(e, r);
|
|
201
|
+
if (n.every((s) => v(s, r, i)))
|
|
202
202
|
return !1;
|
|
203
203
|
const o = n.join(":"), u = i.pending.get(o);
|
|
204
204
|
if (u) return u.then(() => !1);
|
|
205
|
-
const
|
|
205
|
+
const a = (async () => {
|
|
206
206
|
try {
|
|
207
207
|
const l = await L[t]();
|
|
208
208
|
r.addResourceBundle(t, "ui", l, !0, !1);
|
|
@@ -215,29 +215,29 @@ async function y(e, r) {
|
|
|
215
215
|
!1
|
|
216
216
|
), i.completed.set(g, r.getResourceBundle(g, "ui"));
|
|
217
217
|
} catch (l) {
|
|
218
|
-
throw await
|
|
218
|
+
throw await H(t, n, r, i), l;
|
|
219
219
|
}
|
|
220
|
-
const
|
|
221
|
-
U(i), (
|
|
220
|
+
const s = n.some((l) => i.failed.delete(l)), h = i.requested.delete(t);
|
|
221
|
+
U(i), (s || h || m(r.language, r) === t) && r.emit("languageChanged", r.language);
|
|
222
222
|
})();
|
|
223
|
-
i.pending.set(o,
|
|
223
|
+
i.pending.set(o, a);
|
|
224
224
|
try {
|
|
225
|
-
await
|
|
225
|
+
await a;
|
|
226
226
|
} finally {
|
|
227
227
|
i.pending.delete(o);
|
|
228
228
|
}
|
|
229
229
|
return !0;
|
|
230
230
|
}
|
|
231
|
-
async function
|
|
231
|
+
async function H(e, r, t, i) {
|
|
232
232
|
const n = i.waiters.size > 0 || i.requested.has(e) || m(t.language, t) === e;
|
|
233
233
|
if (i.requested.delete(e), !n) {
|
|
234
234
|
for (const o of r) i.failed.add(o);
|
|
235
235
|
return;
|
|
236
236
|
}
|
|
237
237
|
try {
|
|
238
|
-
e !== "en" && !C(t, i).includes("en") && await
|
|
238
|
+
e !== "en" && !C(t, i).includes("en") && await c("en", t).catch(() => !1);
|
|
239
239
|
const o = C(t, i);
|
|
240
|
-
o.length > 0 ?
|
|
240
|
+
o.length > 0 ? K(t, o[0]) : W(t);
|
|
241
241
|
} finally {
|
|
242
242
|
for (const o of r) i.failed.add(o);
|
|
243
243
|
U(i), t.isInitialized && t.emit("languageChanged", t.language);
|
|
@@ -248,7 +248,7 @@ function C(e, r) {
|
|
|
248
248
|
(t) => v(t, e, r) || j(t, e)
|
|
249
249
|
);
|
|
250
250
|
}
|
|
251
|
-
function
|
|
251
|
+
function K(e, r) {
|
|
252
252
|
const t = e.options.fallbackLng, i = (n) => typeof n == "string" ? [n] : Array.isArray(n) ? n : [];
|
|
253
253
|
if (!(typeof t == "function" || t === !1)) {
|
|
254
254
|
if (t && typeof t == "object" && !Array.isArray(t)) {
|
|
@@ -259,30 +259,30 @@ function H(e, r) {
|
|
|
259
259
|
i(t).includes(r) || (e.options.fallbackLng = [...i(t), r]);
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
|
-
function
|
|
262
|
+
function W(e) {
|
|
263
263
|
e.options.parseMissingKeyHandler || (e.options.parseMissingKeyHandler = (r, t, i) => {
|
|
264
264
|
if (t !== void 0) return t;
|
|
265
|
-
if (!(i != null && i.ns) || !
|
|
265
|
+
if (!(i != null && i.ns) || !y(i.ns)) return r;
|
|
266
266
|
const o = (r.split(/[.:]/).at(-1) ?? r).replace(/([a-z0-9])([A-Z])/g, "$1 $2").replaceAll("_", " ").toLowerCase();
|
|
267
267
|
return o.charAt(0).toUpperCase() + o.slice(1);
|
|
268
268
|
});
|
|
269
269
|
}
|
|
270
|
-
async function
|
|
270
|
+
async function $(e = f) {
|
|
271
271
|
if (!e.isInitialized)
|
|
272
272
|
throw new Error(
|
|
273
273
|
"Initialise the host i18next instance before setting up UI translations."
|
|
274
274
|
);
|
|
275
275
|
p(e), await R(e.language, e);
|
|
276
276
|
}
|
|
277
|
-
async function
|
|
277
|
+
async function V(e, r = f) {
|
|
278
278
|
p(r), await r.changeLanguage(e);
|
|
279
279
|
}
|
|
280
|
-
async function
|
|
280
|
+
async function Z(e = f) {
|
|
281
281
|
await Promise.all(
|
|
282
|
-
Object.keys(L).map((r) =>
|
|
282
|
+
Object.keys(L).map((r) => E(r, e))
|
|
283
283
|
);
|
|
284
284
|
}
|
|
285
|
-
|
|
285
|
+
f.isInitialized || (S.add(f), f.use(N).init({
|
|
286
286
|
lng: "en",
|
|
287
287
|
fallbackLng: "en",
|
|
288
288
|
ns: ["ui"],
|
|
@@ -294,20 +294,20 @@ d.isInitialized || d.use(x).init({
|
|
|
294
294
|
interpolation: { escapeValue: !1 },
|
|
295
295
|
// English arrives through the lazy loader below, like every other locale.
|
|
296
296
|
resources: {}
|
|
297
|
-
});
|
|
298
|
-
p(
|
|
299
|
-
Promise.resolve().then(
|
|
300
|
-
() =>
|
|
297
|
+
}));
|
|
298
|
+
p(f);
|
|
299
|
+
S.has(f) || Promise.resolve().then(
|
|
300
|
+
() => f.isInitialized ? z(f) : void 0
|
|
301
301
|
).catch((e) => {
|
|
302
302
|
});
|
|
303
303
|
export {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
304
|
+
F as LOCALES_WITH_BUNDLES,
|
|
305
|
+
Q as default,
|
|
306
|
+
$ as initialiseUiI18n,
|
|
307
|
+
Z as loadAllLocales,
|
|
308
|
+
E as loadLocale,
|
|
309
|
+
T as registerUiBundle,
|
|
310
|
+
B as resolveUiLanguage,
|
|
311
|
+
V as setLocale
|
|
312
312
|
};
|
|
313
313
|
//# sourceMappingURL=config.js.map
|
package/dist/i18n/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../src/i18n/supported-locales.ts","../../src/i18n/registerUiBundle.ts","../../src/i18n/config.ts"],"sourcesContent":["/**\n * Locales that ship a JSON bundle. Consumer apps register these via\n * `i18n.addResourceBundle(locale, 'ui', bundle)` — see docs/06-i18n.mdx.\n * Locales not listed here fall back to English through i18next's own\n * `fallbackLng` resolution.\n */\nexport const LOCALES_WITH_BUNDLES = [\n 'en',\n 'it',\n 'de',\n 'ar',\n 'fr',\n 'es',\n 'pt',\n 'nl',\n 'ro',\n 'sq',\n 'tr',\n 'pl',\n 'sv',\n 'ru',\n 'el',\n 'ja',\n 'zh',\n 'hi',\n] as const;\n","import i18next, { type i18n as I18nInstance } from 'i18next';\n\n/**\n * Register or extend the `ui` namespace bundle for a locale.\n *\n * Adds missing keys to the installed i18next singleton without overwriting\n * existing translations. All 18 kit locales ship already. Load a bundled\n * locale at any time: loading fills missing keys and preserves existing values.\n * Keep app copy in the host namespace. Request upstream language review for\n * corrections to existing kit strings; this helper does not overwrite them.\n */\nexport function registerUiBundle(\n locale: string,\n bundle: Record<string, unknown>,\n instance: I18nInstance = i18next,\n): void {\n instance.addResourceBundle(\n locale,\n 'ui',\n bundle,\n /* deep */ true,\n /* overwrite */ false,\n );\n}\n","import i18next, { type i18n as I18nInstance } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nconst IS_DEV = import.meta.env?.DEV === true;\n\n// English is a lazy chunk like every other locale: nothing in this module\n// graph imports `./locales/en.ts` statically, so a consumer that runs in\n// Italian never downloads it (HTP-7057).\nconst LOADERS: Record<string, () => Promise<Record<string, unknown>>> = {\n en: () => import('./locales/en.ts').then((m) => m.enUi),\n it: () => import('./locales/it.ts').then((m) => m.itUi),\n de: () => import('./locales/de.ts').then((m) => m.deUi),\n ar: () => import('./locales/ar.ts').then((m) => m.arUi),\n fr: () => import('./locales/fr.ts').then((m) => m.frUi),\n es: () => import('./locales/es.ts').then((m) => m.esUi),\n pt: () => import('./locales/pt.ts').then((m) => m.ptUi),\n nl: () => import('./locales/nl.ts').then((m) => m.nlUi),\n ro: () => import('./locales/ro.ts').then((m) => m.roUi),\n sq: () => import('./locales/sq.ts').then((m) => m.sqUi),\n tr: () => import('./locales/tr.ts').then((m) => m.trUi),\n pl: () => import('./locales/pl.ts').then((m) => m.plUi),\n sv: () => import('./locales/sv.ts').then((m) => m.svUi),\n ru: () => import('./locales/ru.ts').then((m) => m.ruUi),\n el: () => import('./locales/el.ts').then((m) => m.elUi),\n ja: () => import('./locales/ja.ts').then((m) => m.jaUi),\n zh: () => import('./locales/zh.ts').then((m) => m.zhUi),\n hi: () => import('./locales/hi.ts').then((m) => m.hiUi),\n};\n\n// Completion belongs to a resource bundle, not just a language code. A host\n// can register a partial bundle or replace its store with a later init().\ninterface InstanceState {\n languageRequest: number;\n /** changeLanguage() calls whose bundle is still on its way. */\n changing: number;\n completed: Map<string, unknown>;\n /** Kit languages whose last load failed and has not been retried to success. */\n failed: Set<string>;\n pending: Map<string, Promise<void>>;\n /** Callers waiting for the active language's bundle to be in the store. */\n waiters: Set<() => void>;\n /** Kit languages a reader asked for, so their arrival redraws them. */\n requested: Set<string>;\n}\nconst instances = new WeakMap<I18nInstance, InstanceState>();\n\n/** Resolve a translation language without changing the host's formatting tag. */\nexport function resolveUiLanguage(code: string): string | undefined {\n if (!code) return undefined;\n const base = code.toLowerCase().replaceAll('_', '-').split('-')[0];\n return Object.hasOwn(LOADERS, base) ? base : undefined;\n}\n\nfunction attachInstance(instance: I18nInstance): InstanceState {\n const existing = instances.get(instance);\n if (existing) return existing;\n const state: InstanceState = {\n languageRequest: 0,\n changing: 0,\n completed: new Map(),\n failed: new Set(),\n pending: new Map(),\n waiters: new Set(),\n requested: new Set(),\n };\n instances.set(instance, state);\n installReadiness(instance, state);\n const originalChangeLanguage = instance.changeLanguage.bind(instance);\n instance.changeLanguage = (lng, callback) => {\n const request = ++state.languageRequest;\n if (!lng) return originalChangeLanguage(lng, callback);\n // Kit bundles must not trigger i18next's existing-resource shortcut for\n // a language the host explicitly excludes through supportedLngs.\n const languageUtils = instance.services.languageUtils as {\n getBestMatchFromCodes: (codes: string[]) => string | undefined;\n };\n const base = resolveUiLanguage(lng);\n const regionalResources = instance.getDataByLanguage(lng);\n const hostOwnsRegion =\n base &&\n base !== lng &&\n resolutionChain(lng, instance).includes(base) &&\n regionalResources &&\n Object.keys(regionalResources).some(\n (namespace) =>\n namespace !== 'ui' ||\n state.completed.get(lng) !== instance.getResourceBundle(lng, 'ui'),\n );\n const selected =\n instance.options.supportedLngs && !hostOwnsRegion\n ? languageUtils.getBestMatchFromCodes([lng])\n : lng;\n if (!selected) {\n const translate = instance.t.bind(instance);\n callback?.(null, translate);\n return Promise.resolve(translate);\n }\n state.changing++;\n return loadResolutionChain(selected, instance)\n .then(\n () => {\n // A cold import must not overtake a newer, already loaded selection.\n if (request !== state.languageRequest) {\n const translate = instance.t.bind(instance);\n callback?.(null, translate);\n return translate;\n }\n return originalChangeLanguage(selected, callback);\n },\n (error: unknown) => {\n callback?.(error, instance.t.bind(instance));\n throw error;\n },\n )\n .finally(() => {\n state.changing--;\n });\n };\n instance.on('initialized', () => {\n // i18next events cannot be awaited. Hosts await initialiseUiI18n() before\n // rendering; this opportunistic load also restores ordinary re-init usage.\n void restoreActiveLanguage(instance).catch((error: unknown) => {\n if (IS_DEV)\n console.warn('[i18n] Could not restore the UI locale.', error);\n });\n settleWaiters(state);\n });\n instance.on('languageChanged', () => settleWaiters(state));\n return state;\n}\n\n/**\n * Never suspend, and never draw a raw key, while a kit bundle is on the way\n * (HTP-7057).\n *\n * Without a backend, i18next calls every namespace loaded, so react-i18next\n * never suspends for `ui`. That is deliberate: a suspend with no `<Suspense>`\n * above it throws during a synchronous React 18 render (legacy\n * `ReactDOM.render`, `flushSync`, a root or state update in a click handler)\n * and unmounts the root. Instead:\n *\n * - `t()` returns an empty string for the `ui` namespace while the active\n * language's bundle is not in the store (see `blankWhilePending`);\n * - the first reader of a missing bundle starts its load, and the arrival of\n * the bundle emits `languageChanged`, which react-i18next listens to, so\n * mounted components redraw with text.\n *\n * A language switch is not affected: the kit changes language only after the\n * new bundle is in the store, so the old text stays on screen.\n */\nfunction installReadiness(instance: I18nInstance, state: InstanceState): void {\n const hasLoadedNamespace = instance.hasLoadedNamespace.bind(instance);\n instance.hasLoadedNamespace = (ns, options) => {\n const answer = hasLoadedNamespace(ns, options);\n if (usesUi(ns) && instance.isInitialized)\n requestUi(\n instance,\n state,\n typeof options?.lng === 'string' ? options.lng : instance.language,\n );\n return answer;\n };\n const translate = instance.t.bind(instance) as unknown as (\n ...args: unknown[]\n ) => unknown;\n instance.t = ((...args: unknown[]) => {\n const result = translate(...args);\n return typeof result === 'string' &&\n blankWhilePending(instance, state, args)\n ? ''\n : result;\n }) as unknown as typeof instance.t;\n const loadNamespaces = instance.loadNamespaces.bind(instance);\n instance.loadNamespaces = (ns, callback) =>\n usesUi(ns)\n ? whenUiReady(instance, state).then(() => loadNamespaces(ns, callback))\n : loadNamespaces(ns, callback);\n // react-i18next asks for `useTranslation('ui', { lng })` through\n // loadLanguages(). Load that language's kit bundle first. A failed load\n // settles too: the request never rejects.\n const loadLanguages = instance.loadLanguages.bind(instance);\n instance.loadLanguages = (lngs, callback) => {\n const wanted = (Array.isArray(lngs) ? lngs : [lngs])\n .map((code) => firstKitLanguage(code, instance))\n .filter((code): code is string => Boolean(code));\n const ui = ([] as string[]).concat(instance.options.ns ?? []);\n if (!instance.isInitialized || wanted.length === 0 || !ui.includes('ui'))\n return loadLanguages(lngs, callback);\n return Promise.all(\n wanted.map((code) => ensureLocale(code, instance).catch(() => false)),\n ).then(() => loadLanguages(lngs, callback));\n };\n}\n\n/**\n * True when this `t()` call reads the `ui` namespace of a language whose kit\n * bundle has not landed. The one place that decides \"blank\".\n */\nfunction blankWhilePending(\n instance: I18nInstance,\n state: InstanceState,\n args: unknown[],\n): boolean {\n if (!instance.isInitialized) return false;\n const options = [args[1], args[2]].find(\n (arg): arg is { ns?: unknown; lng?: unknown } =>\n typeof arg === 'object' && arg !== null,\n );\n const key = Array.isArray(args[0]) ? args[0][0] : args[0];\n const prefix =\n typeof key === 'string' && key.includes(':') ? key.split(':')[0] : '';\n const ns = prefix || options?.ns || instance.options.defaultNS;\n if (!ns || !usesUi(ns as string | readonly string[])) return false;\n const lng =\n typeof options?.lng === 'string' ? options.lng : instance.language;\n if (isUiReady(instance, lng)) return false;\n // Whoever reads text first starts the load.\n requestUi(instance, state, lng);\n return true;\n}\n\n/**\n * Start loading the bundle a reader is waiting for, if nothing is. Safe to\n * call from render: loads are shared, and a failed one counts as settled.\n */\nfunction requestUi(\n instance: I18nInstance,\n state: InstanceState,\n code: string | undefined,\n): void {\n if (!code || isUiReady(instance, code)) return;\n const first = firstKitLanguage(code, instance);\n if (!first) return;\n // A language change in flight loads its own bundle (see restoreActiveLanguage).\n if (code === instance.language && state.changing > 0) return;\n state.requested.add(first);\n ensureLocale(first, instance).catch((error: unknown) => {\n if (IS_DEV) console.warn('[i18n] Could not load the UI locale.', error);\n });\n}\n\nconst usesUi = (ns: string | readonly string[]): boolean =>\n typeof ns === 'string' ? ns === 'ui' : ns.includes('ui');\n\n/**\n * True when `code` needs no kit bundle, or its load has settled: the bundle is\n * in the store, a host registered the kit's own bundle, or the load failed\n * and the store has been left to fall back (see `degrade`). False means kit\n * text for `code` is blank for now.\n */\nfunction isUiReady(instance: I18nInstance, code: string | undefined): boolean {\n if (!code) return true;\n const first = firstKitLanguage(code, instance);\n if (!first) return true;\n const state = attachInstance(instance);\n return bundleTargets(first, instance).every(\n (target) =>\n isBundleCurrent(target, instance, state) ||\n state.failed.has(target) ||\n isHostBundle(target, instance),\n );\n}\n\n/**\n * A `ui` bundle the host registered itself, for example the JSON from\n * `@alfadocs/ui-kit/locales/<lang>`. It counts as ready when it is a whole\n * bundle (it holds the `common` and `errorPage` groups); a partial one, such\n * as a few keys added with registerUiBundle(), does not.\n */\nfunction isHostBundle(target: string, instance: I18nInstance): boolean {\n const resource = instance.getResourceBundle(target, 'ui') as\n | Record<string, unknown>\n | undefined;\n return Boolean(resource?.common && resource.errorPage);\n}\n\n/**\n * Resolve when the active language's bundle is in the store. If nothing is\n * loading it, start the load. A failed load settles every waiter too (see\n * `degrade`): a component renders from what the store holds and never stays\n * blank. The host still sees the rejection from its own awaited call, and a\n * retry that succeeds redraws the components.\n */\nfunction whenUiReady(\n instance: I18nInstance,\n state: InstanceState,\n): Promise<void> {\n if (instance.isInitialized && isUiReady(instance, instance.language))\n return Promise.resolve();\n return new Promise((resolve) => {\n const waiter = () => {\n if (instance.isInitialized && isUiReady(instance, instance.language)) {\n state.waiters.delete(waiter);\n resolve();\n }\n };\n state.waiters.add(waiter);\n if (instance.isInitialized && state.changing === 0) {\n restoreActiveLanguage(instance).catch((error: unknown) => {\n if (IS_DEV) console.warn('[i18n] Could not load the UI locale.', error);\n });\n }\n });\n}\n\nfunction settleWaiters(state: InstanceState): void {\n for (const waiter of [...state.waiters]) waiter();\n}\n\n/** Delegate fallback and supported-language rules to i18next itself. */\nfunction resolutionChain(code: string, instance: I18nInstance): string[] {\n const languageUtils = instance.services.languageUtils as {\n toResolveHierarchy: (language: string) => string[];\n };\n return languageUtils.toResolveHierarchy(code);\n}\n\n/**\n * Load the first kit-covered language in the resolution chain. Every kit\n * bundle is complete (check:i18n-parity), so a later fallback such as English\n * can never supply a missing `ui` key and is not downloaded. English loads\n * only when it is the active language, or when nothing before it in the chain\n * has a kit bundle (for example Korean falling back to English).\n */\nasync function loadResolutionChain(\n code: string,\n instance: I18nInstance,\n): Promise<boolean> {\n const first = firstKitLanguage(code, instance);\n return first ? ensureLocale(first, instance) : false;\n}\n\nfunction firstKitLanguage(\n code: string,\n instance: I18nInstance,\n): string | undefined {\n return [...new Set([code, ...resolutionChain(code, instance)])]\n .filter(Boolean)\n .find((language) => resolveUiLanguage(language));\n}\n\n/**\n * The language tags a kit bundle is registered under. currentOnly and\n * region-only supportedLngs can exclude the base language, so the requested\n * tag is registered too in that case, without changing host policy.\n */\nfunction bundleTargets(code: string, instance: I18nInstance): string[] {\n const language = resolveUiLanguage(code) as string;\n return code !== language &&\n !resolutionChain(code, instance).includes(language)\n ? [language, code]\n : [language];\n}\n\nfunction isBundleCurrent(\n target: string,\n instance: I18nInstance,\n state: InstanceState,\n): boolean {\n const resource = instance.getResourceBundle(target, 'ui');\n return Boolean(resource) && state.completed.get(target) === resource;\n}\n\n/**\n * Load the active language's bundle. `ensureLocale` tells mounted components\n * when it arrives (react-i18next redraws on `languageChanged`, not on\n * resources being added).\n */\nasync function restoreActiveLanguage(instance: I18nInstance): Promise<void> {\n // A language change in flight loads its own bundle. Loading the language\n // that is about to be left would fetch a bundle nobody needs (English, on\n // a host that starts in English and then switches to Italian).\n if (attachInstance(instance).changing > 0) return;\n await loadResolutionChain(instance.language, instance);\n}\n\n/**\n * Merge a complete kit bundle, keeping host overrides. Regional tags share\n * their base translation bundle; the instance language remains untouched.\n * Lazy-import failures reject and can be retried.\n */\nexport async function loadLocale(\n code: string,\n instance: I18nInstance = i18next,\n): Promise<void> {\n await ensureLocale(code, instance);\n}\n\n/** Resolves true when this call loaded a bundle, false when it was a no-op. */\nasync function ensureLocale(\n code: string,\n instance: I18nInstance,\n): Promise<boolean> {\n if (!instance.isInitialized) {\n throw new Error(\n 'Initialise the host i18next instance before loading UI locales.',\n );\n }\n const language = resolveUiLanguage(code);\n if (!language) return false;\n const state = attachInstance(instance);\n const targets = bundleTargets(code, instance);\n if (targets.every((target) => isBundleCurrent(target, instance, state)))\n return false;\n const requestKey = targets.join(':');\n const pending = state.pending.get(requestKey);\n if (pending) return pending.then(() => false);\n const request = (async () => {\n try {\n const bundle = await LOADERS[language]();\n instance.addResourceBundle(language, 'ui', bundle, true, false);\n for (const target of targets) {\n if (target !== language)\n instance.addResourceBundle(\n target,\n 'ui',\n instance.getResourceBundle(language, 'ui'),\n true,\n false,\n );\n state.completed.set(target, instance.getResourceBundle(target, 'ui'));\n }\n } catch (error) {\n await degrade(language, targets, instance, state);\n throw error;\n }\n // Redraw the components that were blank, or showing a fallback, for it.\n const retried = targets.some((target) => state.failed.delete(target));\n const wasAsked = state.requested.delete(language);\n settleWaiters(state);\n if (\n retried ||\n wasAsked ||\n firstKitLanguage(instance.language, instance) === language\n )\n instance.emit('languageChanged', instance.language);\n })();\n state.pending.set(requestKey, request);\n try {\n await request;\n } finally {\n state.pending.delete(requestKey);\n }\n return true;\n}\n\n/**\n * A kit bundle failed to load (offline, a flaky CDN, a stale chunk hash).\n * Settle the waiters so no text stays blank, and leave the store\n * able to answer, in this order:\n *\n * 1. English, tried once, because it is the usual `fallbackLng`. Skipped when\n * English is the one that failed.\n * 2. Any kit language whose bundle is in the store, added to the end of the\n * instance's `fallbackLng` chain, so the text is readable though not in the\n * visitor's language.\n * 3. The kit's built-in minimum, when nothing is loaded at all: a missing\n * `ui` key reads as its last segment, written as words (\"common.saveAll\"\n * shows \"Save all\"), never as the raw key. The host's own\n * `parseMissingKeyHandler`, if it set one, is left alone.\n */\nasync function degrade(\n language: string,\n targets: string[],\n instance: I18nInstance,\n state: InstanceState,\n): Promise<void> {\n // A language nobody is showing or waiting for needs no fallback: the page\n // keeps what it has, and an Italian page never fetches English.\n const wanted =\n state.waiters.size > 0 ||\n state.requested.has(language) ||\n firstKitLanguage(instance.language, instance) === language;\n state.requested.delete(language);\n if (!wanted) {\n for (const target of targets) state.failed.add(target);\n return;\n }\n try {\n if (language !== 'en' && !usableLanguages(instance, state).includes('en'))\n await ensureLocale('en', instance).catch(() => false);\n const usable = usableLanguages(instance, state);\n if (usable.length > 0) addFallbackLanguage(instance, usable[0]);\n else installBuiltInMinimum(instance);\n } finally {\n // Only now is the failure \"settled\": until the fallback is in place the\n // components stay held back, so none draws a raw key in between.\n for (const target of targets) state.failed.add(target);\n settleWaiters(state);\n if (instance.isInitialized)\n instance.emit('languageChanged', instance.language);\n }\n}\n\n/** Kit languages with a bundle in the store, loaded or host-registered. */\nfunction usableLanguages(\n instance: I18nInstance,\n state: InstanceState,\n): string[] {\n return Object.keys(LOADERS).filter(\n (code) =>\n isBundleCurrent(code, instance, state) || isHostBundle(code, instance),\n );\n}\n\nfunction addFallbackLanguage(instance: I18nInstance, code: string): void {\n const current = instance.options.fallbackLng as unknown;\n const list = (value: unknown): string[] =>\n typeof value === 'string' ? [value] : Array.isArray(value) ? value : [];\n if (typeof current === 'function' || current === false) return;\n if (current && typeof current === 'object' && !Array.isArray(current)) {\n const map = current as Record<string, string[]>;\n if (!list(map.default).includes(code))\n map.default = [...list(map.default), code];\n return;\n }\n if (!list(current).includes(code))\n instance.options.fallbackLng = [...list(current), code];\n}\n\nfunction installBuiltInMinimum(instance: I18nInstance): void {\n if (instance.options.parseMissingKeyHandler) return;\n instance.options.parseMissingKeyHandler = (\n key: string,\n defaultValue?: string,\n options?: { ns?: string | readonly string[] },\n ): string => {\n if (defaultValue !== undefined) return defaultValue;\n if (!options?.ns || !usesUi(options.ns)) return key;\n const last = key.split(/[.:]/).at(-1) ?? key;\n const words = last\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replaceAll('_', ' ')\n .toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n };\n}\n\n/**\n * Await after host init(), before rendering. Also supports createInstance()\n * hosts: pass this same instance to I18nextProvider. Never reinitialises a host.\n */\nexport async function initialiseUiI18n(\n instance: I18nInstance = i18next,\n): Promise<void> {\n if (!instance.isInitialized) {\n throw new Error(\n 'Initialise the host i18next instance before setting up UI translations.',\n );\n }\n attachInstance(instance);\n await loadResolutionChain(instance.language, instance);\n}\n\n/** Load the requested bundle before changing language. */\nexport async function setLocale(\n code: string,\n instance: I18nInstance = i18next,\n): Promise<void> {\n attachInstance(instance);\n await instance.changeLanguage(code);\n}\n\n/** Load all 18 bundles on a singleton or provider instance. */\nexport async function loadAllLocales(\n instance: I18nInstance = i18next,\n): Promise<void> {\n await Promise.all(\n Object.keys(LOADERS).map((code) => loadLocale(code, instance)),\n );\n}\n\n// Bootstrap only a genuinely uninitialised singleton. A library must preserve\n// a consumer's default namespace, language, fallbacks and application resources.\nif (!i18next.isInitialized) {\n void i18next.use(initReactI18next).init({\n lng: 'en',\n fallbackLng: 'en',\n ns: ['ui'],\n defaultNS: 'ui',\n partialBundledLanguages: true,\n debug: IS_DEV,\n saveMissing: IS_DEV,\n missingKeyHandler: IS_DEV\n ? (lngs, ns, key) => {\n console.warn(\n `[i18n] Missing key \"${key}\" in namespace \"${ns}\" for locales [${lngs.join(', ')}].`,\n );\n }\n : undefined,\n interpolation: { escapeValue: false },\n // English arrives through the lazy loader below, like every other locale.\n resources: {},\n });\n}\nattachInstance(i18next);\n// One microtask later, so a host that calls setLocale() in the same script\n// (before it renders) has its language change in flight, and the default\n// English is not fetched for an Italian page.\nvoid Promise.resolve()\n .then(() =>\n i18next.isInitialized ? restoreActiveLanguage(i18next) : undefined,\n )\n .catch((error: unknown) => {\n if (IS_DEV)\n console.warn('[i18n] Could not load the initial UI locale.', error);\n });\n\nexport default i18next;\nexport { LOCALES_WITH_BUNDLES } from './supported-locales';\nexport { registerUiBundle } from './registerUiBundle';\n"],"names":["LOCALES_WITH_BUNDLES","registerUiBundle","locale","bundle","instance","i18next","IS_DEV","LOADERS","m","instances","resolveUiLanguage","code","base","attachInstance","existing","state","installReadiness","originalChangeLanguage","lng","callback","request","languageUtils","regionalResources","hostOwnsRegion","resolutionChain","namespace","selected","translate","loadResolutionChain","error","restoreActiveLanguage","settleWaiters","hasLoadedNamespace","ns","options","answer","usesUi","requestUi","args","result","blankWhilePending","loadNamespaces","whenUiReady","loadLanguages","lngs","wanted","firstKitLanguage","ui","ensureLocale","arg","key","isUiReady","first","bundleTargets","target","isBundleCurrent","isHostBundle","resource","resolve","waiter","language","loadLocale","targets","requestKey","pending","degrade","retried","wasAsked","usableLanguages","usable","addFallbackLanguage","current","list","value","map","installBuiltInMinimum","defaultValue","words","initialiseUiI18n","setLocale","loadAllLocales","initReactI18next"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../src/i18n/supported-locales.ts","../../src/i18n/registerUiBundle.ts","../../src/i18n/config.ts"],"sourcesContent":["/**\n * Locales that ship a JSON bundle. Consumer apps register these via\n * `i18n.addResourceBundle(locale, 'ui', bundle)` — see docs/06-i18n.mdx.\n * Locales not listed here fall back to English through i18next's own\n * `fallbackLng` resolution.\n */\nexport const LOCALES_WITH_BUNDLES = [\n 'en',\n 'it',\n 'de',\n 'ar',\n 'fr',\n 'es',\n 'pt',\n 'nl',\n 'ro',\n 'sq',\n 'tr',\n 'pl',\n 'sv',\n 'ru',\n 'el',\n 'ja',\n 'zh',\n 'hi',\n] as const;\n","import i18next, { type i18n as I18nInstance } from 'i18next';\n\n/**\n * Register or extend the `ui` namespace bundle for a locale.\n *\n * Adds missing keys to the installed i18next singleton without overwriting\n * existing translations. All 18 kit locales ship already. Load a bundled\n * locale at any time: loading fills missing keys and preserves existing values.\n * Keep app copy in the host namespace. Request upstream language review for\n * corrections to existing kit strings; this helper does not overwrite them.\n */\nexport function registerUiBundle(\n locale: string,\n bundle: Record<string, unknown>,\n instance: I18nInstance = i18next,\n): void {\n instance.addResourceBundle(\n locale,\n 'ui',\n bundle,\n /* deep */ true,\n /* overwrite */ false,\n );\n}\n","import i18next, { type i18n as I18nInstance } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nconst IS_DEV = import.meta.env?.DEV === true;\n\n// English is a lazy chunk like every other locale: nothing in this module\n// graph imports `./locales/en.ts` statically, so a consumer that runs in\n// Italian never downloads it (HTP-7057).\nconst LOADERS: Record<string, () => Promise<Record<string, unknown>>> = {\n en: () => import('./locales/en.ts').then((m) => m.enUi),\n it: () => import('./locales/it.ts').then((m) => m.itUi),\n de: () => import('./locales/de.ts').then((m) => m.deUi),\n ar: () => import('./locales/ar.ts').then((m) => m.arUi),\n fr: () => import('./locales/fr.ts').then((m) => m.frUi),\n es: () => import('./locales/es.ts').then((m) => m.esUi),\n pt: () => import('./locales/pt.ts').then((m) => m.ptUi),\n nl: () => import('./locales/nl.ts').then((m) => m.nlUi),\n ro: () => import('./locales/ro.ts').then((m) => m.roUi),\n sq: () => import('./locales/sq.ts').then((m) => m.sqUi),\n tr: () => import('./locales/tr.ts').then((m) => m.trUi),\n pl: () => import('./locales/pl.ts').then((m) => m.plUi),\n sv: () => import('./locales/sv.ts').then((m) => m.svUi),\n ru: () => import('./locales/ru.ts').then((m) => m.ruUi),\n el: () => import('./locales/el.ts').then((m) => m.elUi),\n ja: () => import('./locales/ja.ts').then((m) => m.jaUi),\n zh: () => import('./locales/zh.ts').then((m) => m.zhUi),\n hi: () => import('./locales/hi.ts').then((m) => m.hiUi),\n};\n\n// Completion belongs to a resource bundle, not just a language code. A host\n// can register a partial bundle or replace its store with a later init().\ninterface InstanceState {\n languageRequest: number;\n /** changeLanguage() calls whose bundle is still on its way. */\n changing: number;\n completed: Map<string, unknown>;\n /** Kit languages whose last load failed and has not been retried to success. */\n failed: Set<string>;\n pending: Map<string, Promise<void>>;\n /** Callers waiting for the active language's bundle to be in the store. */\n waiters: Set<() => void>;\n /** Kit languages a reader asked for, so their arrival redraws them. */\n requested: Set<string>;\n}\nconst instances = new WeakMap<I18nInstance, InstanceState>();\n/** Instances the kit itself initialised with its default `lng: 'en'`. */\nconst kitBootstrapped = new WeakSet<I18nInstance>();\n\n/** Resolve a translation language without changing the host's formatting tag. */\nexport function resolveUiLanguage(code: string): string | undefined {\n if (!code) return undefined;\n const base = code.toLowerCase().replaceAll('_', '-').split('-')[0];\n return Object.hasOwn(LOADERS, base) ? base : undefined;\n}\n\nfunction attachInstance(instance: I18nInstance): InstanceState {\n const existing = instances.get(instance);\n if (existing) return existing;\n const state: InstanceState = {\n languageRequest: 0,\n changing: 0,\n completed: new Map(),\n failed: new Set(),\n pending: new Map(),\n waiters: new Set(),\n requested: new Set(),\n };\n instances.set(instance, state);\n installReadiness(instance, state);\n const originalChangeLanguage = instance.changeLanguage.bind(instance);\n instance.changeLanguage = (lng, callback) => {\n const request = ++state.languageRequest;\n if (!lng) return originalChangeLanguage(lng, callback);\n // Kit bundles must not trigger i18next's existing-resource shortcut for\n // a language the host explicitly excludes through supportedLngs.\n const languageUtils = instance.services.languageUtils as {\n getBestMatchFromCodes: (codes: string[]) => string | undefined;\n };\n const base = resolveUiLanguage(lng);\n const regionalResources = instance.getDataByLanguage(lng);\n const hostOwnsRegion =\n base &&\n base !== lng &&\n resolutionChain(lng, instance).includes(base) &&\n regionalResources &&\n Object.keys(regionalResources).some(\n (namespace) =>\n namespace !== 'ui' ||\n state.completed.get(lng) !== instance.getResourceBundle(lng, 'ui'),\n );\n const selected =\n instance.options.supportedLngs && !hostOwnsRegion\n ? languageUtils.getBestMatchFromCodes([lng])\n : lng;\n if (!selected) {\n const translate = instance.t.bind(instance);\n callback?.(null, translate);\n return Promise.resolve(translate);\n }\n state.changing++;\n return loadResolutionChain(selected, instance)\n .then(\n () => {\n // A cold import must not overtake a newer, already loaded selection.\n if (request !== state.languageRequest) {\n const translate = instance.t.bind(instance);\n callback?.(null, translate);\n return translate;\n }\n return originalChangeLanguage(selected, callback);\n },\n (error: unknown) => {\n callback?.(error, instance.t.bind(instance));\n throw error;\n },\n )\n .finally(() => {\n state.changing--;\n });\n };\n instance.on('initialized', () => {\n // i18next events cannot be awaited. Hosts await initialiseUiI18n() before\n // rendering; this opportunistic load also restores ordinary re-init usage.\n void restoreActiveLanguage(instance).catch((error: unknown) => {\n if (IS_DEV)\n console.warn('[i18n] Could not restore the UI locale.', error);\n });\n settleWaiters(state);\n });\n instance.on('languageChanged', () => settleWaiters(state));\n return state;\n}\n\n/**\n * Never suspend, and never draw a raw key, while a kit bundle is on the way\n * (HTP-7057).\n *\n * Without a backend, i18next calls every namespace loaded, so react-i18next\n * never suspends for `ui`. That is deliberate: a suspend with no `<Suspense>`\n * above it throws during a synchronous React 18 render (legacy\n * `ReactDOM.render`, `flushSync`, a root or state update in a click handler)\n * and unmounts the root. Instead:\n *\n * - `t()` returns an empty string for the `ui` namespace while the active\n * language's bundle is not in the store (see `blankWhilePending`);\n * - the first reader of a missing bundle starts its load, and the arrival of\n * the bundle emits `languageChanged`, which react-i18next listens to, so\n * mounted components redraw with text.\n *\n * A language switch is not affected: the kit changes language only after the\n * new bundle is in the store, so the old text stays on screen.\n */\nfunction installReadiness(instance: I18nInstance, state: InstanceState): void {\n const hasLoadedNamespace = instance.hasLoadedNamespace.bind(instance);\n instance.hasLoadedNamespace = (ns, options) => {\n const answer = hasLoadedNamespace(ns, options);\n if (usesUi(ns) && instance.isInitialized)\n requestUi(\n instance,\n state,\n typeof options?.lng === 'string' ? options.lng : instance.language,\n );\n return answer;\n };\n const translate = instance.t.bind(instance) as unknown as (\n ...args: unknown[]\n ) => unknown;\n instance.t = ((...args: unknown[]) => {\n const result = translate(...args);\n return typeof result === 'string' &&\n blankWhilePending(instance, state, args)\n ? ''\n : result;\n }) as unknown as typeof instance.t;\n const loadNamespaces = instance.loadNamespaces.bind(instance);\n instance.loadNamespaces = (ns, callback) =>\n usesUi(ns)\n ? whenUiReady(instance, state).then(() => loadNamespaces(ns, callback))\n : loadNamespaces(ns, callback);\n // react-i18next asks for `useTranslation('ui', { lng })` through\n // loadLanguages(). Load that language's kit bundle first. A failed load\n // settles too: the request never rejects.\n const loadLanguages = instance.loadLanguages.bind(instance);\n instance.loadLanguages = (lngs, callback) => {\n const wanted = (Array.isArray(lngs) ? lngs : [lngs])\n .map((code) => firstKitLanguage(code, instance))\n .filter((code): code is string => Boolean(code));\n const ui = ([] as string[]).concat(instance.options.ns ?? []);\n if (!instance.isInitialized || wanted.length === 0 || !ui.includes('ui'))\n return loadLanguages(lngs, callback);\n return Promise.all(\n wanted.map((code) => ensureLocale(code, instance).catch(() => false)),\n ).then(() => loadLanguages(lngs, callback));\n };\n}\n\n/**\n * True when this `t()` call reads the `ui` namespace of a language whose kit\n * bundle has not landed. The one place that decides \"blank\".\n */\nfunction blankWhilePending(\n instance: I18nInstance,\n state: InstanceState,\n args: unknown[],\n): boolean {\n if (!instance.isInitialized) return false;\n const options = [args[1], args[2]].find(\n (arg): arg is { ns?: unknown; lng?: unknown } =>\n typeof arg === 'object' && arg !== null,\n );\n const key = Array.isArray(args[0]) ? args[0][0] : args[0];\n const prefix =\n typeof key === 'string' && key.includes(':') ? key.split(':')[0] : '';\n const ns = prefix || options?.ns || instance.options.defaultNS;\n if (!ns || !usesUi(ns as string | readonly string[])) return false;\n const lng =\n typeof options?.lng === 'string' ? options.lng : instance.language;\n if (isUiReady(instance, lng)) return false;\n // Whoever reads text first starts the load.\n requestUi(instance, state, lng);\n return true;\n}\n\n/**\n * Start loading the bundle a reader is waiting for, if nothing is. Safe to\n * call from render: loads are shared, and a failed one counts as settled.\n */\nfunction requestUi(\n instance: I18nInstance,\n state: InstanceState,\n code: string | undefined,\n): void {\n if (!code || isUiReady(instance, code)) return;\n const first = firstKitLanguage(code, instance);\n if (!first) return;\n // A language change in flight loads its own bundle (see restoreActiveLanguage).\n if (code === instance.language && state.changing > 0) return;\n state.requested.add(first);\n ensureLocale(first, instance).catch((error: unknown) => {\n if (IS_DEV) console.warn('[i18n] Could not load the UI locale.', error);\n });\n}\n\nconst usesUi = (ns: string | readonly string[]): boolean =>\n typeof ns === 'string' ? ns === 'ui' : ns.includes('ui');\n\n/**\n * True when `code` needs no kit bundle, or its load has settled: the bundle is\n * in the store, a host registered the kit's own bundle, or the load failed\n * and the store has been left to fall back (see `degrade`). False means kit\n * text for `code` is blank for now.\n */\nfunction isUiReady(instance: I18nInstance, code: string | undefined): boolean {\n if (!code) return true;\n const first = firstKitLanguage(code, instance);\n if (!first) return true;\n const state = attachInstance(instance);\n return bundleTargets(first, instance).every(\n (target) =>\n isBundleCurrent(target, instance, state) ||\n state.failed.has(target) ||\n isHostBundle(target, instance),\n );\n}\n\n/**\n * A `ui` bundle the host registered itself, for example the JSON from\n * `@alfadocs/ui-kit/locales/<lang>`. It counts as ready when it is a whole\n * bundle (it holds the `common` and `errorPage` groups); a partial one, such\n * as a few keys added with registerUiBundle(), does not.\n */\nfunction isHostBundle(target: string, instance: I18nInstance): boolean {\n const resource = instance.getResourceBundle(target, 'ui') as\n | Record<string, unknown>\n | undefined;\n return Boolean(resource?.common && resource.errorPage);\n}\n\n/**\n * Resolve when the active language's bundle is in the store. If nothing is\n * loading it, start the load. A failed load settles every waiter too (see\n * `degrade`): a component renders from what the store holds and never stays\n * blank. The host still sees the rejection from its own awaited call, and a\n * retry that succeeds redraws the components.\n */\nfunction whenUiReady(\n instance: I18nInstance,\n state: InstanceState,\n): Promise<void> {\n if (instance.isInitialized && isUiReady(instance, instance.language))\n return Promise.resolve();\n return new Promise((resolve) => {\n const waiter = () => {\n if (instance.isInitialized && isUiReady(instance, instance.language)) {\n state.waiters.delete(waiter);\n resolve();\n }\n };\n state.waiters.add(waiter);\n if (instance.isInitialized && state.changing === 0) {\n restoreActiveLanguage(instance).catch((error: unknown) => {\n if (IS_DEV) console.warn('[i18n] Could not load the UI locale.', error);\n });\n }\n });\n}\n\nfunction settleWaiters(state: InstanceState): void {\n for (const waiter of [...state.waiters]) waiter();\n}\n\n/** Delegate fallback and supported-language rules to i18next itself. */\nfunction resolutionChain(code: string, instance: I18nInstance): string[] {\n const languageUtils = instance.services.languageUtils as {\n toResolveHierarchy: (language: string) => string[];\n };\n return languageUtils.toResolveHierarchy(code);\n}\n\n/**\n * Load the first kit-covered language in the resolution chain. Every kit\n * bundle is complete (check:i18n-parity), so a later fallback such as English\n * can never supply a missing `ui` key and is not downloaded. English loads\n * only when it is the active language, or when nothing before it in the chain\n * has a kit bundle (for example Korean falling back to English).\n */\nasync function loadResolutionChain(\n code: string,\n instance: I18nInstance,\n): Promise<boolean> {\n const first = firstKitLanguage(code, instance);\n return first ? ensureLocale(first, instance) : false;\n}\n\nfunction firstKitLanguage(\n code: string,\n instance: I18nInstance,\n): string | undefined {\n return [...new Set([code, ...resolutionChain(code, instance)])]\n .filter(Boolean)\n .find((language) => resolveUiLanguage(language));\n}\n\n/**\n * The language tags a kit bundle is registered under. currentOnly and\n * region-only supportedLngs can exclude the base language, so the requested\n * tag is registered too in that case, without changing host policy.\n */\nfunction bundleTargets(code: string, instance: I18nInstance): string[] {\n const language = resolveUiLanguage(code) as string;\n return code !== language &&\n !resolutionChain(code, instance).includes(language)\n ? [language, code]\n : [language];\n}\n\nfunction isBundleCurrent(\n target: string,\n instance: I18nInstance,\n state: InstanceState,\n): boolean {\n const resource = instance.getResourceBundle(target, 'ui');\n return Boolean(resource) && state.completed.get(target) === resource;\n}\n\n/**\n * Load the active language's bundle. `ensureLocale` tells mounted components\n * when it arrives (react-i18next redraws on `languageChanged`, not on\n * resources being added).\n */\nasync function restoreActiveLanguage(instance: I18nInstance): Promise<void> {\n // A language change in flight loads its own bundle. Loading the language\n // that is about to be left would fetch a bundle nobody needs (English, on\n // a host that starts in English and then switches to Italian).\n if (attachInstance(instance).changing > 0) return;\n await loadResolutionChain(instance.language, instance);\n}\n\n/**\n * Merge a complete kit bundle, keeping host overrides. Regional tags share\n * their base translation bundle; the instance language remains untouched.\n * Lazy-import failures reject and can be retried.\n */\nexport async function loadLocale(\n code: string,\n instance: I18nInstance = i18next,\n): Promise<void> {\n await ensureLocale(code, instance);\n}\n\n/** Resolves true when this call loaded a bundle, false when it was a no-op. */\nasync function ensureLocale(\n code: string,\n instance: I18nInstance,\n): Promise<boolean> {\n if (!instance.isInitialized) {\n throw new Error(\n 'Initialise the host i18next instance before loading UI locales.',\n );\n }\n const language = resolveUiLanguage(code);\n if (!language) return false;\n const state = attachInstance(instance);\n const targets = bundleTargets(code, instance);\n if (targets.every((target) => isBundleCurrent(target, instance, state)))\n return false;\n const requestKey = targets.join(':');\n const pending = state.pending.get(requestKey);\n if (pending) return pending.then(() => false);\n const request = (async () => {\n try {\n const bundle = await LOADERS[language]();\n instance.addResourceBundle(language, 'ui', bundle, true, false);\n for (const target of targets) {\n if (target !== language)\n instance.addResourceBundle(\n target,\n 'ui',\n instance.getResourceBundle(language, 'ui'),\n true,\n false,\n );\n state.completed.set(target, instance.getResourceBundle(target, 'ui'));\n }\n } catch (error) {\n await degrade(language, targets, instance, state);\n throw error;\n }\n // Redraw the components that were blank, or showing a fallback, for it.\n const retried = targets.some((target) => state.failed.delete(target));\n const wasAsked = state.requested.delete(language);\n settleWaiters(state);\n if (\n retried ||\n wasAsked ||\n firstKitLanguage(instance.language, instance) === language\n )\n instance.emit('languageChanged', instance.language);\n })();\n state.pending.set(requestKey, request);\n try {\n await request;\n } finally {\n state.pending.delete(requestKey);\n }\n return true;\n}\n\n/**\n * A kit bundle failed to load (offline, a flaky CDN, a stale chunk hash).\n * Settle the waiters so no text stays blank, and leave the store\n * able to answer, in this order:\n *\n * 1. English, tried once, because it is the usual `fallbackLng`. Skipped when\n * English is the one that failed.\n * 2. Any kit language whose bundle is in the store, added to the end of the\n * instance's `fallbackLng` chain, so the text is readable though not in the\n * visitor's language.\n * 3. The kit's built-in minimum, when nothing is loaded at all: a missing\n * `ui` key reads as its last segment, written as words (\"common.saveAll\"\n * shows \"Save all\"), never as the raw key. The host's own\n * `parseMissingKeyHandler`, if it set one, is left alone.\n */\nasync function degrade(\n language: string,\n targets: string[],\n instance: I18nInstance,\n state: InstanceState,\n): Promise<void> {\n // A language nobody is showing or waiting for needs no fallback: the page\n // keeps what it has, and an Italian page never fetches English.\n const wanted =\n state.waiters.size > 0 ||\n state.requested.has(language) ||\n firstKitLanguage(instance.language, instance) === language;\n state.requested.delete(language);\n if (!wanted) {\n for (const target of targets) state.failed.add(target);\n return;\n }\n try {\n if (language !== 'en' && !usableLanguages(instance, state).includes('en'))\n await ensureLocale('en', instance).catch(() => false);\n const usable = usableLanguages(instance, state);\n if (usable.length > 0) addFallbackLanguage(instance, usable[0]);\n else installBuiltInMinimum(instance);\n } finally {\n // Only now is the failure \"settled\": until the fallback is in place the\n // components stay held back, so none draws a raw key in between.\n for (const target of targets) state.failed.add(target);\n settleWaiters(state);\n if (instance.isInitialized)\n instance.emit('languageChanged', instance.language);\n }\n}\n\n/** Kit languages with a bundle in the store, loaded or host-registered. */\nfunction usableLanguages(\n instance: I18nInstance,\n state: InstanceState,\n): string[] {\n return Object.keys(LOADERS).filter(\n (code) =>\n isBundleCurrent(code, instance, state) || isHostBundle(code, instance),\n );\n}\n\nfunction addFallbackLanguage(instance: I18nInstance, code: string): void {\n const current = instance.options.fallbackLng as unknown;\n const list = (value: unknown): string[] =>\n typeof value === 'string' ? [value] : Array.isArray(value) ? value : [];\n if (typeof current === 'function' || current === false) return;\n if (current && typeof current === 'object' && !Array.isArray(current)) {\n const map = current as Record<string, string[]>;\n if (!list(map.default).includes(code))\n map.default = [...list(map.default), code];\n return;\n }\n if (!list(current).includes(code))\n instance.options.fallbackLng = [...list(current), code];\n}\n\nfunction installBuiltInMinimum(instance: I18nInstance): void {\n if (instance.options.parseMissingKeyHandler) return;\n instance.options.parseMissingKeyHandler = (\n key: string,\n defaultValue?: string,\n options?: { ns?: string | readonly string[] },\n ): string => {\n if (defaultValue !== undefined) return defaultValue;\n if (!options?.ns || !usesUi(options.ns)) return key;\n const last = key.split(/[.:]/).at(-1) ?? key;\n const words = last\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replaceAll('_', ' ')\n .toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n };\n}\n\n/**\n * Await after host init(), before rendering. Also supports createInstance()\n * hosts: pass this same instance to I18nextProvider. Never reinitialises a host.\n */\nexport async function initialiseUiI18n(\n instance: I18nInstance = i18next,\n): Promise<void> {\n if (!instance.isInitialized) {\n throw new Error(\n 'Initialise the host i18next instance before setting up UI translations.',\n );\n }\n attachInstance(instance);\n await loadResolutionChain(instance.language, instance);\n}\n\n/** Load the requested bundle before changing language. */\nexport async function setLocale(\n code: string,\n instance: I18nInstance = i18next,\n): Promise<void> {\n attachInstance(instance);\n await instance.changeLanguage(code);\n}\n\n/** Load all 18 bundles on a singleton or provider instance. */\nexport async function loadAllLocales(\n instance: I18nInstance = i18next,\n): Promise<void> {\n await Promise.all(\n Object.keys(LOADERS).map((code) => loadLocale(code, instance)),\n );\n}\n\n// Bootstrap only a genuinely uninitialised singleton. A library must preserve\n// a consumer's default namespace, language, fallbacks and application resources.\nif (!i18next.isInitialized) {\n kitBootstrapped.add(i18next);\n void i18next.use(initReactI18next).init({\n lng: 'en',\n fallbackLng: 'en',\n ns: ['ui'],\n defaultNS: 'ui',\n partialBundledLanguages: true,\n debug: IS_DEV,\n saveMissing: IS_DEV,\n missingKeyHandler: IS_DEV\n ? (lngs, ns, key) => {\n console.warn(\n `[i18n] Missing key \"${key}\" in namespace \"${ns}\" for locales [${lngs.join(', ')}].`,\n );\n }\n : undefined,\n interpolation: { escapeValue: false },\n // English arrives through the lazy loader below, like every other locale.\n resources: {},\n });\n}\nattachInstance(i18next);\n// No eager load of the default English: a host that goes on to call\n// changeLanguage('it') must not fetch English first (HTP-7057). An English\n// host gets its text from the first t() / hasLoadedNamespace() read, which\n// starts the load (see requestUi).\n// A host that initialised i18next itself keeps the restore on the next\n// microtask, so its starting language is loaded without being asked.\nif (!kitBootstrapped.has(i18next)) {\n void Promise.resolve()\n .then(() =>\n i18next.isInitialized ? restoreActiveLanguage(i18next) : undefined,\n )\n .catch((error: unknown) => {\n if (IS_DEV)\n console.warn('[i18n] Could not load the initial UI locale.', error);\n });\n}\n\nexport default i18next;\nexport { LOCALES_WITH_BUNDLES } from './supported-locales';\nexport { registerUiBundle } from './registerUiBundle';\n"],"names":["LOCALES_WITH_BUNDLES","registerUiBundle","locale","bundle","instance","i18next","IS_DEV","LOADERS","m","instances","kitBootstrapped","resolveUiLanguage","code","base","attachInstance","existing","state","installReadiness","originalChangeLanguage","lng","callback","request","languageUtils","regionalResources","hostOwnsRegion","resolutionChain","namespace","selected","translate","loadResolutionChain","error","restoreActiveLanguage","settleWaiters","hasLoadedNamespace","ns","options","answer","usesUi","requestUi","args","result","blankWhilePending","loadNamespaces","whenUiReady","loadLanguages","lngs","wanted","firstKitLanguage","ui","ensureLocale","arg","key","isUiReady","first","bundleTargets","target","isBundleCurrent","isHostBundle","resource","resolve","waiter","language","loadLocale","targets","requestKey","pending","degrade","retried","wasAsked","usableLanguages","usable","addFallbackLanguage","current","list","value","map","installBuiltInMinimum","defaultValue","words","initialiseUiI18n","setLocale","loadAllLocales","initReactI18next"],"mappings":"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"}
|
|
@@ -2506,6 +2506,7 @@ export declare const arUi: {
|
|
|
2506
2506
|
readonly rating: "التقييم";
|
|
2507
2507
|
readonly nextAvailable: "أقرب موعد متاح";
|
|
2508
2508
|
readonly relevance: "الأكثر صلة";
|
|
2509
|
+
readonly price: "تكلفة الزيارة الأولى";
|
|
2509
2510
|
};
|
|
2510
2511
|
readonly empty: {
|
|
2511
2512
|
readonly title: "لا توجد نتائج";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAq8LP,CAAC"}
|