@eifi1/ui-kit 0.33.1 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1534) hide show
  1. package/README.md +444 -282
  2. package/dist/account/account-parts.d.ts +6 -8
  3. package/dist/account/account-parts.js +1 -2
  4. package/dist/account/account-parts.js.map +1 -1
  5. package/dist/{components → account}/account-settings-labels.d.ts +16 -10
  6. package/dist/{components → account}/account-settings-labels.js +3 -1
  7. package/dist/account/account-settings-labels.js.map +1 -0
  8. package/dist/{components → account}/account-settings.d.ts +53 -23
  9. package/dist/{components → account}/account-settings.js +97 -26
  10. package/dist/account/account-settings.js.map +1 -0
  11. package/dist/account/data-export-setting-labels.d.ts +2 -0
  12. package/dist/account/data-export-setting-labels.js +15 -0
  13. package/dist/account/data-export-setting-labels.js.map +1 -0
  14. package/dist/account/data-export-setting.d.ts +9 -11
  15. package/dist/account/data-export-setting.js +11 -27
  16. package/dist/account/data-export-setting.js.map +1 -1
  17. package/dist/account/delete-account-setting-labels.d.ts +2 -0
  18. package/dist/account/delete-account-setting-labels.js +23 -0
  19. package/dist/account/delete-account-setting-labels.js.map +1 -0
  20. package/dist/account/delete-account-setting.d.ts +132 -101
  21. package/dist/account/delete-account-setting.js +7 -23
  22. package/dist/account/delete-account-setting.js.map +1 -1
  23. package/dist/account/email-change-setting-labels.d.ts +2 -0
  24. package/dist/account/email-change-setting-labels.js +28 -0
  25. package/dist/account/email-change-setting-labels.js.map +1 -0
  26. package/dist/account/email-change-setting.d.ts +10 -12
  27. package/dist/account/email-change-setting.js +11 -30
  28. package/dist/account/email-change-setting.js.map +1 -1
  29. package/dist/{components → account}/passkeys-setting.d.ts +9 -12
  30. package/dist/{components → account}/passkeys-setting.js +10 -7
  31. package/dist/account/passkeys-setting.js.map +1 -0
  32. package/dist/account/sessions-setting-labels.d.ts +2 -0
  33. package/dist/account/sessions-setting-labels.js +22 -0
  34. package/dist/account/sessions-setting-labels.js.map +1 -0
  35. package/dist/account/sessions-setting.d.ts +12 -14
  36. package/dist/account/sessions-setting.js +8 -23
  37. package/dist/account/sessions-setting.js.map +1 -1
  38. package/dist/admin/admin-action-confirm-labels.d.ts +2 -0
  39. package/dist/admin/admin-action-confirm-labels.js +16 -0
  40. package/dist/admin/admin-action-confirm-labels.js.map +1 -0
  41. package/dist/admin/admin-action-confirm.d.ts +156 -101
  42. package/dist/admin/admin-action-confirm.js +17 -22
  43. package/dist/admin/admin-action-confirm.js.map +1 -1
  44. package/dist/admin/admin-action-log-labels.d.ts +2 -0
  45. package/dist/admin/admin-action-log-labels.js +73 -0
  46. package/dist/admin/admin-action-log-labels.js.map +1 -0
  47. package/dist/admin/admin-action-log.d.ts +98 -22
  48. package/dist/admin/admin-action-log.js +48 -45
  49. package/dist/admin/admin-action-log.js.map +1 -1
  50. package/dist/admin/admin-parts.d.ts +7 -14
  51. package/dist/admin/admin-parts.js +0 -4
  52. package/dist/admin/admin-parts.js.map +1 -1
  53. package/dist/admin/invitations-panel-labels.d.ts +2 -0
  54. package/dist/admin/invitations-panel-labels.js +29 -0
  55. package/dist/admin/invitations-panel-labels.js.map +1 -0
  56. package/dist/admin/invitations-panel.d.ts +167 -101
  57. package/dist/admin/invitations-panel.js +12 -31
  58. package/dist/admin/invitations-panel.js.map +1 -1
  59. package/dist/admin/plan-change-labels.d.ts +2 -0
  60. package/dist/admin/plan-change-labels.js +22 -0
  61. package/dist/admin/plan-change-labels.js.map +1 -0
  62. package/dist/admin/plan-change.d.ts +244 -101
  63. package/dist/admin/plan-change.js +16 -24
  64. package/dist/admin/plan-change.js.map +1 -1
  65. package/dist/admin/reviewer-scope-editor-labels.d.ts +2 -0
  66. package/dist/admin/reviewer-scope-editor-labels.js +14 -0
  67. package/dist/admin/reviewer-scope-editor-labels.js.map +1 -0
  68. package/dist/admin/reviewer-scope-editor.d.ts +95 -101
  69. package/dist/admin/reviewer-scope-editor.js +5 -13
  70. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  71. package/dist/admin/role-select-labels.d.ts +2 -0
  72. package/dist/admin/role-select-labels.js +15 -0
  73. package/dist/admin/role-select-labels.js.map +1 -0
  74. package/dist/admin/role-select.d.ts +136 -101
  75. package/dist/admin/role-select.js +7 -18
  76. package/dist/admin/role-select.js.map +1 -1
  77. package/dist/admin/transfer-ownership-dialog-labels.d.ts +2 -0
  78. package/dist/admin/transfer-ownership-dialog-labels.js +18 -0
  79. package/dist/admin/transfer-ownership-dialog-labels.js.map +1 -0
  80. package/dist/admin/transfer-ownership-dialog.d.ts +81 -101
  81. package/dist/admin/transfer-ownership-dialog.js +3 -15
  82. package/dist/admin/transfer-ownership-dialog.js.map +1 -1
  83. package/dist/admin/user-roster-labels.d.ts +2 -0
  84. package/dist/admin/user-roster-labels.js +16 -0
  85. package/dist/admin/user-roster-labels.js.map +1 -0
  86. package/dist/admin/user-roster.d.ts +225 -101
  87. package/dist/admin/user-roster.js +4 -14
  88. package/dist/admin/user-roster.js.map +1 -1
  89. package/dist/auth/accept-invitation-labels.d.ts +2 -0
  90. package/dist/auth/accept-invitation-labels.js +20 -0
  91. package/dist/auth/accept-invitation-labels.js.map +1 -0
  92. package/dist/auth/accept-invitation.d.ts +11 -13
  93. package/dist/auth/accept-invitation.js +3 -16
  94. package/dist/auth/accept-invitation.js.map +1 -1
  95. package/dist/auth/auth-errors.d.ts +34 -23
  96. package/dist/auth/auth-errors.js +8 -4
  97. package/dist/auth/auth-errors.js.map +1 -1
  98. package/dist/auth/complete-name-dialog-labels.d.ts +2 -0
  99. package/dist/auth/complete-name-dialog-labels.js +14 -0
  100. package/dist/auth/complete-name-dialog-labels.js.map +1 -0
  101. package/dist/auth/complete-name-dialog.d.ts +9 -11
  102. package/dist/auth/complete-name-dialog.js +4 -11
  103. package/dist/auth/complete-name-dialog.js.map +1 -1
  104. package/dist/auth/email-tag.d.ts +2 -4
  105. package/dist/auth/forgot-password-form-labels.d.ts +3 -0
  106. package/dist/auth/forgot-password-form-labels.js +17 -0
  107. package/dist/auth/forgot-password-form-labels.js.map +1 -0
  108. package/dist/auth/forgot-password-form.d.ts +9 -12
  109. package/dist/auth/forgot-password-form.js +6 -15
  110. package/dist/auth/forgot-password-form.js.map +1 -1
  111. package/dist/auth/form-rules.d.ts +5 -7
  112. package/dist/auth/new-password-fields.d.ts +4 -8
  113. package/dist/auth/new-password-fields.js +1 -1
  114. package/dist/auth/new-password-fields.js.map +1 -1
  115. package/dist/auth/not-found-page-labels.d.ts +2 -0
  116. package/dist/auth/not-found-page-labels.js +11 -0
  117. package/dist/auth/not-found-page-labels.js.map +1 -0
  118. package/dist/auth/not-found-page.d.ts +9 -11
  119. package/dist/auth/not-found-page.js +5 -10
  120. package/dist/auth/not-found-page.js.map +1 -1
  121. package/dist/auth/register-form-labels.d.ts +3 -0
  122. package/dist/auth/register-form-labels.js +28 -0
  123. package/dist/auth/register-form-labels.js.map +1 -0
  124. package/dist/auth/register-form.d.ts +174 -101
  125. package/dist/auth/register-form.js +11 -31
  126. package/dist/auth/register-form.js.map +1 -1
  127. package/dist/auth/reset-password-form-labels.d.ts +3 -0
  128. package/dist/auth/reset-password-form-labels.js +24 -0
  129. package/dist/auth/reset-password-form-labels.js.map +1 -0
  130. package/dist/auth/reset-password-form.d.ts +12 -15
  131. package/dist/auth/reset-password-form.js +6 -22
  132. package/dist/auth/reset-password-form.js.map +1 -1
  133. package/dist/auth/sign-in-form-labels.d.ts +3 -0
  134. package/dist/auth/sign-in-form-labels.js +42 -0
  135. package/dist/auth/sign-in-form-labels.js.map +1 -0
  136. package/dist/auth/sign-in-form.d.ts +15 -19
  137. package/dist/auth/sign-in-form.js +12 -46
  138. package/dist/auth/sign-in-form.js.map +1 -1
  139. package/dist/auth/status-parts.d.ts +13 -17
  140. package/dist/auth/status-parts.js +3 -3
  141. package/dist/auth/status-parts.js.map +1 -1
  142. package/dist/auth/verify-email-labels.d.ts +2 -0
  143. package/dist/auth/verify-email-labels.js +25 -0
  144. package/dist/auth/verify-email-labels.js.map +1 -0
  145. package/dist/auth/verify-email.d.ts +15 -17
  146. package/dist/auth/verify-email.js +4 -21
  147. package/dist/auth/verify-email.js.map +1 -1
  148. package/dist/billing/billing-banner.d.ts +8 -109
  149. package/dist/billing/billing-banner.js +2 -1
  150. package/dist/billing/billing-banner.js.map +1 -1
  151. package/dist/billing/billing-labels.d.ts +168 -101
  152. package/dist/billing/billing-labels.js.map +1 -1
  153. package/dist/billing/billing-lock.d.ts +10 -110
  154. package/dist/billing/billing-overview.d.ts +7 -109
  155. package/dist/billing/billing-standing.d.ts +6 -108
  156. package/dist/billing/checkout-processing.d.ts +8 -111
  157. package/dist/billing/checkout-processing.js +2 -9
  158. package/dist/billing/checkout-processing.js.map +1 -1
  159. package/dist/billing/checkout-return.d.ts +5 -7
  160. package/dist/billing/pay-page.d.ts +15 -117
  161. package/dist/billing/plan-card.d.ts +14 -115
  162. package/dist/billing/plan-card.js +15 -13
  163. package/dist/billing/plan-card.js.map +1 -1
  164. package/dist/billing/plan-limit-notice.d.ts +8 -109
  165. package/dist/billing/plan-limit-notice.js +1 -1
  166. package/dist/billing/plan-limit-notice.js.map +1 -1
  167. package/dist/billing/plan-limit-toast.d.ts +6 -107
  168. package/dist/billing/plan-limit.d.ts +2 -4
  169. package/dist/billing/plan-price.d.ts +10 -12
  170. package/dist/billing/subscription-actions.d.ts +6 -109
  171. package/dist/billing/subscription-actions.js +2 -2
  172. package/dist/billing/subscription-actions.js.map +1 -1
  173. package/dist/billing/subscription-status-chip.d.ts +7 -108
  174. package/dist/chart.d.ts +12 -113
  175. package/dist/chart.js +4 -0
  176. package/dist/chart.js.map +1 -1
  177. package/dist/components/account-chips-labels.d.ts +10 -0
  178. package/dist/components/account-chips-labels.js +15 -0
  179. package/dist/components/account-chips-labels.js.map +1 -0
  180. package/dist/components/account-chips.d.ts +22 -44
  181. package/dist/components/account-chips.js +9 -14
  182. package/dist/components/account-chips.js.map +1 -1
  183. package/dist/components/alert-banner.d.ts +15 -11
  184. package/dist/components/alert-banner.js +28 -18
  185. package/dist/components/alert-banner.js.map +1 -1
  186. package/dist/components/amount-input.d.ts +66 -110
  187. package/dist/components/amount-input.js +259 -283
  188. package/dist/components/amount-input.js.map +1 -1
  189. package/dist/components/appearance-labels.d.ts +6 -10
  190. package/dist/components/appearance-labels.js.map +1 -1
  191. package/dist/components/authed-image-labels.d.ts +2 -0
  192. package/dist/components/authed-image-labels.js +10 -0
  193. package/dist/components/authed-image-labels.js.map +1 -0
  194. package/dist/components/authed-image.d.ts +11 -13
  195. package/dist/components/authed-image.js +2 -6
  196. package/dist/components/authed-image.js.map +1 -1
  197. package/dist/components/autocomplete.d.ts +13 -11
  198. package/dist/components/autocomplete.js +33 -28
  199. package/dist/components/autocomplete.js.map +1 -1
  200. package/dist/components/breadcrumbs-labels.d.ts +2 -0
  201. package/dist/components/breadcrumbs-labels.js +9 -0
  202. package/dist/components/breadcrumbs-labels.js.map +1 -0
  203. package/dist/components/breadcrumbs.d.ts +10 -12
  204. package/dist/components/breadcrumbs.js +7 -10
  205. package/dist/components/breadcrumbs.js.map +1 -1
  206. package/dist/components/bulk-action-bar-labels.d.ts +2 -0
  207. package/dist/components/bulk-action-bar-labels.js +10 -0
  208. package/dist/components/bulk-action-bar-labels.js.map +1 -0
  209. package/dist/components/bulk-action-bar.d.ts +10 -12
  210. package/dist/components/bulk-action-bar.js +9 -12
  211. package/dist/components/bulk-action-bar.js.map +1 -1
  212. package/dist/components/button-group.d.ts +7 -110
  213. package/dist/components/button-group.js +5 -5
  214. package/dist/components/button-group.js.map +1 -1
  215. package/dist/components/button-look.d.ts +88 -0
  216. package/dist/components/button-look.js +91 -0
  217. package/dist/components/button-look.js.map +1 -0
  218. package/dist/components/button.d.ts +153 -0
  219. package/dist/components/button.js +165 -0
  220. package/dist/components/button.js.map +1 -0
  221. package/dist/components/calculator.d.ts +8 -107
  222. package/dist/components/calculator.js +10 -7
  223. package/dist/components/calculator.js.map +1 -1
  224. package/dist/components/calendar-heatmap-labels.d.ts +3 -0
  225. package/dist/components/calendar-heatmap-labels.js +12 -0
  226. package/dist/components/calendar-heatmap-labels.js.map +1 -0
  227. package/dist/components/calendar-heatmap.d.ts +13 -16
  228. package/dist/components/calendar-heatmap.js +7 -13
  229. package/dist/components/calendar-heatmap.js.map +1 -1
  230. package/dist/components/card.d.ts +145 -0
  231. package/dist/components/card.js +186 -0
  232. package/dist/components/card.js.map +1 -0
  233. package/dist/components/chart-height.d.ts +4 -7
  234. package/dist/components/chart-zoom-core.d.ts +202 -0
  235. package/dist/components/chart-zoom-core.js +334 -0
  236. package/dist/components/chart-zoom-core.js.map +1 -0
  237. package/dist/components/chart-zoom.d.ts +39 -205
  238. package/dist/components/chart-zoom.js +15 -316
  239. package/dist/components/chart-zoom.js.map +1 -1
  240. package/dist/components/chart.d.ts +11 -15
  241. package/dist/components/chart.js +11 -11
  242. package/dist/components/chart.js.map +1 -1
  243. package/dist/components/checkbox-group.d.ts +6 -10
  244. package/dist/components/checkbox-group.js +10 -9
  245. package/dist/components/checkbox-group.js.map +1 -1
  246. package/dist/components/checkbox.d.ts +8 -12
  247. package/dist/components/checkbox.js +20 -18
  248. package/dist/components/checkbox.js.map +1 -1
  249. package/dist/components/chip-input.d.ts +73 -0
  250. package/dist/components/chip-input.js +224 -0
  251. package/dist/components/chip-input.js.map +1 -0
  252. package/dist/components/chip-labels.d.ts +2 -0
  253. package/dist/components/chip-labels.js +12 -0
  254. package/dist/components/chip-labels.js.map +1 -0
  255. package/dist/components/chip.d.ts +18 -93
  256. package/dist/components/chip.js +74 -426
  257. package/dist/components/chip.js.map +1 -1
  258. package/dist/components/choice-card.d.ts +21 -18
  259. package/dist/components/choice-card.js +45 -45
  260. package/dist/components/choice-card.js.map +1 -1
  261. package/dist/components/column-mapper-labels.d.ts +5 -0
  262. package/dist/components/column-mapper-labels.js +34 -0
  263. package/dist/components/column-mapper-labels.js.map +1 -0
  264. package/dist/components/column-mapper.d.ts +15 -17
  265. package/dist/components/column-mapper.js +11 -37
  266. package/dist/components/column-mapper.js.map +1 -1
  267. package/dist/components/combobox-core.d.ts +79 -40
  268. package/dist/components/combobox-core.js +187 -121
  269. package/dist/components/combobox-core.js.map +1 -1
  270. package/dist/components/combobox-suggestions.d.ts +76 -0
  271. package/dist/components/combobox-suggestions.js +56 -0
  272. package/dist/components/combobox-suggestions.js.map +1 -0
  273. package/dist/components/combobox.d.ts +14 -159
  274. package/dist/components/combobox.js +40 -507
  275. package/dist/components/combobox.js.map +1 -1
  276. package/dist/components/confirm-dialog-labels.d.ts +7 -0
  277. package/dist/components/confirm-dialog-labels.js +10 -0
  278. package/dist/components/confirm-dialog-labels.js.map +1 -0
  279. package/dist/components/confirm-dialog.d.ts +165 -101
  280. package/dist/components/confirm-dialog.js +2 -6
  281. package/dist/components/confirm-dialog.js.map +1 -1
  282. package/dist/components/copy-button-labels.d.ts +2 -0
  283. package/dist/components/copy-button-labels.js +12 -0
  284. package/dist/components/copy-button-labels.js.map +1 -0
  285. package/dist/components/copy-button.d.ts +70 -101
  286. package/dist/components/copy-button.js +4 -9
  287. package/dist/components/copy-button.js.map +1 -1
  288. package/dist/components/country-select-labels.d.ts +2 -0
  289. package/dist/components/country-select-labels.js +10 -0
  290. package/dist/components/country-select-labels.js.map +1 -0
  291. package/dist/components/country-select.d.ts +18 -15
  292. package/dist/components/country-select.js +49 -64
  293. package/dist/components/country-select.js.map +1 -1
  294. package/dist/components/currency-option-list.d.ts +63 -0
  295. package/dist/components/currency-option-list.js +135 -0
  296. package/dist/components/currency-option-list.js.map +1 -0
  297. package/dist/components/currency-select.d.ts +10 -30
  298. package/dist/components/currency-select.js +50 -133
  299. package/dist/components/currency-select.js.map +1 -1
  300. package/dist/components/danger-confirm-labels.d.ts +14 -0
  301. package/dist/components/danger-confirm-labels.js +17 -0
  302. package/dist/components/danger-confirm-labels.js.map +1 -0
  303. package/dist/components/danger-confirm.d.ts +448 -101
  304. package/dist/components/danger-confirm.js +40 -46
  305. package/dist/components/danger-confirm.js.map +1 -1
  306. package/dist/components/data-table-cells.d.ts +9 -24
  307. package/dist/components/data-table-cells.js +1 -1
  308. package/dist/components/data-table-cells.js.map +1 -1
  309. package/dist/components/data-table-column-settings.d.ts +16 -0
  310. package/dist/components/data-table-column-settings.js +119 -0
  311. package/dist/components/data-table-column-settings.js.map +1 -0
  312. package/dist/components/data-table-filter-popover.d.ts +5 -19
  313. package/dist/components/data-table-filter-popover.js +39 -22
  314. package/dist/components/data-table-filter-popover.js.map +1 -1
  315. package/dist/components/data-table-filters.d.ts +93 -15
  316. package/dist/components/data-table-filters.js +22 -7
  317. package/dist/components/data-table-filters.js.map +1 -1
  318. package/dist/components/data-table-head.d.ts +36 -0
  319. package/dist/components/data-table-head.js +190 -0
  320. package/dist/components/data-table-head.js.map +1 -0
  321. package/dist/components/data-table-labels.d.ts +124 -15
  322. package/dist/components/data-table-labels.js +9 -5
  323. package/dist/components/data-table-labels.js.map +1 -1
  324. package/dist/components/data-table-mobile.d.ts +106 -0
  325. package/dist/components/data-table-mobile.js +412 -0
  326. package/dist/components/data-table-mobile.js.map +1 -0
  327. package/dist/components/data-table-pagination.d.ts +6 -21
  328. package/dist/components/data-table-pagination.js +7 -7
  329. package/dist/components/data-table-pagination.js.map +1 -1
  330. package/dist/components/data-table-resize.d.ts +37 -0
  331. package/dist/components/data-table-resize.js +103 -0
  332. package/dist/components/data-table-resize.js.map +1 -0
  333. package/dist/components/data-table-row-actions.d.ts +24 -0
  334. package/dist/components/data-table-row-actions.js +95 -0
  335. package/dist/components/data-table-row-actions.js.map +1 -0
  336. package/dist/components/data-table-selection.d.ts +21 -0
  337. package/dist/components/data-table-selection.js +30 -0
  338. package/dist/components/data-table-selection.js.map +1 -0
  339. package/dist/components/data-table-shared.d.ts +77 -0
  340. package/dist/components/data-table-shared.js +77 -0
  341. package/dist/components/data-table-shared.js.map +1 -0
  342. package/dist/components/data-table-sort.d.ts +8 -10
  343. package/dist/components/data-table.d.ts +603 -15
  344. package/dist/components/data-table.js +134 -927
  345. package/dist/components/data-table.js.map +1 -1
  346. package/dist/components/date-field.d.ts +203 -0
  347. package/dist/components/date-field.js +270 -0
  348. package/dist/components/date-field.js.map +1 -0
  349. package/dist/components/date-picker.d.ts +6 -261
  350. package/dist/components/date-picker.js +24 -760
  351. package/dist/components/date-picker.js.map +1 -1
  352. package/dist/components/date-range-picker.d.ts +125 -0
  353. package/dist/components/date-range-picker.js +261 -0
  354. package/dist/components/date-range-picker.js.map +1 -0
  355. package/dist/components/description-list-labels.d.ts +2 -0
  356. package/dist/components/description-list-labels.js +8 -0
  357. package/dist/components/description-list-labels.js.map +1 -0
  358. package/dist/components/description-list.d.ts +13 -15
  359. package/dist/components/description-list.js +17 -11
  360. package/dist/components/description-list.js.map +1 -1
  361. package/dist/components/dialog-frame-labels.d.ts +2 -0
  362. package/dist/components/dialog-frame-labels.js +6 -0
  363. package/dist/components/dialog-frame-labels.js.map +1 -0
  364. package/dist/components/dialog-frame.d.ts +7 -11
  365. package/dist/components/dialog-frame.js +6 -6
  366. package/dist/components/dialog-frame.js.map +1 -1
  367. package/dist/components/disclosure.d.ts +6 -10
  368. package/dist/components/disclosure.js +11 -11
  369. package/dist/components/disclosure.js.map +1 -1
  370. package/dist/components/dropdown.d.ts +55 -27
  371. package/dist/components/dropdown.js +53 -30
  372. package/dist/components/dropdown.js.map +1 -1
  373. package/dist/components/empty-state.d.ts +64 -0
  374. package/dist/components/empty-state.js +70 -0
  375. package/dist/components/empty-state.js.map +1 -0
  376. package/dist/components/entity-combobox.d.ts +10 -11
  377. package/dist/components/entity-combobox.js +14 -13
  378. package/dist/components/entity-combobox.js.map +1 -1
  379. package/dist/components/error-boundary-labels.d.ts +2 -0
  380. package/dist/components/error-boundary-labels.js +19 -0
  381. package/dist/components/error-boundary-labels.js.map +1 -0
  382. package/dist/components/error-boundary.d.ts +17 -17
  383. package/dist/components/error-boundary.js +5 -17
  384. package/dist/components/error-boundary.js.map +1 -1
  385. package/dist/components/facing-pair.d.ts +7 -116
  386. package/dist/components/facing-pair.js +1 -1
  387. package/dist/components/facing-pair.js.map +1 -1
  388. package/dist/components/field-base.d.ts +260 -0
  389. package/dist/components/field-base.js +228 -0
  390. package/dist/components/field-base.js.map +1 -0
  391. package/dist/components/field-parts.d.ts +188 -87
  392. package/dist/components/field-parts.js +60 -33
  393. package/dist/components/field-parts.js.map +1 -1
  394. package/dist/components/field-strip.d.ts +19 -28
  395. package/dist/components/field-strip.js +2 -2
  396. package/dist/components/field-strip.js.map +1 -1
  397. package/dist/components/field-sync-labels.d.ts +2 -0
  398. package/dist/components/field-sync-labels.js +12 -0
  399. package/dist/components/field-sync-labels.js.map +1 -0
  400. package/dist/components/field-sync.d.ts +20 -19
  401. package/dist/components/field-sync.js +4 -10
  402. package/dist/components/field-sync.js.map +1 -1
  403. package/dist/components/field.d.ts +45 -10
  404. package/dist/components/field.js +10 -8
  405. package/dist/components/field.js.map +1 -1
  406. package/dist/components/file-button.d.ts +85 -101
  407. package/dist/components/file-button.js +23 -169
  408. package/dist/components/file-button.js.map +1 -1
  409. package/dist/components/file-dropzone.d.ts +9 -110
  410. package/dist/components/file-dropzone.js +22 -22
  411. package/dist/components/file-dropzone.js.map +1 -1
  412. package/dist/components/floating-panel-labels.d.ts +2 -0
  413. package/dist/components/floating-panel-labels.js +9 -0
  414. package/dist/components/floating-panel-labels.js.map +1 -0
  415. package/dist/components/floating-panel.d.ts +17 -21
  416. package/dist/components/floating-panel.js +19 -18
  417. package/dist/components/floating-panel.js.map +1 -1
  418. package/dist/components/focus-ring.d.ts +9 -6
  419. package/dist/components/focus-ring.js +2 -2
  420. package/dist/components/focus-ring.js.map +1 -1
  421. package/dist/components/form-actions-labels.d.ts +2 -0
  422. package/dist/components/form-actions-labels.js +10 -0
  423. package/dist/components/form-actions-labels.js.map +1 -0
  424. package/dist/components/form-actions.d.ts +280 -101
  425. package/dist/components/form-actions.js +10 -20
  426. package/dist/components/form-actions.js.map +1 -1
  427. package/dist/components/full-bleed-dialog.d.ts +7 -8
  428. package/dist/components/full-bleed-dialog.js +14 -13
  429. package/dist/components/full-bleed-dialog.js.map +1 -1
  430. package/dist/components/grouped-picker.d.ts +21 -16
  431. package/dist/components/grouped-picker.js +76 -62
  432. package/dist/components/grouped-picker.js.map +1 -1
  433. package/dist/components/help-popover.d.ts +60 -0
  434. package/dist/components/help-popover.js +48 -0
  435. package/dist/components/help-popover.js.map +1 -0
  436. package/dist/components/hover-menu.d.ts +17 -16
  437. package/dist/components/hover-menu.js +18 -17
  438. package/dist/components/hover-menu.js.map +1 -1
  439. package/dist/components/iban-input-labels.d.ts +2 -0
  440. package/dist/components/iban-input-labels.js +13 -0
  441. package/dist/components/iban-input-labels.js.map +1 -0
  442. package/dist/components/iban-input.d.ts +73 -101
  443. package/dist/components/iban-input.js +22 -15
  444. package/dist/components/iban-input.js.map +1 -1
  445. package/dist/components/icon-button.d.ts +300 -0
  446. package/dist/components/icon-button.js +465 -0
  447. package/dist/components/icon-button.js.map +1 -0
  448. package/dist/components/icon-picker-labels.d.ts +2 -0
  449. package/dist/components/icon-picker-labels.js +12 -0
  450. package/dist/components/icon-picker-labels.js.map +1 -0
  451. package/dist/components/icon-picker.d.ts +13 -13
  452. package/dist/components/icon-picker.js +18 -17
  453. package/dist/components/icon-picker.js.map +1 -1
  454. package/dist/components/image-grid-labels.d.ts +2 -0
  455. package/dist/components/image-grid-labels.js +10 -0
  456. package/dist/components/image-grid-labels.js.map +1 -0
  457. package/dist/components/image-grid.d.ts +12 -14
  458. package/dist/components/image-grid.js +6 -10
  459. package/dist/components/image-grid.js.map +1 -1
  460. package/dist/components/inline-edit-field-labels.d.ts +2 -0
  461. package/dist/components/inline-edit-field-labels.js +10 -0
  462. package/dist/components/inline-edit-field-labels.js.map +1 -0
  463. package/dist/components/inline-edit-field.d.ts +11 -13
  464. package/dist/components/inline-edit-field.js +11 -13
  465. package/dist/components/inline-edit-field.js.map +1 -1
  466. package/dist/components/inline-entity-combobox.d.ts +155 -0
  467. package/dist/components/inline-entity-combobox.js +467 -0
  468. package/dist/components/inline-entity-combobox.js.map +1 -0
  469. package/dist/components/input.d.ts +98 -0
  470. package/dist/components/input.js +219 -0
  471. package/dist/components/input.js.map +1 -0
  472. package/dist/components/jump-calendar.d.ts +8 -0
  473. package/dist/components/jump-calendar.js +274 -0
  474. package/dist/components/jump-calendar.js.map +1 -0
  475. package/dist/components/language-select.d.ts +20 -111
  476. package/dist/components/language-select.js +12 -7
  477. package/dist/components/language-select.js.map +1 -1
  478. package/dist/components/legal-labels.d.ts +2 -0
  479. package/dist/components/legal-labels.js +100 -0
  480. package/dist/components/legal-labels.js.map +1 -0
  481. package/dist/components/legal-page.d.ts +17 -118
  482. package/dist/components/legal-page.js +2 -2
  483. package/dist/components/legal-page.js.map +1 -1
  484. package/dist/components/legal.d.ts +353 -101
  485. package/dist/components/legal.js +7 -101
  486. package/dist/components/legal.js.map +1 -1
  487. package/dist/components/lightbox-labels.d.ts +2 -0
  488. package/dist/components/lightbox-labels.js +17 -0
  489. package/dist/components/lightbox-labels.js.map +1 -0
  490. package/dist/components/lightbox.d.ts +12 -14
  491. package/dist/components/lightbox.js +9 -19
  492. package/dist/components/lightbox.js.map +1 -1
  493. package/dist/components/line-items-labels.d.ts +2 -0
  494. package/dist/components/line-items-labels.js +13 -0
  495. package/dist/components/line-items-labels.js.map +1 -0
  496. package/dist/components/line-items.d.ts +16 -18
  497. package/dist/components/line-items.js +18 -26
  498. package/dist/components/line-items.js.map +1 -1
  499. package/dist/components/list-labels.d.ts +2 -0
  500. package/dist/components/list-labels.js +9 -0
  501. package/dist/components/list-labels.js.map +1 -0
  502. package/dist/components/list.d.ts +32 -21
  503. package/dist/components/list.js +41 -25
  504. package/dist/components/list.js.map +1 -1
  505. package/dist/components/loading-state.d.ts +5 -9
  506. package/dist/components/loading-state.js +2 -2
  507. package/dist/components/loading-state.js.map +1 -1
  508. package/dist/components/measured-grid-labels.d.ts +4 -0
  509. package/dist/components/measured-grid-labels.js +21 -0
  510. package/dist/components/measured-grid-labels.js.map +1 -0
  511. package/dist/components/measured-grid.d.ts +13 -17
  512. package/dist/components/measured-grid.js +31 -50
  513. package/dist/components/measured-grid.js.map +1 -1
  514. package/dist/components/menu-item.d.ts +10 -10
  515. package/dist/components/menu-item.js +9 -9
  516. package/dist/components/menu-item.js.map +1 -1
  517. package/dist/components/mini-calendar-labels.d.ts +4 -0
  518. package/dist/components/mini-calendar-labels.js +14 -0
  519. package/dist/components/mini-calendar-labels.js.map +1 -0
  520. package/dist/components/mini-calendar.d.ts +10 -14
  521. package/dist/components/mini-calendar.js +22 -29
  522. package/dist/components/mini-calendar.js.map +1 -1
  523. package/dist/components/modal.d.ts +26 -18
  524. package/dist/components/modal.js +8 -11
  525. package/dist/components/modal.js.map +1 -1
  526. package/dist/components/money-draft.d.ts +34 -0
  527. package/dist/components/money-draft.js +39 -0
  528. package/dist/components/money-draft.js.map +1 -0
  529. package/dist/components/money-field.d.ts +13 -111
  530. package/dist/components/money-field.js +6 -22
  531. package/dist/components/money-field.js.map +1 -1
  532. package/dist/components/month-picker-labels.d.ts +5 -0
  533. package/dist/components/month-picker-labels.js +18 -0
  534. package/dist/components/month-picker-labels.js.map +1 -0
  535. package/dist/components/month-picker.d.ts +15 -13
  536. package/dist/components/month-picker.js +34 -32
  537. package/dist/components/month-picker.js.map +1 -1
  538. package/dist/components/multi-entity-combobox.d.ts +9 -11
  539. package/dist/components/multi-entity-combobox.js +14 -13
  540. package/dist/components/multi-entity-combobox.js.map +1 -1
  541. package/dist/components/multi-select.d.ts +81 -21
  542. package/dist/components/multi-select.js +171 -197
  543. package/dist/components/multi-select.js.map +1 -1
  544. package/dist/components/nav-pills.d.ts +9 -10
  545. package/dist/components/nav-pills.js +53 -42
  546. package/dist/components/nav-pills.js.map +1 -1
  547. package/dist/components/number-field.d.ts +6 -111
  548. package/dist/components/number-field.js +2 -3
  549. package/dist/components/number-field.js.map +1 -1
  550. package/dist/components/number-input.d.ts +30 -111
  551. package/dist/components/number-input.js +34 -66
  552. package/dist/components/number-input.js.map +1 -1
  553. package/dist/components/numeric-field.d.ts +85 -0
  554. package/dist/components/numeric-field.js +71 -0
  555. package/dist/components/numeric-field.js.map +1 -0
  556. package/dist/components/numpad-sheet.d.ts +5 -108
  557. package/dist/components/numpad-sheet.js +7 -7
  558. package/dist/components/numpad-sheet.js.map +1 -1
  559. package/dist/components/one-time-code-input.d.ts +6 -7
  560. package/dist/components/one-time-code-input.js +119 -124
  561. package/dist/components/one-time-code-input.js.map +1 -1
  562. package/dist/components/page-contents-labels.d.ts +2 -0
  563. package/dist/components/page-contents-labels.js +8 -0
  564. package/dist/components/page-contents-labels.js.map +1 -0
  565. package/dist/components/page-contents.d.ts +13 -15
  566. package/dist/components/page-contents.js +7 -9
  567. package/dist/components/page-contents.js.map +1 -1
  568. package/dist/components/page-header.d.ts +10 -10
  569. package/dist/components/page-header.js +3 -3
  570. package/dist/components/page-header.js.map +1 -1
  571. package/dist/components/password-strength-labels.d.ts +2 -0
  572. package/dist/components/password-strength-labels.js +21 -0
  573. package/dist/components/password-strength-labels.js.map +1 -0
  574. package/dist/components/password-strength.d.ts +15 -17
  575. package/dist/components/password-strength.js +7 -22
  576. package/dist/components/password-strength.js.map +1 -1
  577. package/dist/components/phone-input-labels.d.ts +2 -0
  578. package/dist/components/phone-input-labels.js +9 -0
  579. package/dist/components/phone-input-labels.js.map +1 -0
  580. package/dist/components/phone-input.d.ts +75 -101
  581. package/dist/components/phone-input.js +20 -23
  582. package/dist/components/phone-input.js.map +1 -1
  583. package/dist/components/picker-sheet.d.ts +20 -8
  584. package/dist/components/picker-sheet.js +22 -11
  585. package/dist/components/picker-sheet.js.map +1 -1
  586. package/dist/components/pie-chart-labels.d.ts +2 -4
  587. package/dist/components/pie-chart.d.ts +8 -11
  588. package/dist/components/pie-chart.js +5 -5
  589. package/dist/components/pie-chart.js.map +1 -1
  590. package/dist/components/popover-labels.d.ts +2 -0
  591. package/dist/components/popover-labels.js +11 -0
  592. package/dist/components/popover-labels.js.map +1 -0
  593. package/dist/components/popover.d.ts +13 -11
  594. package/dist/components/popover.js +15 -21
  595. package/dist/components/popover.js.map +1 -1
  596. package/dist/components/progress-bar-labels.d.ts +2 -0
  597. package/dist/components/progress-bar-labels.js +9 -0
  598. package/dist/components/progress-bar-labels.js.map +1 -0
  599. package/dist/components/progress-bar.d.ts +16 -15
  600. package/dist/components/progress-bar.js +22 -20
  601. package/dist/components/progress-bar.js.map +1 -1
  602. package/dist/components/qr-code.d.ts +4 -8
  603. package/dist/components/qr-code.js.map +1 -1
  604. package/dist/components/reauth-dialog-labels.d.ts +2 -0
  605. package/dist/components/reauth-dialog-labels.js +12 -0
  606. package/dist/components/reauth-dialog-labels.js.map +1 -0
  607. package/dist/components/reauth-dialog.d.ts +8 -10
  608. package/dist/components/reauth-dialog.js +3 -8
  609. package/dist/components/reauth-dialog.js.map +1 -1
  610. package/dist/components/row-actions-labels.d.ts +2 -0
  611. package/dist/components/row-actions-labels.js +9 -0
  612. package/dist/components/row-actions-labels.js.map +1 -0
  613. package/dist/components/row-actions.d.ts +224 -101
  614. package/dist/components/row-actions.js +4 -5
  615. package/dist/components/row-actions.js.map +1 -1
  616. package/dist/components/scroll-area.d.ts +6 -9
  617. package/dist/components/scroll-area.js +4 -10
  618. package/dist/components/scroll-area.js.map +1 -1
  619. package/dist/components/search-field.d.ts +12 -27
  620. package/dist/components/search-field.js +13 -16
  621. package/dist/components/search-field.js.map +1 -1
  622. package/dist/components/select.d.ts +69 -0
  623. package/dist/components/select.js +164 -0
  624. package/dist/components/select.js.map +1 -0
  625. package/dist/components/separator.d.ts +3 -7
  626. package/dist/components/separator.js.map +1 -1
  627. package/dist/components/series-chart-axes.d.ts +120 -0
  628. package/dist/components/series-chart-axes.js +164 -0
  629. package/dist/components/series-chart-axes.js.map +1 -0
  630. package/dist/components/series-chart-budget.d.ts +8 -9
  631. package/dist/components/series-chart-labels.d.ts +2 -4
  632. package/dist/components/series-chart-thin.d.ts +34 -0
  633. package/dist/components/series-chart-thin.js +103 -0
  634. package/dist/components/series-chart-thin.js.map +1 -0
  635. package/dist/components/series-chart-ticks.d.ts +9 -11
  636. package/dist/components/series-chart.d.ts +64 -214
  637. package/dist/components/series-chart.js +69 -160
  638. package/dist/components/series-chart.js.map +1 -1
  639. package/dist/components/server-wake-labels.d.ts +2 -0
  640. package/dist/components/server-wake-labels.js +9 -0
  641. package/dist/components/server-wake-labels.js.map +1 -0
  642. package/dist/components/server-wake.d.ts +32 -23
  643. package/dist/components/server-wake.js +15 -35
  644. package/dist/components/server-wake.js.map +1 -1
  645. package/dist/components/settings-fields.d.ts +46 -118
  646. package/dist/components/settings-fields.js +13 -3
  647. package/dist/components/settings-fields.js.map +1 -1
  648. package/dist/components/share-card-labels.d.ts +2 -0
  649. package/dist/components/share-card-labels.js +29 -0
  650. package/dist/components/share-card-labels.js.map +1 -0
  651. package/dist/components/share-card.d.ts +188 -101
  652. package/dist/components/share-card.js +16 -34
  653. package/dist/components/share-card.js.map +1 -1
  654. package/dist/components/sign-chip-labels.d.ts +2 -0
  655. package/dist/components/sign-chip-labels.js +11 -0
  656. package/dist/components/sign-chip-labels.js.map +1 -0
  657. package/dist/components/sign-chip.d.ts +7 -9
  658. package/dist/components/sign-chip.js +2 -7
  659. package/dist/components/sign-chip.js.map +1 -1
  660. package/dist/components/signature-pad-labels.d.ts +2 -0
  661. package/dist/components/signature-pad-labels.js +23 -0
  662. package/dist/components/signature-pad-labels.js.map +1 -0
  663. package/dist/components/signature-pad.d.ts +16 -15
  664. package/dist/components/signature-pad.js +22 -35
  665. package/dist/components/signature-pad.js.map +1 -1
  666. package/dist/components/signed-amount-labels.d.ts +2 -0
  667. package/dist/components/signed-amount-labels.js +9 -0
  668. package/dist/components/signed-amount-labels.js.map +1 -0
  669. package/dist/components/signed-amount.d.ts +19 -21
  670. package/dist/components/signed-amount.js +12 -15
  671. package/dist/components/signed-amount.js.map +1 -1
  672. package/dist/components/skeleton.d.ts +5 -9
  673. package/dist/components/skeleton.js +1 -1
  674. package/dist/components/skeleton.js.map +1 -1
  675. package/dist/components/slider.d.ts +16 -11
  676. package/dist/components/slider.js +23 -18
  677. package/dist/components/slider.js.map +1 -1
  678. package/dist/components/sparkline-labels.d.ts +2 -0
  679. package/dist/components/sparkline-labels.js +13 -0
  680. package/dist/components/sparkline-labels.js.map +1 -0
  681. package/dist/components/sparkline.d.ts +10 -12
  682. package/dist/components/sparkline.js +10 -17
  683. package/dist/components/sparkline.js.map +1 -1
  684. package/dist/components/spinner.d.ts +45 -0
  685. package/dist/components/spinner.js +39 -0
  686. package/dist/components/spinner.js.map +1 -0
  687. package/dist/components/stat-tile-labels.d.ts +2 -0
  688. package/dist/components/stat-tile-labels.js +14 -0
  689. package/dist/components/stat-tile-labels.js.map +1 -0
  690. package/dist/components/stat-tile.d.ts +15 -17
  691. package/dist/components/stat-tile.js +25 -32
  692. package/dist/components/stat-tile.js.map +1 -1
  693. package/dist/components/status-dot.d.ts +8 -20
  694. package/dist/components/status-dot.js +13 -12
  695. package/dist/components/status-dot.js.map +1 -1
  696. package/dist/components/swatch-picker-labels.d.ts +2 -0
  697. package/dist/components/swatch-picker-labels.js +9 -0
  698. package/dist/components/swatch-picker-labels.js.map +1 -0
  699. package/dist/components/swatch-picker.d.ts +14 -14
  700. package/dist/components/swatch-picker.js +14 -8
  701. package/dist/components/swatch-picker.js.map +1 -1
  702. package/dist/components/swipeable-row.d.ts +14 -27
  703. package/dist/components/swipeable-row.js +2 -2
  704. package/dist/components/swipeable-row.js.map +1 -1
  705. package/dist/components/switch.d.ts +10 -13
  706. package/dist/components/switch.js +13 -12
  707. package/dist/components/switch.js.map +1 -1
  708. package/dist/components/table.d.ts +28 -31
  709. package/dist/components/table.js +15 -15
  710. package/dist/components/table.js.map +1 -1
  711. package/dist/components/tabs.d.ts +182 -0
  712. package/dist/components/tabs.js +312 -0
  713. package/dist/components/tabs.js.map +1 -0
  714. package/dist/components/text-link.d.ts +17 -119
  715. package/dist/components/text-link.js +7 -7
  716. package/dist/components/text-link.js.map +1 -1
  717. package/dist/components/text.d.ts +14 -13
  718. package/dist/components/text.js +5 -5
  719. package/dist/components/text.js.map +1 -1
  720. package/dist/components/textarea.d.ts +20 -0
  721. package/dist/components/textarea.js +161 -0
  722. package/dist/components/textarea.js.map +1 -0
  723. package/dist/components/tile-radio.d.ts +6 -10
  724. package/dist/components/tile-radio.js +6 -6
  725. package/dist/components/tile-radio.js.map +1 -1
  726. package/dist/components/time-input.d.ts +5 -108
  727. package/dist/components/time-input.js +14 -5
  728. package/dist/components/time-input.js.map +1 -1
  729. package/dist/components/toast-labels.d.ts +2 -0
  730. package/dist/components/toast-labels.js +11 -0
  731. package/dist/components/toast-labels.js.map +1 -0
  732. package/dist/components/toast.d.ts +21 -23
  733. package/dist/components/toast.js +1 -6
  734. package/dist/components/toast.js.map +1 -1
  735. package/dist/components/toggle-group.d.ts +26 -26
  736. package/dist/components/toggle-group.js +43 -19
  737. package/dist/components/toggle-group.js.map +1 -1
  738. package/dist/components/toggle-legend.d.ts +18 -21
  739. package/dist/components/toggle-legend.js +3 -3
  740. package/dist/components/toggle-legend.js.map +1 -1
  741. package/dist/components/tooltip.d.ts +16 -15
  742. package/dist/components/tooltip.js +4 -9
  743. package/dist/components/tooltip.js.map +1 -1
  744. package/dist/components/translation-review-editor.d.ts +8 -10
  745. package/dist/components/translation-review-editor.js +6 -5
  746. package/dist/components/translation-review-editor.js.map +1 -1
  747. package/dist/components/translation-review-labels.d.ts +4 -7
  748. package/dist/components/translation-review-parts.d.ts +19 -28
  749. package/dist/components/translation-review-parts.js +4 -7
  750. package/dist/components/translation-review-parts.js.map +1 -1
  751. package/dist/components/translation-review.d.ts +26 -24
  752. package/dist/components/translation-review.js +13 -10
  753. package/dist/components/translation-review.js.map +1 -1
  754. package/dist/components/tree-view.d.ts +7 -11
  755. package/dist/components/tree-view.js +8 -8
  756. package/dist/components/tree-view.js.map +1 -1
  757. package/dist/components/treemap.d.ts +9 -13
  758. package/dist/components/trigger-aria.d.ts +2 -4
  759. package/dist/components/ui-labels.d.ts +5 -0
  760. package/dist/components/ui-labels.js +20 -0
  761. package/dist/components/ui-labels.js.map +1 -0
  762. package/dist/components/use-anchor-dir.d.ts +3 -6
  763. package/dist/components/use-mobile-reveal.d.ts +2 -6
  764. package/dist/components/use-table-state.d.ts +154 -15
  765. package/dist/components/user-avatar.d.ts +8 -21
  766. package/dist/components/user-avatar.js +1 -1
  767. package/dist/components/user-avatar.js.map +1 -1
  768. package/dist/components/wizard-stepper.d.ts +6 -6
  769. package/dist/components/wizard-stepper.js +4 -3
  770. package/dist/components/wizard-stepper.js.map +1 -1
  771. package/dist/components/write-lock-labels.d.ts +2 -0
  772. package/dist/components/write-lock-labels.js +8 -0
  773. package/dist/components/write-lock-labels.js.map +1 -0
  774. package/dist/components/write-lock.d.ts +16 -18
  775. package/dist/components/write-lock.js +4 -8
  776. package/dist/components/write-lock.js.map +1 -1
  777. package/dist/data-table.d.ts +10 -18
  778. package/dist/data-table.js.map +1 -1
  779. package/dist/demo/demo-banner.d.ts +10 -13
  780. package/dist/demo/demo-banner.js +5 -19
  781. package/dist/demo/demo-banner.js.map +1 -1
  782. package/dist/demo/demo-countdown.d.ts +7 -9
  783. package/dist/demo/demo-ended.d.ts +10 -13
  784. package/dist/demo/demo-ended.js +4 -4
  785. package/dist/demo/demo-ended.js.map +1 -1
  786. package/dist/demo/demo-labels.d.ts +4 -5
  787. package/dist/demo/demo-labels.js.map +1 -1
  788. package/dist/demo/demo-session.d.ts +3 -5
  789. package/dist/demo/demo-start.d.ts +8 -11
  790. package/dist/demo/demo-start.js +3 -2
  791. package/dist/demo/demo-start.js.map +1 -1
  792. package/dist/feedback/feedback-attachment-labels.d.ts +16 -0
  793. package/dist/feedback/feedback-attachment-labels.js +17 -0
  794. package/dist/feedback/feedback-attachment-labels.js.map +1 -0
  795. package/dist/feedback/feedback-attachment.d.ts +312 -101
  796. package/dist/feedback/feedback-attachment.js +31 -42
  797. package/dist/feedback/feedback-attachment.js.map +1 -1
  798. package/dist/feedback/feedback-capture.d.ts +2 -4
  799. package/dist/feedback/feedback-context-labels.d.ts +2 -0
  800. package/dist/feedback/feedback-context-labels.js +9 -0
  801. package/dist/feedback/feedback-context-labels.js.map +1 -0
  802. package/dist/feedback/feedback-context.d.ts +110 -101
  803. package/dist/feedback/feedback-context.js +4 -7
  804. package/dist/feedback/feedback-context.js.map +1 -1
  805. package/dist/feedback/feedback-crash.d.ts +8 -110
  806. package/dist/feedback/feedback-dialog-labels.d.ts +12 -0
  807. package/dist/feedback/feedback-dialog-labels.js +17 -0
  808. package/dist/feedback/feedback-dialog-labels.js.map +1 -0
  809. package/dist/feedback/feedback-dialog.d.ts +186 -101
  810. package/dist/feedback/feedback-dialog.js +8 -18
  811. package/dist/feedback/feedback-dialog.js.map +1 -1
  812. package/dist/feedback/feedback-inbox.d.ts +236 -101
  813. package/dist/feedback/feedback-inbox.js +31 -141
  814. package/dist/feedback/feedback-inbox.js.map +1 -1
  815. package/dist/feedback/feedback-labels.d.ts +83 -101
  816. package/dist/feedback/feedback-labels.js.map +1 -1
  817. package/dist/feedback/feedback-menu-labels.d.ts +2 -0
  818. package/dist/feedback/feedback-menu-labels.js +10 -0
  819. package/dist/feedback/feedback-menu-labels.js.map +1 -0
  820. package/dist/feedback/feedback-menu.d.ts +83 -101
  821. package/dist/feedback/feedback-menu.js +3 -7
  822. package/dist/feedback/feedback-menu.js.map +1 -1
  823. package/dist/feedback/feedback-record.d.ts +239 -101
  824. package/dist/feedback/feedback-record.js +7 -2
  825. package/dist/feedback/feedback-record.js.map +1 -1
  826. package/dist/feedback/feedback-row-detail-labels.d.ts +2 -0
  827. package/dist/feedback/feedback-row-detail-labels.js +31 -0
  828. package/dist/feedback/feedback-row-detail-labels.js.map +1 -0
  829. package/dist/feedback/feedback-row-detail.d.ts +315 -101
  830. package/dist/feedback/feedback-row-detail.js +11 -37
  831. package/dist/feedback/feedback-row-detail.js.map +1 -1
  832. package/dist/feedback/feedback-status-undo.d.ts +66 -101
  833. package/dist/feedback/feedback-status-undo.js.map +1 -1
  834. package/dist/feedback/feedback-submit-dialog.d.ts +39 -0
  835. package/dist/feedback/feedback-submit-dialog.js +66 -0
  836. package/dist/feedback/feedback-submit-dialog.js.map +1 -0
  837. package/dist/feedback/feedback-submit.d.ts +13 -109
  838. package/dist/feedback/feedback-submit.js +19 -40
  839. package/dist/feedback/feedback-submit.js.map +1 -1
  840. package/dist/feedback/feedback-swipe.d.ts +9 -110
  841. package/dist/feedback/feedback-swipe.js +1 -1
  842. package/dist/feedback/feedback-swipe.js.map +1 -1
  843. package/dist/feedback/feedback-table-labels.d.ts +2 -0
  844. package/dist/feedback/feedback-table-labels.js +26 -0
  845. package/dist/feedback/feedback-table-labels.js.map +1 -0
  846. package/dist/feedback/feedback-table.d.ts +314 -101
  847. package/dist/feedback/feedback-table.js +11 -31
  848. package/dist/feedback/feedback-table.js.map +1 -1
  849. package/dist/feedback/feedback-thread-labels.d.ts +3 -0
  850. package/dist/feedback/feedback-thread-labels.js +21 -0
  851. package/dist/feedback/feedback-thread-labels.js.map +1 -0
  852. package/dist/feedback/feedback-thread.d.ts +378 -101
  853. package/dist/feedback/feedback-thread.js +27 -34
  854. package/dist/feedback/feedback-thread.js.map +1 -1
  855. package/dist/feedback/feedback-vocabulary.d.ts +98 -0
  856. package/dist/feedback/feedback-vocabulary.js +143 -0
  857. package/dist/feedback/feedback-vocabulary.js.map +1 -0
  858. package/dist/feedback.d.ts +15 -105
  859. package/dist/hooks/use-anchored-panel.d.ts +77 -15
  860. package/dist/hooks/use-anchored-panel.js +34 -1
  861. package/dist/hooks/use-anchored-panel.js.map +1 -1
  862. package/dist/hooks/use-anchored-rect.d.ts +15 -6
  863. package/dist/hooks/use-anchored-rect.js +2 -1
  864. package/dist/hooks/use-anchored-rect.js.map +1 -1
  865. package/dist/hooks/use-announce.d.ts +4 -6
  866. package/dist/hooks/use-authed-src.d.ts +5 -7
  867. package/dist/hooks/use-authed-src.js +3 -7
  868. package/dist/hooks/use-authed-src.js.map +1 -1
  869. package/dist/hooks/use-body-scroll-lock.d.ts +1 -3
  870. package/dist/hooks/use-breakpoint.d.ts +16 -17
  871. package/dist/hooks/use-breakpoint.js.map +1 -1
  872. package/dist/hooks/use-close-transition.d.ts +8 -8
  873. package/dist/hooks/use-close-transition.js +5 -4
  874. package/dist/hooks/use-close-transition.js.map +1 -1
  875. package/dist/hooks/use-copy-to-clipboard.d.ts +5 -7
  876. package/dist/hooks/use-debounce.d.ts +13 -6
  877. package/dist/hooks/use-debounce.js.map +1 -1
  878. package/dist/hooks/use-dismiss.d.ts +37 -11
  879. package/dist/hooks/use-dismiss.js +69 -10
  880. package/dist/hooks/use-dismiss.js.map +1 -1
  881. package/dist/hooks/use-file-drop.d.ts +8 -110
  882. package/dist/hooks/use-file-drop.js +1 -1
  883. package/dist/hooks/use-file-drop.js.map +1 -1
  884. package/dist/hooks/use-file-picker-labels.d.ts +2 -0
  885. package/dist/hooks/use-file-picker-labels.js +25 -0
  886. package/dist/hooks/use-file-picker-labels.js.map +1 -0
  887. package/dist/hooks/use-file-picker.d.ts +164 -0
  888. package/dist/hooks/use-file-picker.js +149 -0
  889. package/dist/hooks/use-file-picker.js.map +1 -0
  890. package/dist/hooks/use-focus-trap.d.ts +2 -4
  891. package/dist/hooks/use-focus-trap.js +2 -1
  892. package/dist/hooks/use-focus-trap.js.map +1 -1
  893. package/dist/hooks/use-hotkey.d.ts +7 -9
  894. package/dist/hooks/use-large-text.d.ts +3 -5
  895. package/dist/hooks/use-media-query.d.ts +1 -3
  896. package/dist/hooks/use-noindex.d.ts +1 -3
  897. package/dist/hooks/use-overlay-history.d.ts +1 -3
  898. package/dist/hooks/use-row-swipe.d.ts +5 -8
  899. package/dist/hooks/use-search-param-state.d.ts +10 -11
  900. package/dist/hooks/use-windowed-rows.d.ts +4 -7
  901. package/dist/i18n/defaults.d.ts +11 -105
  902. package/dist/i18n/defaults.js +82 -82
  903. package/dist/i18n/defaults.js.map +1 -1
  904. package/dist/i18n/german.d.ts +2 -105
  905. package/dist/i18n/german.js +52 -8
  906. package/dist/i18n/german.js.map +1 -1
  907. package/dist/i18n/kit-labels.d.ts +609 -101
  908. package/dist/i18n/kit-labels.js +22 -97
  909. package/dist/i18n/kit-labels.js.map +1 -1
  910. package/dist/i18n/languages.d.ts +197 -101
  911. package/dist/i18n/locales/de-CH.d.ts +3 -106
  912. package/dist/i18n/locales/en.d.ts +4 -105
  913. package/dist/i18n/locales/en.js +1834 -4
  914. package/dist/i18n/locales/en.js.map +7 -1
  915. package/dist/i18n/locales/es.d.ts +3 -106
  916. package/dist/i18n/locales/es.js +52 -8
  917. package/dist/i18n/locales/es.js.map +1 -1
  918. package/dist/i18n/locales/fr.d.ts +3 -106
  919. package/dist/i18n/locales/fr.js +53 -8
  920. package/dist/i18n/locales/fr.js.map +1 -1
  921. package/dist/i18n/locales/hu.d.ts +3 -106
  922. package/dist/i18n/locales/hu.js +52 -8
  923. package/dist/i18n/locales/hu.js.map +1 -1
  924. package/dist/i18n/locales/it.d.ts +3 -106
  925. package/dist/i18n/locales/it.js +53 -8
  926. package/dist/i18n/locales/it.js.map +1 -1
  927. package/dist/i18n/locales/zh.d.ts +3 -106
  928. package/dist/i18n/locales/zh.js +51 -8
  929. package/dist/i18n/locales/zh.js.map +1 -1
  930. package/dist/i18n/plurals.d.ts +3 -5
  931. package/dist/i18n/review.d.ts +5 -107
  932. package/dist/i18n/review.js +4 -0
  933. package/dist/i18n/review.js.map +1 -1
  934. package/dist/i18n/shared-labels.d.ts +17 -0
  935. package/dist/i18n/shared-labels.js +111 -0
  936. package/dist/i18n/shared-labels.js.map +1 -0
  937. package/dist/i18n/swiss.d.ts +1 -3
  938. package/dist/index.d.ts +329 -249
  939. package/dist/index.js +188 -215
  940. package/dist/index.js.map +1 -1
  941. package/dist/landing/access.d.ts +7 -9
  942. package/dist/landing/access.js.map +1 -1
  943. package/dist/landing/landing-actions.d.ts +9 -109
  944. package/dist/landing/landing-actions.js +1 -1
  945. package/dist/landing/landing-actions.js.map +1 -1
  946. package/dist/landing/landing-labels.d.ts +4 -5
  947. package/dist/landing/landing-labels.js.map +1 -1
  948. package/dist/landing/landing-sections.d.ts +21 -121
  949. package/dist/landing/landing-sections.js +15 -15
  950. package/dist/landing/landing-sections.js.map +1 -1
  951. package/dist/landing/page-seo.d.ts +7 -9
  952. package/dist/landing/public-header.d.ts +10 -111
  953. package/dist/landing/public-header.js +1 -1
  954. package/dist/landing/public-header.js.map +1 -1
  955. package/dist/landing/routing.d.ts +16 -120
  956. package/dist/landing/routing.js +2 -6
  957. package/dist/landing/routing.js.map +1 -1
  958. package/dist/lib/calc.d.ts +7 -9
  959. package/dist/lib/chip-edge-snap.d.ts +10 -0
  960. package/dist/lib/chip-edge-snap.js +131 -0
  961. package/dist/lib/chip-edge-snap.js.map +1 -0
  962. package/dist/lib/clipping.d.ts +2 -4
  963. package/dist/lib/cn.d.ts +2 -5
  964. package/dist/lib/cn.js +6 -1
  965. package/dist/lib/cn.js.map +1 -1
  966. package/dist/lib/column-mapping.d.ts +10 -13
  967. package/dist/lib/countries.d.ts +3 -5
  968. package/dist/lib/dates.d.ts +25 -25
  969. package/dist/lib/dates.js.map +1 -1
  970. package/dist/lib/decimal-marks.d.ts +8 -8
  971. package/dist/lib/decimal-marks.js +1 -1
  972. package/dist/lib/decimal-marks.js.map +1 -1
  973. package/dist/lib/direction.d.ts +4 -6
  974. package/dist/lib/document-navigation.d.ts +1 -3
  975. package/dist/lib/download.d.ts +67 -0
  976. package/dist/lib/download.js +89 -0
  977. package/dist/lib/download.js.map +1 -0
  978. package/dist/lib/floating-stack.d.ts +8 -6
  979. package/dist/lib/floating-stack.js.map +1 -1
  980. package/dist/lib/format.d.ts +24 -23
  981. package/dist/lib/format.js +3 -3
  982. package/dist/lib/format.js.map +1 -1
  983. package/dist/lib/iban.d.ts +9 -11
  984. package/dist/lib/ime.d.ts +17 -0
  985. package/dist/lib/ime.js +13 -0
  986. package/dist/lib/ime.js.map +1 -0
  987. package/dist/lib/isin.d.ts +3 -5
  988. package/dist/lib/logger.d.ts +4 -6
  989. package/dist/lib/person-name.d.ts +3 -5
  990. package/dist/lib/phone.d.ts +9 -11
  991. package/dist/lib/presence.d.ts +15 -0
  992. package/dist/lib/presence.js +8 -0
  993. package/dist/lib/presence.js.map +1 -0
  994. package/dist/lib/qr-encode.d.ts +4 -6
  995. package/dist/lib/reduced-motion.d.ts +18 -0
  996. package/dist/lib/reduced-motion.js +9 -0
  997. package/dist/lib/reduced-motion.js.map +1 -0
  998. package/dist/lib/round.d.ts +22 -0
  999. package/dist/lib/round.js +15 -0
  1000. package/dist/lib/round.js.map +1 -0
  1001. package/dist/lib/safe-storage.d.ts +14 -4
  1002. package/dist/lib/safe-storage.js +24 -9
  1003. package/dist/lib/safe-storage.js.map +1 -1
  1004. package/dist/lib/server-wake.d.ts +13 -14
  1005. package/dist/lib/session-refresh.d.ts +200 -0
  1006. package/dist/lib/session-refresh.js +187 -0
  1007. package/dist/lib/session-refresh.js.map +1 -0
  1008. package/dist/lib/strip-fade.d.ts +10 -13
  1009. package/dist/lib/table-text.d.ts +14 -16
  1010. package/dist/lib/text-match.d.ts +41 -0
  1011. package/dist/lib/text-match.js +23 -0
  1012. package/dist/lib/text-match.js.map +1 -0
  1013. package/dist/lib/translation-review.d.ts +44 -45
  1014. package/dist/lib/translation-review.js +3 -2
  1015. package/dist/lib/translation-review.js.map +1 -1
  1016. package/dist/rhf/fields.d.ts +123 -189
  1017. package/dist/rhf/fields.js +46 -54
  1018. package/dist/rhf/fields.js.map +1 -1
  1019. package/dist/rhf/form-core.d.ts +153 -0
  1020. package/dist/rhf/form-core.js +143 -0
  1021. package/dist/rhf/form-core.js.map +1 -0
  1022. package/dist/rhf/form.d.ts +38 -175
  1023. package/dist/rhf/form.js +9 -131
  1024. package/dist/rhf/form.js.map +1 -1
  1025. package/dist/rhf/line-items.d.ts +40 -11
  1026. package/dist/rhf/line-items.js.map +1 -1
  1027. package/dist/rhf/use-rhf-wizard-step.d.ts +3 -6
  1028. package/dist/rhf.d.ts +4 -118
  1029. package/dist/rhf.js.map +1 -1
  1030. package/dist/search/command-palette-labels.d.ts +2 -0
  1031. package/dist/search/command-palette-labels.js +15 -0
  1032. package/dist/search/command-palette-labels.js.map +1 -0
  1033. package/dist/search/command-palette.d.ts +10 -13
  1034. package/dist/search/command-palette.js +25 -44
  1035. package/dist/search/command-palette.js.map +1 -1
  1036. package/dist/search/global-search-labels.d.ts +2 -0
  1037. package/dist/search/global-search-labels.js +12 -0
  1038. package/dist/search/global-search-labels.js.map +1 -0
  1039. package/dist/search/global-search.d.ts +17 -16
  1040. package/dist/search/global-search.js +12 -12
  1041. package/dist/search/global-search.js.map +1 -1
  1042. package/dist/search/search-index.d.ts +13 -14
  1043. package/dist/search/search-index.js +2 -1
  1044. package/dist/search/search-index.js.map +1 -1
  1045. package/dist/search/use-command-key.d.ts +9 -0
  1046. package/dist/search/use-command-key.js +18 -0
  1047. package/dist/search/use-command-key.js.map +1 -0
  1048. package/dist/search.d.ts +3 -4
  1049. package/dist/settings/settings-card-classes.d.ts +11 -0
  1050. package/dist/settings/settings-card-classes.js +8 -0
  1051. package/dist/settings/settings-card-classes.js.map +1 -0
  1052. package/dist/settings/settings-catalogue.d.ts +11 -14
  1053. package/dist/settings/settings-context.d.ts +4 -8
  1054. package/dist/settings/settings-heading.d.ts +8 -12
  1055. package/dist/settings/settings-heading.js +1 -1
  1056. package/dist/settings/settings-heading.js.map +1 -1
  1057. package/dist/settings/settings-labels.d.ts +6 -7
  1058. package/dist/settings/settings-labels.js.map +1 -1
  1059. package/dist/settings/settings-layout.d.ts +36 -13
  1060. package/dist/settings/settings-layout.js +25 -4
  1061. package/dist/settings/settings-layout.js.map +1 -1
  1062. package/dist/settings/settings-section.d.ts +4 -107
  1063. package/dist/settings/settings-section.js +2 -2
  1064. package/dist/settings/settings-section.js.map +1 -1
  1065. package/dist/settings/use-account-appearance.d.ts +11 -16
  1066. package/dist/settings/use-account-language.d.ts +8 -10
  1067. package/dist/settings/use-settings-focus.d.ts +3 -5
  1068. package/dist/settings/use-settings-focus.js +2 -4
  1069. package/dist/settings/use-settings-focus.js.map +1 -1
  1070. package/dist/settings/use-settings-route.d.ts +11 -16
  1071. package/dist/shell/app-shell-labels.d.ts +2 -0
  1072. package/dist/shell/app-shell-labels.js +9 -0
  1073. package/dist/shell/app-shell-labels.js.map +1 -0
  1074. package/dist/shell/app-shell.d.ts +216 -101
  1075. package/dist/shell/app-shell.js +51 -35
  1076. package/dist/shell/app-shell.js.map +1 -1
  1077. package/dist/shell/auth-layout.d.ts +6 -9
  1078. package/dist/shell/auth-layout.js +6 -6
  1079. package/dist/shell/auth-layout.js.map +1 -1
  1080. package/dist/shell/company-switcher-labels.d.ts +2 -0
  1081. package/dist/shell/company-switcher-labels.js +12 -0
  1082. package/dist/shell/company-switcher-labels.js.map +1 -0
  1083. package/dist/shell/company-switcher.d.ts +9 -11
  1084. package/dist/shell/company-switcher.js +3 -9
  1085. package/dist/shell/company-switcher.js.map +1 -1
  1086. package/dist/shell/option-switcher-menu.d.ts +19 -9
  1087. package/dist/shell/option-switcher-menu.js +6 -4
  1088. package/dist/shell/option-switcher-menu.js.map +1 -1
  1089. package/dist/shell/role-switcher.d.ts +5 -6
  1090. package/dist/shell/role-switcher.js +4 -3
  1091. package/dist/shell/role-switcher.js.map +1 -1
  1092. package/dist/shell/top-bar-brand.d.ts +4 -107
  1093. package/dist/shell/top-bar-brand.js +1 -1
  1094. package/dist/shell/top-bar-brand.js.map +1 -1
  1095. package/dist/shell/top-bar.d.ts +6 -9
  1096. package/dist/shell/top-bar.js +1 -1
  1097. package/dist/shell/top-bar.js.map +1 -1
  1098. package/dist/shell/topbar-action-menu.d.ts +30 -31
  1099. package/dist/shell/topbar-action-menu.js +12 -10
  1100. package/dist/shell/topbar-action-menu.js.map +1 -1
  1101. package/dist/shell/topbar-controls.d.ts +20 -18
  1102. package/dist/shell/topbar-controls.js +14 -11
  1103. package/dist/shell/topbar-controls.js.map +1 -1
  1104. package/dist/shell.d.ts +25 -116
  1105. package/dist/shell.js.map +1 -1
  1106. package/dist/table-text.d.ts +1 -1
  1107. package/dist/testing/css-variables.d.ts +4 -6
  1108. package/dist/testing/css-variables.generated.d.ts +2 -4
  1109. package/dist/testing/index.d.ts +2 -1
  1110. package/dist/testing/index.js +9 -1
  1111. package/dist/testing/index.js.map +1 -1
  1112. package/dist/testing/viewport.d.ts +93 -0
  1113. package/dist/testing/viewport.js +152 -0
  1114. package/dist/testing/viewport.js.map +1 -0
  1115. package/dist/theme/chart-palette.d.ts +7 -9
  1116. package/dist/theme/color.d.ts +14 -16
  1117. package/dist/theme/color.js +2 -1
  1118. package/dist/theme/color.js.map +1 -1
  1119. package/dist/theme/contrast-tokens.d.ts +13 -17
  1120. package/dist/theme/contrast.d.ts +22 -27
  1121. package/dist/theme/palette-derive.d.ts +16 -22
  1122. package/dist/theme/palette-derive.js +15 -7
  1123. package/dist/theme/palette-derive.js.map +1 -1
  1124. package/dist/theme/palette-presets.d.ts +25 -15
  1125. package/dist/theme/palette-presets.js +66 -66
  1126. package/dist/theme/palette-presets.js.map +1 -1
  1127. package/dist/theme/palette-store.d.ts +10 -13
  1128. package/dist/theme/text-size.d.ts +21 -26
  1129. package/dist/theme/theme-store.d.ts +9 -14
  1130. package/dist/tour/tour-labels.d.ts +2 -0
  1131. package/dist/tour/tour-labels.js +13 -0
  1132. package/dist/tour/tour-labels.js.map +1 -0
  1133. package/dist/tour/tour.d.ts +12 -14
  1134. package/dist/tour/tour.js +9 -20
  1135. package/dist/tour/tour.js.map +1 -1
  1136. package/dist/tour.d.ts +1 -2
  1137. package/dist/wizard/stepper-nav.d.ts +8 -108
  1138. package/dist/wizard/stepper-nav.js +15 -14
  1139. package/dist/wizard/stepper-nav.js.map +1 -1
  1140. package/dist/wizard/types.d.ts +18 -18
  1141. package/dist/wizard/types.js +1 -19
  1142. package/dist/wizard/types.js.map +1 -1
  1143. package/dist/wizard/use-wizard.d.ts +2 -6
  1144. package/dist/wizard/validation.d.ts +3 -7
  1145. package/dist/wizard/wizard-context.d.ts +7 -11
  1146. package/dist/wizard/wizard-labels.d.ts +4 -0
  1147. package/dist/wizard/wizard-labels.js +24 -0
  1148. package/dist/wizard/wizard-labels.js.map +1 -0
  1149. package/dist/wizard/wizard-step.d.ts +3 -7
  1150. package/dist/wizard/wizard-step.js +2 -2
  1151. package/dist/wizard/wizard-step.js.map +1 -1
  1152. package/dist/wizard/wizard-summary.d.ts +5 -8
  1153. package/dist/wizard/wizard-summary.js +6 -5
  1154. package/dist/wizard/wizard-summary.js.map +1 -1
  1155. package/dist/wizard.d.ts +7 -107
  1156. package/package.json +9 -6
  1157. package/src/account/account-parts.ts +3 -3
  1158. package/src/{components → account}/account-settings-labels.ts +11 -1
  1159. package/src/{components → account}/account-settings.tsx +145 -34
  1160. package/src/account/data-export-setting-labels.ts +20 -0
  1161. package/src/account/data-export-setting.tsx +19 -38
  1162. package/src/account/delete-account-setting-labels.ts +33 -0
  1163. package/src/account/delete-account-setting.tsx +13 -35
  1164. package/src/account/email-change-setting-labels.ts +32 -0
  1165. package/src/account/email-change-setting.tsx +17 -36
  1166. package/src/{components → account}/passkeys-setting.tsx +14 -9
  1167. package/src/account/sessions-setting-labels.ts +24 -0
  1168. package/src/account/sessions-setting.tsx +14 -28
  1169. package/src/admin/admin-action-confirm-labels.ts +19 -0
  1170. package/src/admin/admin-action-confirm.tsx +59 -38
  1171. package/src/admin/admin-action-log-labels.ts +74 -0
  1172. package/src/admin/admin-action-log.tsx +180 -54
  1173. package/src/admin/admin-parts.ts +0 -7
  1174. package/src/admin/invitations-panel-labels.ts +31 -0
  1175. package/src/admin/invitations-panel.tsx +16 -34
  1176. package/src/admin/plan-change-labels.ts +23 -0
  1177. package/src/admin/plan-change.tsx +58 -34
  1178. package/src/admin/reviewer-scope-editor-labels.ts +16 -0
  1179. package/src/admin/reviewer-scope-editor.tsx +9 -15
  1180. package/src/admin/role-select-labels.ts +16 -0
  1181. package/src/admin/role-select.tsx +13 -23
  1182. package/src/admin/transfer-ownership-dialog-labels.ts +20 -0
  1183. package/src/admin/transfer-ownership-dialog.tsx +7 -17
  1184. package/src/admin/user-roster-labels.ts +17 -0
  1185. package/src/admin/user-roster.tsx +9 -17
  1186. package/src/auth/accept-invitation-labels.ts +21 -0
  1187. package/src/auth/accept-invitation.tsx +9 -20
  1188. package/src/auth/auth-errors.ts +29 -13
  1189. package/src/auth/complete-name-dialog-labels.ts +16 -0
  1190. package/src/auth/complete-name-dialog.tsx +8 -13
  1191. package/src/auth/forgot-password-form-labels.ts +20 -0
  1192. package/src/auth/forgot-password-form.tsx +12 -20
  1193. package/src/auth/new-password-fields.tsx +1 -1
  1194. package/src/auth/not-found-page-labels.ts +12 -0
  1195. package/src/auth/not-found-page.tsx +11 -14
  1196. package/src/auth/register-form-labels.ts +31 -0
  1197. package/src/auth/register-form.tsx +18 -38
  1198. package/src/auth/reset-password-form-labels.ts +27 -0
  1199. package/src/auth/reset-password-form.tsx +12 -27
  1200. package/src/auth/sign-in-form-labels.ts +44 -0
  1201. package/src/auth/sign-in-form.tsx +18 -51
  1202. package/src/auth/status-parts.tsx +3 -3
  1203. package/src/auth/verify-email-labels.ts +26 -0
  1204. package/src/auth/verify-email.tsx +15 -30
  1205. package/src/billing/billing-banner.tsx +2 -1
  1206. package/src/billing/billing-labels.ts +1 -1
  1207. package/src/billing/checkout-processing.ts +2 -12
  1208. package/src/billing/plan-card.tsx +26 -27
  1209. package/src/billing/plan-limit-notice.tsx +1 -1
  1210. package/src/billing/subscription-actions.tsx +4 -4
  1211. package/src/chart.ts +7 -1
  1212. package/src/components/account-chips-labels.ts +16 -0
  1213. package/src/components/account-chips.tsx +13 -16
  1214. package/src/components/alert-banner.tsx +39 -19
  1215. package/src/components/amount-input.tsx +461 -405
  1216. package/src/components/appearance-labels.ts +2 -2
  1217. package/src/components/authed-image-labels.ts +11 -0
  1218. package/src/components/authed-image.tsx +6 -8
  1219. package/src/components/autocomplete.tsx +79 -78
  1220. package/src/components/breadcrumbs-labels.ts +10 -0
  1221. package/src/components/breadcrumbs.tsx +17 -14
  1222. package/src/components/bulk-action-bar-labels.ts +11 -0
  1223. package/src/components/bulk-action-bar.tsx +15 -16
  1224. package/src/components/button-group.tsx +7 -7
  1225. package/src/components/button-look.ts +230 -0
  1226. package/src/components/button.tsx +339 -0
  1227. package/src/components/calculator.tsx +18 -11
  1228. package/src/components/calendar-heatmap-labels.ts +15 -0
  1229. package/src/components/calendar-heatmap.tsx +13 -19
  1230. package/src/components/card.tsx +381 -0
  1231. package/src/components/chart-zoom-core.tsx +653 -0
  1232. package/src/components/chart-zoom.tsx +64 -648
  1233. package/src/components/chart.tsx +11 -11
  1234. package/src/components/checkbox-group.tsx +13 -10
  1235. package/src/components/checkbox.tsx +43 -42
  1236. package/src/components/chip-input.tsx +377 -0
  1237. package/src/components/chip-labels.ts +13 -0
  1238. package/src/components/chip.tsx +115 -711
  1239. package/src/components/choice-card.tsx +83 -85
  1240. package/src/components/column-mapper-labels.ts +45 -0
  1241. package/src/components/column-mapper.tsx +16 -51
  1242. package/src/components/combobox-core.tsx +346 -194
  1243. package/src/components/combobox-suggestions.tsx +129 -0
  1244. package/src/components/combobox.tsx +69 -895
  1245. package/src/components/confirm-dialog-labels.ts +13 -0
  1246. package/src/components/confirm-dialog.tsx +4 -8
  1247. package/src/components/copy-button-labels.ts +13 -0
  1248. package/src/components/copy-button.tsx +10 -12
  1249. package/src/components/country-select-labels.ts +11 -0
  1250. package/src/components/country-select.tsx +74 -89
  1251. package/src/components/currency-option-list.tsx +216 -0
  1252. package/src/components/currency-select.tsx +85 -196
  1253. package/src/components/danger-confirm-labels.ts +20 -0
  1254. package/src/components/danger-confirm.tsx +69 -77
  1255. package/src/components/data-table-cells.tsx +5 -5
  1256. package/src/components/data-table-column-settings.tsx +137 -0
  1257. package/src/components/data-table-filter-popover.tsx +49 -24
  1258. package/src/components/data-table-filters.ts +48 -11
  1259. package/src/components/data-table-head.tsx +258 -0
  1260. package/src/components/data-table-labels.ts +43 -11
  1261. package/src/components/data-table-mobile.tsx +594 -0
  1262. package/src/components/data-table-pagination.tsx +11 -10
  1263. package/src/components/data-table-resize.ts +187 -0
  1264. package/src/components/data-table-row-actions.tsx +152 -0
  1265. package/src/components/data-table-selection.ts +55 -0
  1266. package/src/components/data-table-shared.tsx +172 -0
  1267. package/src/components/data-table.tsx +178 -1300
  1268. package/src/components/date-field.tsx +627 -0
  1269. package/src/components/date-picker.tsx +58 -1446
  1270. package/src/components/date-range-picker.tsx +490 -0
  1271. package/src/components/description-list-labels.ts +9 -0
  1272. package/src/components/description-list.tsx +31 -15
  1273. package/src/components/dialog-frame-labels.ts +7 -0
  1274. package/src/components/dialog-frame.tsx +8 -6
  1275. package/src/components/disclosure.tsx +14 -14
  1276. package/src/components/dropdown.tsx +102 -40
  1277. package/src/components/empty-state.tsx +137 -0
  1278. package/src/components/entity-combobox.tsx +17 -12
  1279. package/src/components/error-boundary-labels.ts +20 -0
  1280. package/src/components/error-boundary.tsx +10 -20
  1281. package/src/components/facing-pair.ts +1 -1
  1282. package/src/components/field-base.tsx +615 -0
  1283. package/src/components/field-parts.tsx +206 -77
  1284. package/src/components/field-strip.tsx +16 -21
  1285. package/src/components/field-sync-labels.ts +13 -0
  1286. package/src/components/field-sync.tsx +11 -12
  1287. package/src/components/field.tsx +13 -11
  1288. package/src/components/file-button.tsx +64 -412
  1289. package/src/components/file-dropzone.tsx +36 -33
  1290. package/src/components/floating-panel-labels.ts +10 -0
  1291. package/src/components/floating-panel.tsx +32 -21
  1292. package/src/components/focus-ring.ts +9 -4
  1293. package/src/components/form-actions-labels.ts +11 -0
  1294. package/src/components/form-actions.tsx +17 -21
  1295. package/src/components/full-bleed-dialog.tsx +27 -25
  1296. package/src/components/grouped-picker.tsx +118 -96
  1297. package/src/components/help-popover.tsx +115 -0
  1298. package/src/components/hover-menu.tsx +46 -35
  1299. package/src/components/iban-input-labels.ts +15 -0
  1300. package/src/components/iban-input.tsx +25 -20
  1301. package/src/components/icon-button.tsx +945 -0
  1302. package/src/components/icon-picker-labels.ts +13 -0
  1303. package/src/components/icon-picker.tsx +27 -24
  1304. package/src/components/image-grid-labels.ts +11 -0
  1305. package/src/components/image-grid.tsx +13 -15
  1306. package/src/components/inline-edit-field-labels.ts +11 -0
  1307. package/src/components/inline-edit-field.tsx +20 -19
  1308. package/src/components/inline-entity-combobox.tsx +789 -0
  1309. package/src/components/input.tsx +380 -0
  1310. package/src/components/jump-calendar.tsx +385 -0
  1311. package/src/components/language-select.tsx +31 -16
  1312. package/src/components/legal-labels.ts +99 -0
  1313. package/src/components/legal-page.tsx +2 -2
  1314. package/src/components/legal.tsx +11 -101
  1315. package/src/components/lightbox-labels.ts +18 -0
  1316. package/src/components/lightbox.tsx +13 -21
  1317. package/src/components/line-items-labels.ts +14 -0
  1318. package/src/components/line-items.tsx +24 -31
  1319. package/src/components/list-labels.ts +10 -0
  1320. package/src/components/list.tsx +98 -75
  1321. package/src/components/loading-state.tsx +4 -4
  1322. package/src/components/measured-grid-labels.ts +25 -0
  1323. package/src/components/measured-grid.tsx +39 -62
  1324. package/src/components/menu-item.tsx +29 -26
  1325. package/src/components/mini-calendar-labels.ts +17 -0
  1326. package/src/components/mini-calendar.tsx +38 -45
  1327. package/src/components/modal.tsx +31 -18
  1328. package/src/components/money-draft.ts +72 -0
  1329. package/src/components/money-field.tsx +16 -30
  1330. package/src/components/month-picker-labels.ts +22 -0
  1331. package/src/components/month-picker.tsx +59 -45
  1332. package/src/components/multi-entity-combobox.tsx +17 -12
  1333. package/src/components/multi-select.tsx +313 -288
  1334. package/src/components/nav-pills.tsx +19 -8
  1335. package/src/components/number-field.tsx +7 -5
  1336. package/src/components/number-input.tsx +72 -97
  1337. package/src/components/numeric-field.ts +161 -0
  1338. package/src/components/numpad-sheet.tsx +16 -16
  1339. package/src/components/one-time-code-input.tsx +154 -169
  1340. package/src/components/page-contents-labels.ts +9 -0
  1341. package/src/components/page-contents.tsx +15 -15
  1342. package/src/components/page-header.tsx +9 -5
  1343. package/src/components/password-strength-labels.ts +23 -0
  1344. package/src/components/password-strength.tsx +13 -27
  1345. package/src/components/phone-input-labels.ts +10 -0
  1346. package/src/components/phone-input.tsx +42 -57
  1347. package/src/components/picker-sheet.tsx +47 -18
  1348. package/src/components/pie-chart.tsx +11 -9
  1349. package/src/components/popover-labels.ts +14 -0
  1350. package/src/components/popover.tsx +34 -37
  1351. package/src/components/progress-bar-labels.ts +10 -0
  1352. package/src/components/progress-bar.tsx +32 -23
  1353. package/src/components/qr-code.tsx +2 -2
  1354. package/src/components/reauth-dialog-labels.ts +13 -0
  1355. package/src/components/reauth-dialog.tsx +7 -10
  1356. package/src/components/row-actions-labels.ts +10 -0
  1357. package/src/components/row-actions.tsx +11 -10
  1358. package/src/components/scroll-area.tsx +4 -10
  1359. package/src/components/search-field.tsx +35 -49
  1360. package/src/components/select.tsx +302 -0
  1361. package/src/components/separator.tsx +2 -2
  1362. package/src/components/series-chart-axes.ts +329 -0
  1363. package/src/components/series-chart-thin.ts +180 -0
  1364. package/src/components/series-chart.tsx +124 -325
  1365. package/src/components/server-wake-labels.ts +11 -0
  1366. package/src/components/server-wake.tsx +42 -63
  1367. package/src/components/settings-fields.tsx +46 -17
  1368. package/src/components/share-card-labels.ts +30 -0
  1369. package/src/components/share-card.tsx +22 -37
  1370. package/src/components/sign-chip-labels.ts +12 -0
  1371. package/src/components/sign-chip.tsx +6 -9
  1372. package/src/components/signature-pad-labels.ts +24 -0
  1373. package/src/components/signature-pad.tsx +48 -57
  1374. package/src/components/signed-amount-labels.ts +10 -0
  1375. package/src/components/signed-amount.tsx +21 -22
  1376. package/src/components/skeleton.tsx +1 -1
  1377. package/src/components/slider.tsx +51 -39
  1378. package/src/components/sparkline-labels.ts +14 -0
  1379. package/src/components/sparkline.tsx +16 -21
  1380. package/src/components/spinner.tsx +81 -0
  1381. package/src/components/stat-tile-labels.ts +15 -0
  1382. package/src/components/stat-tile.tsx +32 -37
  1383. package/src/components/status-dot.tsx +17 -14
  1384. package/src/components/swatch-picker-labels.ts +10 -0
  1385. package/src/components/swatch-picker.tsx +23 -16
  1386. package/src/components/swipeable-row.tsx +7 -7
  1387. package/src/components/switch.tsx +33 -32
  1388. package/src/components/table.tsx +15 -15
  1389. package/src/components/tabs.tsx +660 -0
  1390. package/src/components/text-link.tsx +7 -7
  1391. package/src/components/text.tsx +10 -6
  1392. package/src/components/textarea.tsx +323 -0
  1393. package/src/components/tile-radio.tsx +6 -6
  1394. package/src/components/time-input.tsx +15 -7
  1395. package/src/components/toast-labels.ts +12 -0
  1396. package/src/components/toast.tsx +5 -8
  1397. package/src/components/toggle-group.tsx +105 -42
  1398. package/src/components/toggle-legend.tsx +6 -6
  1399. package/src/components/tooltip.tsx +10 -21
  1400. package/src/components/translation-review-editor.tsx +8 -7
  1401. package/src/components/translation-review-parts.tsx +9 -13
  1402. package/src/components/translation-review.tsx +26 -14
  1403. package/src/components/tree-view.tsx +14 -12
  1404. package/src/components/ui-labels.ts +22 -0
  1405. package/src/components/user-avatar.tsx +3 -3
  1406. package/src/components/wizard-stepper.tsx +10 -5
  1407. package/src/components/write-lock-labels.ts +9 -0
  1408. package/src/components/write-lock.tsx +10 -12
  1409. package/src/data-table.ts +4 -0
  1410. package/src/demo/demo-banner.tsx +9 -25
  1411. package/src/demo/demo-ended.tsx +8 -7
  1412. package/src/demo/demo-labels.ts +2 -2
  1413. package/src/demo/demo-start.tsx +7 -5
  1414. package/src/feedback/feedback-attachment-labels.ts +36 -0
  1415. package/src/feedback/feedback-attachment.tsx +42 -66
  1416. package/src/feedback/feedback-context-labels.ts +10 -0
  1417. package/src/feedback/feedback-context.tsx +8 -9
  1418. package/src/feedback/feedback-dialog-labels.ts +28 -0
  1419. package/src/feedback/feedback-dialog.tsx +14 -44
  1420. package/src/feedback/feedback-inbox.tsx +49 -252
  1421. package/src/feedback/feedback-labels.ts +5 -5
  1422. package/src/feedback/feedback-menu-labels.ts +11 -0
  1423. package/src/feedback/feedback-menu.tsx +13 -11
  1424. package/src/feedback/feedback-record.ts +21 -7
  1425. package/src/feedback/feedback-row-detail-labels.ts +33 -0
  1426. package/src/feedback/feedback-row-detail.tsx +30 -43
  1427. package/src/feedback/feedback-status-undo.ts +3 -2
  1428. package/src/feedback/feedback-submit-dialog.tsx +109 -0
  1429. package/src/feedback/feedback-submit.tsx +45 -55
  1430. package/src/feedback/feedback-swipe.tsx +1 -1
  1431. package/src/feedback/feedback-table-labels.ts +27 -0
  1432. package/src/feedback/feedback-table.tsx +24 -40
  1433. package/src/feedback/feedback-thread-labels.ts +22 -0
  1434. package/src/feedback/feedback-thread.tsx +48 -47
  1435. package/src/feedback/feedback-vocabulary.ts +252 -0
  1436. package/src/hooks/use-anchored-panel.ts +102 -2
  1437. package/src/hooks/use-anchored-rect.ts +11 -9
  1438. package/src/hooks/use-authed-src.ts +13 -7
  1439. package/src/hooks/use-breakpoint.ts +5 -4
  1440. package/src/hooks/use-close-transition.ts +9 -10
  1441. package/src/hooks/use-debounce.ts +9 -0
  1442. package/src/hooks/use-dismiss.ts +176 -19
  1443. package/src/hooks/use-file-drop.ts +2 -2
  1444. package/src/hooks/use-file-picker-labels.ts +29 -0
  1445. package/src/hooks/use-file-picker.tsx +363 -0
  1446. package/src/hooks/use-focus-trap.ts +19 -6
  1447. package/src/i18n/defaults.ts +91 -82
  1448. package/src/i18n/german.ts +50 -6
  1449. package/src/i18n/kit-labels.tsx +70 -119
  1450. package/src/i18n/locales/en.ts +46 -0
  1451. package/src/i18n/locales/es.ts +50 -6
  1452. package/src/i18n/locales/fr.ts +52 -7
  1453. package/src/i18n/locales/hu.ts +50 -6
  1454. package/src/i18n/locales/it.ts +51 -6
  1455. package/src/i18n/locales/zh.ts +49 -6
  1456. package/src/i18n/review.ts +4 -0
  1457. package/src/i18n/shared-labels.ts +135 -0
  1458. package/src/index.ts +412 -404
  1459. package/src/landing/access.ts +2 -1
  1460. package/src/landing/landing-actions.tsx +6 -5
  1461. package/src/landing/landing-labels.ts +2 -2
  1462. package/src/landing/landing-sections.tsx +24 -23
  1463. package/src/landing/public-header.tsx +3 -2
  1464. package/src/landing/routing.tsx +2 -7
  1465. package/src/lib/chip-edge-snap.ts +212 -0
  1466. package/src/lib/cn.ts +13 -1
  1467. package/src/lib/dates.ts +4 -2
  1468. package/src/lib/decimal-marks.ts +4 -2
  1469. package/src/lib/download.ts +172 -0
  1470. package/src/lib/floating-stack.ts +5 -1
  1471. package/src/lib/format.ts +5 -3
  1472. package/src/lib/ime.ts +24 -0
  1473. package/src/lib/presence.ts +18 -0
  1474. package/src/lib/reduced-motion.ts +21 -0
  1475. package/src/lib/round.ts +38 -0
  1476. package/src/lib/safe-storage.ts +35 -11
  1477. package/src/lib/session-refresh.ts +473 -0
  1478. package/src/lib/text-match.ts +60 -0
  1479. package/src/lib/translation-review.ts +7 -6
  1480. package/src/rhf/fields.tsx +131 -179
  1481. package/src/rhf/form-core.tsx +327 -0
  1482. package/src/rhf/form.tsx +46 -321
  1483. package/src/rhf/line-items.tsx +1 -1
  1484. package/src/rhf.ts +3 -2
  1485. package/src/search/command-palette-labels.ts +16 -0
  1486. package/src/search/command-palette.tsx +37 -50
  1487. package/src/search/global-search-labels.ts +13 -0
  1488. package/src/search/global-search.tsx +50 -24
  1489. package/src/search/search-index.ts +5 -6
  1490. package/src/search/use-command-key.ts +22 -0
  1491. package/src/settings/settings-card-classes.ts +11 -0
  1492. package/src/settings/settings-heading.tsx +1 -1
  1493. package/src/settings/settings-labels.ts +2 -2
  1494. package/src/settings/settings-layout.tsx +65 -6
  1495. package/src/settings/settings-section.tsx +5 -5
  1496. package/src/settings/use-settings-focus.ts +2 -5
  1497. package/src/shell/app-shell-labels.ts +10 -0
  1498. package/src/shell/app-shell.tsx +79 -53
  1499. package/src/shell/auth-layout.tsx +11 -10
  1500. package/src/shell/company-switcher-labels.ts +13 -0
  1501. package/src/shell/company-switcher.tsx +7 -11
  1502. package/src/shell/option-switcher-menu.tsx +25 -6
  1503. package/src/shell/role-switcher.tsx +7 -3
  1504. package/src/shell/top-bar-brand.tsx +1 -1
  1505. package/src/shell/top-bar.tsx +6 -5
  1506. package/src/shell/topbar-action-menu.tsx +39 -20
  1507. package/src/shell/topbar-controls.tsx +24 -12
  1508. package/src/shell.ts +1 -1
  1509. package/src/testing/index.ts +11 -0
  1510. package/src/testing/viewport.ts +251 -0
  1511. package/src/theme/color.ts +7 -1
  1512. package/src/theme/palette-derive.ts +29 -7
  1513. package/src/theme/palette-presets.ts +81 -68
  1514. package/src/tour/tour-labels.ts +14 -0
  1515. package/src/tour/tour.tsx +13 -23
  1516. package/src/wizard/stepper-nav.tsx +19 -18
  1517. package/src/wizard/types.ts +7 -22
  1518. package/src/wizard/wizard-labels.ts +29 -0
  1519. package/src/wizard/wizard-step.tsx +2 -2
  1520. package/src/wizard/wizard-summary.tsx +8 -7
  1521. package/tokens.css +45 -14
  1522. package/dist/components/account-settings-labels.js.map +0 -1
  1523. package/dist/components/account-settings.js.map +0 -1
  1524. package/dist/components/choice-parts.d.ts +0 -24
  1525. package/dist/components/choice-parts.js +0 -18
  1526. package/dist/components/choice-parts.js.map +0 -1
  1527. package/dist/components/passkeys-setting.js.map +0 -1
  1528. package/dist/components/ui.d.ts +0 -101
  1529. package/dist/components/ui.js +0 -1955
  1530. package/dist/components/ui.js.map +0 -1
  1531. package/dist/data-table-labels-BJ5JE_X2.d.ts +0 -923
  1532. package/dist/delete-account-setting-DAgGBrbn.d.ts +0 -8167
  1533. package/src/components/choice-parts.ts +0 -33
  1534. package/src/components/ui.tsx +0 -4233
