@alfadocs/ui-kit-debug 1.42.0 → 1.44.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 (224) hide show
  1. package/dist/_chunks/{calendar-ChJQzRw-.js → calendar-U6N0F99w.js} +383 -359
  2. package/dist/_chunks/calendar-U6N0F99w.js.map +1 -0
  3. package/dist/_chunks/calendar-workspace-DBYAtdyd.js +12161 -0
  4. package/dist/_chunks/calendar-workspace-DBYAtdyd.js.map +1 -0
  5. package/dist/_chunks/control-room-rail-Cv7GpMqX.js +354 -0
  6. package/dist/_chunks/control-room-rail-Cv7GpMqX.js.map +1 -0
  7. package/dist/_chunks/{face-scheme-Dg6ZyLKb.js → face-scheme-Bm6pe7R8.js} +265 -275
  8. package/dist/_chunks/face-scheme-Bm6pe7R8.js.map +1 -0
  9. package/dist/_chunks/help-me-write-templates-GUeEn3Ff.js +741 -0
  10. package/dist/_chunks/help-me-write-templates-GUeEn3Ff.js.map +1 -0
  11. package/dist/_chunks/{marketplace-app-shell-D_g9BaDI.js → marketplace-app-shell-DdwPj03y.js} +3 -3
  12. package/dist/_chunks/{marketplace-app-shell-D_g9BaDI.js.map → marketplace-app-shell-DdwPj03y.js.map} +1 -1
  13. package/dist/_chunks/{notes-panel-CRAovkjx.js → notes-panel-CY4KmDo-.js} +159 -152
  14. package/dist/_chunks/notes-panel-CY4KmDo-.js.map +1 -0
  15. package/dist/_chunks/{panel-subview-PMBRPFOa.js → panel-subview-CYnuX-KR.js} +61 -40
  16. package/dist/_chunks/panel-subview-CYnuX-KR.js.map +1 -0
  17. package/dist/_chunks/rich-text-editor-BYE6kK4u.js +3839 -0
  18. package/dist/_chunks/rich-text-editor-BYE6kK4u.js.map +1 -0
  19. package/dist/_chunks/{sidebar-ClTY9lLI.js → sidebar-DbZXLl8h.js} +2 -2
  20. package/dist/_chunks/{sidebar-ClTY9lLI.js.map → sidebar-DbZXLl8h.js.map} +1 -1
  21. package/dist/_chunks/tab-bar-Cw9UK18Z.js +228 -0
  22. package/dist/_chunks/tab-bar-Cw9UK18Z.js.map +1 -0
  23. package/dist/_chunks/{tool-rail-D89USYE6.js → tool-rail-CCFqDfAn.js} +282 -276
  24. package/dist/_chunks/tool-rail-CCFqDfAn.js.map +1 -0
  25. package/dist/_chunks/undo-2-CYNAzclj.js +26 -0
  26. package/dist/_chunks/undo-2-CYNAzclj.js.map +1 -0
  27. package/dist/_chunks/use-edge-resize-BHesP0kg.js +149 -0
  28. package/dist/_chunks/use-edge-resize-BHesP0kg.js.map +1 -0
  29. package/dist/_chunks/use-scroll-overflow-UbLrUfBo.js +72 -0
  30. package/dist/_chunks/use-scroll-overflow-UbLrUfBo.js.map +1 -0
  31. package/dist/_chunks/variables-menu-vXUaSBj4.js +401 -0
  32. package/dist/_chunks/variables-menu-vXUaSBj4.js.map +1 -0
  33. package/dist/agent-catalog.json +84 -3
  34. package/dist/agent-i18n/en.json +14 -3
  35. package/dist/components/calendar/calendar.d.ts +6 -0
  36. package/dist/components/calendar/calendar.d.ts.map +1 -1
  37. package/dist/components/calendar/index.js +1 -1
  38. package/dist/components/control-room-rail/control-room-rail.d.ts +9 -0
  39. package/dist/components/control-room-rail/control-room-rail.d.ts.map +1 -1
  40. package/dist/components/control-room-rail/index.js +1 -1
  41. package/dist/components/face-scheme/index.js +1 -1
  42. package/dist/components/index.d.ts +1 -0
  43. package/dist/components/index.d.ts.map +1 -1
  44. package/dist/components/notes-panel/index.js +1 -1
  45. package/dist/components/notes-panel/notes-panel.d.ts +4 -0
  46. package/dist/components/notes-panel/notes-panel.d.ts.map +1 -1
  47. package/dist/components/panel-subview/index.js +1 -1
  48. package/dist/components/panel-subview/panel-subview.d.ts +6 -0
  49. package/dist/components/panel-subview/panel-subview.d.ts.map +1 -1
  50. package/dist/components/rich-text-editor/editor-toolbar.d.ts +35 -3
  51. package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
  52. package/dist/components/rich-text-editor/index.d.ts +1 -1
  53. package/dist/components/rich-text-editor/index.d.ts.map +1 -1
  54. package/dist/components/rich-text-editor/index.js +1 -1
  55. package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -1
  56. package/dist/components/rich-text-editor/rich-text-editor.d.ts +98 -15
  57. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  58. package/dist/components/sidebar/index.js +1 -1
  59. package/dist/components/tab-bar/index.js +1 -1
  60. package/dist/components/tool-rail/index.js +1 -1
  61. package/dist/components/tool-rail/tool-rail.d.ts +16 -0
  62. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
  63. package/dist/components/variables-menu/index.d.ts +4 -0
  64. package/dist/components/variables-menu/index.d.ts.map +1 -0
  65. package/dist/components/variables-menu/index.js +6 -0
  66. package/dist/components/variables-menu/index.js.map +1 -0
  67. package/dist/components/variables-menu/variables-menu.agent.d.ts +10 -0
  68. package/dist/components/variables-menu/variables-menu.agent.d.ts.map +1 -0
  69. package/dist/components/variables-menu/variables-menu.d.ts +53 -0
  70. package/dist/components/variables-menu/variables-menu.d.ts.map +1 -0
  71. package/dist/hooks/index.d.ts +2 -0
  72. package/dist/hooks/index.d.ts.map +1 -1
  73. package/dist/hooks/index.js +35 -32
  74. package/dist/hooks/index.js.map +1 -1
  75. package/dist/hooks/use-edge-resize.d.ts +13 -1
  76. package/dist/hooks/use-edge-resize.d.ts.map +1 -1
  77. package/dist/host-compat.css +5 -5
  78. package/dist/i18n/locales/ar.d.ts +77 -6
  79. package/dist/i18n/locales/ar.d.ts.map +1 -1
  80. package/dist/i18n/locales/ar.js +78 -7
  81. package/dist/i18n/locales/ar.js.map +1 -1
  82. package/dist/i18n/locales/de.d.ts +77 -6
  83. package/dist/i18n/locales/de.d.ts.map +1 -1
  84. package/dist/i18n/locales/de.js +78 -7
  85. package/dist/i18n/locales/de.js.map +1 -1
  86. package/dist/i18n/locales/el.d.ts +77 -6
  87. package/dist/i18n/locales/el.d.ts.map +1 -1
  88. package/dist/i18n/locales/el.js +78 -7
  89. package/dist/i18n/locales/el.js.map +1 -1
  90. package/dist/i18n/locales/en.d.ts +77 -6
  91. package/dist/i18n/locales/en.d.ts.map +1 -1
  92. package/dist/i18n/locales/en.js +85 -7
  93. package/dist/i18n/locales/en.js.map +1 -1
  94. package/dist/i18n/locales/es.d.ts +77 -6
  95. package/dist/i18n/locales/es.d.ts.map +1 -1
  96. package/dist/i18n/locales/es.js +78 -7
  97. package/dist/i18n/locales/es.js.map +1 -1
  98. package/dist/i18n/locales/fr.d.ts +77 -6
  99. package/dist/i18n/locales/fr.d.ts.map +1 -1
  100. package/dist/i18n/locales/fr.js +78 -7
  101. package/dist/i18n/locales/fr.js.map +1 -1
  102. package/dist/i18n/locales/hi.d.ts +77 -6
  103. package/dist/i18n/locales/hi.d.ts.map +1 -1
  104. package/dist/i18n/locales/hi.js +78 -7
  105. package/dist/i18n/locales/hi.js.map +1 -1
  106. package/dist/i18n/locales/it.d.ts +77 -6
  107. package/dist/i18n/locales/it.d.ts.map +1 -1
  108. package/dist/i18n/locales/it.js +78 -7
  109. package/dist/i18n/locales/it.js.map +1 -1
  110. package/dist/i18n/locales/ja.d.ts +77 -6
  111. package/dist/i18n/locales/ja.d.ts.map +1 -1
  112. package/dist/i18n/locales/ja.js +78 -7
  113. package/dist/i18n/locales/ja.js.map +1 -1
  114. package/dist/i18n/locales/nl.d.ts +77 -6
  115. package/dist/i18n/locales/nl.d.ts.map +1 -1
  116. package/dist/i18n/locales/nl.js +78 -7
  117. package/dist/i18n/locales/nl.js.map +1 -1
  118. package/dist/i18n/locales/pl.d.ts +77 -6
  119. package/dist/i18n/locales/pl.d.ts.map +1 -1
  120. package/dist/i18n/locales/pl.js +78 -7
  121. package/dist/i18n/locales/pl.js.map +1 -1
  122. package/dist/i18n/locales/pt.d.ts +77 -6
  123. package/dist/i18n/locales/pt.d.ts.map +1 -1
  124. package/dist/i18n/locales/pt.js +78 -7
  125. package/dist/i18n/locales/pt.js.map +1 -1
  126. package/dist/i18n/locales/ro.d.ts +77 -6
  127. package/dist/i18n/locales/ro.d.ts.map +1 -1
  128. package/dist/i18n/locales/ro.js +78 -7
  129. package/dist/i18n/locales/ro.js.map +1 -1
  130. package/dist/i18n/locales/ru.d.ts +77 -6
  131. package/dist/i18n/locales/ru.d.ts.map +1 -1
  132. package/dist/i18n/locales/ru.js +78 -7
  133. package/dist/i18n/locales/ru.js.map +1 -1
  134. package/dist/i18n/locales/sq.d.ts +77 -6
  135. package/dist/i18n/locales/sq.d.ts.map +1 -1
  136. package/dist/i18n/locales/sq.js +78 -7
  137. package/dist/i18n/locales/sq.js.map +1 -1
  138. package/dist/i18n/locales/sv.d.ts +77 -6
  139. package/dist/i18n/locales/sv.d.ts.map +1 -1
  140. package/dist/i18n/locales/sv.js +78 -7
  141. package/dist/i18n/locales/sv.js.map +1 -1
  142. package/dist/i18n/locales/tr.d.ts +77 -6
  143. package/dist/i18n/locales/tr.d.ts.map +1 -1
  144. package/dist/i18n/locales/tr.js +78 -7
  145. package/dist/i18n/locales/tr.js.map +1 -1
  146. package/dist/i18n/locales/zh.d.ts +77 -6
  147. package/dist/i18n/locales/zh.d.ts.map +1 -1
  148. package/dist/i18n/locales/zh.js +78 -7
  149. package/dist/i18n/locales/zh.js.map +1 -1
  150. package/dist/index.js +916 -913
  151. package/dist/index.js.map +1 -1
  152. package/dist/locales/ar.json +78 -7
  153. package/dist/locales/de.json +78 -7
  154. package/dist/locales/el.json +78 -7
  155. package/dist/locales/en.json +78 -7
  156. package/dist/locales/es.json +78 -7
  157. package/dist/locales/fr.json +78 -7
  158. package/dist/locales/hi.json +78 -7
  159. package/dist/locales/it.json +78 -7
  160. package/dist/locales/ja.json +78 -7
  161. package/dist/locales/nl.json +78 -7
  162. package/dist/locales/pl.json +78 -7
  163. package/dist/locales/pt.json +78 -7
  164. package/dist/locales/ro.json +78 -7
  165. package/dist/locales/ru.json +78 -7
  166. package/dist/locales/sq.json +78 -7
  167. package/dist/locales/sv.json +78 -7
  168. package/dist/locales/tr.json +78 -7
  169. package/dist/locales/zh.json +78 -7
  170. package/dist/patterns/calendar/calendar-bookings-panel.d.ts +8 -3
  171. package/dist/patterns/calendar/calendar-bookings-panel.d.ts.map +1 -1
  172. package/dist/patterns/calendar/calendar-care-rules.d.ts +49 -0
  173. package/dist/patterns/calendar/calendar-care-rules.d.ts.map +1 -0
  174. package/dist/patterns/calendar/calendar-task-editor.d.ts +31 -0
  175. package/dist/patterns/calendar/calendar-task-editor.d.ts.map +1 -0
  176. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts.map +1 -1
  177. package/dist/patterns/calendar/calendar-workspace.d.ts +8 -1
  178. package/dist/patterns/calendar/calendar-workspace.d.ts.map +1 -1
  179. package/dist/patterns/calendar/calendar-workspace.model.d.ts +39 -12
  180. package/dist/patterns/calendar/calendar-workspace.model.d.ts.map +1 -1
  181. package/dist/patterns/calendar/calendar.data.d.ts +9 -0
  182. package/dist/patterns/calendar/calendar.data.d.ts.map +1 -1
  183. package/dist/patterns/calendar/calendar.journey.d.ts +35 -3
  184. package/dist/patterns/calendar/calendar.journey.d.ts.map +1 -1
  185. package/dist/patterns/calendar/calendar.model.d.ts +23 -1
  186. package/dist/patterns/calendar/calendar.model.d.ts.map +1 -1
  187. package/dist/patterns/calendar/calendar.sheets.d.ts +21 -3
  188. package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
  189. package/dist/patterns/calendar/calendar.surface.d.ts +6 -1
  190. package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
  191. package/dist/patterns/calendar/calendar.types.d.ts +32 -1
  192. package/dist/patterns/calendar/calendar.types.d.ts.map +1 -1
  193. package/dist/patterns/calendar/index.js +1 -1
  194. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts +58 -26
  195. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts.map +1 -1
  196. package/dist/patterns/help-me-write-templates/index.d.ts +1 -1
  197. package/dist/patterns/help-me-write-templates/index.d.ts.map +1 -1
  198. package/dist/patterns/help-me-write-templates/index.js +1 -1
  199. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  200. package/dist/tokens.css +6 -6
  201. package/package.json +5 -1
  202. package/dist/_chunks/calendar-ChJQzRw-.js.map +0 -1
  203. package/dist/_chunks/calendar-workspace-qlxrxCqm.js +0 -11392
  204. package/dist/_chunks/calendar-workspace-qlxrxCqm.js.map +0 -1
  205. package/dist/_chunks/control-room-rail-CnNZusR5.js +0 -337
  206. package/dist/_chunks/control-room-rail-CnNZusR5.js.map +0 -1
  207. package/dist/_chunks/face-scheme-Dg6ZyLKb.js.map +0 -1
  208. package/dist/_chunks/help-me-write-templates-B-m7zgJa.js +0 -775
  209. package/dist/_chunks/help-me-write-templates-B-m7zgJa.js.map +0 -1
  210. package/dist/_chunks/highlighter-DSkckT2Q.js +0 -15
  211. package/dist/_chunks/highlighter-DSkckT2Q.js.map +0 -1
  212. package/dist/_chunks/notes-panel-CRAovkjx.js.map +0 -1
  213. package/dist/_chunks/panel-subview-PMBRPFOa.js.map +0 -1
  214. package/dist/_chunks/rich-text-editor-DUMeifwc.js +0 -3176
  215. package/dist/_chunks/rich-text-editor-DUMeifwc.js.map +0 -1
  216. package/dist/_chunks/tab-bar-rDkLiaA6.js +0 -268
  217. package/dist/_chunks/tab-bar-rDkLiaA6.js.map +0 -1
  218. package/dist/_chunks/tool-rail-D89USYE6.js.map +0 -1
  219. package/dist/_chunks/use-edge-resize-ZnGG7gyO.js +0 -139
  220. package/dist/_chunks/use-edge-resize-ZnGG7gyO.js.map +0 -1
  221. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js +0 -32
  222. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js.map +0 -1
  223. package/dist/_chunks/wand-sparkles-DAjKyhz7.js +0 -27
  224. package/dist/_chunks/wand-sparkles-DAjKyhz7.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ import { type KeyboardEvent as ReactKeyboardEvent } from 'react';
