@alfadocs/ui-kit-debug 0.62.0 → 0.64.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.
Files changed (161) hide show
  1. package/dist/_chunks/{ai-prompt-input-C6sCr1Vi.js → ai-prompt-input-Dx8eXoPm.js} +2 -2
  2. package/dist/_chunks/{ai-prompt-input-C6sCr1Vi.js.map → ai-prompt-input-Dx8eXoPm.js.map} +1 -1
  3. package/dist/_chunks/{audio-recorder-D6OVfNiZ.js → audio-recorder-CdXuT9ln.js} +2 -2
  4. package/dist/_chunks/{audio-recorder-D6OVfNiZ.js.map → audio-recorder-CdXuT9ln.js.map} +1 -1
  5. package/dist/_chunks/{bishop-score-B9tvgoIq.js → bishop-score-CzjSx-dm.js} +2 -2
  6. package/dist/_chunks/{bishop-score-B9tvgoIq.js.map → bishop-score-CzjSx-dm.js.map} +1 -1
  7. package/dist/_chunks/{booking-BUV9fspj.js → booking-ChfvWy3P.js} +2 -2
  8. package/dist/_chunks/{booking-BUV9fspj.js.map → booking-ChfvWy3P.js.map} +1 -1
  9. package/dist/_chunks/{care-plan-card-QmNpGggC.js → care-plan-card-DhZNoXs4.js} +2 -2
  10. package/dist/_chunks/{care-plan-card-QmNpGggC.js.map → care-plan-card-DhZNoXs4.js.map} +1 -1
  11. package/dist/_chunks/{care-plan-entry-card-Cnra7vUc.js → care-plan-entry-card-DW70yBOD.js} +2 -2
  12. package/dist/_chunks/{care-plan-entry-card-Cnra7vUc.js.map → care-plan-entry-card-DW70yBOD.js.map} +1 -1
  13. package/dist/_chunks/{editable-currency-cell-renderer-D5C5tCfu.js → editable-currency-cell-renderer-BQgaKFCz.js} +2 -2
  14. package/dist/_chunks/{editable-currency-cell-renderer-D5C5tCfu.js.map → editable-currency-cell-renderer-BQgaKFCz.js.map} +1 -1
  15. package/dist/_chunks/finished-terminal-VjZ_-eDD.js +122 -0
  16. package/dist/_chunks/finished-terminal-VjZ_-eDD.js.map +1 -0
  17. package/dist/_chunks/{gestational-age-calculator-AkNFfZYs.js → gestational-age-calculator-D85E8lGN.js} +2 -2
  18. package/dist/_chunks/{gestational-age-calculator-AkNFfZYs.js.map → gestational-age-calculator-D85E8lGN.js.map} +1 -1
  19. package/dist/_chunks/{pregnancy-dating-Dg6dTe1p.js → pregnancy-dating-7NUaAfob.js} +2 -2
  20. package/dist/_chunks/{pregnancy-dating-Dg6dTe1p.js.map → pregnancy-dating-7NUaAfob.js.map} +1 -1
  21. package/dist/_chunks/{select-hsCaJSX3.js → select-CEtRcon5.js} +46 -45
  22. package/dist/_chunks/select-CEtRcon5.js.map +1 -0
  23. package/dist/_chunks/{tabs-BpPYVme_.js → tabs-BIQ0ew1T.js} +2 -2
  24. package/dist/_chunks/{tabs-BpPYVme_.js.map → tabs-BIQ0ew1T.js.map} +1 -1
  25. package/dist/_chunks/tooth-scheme-CiphQaON.js +1257 -0
  26. package/dist/_chunks/tooth-scheme-CiphQaON.js.map +1 -0
  27. package/dist/_chunks/{unit-converter-3sINXO3m.js → unit-converter-BIbXHIQA.js} +2 -2
  28. package/dist/_chunks/{unit-converter-3sINXO3m.js.map → unit-converter-BIbXHIQA.js.map} +1 -1
  29. package/dist/_chunks/use-countdown-Yd6ts0_a.js +26 -0
  30. package/dist/_chunks/use-countdown-Yd6ts0_a.js.map +1 -0
  31. package/dist/agent-catalog.json +55 -4
  32. package/dist/components/ai-prompt-input/index.js +1 -1
  33. package/dist/components/audio-recorder/index.js +1 -1
  34. package/dist/components/bishop-score/index.js +1 -1
  35. package/dist/components/booking/index.js +1 -1
  36. package/dist/components/care-plan-card/index.js +1 -1
  37. package/dist/components/care-plan-entry-card/index.js +1 -1
  38. package/dist/components/data-table/index.js +1 -1
  39. package/dist/components/finished-terminal/finished-terminal.d.ts +55 -0
  40. package/dist/components/finished-terminal/finished-terminal.d.ts.map +1 -0
  41. package/dist/components/finished-terminal/index.d.ts +3 -0
  42. package/dist/components/finished-terminal/index.d.ts.map +1 -0
  43. package/dist/components/finished-terminal/index.js +5 -0
  44. package/dist/components/finished-terminal/index.js.map +1 -0
  45. package/dist/components/gestational-age-calculator/index.js +1 -1
  46. package/dist/components/index.d.ts +1 -0
  47. package/dist/components/index.d.ts.map +1 -1
  48. package/dist/components/pregnancy-dating/index.js +1 -1
  49. package/dist/components/select/index.js +1 -1
  50. package/dist/components/select/select.d.ts +8 -0
  51. package/dist/components/select/select.d.ts.map +1 -1
  52. package/dist/components/tabs/index.js +1 -1
  53. package/dist/components/tooth-scheme/index.d.ts +2 -2
  54. package/dist/components/tooth-scheme/index.d.ts.map +1 -1
  55. package/dist/components/tooth-scheme/index.js +22 -15
  56. package/dist/components/tooth-scheme/tooth-data.d.ts +79 -18
  57. package/dist/components/tooth-scheme/tooth-data.d.ts.map +1 -1
  58. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts +2 -0
  59. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
  60. package/dist/components/tooth-scheme/tooth-scheme.d.ts +48 -1
  61. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
  62. package/dist/components/unit-converter/index.js +1 -1
  63. package/dist/hooks/index.js +79 -99
  64. package/dist/hooks/index.js.map +1 -1
  65. package/dist/i18n/locales/ar.d.ts +22 -0
  66. package/dist/i18n/locales/ar.d.ts.map +1 -1
  67. package/dist/i18n/locales/ar.js +23 -1
  68. package/dist/i18n/locales/ar.js.map +1 -1
  69. package/dist/i18n/locales/de.d.ts +22 -0
  70. package/dist/i18n/locales/de.d.ts.map +1 -1
  71. package/dist/i18n/locales/de.js +23 -1
  72. package/dist/i18n/locales/de.js.map +1 -1
  73. package/dist/i18n/locales/el.d.ts +22 -0
  74. package/dist/i18n/locales/el.d.ts.map +1 -1
  75. package/dist/i18n/locales/el.js +23 -1
  76. package/dist/i18n/locales/el.js.map +1 -1
  77. package/dist/i18n/locales/en.d.ts +22 -0
  78. package/dist/i18n/locales/en.d.ts.map +1 -1
  79. package/dist/i18n/locales/en.js +23 -1
  80. package/dist/i18n/locales/en.js.map +1 -1
  81. package/dist/i18n/locales/es.d.ts +22 -0
  82. package/dist/i18n/locales/es.d.ts.map +1 -1
  83. package/dist/i18n/locales/es.js +23 -1
  84. package/dist/i18n/locales/es.js.map +1 -1
  85. package/dist/i18n/locales/fr.d.ts +22 -0
  86. package/dist/i18n/locales/fr.d.ts.map +1 -1
  87. package/dist/i18n/locales/fr.js +23 -1
  88. package/dist/i18n/locales/fr.js.map +1 -1
  89. package/dist/i18n/locales/hi.d.ts +22 -0
  90. package/dist/i18n/locales/hi.d.ts.map +1 -1
  91. package/dist/i18n/locales/hi.js +23 -1
  92. package/dist/i18n/locales/hi.js.map +1 -1
  93. package/dist/i18n/locales/it.d.ts +22 -0
  94. package/dist/i18n/locales/it.d.ts.map +1 -1
  95. package/dist/i18n/locales/it.js +23 -1
  96. package/dist/i18n/locales/it.js.map +1 -1
  97. package/dist/i18n/locales/ja.d.ts +22 -0
  98. package/dist/i18n/locales/ja.d.ts.map +1 -1
  99. package/dist/i18n/locales/ja.js +23 -1
  100. package/dist/i18n/locales/ja.js.map +1 -1
  101. package/dist/i18n/locales/nl.d.ts +22 -0
  102. package/dist/i18n/locales/nl.d.ts.map +1 -1
  103. package/dist/i18n/locales/nl.js +23 -1
  104. package/dist/i18n/locales/nl.js.map +1 -1
  105. package/dist/i18n/locales/pl.d.ts +22 -0
  106. package/dist/i18n/locales/pl.d.ts.map +1 -1
  107. package/dist/i18n/locales/pl.js +23 -1
  108. package/dist/i18n/locales/pl.js.map +1 -1
  109. package/dist/i18n/locales/pt.d.ts +22 -0
  110. package/dist/i18n/locales/pt.d.ts.map +1 -1
  111. package/dist/i18n/locales/pt.js +23 -1
  112. package/dist/i18n/locales/pt.js.map +1 -1
  113. package/dist/i18n/locales/ro.d.ts +22 -0
  114. package/dist/i18n/locales/ro.d.ts.map +1 -1
  115. package/dist/i18n/locales/ro.js +23 -1
  116. package/dist/i18n/locales/ro.js.map +1 -1
  117. package/dist/i18n/locales/ru.d.ts +22 -0
  118. package/dist/i18n/locales/ru.d.ts.map +1 -1
  119. package/dist/i18n/locales/ru.js +23 -1
  120. package/dist/i18n/locales/ru.js.map +1 -1
  121. package/dist/i18n/locales/sq.d.ts +22 -0
  122. package/dist/i18n/locales/sq.d.ts.map +1 -1
  123. package/dist/i18n/locales/sq.js +23 -1
  124. package/dist/i18n/locales/sq.js.map +1 -1
  125. package/dist/i18n/locales/sv.d.ts +22 -0
  126. package/dist/i18n/locales/sv.d.ts.map +1 -1
  127. package/dist/i18n/locales/sv.js +23 -1
  128. package/dist/i18n/locales/sv.js.map +1 -1
  129. package/dist/i18n/locales/tr.d.ts +22 -0
  130. package/dist/i18n/locales/tr.d.ts.map +1 -1
  131. package/dist/i18n/locales/tr.js +23 -1
  132. package/dist/i18n/locales/tr.js.map +1 -1
  133. package/dist/i18n/locales/zh.d.ts +22 -0
  134. package/dist/i18n/locales/zh.d.ts.map +1 -1
  135. package/dist/i18n/locales/zh.js +23 -1
  136. package/dist/i18n/locales/zh.js.map +1 -1
  137. package/dist/index.js +354 -345
  138. package/dist/index.js.map +1 -1
  139. package/dist/locales/ar.json +23 -1
  140. package/dist/locales/de.json +23 -1
  141. package/dist/locales/el.json +23 -1
  142. package/dist/locales/en.json +23 -1
  143. package/dist/locales/es.json +23 -1
  144. package/dist/locales/fr.json +23 -1
  145. package/dist/locales/hi.json +23 -1
  146. package/dist/locales/it.json +23 -1
  147. package/dist/locales/ja.json +23 -1
  148. package/dist/locales/nl.json +23 -1
  149. package/dist/locales/pl.json +23 -1
  150. package/dist/locales/pt.json +23 -1
  151. package/dist/locales/ro.json +23 -1
  152. package/dist/locales/ru.json +23 -1
  153. package/dist/locales/sq.json +23 -1
  154. package/dist/locales/sv.json +23 -1
  155. package/dist/locales/tr.json +23 -1
  156. package/dist/locales/zh.json +23 -1
  157. package/dist/tokens.css +1 -1
  158. package/package.json +5 -1
  159. package/dist/_chunks/select-hsCaJSX3.js.map +0 -1
  160. package/dist/_chunks/tooth-scheme-CxlsLjfN.js +0 -753
  161. package/dist/_chunks/tooth-scheme-CxlsLjfN.js.map +0 -1