@@ -1,163 +1,34 @@
1
1
  import { Fragment, useId, useMemo, useRef, useState } from "react";
2
- import type { ComponentPropsWithoutRef, ReactNode, Ref, RefObject } from "react";
3
- import { createPortal } from "react-dom";
4
- import { ChevronDown, Plus, X } from "lucide-react";
5
- import { FIELD_BASE, FIELD_FLOATING_PAD, FIELD_INVALID } from "./ui";
2
+ import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
3
+ import { ChevronDown } from "lucide-react";
4
+ import { FIELD_BASE, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
6
5
  import { cn } from "../lib/cn";
7
6
  import { useDropdown } from "./dropdown";
8
- import { useAnchoredPanel } from "../hooks/use-anchored-panel";
9
- import { useAnchorDir } from "./use-anchor-dir";
7
+ import { takeEscape, useDismissLayer } from "../hooks/use-dismiss";
8
+ import { isImeEnter } from "../lib/ime";
10
9
  import { usePhoneLayout } from "../hooks/use-breakpoint";
11
10
  import { PickerSheet, SHEET_ROW_CLASS } from "./picker-sheet";
12
- import {
13
- ComboboxFieldLabel,
14
- DISABLED_ROW_CLASS,
15
- endHintRowProps,
16
- isOptionEnabled,
17
- offersCreate,
18
- stepEnabled,
19
- SUGGESTION_LIST_CLASS,
20
- suggestionRowClass,
21
- useActiveOptionScroll,
22
- useComboboxFieldError,
23
- type ComboClearValue,
24
- type ComboOption,
25
- } from "./combobox-core";
26
- import { DEFAULT_COMBOBOX_LABELS, useKitLabels } from "../i18n/kit-labels";
11
+ import { ComboboxFieldLabel, endHintRowProps, useActiveOptionScroll } from "./combobox-core";
12
+ import { useKitLocale } from "../i18n/kit-labels";
13
+ import { rankMatch } from "../lib/text-match";
27
14
  import {
28
15
  EndHintRow,
29
16
  FieldCaption,
30
17
  LABEL_IN_ROW,
31
18
  LockedReason,
19
+ mergeDescribedBy,
32
20
  StaticLabelRow,
21
+ useFieldError,
33
22
  useFieldHint,
34
23
  useLockReason,
24
+ type DisabledReasonDisplay,
35
25
  } from "./field-parts";
36
- import { hasMessage, mergeDescribedBy } from "./choice-parts";
37
- import { useCommitReason, type CommitScope } from "./write-lock";
38
-
39
- // One look for both combobox flavors below — the suggestion list and its rows
40
- // must stay pixel-identical between the free-text and the id-keyed variant (and
41
- // `Autocomplete`, which shares them from the core).
42
- const LIST_CLASS = SUGGESTION_LIST_CLASS;
43
-
44
- /**
45
- * "This focus came from a mouse button that is not the left one" — for the two
46
- * fields below, which open their list ON FOCUS.
47
- *
48
- * Keksdose live #309 rework: *"When clicking the mouse back button now while hovering
49
- * one of the selects it opens the select as long as I am holding the button down and
50
- * closes select after releasing."* A mouse's BACK button focuses whatever it is
51
- * pressed over, exactly as the left one does — the browser only reserves the
52
- * NAVIGATION for itself — so a field that opens on focus opened a list for a gesture
53
- * that means "go back", and the release then navigated out from under it. Measured on
54
- * his own budget: `mousePressed button=back` over the transfer form's account field
55
- * left `aria-expanded=true`, and the release took the whole add card with it.
56
- *
57
- * The press is recorded and read by the focus that the SAME press causes: focus is
58
- * mousedown's default action, dispatched inside the same task, so the flag is always
59
- * read before the `setTimeout` below can drop it. And it is always dropped — a press
60
- * that focuses nothing (the pointer was over a disabled field, the button was
61
- * released elsewhere) must not leave a latch that swallows the next Tab.
62
- *
63
- * Only the OPEN is suppressed, never the navigation: Back still goes back, which is
64
- * the whole of what the button was pressed for.
65
- */
66
- function usePrimaryPressOnly() {
67
- const auxPress = useRef(false);
68
- return {
69
- onMouseDown: (e: { button: number }) => {
70
- if (e.button === 0) return;
71
- auxPress.current = true;
72
- setTimeout(() => {
73
- auxPress.current = false;
74
- }, 0);
75
- },
76
- /** True while handling the focus a non-primary press just caused. */
77
- fromAuxButton: () => auxPress.current,
78
- };
79
- }
80
-
81
- /**
82
- * The desktop suggestion list, PORTALLED and anchored to the field.
83
- *
84
- * It used to be an `absolute` `<ul>` inside the field's own wrapper, and that is
85
- * Keksdose live #295: *"Category select inside the list is not readable. Some sort
86
- * of z indexes issue?"*. It was not z-index — a stacking context can be out-ranked,
87
- * but `overflow` cannot be argued with. The receipt's line table sits in a card
88
- * carrying `overflow-clip`, so a list opened from the last visible row was cut off
89
- * at the card's edge: measured at 256px tall with 150px of it painted.
90
- *
91
- * Every other panel in this package already learned this — `DropdownPanel`'s
92
- * `anchorRef` form, the calculator popover, the tooltip — so this reuses the same
93
- * hook rather than inventing a second placement. What that buys beyond the clip:
94
- * the list flips above the field when there is no room below, and it caps its own
95
- * height against the VISIBLE viewport, which on a phone means the on-screen
96
- * keyboard (see {@link useAnchoredPanel}).
97
- *
98
- * `panelRef` is not optional plumbing. Portalled, the list is no longer a
99
- * descendant of the wrapper, so {@link useDropdown}'s outside-click test answers
100
- * "outside" for a click on the list itself — the first option a user picked would
101
- * close the dropdown having picked nothing.
102
- */
103
- function SuggestionList({
104
- id,
105
- anchorRef,
106
- panelRef,
107
- children,
108
- }: {
109
- /** What the field's `aria-controls` names. */
110
- id: string;
111
- anchorRef: RefObject<HTMLElement | null>;
112
- panelRef: RefObject<HTMLDivElement | null>;
113
- children: ReactNode;
114
- }) {
115
- const { rect, top, bottom, maxHeight, above } = useAnchoredPanel(anchorRef, true, { preferredHeight: 256 });
116
- const dir = useAnchorDir(anchorRef, true);
117
- if (!rect) return null;
118
- return createPortal(
119
- <div
120
- ref={panelRef}
121
- // z-50, not the old z-30: the list is a child of <body> now, so it is
122
- // competing with the app's own overlays rather than with its own siblings.
123
- className="fixed z-50"
124
- // Portalled out of the form's `dir`; the field's is put back. The list is
125
- // exactly the field's width, so `left` places it in either direction.
126
- dir={dir}
127
- // Flipped above, the list hangs from its bottom edge: it filters as the user
128
- // types, and a short one placed by `top` floated above the field (keksdose K1).
129
- style={{ ...(above ? { bottom } : { top }), left: rect.left, width: rect.width }}
130
- >
131
- <ul id={id} role="listbox" data-clips="" className={LIST_CLASS} style={{ maxHeight }}>
132
- {children}
133
- </ul>
134
- </div>,
135
- document.body,
136
- );
137
- }
138
-
139
- const rowClass = suggestionRowClass;
140
-
141
- /**
142
- * The write lock on the two TYPED fields below — {@link Button}'s `disabledReason`
143
- * path, for an input (keksdose G2).
144
- *
145
- * `readOnly` rather than `disabled`, as everywhere the kit locks a field: still focusable,
146
- * so the reason in the Tooltip reaches a keyboard; refusing keys, so nothing typed can
147
- * become a value; and FIELD_BASE paints a `[readonly]` field in the settled grey a
148
- * disabled one wears. No list opens, by focus, click, chevron or arrow — and Enter is
149
- * swallowed, so a locked field does not submit the form around it either (Select's
150
- * lock, `LOCKED_SELECT_KEYS`). Every other key is left alone: the arrows and Home/End
151
- * still move the caret through a long value someone is trying to read.
152
- */
153
- function lockedKeyDown(e: { key: string; preventDefault: () => void }) {
154
- if (e.key === "Enter") e.preventDefault();
155
- }
156
-
157
- /** {@link InlineEntityCombobox}'s create row over the shared row look: in the brand
158
- * colour {@link Combobox}'s own create row wears, with a leading "+" as the panel
159
- * pickers' has — an action at the foot of the list, not one more record. */
160
- const CREATE_ROW_CLASS = "flex items-center gap-2 font-medium text-[var(--brand)]";
26
+ import type { CommitScope } from "./write-lock";
27
+ import { lockedKeyDown, rowClass, SuggestionList, usePrimaryPressOnly } from "./combobox-suggestions";
28
+ // The id-keyed sibling lives in inline-entity-combobox.tsx (MOD-9), the list both share
29
+ // in combobox-suggestions.tsx; its public names are still this module's.
30
+ export { InlineEntityCombobox } from "./inline-entity-combobox";
31
+ export type { InlineEntityComboboxProps } from "./inline-entity-combobox";
161
32
 
162
33
  /**
163
34
  * Four of the div's own attributes are omitted because this component already owns
@@ -172,7 +43,10 @@ export interface ComboboxProps
172
43
  onChange: (v: string) => void;
173
44
  /** Suggestion pool (e.g. existing payee names). */
174
45
  options: string[];
175
- label?: string;
46
+ /** The visible label, a `<label for>` above the field: a ReactNode, as on every kit
47
+ * field (a string until 0.34, refactor audit 2026-10, API-9). Without one, name the
48
+ * field with `aria-label`. */
49
+ label?: ReactNode;
176
50
  id?: string;
177
51
  placeholder?: string;
178
52
  className?: string;
@@ -210,6 +84,9 @@ export interface ComboboxProps
210
84
  * `disabledReason` way with the lock's reason; inside a form with its own Save, leave
211
85
  * it off and put `commit` on the Save. No provider, or an unlocked one: no effect. */
212
86
  commit?: CommitScope;
87
+ /** Where the reason shows — {@link Button}'s `disabledReasonDisplay`: a line under the
88
+ * field at Large and on a touch screen by default, the tooltip otherwise (DUP-3). */
89
+ disabledReasonDisplay?: DisabledReasonDisplay;
213
90
  /** Heading an option belongs under. Supplying it makes this list read exactly
214
91
  * like {@link InlineEntityCombobox}'s — one heading per group with its rows
215
92
  * indented beneath — instead of a flat list (feedback #136 rework: the payee
@@ -311,6 +188,7 @@ export function Combobox(props: ComboboxProps) {
311
188
  hint,
312
189
  disabled,
313
190
  disabledReason,
191
+ disabledReasonDisplay,
314
192
  commit,
315
193
  optionAdornment,
316
194
  autoFocus,
@@ -327,11 +205,7 @@ export function Combobox(props: ComboboxProps) {
327
205
  ...rest
328
206
  } = props;
329
207
  const hintParts = useFieldHint(hint, ariaDescribedBy);
330
- const field = useComboboxFieldError(
331
- error,
332
- invalid || ariaInvalid === true || ariaInvalid === "true",
333
- hintParts.describedBy,
334
- );
208
+ const field = useFieldError(error, invalid, hintParts.describedBy, ariaInvalid);
335
209
  const generated = useId();
336
210
  const fieldId = id ?? generated;
337
211
  // Derived from the GENERATED id, never from `id`: a caller's id is theirs to
@@ -340,9 +214,10 @@ export function Combobox(props: ComboboxProps) {
340
214
  const optionId = (index: number) => `${generated}-option-${index}`;
341
215
  // `backCloses` is the desktop half of live #309: the phone's list IS a
342
216
  // {@link PickerSheet}, which registers its own history entry, so registering a
343
- // second one here would cost two Back presses to dismiss one sheet.
217
+ // second one here would cost two Back presses to dismiss one sheet. Its Escape
218
+ // layer is this field's own, below — the list can be open with nothing to show.
344
219
  const isPhone = usePhoneLayout();
345
- const { open, setOpen, wrapperRef, panelRef } = useDropdown({ backCloses: !isPhone });
220
+ const { open, setOpen, wrapperRef, panelRef } = useDropdown({ backCloses: !isPhone, escapeLayer: false });
346
221
  const primaryOnly = usePrimaryPressOnly();
347
222
  const [active, setActive] = useState(-1);
348
223
  // The lock (see `lockedKeyDown`): a lock arriving while the list is up closes it,
@@ -383,7 +258,9 @@ export function Combobox(props: ComboboxProps) {
383
258
  */
384
259
  const [typing, setTyping] = useState(false);
385
260
 
386
- const query = typing ? value.trim().toLowerCase() : "";
261
+ const query = typing ? value.trim() : "";
262
+ // Folded as every kit list folds (DUP-5): "zurich" finds Zürich, by the locale's case.
263
+ const locale = useKitLocale();
387
264
  const matches = useMemo(() => {
388
265
  const seen = new Set<string>();
389
266
  const uniq = options.filter((o) => o && !seen.has(o) && seen.add(o));
@@ -392,12 +269,14 @@ export function Combobox(props: ComboboxProps) {
392
269
  if (!query) {
393
270
  ranked = uniq.slice(0, cap);
394
271
  } else {
395
- // Prefix matches first, then substring matches — most relevant on top.
396
- const starts = uniq.filter((o) => o.toLowerCase().startsWith(query));
397
- const contains = uniq.filter(
398
- (o) => !o.toLowerCase().startsWith(query) && o.toLowerCase().includes(query),
399
- );
400
- ranked = [...starts, ...contains].slice(0, cap);
272
+ // The whole name, then prefix matches, then substring matches — most relevant on
273
+ // top (`rankMatch`; a stable sort keeps the pool's order within a rank).
274
+ ranked = uniq
275
+ .map((o) => ({ o, rank: rankMatch(o, query, { locale }) }))
276
+ .filter((x) => x.rank >= 0)
277
+ .sort((a, b) => a.rank - b.rank)
278
+ .map((x) => x.o)
279
+ .slice(0, cap);
401
280
  }
402
281
  if (!groupBy) return ranked;
403
282
  // Keep each group contiguous so a heading appears once instead of every time
@@ -411,7 +290,7 @@ export function Combobox(props: ComboboxProps) {
411
290
  byGroup.get(key)!.push(o);
412
291
  }
413
292
  return [...byGroup.values()].flat();
414
- }, [options, query, groupBy, maxSuggestions, isPhone]);
293
+ }, [options, query, groupBy, maxSuggestions, isPhone, locale]);
415
294
 
