@alfadocs/ui-kit-debug 1.41.0 → 1.41.1

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 (109) hide show
  1. package/dist/_chunks/{calendar-workspace-UllCER2k.js → calendar-workspace-Bx8xxvic.js} +2 -2
  2. package/dist/_chunks/{calendar-workspace-UllCER2k.js.map → calendar-workspace-Bx8xxvic.js.map} +1 -1
  3. package/dist/_chunks/{help-me-write-templates-GB70jnV9.js → help-me-write-templates-B-m7zgJa.js} +242 -231
  4. package/dist/_chunks/help-me-write-templates-B-m7zgJa.js.map +1 -0
  5. package/dist/_chunks/{notes-panel-_diLt8Cj.js → notes-panel-Daq5T_cS.js} +2 -2
  6. package/dist/_chunks/{notes-panel-_diLt8Cj.js.map → notes-panel-Daq5T_cS.js.map} +1 -1
  7. package/dist/_chunks/{rich-text-editor-D7AKKAQ2.js → rich-text-editor-DUMeifwc.js} +1195 -1138
  8. package/dist/_chunks/rich-text-editor-DUMeifwc.js.map +1 -0
  9. package/dist/agent-catalog.json +1 -1
  10. package/dist/components/notes-panel/index.js +1 -1
  11. package/dist/components/rich-text-editor/index.js +1 -1
  12. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  13. package/dist/i18n/locales/ar.d.ts +1 -0
  14. package/dist/i18n/locales/ar.d.ts.map +1 -1
  15. package/dist/i18n/locales/ar.js +2 -1
  16. package/dist/i18n/locales/ar.js.map +1 -1
  17. package/dist/i18n/locales/de.d.ts +1 -0
  18. package/dist/i18n/locales/de.d.ts.map +1 -1
  19. package/dist/i18n/locales/de.js +2 -1
  20. package/dist/i18n/locales/de.js.map +1 -1
  21. package/dist/i18n/locales/el.d.ts +1 -0
  22. package/dist/i18n/locales/el.d.ts.map +1 -1
  23. package/dist/i18n/locales/el.js +2 -1
  24. package/dist/i18n/locales/el.js.map +1 -1
  25. package/dist/i18n/locales/en.d.ts +1 -0
  26. package/dist/i18n/locales/en.d.ts.map +1 -1
  27. package/dist/i18n/locales/en.js +2 -1
  28. package/dist/i18n/locales/en.js.map +1 -1
  29. package/dist/i18n/locales/es.d.ts +1 -0
  30. package/dist/i18n/locales/es.d.ts.map +1 -1
  31. package/dist/i18n/locales/es.js +2 -1
  32. package/dist/i18n/locales/es.js.map +1 -1
  33. package/dist/i18n/locales/fr.d.ts +1 -0
  34. package/dist/i18n/locales/fr.d.ts.map +1 -1
  35. package/dist/i18n/locales/fr.js +2 -1
  36. package/dist/i18n/locales/fr.js.map +1 -1
  37. package/dist/i18n/locales/hi.d.ts +1 -0
  38. package/dist/i18n/locales/hi.d.ts.map +1 -1
  39. package/dist/i18n/locales/hi.js +2 -1
  40. package/dist/i18n/locales/hi.js.map +1 -1
  41. package/dist/i18n/locales/it.d.ts +1 -0
  42. package/dist/i18n/locales/it.d.ts.map +1 -1
  43. package/dist/i18n/locales/it.js +2 -1
  44. package/dist/i18n/locales/it.js.map +1 -1
  45. package/dist/i18n/locales/ja.d.ts +1 -0
  46. package/dist/i18n/locales/ja.d.ts.map +1 -1
  47. package/dist/i18n/locales/ja.js +2 -1
  48. package/dist/i18n/locales/ja.js.map +1 -1
  49. package/dist/i18n/locales/nl.d.ts +1 -0
  50. package/dist/i18n/locales/nl.d.ts.map +1 -1
  51. package/dist/i18n/locales/nl.js +2 -1
  52. package/dist/i18n/locales/nl.js.map +1 -1
  53. package/dist/i18n/locales/pl.d.ts +1 -0
  54. package/dist/i18n/locales/pl.d.ts.map +1 -1
  55. package/dist/i18n/locales/pl.js +2 -1
  56. package/dist/i18n/locales/pl.js.map +1 -1
  57. package/dist/i18n/locales/pt.d.ts +1 -0
  58. package/dist/i18n/locales/pt.d.ts.map +1 -1
  59. package/dist/i18n/locales/pt.js +2 -1
  60. package/dist/i18n/locales/pt.js.map +1 -1
  61. package/dist/i18n/locales/ro.d.ts +1 -0
  62. package/dist/i18n/locales/ro.d.ts.map +1 -1
  63. package/dist/i18n/locales/ro.js +2 -1
  64. package/dist/i18n/locales/ro.js.map +1 -1
  65. package/dist/i18n/locales/ru.d.ts +1 -0
  66. package/dist/i18n/locales/ru.d.ts.map +1 -1
  67. package/dist/i18n/locales/ru.js +2 -1
  68. package/dist/i18n/locales/ru.js.map +1 -1
  69. package/dist/i18n/locales/sq.d.ts +1 -0
  70. package/dist/i18n/locales/sq.d.ts.map +1 -1
  71. package/dist/i18n/locales/sq.js +2 -1
  72. package/dist/i18n/locales/sq.js.map +1 -1
  73. package/dist/i18n/locales/sv.d.ts +1 -0
  74. package/dist/i18n/locales/sv.d.ts.map +1 -1
  75. package/dist/i18n/locales/sv.js +2 -1
  76. package/dist/i18n/locales/sv.js.map +1 -1
  77. package/dist/i18n/locales/tr.d.ts +1 -0
  78. package/dist/i18n/locales/tr.d.ts.map +1 -1
  79. package/dist/i18n/locales/tr.js +2 -1
  80. package/dist/i18n/locales/tr.js.map +1 -1
  81. package/dist/i18n/locales/zh.d.ts +1 -0
  82. package/dist/i18n/locales/zh.d.ts.map +1 -1
  83. package/dist/i18n/locales/zh.js +2 -1
  84. package/dist/i18n/locales/zh.js.map +1 -1
  85. package/dist/index.js +4 -4
  86. package/dist/locales/ar.json +2 -1
  87. package/dist/locales/de.json +2 -1
  88. package/dist/locales/el.json +2 -1
  89. package/dist/locales/en.json +2 -1
  90. package/dist/locales/es.json +2 -1
  91. package/dist/locales/fr.json +2 -1
  92. package/dist/locales/hi.json +2 -1
  93. package/dist/locales/it.json +2 -1
  94. package/dist/locales/ja.json +2 -1
  95. package/dist/locales/nl.json +2 -1
  96. package/dist/locales/pl.json +2 -1
  97. package/dist/locales/pt.json +2 -1
  98. package/dist/locales/ro.json +2 -1
  99. package/dist/locales/ru.json +2 -1
  100. package/dist/locales/sq.json +2 -1
  101. package/dist/locales/sv.json +2 -1
  102. package/dist/locales/tr.json +2 -1
  103. package/dist/locales/zh.json +2 -1
  104. package/dist/patterns/calendar/index.js +1 -1
  105. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts.map +1 -1
  106. package/dist/patterns/help-me-write-templates/index.js +1 -1
  107. package/package.json +1 -1
  108. package/dist/_chunks/help-me-write-templates-GB70jnV9.js.map +0 -1
  109. package/dist/_chunks/rich-text-editor-D7AKKAQ2.js.map +0 -1
package/dist/index.js CHANGED
@@ -153,7 +153,7 @@ import { M as Cm, m as Tm } from "./_chunks/message-tray-CrRIHfiQ.js";
153
153
  import { N as um, i as Pm } from "./_chunks/notification-card-B2gLO6dK.js";
154
154
  import { n as Em } from "./_chunks/notification-card.agent-DxGBZb8T.js";
