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