@eifi1/ui-kit 0.51.7 → 0.52.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 (746) hide show
  1. package/README.md +141 -23
  2. package/dist/account/account-parts.d.ts +10 -8
  3. package/dist/account/account-parts.js +1 -18
  4. package/dist/account/account-parts.js.map +1 -1
  5. package/dist/account/data-export-setting-labels.js +1 -1
  6. package/dist/account/data-export-setting-labels.js.map +1 -1
  7. package/dist/account/delete-account-setting-labels.js +1 -1
  8. package/dist/account/delete-account-setting-labels.js.map +1 -1
  9. package/dist/account/email-change-setting-labels.js +1 -1
  10. package/dist/account/email-change-setting-labels.js.map +1 -1
  11. package/dist/account/passkeys-setting.d.ts +9 -2
  12. package/dist/account/passkeys-setting.js +41 -29
  13. package/dist/account/passkeys-setting.js.map +1 -1
  14. package/dist/account/sessions-setting.d.ts +3 -2
  15. package/dist/account/sessions-setting.js +10 -8
  16. package/dist/account/sessions-setting.js.map +1 -1
  17. package/dist/admin/admin-action-confirm.js +1 -3
  18. package/dist/admin/admin-action-confirm.js.map +1 -1
  19. package/dist/admin/admin-parts.d.ts +6 -3
  20. package/dist/admin/admin-parts.js +6 -21
  21. package/dist/admin/admin-parts.js.map +1 -1
  22. package/dist/admin/mail-test-card-labels.js +1 -1
  23. package/dist/admin/mail-test-card-labels.js.map +1 -1
  24. package/dist/admin/plan-change-labels.d.ts +2 -2
  25. package/dist/admin/plan-change-labels.js +1 -17
  26. package/dist/admin/plan-change-labels.js.map +1 -1
  27. package/dist/admin/plan-change.d.ts +3 -42
  28. package/dist/admin/plan-change.js +1 -1
  29. package/dist/admin/plan-change.js.map +1 -1
  30. package/dist/admin/reviewer-scope-editor.js +3 -3
  31. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  32. package/dist/auth/auth-errors-labels.d.ts +11 -0
  33. package/dist/auth/auth-errors-labels.js +13 -0
  34. package/dist/auth/auth-errors-labels.js.map +1 -0
  35. package/dist/auth/auth-errors.d.ts +7 -23
  36. package/dist/auth/auth-errors.js +2 -15
  37. package/dist/auth/auth-errors.js.map +1 -1
  38. package/dist/auth/complete-name-dialog.js +2 -1
  39. package/dist/auth/complete-name-dialog.js.map +1 -1
  40. package/dist/auth/forgot-password-form-labels.js +1 -1
  41. package/dist/auth/forgot-password-form-labels.js.map +1 -1
  42. package/dist/auth/forgot-password-form.js +7 -2
  43. package/dist/auth/forgot-password-form.js.map +1 -1
  44. package/dist/auth/register-form-labels.js +1 -1
  45. package/dist/auth/register-form-labels.js.map +1 -1
  46. package/dist/auth/reset-password-form-labels.js +1 -1
  47. package/dist/auth/reset-password-form-labels.js.map +1 -1
  48. package/dist/auth/reset-password-form.js +5 -1
  49. package/dist/auth/reset-password-form.js.map +1 -1
  50. package/dist/auth/sign-in-form-labels.js +1 -1
  51. package/dist/auth/sign-in-form-labels.js.map +1 -1
  52. package/dist/auth/status-parts.d.ts +0 -3
  53. package/dist/auth/status-parts.js +0 -4
  54. package/dist/auth/status-parts.js.map +1 -1
  55. package/dist/auth/verify-email-labels.js +1 -1
  56. package/dist/auth/verify-email-labels.js.map +1 -1
  57. package/dist/auth/verify-email.js +7 -2
  58. package/dist/auth/verify-email.js.map +1 -1
  59. package/dist/billing/cancel-subscription.d.ts +20 -8
  60. package/dist/billing/cancel-subscription.js +7 -5
  61. package/dist/billing/cancel-subscription.js.map +1 -1
  62. package/dist/billing/dialog-close.d.ts +29 -0
  63. package/dist/billing/dialog-close.js +8 -0
  64. package/dist/billing/dialog-close.js.map +1 -0
  65. package/dist/billing/plan-card.d.ts +14 -4
  66. package/dist/billing/plan-card.js +15 -8
  67. package/dist/billing/plan-card.js.map +1 -1
  68. package/dist/billing/plan-change-labels.d.ts +42 -0
  69. package/dist/billing/plan-change-labels.js +22 -0
  70. package/dist/billing/plan-change-labels.js.map +1 -0
  71. package/dist/billing/plan-switch.d.ts +19 -7
  72. package/dist/billing/plan-switch.js +8 -4
  73. package/dist/billing/plan-switch.js.map +1 -1
  74. package/dist/chart.d.ts +12 -0
  75. package/dist/chart.js +16 -1
  76. package/dist/chart.js.map +1 -1
  77. package/dist/components/account-chips.d.ts +5 -5
  78. package/dist/components/account-chips.js +11 -13
  79. package/dist/components/account-chips.js.map +1 -1
  80. package/dist/components/alert-banner.d.ts +16 -5
  81. package/dist/components/alert-banner.js +46 -1
  82. package/dist/components/alert-banner.js.map +1 -1
  83. package/dist/components/amount-input.d.ts +13 -0
  84. package/dist/components/amount-input.js +1 -0
  85. package/dist/components/amount-input.js.map +1 -1
  86. package/dist/components/autocomplete.js +57 -65
  87. package/dist/components/autocomplete.js.map +1 -1
  88. package/dist/components/bulk-action-bar.d.ts +12 -2
  89. package/dist/components/bulk-action-bar.js +65 -21
  90. package/dist/components/bulk-action-bar.js.map +1 -1
  91. package/dist/components/button-look.d.ts +5 -5
  92. package/dist/components/button-look.js.map +1 -1
  93. package/dist/components/button.d.ts +2 -2
  94. package/dist/components/button.js.map +1 -1
  95. package/dist/components/chart-edge.d.ts +16 -0
  96. package/dist/components/chart-edge.js +14 -1
  97. package/dist/components/chart-edge.js.map +1 -1
  98. package/dist/components/chart-figure.d.ts +13 -0
  99. package/dist/components/chart-figure.js +15 -0
  100. package/dist/components/chart-figure.js.map +1 -0
  101. package/dist/components/chart-zoom-core.js +1 -4
  102. package/dist/components/chart-zoom-core.js.map +1 -1
  103. package/dist/components/chart.d.ts +8 -1
  104. package/dist/components/chart.js +19 -10
  105. package/dist/components/chart.js.map +1 -1
  106. package/dist/components/combobox-core.d.ts +111 -2
  107. package/dist/components/combobox-core.js +148 -42
  108. package/dist/components/combobox-core.js.map +1 -1
  109. package/dist/components/combobox.d.ts +1 -1
  110. package/dist/components/combobox.js +141 -130
  111. package/dist/components/combobox.js.map +1 -1
  112. package/dist/components/copy-button.d.ts +6 -5
  113. package/dist/components/copy-button.js +5 -3
  114. package/dist/components/copy-button.js.map +1 -1
  115. package/dist/components/country-select.js +2 -2
  116. package/dist/components/country-select.js.map +1 -1
  117. package/dist/components/data-table-column-settings.d.ts +1 -1
  118. package/dist/components/data-table-column-settings.js +33 -7
  119. package/dist/components/data-table-column-settings.js.map +1 -1
  120. package/dist/components/data-table-filters.d.ts +4 -2
  121. package/dist/components/data-table-filters.js +2 -2
  122. package/dist/components/data-table-filters.js.map +1 -1
  123. package/dist/components/data-table-fit.d.ts +6 -4
  124. package/dist/components/data-table-fit.js +4 -1
  125. package/dist/components/data-table-fit.js.map +1 -1
  126. package/dist/components/data-table-groups.d.ts +1 -1
  127. package/dist/components/data-table-groups.js.map +1 -1
  128. package/dist/components/data-table-head.d.ts +1 -1
  129. package/dist/components/data-table-head.js +15 -12
  130. package/dist/components/data-table-head.js.map +1 -1
  131. package/dist/components/data-table-mobile.d.ts +12 -7
  132. package/dist/components/data-table-mobile.js +43 -30
  133. package/dist/components/data-table-mobile.js.map +1 -1
  134. package/dist/components/data-table-pagination.js +11 -6
  135. package/dist/components/data-table-pagination.js.map +1 -1
  136. package/dist/components/data-table-resize.d.ts +1 -1
  137. package/dist/components/data-table-resize.js.map +1 -1
  138. package/dist/components/data-table-row-actions.d.ts +2 -2
  139. package/dist/components/data-table-row-actions.js.map +1 -1
  140. package/dist/components/data-table-row.d.ts +6 -2
  141. package/dist/components/data-table-row.js +17 -10
  142. package/dist/components/data-table-row.js.map +1 -1
  143. package/dist/components/data-table-selection.d.ts +1 -1
  144. package/dist/components/data-table-selection.js.map +1 -1
  145. package/dist/components/data-table-shared.d.ts +10 -2
  146. package/dist/components/data-table-shared.js +18 -0
  147. package/dist/components/data-table-shared.js.map +1 -1
  148. package/dist/components/data-table-sort.d.ts +21 -2
  149. package/dist/components/data-table-sort.js +24 -0
  150. package/dist/components/data-table-sort.js.map +1 -1
  151. package/dist/components/data-table-virtual.d.ts +1 -1
  152. package/dist/components/data-table-virtual.js +18 -6
  153. package/dist/components/data-table-virtual.js.map +1 -1
  154. package/dist/components/data-table.d.ts +13 -4
  155. package/dist/components/data-table.js +139 -36
  156. package/dist/components/data-table.js.map +1 -1
  157. package/dist/components/date-field.d.ts +24 -2
  158. package/dist/components/date-field.js +33 -8
  159. package/dist/components/date-field.js.map +1 -1
  160. package/dist/components/date-picker.d.ts +15 -2
  161. package/dist/components/date-picker.js +55 -26
  162. package/dist/components/date-picker.js.map +1 -1
  163. package/dist/components/date-range-picker.d.ts +47 -20
  164. package/dist/components/date-range-picker.js +23 -7
  165. package/dist/components/date-range-picker.js.map +1 -1
  166. package/dist/components/error-boundary.js +37 -30
  167. package/dist/components/error-boundary.js.map +1 -1
  168. package/dist/components/{ui-labels.d.ts → field-base-labels.d.ts} +0 -2
  169. package/dist/components/{ui-labels.js → field-base-labels.js} +2 -9
  170. package/dist/components/field-base-labels.js.map +1 -0
  171. package/dist/components/field-base.d.ts +4 -3
  172. package/dist/components/field-base.js +3 -3
  173. package/dist/components/field-base.js.map +1 -1
  174. package/dist/components/field-sync-labels.d.ts +1 -0
  175. package/dist/components/field-sync-labels.js.map +1 -1
  176. package/dist/components/field-sync.d.ts +23 -1
  177. package/dist/components/field-sync.js.map +1 -1
  178. package/dist/components/form-actions.js +11 -5
  179. package/dist/components/form-actions.js.map +1 -1
  180. package/dist/components/hover-menu.d.ts +3 -0
  181. package/dist/components/hover-menu.js +5 -3
  182. package/dist/components/hover-menu.js.map +1 -1
  183. package/dist/components/icon-button.js +14 -9
  184. package/dist/components/icon-button.js.map +1 -1
  185. package/dist/components/inline-confirm.d.ts +43 -0
  186. package/dist/components/inline-confirm.js +67 -0
  187. package/dist/components/inline-confirm.js.map +1 -0
  188. package/dist/components/inline-entity-combobox.d.ts +4 -3
  189. package/dist/components/inline-entity-combobox.js +148 -140
  190. package/dist/components/inline-entity-combobox.js.map +1 -1
  191. package/dist/components/input.js +1 -1
  192. package/dist/components/input.js.map +1 -1
  193. package/dist/components/jump-calendar.js +28 -112
  194. package/dist/components/jump-calendar.js.map +1 -1
  195. package/dist/components/legal-page.d.ts +3 -1
  196. package/dist/components/legal-page.js +3 -2
  197. package/dist/components/legal-page.js.map +1 -1
  198. package/dist/components/legal.d.ts +4 -2
  199. package/dist/components/legal.js.map +1 -1
  200. package/dist/components/lightbox.d.ts +2 -2
  201. package/dist/components/lightbox.js +17 -6
  202. package/dist/components/lightbox.js.map +1 -1
  203. package/dist/components/list.d.ts +6 -2
  204. package/dist/components/list.js +3 -2
  205. package/dist/components/list.js.map +1 -1
  206. package/dist/components/measured-grid.d.ts +1 -1
  207. package/dist/components/measured-grid.js +2 -1
  208. package/dist/components/measured-grid.js.map +1 -1
  209. package/dist/components/mini-calendar.js +3 -5
  210. package/dist/components/mini-calendar.js.map +1 -1
  211. package/dist/components/modal.js +3 -1
  212. package/dist/components/modal.js.map +1 -1
  213. package/dist/components/month-grid.d.ts +55 -0
  214. package/dist/components/month-grid.js +148 -0
  215. package/dist/components/month-grid.js.map +1 -0
  216. package/dist/components/month-picker.d.ts +36 -4
  217. package/dist/components/month-picker.js +123 -146
  218. package/dist/components/month-picker.js.map +1 -1
  219. package/dist/components/multi-select.d.ts +2 -2
  220. package/dist/components/multi-select.js +11 -6
  221. package/dist/components/multi-select.js.map +1 -1
  222. package/dist/components/picker-sheet.js +2 -1
  223. package/dist/components/picker-sheet.js.map +1 -1
  224. package/dist/components/pie-chart-labels.d.ts +7 -0
  225. package/dist/components/pie-chart-labels.js +1 -0
  226. package/dist/components/pie-chart-labels.js.map +1 -1
  227. package/dist/components/pie-chart.d.ts +5 -3
  228. package/dist/components/pie-chart.js +7 -22
  229. package/dist/components/pie-chart.js.map +1 -1
  230. package/dist/components/popover.d.ts +3 -0
  231. package/dist/components/popover.js +7 -1
  232. package/dist/components/popover.js.map +1 -1
  233. package/dist/components/row-actions.js +2 -1
  234. package/dist/components/row-actions.js.map +1 -1
  235. package/dist/components/section-nav.d.ts +7 -0
  236. package/dist/components/section-nav.js.map +1 -1
  237. package/dist/components/series-chart-axes.d.ts +3 -3
  238. package/dist/components/series-chart-axes.js.map +1 -1
  239. package/dist/components/series-chart-labels.d.ts +7 -4
  240. package/dist/components/series-chart-labels.js.map +1 -1
  241. package/dist/components/series-chart.d.ts +31 -7
  242. package/dist/components/series-chart.js +72 -29
  243. package/dist/components/series-chart.js.map +1 -1
  244. package/dist/components/share-card.js +3 -3
  245. package/dist/components/share-card.js.map +1 -1
  246. package/dist/components/sign-chip-labels.d.ts +1 -0
  247. package/dist/components/sign-chip-labels.js.map +1 -1
  248. package/dist/components/sign-chip.d.ts +10 -1
  249. package/dist/components/sign-chip.js.map +1 -1
  250. package/dist/components/tabs-labels.d.ts +2 -0
  251. package/dist/components/tabs-labels.js +11 -0
  252. package/dist/components/tabs-labels.js.map +1 -0
  253. package/dist/components/tabs.d.ts +1 -1
  254. package/dist/components/tabs.js +1 -1
  255. package/dist/components/tabs.js.map +1 -1
  256. package/dist/components/toggle-legend.d.ts +2 -2
  257. package/dist/components/toggle-legend.js +6 -6
  258. package/dist/components/toggle-legend.js.map +1 -1
  259. package/dist/components/translation-review-editor.d.ts +4 -2
  260. package/dist/components/translation-review-editor.js +2 -3
  261. package/dist/components/translation-review-editor.js.map +1 -1
  262. package/dist/components/translation-review.d.ts +2 -1
  263. package/dist/components/translation-review.js +2 -2
  264. package/dist/components/translation-review.js.map +1 -1
  265. package/dist/components/treemap-labels.d.ts +26 -0
  266. package/dist/components/treemap-labels.js +10 -0
  267. package/dist/components/treemap-labels.js.map +1 -0
  268. package/dist/components/treemap-layout.d.ts +62 -0
  269. package/dist/components/treemap-layout.js +126 -0
  270. package/dist/components/treemap-layout.js.map +1 -0
  271. package/dist/components/treemap.d.ts +140 -17
  272. package/dist/components/treemap.js +324 -97
  273. package/dist/components/treemap.js.map +1 -1
  274. package/dist/components/use-table-state.d.ts +5 -5
  275. package/dist/components/use-table-state.js +4 -1
  276. package/dist/components/use-table-state.js.map +1 -1
  277. package/dist/data-table.d.ts +6 -2
  278. package/dist/data-table.js +7 -2
  279. package/dist/data-table.js.map +1 -1
  280. package/dist/eslint/index.js +1 -1
  281. package/dist/eslint/role-utilities.d.ts +36 -7
  282. package/dist/eslint/role-utilities.js +42 -9
  283. package/dist/eslint/role-utilities.js.map +1 -1
  284. package/dist/feedback/feedback-dialog.d.ts +25 -16
  285. package/dist/feedback/feedback-dialog.js +6 -2
  286. package/dist/feedback/feedback-dialog.js.map +1 -1
  287. package/dist/feedback/feedback-mutation.d.ts +30 -0
  288. package/dist/feedback/feedback-mutation.js +16 -0
  289. package/dist/feedback/feedback-mutation.js.map +1 -0
  290. package/dist/feedback/feedback-page-link.d.ts +53 -0
  291. package/dist/feedback/feedback-page-link.js +37 -0
  292. package/dist/feedback/feedback-page-link.js.map +1 -0
  293. package/dist/feedback/feedback-public-list.d.ts +12 -3
  294. package/dist/feedback/feedback-public-list.js +2 -1
  295. package/dist/feedback/feedback-public-list.js.map +1 -1
  296. package/dist/feedback/feedback-replies.d.ts +3 -1
  297. package/dist/feedback/feedback-replies.js +5 -4
  298. package/dist/feedback/feedback-replies.js.map +1 -1
  299. package/dist/feedback/feedback-row-detail-labels.js +5 -0
  300. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  301. package/dist/feedback/feedback-row-detail.d.ts +64 -28
  302. package/dist/feedback/feedback-row-detail.js +30 -28
  303. package/dist/feedback/feedback-row-detail.js.map +1 -1
  304. package/dist/feedback/feedback-status-undo.d.ts +30 -11
  305. package/dist/feedback/feedback-status-undo.js +10 -15
  306. package/dist/feedback/feedback-status-undo.js.map +1 -1
  307. package/dist/feedback/feedback-submit-dialog.d.ts +1 -1
  308. package/dist/feedback/feedback-submit-dialog.js +1 -1
  309. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  310. package/dist/feedback/feedback-submit.js +9 -3
  311. package/dist/feedback/feedback-submit.js.map +1 -1
  312. package/dist/feedback/feedback-swipe.d.ts +1 -1
  313. package/dist/feedback/feedback-swipe.js.map +1 -1
  314. package/dist/feedback/feedback-table.d.ts +21 -9
  315. package/dist/feedback/feedback-table.js +45 -25
  316. package/dist/feedback/feedback-table.js.map +1 -1
  317. package/dist/feedback/feedback-thread-labels.d.ts +2 -2
  318. package/dist/feedback/feedback-thread-labels.js.map +1 -1
  319. package/dist/feedback/feedback-thread.d.ts +24 -23
  320. package/dist/feedback/feedback-thread.js +2 -1
  321. package/dist/feedback/feedback-thread.js.map +1 -1
  322. package/dist/feedback.d.ts +34 -0
  323. package/dist/feedback.js +42 -0
  324. package/dist/feedback.js.map +1 -1
  325. package/dist/hooks/use-focus-trap.d.ts +35 -0
  326. package/dist/hooks/use-focus-trap.js +6 -4
  327. package/dist/hooks/use-focus-trap.js.map +1 -1
  328. package/dist/hooks/use-hotkey.d.ts +5 -2
  329. package/dist/hooks/use-hotkey.js +5 -4
  330. package/dist/hooks/use-hotkey.js.map +1 -1
  331. package/dist/hooks/use-long-press.d.ts +7 -4
  332. package/dist/hooks/use-long-press.js +3 -0
  333. package/dist/hooks/use-long-press.js.map +1 -1
  334. package/dist/hooks/use-media-query.js +12 -4
  335. package/dist/hooks/use-media-query.js.map +1 -1
  336. package/dist/hooks/use-mounted.d.ts +22 -0
  337. package/dist/hooks/use-mounted.js +24 -0
  338. package/dist/hooks/use-mounted.js.map +1 -0
  339. package/dist/hooks/use-overlay-history.js +19 -3
  340. package/dist/hooks/use-overlay-history.js.map +1 -1
  341. package/dist/i18n/defaults.js +4 -5
  342. package/dist/i18n/defaults.js.map +1 -1
  343. package/dist/i18n/german.js +7 -1
  344. package/dist/i18n/german.js.map +1 -1
  345. package/dist/i18n/kit-labels.d.ts +9 -2
  346. package/dist/i18n/kit-labels.js.map +1 -1
  347. package/dist/i18n/locales/en.js +20 -41
  348. package/dist/i18n/locales/en.js.map +3 -3
  349. package/dist/i18n/locales/es.js +7 -1
  350. package/dist/i18n/locales/es.js.map +1 -1
  351. package/dist/i18n/locales/fr.js +20 -10
  352. package/dist/i18n/locales/fr.js.map +1 -1
  353. package/dist/i18n/locales/hu.js +9 -1
  354. package/dist/i18n/locales/hu.js.map +1 -1
  355. package/dist/i18n/locales/it.js +7 -1
  356. package/dist/i18n/locales/it.js.map +1 -1
  357. package/dist/i18n/locales/zh.js +8 -1
  358. package/dist/i18n/locales/zh.js.map +1 -1
  359. package/dist/i18n/review.js +5 -0
  360. package/dist/i18n/review.js.map +1 -1
  361. package/dist/index.d.ts +64 -17
  362. package/dist/index.js +77 -12
  363. package/dist/index.js.map +1 -1
  364. package/dist/landing/routing.d.ts +3 -1
  365. package/dist/landing/routing.js +4 -7
  366. package/dist/landing/routing.js.map +1 -1
  367. package/dist/lib/broadcast.d.ts +17 -0
  368. package/dist/lib/broadcast.js +30 -0
  369. package/dist/lib/broadcast.js.map +1 -0
  370. package/dist/lib/date-format.d.ts +37 -2
  371. package/dist/lib/date-format.js +34 -8
  372. package/dist/lib/date-format.js.map +1 -1
  373. package/dist/lib/day-format.d.ts +46 -0
  374. package/dist/lib/day-format.js +46 -0
  375. package/dist/lib/day-format.js.map +1 -0
  376. package/dist/lib/describe-failure.d.ts +14 -0
  377. package/dist/lib/describe-failure.js +9 -0
  378. package/dist/lib/describe-failure.js.map +1 -0
  379. package/dist/lib/direction.d.ts +16 -0
  380. package/dist/lib/direction.js +9 -1
  381. package/dist/lib/direction.js.map +1 -1
  382. package/dist/lib/focus-left.d.ts +63 -0
  383. package/dist/lib/focus-left.js +67 -0
  384. package/dist/lib/focus-left.js.map +1 -0
  385. package/dist/lib/format.js +5 -14
  386. package/dist/lib/format.js.map +1 -1
  387. package/dist/lib/http-status.d.ts +24 -0
  388. package/dist/lib/http-status.js +14 -0
  389. package/dist/lib/http-status.js.map +1 -0
  390. package/dist/lib/intl-cache.d.ts +14 -0
  391. package/dist/lib/intl-cache.js +15 -0
  392. package/dist/lib/intl-cache.js.map +1 -0
  393. package/dist/lib/isin.d.ts +10 -0
  394. package/dist/lib/isin.js.map +1 -1
  395. package/dist/lib/iso-day.d.ts +11 -0
  396. package/dist/lib/iso-day.js +8 -0
  397. package/dist/lib/iso-day.js.map +1 -0
  398. package/dist/lib/lazy-with-fallback.d.ts +31 -0
  399. package/dist/lib/lazy-with-fallback.js +40 -0
  400. package/dist/lib/lazy-with-fallback.js.map +1 -0
  401. package/dist/lib/path-pattern.d.ts +34 -0
  402. package/dist/lib/path-pattern.js +24 -0
  403. package/dist/lib/path-pattern.js.map +1 -0
  404. package/dist/lib/reduced-motion.d.ts +2 -1
  405. package/dist/lib/reduced-motion.js.map +1 -1
  406. package/dist/lib/round.d.ts +2 -1
  407. package/dist/lib/round.js +2 -1
  408. package/dist/lib/round.js.map +1 -1
  409. package/dist/lib/safe-storage.d.ts +24 -5
  410. package/dist/lib/safe-storage.js +27 -2
  411. package/dist/lib/safe-storage.js.map +1 -1
  412. package/dist/lib/session-refresh.js +1 -1
  413. package/dist/lib/session-refresh.js.map +1 -1
  414. package/dist/lib/share-format.d.ts +13 -0
  415. package/dist/lib/share-format.js +10 -0
  416. package/dist/lib/share-format.js.map +1 -0
  417. package/dist/lib/text-case.d.ts +17 -0
  418. package/dist/lib/text-case.js +8 -0
  419. package/dist/lib/text-case.js.map +1 -0
  420. package/dist/lib/text-match.d.ts +29 -0
  421. package/dist/lib/text-match.js +20 -2
  422. package/dist/lib/text-match.js.map +1 -1
  423. package/dist/lib/thenable.d.ts +13 -0
  424. package/dist/lib/thenable.js +8 -0
  425. package/dist/lib/thenable.js.map +1 -0
  426. package/dist/lib/translation-review.d.ts +7 -2
  427. package/dist/lib/translation-review.js +4 -4
  428. package/dist/lib/translation-review.js.map +1 -1
  429. package/dist/notifications/device-zone-report.js +1 -1
  430. package/dist/notifications/device-zone-report.js.map +1 -1
  431. package/dist/notifications/notification-bell.d.ts +2 -1
  432. package/dist/notifications/notification-bell.js +3 -3
  433. package/dist/notifications/notification-bell.js.map +1 -1
  434. package/dist/notifications/notification-inbox.d.ts +10 -6
  435. package/dist/notifications/notification-inbox.js +26 -48
  436. package/dist/notifications/notification-inbox.js.map +1 -1
  437. package/dist/notifications/notification-parts.d.ts +3 -2
  438. package/dist/notifications/notification-parts.js +1 -3
  439. package/dist/notifications/notification-parts.js.map +1 -1
  440. package/dist/notifications/notification-types-setting.js +1 -1
  441. package/dist/notifications/notification-types-setting.js.map +1 -1
  442. package/dist/notifications/notifications-labels.d.ts +6 -0
  443. package/dist/notifications/notifications-labels.js +1 -0
  444. package/dist/notifications/notifications-labels.js.map +1 -1
  445. package/dist/notifications/push-device-setting.js +1 -1
  446. package/dist/notifications/push-device-setting.js.map +1 -1
  447. package/dist/notifications/push-devices-setting.d.ts +2 -1
  448. package/dist/notifications/push-devices-setting.js +27 -49
  449. package/dist/notifications/push-devices-setting.js.map +1 -1
  450. package/dist/notifications/quiet-hours-setting.d.ts +10 -3
  451. package/dist/notifications/quiet-hours-setting.js +65 -26
  452. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  453. package/dist/notifications/unsubscribe-panel.js +4 -7
  454. package/dist/notifications/unsubscribe-panel.js.map +1 -1
  455. package/dist/notifications/use-push-device.d.ts +39 -1
  456. package/dist/notifications/use-push-device.js +28 -7
  457. package/dist/notifications/use-push-device.js.map +1 -1
  458. package/dist/offline/query-persistence.d.ts +3 -1
  459. package/dist/offline/query-persistence.js +19 -2
  460. package/dist/offline/query-persistence.js.map +1 -1
  461. package/dist/rhf/fields.d.ts +11 -4
  462. package/dist/rhf/fields.js.map +1 -1
  463. package/dist/search/command-palette.js +1 -1
  464. package/dist/search/command-palette.js.map +1 -1
  465. package/dist/search/global-search.js +19 -9
  466. package/dist/search/global-search.js.map +1 -1
  467. package/dist/search/use-command-key.d.ts +12 -1
  468. package/dist/search/use-command-key.js +3 -12
  469. package/dist/search/use-command-key.js.map +1 -1
  470. package/dist/search.d.ts +7 -0
  471. package/dist/search.js +10 -0
  472. package/dist/search.js.map +1 -1
  473. package/dist/settings/use-settings-focus.js +1 -0
  474. package/dist/settings/use-settings-focus.js.map +1 -1
  475. package/dist/shell/account-menu-language.d.ts +21 -5
  476. package/dist/shell/account-menu-language.js +3 -1
  477. package/dist/shell/account-menu-language.js.map +1 -1
  478. package/dist/shell/account-menu-text-size.d.ts +26 -9
  479. package/dist/shell/account-menu-text-size.js +3 -2
  480. package/dist/shell/account-menu-text-size.js.map +1 -1
  481. package/dist/shell/dev-menu.js +5 -18
  482. package/dist/shell/dev-menu.js.map +1 -1
  483. package/dist/shell/role-switcher.d.ts +7 -0
  484. package/dist/shell/role-switcher.js.map +1 -1
  485. package/dist/shell/top-bar-actions.d.ts +1 -1
  486. package/dist/shell/top-bar-actions.js.map +1 -1
  487. package/dist/shell/top-bar-parts-labels.d.ts +0 -2
  488. package/dist/shell/top-bar-parts-labels.js +0 -1
  489. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  490. package/dist/shell.d.ts +27 -8
  491. package/dist/shell.js +28 -7
  492. package/dist/shell.js.map +1 -1
  493. package/dist/sync/engine.d.ts +30 -4
  494. package/dist/sync/engine.js +172 -52
  495. package/dist/sync/engine.js.map +1 -1
  496. package/dist/sync.d.ts +6 -2
  497. package/dist/sync.js +6 -1
  498. package/dist/sync.js.map +1 -1
  499. package/dist/testing/css-variables.js +3 -8
  500. package/dist/testing/css-variables.js.map +1 -1
  501. package/dist/theme/contrast.d.ts +2 -1
  502. package/dist/theme/contrast.js +3 -8
  503. package/dist/theme/contrast.js.map +1 -1
  504. package/dist/theme/palette-store.js +6 -6
  505. package/dist/theme/palette-store.js.map +1 -1
  506. package/dist/theme/text-size.js +3 -8
  507. package/dist/theme/text-size.js.map +1 -1
  508. package/dist/theme/theme-store.js +3 -6
  509. package/dist/theme/theme-store.js.map +1 -1
  510. package/dist/tour/tour-catalogue.d.ts +7 -4
  511. package/dist/tour/tour-catalogue.js +12 -10
  512. package/dist/tour/tour-catalogue.js.map +1 -1
  513. package/dist/tour/tour-dock.d.ts +0 -2
  514. package/dist/tour/tour-dock.js +0 -2
  515. package/dist/tour/tour-dock.js.map +1 -1
  516. package/dist/tour/tour-gates.d.ts +4 -0
  517. package/dist/tour/tour-gates.js +14 -0
  518. package/dist/tour/tour-gates.js.map +1 -1
  519. package/dist/tour/tour-overlay.d.ts +27 -0
  520. package/dist/tour/tour-overlay.js +741 -0
  521. package/dist/tour/tour-overlay.js.map +1 -0
  522. package/dist/tour/tour.d.ts +13 -3
  523. package/dist/tour/tour.js +59 -781
  524. package/dist/tour/tour.js.map +1 -1
  525. package/dist/tour/use-tour-progress.js +1 -1
  526. package/dist/tour/use-tour-progress.js.map +1 -1
  527. package/dist/wizard/stepper-nav.d.ts +5 -1
  528. package/dist/wizard/stepper-nav.js.map +1 -1
  529. package/dist/wizard/types.d.ts +6 -2
  530. package/dist/wizard/types.js.map +1 -1
  531. package/dist/wizard/use-wizard.d.ts +3 -1
  532. package/dist/wizard/use-wizard.js.map +1 -1
  533. package/dist/wizard/validation.d.ts +3 -1
  534. package/dist/wizard/validation.js.map +1 -1
  535. package/package.json +10 -6
  536. package/src/account/account-parts.ts +5 -25
  537. package/src/account/data-export-setting-labels.ts +1 -1
  538. package/src/account/delete-account-setting-labels.ts +1 -1
  539. package/src/account/email-change-setting-labels.ts +1 -1
  540. package/src/account/passkeys-setting.tsx +60 -38
  541. package/src/account/sessions-setting.tsx +18 -12
  542. package/src/admin/admin-action-confirm.tsx +1 -5
  543. package/src/admin/admin-parts.ts +11 -25
  544. package/src/admin/mail-test-card-labels.ts +1 -1
  545. package/src/admin/plan-change-labels.ts +5 -23
  546. package/src/admin/plan-change.tsx +7 -44
  547. package/src/admin/reviewer-scope-editor.tsx +3 -3
  548. package/src/auth/auth-errors-labels.ts +23 -0
  549. package/src/auth/auth-errors.ts +11 -38
  550. package/src/auth/complete-name-dialog.tsx +4 -1
  551. package/src/auth/forgot-password-form-labels.ts +1 -1
  552. package/src/auth/forgot-password-form.tsx +11 -6
  553. package/src/auth/register-form-labels.ts +1 -1
  554. package/src/auth/reset-password-form-labels.ts +1 -1
  555. package/src/auth/reset-password-form.tsx +8 -4
  556. package/src/auth/sign-in-form-labels.ts +1 -1
  557. package/src/auth/status-parts.tsx +0 -6
  558. package/src/auth/verify-email-labels.ts +1 -1
  559. package/src/auth/verify-email.tsx +11 -6
  560. package/src/billing/cancel-subscription.tsx +26 -12
  561. package/src/billing/dialog-close.ts +34 -0
  562. package/src/billing/plan-card.tsx +36 -11
  563. package/src/billing/plan-change-labels.ts +66 -0
  564. package/src/billing/plan-switch.tsx +26 -12
  565. package/src/chart.ts +21 -3
  566. package/src/components/account-chips.tsx +20 -23
  567. package/src/components/alert-banner.tsx +82 -5
  568. package/src/components/amount-input.tsx +18 -7
  569. package/src/components/autocomplete.tsx +64 -70
  570. package/src/components/bulk-action-bar.tsx +70 -2
  571. package/src/components/button-look.ts +5 -5
  572. package/src/components/button.tsx +2 -2
  573. package/src/components/chart-edge.ts +34 -1
  574. package/src/components/chart-figure.tsx +35 -0
  575. package/src/components/chart-zoom-core.tsx +6 -5
  576. package/src/components/chart.tsx +26 -5
  577. package/src/components/combobox-core.tsx +293 -62
  578. package/src/components/combobox.tsx +183 -153
  579. package/src/components/copy-button.tsx +34 -23
  580. package/src/components/country-select.tsx +16 -11
  581. package/src/components/data-table-column-settings.tsx +52 -10
  582. package/src/components/data-table-filters.ts +6 -4
  583. package/src/components/data-table-fit.ts +19 -5
  584. package/src/components/data-table-groups.tsx +1 -1
  585. package/src/components/data-table-head.tsx +32 -22
  586. package/src/components/data-table-mobile.tsx +61 -26
  587. package/src/components/data-table-pagination.tsx +21 -6
  588. package/src/components/data-table-resize.ts +1 -1
  589. package/src/components/data-table-row-actions.tsx +3 -3
  590. package/src/components/data-table-row.tsx +25 -14
  591. package/src/components/data-table-selection.ts +1 -1
  592. package/src/components/data-table-shared.tsx +33 -1
  593. package/src/components/data-table-sort.ts +57 -2
  594. package/src/components/data-table-virtual.ts +32 -8
  595. package/src/components/data-table.tsx +239 -68
  596. package/src/components/date-field.tsx +65 -8
  597. package/src/components/date-picker.tsx +125 -48
  598. package/src/components/date-range-picker.tsx +82 -31
  599. package/src/components/error-boundary.tsx +53 -39
  600. package/src/components/field-base-labels.ts +20 -0
  601. package/src/components/field-base.tsx +13 -7
  602. package/src/components/field-sync-labels.ts +1 -0
  603. package/src/components/field-sync.tsx +23 -1
  604. package/src/components/form-actions.tsx +20 -5
  605. package/src/components/hover-menu.tsx +18 -8
  606. package/src/components/icon-button.tsx +14 -9
  607. package/src/components/inline-confirm.tsx +116 -0
  608. package/src/components/inline-entity-combobox.tsx +197 -153
  609. package/src/components/input.tsx +1 -1
  610. package/src/components/jump-calendar.tsx +30 -146
  611. package/src/components/legal-page.tsx +10 -7
  612. package/src/components/legal.tsx +4 -2
  613. package/src/components/lightbox.tsx +21 -8
  614. package/src/components/list.tsx +10 -4
  615. package/src/components/measured-grid.tsx +8 -4
  616. package/src/components/mini-calendar.tsx +6 -5
  617. package/src/components/modal.tsx +6 -1
  618. package/src/components/month-grid.tsx +229 -0
  619. package/src/components/month-picker.tsx +192 -200
  620. package/src/components/multi-select.tsx +21 -9
  621. package/src/components/picker-sheet.tsx +12 -9
  622. package/src/components/pie-chart-labels.ts +8 -0
  623. package/src/components/pie-chart.tsx +22 -28
  624. package/src/components/popover.tsx +18 -1
  625. package/src/components/row-actions.tsx +2 -1
  626. package/src/components/section-nav.tsx +7 -0
  627. package/src/components/series-chart-axes.ts +3 -3
  628. package/src/components/series-chart-labels.ts +7 -4
  629. package/src/components/series-chart.tsx +178 -69
  630. package/src/components/share-card.tsx +6 -6
  631. package/src/components/sign-chip-labels.ts +1 -0
  632. package/src/components/sign-chip.tsx +10 -1
  633. package/src/components/tabs-labels.ts +13 -0
  634. package/src/components/tabs.tsx +2 -2
  635. package/src/components/toggle-legend.tsx +16 -11
  636. package/src/components/translation-review-editor.tsx +6 -5
  637. package/src/components/translation-review.tsx +4 -3
  638. package/src/components/treemap-labels.ts +39 -0
  639. package/src/components/treemap-layout.ts +210 -0
  640. package/src/components/treemap.tsx +722 -133
  641. package/src/components/use-table-state.ts +12 -9
  642. package/src/data-table.ts +9 -2
  643. package/src/eslint/role-utilities.ts +97 -19
  644. package/src/feedback/feedback-dialog.tsx +30 -19
  645. package/src/feedback/feedback-mutation.ts +41 -0
  646. package/src/feedback/feedback-page-link.ts +90 -0
  647. package/src/feedback/feedback-public-list.tsx +17 -5
  648. package/src/feedback/feedback-replies.tsx +13 -6
  649. package/src/feedback/feedback-row-detail-labels.ts +5 -0
  650. package/src/feedback/feedback-row-detail.tsx +103 -67
  651. package/src/feedback/feedback-status-undo.ts +41 -27
  652. package/src/feedback/feedback-submit-dialog.tsx +2 -2
  653. package/src/feedback/feedback-submit.tsx +21 -7
  654. package/src/feedback/feedback-swipe.tsx +1 -1
  655. package/src/feedback/feedback-table.tsx +86 -38
  656. package/src/feedback/feedback-thread-labels.ts +2 -2
  657. package/src/feedback/feedback-thread.tsx +27 -25
  658. package/src/feedback.ts +42 -0
  659. package/src/hooks/use-focus-trap.ts +8 -24
  660. package/src/hooks/use-hotkey.ts +24 -7
  661. package/src/hooks/use-long-press.ts +16 -2
  662. package/src/hooks/use-media-query.ts +20 -4
  663. package/src/hooks/use-mounted.ts +39 -0
  664. package/src/hooks/use-overlay-history.ts +32 -3
  665. package/src/i18n/defaults.ts +4 -5
  666. package/src/i18n/german.ts +8 -2
  667. package/src/i18n/kit-labels.tsx +9 -2
  668. package/src/i18n/locales/es.ts +8 -2
  669. package/src/i18n/locales/fr.ts +21 -13
  670. package/src/i18n/locales/hu.ts +10 -2
  671. package/src/i18n/locales/it.ts +8 -2
  672. package/src/i18n/locales/zh.ts +9 -2
  673. package/src/i18n/review.ts +5 -0
  674. package/src/index.ts +103 -13
  675. package/src/landing/routing.tsx +14 -10
  676. package/src/lib/broadcast.ts +52 -0
  677. package/src/lib/date-format.ts +89 -13
  678. package/src/lib/day-format.ts +96 -0
  679. package/src/lib/describe-failure.ts +18 -0
  680. package/src/lib/direction.ts +39 -0
  681. package/src/lib/focus-left.ts +156 -0
  682. package/src/lib/format.ts +5 -17
  683. package/src/lib/http-status.ts +38 -0
  684. package/src/lib/intl-cache.ts +25 -0
  685. package/src/lib/isin.ts +10 -0
  686. package/src/lib/iso-day.ts +13 -0
  687. package/src/lib/lazy-with-fallback.ts +82 -0
  688. package/src/lib/path-pattern.ts +55 -0
  689. package/src/lib/reduced-motion.ts +2 -1
  690. package/src/lib/round.ts +7 -2
  691. package/src/lib/safe-storage.ts +48 -6
  692. package/src/lib/session-refresh.ts +1 -1
  693. package/src/lib/share-format.ts +18 -0
  694. package/src/lib/text-case.ts +19 -0
  695. package/src/lib/text-match.ts +57 -2
  696. package/src/lib/thenable.ts +19 -0
  697. package/src/lib/translation-review.ts +13 -5
  698. package/src/notifications/device-zone-report.ts +1 -1
  699. package/src/notifications/notification-bell.tsx +7 -4
  700. package/src/notifications/notification-inbox.tsx +40 -58
  701. package/src/notifications/notification-parts.tsx +3 -4
  702. package/src/notifications/notification-types-setting.tsx +1 -1
  703. package/src/notifications/notifications-labels.ts +7 -0
  704. package/src/notifications/push-device-setting.tsx +1 -1
  705. package/src/notifications/push-devices-setting.tsx +30 -55
  706. package/src/notifications/quiet-hours-setting.tsx +93 -31
  707. package/src/notifications/unsubscribe-panel.tsx +4 -7
  708. package/src/notifications/use-push-device.ts +76 -10
  709. package/src/offline/query-persistence.ts +35 -3
  710. package/src/rhf/fields.tsx +11 -4
  711. package/src/search/command-palette.tsx +2 -4
  712. package/src/search/global-search.tsx +36 -15
  713. package/src/search/use-command-key.ts +13 -12
  714. package/src/search.ts +9 -0
  715. package/src/settings/use-settings-focus.ts +3 -0
  716. package/src/shell/account-menu-language.tsx +27 -5
  717. package/src/shell/account-menu-text-size.tsx +32 -10
  718. package/src/shell/dev-menu.tsx +7 -21
  719. package/src/shell/role-switcher.tsx +7 -0
  720. package/src/shell/top-bar-actions.tsx +1 -1
  721. package/src/shell/top-bar-parts-labels.ts +0 -3
  722. package/src/shell.ts +40 -9
  723. package/src/sync/engine.ts +339 -61
  724. package/src/sync.ts +8 -1
  725. package/src/testing/css-variables.ts +8 -9
  726. package/src/theme/contrast.ts +8 -9
  727. package/src/theme/palette-store.ts +9 -9
  728. package/src/theme/text-size.ts +6 -8
  729. package/src/theme/theme-store.ts +7 -9
  730. package/src/tour/tour-catalogue.tsx +26 -15
  731. package/src/tour/tour-dock.ts +0 -2
  732. package/src/tour/tour-gates.ts +23 -0
  733. package/src/tour/tour-overlay.tsx +1170 -0
  734. package/src/tour/tour.tsx +108 -1202
  735. package/src/tour/use-tour-progress.ts +1 -1
  736. package/src/wizard/stepper-nav.tsx +3 -1
  737. package/src/wizard/types.ts +11 -2
  738. package/src/wizard/use-wizard.ts +2 -1
  739. package/src/wizard/validation.ts +8 -2
  740. package/tokens.css +2 -1
  741. package/dist/components/ui-labels.js.map +0 -1
  742. package/dist/shell/dev-switchers.d.ts +0 -6
  743. package/dist/shell/dev-switchers.js +0 -12
  744. package/dist/shell/dev-switchers.js.map +0 -1
  745. package/src/components/ui-labels.ts +0 -24
  746. package/src/shell/dev-switchers.tsx +0 -18
