@alfadocs/ui-kit-debug 1.95.1 → 1.96.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 (316) hide show
  1. package/dist/_chunks/{anamnesis-card-BcadMmEM.js → anamnesis-card-BzuluoD1.js} +2 -2
  2. package/dist/_chunks/{anamnesis-card-BcadMmEM.js.map → anamnesis-card-BzuluoD1.js.map} +1 -1
  3. package/dist/_chunks/{anamnesis-summary-card-DQ3iE1gD.js → anamnesis-summary-card-DdTRdNrQ.js} +2 -2
  4. package/dist/_chunks/{anamnesis-summary-card-DQ3iE1gD.js.map → anamnesis-summary-card-DdTRdNrQ.js.map} +1 -1
  5. package/dist/_chunks/{anamnesis-summary-rows-krsCC-F4.js → anamnesis-summary-rows-CdRUXoaA.js} +3 -3
  6. package/dist/_chunks/{anamnesis-summary-rows-krsCC-F4.js.map → anamnesis-summary-rows-CdRUXoaA.js.map} +1 -1
  7. package/dist/_chunks/{antenatal-schedule-timeline-BGewPfEX.js → antenatal-schedule-timeline-DmsY5g28.js} +2 -2
  8. package/dist/_chunks/{antenatal-schedule-timeline-BGewPfEX.js.map → antenatal-schedule-timeline-DmsY5g28.js.map} +1 -1
  9. package/dist/_chunks/{balance-badge-cell-DbgEQsou.js → balance-badge-cell-DcBmtijD.js} +2 -2
  10. package/dist/_chunks/{balance-badge-cell-DbgEQsou.js.map → balance-badge-cell-DcBmtijD.js.map} +1 -1
  11. package/dist/_chunks/{bishop-score-BBYuyk2k.js → bishop-score-BhMomGcX.js} +2 -2
  12. package/dist/_chunks/{bishop-score-BBYuyk2k.js.map → bishop-score-BhMomGcX.js.map} +1 -1
  13. package/dist/_chunks/{bmi-calculator-BIExHBZV.js → bmi-calculator-NMkXc079.js} +2 -2
  14. package/dist/_chunks/{bmi-calculator-BIExHBZV.js.map → bmi-calculator-NMkXc079.js.map} +1 -1
  15. package/dist/_chunks/{calendar-appointment-editor-dialog-D3tQ8N34.js → calendar-appointment-editor-dialog-BOZ5wk96.js} +8 -8
  16. package/dist/_chunks/{calendar-appointment-editor-dialog-D3tQ8N34.js.map → calendar-appointment-editor-dialog-BOZ5wk96.js.map} +1 -1
  17. package/dist/_chunks/{card-BA4Ig_kn.js → card-C85_Ndhb.js} +96 -68
  18. package/dist/_chunks/card-C85_Ndhb.js.map +1 -0
  19. package/dist/_chunks/{clinical-note-card-Cut2lNmu.js → clinical-note-card-CWHFnCmY.js} +2 -2
  20. package/dist/_chunks/{clinical-note-card-Cut2lNmu.js.map → clinical-note-card-CWHFnCmY.js.map} +1 -1
  21. package/dist/_chunks/{connection-status-CVyCqxiY.js → connection-status-CWSU3eiq.js} +2 -2
  22. package/dist/_chunks/{connection-status-CVyCqxiY.js.map → connection-status-CWSU3eiq.js.map} +1 -1
  23. package/dist/_chunks/{contact-card-ClvEDM9e.js → contact-card-CymtNvy3.js} +2 -2
  24. package/dist/_chunks/{contact-card-ClvEDM9e.js.map → contact-card-CymtNvy3.js.map} +1 -1
  25. package/dist/_chunks/{contact-profile-card-CX45mZA3.js → contact-profile-card-jBf9U4At.js} +2 -2
  26. package/dist/_chunks/{contact-profile-card-CX45mZA3.js.map → contact-profile-card-jBf9U4At.js.map} +1 -1
  27. package/dist/_chunks/{cycle-calculator-CQkjVSD2.js → cycle-calculator-ZMDvToIm.js} +2 -2
  28. package/dist/_chunks/{cycle-calculator-CQkjVSD2.js.map → cycle-calculator-ZMDvToIm.js.map} +1 -1
  29. package/dist/_chunks/{data-table-tabs-DlTPtqoI.js → data-table-tabs-CcgU2lr5.js} +2 -2
  30. package/dist/_chunks/{data-table-tabs-DlTPtqoI.js.map → data-table-tabs-CcgU2lr5.js.map} +1 -1
  31. package/dist/_chunks/{data-table-Bh9_IEj4.js → data-table-xUDjZS_O.js} +2 -2
  32. package/dist/_chunks/{data-table-Bh9_IEj4.js.map → data-table-xUDjZS_O.js.map} +1 -1
  33. package/dist/_chunks/{document-preview-CL1xsnLS.js → document-preview-DWIQryMW.js} +2 -2
  34. package/dist/_chunks/{document-preview-CL1xsnLS.js.map → document-preview-DWIQryMW.js.map} +1 -1
  35. package/dist/_chunks/{due-date-calculator-NjTlmoFK.js → due-date-calculator-Dr2cDa64.js} +3 -3
  36. package/dist/_chunks/{due-date-calculator-NjTlmoFK.js.map → due-date-calculator-Dr2cDa64.js.map} +1 -1
  37. package/dist/_chunks/editable-currency-cell-renderer-BEaj2NT_.js +493 -0
  38. package/dist/_chunks/editable-currency-cell-renderer-BEaj2NT_.js.map +1 -0
  39. package/dist/_chunks/{entity-summary-B_bOloqP.js → entity-summary-BJdfIsk_.js} +2 -2
  40. package/dist/_chunks/{entity-summary-B_bOloqP.js.map → entity-summary-BJdfIsk_.js.map} +1 -1
  41. package/dist/_chunks/{face-scheme-DyHc3zPt.js → face-scheme-BmygzbZr.js} +2 -2
  42. package/dist/_chunks/{face-scheme-DyHc3zPt.js.map → face-scheme-BmygzbZr.js.map} +1 -1
  43. package/dist/_chunks/{fetal-weight-Brl3n4LN.js → fetal-weight-CkIwJgiH.js} +2 -2
  44. package/dist/_chunks/{fetal-weight-Brl3n4LN.js.map → fetal-weight-CkIwJgiH.js.map} +1 -1
  45. package/dist/_chunks/{file-manager-Cgf2yc10.js → file-manager-Ba_TcfCj.js} +2 -2
  46. package/dist/_chunks/{file-manager-Cgf2yc10.js.map → file-manager-Ba_TcfCj.js.map} +1 -1
  47. package/dist/_chunks/{finished-terminal-D8ohcFVS.js → finished-terminal-DXVAfhRr.js} +2 -2
  48. package/dist/_chunks/{finished-terminal-D8ohcFVS.js.map → finished-terminal-DXVAfhRr.js.map} +1 -1
  49. package/dist/_chunks/{forgot-password-form-BQPvDS7i.js → forgot-password-form-BCk4rGIh.js} +2 -2
  50. package/dist/_chunks/{forgot-password-form-BQPvDS7i.js.map → forgot-password-form-BCk4rGIh.js.map} +1 -1
  51. package/dist/_chunks/{gestational-age-calculator-Dn8IOXHB.js → gestational-age-calculator-CXcDKQqC.js} +3 -3
  52. package/dist/_chunks/{gestational-age-calculator-Dn8IOXHB.js.map → gestational-age-calculator-CXcDKQqC.js.map} +1 -1
  53. package/dist/_chunks/{hcg-doubling-DQe1ptNB.js → hcg-doubling-BJFR3onB.js} +2 -2
  54. package/dist/_chunks/{hcg-doubling-DQe1ptNB.js.map → hcg-doubling-BJFR3onB.js.map} +1 -1
  55. package/dist/_chunks/{header-settings-DittkpqU.js → header-settings-C2D74i4g.js} +2 -2
  56. package/dist/_chunks/{header-settings-DittkpqU.js.map → header-settings-C2D74i4g.js.map} +1 -1
  57. package/dist/_chunks/{heatmap-9Ql8Ny9d.js → heatmap-C9tEvqEm.js} +3 -3
  58. package/dist/_chunks/{heatmap-9Ql8Ny9d.js.map → heatmap-C9tEvqEm.js.map} +1 -1
  59. package/dist/_chunks/{icon-picker-Bkm9m7ju.js → icon-picker-DQMG9L6M.js} +2 -2
  60. package/dist/_chunks/{icon-picker-Bkm9m7ju.js.map → icon-picker-DQMG9L6M.js.map} +1 -1
  61. package/dist/_chunks/info-tip-Do3RFt60.js +216 -0
  62. package/dist/_chunks/info-tip-Do3RFt60.js.map +1 -0
  63. package/dist/_chunks/{kit-extensions-44gudqqq.js → kit-extensions-C4o_tFN4.js} +6 -6
  64. package/dist/_chunks/{kit-extensions-44gudqqq.js.map → kit-extensions-C4o_tFN4.js.map} +1 -1
  65. package/dist/_chunks/{locale-picker-DVvinQXU.js → locale-picker-B1NAHW4U.js} +2 -2
  66. package/dist/_chunks/{locale-picker-DVvinQXU.js.map → locale-picker-B1NAHW4U.js.map} +1 -1
  67. package/dist/_chunks/{login-dev-card-BZBR58mu.js → login-dev-card-DcfcFJrm.js} +2 -2
  68. package/dist/_chunks/{login-dev-card-BZBR58mu.js.map → login-dev-card-DcfcFJrm.js.map} +1 -1
  69. package/dist/_chunks/{marketplace-app-shell-C8nHixB8.js → marketplace-app-shell-DDZI-uBl.js} +3 -3
  70. package/dist/_chunks/{marketplace-app-shell-C8nHixB8.js.map → marketplace-app-shell-DDZI-uBl.js.map} +1 -1
  71. package/dist/_chunks/{notes-panel-D6YhNGHU.js → notes-panel-DfjF83IK.js} +4 -4
  72. package/dist/_chunks/{notes-panel-D6YhNGHU.js.map → notes-panel-DfjF83IK.js.map} +1 -1
  73. package/dist/_chunks/{operator-hero-D_0KoEuJ.js → operator-hero-N_ziNGFF.js} +2 -2
  74. package/dist/_chunks/{operator-hero-D_0KoEuJ.js.map → operator-hero-N_ziNGFF.js.map} +1 -1
  75. package/dist/_chunks/{patient-details-DQQpgx4A.js → patient-details-DGHkAErB.js} +3 -3
  76. package/dist/_chunks/{patient-details-DQQpgx4A.js.map → patient-details-DGHkAErB.js.map} +1 -1
  77. package/dist/_chunks/{patient-field-row-Cb5jUd5Q.js → patient-field-row-BVK4y98C.js} +2 -2
  78. package/dist/_chunks/{patient-field-row-Cb5jUd5Q.js.map → patient-field-row-BVK4y98C.js.map} +1 -1
  79. package/dist/_chunks/{patient-search-Cp2efqHs.js → patient-search-CL6dtBIq.js} +2 -2
  80. package/dist/_chunks/{patient-search-Cp2efqHs.js.map → patient-search-CL6dtBIq.js.map} +1 -1
  81. package/dist/_chunks/{patient-summary-card-BvMI0eMu.js → patient-summary-card-DXz07c2X.js} +3 -3
  82. package/dist/_chunks/{patient-summary-card-BvMI0eMu.js.map → patient-summary-card-DXz07c2X.js.map} +1 -1
  83. package/dist/_chunks/{payment-automation-upsell-D1YdO1xY.js → payment-automation-upsell-CZk6f8aK.js} +3 -3
  84. package/dist/_chunks/{payment-automation-upsell-D1YdO1xY.js.map → payment-automation-upsell-CZk6f8aK.js.map} +1 -1
  85. package/dist/_chunks/{payment-request-card-BfGauFY0.js → payment-request-card-BbpN8GQg.js} +2 -2
  86. package/dist/_chunks/{payment-request-card-BfGauFY0.js.map → payment-request-card-BbpN8GQg.js.map} +1 -1
  87. package/dist/_chunks/{periodontal-chart-_y4Ck7_P.js → periodontal-chart-Cw-ZsIls.js} +2 -2
  88. package/dist/_chunks/{periodontal-chart-_y4Ck7_P.js.map → periodontal-chart-Cw-ZsIls.js.map} +1 -1
  89. package/dist/_chunks/{periodontal-chart-card-Bx6PeS3b.js → periodontal-chart-card-CG8mxR62.js} +2 -2
  90. package/dist/_chunks/{periodontal-chart-card-Bx6PeS3b.js.map → periodontal-chart-card-CG8mxR62.js.map} +1 -1
  91. package/dist/_chunks/{periodontal-diagnosis-DD3hrg9X.js → periodontal-diagnosis-CF1d_0yl.js} +2 -2
  92. package/dist/_chunks/{periodontal-diagnosis-DD3hrg9X.js.map → periodontal-diagnosis-CF1d_0yl.js.map} +1 -1
  93. package/dist/_chunks/{periodontal-risk-chart-B7S9OmPC.js → periodontal-risk-chart-D2zyID0H.js} +2 -2
  94. package/dist/_chunks/{periodontal-risk-chart-B7S9OmPC.js.map → periodontal-risk-chart-D2zyID0H.js.map} +1 -1
  95. package/dist/_chunks/{popover-Da1ekjV1.js → popover-CN5IsOeS.js} +156 -148
  96. package/dist/_chunks/popover-CN5IsOeS.js.map +1 -0
  97. package/dist/_chunks/{practice-profile-hero-ClzE-4CB.js → practice-profile-hero-DKmnB-M0.js} +2 -2
  98. package/dist/_chunks/{practice-profile-hero-ClzE-4CB.js.map → practice-profile-hero-DKmnB-M0.js.map} +1 -1
  99. package/dist/_chunks/{pregnancy-dating-CuVj9KGR.js → pregnancy-dating-D0Kf9s7s.js} +3 -3
  100. package/dist/_chunks/{pregnancy-dating-CuVj9KGR.js.map → pregnancy-dating-D0Kf9s7s.js.map} +1 -1
  101. package/dist/_chunks/{pregnancy-weight-gain-BeQRxwdP.js → pregnancy-weight-gain-B_Zldlzq.js} +2 -2
  102. package/dist/_chunks/{pregnancy-weight-gain-BeQRxwdP.js.map → pregnancy-weight-gain-B_Zldlzq.js.map} +1 -1
  103. package/dist/_chunks/{privacy-mask-BDVkikTm.js → privacy-mask-DbEKI-Jv.js} +2 -2
  104. package/dist/_chunks/{privacy-mask-BDVkikTm.js.map → privacy-mask-DbEKI-Jv.js.map} +1 -1
  105. package/dist/_chunks/{registration-form-BygI73vG.js → registration-form-K4j2tdLt.js} +2 -2
  106. package/dist/_chunks/{registration-form-BygI73vG.js.map → registration-form-K4j2tdLt.js.map} +1 -1
  107. package/dist/_chunks/{reserved.agent-BvwjDyne.js → reserved.agent-TRbKB39d.js} +2 -2
  108. package/dist/_chunks/{reserved.agent-BvwjDyne.js.map → reserved.agent-TRbKB39d.js.map} +1 -1
  109. package/dist/_chunks/{reset-password-form-Cf9QPEJu.js → reset-password-form-C6XLV7SI.js} +2 -2
  110. package/dist/_chunks/{reset-password-form-Cf9QPEJu.js.map → reset-password-form-C6XLV7SI.js.map} +1 -1
  111. package/dist/_chunks/{reviews-panel-B7InBORU.js → reviews-panel-jPYgYvxG.js} +2 -2
  112. package/dist/_chunks/{reviews-panel-B7InBORU.js.map → reviews-panel-jPYgYvxG.js.map} +1 -1
  113. package/dist/_chunks/{rich-text-editor-iw2tJLKA.js → rich-text-editor-CJfT08It.js} +2 -2
  114. package/dist/_chunks/{rich-text-editor-iw2tJLKA.js.map → rich-text-editor-CJfT08It.js.map} +1 -1
  115. package/dist/_chunks/{section-card-D5nWiTcK.js → section-card-D1sV4Voz.js} +2 -2
  116. package/dist/_chunks/{section-card-D5nWiTcK.js.map → section-card-D1sV4Voz.js.map} +1 -1
  117. package/dist/_chunks/{send-registration-link-form-CZYOO7NO.js → send-registration-link-form-yLSfcaPk.js} +2 -2
  118. package/dist/_chunks/{send-registration-link-form-CZYOO7NO.js.map → send-registration-link-form-yLSfcaPk.js.map} +1 -1
  119. package/dist/_chunks/{stat-D2PNJujA.js → stat-Dno2ZihS.js} +111 -96
  120. package/dist/_chunks/stat-Dno2ZihS.js.map +1 -0
  121. package/dist/_chunks/{task-card-C4HJUKVw.js → task-card-TSJjuuDe.js} +2 -2
  122. package/dist/_chunks/{task-card-C4HJUKVw.js.map → task-card-TSJjuuDe.js.map} +1 -1
  123. package/dist/_chunks/{task-editor-BlGdXR9F.js → task-editor-qXfMbHsy.js} +2 -2
  124. package/dist/_chunks/{task-editor-BlGdXR9F.js.map → task-editor-qXfMbHsy.js.map} +1 -1
  125. package/dist/_chunks/{task-tray-DZQGhDdc.js → task-tray-DrXfMCuf.js} +2 -2
  126. package/dist/_chunks/{task-tray-DZQGhDdc.js.map → task-tray-DrXfMCuf.js.map} +1 -1
  127. package/dist/_chunks/{tasks-panel-Q0CiEAff.js → tasks-panel-iVeuu9a8.js} +2 -2
  128. package/dist/_chunks/{tasks-panel-Q0CiEAff.js.map → tasks-panel-iVeuu9a8.js.map} +1 -1
  129. package/dist/_chunks/{timeline-BcYHdP56.js → timeline-B32dylRJ.js} +2 -2
  130. package/dist/_chunks/{timeline-BcYHdP56.js.map → timeline-B32dylRJ.js.map} +1 -1
  131. package/dist/_chunks/{use-appointment-details-read-CpXRSfPI.js → use-appointment-details-read-UXXvBeGZ.js} +5 -5
  132. package/dist/_chunks/{use-appointment-details-read-CpXRSfPI.js.map → use-appointment-details-read-UXXvBeGZ.js.map} +1 -1
  133. package/dist/_chunks/{workflow-map-BWJhlZbC.js → workflow-map-flsvqQ3L.js} +2 -2
  134. package/dist/_chunks/{workflow-map-BWJhlZbC.js.map → workflow-map-flsvqQ3L.js.map} +1 -1
  135. package/dist/_chunks/{workflow-webhook-action-Uhyfr6_6.js → workflow-webhook-action-BD-6UyOs.js} +2 -2
  136. package/dist/_chunks/{workflow-webhook-action-Uhyfr6_6.js.map → workflow-webhook-action-BD-6UyOs.js.map} +1 -1
  137. package/dist/ag-grid.css +3 -1
  138. package/dist/agent-catalog.json +2 -2
  139. package/dist/agent-i18n/en.json +1 -1
  140. package/dist/components/anamnesis-card/index.js +1 -1
  141. package/dist/components/anamnesis-summary-card/index.js +1 -1
  142. package/dist/components/appointment-details-panel/index.js +1 -1
  143. package/dist/components/bishop-score/index.js +1 -1
  144. package/dist/components/bmi-calculator/index.js +1 -1
  145. package/dist/components/booking/index.js +1 -1
  146. package/dist/components/card/card.d.ts +10 -1
  147. package/dist/components/card/card.d.ts.map +1 -1
  148. package/dist/components/card/index.d.ts +1 -1
  149. package/dist/components/card/index.d.ts.map +1 -1
  150. package/dist/components/card/index.js +1 -1
  151. package/dist/components/clinical-note-card/index.js +1 -1
  152. package/dist/components/connection-status/index.js +1 -1
  153. package/dist/components/contact-card/index.js +1 -1
  154. package/dist/components/contact-profile-card/index.js +1 -1
  155. package/dist/components/cycle-calculator/index.js +1 -1
  156. package/dist/components/data-table/header-info.d.ts +31 -0
  157. package/dist/components/data-table/header-info.d.ts.map +1 -0
  158. package/dist/components/data-table/index.d.ts +1 -0
  159. package/dist/components/data-table/index.d.ts.map +1 -1
  160. package/dist/components/data-table/index.js +19 -18
  161. package/dist/components/data-table-tabs/index.js +1 -1
  162. package/dist/components/document-preview/index.js +1 -1
  163. package/dist/components/due-date-calculator/index.js +2 -2
  164. package/dist/components/entity-summary/index.js +1 -1
  165. package/dist/components/face-scheme/index.js +1 -1
  166. package/dist/components/fetal-weight/index.js +1 -1
  167. package/dist/components/file-manager/index.js +1 -1
  168. package/dist/components/finished-terminal/index.js +1 -1
  169. package/dist/components/gestational-age-calculator/index.js +1 -1
  170. package/dist/components/hcg-doubling/index.js +1 -1
  171. package/dist/components/header-settings/index.js +1 -1
  172. package/dist/components/heatmap/index.js +1 -1
  173. package/dist/components/icon-picker/index.js +1 -1
  174. package/dist/components/info-tip/index.js +1 -1
  175. package/dist/components/info-tip/info-tip.agent.d.ts.map +1 -1
  176. package/dist/components/info-tip/info-tip.d.ts +21 -1
  177. package/dist/components/info-tip/info-tip.d.ts.map +1 -1
  178. package/dist/components/locale-picker/index.js +1 -1
  179. package/dist/components/notes-panel/index.js +1 -1
  180. package/dist/components/operator-hero/index.js +1 -1
  181. package/dist/components/patient-details/index.js +1 -1
  182. package/dist/components/patient-search/index.js +1 -1
  183. package/dist/components/patient-summary-card/index.js +1 -1
  184. package/dist/components/patient-table/index.js +1 -1
  185. package/dist/components/payment-card/index.js +1 -1
  186. package/dist/components/periodontal-chart/index.js +1 -1
  187. package/dist/components/periodontal-chart-card/index.js +1 -1
  188. package/dist/components/periodontal-diagnosis/index.js +1 -1
  189. package/dist/components/periodontal-risk-chart/index.js +1 -1
  190. package/dist/components/popover/index.js +1 -1
  191. package/dist/components/popover/popover.d.ts.map +1 -1
  192. package/dist/components/practice-profile-hero/index.js +1 -1
  193. package/dist/components/pregnancy-dating/index.js +1 -1
  194. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  195. package/dist/components/reviews-panel/index.js +1 -1
  196. package/dist/components/rich-text-editor/index.js +2 -2
  197. package/dist/components/section-card/index.js +1 -1
  198. package/dist/components/stat/index.js +1 -1
  199. package/dist/components/stat/stat.d.ts +8 -0
  200. package/dist/components/stat/stat.d.ts.map +1 -1
  201. package/dist/components/task-card/index.js +1 -1
  202. package/dist/components/task-editor/index.js +1 -1
  203. package/dist/components/task-tray/index.js +1 -1
  204. package/dist/components/tasks-panel/index.js +1 -1
  205. package/dist/components/timeline/index.js +1 -1
  206. package/dist/components/workflow/index.js +1 -1
  207. package/dist/i18n/locales/ar.d.ts +2 -0
  208. package/dist/i18n/locales/ar.d.ts.map +1 -1
  209. package/dist/i18n/locales/ar.js +3 -1
  210. package/dist/i18n/locales/ar.js.map +1 -1
  211. package/dist/i18n/locales/de.d.ts +2 -0
  212. package/dist/i18n/locales/de.d.ts.map +1 -1
  213. package/dist/i18n/locales/de.js +3 -1
  214. package/dist/i18n/locales/de.js.map +1 -1
  215. package/dist/i18n/locales/el.d.ts +2 -0
  216. package/dist/i18n/locales/el.d.ts.map +1 -1
  217. package/dist/i18n/locales/el.js +3 -1
  218. package/dist/i18n/locales/el.js.map +1 -1
  219. package/dist/i18n/locales/en.d.ts +2 -0
  220. package/dist/i18n/locales/en.d.ts.map +1 -1
  221. package/dist/i18n/locales/en.js +3 -1
  222. package/dist/i18n/locales/en.js.map +1 -1
  223. package/dist/i18n/locales/es.d.ts +2 -0
  224. package/dist/i18n/locales/es.d.ts.map +1 -1
  225. package/dist/i18n/locales/es.js +3 -1
  226. package/dist/i18n/locales/es.js.map +1 -1
  227. package/dist/i18n/locales/fr.d.ts +2 -0
  228. package/dist/i18n/locales/fr.d.ts.map +1 -1
  229. package/dist/i18n/locales/fr.js +3 -1
  230. package/dist/i18n/locales/fr.js.map +1 -1
  231. package/dist/i18n/locales/hi.d.ts +2 -0
  232. package/dist/i18n/locales/hi.d.ts.map +1 -1
  233. package/dist/i18n/locales/hi.js +3 -1
  234. package/dist/i18n/locales/hi.js.map +1 -1
  235. package/dist/i18n/locales/it.d.ts +2 -0
  236. package/dist/i18n/locales/it.d.ts.map +1 -1
  237. package/dist/i18n/locales/it.js +3 -1
  238. package/dist/i18n/locales/it.js.map +1 -1
  239. package/dist/i18n/locales/ja.d.ts +2 -0
  240. package/dist/i18n/locales/ja.d.ts.map +1 -1
  241. package/dist/i18n/locales/ja.js +3 -1
  242. package/dist/i18n/locales/ja.js.map +1 -1
  243. package/dist/i18n/locales/nl.d.ts +2 -0
  244. package/dist/i18n/locales/nl.d.ts.map +1 -1
  245. package/dist/i18n/locales/nl.js +3 -1
  246. package/dist/i18n/locales/nl.js.map +1 -1
  247. package/dist/i18n/locales/pl.d.ts +2 -0
  248. package/dist/i18n/locales/pl.d.ts.map +1 -1
  249. package/dist/i18n/locales/pl.js +3 -1
  250. package/dist/i18n/locales/pl.js.map +1 -1
  251. package/dist/i18n/locales/pt.d.ts +2 -0
  252. package/dist/i18n/locales/pt.d.ts.map +1 -1
  253. package/dist/i18n/locales/pt.js +3 -1
  254. package/dist/i18n/locales/pt.js.map +1 -1
  255. package/dist/i18n/locales/ro.d.ts +2 -0
  256. package/dist/i18n/locales/ro.d.ts.map +1 -1
  257. package/dist/i18n/locales/ro.js +3 -1
  258. package/dist/i18n/locales/ro.js.map +1 -1
  259. package/dist/i18n/locales/ru.d.ts +2 -0
  260. package/dist/i18n/locales/ru.d.ts.map +1 -1
  261. package/dist/i18n/locales/ru.js +3 -1
  262. package/dist/i18n/locales/ru.js.map +1 -1
  263. package/dist/i18n/locales/sq.d.ts +2 -0
  264. package/dist/i18n/locales/sq.d.ts.map +1 -1
  265. package/dist/i18n/locales/sq.js +3 -1
  266. package/dist/i18n/locales/sq.js.map +1 -1
  267. package/dist/i18n/locales/sv.d.ts +2 -0
  268. package/dist/i18n/locales/sv.d.ts.map +1 -1
  269. package/dist/i18n/locales/sv.js +3 -1
  270. package/dist/i18n/locales/sv.js.map +1 -1
  271. package/dist/i18n/locales/tr.d.ts +2 -0
  272. package/dist/i18n/locales/tr.d.ts.map +1 -1
  273. package/dist/i18n/locales/tr.js +3 -1
  274. package/dist/i18n/locales/tr.js.map +1 -1
  275. package/dist/i18n/locales/zh.d.ts +2 -0
  276. package/dist/i18n/locales/zh.d.ts.map +1 -1
  277. package/dist/i18n/locales/zh.js +3 -1
  278. package/dist/i18n/locales/zh.js.map +1 -1
  279. package/dist/index.js +914 -913
  280. package/dist/locales/ar.json +3 -1
  281. package/dist/locales/de.json +3 -1
  282. package/dist/locales/el.json +3 -1
  283. package/dist/locales/en.json +3 -1
  284. package/dist/locales/es.json +3 -1
  285. package/dist/locales/fr.json +3 -1
  286. package/dist/locales/hi.json +3 -1
  287. package/dist/locales/it.json +3 -1
  288. package/dist/locales/ja.json +3 -1
  289. package/dist/locales/nl.json +3 -1
  290. package/dist/locales/pl.json +3 -1
  291. package/dist/locales/pt.json +3 -1
  292. package/dist/locales/ro.json +3 -1
  293. package/dist/locales/ru.json +3 -1
  294. package/dist/locales/sq.json +3 -1
  295. package/dist/locales/sv.json +3 -1
  296. package/dist/locales/tr.json +3 -1
  297. package/dist/locales/zh.json +3 -1
  298. package/dist/patterns/anamnesis/index.js +1 -1
  299. package/dist/patterns/calendar/index.js +1 -1
  300. package/dist/patterns/forgot-password-form/index.js +1 -1
  301. package/dist/patterns/login-form/index.js +1 -1
  302. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  303. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  304. package/dist/patterns/registration-form/index.js +1 -1
  305. package/dist/patterns/reset-password-form/index.js +1 -1
  306. package/dist/patterns/send-registration-link-form/index.js +1 -1
  307. package/dist/patterns/workflow-webhook-action/index.js +1 -1
  308. package/dist/tokens.css +1 -0
  309. package/package.json +1 -1
  310. package/dist/_chunks/card-BA4Ig_kn.js.map +0 -1
  311. package/dist/_chunks/editable-currency-cell-renderer-BQYL5GjP.js +0 -412
  312. package/dist/_chunks/editable-currency-cell-renderer-BQYL5GjP.js.map +0 -1
  313. package/dist/_chunks/info-tip-Cfd5SKbY.js +0 -166
  314. package/dist/_chunks/info-tip-Cfd5SKbY.js.map +0 -1
  315. package/dist/_chunks/popover-Da1ekjV1.js.map +0 -1
  316. package/dist/_chunks/stat-D2PNJujA.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { jsx as s, jsxs as r } from "react/jsx-runtime";