@@ -1,32 +1,33 @@
1
- import { u as L } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
- import { u as F } from "../_chunks/use-media-query-CcAx5SMM.js";
3
- import { u as R, a as _ } from "../_chunks/use-signing-session-CyOZWinp.js";
4
- import { u as w } from "../_chunks/use-count-up-BLLetaZ8.js";
5
- import { u as K } from "../_chunks/use-locale-BkCIHujH.js";
6
- import { A as H, T as Y, a as q, r as B, t as G, u as P } from "../_chunks/use-theme-CAuo6EYT.js";
7
- import { u as V } from "../_chunks/use-controllable-state-BiY4xTzM.js";
8
- import { u as z } from "../_chunks/use-copy-to-clipboard-Cyfc_dlv.js";
9
- import { u as W } from "../_chunks/use-debounced-callback-BisrB-Fq.js";
10
- import { useState as b, useRef as E, useEffect as m, useCallback as x } from "react";
11
- import { u as N, a as X } from "../_chunks/use-direction-Dp8h70PP.js";
12
- import { u as $ } from "../_chunks/use-persistent-state-i23OWy6G.js";
13
- import { u as te } from "../_chunks/use-isomorphic-layout-effect-BGfaCOP1.js";
14
- import { u as ne } from "../_chunks/use-web-otp-D_utzp6S.js";
15
- import { u as ue } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
16
- function C(e, u) {
17
- const [r, i] = b(e), n = E(null);
18
- return m(() => {
19
- if (u <= 0) {
20
- n.current !== null && (clearTimeout(n.current), n.current = null), i(e);
1
+ import { u as v } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
+ import { u as D } from "../_chunks/use-media-query-CcAx5SMM.js";
3
+ import { u as g, a as _ } from "../_chunks/use-signing-session-CyOZWinp.js";
4
+ import { u as I } from "../_chunks/use-count-up-BLLetaZ8.js";
5
+ import { u as R } from "../_chunks/use-locale-BkCIHujH.js";
6
+ import { A as K, T as H, a as M, r as Y, t as q, u as B } from "../_chunks/use-theme-CAuo6EYT.js";
7
+ import { u as P } from "../_chunks/use-controllable-state-BiY4xTzM.js";
8
+ import { u as V } from "../_chunks/use-copy-to-clipboard-Cyfc_dlv.js";
9
+ import { u as z } from "../_chunks/use-debounced-callback-BisrB-Fq.js";
10
+ import { useState as x, useRef as b, useEffect as E } from "react";
11
+ import { u as W, a as J } from "../_chunks/use-direction-Dp8h70PP.js";
12
+ import { u as X } from "../_chunks/use-persistent-state-i23OWy6G.js";
13
+ import { u as $ } from "../_chunks/use-isomorphic-layout-effect-BGfaCOP1.js";
14
+ import { u as te } from "../_chunks/use-web-otp-D_utzp6S.js";
15
+ import { u as oe } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
16
+ import { u as ne } from "../_chunks/use-countdown-Yd6ts0_a.js";
17
+ function h(e, o) {
18
+ const [t, i] = x(e), u = b(null);
19
+ return E(() => {
20
+ if (o <= 0) {
21
+ u.current !== null && (clearTimeout(u.current), u.current = null), i(e);
21
22
  return;
22
23
  }
23
24
  const s = setTimeout(() => {
24
- i(e), n.current = null;
25
- }, u);
26
- return n.current = s, () => clearTimeout(s);
27
- }, [e, u]), r;
25
+ i(e), u.current = null;
26
+ }, o);
27
+ return u.current = s, () => clearTimeout(s);
28
+ }, [e, o]), t;
28
29
  }
