@alfadocs/ui-kit 0.0.20 → 0.1.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 (547) hide show
  1. package/dist/_chunks/accordion-BJD1aM67.js +117 -0
  2. package/dist/_chunks/accordion-BJD1aM67.js.map +1 -0
  3. package/dist/_chunks/agenda-card-Bld47Eul.js +130 -0
  4. package/dist/_chunks/agenda-card-Bld47Eul.js.map +1 -0
  5. package/dist/_chunks/agenda-tray-D86cNIJ0.js +119 -0
  6. package/dist/_chunks/agenda-tray-D86cNIJ0.js.map +1 -0
  7. package/dist/_chunks/ai-prompt-input-CdYwt2VP.js +379 -0
  8. package/dist/_chunks/ai-prompt-input-CdYwt2VP.js.map +1 -0
  9. package/dist/_chunks/{alert-C5ud6CfE.js → alert-ETrF7Q8J.js} +51 -51
  10. package/dist/_chunks/alert-ETrF7Q8J.js.map +1 -0
  11. package/dist/_chunks/apexcharts-theme-BkSShpEy.js +48 -0
  12. package/dist/_chunks/apexcharts-theme-BkSShpEy.js.map +1 -0
  13. package/dist/_chunks/{app-frame-CmIUp9BD.js → app-frame-uq2Gy0vs.js} +37 -37
  14. package/dist/_chunks/app-frame-uq2Gy0vs.js.map +1 -0
  15. package/dist/_chunks/aspect-ratio-BqU4itGW.js +56 -0
  16. package/dist/_chunks/aspect-ratio-BqU4itGW.js.map +1 -0
  17. package/dist/_chunks/{audio-recorder-GkGNtW2X.js → audio-recorder-D2UEBF9B.js} +98 -98
  18. package/dist/_chunks/audio-recorder-D2UEBF9B.js.map +1 -0
  19. package/dist/_chunks/{audio-visualiser-CIO3yy23.js → audio-visualiser-B4u4goV5.js} +46 -46
  20. package/dist/_chunks/audio-visualiser-B4u4goV5.js.map +1 -0
  21. package/dist/_chunks/{autocomplete.agent-kb0nmr6F.js → autocomplete.agent-Bi6CiRKa.js} +111 -111
  22. package/dist/_chunks/autocomplete.agent-Bi6CiRKa.js.map +1 -0
  23. package/dist/_chunks/{avatar-BsV7vRA6.js → avatar-BAhxbDEu.js} +38 -38
  24. package/dist/_chunks/avatar-BAhxbDEu.js.map +1 -0
  25. package/dist/_chunks/badge-zDghajh8.js +104 -0
  26. package/dist/_chunks/badge-zDghajh8.js.map +1 -0
  27. package/dist/_chunks/{balance-cell-renderer-BQwN51rT.js → balance-cell-renderer-BGyvZWjB.js} +123 -124
  28. package/dist/_chunks/balance-cell-renderer-BGyvZWjB.js.map +1 -0
  29. package/dist/_chunks/{breadcrumb-DnO6eHSS.js → breadcrumb-pdUacgm1.js} +40 -40
  30. package/dist/_chunks/breadcrumb-pdUacgm1.js.map +1 -0
  31. package/dist/_chunks/button-DmiGFnNA.js +119 -0
  32. package/dist/_chunks/button-DmiGFnNA.js.map +1 -0
  33. package/dist/_chunks/{button-group-CI7LFxt3.js → button-group-BtTHSyU0.js} +24 -24
  34. package/dist/_chunks/button-group-BtTHSyU0.js.map +1 -0
  35. package/dist/_chunks/{calendar-BIXVzhkL.js → calendar-BkDeDTaX.js} +333 -290
  36. package/dist/_chunks/calendar-BkDeDTaX.js.map +1 -0
  37. package/dist/_chunks/card-DeItIBcV.js +158 -0
  38. package/dist/_chunks/card-DeItIBcV.js.map +1 -0
  39. package/dist/_chunks/{chart.agent-DkmVXNsI.js → chart.agent-BdS-_8MO.js} +66 -64
  40. package/dist/_chunks/chart.agent-BdS-_8MO.js.map +1 -0
  41. package/dist/_chunks/chat-container-Co8HpB64.js +174 -0
  42. package/dist/_chunks/chat-container-Co8HpB64.js.map +1 -0
  43. package/dist/_chunks/{chat-input-aphxDjZL.js → chat-input-3rstZhHR.js} +57 -57
  44. package/dist/_chunks/chat-input-3rstZhHR.js.map +1 -0
  45. package/dist/_chunks/{chat-message-CdJSD18D.js → chat-message-dDMVSYBs.js} +66 -66
  46. package/dist/_chunks/chat-message-dDMVSYBs.js.map +1 -0
  47. package/dist/_chunks/checkbox-DMzgtnqw.js +116 -0
  48. package/dist/_chunks/checkbox-DMzgtnqw.js.map +1 -0
  49. package/dist/_chunks/{checkbox-group-D1aqVI0-.js → checkbox-group-DBnIBRT_.js} +34 -34
  50. package/dist/_chunks/checkbox-group-DBnIBRT_.js.map +1 -0
  51. package/dist/_chunks/{collapsible-jBFm7Ah8.js → collapsible-DPGQnHZh.js} +16 -16
  52. package/dist/_chunks/collapsible-DPGQnHZh.js.map +1 -0
  53. package/dist/_chunks/{color-picker-CiotzQJF.js → color-picker-OKKF3Dww.js} +158 -158
  54. package/dist/_chunks/color-picker-OKKF3Dww.js.map +1 -0
  55. package/dist/_chunks/{combobox.agent-B6RwDSct.js → combobox.agent-CfeB-IZ1.js} +107 -107
  56. package/dist/_chunks/combobox.agent-CfeB-IZ1.js.map +1 -0
  57. package/dist/_chunks/{command-palette.agent-B87_OkmC.js → command-palette.agent-XLfSGHCL.js} +27 -27
  58. package/dist/_chunks/command-palette.agent-XLfSGHCL.js.map +1 -0
  59. package/dist/_chunks/{date-picker-CdPuI3dK.js → date-picker-DXx8oSJb.js} +5 -5
  60. package/dist/_chunks/{date-picker-CdPuI3dK.js.map → date-picker-DXx8oSJb.js.map} +1 -1
  61. package/dist/_chunks/{date-range-picker-DfK4cjln.js → date-range-picker-C3CbY__H.js} +29 -29
  62. package/dist/_chunks/{date-range-picker-DfK4cjln.js.map → date-range-picker-C3CbY__H.js.map} +1 -1
  63. package/dist/_chunks/{date-time-picker-CX_FMsLG.js → date-time-picker-Bn3FPeAc.js} +58 -58
  64. package/dist/_chunks/date-time-picker-Bn3FPeAc.js.map +1 -0
  65. package/dist/_chunks/description-list-B1CL3RTG.js +187 -0
  66. package/dist/_chunks/description-list-B1CL3RTG.js.map +1 -0
  67. package/dist/_chunks/{dialog.agent-B276rAQF.js → dialog.agent-D9WeIWi2.js} +39 -39
  68. package/dist/_chunks/dialog.agent-D9WeIWi2.js.map +1 -0
  69. package/dist/_chunks/dropdown-menu-BnVUeVG3.js +210 -0
  70. package/dist/_chunks/dropdown-menu-BnVUeVG3.js.map +1 -0
  71. package/dist/_chunks/{empty-state-DiG7vYBM.js → empty-state-DV96gCnp.js} +37 -37
  72. package/dist/_chunks/empty-state-DV96gCnp.js.map +1 -0
  73. package/dist/_chunks/{file-upload.agent-BMow5yDY.js → file-upload.agent-DYFnqdxw.js} +185 -185
  74. package/dist/_chunks/file-upload.agent-DYFnqdxw.js.map +1 -0
  75. package/dist/_chunks/{flag-ChP784EM.js → flag-C3BUEwHH.js} +14 -14
  76. package/dist/_chunks/{flag-ChP784EM.js.map → flag-C3BUEwHH.js.map} +1 -1
  77. package/dist/_chunks/floating-action-button-RigP2E7o.js +95 -0
  78. package/dist/_chunks/floating-action-button-RigP2E7o.js.map +1 -0
  79. package/dist/_chunks/form-field-DI5LY5aG.js +121 -0
  80. package/dist/_chunks/form-field-DI5LY5aG.js.map +1 -0
  81. package/dist/_chunks/freemium-paywall-D0GiUFOe.js +197 -0
  82. package/dist/_chunks/freemium-paywall-D0GiUFOe.js.map +1 -0
  83. package/dist/_chunks/{header-BpKaSL_v.js → header-CW2oRd5H.js} +111 -111
  84. package/dist/_chunks/header-CW2oRd5H.js.map +1 -0
  85. package/dist/_chunks/icon-button-C482ii4y.js +45 -0
  86. package/dist/_chunks/icon-button-C482ii4y.js.map +1 -0
  87. package/dist/_chunks/{icon-button-group-tERESY-n.js → icon-button-group-BnhkUWUg.js} +56 -56
  88. package/dist/_chunks/icon-button-group-BnhkUWUg.js.map +1 -0
  89. package/dist/_chunks/{kbd-0iPlQjgC.js → kbd-DTcIjYA7.js} +52 -52
  90. package/dist/_chunks/kbd-DTcIjYA7.js.map +1 -0
  91. package/dist/_chunks/{key-value-pair--Je59tAF.js → key-value-pair-DDhSYdDL.js} +26 -26
  92. package/dist/_chunks/key-value-pair-DDhSYdDL.js.map +1 -0
  93. package/dist/_chunks/leo-sidebar-gXXcGPKk.js +755 -0
  94. package/dist/_chunks/leo-sidebar-gXXcGPKk.js.map +1 -0
  95. package/dist/_chunks/{list-n8vI8Yvn.js → list-Cwe8mcmh.js} +96 -96
  96. package/dist/_chunks/list-Cwe8mcmh.js.map +1 -0
  97. package/dist/_chunks/live-region-COggO6x6.js +57 -0
  98. package/dist/_chunks/live-region-COggO6x6.js.map +1 -0
  99. package/dist/_chunks/{logo-UNWYb9p7.js → logo-3wrZGpwg.js} +29 -29
  100. package/dist/_chunks/logo-3wrZGpwg.js.map +1 -0
  101. package/dist/_chunks/{matrix-rain-Q7xTEpKu.js → matrix-rain-gsHqSvW7.js} +75 -75
  102. package/dist/_chunks/matrix-rain-gsHqSvW7.js.map +1 -0
  103. package/dist/_chunks/message-card-DID3cXUW.js +275 -0
  104. package/dist/_chunks/message-card-DID3cXUW.js.map +1 -0
  105. package/dist/_chunks/message-tray-CVMLBnVp.js +302 -0
  106. package/dist/_chunks/message-tray-CVMLBnVp.js.map +1 -0
  107. package/dist/_chunks/{multi-select.agent-Cf4pU636.js → multi-select.agent-BUKYZJfp.js} +126 -126
  108. package/dist/_chunks/multi-select.agent-BUKYZJfp.js.map +1 -0
  109. package/dist/_chunks/{navigation-menu-DBDsAmXc.js → navigation-menu-NjwxyshT.js} +68 -97
  110. package/dist/_chunks/navigation-menu-NjwxyshT.js.map +1 -0
  111. package/dist/_chunks/notification-card-BZ33fq8H.js +255 -0
  112. package/dist/_chunks/notification-card-BZ33fq8H.js.map +1 -0
  113. package/dist/_chunks/{notification-tray-CNWPuPZp.js → notification-tray-CnEd7B2q.js} +96 -96
  114. package/dist/_chunks/notification-tray-CnEd7B2q.js.map +1 -0
  115. package/dist/_chunks/{number-input-B1Th0DdC.js → number-input-D7rSa_ef.js} +73 -73
  116. package/dist/_chunks/number-input-D7rSa_ef.js.map +1 -0
  117. package/dist/_chunks/{otp-input-CmoBuZ4K.js → otp-input-C9R9sC74.js} +42 -42
  118. package/dist/_chunks/otp-input-C9R9sC74.js.map +1 -0
  119. package/dist/_chunks/{pagination.agent-B5KLDCMN.js → pagination.agent-D75FB6XP.js} +106 -106
  120. package/dist/_chunks/pagination.agent-D75FB6XP.js.map +1 -0
  121. package/dist/_chunks/{password-input-DnjNh-hQ.js → password-input-C6PvKyQV.js} +59 -59
  122. package/dist/_chunks/password-input-C6PvKyQV.js.map +1 -0
  123. package/dist/_chunks/{patient-shell-D0RaWDMR.js → patient-shell-CGsmI5LJ.js} +9 -9
  124. package/dist/_chunks/{patient-shell-D0RaWDMR.js.map → patient-shell-CGsmI5LJ.js.map} +1 -1
  125. package/dist/_chunks/{payment-form-Cf7U6r5L.js → payment-form-l3j-gA-t.js} +108 -108
  126. package/dist/_chunks/payment-form-l3j-gA-t.js.map +1 -0
  127. package/dist/_chunks/{pdf-viewer.agent-DXjgDItg.js → pdf-viewer.agent-DuGfSoep.js} +234 -233
  128. package/dist/_chunks/pdf-viewer.agent-DuGfSoep.js.map +1 -0
  129. package/dist/_chunks/{phone-input-C2dtIuxW.js → phone-input-ZWa_FU4R.js} +112 -112
  130. package/dist/_chunks/phone-input-ZWa_FU4R.js.map +1 -0
  131. package/dist/_chunks/{popover-D1woU9mP.js → popover-CMr1pTPO.js} +58 -58
  132. package/dist/_chunks/popover-CMr1pTPO.js.map +1 -0
  133. package/dist/_chunks/{privacy-lock-C1X42Sit.js → privacy-lock-Br5k7Rul.js} +36 -36
  134. package/dist/_chunks/privacy-lock-Br5k7Rul.js.map +1 -0
  135. package/dist/_chunks/{progress-DL3-izuO.js → progress-D4ELgHG3.js} +43 -43
  136. package/dist/_chunks/progress-D4ELgHG3.js.map +1 -0
  137. package/dist/_chunks/radio-B_gvGU29.js +106 -0
  138. package/dist/_chunks/radio-B_gvGU29.js.map +1 -0
  139. package/dist/_chunks/radio-group-Bn8Wt0yc.js +88 -0
  140. package/dist/_chunks/radio-group-Bn8Wt0yc.js.map +1 -0
  141. package/dist/_chunks/{react-day-picker-DQKDiJ37.js → react-day-picker-d0MHsyCj.js} +174 -174
  142. package/dist/_chunks/{react-day-picker-DQKDiJ37.js.map → react-day-picker-d0MHsyCj.js.map} +1 -1
  143. package/dist/_chunks/{resizable.agent-DVk_jJur.js → resizable.agent-DBpPGNdy.js} +122 -122
  144. package/dist/_chunks/resizable.agent-DBpPGNdy.js.map +1 -0
  145. package/dist/_chunks/{rich-text-editor.agent-BOjF4Xao.js → rich-text-editor.agent-C1_E7_7t.js} +225 -225
  146. package/dist/_chunks/rich-text-editor.agent-C1_E7_7t.js.map +1 -0
  147. package/dist/_chunks/scroll-area-Ba99pJ_R.js +144 -0
  148. package/dist/_chunks/scroll-area-Ba99pJ_R.js.map +1 -0
  149. package/dist/_chunks/{search-bar-DgSOAajC.js → search-bar-VoTqJhRp.js} +131 -131
  150. package/dist/_chunks/search-bar-VoTqJhRp.js.map +1 -0
  151. package/dist/_chunks/search-input-D6rarD0_.js +197 -0
  152. package/dist/_chunks/search-input-D6rarD0_.js.map +1 -0
  153. package/dist/_chunks/select-DbxWF3O_.js +320 -0
  154. package/dist/_chunks/select-DbxWF3O_.js.map +1 -0
  155. package/dist/_chunks/{separator-DExI4amU.js → separator-BRQHi8s0.js} +17 -17
  156. package/dist/_chunks/separator-BRQHi8s0.js.map +1 -0
  157. package/dist/_chunks/sheet-DyWqluiS.js +188 -0
  158. package/dist/_chunks/sheet-DyWqluiS.js.map +1 -0
  159. package/dist/_chunks/sidebar-B52iGGNV.js +1076 -0
  160. package/dist/_chunks/sidebar-B52iGGNV.js.map +1 -0
  161. package/dist/_chunks/{sign-in-with-alfadocs-button-BBL11-Rt.js → sign-in-with-alfadocs-button-BU7MP5Hg.js} +4 -4
  162. package/dist/_chunks/{sign-in-with-alfadocs-button-BBL11-Rt.js.map → sign-in-with-alfadocs-button-BU7MP5Hg.js.map} +1 -1
  163. package/dist/_chunks/{signature-capture.agent-L_1_-zVR.js → signature-capture.agent-4htVctJ2.js} +163 -163
  164. package/dist/_chunks/signature-capture.agent-4htVctJ2.js.map +1 -0
  165. package/dist/_chunks/skeleton-ClO1v5GE.js +95 -0
  166. package/dist/_chunks/skeleton-ClO1v5GE.js.map +1 -0
  167. package/dist/_chunks/skip-link-CASJkBOe.js +68 -0
  168. package/dist/_chunks/skip-link-CASJkBOe.js.map +1 -0
  169. package/dist/_chunks/slider-n8JWpJvT.js +273 -0
  170. package/dist/_chunks/slider-n8JWpJvT.js.map +1 -0
  171. package/dist/_chunks/slot-grid-BRAkqChA.js +491 -0
  172. package/dist/_chunks/slot-grid-BRAkqChA.js.map +1 -0
  173. package/dist/_chunks/{sparkline.agent-BDTXzTy9.js → sparkline.agent-BLY1IMyW.js} +45 -45
  174. package/dist/_chunks/sparkline.agent-BLY1IMyW.js.map +1 -0
  175. package/dist/_chunks/{spinner-77xUGpuX.js → spinner-CoAOGcDa.js} +40 -40
  176. package/dist/_chunks/spinner-CoAOGcDa.js.map +1 -0
  177. package/dist/_chunks/stat-D76MNHzK.js +208 -0
  178. package/dist/_chunks/stat-D76MNHzK.js.map +1 -0
  179. package/dist/_chunks/{stepper-accordion-BkvqQWPI.js → stepper-accordion-DHQ80A4v.js} +33 -33
  180. package/dist/_chunks/stepper-accordion-DHQ80A4v.js.map +1 -0
  181. package/dist/_chunks/{stepper-calendar-BQMjrwzo.js → stepper-calendar-vtWwa2bY.js} +159 -159
  182. package/dist/_chunks/stepper-calendar-vtWwa2bY.js.map +1 -0
  183. package/dist/_chunks/stepper-progress-DMZ5w5VR.js +128 -0
  184. package/dist/_chunks/stepper-progress-DMZ5w5VR.js.map +1 -0
  185. package/dist/_chunks/streaming-text-D0cW8pwq.js +104 -0
  186. package/dist/_chunks/streaming-text-D0cW8pwq.js.map +1 -0
  187. package/dist/_chunks/suggestion-chip-BgNFpPEE.js +157 -0
  188. package/dist/_chunks/suggestion-chip-BgNFpPEE.js.map +1 -0
  189. package/dist/_chunks/switch-DtLPKO0p.js +137 -0
  190. package/dist/_chunks/switch-DtLPKO0p.js.map +1 -0
  191. package/dist/_chunks/{tabs.agent-FsGU3sZL.js → tabs.agent-BDUlyPbJ.js} +101 -101
  192. package/dist/_chunks/tabs.agent-BDUlyPbJ.js.map +1 -0
  193. package/dist/_chunks/tag-CfSZZN2f.js +194 -0
  194. package/dist/_chunks/tag-CfSZZN2f.js.map +1 -0
  195. package/dist/_chunks/task-card-B5xfiFg5.js +112 -0
  196. package/dist/_chunks/task-card-B5xfiFg5.js.map +1 -0
  197. package/dist/_chunks/task-tray-BnpiodZ4.js +99 -0
  198. package/dist/_chunks/task-tray-BnpiodZ4.js.map +1 -0
  199. package/dist/_chunks/text-area-BqbruBWx.js +152 -0
  200. package/dist/_chunks/text-area-BqbruBWx.js.map +1 -0
  201. package/dist/_chunks/text-input-lh6kRXZS.js +187 -0
  202. package/dist/_chunks/text-input-lh6kRXZS.js.map +1 -0
  203. package/dist/_chunks/theme-toggle-BHKMiORD.js +326 -0
  204. package/dist/_chunks/theme-toggle-BHKMiORD.js.map +1 -0
  205. package/dist/_chunks/{time-picker-BapZq0OY.js → time-picker-DbpAmPux.js} +102 -102
  206. package/dist/_chunks/time-picker-DbpAmPux.js.map +1 -0
  207. package/dist/_chunks/timeline-vjsUeuq1.js +219 -0
  208. package/dist/_chunks/timeline-vjsUeuq1.js.map +1 -0
  209. package/dist/_chunks/{timestamp-BLM-jjdw.js → timestamp-DmSt92P1.js} +30 -30
  210. package/dist/_chunks/timestamp-DmSt92P1.js.map +1 -0
  211. package/dist/_chunks/{toast-DSCqnDRl.js → toast-DllSITLf.js} +151 -151
  212. package/dist/_chunks/{toast-DSCqnDRl.js.map → toast-DllSITLf.js.map} +1 -1
  213. package/dist/_chunks/{tooltip-DF6WjD1r.js → tooltip-Dp3u8jGz.js} +30 -30
  214. package/dist/_chunks/tooltip-Dp3u8jGz.js.map +1 -0
  215. package/dist/_chunks/{tooth-scheme.agent-CFKl3iQr.js → tooth-scheme.agent-BRqxWa1D.js} +75 -75
  216. package/dist/_chunks/tooth-scheme.agent-BRqxWa1D.js.map +1 -0
  217. package/dist/_chunks/transcript-panel-Bg1BTMSr.js +265 -0
  218. package/dist/_chunks/transcript-panel-Bg1BTMSr.js.map +1 -0
  219. package/dist/_chunks/typing-indicator-BRg22Rqr.js +81 -0
  220. package/dist/_chunks/typing-indicator-BRg22Rqr.js.map +1 -0
  221. package/dist/_chunks/use-locale-BuXR_Zl9.js +32 -0
  222. package/dist/_chunks/use-locale-BuXR_Zl9.js.map +1 -0
  223. package/dist/_chunks/visually-hidden-Y3jcdCv-.js +21 -0
  224. package/dist/_chunks/visually-hidden-Y3jcdCv-.js.map +1 -0
  225. package/dist/_chunks/{warning-stack-Cyf_81SL.js → warning-stack-B9N9yWet.js} +38 -38
  226. package/dist/_chunks/warning-stack-B9N9yWet.js.map +1 -0
  227. package/dist/_chunks/{workflow-map-Uf-hHAO3.js → workflow-map-gBhL_Wrs.js} +385 -385
  228. package/dist/_chunks/workflow-map-gBhL_Wrs.js.map +1 -0
  229. package/dist/components/_shared/index.d.ts +2 -0
  230. package/dist/components/_shared/index.d.ts.map +1 -1
  231. package/dist/components/_shared/use-focus-trap.d.ts +32 -0
  232. package/dist/components/_shared/use-focus-trap.d.ts.map +1 -0
  233. package/dist/components/_shared/use-neutralize-hidden-focus.d.ts +3 -0
  234. package/dist/components/_shared/use-neutralize-hidden-focus.d.ts.map +1 -0
  235. package/dist/components/accordion/index.js +1 -1
  236. package/dist/components/agenda-card/index.js +1 -1
  237. package/dist/components/agenda-tray/index.js +1 -1
  238. package/dist/components/ai-prompt-input/index.js +1 -1
  239. package/dist/components/alert/index.js +1 -1
  240. package/dist/components/app-frame/index.js +1 -1
  241. package/dist/components/aspect-ratio/index.js +1 -1
  242. package/dist/components/audio-recorder/index.js +1 -1
  243. package/dist/components/audio-visualiser/index.js +1 -1
  244. package/dist/components/autocomplete/index.js +1 -1
  245. package/dist/components/avatar/index.js +1 -1
  246. package/dist/components/badge/index.js +1 -1
  247. package/dist/components/breadcrumb/index.js +1 -1
  248. package/dist/components/button/index.js +2 -2
  249. package/dist/components/button-group/index.js +1 -1
  250. package/dist/components/calendar/calendar.d.ts.map +1 -1
  251. package/dist/components/calendar/index.js +1 -1
  252. package/dist/components/card/index.js +1 -1
  253. package/dist/components/chart/chart.d.ts.map +1 -1
  254. package/dist/components/chart/index.js +1 -1
  255. package/dist/components/chat-container/index.js +1 -1
  256. package/dist/components/chat-input/index.js +1 -1
  257. package/dist/components/chat-message/index.js +1 -1
  258. package/dist/components/checkbox/index.js +1 -1
  259. package/dist/components/checkbox-group/index.js +1 -1
  260. package/dist/components/collapsible/index.js +1 -1
  261. package/dist/components/color-picker/index.js +1 -1
  262. package/dist/components/combobox/index.js +1 -1
  263. package/dist/components/command-palette/index.js +1 -1
  264. package/dist/components/data-table/index.js +1 -1
  265. package/dist/components/data-table/toolbar.d.ts.map +1 -1
  266. package/dist/components/date-picker/index.js +1 -1
  267. package/dist/components/date-range-picker/index.js +1 -1
  268. package/dist/components/date-time-picker/index.js +1 -1
  269. package/dist/components/description-list/index.js +1 -1
  270. package/dist/components/dialog/index.js +1 -1
  271. package/dist/components/dropdown-menu/index.js +1 -1
  272. package/dist/components/empty-state/index.js +1 -1
  273. package/dist/components/file-upload/index.js +1 -1
  274. package/dist/components/flag/index.js +1 -1
  275. package/dist/components/floating-action-button/index.js +1 -1
  276. package/dist/components/form-field/index.js +1 -1
  277. package/dist/components/freemium-paywall/index.js +1 -1
  278. package/dist/components/header/index.js +1 -1
  279. package/dist/components/icon-button/index.d.ts +3 -0
  280. package/dist/components/icon-button/index.d.ts.map +1 -0
  281. package/dist/components/icon-button/index.js +5 -0
  282. package/dist/components/icon-button/index.js.map +1 -0
  283. package/dist/components/icon-button-group/index.js +1 -1
  284. package/dist/components/index.d.ts +8 -2
  285. package/dist/components/index.d.ts.map +1 -1
  286. package/dist/components/kbd/index.js +1 -1
  287. package/dist/components/key-value-pair/index.js +1 -1
  288. package/dist/components/list/index.js +1 -1
  289. package/dist/components/live-region/index.d.ts +3 -0
  290. package/dist/components/live-region/index.d.ts.map +1 -0
  291. package/dist/components/live-region/index.js +5 -0
  292. package/dist/components/live-region/index.js.map +1 -0
  293. package/dist/components/live-region/live-region.d.ts +49 -0
  294. package/dist/components/live-region/live-region.d.ts.map +1 -0
  295. package/dist/components/logo/index.js +1 -1
  296. package/dist/components/matrix-rain/index.js +1 -1
  297. package/dist/components/message-card/index.js +1 -1
  298. package/dist/components/message-tray/index.js +1 -1
  299. package/dist/components/multi-select/index.js +1 -1
  300. package/dist/components/navigation-menu/index.d.ts +4 -2
  301. package/dist/components/navigation-menu/index.d.ts.map +1 -1
  302. package/dist/components/navigation-menu/index.js +3 -2
  303. package/dist/components/navigation-menu/index.js.map +1 -1
  304. package/dist/components/navigation-menu/navigation-menu.d.ts +2 -6
  305. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
  306. package/dist/components/notification-card/index.js +1 -1
  307. package/dist/components/notification-tray/index.js +1 -1
  308. package/dist/components/number-input/index.js +1 -1
  309. package/dist/components/otp-input/index.js +1 -1
  310. package/dist/components/pagination/index.js +1 -1
  311. package/dist/components/password-input/index.js +1 -1
  312. package/dist/components/payment-form/index.js +1 -1
  313. package/dist/components/pdf-viewer/index.js +1 -1
  314. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  315. package/dist/components/phone-input/index.js +1 -1
  316. package/dist/components/popover/index.js +1 -1
  317. package/dist/components/privacy-lock/index.js +1 -1
  318. package/dist/components/progress/index.js +1 -1
  319. package/dist/components/radio/index.d.ts +3 -0
  320. package/dist/components/radio/index.d.ts.map +1 -0
  321. package/dist/components/radio/index.js +5 -0
  322. package/dist/components/radio/index.js.map +1 -0
  323. package/dist/components/radio-group/index.js +4 -3
  324. package/dist/components/radio-group/index.js.map +1 -1
  325. package/dist/components/resizable/index.js +1 -1
  326. package/dist/components/rich-text-editor/index.js +1 -1
  327. package/dist/components/scroll-area/index.js +1 -1
  328. package/dist/components/search-bar/index.js +1 -1
  329. package/dist/components/search-input/index.js +1 -1
  330. package/dist/components/select/index.js +1 -1
  331. package/dist/components/separator/index.js +1 -1
  332. package/dist/components/sheet/index.js +1 -1
  333. package/dist/components/sidebar/index.js +1 -1
  334. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  335. package/dist/components/signature-capture/index.js +1 -1
  336. package/dist/components/skeleton/index.js +1 -1
  337. package/dist/components/skip-link/index.d.ts +2 -0
  338. package/dist/components/skip-link/index.d.ts.map +1 -0
  339. package/dist/components/skip-link/index.js +5 -0
  340. package/dist/components/skip-link/index.js.map +1 -0
  341. package/dist/components/skip-link/skip-link.d.ts +34 -0
  342. package/dist/components/skip-link/skip-link.d.ts.map +1 -0
  343. package/dist/components/slider/index.js +1 -1
  344. package/dist/components/slot-grid/index.js +1 -1
  345. package/dist/components/sparkline/index.js +1 -1
  346. package/dist/components/sparkline/sparkline.d.ts.map +1 -1
  347. package/dist/components/spinner/index.js +1 -1
  348. package/dist/components/stat/index.js +1 -1
  349. package/dist/components/stepper-accordion/index.js +1 -1
  350. package/dist/components/stepper-calendar/index.js +1 -1
  351. package/dist/components/stepper-progress/index.js +1 -1
  352. package/dist/components/streaming-text/index.js +1 -1
  353. package/dist/components/suggestion-chip/index.js +1 -1
  354. package/dist/components/switch/index.js +1 -1
  355. package/dist/components/tabs/index.js +1 -1
  356. package/dist/components/tag/index.js +1 -1
  357. package/dist/components/task-card/index.js +1 -1
  358. package/dist/components/task-tray/index.js +1 -1
  359. package/dist/components/text-area/index.js +1 -1
  360. package/dist/components/text-input/index.js +1 -1
  361. package/dist/components/theme-toggle/index.d.ts +3 -0
  362. package/dist/components/theme-toggle/index.d.ts.map +1 -0
  363. package/dist/components/theme-toggle/index.js +5 -0
  364. package/dist/components/theme-toggle/index.js.map +1 -0
  365. package/dist/components/theme-toggle/theme-toggle.d.ts +34 -0
  366. package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -0
  367. package/dist/components/time-picker/index.js +1 -1
  368. package/dist/components/timeline/index.js +1 -1
  369. package/dist/components/timestamp/index.js +1 -1
  370. package/dist/components/toast/index.js +1 -1
  371. package/dist/components/tooltip/index.js +1 -1
  372. package/dist/components/tooth-scheme/index.js +1 -1
  373. package/dist/components/transcript-panel/index.js +1 -1
  374. package/dist/components/typing-indicator/index.js +1 -1
  375. package/dist/components/visually-hidden/index.d.ts +2 -0
  376. package/dist/components/visually-hidden/index.d.ts.map +1 -0
  377. package/dist/components/visually-hidden/index.js +5 -0
  378. package/dist/components/visually-hidden/index.js.map +1 -0
  379. package/dist/components/visually-hidden/visually-hidden.d.ts +11 -0
  380. package/dist/components/visually-hidden/visually-hidden.d.ts.map +1 -0
  381. package/dist/components/warning-stack/index.js +1 -1
  382. package/dist/components/workflow/index.js +1 -1
  383. package/dist/hooks/index.d.ts +3 -0
  384. package/dist/hooks/index.d.ts.map +1 -1
  385. package/dist/hooks/index.js +10 -7
  386. package/dist/hooks/index.js.map +1 -1
  387. package/dist/hooks/use-locale.d.ts +27 -0
  388. package/dist/hooks/use-locale.d.ts.map +1 -0
  389. package/dist/hooks/use-media-query.d.ts +17 -0
  390. package/dist/hooks/use-media-query.d.ts.map +1 -0
  391. package/dist/i18n/config.js +59 -2
  392. package/dist/i18n/config.js.map +1 -1
  393. package/dist/i18n/resources.d.ts +57 -0
  394. package/dist/i18n/resources.d.ts.map +1 -1
  395. package/dist/index.js +442 -431
  396. package/dist/index.js.map +1 -1
  397. package/dist/locales/de.json +19 -0
  398. package/dist/locales/en.json +19 -0
  399. package/dist/locales/it.json +19 -0
  400. package/dist/patterns/leo-assistant/index.js +1 -1
  401. package/dist/patterns/patient-shell/index.js +1 -1
  402. package/dist/tokens.css +2 -2
  403. package/package.json +4 -2
  404. package/dist/_chunks/accordion-Dgcd38U_.js +0 -117
  405. package/dist/_chunks/accordion-Dgcd38U_.js.map +0 -1
  406. package/dist/_chunks/agenda-card-B2gq-gTq.js +0 -130
  407. package/dist/_chunks/agenda-card-B2gq-gTq.js.map +0 -1
  408. package/dist/_chunks/agenda-tray-twa8g_87.js +0 -119
  409. package/dist/_chunks/agenda-tray-twa8g_87.js.map +0 -1
  410. package/dist/_chunks/ai-prompt-input-C6IY_Eds.js +0 -379
  411. package/dist/_chunks/ai-prompt-input-C6IY_Eds.js.map +0 -1
  412. package/dist/_chunks/alert-C5ud6CfE.js.map +0 -1
  413. package/dist/_chunks/apexcharts-theme-cpBYmCcr.js +0 -17
  414. package/dist/_chunks/apexcharts-theme-cpBYmCcr.js.map +0 -1
  415. package/dist/_chunks/app-frame-CmIUp9BD.js.map +0 -1
  416. package/dist/_chunks/aspect-ratio-Bo3cZXmR.js +0 -56
  417. package/dist/_chunks/aspect-ratio-Bo3cZXmR.js.map +0 -1
  418. package/dist/_chunks/audio-recorder-GkGNtW2X.js.map +0 -1
  419. package/dist/_chunks/audio-visualiser-CIO3yy23.js.map +0 -1
  420. package/dist/_chunks/autocomplete.agent-kb0nmr6F.js.map +0 -1
  421. package/dist/_chunks/avatar-BsV7vRA6.js.map +0 -1
  422. package/dist/_chunks/badge--CmSr7ok.js +0 -104
  423. package/dist/_chunks/badge--CmSr7ok.js.map +0 -1
  424. package/dist/_chunks/balance-cell-renderer-BQwN51rT.js.map +0 -1
  425. package/dist/_chunks/breadcrumb-DnO6eHSS.js.map +0 -1
  426. package/dist/_chunks/button-CXL8bA8G.js +0 -119
  427. package/dist/_chunks/button-CXL8bA8G.js.map +0 -1
  428. package/dist/_chunks/button-group-CI7LFxt3.js.map +0 -1
  429. package/dist/_chunks/calendar-BIXVzhkL.js.map +0 -1
  430. package/dist/_chunks/card-n97MNPP2.js +0 -158
  431. package/dist/_chunks/card-n97MNPP2.js.map +0 -1
  432. package/dist/_chunks/chart.agent-DkmVXNsI.js.map +0 -1
  433. package/dist/_chunks/chat-container-SR3UWxbL.js +0 -174
  434. package/dist/_chunks/chat-container-SR3UWxbL.js.map +0 -1
  435. package/dist/_chunks/chat-input-aphxDjZL.js.map +0 -1
  436. package/dist/_chunks/chat-message-CdJSD18D.js.map +0 -1
  437. package/dist/_chunks/checkbox-CfiZ0FZc.js +0 -116
  438. package/dist/_chunks/checkbox-CfiZ0FZc.js.map +0 -1
  439. package/dist/_chunks/checkbox-group-D1aqVI0-.js.map +0 -1
  440. package/dist/_chunks/collapsible-jBFm7Ah8.js.map +0 -1
  441. package/dist/_chunks/color-picker-CiotzQJF.js.map +0 -1
  442. package/dist/_chunks/combobox.agent-B6RwDSct.js.map +0 -1
  443. package/dist/_chunks/command-palette.agent-B87_OkmC.js.map +0 -1
  444. package/dist/_chunks/date-time-picker-CX_FMsLG.js.map +0 -1
  445. package/dist/_chunks/description-list-C5UPZgX6.js +0 -187
  446. package/dist/_chunks/description-list-C5UPZgX6.js.map +0 -1
  447. package/dist/_chunks/dialog.agent-B276rAQF.js.map +0 -1
  448. package/dist/_chunks/dropdown-menu-CJKvK7VG.js +0 -210
  449. package/dist/_chunks/dropdown-menu-CJKvK7VG.js.map +0 -1
  450. package/dist/_chunks/empty-state-DiG7vYBM.js.map +0 -1
  451. package/dist/_chunks/file-upload.agent-BMow5yDY.js.map +0 -1
  452. package/dist/_chunks/floating-action-button-BM9ib-Wf.js +0 -95
  453. package/dist/_chunks/floating-action-button-BM9ib-Wf.js.map +0 -1
  454. package/dist/_chunks/form-field-B4bwrccN.js +0 -121
  455. package/dist/_chunks/form-field-B4bwrccN.js.map +0 -1
  456. package/dist/_chunks/freemium-paywall-DVyNsQHS.js +0 -197
  457. package/dist/_chunks/freemium-paywall-DVyNsQHS.js.map +0 -1
  458. package/dist/_chunks/header-BpKaSL_v.js.map +0 -1
  459. package/dist/_chunks/icon-button-C1vpylg3.js +0 -45
  460. package/dist/_chunks/icon-button-C1vpylg3.js.map +0 -1
  461. package/dist/_chunks/icon-button-group-tERESY-n.js.map +0 -1
  462. package/dist/_chunks/kbd-0iPlQjgC.js.map +0 -1
  463. package/dist/_chunks/key-value-pair--Je59tAF.js.map +0 -1
  464. package/dist/_chunks/leo-sidebar-9A9AWBxX.js +0 -755
  465. package/dist/_chunks/leo-sidebar-9A9AWBxX.js.map +0 -1
  466. package/dist/_chunks/list-n8vI8Yvn.js.map +0 -1
  467. package/dist/_chunks/logo-UNWYb9p7.js.map +0 -1
  468. package/dist/_chunks/matrix-rain-Q7xTEpKu.js.map +0 -1
  469. package/dist/_chunks/message-card-g5VS5Q80.js +0 -275
  470. package/dist/_chunks/message-card-g5VS5Q80.js.map +0 -1
  471. package/dist/_chunks/message-tray-CAk-iibU.js +0 -302
  472. package/dist/_chunks/message-tray-CAk-iibU.js.map +0 -1
  473. package/dist/_chunks/multi-select.agent-Cf4pU636.js.map +0 -1
  474. package/dist/_chunks/navigation-menu-DBDsAmXc.js.map +0 -1
  475. package/dist/_chunks/notification-card-CQxJporb.js +0 -255
  476. package/dist/_chunks/notification-card-CQxJporb.js.map +0 -1
  477. package/dist/_chunks/notification-tray-CNWPuPZp.js.map +0 -1
  478. package/dist/_chunks/number-input-B1Th0DdC.js.map +0 -1
  479. package/dist/_chunks/otp-input-CmoBuZ4K.js.map +0 -1
  480. package/dist/_chunks/pagination.agent-B5KLDCMN.js.map +0 -1
  481. package/dist/_chunks/password-input-DnjNh-hQ.js.map +0 -1
  482. package/dist/_chunks/payment-form-Cf7U6r5L.js.map +0 -1
  483. package/dist/_chunks/pdf-viewer.agent-DXjgDItg.js.map +0 -1
  484. package/dist/_chunks/phone-input-C2dtIuxW.js.map +0 -1
  485. package/dist/_chunks/popover-D1woU9mP.js.map +0 -1
  486. package/dist/_chunks/privacy-lock-C1X42Sit.js.map +0 -1
  487. package/dist/_chunks/progress-DL3-izuO.js.map +0 -1
  488. package/dist/_chunks/radio-group-CXN9qNPe.js +0 -185
  489. package/dist/_chunks/radio-group-CXN9qNPe.js.map +0 -1
  490. package/dist/_chunks/resizable.agent-DVk_jJur.js.map +0 -1
  491. package/dist/_chunks/rich-text-editor.agent-BOjF4Xao.js.map +0 -1
  492. package/dist/_chunks/scroll-area-DXn-YWHY.js +0 -144
  493. package/dist/_chunks/scroll-area-DXn-YWHY.js.map +0 -1
  494. package/dist/_chunks/search-bar-DgSOAajC.js.map +0 -1
  495. package/dist/_chunks/search-input-D4tC_Prn.js +0 -197
  496. package/dist/_chunks/search-input-D4tC_Prn.js.map +0 -1
  497. package/dist/_chunks/select-B4m4upMg.js +0 -320
  498. package/dist/_chunks/select-B4m4upMg.js.map +0 -1
  499. package/dist/_chunks/separator-DExI4amU.js.map +0 -1
  500. package/dist/_chunks/sheet-D6XOx0fK.js +0 -188
  501. package/dist/_chunks/sheet-D6XOx0fK.js.map +0 -1
  502. package/dist/_chunks/sidebar-r645O-k9.js +0 -1076
  503. package/dist/_chunks/sidebar-r645O-k9.js.map +0 -1
  504. package/dist/_chunks/signature-capture.agent-L_1_-zVR.js.map +0 -1
  505. package/dist/_chunks/skeleton-vbTWUntB.js +0 -95
  506. package/dist/_chunks/skeleton-vbTWUntB.js.map +0 -1
  507. package/dist/_chunks/slider-B3DBwmcm.js +0 -273
  508. package/dist/_chunks/slider-B3DBwmcm.js.map +0 -1
  509. package/dist/_chunks/slot-grid-DL_Tuj0p.js +0 -491
  510. package/dist/_chunks/slot-grid-DL_Tuj0p.js.map +0 -1
  511. package/dist/_chunks/sparkline.agent-BDTXzTy9.js.map +0 -1
  512. package/dist/_chunks/spinner-77xUGpuX.js.map +0 -1
  513. package/dist/_chunks/stat-CrumvZWf.js +0 -208
  514. package/dist/_chunks/stat-CrumvZWf.js.map +0 -1
  515. package/dist/_chunks/stepper-accordion-BkvqQWPI.js.map +0 -1
  516. package/dist/_chunks/stepper-calendar-BQMjrwzo.js.map +0 -1
  517. package/dist/_chunks/stepper-progress-Bwfl-0rV.js +0 -128
  518. package/dist/_chunks/stepper-progress-Bwfl-0rV.js.map +0 -1
  519. package/dist/_chunks/streaming-text-Cu9YQe_1.js +0 -104
  520. package/dist/_chunks/streaming-text-Cu9YQe_1.js.map +0 -1
  521. package/dist/_chunks/suggestion-chip-XkxDJiPW.js +0 -157
  522. package/dist/_chunks/suggestion-chip-XkxDJiPW.js.map +0 -1
  523. package/dist/_chunks/switch-DyC0ThNT.js +0 -137
  524. package/dist/_chunks/switch-DyC0ThNT.js.map +0 -1
  525. package/dist/_chunks/tabs.agent-FsGU3sZL.js.map +0 -1
  526. package/dist/_chunks/tag-BucAvfTX.js +0 -194
  527. package/dist/_chunks/tag-BucAvfTX.js.map +0 -1
  528. package/dist/_chunks/task-card-uxjApfcg.js +0 -112
  529. package/dist/_chunks/task-card-uxjApfcg.js.map +0 -1
  530. package/dist/_chunks/task-tray-BdfM3p8N.js +0 -99
  531. package/dist/_chunks/task-tray-BdfM3p8N.js.map +0 -1
  532. package/dist/_chunks/text-area-CKxZ7cS3.js +0 -152
  533. package/dist/_chunks/text-area-CKxZ7cS3.js.map +0 -1
  534. package/dist/_chunks/text-input-D16CcMlL.js +0 -187
  535. package/dist/_chunks/text-input-D16CcMlL.js.map +0 -1
  536. package/dist/_chunks/time-picker-BapZq0OY.js.map +0 -1
  537. package/dist/_chunks/timeline-D3VOf4RT.js +0 -219
  538. package/dist/_chunks/timeline-D3VOf4RT.js.map +0 -1
  539. package/dist/_chunks/timestamp-BLM-jjdw.js.map +0 -1
  540. package/dist/_chunks/tooltip-DF6WjD1r.js.map +0 -1
  541. package/dist/_chunks/tooth-scheme.agent-CFKl3iQr.js.map +0 -1
  542. package/dist/_chunks/transcript-panel-aI14fHYA.js +0 -265
  543. package/dist/_chunks/transcript-panel-aI14fHYA.js.map +0 -1
  544. package/dist/_chunks/typing-indicator-BTVDEpnd.js +0 -81
  545. package/dist/_chunks/typing-indicator-BTVDEpnd.js.map +0 -1
  546. package/dist/_chunks/warning-stack-Cyf_81SL.js.map +0 -1
  547. package/dist/_chunks/workflow-map-Uf-hHAO3.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { jsxs as d, jsx as s } from "react/jsx-runtime";
