@alfadocs/ui-kit 0.1.4 → 0.1.6

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 (275) hide show
  1. package/README.md +26 -0
  2. package/dist/_chunks/{agenda-card-C_hQGErS.js → agenda-card-DIWDvWum.js} +10 -10
  3. package/dist/_chunks/agenda-card-DIWDvWum.js.map +1 -0
  4. package/dist/_chunks/{agenda-tray-CBaVMJLO.js → agenda-tray-BqQZwiHc.js} +5 -5
  5. package/dist/_chunks/{agenda-tray-CBaVMJLO.js.map → agenda-tray-BqQZwiHc.js.map} +1 -1
  6. package/dist/_chunks/{ai-prompt-input-K94oVLG2.js → ai-prompt-input-CI27KmZ1.js} +4 -4
  7. package/dist/_chunks/ai-prompt-input-CI27KmZ1.js.map +1 -0
  8. package/dist/_chunks/{alert-rOM4EG0P.js → alert-BlOUMkXj.js} +39 -39
  9. package/dist/_chunks/alert-BlOUMkXj.js.map +1 -0
  10. package/dist/_chunks/{audio-recorder-Cn8z2zC9.js → audio-recorder-B-8SKgKn.js} +5 -5
  11. package/dist/_chunks/{audio-recorder-Cn8z2zC9.js.map → audio-recorder-B-8SKgKn.js.map} +1 -1
  12. package/dist/_chunks/{autocomplete.agent-DRrp-Rsx.js → autocomplete.agent-DqOy0_1P.js} +31 -31
  13. package/dist/_chunks/autocomplete.agent-DqOy0_1P.js.map +1 -0
  14. package/dist/_chunks/{avatar-Biffh-_H.js → avatar-Dcr6XuDQ.js} +19 -19
  15. package/dist/_chunks/avatar-Dcr6XuDQ.js.map +1 -0
  16. package/dist/_chunks/{balance-cell-renderer-CiyezQhi.js → balance-cell-renderer-BRWt3neo.js} +166 -166
  17. package/dist/_chunks/balance-cell-renderer-BRWt3neo.js.map +1 -0
  18. package/dist/_chunks/breadcrumb-D6xpsP7n.js +293 -0
  19. package/dist/_chunks/breadcrumb-D6xpsP7n.js.map +1 -0
  20. package/dist/_chunks/{button-7dTew-IV.js → button-7mLWcMp_.js} +9 -9
  21. package/dist/_chunks/{button-7dTew-IV.js.map → button-7mLWcMp_.js.map} +1 -1
  22. package/dist/_chunks/{calendar-BkDeDTaX.js → calendar-nGEgelJs.js} +100 -100
  23. package/dist/_chunks/calendar-nGEgelJs.js.map +1 -0
  24. package/dist/_chunks/{chat-input-xiBIujMv.js → chat-input-DsIrWM4f.js} +2 -2
  25. package/dist/_chunks/{chat-input-xiBIujMv.js.map → chat-input-DsIrWM4f.js.map} +1 -1
  26. package/dist/_chunks/{chat-message-BtxUyugB.js → chat-message-ByouZpPP.js} +3 -3
  27. package/dist/_chunks/{chat-message-BtxUyugB.js.map → chat-message-ByouZpPP.js.map} +1 -1
  28. package/dist/_chunks/{checkbox-Ni6C_KJg.js → checkbox-DNK4qS2_.js} +13 -13
  29. package/dist/_chunks/checkbox-DNK4qS2_.js.map +1 -0
  30. package/dist/_chunks/{checkbox-group-BFZ4oN5t.js → checkbox-group-CWpGZEF6.js} +13 -13
  31. package/dist/_chunks/checkbox-group-CWpGZEF6.js.map +1 -0
  32. package/dist/_chunks/{collapsible-fFMqzpdL.js → collapsible-D4LOdLxp.js} +18 -18
  33. package/dist/_chunks/collapsible-D4LOdLxp.js.map +1 -0
  34. package/dist/_chunks/{color-picker-Cl3KdjJd.js → color-picker-e9PmpaGH.js} +161 -161
  35. package/dist/_chunks/color-picker-e9PmpaGH.js.map +1 -0
  36. package/dist/_chunks/{combobox.agent-DjdivI3X.js → combobox.agent-ByobCLJ_.js} +28 -28
  37. package/dist/_chunks/combobox.agent-ByobCLJ_.js.map +1 -0
  38. package/dist/_chunks/{command-palette.agent-BUjzr2ET.js → command-palette.agent-js2rxgeR.js} +117 -117
  39. package/dist/_chunks/command-palette.agent-js2rxgeR.js.map +1 -0
  40. package/dist/_chunks/{description-list-C_1NX8P3.js → description-list-DvJbp6Yg.js} +2 -2
  41. package/dist/_chunks/{description-list-C_1NX8P3.js.map → description-list-DvJbp6Yg.js.map} +1 -1
  42. package/dist/_chunks/{dialog.agent-C2lP9H0h.js → dialog.agent-DEG_fVzG.js} +42 -42
  43. package/dist/_chunks/dialog.agent-DEG_fVzG.js.map +1 -0
  44. package/dist/_chunks/{dropdown-menu-2HgU1Emf.js → dropdown-menu-JNo66A-j.js} +2 -2
  45. package/dist/_chunks/dropdown-menu-JNo66A-j.js.map +1 -0
  46. package/dist/_chunks/{empty-state-BHrItOiE.js → empty-state-DQPtRp2b.js} +2 -2
  47. package/dist/_chunks/{empty-state-BHrItOiE.js.map → empty-state-DQPtRp2b.js.map} +1 -1
  48. package/dist/_chunks/{file-upload.agent-LlC0W468.js → file-upload.agent-B9AN82LA.js} +2 -2
  49. package/dist/_chunks/{file-upload.agent-LlC0W468.js.map → file-upload.agent-B9AN82LA.js.map} +1 -1
  50. package/dist/_chunks/{freemium-paywall-Dr9aOtOC.js → freemium-paywall-CkefGLM_.js} +4 -4
  51. package/dist/_chunks/{freemium-paywall-Dr9aOtOC.js.map → freemium-paywall-CkefGLM_.js.map} +1 -1
  52. package/dist/_chunks/{header-BpU9U-1X.js → header-BGn1mRp8.js} +2 -2
  53. package/dist/_chunks/{header-BpU9U-1X.js.map → header-BGn1mRp8.js.map} +1 -1
  54. package/dist/_chunks/{icon-button-CNjWCD1X.js → icon-button-Wnnde5lc.js} +6 -6
  55. package/dist/_chunks/icon-button-Wnnde5lc.js.map +1 -0
  56. package/dist/_chunks/input-surface-u4QB0lxe.js +32 -0
  57. package/dist/_chunks/input-surface-u4QB0lxe.js.map +1 -0
  58. package/dist/_chunks/{key-value-pair-C9hpjC_B.js → key-value-pair-JRFS9Xrh.js} +10 -10
  59. package/dist/_chunks/key-value-pair-JRFS9Xrh.js.map +1 -0
  60. package/dist/_chunks/{leo-sidebar-CNjZqljo.js → leo-sidebar-Bh3dPDTQ.js} +64 -64
  61. package/dist/_chunks/leo-sidebar-Bh3dPDTQ.js.map +1 -0
  62. package/dist/_chunks/{message-card-CZzNO4ov.js → message-card-qAp2-WQK.js} +12 -12
  63. package/dist/_chunks/message-card-qAp2-WQK.js.map +1 -0
  64. package/dist/_chunks/{message-tray-BWbjXW3F.js → message-tray-VaLpQU5t.js} +5 -5
  65. package/dist/_chunks/{message-tray-BWbjXW3F.js.map → message-tray-VaLpQU5t.js.map} +1 -1
  66. package/dist/_chunks/{multi-select.agent-BSGEW10d.js → multi-select.agent-CNsyW3n9.js} +66 -66
  67. package/dist/_chunks/multi-select.agent-CNsyW3n9.js.map +1 -0
  68. package/dist/_chunks/navigation-menu-EVFau1O2.js +180 -0
  69. package/dist/_chunks/navigation-menu-EVFau1O2.js.map +1 -0
  70. package/dist/_chunks/{notification-card-DgW-vVg-.js → notification-card-BF2_veHy.js} +11 -11
  71. package/dist/_chunks/notification-card-BF2_veHy.js.map +1 -0
  72. package/dist/_chunks/{notification-tray-CKUgl2jc.js → notification-tray-Bq-08ReD.js} +5 -5
  73. package/dist/_chunks/{notification-tray-CKUgl2jc.js.map → notification-tray-Bq-08ReD.js.map} +1 -1
  74. package/dist/_chunks/{number-input-BPPhekLu.js → number-input-DjpT_RXJ.js} +46 -46
  75. package/dist/_chunks/number-input-DjpT_RXJ.js.map +1 -0
  76. package/dist/_chunks/pagination.agent-oEaqmtx5.js +380 -0
  77. package/dist/_chunks/pagination.agent-oEaqmtx5.js.map +1 -0
  78. package/dist/_chunks/{password-input-DAT5HQth.js → password-input-DJDVznWH.js} +5 -5
  79. package/dist/_chunks/password-input-DJDVznWH.js.map +1 -0
  80. package/dist/_chunks/{patient-shell-BzHhg6uA.js → patient-shell-DP54y6rc.js} +5 -5
  81. package/dist/_chunks/{patient-shell-BzHhg6uA.js.map → patient-shell-DP54y6rc.js.map} +1 -1
  82. package/dist/_chunks/{payment-form-YlxrCpZQ.js → payment-form-hcl-gGrp.js} +2 -2
  83. package/dist/_chunks/{payment-form-YlxrCpZQ.js.map → payment-form-hcl-gGrp.js.map} +1 -1
  84. package/dist/_chunks/{pdf-viewer.agent-sMned5Xn.js → pdf-viewer.agent-CfIHhcHx.js} +3 -3
  85. package/dist/_chunks/{pdf-viewer.agent-sMned5Xn.js.map → pdf-viewer.agent-CfIHhcHx.js.map} +1 -1
  86. package/dist/_chunks/{phone-input-BuRe5PyI.js → phone-input-DE_39q65.js} +103 -103
  87. package/dist/_chunks/phone-input-DE_39q65.js.map +1 -0
  88. package/dist/_chunks/{popover-Ds1iOdiv.js → popover-DvAtFOi-.js} +2 -2
  89. package/dist/_chunks/{popover-Ds1iOdiv.js.map → popover-DvAtFOi-.js.map} +1 -1
  90. package/dist/_chunks/{privacy-lock-up2ervfF.js → privacy-lock-DS6QRo2N.js} +3 -3
  91. package/dist/_chunks/{privacy-lock-up2ervfF.js.map → privacy-lock-DS6QRo2N.js.map} +1 -1
  92. package/dist/_chunks/{progress-D4ELgHG3.js → progress-B4Of_pzz.js} +57 -57
  93. package/dist/_chunks/progress-B4Of_pzz.js.map +1 -0
  94. package/dist/_chunks/{radio-XSSNX3Af.js → radio-cs8N1wJi.js} +29 -29
  95. package/dist/_chunks/radio-cs8N1wJi.js.map +1 -0
  96. package/dist/_chunks/{radio-group-DBrUOPcy.js → radio-group-BIUbpWml.js} +3 -3
  97. package/dist/_chunks/radio-group-BIUbpWml.js.map +1 -0
  98. package/dist/_chunks/{scroll-area-HIq0hJyJ.js → scroll-area-DLr5w9Dd.js} +9 -9
  99. package/dist/_chunks/scroll-area-DLr5w9Dd.js.map +1 -0
  100. package/dist/_chunks/{search-bar-9Zbew4yM.js → search-bar-fcGqDFW3.js} +30 -30
  101. package/dist/_chunks/{search-bar-9Zbew4yM.js.map → search-bar-fcGqDFW3.js.map} +1 -1
  102. package/dist/_chunks/{search-input-CtkWITO2.js → search-input-BVMCONyN.js} +2 -2
  103. package/dist/_chunks/{search-input-CtkWITO2.js.map → search-input-BVMCONyN.js.map} +1 -1
  104. package/dist/_chunks/{select-DdAOtomN.js → select-IY_JQa-F.js} +50 -50
  105. package/dist/_chunks/select-IY_JQa-F.js.map +1 -0
  106. package/dist/_chunks/{sheet-D7GRhnWw.js → sheet-BhNpLHc9.js} +8 -8
  107. package/dist/_chunks/sheet-BhNpLHc9.js.map +1 -0
  108. package/dist/_chunks/{sidebar-Dc2ffrbf.js → sidebar-OVzwN3jE.js} +294 -294
  109. package/dist/_chunks/sidebar-OVzwN3jE.js.map +1 -0
  110. package/dist/_chunks/{sign-in-with-alfadocs-button-BotwPDcW.js → sign-in-with-alfadocs-button-BN_FPGHT.js} +2 -2
  111. package/dist/_chunks/{sign-in-with-alfadocs-button-BotwPDcW.js.map → sign-in-with-alfadocs-button-BN_FPGHT.js.map} +1 -1
  112. package/dist/_chunks/{skeleton-DAdPFx9d.js → skeleton-dtqyF09N.js} +8 -8
  113. package/dist/_chunks/skeleton-dtqyF09N.js.map +1 -0
  114. package/dist/_chunks/{slot-grid-WHc5A8-z.js → slot-grid-D_l5VsHG.js} +5 -5
  115. package/dist/_chunks/{slot-grid-WHc5A8-z.js.map → slot-grid-D_l5VsHG.js.map} +1 -1
  116. package/dist/_chunks/{stepper-accordion-2_7Pw0tC.js → stepper-accordion-CGog0JSF.js} +64 -64
  117. package/dist/_chunks/stepper-accordion-CGog0JSF.js.map +1 -0
  118. package/dist/_chunks/{stepper-calendar-CWZcFgt_.js → stepper-calendar-_fLOAjus.js} +7 -7
  119. package/dist/_chunks/{stepper-calendar-CWZcFgt_.js.map → stepper-calendar-_fLOAjus.js.map} +1 -1
  120. package/dist/_chunks/{switch-DhSORO9C.js → switch-aN2EYxHh.js} +4 -4
  121. package/dist/_chunks/switch-aN2EYxHh.js.map +1 -0
  122. package/dist/_chunks/{tabs.agent-BtaNGxRh.js → tabs.agent-BpbVA-Zh.js} +55 -55
  123. package/dist/_chunks/tabs.agent-BpbVA-Zh.js.map +1 -0
  124. package/dist/_chunks/{tag--uLKOb9f.js → tag-BqidXKo3.js} +2 -2
  125. package/dist/_chunks/tag-BqidXKo3.js.map +1 -0
  126. package/dist/_chunks/{task-card-BeSuntXP.js → task-card-yW7tKlG4.js} +17 -17
  127. package/dist/_chunks/task-card-yW7tKlG4.js.map +1 -0
  128. package/dist/_chunks/{task-tray-pRk6u8Ik.js → task-tray-BzahI5FQ.js} +5 -5
  129. package/dist/_chunks/{task-tray-pRk6u8Ik.js.map → task-tray-BzahI5FQ.js.map} +1 -1
  130. package/dist/_chunks/{text-area-xf9-6iDf.js → text-area-DmKSd2DG.js} +2 -2
  131. package/dist/_chunks/text-area-DmKSd2DG.js.map +1 -0
  132. package/dist/_chunks/{text-input-exh7VD7D.js → text-input-CRHvl5zk.js} +19 -19
  133. package/dist/_chunks/text-input-CRHvl5zk.js.map +1 -0
  134. package/dist/_chunks/{theme-toggle-CJgA6G24.js → theme-toggle-COHFwO2H.js} +4 -4
  135. package/dist/_chunks/{theme-toggle-CJgA6G24.js.map → theme-toggle-COHFwO2H.js.map} +1 -1
  136. package/dist/_chunks/{timeline-DIueH4TJ.js → timeline-RgAIzpMd.js} +2 -2
  137. package/dist/_chunks/{timeline-DIueH4TJ.js.map → timeline-RgAIzpMd.js.map} +1 -1
  138. package/dist/_chunks/{toast-q0SlabGr.js → toast-lOhJDKOH.js} +12 -12
  139. package/dist/_chunks/{toast-q0SlabGr.js.map → toast-lOhJDKOH.js.map} +1 -1
  140. package/dist/_chunks/{transcript-panel-DFnhbrlQ.js → transcript-panel-CNbVGG9L.js} +59 -59
  141. package/dist/_chunks/transcript-panel-CNbVGG9L.js.map +1 -0
  142. package/dist/_chunks/{visually-hidden-BlkhaZWe.js → visually-hidden-Bw7vBHLm.js} +6 -6
  143. package/dist/_chunks/{visually-hidden-BlkhaZWe.js.map → visually-hidden-Bw7vBHLm.js.map} +1 -1
  144. package/dist/_chunks/{warning-stack-DCmO0R07.js → warning-stack-8Pa3pekh.js} +24 -24
  145. package/dist/_chunks/warning-stack-8Pa3pekh.js.map +1 -0
  146. package/dist/_chunks/{workflow-map-CAM6Uy_J.js → workflow-map-DGJwVcO-.js} +106 -106
  147. package/dist/_chunks/workflow-map-DGJwVcO-.js.map +1 -0
  148. package/dist/agent-catalog.json +1 -1
  149. package/dist/components/_shared/input-surface.d.ts +11 -11
  150. package/dist/components/agenda-card/index.js +1 -1
  151. package/dist/components/agenda-tray/index.js +1 -1
  152. package/dist/components/ai-prompt-input/index.js +1 -1
  153. package/dist/components/alert/index.js +1 -1
  154. package/dist/components/audio-recorder/index.js +1 -1
  155. package/dist/components/autocomplete/index.js +1 -1
  156. package/dist/components/avatar/index.js +1 -1
  157. package/dist/components/breadcrumb/index.js +1 -1
  158. package/dist/components/button/index.js +2 -2
  159. package/dist/components/calendar/index.js +1 -1
  160. package/dist/components/chat-input/index.js +1 -1
  161. package/dist/components/chat-message/index.js +1 -1
  162. package/dist/components/checkbox/index.js +1 -1
  163. package/dist/components/checkbox-group/index.js +1 -1
  164. package/dist/components/collapsible/index.js +1 -1
  165. package/dist/components/color-picker/index.js +1 -1
  166. package/dist/components/combobox/index.js +1 -1
  167. package/dist/components/command-palette/index.js +1 -1
  168. package/dist/components/data-table/index.js +1 -1
  169. package/dist/components/description-list/index.js +1 -1
  170. package/dist/components/dialog/index.js +1 -1
  171. package/dist/components/dropdown-menu/index.js +1 -1
  172. package/dist/components/empty-state/index.js +1 -1
  173. package/dist/components/file-upload/index.js +1 -1
  174. package/dist/components/freemium-paywall/index.js +1 -1
  175. package/dist/components/header/index.js +1 -1
  176. package/dist/components/icon-button/index.js +1 -1
  177. package/dist/components/key-value-pair/index.js +1 -1
  178. package/dist/components/message-card/index.js +1 -1
  179. package/dist/components/message-tray/index.js +1 -1
  180. package/dist/components/multi-select/index.js +1 -1
  181. package/dist/components/navigation-menu/index.js +1 -1
  182. package/dist/components/notification-card/index.js +1 -1
  183. package/dist/components/notification-tray/index.js +1 -1
  184. package/dist/components/number-input/index.js +1 -1
  185. package/dist/components/pagination/index.js +1 -1
  186. package/dist/components/password-input/index.js +1 -1
  187. package/dist/components/payment-form/index.js +1 -1
  188. package/dist/components/pdf-viewer/index.js +1 -1
  189. package/dist/components/phone-input/index.js +1 -1
  190. package/dist/components/popover/index.js +1 -1
  191. package/dist/components/privacy-lock/index.js +1 -1
  192. package/dist/components/progress/index.js +1 -1
  193. package/dist/components/radio/index.js +1 -1
  194. package/dist/components/radio-group/index.js +2 -2
  195. package/dist/components/scroll-area/index.js +1 -1
  196. package/dist/components/search-bar/index.js +1 -1
  197. package/dist/components/search-input/index.js +1 -1
  198. package/dist/components/select/index.js +1 -1
  199. package/dist/components/sheet/index.js +1 -1
  200. package/dist/components/sidebar/index.js +1 -1
  201. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  202. package/dist/components/skeleton/index.js +1 -1
  203. package/dist/components/slot-grid/index.js +1 -1
  204. package/dist/components/stepper-accordion/index.js +1 -1
  205. package/dist/components/stepper-calendar/index.js +1 -1
  206. package/dist/components/switch/index.js +1 -1
  207. package/dist/components/tabs/index.js +1 -1
  208. package/dist/components/tag/index.js +1 -1
  209. package/dist/components/task-card/index.js +1 -1
  210. package/dist/components/task-tray/index.js +1 -1
  211. package/dist/components/text-area/index.js +1 -1
  212. package/dist/components/text-input/index.js +1 -1
  213. package/dist/components/theme-toggle/index.js +1 -1
  214. package/dist/components/timeline/index.js +1 -1
  215. package/dist/components/toast/index.js +1 -1
  216. package/dist/components/transcript-panel/index.js +1 -1
  217. package/dist/components/visually-hidden/index.js +1 -1
  218. package/dist/components/warning-stack/index.js +1 -1
  219. package/dist/components/workflow/index.js +1 -1
  220. package/dist/index.js +72 -72
  221. package/dist/patterns/leo-assistant/index.js +1 -1
  222. package/dist/patterns/leo-assistant/leo-sidebar.d.ts.map +1 -1
  223. package/dist/patterns/patient-shell/index.js +1 -1
  224. package/dist/tokens.css +1 -1
  225. package/package.json +1 -1
  226. package/dist/_chunks/agenda-card-C_hQGErS.js.map +0 -1
  227. package/dist/_chunks/ai-prompt-input-K94oVLG2.js.map +0 -1
  228. package/dist/_chunks/alert-rOM4EG0P.js.map +0 -1
  229. package/dist/_chunks/autocomplete.agent-DRrp-Rsx.js.map +0 -1
  230. package/dist/_chunks/avatar-Biffh-_H.js.map +0 -1
  231. package/dist/_chunks/balance-cell-renderer-CiyezQhi.js.map +0 -1
  232. package/dist/_chunks/breadcrumb-CcZovmIq.js +0 -293
  233. package/dist/_chunks/breadcrumb-CcZovmIq.js.map +0 -1
  234. package/dist/_chunks/calendar-BkDeDTaX.js.map +0 -1
  235. package/dist/_chunks/checkbox-Ni6C_KJg.js.map +0 -1
  236. package/dist/_chunks/checkbox-group-BFZ4oN5t.js.map +0 -1
  237. package/dist/_chunks/collapsible-fFMqzpdL.js.map +0 -1
  238. package/dist/_chunks/color-picker-Cl3KdjJd.js.map +0 -1
  239. package/dist/_chunks/combobox.agent-DjdivI3X.js.map +0 -1
  240. package/dist/_chunks/command-palette.agent-BUjzr2ET.js.map +0 -1
  241. package/dist/_chunks/dialog.agent-C2lP9H0h.js.map +0 -1
  242. package/dist/_chunks/dropdown-menu-2HgU1Emf.js.map +0 -1
  243. package/dist/_chunks/icon-button-CNjWCD1X.js.map +0 -1
  244. package/dist/_chunks/input-surface-D5OMCB1W.js +0 -32
  245. package/dist/_chunks/input-surface-D5OMCB1W.js.map +0 -1
  246. package/dist/_chunks/key-value-pair-C9hpjC_B.js.map +0 -1
  247. package/dist/_chunks/leo-sidebar-CNjZqljo.js.map +0 -1
  248. package/dist/_chunks/message-card-CZzNO4ov.js.map +0 -1
  249. package/dist/_chunks/multi-select.agent-BSGEW10d.js.map +0 -1
  250. package/dist/_chunks/navigation-menu-DxOMvrKM.js +0 -180
  251. package/dist/_chunks/navigation-menu-DxOMvrKM.js.map +0 -1
  252. package/dist/_chunks/notification-card-DgW-vVg-.js.map +0 -1
  253. package/dist/_chunks/number-input-BPPhekLu.js.map +0 -1
  254. package/dist/_chunks/pagination.agent-CmA0Ocr5.js +0 -380
  255. package/dist/_chunks/pagination.agent-CmA0Ocr5.js.map +0 -1
  256. package/dist/_chunks/password-input-DAT5HQth.js.map +0 -1
  257. package/dist/_chunks/phone-input-BuRe5PyI.js.map +0 -1
  258. package/dist/_chunks/progress-D4ELgHG3.js.map +0 -1
  259. package/dist/_chunks/radio-XSSNX3Af.js.map +0 -1
  260. package/dist/_chunks/radio-group-DBrUOPcy.js.map +0 -1
  261. package/dist/_chunks/scroll-area-HIq0hJyJ.js.map +0 -1
  262. package/dist/_chunks/select-DdAOtomN.js.map +0 -1
  263. package/dist/_chunks/sheet-D7GRhnWw.js.map +0 -1
  264. package/dist/_chunks/sidebar-Dc2ffrbf.js.map +0 -1
  265. package/dist/_chunks/skeleton-DAdPFx9d.js.map +0 -1
  266. package/dist/_chunks/stepper-accordion-2_7Pw0tC.js.map +0 -1
  267. package/dist/_chunks/switch-DhSORO9C.js.map +0 -1
  268. package/dist/_chunks/tabs.agent-BtaNGxRh.js.map +0 -1
  269. package/dist/_chunks/tag--uLKOb9f.js.map +0 -1
  270. package/dist/_chunks/task-card-BeSuntXP.js.map +0 -1
  271. package/dist/_chunks/text-area-xf9-6iDf.js.map +0 -1
  272. package/dist/_chunks/text-input-exh7VD7D.js.map +0 -1
  273. package/dist/_chunks/transcript-panel-DFnhbrlQ.js.map +0 -1
  274. package/dist/_chunks/warning-stack-DCmO0R07.js.map +0 -1
  275. package/dist/_chunks/workflow-map-CAM6Uy_J.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-area-DLr5w9Dd.js","sources":["../../src/components/scroll-area/scroll-area.tsx"],"sourcesContent":["import { forwardRef, useRef, type ComponentPropsWithoutRef } from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useDirection } from '../_shared/use-direction';\n\nconst scrollbarVariants = cva(\n [\n 'ds:flex ds:touch-none ds:select-none',\n // Fade in/out based on Radix data-state (requires forceMount on Scrollbar).\n // Default opacity is 1 because ScrollAreaScrollbarVisible (type='always')\n // never sets data-state at all — only hover/scroll/auto set data-state=\"hidden\".\n 'ds:transition-opacity ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:data-[state=hidden]:opacity-0',\n // Orientation-specific sizing + padding so thumb floats away from the frame edge\n 'ds:data-[orientation=vertical]:w-[var(--scrollbar-size)] ds:data-[orientation=vertical]:p-[var(--scrollbar-padding)]',\n 'ds:data-[orientation=horizontal]:h-[var(--scrollbar-size)] ds:data-[orientation=horizontal]:flex-col ds:data-[orientation=horizontal]:p-[var(--scrollbar-padding)]',\n 'ds:bg-[var(--scrollbar-track)]',\n // forced-colors: 1px border keeps the track visible when background flattens\n 'ds:forced-colors:border ds:forced-colors:border-[ButtonText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:[--scrollbar-size:var(--scrollbar-size-sm)]',\n md: 'ds:[--scrollbar-size:var(--scrollbar-size-md)]',\n lg: 'ds:[--scrollbar-size:var(--scrollbar-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst thumbVariants = cva(\n [\n 'ds:relative ds:flex-1',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:bg-[var(--scrollbar-thumb)]',\n 'ds:hover:bg-[var(--scrollbar-thumb-hover)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n // forced-color-adjust: auto so forced-colors paint ButtonFace/ButtonText\n 'ds:[forced-color-adjust:auto]',\n // hit area extension via ::before for touch pointers (must be absolute)\n 'ds:before:absolute ds:before:content-[\"\"] ds:before:inset-inline-[calc((var(--min-target-size)-100%)/-2)]',\n 'ds:before:inset-block-[calc((var(--min-target-size)-100%)/-2)]',\n ].join(' '),\n);\n\nexport interface ScrollAreaProps\n extends Omit<\n ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>,\n 'type'\n >,\n VariantProps<typeof scrollbarVariants> {\n orientation?: 'vertical' | 'horizontal' | 'both';\n size?: 'sm' | 'md' | 'lg';\n /**\n * `auto` — scrollbar fades in on pointer-enter, fades out after `--scrollbar-fade-delay` (default).\n * `always` — scrollbar always visible; use for data tables.\n * `scroll` — scrollbar visible only while scrolling.\n * `hover` — alias for `auto` (Radix hover mode).\n * `native` — skips the custom scrollbar entirely; the OS renders its own.\n * Use for virtualised lists (AG Grid, @tanstack/react-virtual).\n */\n type?: 'auto' | 'always' | 'scroll' | 'hover' | 'native';\n className?: string;\n children: React.ReactNode;\n}\n\nconst radixType = (\n type: ScrollAreaProps['type'],\n): ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>['type'] => {\n if (type === 'auto' || type === undefined) return 'hover';\n return type as Exclude<ScrollAreaProps['type'], 'auto' | 'native' | undefined>;\n};\n\nconst nativeOverflow: Record<\n NonNullable<ScrollAreaProps['orientation']>,\n string\n> = {\n vertical: 'ds:overflow-y-auto',\n horizontal: 'ds:overflow-x-auto',\n both: 'ds:overflow-auto',\n};\n\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n orientation = 'vertical',\n size = 'md',\n type = 'auto',\n className,\n children,\n // scrollHideDelay is a Root-only prop; ignore it for the native branch\n scrollHideDelay,\n ...props\n },\n ref,\n ) => {\n // ── Native escape-hatch ────────────────────────────────────────────\n // Radix's Viewport always injects `scrollbar-width: none` CSS, which\n // hides the browser scrollbar even if we skip rendering the custom one.\n // For native mode we bypass Radix entirely and render a plain div.\n if (type === 'native') {\n return (\n <div\n ref={ref}\n data-component=\"scroll-area\"\n className={[\n nativeOverflow[orientation],\n 'ds:min-w-0 ds:min-h-0',\n // focus ring matches the custom-scrollbar variant\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[Highlight]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n // ── Radix custom-scrollbar path ────────────────────────────────────\n const rootRef = useRef<HTMLDivElement>(null);\n const dir = useDirection(rootRef);\n return (\n <ScrollAreaPrimitive.Root\n ref={rootRef}\n type={radixType(type)}\n dir={dir}\n scrollHideDelay={scrollHideDelay}\n data-component=\"scroll-area\"\n className={[\n 'ds:relative ds:overflow-hidden',\n 'ds:min-w-0 ds:min-h-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={ref}\n className={[\n 'ds:h-full ds:w-full ds:rounded-[inherit]',\n // keyboard focus ring on the scroll container\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[Highlight]',\n ].join(' ')}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n\n {(orientation === 'vertical' || orientation === 'both') && (\n // forceMount keeps the element in the DOM so CSS opacity transition\n // can animate the show/hide instead of mount/unmount snapping.\n <ScrollAreaPrimitive.Scrollbar\n forceMount\n orientation=\"vertical\"\n className={scrollbarVariants({ size })}\n >\n <ScrollAreaPrimitive.Thumb className={thumbVariants()} />\n </ScrollAreaPrimitive.Scrollbar>\n )}\n\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollAreaPrimitive.Scrollbar\n forceMount\n orientation=\"horizontal\"\n className={scrollbarVariants({ size })}\n >\n <ScrollAreaPrimitive.Thumb className={thumbVariants()} />\n </ScrollAreaPrimitive.Scrollbar>\n )}\n\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n },\n);\n\nScrollArea.displayName = 'ScrollArea';\n\n// Re-export Radix parts for advanced composition\nexport const ScrollAreaRoot = ScrollAreaPrimitive.Root;\nexport const ScrollAreaViewport = ScrollAreaPrimitive.Viewport;\nexport const ScrollAreaScrollbar = ScrollAreaPrimitive.Scrollbar;\nexport const ScrollAreaThumb = ScrollAreaPrimitive.Thumb;\nexport const ScrollAreaCorner = ScrollAreaPrimitive.Corner;\n"],"names":["scrollbarVariants","cva","thumbVariants","radixType","type","nativeOverflow","ScrollArea","forwardRef","orientation","size","className","children","scrollHideDelay","props","ref","jsx","rootRef","useRef","dir","useDirection","jsxs","ScrollAreaPrimitive","ScrollAreaRoot","ScrollAreaViewport","ScrollAreaScrollbar","ScrollAreaThumb","ScrollAreaCorner"],"mappings":";;;;;AAKA,MAAMA,IAAoBC;AAAA,EACxB;AAAA,IACE;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAEMC,IAAgBD;AAAA,EACpB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ,GAuBME,IAAY,CAChBC,MAEIA,MAAS,UAAUA,MAAS,SAAkB,UAC3CA,GAGHC,IAGF;AAAA,EACF,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,MAAM;AACR,GAEaC,IAAaC;AAAA,EACxB,CACE;AAAA,IACE,aAAAC,IAAc;AAAA,IACd,MAAAC,IAAO;AAAA,IACP,MAAAL,IAAO;AAAA,IACP,WAAAM;AAAA,IACA,UAAAC;AAAA;AAAA,IAEA,iBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AAKH,QAAIV,MAAS;AACX,aACE,gBAAAW;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAD;AAAA,UACA,kBAAe;AAAA,UACf,WAAW;AAAA,YACTT,EAAeG,CAAW;AAAA,YAC1B;AAAA;AAAA,YAEA;AAAA,YACA;AAAA,YACA;AAAA,YACAE;AAAA,UAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACV,GAAGG;AAAA,UAEH,UAAAF;AAAA,QAAA;AAAA,MAAA;AAMP,UAAMK,IAAUC,EAAuB,IAAI,GACrCC,IAAMC,EAAaH,CAAO;AAChC,WACE,gBAAAI;AAAA,MAACC,EAAoB;AAAA,MAApB;AAAA,QACC,KAAKL;AAAA,QACL,MAAMb,EAAUC,CAAI;AAAA,QACpB,KAAAc;AAAA,QACA,iBAAAN;AAAA,QACA,kBAAe;AAAA,QACf,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACAF;AAAA,QAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACV,GAAGG;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAACM,EAAoB;AAAA,YAApB;AAAA,cACC,KAAAP;AAAA,cACA,WAAW;AAAA,gBACT;AAAA;AAAA,gBAEA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA,EACA,KAAK,GAAG;AAAA,cAET,UAAAH;AAAA,YAAA;AAAA,UAAA;AAAA,WAGDH,MAAgB,cAAcA,MAAgB;AAAA;AAAA,UAG9C,gBAAAO;AAAA,YAACM,EAAoB;AAAA,YAApB;AAAA,cACC,YAAU;AAAA,cACV,aAAY;AAAA,cACZ,WAAWrB,EAAkB,EAAE,MAAAS,GAAM;AAAA,cAErC,4BAACY,EAAoB,OAApB,EAA0B,WAAWnB,IAAc,CAAG;AAAA,YAAA;AAAA,UAAA;AAAA,WAIzDM,MAAgB,gBAAgBA,MAAgB,WAChD,gBAAAO;AAAA,YAACM,EAAoB;AAAA,YAApB;AAAA,cACC,YAAU;AAAA,cACV,aAAY;AAAA,cACZ,WAAWrB,EAAkB,EAAE,MAAAS,GAAM;AAAA,cAErC,4BAACY,EAAoB,OAApB,EAA0B,WAAWnB,IAAc,CAAG;AAAA,YAAA;AAAA,UAAA;AAAA,UAI3D,gBAAAa,EAACM,EAAoB,QAApB,CAAA,CAA2B;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGlC;AACF;AAEAf,EAAW,cAAc;AAGlB,MAAMgB,IAAiBD,EAAoB,MACrCE,IAAqBF,EAAoB,UACzCG,IAAsBH,EAAoB,WAC1CI,IAAkBJ,EAAoB,OACtCK,IAAmBL,EAAoB;"}
@@ -3,7 +3,7 @@ import { forwardRef as U, useState as V, useEffect as O, useRef as W, useId as J
3
3
  import { c as P } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as E } from "react-i18next";
5
5
  import * as j from "@radix-ui/react-popover";
6
- import { S as Y } from "./search-input-CtkWITO2.js";
6
+ import { S as Y } from "./search-input-BVMCONyN.js";
7
7
  import { S as Z } from "./search-BonnQsHv.js";
8
8
  import { n as L } from "./normalize-diacritics-BNGbFNlJ.js";
9
9
  import { u as ee } from "./use-debounced-callback-BisrB-Fq.js";
@@ -119,14 +119,14 @@ const ne = U(
119
119
  size: n = "md",
120
120
  density: p = "default",
121
121
  topLevel: y = !1,
122
- placeholder: i,
122
+ placeholder: d,
123
123
  shortcutHint: h = !0,
124
124
  className: v,
125
125
  onOpenCommandPalette: t,
126
126
  value: g,
127
127
  defaultValue: z,
128
128
  onQueryChange: k,
129
- results: d,
129
+ results: i,
130
130
  onSelect: b,
131
131
  debounceMs: C,
132
132
  ...l
@@ -136,7 +136,7 @@ const ne = U(
136
136
  }, []);
137
137
  const S = R ? "⌘K" : "Ctrl+K", u = "Meta+K Control+K", m = y ? { role: "search" } : { role: void 0 };
138
138
  if (o === "launcher") {
139
- const N = i ?? c("search.placeholder", "Search…");
139
+ const N = d ?? c("search.placeholder", "Search…");
140
140
  return /* @__PURE__ */ s("div", { ref: a, ...m, "data-component": "search-bar", className: v, children: /* @__PURE__ */ D(
141
141
  "button",
142
142
  {
@@ -169,7 +169,7 @@ const ne = U(
169
169
  size: n,
170
170
  density: p,
171
171
  landmarkProps: m,
172
- placeholder: i,
172
+ placeholder: d,
173
173
  shortcutHint: h,
174
174
  shortcutLabel: S,
175
175
  ariaKeyshortcuts: u,
@@ -187,19 +187,19 @@ function oe(r) {
187
187
  density: n,
188
188
  landmarkProps: p,
189
189
  placeholder: y,
190
- shortcutHint: i,
190
+ shortcutHint: d,
191
191
  shortcutLabel: h,
192
192
  ariaKeyshortcuts: v,
193
193
  className: t,
194
194
  value: g,
195
195
  defaultValue: z,
196
196
  onQueryChange: k,
197
- results: d,
197
+ results: i,
198
198
  onSelect: b,
199
199
  debounceMs: C = 150
200
200
  } = r, { t: l } = E(), c = g !== void 0, [R, I] = V(z ?? ""), S = c ? g ?? "" : R, [u, m] = V(!1), [x, N] = V(0), H = W(null), M = J(), $ = ee((e) => {
201
201
  k == null || k(e);
202
- }, C), f = X(() => d ? d.flatMap((e) => e.items) : [], [d]);
202
+ }, C), f = X(() => i ? i.flatMap((e) => e.items) : [], [i]);
203
203
  O(() => {
204
204
  x > f.length - 1 && N(0);
205
205
  }, [f.length, x]);
@@ -265,7 +265,7 @@ function oe(r) {
265
265
  "aria-activedescendant": T
266
266
  }
267
267
  ),
268
- i ? /* @__PURE__ */ s(
268
+ d ? /* @__PURE__ */ s(
269
269
  "kbd",
270
270
  {
271
271
  className: [
@@ -298,8 +298,8 @@ function oe(r) {
298
298
  role: "listbox",
299
299
  "aria-label": l("search.resultsLabel", "Search results"),
300
300
  className: "ds:flex ds:flex-col ds:gap-[calc(var(--spacing-xs)/2)]",
301
- children: d && d.length > 0 ? ie(
302
- d,
301
+ children: i && i.length > 0 ? de(
302
+ i,
303
303
  x,
304
304
  M,
305
305
  A,
@@ -322,37 +322,37 @@ function oe(r) {
322
322
  }
323
323
  ) });
324
324
  }
325
- function ie(r, a, o, n, p) {
325
+ function de(r, a, o, n, p) {
326
326
  let y = 0;
327
- return r.map((i, h) => {
328
- const v = i.heading ? `${o}-group-${h}-heading` : void 0;
327
+ return r.map((d, h) => {
328
+ const v = d.heading ? `${o}-group-${h}-heading` : void 0;
329
329
  return /* @__PURE__ */ D(
330
330
  "div",
331
331
  {
332
- role: i.heading ? "group" : "presentation",
332
+ role: d.heading ? "group" : "presentation",
333
333
  "aria-labelledby": v,
334
334
  children: [
335
- i.heading ? /* @__PURE__ */ s(
335
+ d.heading ? /* @__PURE__ */ s(
336
336
  "div",
337
337
  {
338
338
  id: v,
339
339
  "aria-hidden": "true",
340
340
  className: "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)] type-eyebrow ds:text-[color:var(--foreground)]",
341
- children: i.heading
341
+ children: d.heading
342
342
  }
343
343
  ) : null,
344
- i.items.map((t) => {
344
+ d.items.map((t) => {
345
345
  const g = y;
346
346
  y += 1;
347
- const z = g === a, k = `${o}-option-${g}`, d = de(t.href), b = [
348
- "flex items-center gap-[var(--spacing-sm)]",
349
- "ps-[var(--spacing-sm)] pe-[var(--spacing-sm)]",
350
- "pt-[var(--spacing-xs)] pb-[var(--spacing-xs)]",
351
- "rounded-[var(--radius-sm)]",
352
- "cursor-pointer",
353
- "no-underline text-[color:var(--foreground)]",
354
- "min-h-[var(--min-target-size)]",
355
- z ? "bg-[var(--muted)]/40" : ""
347
+ const z = g === a, k = `${o}-option-${g}`, i = ie(t.href), b = [
348
+ "ds:flex ds:items-center ds:gap-[var(--spacing-sm)]",
349
+ "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]",
350
+ "ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]",
351
+ "ds:rounded-[var(--radius-sm)]",
352
+ "ds:cursor-pointer",
353
+ "ds:no-underline ds:text-[color:var(--foreground)]",
354
+ "ds:min-h-[var(--min-target-size)]",
355
+ z ? "ds:bg-[var(--muted)]/40" : ""
356
356
  ].join(" "), C = /* @__PURE__ */ D(G, { children: [
357
357
  t.icon ? /* @__PURE__ */ s(
358
358
  "span",
@@ -376,7 +376,7 @@ function ie(r, a, o, n, p) {
376
376
  onMouseEnter: () => p(g),
377
377
  className: b
378
378
  };
379
- return d ? /* @__PURE__ */ s("a", { href: d, ...l, children: C }, t.id) : /* @__PURE__ */ s("div", { ...l, children: C }, t.id);
379
+ return i ? /* @__PURE__ */ s("a", { href: i, ...l, children: C }, t.id) : /* @__PURE__ */ s("div", { ...l, children: C }, t.id);
380
380
  })
381
381
  ]
382
382
  },
@@ -384,7 +384,7 @@ function ie(r, a, o, n, p) {
384
384
  );
385
385
  });
386
386
  }
387
- function de(r) {
387
+ function ie(r) {
388
388
  if (!r) return;
389
389
  const a = r.trim();
390
390
  if (a !== "" && (/^(https?:|mailto:|tel:)/i.test(a) || /^(\/|\.\/|\.\.\/)/.test(a)))
@@ -394,4 +394,4 @@ export {
394
394
  ne as S,
395
395
  ge as f
396
396
  };
397
- //# sourceMappingURL=search-bar-9Zbew4yM.js.map
397
+ //# sourceMappingURL=search-bar-fcGqDFW3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-bar-9Zbew4yM.js","sources":["../../src/components/search-bar/search-bar.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { SearchInput } from '../search-input/search-input';\nimport { useDebouncedCallback, normalizeDiacritics } from '../_shared';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut detection */\n/* ------------------------------------------------------------------ */\n\nfunction isMacLike(): boolean {\n if (typeof navigator === 'undefined') return false;\n // Prefer `userAgentData.platform` where supported; fall back to the\n // deprecated `navigator.platform`. Both are strings; we just look for\n // `mac`.\n const uaData = (navigator as unknown as {\n userAgentData?: { platform?: string };\n }).userAgentData;\n const platformString = uaData?.platform ?? navigator.platform ?? '';\n return /mac/i.test(platformString);\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst launcherVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n // Same visual language as <SearchInput> so the launcher truly looks\n // like an input. --muted-foreground over --background meets AA 4.5:1\n // in every theme; --muted is a mid-tone not suitable as a surface.\n 'ds:bg-[var(--background)] ds:border ds:border-[color:var(--border)]',\n 'ds:text-[color:var(--muted-foreground)]',\n // Opaque hover — mix 20% muted into --background so the launcher stays a\n // solid surface even when placed over a brand-tinted parent (e.g. the\n // Header's `brand` variant).\n 'ds:hover:bg-[color-mix(in_srgb,var(--muted)_20%,var(--background))]',\n 'ds:transition-colors ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n density: {\n default: '',\n compact: 'ds:min-h-0 ds:h-8',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst inlineWrapperVariants = cva(\n [\n 'ds:inline-flex ds:flex-col',\n 'ds:w-full',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n density: {\n default: '',\n compact: '',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst shortcutPillVariants = cva(\n [\n 'ds:hidden ds:md:inline-flex ds:items-center ds:gap-[calc(var(--spacing-xs)/2)]',\n 'ds:ms-auto',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:ps-[calc(var(--spacing-xs)/1.2)] ds:pe-[calc(var(--spacing-xs)/1.2)]',\n 'ds:py-[calc(var(--spacing-xs)/2)]',\n // Use full --foreground (not --muted-foreground) so axe's contrast\n // check clears 4.5:1 even against the 1px --border edge region.\n 'ds:text-[length:var(--font-size-xs)] ds:text-[color:var(--foreground)]',\n 'ds:font-[family-name:var(--font-mono)]',\n ].join(' '),\n);\n\nconst popoverContentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion gates — reduced-motion honoured via .theme-accessible's 0ms\n // animation-duration token.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SearchBarResultItem {\n id: string;\n /** Display label. */\n label: string;\n /** Optional icon rendered on inline-start (aria-hidden). */\n icon?: ReactNode;\n /** Optional right-aligned meta text (tag, count, section label). */\n meta?: string;\n /** Optional href — the list renders anchors when present. */\n href?: string;\n}\n\nexport interface SearchBarResultGroup {\n /** Heading displayed above the items (aria-hidden=\"true\" — visual only). */\n heading?: string;\n items: SearchBarResultItem[];\n}\n\ntype SharedProps = {\n size?: 'sm' | 'md' | 'lg';\n density?: 'default' | 'compact';\n /** `true` wraps in <search role=\"search\"> when this is the page's primary search. */\n topLevel?: boolean;\n placeholder?: string;\n /** Platform-aware shortcut pill — default `true` (hidden below `md` breakpoint). */\n shortcutHint?: boolean;\n className?: string;\n};\n\ntype LauncherProps = SharedProps & {\n mode?: 'launcher';\n /** Called on click / Enter / global Cmd/Ctrl+K. */\n onOpenCommandPalette: () => void;\n // Not used in launcher mode.\n value?: never;\n defaultValue?: never;\n onQueryChange?: never;\n results?: never;\n onSelect?: never;\n debounceMs?: never;\n};\n\ntype InlineProps = SharedProps & {\n mode: 'inline';\n value?: string;\n defaultValue?: string;\n onQueryChange?: (query: string) => void;\n /** Groups of results rendered in the popover. */\n results?: SearchBarResultGroup[];\n onSelect?: (item: SearchBarResultItem) => void;\n debounceMs?: number;\n // Not used in inline mode.\n onOpenCommandPalette?: never;\n};\n\nexport type SearchBarProps = (LauncherProps | InlineProps) &\n Omit<\n HTMLAttributes<HTMLDivElement>,\n 'role' | 'onChange' | 'children' | 'defaultValue' | 'results'\n > &\n VariantProps<typeof launcherVariants>;\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nexport function filterSearchResults(\n query: string,\n groups: SearchBarResultGroup[],\n): SearchBarResultGroup[] {\n const needle = normalizeDiacritics(query.trim());\n if (needle === '') return groups;\n return groups\n .map((g) => ({\n ...g,\n items: g.items.filter((item) =>\n normalizeDiacritics(item.label).includes(needle),\n ),\n }))\n .filter((g) => g.items.length > 0);\n}\n\n/* ------------------------------------------------------------------ */\n/* SearchBar */\n/* ------------------------------------------------------------------ */\n\nexport const SearchBar = forwardRef<HTMLDivElement, SearchBarProps>(\n (props, ref) => {\n // Strip every API prop from `...rest` so nothing leaks to the DOM as\n // an unknown attribute (React warns in DEV and some become invalid\n // HTML in production).\n const {\n mode = 'launcher',\n size = 'md',\n density = 'default',\n topLevel = false,\n placeholder,\n shortcutHint = true,\n className,\n onOpenCommandPalette,\n value: _value,\n defaultValue: _defaultValue,\n onQueryChange: _onQueryChange,\n results: _results,\n onSelect: _onSelect,\n debounceMs: _debounceMs,\n ...rest\n } = props as SearchBarProps & { className?: string };\n // silence unused-var warnings for the destructured siblings we only\n // needed to peel off the spread target.\n void _value;\n void _defaultValue;\n void _onQueryChange;\n void _results;\n void _onSelect;\n void _debounceMs;\n\n const { t } = useTranslation();\n const [isMac, setIsMac] = useState(false);\n useEffect(() => {\n setIsMac(isMacLike());\n }, []);\n\n const shortcutLabel = isMac ? '\\u2318K' : 'Ctrl+K';\n // Advertise the shortcut on the launcher button. The binding itself\n // lives in `useCommandPalette()` (CommandPalette owns its open state);\n // duplicating the listener here would cause a double-fire.\n const ariaKeyshortcuts = 'Meta+K Control+K';\n\n /* ---- Landmark role --------------------------------------------- */\n const landmarkProps = topLevel\n ? { role: 'search' as const }\n : { role: undefined };\n\n /* ---- LAUNCHER MODE -------------------------------------------- */\n if (mode === 'launcher') {\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n return (\n <div ref={ref} {...landmarkProps} data-component=\"search-bar\" className={className}>\n <button\n type=\"button\"\n onClick={onOpenCommandPalette}\n aria-haspopup=\"dialog\"\n aria-label={t('search.open', 'Open search')}\n aria-keyshortcuts={ariaKeyshortcuts}\n className={launcherVariants({ size, density })}\n {...(rest as HTMLAttributes<HTMLButtonElement>)}\n >\n <Search\n aria-hidden\n className=\"ds:size-4 ds:shrink-0\"\n focusable=\"false\"\n />\n <span aria-hidden=\"true\" className=\"ds:truncate ds:text-start\">\n {resolvedPlaceholder}\n </span>\n {shortcutHint ? (\n <kbd className={shortcutPillVariants()}>{shortcutLabel}</kbd>\n ) : null}\n </button>\n </div>\n );\n }\n\n /* ---- INLINE MODE ---------------------------------------------- */\n const inlineProps = props as InlineProps;\n return (\n <InlineSearchBar\n forwardedRef={ref}\n size={size}\n density={density}\n landmarkProps={landmarkProps}\n placeholder={placeholder}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n ariaKeyshortcuts={ariaKeyshortcuts}\n className={className}\n {...inlineProps}\n />\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\n/* ------------------------------------------------------------------ */\n/* InlineSearchBar — internal */\n/* ------------------------------------------------------------------ */\n\ninterface InlineInternalProps extends InlineProps {\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n size: 'sm' | 'md' | 'lg';\n density: 'default' | 'compact';\n landmarkProps: { role?: 'search' };\n shortcutHint: boolean;\n shortcutLabel: string;\n ariaKeyshortcuts: string;\n className?: string;\n}\n\nfunction InlineSearchBar(props: InlineInternalProps): ReactNode {\n const {\n forwardedRef,\n size,\n density,\n landmarkProps,\n placeholder,\n shortcutHint,\n shortcutLabel,\n ariaKeyshortcuts,\n className,\n value,\n defaultValue,\n onQueryChange,\n results,\n onSelect,\n debounceMs = 150,\n } = props;\n\n const { t } = useTranslation();\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const query = isControlled ? (value ?? '') : internalValue;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listboxId = useId();\n\n const debouncedQueryChange = useDebouncedCallback((next: string) => {\n onQueryChange?.(next);\n }, debounceMs);\n\n const flatResults = useMemo<SearchBarResultItem[]>(() => {\n if (!results) return [];\n return results.flatMap((g) => g.items);\n }, [results]);\n\n // Reset active index whenever the result count changes.\n useEffect(() => {\n if (activeIndex > flatResults.length - 1) setActiveIndex(0);\n }, [flatResults.length, activeIndex]);\n\n const handleInput = useCallback(\n (raw: string) => {\n if (!isControlled) setInternalValue(raw);\n debouncedQueryChange(raw);\n setOpen(raw.trim().length > 0);\n },\n [debouncedQueryChange, isControlled],\n );\n\n const commit = useCallback(\n (item: SearchBarResultItem) => {\n onSelect?.(item);\n setOpen(false);\n if (!isControlled) setInternalValue('');\n },\n [onSelect, isControlled],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n if (!open && event.key === 'ArrowDown' && flatResults.length > 0) {\n event.preventDefault();\n setOpen(true);\n return;\n }\n if (!open) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setActiveIndex((i) => (i + 1) % Math.max(flatResults.length, 1));\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n setActiveIndex(\n (i) =>\n (i - 1 + Math.max(flatResults.length, 1)) %\n Math.max(flatResults.length, 1),\n );\n } else if (event.key === 'Enter') {\n const item = flatResults[activeIndex];\n if (item) {\n event.preventDefault();\n commit(item);\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n setOpen(false);\n }\n },\n [open, flatResults, activeIndex, commit],\n );\n\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n\n const hasResults = flatResults.length > 0;\n // aria-activedescendant may only reference an element that actually exists\n // in the DOM — so only set it when the popover is open AND there are\n // results to land on. Referencing a non-existent option is an a11y\n // violation (aria-valid-attr-value).\n const activeDescendantId =\n open && hasResults ? `${listboxId}-option-${activeIndex}` : undefined;\n\n return (\n <RadixPopover.Root open={open && hasResults} onOpenChange={setOpen}>\n <div\n ref={forwardedRef}\n {...landmarkProps}\n data-component=\"search-bar\"\n className={[inlineWrapperVariants({ size, density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <RadixPopover.Anchor asChild>\n <div\n className=\"ds:relative ds:flex ds:items-center\"\n onKeyDown={handleKeyDown}\n >\n <SearchInput\n ref={inputRef}\n size={size}\n value={query}\n onInput={handleInput}\n placeholder={resolvedPlaceholder}\n aria-label={t('search.label', 'Search')}\n aria-keyshortcuts={ariaKeyshortcuts}\n role=\"combobox\"\n aria-expanded={open && hasResults}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendantId}\n />\n {shortcutHint ? (\n <kbd\n className={[\n shortcutPillVariants(),\n 'ds:absolute ds:end-[var(--spacing-sm)] ds:top-1/2 ds:-translate-y-1/2',\n 'ds:pointer-events-none',\n ].join(' ')}\n >\n {shortcutLabel}\n </kbd>\n ) : null}\n </div>\n </RadixPopover.Anchor>\n <RadixPopover.Portal>\n <RadixPopover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n aria-label={t('search.resultsLabel', 'Search results')}\n onOpenAutoFocus={(e) => e.preventDefault()}\n // Width matches the anchor via Radix's CSS variable. Applied\n // as a Tailwind arbitrary-value class so no inline style is\n // needed (23-constraints §4).\n className={[\n popoverContentVariants(),\n 'ds:w-[var(--radix-popover-trigger-width)]',\n ].join(' ')}\n >\n {/* listbox uses <div> rather than <ul> so the option role\n children don't trip the `<ul> must only contain <li>` axe\n rule. Options are direct descendants of the listbox root\n per the WAI-ARIA listbox pattern. */}\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label={t('search.resultsLabel', 'Search results')}\n className=\"ds:flex ds:flex-col ds:gap-[calc(var(--spacing-xs)/2)]\"\n >\n {results && results.length > 0 ? (\n renderGroups(\n results,\n activeIndex,\n listboxId,\n commit,\n setActiveIndex,\n )\n ) : (\n <div\n role=\"presentation\"\n className=\"ds:p-[var(--spacing-sm)] type-body-sm ds:text-[color:var(--foreground)]\"\n >\n {t('search.noResults', 'No results for \\u201C{{query}}\\u201D', {\n query,\n })}\n </div>\n )}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </div>\n </RadixPopover.Root>\n );\n}\n\nfunction renderGroups(\n groups: SearchBarResultGroup[],\n activeIndex: number,\n listboxId: string,\n onCommit: (item: SearchBarResultItem) => void,\n setActive: (index: number) => void,\n): ReactNode {\n let flatIndex = 0;\n // Flatten groups + headings into a single-level sequence of divs at the\n // listbox root. `role=\"group\"` wrappers keep the visual grouping while\n // keeping options as direct descendants of the listbox.\n return groups.map((group, gi) => {\n const headingId = group.heading ? `${listboxId}-group-${gi}-heading` : undefined;\n return (\n <div\n key={`g-${gi}`}\n role={group.heading ? 'group' : 'presentation'}\n aria-labelledby={headingId}\n >\n {group.heading ? (\n <div\n id={headingId}\n aria-hidden=\"true\"\n className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)] type-eyebrow ds:text-[color:var(--foreground)]\"\n >\n {group.heading}\n </div>\n ) : null}\n {group.items.map((item) => {\n const myIndex = flatIndex;\n flatIndex += 1;\n const isActive = myIndex === activeIndex;\n const optionId = `${listboxId}-option-${myIndex}`;\n const safeHref = safeNavigationHref(item.href);\n const commonClass = [\n 'flex items-center gap-[var(--spacing-sm)]',\n 'ps-[var(--spacing-sm)] pe-[var(--spacing-sm)]',\n 'pt-[var(--spacing-xs)] pb-[var(--spacing-xs)]',\n 'rounded-[var(--radius-sm)]',\n 'cursor-pointer',\n 'no-underline text-[color:var(--foreground)]',\n 'min-h-[var(--min-target-size)]',\n isActive ? 'bg-[var(--muted)]/40' : '',\n ].join(' ');\n const body = (\n <>\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {item.icon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:text-[length:var(--font-size-sm)]\">\n {item.label}\n </span>\n {item.meta ? (\n <span className=\"ds:ms-auto type-meta ds:text-[color:var(--foreground)]\">\n {item.meta}\n </span>\n ) : null}\n </>\n );\n const shared = {\n id: optionId,\n role: 'option' as const,\n 'aria-selected': isActive,\n // onMouseDown rather than onClick so we trigger before the\n // input loses focus to the pointer-down on the popover.\n onMouseDown: (e: React.MouseEvent) => {\n e.preventDefault();\n onCommit(item);\n },\n onMouseEnter: () => setActive(myIndex),\n className: commonClass,\n };\n if (safeHref) {\n return (\n <a key={item.id} href={safeHref} {...shared}>\n {body}\n </a>\n );\n }\n return (\n <div key={item.id} {...shared}>\n {body}\n </div>\n );\n })}\n </div>\n );\n });\n}\n\n/**\n * Allow-list for result-item `href` strings. Same allow-list as the\n * chat-message token renderer: http(s) + mailto + tel + same-origin\n * relative paths. Anything else (including `javascript:` and `data:`)\n * returns `undefined`, causing the renderer to fall back to a <div>.\n */\nfunction safeNavigationHref(href: string | undefined): string | undefined {\n if (!href) return undefined;\n const trimmed = href.trim();\n if (trimmed === '') return undefined;\n if (/^(https?:|mailto:|tel:)/i.test(trimmed)) return trimmed;\n // Same-origin relative paths are safe because the browser resolves\n // against `window.location`. Leading `/` or `./` or `../` qualify.\n if (/^(\\/|\\.\\/|\\.\\.\\/)/.test(trimmed)) return trimmed;\n return undefined;\n}\n"],"names":["isMacLike","uaData","platformString","launcherVariants","cva","inlineWrapperVariants","shortcutPillVariants","popoverContentVariants","filterSearchResults","query","groups","needle","normalizeDiacritics","g","item","SearchBar","forwardRef","props","ref","mode","size","density","topLevel","placeholder","shortcutHint","className","onOpenCommandPalette","_value","_defaultValue","_onQueryChange","_results","_onSelect","_debounceMs","rest","t","useTranslation","isMac","setIsMac","useState","useEffect","shortcutLabel","ariaKeyshortcuts","landmarkProps","resolvedPlaceholder","jsxs","jsx","Search","InlineSearchBar","forwardedRef","value","defaultValue","onQueryChange","results","onSelect","debounceMs","isControlled","internalValue","setInternalValue","open","setOpen","activeIndex","setActiveIndex","inputRef","useRef","listboxId","useId","debouncedQueryChange","useDebouncedCallback","next","flatResults","useMemo","handleInput","useCallback","raw","commit","handleKeyDown","event","i","hasResults","activeDescendantId","RadixPopover","SearchInput","renderGroups","onCommit","setActive","flatIndex","group","gi","headingId","myIndex","isActive","optionId","safeHref","safeNavigationHref","commonClass","body","Fragment","shared","e","href","trimmed"],"mappings":"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"}
1
+ {"version":3,"file":"search-bar-fcGqDFW3.js","sources":["../../src/components/search-bar/search-bar.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { SearchInput } from '../search-input/search-input';\nimport { useDebouncedCallback, normalizeDiacritics } from '../_shared';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut detection */\n/* ------------------------------------------------------------------ */\n\nfunction isMacLike(): boolean {\n if (typeof navigator === 'undefined') return false;\n // Prefer `userAgentData.platform` where supported; fall back to the\n // deprecated `navigator.platform`. Both are strings; we just look for\n // `mac`.\n const uaData = (navigator as unknown as {\n userAgentData?: { platform?: string };\n }).userAgentData;\n const platformString = uaData?.platform ?? navigator.platform ?? '';\n return /mac/i.test(platformString);\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst launcherVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n // Same visual language as <SearchInput> so the launcher truly looks\n // like an input. --muted-foreground over --background meets AA 4.5:1\n // in every theme; --muted is a mid-tone not suitable as a surface.\n 'ds:bg-[var(--background)] ds:border ds:border-[color:var(--border)]',\n 'ds:text-[color:var(--muted-foreground)]',\n // Opaque hover — mix 20% muted into --background so the launcher stays a\n // solid surface even when placed over a brand-tinted parent (e.g. the\n // Header's `brand` variant).\n 'ds:hover:bg-[color-mix(in_srgb,var(--muted)_20%,var(--background))]',\n 'ds:transition-colors ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n density: {\n default: '',\n compact: 'ds:min-h-0 ds:h-8',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst inlineWrapperVariants = cva(\n [\n 'ds:inline-flex ds:flex-col',\n 'ds:w-full',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n density: {\n default: '',\n compact: '',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst shortcutPillVariants = cva(\n [\n 'ds:hidden ds:md:inline-flex ds:items-center ds:gap-[calc(var(--spacing-xs)/2)]',\n 'ds:ms-auto',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:ps-[calc(var(--spacing-xs)/1.2)] ds:pe-[calc(var(--spacing-xs)/1.2)]',\n 'ds:py-[calc(var(--spacing-xs)/2)]',\n // Use full --foreground (not --muted-foreground) so axe's contrast\n // check clears 4.5:1 even against the 1px --border edge region.\n 'ds:text-[length:var(--font-size-xs)] ds:text-[color:var(--foreground)]',\n 'ds:font-[family-name:var(--font-mono)]',\n ].join(' '),\n);\n\nconst popoverContentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion gates — reduced-motion honoured via .theme-accessible's 0ms\n // animation-duration token.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SearchBarResultItem {\n id: string;\n /** Display label. */\n label: string;\n /** Optional icon rendered on inline-start (aria-hidden). */\n icon?: ReactNode;\n /** Optional right-aligned meta text (tag, count, section label). */\n meta?: string;\n /** Optional href — the list renders anchors when present. */\n href?: string;\n}\n\nexport interface SearchBarResultGroup {\n /** Heading displayed above the items (aria-hidden=\"true\" — visual only). */\n heading?: string;\n items: SearchBarResultItem[];\n}\n\ntype SharedProps = {\n size?: 'sm' | 'md' | 'lg';\n density?: 'default' | 'compact';\n /** `true` wraps in <search role=\"search\"> when this is the page's primary search. */\n topLevel?: boolean;\n placeholder?: string;\n /** Platform-aware shortcut pill — default `true` (hidden below `md` breakpoint). */\n shortcutHint?: boolean;\n className?: string;\n};\n\ntype LauncherProps = SharedProps & {\n mode?: 'launcher';\n /** Called on click / Enter / global Cmd/Ctrl+K. */\n onOpenCommandPalette: () => void;\n // Not used in launcher mode.\n value?: never;\n defaultValue?: never;\n onQueryChange?: never;\n results?: never;\n onSelect?: never;\n debounceMs?: never;\n};\n\ntype InlineProps = SharedProps & {\n mode: 'inline';\n value?: string;\n defaultValue?: string;\n onQueryChange?: (query: string) => void;\n /** Groups of results rendered in the popover. */\n results?: SearchBarResultGroup[];\n onSelect?: (item: SearchBarResultItem) => void;\n debounceMs?: number;\n // Not used in inline mode.\n onOpenCommandPalette?: never;\n};\n\nexport type SearchBarProps = (LauncherProps | InlineProps) &\n Omit<\n HTMLAttributes<HTMLDivElement>,\n 'role' | 'onChange' | 'children' | 'defaultValue' | 'results'\n > &\n VariantProps<typeof launcherVariants>;\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nexport function filterSearchResults(\n query: string,\n groups: SearchBarResultGroup[],\n): SearchBarResultGroup[] {\n const needle = normalizeDiacritics(query.trim());\n if (needle === '') return groups;\n return groups\n .map((g) => ({\n ...g,\n items: g.items.filter((item) =>\n normalizeDiacritics(item.label).includes(needle),\n ),\n }))\n .filter((g) => g.items.length > 0);\n}\n\n/* ------------------------------------------------------------------ */\n/* SearchBar */\n/* ------------------------------------------------------------------ */\n\nexport const SearchBar = forwardRef<HTMLDivElement, SearchBarProps>(\n (props, ref) => {\n // Strip every API prop from `...rest` so nothing leaks to the DOM as\n // an unknown attribute (React warns in DEV and some become invalid\n // HTML in production).\n const {\n mode = 'launcher',\n size = 'md',\n density = 'default',\n topLevel = false,\n placeholder,\n shortcutHint = true,\n className,\n onOpenCommandPalette,\n value: _value,\n defaultValue: _defaultValue,\n onQueryChange: _onQueryChange,\n results: _results,\n onSelect: _onSelect,\n debounceMs: _debounceMs,\n ...rest\n } = props as SearchBarProps & { className?: string };\n // silence unused-var warnings for the destructured siblings we only\n // needed to peel off the spread target.\n void _value;\n void _defaultValue;\n void _onQueryChange;\n void _results;\n void _onSelect;\n void _debounceMs;\n\n const { t } = useTranslation();\n const [isMac, setIsMac] = useState(false);\n useEffect(() => {\n setIsMac(isMacLike());\n }, []);\n\n const shortcutLabel = isMac ? '\\u2318K' : 'Ctrl+K';\n // Advertise the shortcut on the launcher button. The binding itself\n // lives in `useCommandPalette()` (CommandPalette owns its open state);\n // duplicating the listener here would cause a double-fire.\n const ariaKeyshortcuts = 'Meta+K Control+K';\n\n /* ---- Landmark role --------------------------------------------- */\n const landmarkProps = topLevel\n ? { role: 'search' as const }\n : { role: undefined };\n\n /* ---- LAUNCHER MODE -------------------------------------------- */\n if (mode === 'launcher') {\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n return (\n <div ref={ref} {...landmarkProps} data-component=\"search-bar\" className={className}>\n <button\n type=\"button\"\n onClick={onOpenCommandPalette}\n aria-haspopup=\"dialog\"\n aria-label={t('search.open', 'Open search')}\n aria-keyshortcuts={ariaKeyshortcuts}\n className={launcherVariants({ size, density })}\n {...(rest as HTMLAttributes<HTMLButtonElement>)}\n >\n <Search\n aria-hidden\n className=\"ds:size-4 ds:shrink-0\"\n focusable=\"false\"\n />\n <span aria-hidden=\"true\" className=\"ds:truncate ds:text-start\">\n {resolvedPlaceholder}\n </span>\n {shortcutHint ? (\n <kbd className={shortcutPillVariants()}>{shortcutLabel}</kbd>\n ) : null}\n </button>\n </div>\n );\n }\n\n /* ---- INLINE MODE ---------------------------------------------- */\n const inlineProps = props as InlineProps;\n return (\n <InlineSearchBar\n forwardedRef={ref}\n size={size}\n density={density}\n landmarkProps={landmarkProps}\n placeholder={placeholder}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n ariaKeyshortcuts={ariaKeyshortcuts}\n className={className}\n {...inlineProps}\n />\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\n/* ------------------------------------------------------------------ */\n/* InlineSearchBar — internal */\n/* ------------------------------------------------------------------ */\n\ninterface InlineInternalProps extends InlineProps {\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n size: 'sm' | 'md' | 'lg';\n density: 'default' | 'compact';\n landmarkProps: { role?: 'search' };\n shortcutHint: boolean;\n shortcutLabel: string;\n ariaKeyshortcuts: string;\n className?: string;\n}\n\nfunction InlineSearchBar(props: InlineInternalProps): ReactNode {\n const {\n forwardedRef,\n size,\n density,\n landmarkProps,\n placeholder,\n shortcutHint,\n shortcutLabel,\n ariaKeyshortcuts,\n className,\n value,\n defaultValue,\n onQueryChange,\n results,\n onSelect,\n debounceMs = 150,\n } = props;\n\n const { t } = useTranslation();\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const query = isControlled ? (value ?? '') : internalValue;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listboxId = useId();\n\n const debouncedQueryChange = useDebouncedCallback((next: string) => {\n onQueryChange?.(next);\n }, debounceMs);\n\n const flatResults = useMemo<SearchBarResultItem[]>(() => {\n if (!results) return [];\n return results.flatMap((g) => g.items);\n }, [results]);\n\n // Reset active index whenever the result count changes.\n useEffect(() => {\n if (activeIndex > flatResults.length - 1) setActiveIndex(0);\n }, [flatResults.length, activeIndex]);\n\n const handleInput = useCallback(\n (raw: string) => {\n if (!isControlled) setInternalValue(raw);\n debouncedQueryChange(raw);\n setOpen(raw.trim().length > 0);\n },\n [debouncedQueryChange, isControlled],\n );\n\n const commit = useCallback(\n (item: SearchBarResultItem) => {\n onSelect?.(item);\n setOpen(false);\n if (!isControlled) setInternalValue('');\n },\n [onSelect, isControlled],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n if (!open && event.key === 'ArrowDown' && flatResults.length > 0) {\n event.preventDefault();\n setOpen(true);\n return;\n }\n if (!open) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setActiveIndex((i) => (i + 1) % Math.max(flatResults.length, 1));\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n setActiveIndex(\n (i) =>\n (i - 1 + Math.max(flatResults.length, 1)) %\n Math.max(flatResults.length, 1),\n );\n } else if (event.key === 'Enter') {\n const item = flatResults[activeIndex];\n if (item) {\n event.preventDefault();\n commit(item);\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n setOpen(false);\n }\n },\n [open, flatResults, activeIndex, commit],\n );\n\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n\n const hasResults = flatResults.length > 0;\n // aria-activedescendant may only reference an element that actually exists\n // in the DOM — so only set it when the popover is open AND there are\n // results to land on. Referencing a non-existent option is an a11y\n // violation (aria-valid-attr-value).\n const activeDescendantId =\n open && hasResults ? `${listboxId}-option-${activeIndex}` : undefined;\n\n return (\n <RadixPopover.Root open={open && hasResults} onOpenChange={setOpen}>\n <div\n ref={forwardedRef}\n {...landmarkProps}\n data-component=\"search-bar\"\n className={[inlineWrapperVariants({ size, density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <RadixPopover.Anchor asChild>\n <div\n className=\"ds:relative ds:flex ds:items-center\"\n onKeyDown={handleKeyDown}\n >\n <SearchInput\n ref={inputRef}\n size={size}\n value={query}\n onInput={handleInput}\n placeholder={resolvedPlaceholder}\n aria-label={t('search.label', 'Search')}\n aria-keyshortcuts={ariaKeyshortcuts}\n role=\"combobox\"\n aria-expanded={open && hasResults}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendantId}\n />\n {shortcutHint ? (\n <kbd\n className={[\n shortcutPillVariants(),\n 'ds:absolute ds:end-[var(--spacing-sm)] ds:top-1/2 ds:-translate-y-1/2',\n 'ds:pointer-events-none',\n ].join(' ')}\n >\n {shortcutLabel}\n </kbd>\n ) : null}\n </div>\n </RadixPopover.Anchor>\n <RadixPopover.Portal>\n <RadixPopover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n aria-label={t('search.resultsLabel', 'Search results')}\n onOpenAutoFocus={(e) => e.preventDefault()}\n // Width matches the anchor via Radix's CSS variable. Applied\n // as a Tailwind arbitrary-value class so no inline style is\n // needed (23-constraints §4).\n className={[\n popoverContentVariants(),\n 'ds:w-[var(--radix-popover-trigger-width)]',\n ].join(' ')}\n >\n {/* listbox uses <div> rather than <ul> so the option role\n children don't trip the `<ul> must only contain <li>` axe\n rule. Options are direct descendants of the listbox root\n per the WAI-ARIA listbox pattern. */}\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label={t('search.resultsLabel', 'Search results')}\n className=\"ds:flex ds:flex-col ds:gap-[calc(var(--spacing-xs)/2)]\"\n >\n {results && results.length > 0 ? (\n renderGroups(\n results,\n activeIndex,\n listboxId,\n commit,\n setActiveIndex,\n )\n ) : (\n <div\n role=\"presentation\"\n className=\"ds:p-[var(--spacing-sm)] type-body-sm ds:text-[color:var(--foreground)]\"\n >\n {t('search.noResults', 'No results for \\u201C{{query}}\\u201D', {\n query,\n })}\n </div>\n )}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </div>\n </RadixPopover.Root>\n );\n}\n\nfunction renderGroups(\n groups: SearchBarResultGroup[],\n activeIndex: number,\n listboxId: string,\n onCommit: (item: SearchBarResultItem) => void,\n setActive: (index: number) => void,\n): ReactNode {\n let flatIndex = 0;\n // Flatten groups + headings into a single-level sequence of divs at the\n // listbox root. `role=\"group\"` wrappers keep the visual grouping while\n // keeping options as direct descendants of the listbox.\n return groups.map((group, gi) => {\n const headingId = group.heading ? `${listboxId}-group-${gi}-heading` : undefined;\n return (\n <div\n key={`g-${gi}`}\n role={group.heading ? 'group' : 'presentation'}\n aria-labelledby={headingId}\n >\n {group.heading ? (\n <div\n id={headingId}\n aria-hidden=\"true\"\n className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)] type-eyebrow ds:text-[color:var(--foreground)]\"\n >\n {group.heading}\n </div>\n ) : null}\n {group.items.map((item) => {\n const myIndex = flatIndex;\n flatIndex += 1;\n const isActive = myIndex === activeIndex;\n const optionId = `${listboxId}-option-${myIndex}`;\n const safeHref = safeNavigationHref(item.href);\n const commonClass = [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:cursor-pointer',\n 'ds:no-underline ds:text-[color:var(--foreground)]',\n 'ds:min-h-[var(--min-target-size)]',\n isActive ? 'ds:bg-[var(--muted)]/40' : '',\n ].join(' ');\n const body = (\n <>\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {item.icon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:text-[length:var(--font-size-sm)]\">\n {item.label}\n </span>\n {item.meta ? (\n <span className=\"ds:ms-auto type-meta ds:text-[color:var(--foreground)]\">\n {item.meta}\n </span>\n ) : null}\n </>\n );\n const shared = {\n id: optionId,\n role: 'option' as const,\n 'aria-selected': isActive,\n // onMouseDown rather than onClick so we trigger before the\n // input loses focus to the pointer-down on the popover.\n onMouseDown: (e: React.MouseEvent) => {\n e.preventDefault();\n onCommit(item);\n },\n onMouseEnter: () => setActive(myIndex),\n className: commonClass,\n };\n if (safeHref) {\n return (\n <a key={item.id} href={safeHref} {...shared}>\n {body}\n </a>\n );\n }\n return (\n <div key={item.id} {...shared}>\n {body}\n </div>\n );\n })}\n </div>\n );\n });\n}\n\n/**\n * Allow-list for result-item `href` strings. Same allow-list as the\n * chat-message token renderer: http(s) + mailto + tel + same-origin\n * relative paths. Anything else (including `javascript:` and `data:`)\n * returns `undefined`, causing the renderer to fall back to a <div>.\n */\nfunction safeNavigationHref(href: string | undefined): string | undefined {\n if (!href) return undefined;\n const trimmed = href.trim();\n if (trimmed === '') return undefined;\n if (/^(https?:|mailto:|tel:)/i.test(trimmed)) return trimmed;\n // Same-origin relative paths are safe because the browser resolves\n // against `window.location`. Leading `/` or `./` or `../` qualify.\n if (/^(\\/|\\.\\/|\\.\\.\\/)/.test(trimmed)) return trimmed;\n return undefined;\n}\n"],"names":["isMacLike","uaData","platformString","launcherVariants","cva","inlineWrapperVariants","shortcutPillVariants","popoverContentVariants","filterSearchResults","query","groups","needle","normalizeDiacritics","g","item","SearchBar","forwardRef","props","ref","mode","size","density","topLevel","placeholder","shortcutHint","className","onOpenCommandPalette","_value","_defaultValue","_onQueryChange","_results","_onSelect","_debounceMs","rest","t","useTranslation","isMac","setIsMac","useState","useEffect","shortcutLabel","ariaKeyshortcuts","landmarkProps","resolvedPlaceholder","jsxs","jsx","Search","InlineSearchBar","forwardedRef","value","defaultValue","onQueryChange","results","onSelect","debounceMs","isControlled","internalValue","setInternalValue","open","setOpen","activeIndex","setActiveIndex","inputRef","useRef","listboxId","useId","debouncedQueryChange","useDebouncedCallback","next","flatResults","useMemo","handleInput","useCallback","raw","commit","handleKeyDown","event","i","hasResults","activeDescendantId","RadixPopover","SearchInput","renderGroups","onCommit","setActive","flatIndex","group","gi","headingId","myIndex","isActive","optionId","safeHref","safeNavigationHref","commonClass","body","Fragment","shared","e","href","trimmed"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsx as t, jsxs as ne } from "react/jsx-runtime";
2
2
  import { forwardRef as ie, useState as A, useRef as B, useCallback as m, useLayoutEffect as ae, useEffect as oe } from "react";
3
3
  import { c as b } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as de } from "react-i18next";
5
- import { T as le } from "./text-input-exh7VD7D.js";
5
+ import { T as le } from "./text-input-CRHvl5zk.js";
6
6
  import { S as ce } from "./spinner-GCcv67vh.js";
7
7
  import { u as ue } from "./form-field-context-94LwgYTQ.js";
8
8
  import { u as fe } from "./use-debounced-callback-BisrB-Fq.js";
@@ -194,4 +194,4 @@ ge.displayName = "SearchInput";
194
194
  export {
195
195
  ge as S
196
196
  };
197
- //# sourceMappingURL=search-input-CtkWITO2.js.map
197
+ //# sourceMappingURL=search-input-BVMCONyN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-input-CtkWITO2.js","sources":["../../src/components/search-input/search-input.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type FormEvent,\n type KeyboardEvent,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search, X } from 'lucide-react';\nimport { TextInput } from '../text-input/text-input';\nimport { Spinner } from '../spinner/spinner';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\n\nconst rootVariants = cva('ds:relative ds:w-full');\n\nconst clearButtonVariants = cva(\n [\n 'ds:absolute ds:inset-y-0 ds:end-0 ds:pe-3',\n 'ds:inline-flex ds:items-center ds:justify-center ds:pointer-events-auto',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst expandButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:size-[var(--min-target-size)] ds:rounded-[var(--radius-sm)]',\n 'ds:bg-background ds:border ds:border-border ds:text-muted-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:text-foreground ds:hover:bg-muted',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst expandableWrapperVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'ds:transition-[width] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n);\n\ntype SearchInputRole = 'combobox';\n\nexport interface SearchInputProps {\n value?: string;\n defaultValue?: string;\n onChange?: (debouncedValue: string) => void;\n onInput?: (rawValue: string) => void;\n debounceMs?: number;\n isLoading?: boolean;\n variant?: 'inline' | 'expandable';\n size?: 'sm' | 'md' | 'lg';\n globalShortcut?: string;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n name?: string;\n id?: string;\n form?: string;\n autoComplete?: string;\n autoFocus?: boolean;\n 'aria-label'?: string;\n role?: SearchInputRole;\n 'aria-expanded'?: boolean;\n 'aria-controls'?: string;\n 'aria-activedescendant'?: string;\n}\n\nfunction isEditableElement(el: Element | null): boolean {\n if (!el) return false;\n const tag = el.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true;\n if ((el as HTMLElement).isContentEditable) return true;\n return false;\n}\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n onInput,\n debounceMs = 200,\n isLoading = false,\n variant = 'inline',\n size = 'md',\n globalShortcut,\n placeholder,\n disabled,\n className,\n name,\n id,\n form,\n autoComplete = 'off',\n autoFocus,\n role,\n ...ariaProps\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inputId = id ?? ctx.id;\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n String(defaultValue ?? ''),\n );\n const rawValue = isControlled ? String(value) : internalValue;\n const hasValue = rawValue.length > 0;\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n const [expanded, setExpanded] = useState<boolean>(\n variant === 'inline' || hasValue,\n );\n const pendingFocusRef = useRef<boolean>(false);\n\n useLayoutEffect(() => {\n if (pendingFocusRef.current && innerRef.current) {\n innerRef.current.focus();\n pendingFocusRef.current = false;\n }\n });\n\n const debouncedOnChange = useDebouncedCallback(\n (next: string) => {\n onChange?.(next);\n },\n debounceMs,\n );\n\n const fireImmediate = useCallback(\n (next: string) => {\n debouncedOnChange.cancel();\n onChange?.(next);\n },\n [debouncedOnChange, onChange],\n );\n\n const commitValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n },\n [isControlled],\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value;\n commitValue(next);\n if (next === '') {\n fireImmediate('');\n } else {\n debouncedOnChange(next);\n }\n };\n\n const handleNativeInput = (event: FormEvent<HTMLInputElement>) => {\n const next = event.currentTarget.value;\n onInput?.(next);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Escape') return;\n if (event.nativeEvent.isComposing) return;\n if (!hasValue) return;\n event.preventDefault();\n event.stopPropagation();\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n };\n\n const handleClear = () => {\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n if (variant !== 'expandable') return;\n if (event.currentTarget.value === '') {\n setExpanded(false);\n }\n };\n\n const focusInput = useCallback(() => {\n if (variant === 'expandable' && !expanded) {\n pendingFocusRef.current = true;\n setExpanded(true);\n } else {\n innerRef.current?.focus();\n }\n }, [variant, expanded]);\n\n useEffect(() => {\n if (!globalShortcut) return;\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key !== globalShortcut) return;\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (isEditableElement(document.activeElement)) return;\n event.preventDefault();\n focusInput();\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [globalShortcut, focusInput]);\n\n const clearLabel = t('ui.inputs.search.clear', 'Clear search');\n const loadingLabel = t('ui.inputs.search.loading', 'Searching…');\n const defaultPlaceholder = t('ui.inputs.search.placeholder', 'Search…');\n const resolvedPlaceholder = placeholder ?? defaultPlaceholder;\n\n if (variant === 'expandable' && !expanded) {\n return (\n <div data-component=\"search-input\" className={expandableWrapperVariants({ className })}>\n <button\n type=\"button\"\n aria-label={resolvedPlaceholder}\n aria-expanded={false}\n aria-controls={inputId}\n disabled={effectiveDisabled}\n onClick={() => {\n pendingFocusRef.current = true;\n setExpanded(true);\n }}\n className={expandButtonVariants()}\n >\n <Search aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n </div>\n );\n }\n\n const comboboxAria =\n role === 'combobox'\n ? {\n role: 'combobox' as const,\n 'aria-expanded': ariaProps['aria-expanded'],\n 'aria-controls': ariaProps['aria-controls'],\n 'aria-activedescendant': ariaProps['aria-activedescendant'],\n }\n : undefined;\n\n const showClear = hasValue && !isLoading && !effectiveDisabled;\n const endSlot = isLoading ? (\n <Spinner size=\"sm\" label={loadingLabel} />\n ) : showClear ? (\n <span className=\"ds:inline-block ds:size-4\" aria-hidden=\"true\" />\n ) : undefined;\n\n return (\n <div data-component=\"search-input\" className={rootVariants({ className })}>\n <TextInput\n ref={setRefs}\n id={inputId}\n type=\"search\"\n size={size}\n value={rawValue}\n disabled={effectiveDisabled}\n placeholder={resolvedPlaceholder}\n name={name}\n form={form}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n startAdornment={<Search />}\n endAdornment={endSlot}\n clearable={false}\n onChange={handleChange}\n onInput={handleNativeInput}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n aria-label={ariaProps['aria-label']}\n aria-busy={isLoading || undefined}\n {...comboboxAria}\n />\n {showClear ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n onClick={handleClear}\n className={clearButtonVariants()}\n >\n <X aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n ) : null}\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {isLoading ? loadingLabel : ''}\n </span>\n </div>\n );\n },\n);\n\nSearchInput.displayName = 'SearchInput';\n"],"names":["rootVariants","cva","clearButtonVariants","expandButtonVariants","expandableWrapperVariants","isEditableElement","el","tag","SearchInput","forwardRef","value","defaultValue","onChange","onInput","debounceMs","isLoading","variant","size","globalShortcut","placeholder","disabled","className","name","id","form","autoComplete","autoFocus","role","ariaProps","ref","t","useTranslation","ctx","useFormField","inputId","effectiveDisabled","isControlled","internalValue","setInternalValue","useState","rawValue","hasValue","innerRef","useRef","setRefs","useCallback","node","expanded","setExpanded","pendingFocusRef","useLayoutEffect","debouncedOnChange","useDebouncedCallback","next","fireImmediate","commitValue","handleChange","event","handleNativeInput","handleKeyDown","_a","handleClear","handleBlur","focusInput","useEffect","onKeyDown","clearLabel","loadingLabel","defaultPlaceholder","resolvedPlaceholder","jsx","Search","comboboxAria","showClear","endSlot","Spinner","jsxs","TextInput","X"],"mappings":"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"}
1
+ {"version":3,"file":"search-input-BVMCONyN.js","sources":["../../src/components/search-input/search-input.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type FormEvent,\n type KeyboardEvent,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search, X } from 'lucide-react';\nimport { TextInput } from '../text-input/text-input';\nimport { Spinner } from '../spinner/spinner';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\n\nconst rootVariants = cva('ds:relative ds:w-full');\n\nconst clearButtonVariants = cva(\n [\n 'ds:absolute ds:inset-y-0 ds:end-0 ds:pe-3',\n 'ds:inline-flex ds:items-center ds:justify-center ds:pointer-events-auto',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst expandButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:size-[var(--min-target-size)] ds:rounded-[var(--radius-sm)]',\n 'ds:bg-background ds:border ds:border-border ds:text-muted-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:text-foreground ds:hover:bg-muted',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst expandableWrapperVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'ds:transition-[width] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n);\n\ntype SearchInputRole = 'combobox';\n\nexport interface SearchInputProps {\n value?: string;\n defaultValue?: string;\n onChange?: (debouncedValue: string) => void;\n onInput?: (rawValue: string) => void;\n debounceMs?: number;\n isLoading?: boolean;\n variant?: 'inline' | 'expandable';\n size?: 'sm' | 'md' | 'lg';\n globalShortcut?: string;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n name?: string;\n id?: string;\n form?: string;\n autoComplete?: string;\n autoFocus?: boolean;\n 'aria-label'?: string;\n role?: SearchInputRole;\n 'aria-expanded'?: boolean;\n 'aria-controls'?: string;\n 'aria-activedescendant'?: string;\n}\n\nfunction isEditableElement(el: Element | null): boolean {\n if (!el) return false;\n const tag = el.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true;\n if ((el as HTMLElement).isContentEditable) return true;\n return false;\n}\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n onInput,\n debounceMs = 200,\n isLoading = false,\n variant = 'inline',\n size = 'md',\n globalShortcut,\n placeholder,\n disabled,\n className,\n name,\n id,\n form,\n autoComplete = 'off',\n autoFocus,\n role,\n ...ariaProps\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inputId = id ?? ctx.id;\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n String(defaultValue ?? ''),\n );\n const rawValue = isControlled ? String(value) : internalValue;\n const hasValue = rawValue.length > 0;\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n const [expanded, setExpanded] = useState<boolean>(\n variant === 'inline' || hasValue,\n );\n const pendingFocusRef = useRef<boolean>(false);\n\n useLayoutEffect(() => {\n if (pendingFocusRef.current && innerRef.current) {\n innerRef.current.focus();\n pendingFocusRef.current = false;\n }\n });\n\n const debouncedOnChange = useDebouncedCallback(\n (next: string) => {\n onChange?.(next);\n },\n debounceMs,\n );\n\n const fireImmediate = useCallback(\n (next: string) => {\n debouncedOnChange.cancel();\n onChange?.(next);\n },\n [debouncedOnChange, onChange],\n );\n\n const commitValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n },\n [isControlled],\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value;\n commitValue(next);\n if (next === '') {\n fireImmediate('');\n } else {\n debouncedOnChange(next);\n }\n };\n\n const handleNativeInput = (event: FormEvent<HTMLInputElement>) => {\n const next = event.currentTarget.value;\n onInput?.(next);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Escape') return;\n if (event.nativeEvent.isComposing) return;\n if (!hasValue) return;\n event.preventDefault();\n event.stopPropagation();\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n };\n\n const handleClear = () => {\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n if (variant !== 'expandable') return;\n if (event.currentTarget.value === '') {\n setExpanded(false);\n }\n };\n\n const focusInput = useCallback(() => {\n if (variant === 'expandable' && !expanded) {\n pendingFocusRef.current = true;\n setExpanded(true);\n } else {\n innerRef.current?.focus();\n }\n }, [variant, expanded]);\n\n useEffect(() => {\n if (!globalShortcut) return;\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key !== globalShortcut) return;\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (isEditableElement(document.activeElement)) return;\n event.preventDefault();\n focusInput();\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [globalShortcut, focusInput]);\n\n const clearLabel = t('ui.inputs.search.clear', 'Clear search');\n const loadingLabel = t('ui.inputs.search.loading', 'Searching…');\n const defaultPlaceholder = t('ui.inputs.search.placeholder', 'Search…');\n const resolvedPlaceholder = placeholder ?? defaultPlaceholder;\n\n if (variant === 'expandable' && !expanded) {\n return (\n <div data-component=\"search-input\" className={expandableWrapperVariants({ className })}>\n <button\n type=\"button\"\n aria-label={resolvedPlaceholder}\n aria-expanded={false}\n aria-controls={inputId}\n disabled={effectiveDisabled}\n onClick={() => {\n pendingFocusRef.current = true;\n setExpanded(true);\n }}\n className={expandButtonVariants()}\n >\n <Search aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n </div>\n );\n }\n\n const comboboxAria =\n role === 'combobox'\n ? {\n role: 'combobox' as const,\n 'aria-expanded': ariaProps['aria-expanded'],\n 'aria-controls': ariaProps['aria-controls'],\n 'aria-activedescendant': ariaProps['aria-activedescendant'],\n }\n : undefined;\n\n const showClear = hasValue && !isLoading && !effectiveDisabled;\n const endSlot = isLoading ? (\n <Spinner size=\"sm\" label={loadingLabel} />\n ) : showClear ? (\n <span className=\"ds:inline-block ds:size-4\" aria-hidden=\"true\" />\n ) : undefined;\n\n return (\n <div data-component=\"search-input\" className={rootVariants({ className })}>\n <TextInput\n ref={setRefs}\n id={inputId}\n type=\"search\"\n size={size}\n value={rawValue}\n disabled={effectiveDisabled}\n placeholder={resolvedPlaceholder}\n name={name}\n form={form}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n startAdornment={<Search />}\n endAdornment={endSlot}\n clearable={false}\n onChange={handleChange}\n onInput={handleNativeInput}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n aria-label={ariaProps['aria-label']}\n aria-busy={isLoading || undefined}\n {...comboboxAria}\n />\n {showClear ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n onClick={handleClear}\n className={clearButtonVariants()}\n >\n <X aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n ) : null}\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {isLoading ? loadingLabel : ''}\n </span>\n </div>\n );\n },\n);\n\nSearchInput.displayName = 'SearchInput';\n"],"names":["rootVariants","cva","clearButtonVariants","expandButtonVariants","expandableWrapperVariants","isEditableElement","el","tag","SearchInput","forwardRef","value","defaultValue","onChange","onInput","debounceMs","isLoading","variant","size","globalShortcut","placeholder","disabled","className","name","id","form","autoComplete","autoFocus","role","ariaProps","ref","t","useTranslation","ctx","useFormField","inputId","effectiveDisabled","isControlled","internalValue","setInternalValue","useState","rawValue","hasValue","innerRef","useRef","setRefs","useCallback","node","expanded","setExpanded","pendingFocusRef","useLayoutEffect","debouncedOnChange","useDebouncedCallback","next","fireImmediate","commitValue","handleChange","event","handleNativeInput","handleKeyDown","_a","handleClear","handleBlur","focusInput","useEffect","onKeyDown","clearLabel","loadingLabel","defaultPlaceholder","resolvedPlaceholder","jsx","Search","comboboxAria","showClear","endSlot","Spinner","jsxs","TextInput","X"],"mappings":"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"}