@alfadocs/ui-kit 1.43.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 (105) hide show
  1. package/dist/_chunks/{calendar-ChJQzRw-.js → calendar-U6N0F99w.js} +383 -359
  2. package/dist/_chunks/calendar-workspace-DBYAtdyd.js +12161 -0
  3. package/dist/_chunks/{face-scheme-Dg6ZyLKb.js → face-scheme-Bm6pe7R8.js} +265 -275
  4. package/dist/_chunks/help-me-write-templates-GUeEn3Ff.js +741 -0
  5. package/dist/_chunks/{notes-panel-CRAovkjx.js → notes-panel-CY4KmDo-.js} +159 -152
  6. package/dist/_chunks/{panel-subview-PMBRPFOa.js → panel-subview-CYnuX-KR.js} +61 -40
  7. package/dist/_chunks/rich-text-editor-BYE6kK4u.js +3839 -0
  8. package/dist/_chunks/undo-2-CYNAzclj.js +26 -0
  9. package/dist/_chunks/variables-menu-vXUaSBj4.js +401 -0
  10. package/dist/agent-catalog.json +84 -3
  11. package/dist/agent-i18n/en.json +14 -3
  12. package/dist/components/calendar/calendar.d.ts +6 -0
  13. package/dist/components/calendar/index.js +1 -1
  14. package/dist/components/face-scheme/index.js +1 -1
  15. package/dist/components/index.d.ts +1 -0
  16. package/dist/components/notes-panel/index.js +1 -1
  17. package/dist/components/notes-panel/notes-panel.d.ts +4 -0
  18. package/dist/components/panel-subview/index.js +1 -1
  19. package/dist/components/panel-subview/panel-subview.d.ts +6 -0
  20. package/dist/components/rich-text-editor/editor-toolbar.d.ts +35 -3
  21. package/dist/components/rich-text-editor/index.d.ts +1 -1
  22. package/dist/components/rich-text-editor/index.js +1 -1
  23. package/dist/components/rich-text-editor/rich-text-editor.d.ts +98 -15
  24. package/dist/components/variables-menu/index.d.ts +4 -0
  25. package/dist/components/variables-menu/index.js +6 -0
  26. package/dist/components/variables-menu/variables-menu.agent.d.ts +10 -0
  27. package/dist/components/variables-menu/variables-menu.d.ts +53 -0
  28. package/dist/host-compat.css +5 -5
  29. package/dist/i18n/locales/ar.d.ts +77 -6
  30. package/dist/i18n/locales/ar.js +78 -7
  31. package/dist/i18n/locales/de.d.ts +77 -6
  32. package/dist/i18n/locales/de.js +78 -7
  33. package/dist/i18n/locales/el.d.ts +77 -6
  34. package/dist/i18n/locales/el.js +78 -7
  35. package/dist/i18n/locales/en.d.ts +77 -6
  36. package/dist/i18n/locales/en.js +85 -7
  37. package/dist/i18n/locales/es.d.ts +77 -6
  38. package/dist/i18n/locales/es.js +78 -7
  39. package/dist/i18n/locales/fr.d.ts +77 -6
  40. package/dist/i18n/locales/fr.js +78 -7
  41. package/dist/i18n/locales/hi.d.ts +77 -6
  42. package/dist/i18n/locales/hi.js +78 -7
  43. package/dist/i18n/locales/it.d.ts +77 -6
  44. package/dist/i18n/locales/it.js +78 -7
  45. package/dist/i18n/locales/ja.d.ts +77 -6
  46. package/dist/i18n/locales/ja.js +78 -7
  47. package/dist/i18n/locales/nl.d.ts +77 -6
  48. package/dist/i18n/locales/nl.js +78 -7
  49. package/dist/i18n/locales/pl.d.ts +77 -6
  50. package/dist/i18n/locales/pl.js +78 -7
  51. package/dist/i18n/locales/pt.d.ts +77 -6
  52. package/dist/i18n/locales/pt.js +78 -7
  53. package/dist/i18n/locales/ro.d.ts +77 -6
  54. package/dist/i18n/locales/ro.js +78 -7
  55. package/dist/i18n/locales/ru.d.ts +77 -6
  56. package/dist/i18n/locales/ru.js +78 -7
  57. package/dist/i18n/locales/sq.d.ts +77 -6
  58. package/dist/i18n/locales/sq.js +78 -7
  59. package/dist/i18n/locales/sv.d.ts +77 -6
  60. package/dist/i18n/locales/sv.js +78 -7
  61. package/dist/i18n/locales/tr.d.ts +77 -6
  62. package/dist/i18n/locales/tr.js +78 -7
  63. package/dist/i18n/locales/zh.d.ts +77 -6
  64. package/dist/i18n/locales/zh.js +78 -7
  65. package/dist/index.js +916 -913
  66. package/dist/locales/ar.json +78 -7
  67. package/dist/locales/de.json +78 -7
  68. package/dist/locales/el.json +78 -7
  69. package/dist/locales/en.json +78 -7
  70. package/dist/locales/es.json +78 -7
  71. package/dist/locales/fr.json +78 -7
  72. package/dist/locales/hi.json +78 -7
  73. package/dist/locales/it.json +78 -7
  74. package/dist/locales/ja.json +78 -7
  75. package/dist/locales/nl.json +78 -7
  76. package/dist/locales/pl.json +78 -7
  77. package/dist/locales/pt.json +78 -7
  78. package/dist/locales/ro.json +78 -7
  79. package/dist/locales/ru.json +78 -7
  80. package/dist/locales/sq.json +78 -7
  81. package/dist/locales/sv.json +78 -7
  82. package/dist/locales/tr.json +78 -7
  83. package/dist/locales/zh.json +78 -7
  84. package/dist/patterns/calendar/calendar-bookings-panel.d.ts +8 -3
  85. package/dist/patterns/calendar/calendar-care-rules.d.ts +49 -0
  86. package/dist/patterns/calendar/calendar-task-editor.d.ts +31 -0
  87. package/dist/patterns/calendar/calendar-workspace.d.ts +8 -1
  88. package/dist/patterns/calendar/calendar-workspace.model.d.ts +39 -12
  89. package/dist/patterns/calendar/calendar.data.d.ts +9 -0
  90. package/dist/patterns/calendar/calendar.journey.d.ts +35 -3
  91. package/dist/patterns/calendar/calendar.model.d.ts +23 -1
  92. package/dist/patterns/calendar/calendar.sheets.d.ts +21 -3
  93. package/dist/patterns/calendar/calendar.surface.d.ts +6 -1
  94. package/dist/patterns/calendar/calendar.types.d.ts +32 -1
  95. package/dist/patterns/calendar/index.js +1 -1
  96. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts +58 -26
  97. package/dist/patterns/help-me-write-templates/index.d.ts +1 -1
  98. package/dist/patterns/help-me-write-templates/index.js +1 -1
  99. package/dist/tokens.css +6 -6
  100. package/package.json +5 -1
  101. package/dist/_chunks/calendar-workspace-DhXqqu-D.js +0 -11392
  102. package/dist/_chunks/help-me-write-templates-B-m7zgJa.js +0 -775
  103. package/dist/_chunks/highlighter-DSkckT2Q.js +0 -15
  104. package/dist/_chunks/rich-text-editor-DUMeifwc.js +0 -3176
  105. package/dist/_chunks/wand-sparkles-DAjKyhz7.js +0 -27