@@ -1,30 +1,33 @@
1
1
  // The id-keyed sibling of Combobox. Moved out of combobox.tsx as it was (MOD-9,
2
2
  // refactor audit 2026-10); combobox still exports `InlineEntityCombobox` and its props.
3
- import { Fragment, useId, useMemo, useRef, useState } from "react";
4
- import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
3
+ import { useId, useMemo, useRef, useState } from "react";
4
+ import type { ComponentPropsWithoutRef, KeyboardEvent, ReactNode, Ref } from "react";
5
5
  import { ChevronDown, Plus, X } from "lucide-react";
6
6
  import { FIELD_BASE, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
7
7
  import { cn } from "../lib/cn";
8
8
  import { useDropdown } from "./dropdown";
9
- import { takeEscape, useDismissLayer } from "../hooks/use-dismiss";
9
+ import { claimEscape, takeEscape, useDismissLayer } from "../hooks/use-dismiss";
10
10
  import { isImeEnter } from "../lib/ime";
11
11
  import { isQuietFocus } from "../lib/quiet-focus";
12
12
  import { usePhoneLayout } from "../hooks/use-breakpoint";
13
13
  import { PickerSheet, SHEET_ROW_CLASS } from "./picker-sheet";
14
14
  import {
15
+ anchoredHeadingClass,
15
16
  ComboboxFieldLabel,
16
17
  DISABLED_ROW_CLASS,
17
18
  endHintRowProps,
18
- GROUP_HEADING_STICKY,
19
+ GroupedOptions,
20
+ groupRuns,
19
21
  isOptionEnabled,
20
22
  offersCreate,
23
+ SHEET_HEADING_CLASS,
21
24
  stepEnabled,
22
- useActiveOptionScroll,
25
+ useTypedListStatus,
23
26
  type ComboClearValue,
24
27
  type ComboOption,
25
28
  } from "./combobox-core";
26
29
  import { DEFAULT_COMBOBOX_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
27
- import { matchesSearch, rankMatch, sameName, searchWords } from "../lib/text-match";
30
+ import { sameName, searchRanked } from "../lib/text-match";
28
31
  import {
29
32
  EndHintRow,
30
33
  FieldCaption,
@@ -65,7 +68,7 @@ export interface InlineEntityComboboxProps<V extends string | number, C extends
65
68
  /** What a clear emits — `null` by default, `""` for a schema that wants an empty
66
69
  * string. See {@link EntityCombobox}'s `clearValue`. */
67
70
  clearValue?: C;
68
- options: ComboOption<V>[];
71
+ options: readonly ComboOption<V>[];
69
72
  /** The visible label — see {@link Combobox}'s `label` (a ReactNode since 0.34, API-9). */
70
73
  label?: ReactNode;
71
74
  id?: string;
@@ -81,8 +84,9 @@ export interface InlineEntityComboboxProps<V extends string | number, C extends
81
84
  /** Phone sheet only — the anchored list has the field itself to type in. Falls
82
85
  * back to `placeholder`, then to `combobox.search` from the {@link UiKitProvider}. */
83
86
  searchPlaceholder?: string;
84
- /** Phone sheet only: a full screen showing nothing has to say why. The anchored
85
- * list simply does not open. Default: `combobox.noResults` from the provider. */
87
+ /** What a query that finds nothing says: on the phone sheet, where a full screen
88
+ * showing nothing has to say why, and in the field's live status (0.52) — the anchored
89
+ * list itself simply does not open. Default: `combobox.noResults` from the provider. */
86
90
  emptyLabel?: string;
87
91
  closeLabel?: string;
88
92
  /** The phone sheet's heading (and, as a string, its accessible name) for a field
@@ -310,19 +314,14 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
310
314
  const matches = useMemo(() => {
311
315
  let ranked = options;
312
316
  if (query) {
313
- // Every word of the query, in the label or the sublabel (0.51.4).
314
- const words = searchWords(query, locale);
315
- const hit = (o: ComboOption<V>) => matchesSearch(words, [o.label, o.sublabel], locale);
316
- // The label's whole name or its start first (`rankMatch` 0 and 1), then a match
317
- // anywhere in the label or the sublabel. Not the group (0.40, kk run 79): with
318
- // first-letter groups one typed letter matched its whole group.
319
- const leads = (o: ComboOption<V>) => {
320
- const rank = rankMatch(o.label, query, { locale });
321
- return rank === 0 || rank === 1;
322
- };
323
- const starts = options.filter(leads);
324
- const rest = options.filter((o) => !leads(o) && hit(o));
325
- ranked = [...starts, ...rest];
317
+ // Every word of the query, in the label or the sublabel (0.51.4). The label's whole
318
+ // name or its start first (rank 0 and 1), then a match anywhere in the label or the
319
+ // sublabel; a stable sort keeps the options' order within each. Not the group
320
+ // (0.40, kk run 79): with first-letter groups one typed letter matched its whole
321
+ // group. Each option folded once (`searchRanked`).
322
+ ranked = searchRanked(options, query, (o) => [o.label, o.sublabel], { locale })
323
+ .sort((a, b) => Number(a.rank > 1) - Number(b.rank > 1))
324
+ .map((x) => x.row);
326
325
  }
327
326
  if (!ranked.some((o) => o.group)) return ranked;
328
327
  // Keep each group contiguous so the headings below appear once instead of
@@ -361,20 +360,27 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
361
360
  const rows: readonly { disabled?: boolean }[] = showCreate ? [...matches, { disabled: createLocked }] : matches;
362
361
  const createIndex = matches.length;
363
362
 
364
- // Pointer-device only: the phone's rows live in a {@link PickerSheet} whose own
365
- // search box holds focus, so the field behind it must not claim to be pointing at
366
- // one of them.
367
- // A disabled row is never the keyboard's, even if the list changed under it.
368
- const activeId = !isPhone && isOptionEnabled(rows[active]) ? optionId(active) : undefined;
369
- useActiveOptionScroll(activeId);
370
-
371
363
  const close = () => {
372
364
  setOpen(false);
373
365
  setActive(-1);
374
366
  setSheetQuery("");
375
367
  };
376
- // See the twin above: a layer while the list SHOWS, and Escape puts the label back.
377
- const showing = !isPhone && open && !inert && (matches.length > 0 || showCreate);
368
+ // Whether a list shows, the row the keyboard is on — in the anchored list or the phone
369
+ // sheet, whose search box takes the same keys (INP-6) — and the live status, as
370
+ // Combobox has them. A disabled row is never the keyboard's, even if the list changed
371
+ // under it.
372
+ const { showing, expanded, activeOption, statusRegion } = useTypedListStatus({
373
+ isPhone,
374
+ open,
375
+ inert,
376
+ rowCount: matches.length,
377
+ extraRow: showCreate,
378
+ query,
379
+ active: isOptionEnabled(rows[active]) ? active : -1,
380
+ optionId,
381
+ labels,
382
+ });
383
+ // A layer while the list SHOWS, and Escape puts the label back.
378
384
  useDismissLayer(showing, () => {
379
385
  setText(null);
380
386
  close();
@@ -403,6 +409,13 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
403
409
  setText(null);
404
410
  close();
405
411
  };
412
+ // The ONE option a name typed out in full names, else null. A disabled option's label
413
+ // is not a hit — typing it is not a way round `disabled` — and a label is typed out in
414
+ // full as the list matches it, so "cafe" names Café (DUP-5).
415
+ const exactHit = (q: string): ComboOption<V> | null => {
416
+ const hits = options.filter((o) => !o.disabled && sameName(o.label, q, locale));
417
+ return new Set(hits.map((h) => h.value)).size === 1 ? hits[0] : null;
418
+ };
406
419
  const reconcile = () => {
407
420
  // Locked, loose text is dropped rather than judged: nothing reaches `onChange`.
408
421
  if (text !== null && !locked) {
@@ -410,17 +423,60 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
410
423
  if (!q) {
411
424
  if (value != null) onChange(clearValue);
412
425
  } else {
413
- // A disabled option's label typed out in full is not a way round `disabled`:
414
- // it is not a hit, so the text reverts like any other non-answer. A label is
415
- // typed out in full as the list matches it, so "cafe" commits Café (DUP-5).
416
- const hits = options.filter((o) => !o.disabled && sameName(o.label, q, locale));
417
- const ids = new Set(hits.map((h) => h.value));
418
- if (ids.size === 1 && hits[0].value !== value) onChange(hits[0].value);
426
+ // Anything but a hit reverts, like any other non-answer.
427
+ const hit = exactHit(q);
428
+ if (hit && hit.value !== value) onChange(hit.value);
419
429
  }
420
430
  }
421
431
  setText(null);
422
432
  close();
423
433
  };
434
+ // The phone sheet's way out — the X, Escape, Back — keeps the value and judges nothing.
435
+ // Not `reconcile`: on a phone `text` is never typed in (the sheet's own box is), so it
436
+ // only holds what the field showed at focus, and that is "" for a value whose option
437
+ // has not loaded yet — judged, it read as "the user emptied the field" and the X
438
+ // cleared the answer (0.52 code review, inline-entity-combobox.tsx).
439
+ const dismissSheet = () => {
440
+ setText(null);
441
+ close();
442
+ };
443
+
444
+ /** The list's keys — in the field and, on a phone, in the sheet's search box (INP-6).
445
+ * Disabled rows are passed over; Up from "nothing highlighted" lands on the first
446
+ * takeable row, as it always landed on row 0. The create row is the last row the
447
+ * arrows reach. */
448
+ const listKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
449
+ if (e.key === "ArrowDown") {
450
+ e.preventDefault();
451
+ setOpen(true);
452
+ setActive((i) => stepEnabled(rows, i, 1));
453
+ } else if (e.key === "ArrowUp") {
454
+ e.preventDefault();
455
+ setActive((i) => (i < 0 ? stepEnabled(rows, -1, 1) : stepEnabled(rows, i, -1)));
456
+ } else if (e.key === "Enter") {
457
+ // An IME's Enter takes nothing, and judges no loose text (BUG-9).
458
+ if (isImeEnter(e)) return;
459
+ if (open && isOptionEnabled(rows[active])) {
460
+ e.preventDefault();
461
+ if (active === createIndex && showCreate) create();
462
+ else take(matches[active]);
463
+ } else if (isPhone) {
464
+ // The sheet's search box: its QUERY is what was typed, and a name typed out in
465
+ // full is taken, as the desktop field takes it. Anything else leaves the sheet
466
+ // and its search as they are — the panel pickers' sheet does the same. This was
467
+ // `reconcile`, which judged the field's text from before the sheet opened and
468
+ // closed: the search was thrown away and "Groceries" typed out was not taken
469
+ // (0.52 code review, inline-entity-combobox.tsx).
470
+ const hit = exactHit(sheetQuery.trim());
471
+ if (hit) {
472
+ e.preventDefault();
473
+ take(hit);
474
+ }
475
+ } else {
476
+ reconcile();
477
+ }
478
+ }
479
+ };
424
480
 
425
481
  // The create row's inside, one for both shells: a "+" (it is an action, not a record),
426
482
  // the words, and — while a write lock holds it — the lock's reason as a second line.
@@ -447,6 +503,21 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
447
503
  box
448
504
  );
449
505
 
506
+ /** The rows in their runs, each group a `role="group"` its heading names (INP-8), for
507
+ * the sheet or the anchored list — a group heading at each boundary rather than the
508
+ * group on every row (feedback #136). `matches` is group-contiguous, so comparing with
509
+ * the row above is enough. An option may deliberately appear in two groups (see
510
+ * `reconcile`): a value is a row's key within its group. */
511
+ const groupedRows = (sheet: boolean, row: (o: ComboOption<V>, i: number) => ReactNode) => (
512
+ <GroupedOptions
513
+ runs={groupRuns(matches, (o) => o.group)}
514
+ listboxId={listboxId}
515
+ rowKey={(o) => String(o.value)}
516
+ row={row}
517
+ headingClassName={(run) => (sheet ? SHEET_HEADING_CLASS : anchoredHeadingClass(run))}
518
+ />
519
+ );
520
+
450
521
  return (
451
522
  // `rest` dresses the outer box — a `data-tour` anchor, a test id. Not the NAME,
452
523
  // description, invalid or required state: those belong on the <input> below,
@@ -478,12 +549,14 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
478
549
  // already exposes its value separately.
479
550
  aria-label={ariaLabel}
480
551
  role="combobox"
481
- aria-expanded={open}
552
+ aria-expanded={expanded}
482
553
  // Required by the role, and the half that was missing: the field said it
483
554
  // was expanded and never said what it had expanded (ESLint's
484
555
  // `role-has-required-aria-props`, the audit's §a11y).
485
556
  aria-controls={listboxId}
486
- aria-activedescendant={activeId}
557
+ // Pointer-device only: on a phone the sheet's own search box holds focus
558
+ // and names the row; the field behind it must not claim one.
559
+ aria-activedescendant={isPhone ? undefined : activeOption}
487
560
  aria-autocomplete="list"
488
561
  aria-invalid={field.isInvalid || undefined}
489
562
  aria-describedby={mergeDescribedBy(field.describedBy, locked && lock.reasonId)}
@@ -540,30 +613,17 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
540
613
  }}