155
155
  import { N as _m, n as bm } from "./_chunks/notification-tray-BOEKegVV.js";
156
- import { N as Dm } from "./_chunks/notes-panel-_diLt8Cj.js";
156
+ import { N as Dm } from "./_chunks/notes-panel-Daq5T_cS.js";
157
157
  import { P as Om, p as Fm } from "./_chunks/popover-DO-pssF3.js";
158
158
  import { R as Mm, I as ym, r as km } from "./_chunks/radiograph-panel.agent-LrILY2lN.js";
159
159
  import { P as Gm, R as Hm, T as vm, a as wm, p as Wm, r as Um } from "./_chunks/pregnancy-weight-gain-Bfq4Kwt5.js";
@@ -221,7 +221,7 @@ import { P as Vf, a as Kf, p as Yf, b as Xf } from "./_chunks/payment-request-ca
221
221
  import { P as zf, f as jf, p as Qf, a as Zf, s as Jf, b as $f, c as ag } from "./_chunks/payment-form-BHMDqW9C.js";
222
222
  import { P as sg, p as rg } from "./_chunks/pdf-viewer-DUKdn5iq.js";
223
223
  import { R as tg, r as ng } from "./_chunks/reviews-panel-2GVuxGeT.js";
224
- import { R as pg, r as mg, w as lg } from "./_chunks/rich-text-editor-D7AKKAQ2.js";
224
+ import { R as pg, r as mg, w as lg } from "./_chunks/rich-text-editor-DUMeifwc.js";
225
225
  import { E as Ag } from "./_chunks/editor-overlay-DwNKaI22.js";
226
226
  import { S as fg, s as gg } from "./_chunks/signature-capture-D6ut9_IR.js";
227
227
  import { S as Cg, s as Tg } from "./_chunks/signature-field-0rFODJlW.js";
@@ -238,8 +238,8 @@ import { W as xC, a as uC, w as PC } from "./_chunks/workflow-status-xeaJTzD3.js
238
238
  import { C as EC, W as RC, a as _C, b as bC, c as NC, i as DC, l as hC, m as OC, r as FC, w as LC, d as MC, e as yC, f as kC } from "./_chunks/workflow-map-DhR_h5yw.js";
239
239
  import { A as GC, a as HC, b as vC, c as wC } from "./_chunks/alia-sidebar-CUqaJNPQ.js";
240
240
  import { A as UC, a as VC, L as KC, P as YC, S as XC, T as qC, b as zC, c as jC, d as QC, e as ZC, f as JC, g as $C, h as aT, i as eT, j as sT, k as rT, l as oT, m as tT, n as nT, o as iT, p as pT, r as mT, q as lT, s as dT, t as AT, u as cT } from "./_chunks/anamnesis-summary-rows-DQUqwWc1.js";
241
- import { C as gT, a as ST, b as CT, c as TT, D as xT, d as uT, S as PT, V as IT, W as ET, e as RT, i as _T, m as bT, r as NT, u as DT, f as hT, g as OT } from "./_chunks/calendar-workspace-UllCER2k.js";
242
- import { A as LT, a as MT, b as yT, H as kT, c as BT, u as GT } from "./_chunks/help-me-write-templates-GB70jnV9.js";
241
+ import { C as gT, a as ST, b as CT, c as TT, D as xT, d as uT, S as PT, V as IT, W as ET, e as RT, i as _T, m as bT, r as NT, u as DT, f as hT, g as OT } from "./_chunks/calendar-workspace-Bx8xxvic.js";
242
+ import { A as LT, a as MT, b as yT, H as kT, c as BT, u as GT } from "./_chunks/help-me-write-templates-B-m7zgJa.js";
243
243
  import { C as vT, M as wT, P as WT } from "./_chunks/marketplace-app-shell-D_g9BaDI.js";
244
244
  import { P as VT } from "./_chunks/payment-automation-upsell-BKmBXU4i.js";
245
245
  import { S as YT } from "./_chunks/signature-request-D_j2aQu1.js";
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "أدخل التعليمات.",
3207
3207
  "deleteTitle": "حذف «{{name}}»؟",
3208
3208
  "deleteDescription": "سيفقد جميع أعضاء العيادة هذا القالب. لا تتغير الملاحظات المكتوبة سابقًا.",
3209
- "deleteConfirm": "احذف القالب"
3209
+ "deleteConfirm": "احذف القالب",
3210
+ "deleteError": "تعذّر حذف القالب. حاول مرة أخرى."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Geben Sie die Anweisungen ein.",
3207
3207
  "deleteTitle": "„{{name}}“ löschen?",
3208
3208
  "deleteDescription": "Die Vorlage verschwindet für die ganze Praxis. Bereits geschriebene Notizen ändern sich nicht.",
3209
- "deleteConfirm": "Vorlage löschen"
3209
+ "deleteConfirm": "Vorlage löschen",
3210
+ "deleteError": "Die Vorlage konnte nicht gelöscht werden. Bitte erneut versuchen."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Εισαγάγετε τις οδηγίες.",
3207
3207
  "deleteTitle": "Διαγραφή «{{name}}»;",
3208
3208
  "deleteDescription": "Όλο το ιατρείο χάνει αυτό το πρότυπο. Οι σημειώσεις που έχουν ήδη γραφτεί δεν αλλάζουν.",
3209
- "deleteConfirm": "Διαγραφή προτύπου"
3209
+ "deleteConfirm": "Διαγραφή προτύπου",
3210
+ "deleteError": "Δεν ήταν δυνατή η διαγραφή του προτύπου. Δοκιμάστε ξανά."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Enter the instructions.",
3207
3207
  "deleteTitle": "Delete “{{name}}”?",
3208
3208
  "deleteDescription": "Everyone in the practice loses this template. Notes already written do not change.",
3209
- "deleteConfirm": "Delete template"
3209
+ "deleteConfirm": "Delete template",
3210
+ "deleteError": "The template could not be deleted. Try again."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Introduce las instrucciones.",
3207
3207
  "deleteTitle": "¿Eliminar «{{name}}»?",
3208
3208
  "deleteDescription": "Toda la clínica pierde esta plantilla. Las notas ya escritas no cambian.",
3209
- "deleteConfirm": "Eliminar plantilla"
3209
+ "deleteConfirm": "Eliminar plantilla",
3210
+ "deleteError": "No se ha podido eliminar la plantilla. Inténtalo de nuevo."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Saisissez les instructions.",
3207
3207
  "deleteTitle": "Supprimer « {{name}} » ?",
3208
3208
  "deleteDescription": "Tout le cabinet perd ce modèle. Les notes déjà écrites ne changent pas.",
3209
- "deleteConfirm": "Supprimer le modèle"
3209
+ "deleteConfirm": "Supprimer le modèle",
3210
+ "deleteError": "Le modèle n'a pas pu être supprimé. Réessayez."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "निर्देश डालें।",
3207
3207
  "deleteTitle": "“{{name}}” हटाएँ?",
3208
3208
  "deleteDescription": "पूरे क्लिनिक से यह टेम्पलेट हट जाएगा। पहले से लिखे नोट नहीं बदलेंगे।",
3209
- "deleteConfirm": "टेम्पलेट हटाएँ"
3209
+ "deleteConfirm": "टेम्पलेट हटाएँ",
3210
+ "deleteError": "टेम्पलेट हटाया नहीं जा सका। फिर से कोशिश करें।"
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Inserisci le istruzioni.",
3207
3207
  "deleteTitle": "Eliminare «{{name}}»?",
3208
3208
  "deleteDescription": "Il template sparisce per tutto lo studio. Le note già scritte non cambiano.",
3209
- "deleteConfirm": "Elimina template"
3209
+ "deleteConfirm": "Elimina template",
3210
+ "deleteError": "Non è stato possibile eliminare il template. Riprova."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "指示を入力してください。",
3207
3207
  "deleteTitle": "「{{name}}」を削除しますか?",