@@ -1,5 +1,5 @@
1
- import { type RefObject } from 'react';
2
- import type { RichTextEditorVariable } from './rich-text-editor';
1
+ import { type ReactNode, type RefObject } from 'react';
2
+ import type { RichTextEditorAiTemplate, RichTextEditorVariable } from './rich-text-editor';
3
3
  export type EditorToolbarPreset = 'minimal' | 'standard' | 'full';
4
4
  export interface EditorToolbarProps {
5
5
  /** Dispatch a Redactor command (and refresh active state). */
@@ -33,6 +33,9 @@ export interface EditorToolbarProps {
33
33
  showExtensions?: boolean;
34
34
  /** Template variables for the "Insert variable" menu (hidden when empty). */
35
35
  variables?: RichTextEditorVariable[];
36
+ /** Most-recently-used tokens, most recent first — rendered as the menu's
37
+ * "Recent" group (max 3). Forwarded from `RichTextEditor`. */
38
+ recentVariableTokens?: string[];
36
39
  /** Insert a variable chip at the saved caret. */
37
40
  insertVariable?: (token: string) => void;
38
41
  }
@@ -68,5 +71,34 @@ export interface ImageFloatingToolbarProps {
68
71
  setImageWidth: (pct: number) => void;
69
72
  }
70
73
  export declare function ImageFloatingToolbar({ areaRef, activeImageEl: img, applyImageClass, setImageWidth, }: ImageFloatingToolbarProps): React.JSX.Element | null;
71
- export declare function EditorToolbar({ run, active, preset, insertHtml, insertTable, saveSelection, restoreSelection, getSelectedText, uploadImage, enableColor, enableImage, enableTable, showExtensions, variables, insertVariable, }: EditorToolbarProps): React.JSX.Element;
74
+ export interface AiTemplatesMenuProps {
75
+ templates: RichTextEditorAiTemplate[];
76
+ onPick: (template: RichTextEditorAiTemplate) => void;
77
+ /** Shows "Manage templates" / "Create your first template". */
78
+ onManage?: (mode: 'list' | 'create') => void;
79
+ /** Nothing to rewrite: the run items disable, the library stays readable. */
80
+ noteEmpty: boolean;
81
+ onOpenChange?: (open: boolean) => void;
82
+ /** The trigger element (rendered `asChild`). */
83
+ trigger: ReactNode;
84
+ /** The pill sits at the editor's bottom edge, so the menu opens upward. */
85
+ side?: 'top' | 'bottom';
86
+ }
87
+ export declare function AiTemplatesMenu({ templates, onPick, onManage, noteEmpty, onOpenChange, trigger, side, }: AiTemplatesMenuProps): React.JSX.Element;
88
+ export interface SelectionFloatingToolbarProps {
89
+ active: ReadonlySet<string>;
90
+ run: EditorToolbarProps['run'];
91
+ /** Positioned container the bubble is absolutely placed within. */
92
+ areaRef: RefObject<HTMLDivElement | null>;
93
+ /** This editor's editable root (`.redactor-in`). */
94
+ getEditorRoot: () => Element | null;
95
+ /** Hide it (an AI action runs, a panel is open). */
96
+ suppressed?: boolean;
97
+ /** Keep it mounted while a menu opened from it is showing. */
98
+ holdOpen?: boolean;
99
+ /** The AI actions, after the formats. */
100
+ children?: ReactNode;
101
+ }
102
+ export declare function SelectionFloatingToolbar({ active, run, areaRef, getEditorRoot, suppressed, holdOpen, children, }: SelectionFloatingToolbarProps): React.JSX.Element | null;
103
+ export declare function EditorToolbar({ run, active, preset, insertHtml, insertTable, saveSelection, restoreSelection, getSelectedText, uploadImage, enableColor, enableImage, enableTable, showExtensions, variables, recentVariableTokens, insertVariable, }: EditorToolbarProps): React.JSX.Element;
72
104
  //# sourceMappingURL=editor-toolbar.d.ts.map
@@ -1,4 +1,4 @@
1
1
  export { RichTextEditor, wrapperVariants } from './rich-text-editor';
2
- export type { RichTextEditorHandle, RichTextEditorProps, RichTextEditorToolbar, RedactorFactory, AiConsentGate, RichTextEditorVariable, HelpMeWriteRenderContext, } from './rich-text-editor';
2
+ export type { RichTextEditorHandle, RichTextEditorProps, RichTextEditorToolbar, RedactorFactory, AiConsentGate, RichTextEditorVariable, HelpMeWriteRenderContext, RichTextEditorAiTemplate, RichTextEditorAiTemplates, RichTextEditorAiActionRequest, RichTextEditorAiApplied, } from './rich-text-editor';
3
3
  export { richTextEditorAgent } from './rich-text-editor.agent';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- import { R as a, r as e, w as i } from "../../_chunks/rich-text-editor-DUMeifwc.js";
1
+ import { R as a, r as e, w as i } from "../../_chunks/rich-text-editor-BYE6kK4u.js";
2
2
  export {
3
3
  a as RichTextEditor,
4
4
  e as richTextEditorAgent,
@@ -42,15 +42,71 @@ export interface RichTextEditorVariable {
42
42
  token: string;
43
43
  /** Human label shown in the menu (translated by the host). */
44
44
  label: string;
45
- /** Optional second line in the menu. */
45
+ /** Optional second line in the menu (reserved for a future resolved-value
46
+ * preview — not rendered yet). */
46
47
  description?: string;
48
+ /**
49
+ * One of the fixed catalogue groups the VariablesMenu renders as section
50
+ * headers: `patient`, `appointment`, `practice`, `operator`, `document`.
51
+ * Any other value (or omitting it) lands the variable in the menu's
52
+ * "Other" group at the end.
53
+ */
54
+ group?: 'patient' | 'appointment' | 'practice' | 'operator' | 'document' | string;
55
+ }
56
+ /** A practice template the AI pill's Templates menu offers. */
57
+ export interface RichTextEditorAiTemplate {
58
+ id: string;
59
+ name: string;
60
+ /** Second line in the menu. */
61
+ description?: string;
62
+ /** @deprecated The host's order is the menu order. Ignored. */
63
+ isDefault?: boolean;
64
+ }
65
+ /**
66
+ * What a one-shot AI action rewrites: the selection when there is one, else
67
+ * the whole document. Resolve with the rewritten HTML for that same scope.
68
+ */
69
+ export interface RichTextEditorAiActionRequest {
70
+ html: string;
71
+ /** `html` as plain text. */
72
+ text: string;
73
+ scope: 'selection' | 'document';
74
+ signal: AbortSignal;
75
+ }
76
+ /** Practice templates as an AI pill segment (and in the selection bubble). */
77
+ export interface RichTextEditorAiTemplates {
78
+ /** In menu order, first to last. */
79
+ templates: RichTextEditorAiTemplate[];
80
+ /** The AI call. Reject with an error named `AiCreditsExhaustedError` on 402. */
81
+ onRun: (request: RichTextEditorAiActionRequest & {
82
+ template: RichTextEditorAiTemplate;
83
+ }) => Promise<string>;
84
+ /** Shows "Manage templates" / "Create your first template". */
85
+ onManage?: (mode: 'list' | 'create') => void;
86
+ }
87
+ /** Fired after a one-shot AI action rewrote the note. */
88
+ export interface RichTextEditorAiApplied {
89
+ action: 'proofread' | 'format' | 'template';
90
+ template?: RichTextEditorAiTemplate;
91
+ scope: 'selection' | 'document';
92
+ /** The document before the change. */
93
+ previousHtml: string;
94
+ /** Puts `previousHtml` back. */
95
+ undo: () => void;
47
96
  }
48
97
  /** What a host's own Help-me-write surface gets from `renderHelpMeWrite`. */
49
98
  export interface HelpMeWriteRenderContext {
50
99
  /** Whether the surface should show (consent is already granted). */
51
100
  open: boolean;
52
101
  onClose: () => void;
53
- /** Text of the selection when the reader opened it; '' for a caret. */
102
+ /**
103
+ * What the reader asked about: `'document'` from the AI pill (use the
104
+ * whole note as context; `insertAtSelection` inserts at the caret) or
105
+ * `'selection'` from the selection bubble (`selectionText` is the context,
106
+ * and `insertAtSelection` replaces it).
107
+ */
108
+ scope: 'document' | 'selection';
109
+ /** Text of the selection when opened from the bubble; '' otherwise. */
54
110
  selectionText: string;
55
111
  getHTML: () => string;
56
112
  getText: () => string;
@@ -157,20 +213,31 @@ export interface RichTextEditorProps {
157
213
  onFinalTranscript: (text: string) => void;
158
214
  }) => Promise<void>;
159
215
  /**
160
- * One-shot AI document actions (CONSUMER-PROVIDED backend). Each gets the
161
- * current HTML + an AbortSignal and resolves with rewritten HTML; while one
162
- * runs the editor is disabled with a spinner and the result replaces the whole
163
- * document. `onProofread` corrects spelling/grammar; `onAutoFormat` tidies the
164
- * document's structure/formatting. Each adds a FAB segment when provided.
216
+ * One-shot AI actions (CONSUMER-PROVIDED backend). Each gets the HTML to
217
+ * rewrite (the selection if there is one, else the whole document) and
218
+ * resolves with the rewritten HTML, which replaces that same scope. While
219
+ * one runs the editor is disabled with a spinner. `onProofread` corrects
220
+ * spelling/grammar; `onAutoFormat` tidies structure/formatting. Each adds a
221
+ * pill segment and a selection-bubble button. Gated by `aiConsent`.
165
222
  */
166
- onProofread?: (ctx: {
167
- html: string;
168
- signal: AbortSignal;
169
- }) => Promise<string>;
170
- onAutoFormat?: (ctx: {
171
- html: string;
172
- signal: AbortSignal;
173
- }) => Promise<string>;
223
+ onProofread?: (ctx: RichTextEditorAiActionRequest) => Promise<string>;
224
+ onAutoFormat?: (ctx: RichTextEditorAiActionRequest) => Promise<string>;
225
+ /** Practice templates: a Templates pill segment that runs one in one click. */
226
+ aiTemplates?: RichTextEditorAiTemplates;
227
+ /** After a one-shot action rewrote the note; use it to offer Undo. */
228
+ onAiApplied?: (applied: RichTextEditorAiApplied) => void;
229
+ /**
230
+ * Sparkle the AI pill when it appears, while an action runs and when the
231
+ * result lands. Default `true`; motion is off under reduced motion and in
232
+ * the accessible themes. The pill carries `data-ai-sparkle` for styling.
233
+ */
234
+ aiSparkle?: boolean;
235
+ /**
236
+ * A bubble over a text selection with quick formats and the AI actions.
237
+ * Default: on when the editor has any AI action (templates, proofread,
238
+ * auto-format or Help me write).
239
+ */
240
+ selectionToolbar?: boolean;
174
241
  /**
175
242
  * Template variables. When provided, the toolbar gains an "Insert variable"
176
243
  * menu that inserts `[[TOKEN]]` as a chip (Redactor's native `variable`
@@ -178,6 +245,20 @@ export interface RichTextEditorProps {
178
245
  * for these tokens in inbound content renders as a chip too.
179
246
  */
180
247
  variables?: RichTextEditorVariable[];
248
+ /**
249
+ * Most-recently-used variable tokens, most recent first. Rendered as a
250
+ * "Recent" group pinned above the catalogue (max 3 shown). The kit never
251
+ * persists this itself — the host owns storage (see `onVariableInserted`
252
+ * and the `usePersistentState` example in this component's `.mdx`).
253
+ */
254
+ recentVariableTokens?: string[];
255
+ /**
256
+ * Fires with the token whenever a variable is inserted from either the
257
+ * toolbar button or the `[[` caret menu — the seam a host uses to build
258
+ * `recentVariableTokens`. Does not fire for typed `[[TOKEN]]` text that
259
+ * becomes a chip on its own (only for a menu pick).
260
+ */
261
+ onVariableInserted?: (token: string) => void;
181
262
  /**
182
263
  * Decide whether a `[[TOKEN]]` is valid. Default: it is one of `variables`
183
264
  * (any letter case). Invalid tokens render as error chips with a message
@@ -213,6 +294,8 @@ export interface RichTextEditorHandle {
213
294
  getText: () => string;
214
295
  /** Always '' — Redactor has no native Markdown serializer (see MDX). */
215
296
  getMarkdown: () => string;
297
+ /** A one-shot AI action (template, spelling, auto-format) is running. */
298
+ isAiBusy: () => boolean;
216
299
  /** HTML goes through DOMPurify before reaching Redactor. */
217
300
  setContent: (html: string) => void;
218
301
  /**
@@ -0,0 +1,4 @@
1
+ export { VariablesMenu } from './variables-menu';
2
+ export type { VariablesMenuProps, VariablesMenuVariable, VariablesMenuGroup, VariablesMenuHandle, VariablesMenuCloseReason, } from './variables-menu';
3
+ export { variablesMenuAgent } from './variables-menu.agent';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,6 @@
1
+ import { V as r, v as s } from "../../_chunks/variables-menu-vXUaSBj4.js";
2
+ export {
3
+ r as VariablesMenu,
4
+ s as variablesMenuAgent
5
+ };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,10 @@
1
+ import type { AgentAdapter } from '../../agent/types';
2
+ interface VariablesMenuAgentHandle {
3
+ getQuery: () => string;
4
+ getVisibleTokens: () => string[];
5
+ selectToken: (token: string) => void;
6
+ close: () => void;
7
+ }
8
+ export declare const variablesMenuAgent: AgentAdapter<VariablesMenuAgentHandle>;
9
+ export {};
10
+ //# sourceMappingURL=variables-menu.agent.d.ts.map
@@ -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
@@ -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: "ليست لديك صلاحية تعديل قائمة الانتظار — اطلب من مالك العيادة صلاحية تعديل التقويم.";