1
+ import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
2
  import { forwardRef as M, useState as w, useCallback as t } from "react";
3
3
  import { c as f } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as F } from "react-i18next";
5
- import { T as H } from "./text-input-D16CcMlL.js";
5
+ import { T as H } from "./text-input-lh6kRXZS.js";
6
6
  import { u as _ } from "./form-field-context-94LwgYTQ.js";
7
7
  import { E as O } from "./eye-off-xEXDAh5z.js";
8
8
  import { c as $ } from "./createLucideIcon-CrFbzy84.js";
@@ -28,32 +28,32 @@ const B = [
28
28
  lg: "size-5"
29
29
  }, Q = f(
30
30
  [
31
- "absolute inset-y-0 end-0 ps-2 pe-3",
32
- "inline-flex items-center justify-center",
33
- "text-muted-foreground hover:text-foreground",
34
- "bg-transparent border-0 cursor-pointer",
35
- "rounded-[var(--radius-sm)]",
36
- "min-w-[var(--min-target-size)]",
37
- "transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none",
38
- "focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid",
39
- "focus-visible:outline-ring focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
40
- "forced-colors:focus-visible:outline-[CanvasText]",
41
- "disabled:cursor-not-allowed disabled:opacity-50"
31
+ "ds:absolute ds:inset-y-0 ds:end-0 ds:ps-2 ds:pe-3",
32
+ "ds:inline-flex ds:items-center ds:justify-center",
33
+ "ds:text-muted-foreground ds:hover:text-foreground",
34
+ "ds:bg-transparent ds:border-0 ds:cursor-pointer",
35
+ "ds:rounded-[var(--radius-sm)]",
36
+ "ds:min-w-[var(--min-target-size)]",
37
+ "ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none",
38
+ "ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid",
39
+ "ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
40
+ "ds:forced-colors:focus-visible:outline-[CanvasText]",
41
+ "ds:disabled:cursor-not-allowed ds:disabled:opacity-50"
42
42
  ].join(" ")
43
43
  ), W = f(
44
- "h-1 w-full overflow-hidden rounded-[var(--radius-full)] bg-muted"
44
+ "ds:h-1 ds:w-full ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-muted"
45
45
  ), X = f(
46
46
  [
47
- "h-full rounded-[var(--radius-full)]",
48
- "transition-all duration-[var(--animation-duration)] motion-reduce:transition-none"
47
+ "ds:h-full ds:rounded-[var(--radius-full)]",
48
+ "ds:transition-all ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none"
49
49
  ].join(" "),
50
50
  {
51
51
  variants: {
52
52
  level: {
53
- 0: "w-1/4 bg-destructive",
54
- 1: "w-1/2 bg-warning",
55
- 2: "w-3/4 bg-success",
56
- 3: "w-full bg-success"
53
+ 0: "ds:w-1/4 ds:bg-destructive",
54
+ 1: "ds:w-1/2 ds:bg-warning",
55
+ 2: "ds:w-3/4 ds:bg-success",
56
+ 3: "ds:w-full ds:bg-success"
57
57
  }
58
58
  },
59
59
  defaultVariants: { level: 0 }
@@ -65,54 +65,54 @@ const B = [
65
65
  3: "strong"
66
66
  }, Z = M(
67
67
  ({
68
- onRevealChange: i,
68
+ onRevealChange: d,
69
69
  showStrength: N = !1,
70
70
  strength: u = 0,
71
71
  autoComplete: k,
72
72
  size: m = "md",
73
73
  disabled: y,
74
74
  name: z,
75
- onKeyDown: r,
76
- onKeyUp: o,
77
- onBlur: n,
75
+ onKeyDown: i,
76
+ onKeyUp: r,
77
+ onBlur: o,
78
78
  className: L,
79
79
  ...C
80
80
  }, T) => {
81
- const { t: l } = F(), g = _().disabled || y, [a, S] = w(!1), [j, v] = w(!1), I = t(() => {
82
- S((e) => {
83
- const x = !e;
84
- return i == null || i(x), x;
81
+ const { t: n } = F(), g = _().disabled || y, [a, S] = w(!1), [j, v] = w(!1), I = t(() => {
82
+ S((s) => {
83
+ const x = !s;
84
+ return d == null || d(x), x;
85
85
  });
86
- }, [i]), c = t(
87
- (e) => {
88
- typeof e.getModifierState == "function" && v(e.getModifierState("CapsLock"));
86
+ }, [d]), l = t(
87
+ (s) => {
88
+ typeof s.getModifierState == "function" && v(s.getModifierState("CapsLock"));
89
89
  },
90
90
  []
91
91
  ), P = t(
92
- (e) => {
93
- c(e), r == null || r(e);
92
+ (s) => {
93
+ l(s), i == null || i(s);
94
94
  },
95
- [c, r]
95
+ [l, i]
96
96
  ), V = t(
97
- (e) => {
98
- c(e), o == null || o(e);
97
+ (s) => {
98
+ l(s), r == null || r(s);
99
99
  },
100
- [c, o]
100
+ [l, r]
101
101
  ), A = t(
102
- (e) => {
103
- v(!1), n == null || n(e);
102
+ (s) => {
103
+ v(!1), o == null || o(s);
104
104
  },
105
- [n]
106
- ), b = J[m], E = l(
105
+ [o]
106
+ ), b = J[m], E = n(
107
107
  a ? "ui.inputs.password.toggleHide" : "ui.inputs.password.toggleShow",
108
108
  a ? "Hide password" : "Show password"
109
- ), p = Y[u], h = l(
109
+ ), p = Y[u], h = n(
110
110
  `ui.inputs.password.strength.${p}`,
111
111
  p.charAt(0).toUpperCase() + p.slice(1)
112
112
  );
113
- return /* @__PURE__ */ d("div", { className: "flex flex-col gap-[var(--spacing-xs)]", children: [
114
- /* @__PURE__ */ d("div", { className: "relative", children: [
115
- /* @__PURE__ */ s(
113
+ return /* @__PURE__ */ c("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
114
+ /* @__PURE__ */ c("div", { className: "ds:relative", children: [
115
+ /* @__PURE__ */ e(
116
116
  H,
117
117
  {
118
118
  ref: T,
@@ -127,12 +127,12 @@ const B = [
127
127
  onKeyDown: P,
128
128
  onKeyUp: V,
129
129
  onBlur: A,
130
- endAdornment: /* @__PURE__ */ s("span", { "aria-hidden": "true", className: "block size-4" }),
130
+ endAdornment: /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "ds:block ds:size-4" }),
131
131
  className: L,
132
132
  ...C
133
133
  }
134
134
  ),
135
- /* @__PURE__ */ s(
135
+ /* @__PURE__ */ e(
136
136
  "button",
137
137
  {
138
138
  type: "button",
@@ -141,44 +141,44 @@ const B = [
141
141
  disabled: g,
142
142
  onClick: I,
143
143
  className: Q(),
144
- children: a ? /* @__PURE__ */ s(O, { "aria-hidden": "true", className: b }) : /* @__PURE__ */ s(G, { "aria-hidden": "true", className: b })
144
+ children: a ? /* @__PURE__ */ e(O, { "aria-hidden": "true", className: b }) : /* @__PURE__ */ e(G, { "aria-hidden": "true", className: b })
145
145
  }
146
146
  )
147
147
  ] }),
148
- j ? /* @__PURE__ */ d(
148
+ j ? /* @__PURE__ */ c(
149
149
  "span",
150
150
  {
151
151
  role: "status",
152
152
  "aria-live": "polite",
153
- className: "inline-flex items-center gap-[var(--spacing-xs)] type-meta text-warning",
153
+ className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-meta ds:text-warning",
154
154
  children: [
155
- /* @__PURE__ */ s(q, { "aria-hidden": "true", className: "size-3.5" }),
156
- l("ui.inputs.password.capsLock", "Caps Lock is on")
155
+ /* @__PURE__ */ e(q, { "aria-hidden": "true", className: "ds:size-3.5" }),
156
+ n("ui.inputs.password.capsLock", "Caps Lock is on")
157
157
  ]
158
158
  }
159
159
  ) : null,
160
- N ? /* @__PURE__ */ d("div", { className: "flex flex-col gap-[var(--spacing-xs)]", children: [
161
- /* @__PURE__ */ s(
160
+ N ? /* @__PURE__ */ c("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
161
+ /* @__PURE__ */ e(
162
162
  "div",
163
163
  {
164
164
  role: "progressbar",
165
165
  "aria-valuenow": u,
166
166
  "aria-valuemin": 0,
167
167
  "aria-valuemax": 3,
168
- "aria-label": l(
168
+ "aria-label": n(
169
169
  "ui.inputs.password.strengthLabel",
170
170
  "Password strength"
171
171
  ),
172
172
  "aria-valuetext": h,
173
173
  className: W(),
174
- children: /* @__PURE__ */ s("div", { className: X({ level: u }) })
174
+ children: /* @__PURE__ */ e("div", { className: X({ level: u }) })
175
175
  }
176
176
  ),
177
- /* @__PURE__ */ s(
177
+ /* @__PURE__ */ e(
178
178
  "span",
179
179
  {
180
180
  "aria-hidden": "true",
181
- className: "type-meta text-muted-foreground",
181
+ className: "type-meta ds:text-muted-foreground",
182
182
  children: h
183
183
  }
184
184
  )
@@ -190,4 +190,4 @@ Z.displayName = "PasswordInput";
190
190
  export {
191
191
  Z as P
192
192
  };
193
- //# sourceMappingURL=password-input-DnjNh-hQ.js.map
193
+ //# sourceMappingURL=password-input-C6PvKyQV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-input-C6PvKyQV.js","sources":["../../node_modules/lucide-react/dist/esm/icons/eye.js","../../src/components/password-input/password-input.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","import {\n forwardRef,\n useCallback,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { AlertTriangle, Eye, EyeOff } from 'lucide-react';\nimport { TextInput, type TextInputProps } from '../text-input';\nimport { useFormField } from '../form-field/form-field-context';\n\ntype Strength = 0 | 1 | 2 | 3;\n\ntype SizeKey = NonNullable<TextInputProps['size']>;\n\nconst iconSizeClassBySize: Record<SizeKey, string> = {\n sm: 'size-4',\n md: 'size-[18px]',\n lg: 'size-5',\n};\n\nconst toggleVariants = cva(\n [\n 'ds:absolute ds:inset-y-0 ds:end-0 ds:ps-2 ds:pe-3',\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:bg-transparent ds:border-0 ds:cursor-pointer',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:min-w-[var(--min-target-size)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n ].join(' '),\n);\n\nconst strengthTrackVariants = cva(\n 'ds:h-1 ds:w-full ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-muted',\n);\n\nconst strengthBarVariants = cva(\n [\n 'ds:h-full ds:rounded-[var(--radius-full)]',\n 'ds:transition-all ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n level: {\n 0: 'ds:w-1/4 ds:bg-destructive',\n 1: 'ds:w-1/2 ds:bg-warning',\n 2: 'ds:w-3/4 ds:bg-success',\n 3: 'ds:w-full ds:bg-success',\n },\n },\n defaultVariants: { level: 0 },\n },\n);\n\nconst strengthLabelByLevel: Record<Strength, 'weak' | 'fair' | 'good' | 'strong'> = {\n 0: 'weak',\n 1: 'fair',\n 2: 'good',\n 3: 'strong',\n};\n\nexport interface PasswordInputProps\n extends Omit<TextInputProps, 'type' | 'endAdornment' | 'startAdornment'>,\n VariantProps<typeof strengthBarVariants> {\n /** Callback when reveal state changes (for analytics). */\n onRevealChange?: (revealed: boolean) => void;\n /** Show the strength meter below the input. */\n showStrength?: boolean;\n /** Strength score: 0 = weak, 1 = fair, 2 = good, 3 = strong. */\n strength?: Strength;\n /**\n * Autocomplete hint. Defaults to 'current-password'.\n * Use 'new-password' for registration/change-password forms.\n */\n autoComplete?: 'current-password' | 'new-password' | (string & {});\n}\n\nexport const PasswordInput = forwardRef<HTMLInputElement, PasswordInputProps>(\n (\n {\n onRevealChange,\n showStrength = false,\n strength = 0,\n autoComplete,\n size = 'md',\n disabled,\n name,\n onKeyDown,\n onKeyUp,\n onBlur,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const ctx = useFormField();\n const effectiveDisabled = ctx.disabled || disabled;\n\n const [revealed, setRevealed] = useState(false);\n const [capsLock, setCapsLock] = useState(false);\n\n const handleToggle = useCallback(() => {\n setRevealed((prev) => {\n const next = !prev;\n onRevealChange?.(next);\n return next;\n });\n }, [onRevealChange]);\n\n const detectCaps = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (typeof event.getModifierState === 'function') {\n setCapsLock(event.getModifierState('CapsLock'));\n }\n },\n [],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n detectCaps(event);\n onKeyDown?.(event);\n },\n [detectCaps, onKeyDown],\n );\n\n const handleKeyUp = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n detectCaps(event);\n onKeyUp?.(event);\n },\n [detectCaps, onKeyUp],\n );\n\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n setCapsLock(false);\n onBlur?.(event);\n },\n [onBlur],\n );\n\n const iconSizeClass = iconSizeClassBySize[size];\n const toggleLabel = t(\n revealed ? 'ui.inputs.password.toggleHide' : 'ui.inputs.password.toggleShow',\n revealed ? 'Hide password' : 'Show password',\n );\n\n const strengthKey = strengthLabelByLevel[strength];\n const strengthText = t(\n `ui.inputs.password.strength.${strengthKey}`,\n strengthKey.charAt(0).toUpperCase() + strengthKey.slice(1),\n );\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div className=\"ds:relative\">\n <TextInput\n ref={ref}\n type={revealed ? 'text' : 'password'}\n autoComplete={autoComplete ?? 'current-password'}\n name={name ?? 'password'}\n spellCheck={false}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n size={size}\n disabled={effectiveDisabled}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onBlur={handleBlur}\n endAdornment={<span aria-hidden=\"true\" className=\"ds:block ds:size-4\" />}\n className={className}\n {...rest}\n />\n <button\n type=\"button\"\n aria-pressed={revealed}\n aria-label={toggleLabel}\n disabled={effectiveDisabled}\n onClick={handleToggle}\n className={toggleVariants()}\n >\n {revealed ? (\n <EyeOff aria-hidden=\"true\" className={iconSizeClass} />\n ) : (\n <Eye aria-hidden=\"true\" className={iconSizeClass} />\n )}\n </button>\n </div>\n\n {capsLock ? (\n <span\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-meta ds:text-warning\"\n >\n <AlertTriangle aria-hidden=\"true\" className=\"ds:size-3.5\" />\n {t('ui.inputs.password.capsLock', 'Caps Lock is on')}\n </span>\n ) : null}\n\n {showStrength ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div\n role=\"progressbar\"\n aria-valuenow={strength}\n aria-valuemin={0}\n aria-valuemax={3}\n aria-label={t(\n 'ui.inputs.password.strengthLabel',\n 'Password strength',\n )}\n aria-valuetext={strengthText}\n className={strengthTrackVariants()}\n >\n <div className={strengthBarVariants({ level: strength })} />\n </div>\n <span\n aria-hidden=\"true\"\n className=\"type-meta ds:text-muted-foreground\"\n >\n {strengthText}\n </span>\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nPasswordInput.displayName = 'PasswordInput';\n"],"names":["__iconNode","Eye","createLucideIcon","iconSizeClassBySize","toggleVariants","cva","strengthTrackVariants","strengthBarVariants","strengthLabelByLevel","PasswordInput","forwardRef","onRevealChange","showStrength","strength","autoComplete","size","disabled","name","onKeyDown","onKeyUp","onBlur","className","rest","ref","t","useTranslation","effectiveDisabled","useFormField","revealed","setRevealed","useState","capsLock","setCapsLock","handleToggle","useCallback","prev","next","detectCaps","event","handleKeyDown","handleKeyUp","handleBlur","iconSizeClass","toggleLabel","strengthKey","strengthText","jsxs","jsx","TextInput","EyeOff","AlertTriangle"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,14 +1,14 @@
1
1
  import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
2
  import { forwardRef as k, useState as w } from "react";
3
3
  import { useTranslation as c } from "react-i18next";
4
- import { A as y } from "./app-frame-CmIUp9BD.js";
5
- import { I } from "./icon-button-C1vpylg3.js";
6
- import { D as n } from "./dropdown-menu-CJKvK7VG.js";
7
- import { H as L, g as A, f as H, e as x, a as C, c as M, d as B } from "./header-BpKaSL_v.js";
8
- import { L as N } from "./logo-UNWYb9p7.js";
9
- import { S as T, a as _, h as O, j as P, k as W, i as j } from "./sidebar-r645O-k9.js";
4
+ import { A as y } from "./app-frame-uq2Gy0vs.js";
5
+ import { I } from "./icon-button-C482ii4y.js";
6
+ import { D as n } from "./dropdown-menu-BnVUeVG3.js";
7
+ import { H as L, g as A, f as H, e as x, a as C, c as M, d as B } from "./header-CW2oRd5H.js";
8
+ import { L as N } from "./logo-3wrZGpwg.js";
9
+ import { S as T, a as _, h as O, j as P, k as W, i as j } from "./sidebar-B52iGGNV.js";
10
10
  import { T as z } from "./theme-root-vapFjsnt.js";
11
- import { a as R } from "./tooltip-DF6WjD1r.js";
11
+ import { a as R } from "./tooltip-Dp3u8jGz.js";
12
12
  import { u as D } from "./use-theme-BMUhembX.js";
13
13
  import { c as h } from "./createLucideIcon-CrFbzy84.js";
14
14
  import { L as q } from "./log-out-616hnn2-.js";
@@ -136,7 +136,7 @@ const V = k(
136
136
  ref: g,
137
137
  theme: S,
138
138
  accessible: b,
139
- className: "contents",
139
+ className: "ds:contents",
140
140
  children: /* @__PURE__ */ e(R, { children: /* @__PURE__ */ e(
141
141
  y,
142
142
  {
@@ -190,4 +190,4 @@ V.displayName = "PatientShell";
190
190
  export {
191
191
  V as P
192
192
  };
193
- //# sourceMappingURL=patient-shell-D0RaWDMR.js.map
193
+ //# sourceMappingURL=patient-shell-CGsmI5LJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"patient-shell-D0RaWDMR.js","sources":["../../node_modules/lucide-react/dist/esm/icons/maximize-2.js","../../node_modules/lucide-react/dist/esm/icons/settings.js","../../src/patterns/patient-shell/patient-shell.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"m21 3-7 7\", key: \"1l2asr\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M9 21H3v-6\", key: \"wtvkvv\" }]\n];\nconst Maximize2 = createLucideIcon(\"maximize-2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * Patient Shell — the chrome for AlfaDocs's patient-facing users\n * (patients managing their own appointments and records).\n *\n * Deliberately flatter than the clinician `AppFrame` composition: no\n * command palette, no favourites, no practice/chain affordances, no\n * Leo, no privacy lock. Mirrors the legacy `_header.html.twig`\n * `app.user.type == 'patient'` branch and the `knp_menu_render('pcp')`\n * flat nav menu.\n *\n * Unlike most patterns in this folder, PatientShell exports a runtime\n * component because the consuming patient-portal app mounts it in\n * production — the exports are surfaced via `src/patterns/index.ts`\n * and included in the library bundle.\n */\nimport { forwardRef, useState, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LogOut, Maximize2, Settings as SettingsIcon } from 'lucide-react';\n\nimport { AppFrame } from '../../components/app-frame';\nimport { IconButton } from '../../components/button';\nimport { DropdownMenu } from '../../components/dropdown-menu';\nimport {\n Header,\n HeaderBrand,\n HeaderCenter,\n HeaderEnd,\n HeaderMenuButton,\n HeaderSkipLink,\n HeaderStart,\n} from '../../components/header';\nimport { Logo } from '../../components/logo';\nimport {\n Sidebar,\n SidebarBody,\n SidebarItem,\n SidebarItemBadge,\n SidebarItemIcon,\n SidebarItemLabel,\n type SidebarMode,\n} from '../../components/sidebar';\nimport { ThemeRoot } from '../../components/theme-root';\nimport { TooltipProvider } from '../../components/tooltip';\nimport { useTheme } from '../../hooks/use-theme';\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------ */\n\nexport interface PatientNavItem {\n id: string;\n /** Pre-translated label — patients' nav labels are emitted already\n * translated by the consuming app's backend (legacy `knp_menu`). */\n label: string;\n href: string;\n /** Optional leading icon. Pass a lucide-react or equivalent element. */\n icon?: ReactNode;\n /** Optional unseen-item count rendered as a pill badge. */\n badgeCount?: number;\n /** Mark the item as the current page (`aria-current='page'`). */\n isActive?: boolean;\n}\n\nexport interface PatientShellProps {\n /** Patient's display name. Used as the avatar fallback by consumers\n * that read the name through a slot; not rendered inside this shell\n * today because the legacy patient chrome carries no profile pill. */\n userName: string;\n /** Optional avatar URL. Reserved for future profile-pill surfaces;\n * no visible effect today. */\n userAvatarSrc?: string;\n /** Flat nav items rendered in the sidebar, in order. */\n menuItems: PatientNavItem[];\n /** URL the \"Logout\" action navigates to — typically `/logout`. */\n logoutHref: string;\n /** Fires when the user toggles fullscreen from the settings menu. */\n onToggleFullscreen?: () => void;\n /** Optional brand logo. Defaults to\n * `<Logo variant=\"monochrome\" size=\"md\" decorative />`. */\n brandLogo?: ReactNode;\n /** Link target for the brand — typically the patient dashboard. */\n brandHref?: string;\n /** Override the accessible name of the `<main>` landmark. */\n mainAriaLabel?: string;\n /**\n * Force the sidebar into a specific mode. Consuming apps typically\n * flip to `'overlay'` on narrow viewports and leave this undefined\n * elsewhere (the sidebar then defaults to `'expanded'`).\n */\n sidebarState?: SidebarMode;\n /** Children render inside the main content region. */\n children: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Internals */\n/* ------------------------------------------------------------------ */\n\nfunction formatBadgeCount(count: number): string {\n return count > 99 ? '99+' : String(count);\n}\n\n/**\n * Guard against `javascript:` and other non-navigation schemes before\n * handing the URL to `window.location.assign`. A consuming app that lets\n * attacker-controlled input reach `logoutHref` would otherwise execute\n * script. Allow only relative paths, hash fragments, and `http(s)` URLs.\n */\nfunction isSafeLogoutHref(href: string): boolean {\n if (href.startsWith('/') || href.startsWith('#') || href.startsWith('?')) {\n return true;\n }\n try {\n const url = new URL(href, window.location.origin);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nfunction SettingsMenu({\n logoutHref,\n onToggleFullscreen,\n}: {\n logoutHref: string;\n onToggleFullscreen?: () => void;\n}) {\n const { t } = useTranslation();\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n icon={<SettingsIcon aria-hidden=\"true\" />}\n aria-label={t('patientShell.settings.triggerAria')}\n tooltip={t('patientShell.settings.triggerAria')}\n data-testid=\"patient-shell-settings-trigger\"\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n <DropdownMenu.Item\n startIcon={<Maximize2 aria-hidden=\"true\" />}\n onSelect={onToggleFullscreen}\n data-testid=\"patient-shell-fullscreen\"\n >\n {t('patientShell.settings.fullscreen')}\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n startIcon={<LogOut aria-hidden=\"true\" />}\n onSelect={() => {\n if (typeof window === 'undefined') return;\n if (!isSafeLogoutHref(logoutHref)) return;\n window.location.assign(logoutHref);\n }}\n data-testid=\"patient-shell-logout\"\n >\n {t('patientShell.settings.logout')}\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n}\n\nfunction PatientSidebarNav({ menuItems }: { menuItems: PatientNavItem[] }) {\n return (\n <SidebarBody>\n {menuItems.map((item) => {\n const badge =\n typeof item.badgeCount === 'number' && item.badgeCount > 0\n ? item.badgeCount\n : undefined;\n return (\n <SidebarItem\n key={item.id}\n href={item.href}\n aria-label={item.label}\n isActive={item.isActive}\n >\n {item.icon ? <SidebarItemIcon>{item.icon}</SidebarItemIcon> : null}\n <SidebarItemLabel>{item.label}</SidebarItemLabel>\n {badge !== undefined ? (\n <SidebarItemBadge>{formatBadgeCount(badge)}</SidebarItemBadge>\n ) : null}\n </SidebarItem>\n );\n })}\n </SidebarBody>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const PatientShell = forwardRef<HTMLDivElement, PatientShellProps>(\n (\n {\n menuItems,\n logoutHref,\n onToggleFullscreen,\n brandLogo,\n brandHref = '/',\n mainAriaLabel,\n sidebarState,\n children,\n // `userName` and `userAvatarSrc` are declared on the public API\n // for forward-compatibility (future profile-pill work) — they are\n // intentionally unused today because the legacy patient chrome\n // carries no profile pill.\n userName: _userName,\n userAvatarSrc: _userAvatarSrc,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const { resolvedTheme } = useTheme();\n const themeBase = resolvedTheme.startsWith('dark') ? 'dark' : 'light';\n const themeAccessible = resolvedTheme.endsWith('-accessible');\n\n // Narrow-viewport overlay: `HeaderMenuButton` only renders below the\n // `md` breakpoint, and toggling opens the Sidebar's overlay Dialog.\n const [sidebarOpen, setSidebarOpen] = useState(false);\n\n const resolvedLogo = brandLogo ?? (\n <Logo variant=\"monochrome\" size=\"md\" decorative />\n );\n\n return (\n <ThemeRoot\n ref={ref}\n theme={themeBase}\n accessible={themeAccessible}\n className=\"contents\"\n >\n <TooltipProvider>\n <AppFrame\n mainAriaLabel={mainAriaLabel}\n header={\n <Header>\n <HeaderStart>\n <HeaderSkipLink href=\"#main-content\" />\n <HeaderMenuButton\n onMenuOpen={() => setSidebarOpen(true)}\n />\n <HeaderBrand\n logo={resolvedLogo}\n href={brandHref}\n aria-label={t('patientShell.brand.homeAria')}\n />\n </HeaderStart>\n <HeaderCenter />\n <HeaderEnd>\n <SettingsMenu\n logoutHref={logoutHref}\n onToggleFullscreen={onToggleFullscreen}\n />\n </HeaderEnd>\n </Header>\n }\n sidebar={\n <Sidebar\n {...(sidebarState !== undefined\n ? { state: sidebarState }\n : { defaultState: 'expanded' as const })}\n open={sidebarOpen}\n onOpenChange={setSidebarOpen}\n aria-label={t('patientShell.sidebar.panelLabel')}\n data-testid=\"patient-shell-sidebar\"\n >\n <PatientSidebarNav menuItems={menuItems} />\n </Sidebar>\n }\n >\n {children}\n </AppFrame>\n </TooltipProvider>\n </ThemeRoot>\n );\n },\n);\n\nPatientShell.displayName = 'PatientShell';\n"],"names":["__iconNode","Maximize2","createLucideIcon","Settings","formatBadgeCount","count","isSafeLogoutHref","href","url","SettingsMenu","logoutHref","onToggleFullscreen","t","useTranslation","jsxs","DropdownMenu","jsx","IconButton","SettingsIcon","LogOut","PatientSidebarNav","menuItems","SidebarBody","item","badge","SidebarItem","SidebarItemIcon","SidebarItemLabel","SidebarItemBadge","PatientShell","forwardRef","brandLogo","brandHref","mainAriaLabel","sidebarState","children","_userName","_userAvatarSrc","ref","resolvedTheme","useTheme","themeBase","themeAccessible","sidebarOpen","setSidebarOpen","useState","ThemeRoot","TooltipProvider","AppFrame","Header","HeaderStart","HeaderSkipLink","HeaderMenuButton","HeaderBrand","Logo","HeaderCenter","HeaderEnd","Sidebar"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"patient-shell-CGsmI5LJ.js","sources":["../../node_modules/lucide-react/dist/esm/icons/maximize-2.js","../../node_modules/lucide-react/dist/esm/icons/settings.js","../../src/patterns/patient-shell/patient-shell.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"m21 3-7 7\", key: \"1l2asr\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M9 21H3v-6\", key: \"wtvkvv\" }]\n];\nconst Maximize2 = createLucideIcon(\"maximize-2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * Patient Shell — the chrome for AlfaDocs's patient-facing users\n * (patients managing their own appointments and records).\n *\n * Deliberately flatter than the clinician `AppFrame` composition: no\n * command palette, no favourites, no practice/chain affordances, no\n * Leo, no privacy lock. Mirrors the legacy `_header.html.twig`\n * `app.user.type == 'patient'` branch and the `knp_menu_render('pcp')`\n * flat nav menu.\n *\n * Unlike most patterns in this folder, PatientShell exports a runtime\n * component because the consuming patient-portal app mounts it in\n * production — the exports are surfaced via `src/patterns/index.ts`\n * and included in the library bundle.\n */\nimport { forwardRef, useState, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LogOut, Maximize2, Settings as SettingsIcon } from 'lucide-react';\n\nimport { AppFrame } from '../../components/app-frame';\nimport { IconButton } from '../../components/button';\nimport { DropdownMenu } from '../../components/dropdown-menu';\nimport {\n Header,\n HeaderBrand,\n HeaderCenter,\n HeaderEnd,\n HeaderMenuButton,\n HeaderSkipLink,\n HeaderStart,\n} from '../../components/header';\nimport { Logo } from '../../components/logo';\nimport {\n Sidebar,\n SidebarBody,\n SidebarItem,\n SidebarItemBadge,\n SidebarItemIcon,\n SidebarItemLabel,\n type SidebarMode,\n} from '../../components/sidebar';\nimport { ThemeRoot } from '../../components/theme-root';\nimport { TooltipProvider } from '../../components/tooltip';\nimport { useTheme } from '../../hooks/use-theme';\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------ */\n\nexport interface PatientNavItem {\n id: string;\n /** Pre-translated label — patients' nav labels are emitted already\n * translated by the consuming app's backend (legacy `knp_menu`). */\n label: string;\n href: string;\n /** Optional leading icon. Pass a lucide-react or equivalent element. */\n icon?: ReactNode;\n /** Optional unseen-item count rendered as a pill badge. */\n badgeCount?: number;\n /** Mark the item as the current page (`aria-current='page'`). */\n isActive?: boolean;\n}\n\nexport interface PatientShellProps {\n /** Patient's display name. Used as the avatar fallback by consumers\n * that read the name through a slot; not rendered inside this shell\n * today because the legacy patient chrome carries no profile pill. */\n userName: string;\n /** Optional avatar URL. Reserved for future profile-pill surfaces;\n * no visible effect today. */\n userAvatarSrc?: string;\n /** Flat nav items rendered in the sidebar, in order. */\n menuItems: PatientNavItem[];\n /** URL the \"Logout\" action navigates to — typically `/logout`. */\n logoutHref: string;\n /** Fires when the user toggles fullscreen from the settings menu. */\n onToggleFullscreen?: () => void;\n /** Optional brand logo. Defaults to\n * `<Logo variant=\"monochrome\" size=\"md\" decorative />`. */\n brandLogo?: ReactNode;\n /** Link target for the brand — typically the patient dashboard. */\n brandHref?: string;\n /** Override the accessible name of the `<main>` landmark. */\n mainAriaLabel?: string;\n /**\n * Force the sidebar into a specific mode. Consuming apps typically\n * flip to `'overlay'` on narrow viewports and leave this undefined\n * elsewhere (the sidebar then defaults to `'expanded'`).\n */\n sidebarState?: SidebarMode;\n /** Children render inside the main content region. */\n children: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Internals */\n/* ------------------------------------------------------------------ */\n\nfunction formatBadgeCount(count: number): string {\n return count > 99 ? '99+' : String(count);\n}\n\n/**\n * Guard against `javascript:` and other non-navigation schemes before\n * handing the URL to `window.location.assign`. A consuming app that lets\n * attacker-controlled input reach `logoutHref` would otherwise execute\n * script. Allow only relative paths, hash fragments, and `http(s)` URLs.\n */\nfunction isSafeLogoutHref(href: string): boolean {\n if (href.startsWith('/') || href.startsWith('#') || href.startsWith('?')) {\n return true;\n }\n try {\n const url = new URL(href, window.location.origin);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nfunction SettingsMenu({\n logoutHref,\n onToggleFullscreen,\n}: {\n logoutHref: string;\n onToggleFullscreen?: () => void;\n}) {\n const { t } = useTranslation();\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n icon={<SettingsIcon aria-hidden=\"true\" />}\n aria-label={t('patientShell.settings.triggerAria')}\n tooltip={t('patientShell.settings.triggerAria')}\n data-testid=\"patient-shell-settings-trigger\"\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n <DropdownMenu.Item\n startIcon={<Maximize2 aria-hidden=\"true\" />}\n onSelect={onToggleFullscreen}\n data-testid=\"patient-shell-fullscreen\"\n >\n {t('patientShell.settings.fullscreen')}\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n startIcon={<LogOut aria-hidden=\"true\" />}\n onSelect={() => {\n if (typeof window === 'undefined') return;\n if (!isSafeLogoutHref(logoutHref)) return;\n window.location.assign(logoutHref);\n }}\n data-testid=\"patient-shell-logout\"\n >\n {t('patientShell.settings.logout')}\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n}\n\nfunction PatientSidebarNav({ menuItems }: { menuItems: PatientNavItem[] }) {\n return (\n <SidebarBody>\n {menuItems.map((item) => {\n const badge =\n typeof item.badgeCount === 'number' && item.badgeCount > 0\n ? item.badgeCount\n : undefined;\n return (\n <SidebarItem\n key={item.id}\n href={item.href}\n aria-label={item.label}\n isActive={item.isActive}\n >\n {item.icon ? <SidebarItemIcon>{item.icon}</SidebarItemIcon> : null}\n <SidebarItemLabel>{item.label}</SidebarItemLabel>\n {badge !== undefined ? (\n <SidebarItemBadge>{formatBadgeCount(badge)}</SidebarItemBadge>\n ) : null}\n </SidebarItem>\n );\n })}\n </SidebarBody>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const PatientShell = forwardRef<HTMLDivElement, PatientShellProps>(\n (\n {\n menuItems,\n logoutHref,\n onToggleFullscreen,\n brandLogo,\n brandHref = '/',\n mainAriaLabel,\n sidebarState,\n children,\n // `userName` and `userAvatarSrc` are declared on the public API\n // for forward-compatibility (future profile-pill work) — they are\n // intentionally unused today because the legacy patient chrome\n // carries no profile pill.\n userName: _userName,\n userAvatarSrc: _userAvatarSrc,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const { resolvedTheme } = useTheme();\n const themeBase = resolvedTheme.startsWith('dark') ? 'dark' : 'light';\n const themeAccessible = resolvedTheme.endsWith('-accessible');\n\n // Narrow-viewport overlay: `HeaderMenuButton` only renders below the\n // `md` breakpoint, and toggling opens the Sidebar's overlay Dialog.\n const [sidebarOpen, setSidebarOpen] = useState(false);\n\n const resolvedLogo = brandLogo ?? (\n <Logo variant=\"monochrome\" size=\"md\" decorative />\n );\n\n return (\n <ThemeRoot\n ref={ref}\n theme={themeBase}\n accessible={themeAccessible}\n className=\"ds:contents\"\n >\n <TooltipProvider>\n <AppFrame\n mainAriaLabel={mainAriaLabel}\n header={\n <Header>\n <HeaderStart>\n <HeaderSkipLink href=\"#main-content\" />\n <HeaderMenuButton\n onMenuOpen={() => setSidebarOpen(true)}\n />\n <HeaderBrand\n logo={resolvedLogo}\n href={brandHref}\n aria-label={t('patientShell.brand.homeAria')}\n />\n </HeaderStart>\n <HeaderCenter />\n <HeaderEnd>\n <SettingsMenu\n logoutHref={logoutHref}\n onToggleFullscreen={onToggleFullscreen}\n />\n </HeaderEnd>\n </Header>\n }\n sidebar={\n <Sidebar\n {...(sidebarState !== undefined\n ? { state: sidebarState }\n : { defaultState: 'expanded' as const })}\n open={sidebarOpen}\n onOpenChange={setSidebarOpen}\n aria-label={t('patientShell.sidebar.panelLabel')}\n data-testid=\"patient-shell-sidebar\"\n >\n <PatientSidebarNav menuItems={menuItems} />\n </Sidebar>\n }\n >\n {children}\n </AppFrame>\n </TooltipProvider>\n </ThemeRoot>\n );\n },\n);\n\nPatientShell.displayName = 'PatientShell';\n"],"names":["__iconNode","Maximize2","createLucideIcon","Settings","formatBadgeCount","count","isSafeLogoutHref","href","url","SettingsMenu","logoutHref","onToggleFullscreen","t","useTranslation","jsxs","DropdownMenu","jsx","IconButton","SettingsIcon","LogOut","PatientSidebarNav","menuItems","SidebarBody","item","badge","SidebarItem","SidebarItemIcon","SidebarItemLabel","SidebarItemBadge","PatientShell","forwardRef","brandLogo","brandHref","mainAriaLabel","sidebarState","children","_userName","_userAvatarSrc","ref","resolvedTheme","useTheme","themeBase","themeAccessible","sidebarOpen","setSidebarOpen","useState","ThemeRoot","TooltipProvider","AppFrame","Header","HeaderStart","HeaderSkipLink","HeaderMenuButton","HeaderBrand","Logo","HeaderCenter","HeaderEnd","Sidebar"],"mappings":"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","x_google_ignoreList":[0,1]}