416
295
  /**
417
296
  * Which rows OPEN a group, and with what heading — computed once for both lists.
@@ -461,7 +340,7 @@ export function Combobox(props: ComboboxProps) {
461
340
  // copy of the reason, Button's anatomy; `block` so a full-width field stays full width.
462
341
  const withLock = (box: ReactNode) =>
463
342
  locked ? (
464
- <LockedReason lock={lock} className="block">
343
+ <LockedReason lock={lock} display={disabledReasonDisplay} className="block">
465
344
  {box}
466
345
  </LockedReason>
467
346
  ) : (
@@ -474,6 +353,15 @@ export function Combobox(props: ComboboxProps) {
474
353
  ? createLabel(typed)
475
354
  : null;
476
355
 
356
+ // The list is a layer on the Escape stack while it SHOWS (Wave 2, DUP-1): an Escape
357
+ // over an empty "open" list is the dialog's, as it always was. On a phone the sheet
358
+ // is the layer.
359
+ const showing = !isPhone && open && !inert && (matches.length > 0 || Boolean(createRow));
360
+ useDismissLayer(showing, () => {
361
+ setOpen(false);
362
+ setActive(-1);
363
+ });
364
+
477
365
  return (
478
366
  // `rest` dresses the outer box — a `data-tour` anchor, a test id. Not the NAME,
479
367
  // description, invalid or required state: those belong on the <input> below,
@@ -573,6 +461,9 @@ export function Combobox(props: ComboboxProps) {
573
461
  e.preventDefault();
574
462
  setActive((i) => Math.max(i - 1, 0));
575
463
  } else if (e.key === "Enter") {
464
+ // The Enter that confirms an IME composition is the IME's: it picks no
465
+ // row and submits nothing (BUG-9).
466
+ if (isImeEnter(e)) return;
576
467
  if (open && active >= 0 && active < matches.length) {
577
468
  e.preventDefault();
578
469
  take(matches[active]);
@@ -585,6 +476,11 @@ export function Combobox(props: ComboboxProps) {
585
476
  onSubmit?.();
586
477
  }
587
478
  } else if (e.key === "Escape") {
479
+ // A list that is SHOWING is the top of the Escape stack, and the key
480
+ // closes it and stops here: a Modal or FullBleedDialog around the field
481
+ // otherwise closed with it, form and all (round 0.34 BUG-1). With no
482
+ // list on screen the key goes on to whoever wants it.
483
+ if (showing && takeEscape(e)) return;
588
484
  setOpen(false);
589
485
  setActive(-1);
590
486
  } else if (e.key === "Tab") {
@@ -615,7 +511,7 @@ export function Combobox(props: ComboboxProps) {
615
511
  if (!inert) setOpen((o) => !o);
616
512
  }}
617
513
  className={cn(
618
- "absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-[var(--text-placeholder)]",
514
+ "absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-placeholder",
619
515
  // The box above does the dimming; dimming here too would halve it again.
620
516
  !inert && "cursor-pointer",
621
517
  )}
@@ -662,7 +558,7 @@ export function Combobox(props: ComboboxProps) {
662
558
  role="option"
663
559
  aria-selected={false}
664
560
  onClick={() => take(typed)}
665
- className={cn(SHEET_ROW_CLASS, "font-medium text-[var(--brand)]")}
561
+ className={cn(SHEET_ROW_CLASS, "font-medium text-brand")}
666
562
  >
667
563
  {createRow}
668
564
  </button>
@@ -675,7 +571,7 @@ export function Combobox(props: ComboboxProps) {
675
571
  {group !== undefined && (
676
572
  <li
677
573
  role="presentation"
678
- className="px-4 pb-0.5 pt-3 text-caption font-semibold uppercase tracking-wide text-[var(--text-muted)]"
574
+ className="px-4 pb-0.5 pt-3 text-caption font-semibold uppercase tracking-wide text-muted"
679
575
  >
680
576
  {group}
681
577
  </li>
@@ -691,7 +587,7 @@ export function Combobox(props: ComboboxProps) {
691
587
  optionAdornment && "flex items-center justify-between gap-2",
692
588
  )}
693
589
  >
694
- {optionAdornment ? <span className="truncate">{o}</span> : o}
590
+ {optionAdornment ? <span className="truncate-until-large">{o}</span> : o}
695
591
  {optionAdornment?.(o)}
696
592
  </button>
697
593
  </li>
@@ -701,7 +597,7 @@ export function Combobox(props: ComboboxProps) {
701
597
  </ul>
702
598
  </PickerSheet>
703
599
  )}
704
- {!isPhone && open && !inert && (matches.length > 0 || createRow) && (
600
+ {showing && (
705
601
  <SuggestionList id={listboxId} anchorRef={fieldRef} panelRef={panelRef}>
706
602
  {createRow && (
707
603
  <li role="presentation">
@@ -716,7 +612,7 @@ export function Combobox(props: ComboboxProps) {
716
612
  e.preventDefault();
717
613
  take(typed);
718
614
  }}
719
- className={cn(rowClass(false), "font-medium text-[var(--brand)]")}
615
+ className={cn(rowClass(false), "font-medium text-brand")}
720
616
  >
721
617
  {createRow}
722
618
  </button>
@@ -732,7 +628,7 @@ export function Combobox(props: ComboboxProps) {
732
628
  {group !== undefined && (
733
629
  <li
734
630
  role="presentation"
735
- className="px-3 pb-0.5 pt-2 text-caption font-semibold uppercase tracking-wide text-[var(--text-muted)] first:pt-1"
631
+ className="px-3 pb-0.5 pt-2 text-caption font-semibold uppercase tracking-wide text-muted first:pt-1"
736
632
  >
737
633
  {group}
738
634
  </li>
@@ -763,10 +659,12 @@ export function Combobox(props: ComboboxProps) {
763
659
  // A row with a badge is a flex row so the label truncates and the
764
660
  // badge keeps its width; without one it stays the plain block the
765
661
  // other lists render, so nothing shifts for callers that pass none.
662
+ // From Large up the label wraps instead (`truncate-until-large`,
663
+ // text size §10.17, round 0.34 T1), as the badge-less row does.
766
664
  optionAdornment && "flex items-center justify-between gap-2",
767
665
  )}
768
666
  >
769
- {optionAdornment ? <span className="truncate">{o}</span> : o}
667
+ {optionAdornment ? <span className="truncate-until-large">{o}</span> : o}
770
668
  {optionAdornment?.(o)}
771
669
  </button>
772
670
  </li>
@@ -778,727 +676,3 @@ export function Combobox(props: ComboboxProps) {
778
676
  </div>
779
677
  );
780
678
  }
781
-
782
- /** `id` is the INPUT's and `onChange` is the field's — see {@link ComboboxProps}
783
- * for why the div's spellings of them are omitted. */
784
- export interface InlineEntityComboboxProps<V extends string | number, C extends ComboClearValue = null>
785
- extends Omit<ComponentPropsWithoutRef<"div">, "id" | "onChange"> {
786
- /** Selected option id; `null` or `clearValue` when nothing is selected. */
787
- value: V | C | null;
788
- /** Required and unanswered — see {@link Combobox}'s `invalid`. */
789
- invalid?: boolean;
790
- /** What is wrong with the value — see {@link Combobox}'s `error`. */
791
- error?: ReactNode;
792
- /** Standing advice — see {@link Combobox}'s `hint` (keksdose K4). */
793
- hint?: ReactNode;
794
- /** A picked/typed option emits its id; emptying the field, or the "×", emits
795
- * `clearValue`. */
796
- onChange: (v: V | C) => void;
797
- /** What a clear emits — `null` by default, `""` for a schema that wants an empty
798
- * string. See {@link EntityCombobox}'s `clearValue`. */
799
- clearValue?: C;
800
- options: ComboOption<V>[];
801
- label?: string;
802
- id?: string;
803
- placeholder?: string;
804
- className?: string;
805
- disabled?: boolean;
806
- /** Focus on mount, the way `<input autoFocus>` does — and, through `onFocus`
807
- * below, open the list with it. A click-the-value editor needs it: the cell
808
- * the user clicked names the field the editor should land the caret in, and
809
- * without a passthrough this component's fixed prop list puts the `<input>`
810
- * out of a caller's reach entirely (Keksdose feedback live #218). */
811
- autoFocus?: boolean;
812
- /** Phone sheet only — the anchored list has the field itself to type in. Falls
813
- * back to `placeholder`, then to `combobox.search` from the {@link UiKitProvider}. */
814
- searchPlaceholder?: string;
815
- /** Phone sheet only: a full screen showing nothing has to say why. The anchored
816
- * list simply does not open. Default: `combobox.noResults` from the provider. */
817
- emptyLabel?: string;
818
- closeLabel?: string;
819
- /** The phone sheet's heading (and, as a string, its accessible name) for a field
820
- * whose label is drawn by someone else — a form's `FormLabel`;
821
- * `RhfInlineEntityCombobox` hands its label over here (0.24). Default: `label`.
822
- * See {@link Combobox}'s `sheetTitle`. */
823
- sheetTitle?: ReactNode;
824
- /** Offer a clear "×" in place of the chevron whenever something is selected.
825
- *
826
- * Emptying the text already clears (see {@link reconcile}), and on a desktop that
827
- * is the fast way. It is not a way at all on a PHONE: touching the field opens the
828
- * full-screen sheet, which covers the very input the text would have been deleted
829
- * from — so a field that had been answered could not be UNanswered by any gesture
830
- * the screen offered (Keksdose live #236, filed from a phone). The "×" is the one
831
- * affordance both shells share, and it clears without opening anything. */
832
- clearable?: boolean;
833
- clearLabel?: string;
834
- /**
835
- * Why the choice cannot be changed — {@link Button}'s `disabledReason`, for a picker
836
- * that SAVES on change. keksdose G2: the statement review's account picker IS the
837
- * write (picking re-runs the duplicate check on the server), and on the read-only demo
838
- * the app wrapped it in a hand-made Tooltip over a native `disabled` — out of the tab
839
- * order, so the reason never reached a keyboard.
840
- *
841
- * With a reason the input stays focusable and `aria-disabled`, is `readOnly` (the
842
- * settled grey), opens no list or sheet, offers no clear "×", and no pick, typed
843
- * label or clear reaches `onChange`; the reason is in the kit {@link Tooltip} and on
844
- * the input's `aria-describedby`. Wins over `disabled`. Use it CONTROLLED, as the
845
- * component always is: the shown label is `value`'s.
846
- */
847
- disabledReason?: ReactNode;
848
- /**
849
- * This picker COMMITS — choosing saves. Under a locked {@link WriteLockProvider} it is
850
- * locked the `disabledReason` way with the lock's reason (which wins over its own).
851
- * A picker inside a form with its own Save stays editable under the lock — leave this
852
- * off there and put `commit` on the Save. No provider, or an unlocked one: no effect.
853
- */
854
- commit?: CommitScope;
855
- /**
856
- * A last row that makes a new record from what was typed — keksdose G9, whose "Create
857
- * cash account" had to become a separate button because this picker had no such row.
858
- *
859
- * Shown while the typed query is non-empty and names no option exactly
860
- * (case-insensitive — an exact hit is a record the list already shows), worded
861
- * `createLabel(query)`, default `combobox.create`: "Create “{query}”". The arrow keys
862
- * reach it like an option; Enter or a click calls `onCreate(query)` and closes the
863
- * list. Making the record, and then passing its id as `value`, is the caller's: the
864
- * field shows the old selection until it does.
865
- *
866
- * The same rule as {@link EntityCombobox}'s `onCreate`, so the family agrees. It is a
867
- * row of the LIST, not an option: it is never `aria-selected`, never matched by a
868
- * typed label on blur, and never sorted among the records the way a sentinel option
869
- * would be (the reason keksdose gave for the separate button).
870
- */
871
- onCreate?: (query: string) => void;
872
- /** The create row's words for a query. Default: `combobox.create` from the
873
- * {@link UiKitProvider}, else English `Create “{query}”`. */
874
- createLabel?: (query: string) => string;
875
- /**
876
- * Offer the create row with NOTHING typed too, worded as this — keksdose's "Create cash
877
- * account", which mints an account under a default name and so needs no query.
878
- * `onCreate` then receives `""`, and the caller supplies the name. Left out, the row
879
- * needs a query.
880
- *
881
- * One string rather than a switch: a row with no query has nothing to quote, so the
882
- * kit cannot word it — "Create “”" says nothing — and naming it is what turns it on.
883
- * With both, one handler serves both rows:
884
- *
885
- * ```tsx
886
- * onCreate={(name) => createCash(name || t("cash_account_default_name"))}
887
- * createEmptyLabel={t("create_cash_account")}
888
- * ```
889
- */
890
- createEmptyLabel?: string;
891
- /**
892
- * The create row WRITES while picking does not — keksdose dev#496: on the read-only
893
- * demo choosing the cash account is draft state and stays live, minting one is a
894
- * write. Under a locked {@link WriteLockProvider} the row stays in the list, dimmed and
895
- * passed over by the arrows, with the lock's reason as its second line (a hover is the
896
- * one explanation a phone cannot show), and `onCreate` is not called. Not needed with
897
- * `commit`: a locked field opens no list at all.
898
- */
899
- createCommit?: CommitScope;
900
- /**
901
- * The `<input>` — the focusable control, the one a reader types in — as a React 19
902
- * ref prop (0.24, kastlan). Its account picker is this component inside an
903
- * `RhfField` render, and react-hook-form's focus-on-error calls `focus()` on whatever
904
- * `field.ref` is handed: with no ref there was nothing to hand it, so a line-item form
905
- * whose account was missing failed its submit and left the caret where it was. Pass
906
- * `field.ref` here, or use `RhfInlineEntityCombobox`, which does. The wrapper is not
907
- * reachable this way — focus and selection are the input's. See {@link Combobox}'s `ref`.
908
- */
909
- ref?: Ref<HTMLInputElement>;
910
- }
911
-
912
- /**
913
- * The id-keyed sibling of {@link Combobox}: identical anatomy (a real text input
914
- * with the shared field styling, chevron and inline as-you-type filtering) but
915
- * the value is an option id, not free text. Built so an entity picker can sit
916
- * next to a free-text combobox without any visible difference — a button-trigger
917
- * panel picker ({@link EntityCombobox}) never matches an input field exactly.
918
- *
919
- * Text-vs-value reconciliation: the input's text is transient. Picking a row or
920
- * typing an exact (unique) label commits that option; emptying the text commits
921
- * a clear; anything else reverts to the selected option's label on blur/Escape.
922
- *
923
- * **On a phone the list opens as a full-screen sheet**, exactly like {@link Combobox}
924
- * beside it (Keksdose live #200, extended by dev#477 — the account picker moved onto
925
- * this component and must not lose its sheet). The sheet carries its OWN query state
926
- * rather than reusing `text`: `text` is what {@link reconcile} judges on blur, so a
927
- * sheet that emptied it to show the full list would read as "the user cleared the
928
- * field" the moment it closed.
929
- */
930
- export function InlineEntityCombobox<V extends string | number, C extends ComboClearValue = null>(
931
- props: InlineEntityComboboxProps<V, C>,
932
- ) {
933
- const {
934
- value: rawValue,
935
- onChange,
936
- clearValue = null as C,
937
- options,
938
- label,
939
- id,
940
- placeholder,
941
- className,
942
- disabled,
943
- autoFocus,
944
- searchPlaceholder,
945
- emptyLabel,
946
- closeLabel,
947
- sheetTitle,
948
- clearable,
949
- clearLabel,
950
- disabledReason,
951
- commit,
952
- onCreate,
953
- createLabel,
954
- createEmptyLabel,
955
- createCommit,
956
- invalid,
957
- error,
958
- hint,
959
- ref,
960
- "aria-label": ariaLabel,
961
- // Off `rest` and onto the <input>, which is the combobox a reader meets: `Field`'s
962
- // render-prop spreads `{ id, aria-describedby, aria-invalid, aria-required }`, and
963
- // on the wrapper div the hint and required state described nothing.
964
- "aria-describedby": ariaDescribedBy,
965
- "aria-invalid": ariaInvalid,
966
- "aria-required": ariaRequired,
967
- ...rest
968
- } = props;
969
- // The clear value reads as "nothing selected", whichever one the caller picked —
970
- // so from here down `value` is the id or `null`, as it always was.
971
- const value: V | null = rawValue == null || rawValue === clearValue ? null : (rawValue as V);
972
- const hintParts = useFieldHint(hint, ariaDescribedBy);
973
- const field = useComboboxFieldError(
974
- error,
975
- invalid || ariaInvalid === true || ariaInvalid === "true",
976
- hintParts.describedBy,
977
- );
978
- const generated = useId();
979
- const fieldId = id ?? generated;
980
- // See the twin above on why these hang off the generated id.
981
- const listboxId = `${generated}-listbox`;
982
- const optionId = (index: number) => `${generated}-option-${index}`;
983
- const isPhone = usePhoneLayout();
984
- // See the twin above: the phone sheet owns its own Back entry (live #309).
985
- const { open, setOpen, wrapperRef, panelRef } = useDropdown({ backCloses: !isPhone });
986
- const primaryOnly = usePrimaryPressOnly();
987
- const [active, setActive] = useState(-1);
988
- // null = not editing → the input shows the selected option's label.
989
- const [text, setText] = useState<string | null>(null);
990
- const sheetInputRef = useRef<HTMLInputElement | null>(null);
991
- // The box the portalled list hangs off — see {@link SuggestionList}.
992
- const fieldRef = useRef<HTMLDivElement>(null);
993
- // The sheet's search box. Starts empty on every open, so a field that already
994
- // holds a value still offers the whole list — the shape a native <select> has
995
- // on a phone, and what the anchored panel gets from `query` below.
996
- const [sheetQuery, setSheetQuery] = useState("");
997
- // Props first, provider second — see `EntityCombobox`. `emptyLabel` used to render
998
- // nothing when omitted, which left a phone user staring at a blank full-screen
999
- // sheet; now an omitted one says "No results" in the provider's language.
1000
- const labels = useKitLabels("combobox", DEFAULT_COMBOBOX_LABELS, {
1001
- search: searchPlaceholder,
1002
- noResults: emptyLabel,
1003
- clear: clearLabel,
1004
- create: createLabel,
1005
- });
1006
- // The lock (see `lockedKeyDown` above). A lock arriving mid-edit closes the list and
1007
- // drops the loose text, adjusted while rendering: nothing typed before it may be
1008
- // judged by `reconcile` after it.
1009
- const lock = useLockReason(commit, disabledReason);
1010
- const locked = lock.locked;
1011
- const inert = locked || Boolean(disabled);
1012
- if (locked && (open || text !== null)) {
1013
- setOpen(false);
1014
- setText(null);
1015
- }
1016
- // The create row's own lock (`createCommit`): the list stays live, the row does not.
1017
- const createReason = useCommitReason(createCommit, undefined);
1018
- const createLocked = hasMessage(createReason);
1019
-
1020
- const selected = useMemo(
1021
- () => (value == null ? null : (options.find((o) => o.value === value) ?? null)),
1022
- [options, value],
1023
- );
1024
- const shown = text ?? selected?.label ?? "";
1025
- // Nothing selected has nothing to clear, and the chevron comes back — the field
1026
- // keeps exactly one trailing control, so the "×" never crowds the value it sits on.
1027
- const showClear = Boolean(clearable && value != null && !inert);
1028
-
1029
- // Focusing select-alls the current label; filtering only kicks in once the
1030
- // text actually differs from it, so an already-filled field still opens on
1031
- // the FULL list instead of a single-row "filter" of its own value.
1032
- const typedQuery =
1033
- text !== null && text !== (selected?.label ?? "") ? text.trim().toLowerCase() : "";
1034
- const query = isPhone ? sheetQuery.trim().toLowerCase() : typedQuery;
1035
- const matches = useMemo(() => {
1036
- let ranked = options;
1037
- if (query) {
1038
- const hit = (s: string | undefined) => s?.toLowerCase().includes(query) ?? false;
1039
- const starts = options.filter((o) => o.label.toLowerCase().startsWith(query));
1040
- const rest = options.filter(
1041
- (o) =>
1042
- !o.label.toLowerCase().startsWith(query) &&
1043
- (hit(o.label) || hit(o.sublabel) || hit(o.group)),
1044
- );
1045
- ranked = [...starts, ...rest];
1046
- }
1047
- if (!ranked.some((o) => o.group)) return ranked;
1048
- // Keep each group contiguous so the headings below appear once instead of
1049
- // re-appearing every time the ranking interleaves two groups — while preserving
1050
- // "best match first": a Map keeps insertion order, so groups come out ordered by
1051
- // their best-ranked member and members keep their rank order inside the group.
1052
- const blocks = new Map<string, ComboOption<V>[]>();
1053
- for (const o of ranked) {
1054
- const key = o.group ?? "";
1055
- if (!blocks.has(key)) blocks.set(key, []);
1056
- blocks.get(key)!.push(o);
1057
- }
1058
- return [...blocks.values()].flat();
1059
- }, [options, query]);
1060
-
1061
- // The create row (`onCreate`), on the query as typed — not lowercased: it becomes a
1062
- // name. Compared against EVERY option, not `matches`: an exact hit anywhere is a
1063
- // record that exists, disabled or not. Restated from `text` rather than derived from
1064
- // `typedQuery`: this value is handed to the caller's `onCreate`, and the React
1065
- // Compiler cannot then keep `matches` memoised on anything it was derived from.
1066
- const createQuery = isPhone
1067
- ? sheetQuery.trim()
1068
- : text !== null && text !== (selected?.label ?? "")
1069
- ? text.trim()
1070
- : "";
1071
- const showCreate = offersCreate(
1072
- onCreate,
1073
- createQuery,
1074
- options.map((o) => o.label),
1075
- createEmptyLabel,
1076
- );
1077
- const createText = createQuery ? labels.create(createQuery) : createEmptyLabel;
1078
- // Every row the keyboard can land on: the options, then the create row — passed over
1079
- // like a disabled option while a write lock holds it.
1080
- const rows: readonly { disabled?: boolean }[] = showCreate
1081
- ? [...matches, { disabled: createLocked }]
1082
- : matches;
1083
- const createIndex = matches.length;
1084
-
1085
- // Pointer-device only: the phone's rows live in a {@link PickerSheet} whose own
1086
- // search box holds focus, so the field behind it must not claim to be pointing at
1087
- // one of them.
1088
- // A disabled row is never the keyboard's, even if the list changed under it.
1089
- const activeId = !isPhone && isOptionEnabled(rows[active]) ? optionId(active) : undefined;
1090
- useActiveOptionScroll(activeId);
1091
-
1092
- const close = () => {
1093
- setOpen(false);
1094
- setActive(-1);
1095
- setSheetQuery("");
1096
- };
1097
- const take = (o: ComboOption<V>) => {
1098
- // A `disabled` option is listed, never taken — by any path; nor is anything while
1099
- // the field is locked.
1100
- if (o.disabled || locked) return;
1101
- if (o.value !== value) onChange(o.value);
1102
- setText(null);
1103
- close();
1104
- };
1105
- /** Turn loose text into a decision: empty clears, an exact label match that names
1106
- * ONE entity commits, anything else reverts to the selected label.
1107
- *
1108
- * Unique by VALUE, not by row. An option may deliberately appear twice — Keksdose
1109
- * repeats recently-used categories in a "Recent" group at the top (live #203) — and
1110
- * counting rows made every such option uncommittable: two hits, so nothing fired and
1111
- * the field reverted to whatever was selected before. Typing a category you had just
1112
- * used, then tabbing away, silently discarded it, and the more categories you used
1113
- * the more of them stopped working. Two rows naming the same id are not an ambiguity;
1114
- * two ids sharing a label are. */
1115
- const create = () => {
1116
- if (!onCreate || locked || createLocked) return;
1117
- onCreate(createQuery);
1118
- setText(null);
1119
- close();
1120
- };
1121
- const reconcile = () => {
1122
- // Locked, loose text is dropped rather than judged: nothing reaches `onChange`.
1123
- if (text !== null && !locked) {
1124
- const q = text.trim();
1125
- if (!q) {
1126
- if (value != null) onChange(clearValue);
1127
- } else {
1128
- // A disabled option's label typed out in full is not a way round `disabled`:
1129
- // it is not a hit, so the text reverts like any other non-answer.
1130
- const hits = options.filter(
1131
- (o) => !o.disabled && o.label.toLowerCase() === q.toLowerCase(),
1132
- );
1133
- const ids = new Set(hits.map((h) => h.value));
1134
- if (ids.size === 1 && hits[0].value !== value) onChange(hits[0].value);
1135
- }
1136
- }
1137
- setText(null);
1138
- close();
1139
- };
1140
-
1141
- // The create row's inside, one for both shells: a "+" (it is an action, not a record),
1142
- // the words, and — while a write lock holds it — the lock's reason as a second line.
1143
- const createRowContent = (
1144
- <>
1145
- <Plus aria-hidden className="size-4 shrink-0" />
1146
- <span className="min-w-0 flex-1">
1147
- <span className="block truncate">{createText}</span>
1148
- {createLocked && (
1149
- <span className="block truncate text-xs font-normal text-[var(--text-placeholder)]">
1150
- {createReason}
1151
- </span>
1152
- )}
1153
- </span>
1154
- </>
1155
- );
1156
- // While locked the field sits in the reason's Tooltip — see Combobox.
1157
- const withLock = (box: ReactNode) =>
1158
- locked ? (
1159
- <LockedReason lock={lock} className="block">
1160
- {box}
1161
- </LockedReason>
1162
- ) : (
1163
- box
1164
- );
1165
-
1166
- return (
1167
- // `rest` dresses the outer box — a `data-tour` anchor, a test id. Not the NAME,
1168
- // description, invalid or required state: those belong on the <input> below,
1169
- // which is the combobox a reader meets. Spread FIRST, so the field's ARIA and the
1170
- // handlers carrying live #309 and dev#549 cannot be replaced from outside.
1171
- <div {...rest} ref={wrapperRef} className={cn("relative", className)}>
1172
- {/* A real <label for> — see {@link Combobox}; with a "?", in a row after the field. */}
1173
- {label !== undefined && hintParts.labelHint === undefined && (
1174
- <ComboboxFieldLabel htmlFor={fieldId} className={inert ? "opacity-50" : undefined}>
1175
- {label}
1176
- </ComboboxFieldLabel>
1177
- )}
1178
- <EndHintRow {...endHintRowProps("hint" in props, label !== undefined, hintParts.labelHint)}>
1179
- {withLock(
1180
- /* Inner wrapper for chevron centering — same reasoning as Combobox above.
1181
- It is also what the portalled list anchors to.
1182
- Dimmed as a whole when disabled (or locked), the way EntityCombobox dims its
1183
- trigger. FIELD_BASE's grey alone left a disabled picker looking like a
1184
- filled-in one beside the pickers that do dim (the label is not the input's
1185
- `peer`, so it is dimmed by hand above). */
1186
- <div ref={fieldRef} className={cn("relative", inert && "cursor-not-allowed opacity-50")}>
1187
- <input
1188
- ref={ref}
1189
- id={fieldId}
1190
- value={shown}
1191
- placeholder={placeholder}
1192
- // The caller's name, over the <label for> above. Just the label, never
1193
- // "label: value" the way a trigger button has to compose it: an input
1194
- // already exposes its value separately.
1195
- aria-label={ariaLabel}
1196
- role="combobox"
1197
- aria-expanded={open}
1198
- // Required by the role, and the half that was missing: the field said it
1199
- // was expanded and never said what it had expanded (ESLint's
1200
- // `role-has-required-aria-props`, the audit's §a11y).
1201
- aria-controls={listboxId}
1202
- aria-activedescendant={activeId}
1203
- aria-autocomplete="list"
1204
- aria-invalid={field.isInvalid || undefined}
1205
- aria-describedby={mergeDescribedBy(field.describedBy, locked && lock.reasonId)}
1206
- aria-required={ariaRequired}
1207
- autoComplete="off"
1208
- // Locked: focusable, `readOnly`, `aria-disabled` — see `lockedKeyDown`.
1209
- disabled={locked ? undefined : disabled}
1210
- readOnly={locked || undefined}
1211
- aria-disabled={locked || undefined}
1212
- // eslint-disable-next-line jsx-a11y/no-autofocus -- a documented prop the caller opts into (off by default); the field never takes focus on its own.
1213
- autoFocus={autoFocus}
1214
- // `inputMode="none"` rather than readOnly, for the same reason Combobox
1215
- // above gives: the sheet carries the keyboard, and a readOnly field would
1216
- // take FIELD_BASE's settled look on a field that is perfectly editable.
1217
- inputMode={isPhone ? "none" : undefined}
1218
- onMouseDown={primaryOnly.onMouseDown}
1219
- onFocus={(e) => {
1220
- // See {@link usePrimaryPressOnly}: a back/forward button lands here on
1221
- // its way to navigating, and neither the list nor the select-all is
1222
- // anything it asked for (live #309 rework). A locked field takes focus to
1223
- // say why, and opens nothing.
1224
- if (primaryOnly.fromAuxButton() || locked) return;
1225
- setText(shown);
1226
- e.currentTarget.select();
1227
- setOpen(true);
1228
- // The sheet has its own input; the field behind it must not also pull up
1229
- // the keyboard and scroll the page under the dialog.
1230
- if (isPhone) sheetInputRef.current?.focus();
1231
- }}
1232
- onBlur={() => {
1233
- // On a phone the blur is the SHEET taking focus, not the user leaving the
1234
- // field — reconciling there would close the sheet the instant it opened.
1235
- if (!isPhone) reconcile();
1236
- }}
1237
- onChange={(e) => {
1238
- if (locked) return;
1239
- setText(e.target.value);
1240
- setOpen(true);
1241
- setActive(-1);
1242
- }}
1243
- onKeyDown={(e) => {
1244
- if (locked) return lockedKeyDown(e);
1245
- // Disabled rows are passed over; Up from "nothing highlighted" lands on
1246
- // the first takeable row, as it always landed on row 0. The create row is
1247
- // the last row the arrows reach.
1248
- if (e.key === "ArrowDown") {
1249
- e.preventDefault();
1250
- setOpen(true);
1251
- setActive((i) => stepEnabled(rows, i, 1));
1252
- } else if (e.key === "ArrowUp") {
1253
- e.preventDefault();
1254
- setActive((i) => (i < 0 ? stepEnabled(rows, -1, 1) : stepEnabled(rows, i, -1)));
1255
- } else if (e.key === "Enter") {
1256
- if (open && isOptionEnabled(rows[active])) {
1257
- e.preventDefault();
1258
- if (active === createIndex && showCreate) create();
1259
- else take(matches[active]);
1260
- } else {
1261
- reconcile();
1262
- }
1263
- } else if (e.key === "Escape") {
1264
- setText(null);
1265
- close();
1266
- } else if (e.key === "Tab") {
1267
- // Focus is in THIS input and stays there, so the browser's own Tab is
1268
- // left alone; all that is needed is that the list stop covering what
1269
- // the user is tabbing to. `reconcile` rather than `close`, because
1270
- // leaving the field is exactly when loose text has to be judged.
1271
- reconcile();
1272
- }
1273
- // Home/End stay with the caret — see the note in {@link Combobox}: this
1274
- // field is editable, and its text is what `reconcile` judges.
1275
- }}
1276
- className={cn(
1277
- FIELD_BASE,
1278
- label !== undefined && FIELD_FLOATING_PAD,
1279
- "pe-9",
1280
- field.isInvalid && FIELD_INVALID,
1281
- )}
1282
- />
1283
- {showClear ? (
1284
- <button
1285
- type="button"
1286
- // Out of the tab order, like the clear on `EntityCombobox`: the keyboard
1287
- // already clears this field by selecting its text and deleting, and a
1288
- // second stop between every picker and the next field is a worse trade
1289
- // than the one gesture it saves.
1290
- tabIndex={-1}
1291
- aria-label={labels.clear}
1292
- // preventDefault, exactly as the chevron does: without it the press
1293
- // focuses the input, which on a phone opens the sheet over the field the
1294
- // press was clearing.
1295
- onMouseDown={(e) => e.preventDefault()}
1296
- onClick={() => {
1297
- setText(null);
1298
- close();
1299
- if (!locked) onChange(clearValue);
1300
- }}
1301
- className={cn(
1302
- "absolute end-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-[var(--text-placeholder)]",
1303
- "hover:text-[var(--text-secondary)]",
1304
- )}
1305
- >
1306
- <X aria-hidden className="size-4" />
1307
- </button>
1308
- ) : (
1309
- <ChevronDown
1310
- aria-hidden
1311
- onMouseDown={(e) => {
1312
- // Toggle on the chevron without stealing focus from the input — and
1313
- // not at all on a disabled or locked field, which the input's own
1314
- // `disabled`/`readOnly` does not stop from here.
1315
- e.preventDefault();
1316
- if (!inert) setOpen((o) => !o);
1317
- }}
1318
- className={cn(
1319
- "absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-[var(--text-placeholder)]",
1320
- // The box above does the dimming; dimming here too would halve it again.
1321
- !inert && "cursor-pointer",
1322
- )}
1323
- />
1324
- )}
1325
- </div>,
1326
- )}
1327
- </EndHintRow>
1328
- {label !== undefined && hintParts.labelHint !== undefined && (
1329
- <StaticLabelRow hint={hintParts.labelHint}>
1330
- <ComboboxFieldLabel htmlFor={fieldId} className={cn(LABEL_IN_ROW, inert && "opacity-50")}>
1331
- {label}
1332
- </ComboboxFieldLabel>
1333
- </StaticLabelRow>
1334
- )}
1335
- <FieldCaption parts={hintParts} />
1336
- {field.errorEl}
1337
- {isPhone && (
1338
- <PickerSheet
1339
- open={open && !inert}
1340
- // Closing without choosing keeps the value: `text` was never emptied, so
1341
- // reconcile has nothing to undo — it just puts the label back.
1342
- onClose={reconcile}
1343
- title={sheetTitle ?? label}
1344
- query={sheetQuery}
1345
- onQueryChange={(v) => {
1346
- setSheetQuery(v);
1347
- setActive(-1);
1348
- }}
1349
- searchPlaceholder={searchPlaceholder ?? placeholder ?? labels.search}
1350
- inputRef={sheetInputRef}
1351
- closeLabel={closeLabel}
1352
- >
1353
- <ul id={listboxId} role="listbox">
1354
- {matches.map((o, i) => (
1355
- // Keyed by group AND value, like combobox-core.tsx: an option may
1356
- // deliberately appear twice (see `reconcile`), and a bare value key
1357
- // would collide.
1358
- <Fragment key={`${o.group ?? ""}|${String(o.value)}`}>
1359
- {o.group && o.group !== matches[i - 1]?.group && (
1360
- <li
1361
- role="presentation"
1362
- className="px-4 pb-0.5 pt-3 text-caption font-semibold uppercase tracking-wide text-[var(--text-muted)]"
1363
- >
1364
- {o.group}
1365
- </li>
1366
- )}
1367
- <li role="presentation">
1368
- <button
1369
- type="button"
1370
- role="option"
1371
- aria-selected={o.value === value}
1372
- aria-disabled={o.disabled || undefined}
1373
- onClick={() => take(o)}
1374
- className={cn(
1375
- SHEET_ROW_CLASS,
1376
- o.value === value && "font-medium",
1377
- o.disabled && DISABLED_ROW_CLASS,
1378
- )}
1379
- >
1380
- {o.label}
1381
- </button>
1382
- </li>
1383
- </Fragment>
1384
- ))}
1385
- {showCreate && (
1386
- <li role="presentation">
1387
- <button
1388
- type="button"
1389
- role="option"
1390
- // An action, never chosen — see `onCreate`.
1391
- aria-selected={false}
1392
- aria-disabled={createLocked || undefined}
1393
- onClick={create}
1394
- className={cn(
1395
- SHEET_ROW_CLASS,
1396
- CREATE_ROW_CLASS,
1397
- createLocked && DISABLED_ROW_CLASS,
1398
- )}
1399
- >
1400
- {createRowContent}
1401
- </button>
1402
- </li>
1403
- )}
1404
- {/* "Nothing matched" only when there is nothing to do either: with a create
1405
- row the list is not empty, it is offering to fill itself. */}
1406
- {matches.length === 0 && !showCreate && (
1407
- <li className="px-4 py-3 text-sm text-[var(--text-muted)]">{labels.noResults}</li>
1408
- )}
1409
- </ul>
1410
- </PickerSheet>
1411
- )}
1412
- {!isPhone && open && !inert && (matches.length > 0 || showCreate) && (
1413
- <SuggestionList id={listboxId} anchorRef={fieldRef} panelRef={panelRef}>
1414
- {matches.map((o, i) => (
1415
- // A group heading is emitted at each group boundary rather than repeating
1416
- // the group on every row (feedback #136). `matches` is group-contiguous,
1417
- // so comparing with the previous row is enough. Fragment key sits here;
1418
- // the heading and the option carry their own list semantics — keyed by
1419
- // group AND value, because an option may deliberately appear twice (see
1420
- // `reconcile`).
1421
- <Fragment key={`${o.group ?? ""}|${String(o.value)}`}>
1422
- {o.group && o.group !== matches[i - 1]?.group && (
1423
- <li
1424
- role="presentation"
1425
- className="px-3 pb-0.5 pt-2 text-caption font-semibold uppercase tracking-wide text-[var(--text-muted)] first:pt-1"
1426
- >
1427
- {o.group}
1428
- </li>
1429
- )}
1430
- <li role="presentation">
1431
- <button
1432
- type="button"
1433
- id={optionId(i)}
1434
- // See {@link Combobox}: the role rides the button, `aria-selected`
1435
- // is the CHOSEN row, and the keyboard's row is the field's
1436
- // `aria-activedescendant`.
1437
- role="option"
1438
- aria-selected={o.value === value}
1439
- aria-disabled={o.disabled || undefined}
1440
- tabIndex={-1}
1441
- onMouseDown={(e) => {
1442
- // mousedown (not click) so the input's blur can't close the
1443
- // list before the selection registers. Prevented on a disabled
1444
- // row too, so pressing one leaves the field focused and open.
1445
- e.preventDefault();
1446
- take(o);
1447
- }}
1448
- onMouseEnter={() => {
1449
- if (!o.disabled) setActive(i);
1450
- }}
1451
- className={cn(
1452
- rowClass(i === active && !o.disabled),
1453
- o.disabled && DISABLED_ROW_CLASS,
1454
- // Indented under its heading, so the hierarchy is readable at a
1455
- // glance instead of inferred from grey trailing text.
1456
- o.group && "ps-6",
1457
- o.value === value && "font-medium",
1458
- )}
1459
- >
1460
- {o.label}
1461
- {o.sublabel && (
1462
- <span className="ms-2 text-xs text-[var(--text-placeholder)]">
1463
- {o.sublabel}
1464
- </span>
1465
- )}
1466
- </button>
1467
- </li>
1468
- </Fragment>
1469
- ))}
1470
- {showCreate && (
1471
- <li role="presentation">
1472
- <button
1473
- type="button"
1474
- id={optionId(createIndex)}
1475
- role="option"
1476
- // An action, never chosen; whether the keyboard is ON it is the field's
1477
- // `aria-activedescendant`'s to say.
1478
- aria-selected={false}
1479
- aria-disabled={createLocked || undefined}
1480
- tabIndex={-1}
1481
- onMouseDown={(e) => {
1482
- // mousedown, like the rows above: the input's blur would otherwise
1483
- // reconcile and close the list before the click landed.
1484
- e.preventDefault();
1485
- create();
1486
- }}
1487
- onMouseEnter={() => {
1488
- if (!createLocked) setActive(createIndex);
1489
- }}
1490
- className={cn(
1491
- rowClass(active === createIndex && !createLocked),
1492
- CREATE_ROW_CLASS,
1493
- createLocked && DISABLED_ROW_CLASS,
1494
- )}
1495
- >
1496
- {createRowContent}
1497
- </button>
1498
- </li>
1499
- )}
1500
- </SuggestionList>
1501
- )}
1502
- </div>
1503
- );
1504
- }