@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 +1 @@
1
- {"version":3,"sources":["../../src/components/copy-button.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from \"react\";\nimport { Check, Copy, X } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\nimport { useKitLabels } from \"../i18n/kit-labels\";\nimport { useAnnounce } from \"../hooks/use-announce\";\nimport { useCopyToClipboard } from \"../hooks/use-copy-to-clipboard\";\nimport type { CopyState } from \"../hooks/use-copy-to-clipboard\";\nimport { Button, IconButton } from \"./ui\";\nimport type { ButtonSize, ButtonTone, ButtonVariant, IconButtonSize, IconButtonTone } from \"./ui\";\nimport { Tooltip } from \"./tooltip\";\nimport type { TooltipSide } from \"./tooltip\";\n\n/** The words a copy button says. The visible three are short on purpose (they\n * replace the button's own text in the `label` variant); the two announcements\n * are the sentences a screen reader hears, since the button's focus never moves. */\nexport interface CopyButtonLabels {\n copy: string;\n copied: string;\n failed: string;\n copiedAnnouncement: string;\n failedAnnouncement: string;\n}\n\nexport const DEFAULT_COPY_BUTTON_LABELS: CopyButtonLabels = {\n copy: \"Copy\",\n copied: \"Copied\",\n failed: \"Couldn’t copy\",\n copiedAnnouncement: \"Copied to clipboard\",\n failedAnnouncement: \"Couldn’t copy to the clipboard\",\n};\n\nexport interface CopyButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\" | \"onClick\"> {\n /** What to copy. A function is read at click time — for a value that is expensive\n * to build (a CSV of the table) or that changes under the button. */\n text: string | (() => string);\n /** `icon` (default): a square icon button whose tooltip states the result.\n * `label`: a text button whose words change to the result. */\n variant?: \"icon\" | \"label\";\n /** The idle accessible name — and, in the `label` variant, the visible text:\n * \"Copy IBAN\" says WHAT is copied, which a row of three copy icons needs. Default\n * `copyButton.copy`. */\n label?: string;\n /** The button's own look. Default: `ghost` for the icon, `secondary` for the label. */\n buttonVariant?: ButtonVariant;\n /** The icon variant's IconButton size (default `sm`). The `label` variant takes a\n * Button size, `sm` or `md` — passed only when given, so an existing label button\n * keeps its look (keksdose budget-share-card and jobs-panel wanted the compact one). */\n size?: IconButtonSize | ButtonSize;\n /** The icon variant's IconButton tone (e.g. `muted`, so a row of copy icons is no\n * heavier than the row's other actions); in the `label` variant a Button tone,\n * which applies to `link` / `ghost`. The copied / failed colour still wins. */\n tone?: IconButtonTone | ButtonTone;\n /** Keep the click and Enter/Space from reaching a clickable row around the button,\n * as IconButton's own `stopPropagation` does (keksdose feedback-page, users-panel). */\n stopPropagation?: boolean;\n /** Icon variant only: where the result tooltip opens. */\n tooltipSide?: TooltipSide;\n /** Pass through to the tooltip. Left unset, the Tooltip decides on its own — it\n * portals inside a clipping container (a DataTable's `data-clips` scroller). */\n tooltipPortal?: boolean;\n /** ms until the button returns to idle. Default 2000. */\n resetAfter?: number;\n /** Called with the real outcome once the copy settles. */\n onCopied?: (ok: boolean) => void;\n labels?: Partial<CopyButtonLabels>;\n}\n\nconst ICONS: Record<CopyState, typeof Copy> = { idle: Copy, copied: Check, failed: X };\n\n/**\n * A button that copies a value and tells the truth about whether it did.\n *\n * keksdose asked for it after two of its own copy buttons said \"Copied\" on a build\n * where the copy had failed (no Clipboard API over plain http). This one takes its\n * state from {@link useCopyToClipboard}, which reads the result, and has a `failed`\n * state that looks and sounds different from success.\n *\n * The result is spoken through {@link useAnnounce}: activating the button moves no\n * focus, so without a live region a screen-reader user hears nothing at all. A\n * failure goes through an ASSERTIVE region and a success through a polite one — the\n * failure is the news that changes what they do next.\n *\n * The icon variant keeps the SAME accessible name in every state. A button renaming\n * itself under the focus is announced inconsistently across readers; the live region\n * is the channel that is actually heard.\n */\nexport function CopyButton({\n text,\n variant = \"icon\",\n label,\n buttonVariant,\n size,\n tone,\n stopPropagation,\n tooltipSide = \"top\",\n tooltipPortal,\n resetAfter = 2000,\n onCopied,\n labels,\n className,\n disabled,\n ...rest\n}: CopyButtonProps) {\n const words = useKitLabels(\"copyButton\", DEFAULT_COPY_BUTTON_LABELS, labels);\n const { state, copy } = useCopyToClipboard({ resetAfter });\n const polite = useAnnounce();\n const assertive = useAnnounce({ politeness: \"assertive\" });\n\n const idleText = label ?? words.copy;\n const stateText = state === \"copied\" ? words.copied : state === \"failed\" ? words.failed : idleText;\n const Icon = ICONS[state];\n const iconTone =\n state === \"copied\" ? \"text-[var(--success)]\" : state === \"failed\" ? \"text-[var(--danger)]\" : undefined;\n\n const onClick = async () => {\n const ok = await copy(typeof text === \"function\" ? text() : text);\n if (ok) polite.announce(words.copiedAnnouncement);\n else assertive.announce(words.failedAnnouncement);\n onCopied?.(ok);\n };\n\n const regions = (\n <>\n <span {...polite.regionProps} />\n <span {...assertive.regionProps} />\n </>\n );\n\n if (variant === \"label\") {\n return (\n <>\n <Button\n type=\"button\"\n {...rest}\n disabled={disabled}\n variant={buttonVariant ?? \"secondary\"}\n size={size === \"sm\" || size === \"md\" ? size : undefined}\n tone={tone === \"default\" || tone === \"muted\" || tone === \"danger\" ? tone : undefined}\n data-state={state}\n onClick={(e) => {\n if (stopPropagation) e.stopPropagation();\n void onClick();\n }}\n onKeyDown={(e) => {\n if (stopPropagation && (e.key === \"Enter\" || e.key === \" \")) e.stopPropagation();\n rest.onKeyDown?.(e);\n }}\n className={className}\n >\n <Icon aria-hidden className={cn(\"size-4 shrink-0\", iconTone)} />\n {stateText}\n </Button>\n {regions}\n </>\n );\n }\n\n return (\n <>\n <Tooltip label={stateText} side={tooltipSide} portal={tooltipPortal}>\n <IconButton\n type=\"button\"\n {...rest}\n disabled={disabled}\n aria-label={idleText}\n variant={buttonVariant ?? \"ghost\"}\n size={(size ?? \"sm\") as IconButtonSize}\n tone={tone as IconButtonTone | undefined}\n stopPropagation={stopPropagation}\n data-state={state}\n onClick={() => void onClick()}\n className={cn(iconTone, className)}\n >\n <Icon aria-hidden />\n </IconButton>\n </Tooltip>\n {regions}\n </>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/components/copy-button.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from \"react\";\nimport { Check, Copy, X } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\nimport { useKitLabels, type LabelOverride } from \"../i18n/kit-labels\";\nimport { useAnnounce } from \"../hooks/use-announce\";\nimport { useCopyToClipboard } from \"../hooks/use-copy-to-clipboard\";\nimport type { CopyState } from \"../hooks/use-copy-to-clipboard\";\nimport { Button } from \"./button\";\nimport { IconButton } from \"./icon-button\";\nimport type { ButtonSize, ButtonTone, ButtonVariant } from \"./button-look\";\nimport type { IconButtonSize, IconButtonTone } from \"./icon-button\";\nimport { Tooltip } from \"./tooltip\";\nimport type { TooltipSide } from \"./tooltip\";\nimport { DEFAULT_COPY_BUTTON_LABELS } from \"./copy-button-labels\";\n\n/** The words a copy button says. The visible three are short on purpose (they\n * replace the button's own text in the `label` variant); the two announcements\n * are the sentences a screen reader hears, since the button's focus never moves. */\nexport interface CopyButtonLabels {\n copy: string;\n copied: string;\n failed: string;\n copiedAnnouncement: string;\n failedAnnouncement: string;\n}\n\n// Defined in ./copy-button-labels, which holds no component code (0.34, KS U8).\nexport { DEFAULT_COPY_BUTTON_LABELS };\n\nexport interface CopyButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\" | \"onClick\"> {\n /** What to copy. A function is read at click time — for a value that is expensive\n * to build (a CSV of the table) or that changes under the button. */\n text: string | (() => string);\n /** `icon` (default): a square icon button whose tooltip states the result.\n * `label`: a text button whose words change to the result. */\n variant?: \"icon\" | \"label\";\n /** The idle accessible name — and, in the `label` variant, the visible text:\n * \"Copy IBAN\" says WHAT is copied, which a row of three copy icons needs. Default\n * `copyButton.copy`. */\n label?: string;\n /** The button's own look. Default: `ghost` for the icon, `secondary` for the label. */\n buttonVariant?: ButtonVariant;\n /** The icon variant's IconButton size (default `sm`). The `label` variant takes a\n * Button size, `sm` or `md` — passed only when given, so an existing label button\n * keeps its look (keksdose budget-share-card and jobs-panel wanted the compact one). */\n size?: IconButtonSize | ButtonSize;\n /** The icon variant's IconButton tone (e.g. `muted`, so a row of copy icons is no\n * heavier than the row's other actions); in the `label` variant a Button tone,\n * which applies to `link` / `ghost`. The copied / failed colour still wins. */\n tone?: IconButtonTone | ButtonTone;\n /** Keep the click and Enter/Space from reaching a clickable row around the button,\n * as IconButton's own `stopPropagation` does (keksdose feedback-page, users-panel). */\n stopPropagation?: boolean;\n /** Icon variant only: where the result tooltip opens. */\n tooltipSide?: TooltipSide;\n /** Pass through to the tooltip. Left unset, the Tooltip decides on its own — it\n * portals inside a clipping container (a DataTable's `data-clips` scroller). */\n tooltipPortal?: boolean;\n /** ms until the button returns to idle. Default 2000. */\n resetAfter?: number;\n /** Called with the real outcome once the copy settles. */\n onCopied?: (ok: boolean) => void;\n labels?: LabelOverride<CopyButtonLabels>;\n}\n\nconst ICONS: Record<CopyState, typeof Copy> = { idle: Copy, copied: Check, failed: X };\n\n/**\n * A button that copies a value and tells the truth about whether it did.\n *\n * keksdose asked for it after two of its own copy buttons said \"Copied\" on a build\n * where the copy had failed (no Clipboard API over plain http). This one takes its\n * state from {@link useCopyToClipboard}, which reads the result, and has a `failed`\n * state that looks and sounds different from success.\n *\n * The result is spoken through {@link useAnnounce}: activating the button moves no\n * focus, so without a live region a screen-reader user hears nothing at all. A\n * failure goes through an ASSERTIVE region and a success through a polite one — the\n * failure is the news that changes what they do next.\n *\n * The icon variant keeps the SAME accessible name in every state. A button renaming\n * itself under the focus is announced inconsistently across readers; the live region\n * is the channel that is actually heard.\n */\nexport function CopyButton({\n text,\n variant = \"icon\",\n label,\n buttonVariant,\n size,\n tone,\n stopPropagation,\n tooltipSide = \"top\",\n tooltipPortal,\n resetAfter = 2000,\n onCopied,\n labels,\n className,\n disabled,\n ...rest\n}: CopyButtonProps) {\n const words = useKitLabels(\"copyButton\", DEFAULT_COPY_BUTTON_LABELS, labels);\n const { state, copy } = useCopyToClipboard({ resetAfter });\n const polite = useAnnounce();\n const assertive = useAnnounce({ politeness: \"assertive\" });\n\n const idleText = label ?? words.copy;\n const stateText = state === \"copied\" ? words.copied : state === \"failed\" ? words.failed : idleText;\n const Icon = ICONS[state];\n const iconTone =\n state === \"copied\" ? \"text-success\" : state === \"failed\" ? \"text-danger\" : undefined;\n\n const onClick = async () => {\n const ok = await copy(typeof text === \"function\" ? text() : text);\n if (ok) polite.announce(words.copiedAnnouncement);\n else assertive.announce(words.failedAnnouncement);\n onCopied?.(ok);\n };\n\n const regions = (\n <>\n <span {...polite.regionProps} />\n <span {...assertive.regionProps} />\n </>\n );\n\n if (variant === \"label\") {\n return (\n <>\n <Button\n type=\"button\"\n {...rest}\n disabled={disabled}\n variant={buttonVariant ?? \"secondary\"}\n size={size === \"sm\" || size === \"md\" ? size : undefined}\n tone={tone === \"default\" || tone === \"muted\" || tone === \"danger\" ? tone : undefined}\n data-state={state}\n onClick={(e) => {\n if (stopPropagation) e.stopPropagation();\n void onClick();\n }}\n onKeyDown={(e) => {\n if (stopPropagation && (e.key === \"Enter\" || e.key === \" \")) e.stopPropagation();\n rest.onKeyDown?.(e);\n }}\n className={className}\n >\n <Icon aria-hidden className={cn(\"size-4 shrink-0\", iconTone)} />\n {stateText}\n </Button>\n {regions}\n </>\n );\n }\n\n return (\n <>\n <Tooltip label={stateText} side={tooltipSide} portal={tooltipPortal}>\n <IconButton\n type=\"button\"\n {...rest}\n disabled={disabled}\n aria-label={idleText}\n variant={buttonVariant ?? \"ghost\"}\n size={(size ?? \"sm\") as IconButtonSize}\n tone={tone as IconButtonTone | undefined}\n stopPropagation={stopPropagation}\n data-state={state}\n onClick={() => void onClick()}\n className={cn(iconTone, className)}\n >\n <Icon aria-hidden />\n </IconButton>\n </Tooltip>\n {regions}\n </>\n );\n}\n"],"mappings":";AAyHI,mBACE,KADF;AAxHJ,SAAS,OAAO,MAAM,SAAS;AAC/B,SAAS,UAAU;AACnB,SAAS,oBAAwC;AACjD,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AAEnC,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAG3B,SAAS,eAAe;AAExB,SAAS,kCAAkC;AAqD3C,MAAM,QAAwC,EAAE,MAAM,MAAM,QAAQ,OAAO,QAAQ,EAAE;AAmB9E,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,QAAM,QAAQ,aAAa,cAAc,4BAA4B,MAAM;AAC3E,QAAM,EAAE,OAAO,KAAK,IAAI,mBAAmB,EAAE,WAAW,CAAC;AACzD,QAAM,SAAS,YAAY;AAC3B,QAAM,YAAY,YAAY,EAAE,YAAY,YAAY,CAAC;AAEzD,QAAM,WAAW,SAAS,MAAM;AAChC,QAAM,YAAY,UAAU,WAAW,MAAM,SAAS,UAAU,WAAW,MAAM,SAAS;AAC1F,QAAM,OAAO,MAAM,KAAK;AACxB,QAAM,WACJ,UAAU,WAAW,iBAAiB,UAAU,WAAW,gBAAgB;AAE7E,QAAM,UAAU,YAAY;AAC1B,UAAM,KAAK,MAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,IAAI;AAChE,QAAI,GAAI,QAAO,SAAS,MAAM,kBAAkB;AAAA,QAC3C,WAAU,SAAS,MAAM,kBAAkB;AAChD,eAAW,EAAE;AAAA,EACf;AAEA,QAAM,UACJ,iCACE;AAAA,wBAAC,UAAM,GAAG,OAAO,aAAa;AAAA,IAC9B,oBAAC,UAAM,GAAG,UAAU,aAAa;AAAA,KACnC;AAGF,MAAI,YAAY,SAAS;AACvB,WACE,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACJ,GAAG;AAAA,UACJ;AAAA,UACA,SAAS,iBAAiB;AAAA,UAC1B,MAAM,SAAS,QAAQ,SAAS,OAAO,OAAO;AAAA,UAC9C,MAAM,SAAS,aAAa,SAAS,WAAW,SAAS,WAAW,OAAO;AAAA,UAC3E,cAAY;AAAA,UACZ,SAAS,CAAC,MAAM;AACd,gBAAI,gBAAiB,GAAE,gBAAgB;AACvC,iBAAK,QAAQ;AAAA,UACf;AAAA,UACA,WAAW,CAAC,MAAM;AAChB,gBAAI,oBAAoB,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAM,GAAE,gBAAgB;AAC/E,iBAAK,YAAY,CAAC;AAAA,UACpB;AAAA,UACA;AAAA,UAEA;AAAA,gCAAC,QAAK,eAAW,MAAC,WAAW,GAAG,mBAAmB,QAAQ,GAAG;AAAA,YAC7D;AAAA;AAAA;AAAA,MACH;AAAA,MACC;AAAA,OACH;AAAA,EAEJ;AAEA,SACE,iCACE;AAAA,wBAAC,WAAQ,OAAO,WAAW,MAAM,aAAa,QAAQ,eACpD;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACJ,GAAG;AAAA,QACJ;AAAA,QACA,cAAY;AAAA,QACZ,SAAS,iBAAiB;AAAA,QAC1B,MAAO,QAAQ;AAAA,QACf;AAAA,QACA;AAAA,QACA,cAAY;AAAA,QACZ,SAAS,MAAM,KAAK,QAAQ;AAAA,QAC5B,WAAW,GAAG,UAAU,SAAS;AAAA,QAEjC,8BAAC,QAAK,eAAW,MAAC;AAAA;AAAA,IACpB,GACF;AAAA,IACC;AAAA,KACH;AAEJ;","names":[]}
@@ -0,0 +1,2 @@
1
+ import type { CountrySelectLabels } from "./country-select.js";
2
+ export declare const DEFAULT_COUNTRY_SELECT_LABELS: CountrySelectLabels;
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ const DEFAULT_COUNTRY_SELECT_LABELS = {
3
+ country: "Country",
4
+ search: "Search country",
5
+ others: "Other countries"
6
+ };
7
+ export {
8
+ DEFAULT_COUNTRY_SELECT_LABELS
9
+ };
10
+ //# sourceMappingURL=country-select-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/country-select-labels.ts"],"sourcesContent":["// The English words of ./country-select, in a module with no component code: the English\n// catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one\n// chunk like the other languages (0.34, KS U8). ./country-select re-exports them.\n\nimport type { CountrySelectLabels } from \"./country-select\";\n\nexport const DEFAULT_COUNTRY_SELECT_LABELS: CountrySelectLabels = {\n country: \"Country\",\n search: \"Search country\",\n others: \"Other countries\",\n};\n"],"mappings":";AAMO,MAAM,gCAAqD;AAAA,EAChE,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;","names":[]}
@@ -1,11 +1,12 @@
1
- import * as react from 'react';
2
- import { ComponentPropsWithoutRef, Ref, ReactNode } from 'react';
3
- import { CommitScope } from './write-lock.js';
4
-
1
+ import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
2
+ import { type DisabledReasonDisplay } from "./field-parts.js";
3
+ import type { CommitScope } from "./write-lock.js";
4
+ import { type LabelOverride } from "../i18n/kit-labels.js";
5
+ import { DEFAULT_COUNTRY_SELECT_LABELS } from "./country-select-labels.js";
5
6
  /** The words {@link CountrySelect} renders on its own behalf. The list's "no results",
6
7
  * "loading" and result-count announcements are the shared `combobox` namespace's,
7
8
  * as on every other searchable picker. */
