@alfadocs/ui-kit 1.36.0 → 1.37.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 (127) hide show
  1. package/dist/_chunks/appointment-peek-5S4O1VQP.js +115 -0
  2. package/dist/_chunks/appointment-peek.agent-C539tNFM.js +17 -0
  3. package/dist/_chunks/building-2-D33bLCWL.js +24 -0
  4. package/dist/_chunks/calendar-workspace-BqKBj26r.js +9715 -0
  5. package/dist/_chunks/{control-room-rail-Ds45_g4f.js → control-room-rail-DQoHdE1U.js} +2 -2
  6. package/dist/_chunks/editable-description-BOfAeY3T.js +112 -0
  7. package/dist/_chunks/editable-description.agent-Bm_LBV2j.js +21 -0
  8. package/dist/_chunks/{money.agent-Dw55UxUA.js → money-BY-HmKhZ.js} +33 -47
  9. package/dist/_chunks/money.agent-BjJ6gOkx.js +17 -0
  10. package/dist/_chunks/notes-panel-4y5JioWN.js +556 -0
  11. package/dist/_chunks/panel-subview-BNXN8OEL.js +160 -0
  12. package/dist/_chunks/panel-subview.agent-BIBvE-IW.js +17 -0
  13. package/dist/_chunks/{patient-details-f7SSXkTJ.js → patient-details-2cIaL-Zb.js} +2 -2
  14. package/dist/_chunks/{patient-field-row-BQZoP4m2.js → patient-field-row-IHb2VFc2.js} +193 -172
  15. package/dist/_chunks/{patient-summary-card-Bz7KdUin.js → patient-summary-card-BzmJH9a-.js} +2 -2
  16. package/dist/_chunks/{section-card.agent-W18CHEgX.js → section-card-XR2bW1Ie.js} +20 -34
  17. package/dist/_chunks/section-card.agent-Bz1BhM_j.js +17 -0
  18. package/dist/_chunks/smartphone-DaPcFw-X.js +32 -0
  19. package/dist/_chunks/{task-card-BalrLkSz.js → task-card-qTKD1fIT.js} +39 -57
  20. package/dist/_chunks/{task-tray-wl9eti6J.js → task-tray-CQ8UAR2j.js} +2 -2
  21. package/dist/_chunks/{tasks-panel-BDNB7hsZ.js → tasks-panel-CBGMtQ_f.js} +2 -2
  22. package/dist/_chunks/{tool-rail-Bq5eiFMG.js → tool-rail-BP8sjxCw.js} +310 -231
  23. package/dist/_chunks/treatment-receipt-D4kOLXOk.js +94 -0
  24. package/dist/_chunks/treatment-receipt.agent-bpFm2RPH.js +21 -0
  25. package/dist/_chunks/use-presence-transition-cDwWUXV-.js +58 -0
  26. package/dist/_chunks/{workflow-map-D-LEni11.js → workflow-map-CXdsxvUj.js} +140 -156
  27. package/dist/agent-catalog.json +65 -1
  28. package/dist/components/appointment-peek/appointment-peek.agent.d.ts +3 -0
  29. package/dist/components/appointment-peek/appointment-peek.d.ts +45 -0
  30. package/dist/components/appointment-peek/index.d.ts +4 -0
  31. package/dist/components/appointment-peek/index.js +7 -0
  32. package/dist/components/control-room-rail/index.js +1 -1
  33. package/dist/components/editable-description/editable-description.agent.d.ts +3 -0
  34. package/dist/components/editable-description/editable-description.d.ts +20 -0
  35. package/dist/components/editable-description/index.d.ts +4 -0
  36. package/dist/components/editable-description/index.js +7 -0
  37. package/dist/components/index.d.ts +4 -0
  38. package/dist/components/money/index.js +2 -1
  39. package/dist/components/notes-panel/index.js +1 -1
  40. package/dist/components/notes-panel/notes-panel.d.ts +16 -0
  41. package/dist/components/panel-subview/index.d.ts +4 -0
  42. package/dist/components/panel-subview/index.js +7 -0
  43. package/dist/components/panel-subview/panel-subview.agent.d.ts +3 -0
  44. package/dist/components/panel-subview/panel-subview.d.ts +32 -0
  45. package/dist/components/patient-details/index.js +1 -1
  46. package/dist/components/patient-summary-card/index.js +1 -1
  47. package/dist/components/section-card/index.js +4 -3
  48. package/dist/components/task-card/index.js +1 -1
  49. package/dist/components/task-tray/index.js +1 -1
  50. package/dist/components/tasks-panel/index.js +1 -1
  51. package/dist/components/tool-rail/index.js +1 -1
  52. package/dist/components/treatment-receipt/index.d.ts +4 -0
  53. package/dist/components/treatment-receipt/index.js +7 -0
  54. package/dist/components/treatment-receipt/treatment-receipt.agent.d.ts +3 -0
  55. package/dist/components/treatment-receipt/treatment-receipt.d.ts +30 -0
  56. package/dist/components/workflow/index.js +1 -1
  57. package/dist/hooks/index.d.ts +1 -0
  58. package/dist/hooks/index.js +9 -7
  59. package/dist/hooks/use-presence-transition.d.ts +40 -0
  60. package/dist/host-compat.css +7 -1
  61. package/dist/i18n/locales/ar.d.ts +29 -5
  62. package/dist/i18n/locales/ar.js +29 -5
  63. package/dist/i18n/locales/de.d.ts +29 -5
  64. package/dist/i18n/locales/de.js +29 -5
  65. package/dist/i18n/locales/el.d.ts +29 -5
  66. package/dist/i18n/locales/el.js +29 -5
  67. package/dist/i18n/locales/en.d.ts +29 -5
  68. package/dist/i18n/locales/en.js +29 -5
  69. package/dist/i18n/locales/es.d.ts +29 -5
  70. package/dist/i18n/locales/es.js +29 -5
  71. package/dist/i18n/locales/fr.d.ts +29 -5
  72. package/dist/i18n/locales/fr.js +29 -5
  73. package/dist/i18n/locales/hi.d.ts +29 -5
  74. package/dist/i18n/locales/hi.js +29 -5
  75. package/dist/i18n/locales/it.d.ts +29 -5
  76. package/dist/i18n/locales/it.js +29 -5
  77. package/dist/i18n/locales/ja.d.ts +29 -5
  78. package/dist/i18n/locales/ja.js +29 -5
  79. package/dist/i18n/locales/nl.d.ts +29 -5
  80. package/dist/i18n/locales/nl.js +29 -5
  81. package/dist/i18n/locales/pl.d.ts +29 -5
  82. package/dist/i18n/locales/pl.js +29 -5
  83. package/dist/i18n/locales/pt.d.ts +29 -5
  84. package/dist/i18n/locales/pt.js +29 -5
  85. package/dist/i18n/locales/ro.d.ts +29 -5
  86. package/dist/i18n/locales/ro.js +29 -5
  87. package/dist/i18n/locales/ru.d.ts +29 -5
  88. package/dist/i18n/locales/ru.js +29 -5
  89. package/dist/i18n/locales/sq.d.ts +29 -5
  90. package/dist/i18n/locales/sq.js +29 -5
  91. package/dist/i18n/locales/sv.d.ts +29 -5
  92. package/dist/i18n/locales/sv.js +29 -5
  93. package/dist/i18n/locales/tr.d.ts +29 -5
  94. package/dist/i18n/locales/tr.js +29 -5
  95. package/dist/i18n/locales/zh.d.ts +29 -5
  96. package/dist/i18n/locales/zh.js +29 -5
  97. package/dist/index.js +958 -940
  98. package/dist/locales/ar.json +29 -5
  99. package/dist/locales/de.json +29 -5
  100. package/dist/locales/el.json +29 -5
  101. package/dist/locales/en.json +29 -5
  102. package/dist/locales/es.json +29 -5
  103. package/dist/locales/fr.json +29 -5
  104. package/dist/locales/hi.json +29 -5
  105. package/dist/locales/it.json +29 -5
  106. package/dist/locales/ja.json +29 -5
  107. package/dist/locales/nl.json +29 -5
  108. package/dist/locales/pl.json +29 -5
  109. package/dist/locales/pt.json +29 -5
  110. package/dist/locales/ro.json +29 -5
  111. package/dist/locales/ru.json +29 -5
  112. package/dist/locales/sq.json +29 -5
  113. package/dist/locales/sv.json +29 -5
  114. package/dist/locales/tr.json +29 -5
  115. package/dist/locales/zh.json +29 -5
  116. package/dist/patterns/calendar/calendar-appointment-details.d.ts +15 -6
  117. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts +23 -23
  118. package/dist/patterns/calendar/calendar-info-hover.d.ts +18 -0
  119. package/dist/patterns/calendar/calendar.journey.d.ts +10 -0
  120. package/dist/patterns/calendar/calendar.sheets.d.ts +2 -2
  121. package/dist/patterns/calendar/index.js +1 -1
  122. package/dist/tokens.css +1 -1
  123. package/package.json +17 -1
  124. package/dist/_chunks/calendar-workspace-Duv_5B4j.js +0 -9471
  125. package/dist/_chunks/hourglass-BEAzW1wE.js +0 -26
  126. package/dist/_chunks/notes-panel-Co8D3uDd.js +0 -469
  127. package/dist/_chunks/smartphone-C0rFF2if.js +0 -15
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.36.0",
3
+ "packageVersion": "1.37.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -613,6 +613,20 @@
613
613
  }