3208
3208
  "deleteDescription": "医院の全員がこのテンプレートを使えなくなります。作成済みのメモは変わりません。",
3209
- "deleteConfirm": "テンプレートを削除"
3209
+ "deleteConfirm": "テンプレートを削除",
3210
+ "deleteError": "テンプレートを削除できませんでした。もう一度お試しください。"
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Vul de instructies in.",
3207
3207
  "deleteTitle": "‘{{name}}’ verwijderen?",
3208
3208
  "deleteDescription": "De hele praktijk verliest dit sjabloon. Notities die al geschreven zijn veranderen niet.",
3209
- "deleteConfirm": "Sjabloon verwijderen"
3209
+ "deleteConfirm": "Sjabloon verwijderen",
3210
+ "deleteError": "Het sjabloon kon niet worden verwijderd. Probeer het opnieuw."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Wpisz instrukcje.",
3207
3207
  "deleteTitle": "Usunąć „{{name}}”?",
3208
3208
  "deleteDescription": "Cały gabinet straci ten szablon. Napisane już notatki się nie zmienią.",
3209
- "deleteConfirm": "Usuń szablon"
3209
+ "deleteConfirm": "Usuń szablon",
3210
+ "deleteError": "Nie udało się usunąć szablonu. Spróbuj ponownie."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Introduza as instruções.",
3207
3207
  "deleteTitle": "Eliminar “{{name}}”?",
3208
3208
  "deleteDescription": "Toda a clínica perde este modelo. As notas já escritas não mudam.",
3209
- "deleteConfirm": "Eliminar modelo"
3209
+ "deleteConfirm": "Eliminar modelo",
3210
+ "deleteError": "Não foi possível eliminar o modelo. Tente novamente."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Introdu instrucțiunile.",
3207
3207
  "deleteTitle": "Ștergi „{{name}}”?",
3208
3208
  "deleteDescription": "Tot cabinetul pierde acest șablon. Notele deja scrise nu se schimbă.",
3209
- "deleteConfirm": "Șterge șablonul"
3209
+ "deleteConfirm": "Șterge șablonul",
3210
+ "deleteError": "Șablonul nu a putut fi șters. Încearcă din nou."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Введите инструкции.",
3207
3207
  "deleteTitle": "Удалить «{{name}}»?",
3208
3208
  "deleteDescription": "Вся клиника потеряет этот шаблон. Уже написанные заметки не изменятся.",
3209
- "deleteConfirm": "Удалить шаблон"
3209
+ "deleteConfirm": "Удалить шаблон",
3210
+ "deleteError": "Не удалось удалить шаблон. Попробуйте ещё раз."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Shkruaj udhëzimet.",
3207
3207
  "deleteTitle": "Të fshihet “{{name}}”?",
3208
3208
  "deleteDescription": "Gjithë klinika e humb këtë shabllon. Shënimet e shkruara nuk ndryshojnë.",
3209
- "deleteConfirm": "Fshi shabllonin"
3209
+ "deleteConfirm": "Fshi shabllonin",
3210
+ "deleteError": "Shablloni nuk u fshi. Provo përsëri."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Ange instruktionerna.",
3207
3207
  "deleteTitle": "Ta bort ”{{name}}”?",
3208
3208
  "deleteDescription": "Hela kliniken förlorar den här mallen. Anteckningar som redan skrivits ändras inte.",
3209
- "deleteConfirm": "Ta bort mall"
3209
+ "deleteConfirm": "Ta bort mall",
3210
+ "deleteError": "Mallen kunde inte tas bort. Försök igen."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "Talimatları gir.",
3207
3207
  "deleteTitle": "“{{name}}” silinsin mi?",
3208
3208
  "deleteDescription": "Tüm klinik bu şablonu kaybeder. Yazılmış notlar değişmez.",
3209
- "deleteConfirm": "Şablonu sil"
3209
+ "deleteConfirm": "Şablonu sil",
3210
+ "deleteError": "Şablon silinemedi. Tekrar dene."
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -3206,7 +3206,8 @@
3206
3206
  "promptRequired": "请输入指令。",
3207
3207
  "deleteTitle": "删除“{{name}}”?",
3208
3208
  "deleteDescription": "整个诊所都将失去此模板。已写好的记录不会改变。",
3209
- "deleteConfirm": "删除模板"
3209
+ "deleteConfirm": "删除模板",
3210
+ "deleteError": "无法删除模板,请重试。"
3210
3211
  }
3211
3212
  },