8
- interface CountrySelectLabels {
9
+ export interface CountrySelectLabels {
9
10
  /** What the field is, when the caller gives no `label`: the first half of the
10
11
  * trigger's accessible name, the phone sheet's title, and the empty trigger's
11
12
  * text. */
@@ -16,7 +17,7 @@ interface CountrySelectLabels {
16
17
  * when `preferred` puts something above it. */
17
18
  others: string;
18
19
  }
19
- declare const DEFAULT_COUNTRY_SELECT_LABELS: CountrySelectLabels;
20
+ export { DEFAULT_COUNTRY_SELECT_LABELS };
20
21
  /**
21
22
  * `onChange` is the kit's — "a country was picked", carrying its code — rather than
22
23
  * the div's form event. `id` and the `aria-*` wiring below go to the TRIGGER, which is
@@ -28,7 +29,7 @@ declare const DEFAULT_COUNTRY_SELECT_LABELS: CountrySelectLabels;
28
29
  * type-checks), and `(code: string | null) => void` once `clearable` is set — the
29
30
  * `null` of a clear cannot reach a handler that was never told about it.
30
31
  */
31
- interface CountrySelectProps<Clearable extends boolean = false> extends Omit<ComponentPropsWithoutRef<"div">, "onChange" | "defaultValue"> {
32
+ export interface CountrySelectProps<Clearable extends boolean = false> extends Omit<ComponentPropsWithoutRef<"div">, "onChange" | "defaultValue"> {
32
33
  /** The chosen country as an ISO 3166-1 alpha-2 code ("CH"), in either case;
33
34
  * `null`, `undefined` or `""` when none is. A code outside the list still shows
34
35
  * its name — the list restricts what can be PICKED, not what can be shown. */
@@ -107,10 +108,14 @@ interface CountrySelectProps<Clearable extends boolean = false> extends Omit<Com
107
108
  /**
108
109
  * Why the country cannot be changed — {@link Button}'s `disabledReason`, for a field
109
110
  * that saves itself. The trigger stays focusable and `aria-disabled`, the list does
110
- * not open and `onChange` never fires; the reason is in the kit {@link Tooltip} and
111
+ * not open and `onChange` never fires; the reason is a line under the field at Large
112
+ * and on a touch screen, else in the kit {@link Tooltip} (`disabledReasonDisplay`), and
111
113
  * on the trigger's `aria-describedby`. Wins over `disabled`.
112
114
  */
113
115
  disabledReason?: ReactNode;
116
+ /** Where the reason shows — {@link Button}'s `disabledReasonDisplay`: a line under the
117
+ * field at Large and on a touch screen by default, the tooltip otherwise (DUP-3). */
118
+ disabledReasonDisplay?: DisabledReasonDisplay;
114
119
  /**
115
120
  * This select SAVES on change (a settings row with no Save button). Under a locked
116
121
  * {@link WriteLockProvider} it is locked the `disabledReason` way, with the lock's
@@ -123,7 +128,7 @@ interface CountrySelectProps<Clearable extends boolean = false> extends Omit<Com
123
128
  locale?: string;
124
129
  /** Per-instance overrides of {@link CountrySelectLabels}, over the provider's
125
130
  * `countrySelect` namespace, over English. */
126
- labels?: Partial<CountrySelectLabels>;
131
+ labels?: LabelOverride<CountrySelectLabels>;
127
132
  /**
128
133
  * Name the trigger by an element of the caller's — a form's own label above the
129
134
  * field, which is how `RhfCountrySelect` names it. The trigger is then named by
@@ -152,10 +157,10 @@ interface CountrySelectProps<Clearable extends boolean = false> extends Omit<Com
152
157
  * is where the write lock lives: `EntityCombobox`'s is a native `disabled` button,
153
158
  * and a locked field has to stay focusable to say why.
154
159
  *
155
- * The search is this component's own too: it folds accents and case ("osterreich"
160
+ * The ranking is this component's own too: it folds accents and case ("osterreich"
156
161
  * finds Österreich), matches the code ("ch" ranks Switzerland first), and ranks
157
- * name-starts above name-contains. The panel is handed those rows in place of the
158
- * core's plain substring filter.
162
+ * name-starts above name-contains — the kit's `rankMatch`, which began here. The panel
163
+ * is handed those rows in place of the core's filter, which does not rank.
159
164
  *
160
165
  * Field anatomy as on every field: floating `label`, `hint`, `error`, `invalid`; the
161
166
  * trigger is named "label: value" as the other trigger pickers are.
@@ -163,6 +168,4 @@ interface CountrySelectProps<Clearable extends boolean = false> extends Omit<Com
163
168
  * Since 0.23 it takes a `ref` to the trigger (react-hook-form's focus-on-error, kastlan)
164
169
  * and `clearable`, which hands `onChange` `null`.
165
170
  */
166
- declare function CountrySelect<Clearable extends boolean = false>({ value, onChange, countries, preferred, flags, label, hint, error, invalid, placeholder, disabled, disabledReason: ownReason, commit, clearable, clearLabel, locale: localeProp, labels: labelsProp, className, id, ref, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-required": ariaRequired, ...rest }: CountrySelectProps<Clearable>): react.JSX.Element;
167
-
168
- export { CountrySelect, type CountrySelectLabels, type CountrySelectProps, DEFAULT_COUNTRY_SELECT_LABELS };
171
+ export declare function CountrySelect<Clearable extends boolean = false>({ value, onChange, countries, preferred, flags, label, hint, error, invalid, placeholder, disabled, disabledReason: ownReason, disabledReasonDisplay, commit, clearable, clearLabel, locale: localeProp, labels: labelsProp, className, id, ref, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-required": ariaRequired, ...rest }: CountrySelectProps<Clearable>): import("react").JSX.Element;
@@ -1,40 +1,36 @@
1
1
  "use client";
2
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useId, useMemo } from "react";
4
4
  import { X } from "lucide-react";
5
5
  import { cn } from "../lib/cn.js";
6
6
  import { COUNTRY_CODES, countryName, normalizeCountryCode } from "../lib/countries.js";
7
- import { FieldChevron, FIELD_FLOATING_PAD, FIELD_INVALID, FIELD_TRIGGER, FloatingField } from "./ui.js";
8
- import { Tooltip } from "./tooltip.js";
9
- import { CurrencyFlag } from "./currency-select.js";
7
+ import { rankMatch } from "../lib/text-match.js";
8
+ import {
9
+ FieldChevron,
10
+ FIELD_FLOATING_PAD,
11
+ FIELD_INVALID,
12
+ FIELD_TRIGGER,
13
+ FloatingField
14
+ } from "./field-base.js";
10
15
  import {
11
- ComboboxPanel,
12
- useComboboxCore,
13
- useComboboxFieldError
14
- } from "./combobox-core.js";
15
- import { assignRef, hasMessage, mergeDescribedBy } from "./choice-parts.js";
16
- import { useCommitReason } from "./write-lock.js";
16
+ assignRef,
17
+ EndHintRow,
18
+ LockedReason,
19
+ mergeDescribedBy,
20
+ useFieldMessages,
21
+ useLockReason
22
+ } from "./field-parts.js";
23
+ import { CurrencyFlag } from "./currency-select.js";
24
+ import { ComboboxPanel, useComboboxCore } from "./combobox-core.js";
17
25
  import {
18
26
  DEFAULT_COMBOBOX_LABELS,
19
27
  DEFAULT_COMMON_LABELS,
20
28
  useKitLabels,
21
29
  useKitLocale
22
30
  } from "../i18n/kit-labels.js";
23
- const DEFAULT_COUNTRY_SELECT_LABELS = {
24
- country: "Country",
25
- search: "Search country",
26
- others: "Other countries"
27
- };
28
- function fold(s) {
29
- return s.normalize("NFD").replace(/\p{M}/gu, "").toLowerCase();
30
- }
31
- function rank(e, q) {
32
- if (e.code.toLowerCase() === q) return 0;
33
- if (e.folded.startsWith(q)) return 1;
34
- return e.folded.includes(q) ? 2 : -1;
35
- }
36
- function search(entries, q) {
37
- return entries.map((e) => ({ e, r: rank(e, q) })).filter((x) => x.r >= 0).sort((a, b) => a.r - b.r).map((x) => x.e);
31
+ import { DEFAULT_COUNTRY_SELECT_LABELS } from "./country-select-labels.js";
32
+ function search(entries, q, locale) {
33
+ return entries.map((e) => ({ e, r: rankMatch(e.name, q, { code: e.code, locale }) })).filter((x) => x.r >= 0).sort((a, b) => a.r - b.r).map((x) => x.e);
38
34
  }
39
35
  function toOption(e, flags, group) {
40
36
  return {
@@ -64,6 +60,7 @@ function CountrySelect({
64
60
  placeholder,
65
61
  disabled,
66
62
  disabledReason: ownReason,
63
+ disabledReasonDisplay,
67
64
  commit,
68
65
  clearable,
69
66
  clearLabel,
@@ -95,10 +92,7 @@ function CountrySelect({
95
92
  pool.push(code2);
96
93
  }
97
94
  }
98
- const entry = (code2) => {
99
- const name2 = countryName(code2, locale);
100
- return { code: code2, name: name2, folded: fold(name2) };
101
- };
95
+ const entry = (code2) => ({ code: code2, name: countryName(code2, locale) });
102
96
  const firsts = [];
103
97
  const picked = /* @__PURE__ */ new Set();
104
98
  for (const raw of preferredKey ? preferredKey.split(",") : []) {
@@ -125,30 +119,28 @@ function CountrySelect({
125
119
  },
126
120
  [ref, triggerRef]
127
121
  );
128
- const q = fold(query.trim());
122
+ const q = query.trim();
129
123
  const results = useMemo(() => {
130
- const firsts = q ? search(top, q) : top;
131
- const below = q ? search(others, q) : others;
124
+ const firsts = q ? search(top, q, locale) : top;
125
+ const below = q ? search(others, q, locale) : others;
132
126
  const heading = firsts.length > 0 ? text.others : void 0;
133
127
  return [...firsts.map((e) => toOption(e, flags)), ...below.map((e) => toOption(e, flags, heading))];
134
- }, [top, others, q, text.others, flags]);
135
- const reason = useCommitReason(commit, ownReason);
136
- const locked = hasMessage(reason);
128
+ }, [top, others, q, text.others, flags, locale]);
129
+ const lock = useLockReason(commit, ownReason);
130
+ const locked = lock.locked;
137
131
  const inert = locked || Boolean(disabled);
138
132
  if (inert && open) setOpen(false);
139
133
  const generated = useId();
140
134
  const triggerId = id ?? generated;
141
135
  const listboxId = `${generated}-listbox`;
142
- const hintId = useId();
143
- const reasonId = useId();
144
- const textHint = typeof hint === "string" && hint !== "" || typeof hint === "number";
145
- const field = useComboboxFieldError(
136
+ const field = useFieldMessages({
137
+ hint,
146
138
  error,
147
- invalid || ariaInvalid === true || ariaInvalid === "true",
148
- // The caller's, then the standing advice, then (inside) the error — the order every
149
- // field keeps — and the lock's reason last, while there is one.
150
- mergeDescribedBy(ariaDescribedBy, textHint && hintId)
151
- );
139
+ invalid,
140
+ describedBy: ariaDescribedBy,
141
+ ariaInvalid,
142
+ reasonId: locked && lock.reasonId
143
+ });
152
144
  const code = normalizeCountryCode(value);
153
145
  const selectedName = code ? countryName(code, locale) : void 0;
154
146
  const emptyText = placeholder ?? (label === void 0 && !ariaLabelledBy ? text.country : "");
@@ -181,7 +173,7 @@ function CountrySelect({
181
173
  "aria-labelledby": labelledBy,
182
174
  "aria-invalid": field.isInvalid || void 0,
183
175
  "aria-required": ariaRequired,
184
- "aria-describedby": mergeDescribedBy(field.describedBy, locked && reasonId),
176
+ "aria-describedby": field.describedBy,
185
177
  disabled: locked ? void 0 : disabled,
186
178
  "aria-disabled": locked || void 0,
187
179
  onClick: (e) => {
@@ -216,7 +208,7 @@ function CountrySelect({
216
208
  "span",
217
209
  {
218
210
  id: valueId,
219
- className: cn("truncate", selectedName === void 0 && "text-[var(--text-placeholder)]"),
211
+ className: cn("truncate-until-large", selectedName === void 0 && "text-placeholder"),
220
212
  children: selectedName ?? emptyText
221
213
  }
222
214
  )
@@ -236,7 +228,7 @@ function CountrySelect({
236
228
  e.stopPropagation();
237
229
  clear();
238
230
  },
239
- className: "absolute end-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-[var(--text-placeholder)] hover:text-[var(--text-secondary)]",
231
+ className: "absolute end-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-placeholder hover:text-secondary",
240
232
  children: /* @__PURE__ */ jsx(X, { "aria-hidden": true, className: "size-4" })
241
233
  }
242
234
  )
@@ -245,29 +237,22 @@ function CountrySelect({
245
237
  }
246
238
  );
247
239
  const control = locked ? (
248
- // In a FRAGMENT, as Button does, so the Tooltip does not clone its bubble into the
249
- // description as well — the hidden copy is what `aria-describedby` points at.
250
- /* @__PURE__ */ jsx(Tooltip, { label: reason, className: "flex w-full", children: /* @__PURE__ */ jsxs(Fragment, { children: [
251
- trigger,
252
- /* @__PURE__ */ jsx("span", { id: reasonId, hidden: true, children: reason })
253
- ] }) })
240
+ // Button's frame: the line under the trigger, or the Tooltip with a hidden copy for
241
+ // `aria-describedby`. `items-stretch`: in the line's column the trigger keeps the
242
+ // field's full width.
243
+ /* @__PURE__ */ jsx(LockedReason, { lock, display: disabledReasonDisplay, className: "flex w-full items-stretch", children: trigger })
254
244
  ) : trigger;
255
- const labelHint = textHint ? void 0 : hasMessage(hint) ? hint : void 0;
256
- const box = label !== void 0 ? /* @__PURE__ */ jsx(FloatingField, { htmlFor: triggerId, label, staticLabel: true, hint: labelHint, children: control }) : labelHint !== void 0 ? (
257
- // No label line to ride: the "?" goes at the field's end, outside the box, as on
258
- // an unlabelled Select.
259
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
260
- /* @__PURE__ */ jsx("div", { className: "relative min-w-0 flex-1", children: control }),
261
- /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center", children: labelHint })
262
- ] })
263
- ) : /* @__PURE__ */ jsx("div", { className: "relative", children: control });
245
+ const box = label !== void 0 ? /* @__PURE__ */ jsx(FloatingField, { htmlFor: triggerId, label, staticLabel: true, hint: field.labelHint, children: control }) : (
246
+ // No label line to ride: a "?" goes at the field's end, outside the box, as on an
247
+ // unlabelled Select.
248
+ /* @__PURE__ */ jsx(EndHintRow, { hint: field.labelHint, children: /* @__PURE__ */ jsx("div", { className: "relative", children: control }) })
249
+ );
264
250
  return (
265
251
  // `rest` dresses the wrapper — a `data-tour` anchor, a test id. The name, the
266
252
  // description and the invalid state are on the trigger above.
267
253
  /* @__PURE__ */ jsxs("div", { ...rest, className, children: [
268
254
  box,
269
- textHint && /* @__PURE__ */ jsx("p", { id: hintId, className: "mt-1 text-caption leading-tight text-[var(--text-muted)]", children: hint }),
270
- field.errorEl,
255
+ field.below,
271
256
  /* @__PURE__ */ jsx(
272
257
  ComboboxPanel,
273
258
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/country-select.tsx"],"sourcesContent":["import { useCallback, useId, useMemo } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode, Ref } from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\nimport { COUNTRY_CODES, countryName, normalizeCountryCode } from \"../lib/countries\";\nimport { FieldChevron, FIELD_FLOATING_PAD, FIELD_INVALID, FIELD_TRIGGER, FloatingField } from \"./ui\";\nimport { Tooltip } from \"./tooltip\";\nimport { CurrencyFlag } from \"./currency-select\";\nimport {\n ComboboxPanel,\n useComboboxCore,\n useComboboxFieldError,\n type ComboOption,\n} from \"./combobox-core\";\nimport { assignRef, hasMessage, mergeDescribedBy } from \"./choice-parts\";\nimport { useCommitReason, type CommitScope } from \"./write-lock\";\nimport {\n DEFAULT_COMBOBOX_LABELS,\n DEFAULT_COMMON_LABELS,\n useKitLabels,\n useKitLocale,\n} from \"../i18n/kit-labels\";\n\n// ── Labels ────────────────────────────────────────────────────────────────────\n\n/** The words {@link CountrySelect} renders on its own behalf. The list's \"no results\",\n * \"loading\" and result-count announcements are the shared `combobox` namespace's,\n * as on every other searchable picker. */\nexport interface CountrySelectLabels {\n /** What the field is, when the caller gives no `label`: the first half of the\n * trigger's accessible name, the phone sheet's title, and the empty trigger's\n * text. */\n country: string;\n /** The search box in the open list. */\n search: string;\n /** The heading between the `preferred` countries and all the others. Shown only\n * when `preferred` puts something above it. */\n others: string;\n}\n\nexport const DEFAULT_COUNTRY_SELECT_LABELS: CountrySelectLabels = {\n country: \"Country\",\n search: \"Search country\",\n others: \"Other countries\",\n};\n\n// ── Props ─────────────────────────────────────────────────────────────────────\n\n/**\n * `onChange` is the kit's — \"a country was picked\", carrying its code — rather than\n * the div's form event. `id` and the `aria-*` wiring below go to the TRIGGER, which is\n * the control a reader meets; everything else in `rest` dresses the wrapper.\n *\n * `Clearable` follows `clearable`, the way {@link EntityCombobox}'s `C` follows its\n * `clearValue`: it is inferred from the prop, so `onChange` is `(code: string) => void`\n * for the field as it always was (`onChange={setCountry}` over a `string` state still\n * type-checks), and `(code: string | null) => void` once `clearable` is set — the\n * `null` of a clear cannot reach a handler that was never told about it.\n */\nexport interface CountrySelectProps<Clearable extends boolean = false>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\" | \"defaultValue\"> {\n /** The chosen country as an ISO 3166-1 alpha-2 code (\"CH\"), in either case;\n * `null`, `undefined` or `\"\"` when none is. A code outside the list still shows\n * its name — the list restricts what can be PICKED, not what can be shown. */\n value: string | null | undefined;\n /** A country was picked: its alpha-2 code, always upper-case. With `clearable`,\n * also `null`: the \"×\" (or Delete on the trigger) emptied the field. */\n onChange: (code: Clearable extends true ? string | null : string) => void;\n /**\n * Offer a clear \"×\" in place of the chevron while a country is chosen; it hands\n * `onChange` `null` (the kit's later list: an optional country — a contact's\n * nationality, a bank filter's \"any country\" — could be set but never unset again).\n *\n * The combobox family's clear, as {@link EntityCombobox} draws it: a pointer\n * shortcut inside the trigger, out of the tab order so it is not a second stop\n * between this field and the next, named by `clearLabel` (default: the\n * `combobox.clear` label every picker in the family shares). The keyboard way is\n * Delete or Backspace on the closed trigger. Not offered while `disabled` or locked\n * (`commit` / `disabledReason`): a clear is a change like any other.\n */\n clearable?: Clearable;\n /** The clear \"×\"'s accessible name. Wins over `combobox.clear` from the\n * {@link UiKitProvider}, as {@link EntityCombobox}'s `clearLabel` does. */\n clearLabel?: string;\n /**\n * The TRIGGER — the focusable `<button>` a reader meets — as a React 19 ref prop,\n * the way {@link MoneyField} takes its input's (kastlan: react-hook-form's\n * focus-on-error calls `focus()` on whatever `field.ref` was handed, and without a\n * ref the first field in error on an address form was never focused). See\n * `RhfCountrySelect`, which passes it.\n */\n ref?: Ref<HTMLButtonElement>;\n /**\n * Offer only these codes (any case; duplicates and malformed entries dropped).\n * Default: every ISO 3166-1 country, {@link COUNTRY_CODES}. Sorted by name either\n * way — the order given is not kept, because the reader looks a country up by its\n * name in their own language, and any other order is one they cannot predict.\n *\n * keksdose's bank picker offers the fifteen countries its banks are in\n * (DE AT CH FR IT ES NL BE PT PL SE DK FI GB IE). A code that is not in ISO's list\n * is allowed here on purpose: `XK` (Kosovo) is the app's decision, not the kit's.\n */\n countries?: readonly string[];\n /**\n * A short group shown FIRST, in the order given, above the alphabetical rest —\n * kastlan's CH, LI, DE, AT, FR, IT, the six countries most of its customers live\n * in, out of a list of 249. Each code appears once: a preferred country is not\n * repeated in the rest. The rest gets a heading (`labels.others`) so the boundary\n * is visible. Search keeps the split: matching preferred countries stay on top.\n * Codes not in `countries` are ignored — `countries` decides what can be picked.\n */\n preferred?: readonly string[];\n /**\n * Draw each country's flag as a flag-icons span (`fi fi-ch`), in the rows and on\n * the trigger. Default `false`, because the kit ships no flag stylesheet — the same\n * convention as `LanguageMenu`'s `country` and `CurrencySelect`: the host imports\n * `flag-icons/css/flag-icons.min.css`, and without it a flag is an empty box.\n */\n flags?: boolean;\n /** The floating label, as on every field. A string also names the trigger\n * (\"Country: Switzerland\"). */\n label?: ReactNode;\n /** As {@link Select}'s `hint`: plain TEXT is a caption under the field, attached\n * through `aria-describedby`; a {@link FieldHint} rides the label line (or the\n * field's end, when there is no label). */\n hint?: ReactNode;\n /** As {@link Input}'s `error`: rendered under the field, on the trigger's\n * `aria-describedby`, and implies `invalid`. */\n error?: ReactNode;\n /** Required and unanswered — {@link FIELD_INVALID}, as on every field. */\n invalid?: boolean;\n /** The empty trigger's text. Default: nothing when the field has a `label` or an\n * `aria-labelledby` (the label already says what goes here), else `labels.country`. */\n placeholder?: string;\n /** As on the other pickers: no focus, no list, the settled look. */\n disabled?: boolean;\n /**\n * Why the country cannot be changed — {@link Button}'s `disabledReason`, for a field\n * that saves itself. The trigger stays focusable and `aria-disabled`, the list does\n * not open and `onChange` never fires; the reason is in the kit {@link Tooltip} and\n * on the trigger's `aria-describedby`. Wins over `disabled`.\n */\n disabledReason?: ReactNode;\n /**\n * This select SAVES on change (a settings row with no Save button). Under a locked\n * {@link WriteLockProvider} it is locked the `disabledReason` way, with the lock's\n * reason. A country field inside a form that has its own Save stays editable under\n * the lock — leave this off there, and put `commit` on the Save.\n */\n commit?: CommitScope;\n /** The language the names are in. Default: the `<UiKitProvider locale>`, else\n * English (see {@link countryName}). */\n locale?: string;\n /** Per-instance overrides of {@link CountrySelectLabels}, over the provider's\n * `countrySelect` namespace, over English. */\n labels?: Partial<CountrySelectLabels>;\n /**\n * Name the trigger by an element of the caller's — a form's own label above the\n * field, which is how `RhfCountrySelect` names it. The trigger is then named by\n * that element AND the chosen country (two references, as {@link DatePicker}'s\n * trigger is named, so \"Country Switzerland\" needs no punctuation to translate),\n * instead of the composed \"label: country\". An `aria-label` still wins. Before\n * 0.23 this landed on the wrapper `<div>`, which has no role to be named.\n */\n \"aria-labelledby\"?: string;\n}\n\n/** Fold a name for search: no case, no accents — \"osterreich\" finds Österreich, \"cote\"\n * finds Côte d'Ivoire. A keyboard without the letter must still reach the country. */\nfunction fold(s: string): string {\n return s.normalize(\"NFD\").replace(/\\p{M}/gu, \"\").toLowerCase();\n}\n\ninterface Entry {\n code: string;\n name: string;\n folded: string;\n}\n\n/** How well `e` answers `q` (already folded): the code itself (a two-letter query\n * \"ch\" means Switzerland before it means Chad), then the start of the name, then\n * anywhere in it. `-1` for no match. */\nfunction rank(e: Entry, q: string): number {\n if (e.code.toLowerCase() === q) return 0;\n if (e.folded.startsWith(q)) return 1;\n return e.folded.includes(q) ? 2 : -1;\n}\n\n/** Best rank first; a stable sort, so equal ranks keep the collated (or preferred)\n * order they came in. */\nfunction search(entries: Entry[], q: string): Entry[] {\n return entries\n .map((e) => ({ e, r: rank(e, q) }))\n .filter((x) => x.r >= 0)\n .sort((a, b) => a.r - b.r)\n .map((x) => x.e);\n}\n\nfunction toOption(e: Entry, flags: boolean, group?: string): ComboOption<string> {\n return {\n value: e.code,\n label: e.name,\n icon: flags ? <CurrencyFlag country={e.code.toLowerCase()} /> : undefined,\n group,\n };\n}\n\nfunction collator(locale: string): Intl.Collator {\n try {\n return new Intl.Collator(locale);\n } catch {\n return new Intl.Collator();\n }\n}\n\n/**\n * A country picker: the value is the ISO 3166-1 alpha-2 code (\"CH\"), the names are the\n * runtime's own (`Intl.DisplayNames`) in the provider's locale, sorted by that\n * locale's collation. Requested by kastlan (customer and handover addresses, with its\n * six neighbours on top) and keksdose (the bank picker's fifteen countries) — both\n * apps carried a hand-written list of names in two languages.\n *\n * ## Built on the kit's searchable combobox\n *\n * 249 countries is not a menu, it is a lookup, and the list has to work on a phone. So\n * this is the entity pickers' machinery — `useComboboxCore` and `ComboboxPanel`, which\n * {@link EntityCombobox} is also made of — not a native `<select>`: the anchored panel\n * with a search box on a pointer device, the full-screen sheet with its own search box\n * on a phone (live #200), the same keyboard (APG listbox), the same announcements, the\n * same group headings. Only the trigger is this component's own, because the trigger\n * is where the write lock lives: `EntityCombobox`'s is a native `disabled` button,\n * and a locked field has to stay focusable to say why.\n *\n * The search is this component's own too: it folds accents and case (\"osterreich\"\n * finds Österreich), matches the code (\"ch\" ranks Switzerland first), and ranks\n * name-starts above name-contains. The panel is handed those rows in place of the\n * core's plain substring filter.\n *\n * Field anatomy as on every field: floating `label`, `hint`, `error`, `invalid`; the\n * trigger is named \"label: value\" as the other trigger pickers are.\n *\n * Since 0.23 it takes a `ref` to the trigger (react-hook-form's focus-on-error, kastlan)\n * and `clearable`, which hands `onChange` `null`.\n */\nexport function CountrySelect<Clearable extends boolean = false>({\n value,\n onChange,\n countries,\n preferred,\n flags = false,\n label,\n hint,\n error,\n invalid,\n placeholder,\n disabled,\n disabledReason: ownReason,\n commit,\n clearable,\n clearLabel,\n locale: localeProp,\n labels: labelsProp,\n className,\n id,\n ref,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-required\": ariaRequired,\n ...rest\n}: CountrySelectProps<Clearable>) {\n const text = useKitLabels(\"countrySelect\", DEFAULT_COUNTRY_SELECT_LABELS, labelsProp);\n const common = useKitLabels(\"common\", DEFAULT_COMMON_LABELS);\n // The clear's name is the family's (`combobox.clear`), as on EntityCombobox; a prop\n // left `undefined` falls through to the provider rather than masking it.\n const comboText = useKitLabels(\"combobox\", DEFAULT_COMBOBOX_LABELS, { clear: clearLabel });\n // English without a locale — see `countryName`.\n const locale = useKitLocale(localeProp) ?? \"en\";\n\n // ── The list ──────────────────────────────────────────────────────────────\n // Keyed on the arrays' CONTENTS: `countries={[\"DE\", \"AT\"]}` written inline is a new\n // array every render, and resorting 249 names on every keystroke elsewhere in the\n // form is work for nothing.\n const countriesKey = countries?.join(\",\");\n const preferredKey = preferred?.join(\",\");\n const { top, rest: others } = useMemo(() => {\n const seen = new Set<string>();\n const pool: string[] = [];\n for (const raw of countriesKey !== undefined ? countriesKey.split(\",\") : COUNTRY_CODES) {\n const code = normalizeCountryCode(raw);\n if (code && !seen.has(code)) {\n seen.add(code);\n pool.push(code);\n }\n }\n const entry = (code: string): Entry => {\n const name = countryName(code, locale);\n return { code, name, folded: fold(name) };\n };\n const firsts: Entry[] = [];\n const picked = new Set<string>();\n for (const raw of preferredKey ? preferredKey.split(\",\") : []) {\n const code = normalizeCountryCode(raw);\n if (code && seen.has(code) && !picked.has(code)) {\n picked.add(code);\n firsts.push(entry(code));\n }\n }\n const compare = collator(locale).compare;\n const sorted = pool\n .filter((c) => !picked.has(c))\n .map(entry)\n .sort((a, b) => compare(a.name, b.name));\n return { top: firsts, rest: sorted };\n }, [countriesKey, preferredKey, locale]);\n\n // `filter: false` — the panel is handed the rows `search` ranks below instead of\n // the core's substring filter; the core still owns open, query, the highlighted row,\n // anchoring and dismissal.\n const allOptions = useMemo(\n () => [...top, ...others].map((e) => toOption(e, flags)),\n [top, others, flags],\n );\n const core = useComboboxCore<string>({ options: allOptions, filter: false });\n const { open, setOpen, query, triggerRef, closeToTrigger } = core;\n // The core anchors the panel to the trigger and hands focus back to it; the caller's\n // `ref` wants the same element. One callback feeds both.\n const setTrigger = useCallback(\n (el: HTMLButtonElement | null) => {\n triggerRef.current = el;\n assignRef(ref, el);\n },\n [ref, triggerRef],\n );\n\n const q = fold(query.trim());\n const results = useMemo(() => {\n const firsts = q ? search(top, q) : top;\n const below = q ? search(others, q) : others;\n // The heading only where it separates something: with no preferred country in\n // view it would head the whole list and divide nothing.\n const heading = firsts.length > 0 ? text.others : undefined;\n return [...firsts.map((e) => toOption(e, flags)), ...below.map((e) => toOption(e, flags, heading))];\n }, [top, others, q, text.others, flags]);\n\n // ── The lock ──────────────────────────────────────────────────────────────\n const reason = useCommitReason(commit, ownReason);\n const locked = hasMessage(reason);\n const inert = locked || Boolean(disabled);\n // A lock (or `disabled`) arriving while the list is up closes it — adjusted while\n // rendering, as the core adjusts its own query, so no frame shows a list that can\n // no longer be used.\n if (inert && open) setOpen(false);\n\n // ── The field ─────────────────────────────────────────────────────────────\n const generated = useId();\n const triggerId = id ?? generated;\n const listboxId = `${generated}-listbox`;\n const hintId = useId();\n const reasonId = useId();\n // Text is a caption under the field; a FieldHint rides the label line. See `hint`.\n const textHint = (typeof hint === \"string\" && hint !== \"\") || typeof hint === \"number\";\n const field = useComboboxFieldError(\n error,\n invalid || ariaInvalid === true || ariaInvalid === \"true\",\n // The caller's, then the standing advice, then (inside) the error — the order every\n // field keeps — and the lock's reason last, while there is one.\n mergeDescribedBy(ariaDescribedBy, textHint && hintId),\n );\n\n const code = normalizeCountryCode(value);\n const selectedName = code ? countryName(code, locale) : undefined;\n // A field named by a label of the caller's (`aria-labelledby`) is a labelled field too:\n // the label already says what goes here.\n const emptyText = placeholder ?? (label === undefined && !ariaLabelledBy ? text.country : \"\");\n const fieldName = typeof label === \"string\" ? label : text.country;\n const valueId = `${generated}-value`;\n // Named by the caller's element (a form's label) — then the shown text is the second\n // reference, as the composed name below has the value second; but only when it IS a\n // value or the caller's placeholder, never the `country` fallback word.\n const labelledBy =\n ariaLabel === undefined && ariaLabelledBy\n ? mergeDescribedBy(ariaLabelledBy, (selectedName !== undefined || Boolean(placeholder)) && valueId)\n : undefined;\n const name =\n labelledBy !== undefined\n ? undefined\n : (ariaLabel ??\n (selectedName !== undefined\n ? common.fieldValue(fieldName, selectedName)\n : placeholder\n ? common.fieldValue(fieldName, placeholder)\n : fieldName));\n\n const showClear = Boolean(clearable && code && !inert);\n // `onChange` widened to take the clear's `null` — its type says so once `clearable`\n // is set, and the clear is only ever offered then.\n const emit = onChange as (code: string | null) => void;\n const clear = () => {\n if (!showClear) return;\n emit(null);\n };\n\n const choose = (o: ComboOption<string>) => {\n if (inert) return;\n emit(o.value);\n // Back to the trigger: the panel holding focus is about to unmount, and a keyboard\n // user who has answered this field should stand on it, ready to Tab on.\n closeToTrigger();\n };\n\n const trigger = (\n <button\n ref={setTrigger}\n id={triggerId}\n type=\"button\"\n // A closed choice that expands into the list below — the role every trigger\n // picker in the kit wears (see EntityCombobox), and the one that supports\n // `aria-invalid`.\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-expanded={open}\n aria-label={name}\n aria-labelledby={labelledBy}\n aria-invalid={field.isInvalid || undefined}\n aria-required={ariaRequired}\n aria-describedby={mergeDescribedBy(field.describedBy, locked && reasonId)}\n // The focusable kind of disabled while locked (Button's rule): native `disabled`\n // would take the field out of the tab order, and the reason with it.\n disabled={locked ? undefined : disabled}\n aria-disabled={locked || undefined}\n onClick={(e) => {\n if (inert) {\n e.preventDefault();\n return;\n }\n setOpen((o) => !o);\n }}\n // Down/Up opens the list from the closed trigger, per the APG; Enter and Space\n // already do through the button's own click.\n onKeyDown={(e) => {\n if (inert) return;\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n setOpen(true);\n } else if (showClear && !open && (e.key === \"Delete\" || e.key === \"Backspace\")) {\n // The keyboard's clear: the \"×\" is out of the tab order (see `clearable`).\n e.preventDefault();\n clear();\n }\n }}\n className={cn(\n FIELD_TRIGGER,\n // `peer` dims the floating label with a natively disabled trigger, as Select's.\n \"peer pe-9\",\n label !== undefined && FIELD_FLOATING_PAD,\n inert && \"cursor-not-allowed opacity-50\",\n field.isInvalid && FIELD_INVALID,\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n {flags && code && <CurrencyFlag country={code.toLowerCase()} />}\n {/* A long name (\"Saint Vincent and the Grenadines\") truncates rather than\n widening the field: the kit is checked at 390px. */}\n <span\n id={valueId}\n className={cn(\"truncate\", selectedName === undefined && \"text-[var(--text-placeholder)]\")}\n >\n {selectedName ?? emptyText}\n </span>\n </span>\n {showClear ? (\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events -- tabIndex -1 inside\n the trigger <button>, so it never holds focus and a key handler here could never\n fire; the keys go to the trigger, where Delete and Backspace clear. A pointer\n shortcut, as on EntityCombobox. */\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label={comboText.clear}\n onClick={(e) => {\n e.stopPropagation();\n clear();\n }}\n className=\"absolute end-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-[var(--text-placeholder)] hover:text-[var(--text-secondary)]\"\n >\n <X aria-hidden className=\"size-4\" />\n </span>\n ) : (\n <FieldChevron />\n )}\n </button>\n );\n\n const control = locked ? (\n // In a FRAGMENT, as Button does, so the Tooltip does not clone its bubble into the\n // description as well — the hidden copy is what `aria-describedby` points at.\n <Tooltip label={reason} className=\"flex w-full\">\n <>\n {trigger}\n <span id={reasonId} hidden>\n {reason}\n </span>\n </>\n </Tooltip>\n ) : (\n trigger\n );\n\n const labelHint = textHint ? undefined : hasMessage(hint) ? hint : undefined;\n const box =\n label !== undefined ? (\n <FloatingField htmlFor={triggerId} label={label} staticLabel hint={labelHint}>\n {control}\n </FloatingField>\n ) : labelHint !== undefined ? (\n // No label line to ride: the \"?\" goes at the field's end, outside the box, as on\n // an unlabelled Select.\n <div className=\"flex items-center gap-1.5\">\n <div className=\"relative min-w-0 flex-1\">{control}</div>\n <span className=\"flex shrink-0 items-center\">{labelHint}</span>\n </div>\n ) : (\n <div className=\"relative\">{control}</div>\n );\n\n return (\n // `rest` dresses the wrapper — a `data-tour` anchor, a test id. The name, the\n // description and the invalid state are on the trigger above.\n <div {...rest} className={className}>\n {box}\n {textHint && (\n <p id={hintId} className=\"mt-1 text-caption leading-tight text-[var(--text-muted)]\">\n {hint}\n </p>\n )}\n {field.errorEl}\n <ComboboxPanel\n // The core with the rows ranked above in place of its own filter's.\n core={{ ...core, results }}\n listboxId={listboxId}\n // On a phone the list is a full-screen sheet, which needs the field's own\n // name to say what it is asking for (live #200).\n sheetTitle={label ?? text.country}\n searchPlaceholder={text.search}\n isSelected={(v) => v === code}\n onChoose={choose}\n showCreate={false}\n onCreate={() => {}}\n createContent={null}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["code","name"]}
1
+ {"version":3,"sources":["../../src/components/country-select.tsx"],"sourcesContent":["import { useCallback, useId, useMemo } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode, Ref } from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\nimport { COUNTRY_CODES, countryName, normalizeCountryCode } from \"../lib/countries\";\nimport { rankMatch } from \"../lib/text-match\";\nimport {\n FieldChevron,\n FIELD_FLOATING_PAD,\n FIELD_INVALID,\n FIELD_TRIGGER,\n FloatingField,\n} from \"./field-base\";\nimport {\n assignRef,\n EndHintRow,\n LockedReason,\n mergeDescribedBy,\n useFieldMessages,\n useLockReason,\n type DisabledReasonDisplay,\n} from \"./field-parts\";\nimport { CurrencyFlag } from \"./currency-select\";\nimport { ComboboxPanel, useComboboxCore, type ComboOption } from \"./combobox-core\";\nimport type { CommitScope } from \"./write-lock\";\nimport {\n DEFAULT_COMBOBOX_LABELS,\n DEFAULT_COMMON_LABELS,\n useKitLabels,\n useKitLocale,\n type LabelOverride,\n} from \"../i18n/kit-labels\";\nimport { DEFAULT_COUNTRY_SELECT_LABELS } from \"./country-select-labels\";\n\n// ── Labels ────────────────────────────────────────────────────────────────────\n\n/** The words {@link CountrySelect} renders on its own behalf. The list's \"no results\",\n * \"loading\" and result-count announcements are the shared `combobox` namespace's,\n * as on every other searchable picker. */\nexport interface CountrySelectLabels {\n /** What the field is, when the caller gives no `label`: the first half of the\n * trigger's accessible name, the phone sheet's title, and the empty trigger's\n * text. */\n country: string;\n /** The search box in the open list. */\n search: string;\n /** The heading between the `preferred` countries and all the others. Shown only\n * when `preferred` puts something above it. */\n others: string;\n}\n\n// Defined in ./country-select-labels, which holds no component code (0.34, KS U8).\nexport { DEFAULT_COUNTRY_SELECT_LABELS };\n\n// ── Props ─────────────────────────────────────────────────────────────────────\n\n/**\n * `onChange` is the kit's — \"a country was picked\", carrying its code — rather than\n * the div's form event. `id` and the `aria-*` wiring below go to the TRIGGER, which is\n * the control a reader meets; everything else in `rest` dresses the wrapper.\n *\n * `Clearable` follows `clearable`, the way {@link EntityCombobox}'s `C` follows its\n * `clearValue`: it is inferred from the prop, so `onChange` is `(code: string) => void`\n * for the field as it always was (`onChange={setCountry}` over a `string` state still\n * type-checks), and `(code: string | null) => void` once `clearable` is set — the\n * `null` of a clear cannot reach a handler that was never told about it.\n */\nexport interface CountrySelectProps<Clearable extends boolean = false>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\" | \"defaultValue\"> {\n /** The chosen country as an ISO 3166-1 alpha-2 code (\"CH\"), in either case;\n * `null`, `undefined` or `\"\"` when none is. A code outside the list still shows\n * its name — the list restricts what can be PICKED, not what can be shown. */\n value: string | null | undefined;\n /** A country was picked: its alpha-2 code, always upper-case. With `clearable`,\n * also `null`: the \"×\" (or Delete on the trigger) emptied the field. */\n onChange: (code: Clearable extends true ? string | null : string) => void;\n /**\n * Offer a clear \"×\" in place of the chevron while a country is chosen; it hands\n * `onChange` `null` (the kit's later list: an optional country — a contact's\n * nationality, a bank filter's \"any country\" — could be set but never unset again).\n *\n * The combobox family's clear, as {@link EntityCombobox} draws it: a pointer\n * shortcut inside the trigger, out of the tab order so it is not a second stop\n * between this field and the next, named by `clearLabel` (default: the\n * `combobox.clear` label every picker in the family shares). The keyboard way is\n * Delete or Backspace on the closed trigger. Not offered while `disabled` or locked\n * (`commit` / `disabledReason`): a clear is a change like any other.\n */\n clearable?: Clearable;\n /** The clear \"×\"'s accessible name. Wins over `combobox.clear` from the\n * {@link UiKitProvider}, as {@link EntityCombobox}'s `clearLabel` does. */\n clearLabel?: string;\n /**\n * The TRIGGER — the focusable `<button>` a reader meets — as a React 19 ref prop,\n * the way {@link MoneyField} takes its input's (kastlan: react-hook-form's\n * focus-on-error calls `focus()` on whatever `field.ref` was handed, and without a\n * ref the first field in error on an address form was never focused). See\n * `RhfCountrySelect`, which passes it.\n */\n ref?: Ref<HTMLButtonElement>;\n /**\n * Offer only these codes (any case; duplicates and malformed entries dropped).\n * Default: every ISO 3166-1 country, {@link COUNTRY_CODES}. Sorted by name either\n * way — the order given is not kept, because the reader looks a country up by its\n * name in their own language, and any other order is one they cannot predict.\n *\n * keksdose's bank picker offers the fifteen countries its banks are in\n * (DE AT CH FR IT ES NL BE PT PL SE DK FI GB IE). A code that is not in ISO's list\n * is allowed here on purpose: `XK` (Kosovo) is the app's decision, not the kit's.\n */\n countries?: readonly string[];\n /**\n * A short group shown FIRST, in the order given, above the alphabetical rest —\n * kastlan's CH, LI, DE, AT, FR, IT, the six countries most of its customers live\n * in, out of a list of 249. Each code appears once: a preferred country is not\n * repeated in the rest. The rest gets a heading (`labels.others`) so the boundary\n * is visible. Search keeps the split: matching preferred countries stay on top.\n * Codes not in `countries` are ignored — `countries` decides what can be picked.\n */\n preferred?: readonly string[];\n /**\n * Draw each country's flag as a flag-icons span (`fi fi-ch`), in the rows and on\n * the trigger. Default `false`, because the kit ships no flag stylesheet — the same\n * convention as `LanguageMenu`'s `country` and `CurrencySelect`: the host imports\n * `flag-icons/css/flag-icons.min.css`, and without it a flag is an empty box.\n */\n flags?: boolean;\n /** The floating label, as on every field. A string also names the trigger\n * (\"Country: Switzerland\"). */\n label?: ReactNode;\n /** As {@link Select}'s `hint`: plain TEXT is a caption under the field, attached\n * through `aria-describedby`; a {@link FieldHint} rides the label line (or the\n * field's end, when there is no label). */\n hint?: ReactNode;\n /** As {@link Input}'s `error`: rendered under the field, on the trigger's\n * `aria-describedby`, and implies `invalid`. */\n error?: ReactNode;\n /** Required and unanswered — {@link FIELD_INVALID}, as on every field. */\n invalid?: boolean;\n /** The empty trigger's text. Default: nothing when the field has a `label` or an\n * `aria-labelledby` (the label already says what goes here), else `labels.country`. */\n placeholder?: string;\n /** As on the other pickers: no focus, no list, the settled look. */\n disabled?: boolean;\n /**\n * Why the country cannot be changed — {@link Button}'s `disabledReason`, for a field\n * that saves itself. The trigger stays focusable and `aria-disabled`, the list does\n * not open and `onChange` never fires; the reason is a line under the field at Large\n * and on a touch screen, else in the kit {@link Tooltip} (`disabledReasonDisplay`), and\n * on the trigger's `aria-describedby`. Wins over `disabled`.\n */\n disabledReason?: ReactNode;\n /** Where the reason shows — {@link Button}'s `disabledReasonDisplay`: a line under the\n * field at Large and on a touch screen by default, the tooltip otherwise (DUP-3). */\n disabledReasonDisplay?: DisabledReasonDisplay;\n /**\n * This select SAVES on change (a settings row with no Save button). Under a locked\n * {@link WriteLockProvider} it is locked the `disabledReason` way, with the lock's\n * reason. A country field inside a form that has its own Save stays editable under\n * the lock — leave this off there, and put `commit` on the Save.\n */\n commit?: CommitScope;\n /** The language the names are in. Default: the `<UiKitProvider locale>`, else\n * English (see {@link countryName}). */\n locale?: string;\n /** Per-instance overrides of {@link CountrySelectLabels}, over the provider's\n * `countrySelect` namespace, over English. */\n labels?: LabelOverride<CountrySelectLabels>;\n /**\n * Name the trigger by an element of the caller's — a form's own label above the\n * field, which is how `RhfCountrySelect` names it. The trigger is then named by\n * that element AND the chosen country (two references, as {@link DatePicker}'s\n * trigger is named, so \"Country Switzerland\" needs no punctuation to translate),\n * instead of the composed \"label: country\". An `aria-label` still wins. Before\n * 0.23 this landed on the wrapper `<div>`, which has no role to be named.\n */\n \"aria-labelledby\"?: string;\n}\n\ninterface Entry {\n code: string;\n name: string;\n}\n\n/** Best rank first; a stable sort, so equal ranks keep the collated (or preferred)\n * order they came in. The rank is the kit's one (`rankMatch`, DUP-5 — written here\n * first): the code itself (a two-letter query \"ch\" means Switzerland before it means\n * Chad), then the start of the name, then anywhere in it, with accents and case folded\n * — \"osterreich\" finds Österreich, \"cote\" Côte d'Ivoire. */\nfunction search(entries: Entry[], q: string, locale: string): Entry[] {\n return entries\n .map((e) => ({ e, r: rankMatch(e.name, q, { code: e.code, locale }) }))\n .filter((x) => x.r >= 0)\n .sort((a, b) => a.r - b.r)\n .map((x) => x.e);\n}\n\nfunction toOption(e: Entry, flags: boolean, group?: string): ComboOption<string> {\n return {\n value: e.code,\n label: e.name,\n icon: flags ? <CurrencyFlag country={e.code.toLowerCase()} /> : undefined,\n group,\n };\n}\n\nfunction collator(locale: string): Intl.Collator {\n try {\n return new Intl.Collator(locale);\n } catch {\n return new Intl.Collator();\n }\n}\n\n/**\n * A country picker: the value is the ISO 3166-1 alpha-2 code (\"CH\"), the names are the\n * runtime's own (`Intl.DisplayNames`) in the provider's locale, sorted by that\n * locale's collation. Requested by kastlan (customer and handover addresses, with its\n * six neighbours on top) and keksdose (the bank picker's fifteen countries) — both\n * apps carried a hand-written list of names in two languages.\n *\n * ## Built on the kit's searchable combobox\n *\n * 249 countries is not a menu, it is a lookup, and the list has to work on a phone. So\n * this is the entity pickers' machinery — `useComboboxCore` and `ComboboxPanel`, which\n * {@link EntityCombobox} is also made of — not a native `<select>`: the anchored panel\n * with a search box on a pointer device, the full-screen sheet with its own search box\n * on a phone (live #200), the same keyboard (APG listbox), the same announcements, the\n * same group headings. Only the trigger is this component's own, because the trigger\n * is where the write lock lives: `EntityCombobox`'s is a native `disabled` button,\n * and a locked field has to stay focusable to say why.\n *\n * The ranking is this component's own too: it folds accents and case (\"osterreich\"\n * finds Österreich), matches the code (\"ch\" ranks Switzerland first), and ranks\n * name-starts above name-contains — the kit's `rankMatch`, which began here. The panel\n * is handed those rows in place of the core's filter, which does not rank.\n *\n * Field anatomy as on every field: floating `label`, `hint`, `error`, `invalid`; the\n * trigger is named \"label: value\" as the other trigger pickers are.\n *\n * Since 0.23 it takes a `ref` to the trigger (react-hook-form's focus-on-error, kastlan)\n * and `clearable`, which hands `onChange` `null`.\n */\nexport function CountrySelect<Clearable extends boolean = false>({\n value,\n onChange,\n countries,\n preferred,\n flags = false,\n label,\n hint,\n error,\n invalid,\n placeholder,\n disabled,\n disabledReason: ownReason,\n disabledReasonDisplay,\n commit,\n clearable,\n clearLabel,\n locale: localeProp,\n labels: labelsProp,\n className,\n id,\n ref,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-required\": ariaRequired,\n ...rest\n}: CountrySelectProps<Clearable>) {\n const text = useKitLabels(\"countrySelect\", DEFAULT_COUNTRY_SELECT_LABELS, labelsProp);\n const common = useKitLabels(\"common\", DEFAULT_COMMON_LABELS);\n // The clear's name is the family's (`combobox.clear`), as on EntityCombobox; a prop\n // left `undefined` falls through to the provider rather than masking it.\n const comboText = useKitLabels(\"combobox\", DEFAULT_COMBOBOX_LABELS, { clear: clearLabel });\n // English without a locale — see `countryName`.\n const locale = useKitLocale(localeProp) ?? \"en\";\n\n // ── The list ──────────────────────────────────────────────────────────────\n // Keyed on the arrays' CONTENTS: `countries={[\"DE\", \"AT\"]}` written inline is a new\n // array every render, and resorting 249 names on every keystroke elsewhere in the\n // form is work for nothing.\n const countriesKey = countries?.join(\",\");\n const preferredKey = preferred?.join(\",\");\n const { top, rest: others } = useMemo(() => {\n const seen = new Set<string>();\n const pool: string[] = [];\n for (const raw of countriesKey !== undefined ? countriesKey.split(\",\") : COUNTRY_CODES) {\n const code = normalizeCountryCode(raw);\n if (code && !seen.has(code)) {\n seen.add(code);\n pool.push(code);\n }\n }\n const entry = (code: string): Entry => ({ code, name: countryName(code, locale) });\n const firsts: Entry[] = [];\n const picked = new Set<string>();\n for (const raw of preferredKey ? preferredKey.split(\",\") : []) {\n const code = normalizeCountryCode(raw);\n if (code && seen.has(code) && !picked.has(code)) {\n picked.add(code);\n firsts.push(entry(code));\n }\n }\n const compare = collator(locale).compare;\n const sorted = pool\n .filter((c) => !picked.has(c))\n .map(entry)\n .sort((a, b) => compare(a.name, b.name));\n return { top: firsts, rest: sorted };\n }, [countriesKey, preferredKey, locale]);\n\n // `filter: false` — the panel is handed the rows `search` ranks below instead of\n // the core's substring filter; the core still owns open, query, the highlighted row,\n // anchoring and dismissal.\n const allOptions = useMemo(\n () => [...top, ...others].map((e) => toOption(e, flags)),\n [top, others, flags],\n );\n const core = useComboboxCore<string>({ options: allOptions, filter: false });\n const { open, setOpen, query, triggerRef, closeToTrigger } = core;\n // The core anchors the panel to the trigger and hands focus back to it; the caller's\n // `ref` wants the same element. One callback feeds both.\n const setTrigger = useCallback(\n (el: HTMLButtonElement | null) => {\n triggerRef.current = el;\n assignRef(ref, el);\n },\n [ref, triggerRef],\n );\n\n const q = query.trim();\n const results = useMemo(() => {\n const firsts = q ? search(top, q, locale) : top;\n const below = q ? search(others, q, locale) : others;\n // The heading only where it separates something: with no preferred country in\n // view it would head the whole list and divide nothing.\n const heading = firsts.length > 0 ? text.others : undefined;\n return [...firsts.map((e) => toOption(e, flags)), ...below.map((e) => toOption(e, flags, heading))];\n }, [top, others, q, text.others, flags, locale]);\n\n // ── The lock ──────────────────────────────────────────────────────────────\n const lock = useLockReason(commit, ownReason);\n const locked = lock.locked;\n const inert = locked || Boolean(disabled);\n // A lock (or `disabled`) arriving while the list is up closes it — adjusted while\n // rendering, as the core adjusts its own query, so no frame shows a list that can\n // no longer be used.\n if (inert && open) setOpen(false);\n\n // ── The field ─────────────────────────────────────────────────────────────\n const generated = useId();\n const triggerId = id ?? generated;\n const listboxId = `${generated}-listbox`;\n // Text is a caption under the field; a FieldHint rides the label line, and is that\n // caption at Large and on touch (§4). The caller's ids, the caption, a lock's reason,\n // the error — Select's order. Through useFieldMessages since 0.34 (DUP-2, DUP-8).\n const field = useFieldMessages({\n hint,\n error,\n invalid,\n describedBy: ariaDescribedBy,\n ariaInvalid,\n reasonId: locked && lock.reasonId,\n });\n\n const code = normalizeCountryCode(value);\n const selectedName = code ? countryName(code, locale) : undefined;\n // A field named by a label of the caller's (`aria-labelledby`) is a labelled field too:\n // the label already says what goes here.\n const emptyText = placeholder ?? (label === undefined && !ariaLabelledBy ? text.country : \"\");\n const fieldName = typeof label === \"string\" ? label : text.country;\n const valueId = `${generated}-value`;\n // Named by the caller's element (a form's label) — then the shown text is the second\n // reference, as the composed name below has the value second; but only when it IS a\n // value or the caller's placeholder, never the `country` fallback word.\n const labelledBy =\n ariaLabel === undefined && ariaLabelledBy\n ? mergeDescribedBy(ariaLabelledBy, (selectedName !== undefined || Boolean(placeholder)) && valueId)\n : undefined;\n const name =\n labelledBy !== undefined\n ? undefined\n : (ariaLabel ??\n (selectedName !== undefined\n ? common.fieldValue(fieldName, selectedName)\n : placeholder\n ? common.fieldValue(fieldName, placeholder)\n : fieldName));\n\n const showClear = Boolean(clearable && code && !inert);\n // `onChange` widened to take the clear's `null` — its type says so once `clearable`\n // is set, and the clear is only ever offered then.\n const emit = onChange as (code: string | null) => void;\n const clear = () => {\n if (!showClear) return;\n emit(null);\n };\n\n const choose = (o: ComboOption<string>) => {\n if (inert) return;\n emit(o.value);\n // Back to the trigger: the panel holding focus is about to unmount, and a keyboard\n // user who has answered this field should stand on it, ready to Tab on.\n closeToTrigger();\n };\n\n const trigger = (\n <button\n ref={setTrigger}\n id={triggerId}\n type=\"button\"\n // A closed choice that expands into the list below — the role every trigger\n // picker in the kit wears (see EntityCombobox), and the one that supports\n // `aria-invalid`.\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-expanded={open}\n aria-label={name}\n aria-labelledby={labelledBy}\n aria-invalid={field.isInvalid || undefined}\n aria-required={ariaRequired}\n aria-describedby={field.describedBy}\n // The focusable kind of disabled while locked (Button's rule): native `disabled`\n // would take the field out of the tab order, and the reason with it.\n disabled={locked ? undefined : disabled}\n aria-disabled={locked || undefined}\n onClick={(e) => {\n if (inert) {\n e.preventDefault();\n return;\n }\n setOpen((o) => !o);\n }}\n // Down/Up opens the list from the closed trigger, per the APG; Enter and Space\n // already do through the button's own click.\n onKeyDown={(e) => {\n if (inert) return;\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n setOpen(true);\n } else if (showClear && !open && (e.key === \"Delete\" || e.key === \"Backspace\")) {\n // The keyboard's clear: the \"×\" is out of the tab order (see `clearable`).\n e.preventDefault();\n clear();\n }\n }}\n className={cn(\n FIELD_TRIGGER,\n // `peer` dims the floating label with a natively disabled trigger, as Select's.\n \"peer pe-9\",\n label !== undefined && FIELD_FLOATING_PAD,\n inert && \"cursor-not-allowed opacity-50\",\n field.isInvalid && FIELD_INVALID,\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n {flags && code && <CurrencyFlag country={code.toLowerCase()} />}\n {/* A long name (\"Saint Vincent and the Grenadines\") truncates rather than\n widening the field: the kit is checked at 390px. From Large up it wraps and\n the trigger grows instead (text size §10.17, round 0.34 T1). */}\n <span\n id={valueId}\n className={cn(\"truncate-until-large\", selectedName === undefined && \"text-placeholder\")}\n >\n {selectedName ?? emptyText}\n </span>\n </span>\n {showClear ? (\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events -- tabIndex -1 inside\n the trigger <button>, so it never holds focus and a key handler here could never\n fire; the keys go to the trigger, where Delete and Backspace clear. A pointer\n shortcut, as on EntityCombobox. */\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label={comboText.clear}\n onClick={(e) => {\n e.stopPropagation();\n clear();\n }}\n className=\"absolute end-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-placeholder hover:text-secondary\"\n >\n <X aria-hidden className=\"size-4\" />\n </span>\n ) : (\n <FieldChevron />\n )}\n </button>\n );\n\n const control = locked ? (\n // Button's frame: the line under the trigger, or the Tooltip with a hidden copy for\n // `aria-describedby`. `items-stretch`: in the line's column the trigger keeps the\n // field's full width.\n <LockedReason lock={lock} display={disabledReasonDisplay} className=\"flex w-full items-stretch\">\n {trigger}\n </LockedReason>\n ) : (\n trigger\n );\n\n const box =\n label !== undefined ? (\n <FloatingField htmlFor={triggerId} label={label} staticLabel hint={field.labelHint}>\n {control}\n </FloatingField>\n ) : (\n // No label line to ride: a \"?\" goes at the field's end, outside the box, as on an\n // unlabelled Select.\n <EndHintRow hint={field.labelHint}>\n <div className=\"relative\">{control}</div>\n </EndHintRow>\n );\n\n return (\n // `rest` dresses the wrapper — a `data-tour` anchor, a test id. The name, the\n // description and the invalid state are on the trigger above.\n <div {...rest} className={className}>\n {box}\n {field.below}\n <ComboboxPanel\n // The core with the rows ranked above in place of its own filter's.\n core={{ ...core, results }}\n listboxId={listboxId}\n // On a phone the list is a full-screen sheet, which needs the field's own\n // name to say what it is asking for (live #200).\n sheetTitle={label ?? text.country}\n searchPlaceholder={text.search}\n isSelected={(v) => v === code}\n onChoose={choose}\n showCreate={false}\n onCreate={() => {}}\n createContent={null}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["code"]}
@@ -0,0 +1,63 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from "react";
2
+ import { type ComboboxCore } from "./combobox-core.js";
3
+ export interface CurrencyOption {
4
+ code: string;
5
+ name: string;
6
+ symbol: string;
7
+ /** ISO 3166-1 alpha-2 country code (lowercase) used by flag-icons. */
8
+ country: string;
9
+ }
10
+ export declare const CURRENCIES: CurrencyOption[];
11
+ export interface CurrencyFlagProps extends ComponentPropsWithRef<"span"> {
12
+ /** ISO 3166-1 alpha-2, lowercase — the class flag-icons keys its sprite by. */
13
+ country: string;
14
+ }
15
+ export declare function CurrencyFlag({ country, className, ...rest }: CurrencyFlagProps): import("react").JSX.Element;
16
+ export declare function getCurrency(code: string | null | undefined): CurrencyOption | undefined;
17
+ /** The name to SHOW for a currency: the caller's translation if they have one for
18
+ * that code; else, when a `locale` is known, the name `Intl.DisplayNames` has for
19
+ * it in that locale; else the English name {@link CURRENCIES} carries. Shared with
20
+ * AmountInput, which renders the same list from the same data.
21
+ *
22
+ * `Intl` only when a locale was actually GIVEN (by prop or `<UiKitProvider>`): an
23
+ * app that never set one keeps the shipped English names it has always shown,
24
+ * rather than whatever language the test runner or the browser happens to be in. */
25
+ export declare function currencyName(c: CurrencyOption, names?: Record<string, string>, locale?: string): string;
26
+ export interface CurrencyOptionListProps {
27
+ /** The host's `useComboboxCore`: its trigger, its open state, its query. */
28
+ core: ComboboxCore<string>;
29
+ /** What the host's trigger names in `aria-controls`. */
30
+ listboxId: string;
31
+ /** The chosen code, if any — selected and checked in the list. */
32
+ value: string | null | undefined;
33
+ /** A currency was picked. The host closes the list. */
34
+ onChoose: (code: string) => void;
35
+ /** Only these ISO codes, in this order; codes the kit has no definition for are
36
+ * dropped. Default every one of {@link CURRENCIES}. */
37
+ codes?: readonly string[];
38
+ /** Translated names by code — see {@link currencyName}. */
39
+ currencyNames?: Record<string, string>;
40
+ locale?: string;
41
+ searchPlaceholder: string;
42
+ /** The phone sheet's title — the field's name. */
43
+ sheetTitle: ReactNode;
44
+ }
45
+ /**
46
+ * The currency list — its filter and its rows — that CurrencySelect and AmountInput's
47
+ * currency chip both render, on the picker family's `ComboboxPanel` (round 0.34 Wave 2,
48
+ * DUP-4 + BUG-12).
49
+ *
50
+ * The chip's list was a hand copy of CurrencySelect's, and it had drifted: the name kept a
51
+ * plain `truncate` where T1 made CurrencySelect's wrap from Large up, it took no `options`
52
+ * subset, it had no check mark and no listbox id, and it was a fixed 16rem where #308 had
53
+ * given CurrencySelect a panel that grows to the full names. And both were lists of plain
54
+ * buttons under a trigger that promised a listbox. On the shared panel they are a listbox
55
+ * of options, the chosen one selected, with the arrow keys, the live result count, the
56
+ * phone sheet (live #200) and portal anchoring (dev#548: an `overflow` ancestor clipped
57
+ * the absolute panel's first third away).
58
+ *
59
+ * The panel hangs from the trigger's END edge and grows toward the start, as wide as the
60
+ * names need up to 20rem and the glass (feedback #308: a field with content after it is
61
+ * not pushed past the page).
62
+ */
63
+ export declare function CurrencyOptionList({ core, listboxId, value, onChoose, codes, currencyNames, locale, searchPlaceholder, sheetTitle, }: CurrencyOptionListProps): import("react").JSX.Element;