2
2
  import { forwardRef as f } from "react";
3
3
  import { c as u } from "./index-D2ZczOXr.js";
4
- import { C as e } from "./card-BA4Ig_kn.js";
4
+ import { C as e } from "./card-C85_Ndhb.js";
5
5
  const v = u("ds:flex ds:flex-col", {
6
6
  variants: {
7
7
  gap: {
@@ -57,4 +57,4 @@ x.displayName = "SectionCard";
57
57
  export {
58
58
  x as S
59
59
  };
60
- //# sourceMappingURL=section-card-D5nWiTcK.js.map
60
+ //# sourceMappingURL=section-card-D1sV4Voz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"section-card-D5nWiTcK.js","sources":["../../src/components/section-card/section-card.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Card } from '../card/card';\n\n/* -------------------------------------------------------------------- */\n/* SectionCard */\n/* */\n/* One labelled block inside a panel or a page column: a quiet heading, */\n/* an optional action on the inline end, and a stacked body. It is the */\n/* rhythm a rail panel is built from — patient, appointment, notes, */\n/* treatments — each its own card so a reader can skim the headings. */\n/* */\n/* It exists because that shape was being re-authored per surface: a */\n/* `Card` + `Card.Body` + a muted `type-label` heading + a flex row for */\n/* the action. Re-authored, the heading level drifts, the gap drifts, and */\n/* the action sometimes pushes the heading off its baseline. */\n/* */\n/* The heading is QUIET by design (`type-label`, muted) — it labels a */\n/* block, it does not title a page. The content is what the reader is */\n/* looking at; the heading only says which block they are in. Pass a */\n/* `headingLevel` that continues the surrounding document outline rather */\n/* than accepting the default blindly. */\n/* -------------------------------------------------------------------- */\n\nconst bodyVariants = cva('ds:flex ds:flex-col', {\n variants: {\n gap: {\n sm: 'ds:gap-[var(--spacing-xs)]',\n md: 'ds:gap-[var(--spacing-sm)]',\n lg: 'ds:gap-[var(--spacing-md)]',\n },\n },\n defaultVariants: { gap: 'md' },\n});\n\nexport interface SectionCardProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'title'>,\n VariantProps<typeof bodyVariants> {\n /**\n * The block's label. Already translated upstream. Omit for an unlabelled\n * block — the identity card at the top of a panel, say, whose content is\n * self-evident.\n */\n title?: ReactNode;\n /** `id` applied to the heading so a caller can wire `aria-labelledby`. */\n headingId?: string;\n /**\n * Semantic heading level. Default `3` — a panel's own `PanelHeader` is\n * usually the `h2`. Set it to continue the real outline of the surface.\n */\n headingLevel?: 2 | 3 | 4;\n /** Rendered inline-end of the heading row: a count, a link, an icon button. */\n headerAction?: ReactNode;\n /** Card surface. Default `elevated`, the rail-panel treatment. */\n variant?: 'default' | 'outlined' | 'elevated';\n /** Space between the body's children. Default `md`. */\n gap?: 'sm' | 'md' | 'lg';\n children: ReactNode;\n}\n\nexport const SectionCard = forwardRef<HTMLElement, SectionCardProps>(\n (\n {\n title,\n headingId,\n headingLevel = 3,\n headerAction,\n variant = 'elevated',\n gap,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const Heading = `h${headingLevel}` as const satisfies 'h2' | 'h3' | 'h4';\n\n return (\n <Card\n ref={ref}\n variant={variant}\n data-component=\"section-card\"\n className={className}\n {...rest}\n >\n <Card.Body className={bodyVariants({ gap })}>\n {/* The row renders only when there is something to put in it, so an\n unlabelled card carries no empty band above its content. */}\n {title != null || headerAction != null ? (\n <div className=\"ds:flex ds:min-w-0 ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n {title != null ? (\n <Heading\n id={headingId}\n className=\"ds:m-0 ds:min-w-0 type-label ds:text-[color:var(--muted-foreground)]\"\n >\n {title}\n </Heading>\n ) : (\n // Keeps the action on the inline end when there is no heading.\n <span />\n )}\n {headerAction}\n </div>\n ) : null}\n {children}\n </Card.Body>\n </Card>\n );\n },\n);\n\nSectionCard.displayName = 'SectionCard';\n"],"names":["bodyVariants","cva","SectionCard","forwardRef","title","headingId","headingLevel","headerAction","variant","gap","className","children","rest","ref","Heading","jsx","Card","jsxs"],"mappings":";;;;AAwBA,MAAMA,IAAeC,EAAI,uBAAuB;AAAA,EAC9C,UAAU;AAAA,IACR,KAAK;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB,EAAE,KAAK,KAAA;AAC1B,CAAC,GA4BYC,IAAcC;AAAA,EACzB,CACE;AAAA,IACE,OAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,cAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,KAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAU,IAAIR,CAAY;AAEhC,WACE,gBAAAS;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAAH;AAAA,QACA,SAAAL;AAAA,QACA,kBAAe;AAAA,QACf,WAAAE;AAAA,QACC,GAAGE;AAAA,QAEJ,UAAA,gBAAAK,EAACD,EAAK,MAAL,EAAU,WAAWhB,EAAa,EAAE,KAAAS,GAAK,GAGvC,UAAA;AAAA,UAAAL,KAAS,QAAQG,KAAgB,OAChC,gBAAAU,EAAC,OAAA,EAAI,WAAU,oFACZ,UAAA;AAAA,YAAAb,KAAS,OACR,gBAAAW;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,IAAIT;AAAA,gBACJ,WAAU;AAAA,gBAET,UAAAD;AAAA,cAAA;AAAA,YAAA;AAAA;AAAA,gCAIF,QAAA,CAAA,CAAK;AAAA;AAAA,YAEPG;AAAA,UAAA,EAAA,CACH,IACE;AAAA,UACHI;AAAA,QAAA,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAT,EAAY,cAAc;"}
1
+ {"version":3,"file":"section-card-D1sV4Voz.js","sources":["../../src/components/section-card/section-card.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Card } from '../card/card';\n\n/* -------------------------------------------------------------------- */\n/* SectionCard */\n/* */\n/* One labelled block inside a panel or a page column: a quiet heading, */\n/* an optional action on the inline end, and a stacked body. It is the */\n/* rhythm a rail panel is built from — patient, appointment, notes, */\n/* treatments — each its own card so a reader can skim the headings. */\n/* */\n/* It exists because that shape was being re-authored per surface: a */\n/* `Card` + `Card.Body` + a muted `type-label` heading + a flex row for */\n/* the action. Re-authored, the heading level drifts, the gap drifts, and */\n/* the action sometimes pushes the heading off its baseline. */\n/* */\n/* The heading is QUIET by design (`type-label`, muted) — it labels a */\n/* block, it does not title a page. The content is what the reader is */\n/* looking at; the heading only says which block they are in. Pass a */\n/* `headingLevel` that continues the surrounding document outline rather */\n/* than accepting the default blindly. */\n/* -------------------------------------------------------------------- */\n\nconst bodyVariants = cva('ds:flex ds:flex-col', {\n variants: {\n gap: {\n sm: 'ds:gap-[var(--spacing-xs)]',\n md: 'ds:gap-[var(--spacing-sm)]',\n lg: 'ds:gap-[var(--spacing-md)]',\n },\n },\n defaultVariants: { gap: 'md' },\n});\n\nexport interface SectionCardProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'title'>,\n VariantProps<typeof bodyVariants> {\n /**\n * The block's label. Already translated upstream. Omit for an unlabelled\n * block — the identity card at the top of a panel, say, whose content is\n * self-evident.\n */\n title?: ReactNode;\n /** `id` applied to the heading so a caller can wire `aria-labelledby`. */\n headingId?: string;\n /**\n * Semantic heading level. Default `3` — a panel's own `PanelHeader` is\n * usually the `h2`. Set it to continue the real outline of the surface.\n */\n headingLevel?: 2 | 3 | 4;\n /** Rendered inline-end of the heading row: a count, a link, an icon button. */\n headerAction?: ReactNode;\n /** Card surface. Default `elevated`, the rail-panel treatment. */\n variant?: 'default' | 'outlined' | 'elevated';\n /** Space between the body's children. Default `md`. */\n gap?: 'sm' | 'md' | 'lg';\n children: ReactNode;\n}\n\nexport const SectionCard = forwardRef<HTMLElement, SectionCardProps>(\n (\n {\n title,\n headingId,\n headingLevel = 3,\n headerAction,\n variant = 'elevated',\n gap,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const Heading = `h${headingLevel}` as const satisfies 'h2' | 'h3' | 'h4';\n\n return (\n <Card\n ref={ref}\n variant={variant}\n data-component=\"section-card\"\n className={className}\n {...rest}\n >\n <Card.Body className={bodyVariants({ gap })}>\n {/* The row renders only when there is something to put in it, so an\n unlabelled card carries no empty band above its content. */}\n {title != null || headerAction != null ? (\n <div className=\"ds:flex ds:min-w-0 ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n {title != null ? (\n <Heading\n id={headingId}\n className=\"ds:m-0 ds:min-w-0 type-label ds:text-[color:var(--muted-foreground)]\"\n >\n {title}\n </Heading>\n ) : (\n // Keeps the action on the inline end when there is no heading.\n <span />\n )}\n {headerAction}\n </div>\n ) : null}\n {children}\n </Card.Body>\n </Card>\n );\n },\n);\n\nSectionCard.displayName = 'SectionCard';\n"],"names":["bodyVariants","cva","SectionCard","forwardRef","title","headingId","headingLevel","headerAction","variant","gap","className","children","rest","ref","Heading","jsx","Card","jsxs"],"mappings":";;;;AAwBA,MAAMA,IAAeC,EAAI,uBAAuB;AAAA,EAC9C,UAAU;AAAA,IACR,KAAK;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB,EAAE,KAAK,KAAA;AAC1B,CAAC,GA4BYC,IAAcC;AAAA,EACzB,CACE;AAAA,IACE,OAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,cAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,KAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAU,IAAIR,CAAY;AAEhC,WACE,gBAAAS;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAAH;AAAA,QACA,SAAAL;AAAA,QACA,kBAAe;AAAA,QACf,WAAAE;AAAA,QACC,GAAGE;AAAA,QAEJ,UAAA,gBAAAK,EAACD,EAAK,MAAL,EAAU,WAAWhB,EAAa,EAAE,KAAAS,GAAK,GAGvC,UAAA;AAAA,UAAAL,KAAS,QAAQG,KAAgB,OAChC,gBAAAU,EAAC,OAAA,EAAI,WAAU,oFACZ,UAAA;AAAA,YAAAb,KAAS,OACR,gBAAAW;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,IAAIT;AAAA,gBACJ,WAAU;AAAA,gBAET,UAAAD;AAAA,cAAA;AAAA,YAAA;AAAA;AAAA,gCAIF,QAAA,CAAA,CAAK;AAAA;AAAA,YAEPG;AAAA,UAAA,EAAA,CACH,IACE;AAAA,UACHI;AAAA,QAAA,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAT,EAAY,cAAc;"}
@@ -6,7 +6,7 @@ import { parsePhoneNumberFromString as Xe } from "libphonenumber-js/min";
6
6
  import { i as Ye, E as pe } from "./email-input-C7THAwh2.js";
7
7
  import { A as h } from "./alert-9kEwDza3.js";
8
8
  import { B as he } from "./button-DohK_Ak_.js";
9
- import { C as B } from "./card-BA4Ig_kn.js";
9
+ import { C as B } from "./card-C85_Ndhb.js";
10
10
  import { D as Ze } from "./date-picker-CdhXlgVI.js";
11
11
  import { E as Ve } from "./error-summary-mGxIyDAY.js";
12
12
  import { F } from "./form-field-CyHfOVKF.js";
@@ -406,4 +406,4 @@ export {
406
406
  q as S,
407
407
  fn as a
408
408
  };
409
- //# sourceMappingURL=send-registration-link-form-CZYOO7NO.js.map
409
+ //# sourceMappingURL=send-registration-link-form-yLSfcaPk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"send-registration-link-form-CZYOO7NO.js","sources":["../../src/patterns/send-registration-link-form/send-registration-link-form.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* SendRegistrationLinkForm: the form sales use in the admin area to */\n/* send a doctor a registration link. */\n/* */\n/* Email, confirm email, mobile phone, confirm phone and the last day the link allows */\n/* login. Every prop is data, so a server-rendered page can mount it */\n/* from JSON. The browser posts a real form to the host's own field */\n/* names; the card checks what a browser can check first. The host */\n/* keeps every server rule. The link itself is never shown. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { cva } from 'class-variance-authority';\nimport {\n format,\n isAfter,\n isBefore,\n isValid,\n parseISO,\n startOfDay,\n} from 'date-fns';\nimport { parsePhoneNumberFromString } from 'libphonenumber-js/min';\nimport isEmail from 'validator/lib/isEmail';\nimport { Alert } from '../../components/alert';\nimport { Button } from '../../components/button';\nimport { Card } from '../../components/card';\nimport { DatePicker } from '../../components/date-picker';\nimport { EmailInput } from '../../components/email-input';\nimport { ErrorSummary } from '../../components/error-summary';\nimport { FormField } from '../../components/form-field';\nimport { PhoneInput } from '../../components/phone-input';\nimport { isSafeHref, isSameSiteHref } from '../../components/_shared/safe-href';\nimport { useStateBackedInput } from '../../components/_shared/use-state-backed-input';\nimport { useFieldMatch } from '../../hooks/use-field-match';\nimport {\n useErrorSummary,\n useFormMessageAnnounce,\n} from '../_shared/use-error-summary';\nimport { useRegistrationSubmit } from '../registration-form/use-registration-submit';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/** The fields of the form, in the order they appear. */\nexport const SEND_REGISTRATION_LINK_FIELDS = [\n 'email',\n 'emailConfirm',\n 'phone',\n 'phoneConfirm',\n 'allowLoginUntil',\n] as const;\n\nexport type SendRegistrationLinkField =\n (typeof SEND_REGISTRATION_LINK_FIELDS)[number];\n\n/** What `onSubmit` receives once every check has passed. */\nexport interface SendRegistrationLinkValues {\n email: string;\n /** As typed. It matches `email` apart from case and outer spaces. */\n emailConfirm: string;\n /** In E.164 form, e.g. `+393331234567`. */\n phone: string;\n /** In E.164 form. Equal to `phone`. */\n phoneConfirm: string;\n /** `yyyy-MM-dd`. */\n allowLoginUntil: string;\n}\n\n/** Values to show when the form opens, e.g. after a refused post.\n * `allowLoginUntil` is `yyyy-MM-dd`. */\nexport type SendRegistrationLinkInitialValues =\n Partial<SendRegistrationLinkValues>;\n\n/** Messages from the server, already translated by the host: one per\n * field, plus `form` for a message about the whole form. */\nexport type SendRegistrationLinkErrors = Partial<\n Record<SendRegistrationLinkField | 'form', string>\n>;\n\n/** The host's own form field names, e.g. `send_registration_link[email]`. */\nexport type SendRegistrationLinkFieldNames = Partial<\n Record<SendRegistrationLinkField, string>\n>;\n\n/** Guidance for the person sending, in the host's own words. */\nexport interface SendRegistrationLinkGuidance {\n /** The notice's heading. Pass it translated. */\n title: string;\n /** One short point each. Pass them translated. Plain text. */\n points: readonly string[];\n}\n\n/** The result of a send, shown instead of the form. */\nexport interface SendRegistrationLinkSent {\n /** The address the email went to. */\n email: string;\n /** The last day the link allows login, `yyyy-MM-dd`. */\n allowLoginUntil: string;\n}\n\nexport interface SendRegistrationLinkFormProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title' | 'onSubmit'\n> {\n /** Replaces the heading \"Send a registration link\". Pass it translated. */\n title?: string;\n /** The heading's level. Default 2, for a page that has its own `h1`. */\n headingLevel?: 1 | 2 | 3;\n /** A warning-style notice above the form. The kit has no copy for it. */\n guidance?: SendRegistrationLinkGuidance;\n /** The first day that can be chosen, `yyyy-MM-dd`. Default: tomorrow. */\n minDate?: string;\n /** The last day that can be chosen, `yyyy-MM-dd`. Default: no limit.\n * Keep it equal to the server's. */\n maxDate?: string;\n /** Values to show when the form opens. Read once. */\n initialValues?: SendRegistrationLinkInitialValues;\n /** Messages from the server. Each shows on its field until the user\n * changes that field, and the form takes focus when they are present\n * at load. */\n errors?: SendRegistrationLinkErrors;\n /** Fields that refuse paste, so the user types them. Default: none.\n * Refusing a paste in `phoneConfirm` is silent: use it with care. */\n blockPaste?: readonly ('email' | 'emailConfirm' | 'phoneConfirm')[];\n /** Replaces the button's \"Send registration link\". Translated. */\n submitLabel?: string;\n /** True while a React host sends the values. */\n submitting?: boolean;\n /** Shows the result instead of the form. */\n sent?: SendRegistrationLinkSent;\n /** Where \"Send another link\" leads. Same-site path or full address. */\n sendAnotherHref?: string;\n /** For a native form post: the host's field names. When set, the\n * browser posts the form. */\n fieldNames?: SendRegistrationLinkFieldNames;\n /** Where the post goes. Default: the current address. Same site only. */\n action?: string;\n /** Extra hidden inputs for a native post, by name: the CSRF token. */\n hiddenFields?: Readonly<Record<string, string>>;\n /** For React hosts: called once every check has passed. Not called when\n * `fieldNames` is set. */\n onSubmit?: (values: SendRegistrationLinkValues) => void;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n 'ds:w-full ds:[max-inline-size:36rem] ds:text-start ds:text-[var(--foreground)]',\n);\n\nconst isoDay = (date: Date): string => format(date, 'yyyy-MM-dd');\n\n/** A `yyyy-MM-dd` string as a local date, or nothing. */\nconst readDay = (value: string | undefined): Date | undefined => {\n if (!value) return undefined;\n const day = parseISO(value);\n return isValid(day) ? startOfDay(day) : undefined;\n};\n\nconst isPossiblePhone = (e164: string): boolean =>\n parsePhoneNumberFromString(e164)?.isPossible() ?? false;\n\nconst hasMessage = (errors: SendRegistrationLinkErrors): boolean =>\n Object.values(errors).some(Boolean);\n\n/* -------------------------------------------------------------------- */\n/* SendRegistrationLinkForm */\n/* -------------------------------------------------------------------- */\n\nexport const SendRegistrationLinkForm = forwardRef<\n HTMLDivElement,\n SendRegistrationLinkFormProps\n>(\n (\n {\n title,\n headingLevel = 2,\n guidance,\n minDate,\n maxDate,\n initialValues,\n errors,\n blockPaste,\n submitLabel,\n submitting = false,\n sent,\n sendAnotherHref,\n fieldNames,\n action,\n hiddenFields,\n onSubmit,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const titleId = useId();\n const fieldIdBase = useId();\n const fieldId = (field: SendRegistrationLinkField) =>\n `${fieldIdBase}-${field}`;\n const formMessageId = useId();\n const native = fieldNames !== undefined;\n const Heading = `h${headingLevel}` as const;\n\n // The allowed days, whole days in the visitor's time zone. The default\n // first day is tomorrow, worked out once.\n const [tomorrow] = useState(() => {\n const day = startOfDay(new Date());\n day.setDate(day.getDate() + 1);\n return day;\n });\n const first = readDay(minDate) ?? tomorrow;\n const last = readDay(maxDate);\n const inRange = (day: Date) =>\n !isBefore(day, first) && !(last && isAfter(day, last));\n\n /* ------------------------------ State ----------------------------- */\n\n const [values, setValues] = useState(() => ({\n email: initialValues?.email ?? '',\n emailConfirm: initialValues?.emailConfirm ?? '',\n phone: initialValues?.phone ?? '',\n phoneConfirm: initialValues?.phoneConfirm ?? '',\n }));\n const [day, setDay] = useState<Date | undefined>(() =>\n readDay(initialValues?.allowLoginUntil),\n );\n const [phonePossible, setPhonePossible] = useState(() =>\n isPossiblePhone(initialValues?.phone ?? ''),\n );\n const [touched, setTouched] = useState<\n Partial<Record<SendRegistrationLinkField, boolean>>\n >(() => ({ email: Boolean(initialValues?.email) }));\n const [submitted, setSubmitted] = useState(false);\n const [serverErrors, setServerErrors] =\n useState<SendRegistrationLinkErrors>(() => errors ?? {});\n\n const clearServer = (field: SendRegistrationLinkField) =>\n setServerErrors((previous) =>\n previous[field] ? { ...previous, [field]: undefined } : previous,\n );\n const set = (\n field: 'email' | 'emailConfirm' | 'phone' | 'phoneConfirm',\n value: string,\n ) => {\n setValues((previous) => ({ ...previous, [field]: value }));\n clearServer(field);\n };\n const leave = (field: SendRegistrationLinkField) =>\n setTouched((previous) =>\n previous[field] ? previous : { ...previous, [field]: true },\n );\n\n /* ---------------------------- Validation -------------------------- */\n\n // The same comparison the server makes: trimmed, ignoring case.\n const emailMatch = useFieldMatch({\n value: values.email,\n confirmValue: values.emailConfirm,\n kind: 'email',\n submitted,\n });\n\n // Both phones are E.164 values, the ones the form posts.\n const phoneMatch = useFieldMatch({\n value: values.phone,\n confirmValue: values.phoneConfirm,\n kind: 'phone',\n submitted,\n });\n\n const invalid: Record<SendRegistrationLinkField, boolean> = {\n email: !isEmail(values.email),\n emailConfirm: values.emailConfirm === '' || !emailMatch.matches,\n phone: values.phone === '' || !phonePossible,\n phoneConfirm: values.phoneConfirm === '' || !phoneMatch.matches,\n allowLoginUntil: !day || !inRange(day),\n };\n const required = t('registrationForm.required');\n const formatDay = (value: Date) =>\n new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }).format(\n value,\n );\n const labels: Record<SendRegistrationLinkField, string> = {\n email: t('registrationForm.email'),\n emailConfirm: t('registrationForm.emailConfirm'),\n phone: t('sendRegistrationLink.phone'),\n phoneConfirm: t('sendRegistrationLink.phoneConfirm'),\n allowLoginUntil: t('sendRegistrationLink.allowLoginUntil'),\n };\n // A message shows once the user has left the field or tried to submit.\n // A date waits for a submit, or a value out of range: leaving the\n // field to open the calendar is not a mistake.\n const due = (field: SendRegistrationLinkField) =>\n submitted ||\n (field === 'allowLoginUntil'\n ? day !== undefined\n : touched[field] === true);\n const whenDue = (field: SendRegistrationLinkField, message: string) =>\n due(field) && invalid[field] ? message : undefined;\n const ownErrors: Record<SendRegistrationLinkField, string | undefined> = {\n email: whenDue(\n 'email',\n values.email === '' ? required : t('inputs.email.invalid'),\n ),\n emailConfirm:\n values.emailConfirm === ''\n ? whenDue('emailConfirm', required)\n : emailMatch.error,\n phone: whenDue(\n 'phone',\n values.phone === '' ? required : t('registrationForm.phoneInvalid'),\n ),\n phoneConfirm:\n values.phoneConfirm === ''\n ? whenDue('phoneConfirm', required)\n : phoneMatch.error,\n allowLoginUntil: whenDue(\n 'allowLoginUntil',\n !day\n ? required\n : t('sendRegistrationLink.dateOutOfRange', {\n min: formatDay(first),\n max: last ? formatDay(last) : '…',\n }),\n ),\n };\n const errorFor = (field: SendRegistrationLinkField) =>\n serverErrors[field] ?? ownErrors[field];\n\n /* ------------------------------ Focus ----------------------------- */\n\n const form = useRef<HTMLFormElement>(null);\n const formMessage = useRef<HTMLDivElement>(null);\n const emailRef = useRef<HTMLInputElement | null>(null);\n const emailConfirmRef = useRef<HTMLInputElement | null>(null);\n // The addresses stay out of the inputs' `value` attributes.\n const emailField = useStateBackedInput(values.email, emailRef);\n const emailConfirmField = useStateBackedInput(\n values.emailConfirm,\n emailConfirmRef,\n );\n\n const focusField = (field: SendRegistrationLinkField | 'form') => {\n if (field === 'form') {\n formMessage.current?.focus();\n return;\n }\n form.current\n ?.querySelector<HTMLElement>(`[data-field=\"${field}\"] input`)\n ?.focus();\n };\n const focusTargetFor = (messages: SendRegistrationLinkErrors) =>\n SEND_REGISTRATION_LINK_FIELDS.find((field) => messages[field]) ??\n (hasMessage(messages) ? ('form' as const) : undefined);\n\n const [openedWithFieldMessage] = useState(() =>\n SEND_REGISTRATION_LINK_FIELDS.some((field) => Boolean(errors?.[field])),\n );\n const summary = useErrorSummary(\n SEND_REGISTRATION_LINK_FIELDS,\n errorFor,\n openedWithFieldMessage,\n );\n const [focusRequest, setFocusRequest] = useState<{\n target: SendRegistrationLinkField | 'form';\n } | null>(() => {\n const target = openedWithFieldMessage\n ? undefined\n : focusTargetFor(errors ?? {});\n return target ? { target } : null;\n });\n useEffect(() => {\n if (focusRequest) focusField(focusRequest.target);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusRequest]);\n\n /* ------------------------------ Submit ---------------------------- */\n\n const submit = useRegistrationSubmit<SendRegistrationLinkField>({\n errors,\n submitting,\n native,\n captcha: false,\n firstProblem: () =>\n SEND_REGISTRATION_LINK_FIELDS.find((field) => invalid[field]),\n onRefused: (field) => {\n setSubmitted(true);\n summary.open(() => setFocusRequest({ target: field }));\n },\n deliver: () =>\n onSubmit?.({\n ...values,\n allowLoginUntil: day ? isoDay(day) : '',\n }),\n onAnswer: (answer) => {\n const next: SendRegistrationLinkErrors = answer;\n setServerErrors(next);\n if (!hasMessage(next)) return;\n setSubmitted(false);\n summary.open(() => {\n const target = focusTargetFor(next);\n if (target) setFocusRequest({ target });\n });\n },\n });\n\n /* ------------------------------ Render ---------------------------- */\n\n const name = (field: SendRegistrationLinkField) =>\n native ? fieldNames[field] : field;\n const formAction =\n native && action && isSameSiteHref(action) ? action : undefined;\n const formError = serverErrors.form;\n const formMessageAnnounce = useFormMessageAnnounce(\n formError,\n summary.listed.length > 0,\n );\n const ownNames = new Set(Object.values(fieldNames ?? {}));\n const extraFields = native\n ? Object.entries(hiddenFields ?? {}).filter(\n ([extra]) => !ownNames.has(extra),\n )\n : [];\n const anotherLink =\n sendAnotherHref && isSafeHref(sendAnotherHref)\n ? sendAnotherHref\n : undefined;\n const sentDay = readDay(sent?.allowLoginUntil);\n\n if (sent) {\n return (\n <div\n ref={ref}\n {...rest}\n data-component=\"send-registration-link-form\"\n data-state=\"sent\"\n className={rootVariants({ className })}\n >\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]\">\n <Heading className=\"type-title-card\">\n {title ?? t('sendRegistrationLink.title')}\n </Heading>\n <Alert variant=\"success\" data-slot=\"sent\">\n <Alert.Title as=\"p\">\n {t('sendRegistrationLink.sentTitle')}\n </Alert.Title>\n <Alert.Description>\n {t('sendRegistrationLink.sentEmail', { email: sent.email })}\n </Alert.Description>\n {sentDay && (\n <Alert.Description>\n {t('sendRegistrationLink.sentUntil', {\n date: formatDay(sentDay),\n })}\n </Alert.Description>\n )}\n </Alert>\n {anotherLink && (\n <Button asChild intent=\"secondary\" data-action=\"send-another\">\n <a href={anotherLink}>\n {t('sendRegistrationLink.sendAnother')}\n </a>\n </Button>\n )}\n </Card.Body>\n </Card>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n {...rest}\n data-component=\"send-registration-link-form\"\n className={rootVariants({ className })}\n >\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]\">\n <Heading id={titleId} className=\"type-title-card\">\n {title ?? t('sendRegistrationLink.title')}\n </Heading>\n\n {guidance && (\n <Alert variant=\"warning\" data-slot=\"guidance\">\n <Alert.Title as=\"p\">{guidance.title}</Alert.Title>\n <ul className=\"ds:mx-0 ds:mb-0 ds:mt-[var(--spacing-xs)] ds:ps-[var(--spacing-lg)] ds:list-disc type-body-sm\">\n {guidance.points.map((point) => (\n <li key={point}>{point}</li>\n ))}\n </ul>\n </Alert>\n )}\n\n <form\n ref={form}\n noValidate\n method=\"post\"\n action={formAction}\n aria-labelledby={titleId}\n aria-busy={submit.busy || undefined}\n onSubmit={submit.handleSubmit}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <ErrorSummary\n ref={summary.ref}\n headingLevel={(headingLevel + 1) as 2 | 3 | 4}\n aria-describedby={formError ? formMessageId : undefined}\n errors={summary.listed.map((field) => {\n const message = errorFor(field) ?? '';\n return {\n field,\n message,\n label: message === required ? labels[field] : undefined,\n targetId: fieldId(field),\n };\n })}\n />\n\n {formError && (\n <Alert\n ref={formMessage}\n id={formMessageId}\n variant=\"error\"\n announce={formMessageAnnounce}\n tabIndex={-1}\n data-field=\"form\"\n >\n <Alert.Description>{formError}</Alert.Description>\n </Alert>\n )}\n\n <FormField\n id={fieldId('email')}\n label={labels.email}\n required\n error={errorFor('email')}\n announceError={!summary.lists('email')}\n data-field=\"email\"\n >\n <EmailInput\n ref={emailField.ref}\n name={name('email')}\n errorMessage={null}\n onChange={emailField.quiet((event) =>\n set('email', event.target.value),\n )}\n onBlur={() => leave('email')}\n blockPaste={blockPaste?.includes('email') ?? false}\n />\n </FormField>\n\n <FormField\n id={fieldId('emailConfirm')}\n label={labels.emailConfirm}\n required\n error={errorFor('emailConfirm')}\n announceError={!summary.lists('emailConfirm')}\n data-field=\"emailConfirm\"\n >\n <EmailInput\n ref={emailConfirmField.ref}\n name={name('emailConfirm')}\n disableBuiltInValidation\n onChange={emailConfirmField.quiet((event) =>\n set('emailConfirm', event.target.value),\n )}\n onBlur={() => {\n leave('emailConfirm');\n emailMatch.confirmProps.onBlur();\n }}\n blockPaste={blockPaste?.includes('emailConfirm') ?? false}\n />\n </FormField>\n\n <FormField\n id={fieldId('phone')}\n label={labels.phone}\n required\n description={t('sendRegistrationLink.phoneDescription')}\n error={errorFor('phone')}\n announceError={!summary.lists('phone')}\n data-field=\"phone\"\n onBlur={() => leave('phone')}\n >\n {/* The visible input holds the number as typed; a hidden\n input carries the full international number. */}\n <PhoneInput\n name={native ? undefined : 'phone'}\n value={values.phone}\n onChange={(e164, meta) => {\n set('phone', e164);\n setPhonePossible(meta.isPossible);\n }}\n />\n </FormField>\n\n <FormField\n id={fieldId('phoneConfirm')}\n label={labels.phoneConfirm}\n required\n error={errorFor('phoneConfirm')}\n announceError={!summary.lists('phoneConfirm')}\n data-field=\"phoneConfirm\"\n onBlur={() => {\n leave('phoneConfirm');\n phoneMatch.confirmProps.onBlur();\n }}\n onPasteCapture={\n blockPaste?.includes('phoneConfirm')\n ? (event) => event.preventDefault()\n : undefined\n }\n >\n <PhoneInput\n name={native ? undefined : 'phoneConfirm'}\n value={values.phoneConfirm}\n onChange={(e164) => set('phoneConfirm', e164)}\n />\n </FormField>\n\n <FormField\n id={fieldId('allowLoginUntil')}\n label={labels.allowLoginUntil}\n required\n error={errorFor('allowLoginUntil')}\n announceError={!summary.lists('allowLoginUntil')}\n data-field=\"allowLoginUntil\"\n >\n <DatePicker\n value={day}\n minDate={first}\n maxDate={last}\n onChange={(next) => {\n setDay(next);\n clearServer('allowLoginUntil');\n }}\n />\n </FormField>\n\n {native && fieldNames.phone && (\n <input\n type=\"hidden\"\n name={fieldNames.phone}\n value={values.phone}\n />\n )}\n {native && fieldNames.phoneConfirm && (\n <input\n type=\"hidden\"\n name={fieldNames.phoneConfirm}\n value={values.phoneConfirm}\n />\n )}\n {native && fieldNames.allowLoginUntil && (\n <input\n type=\"hidden\"\n name={fieldNames.allowLoginUntil}\n value={day ? isoDay(day) : ''}\n />\n )}\n {extraFields.map(([extra, value]) => (\n <input key={extra} type=\"hidden\" name={extra} value={value} />\n ))}\n\n <Button\n type=\"submit\"\n intent=\"primary\"\n size=\"lg\"\n loading={submit.busy}\n className=\"ds:w-full\"\n data-action=\"submit\"\n >\n {submitLabel ?? t('sendRegistrationLink.submit')}\n </Button>\n <p role=\"status\" className=\"ds:sr-only\">\n {submit.busy ? t('chat.message.status.sending') : ''}\n </p>\n </form>\n </Card.Body>\n </Card>\n </div>\n );\n },\n);\nSendRegistrationLinkForm.displayName = 'SendRegistrationLinkForm';\n"],"names":["SEND_REGISTRATION_LINK_FIELDS","rootVariants","cva","isoDay","date","format","readDay","value","day","parseISO","isValid","startOfDay","isPossiblePhone","e164","_a","parsePhoneNumberFromString","hasMessage","errors","SendRegistrationLinkForm","forwardRef","title","headingLevel","guidance","minDate","maxDate","initialValues","blockPaste","submitLabel","submitting","sent","sendAnotherHref","fieldNames","action","hiddenFields","onSubmit","className","rest","ref","t","i18n","useTranslation","titleId","useId","fieldIdBase","fieldId","field","formMessageId","native","Heading","tomorrow","useState","first","last","inRange","isBefore","isAfter","values","setValues","setDay","phonePossible","setPhonePossible","touched","setTouched","submitted","setSubmitted","serverErrors","setServerErrors","clearServer","previous","set","leave","emailMatch","useFieldMatch","phoneMatch","invalid","isEmail","required","formatDay","labels","due","whenDue","message","ownErrors","errorFor","form","useRef","formMessage","emailRef","emailConfirmRef","emailField","useStateBackedInput","emailConfirmField","focusField","_c","_b","focusTargetFor","messages","openedWithFieldMessage","summary","useErrorSummary","focusRequest","setFocusRequest","target","useEffect","submit","useRegistrationSubmit","answer","next","name","formAction","isSameSiteHref","formError","formMessageAnnounce","useFormMessageAnnounce","ownNames","extraFields","extra","anotherLink","isSafeHref","sentDay","jsx","Card","jsxs","Alert","Button","point","ErrorSummary","FormField","EmailInput","event","PhoneInput","meta","DatePicker"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqDO,MAAMA,IAAgC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAkGMC,KAAeC;AAAA,EACnB;AACF,GAEMC,KAAS,CAACC,MAAuBC,GAAOD,GAAM,YAAY,GAG1DE,IAAU,CAACC,MAAgD;AAC/D,MAAI,CAACA,EAAO;AACZ,QAAMC,IAAMC,GAASF,CAAK;AAC1B,SAAOG,GAAQF,CAAG,IAAIG,GAAWH,CAAG,IAAI;AAC1C,GAEMI,KAAkB,CAACC,MAAA;;AACvB,WAAAC,IAAAC,GAA2BF,CAAI,MAA/B,gBAAAC,EAAkC,iBAAgB;AAAA,GAE9CE,KAAa,CAACC,MAClB,OAAO,OAAOA,CAAM,EAAE,KAAK,OAAO,GAMvBC,KAA2BC;AAAA,EAItC,CACE;AAAA,IACE,OAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,eAAAC;AAAA,IACA,QAAAR;AAAA,IACA,YAAAS;AAAA,IACA,aAAAC;AAAA,IACA,YAAAC,KAAa;AAAA,IACb,MAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,QAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,GAAAC,GAAG,MAAAC,OAASC,GAAe,IAAI,GACjCC,IAAUC,EAAA,GACVC,KAAcD,EAAA,GACdE,IAAU,CAACC,MACf,GAAGF,EAAW,IAAIE,CAAK,IACnBC,IAAgBJ,EAAA,GAChBK,IAAShB,MAAe,QACxBiB,IAAU,IAAI3B,CAAY,IAI1B,CAAC4B,EAAQ,IAAIC,EAAS,MAAM;AAChC,YAAM1C,IAAMG,GAAW,oBAAI,MAAM;AACjCH,aAAAA,EAAI,QAAQA,EAAI,QAAA,IAAY,CAAC,GACtBA;AAAAA,IACT,CAAC,GACK2C,IAAQ7C,EAAQiB,EAAO,KAAK0B,IAC5BG,IAAO9C,EAAQkB,EAAO,GACtB6B,KAAU,CAAC7C,MACf,CAAC8C,GAAS9C,GAAK2C,CAAK,KAAK,EAAEC,KAAQG,GAAQ/C,GAAK4C,CAAI,IAIhD,CAACI,GAAQC,EAAS,IAAIP,EAAS,OAAO;AAAA,MAC1C,QAAOzB,KAAA,gBAAAA,EAAe,UAAS;AAAA,MAC/B,eAAcA,KAAA,gBAAAA,EAAe,iBAAgB;AAAA,MAC7C,QAAOA,KAAA,gBAAAA,EAAe,UAAS;AAAA,MAC/B,eAAcA,KAAA,gBAAAA,EAAe,iBAAgB;AAAA,IAAA,EAC7C,GACI,CAACjB,GAAKkD,EAAM,IAAIR;AAAA,MAA2B,MAC/C5C,EAAQmB,KAAA,gBAAAA,EAAe,eAAe;AAAA,IAAA,GAElC,CAACkC,IAAeC,EAAgB,IAAIV;AAAA,MAAS,MACjDtC,IAAgBa,KAAA,gBAAAA,EAAe,UAAS,EAAE;AAAA,IAAA,GAEtC,CAACoC,IAASC,EAAU,IAAIZ,EAE5B,OAAO,EAAE,OAAO,GAAQzB,KAAA,QAAAA,EAAe,OAAK,EAAI,GAC5C,CAACsC,GAAWC,CAAY,IAAId,EAAS,EAAK,GAC1C,CAACe,GAAcC,CAAe,IAClChB,EAAqC,MAAMjC,KAAU,EAAE,GAEnDkD,KAAc,CAACtB,MACnBqB;AAAA,MAAgB,CAACE,MACfA,EAASvB,CAAK,IAAI,EAAE,GAAGuB,GAAU,CAACvB,CAAK,GAAG,WAAcuB;AAAA,IAAA,GAEtDC,IAAM,CACVxB,GACAtC,MACG;AACH,MAAAkD,GAAU,CAACW,OAAc,EAAE,GAAGA,GAAU,CAACvB,CAAK,GAAGtC,EAAA,EAAQ,GACzD4D,GAAYtB,CAAK;AAAA,IACnB,GACMyB,IAAQ,CAACzB,MACbiB;AAAA,MAAW,CAACM,MACVA,EAASvB,CAAK,IAAIuB,IAAW,EAAE,GAAGA,GAAU,CAACvB,CAAK,GAAG,GAAA;AAAA,IAAK,GAMxD0B,IAAaC,GAAc;AAAA,MAC/B,OAAOhB,EAAO;AAAA,MACd,cAAcA,EAAO;AAAA,MACrB,MAAM;AAAA,MACN,WAAAO;AAAA,IAAA,CACD,GAGKU,IAAaD,GAAc;AAAA,MAC/B,OAAOhB,EAAO;AAAA,MACd,cAAcA,EAAO;AAAA,MACrB,MAAM;AAAA,MACN,WAAAO;AAAA,IAAA,CACD,GAEKW,KAAsD;AAAA,MAC1D,OAAO,CAACC,GAAQnB,EAAO,KAAK;AAAA,MAC5B,cAAcA,EAAO,iBAAiB,MAAM,CAACe,EAAW;AAAA,MACxD,OAAOf,EAAO,UAAU,MAAM,CAACG;AAAA,MAC/B,cAAcH,EAAO,iBAAiB,MAAM,CAACiB,EAAW;AAAA,MACxD,iBAAiB,CAACjE,KAAO,CAAC6C,GAAQ7C,CAAG;AAAA,IAAA,GAEjCoE,IAAWtC,EAAE,2BAA2B,GACxCuC,IAAY,CAACtE,MACjB,IAAI,KAAK,eAAegC,GAAK,UAAU,EAAE,WAAW,SAAA,CAAU,EAAE;AAAA,MAC9DhC;AAAA,IAAA,GAEEuE,IAAoD;AAAA,MACxD,OAAOxC,EAAE,wBAAwB;AAAA,MACjC,cAAcA,EAAE,+BAA+B;AAAA,MAC/C,OAAOA,EAAE,4BAA4B;AAAA,MACrC,cAAcA,EAAE,mCAAmC;AAAA,MACnD,iBAAiBA,EAAE,sCAAsC;AAAA,IAAA,GAKrDyC,KAAM,CAAClC,MACXkB,MACClB,MAAU,oBACPrC,MAAQ,SACRqD,GAAQhB,CAAK,MAAM,KACnBmC,IAAU,CAACnC,GAAkCoC,MACjDF,GAAIlC,CAAK,KAAK6B,GAAQ7B,CAAK,IAAIoC,IAAU,QACrCC,KAAmE;AAAA,MACvE,OAAOF;AAAA,QACL;AAAA,QACAxB,EAAO,UAAU,KAAKoB,IAAWtC,EAAE,sBAAsB;AAAA,MAAA;AAAA,MAE3D,cACEkB,EAAO,iBAAiB,KACpBwB,EAAQ,gBAAgBJ,CAAQ,IAChCL,EAAW;AAAA,MACjB,OAAOS;AAAA,QACL;AAAA,QACAxB,EAAO,UAAU,KAAKoB,IAAWtC,EAAE,+BAA+B;AAAA,MAAA;AAAA,MAEpE,cACEkB,EAAO,iBAAiB,KACpBwB,EAAQ,gBAAgBJ,CAAQ,IAChCH,EAAW;AAAA,MACjB,iBAAiBO;AAAA,QACf;AAAA,QACCxE,IAEG8B,EAAE,uCAAuC;AAAA,UACvC,KAAKuC,EAAU1B,CAAK;AAAA,UACpB,KAAKC,IAAOyB,EAAUzB,CAAI,IAAI;AAAA,QAAA,CAC/B,IAJDwB;AAAA,MAIC;AAAA,IACP,GAEIO,IAAW,CAACtC,MAChBoB,EAAapB,CAAK,KAAKqC,GAAUrC,CAAK,GAIlCuC,KAAOC,EAAwB,IAAI,GACnCC,KAAcD,EAAuB,IAAI,GACzCE,KAAWF,EAAgC,IAAI,GAC/CG,KAAkBH,EAAgC,IAAI,GAEtDI,KAAaC,GAAoBlC,EAAO,OAAO+B,EAAQ,GACvDI,KAAoBD;AAAA,MACxBlC,EAAO;AAAA,MACPgC;AAAA,IAAA,GAGII,KAAa,CAAC/C,MAA8C;;AAChE,UAAIA,MAAU,QAAQ;AACpB,SAAA/B,IAAAwE,GAAY,YAAZ,QAAAxE,EAAqB;AACrB;AAAA,MACF;AACA,OAAA+E,MAAAC,IAAAV,GAAK,YAAL,gBAAAU,EACI,cAA2B,gBAAgBjD,CAAK,gBADpD,QAAAgD,GAEI;AAAA,IACN,GACME,KAAiB,CAACC,MACtBhG,EAA8B,KAAK,CAAC6C,MAAUmD,EAASnD,CAAK,CAAC,MAC5D7B,GAAWgF,CAAQ,IAAK,SAAmB,SAExC,CAACC,EAAsB,IAAI/C;AAAA,MAAS,MACxClD,EAA8B,KAAK,CAAC6C,MAAU,GAAQ5B,KAAA,QAAAA,EAAS4B,GAAO;AAAA,IAAA,GAElEqD,IAAUC;AAAA,MACdnG;AAAA,MACAmF;AAAA,MACAc;AAAA,IAAA,GAEI,CAACG,GAAcC,EAAe,IAAInD,EAE9B,MAAM;AACd,YAAMoD,IAASL,KACX,SACAF,GAAe9E,KAAU,CAAA,CAAE;AAC/B,aAAOqF,IAAS,EAAE,QAAAA,EAAA,IAAW;AAAA,IAC/B,CAAC;AACD,IAAAC,GAAU,MAAM;AACd,MAAIH,KAAcR,GAAWQ,EAAa,MAAM;AAAA,IAElD,GAAG,CAACA,CAAY,CAAC;AAIjB,UAAMI,IAASC,GAAiD;AAAA,MAC9D,QAAAxF;AAAA,MACA,YAAAW;AAAA,MACA,QAAAmB;AAAA,MACA,SAAS;AAAA,MACT,cAAc,MACZ/C,EAA8B,KAAK,CAAC6C,MAAU6B,GAAQ7B,CAAK,CAAC;AAAA,MAC9D,WAAW,CAACA,MAAU;AACpB,QAAAmB,EAAa,EAAI,GACjBkC,EAAQ,KAAK,MAAMG,GAAgB,EAAE,QAAQxD,EAAA,CAAO,CAAC;AAAA,MACvD;AAAA,MACA,SAAS,MACPX,KAAA,gBAAAA,EAAW;AAAA,QACT,GAAGsB;AAAA,QACH,iBAAiBhD,IAAML,GAAOK,CAAG,IAAI;AAAA,MAAA;AAAA,MAEzC,UAAU,CAACkG,MAAW;AACpB,cAAMC,IAAmCD;AAEzC,QADAxC,EAAgByC,CAAI,GACf3F,GAAW2F,CAAI,MACpB3C,EAAa,EAAK,GAClBkC,EAAQ,KAAK,MAAM;AACjB,gBAAMI,IAASP,GAAeY,CAAI;AAClC,UAAIL,KAAQD,GAAgB,EAAE,QAAAC,GAAQ;AAAA,QACxC,CAAC;AAAA,MACH;AAAA,IAAA,CACD,GAIKM,KAAO,CAAC/D,MACZE,IAAShB,EAAWc,CAAK,IAAIA,GACzBgE,KACJ9D,KAAUf,KAAU8E,GAAe9E,CAAM,IAAIA,IAAS,QAClD+E,IAAY9C,EAAa,MACzB+C,KAAsBC;AAAA,MAC1BF;AAAA,MACAb,EAAQ,OAAO,SAAS;AAAA,IAAA,GAEpBgB,KAAW,IAAI,IAAI,OAAO,OAAOnF,KAAc,CAAA,CAAE,CAAC,GAClDoF,KAAcpE,IAChB,OAAO,QAAQd,MAAgB,CAAA,CAAE,EAAE;AAAA,MACjC,CAAC,CAACmF,CAAK,MAAM,CAACF,GAAS,IAAIE,CAAK;AAAA,IAAA,IAElC,CAAA,GACEC,KACJvF,KAAmBwF,GAAWxF,CAAe,IACzCA,IACA,QACAyF,KAAUjH,EAAQuB,KAAA,gBAAAA,EAAM,eAAe;AAE7C,WAAIA,IAEA,gBAAA2F;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAnF;AAAA,QACC,GAAGD;AAAA,QACJ,kBAAe;AAAA,QACf,cAAW;AAAA,QACX,WAAWnC,GAAa,EAAE,WAAAkC,GAAW;AAAA,QAErC,UAAA,gBAAAqF,EAACC,KAAK,SAAQ,YACZ,4BAACA,EAAK,MAAL,EAAU,WAAU,kDACnB,UAAA;AAAA,UAAA,gBAAAD,EAACxE,KAAQ,WAAU,mBAChB,UAAA5B,KAASkB,EAAE,4BAA4B,GAC1C;AAAA,UACA,gBAAAoF,EAACC,GAAA,EAAM,SAAQ,WAAU,aAAU,QACjC,UAAA;AAAA,YAAA,gBAAAH,EAACG,EAAM,OAAN,EAAY,IAAG,KACb,UAAArF,EAAE,gCAAgC,GACrC;AAAA,YACA,gBAAAkF,EAACG,EAAM,aAAN,EACE,UAAArF,EAAE,kCAAkC,EAAE,OAAOT,EAAK,MAAA,CAAO,EAAA,CAC5D;AAAA,YACC0F,MACC,gBAAAC,EAACG,EAAM,aAAN,EACE,YAAE,kCAAkC;AAAA,cACnC,MAAM9C,EAAU0C,EAAO;AAAA,YAAA,CACxB,EAAA,CACH;AAAA,UAAA,GAEJ;AAAA,UACCF,MACC,gBAAAG,EAACI,IAAA,EAAO,SAAO,IAAC,QAAO,aAAY,eAAY,gBAC7C,UAAA,gBAAAJ,EAAC,OAAE,MAAMH,IACN,UAAA/E,EAAE,kCAAkC,GACvC,EAAA,CACF;AAAA,QAAA,EAAA,CAEJ,EAAA,CACF;AAAA,MAAA;AAAA,IAAA,IAMJ,gBAAAkF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAnF;AAAA,QACC,GAAGD;AAAA,QACJ,kBAAe;AAAA,QACf,WAAWnC,GAAa,EAAE,WAAAkC,GAAW;AAAA,QAErC,UAAA,gBAAAqF,EAACC,KAAK,SAAQ,YACZ,4BAACA,EAAK,MAAL,EAAU,WAAU,kDACnB,UAAA;AAAA,UAAA,gBAAAD,EAACxE,GAAA,EAAQ,IAAIP,GAAS,WAAU,mBAC7B,UAAArB,KAASkB,EAAE,4BAA4B,EAAA,CAC1C;AAAA,UAEChB,KACC,gBAAAoG,EAACC,GAAA,EAAM,SAAQ,WAAU,aAAU,YACjC,UAAA;AAAA,YAAA,gBAAAH,EAACG,EAAM,OAAN,EAAY,IAAG,KAAK,YAAS,OAAM;AAAA,YACpC,gBAAAH,EAAC,MAAA,EAAG,WAAU,iGACX,YAAS,OAAO,IAAI,CAACK,MACpB,gBAAAL,EAAC,MAAA,EAAgB,UAAAK,EAAA,GAARA,CAAc,CACxB,EAAA,CACH;AAAA,UAAA,GACF;AAAA,UAGF,gBAAAH;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKtC;AAAA,cACL,YAAU;AAAA,cACV,QAAO;AAAA,cACP,QAAQyB;AAAA,cACR,mBAAiBpE;AAAA,cACjB,aAAW+D,EAAO,QAAQ;AAAA,cAC1B,UAAUA,EAAO;AAAA,cACjB,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAAgB;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,KAAK5B,EAAQ;AAAA,oBACb,cAAe7E,IAAe;AAAA,oBAC9B,oBAAkB0F,IAAYjE,IAAgB;AAAA,oBAC9C,QAAQoD,EAAQ,OAAO,IAAI,CAACrD,MAAU;AACpC,4BAAMoC,IAAUE,EAAStC,CAAK,KAAK;AACnC,6BAAO;AAAA,wBACL,OAAAA;AAAA,wBACA,SAAAoC;AAAA,wBACA,OAAOA,MAAYL,IAAWE,EAAOjC,CAAK,IAAI;AAAA,wBAC9C,UAAUD,EAAQC,CAAK;AAAA,sBAAA;AAAA,oBAE3B,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGFkE,KACC,gBAAAS;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,KAAKrC;AAAA,oBACL,IAAIxC;AAAA,oBACJ,SAAQ;AAAA,oBACR,UAAUkE;AAAA,oBACV,UAAU;AAAA,oBACV,cAAW;AAAA,oBAEX,UAAA,gBAAAQ,EAACG,EAAM,aAAN,EAAmB,UAAAZ,EAAA,CAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAIlC,gBAAAS;AAAA,kBAACO;AAAA,kBAAA;AAAA,oBACC,IAAInF,EAAQ,OAAO;AAAA,oBACnB,OAAOkC,EAAO;AAAA,oBACd,UAAQ;AAAA,oBACR,OAAOK,EAAS,OAAO;AAAA,oBACvB,eAAe,CAACe,EAAQ,MAAM,OAAO;AAAA,oBACrC,cAAW;AAAA,oBAEX,UAAA,gBAAAsB;AAAA,sBAACQ;AAAA,sBAAA;AAAA,wBACC,KAAKvC,GAAW;AAAA,wBAChB,MAAMmB,GAAK,OAAO;AAAA,wBAClB,cAAc;AAAA,wBACd,UAAUnB,GAAW;AAAA,0BAAM,CAACwC,MAC1B5D,EAAI,SAAS4D,EAAM,OAAO,KAAK;AAAA,wBAAA;AAAA,wBAEjC,QAAQ,MAAM3D,EAAM,OAAO;AAAA,wBAC3B,aAAY5C,KAAA,gBAAAA,EAAY,SAAS,aAAY;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC/C;AAAA,gBAAA;AAAA,gBAGF,gBAAA8F;AAAA,kBAACO;AAAA,kBAAA;AAAA,oBACC,IAAInF,EAAQ,cAAc;AAAA,oBAC1B,OAAOkC,EAAO;AAAA,oBACd,UAAQ;AAAA,oBACR,OAAOK,EAAS,cAAc;AAAA,oBAC9B,eAAe,CAACe,EAAQ,MAAM,cAAc;AAAA,oBAC5C,cAAW;AAAA,oBAEX,UAAA,gBAAAsB;AAAA,sBAACQ;AAAA,sBAAA;AAAA,wBACC,KAAKrC,GAAkB;AAAA,wBACvB,MAAMiB,GAAK,cAAc;AAAA,wBACzB,0BAAwB;AAAA,wBACxB,UAAUjB,GAAkB;AAAA,0BAAM,CAACsC,MACjC5D,EAAI,gBAAgB4D,EAAM,OAAO,KAAK;AAAA,wBAAA;AAAA,wBAExC,QAAQ,MAAM;AACZ,0BAAA3D,EAAM,cAAc,GACpBC,EAAW,aAAa,OAAA;AAAA,wBAC1B;AAAA,wBACA,aAAY7C,KAAA,gBAAAA,EAAY,SAAS,oBAAmB;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACtD;AAAA,gBAAA;AAAA,gBAGF,gBAAA8F;AAAA,kBAACO;AAAA,kBAAA;AAAA,oBACC,IAAInF,EAAQ,OAAO;AAAA,oBACnB,OAAOkC,EAAO;AAAA,oBACd,UAAQ;AAAA,oBACR,aAAaxC,EAAE,uCAAuC;AAAA,oBACtD,OAAO6C,EAAS,OAAO;AAAA,oBACvB,eAAe,CAACe,EAAQ,MAAM,OAAO;AAAA,oBACrC,cAAW;AAAA,oBACX,QAAQ,MAAM5B,EAAM,OAAO;AAAA,oBAI3B,UAAA,gBAAAkD;AAAA,sBAACU;AAAA,sBAAA;AAAA,wBACC,MAAMnF,IAAS,SAAY;AAAA,wBAC3B,OAAOS,EAAO;AAAA,wBACd,UAAU,CAAC3C,GAAMsH,MAAS;AACxB,0BAAA9D,EAAI,SAASxD,CAAI,GACjB+C,GAAiBuE,EAAK,UAAU;AAAA,wBAClC;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA;AAAA,gBAGF,gBAAAX;AAAA,kBAACO;AAAA,kBAAA;AAAA,oBACC,IAAInF,EAAQ,cAAc;AAAA,oBAC1B,OAAOkC,EAAO;AAAA,oBACd,UAAQ;AAAA,oBACR,OAAOK,EAAS,cAAc;AAAA,oBAC9B,eAAe,CAACe,EAAQ,MAAM,cAAc;AAAA,oBAC5C,cAAW;AAAA,oBACX,QAAQ,MAAM;AACZ,sBAAA5B,EAAM,cAAc,GACpBG,EAAW,aAAa,OAAA;AAAA,oBAC1B;AAAA,oBACA,gBACE/C,KAAA,QAAAA,EAAY,SAAS,kBACjB,CAACuG,MAAUA,EAAM,eAAA,IACjB;AAAA,oBAGN,UAAA,gBAAAT;AAAA,sBAACU;AAAA,sBAAA;AAAA,wBACC,MAAMnF,IAAS,SAAY;AAAA,wBAC3B,OAAOS,EAAO;AAAA,wBACd,UAAU,CAAC3C,MAASwD,EAAI,gBAAgBxD,CAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC9C;AAAA,gBAAA;AAAA,gBAGF,gBAAA2G;AAAA,kBAACO;AAAA,kBAAA;AAAA,oBACC,IAAInF,EAAQ,iBAAiB;AAAA,oBAC7B,OAAOkC,EAAO;AAAA,oBACd,UAAQ;AAAA,oBACR,OAAOK,EAAS,iBAAiB;AAAA,oBACjC,eAAe,CAACe,EAAQ,MAAM,iBAAiB;AAAA,oBAC/C,cAAW;AAAA,oBAEX,UAAA,gBAAAsB;AAAA,sBAACY;AAAA,sBAAA;AAAA,wBACC,OAAO5H;AAAA,wBACP,SAAS2C;AAAA,wBACT,SAASC;AAAA,wBACT,UAAU,CAACuD,MAAS;AAClB,0BAAAjD,GAAOiD,CAAI,GACXxC,GAAY,iBAAiB;AAAA,wBAC/B;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA;AAAA,gBAGDpB,KAAUhB,EAAW,SACpB,gBAAAyF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAMzF,EAAW;AAAA,oBACjB,OAAOyB,EAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGjBT,KAAUhB,EAAW,gBACpB,gBAAAyF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAMzF,EAAW;AAAA,oBACjB,OAAOyB,EAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGjBT,KAAUhB,EAAW,mBACpB,gBAAAyF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAMzF,EAAW;AAAA,oBACjB,OAAOvB,IAAML,GAAOK,CAAG,IAAI;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAG9B2G,GAAY,IAAI,CAAC,CAACC,GAAO7G,CAAK,MAC7B,gBAAAiH,EAAC,SAAA,EAAkB,MAAK,UAAS,MAAMJ,GAAO,OAAA7G,EAAA,GAAlC6G,CAAgD,CAC7D;AAAA,gBAED,gBAAAI;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,QAAO;AAAA,oBACP,MAAK;AAAA,oBACL,SAASpB,EAAO;AAAA,oBAChB,WAAU;AAAA,oBACV,eAAY;AAAA,oBAEX,UAAA7E,MAAeW,EAAE,6BAA6B;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEjD,gBAAAkF,EAAC,KAAA,EAAE,MAAK,UAAS,WAAU,cACxB,UAAAhB,EAAO,OAAOlE,EAAE,6BAA6B,IAAI,GAAA,CACpD;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACApB,GAAyB,cAAc;"}
1
+ {"version":3,"file":"send-registration-link-form-yLSfcaPk.js","sources":["../../src/patterns/send-registration-link-form/send-registration-link-form.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* SendRegistrationLinkForm: the form sales use in the admin area to */\n/* send a doctor a registration link. */\n/* */\n/* Email, confirm email, mobile phone, confirm phone and the last day the link allows */\n/* login. Every prop is data, so a server-rendered page can mount it */\n/* from JSON. The browser posts a real form to the host's own field */\n/* names; the card checks what a browser can check first. The host */\n/* keeps every server rule. The link itself is never shown. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { cva } from 'class-variance-authority';\nimport {\n format,\n isAfter,\n isBefore,\n isValid,\n parseISO,\n startOfDay,\n} from 'date-fns';\nimport { parsePhoneNumberFromString } from 'libphonenumber-js/min';\nimport isEmail from 'validator/lib/isEmail';\nimport { Alert } from '../../components/alert';\nimport { Button } from '../../components/button';\nimport { Card } from '../../components/card';\nimport { DatePicker } from '../../components/date-picker';\nimport { EmailInput } from '../../components/email-input';\nimport { ErrorSummary } from '../../components/error-summary';\nimport { FormField } from '../../components/form-field';\nimport { PhoneInput } from '../../components/phone-input';\nimport { isSafeHref, isSameSiteHref } from '../../components/_shared/safe-href';\nimport { useStateBackedInput } from '../../components/_shared/use-state-backed-input';\nimport { useFieldMatch } from '../../hooks/use-field-match';\nimport {\n useErrorSummary,\n useFormMessageAnnounce,\n} from '../_shared/use-error-summary';\nimport { useRegistrationSubmit } from '../registration-form/use-registration-submit';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/** The fields of the form, in the order they appear. */\nexport const SEND_REGISTRATION_LINK_FIELDS = [\n 'email',\n 'emailConfirm',\n 'phone',\n 'phoneConfirm',\n 'allowLoginUntil',\n] as const;\n\nexport type SendRegistrationLinkField =\n (typeof SEND_REGISTRATION_LINK_FIELDS)[number];\n\n/** What `onSubmit` receives once every check has passed. */\nexport interface SendRegistrationLinkValues {\n email: string;\n /** As typed. It matches `email` apart from case and outer spaces. */\n emailConfirm: string;\n /** In E.164 form, e.g. `+393331234567`. */\n phone: string;\n /** In E.164 form. Equal to `phone`. */\n phoneConfirm: string;\n /** `yyyy-MM-dd`. */\n allowLoginUntil: string;\n}\n\n/** Values to show when the form opens, e.g. after a refused post.\n * `allowLoginUntil` is `yyyy-MM-dd`. */\nexport type SendRegistrationLinkInitialValues =\n Partial<SendRegistrationLinkValues>;\n\n/** Messages from the server, already translated by the host: one per\n * field, plus `form` for a message about the whole form. */\nexport type SendRegistrationLinkErrors = Partial<\n Record<SendRegistrationLinkField | 'form', string>\n>;\n\n/** The host's own form field names, e.g. `send_registration_link[email]`. */\nexport type SendRegistrationLinkFieldNames = Partial<\n Record<SendRegistrationLinkField, string>\n>;\n\n/** Guidance for the person sending, in the host's own words. */\nexport interface SendRegistrationLinkGuidance {\n /** The notice's heading. Pass it translated. */\n title: string;\n /** One short point each. Pass them translated. Plain text. */\n points: readonly string[];\n}\n\n/** The result of a send, shown instead of the form. */\nexport interface SendRegistrationLinkSent {\n /** The address the email went to. */\n email: string;\n /** The last day the link allows login, `yyyy-MM-dd`. */\n allowLoginUntil: string;\n}\n\nexport interface SendRegistrationLinkFormProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title' | 'onSubmit'\n> {\n /** Replaces the heading \"Send a registration link\". Pass it translated. */\n title?: string;\n /** The heading's level. Default 2, for a page that has its own `h1`. */\n headingLevel?: 1 | 2 | 3;\n /** A warning-style notice above the form. The kit has no copy for it. */\n guidance?: SendRegistrationLinkGuidance;\n /** The first day that can be chosen, `yyyy-MM-dd`. Default: tomorrow. */\n minDate?: string;\n /** The last day that can be chosen, `yyyy-MM-dd`. Default: no limit.\n * Keep it equal to the server's. */\n maxDate?: string;\n /** Values to show when the form opens. Read once. */\n initialValues?: SendRegistrationLinkInitialValues;\n /** Messages from the server. Each shows on its field until the user\n * changes that field, and the form takes focus when they are present\n * at load. */\n errors?: SendRegistrationLinkErrors;\n /** Fields that refuse paste, so the user types them. Default: none.\n * Refusing a paste in `phoneConfirm` is silent: use it with care. */\n blockPaste?: readonly ('email' | 'emailConfirm' | 'phoneConfirm')[];\n /** Replaces the button's \"Send registration link\". Translated. */\n submitLabel?: string;\n /** True while a React host sends the values. */\n submitting?: boolean;\n /** Shows the result instead of the form. */\n sent?: SendRegistrationLinkSent;\n /** Where \"Send another link\" leads. Same-site path or full address. */\n sendAnotherHref?: string;\n /** For a native form post: the host's field names. When set, the\n * browser posts the form. */\n fieldNames?: SendRegistrationLinkFieldNames;\n /** Where the post goes. Default: the current address. Same site only. */\n action?: string;\n /** Extra hidden inputs for a native post, by name: the CSRF token. */\n hiddenFields?: Readonly<Record<string, string>>;\n /** For React hosts: called once every check has passed. Not called when\n * `fieldNames` is set. */\n onSubmit?: (values: SendRegistrationLinkValues) => void;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n 'ds:w-full ds:[max-inline-size:36rem] ds:text-start ds:text-[var(--foreground)]',\n);\n\nconst isoDay = (date: Date): string => format(date, 'yyyy-MM-dd');\n\n/** A `yyyy-MM-dd` string as a local date, or nothing. */\nconst readDay = (value: string | undefined): Date | undefined => {\n if (!value) return undefined;\n const day = parseISO(value);\n return isValid(day) ? startOfDay(day) : undefined;\n};\n\nconst isPossiblePhone = (e164: string): boolean =>\n parsePhoneNumberFromString(e164)?.isPossible() ?? false;\n\nconst hasMessage = (errors: SendRegistrationLinkErrors): boolean =>\n Object.values(errors).some(Boolean);\n\n/* -------------------------------------------------------------------- */\n/* SendRegistrationLinkForm */\n/* -------------------------------------------------------------------- */\n\nexport const SendRegistrationLinkForm = forwardRef<\n HTMLDivElement,\n SendRegistrationLinkFormProps\n>(\n (\n {\n title,\n headingLevel = 2,\n guidance,\n minDate,\n maxDate,\n initialValues,\n errors,\n blockPaste,\n submitLabel,\n submitting = false,\n sent,\n sendAnotherHref,\n fieldNames,\n action,\n hiddenFields,\n onSubmit,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const titleId = useId();\n const fieldIdBase = useId();\n const fieldId = (field: SendRegistrationLinkField) =>\n `${fieldIdBase}-${field}`;\n const formMessageId = useId();\n const native = fieldNames !== undefined;\n const Heading = `h${headingLevel}` as const;\n\n // The allowed days, whole days in the visitor's time zone. The default\n // first day is tomorrow, worked out once.\n const [tomorrow] = useState(() => {\n const day = startOfDay(new Date());\n day.setDate(day.getDate() + 1);\n return day;\n });\n const first = readDay(minDate) ?? tomorrow;\n const last = readDay(maxDate);\n const inRange = (day: Date) =>\n !isBefore(day, first) && !(last && isAfter(day, last));\n\n /* ------------------------------ State ----------------------------- */\n\n const [values, setValues] = useState(() => ({\n email: initialValues?.email ?? '',\n emailConfirm: initialValues?.emailConfirm ?? '',\n phone: initialValues?.phone ?? '',\n phoneConfirm: initialValues?.phoneConfirm ?? '',\n }));\n const [day, setDay] = useState<Date | undefined>(() =>\n readDay(initialValues?.allowLoginUntil),\n );\n const [phonePossible, setPhonePossible] = useState(() =>\n isPossiblePhone(initialValues?.phone ?? ''),\n );\n const [touched, setTouched] = useState<\n Partial<Record<SendRegistrationLinkField, boolean>>\n >(() => ({ email: Boolean(initialValues?.email) }));\n const [submitted, setSubmitted] = useState(false);\n const [serverErrors, setServerErrors] =\n useState<SendRegistrationLinkErrors>(() => errors ?? {});\n\n const clearServer = (field: SendRegistrationLinkField) =>\n setServerErrors((previous) =>\n previous[field] ? { ...previous, [field]: undefined } : previous,\n );\n const set = (\n field: 'email' | 'emailConfirm' | 'phone' | 'phoneConfirm',\n value: string,\n ) => {\n setValues((previous) => ({ ...previous, [field]: value }));\n clearServer(field);\n };\n const leave = (field: SendRegistrationLinkField) =>\n setTouched((previous) =>\n previous[field] ? previous : { ...previous, [field]: true },\n );\n\n /* ---------------------------- Validation -------------------------- */\n\n // The same comparison the server makes: trimmed, ignoring case.\n const emailMatch = useFieldMatch({\n value: values.email,\n confirmValue: values.emailConfirm,\n kind: 'email',\n submitted,\n });\n\n // Both phones are E.164 values, the ones the form posts.\n const phoneMatch = useFieldMatch({\n value: values.phone,\n confirmValue: values.phoneConfirm,\n kind: 'phone',\n submitted,\n });\n\n const invalid: Record<SendRegistrationLinkField, boolean> = {\n email: !isEmail(values.email),\n emailConfirm: values.emailConfirm === '' || !emailMatch.matches,\n phone: values.phone === '' || !phonePossible,\n phoneConfirm: values.phoneConfirm === '' || !phoneMatch.matches,\n allowLoginUntil: !day || !inRange(day),\n };\n const required = t('registrationForm.required');\n const formatDay = (value: Date) =>\n new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }).format(\n value,\n );\n const labels: Record<SendRegistrationLinkField, string> = {\n email: t('registrationForm.email'),\n emailConfirm: t('registrationForm.emailConfirm'),\n phone: t('sendRegistrationLink.phone'),\n phoneConfirm: t('sendRegistrationLink.phoneConfirm'),\n allowLoginUntil: t('sendRegistrationLink.allowLoginUntil'),\n };\n // A message shows once the user has left the field or tried to submit.\n // A date waits for a submit, or a value out of range: leaving the\n // field to open the calendar is not a mistake.\n const due = (field: SendRegistrationLinkField) =>\n submitted ||\n (field === 'allowLoginUntil'\n ? day !== undefined\n : touched[field] === true);\n const whenDue = (field: SendRegistrationLinkField, message: string) =>\n due(field) && invalid[field] ? message : undefined;\n const ownErrors: Record<SendRegistrationLinkField, string | undefined> = {\n email: whenDue(\n 'email',\n values.email === '' ? required : t('inputs.email.invalid'),\n ),\n emailConfirm:\n values.emailConfirm === ''\n ? whenDue('emailConfirm', required)\n : emailMatch.error,\n phone: whenDue(\n 'phone',\n values.phone === '' ? required : t('registrationForm.phoneInvalid'),\n ),\n phoneConfirm:\n values.phoneConfirm === ''\n ? whenDue('phoneConfirm', required)\n : phoneMatch.error,\n allowLoginUntil: whenDue(\n 'allowLoginUntil',\n !day\n ? required\n : t('sendRegistrationLink.dateOutOfRange', {\n min: formatDay(first),\n max: last ? formatDay(last) : '…',\n }),\n ),\n };\n const errorFor = (field: SendRegistrationLinkField) =>\n serverErrors[field] ?? ownErrors[field];\n\n /* ------------------------------ Focus ----------------------------- */\n\n const form = useRef<HTMLFormElement>(null);\n const formMessage = useRef<HTMLDivElement>(null);\n const emailRef = useRef<HTMLInputElement | null>(null);\n const emailConfirmRef = useRef<HTMLInputElement | null>(null);\n // The addresses stay out of the inputs' `value` attributes.\n const emailField = useStateBackedInput(values.email, emailRef);\n const emailConfirmField = useStateBackedInput(\n values.emailConfirm,\n emailConfirmRef,\n );\n\n const focusField = (field: SendRegistrationLinkField | 'form') => {\n if (field === 'form') {\n formMessage.current?.focus();\n return;\n }\n form.current\n ?.querySelector<HTMLElement>(`[data-field=\"${field}\"] input`)\n ?.focus();\n };\n const focusTargetFor = (messages: SendRegistrationLinkErrors) =>\n SEND_REGISTRATION_LINK_FIELDS.find((field) => messages[field]) ??\n (hasMessage(messages) ? ('form' as const) : undefined);\n\n const [openedWithFieldMessage] = useState(() =>\n SEND_REGISTRATION_LINK_FIELDS.some((field) => Boolean(errors?.[field])),\n );\n const summary = useErrorSummary(\n SEND_REGISTRATION_LINK_FIELDS,\n errorFor,\n openedWithFieldMessage,\n );\n const [focusRequest, setFocusRequest] = useState<{\n target: SendRegistrationLinkField | 'form';\n } | null>(() => {\n const target = openedWithFieldMessage\n ? undefined\n : focusTargetFor(errors ?? {});\n return target ? { target } : null;\n });\n useEffect(() => {\n if (focusRequest) focusField(focusRequest.target);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusRequest]);\n\n /* ------------------------------ Submit ---------------------------- */\n\n const submit = useRegistrationSubmit<SendRegistrationLinkField>({\n errors,\n submitting,\n native,\n captcha: false,\n firstProblem: () =>\n SEND_REGISTRATION_LINK_FIELDS.find((field) => invalid[field]),\n onRefused: (field) => {\n setSubmitted(true);\n summary.open(() => setFocusRequest({ target: field }));\n },\n deliver: () =>\n onSubmit?.({\n ...values,\n allowLoginUntil: day ? isoDay(day) : '',\n }),\n onAnswer: (answer) => {\n const next: SendRegistrationLinkErrors = answer;\n setServerErrors(next);\n if (!hasMessage(next)) return;\n setSubmitted(false);\n summary.open(() => {\n const target = focusTargetFor(next);\n if (target) setFocusRequest({ target });\n });\n },\n });\n\n /* ------------------------------ Render ---------------------------- */\n\n const name = (field: SendRegistrationLinkField) =>\n native ? fieldNames[field] : field;\n const formAction =\n native && action && isSameSiteHref(action) ? action : undefined;\n const formError = serverErrors.form;\n const formMessageAnnounce = useFormMessageAnnounce(\n formError,\n summary.listed.length > 0,\n );\n const ownNames = new Set(Object.values(fieldNames ?? {}));\n const extraFields = native\n ? Object.entries(hiddenFields ?? {}).filter(\n ([extra]) => !ownNames.has(extra),\n )\n : [];\n const anotherLink =\n sendAnotherHref && isSafeHref(sendAnotherHref)\n ? sendAnotherHref\n : undefined;\n const sentDay = readDay(sent?.allowLoginUntil);\n\n if (sent) {\n return (\n <div\n ref={ref}\n {...rest}\n data-component=\"send-registration-link-form\"\n data-state=\"sent\"\n className={rootVariants({ className })}\n >\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]\">\n <Heading className=\"type-title-card\">\n {title ?? t('sendRegistrationLink.title')}\n </Heading>\n <Alert variant=\"success\" data-slot=\"sent\">\n <Alert.Title as=\"p\">\n {t('sendRegistrationLink.sentTitle')}\n </Alert.Title>\n <Alert.Description>\n {t('sendRegistrationLink.sentEmail', { email: sent.email })}\n </Alert.Description>\n {sentDay && (\n <Alert.Description>\n {t('sendRegistrationLink.sentUntil', {\n date: formatDay(sentDay),\n })}\n </Alert.Description>\n )}\n </Alert>\n {anotherLink && (\n <Button asChild intent=\"secondary\" data-action=\"send-another\">\n <a href={anotherLink}>\n {t('sendRegistrationLink.sendAnother')}\n </a>\n </Button>\n )}\n </Card.Body>\n </Card>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n {...rest}\n data-component=\"send-registration-link-form\"\n className={rootVariants({ className })}\n >\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]\">\n <Heading id={titleId} className=\"type-title-card\">\n {title ?? t('sendRegistrationLink.title')}\n </Heading>\n\n {guidance && (\n <Alert variant=\"warning\" data-slot=\"guidance\">\n <Alert.Title as=\"p\">{guidance.title}</Alert.Title>\n <ul className=\"ds:mx-0 ds:mb-0 ds:mt-[var(--spacing-xs)] ds:ps-[var(--spacing-lg)] ds:list-disc type-body-sm\">\n {guidance.points.map((point) => (\n <li key={point}>{point}</li>\n ))}\n </ul>\n </Alert>\n )}\n\n <form\n ref={form}\n noValidate\n method=\"post\"\n action={formAction}\n aria-labelledby={titleId}\n aria-busy={submit.busy || undefined}\n onSubmit={submit.handleSubmit}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <ErrorSummary\n ref={summary.ref}\n headingLevel={(headingLevel + 1) as 2 | 3 | 4}\n aria-describedby={formError ? formMessageId : undefined}\n errors={summary.listed.map((field) => {\n const message = errorFor(field) ?? '';\n return {\n field,\n message,\n label: message === required ? labels[field] : undefined,\n targetId: fieldId(field),\n };\n })}\n />\n\n {formError && (\n <Alert\n ref={formMessage}\n id={formMessageId}\n variant=\"error\"\n announce={formMessageAnnounce}\n tabIndex={-1}\n data-field=\"form\"\n >\n <Alert.Description>{formError}</Alert.Description>\n </Alert>\n )}\n\n <FormField\n id={fieldId('email')}\n label={labels.email}\n required\n error={errorFor('email')}\n announceError={!summary.lists('email')}\n data-field=\"email\"\n >\n <EmailInput\n ref={emailField.ref}\n name={name('email')}\n errorMessage={null}\n onChange={emailField.quiet((event) =>\n set('email', event.target.value),\n )}\n onBlur={() => leave('email')}\n blockPaste={blockPaste?.includes('email') ?? false}\n />\n </FormField>\n\n <FormField\n id={fieldId('emailConfirm')}\n label={labels.emailConfirm}\n required\n error={errorFor('emailConfirm')}\n announceError={!summary.lists('emailConfirm')}\n data-field=\"emailConfirm\"\n >\n <EmailInput\n ref={emailConfirmField.ref}\n name={name('emailConfirm')}\n disableBuiltInValidation\n onChange={emailConfirmField.quiet((event) =>\n set('emailConfirm', event.target.value),\n )}\n onBlur={() => {\n leave('emailConfirm');\n emailMatch.confirmProps.onBlur();\n }}\n blockPaste={blockPaste?.includes('emailConfirm') ?? false}\n />\n </FormField>\n\n <FormField\n id={fieldId('phone')}\n label={labels.phone}\n required\n description={t('sendRegistrationLink.phoneDescription')}\n error={errorFor('phone')}\n announceError={!summary.lists('phone')}\n data-field=\"phone\"\n onBlur={() => leave('phone')}\n >\n {/* The visible input holds the number as typed; a hidden\n input carries the full international number. */}\n <PhoneInput\n name={native ? undefined : 'phone'}\n value={values.phone}\n onChange={(e164, meta) => {\n set('phone', e164);\n setPhonePossible(meta.isPossible);\n }}\n />\n </FormField>\n\n <FormField\n id={fieldId('phoneConfirm')}\n label={labels.phoneConfirm}\n required\n error={errorFor('phoneConfirm')}\n announceError={!summary.lists('phoneConfirm')}\n data-field=\"phoneConfirm\"\n onBlur={() => {\n leave('phoneConfirm');\n phoneMatch.confirmProps.onBlur();\n }}\n onPasteCapture={\n blockPaste?.includes('phoneConfirm')\n ? (event) => event.preventDefault()\n : undefined\n }\n >\n <PhoneInput\n name={native ? undefined : 'phoneConfirm'}\n value={values.phoneConfirm}\n onChange={(e164) => set('phoneConfirm', e164)}\n />\n </FormField>\n\n <FormField\n id={fieldId('allowLoginUntil')}\n label={labels.allowLoginUntil}\n required\n error={errorFor('allowLoginUntil')}\n announceError={!summary.lists('allowLoginUntil')}\n data-field=\"allowLoginUntil\"\n >\n <DatePicker\n value={day}\n minDate={first}\n maxDate={last}\n onChange={(next) => {\n setDay(next);\n clearServer('allowLoginUntil');\n }}\n />\n </FormField>\n\n {native && fieldNames.phone && (\n <input\n type=\"hidden\"\n name={fieldNames.phone}\n value={values.phone}\n />\n )}\n {native && fieldNames.phoneConfirm && (\n <input\n type=\"hidden\"\n name={fieldNames.phoneConfirm}\n value={values.phoneConfirm}\n />\n )}\n {native && fieldNames.allowLoginUntil && (\n <input\n type=\"hidden\"\n name={fieldNames.allowLoginUntil}\n value={day ? isoDay(day) : ''}\n />\n )}\n {extraFields.map(([extra, value]) => (\n <input key={extra} type=\"hidden\" name={extra} value={value} />\n ))}\n\n <Button\n type=\"submit\"\n intent=\"primary\"\n size=\"lg\"\n loading={submit.busy}\n className=\"ds:w-full\"\n data-action=\"submit\"\n >\n {submitLabel ?? t('sendRegistrationLink.submit')}\n </Button>\n <p role=\"status\" className=\"ds:sr-only\">\n {submit.busy ? t('chat.message.status.sending') : ''}\n </p>\n </form>\n </Card.Body>\n </Card>\n </div>\n );\n },\n);\nSendRegistrationLinkForm.displayName = 'SendRegistrationLinkForm';\n"],"names":["SEND_REGISTRATION_LINK_FIELDS","rootVariants","cva","isoDay","date","format","readDay","value","day","parseISO","isValid","startOfDay","isPossiblePhone","e164","_a","parsePhoneNumberFromString","hasMessage","errors","SendRegistrationLinkForm","forwardRef","title","headingLevel","guidance","minDate","maxDate","initialValues","blockPaste","submitLabel","submitting","sent","sendAnotherHref","fieldNames","action","hiddenFields","onSubmit","className","rest","ref","t","i18n","useTranslation","titleId","useId","fieldIdBase","fieldId","field","formMessageId","native","Heading","tomorrow","useState","first","last","inRange","isBefore","isAfter","values","setValues","setDay","phonePossible","setPhonePossible","touched","setTouched","submitted","setSubmitted","serverErrors","setServerErrors","clearServer","previous","set","leave","emailMatch","useFieldMatch","phoneMatch","invalid","isEmail","required","formatDay","labels","due","whenDue","message","ownErrors","errorFor","form","useRef","formMessage","emailRef","emailConfirmRef","emailField","useStateBackedInput","emailConfirmField","focusField","_c","_b","focusTargetFor","messages","openedWithFieldMessage","summary","useErrorSummary","focusRequest","setFocusRequest","target","useEffect","submit","useRegistrationSubmit","answer","next","name","formAction","isSameSiteHref","formError","formMessageAnnounce","useFormMessageAnnounce","ownNames","extraFields","extra","anotherLink","isSafeHref","sentDay","jsx","Card","jsxs","Alert","Button","point","ErrorSummary","FormField","EmailInput","event","PhoneInput","meta","DatePicker"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { jsxs as b, jsx as l } from "react/jsx-runtime";
2
- import { forwardRef as Z, useId as tt, useCallback as O, useRef as et, useMemo as rt } from "react";
1
+ import { jsxs as b, jsx as n } from "react/jsx-runtime";
2
+ import { forwardRef as tt, useId as et, useCallback as O, useRef as st, useMemo as rt } from "react";
3
3
  import { c as V } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as B } from "react-i18next";
5
- import { u as st } from "./use-count-up-BLLetaZ8.js";
5
+ import { u as at } from "./use-count-up-BLLetaZ8.js";
6
6
  const P = V("ds:flex ds:flex-col ds:h-full", {
7
7
  variants: {
8
8
  variant: {
@@ -106,7 +106,7 @@ const P = V("ds:flex ds:flex-col ds:h-full", {
106
106
  variant: "default",
107
107
  intent: "foreground"
108
108
  }
109
- }), at = V(
109
+ }), nt = V(
110
110
  "ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-label",
111
111
  {
112
112
  variants: {
@@ -122,74 +122,75 @@ const P = V("ds:flex ds:flex-col ds:h-full", {
122
122
  tone: "neutral"
123
123
  }
124
124
  }
125
- ), nt = { up: "↑", down: "↓", flat: "→" }, it = {
125
+ ), it = { up: "↑", down: "↓", flat: "→" }, dt = {
126
126
  up: "stat.trend.up",
127
127
  down: "stat.trend.down",
128
128
  flat: "stat.trend.flat"
129
129
  };
130
- function dt({
131
- trend: a,
130
+ function ct({
131
+ trend: i,
132
132
  delta: t,
133
133
  deltaFormat: u = "decimal",
134
- locale: n,
134
+ locale: d,
135
135
  polarity: e = "higher-is-better"
136
136
  }) {
137
- const { t: i, i18n: m } = B("ui"), d = typeof t == "string" ? t : new Intl.NumberFormat(n ?? m.language, {
137
+ const { t: c, i18n: m } = B("ui"), l = typeof t == "string" ? t : new Intl.NumberFormat(d ?? m.language, {
138
138
  style: u === "percent" ? "percent" : "decimal"
139
- }).format(u === "percent" ? t / 100 : t), r = a === "flat" || e === "neutral" ? "neutral" : a === "up" == (e === "higher-is-better") ? "better" : "worse";
140
- return /* @__PURE__ */ b("span", { className: at({ tone: r }), "data-trend-tone": r, children: [
141
- /* @__PURE__ */ l("span", { "aria-hidden": "true", children: nt[a] }),
142
- /* @__PURE__ */ l("span", { className: "ds:sr-only", children: i(it[a]) }),
143
- d,
139
+ }).format(u === "percent" ? t / 100 : t), r = i === "flat" || e === "neutral" ? "neutral" : i === "up" == (e === "higher-is-better") ? "better" : "worse";
140
+ return /* @__PURE__ */ b("span", { className: nt({ tone: r }), "data-trend-tone": r, children: [
141
+ /* @__PURE__ */ n("span", { "aria-hidden": "true", children: it[i] }),
142
+ /* @__PURE__ */ n("span", { className: "ds:sr-only", children: c(dt[i]) }),
143
+ l,
144
144
  r === "neutral" ? null : /* @__PURE__ */ b("span", { className: "ds:sr-only", children: [
145
145
  " ",
146
- i(r === "better" ? "stat.trend.better" : "stat.trend.worse")
146
+ c(r === "better" ? "stat.trend.better" : "stat.trend.worse")
147
147
  ] })
148
148
  ] });
149
149
  }
150
- function ot(a, t) {
151
- const u = a.trim();
150
+ function lt(i, t) {
151
+ const u = i.trim();
152
152
  if (u === "") return null;
153
- let n = "", e = u;
154
- e.startsWith("+") ? (n = "+", e = e.slice(1).trimStart()) : (e.startsWith("-") || e.startsWith("−")) && (n = "-", e = e.slice(1).trimStart());
155
- let i = "";
153
+ let d = "", e = u;
154
+ e.startsWith("+") ? (d = "+", e = e.slice(1).trimStart()) : (e.startsWith("-") || e.startsWith("−")) && (d = "-", e = e.slice(1).trimStart());
155
+ let c = "";
156
156
  const m = e.match(/[KMB]$/i);
157
- m && (i = m[0], e = e.slice(0, -1).trimEnd());
158
- let d = "", r = ".";
157
+ m && (c = m[0], e = e.slice(0, -1).trimEnd());
158
+ let l = "", r = ".";
159
159
  try {
160
- const h = new Intl.NumberFormat(t).formatToParts(12345.6);
161
- for (const c of h)
162
- c.type === "group" ? d = c.value : c.type === "decimal" && (r = c.value);
160
+ const f = new Intl.NumberFormat(t).formatToParts(12345.6);
161
+ for (const o of f)
162
+ o.type === "group" ? l = o.value : o.type === "decimal" && (r = o.value);
163
163
  } catch {
164
164
  }
165
165
  const g = e.match(/^(\d+)\.(\d+)$/);
166
- if (g && !(g[2].length === 3 && d === ".")) {
167
- const c = Number.parseFloat(e);
168
- if (Number.isFinite(c))
169
- return { target: c, sign: n, suffix: i };
166
+ if (g && !(g[2].length === 3 && l === ".")) {
167
+ const o = Number.parseFloat(e);
168
+ if (Number.isFinite(o))
169
+ return { target: o, sign: d, suffix: c };
170
170
  }
171
- let o = e;
172
- d !== "" && (o = o.split(d).join("")), r !== "." && (o = o.split(r).join(".")), o = o.replace(/[\s\u00A0\u202F]/g, "");
173
- const f = Number.parseFloat(o);
174
- return Number.isFinite(f) ? { target: f, sign: n, suffix: i } : null;
171
+ let s = e;
172
+ l !== "" && (s = s.split(l).join("")), r !== "." && (s = s.split(r).join(".")), s = s.replace(/[\s\u00A0\u202F]/g, "");
173
+ const h = Number.parseFloat(s);
174
+ return Number.isFinite(h) ? { target: h, sign: d, suffix: c } : null;
175
175
  }
176
- const ct = Z(
176
+ const ot = tt(
177
177
  ({
178
- label: a,
178
+ label: i,
179
179
  value: t,
180
180
  format: u,
181
- currency: n,
181
+ currency: d,
182
182
  locale: e,
183
- trend: i,
183
+ trend: c,
184
184
  trendPolarity: m,
185
- delta: d,
185
+ delta: l,
186
186
  deltaFormat: r = "decimal",
187
187
  icon: g,
188
- loading: o = !1,
188
+ info: s,
189
+ loading: h = !1,
189
190
  animate: f = !1,
190
- animateOnEveryView: h = !1,
191
- animateDurationMs: c = 1600,
192
- animateLocale: K,
191
+ animateOnEveryView: o = !1,
192
+ animateDurationMs: K = 1600,
193
+ animateLocale: Y,
193
194
  animateSeparators: x,
194
195
  variant: y = "default",
195
196
  size: N = "md",
@@ -198,13 +199,13 @@ const ct = Z(
198
199
  className: j,
199
200
  ...k
200
201
  }, R) => {
201
- const { i18n: Y } = B("ui"), T = tt(), p = e ?? Y.language, _ = O(() => {
202
+ const { i18n: _ } = B("ui"), T = et(), p = e ?? _.language, q = O(() => {
202
203
  if (typeof t == "string") return t;
203
204
  switch (u) {
204
205
  case "currency":
205
206
  return new Intl.NumberFormat(p, {
206
207
  style: "currency",
207
- currency: n ?? "USD"
208
+ currency: d ?? "USD"
208
209
  }).format(t);
209
210
  case "percent":
210
211
  return new Intl.NumberFormat(p, { style: "percent" }).format(
@@ -217,9 +218,9 @@ const ct = Z(
217
218
  default:
218
219
  return new Intl.NumberFormat(p).format(t);
219
220
  }
220
- }, [t, u, p, n])(), w = K ?? p;
221
- et(!1);
222
- const s = rt(() => f ? typeof t == "number" ? Number.isFinite(t) ? { target: t, sign: "", suffix: "" } : null : ot(t, w) : null, [f, t, w]), q = f && s !== null, H = (s == null ? void 0 : s.target) ?? 0, F = (s == null ? void 0 : s.sign) ?? "", $ = (s == null ? void 0 : s.suffix) ?? "", J = O(
221
+ }, [t, u, p, d])(), w = Y ?? p;
222
+ st(!1);
223
+ const a = rt(() => f ? typeof t == "number" ? Number.isFinite(t) ? { target: t, sign: "", suffix: "" } : null : lt(t, w) : null, [f, t, w]), H = f && a !== null, J = (a == null ? void 0 : a.target) ?? 0, F = (a == null ? void 0 : a.sign) ?? "", $ = (a == null ? void 0 : a.suffix) ?? "", Q = O(
223
224
  (z) => {
224
225
  const E = (() => {
225
226
  try {
@@ -233,15 +234,15 @@ const ct = Z(
233
234
  let v;
234
235
  if (E)
235
236
  if (x) {
236
- const A = Math.abs(z), D = Math.trunc(A), G = A - D, Q = x.thousand ?? "", S = String(D).replace(
237
+ const A = Math.abs(z), D = Math.trunc(A), G = A - D, X = x.thousand ?? "", S = String(D).replace(
237
238
  /\B(?=(\d{3})+(?!\d))/g,
238
- Q
239
+ X
239
240
  );
240
241
  if (G === 0)
241
242
  v = S;
242
243
  else {
243
- const L = G.toFixed(6).replace(/0+$/, "").slice(2), X = x.decimal ?? ".";
244
- v = L ? S + X + L : S;
244
+ const L = G.toFixed(6).replace(/0+$/, "").slice(2), Z = x.decimal ?? ".";
245
+ v = L ? S + Z + L : S;
245
246
  }
246
247
  } else
247
248
  v = E.format(Math.abs(z));
@@ -251,29 +252,29 @@ const ct = Z(
251
252
  return F === "" && z < 0 && (W = "-"), `${W}${v}${$}`;
252
253
  },
253
254
  [w, x, F, $]
254
- ), C = st({
255
- to: H,
255
+ ), C = at({
256
+ to: J,
256
257
  from: 0,
257
- durationMs: c,
258
+ durationMs: K,
258
259
  startOnVisible: !0,
259
- retriggerOnReEntry: h,
260
+ retriggerOnReEntry: o,
260
261
  // `formatter` is the only path we use — it owns both the locale
261
262
  // formatting and the sign/suffix re-application.
262
- formatter: J
263
+ formatter: Q
263
264
  });
264
- return o ? /* @__PURE__ */ b(
265
+ return h ? /* @__PURE__ */ b(
265
266
  "div",
266
267
  {
267
268
  ref: R,
268
269
  role: "group",
269
270
  "aria-busy": "true",
270
- "aria-label": a,
271
+ "aria-label": i,
271
272
  "data-component": "stat",
272
273
  className: P({ variant: y, size: N, align: I, className: j }),
273
274
  ...k,
274
275
  children: [
275
- /* @__PURE__ */ l("div", { className: "ds:h-[var(--skeleton-label-h)] ds:w-[var(--skeleton-label-w)] ds:animate-pulse ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]" }),
276
- /* @__PURE__ */ l("div", { className: "ds:h-[var(--skeleton-value-h)] ds:w-[var(--skeleton-value-w)] ds:animate-pulse ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]" })
276
+ /* @__PURE__ */ n("div", { className: "ds:h-[var(--skeleton-label-h)] ds:w-[var(--skeleton-label-w)] ds:animate-pulse ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]" }),
277
+ /* @__PURE__ */ n("div", { className: "ds:h-[var(--skeleton-value-h)] ds:w-[var(--skeleton-value-w)] ds:animate-pulse ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]" })
277
278
  ]
278
279
  }
279
280
  ) : /* @__PURE__ */ b(
@@ -286,39 +287,53 @@ const ct = Z(
286
287
  className: P({ variant: y, size: N, align: I, className: j }),
287
288
  ...k,
288
289
  children: [
289
- /* @__PURE__ */ b("span", { className: "ds:inline-flex ds:items-center", children: [
290
- g && /* @__PURE__ */ l(
291
- "span",
292
- {
293
- "aria-hidden": "true",
294
- className: [
295
- "ds:me-[var(--spacing-xs)] ds:inline-flex ds:shrink-0",
296
- // Accent tint on the leading icon. The icon is decorative
297
- // (aria-hidden), so magenta-500's 3.2:1 contrast on white
298
- // is acceptable here — the Stat label + value still
299
- // carry the accessible name at `--foreground`.
300
- "ds:text-[color:var(--accent)]",
301
- "ds:forced-colors:text-[CanvasText]"
302
- ].join(" "),
303
- children: g
304
- }
305
- ),
306
- /* @__PURE__ */ l(
307
- "span",
308
- {
309
- id: T,
310
- className: "type-label ds:text-[var(--muted-foreground)]",
311
- children: a
312
- }
313
- )
314
- ] }),
315
- q ? (
290
+ /* @__PURE__ */ b(
291
+ "span",
292
+ {
293
+ className: s == null ? "ds:inline-flex ds:items-center" : "ds:inline-flex ds:flex-wrap ds:items-center",
294
+ children: [
295
+ g && /* @__PURE__ */ n(
296
+ "span",
297
+ {
298
+ "aria-hidden": "true",
299
+ className: [
300
+ "ds:me-[var(--spacing-xs)] ds:inline-flex ds:shrink-0",
301
+ // Accent tint on the leading icon. The icon is decorative
302
+ // (aria-hidden), so magenta-500's 3.2:1 contrast on white
303
+ // is acceptable here — the Stat label + value still
304
+ // carry the accessible name at `--foreground`.
305
+ "ds:text-[color:var(--accent)]",
306
+ "ds:forced-colors:text-[CanvasText]"
307
+ ].join(" "),
308
+ children: g
309
+ }
310
+ ),
311
+ /* @__PURE__ */ n(
312
+ "span",
313
+ {
314
+ id: T,
315
+ className: "type-label ds:text-[var(--muted-foreground)]",
316
+ children: i
317
+ }
318
+ ),
319
+ s != null && /* @__PURE__ */ n(
320
+ "span",
321
+ {
322
+ "data-slot": "info",
323
+ className: "ds:ms-[var(--spacing-xs)] ds:inline-flex ds:shrink-0 ds:items-center",
324
+ children: s
325
+ }
326
+ )
327
+ ]
328
+ }
329
+ ),
330
+ H ? (
316
331
  // The animated number is wrapped in an `aria-live="off"` span
317
332
  // so screen readers don't announce every interpolated frame.
318
333
  // The `role="group"` ancestor (with `aria-labelledby` pointing
319
334
  // at the label) carries the final accessible reading — the
320
335
  // animated frames are decorative only.
321
- /* @__PURE__ */ l(
336
+ /* @__PURE__ */ n(
322
337
  "span",
323
338
  {
324
339
  ref: C.ref,
@@ -327,12 +342,12 @@ const ct = Z(
327
342
  children: C.value
328
343
  }
329
344
  )
330
- ) : /* @__PURE__ */ l("span", { className: U({ size: N, variant: y, intent: M }), children: _ }),
331
- i != null && d != null && /* @__PURE__ */ l(
332
- dt,
345
+ ) : /* @__PURE__ */ n("span", { className: U({ size: N, variant: y, intent: M }), children: q }),
346
+ c != null && l != null && /* @__PURE__ */ n(
347
+ ct,
333
348
  {
334
- trend: i,
335
- delta: d,
349
+ trend: c,
350
+ delta: l,
336
351
  deltaFormat: r,
337
352
  locale: e,
338
353
  polarity: m
@@ -343,8 +358,8 @@ const ct = Z(
343
358
  );
344
359
  }
345
360
  );
346
- ct.displayName = "Stat";
361
+ ot.displayName = "Stat";
347
362
  export {
348
- ct as S
363
+ ot as S
349
364
  };
350
- //# sourceMappingURL=stat-D2PNJujA.js.map
365
+ //# sourceMappingURL=stat-Dno2ZihS.js.map