614
614
  }
615
615
  },
616
+ {
617
+ "kind": "component",
618
+ "id": "appointment-peek",
619
+ "capabilities": [],
620
+ "state": [],
621
+ "actions": [],
622
+ "domHooks": {
623
+ "root": {
624
+ "attr": "data-component",
625
+ "value": "appointment-peek",
626
+ "description": "Marks the element as a kit AppointmentPeek summary."
627
+ }
628
+ }
629
+ },
616
630
  {
617
631
  "kind": "component",
618
632
  "id": "appointment-timeline",
@@ -4495,6 +4509,24 @@
4495
4509
  }
4496
4510
  }
4497
4511
  },
4512
+ {
4513
+ "kind": "component",
4514
+ "id": "editable-description",
4515
+ "capabilities": [],
4516
+ "state": [],
4517
+ "actions": [],
4518
+ "domHooks": {
4519
+ "root": {
4520
+ "attr": "data-component",
4521
+ "value": "editable-description",
4522
+ "description": "Marks the element as a kit EditableDescription."
4523
+ },
4524
+ "item": {
4525
+ "attr": "data-editable-description-line",
4526
+ "description": "One visible description line."
4527
+ }
4528
+ }
4529
+ },
4498
4530
  {
4499
4531
  "kind": "component",
4500
4532
  "id": "editor-overlay",
@@ -8540,6 +8572,20 @@
8540
8572
  }