541
614
  onKeyDown={(e) => {
542
615
  if (locked) return lockedKeyDown(e);
543
- // Disabled rows are passed over; Up from "nothing highlighted" lands on
544
- // the first takeable row, as it always landed on row 0. The create row is
545
- // the last row the arrows reach.
546
- if (e.key === "ArrowDown") {
547
- e.preventDefault();
548
- setOpen(true);
549
- setActive((i) => stepEnabled(rows, i, 1));
550
- } else if (e.key === "ArrowUp") {
551
- e.preventDefault();
552
- setActive((i) => (i < 0 ? stepEnabled(rows, -1, 1) : stepEnabled(rows, i, -1)));
553
- } else if (e.key === "Enter") {
554
- // An IME's Enter takes nothing, and judges no loose text (BUG-9).
555
- if (isImeEnter(e)) return;
556
- if (open && isOptionEnabled(rows[active])) {
557
- e.preventDefault();
558
- if (active === createIndex && showCreate) create();
559
- else take(matches[active]);
560
- } else {
561
- reconcile();
562
- }
563
- } else if (e.key === "Escape") {
616
+ listKeyDown(e);
617
+ if (e.key === "Escape") {
564
618
  // A showing list takes the key and stops it — see the twin in
565
619
  // {@link Combobox} (round 0.34 BUG-1).
566
620
  if (showing && takeEscape(e)) return;
621
+ // With no list, putting loose text back is this field's own undo step,
622
+ // and the step is all the key does: claimed, so the dialog around the
623
+ // field stays — it closed with the form in it (refactor audit
624
+ // 2026-10-30, INP-5; ChipInput's draft is the rule). With nothing to
625
+ // undo the key goes on, as before.
626
+ if (text !== null && text !== (selected?.label ?? "")) claimEscape(e);
567
627
  setText(null);
568
628
  close();
569
629
  } else if (e.key === "Tab") {
@@ -637,12 +697,13 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
637
697
  )}
638
698
  <FieldCaption parts={hintParts} />
639
699
  {field.errorEl}
700
+ {/* The live status — see `useTypedListStatus` for where it goes and why. */}
701
+ {!isPhone && statusRegion}
640
702
  {isPhone && (
641
703
  <PickerSheet
642
704
  open={open && !inert}
643
- // Closing without choosing keeps the value: `text` was never emptied, so
644
- // reconcile has nothing to undo — it just puts the label back.
645
- onClose={reconcile}
705
+ // Closing without choosing keeps the value — see `dismissSheet`.
706
+ onClose={dismissSheet}
646
707
  title={sheetTitle ?? label}
647
708
  query={sheetQuery}
648
709
  onQueryChange={(v) => {
@@ -652,121 +713,104 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
652
713
  searchPlaceholder={searchPlaceholder ?? placeholder ?? labels.search}
653
714
  inputRef={sheetInputRef}
654
715
  closeLabel={closeLabel}
716
+ // The field's own keys, in the box focus is in while the sheet is up: arrows
717
+ // and Enter there did nothing (INP-6, as BUG-5 gave the panel pickers).
718
+ onSearchKeyDown={listKeyDown}
719
+ listboxId={listboxId}
720
+ activeId={activeOption}
655
721
  >
656
722
  <ul id={listboxId} role="listbox">
657
- {matches.map((o, i) => (
658
- // Keyed by group AND value, like combobox-core.tsx: an option may
659
- // deliberately appear twice (see `reconcile`), and a bare value key
660
- // would collide.
661
- <Fragment key={`${o.group ?? ""}|${String(o.value)}`}>
662
- {o.group && o.group !== matches[i - 1]?.group && (
663
- <li
664
- role="presentation"
665
- className={cn(
666
- GROUP_HEADING_STICKY,
667
- "px-4 pb-0.5 pt-3 text-caption font-semibold uppercase tracking-wide text-muted",
668
- )}
669
- >
670
- {o.group}
671
- </li>
672
- )}
673
- <li role="presentation">
674
- <button
675
- type="button"
676
- role="option"
677
- aria-selected={o.value === value}
678
- aria-disabled={o.disabled || undefined}
679
- onClick={() => take(o)}
680
- className={cn(
681
- SHEET_ROW_CLASS,
682
- o.value === value && "font-medium",
683
- o.disabled && DISABLED_ROW_CLASS,
684
- )}
685
- >
686
- {o.label}
687
- </button>
688
- </li>
689
- </Fragment>
723
+ {groupedRows(true, (o, i) => (
724
+ <li role="presentation">
725
+ <button
726
+ type="button"
727
+ id={optionId(i)}
728
+ role="option"
729
+ aria-selected={o.value === value}
730
+ aria-disabled={o.disabled || undefined}
731
+ onClick={() => take(o)}
732
+ className={cn(
733
+ SHEET_ROW_CLASS,
734
+ // The row the sheet's arrows are on.
735
+ i === active && !o.disabled && "bg-active",
736
+ o.value === value && "font-medium",
737
+ o.disabled && DISABLED_ROW_CLASS,
738
+ )}
739
+ >
740
+ {o.label}
741
+ </button>
742
+ </li>
690
743
  ))}
691
744
  {showCreate && (
692
745
  <li role="presentation">
693
746
  <button
694
747
  type="button"
748
+ id={optionId(createIndex)}
695
749
  role="option"
696
750
  // An action, never chosen — see `onCreate`.
697
751
  aria-selected={false}
698
752
  aria-disabled={createLocked || undefined}
699
753
  onClick={create}
700
- className={cn(SHEET_ROW_CLASS, CREATE_ROW_CLASS, createLocked && DISABLED_ROW_CLASS)}
754
+ className={cn(
755
+ SHEET_ROW_CLASS,
756
+ CREATE_ROW_CLASS,
757
+ active === createIndex && !createLocked && "bg-active",
758
+ createLocked && DISABLED_ROW_CLASS,
759
+ )}
701
760
  >
702
761
  {createRowContent}
703
762
  </button>
704
763
  </li>
705
764
  )}
706
765
  {/* "Nothing matched" only when there is nothing to do either: with a create
707
- row the list is not empty, it is offering to fill itself. */}
766
+ row the list is not empty, it is offering to fill itself. A picture: the
767
+ status below says it to a reader. */}
708
768
  {matches.length === 0 && !showCreate && (
709
- <li className="px-4 py-3 text-sm text-muted">{labels.noResults}</li>
769
+ <li aria-hidden className="px-4 py-3 text-sm text-muted">
770
+ {labels.noResults}
771
+ </li>
710
772
  )}
711
773
  </ul>
774
+ {statusRegion}
712
775
  </PickerSheet>
713
776
  )}
714
777
  {showing && (
715
778
  <SuggestionList id={listboxId} anchorRef={fieldRef} panelRef={panelRef}>
716
- {matches.map((o, i) => (
717
- // A group heading is emitted at each group boundary rather than repeating
718
- // the group on every row (feedback #136). `matches` is group-contiguous,
719
- // so comparing with the previous row is enough. Fragment key sits here;
720
- // the heading and the option carry their own list semantics — keyed by
721
- // group AND value, because an option may deliberately appear twice (see
722
- // `reconcile`).
723
- <Fragment key={`${o.group ?? ""}|${String(o.value)}`}>
724
- {o.group && o.group !== matches[i - 1]?.group && (
725
- <li
726
- role="presentation"
727
- className={cn(
728
- GROUP_HEADING_STICKY,
729
- "px-3 pb-0.5 pt-2 text-caption font-semibold uppercase tracking-wide text-muted first:pt-1",
730
- )}
731
- >
732
- {o.group}
733
- </li>
734
- )}
735
- <li role="presentation">
736
- <button
737
- type="button"
738
- id={optionId(i)}
739
- // See {@link Combobox}: the role rides the button, `aria-selected`
740
- // is the CHOSEN row, and the keyboard's row is the field's
741
- // `aria-activedescendant`.
742
- role="option"
743
- aria-selected={o.value === value}
744
- aria-disabled={o.disabled || undefined}
745
- tabIndex={-1}
746
- onMouseDown={(e) => {
747
- // mousedown (not click) so the input's blur can't close the
748
- // list before the selection registers. Prevented on a disabled
749
- // row too, so pressing one leaves the field focused and open.
750
- e.preventDefault();
751
- take(o);
752
- }}
753
- onMouseEnter={() => {
754
- if (!o.disabled) setActive(i);
755
- }}
756
- className={cn(
757
- rowClass(i === active && !o.disabled),
758
- o.disabled && DISABLED_ROW_CLASS,
759
- // Indented under its heading, so the hierarchy is readable at a
760
- // glance instead of inferred from grey trailing text.
761
- o.group && "ps-6",
762
- o.value === value && "font-medium",
763
- )}
764
- >
765
- {o.label}
766
- {o.sublabel && <span className="ms-2 text-xs text-placeholder">{o.sublabel}</span>}
767
- </button>
768
- </li>
769
- </Fragment>
779
+ {groupedRows(false, (o, i) => (
780
+ <li role="presentation">
781
+ <button
782
+ type="button"
783
+ id={optionId(i)}
784
+ // See {@link Combobox}: the role rides the button, `aria-selected` is the
785
+ // CHOSEN row, and the keyboard's row is the field's
786
+ // `aria-activedescendant`.
787
+ role="option"
788
+ aria-selected={o.value === value}
789
+ aria-disabled={o.disabled || undefined}
790
+ tabIndex={-1}
791
+ onMouseDown={(e) => {
792
+ // mousedown (not click) so the input's blur can't close the list
793
+ // before the selection registers. Prevented on a disabled row too, so
794
+ // pressing one leaves the field focused and open.
795
+ e.preventDefault();
796
+ take(o);
797
+ }}
798
+ onMouseEnter={() => {
799
+ if (!o.disabled) setActive(i);
800
+ }}
801
+ className={cn(
802
+ rowClass(i === active && !o.disabled),
803
+ o.disabled && DISABLED_ROW_CLASS,
804
+ // Indented under its heading, so the hierarchy is readable at a glance
805
+ // instead of inferred from grey trailing text.
806
+ o.group && "ps-6",
807
+ o.value === value && "font-medium",
808
+ )}
809
+ >
810
+ {o.label}
811
+ {o.sublabel && <span className="ms-2 text-xs text-placeholder">{o.sublabel}</span>}
812
+ </button>
813
+ </li>
770
814
  ))}
771
815
  {showCreate && (
772
816
  <li role="presentation">
@@ -17,7 +17,7 @@ import {
17
17
  useFieldHint,
18
18
  useLockReason,
19
19
  } from "./field-parts";
20
- import { DEFAULT_PASSWORD_REVEAL_LABELS } from "./ui-labels";
20
+ import { DEFAULT_PASSWORD_REVEAL_LABELS } from "./field-base-labels";
21
21
  import {
22
22
  CharacterCount,
23
23
  FIELD_BASE,