2
+ export type VariablesMenuGroup = 'patient' | 'appointment' | 'practice' | 'operator' | 'document';
3
+ /** A single merge variable the menu can insert. */
4
+ export interface VariablesMenuVariable {
5
+ /** Inserted as `[[token]]`. Letters, digits and underscores only. */
6
+ token: string;
7
+ /** Localised label shown at the start of the row. */
8
+ label: string;
9
+ /** Optional second line (reserved for a future resolved-value preview). */
10
+ description?: string;
11
+ /** One of the fixed catalogue groups. Ungrouped variables land in "Other". */
12
+ group?: VariablesMenuGroup | string;
13
+ }
14
+ export type VariablesMenuCloseReason = 'escape' | 'select' | 'outside' | 'backspace';
15
+ /** Imperative surface for a host that owns its own keydown handling (the
16
+ * caret anchor forwards key events from the editor's contenteditable region,
17
+ * which sits outside this component's own DOM subtree). */
18
+ export interface VariablesMenuHandle {
19
+ /** Forward a keydown from the host. Returns true when the menu consumed
20
+ * it — the host should then call `preventDefault`/`stopPropagation`. */
21
+ handleKeyDown: (event: ReactKeyboardEvent | KeyboardEvent) => boolean;
22
+ /** Focus the search field (button anchor only — the caret anchor keeps
23
+ * focus in the editor and never calls this). */
24
+ focusSearch: () => void;
25
+ }
26
+ export interface VariablesMenuProps {
27
+ /** Stable id for agent registration / DOM addressing. */
28
+ id?: string;
29
+ className?: string;
30
+ /** The full catalogue on offer. */
31
+ variables: VariablesMenuVariable[];
32
+ /** Most-recently-used tokens, most recent first. Only the first 3 render. */
33
+ recentTokens?: string[];
34
+ /** Current filter text. Always controlled — the caret anchor mirrors the
35
+ * text the reader is typing into the document; the button anchor mirrors
36
+ * its own search field. */
37
+ query: string;
38
+ onQueryChange: (query: string) => void;
39
+ onSelect: (variable: VariablesMenuVariable) => void;
40
+ onClose: (reason: VariablesMenuCloseReason) => void;
41
+ /** False for the caret anchor: no search field at all — the text typed
42
+ * after `[[` in the document is the filter, the host's contenteditable
43
+ * keeps focus and forwards keys via the imperative handle. Default true. */
44
+ searchFocusable?: boolean;
45
+ 'aria-label'?: string;
46
+ /** Fires whenever the active row's DOM id changes (including to
47
+ * `undefined` when the list is empty). The caret anchor mirrors this onto
48
+ * the editor's own `aria-activedescendant`, since focus — and so the
49
+ * combobox role — lives on the contenteditable, not in this component. */
50
+ onActiveDescendantChange?: (id: string | undefined) => void;
51
+ }
52
+ export declare const VariablesMenu: import("react").ForwardRefExoticComponent<VariablesMenuProps & import("react").RefAttributes<VariablesMenuHandle>>;
53
+ //# sourceMappingURL=variables-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables-menu.d.ts","sourceRoot":"","sources":["../../../src/components/variables-menu/variables-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,aAAa,IAAI,kBAAkB,EAEzC,MAAM,OAAO,CAAC;AAmBf,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,aAAa,GACb,UAAU,GACV,UAAU,GACV,UAAU,CAAC;AAEf,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,MAAM,wBAAwB,GAChC,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEhB;;2DAE2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC;4EACwE;IACxE,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,KAAK,OAAO,CAAC;IACtE;oDACgD;IAChD,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;+BAE2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACpD;;gFAE4E;IAC5E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;8EAG0E;IAC1E,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC7D;AA+JD,eAAO,MAAM,aAAa,oHAqTxB,CAAC"}
@@ -28,4 +28,6 @@ export { useCheckAnimation, type UseCheckAnimationOptions, type UseCheckAnimatio
28
28
  export { useExitTransition, type UseExitTransitionOptions, type UseExitTransitionReturn, } from './use-exit-transition';
29
29
  export { usePresenceTransition, type PresencePhase, type UsePresenceTransitionOptions, type UsePresenceTransitionReturn, } from './use-presence-transition';
30
30
  export { useListReflow, REFLOW_ROW_CLASS, type UseListReflowOptions, type UseListReflowReturn, } from './use-list-reflow';
31
+ export { useClampOverflow } from './use-clamp-overflow';
32
+ export { useScrollOverflow, type UseScrollOverflowReturn, } from './use-scroll-overflow';
31
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { u as y } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
- import { u as v } from "../_chunks/use-media-query-CcAx5SMM.js";
3
- import { Z as R, u as _, a as w, b as F } from "../_chunks/use-zoom-drilldown-qCX34w9I.js";
1
+ import { u as h } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
+ import { u as y } from "../_chunks/use-media-query-CcAx5SMM.js";
3
+ import { Z as D, u as R, a as _, b as F } from "../_chunks/use-zoom-drilldown-qCX34w9I.js";
4
4
  import { u as g } from "../_chunks/use-count-up-BLLetaZ8.js";
5
5
  import { u as k } from "../_chunks/use-locale-BkCIHujH.js";
6
6
  import { A as M, T as V, a as W, r as H, t as N, u as Y } from "../_chunks/use-theme-CAuo6EYT.js";
@@ -11,15 +11,16 @@ import { useState as b, useRef as x, useEffect as E } from "react";
11
11
  import { u as Q, a as J } from "../_chunks/use-direction-Dp8h70PP.js";
12
12
  import { u as $ } from "../_chunks/use-persistent-state-nZwZAnE9.js";
13
13
  import { u as te } from "../_chunks/use-isomorphic-layout-effect-BGfaCOP1.js";
14
- import { u as oe } from "../_chunks/use-overflow-collapse-BIOzKbni.js";
15
- import { c as se, u as ne } from "../_chunks/use-priority-overflow-c9SjxZkZ.js";
16
- import { u as ie } from "../_chunks/use-web-otp-D_utzp6S.js";
14
+ import { u as oe, a as ue } from "../_chunks/use-scroll-overflow-UbLrUfBo.js";
15
+ import { c as ne, u as ae } from "../_chunks/use-priority-overflow-c9SjxZkZ.js";
16
+ import { u as ce } from "../_chunks/use-web-otp-D_utzp6S.js";
17
17
  import { u as fe } from "../_chunks/use-visual-viewport-pin-ChurOsHM.js";
18
- import { u as me } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
19
- import { u as pe } from "../_chunks/use-countdown-Yd6ts0_a.js";
20
- import { u as Ee } from "../_chunks/use-check-animation--I3cS00X.js";
21
- import { R as Te, u as Se, a as Ce } from "../_chunks/use-list-reflow-Cw43nxw5.js";
22
- import { u as Ae } from "../_chunks/use-presence-transition-cDwWUXV-.js";
18
+ import { u as de } from "../_chunks/use-edge-resize-BHesP0kg.js";
19
+ import { u as xe } from "../_chunks/use-countdown-Yd6ts0_a.js";
20
+ import { u as be } from "../_chunks/use-check-animation--I3cS00X.js";
21
+ import { R as Te, u as Ce, a as Le } from "../_chunks/use-list-reflow-Cw43nxw5.js";
22
+ import { u as Oe } from "../_chunks/use-presence-transition-cDwWUXV-.js";
23
+ import { u as ve } from "../_chunks/use-clamp-overflow-DQE2kwZ9.js";
23
24
  function C(e, o) {
24
25
  const [t, i] = b(e), u = x(null);
25
26
  return E(() => {
@@ -33,7 +34,7 @@ function C(e, o) {
33
34
  return u.current = n, () => clearTimeout(n);
34
35
  }, [e, o]), t;
35
36
  }
36
- const T = [
37
+ const S = [
37
38
  "a[href]",
38
39
  "button:not([disabled])",
39
40
  'input:not([disabled]):not([type="hidden"])',
@@ -46,7 +47,7 @@ const T = [
46
47
  ].join(",");
47
48
  function p(e) {
48
49
  return Array.from(
49
- e.querySelectorAll(T)
50
+ e.querySelectorAll(S)
50
51
  ).filter((o) => {
51
52
  if (o.hidden) return !1;
52
53
  let t = o;
@@ -67,7 +68,7 @@ function L(e, o = {}) {
67
68
  const s = p(a)[0] ?? (a.tabIndex >= -1 ? a : null);
68
69
  s == null || s.focus();
69
70
  }
70
- function l(r) {
71
+ function f(r) {
71
72
  if (r.key !== "Tab") return;
72
73
  const s = e.current;
73
74
  if (!s) return;
@@ -76,11 +77,11 @@ function L(e, o = {}) {
76
77
  r.preventDefault();
77
78
  return;
78
79
  }
79
- const m = c[0], d = c[c.length - 1], f = document.activeElement;
80
- r.shiftKey ? (f === m || !s.contains(f)) && (r.preventDefault(), d.focus()) : (f === d || !s.contains(f)) && (r.preventDefault(), m.focus());
80
+ const m = c[0], d = c[c.length - 1], l = document.activeElement;
81
+ r.shiftKey ? (l === m || !s.contains(l)) && (r.preventDefault(), d.focus()) : (l === d || !s.contains(l)) && (r.preventDefault(), m.focus());
81
82
  }
82
- return a.addEventListener("keydown", l), () => {
83
- if (a.removeEventListener("keydown", l), u && n.current) {
83
+ return a.addEventListener("keydown", f), () => {
84
+ if (a.removeEventListener("keydown", f), u && n.current) {
84
85
  const r = n.current;
85
86
  requestAnimationFrame(() => {
86
87
  r.isConnected && r.focus();
@@ -94,36 +95,38 @@ export {
94
95
  Te as REFLOW_ROW_CLASS,
95
96
  V as THEME_CLASS,
96
97
  W as THEME_STORAGE_KEY,
97
- R as ZOOM_DRILLDOWN_TRANSITION_CLASS,
98
- se as computePriorityLayout,
98
+ D as ZOOM_DRILLDOWN_TRANSITION_CLASS,
99
+ ne as computePriorityLayout,
99
100
  H as resolveTheme,
100
101
  N as themeClassList,
101
- Ee as useCheckAnimation,
102
+ be as useCheckAnimation,
103
+ ve as useClampOverflow,
102
104
  q as useControllableState,
103
105
  G as useCopyToClipboard,
104
106
  g as useCountUp,
105
- pe as useCountdown,
107
+ xe as useCountdown,
106
108
  j as useDebouncedCallback,
107
109
  C as useDebouncedValue,
108
110
  Q as useDirection,
109
111
  J as useDocumentDirection,
110
- me as useEdgeResize,
111
- Se as useExitTransition,
112
+ de as useEdgeResize,
113
+ Ce as useExitTransition,
112
114
  L as useFocusTrap,
113
115
  te as useIsomorphicLayoutEffect,
114
- Ce as useListReflow,
116
+ Le as useListReflow,
115
117
  k as useLocale,
116
- v as useMediaQuery,
118
+ y as useMediaQuery,
117
119
  oe as useOverflowCollapse,
118
120
  $ as usePersistentState,
119
- y as usePrefersReducedMotion,
120
- Ae as usePresenceTransition,
121
- ne as usePriorityOverflow,
122
- _ as useScrollToFirstError,
123
- w as useSigningSession,
121
+ h as usePrefersReducedMotion,
122
+ Oe as usePresenceTransition,
123
+ ae as usePriorityOverflow,
124
+ ue as useScrollOverflow,
125
+ R as useScrollToFirstError,
126
+ _ as useSigningSession,
124
127
  Y as useTheme,
125
128
  fe as useVisualViewportPin,
126
- ie as useWebOtp,
129
+ ce as useWebOtp,
127
130
  F as useZoomDrilldown
128
131
  };
129
132
  //# 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"],"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;"}
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;"}
@@ -43,6 +43,18 @@ export interface UseEdgeResizeOptions {
43
43
  disabled?: boolean;
44
44
  /** Fired with the committed px width; `null` means reset-to-default. */
45
45
  onResize?: (size: number | null) => void;
46
+ /**
47
+ * Controlled committed width, px; `null` for the token-driven default.
48
+ * When provided (including `null`), the hook applies it to the target's
49
+ * CSS property on mount and on every change — mirroring the "re-assert
50
+ * on remount" effect components already run for the uncontrolled case.
51
+ * Dragging and keyboard steps still update the CSS property and fire
52
+ * `onResize` immediately for a responsive handle; the host is expected
53
+ * to feed the committed value back through `size` on its next render,
54
+ * the same contract as a controlled form input. Omit for uncontrolled
55
+ * (internally-owned) sizing — the hook's default and existing behaviour.
56
+ */
57
+ size?: number | null;
46
58
  }
47
59
  export interface EdgeResizeSeparatorProps {
48
60
  role: 'separator';
@@ -74,5 +86,5 @@ export interface UseEdgeResizeReturn {
74
86
  /** Programmatic reset to the token-driven default width. */
75
87
  reset: () => void;
76
88
  }
77
- export declare function useEdgeResize({ edge, targetRef, cssProperty, minSize, maxSize, defaultSize, disabled, onResize, }: UseEdgeResizeOptions): UseEdgeResizeReturn;
89
+ export declare function useEdgeResize({ edge, targetRef, cssProperty, minSize, maxSize, defaultSize, disabled, onResize, size: controlledSize, }: UseEdgeResizeOptions): UseEdgeResizeReturn;
78
90
  //# sourceMappingURL=use-edge-resize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-edge-resize.d.ts","sourceRoot":"","sources":["../../src/hooks/use-edge-resize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,YAAY,IAAI,iBAAiB,EACtC,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC;IACpC,wEAAwE;IACxE,SAAS,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,UAAU,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC7D,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACjE,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACvD,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,cAAc,EAAE,wBAAwB,CAAC;IACzC,2EAA2E;IAC3E,UAAU,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAO,EACP,OAAO,EACP,WAAW,EACX,QAAgB,EAChB,QAAQ,GACT,EAAE,oBAAoB,GAAG,mBAAmB,CAoL5C"}
1
+ {"version":3,"file":"use-edge-resize.d.ts","sourceRoot":"","sources":["../../src/hooks/use-edge-resize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,YAAY,IAAI,iBAAiB,EACtC,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC;IACpC,wEAAwE;IACxE,SAAS,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,UAAU,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC7D,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACjE,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACvD,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,cAAc,EAAE,wBAAwB,CAAC;IACzC,2EAA2E;IAC3E,UAAU,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAO,EACP,OAAO,EACP,WAAW,EACX,QAAgB,EAChB,QAAQ,EACR,IAAI,EAAE,cAAc,GACrB,EAAE,oBAAoB,GAAG,mBAAmB,CAuM5C"}
@@ -520,12 +520,12 @@
520
520
  .ds\:grid-cols-\[repeat\(auto-fit\,minmax\(12rem\,1fr\)\)\] {
521
521
  grid-template-columns:repeat(auto-fit,minmax(192px,1fr));
522
522
  }
523
+ .ds\:py-\[0\.0625rem\] {
524
+ padding-block:1px;
525
+ }
523
526
  .ds\:text-\[7rem\] {
524
527
  font-size:112px;
525
528
  }
526
- .ds\:\[block-size\:14rem\] {
527
- block-size:224px;
528
- }
529
529
  .ds\:\[block-size\:44rem\] {
530
530
  block-size:704px;
531
531
  }
@@ -562,8 +562,8 @@
562
562
  .ds\:\[max-block-size\:14rem\] {
563
563
  max-block-size:224px;
564
564
  }
565
- .ds\:\[max-block-size\:16rem\] {
566
- max-block-size:256px;
565
+ .ds\:\[max-block-size\:16\.5rem\] {
566
+ max-block-size:264px;
567
567
  }
568
568
  .ds\:\[max-inline-size\:6\.5rem\] {
569
569
  max-inline-size:104px;
@@ -2796,9 +2796,26 @@ export declare const arUi: {
2796
2796
  readonly heading: "عنوان";
2797
2797
  readonly extensions: "إضافات المحرر";
2798
2798
  readonly insertVariable: "إدراج متغير";
2799
- readonly variables: "المتغيرات";
2799
+ readonly variables: {
2800
+ readonly menuLabel: "المتغيرات";
2801
+ readonly search: "البحث عن المتغيرات…";
2802
+ readonly recent: "الأخيرة";
2803
+ readonly groups: {
2804
+ readonly patient: "المريض";
2805
+ readonly appointment: "الموعد";
2806
+ readonly practice: "العيادة";
2807
+ readonly operator: "المُشغّل";
2808
+ readonly document: "المستند";
2809
+ readonly other: "أخرى";
2810
+ };
2811
+ readonly empty: "لا يوجد متغير يطابق «{{query}}»";
2812
+ readonly footer: {
2813
+ readonly navigate: "التنقل";
2814
+ readonly insert: "الإدراج";
2815
+ readonly close: "إغلاق";
2816
+ };
2817
+ };
2800
2818
  readonly variableInvalid: "متغير غير صالح: {{tokens}}. اختر متغيرًا من إدراج متغير.";
2801
- readonly variableNoMatch: "لا يوجد متغير يطابق «{{query}}»";
2802
2819
  readonly more: "المزيد من الخيارات";
2803
2820
  readonly link: {
2804
2821
  readonly url: "URL";
@@ -2889,6 +2906,17 @@ export declare const arUi: {
2889
2906
  readonly autoFormat: "تنسيق المستند تلقائيًا";
2890
2907
  readonly consentRecorded: "تم تسجيل الموافقة على المساعدة بالذكاء الاصطناعي.";
2891
2908
  readonly consentRegionLabel: "موافقة المساعدة بالذكاء الاصطناعي لهذا المستند";
2909
+ readonly templates: "القوالب";
2910
+ readonly templatesGroup: "قوالب العيادة";
2911
+ readonly noTemplates: "لا توجد قوالب بعد";
2912
+ readonly templatesNoteEmpty: "الملاحظة فارغة. أملِ أو اكتب أولًا لاستخدام قالب.";
2913
+ readonly createFirstTemplate: "أنشئ قالبك الأول";
2914
+ readonly manageTemplates: "إدارة القوالب";
2915
+ readonly defaultBadge: "افتراضي";
2916
+ readonly actionError: "حدث خطأ ما. حاول مرة أخرى.";
2917
+ readonly actionStale: "تغيّر النص أثناء إعادة الكتابة. لم يُستبدل أي شيء. حاول مرة أخرى.";
2918
+ readonly selectionTools: "أدوات التحديد";
2919
+ readonly actionDone: "تم. جرى تحديث الملاحظة.";
2892
2920
  };
2893
2921
  };
2894
2922
  readonly payment: {
@@ -3144,6 +3172,8 @@ export declare const arUi: {
3144
3172
  };
3145
3173
  readonly helpMeWriteTemplates: {
3146
3174
  readonly bar: {
3175
+ readonly contextDocument: "يستخدم الملاحظة كلها سياقًا. تُدرج المسودة عند المؤشر.";
3176
+ readonly contextSelection: "يستخدم النص المحدد سياقًا. تحل المسودة محله.";
3147
3177
  readonly templatesMenu: "القوالب";
3148
3178
  readonly templatesGroup: "قوالب العيادة";
3149
3179
  readonly createFirst: "أنشئ قالبك الأول";
@@ -3188,10 +3218,12 @@ export declare const arUi: {
3188
3218
  };
3189
3219
  readonly manager: {
3190
3220
  readonly title: "قوالب الذكاء الاصطناعي";
3191
- readonly description: "مشتركة مع جميع أعضاء العيادة. يظهر القالب الافتراضي أولًا.";
3221
+ readonly description: "مشتركة مع كل من في العيادة. اسحب لتحديد ترتيب قائمة القوالب.";
3192
3222
  readonly new: "قالب جديد";
3193
3223
  readonly done: "تم";
3194
3224
  readonly listLabel: "القوالب";
3225
+ readonly reorderHandle: "إعادة ترتيب {{label}}. اضغط Alt + أعلى أو Alt + أسفل للنقل.";
3226
+ readonly reorderAnnounce: "تم نقل {{label}} إلى الموضع {{to}} من {{total}}";
3195
3227
  readonly edit: "تعديل {{name}}";
3196
3228
  readonly delete: "حذف {{name}}";
3197
3229
  readonly emptyTitle: "لا توجد قوالب بعد";
@@ -4161,7 +4193,10 @@ export declare const arUi: {
4161
4193
  readonly actions: {
4162
4194
  readonly groupLabel: "إجراءات الأجندة";
4163
4195
  readonly schedulingLabel: "الجدولة";
4196
+ readonly createGroupLabel: "إنشاء جديد";
4197
+ readonly toolsLabel: "أدوات الأجندة";
4164
4198
  readonly newAppointment: "موعد جديد";
4199
+ readonly newTask: "مهمة جديدة";
4165
4200
  readonly privacy: "وضع الخصوصية";
4166
4201
  readonly findFreeSlots: "البحث عن مواعيد متاحة";
4167
4202
  readonly printDay: "طباعة اليوم";
@@ -4546,6 +4581,8 @@ export declare const arUi: {
4546
4581
  readonly chairBusy: "الكرسي المختار مشغول في وقت الموعد.";
4547
4582
  readonly operatorBusy: "المعالج المختار مشغول في وقت الموعد.";
4548
4583
  readonly operatorAbsent: "المعالج المختار غائب في تاريخ الموعد.";
4584
+ readonly careRestrictedResourceHint: "غير مسموح به لهذه الخدمة";
4585
+ readonly careRestrictionConflict: "لا يوجد معالج/كرسي مشترك بين الخدمات المحددة";
4549
4586
  readonly reminderDisabled: "(معطّل)";
4550
4587
  readonly priceListAllPhases: "كل المراحل";
4551
4588
  readonly priceListBilled: "إجراء غير مسموح: الخدمة صدرت لها فاتورة بالفعل.";
@@ -4581,6 +4618,32 @@ export declare const arUi: {
4581
4618
  readonly signMode_two: "توقيع مستندين مطلوبين";
4582
4619
  readonly signMode_few: "توقيع {{count}} مستندات مطلوبة";
4583
4620
  };
4621
+ readonly taskEditor: {
4622
+ readonly title: "مهمة جديدة";
4623
+ readonly editTitle: "تعديل المهمة";
4624
+ readonly date: "التاريخ";
4625
+ readonly time: "الوقت";
4626
+ readonly note: "ملاحظة";
4627
+ readonly noteRequired: "أدخل ملاحظة.";
4628
+ readonly operator: "المشغّل";
4629
+ readonly operatorNone: "بلا مشغّل";
4630
+ readonly about: "يخص";
4631
+ readonly aboutNobody: "لا أحد";
4632
+ readonly aboutPatient: "المريض";
4633
+ readonly aboutCompany: "الشركة";
4634
+ readonly companyName: "اسم الشركة";
4635
+ readonly companyUnresolved: "الشركة المرتبطة (غير مدرجة): {{id}}";
4636
+ readonly companyReplace: "استبدال الشركة";
4637
+ readonly done: "مكتملة";
4638
+ readonly save: "حفظ";
4639
+ readonly cancel: "إلغاء";
4640
+ readonly delete: "حذف";
4641
+ readonly deleteConfirmTitle: "هل تريد حذف هذه المهمة؟";
4642
+ readonly deleteConfirmBody: "ستتم إزالة المهمة. لا يمكن التراجع عن هذا الإجراء هنا.";
4643
+ readonly deleteConfirm: "حذف";
4644
+ readonly deleteCancel: "الاحتفاظ";
4645
+ readonly readOnlyBody: "هذه المهمة للقراءة فقط.";
4646
+ };
4584
4647
  readonly findSlots: {
4585
4648
  readonly bandOptions: "الخيارات المتاحة";
4586
4649
  readonly tool: "البحث عن مواعيد متاحة";
@@ -4809,16 +4872,19 @@ export declare const arUi: {
4809
4872
  readonly undone: "تمت استعادة المدة";
4810
4873
  };
4811
4874
  readonly bookings: {
4812
- readonly title: "الحجوزات عبر الإنترنت";
4813
- readonly intro: "حجوزات آخر ثلاثين يوماً التي ما زالت تحتاج إلى مريض أو معالج.";
4875
+ readonly title: "بحاجة إلى إكمال";
4876
+ readonly intro: "المواعيد الظاهرة التي ما زالت تحتاج إلى مريض أو معالج أو كرسي، أياً كانت طريقة إنشائها.";
4814
4877
  readonly new: "جديد";
4815
4878
  readonly bookedOn: "حُجز في {{date}}";
4816
4879
  readonly needsPatient: "تعيين مريض";
4817
4880
  readonly needsOperator: "تعيين معالج";
4881
+ readonly needsChair: "تعيين كرسي";
4818
4882
  readonly assignPatient: "تعيين مريض";
4819
4883
  readonly assignOperator: "تعيين معالج";
4884
+ readonly assignChair: "تعيين كرسي";
4820
4885
  readonly assignPatientShort: "المريض";
4821
4886
  readonly assignOperatorShort: "المعالج";
4887
+ readonly assignChairShort: "الكرسي";
4822
4888
  readonly edit: "تعديل الموعد";
4823
4889
  readonly whatsapp: "مراسلة عبر واتساب";
4824
4890
  readonly whatsappNoNumber: "لا يوجد رقم واتساب لهذا الحجز";
@@ -4828,7 +4894,11 @@ export declare const arUi: {
4828
4894
  readonly current: "الحجز المحدد";
4829
4895
  readonly showInCalendarNamed: "إظهار حجز {{when}} في الأجندة";
4830
4896
  readonly showInCalendar: "إظهار في الأجندة";
4831
- readonly emptyTitle: "لا توجد حجوزات للمراجعة.";
4897
+ readonly emptyTitle: "لا توجد مواعيد لإكمالها.";
4898
+ readonly filterNoPatient: "بدون مريض";
4899
+ readonly filterNoOperator: "بدون معالج";
4900
+ readonly filterNoChair: "بدون كرسي";
4901
+ readonly notShownOnChairAxis: "لا تظهر في أعمدة الكراسي حتى يتم تعيين كرسي.";
4832
4902
  };
4833
4903
  readonly waitingList: {
4834
4904
  readonly removed: "أُزيل من قائمة الانتظار";
@@ -4872,6 +4942,7 @@ export declare const arUi: {
4872
4942
  };
4873
4943
  readonly readOnly: {
4874
4944
  readonly createBlocked: "ليست لديك صلاحية إنشاء المواعيد.";
4945
+ readonly createTaskBlocked: "ليست لديك صلاحية إنشاء المهام.";
4875
4946
  readonly changeBlocked: "ليست لديك صلاحية تعديل المواعيد.";
4876
4947
  readonly waitingBlocked: "ليست لديك صلاحية تعديل قائمة الانتظار.";
4877
4948
  readonly waitingLockedBody: "ليست لديك صلاحية تعديل قائمة الانتظار — اطلب من مالك العيادة صلاحية تعديل التقويم.";
@@ -1 +1 @@
1
- {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA02JP,CAAC"}
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAs7JP,CAAC"}