8541
8573
  }
8542
8574
  },
8575
+ {
8576
+ "kind": "component",
8577
+ "id": "panel-subview",
8578
+ "capabilities": [],
8579
+ "state": [],
8580
+ "actions": [],
8581
+ "domHooks": {
8582
+ "root": {
8583
+ "attr": "data-component",
8584
+ "value": "panel-subview",
8585
+ "description": "Marks the element as a kit PanelSubview."
8586
+ }
8587
+ }
8588
+ },
8543
8589
  {
8544
8590
  "kind": "component",
8545
8591
  "id": "password-input",
@@ -15157,6 +15203,24 @@
15157
15203
  }
15158
15204
  }
15159
15205
  },
15206
+ {
15207
+ "kind": "component",
15208
+ "id": "treatment-receipt",
15209
+ "capabilities": [],
15210
+ "state": [],
15211
+ "actions": [],
15212
+ "domHooks": {
15213
+ "root": {
15214
+ "attr": "data-component",
15215
+ "value": "treatment-receipt",
15216
+ "description": "Marks the element as a kit TreatmentReceipt."
15217
+ },
15218
+ "item": {
15219
+ "attr": "data-treatment-receipt-line",
15220
+ "description": "One treatment line."
15221
+ }
15222
+ }
15223
+ },
15160
15224
  {
15161
15225
  "kind": "component",
15162
15226
  "id": "typing-indicator",
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from '../../agent/types';
2
+ export declare const appointmentPeekAgent: AgentAdapter;
3
+ //# sourceMappingURL=appointment-peek.agent.d.ts.map
@@ -0,0 +1,45 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import { type AppointmentState } from '../_shared/entity-card';
3
+ export interface AppointmentPeekDetail {
4
+ /** Leading glyph, decorative. */
5
+ icon?: ReactNode;
6
+ /** The term, already translated: "Care", "Operator". */
7
+ label: string;
8
+ value: ReactNode;
9
+ }
10
+ export interface AppointmentPeekProps extends HTMLAttributes<HTMLDivElement> {
11
+ /** Patient name, or the event title for an appointment with no patient. */
12
+ name: string;
13
+ /** Photo for the avatar; initials are drawn from `name` without one. */
14
+ avatarSrc?: string;
15
+ /** Host-formatted time range, e.g. "09:30–11:00". */
16
+ time: string;
17
+ /** Chair or room, already translated. With `telehealth`, the visit type. */
18
+ location?: string;
19
+ /** Swaps the chair glyph for a video camera. */
20
+ telehealth?: boolean;
21
+ /**
22
+ * Appointment status, shown through `WorkflowStatusDisplay`. Leave it out
23
+ * when the host has none recorded: no status is not the same as
24
+ * confirmed, so the card shows no status face at all.
25
+ */
26
+ status?: AppointmentState;
27
+ /**
28
+ * Override the status caption, e.g. "Arrived · waiting 12 min". Still shown
29
+ * under `privacy`, so keep it free of patient data. Ignored without
30
+ * `status`.
31
+ */
32
+ statusLabel?: string;
33
+ /** Extra rows after time and location: care, operator. */
34
+ details?: AppointmentPeekDetail[];
35
+ /** Indicator chips (Badges): booked online, anamnesis. Never status. */
36
+ flags?: ReactNode;
37
+ /**
38
+ * Masks the name and drops everything personal: avatar, details and
39
+ * flags. Time, place and status stay; they
40
+ * are not patient data.
41
+ */
42
+ privacy?: boolean;
43
+ }
44
+ export declare const AppointmentPeek: import("react").ForwardRefExoticComponent<AppointmentPeekProps & import("react").RefAttributes<HTMLDivElement>>;
45
+ //# sourceMappingURL=appointment-peek.d.ts.map
@@ -0,0 +1,4 @@
1
+ export { AppointmentPeek } from './appointment-peek';
2
+ export type { AppointmentPeekProps, AppointmentPeekDetail, } from './appointment-peek';
3
+ export { appointmentPeekAgent } from './appointment-peek.agent';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { A as o } from "../../_chunks/appointment-peek-5S4O1VQP.js";
2
+ import { a as n } from "../../_chunks/appointment-peek.agent-C539tNFM.js";
3
+ export {
4
+ o as AppointmentPeek,
5
+ n as appointmentPeekAgent
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { C as r, a as l, c as a, u as t, b as e, d as n } from "../../_chunks/control-room-rail-Ds45_g4f.js";
1
+ import { C as r, a as l, c as a, u as t, b as e, d as n } from "../../_chunks/control-room-rail-DQoHdE1U.js";
2
2
  export {
3
3
  r as ControlRoomProvider,
4
4
  l as ControlRoomRail,
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from '../../agent/types';
2
+ export declare const editableDescriptionAgent: AgentAdapter;
3
+ //# sourceMappingURL=editable-description.agent.d.ts.map
@@ -0,0 +1,20 @@
1
+ import { type HTMLAttributes, type Ref } from 'react';
2
+ export interface EditableDescriptionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
3
+ /** The description. One bullet per non-empty line. */
4
+ value?: string | null;
5
+ /** Lines shown before the rest go behind "See more". Default `3`. */
6
+ maxLines?: number;
7
+ /** Fires from the pencil. Omit for a read-only description. */
8
+ onEdit?: () => void;
9
+ /** Receives the pencil button, so a host can return focus to it. */
10
+ editButtonRef?: Ref<HTMLButtonElement>;
11
+ /** Shown when there are no lines. Defaults to the kit's translated text. */
12
+ emptyLabel?: string;
13
+ /** Accessible name and tooltip of the pencil. Defaults to the kit's text. */
14
+ editLabel?: string;
15
+ /** Disclosure labels. Default to the kit's translated text. */
16
+ seeMoreLabel?: string;
17
+ showLessLabel?: string;
18
+ }
19
+ export declare const EditableDescription: import("react").ForwardRefExoticComponent<EditableDescriptionProps & import("react").RefAttributes<HTMLDivElement>>;
20
+ //# sourceMappingURL=editable-description.d.ts.map
@@ -0,0 +1,4 @@
1
+ export { EditableDescription } from './editable-description';
2
+ export type { EditableDescriptionProps } from './editable-description';
3
+ export { editableDescriptionAgent } from './editable-description.agent';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { E as i } from "../../_chunks/editable-description-BOfAeY3T.js";
2
+ import { e as r } from "../../_chunks/editable-description.agent-Bm_LBV2j.js";
3
+ export {
4
+ i as EditableDescription,
5
+ r as editableDescriptionAgent
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -51,6 +51,9 @@ export * from './radio';
51
51
  export * from './radio-group';
52
52
  export * from './search-input';
53
53
  export * from './section-card';
54
+ export * from './panel-subview';
55
+ export * from './editable-description';
56
+ export * from './treatment-receipt';
54
57
  export * from './select';
55
58
  export * from './slider';
56
59
  export * from './switch';
@@ -116,6 +119,7 @@ export * from './agenda-tray';
116
119
  export * from './ai-consent-banner';
117
120
  export * from './alert';
118
121
  export * from './appointment-card';
122
+ export * from './appointment-peek';
119
123
  export * from './appointment-timeline';
120
124
  export * from './dialog';
121
125
  export * from './dropdown-menu';
@@ -1,4 +1,5 @@
1
- import { M as m, m as n } from "../../_chunks/money.agent-Dw55UxUA.js";
1
+ import { M as m } from "../../_chunks/money-BY-HmKhZ.js";
2
+ import { m as n } from "../../_chunks/money.agent-BjJ6gOkx.js";
2
3
  export {
3
4
  m as Money,
4
5
  n as moneyAgent
@@ -1,4 +1,4 @@
1
- import { N as a } from "../../_chunks/notes-panel-Co8D3uDd.js";
1
+ import { N as a } from "../../_chunks/notes-panel-4y5JioWN.js";
2
2
  export {
3
3
  a as NotesPanel
4
4
  };
@@ -148,6 +148,22 @@ export interface NotesPanelProps extends Omit<HTMLAttributes<HTMLElement>, 'titl
148
148
  * what they do — the panel stays a timeline and never edits a note itself.
149
149
  */
150
150
  noteActions?: (note: NotesPanelNote) => ReactNode;
151
+ /**
152
+ * Save an edit to an existing note. When provided, each note the reader may
153
+ * edit gets a pencil; it loads the note into the SAME composer that writes
154
+ * new notes, in place, so a rich note is edited as rich text and keeps its
155
+ * formatting. Return a promise to hold the pending state; a rejection keeps
156
+ * the draft. Hidden on `actions.edit: false` and on a deleted note.
157
+ */
158
+ onEditNote?: (id: string, submission: NotesPanelSubmission) => void | Promise<void>;
159
+ /**
160
+ * Let an edit change a note's clinical flag. Default `false`: the "Clinical
161
+ * note" toggle is hidden while editing and the submission carries the
162
+ * note's existing flag. Most hosts save a note's content only, and a live
163
+ * toggle that changes nothing is a lie. Set `true` only when the host
164
+ * persists `submission.clinical` on edit.
165
+ */
166
+ editClinical?: boolean;
151
167
  /**
152
168
  * Request the host to delete a note. When provided, the panel holds the
153
169
  * row on screen long enough to fade it out before calling this, so the
@@ -0,0 +1,4 @@
1
+ export { PanelSubview } from './panel-subview';
2
+ export type { PanelSubviewProps, PanelSubviewHostProps } from './panel-subview';
3
+ export { panelSubviewAgent } from './panel-subview.agent';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { P as o } from "../../_chunks/panel-subview-BNXN8OEL.js";
2
+ import { p as r } from "../../_chunks/panel-subview.agent-BIBvE-IW.js";
3
+ export {
4
+ o as PanelSubview,
5
+ r as panelSubviewAgent
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from '../../agent/types';
2
+ export declare const panelSubviewAgent: AgentAdapter;
3
+ //# sourceMappingURL=panel-subview.agent.d.ts.map
@@ -0,0 +1,32 @@
1
+ import { type HTMLAttributes, type ReactNode, type RefObject } from 'react';
2
+ export type PanelSubviewHostProps = HTMLAttributes<HTMLDivElement>;
3
+ export interface PanelSubviewProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
4
+ /** Whether the subview is showing. It animates in and out around this. */
5
+ open: boolean;
6
+ /** Fires from the back button and from Escape. Set `open` false in reply. */
7
+ onBack: () => void;
8
+ /** The subview's heading. Already translated upstream. */
9
+ title: ReactNode;
10
+ /** Accessible name and tooltip of the back button. Already translated. */
11
+ backLabel: string;
12
+ /** Optional leading glyph for the heading. */
13
+ icon?: ReactNode;
14
+ /** Heading level. Default `2`; pass `3` to read as subordinate to the host. */
15
+ headingLevel?: 2 | 3;
16
+ /** Extra header actions, rendered after the back button. */
17
+ headerActions?: ReactNode;
18
+ /** Pinned below the scroll body: the form's cancel and save, typically. */
19
+ footer?: ReactNode;
20
+ /** Fires once the exit has played and the subview has unmounted. */
21
+ onExited?: () => void;
22
+ /**
23
+ * Focus this on open instead of the subview itself: a form's first field,
24
+ * say. The subview is still announced through its heading.
25
+ */
26
+ initialFocusRef?: RefObject<HTMLElement | null>;
27
+ children: ReactNode;
28
+ }
29
+ export declare const PanelSubview: import("react").ForwardRefExoticComponent<PanelSubviewProps & import("react").RefAttributes<HTMLElement>> & {
30
+ Host: import("react").ForwardRefExoticComponent<PanelSubviewHostProps & import("react").RefAttributes<HTMLDivElement>>;
31
+ };
32
+ //# sourceMappingURL=panel-subview.d.ts.map
@@ -1,4 +1,4 @@
1
- import { P as e, p as i } from "../../_chunks/patient-details-f7SSXkTJ.js";
1
+ import { P as e, p as i } from "../../_chunks/patient-details-2cIaL-Zb.js";
2
2
  export {
3
3
  e as PatientDetails,
4
4
  i as patientDetailsAgent
@@ -1,4 +1,4 @@
1
- import { P as t, p as m } from "../../_chunks/patient-summary-card-Bz7KdUin.js";
1
+ import { P as t, p as m } from "../../_chunks/patient-summary-card-BzmJH9a-.js";
2
2
  export {
3
3
  t as PatientSummaryCard,
4
4
  m as patientSummaryCardAgent
@@ -1,6 +1,7 @@
1
- import { S as o, s as r } from "../../_chunks/section-card.agent-W18CHEgX.js";
1
+ import { S as e } from "../../_chunks/section-card-XR2bW1Ie.js";
2
+ import { s as a } from "../../_chunks/section-card.agent-Bz1BhM_j.js";
2
3
  export {
3
- o as SectionCard,
4
- r as sectionCardAgent
4
+ e as SectionCard,
5
+ a as sectionCardAgent
5
6
  };
6
7
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { T as s, i as t } from "../../_chunks/task-card-BalrLkSz.js";
1
+ import { T as s, i as t } from "../../_chunks/task-card-qTKD1fIT.js";
2
2
  import { t as o } from "../../_chunks/task-card.agent-CF2N_uu4.js";
3
3
  export {
4
4
  s as TaskCard,
@@ -1,4 +1,4 @@
1
- import { T as s, t } from "../../_chunks/task-tray-wl9eti6J.js";
1
+ import { T as s, t } from "../../_chunks/task-tray-CQ8UAR2j.js";
2
2
  export {
3
3
  s as TaskTray,
4
4
  t as taskTrayAgent
@@ -1,4 +1,4 @@
1
- import { T as e, t } from "../../_chunks/tasks-panel-BDNB7hsZ.js";
1
+ import { T as e, t } from "../../_chunks/tasks-panel-CBGMtQ_f.js";
2
2
  export {
3
3
  e as TasksPanel,
4
4
  t as tasksPanelAgent
@@ -1,4 +1,4 @@
1
- import { T as l, t } from "../../_chunks/tool-rail-Bq5eiFMG.js";
1
+ import { T as l, t } from "../../_chunks/tool-rail-BP8sjxCw.js";
2
2
  export {
3
3
  l as ToolRail,
4
4
  t as toolRailAgent
@@ -0,0 +1,4 @@
1
+ export { TreatmentReceipt } from './treatment-receipt';
2
+ export type { TreatmentReceiptLine, TreatmentReceiptProps, } from './treatment-receipt';
3
+ export { treatmentReceiptAgent } from './treatment-receipt.agent';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { T as r } from "../../_chunks/treatment-receipt-D4kOLXOk.js";
2
+ import { t as m } from "../../_chunks/treatment-receipt.agent-bpFm2RPH.js";
3
+ export {
4
+ r as TreatmentReceipt,
5
+ m as treatmentReceiptAgent
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from '../../agent/types';
2
+ export declare const treatmentReceiptAgent: AgentAdapter;
3
+ //# sourceMappingURL=treatment-receipt.agent.d.ts.map
@@ -0,0 +1,30 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ export interface TreatmentReceiptLine {
3
+ /** Stable key for the line. */
4
+ id: string;
5
+ /** Treatment name, as the price list prints it. */
6
+ name: string;
7
+ /** Price-list code, shown muted after the name. */
8
+ code?: string;
9
+ /** Dental elements as the platform prints them ("36, 37"). */
10
+ elementsLabel?: string;
11
+ /** Plan phases this line belongs to. */
12
+ phases?: string[];
13
+ /** The treatment has been carried out. */
14
+ done?: boolean;
15
+ /** The treatment has been invoiced. */
16
+ billed?: boolean;
17
+ /** Minor units. Absent means prices are withheld from this viewer. */
18
+ priceCents?: number;
19
+ }
20
+ export interface TreatmentReceiptProps extends HTMLAttributes<HTMLDivElement> {
21
+ lines: TreatmentReceiptLine[];
22
+ /** BCP 47 locale for the amounts. Defaults to Money's own default. */
23
+ locale?: string;
24
+ /** ISO 4217 code. Defaults to Money's own default. */
25
+ currency?: string;
26
+ /** Label of the total row. Defaults to the kit's "Total for this appointment". */
27
+ totalLabel?: string;
28
+ }
29
+ export declare const TreatmentReceipt: import("react").ForwardRefExoticComponent<TreatmentReceiptProps & import("react").RefAttributes<HTMLDivElement>>;
30
+ //# sourceMappingURL=treatment-receipt.d.ts.map
@@ -1,4 +1,4 @@
1
- import { C as r, W as e, a as s, b as d, c as w, i as t, l as f, m as l, r as i, w as k, d as n, e as A, f as C } from "../../_chunks/workflow-map-D-LEni11.js";
1
+ import { C as r, W as e, a as s, b as d, c as w, i as t, l as f, m as l, r as i, w as k, d as n, e as A, f as C } from "../../_chunks/workflow-map-CXdsxvUj.js";
2
2
  export {
3
3
  r as CORE_PATIENT_FIELDS,
4
4
  e as WorkflowCard,
@@ -26,5 +26,6 @@ export { useZoomDrilldown, ZOOM_DRILLDOWN_TRANSITION_CLASS, type UseZoomDrilldow
26
26
  export { useCountdown, type UseCountdownOptions, type UseCountdownReturn, } from './use-countdown';
27
27
  export { useCheckAnimation, type UseCheckAnimationOptions, type UseCheckAnimationReturn, } from './use-check-animation';
28
28
  export { useExitTransition, type UseExitTransitionOptions, type UseExitTransitionReturn, } from './use-exit-transition';
29
+ export { usePresenceTransition, type PresencePhase, type UsePresenceTransitionOptions, type UsePresenceTransitionReturn, } from './use-presence-transition';
29
30
  export { useListReflow, REFLOW_ROW_CLASS, type UseListReflowOptions, type UseListReflowReturn, } from './use-list-reflow';
30
31
  //# sourceMappingURL=index.d.ts.map
@@ -2,7 +2,7 @@ import { u as y } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
2
  import { u as v } from "../_chunks/use-media-query-CcAx5SMM.js";
3
3
  import { Z as R, u as _, a as w, b as F } from "../_chunks/use-zoom-drilldown-qCX34w9I.js";
4
4
  import { u as g } from "../_chunks/use-count-up-BLLetaZ8.js";
5
- import { u as P } from "../_chunks/use-locale-BkCIHujH.js";
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";
7
7
  import { u as q } from "../_chunks/use-controllable-state-BiY4xTzM.js";
8
8
  import { u as G } from "../_chunks/use-copy-to-clipboard-Cyfc_dlv.js";
@@ -18,7 +18,8 @@ import { u as fe } from "../_chunks/use-visual-viewport-pin-ChurOsHM.js";
18
18
  import { u as me } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
19
19
  import { u as pe } from "../_chunks/use-countdown-Yd6ts0_a.js";
20
20
  import { u as Ee } from "../_chunks/use-check-animation--I3cS00X.js";
21
- import { R as Se, u as Te, a as Ce } from "../_chunks/use-list-reflow-Cw43nxw5.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";
22
23
  function C(e, o) {
23
24
  const [t, i] = b(e), u = x(null);
24
25
  return E(() => {
@@ -32,7 +33,7 @@ function C(e, o) {
32
33
  return u.current = n, () => clearTimeout(n);
33
34
  }, [e, o]), t;
34
35
  }
35
- const S = [
36
+ const T = [
36
37
  "a[href]",
37
38
  "button:not([disabled])",
38
39
  'input:not([disabled]):not([type="hidden"])',
@@ -45,7 +46,7 @@ const S = [
45
46
  ].join(",");
46
47
  function p(e) {
47
48
  return Array.from(
48
- e.querySelectorAll(S)
49
+ e.querySelectorAll(T)
49
50
  ).filter((o) => {
50
51
  if (o.hidden) return !1;
51
52
  let t = o;
@@ -90,7 +91,7 @@ function L(e, o = {}) {
90
91
  }
91
92
  export {
92
93
  M as ACCESSIBILITY_STORAGE_KEY,
93
- Se as REFLOW_ROW_CLASS,
94
+ Te as REFLOW_ROW_CLASS,
94
95
  V as THEME_CLASS,
95
96
  W as THEME_STORAGE_KEY,
96
97
  R as ZOOM_DRILLDOWN_TRANSITION_CLASS,
@@ -107,15 +108,16 @@ export {
107
108
  Q as useDirection,
108
109
  J as useDocumentDirection,
109
110
  me as useEdgeResize,
110
- Te as useExitTransition,
111
+ Se as useExitTransition,
111
112
  L as useFocusTrap,
112
113
  te as useIsomorphicLayoutEffect,
113
114
  Ce as useListReflow,
114
- P as useLocale,
115
+ k as useLocale,
115
116
  v as useMediaQuery,
116
117
  oe as useOverflowCollapse,
117
118
  $ as usePersistentState,
118
119
  y as usePrefersReducedMotion,
120
+ Ae as usePresenceTransition,
119
121
  ne as usePriorityOverflow,
120
122
  _ as useScrollToFirstError,
121
123
  w as useSigningSession,
@@ -0,0 +1,40 @@
1
+ /** Where a surface is in its life: arriving, at rest, or on its way out. */
2
+ export type PresencePhase = 'entering' | 'present' | 'leaving';
3
+ export interface UsePresenceTransitionOptions {
4
+ /**
5
+ * Fallback exit length in milliseconds, used when the element does not
6
+ * resolve an `--animation-duration` token. Default 200 (`--duration-normal`).
7
+ */
8
+ durationMs?: number;
9
+ /**
10
+ * Force the reduced-motion branch. Defaults to reading
11
+ * `prefers-reduced-motion: reduce`. When reduced, the surface mounts and
12
+ * unmounts synchronously and is never reported as entering or leaving.
13
+ */
14
+ reduceMotion?: boolean;
15
+ /** Fires once the exit has played and the surface has unmounted. */
16
+ onExited?: () => void;
17
+ }
18
+ export interface UsePresenceTransitionReturn<T extends HTMLElement> {
19
+ /** Render the surface while this is true, including the whole exit. */
20
+ mounted: boolean;
21
+ /** Reflect onto the surface (e.g. `data-presence`) and paint it in CSS. */
22
+ phase: PresencePhase;
23
+ /**
24
+ * Attach to the surface. The hook reads the element's resolved
25
+ * `--animation-duration`, so the accessible theme's 0ms ends the exit at once.
26
+ */
27
+ ref: (node: T | null) => void;
28
+ }
29
+ /**
30
+ * Keeps a surface mounted long enough to animate out, and gives it one frame
31
+ * of `entering` so it has somewhere to animate in from.
32
+ *
33
+ * A panel that mounts and unmounts on a boolean cannot transition: there is
34
+ * no element left to fade when it closes, and none yet painted when it opens.
35
+ * This hook sits between the boolean and the render. The hook owns timing
36
+ * only; paint the phases in CSS, keyed off `phase`, against the
37
+ * `--animation-duration` token.
38
+ */
39
+ export declare function usePresenceTransition<T extends HTMLElement = HTMLElement>(present: boolean, { durationMs, reduceMotion, onExited, }?: UsePresenceTransitionOptions): UsePresenceTransitionReturn<T>;
40
+ //# sourceMappingURL=use-presence-transition.d.ts.map
@@ -205,7 +205,7 @@
205
205
 
206
206
  /* ───────────────────────────────────────────────────────────────────────
207
207
  SECTION B — non-token declarations. ORIGINAL LAYER PRESERVED.
208
- 134 declarations across 130 rules.
208
+ 136 declarations across 132 rules.
209
209
 
210
210
  Kit-authored arbitrary-value utilities (`ds:w-[20rem]`) and the
211
211
  vendored AG Grid rules. These set real properties on real elements,
@@ -265,6 +265,9 @@
265
265
  .ds\:h-\[28rem\] {
266
266
  height:448px;
267
267
  }
268
+ .ds\:h-\[32rem\] {
269
+ height:512px;
270
+ }
268
271
  .ds\:h-\[40rem\] {
269
272
  height:640px;
270
273
  }
@@ -307,6 +310,9 @@
307
310
  .ds\:min-h-\[30rem\] {
308
311
  min-height:480px;
309
312
  }
313
+ .ds\:min-h-\[32rem\] {
314
+ min-height:512px;
315
+ }
310
316
  .ds\:w-\[9rem\] {
311
317
  width:144px;
312
318
  }
@@ -2112,6 +2112,23 @@ export declare const arUi: {
2112
2112
  readonly empty: "لم تُسجَّل أي إجابات بعد";
2113
2113
  readonly sectionsLabel: "أقسام التاريخ المرضي";
2114
2114
  };
2115
+ readonly editableDescription: {
2116
+ readonly empty: "No description added.";
2117
+ readonly edit: "Edit description";
2118
+ readonly seeMore: "See more";
2119
+ readonly showLess: "Show less";
2120
+ };
2121
+ readonly treatmentReceipt: {
2122
+ readonly done: "Done";
2123
+ readonly billed: "Billed";
2124
+ readonly phases: "Phases: {{phases}}";
2125
+ readonly total: "Total for this appointment";
2126
+ };
2127
+ readonly appointmentPeek: {
2128
+ readonly time: "Time";
2129
+ readonly location: "Location";
2130
+ readonly hiddenName: "Patient name hidden";
2131
+ };
2115
2132
  readonly appointmentCard: {
2116
2133
  readonly itemLabel: "{{patient}} — {{state}}";
2117
2134
  readonly itemLabelGeneric: "{{title}} — {{state}}";
@@ -3974,6 +3991,11 @@ export declare const arUi: {
3974
3991
  readonly loadError: "تعذّر تحميل الملاحظات.";
3975
3992
  readonly retry: "إعادة المحاولة";
3976
3993
  readonly addFailed: "تعذّر حفظ الملاحظة.";
3994
+ readonly edit: "Edit note";
3995
+ readonly editNamed: "Edit note · {{date}}";
3996
+ readonly deleteNamed: "Delete note · {{date}}";
3997
+ readonly saveEdit: "Save note";
3998
+ readonly cancelEdit: "Cancel";
3977
3999
  readonly delete: "حذف ملاحظة";
3978
4000
  readonly deleteConfirmTitle: "حذف هذه الملاحظة؟";
3979
4001
  readonly deleteConfirmBody: "سيتم إزالة الملاحظة من السجل.";
@@ -4175,6 +4197,13 @@ export declare const arUi: {
4175
4197
  readonly historyTitle: "سجل التعديلات";
4176
4198
  readonly historyBack: "العودة إلى التفاصيل";
4177
4199
  readonly historyEmpty: "لا توجد تعديلات مسجلة";
4200
+ readonly statusNone: "لا توجد حالة";
4201
+ readonly statusSaveFailed: "تعذّر حفظ الحالة.";
4202
+ readonly editDescription: "تعديل الوصف";
4203
+ readonly descriptionSave: "حفظ الوصف";
4204
+ readonly descriptionSaveFailed: "تعذّر حفظ الوصف.";
4205
+ readonly notesMore: "عرض كل الملاحظات ({{n}} أخرى)";
4206
+ readonly actionsLabel: "إجراءات الموعد";
4178
4207
  readonly notesAction: "ملاحظات المريض";
4179
4208
  readonly notesTitle: "الملاحظات · {{name}}";
4180
4209
  readonly notesBack: "العودة إلى التفاصيل";
@@ -4182,13 +4211,8 @@ export declare const arUi: {
4182
4211
  readonly notesPreviewOpen: "عرض المزيد";
4183
4212
  readonly notesPreviewEmpty: "لا توجد ملاحظات لهذا المريض بعد.";
4184
4213
  readonly notesPreviewOpenNote: "فتح الملاحظة {{number}}";
4185
- readonly noteEdit: "تعديل الملاحظة";
4186
- readonly noteEditNamed: "تعديل الملاحظة · {{date}}";
4187
4214
  readonly noteDelete: "حذف الملاحظة";
4188
4215
  readonly noteDeleteNamed: "حذف الملاحظة · {{date}}";
4189
- readonly noteEditTitle: "تعديل الملاحظة";
4190
- readonly noteEditLabel: "الملاحظة";
4191
- readonly noteSave: "حفظ الملاحظة";
4192
4216
  readonly noteCancel: "إلغاء";
4193
4217
  readonly noteDeleteTitle: "حذف هذه الملاحظة؟";
4194
4218
  readonly noteDeleteBody: "تُزال الملاحظة من سجل المريض. لا يمكن التراجع عن ذلك هنا.";