3212
3213
  "signatureRequest": {
@@ -1,4 +1,4 @@
1
- import { C as s, a as r, b as E, c as P, D as S, d as o, S as C, V as t, W as d, e as A, i, m as n, r as D, u as W, f as _, g as c } from "../../_chunks/calendar-workspace-UllCER2k.js";
1
+ import { C as s, a as r, b as E, c as P, D as S, d as o, S as C, V as t, W as d, e as A, i, m as n, r as D, u as W, f as _, g as c } from "../../_chunks/calendar-workspace-Bx8xxvic.js";
2
2
  export {
3
3
  s as CALENDAR_PREFERENCE_KEYS,
4
4
  r as CalendarDataProvider,
@@ -1 +1 @@
1
- {"version":3,"file":"help-me-write-templates.d.ts","sourceRoot":"","sources":["../../../src/patterns/help-me-write-templates/help-me-write-templates.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"help-me-write-templates.d.ts","sourceRoot":"","sources":["../../../src/patterns/help-me-write-templates/help-me-write-templates.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { A as s, a as t, b as r, H as i, c as p, u as l } from "../../_chunks/help-me-write-templates-GB70jnV9.js";
1
+ import { A as s, a as t, b as r, H as i, c as p, u as l } from "../../_chunks/help-me-write-templates-B-m7zgJa.js";
2
2
  export {
3
3
  s as AiCreditsExhaustedError,
4
4
  t as AiCreditsExhaustedNotice,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfadocs/ui-kit-debug",
3
- "version": "1.41.0",
3
+ "version": "1.41.1",
4
4
  "type": "module",
5
5
  "description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe. (debug build — identical runtime to @alfadocs/ui-kit, ships source maps for symbolication).",
6
6
  "license": "BUSL-1.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"help-me-write-templates-GB70jnV9.js","sources":["../../src/patterns/help-me-write-templates/help-me-write-templates.tsx"],"sourcesContent":["/**\n * Help me write templates (HTP-6383) — practice-shared AI templates inside the\n * RichTextEditor's \"Help me write\".\n *\n * Runtime pattern: real consuming apps mount this in production (surfaced via\n * `src/patterns/index.ts` and the `./patterns/help-me-write-templates`\n * subpath). It plugs into the editor through `renderHelpMeWrite`, so the kit\n * editor keeps its own AI pill, the patient AI-consent gate and the\n * resume-after-grant; this pattern supplies the bar that opens from it.\n *\n * Parts, usable on their own or wired together by `useHelpMeWriteTemplates`:\n * - `HelpMeWriteTemplatesBar` — the docked bar: free prompt with an optional\n * mic, a Templates menu, a side-by-side compare, Replace / Insert below.\n * - `AiTemplateManager` — the dialog to list, create, edit and delete\n * templates and pick the default.\n * - `AiCreditsExhaustedNotice` — the out-of-credits state the bar shows when\n * `onGenerate` rejects with `AiCreditsExhaustedError`.\n * - `HelpMeWriteUndoNotice` — the success notice with Undo after a template\n * rewrote the note.\n *\n * The host owns the templates (list + persistence) and the AI call. The kit\n * never talks to a backend.\n */\nimport {\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n ArrowLeft,\n Astroid,\n ChevronDown,\n Mic,\n Pencil,\n Plus,\n RotateCcw,\n Send,\n Settings,\n Square,\n Trash2,\n TrendingUp,\n WandSparkles,\n X,\n} from 'lucide-react';\n\nimport { Alert } from '../../components/alert';\nimport { Badge } from '../../components/badge';\nimport { Button, IconButton } from '../../components/button';\nimport { Dialog } from '../../components/dialog';\nimport { DropdownMenu } from '../../components/dropdown-menu';\nimport { EditorOverlay } from '../../components/editor-overlay';\nimport { EmptyState } from '../../components/empty-state';\nimport { FormField } from '../../components/form-field';\nimport { Progress } from '../../components/progress';\nimport type { HelpMeWriteRenderContext } from '../../components/rich-text-editor';\nimport { Spinner } from '../../components/spinner';\nimport { Switch } from '../../components/switch';\nimport { TextArea } from '../../components/text-area';\nimport { TextInput } from '../../components/text-input';\nimport { SafeHtml } from '../../components/_shared/safe-html';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/** A practice-shared AI template. */\nexport interface AiTemplate {\n id: string;\n /** Up to 100 characters, unique within the practice. */\n name: string;\n /** One line under the name in the Templates menu. */\n description?: string;\n /** The instructions sent to the AI, up to 4000 characters. */\n prompt: string;\n /** At most one per practice; listed first with a Default badge. */\n isDefault: boolean;\n}\n\n/** What the manager hands `onSaveTemplate`: `id` is absent for a new one. */\nexport type AiTemplateDraft = Omit<AiTemplate, 'id'> & { id?: string };\n\n/** One Help-me-write request. `template` is absent for a free prompt. */\nexport interface HelpMeWriteRequest {\n template?: AiTemplate;\n /** The free prompt, or extra instructions for a template. May be ''. */\n prompt: string;\n /** Plain text the template rewrites: the selection, else the whole note. */\n sourceText: string;\n signal: AbortSignal;\n}\n\n/**\n * Throw (or reject with) this from `onGenerate` when the practice is out of\n * AI credits (the platform endpoint's 402), and the bar shows the\n * out-of-credits notice instead of a generic error.\n */\nexport class AiCreditsExhaustedError extends Error {\n constructor(message = 'AI credits exhausted') {\n super(message);\n this.name = 'AiCreditsExhaustedError';\n }\n}\n\n/** The practice's allowance, for the out-of-credits notice. All optional. */\nexport interface AiCreditsInfo {\n remaining?: number;\n limit?: number;\n /** When the monthly allowance returns. */\n resetsOn?: Date;\n /**\n * Shows a \"Buy AI credits\" button and \"add credits\" wording. Omit while\n * credits cannot be bought: the notice then only says when AI returns.\n */\n onBuyCredits?: () => void;\n /** Shows a \"See what each action costs\" link. */\n onSeeCosts?: () => void;\n}\n\nexport type HelpMeWriteApplyMode = 'replace' | 'below' | 'insert';\n\n/** Fired after a draft lands in the editor. */\nexport interface HelpMeWriteApplied {\n mode: HelpMeWriteApplyMode;\n template?: AiTemplate;\n /** The editor's HTML before the change. */\n previousHtml: string;\n /** Puts `previousHtml` back in the editor (what Undo does). */\n undo: () => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* Shared classes */\n/* ------------------------------------------------------------------ */\n\n// Match the composer's input height (--min-target-size), like the kit bar.\nconst ACTION_SIZE = 'ds:!size-[var(--min-target-size)]';\nconst MENU_TRIGGER = 'ds:!h-[var(--min-target-size)] ds:shrink-0';\nconst BRAND_ACTION = `${ACTION_SIZE} ds:bg-[image:var(--gradient-brand)] ds:rounded-full`;\n// The recording mic goes solid destructive, as in the kit's own bar.\nconst RECORDING_MIC =\n 'ds:aria-pressed:!bg-[var(--destructive)] ds:aria-pressed:!text-[var(--destructive-foreground)]';\nconst metaClass =\n 'ds:m-0 ds:text-[length:var(--font-size-sm)] ds:text-[color:var(--muted-foreground)]';\nconst eyebrowClass =\n 'type-eyebrow ds:m-0 ds:text-[color:var(--muted-foreground)]';\nconst previewClass = [\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[color-mix(in_srgb,var(--background)_70%,transparent)]',\n 'ds:p-[var(--spacing-sm)] ds:[max-block-size:14rem] ds:overflow-y-auto',\n 'ds:text-[length:var(--font-size-sm)] ds:text-[color:var(--foreground)]',\n 'ds:[&_ul]:list-disc ds:[&_ul]:ps-[var(--spacing-md)]',\n 'ds:[&_h3]:font-medium ds:[&_h3]:[margin-block-start:var(--spacing-xs)]',\n 'ds:[&_p]:[margin-block-end:var(--spacing-xs)]',\n 'ds:[&>:first-child]:[margin-block-start:0]',\n].join(' ');\n// Side by side, both boxes take the same fixed height (each scrolls), so the\n// note and the draft line up whatever their length.\nconst compareBoxClass = 'ds:[block-size:14rem]';\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\n// Default template first, then the rest in their saved order.\nfunction orderTemplates(templates: AiTemplate[]): AiTemplate[] {\n return [...templates].sort(\n (a, b) => Number(b.isDefault) - Number(a.isDefault),\n );\n}\n\n// Join dictated text onto the prompt with a single space.\nfunction joinWith(base: string, extra: string): string {\n if (!extra) return base;\n if (!base) return extra;\n return /\\s$/.test(base) ? `${base}${extra}` : `${base} ${extra}`;\n}\n\nfunction isAbort(err: unknown): boolean {\n return (\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n (err as { name?: string }).name === 'AbortError'\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* AiCreditsExhaustedNotice */\n/* ------------------------------------------------------------------ */\n\nexport interface AiCreditsExhaustedNoticeProps {\n credits?: AiCreditsInfo;\n /** Shows a Back button (the bar uses it to return to the prompt). */\n onBack?: () => void;\n}\n\n/** The out-of-credits state: what happened, the allowance, and the ways on. */\nexport function AiCreditsExhaustedNotice({\n credits,\n onBack,\n}: AiCreditsExhaustedNoticeProps): React.JSX.Element {\n const { t, i18n } = useTranslation();\n const limit = credits?.limit;\n const remaining = credits?.remaining ?? 0;\n const remainingText =\n limit !== undefined\n ? t('helpMeWriteTemplates.credits.remaining', { remaining, limit })\n : undefined;\n const resetsOn = credits?.resetsOn\n ? new Intl.DateTimeFormat(i18n.language, {\n day: 'numeric',\n month: 'long',\n }).format(credits.resetsOn)\n : undefined;\n return (\n <div\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n data-component=\"ai-credits-exhausted-notice\"\n >\n <Alert variant=\"promo\" icon={<Astroid aria-hidden=\"true\" />}>\n <Alert.Title as=\"h2\">\n {t('helpMeWriteTemplates.credits.title')}\n </Alert.Title>\n <Alert.Description>\n {/* Without a way to buy credits, only say when AI comes back. */}\n {credits?.onBuyCredits\n ? resetsOn\n ? t('helpMeWriteTemplates.credits.bodyResets', { date: resetsOn })\n : t('helpMeWriteTemplates.credits.body')\n : resetsOn\n ? t('helpMeWriteTemplates.credits.bodyWaitResets', {\n date: resetsOn,\n })\n : t('helpMeWriteTemplates.credits.bodyWait')}\n </Alert.Description>\n {limit !== undefined && remainingText ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:[margin-block-start:var(--spacing-sm)]\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-label\">\n {t('helpMeWriteTemplates.credits.meterLabel')}\n </span>\n <span className=\"type-label ds:ms-auto ds:tabular-nums\">\n {remainingText}\n </span>\n </div>\n <Progress\n value={Math.max(0, limit - remaining)}\n max={limit}\n size=\"sm\"\n ariaLabel={t('helpMeWriteTemplates.credits.meterLabel')}\n ariaValueText={remainingText}\n />\n </div>\n ) : null}\n {credits?.onBuyCredits || credits?.onSeeCosts ? (\n <Alert.Action>\n {credits.onBuyCredits ? (\n <Button\n intent=\"tonal\"\n size=\"sm\"\n startIcon={<TrendingUp aria-hidden=\"true\" />}\n onClick={credits.onBuyCredits}\n >\n {t('helpMeWriteTemplates.credits.cta')}\n </Button>\n ) : null}\n {credits.onSeeCosts ? (\n <Button intent=\"link\" size=\"sm\" onClick={credits.onSeeCosts}>\n {t('helpMeWriteTemplates.credits.secondary')}\n </Button>\n ) : null}\n </Alert.Action>\n ) : null}\n </Alert>\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {onBack ? (\n <Button intent=\"ghost\" startIcon={<ArrowLeft />} onClick={onBack}>\n {t('helpMeWriteTemplates.credits.back')}\n </Button>\n ) : null}\n <p className={metaClass}>{t('helpMeWriteTemplates.credits.kept')}</p>\n </div>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* HelpMeWriteTemplatesBar */\n/* ------------------------------------------------------------------ */\n\nexport interface HelpMeWriteTemplatesBarProps {\n /** What `RichTextEditor`'s `renderHelpMeWrite` hands its host. */\n context: HelpMeWriteRenderContext;\n templates: AiTemplate[];\n /** The AI call. Reject with `AiCreditsExhaustedError` when out of credits. */\n onGenerate: (request: HelpMeWriteRequest) => Promise<string>;\n /**\n * Opens the template manager. Omit to hide \"Manage templates\" and\n * \"Create your first template\" (e.g. for readers who may not manage).\n */\n onManageTemplates?: (mode: 'list' | 'create') => void;\n /** After a draft lands; the hook uses it for Undo. */\n onApplied?: (applied: HelpMeWriteApplied) => void;\n /** Shown in the out-of-credits notice. */\n credits?: AiCreditsInfo;\n /** Show the mic in the prompt when the editor has `onDictate`. Default true. */\n enableDictation?: boolean;\n /** Ignore Escape (e.g. while the manager dialog above it is open). */\n suspendClose?: boolean;\n}\n\ninterface SourceInfo {\n kind: 'selection' | 'document';\n words: number;\n text: string;\n}\n\n/** The Help-me-write bar with templates, docked in the editor's AI slot. */\nexport function HelpMeWriteTemplatesBar({\n context,\n templates,\n onGenerate,\n onManageTemplates,\n onApplied,\n credits,\n enableDictation = true,\n suspendClose = false,\n}: HelpMeWriteTemplatesBarProps): React.JSX.Element {\n const { t } = useTranslation();\n const { open } = context;\n const sourceId = useId();\n const errorId = useId();\n const [prompt, setPrompt] = useState('');\n // `undefined` = free prompt running; a template = that template is running.\n const [running, setRunning] = useState<AiTemplate | undefined | null>(null);\n const [errored, setErrored] = useState(false);\n const [outOfCredits, setOutOfCredits] = useState(false);\n const [result, setResult] = useState<{\n draft: string;\n template?: AiTemplate;\n } | null>(null);\n const [source, setSource] = useState<SourceInfo>({\n kind: 'document',\n words: 0,\n text: '',\n });\n const abortRef = useRef<AbortController | null>(null);\n const loading = running !== null;\n const onDictate = enableDictation ? context.onDictate : undefined;\n\n /* ---- Mic in the prompt (the editor's own dictation seam) ---- */\n const [isDictating, setIsDictating] = useState(false);\n const [interim, setInterim] = useState('');\n const [announcement, setAnnouncement] = useState('');\n const dictateAbortRef = useRef<AbortController | null>(null);\n const stopDictation = useCallback(() => dictateAbortRef.current?.abort(), []);\n const toggleDictation = useCallback(() => {\n if (isDictating) {\n stopDictation();\n return;\n }\n if (!onDictate) return;\n const controller = new AbortController();\n dictateAbortRef.current = controller;\n setIsDictating(true);\n setAnnouncement(t('helpMeWriteTemplates.bar.listening'));\n onDictate({\n signal: controller.signal,\n onPartialTranscript: (text) => {\n if (!controller.signal.aborted) setInterim(text);\n },\n onFinalTranscript: (text) => {\n if (controller.signal.aborted) return;\n setInterim('');\n const trimmed = text.trim();\n if (trimmed) {\n setPrompt((p) => joinWith(p, trimmed));\n setAnnouncement(trimmed);\n }\n },\n })\n .catch((err: unknown) => {\n // Out of credits shows the notice; other dictation errors are\n // non-fatal (the user can type instead).\n if (err instanceof AiCreditsExhaustedError) setOutOfCredits(true);\n })\n .finally(() => {\n setInterim('');\n if (dictateAbortRef.current === controller) {\n dictateAbortRef.current = null;\n setIsDictating(false);\n setAnnouncement('');\n }\n });\n }, [isDictating, onDictate, stopDictation, t]);\n\n // Each open starts fresh and reads what a template would rewrite.\n useEffect(() => {\n if (open) {\n setPrompt('');\n setRunning(null);\n setErrored(false);\n // Opened by a dictation that ran out of credits: start on the notice.\n setOutOfCredits(context.creditsExhausted);\n setResult(null);\n const selection = context.selectionText.trim();\n const text = selection || context.getText();\n setSource({\n kind: selection ? 'selection' : 'document',\n words: text.split(/\\s+/).filter(Boolean).length,\n text,\n });\n } else {\n abortRef.current?.abort();\n dictateAbortRef.current?.abort();\n }\n // Only on open/close; `context` is a fresh object every editor render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n useEffect(\n () => () => {\n abortRef.current?.abort();\n dictateAbortRef.current?.abort();\n },\n [],\n );\n\n const run = useCallback(\n (template: AiTemplate | undefined) => {\n if (loading) return;\n if (template ? source.words === 0 : !prompt.trim()) return;\n stopDictation();\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n setErrored(false);\n setRunning(template);\n onGenerate({\n template,\n prompt: prompt.trim(),\n sourceText: template ? source.text : '',\n signal: controller.signal,\n })\n .then((draft) => {\n if (controller.signal.aborted) return;\n setResult({ draft, template });\n setRunning(null);\n })\n .catch((err: unknown) => {\n if (controller.signal.aborted || isAbort(err)) return;\n if (err instanceof AiCreditsExhaustedError) setOutOfCredits(true);\n else setErrored(true);\n setRunning(null);\n });\n },\n [loading, source, prompt, onGenerate, stopDictation],\n );\n\n const { onClose: contextClose } = context;\n const close = useCallback(() => {\n if (suspendClose) return;\n contextClose();\n }, [suspendClose, contextClose]);\n\n const apply = (mode: HelpMeWriteApplyMode) => {\n if (!result) return;\n const { draft, template } = result;\n const previousHtml = context.getHTML();\n const selected = source.kind === 'selection';\n if (mode === 'insert') {\n context.insertAtSelection(draft);\n } else if (mode === 'replace') {\n if (selected) context.insertAtSelection(draft);\n else context.setContent(draft);\n } else if (selected) {\n context.insertAfterSelection(draft);\n } else {\n context.setContent(`${previousHtml}${draft}`);\n }\n context.onClose();\n const { setContent } = context;\n onApplied?.({\n mode,\n template,\n previousHtml,\n undo: () => setContent(previousHtml),\n });\n };\n\n const sourceLine =\n source.words === 0\n ? t('helpMeWriteTemplates.bar.sourceEmpty')\n : source.kind === 'selection'\n ? t('helpMeWriteTemplates.bar.sourceSelection')\n : t('helpMeWriteTemplates.bar.sourceDocument');\n\n let body: ReactNode;\n if (outOfCredits) {\n body = (\n <AiCreditsExhaustedNotice\n credits={credits}\n onBack={() => setOutOfCredits(false)}\n />\n );\n } else if (result) {\n const compare = Boolean(result.template);\n body = (\n <>\n <div\n className={\n compare\n ? 'ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-sm)] ds:lg:grid-cols-2'\n : 'ds:grid ds:grid-cols-1'\n }\n >\n {compare ? (\n <section\n aria-labelledby={`${sourceId}-before`}\n className=\"ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-2xs)]\"\n >\n <h2 id={`${sourceId}-before`} className={eyebrowClass}>\n {source.kind === 'selection'\n ? t('helpMeWriteTemplates.bar.beforeSelection')\n : t('helpMeWriteTemplates.bar.beforeDocument')}\n </h2>\n <p\n className={`${previewClass} ${compareBoxClass} ds:text-[color:var(--muted-foreground)]`}\n // Focusable so a keyboard user can scroll a long note.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n >\n {source.text}\n </p>\n </section>\n ) : null}\n <section\n aria-labelledby={`${sourceId}-after`}\n className=\"ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-2xs)]\"\n >\n <h2 id={`${sourceId}-after`} className={eyebrowClass}>\n {result.template\n ? `${t('helpMeWriteTemplates.bar.after')} · ${result.template.name}`\n : t('helpMeWriteTemplates.bar.after')}\n </h2>\n <SafeHtml\n html={result.draft}\n profile=\"rich-text\"\n className={\n compare ? `${previewClass} ${compareBoxClass}` : previewClass\n }\n tabIndex={0}\n />\n </section>\n </div>\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Button intent=\"ghost\" startIcon={<X />} onClick={context.onClose}>\n {t('helpMeWriteTemplates.bar.discard')}\n </Button>\n <Button\n intent=\"ghost\"\n startIcon={<RotateCcw />}\n onClick={() => {\n setResult(null);\n run(result.template);\n }}\n >\n {t('helpMeWriteTemplates.bar.retry')}\n </Button>\n <span className=\"ds:flex-1\" aria-hidden=\"true\" />\n {compare ? (\n <>\n <Button intent=\"outline\" onClick={() => apply('below')}>\n {t('helpMeWriteTemplates.bar.insertBelow')}\n </Button>\n <Button intent=\"primary\" onClick={() => apply('replace')}>\n {t('helpMeWriteTemplates.bar.replace')}\n </Button>\n </>\n ) : (\n <Button intent=\"primary\" onClick={() => apply('insert')}>\n {t('helpMeWriteTemplates.bar.insert')}\n </Button>\n )}\n </div>\n </>\n );\n } else {\n const ordered = orderTemplates(templates);\n // While dictating the field shows the committed prompt plus live interim\n // text, read-only so the stream is not fought over by typing.\n const fieldValue = isDictating ? joinWith(prompt, interim) : prompt;\n const showTemplatesMenu = templates.length > 0 || onManageTemplates;\n body = (\n <>\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <IconButton\n size=\"md\"\n intent=\"outline\"\n className={ACTION_SIZE}\n icon={<X />}\n aria-label={t('helpMeWriteTemplates.bar.close')}\n onClick={context.onClose}\n />\n <div className=\"ds:min-w-0 ds:flex-1\">\n <TextArea\n size=\"md\"\n value={fieldValue}\n onChange={(event) => setPrompt(event.target.value)}\n placeholder={t('helpMeWriteTemplates.bar.prompt')}\n aria-label={t('helpMeWriteTemplates.bar.prompt')}\n autoResize\n minRows={1}\n maxRows={3}\n readOnly={loading || isDictating}\n tone={errored ? 'error' : 'default'}\n aria-describedby={errored ? errorId : undefined}\n />\n </div>\n {onDictate ? (\n <IconButton\n size=\"md\"\n intent=\"outline\"\n className={\n isDictating ? `${ACTION_SIZE} ${RECORDING_MIC}` : ACTION_SIZE\n }\n icon={\n isDictating ? <Square className=\"ds:fill-current\" /> : <Mic />\n }\n aria-pressed={isDictating}\n aria-label={\n isDictating\n ? t('helpMeWriteTemplates.bar.dictateStop')\n : t('helpMeWriteTemplates.bar.dictateStart')\n }\n disabled={loading}\n onClick={toggleDictation}\n />\n ) : null}\n {showTemplatesMenu ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button\n intent=\"outline\"\n size=\"md\"\n className={MENU_TRIGGER}\n startIcon={\n running ? (\n <Spinner size=\"sm\" variant=\"pulse\" />\n ) : (\n <WandSparkles aria-hidden=\"true\" />\n )\n }\n endIcon={<ChevronDown aria-hidden=\"true\" />}\n aria-haspopup=\"menu\"\n aria-busy={running ? true : undefined}\n disabled={loading}\n aria-describedby={sourceId}\n >\n {t('helpMeWriteTemplates.bar.templatesMenu')}\n </Button>\n </DropdownMenu.Trigger>\n {/* The bar is docked at the editor's bottom edge, so the menu opens upward. */}\n <DropdownMenu.Content side=\"top\" align=\"end\" sideOffset={8}>\n <DropdownMenu.Label>\n {t('helpMeWriteTemplates.bar.templatesGroup')}\n </DropdownMenu.Label>\n {ordered.map((tpl) => (\n <DropdownMenu.Item\n key={tpl.id}\n startIcon={<WandSparkles />}\n description={tpl.description || undefined}\n // Only the run items disable on an empty note; the\n // library itself stays readable.\n disabled={loading || source.words === 0}\n onSelect={() => run(tpl)}\n >\n {/* The badge sits in the label, not `endIcon`: that slot\n is a 16px aria-hidden box, which would clip the badge\n and hide \"Default\" from screen readers. */}\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {tpl.name}\n {tpl.isDefault ? (\n <Badge variant=\"brand\" size=\"sm\">\n {t('helpMeWriteTemplates.bar.defaultBadge')}\n </Badge>\n ) : null}\n </span>\n </DropdownMenu.Item>\n ))}\n {onManageTemplates && templates.length === 0 ? (\n <DropdownMenu.Item\n startIcon={<Plus />}\n onSelect={() => onManageTemplates('create')}\n >\n {t('helpMeWriteTemplates.bar.createFirst')}\n </DropdownMenu.Item>\n ) : null}\n {onManageTemplates && templates.length > 0 ? (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n startIcon={<Settings />}\n onSelect={() => onManageTemplates('list')}\n >\n {t('helpMeWriteTemplates.bar.manage')}\n </DropdownMenu.Item>\n </>\n ) : null}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n <IconButton\n size=\"md\"\n intent=\"primary\"\n className={BRAND_ACTION}\n icon={\n running === undefined ? (\n <Spinner size=\"sm\" variant=\"pulse\" />\n ) : (\n <Send />\n )\n }\n disabled={loading || !prompt.trim()}\n aria-busy={running === undefined || undefined}\n aria-label={t('helpMeWriteTemplates.bar.write')}\n onClick={() => run(undefined)}\n />\n </div>\n {onDictate ? (\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {announcement}\n </p>\n ) : null}\n {errored ? (\n <p id={errorId} role=\"alert\" className={metaClass}>\n {t('helpMeWriteTemplates.bar.error')}\n </p>\n ) : null}\n <p id={sourceId} className={metaClass}>\n {sourceLine} {context.privacyNotice}\n </p>\n </>\n );\n }\n\n return (\n <EditorOverlay\n open={open}\n onClose={close}\n ariaLabel={t('editor.ai.helpMeWrite')}\n >\n <div className=\"ds:contents\" data-component=\"help-me-write-templates-bar\">\n {body}\n </div>\n </EditorOverlay>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* AiTemplateManager */\n/* ------------------------------------------------------------------ */\n\nexport interface AiTemplateManagerProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Open on the list (default) or straight on a new-template form. */\n initialMode?: 'list' | 'create';\n templates: AiTemplate[];\n /** Persist a new (no `id`) or edited template. A rejection keeps the form open. */\n onSaveTemplate: (draft: AiTemplateDraft) => void | Promise<void>;\n /** Omit to hide Delete. */\n onDeleteTemplate?: (id: string) => void | Promise<void>;\n}\n\ninterface FormState {\n id?: string;\n name: string;\n description: string;\n prompt: string;\n isDefault: boolean;\n submitted: boolean;\n}\n\nconst EMPTY_FORM: FormState = {\n name: '',\n description: '',\n prompt: '',\n isDefault: false,\n submitted: false,\n};\n\n/** List, create, edit and delete the practice's templates. */\nexport function AiTemplateManager({\n open,\n onOpenChange,\n initialMode = 'list',\n templates,\n onSaveTemplate,\n onDeleteTemplate,\n}: AiTemplateManagerProps): React.JSX.Element {\n const { t } = useTranslation();\n const [form, setForm] = useState<FormState | null>(null);\n const [saving, setSaving] = useState(false);\n const [saveFailed, setSaveFailed] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<AiTemplate | null>(null);\n\n useEffect(() => {\n if (open) {\n setSaveFailed(false);\n setForm(\n initialMode === 'create'\n ? { ...EMPTY_FORM, isDefault: templates.length === 0 }\n : null,\n );\n }\n // Only when it opens; `templates` changing mid-edit keeps the form.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const nameTaken = (name: string, id?: string): boolean =>\n templates.some(\n (tpl) => tpl.id !== id && tpl.name.toLowerCase() === name.toLowerCase(),\n );\n\n const nameError = (() => {\n if (!form?.submitted) return undefined;\n const name = form.name.trim();\n if (!name) return t('helpMeWriteTemplates.manager.nameRequired');\n return nameTaken(name, form.id)\n ? t('helpMeWriteTemplates.manager.nameTaken')\n : undefined;\n })();\n const promptError =\n form?.submitted && !form.prompt.trim()\n ? t('helpMeWriteTemplates.manager.promptRequired')\n : undefined;\n\n const save = async () => {\n if (!form || saving) return;\n const next = { ...form, submitted: true };\n setForm(next);\n const name = next.name.trim();\n const prompt = next.prompt.trim();\n if (!name || !prompt || nameTaken(name, next.id)) return;\n setSaving(true);\n setSaveFailed(false);\n try {\n await onSaveTemplate({\n id: next.id,\n name,\n description: next.description.trim() || undefined,\n prompt,\n isDefault: next.isDefault,\n });\n setForm(null);\n } catch {\n setSaveFailed(true);\n } finally {\n setSaving(false);\n }\n };\n\n const title = form\n ? form.id\n ? t('helpMeWriteTemplates.manager.formEdit')\n : t('helpMeWriteTemplates.manager.formNew')\n : t('helpMeWriteTemplates.manager.title');\n\n return (\n <>\n <Dialog open={open} onOpenChange={onOpenChange}>\n <Dialog.Content size=\"lg\">\n <div className=\"ds:contents\" data-component=\"ai-template-manager\">\n <Dialog.Header>\n <Dialog.Title>{title}</Dialog.Title>\n <Dialog.Description>\n {t('helpMeWriteTemplates.manager.description')}\n </Dialog.Description>\n </Dialog.Header>\n <Dialog.Body>\n {form ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {saveFailed ? (\n <Alert variant=\"error\">\n {t('helpMeWriteTemplates.manager.saveError')}\n </Alert>\n ) : null}\n <FormField\n label={t('helpMeWriteTemplates.manager.name')}\n error={nameError}\n required\n >\n <TextInput\n value={form.name}\n maxLength={100}\n placeholder={t(\n 'helpMeWriteTemplates.manager.namePlaceholder',\n )}\n onChange={(event) =>\n setForm({ ...form, name: event.target.value })\n }\n />\n </FormField>\n <FormField\n label={t('helpMeWriteTemplates.manager.descLabel')}\n description={t('helpMeWriteTemplates.manager.descHint')}\n optional\n >\n <TextInput\n value={form.description}\n maxLength={120}\n onChange={(event) =>\n setForm({ ...form, description: event.target.value })\n }\n />\n </FormField>\n <FormField\n label={t('helpMeWriteTemplates.manager.prompt')}\n description={t(\n 'helpMeWriteTemplates.manager.promptDescription',\n )}\n error={promptError}\n required\n >\n <TextArea\n value={form.prompt}\n maxLength={4000}\n autoResize\n minRows={4}\n maxRows={10}\n onChange={(event) =>\n setForm({ ...form, prompt: event.target.value })\n }\n />\n </FormField>\n <Switch\n label={t('helpMeWriteTemplates.manager.isDefault')}\n checked={form.isDefault}\n onCheckedChange={(checked) =>\n setForm({ ...form, isDefault: checked })\n }\n />\n </div>\n ) : templates.length === 0 ? (\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={t('helpMeWriteTemplates.manager.emptyTitle')}\n description={t(\n 'helpMeWriteTemplates.manager.emptyDescription',\n )}\n primaryAction={{\n label: t('helpMeWriteTemplates.manager.new'),\n onClick: () => setForm({ ...EMPTY_FORM, isDefault: true }),\n }}\n />\n ) : (\n <ul\n aria-label={t('helpMeWriteTemplates.manager.listLabel')}\n className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0\"\n >\n {orderTemplates(templates).map((tpl) => (\n <li\n key={tpl.id}\n className=\"ds:flex ds:items-start ds:gap-[var(--spacing-sm)] ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)] ds:p-[var(--spacing-sm)]\"\n >\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-title-item ds:text-[color:var(--foreground)]\">\n {tpl.name}\n </span>\n {tpl.isDefault ? (\n <Badge variant=\"brand\" size=\"sm\">\n {t('helpMeWriteTemplates.bar.defaultBadge')}\n </Badge>\n ) : null}\n </div>\n <p className={`${metaClass} ds:line-clamp-2`}>\n {tpl.description || tpl.prompt}\n </p>\n </div>\n <IconButton\n size=\"sm\"\n intent=\"ghost\"\n icon={<Pencil />}\n aria-label={t('helpMeWriteTemplates.manager.edit', {\n name: tpl.name,\n })}\n onClick={() =>\n setForm({\n id: tpl.id,\n name: tpl.name,\n description: tpl.description ?? '',\n prompt: tpl.prompt,\n isDefault: tpl.isDefault,\n submitted: false,\n })\n }\n />\n {onDeleteTemplate ? (\n <IconButton\n size=\"sm\"\n intent=\"ghost\"\n icon={<Trash2 />}\n aria-label={t('helpMeWriteTemplates.manager.delete', {\n name: tpl.name,\n })}\n onClick={() => setPendingDelete(tpl)}\n />\n ) : null}\n </li>\n ))}\n </ul>\n )}\n </Dialog.Body>\n <Dialog.Footer>\n {form ? (\n <>\n <Button intent=\"secondary\" onClick={() => setForm(null)}>\n {t('helpMeWriteTemplates.manager.cancel')}\n </Button>\n <Button\n intent=\"primary\"\n loading={saving}\n onClick={() => void save()}\n >\n {t('helpMeWriteTemplates.manager.save')}\n </Button>\n </>\n ) : (\n <>\n {templates.length > 0 ? (\n <Button\n intent=\"outline\"\n startIcon={<Plus />}\n onClick={() => setForm({ ...EMPTY_FORM })}\n >\n {t('helpMeWriteTemplates.manager.new')}\n </Button>\n ) : null}\n <Dialog.Close asChild>\n <Button intent=\"primary\">\n {t('helpMeWriteTemplates.manager.done')}\n </Button>\n </Dialog.Close>\n </>\n )}\n </Dialog.Footer>\n </div>\n </Dialog.Content>\n </Dialog>\n <Dialog\n open={pendingDelete != null}\n onOpenChange={(next) => {\n if (!next) setPendingDelete(null);\n }}\n >\n <Dialog.Content size=\"sm\" variant=\"alert\">\n <Dialog.Header>\n <Dialog.Title>\n {t('helpMeWriteTemplates.manager.deleteTitle', {\n name: pendingDelete?.name ?? '',\n })}\n </Dialog.Title>\n <Dialog.Description>\n {t('helpMeWriteTemplates.manager.deleteDescription')}\n </Dialog.Description>\n </Dialog.Header>\n <Dialog.Footer>\n <Dialog.Close asChild>\n <Button intent=\"secondary\">\n {t('helpMeWriteTemplates.manager.cancel')}\n </Button>\n </Dialog.Close>\n <Button\n intent=\"destructive\"\n onClick={() => {\n if (pendingDelete) void onDeleteTemplate?.(pendingDelete.id);\n setPendingDelete(null);\n }}\n >\n {t('helpMeWriteTemplates.manager.deleteConfirm')}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog>\n </>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* HelpMeWriteUndoNotice */\n/* ------------------------------------------------------------------ */\n\nexport interface HelpMeWriteUndoNoticeProps {\n /** The change to offer Undo for; `null` hides the notice. */\n applied: HelpMeWriteApplied | null;\n onUndo: () => void;\n onDismiss: () => void;\n}\n\n/** \"Note rewritten with …\" plus Undo; takes focus when it appears. */\nexport function HelpMeWriteUndoNotice({\n applied,\n onUndo,\n onDismiss,\n}: HelpMeWriteUndoNoticeProps): React.JSX.Element | null {\n const { t } = useTranslation();\n const undoRef = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (applied) undoRef.current?.focus();\n }, [applied]);\n if (!applied?.template) return null;\n const name = applied.template.name;\n return (\n <Alert\n variant=\"success\"\n dismissible\n onOpenChange={(isOpen) => {\n if (!isOpen) onDismiss();\n }}\n data-component=\"help-me-write-undo-notice\"\n >\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span>\n {applied.mode === 'below'\n ? t('helpMeWriteTemplates.undo.addedBelow', { name })\n : t('helpMeWriteTemplates.undo.replaced', { name })}\n </span>\n <Button ref={undoRef} intent=\"outline\" size=\"sm\" onClick={onUndo}>\n {t('helpMeWriteTemplates.undo.undo')}\n </Button>\n </div>\n </Alert>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* useHelpMeWriteTemplates — the whole thing in one call */\n/* ------------------------------------------------------------------ */\n\nexport interface UseHelpMeWriteTemplatesOptions {\n templates: AiTemplate[];\n onGenerate: HelpMeWriteTemplatesBarProps['onGenerate'];\n /** Enables the manager (create / edit). Omit for read-only template users. */\n onSaveTemplate?: AiTemplateManagerProps['onSaveTemplate'];\n /** Enables Delete in the manager. */\n onDeleteTemplate?: AiTemplateManagerProps['onDeleteTemplate'];\n credits?: AiCreditsInfo;\n /** Mic in the bar's prompt when the editor has `onDictate`. Default true. */\n enableDictation?: boolean;\n /** Also told about every applied draft (e.g. for analytics). */\n onApplied?: (applied: HelpMeWriteApplied) => void;\n}\n\nexport interface UseHelpMeWriteTemplatesResult {\n /** Pass to `RichTextEditor`'s `renderHelpMeWrite`. */\n renderHelpMeWrite: (context: HelpMeWriteRenderContext) => ReactNode;\n /** Mount once, anywhere (a portalled dialog); `null` without `onSaveTemplate`. */\n manager: ReactNode;\n /** Place where the Undo notice should show, e.g. above the editor. */\n undoNotice: ReactNode;\n openManager: (mode?: 'list' | 'create') => void;\n}\n\n/**\n * Wires the bar, the manager and Undo together. Usage:\n *\n * const hmw = useHelpMeWriteTemplates({ templates, onGenerate, onSaveTemplate });\n * {hmw.undoNotice}\n * <RichTextEditor renderHelpMeWrite={hmw.renderHelpMeWrite} … />\n * {hmw.manager}\n */\nexport function useHelpMeWriteTemplates({\n templates,\n onGenerate,\n onSaveTemplate,\n onDeleteTemplate,\n credits,\n enableDictation,\n onApplied,\n}: UseHelpMeWriteTemplatesOptions): UseHelpMeWriteTemplatesResult {\n const [manager, setManager] = useState<{\n open: boolean;\n mode: 'list' | 'create';\n }>({ open: false, mode: 'list' });\n const [applied, setApplied] = useState<HelpMeWriteApplied | null>(null);\n const openManager = useCallback(\n (mode: 'list' | 'create' = 'list') => setManager({ open: true, mode }),\n [],\n );\n\n const renderHelpMeWrite = useCallback(\n (context: HelpMeWriteRenderContext): ReactNode => {\n return (\n <HelpMeWriteTemplatesBar\n context={context}\n templates={templates}\n onGenerate={onGenerate}\n onManageTemplates={onSaveTemplate ? openManager : undefined}\n credits={credits}\n enableDictation={enableDictation}\n suspendClose={manager.open}\n onApplied={(event) => {\n setApplied(event.template ? event : null);\n onApplied?.(event);\n }}\n />\n );\n },\n [\n templates,\n onGenerate,\n onSaveTemplate,\n openManager,\n credits,\n enableDictation,\n manager.open,\n onApplied,\n ],\n );\n\n const managerNode = useMemo(\n () =>\n onSaveTemplate ? (\n <AiTemplateManager\n open={manager.open}\n initialMode={manager.mode}\n onOpenChange={(isOpen) => setManager((m) => ({ ...m, open: isOpen }))}\n templates={templates}\n onSaveTemplate={onSaveTemplate}\n onDeleteTemplate={onDeleteTemplate}\n />\n ) : null,\n [manager, templates, onSaveTemplate, onDeleteTemplate],\n );\n\n const undoNotice = (\n <HelpMeWriteUndoNotice\n applied={applied}\n onUndo={() => {\n applied?.undo();\n setApplied(null);\n }}\n onDismiss={() => setApplied(null)}\n />\n );\n\n return {\n renderHelpMeWrite,\n manager: managerNode,\n undoNotice,\n openManager,\n };\n}\n"],"names":["AiCreditsExhaustedError","message","ACTION_SIZE","MENU_TRIGGER","BRAND_ACTION","RECORDING_MIC","metaClass","eyebrowClass","previewClass","compareBoxClass","orderTemplates","templates","a","b","joinWith","base","extra","isAbort","err","AiCreditsExhaustedNotice","credits","onBack","t","i18n","useTranslation","limit","remaining","remainingText","resetsOn","jsxs","Alert","Astroid","jsx","Progress","Button","TrendingUp","ArrowLeft","HelpMeWriteTemplatesBar","context","onGenerate","onManageTemplates","onApplied","enableDictation","suspendClose","open","sourceId","useId","errorId","prompt","setPrompt","useState","running","setRunning","errored","setErrored","outOfCredits","setOutOfCredits","result","setResult","source","setSource","abortRef","useRef","loading","onDictate","isDictating","setIsDictating","interim","setInterim","announcement","setAnnouncement","dictateAbortRef","stopDictation","useCallback","_a","toggleDictation","controller","text","trimmed","p","useEffect","selection","_b","run","template","draft","contextClose","close","apply","mode","previousHtml","selected","setContent","sourceLine","body","compare","Fragment","SafeHtml","X","RotateCcw","ordered","fieldValue","showTemplatesMenu","IconButton","TextArea","event","Square","Mic","DropdownMenu","Spinner","WandSparkles","ChevronDown","tpl","Badge","Plus","Settings","Send","EditorOverlay","EMPTY_FORM","AiTemplateManager","onOpenChange","initialMode","onSaveTemplate","onDeleteTemplate","form","setForm","saving","setSaving","saveFailed","setSaveFailed","pendingDelete","setPendingDelete","nameTaken","name","id","nameError","promptError","save","next","title","Dialog","FormField","TextInput","Switch","checked","EmptyState","Pencil","Trash2","HelpMeWriteUndoNotice","applied","onUndo","onDismiss","undoRef","isOpen","useHelpMeWriteTemplates","manager","setManager","setApplied","openManager","renderHelpMeWrite","managerNode","useMemo","m"],"mappings":"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"}