29
- const S = [
30
+ const T = [
30
31
  "a[href]",
31
32
  "button:not([disabled])",
32
33
  'input:not([disabled]):not([type="hidden"])',
@@ -37,96 +38,75 @@ const S = [
37
38
  "audio[controls]",
38
39
  "video[controls]"
39
40
  ].join(",");
40
- function T(e) {
41
+ function p(e) {
41
42
  return Array.from(
42
- e.querySelectorAll(S)
43
- ).filter((u) => {
44
- if (u.hidden) return !1;
45
- let r = u;
46
- for (; r; ) {
47
- if (r.hasAttribute("inert") || r.getAttribute("aria-hidden") === "true") return !1;
48
- r = r.parentElement;
43
+ e.querySelectorAll(T)
44
+ ).filter((o) => {
45
+ if (o.hidden) return !1;
46
+ let t = o;
47
+ for (; t; ) {
48
+ if (t.hasAttribute("inert") || t.getAttribute("aria-hidden") === "true") return !1;
49
+ t = t.parentElement;
49
50
  }
50
51
  return !0;
51
52
  });
52
53
  }
53
- function v(e, u = {}) {
54
- const { enabled: r = !0, autoFocus: i = !0, restoreFocus: n = !0 } = u, s = E(null);
55
- m(() => {
56
- if (!r) return;
57
- const o = e.current;
58
- if (!o) return;
54
+ function C(e, o = {}) {
55
+ const { enabled: t = !0, autoFocus: i = !0, restoreFocus: u = !0 } = o, s = b(null);
56
+ E(() => {
57
+ if (!t) return;
58
+ const a = e.current;
59
+ if (!a) return;
59
60
  if (s.current = typeof document < "u" && document.activeElement instanceof HTMLElement ? document.activeElement : null, i) {
60
- const a = T(o)[0] ?? (o.tabIndex >= -1 ? o : null);
61
- a == null || a.focus();
61
+ const n = p(a)[0] ?? (a.tabIndex >= -1 ? a : null);
62
+ n == null || n.focus();
62
63
  }
63
- function l(t) {
64
- if (t.key !== "Tab") return;
65
- const a = e.current;
66
- if (!a) return;
67
- const f = T(a);
68
- if (f.length === 0) {
69
- t.preventDefault();
64
+ function l(r) {
65
+ if (r.key !== "Tab") return;
66
+ const n = e.current;
67
+ if (!n) return;
68
+ const c = p(n);
69
+ if (c.length === 0) {
70
+ r.preventDefault();
70
71
  return;
71
72
  }
72
- const c = f[0], d = f[f.length - 1], p = document.activeElement;
73
- t.shiftKey ? (p === c || !a.contains(p)) && (t.preventDefault(), d.focus()) : (p === d || !a.contains(p)) && (t.preventDefault(), c.focus());
73
+ const d = c[0], m = c[c.length - 1], f = document.activeElement;
74
+ r.shiftKey ? (f === d || !n.contains(f)) && (r.preventDefault(), m.focus()) : (f === m || !n.contains(f)) && (r.preventDefault(), d.focus());
74
75
  }
75
- return o.addEventListener("keydown", l), () => {
76
- if (o.removeEventListener("keydown", l), n && s.current) {
77
- const t = s.current;
76
+ return a.addEventListener("keydown", l), () => {
77
+ if (a.removeEventListener("keydown", l), u && s.current) {
78
+ const r = s.current;
78
79
  requestAnimationFrame(() => {
79
- t.isConnected && t.focus();
80
+ r.isConnected && r.focus();
80
81
  });
81
82
  }
82
83
  };
83
- }, [r, i, n, e]);
84
- }
85
- function g(e, u = {}) {
86
- const { autoStart: r = !0, onElapsed: i } = u, [n, s] = b(e), [o, l] = b(r), t = E(i);
87
- m(() => {
88
- t.current = i;
89
- }, [i]);
90
- const a = x(() => {
91
- s(e), l(!0);
92
- }, [e]), f = x(() => {
93
- s(e), l(!1);
94
- }, [e]);
95
- return m(() => {
96
- if (!o) return;
97
- const c = setInterval(() => {
98
- s((d) => Math.max(0, d - 1));
99
- }, 1e3);
100
- return () => clearInterval(c);
101
- }, [o]), m(() => {
102
- var c;
103
- o && n <= 0 && (l(!1), (c = t.current) == null || c.call(t));
104
- }, [o, n]), { remaining: n, isRunning: o, start: a, reset: f };
84
+ }, [t, i, u, e]);
105
85
  }
106
86
  export {
107
- H as ACCESSIBILITY_STORAGE_KEY,
108
- Y as THEME_CLASS,
109
- q as THEME_STORAGE_KEY,
110
- B as resolveTheme,
111
- G as themeClassList,
112
- V as useControllableState,
113
- z as useCopyToClipboard,
114
- w as useCountUp,
115
- g as useCountdown,
116
- W as useDebouncedCallback,
117
- C as useDebouncedValue,
118
- N as useDirection,
119
- X as useDocumentDirection,
120
- ue as useEdgeResize,
121
- v as useFocusTrap,
122
- te as useIsomorphicLayoutEffect,
123
- K as useLocale,
124
- F as useMediaQuery,
125
- $ as usePersistentState,
126
- L as usePrefersReducedMotion,
127
- R as useScrollToFirstError,
87
+ K as ACCESSIBILITY_STORAGE_KEY,
88
+ H as THEME_CLASS,
89
+ M as THEME_STORAGE_KEY,
90
+ Y as resolveTheme,
91
+ q as themeClassList,
92
+ P as useControllableState,
93
+ V as useCopyToClipboard,
94
+ I as useCountUp,
95
+ ne as useCountdown,
96
+ z as useDebouncedCallback,
97
+ h as useDebouncedValue,
98
+ W as useDirection,
99
+ J as useDocumentDirection,
100
+ oe as useEdgeResize,
101
+ C as useFocusTrap,
102
+ $ as useIsomorphicLayoutEffect,
103
+ R as useLocale,
104
+ D as useMediaQuery,
105
+ X as usePersistentState,
106
+ v as usePrefersReducedMotion,
107
+ g as useScrollToFirstError,
128
108
  _ as useSigningSession,
129
- P as useTheme,
130
- ne as useWebOtp
109
+ B as useTheme,
110
+ te as useWebOtp
131
111
  };
132
112
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/hooks/use-debounced-value.ts","../../src/hooks/use-focus-trap.ts","../../src/hooks/use-countdown.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/**\n * Returns a value that lags `input` by `delayMs`. Each new `input`\n * resets the timer; the returned value updates once `input` has been\n * stable for `delayMs` ms.\n *\n * Companion to `useDebouncedCallback` — use this when you want the\n * debounced *value* (to drive a derived effect, query, or render),\n * and use the callback hook when you want the debounced *action*.\n *\n * @example\n * const [query, setQuery] = useState('');\n * const debouncedQuery = useDebouncedValue(query, 250);\n * useEffect(() => { void search(debouncedQuery); }, [debouncedQuery]);\n */\nexport function useDebouncedValue<T>(input: T, delayMs: number): T {\n const [value, setValue] = useState<T>(input);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (delayMs <= 0) {\n // Flush any pending timer so a stale queued value can't land\n // after the synchronous update below.\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n setValue(input);\n return;\n }\n const timer = setTimeout(() => {\n setValue(input);\n timerRef.current = null;\n }, delayMs);\n timerRef.current = timer;\n return () => clearTimeout(timer);\n }, [input, delayMs]);\n\n return value;\n}\n","import { useEffect, useRef, type RefObject } from 'react';\n\n/* -------------------------------------------------------------------- */\n/* Focus trap */\n/* */\n/* Lightweight focus-trap hook for components that compose a Radix */\n/* primitive without the overlay primitive (Dialog, AlertDialog, Sheet) */\n/* — those handle focus trapping for free via `@radix-ui/react-dialog`. */\n/* */\n/* This hook is intentionally NOT a Radix `<FocusScope>` re-export — it */\n/* is a hook so it composes inside `forwardRef` components without */\n/* nesting another wrapper element. If you need the full Radix */\n/* contract (return-focus management, loop, asChild), use */\n/* `@radix-ui/react-focus-scope` directly. */\n/* -------------------------------------------------------------------- */\n\nexport interface UseFocusTrapOptions {\n /** When `false` the trap is inert. Defaults to `true`. */\n enabled?: boolean;\n /**\n * When `true`, focus initial autofocus into the first focusable\n * descendant on mount / enable. @default true\n */\n autoFocus?: boolean;\n /**\n * When `true`, restores focus to the previously-focused element on\n * unmount / disable. @default true\n */\n restoreFocus?: boolean;\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n 'audio[controls]',\n 'video[controls]',\n].join(',');\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((el) => {\n if (el.hidden) return false;\n // `inert` and `aria-hidden=\"true\"` block focus on the element AND\n // all its descendants — walk the chain to catch either ancestor.\n let node: HTMLElement | null = el;\n while (node) {\n if (node.hasAttribute('inert')) return false;\n if (node.getAttribute('aria-hidden') === 'true') return false;\n node = node.parentElement;\n }\n return true;\n });\n}\n\n/**\n * Constrain Tab navigation to descendants of `containerRef`. Wraps Tab\n * forward from the last focusable to the first, and Shift+Tab back from\n * the first to the last. Optionally autofocuses on enable and restores\n * focus on disable.\n *\n * Use this for inline modal patterns or focus zones that don't ship\n * with their own Radix overlay. Don't stack it inside Dialog / Sheet —\n * Radix already traps focus in those.\n *\n * @example\n * const ref = useRef<HTMLDivElement>(null);\n * useFocusTrap(ref, { enabled: open });\n * return <div ref={ref}>…</div>;\n */\nexport function useFocusTrap<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseFocusTrapOptions = {},\n): void {\n const { enabled = true, autoFocus = true, restoreFocus = true } = options;\n const previouslyFocused = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!enabled) return;\n const container = containerRef.current;\n if (!container) return;\n\n previouslyFocused.current =\n typeof document !== 'undefined' &&\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n if (autoFocus) {\n const focusable = getFocusable(container);\n // Container itself is the fallback focus target — needs `tabIndex`\n // to receive focus, but `-1` is fine.\n const target =\n focusable[0] ?? (container.tabIndex >= -1 ? container : null);\n target?.focus();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Tab') return;\n const root = containerRef.current;\n if (!root) return;\n const focusable = getFocusable(root);\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n\n if (event.shiftKey) {\n if (active === first || !root.contains(active)) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (active === last || !root.contains(active)) {\n event.preventDefault();\n first.focus();\n }\n }\n }\n\n container.addEventListener('keydown', onKeyDown);\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n if (restoreFocus && previouslyFocused.current) {\n // rAF lets parent unmounts settle before refocus — a microtask\n // fires too early and can throw on a detached node.\n const target = previouslyFocused.current;\n requestAnimationFrame(() => {\n if (target.isConnected) target.focus();\n });\n }\n };\n }, [enabled, autoFocus, restoreFocus, containerRef]);\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseCountdownOptions {\n /** Begin counting down on mount. Default `true`. */\n autoStart?: boolean;\n /** Called exactly once when the countdown reaches zero. */\n onElapsed?: () => void;\n}\n\nexport interface UseCountdownReturn {\n /** Whole seconds remaining; counts down to 0. */\n remaining: number;\n /** Whether the countdown is actively ticking. */\n isRunning: boolean;\n /** (Re)start from the full duration. */\n start: () => void;\n /** Stop and reset to the full duration without firing `onElapsed`. */\n reset: () => void;\n}\n\n/**\n * A pure, render-friendly seconds countdown. It owns no side effects — when\n * it reaches zero it calls `onElapsed` and the CONSUMER decides what to do\n * (close the tab, redirect, …). Same \"no I/O\" contract as `useSigningSession`.\n *\n * `onElapsed` is read through a ref, so changing the callback doesn't restart\n * the timer. SSR-safe: the timer only ticks inside an effect (client-only).\n *\n * @example\n * const { remaining } = useCountdown(10, {\n * onElapsed: () => {\n * window.close(); // best-effort — blocked for user-opened tabs\n * window.location.assign('https://www.alfadocs.com'); // fallback\n * },\n * });\n */\nexport function useCountdown(\n seconds: number,\n options: UseCountdownOptions = {},\n): UseCountdownReturn {\n const { autoStart = true, onElapsed } = options;\n const [remaining, setRemaining] = useState(seconds);\n const [isRunning, setIsRunning] = useState(autoStart);\n\n const onElapsedRef = useRef(onElapsed);\n useEffect(() => {\n onElapsedRef.current = onElapsed;\n }, [onElapsed]);\n\n const start = useCallback(() => {\n setRemaining(seconds);\n setIsRunning(true);\n }, [seconds]);\n\n const reset = useCallback(() => {\n setRemaining(seconds);\n setIsRunning(false);\n }, [seconds]);\n\n // A single interval keyed on `isRunning` (NOT `remaining`) so each second\n // ticks regardless of re-renders — a setTimeout re-scheduled per render\n // misbehaves under fake timers and drops ticks.\n useEffect(() => {\n if (!isRunning) return undefined;\n const id = setInterval(() => {\n setRemaining((r) => Math.max(0, r - 1));\n }, 1000);\n return () => clearInterval(id);\n }, [isRunning]);\n\n // Fire `onElapsed` once when the counter reaches zero, then stop (which\n // tears down the interval above). Gated on `isRunning` so it can't re-fire.\n useEffect(() => {\n if (isRunning && remaining <= 0) {\n setIsRunning(false);\n onElapsedRef.current?.();\n }\n }, [isRunning, remaining]);\n\n return { remaining, isRunning, start, reset };\n}\n"],"names":["useDebouncedValue","input","delayMs","value","setValue","useState","timerRef","useRef","useEffect","timer","FOCUSABLE_SELECTOR","getFocusable","container","el","node","useFocusTrap","containerRef","options","enabled","autoFocus","restoreFocus","previouslyFocused","target","onKeyDown","event","root","focusable","first","last","active","useCountdown","seconds","autoStart","onElapsed","remaining","setRemaining","isRunning","setIsRunning","onElapsedRef","start","useCallback","reset","id","r","_a"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/hooks/use-debounced-value.ts","../../src/hooks/use-focus-trap.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/**\n * Returns a value that lags `input` by `delayMs`. Each new `input`\n * resets the timer; the returned value updates once `input` has been\n * stable for `delayMs` ms.\n *\n * Companion to `useDebouncedCallback` — use this when you want the\n * debounced *value* (to drive a derived effect, query, or render),\n * and use the callback hook when you want the debounced *action*.\n *\n * @example\n * const [query, setQuery] = useState('');\n * const debouncedQuery = useDebouncedValue(query, 250);\n * useEffect(() => { void search(debouncedQuery); }, [debouncedQuery]);\n */\nexport function useDebouncedValue<T>(input: T, delayMs: number): T {\n const [value, setValue] = useState<T>(input);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (delayMs <= 0) {\n // Flush any pending timer so a stale queued value can't land\n // after the synchronous update below.\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n setValue(input);\n return;\n }\n const timer = setTimeout(() => {\n setValue(input);\n timerRef.current = null;\n }, delayMs);\n timerRef.current = timer;\n return () => clearTimeout(timer);\n }, [input, delayMs]);\n\n return value;\n}\n","import { useEffect, useRef, type RefObject } from 'react';\n\n/* -------------------------------------------------------------------- */\n/* Focus trap */\n/* */\n/* Lightweight focus-trap hook for components that compose a Radix */\n/* primitive without the overlay primitive (Dialog, AlertDialog, Sheet) */\n/* — those handle focus trapping for free via `@radix-ui/react-dialog`. */\n/* */\n/* This hook is intentionally NOT a Radix `<FocusScope>` re-export — it */\n/* is a hook so it composes inside `forwardRef` components without */\n/* nesting another wrapper element. If you need the full Radix */\n/* contract (return-focus management, loop, asChild), use */\n/* `@radix-ui/react-focus-scope` directly. */\n/* -------------------------------------------------------------------- */\n\nexport interface UseFocusTrapOptions {\n /** When `false` the trap is inert. Defaults to `true`. */\n enabled?: boolean;\n /**\n * When `true`, focus initial autofocus into the first focusable\n * descendant on mount / enable. @default true\n */\n autoFocus?: boolean;\n /**\n * When `true`, restores focus to the previously-focused element on\n * unmount / disable. @default true\n */\n restoreFocus?: boolean;\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n 'audio[controls]',\n 'video[controls]',\n].join(',');\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((el) => {\n if (el.hidden) return false;\n // `inert` and `aria-hidden=\"true\"` block focus on the element AND\n // all its descendants — walk the chain to catch either ancestor.\n let node: HTMLElement | null = el;\n while (node) {\n if (node.hasAttribute('inert')) return false;\n if (node.getAttribute('aria-hidden') === 'true') return false;\n node = node.parentElement;\n }\n return true;\n });\n}\n\n/**\n * Constrain Tab navigation to descendants of `containerRef`. Wraps Tab\n * forward from the last focusable to the first, and Shift+Tab back from\n * the first to the last. Optionally autofocuses on enable and restores\n * focus on disable.\n *\n * Use this for inline modal patterns or focus zones that don't ship\n * with their own Radix overlay. Don't stack it inside Dialog / Sheet —\n * Radix already traps focus in those.\n *\n * @example\n * const ref = useRef<HTMLDivElement>(null);\n * useFocusTrap(ref, { enabled: open });\n * return <div ref={ref}>…</div>;\n */\nexport function useFocusTrap<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseFocusTrapOptions = {},\n): void {\n const { enabled = true, autoFocus = true, restoreFocus = true } = options;\n const previouslyFocused = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!enabled) return;\n const container = containerRef.current;\n if (!container) return;\n\n previouslyFocused.current =\n typeof document !== 'undefined' &&\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n if (autoFocus) {\n const focusable = getFocusable(container);\n // Container itself is the fallback focus target — needs `tabIndex`\n // to receive focus, but `-1` is fine.\n const target =\n focusable[0] ?? (container.tabIndex >= -1 ? container : null);\n target?.focus();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Tab') return;\n const root = containerRef.current;\n if (!root) return;\n const focusable = getFocusable(root);\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n\n if (event.shiftKey) {\n if (active === first || !root.contains(active)) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (active === last || !root.contains(active)) {\n event.preventDefault();\n first.focus();\n }\n }\n }\n\n container.addEventListener('keydown', onKeyDown);\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n if (restoreFocus && previouslyFocused.current) {\n // rAF lets parent unmounts settle before refocus — a microtask\n // fires too early and can throw on a detached node.\n const target = previouslyFocused.current;\n requestAnimationFrame(() => {\n if (target.isConnected) target.focus();\n });\n }\n };\n }, [enabled, autoFocus, restoreFocus, containerRef]);\n}\n"],"names":["useDebouncedValue","input","delayMs","value","setValue","useState","timerRef","useRef","useEffect","timer","FOCUSABLE_SELECTOR","getFocusable","container","el","node","useFocusTrap","containerRef","options","enabled","autoFocus","restoreFocus","previouslyFocused","target","onKeyDown","event","root","focusable","first","last","active"],"mappings":";;;;;;;;;;;;;;;;AAgBO,SAASA,EAAqBC,GAAUC,GAAoB;AACjE,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAYJ,CAAK,GACrCK,IAAWC,EAA6C,IAAI;AAElE,SAAAC,EAAU,MAAM;AACd,QAAIN,KAAW,GAAG;AAGhB,MAAII,EAAS,YAAY,SACvB,aAAaA,EAAS,OAAO,GAC7BA,EAAS,UAAU,OAErBF,EAASH,CAAK;AACd;AAAA,IACF;AACA,UAAMQ,IAAQ,WAAW,MAAM;AAC7B,MAAAL,EAASH,CAAK,GACdK,EAAS,UAAU;AAAA,IACrB,GAAGJ,CAAO;AACV,WAAAI,EAAS,UAAUG,GACZ,MAAM,aAAaA,CAAK;AAAA,EACjC,GAAG,CAACR,GAAOC,CAAO,CAAC,GAEZC;AACT;ACTA,MAAMO,IAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,SAASC,EAAaC,GAAuC;AAC3D,SAAO,MAAM;AAAA,IACXA,EAAU,iBAA8BF,CAAkB;AAAA,EAAA,EAC1D,OAAO,CAACG,MAAO;AACf,QAAIA,EAAG,OAAQ,QAAO;AAGtB,QAAIC,IAA2BD;AAC/B,WAAOC,KAAM;AAEX,UADIA,EAAK,aAAa,OAAO,KACzBA,EAAK,aAAa,aAAa,MAAM,OAAQ,QAAO;AACxD,MAAAA,IAAOA,EAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAiBO,SAASC,EACdC,GACAC,IAA+B,IACzB;AACN,QAAM,EAAE,SAAAC,IAAU,IAAM,WAAAC,IAAY,IAAM,cAAAC,IAAe,OAASH,GAC5DI,IAAoBd,EAA2B,IAAI;AAEzD,EAAAC,EAAU,MAAM;AACd,QAAI,CAACU,EAAS;AACd,UAAMN,IAAYI,EAAa;AAC/B,QAAI,CAACJ,EAAW;AAQhB,QANAS,EAAkB,UAChB,OAAO,WAAa,OACpB,SAAS,yBAAyB,cAC9B,SAAS,gBACT,MAEFF,GAAW;AAIb,YAAMG,IAHYX,EAAaC,CAAS,EAI5B,CAAC,MAAMA,EAAU,YAAY,KAAKA,IAAY;AAC1D,MAAAU,KAAA,QAAAA,EAAQ;AAAA,IACV;AAEA,aAASC,EAAUC,GAAsB;AACvC,UAAIA,EAAM,QAAQ,MAAO;AACzB,YAAMC,IAAOT,EAAa;AAC1B,UAAI,CAACS,EAAM;AACX,YAAMC,IAAYf,EAAac,CAAI;AACnC,UAAIC,EAAU,WAAW,GAAG;AAC1B,QAAAF,EAAM,eAAA;AACN;AAAA,MACF;AACA,YAAMG,IAAQD,EAAU,CAAC,GACnBE,IAAOF,EAAUA,EAAU,SAAS,CAAC,GACrCG,IAAS,SAAS;AAExB,MAAIL,EAAM,YACJK,MAAWF,KAAS,CAACF,EAAK,SAASI,CAAM,OAC3CL,EAAM,eAAA,GACNI,EAAK,MAAA,MAGHC,MAAWD,KAAQ,CAACH,EAAK,SAASI,CAAM,OAC1CL,EAAM,eAAA,GACNG,EAAM,MAAA;AAAA,IAGZ;AAEA,WAAAf,EAAU,iBAAiB,WAAWW,CAAS,GAExC,MAAM;AAEX,UADAX,EAAU,oBAAoB,WAAWW,CAAS,GAC9CH,KAAgBC,EAAkB,SAAS;AAG7C,cAAMC,IAASD,EAAkB;AACjC,8BAAsB,MAAM;AAC1B,UAAIC,EAAO,eAAaA,EAAO,MAAA;AAAA,QACjC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAACJ,GAASC,GAAWC,GAAcJ,CAAY,CAAC;AACrD;"}
@@ -1714,6 +1714,11 @@ export declare const arUi: {
1714
1714
  readonly invalidReturnUrl: "يجب أن يتطابق رابط العودة مع أصل هذا الموقع. لم يتم إرسال الدفع.";
1715
1715
  };
1716
1716
  };
1717
+ readonly finishedTerminal: {
1718
+ readonly autoClose: "ستُغلق هذه النافذة خلال {{seconds}} ثانية.";
1719
+ readonly closeNow: "إغلاق الآن";
1720
+ readonly redirecting: "جارٍ التحويل…";
1721
+ };
1717
1722
  readonly signatureField: {
1718
1723
  readonly prompt: "انقر للتوقيع";
1719
1724
  readonly unsigned: "وقّع هنا";
@@ -1918,11 +1923,23 @@ export declare const arUi: {
1918
1923
  readonly toothScheme: {
1919
1924
  readonly ariaLabel: "مخطط الأسنان";
1920
1925
  readonly legendLabel: "دليل الحالات";
1926
+ readonly view: {
1927
+ readonly side: "عرض جانبي";
1928
+ readonly occlusal: "عرض إطباقي";
1929
+ readonly both: "كلا العرضين";
1930
+ };
1921
1931
  readonly dentition: {
1922
1932
  readonly permanent: "أسنان دائمة";
1923
1933
  readonly primary: "أسنان لبنية";
1924
1934
  readonly mixed: "تسنين مختلط";
1925
1935
  };
1936
+ readonly options: {
1937
+ readonly label: "خيارات المخطط";
1938
+ readonly legend: "مفتاح";
1939
+ readonly dentition: "الأسنان";
1940
+ readonly numbering: "الترقيم";
1941
+ readonly view: "العرض";
1942
+ };
1926
1943
  readonly anatomy: {
1927
1944
  readonly incisor: "قاطعة";
1928
1945
  readonly canine: "ناب";
@@ -1936,6 +1953,11 @@ export declare const arUi: {
1936
1953
  readonly missing: "مفقود";
1937
1954
  readonly implant: "زرعة";
1938
1955
  readonly rootCanal: "علاج جذر";
1956
+ readonly temporaryCrown: "تاج مؤقت";
1957
+ readonly bridge: "جسر";
1958
+ readonly destroyed: "مُهدَّم";
1959
+ readonly implantExtraction: "إزالة زرعة";
1960
+ readonly stub: "جذر متبقٍ";
1939
1961
  };
1940
1962
  readonly surface: {
1941
1963
  readonly mesial: "وسطاني";
@@ -1 +1 @@
1
- {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8lFP,CAAC"}
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAonFP,CAAC"}
@@ -1697,6 +1697,11 @@ const e = {
1697
1697
  invalidReturnUrl: "يجب أن يتطابق رابط العودة مع أصل هذا الموقع. لم يتم إرسال الدفع."
1698
1698
  }
1699
1699
  },
1700
+ finishedTerminal: {
1701
+ autoClose: "ستُغلق هذه النافذة خلال {{seconds}} ثانية.",
1702
+ closeNow: "إغلاق الآن",
1703
+ redirecting: "جارٍ التحويل…"
1704
+ },
1700
1705
  signatureField: {
1701
1706
  prompt: "انقر للتوقيع",
1702
1707
  unsigned: "وقّع هنا",
@@ -1901,11 +1906,23 @@ const e = {
1901
1906
  toothScheme: {
1902
1907
  ariaLabel: "مخطط الأسنان",
1903
1908
  legendLabel: "دليل الحالات",
1909
+ view: {
1910
+ side: "عرض جانبي",
1911
+ occlusal: "عرض إطباقي",
1912
+ both: "كلا العرضين"
1913
+ },
1904
1914
  dentition: {
1905
1915
  permanent: "أسنان دائمة",
1906
1916
  primary: "أسنان لبنية",
1907
1917
  mixed: "تسنين مختلط"
1908
1918
  },
1919
+ options: {
1920
+ label: "خيارات المخطط",
1921
+ legend: "مفتاح",
1922
+ dentition: "الأسنان",
1923
+ numbering: "الترقيم",
1924
+ view: "العرض"
1925
+ },
1909
1926
  anatomy: {
1910
1927
  incisor: "قاطعة",
1911
1928
  canine: "ناب",
@@ -1918,7 +1935,12 @@ const e = {
1918
1935
  crowned: "مُتوَّج",
1919
1936
  missing: "مفقود",
1920
1937
  implant: "زرعة",
1921
- rootCanal: "علاج جذر"
1938
+ rootCanal: "علاج جذر",
1939
+ temporaryCrown: "تاج مؤقت",
1940
+ bridge: "جسر",
1941
+ destroyed: "مُهدَّم",
1942
+ implantExtraction: "إزالة زرعة",
1943
+ stub: "جذر متبقٍ"
1922
1944
  },
1923
1945
  surface: {
1924
1946
  mesial: "وسطاني",