@eifi1/ui-kit 0.33.1 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1534) hide show
  1. package/README.md +444 -282
  2. package/dist/account/account-parts.d.ts +6 -8
  3. package/dist/account/account-parts.js +1 -2
  4. package/dist/account/account-parts.js.map +1 -1
  5. package/dist/{components → account}/account-settings-labels.d.ts +16 -10
  6. package/dist/{components → account}/account-settings-labels.js +3 -1
  7. package/dist/account/account-settings-labels.js.map +1 -0
  8. package/dist/{components → account}/account-settings.d.ts +53 -23
  9. package/dist/{components → account}/account-settings.js +97 -26
  10. package/dist/account/account-settings.js.map +1 -0
  11. package/dist/account/data-export-setting-labels.d.ts +2 -0
  12. package/dist/account/data-export-setting-labels.js +15 -0
  13. package/dist/account/data-export-setting-labels.js.map +1 -0
  14. package/dist/account/data-export-setting.d.ts +9 -11
  15. package/dist/account/data-export-setting.js +11 -27
  16. package/dist/account/data-export-setting.js.map +1 -1
  17. package/dist/account/delete-account-setting-labels.d.ts +2 -0
  18. package/dist/account/delete-account-setting-labels.js +23 -0
  19. package/dist/account/delete-account-setting-labels.js.map +1 -0
  20. package/dist/account/delete-account-setting.d.ts +132 -101
  21. package/dist/account/delete-account-setting.js +7 -23
  22. package/dist/account/delete-account-setting.js.map +1 -1
  23. package/dist/account/email-change-setting-labels.d.ts +2 -0
  24. package/dist/account/email-change-setting-labels.js +28 -0
  25. package/dist/account/email-change-setting-labels.js.map +1 -0
  26. package/dist/account/email-change-setting.d.ts +10 -12
  27. package/dist/account/email-change-setting.js +11 -30
  28. package/dist/account/email-change-setting.js.map +1 -1
  29. package/dist/{components → account}/passkeys-setting.d.ts +9 -12
  30. package/dist/{components → account}/passkeys-setting.js +10 -7
  31. package/dist/account/passkeys-setting.js.map +1 -0
  32. package/dist/account/sessions-setting-labels.d.ts +2 -0
  33. package/dist/account/sessions-setting-labels.js +22 -0
  34. package/dist/account/sessions-setting-labels.js.map +1 -0
  35. package/dist/account/sessions-setting.d.ts +12 -14
  36. package/dist/account/sessions-setting.js +8 -23
  37. package/dist/account/sessions-setting.js.map +1 -1
  38. package/dist/admin/admin-action-confirm-labels.d.ts +2 -0
  39. package/dist/admin/admin-action-confirm-labels.js +16 -0
  40. package/dist/admin/admin-action-confirm-labels.js.map +1 -0
  41. package/dist/admin/admin-action-confirm.d.ts +156 -101
  42. package/dist/admin/admin-action-confirm.js +17 -22
  43. package/dist/admin/admin-action-confirm.js.map +1 -1
  44. package/dist/admin/admin-action-log-labels.d.ts +2 -0
  45. package/dist/admin/admin-action-log-labels.js +73 -0
  46. package/dist/admin/admin-action-log-labels.js.map +1 -0
  47. package/dist/admin/admin-action-log.d.ts +98 -22
  48. package/dist/admin/admin-action-log.js +48 -45
  49. package/dist/admin/admin-action-log.js.map +1 -1
  50. package/dist/admin/admin-parts.d.ts +7 -14
  51. package/dist/admin/admin-parts.js +0 -4
  52. package/dist/admin/admin-parts.js.map +1 -1
  53. package/dist/admin/invitations-panel-labels.d.ts +2 -0
  54. package/dist/admin/invitations-panel-labels.js +29 -0
  55. package/dist/admin/invitations-panel-labels.js.map +1 -0
  56. package/dist/admin/invitations-panel.d.ts +167 -101
  57. package/dist/admin/invitations-panel.js +12 -31
  58. package/dist/admin/invitations-panel.js.map +1 -1
  59. package/dist/admin/plan-change-labels.d.ts +2 -0
  60. package/dist/admin/plan-change-labels.js +22 -0
  61. package/dist/admin/plan-change-labels.js.map +1 -0
  62. package/dist/admin/plan-change.d.ts +244 -101
  63. package/dist/admin/plan-change.js +16 -24
  64. package/dist/admin/plan-change.js.map +1 -1
  65. package/dist/admin/reviewer-scope-editor-labels.d.ts +2 -0
  66. package/dist/admin/reviewer-scope-editor-labels.js +14 -0
  67. package/dist/admin/reviewer-scope-editor-labels.js.map +1 -0
  68. package/dist/admin/reviewer-scope-editor.d.ts +95 -101
  69. package/dist/admin/reviewer-scope-editor.js +5 -13
  70. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  71. package/dist/admin/role-select-labels.d.ts +2 -0
  72. package/dist/admin/role-select-labels.js +15 -0
  73. package/dist/admin/role-select-labels.js.map +1 -0
  74. package/dist/admin/role-select.d.ts +136 -101
  75. package/dist/admin/role-select.js +7 -18
  76. package/dist/admin/role-select.js.map +1 -1
  77. package/dist/admin/transfer-ownership-dialog-labels.d.ts +2 -0
  78. package/dist/admin/transfer-ownership-dialog-labels.js +18 -0
  79. package/dist/admin/transfer-ownership-dialog-labels.js.map +1 -0
  80. package/dist/admin/transfer-ownership-dialog.d.ts +81 -101
  81. package/dist/admin/transfer-ownership-dialog.js +3 -15
  82. package/dist/admin/transfer-ownership-dialog.js.map +1 -1
  83. package/dist/admin/user-roster-labels.d.ts +2 -0
  84. package/dist/admin/user-roster-labels.js +16 -0
  85. package/dist/admin/user-roster-labels.js.map +1 -0
  86. package/dist/admin/user-roster.d.ts +225 -101
  87. package/dist/admin/user-roster.js +4 -14
  88. package/dist/admin/user-roster.js.map +1 -1
  89. package/dist/auth/accept-invitation-labels.d.ts +2 -0
  90. package/dist/auth/accept-invitation-labels.js +20 -0
  91. package/dist/auth/accept-invitation-labels.js.map +1 -0
  92. package/dist/auth/accept-invitation.d.ts +11 -13
  93. package/dist/auth/accept-invitation.js +3 -16
  94. package/dist/auth/accept-invitation.js.map +1 -1
  95. package/dist/auth/auth-errors.d.ts +34 -23
  96. package/dist/auth/auth-errors.js +8 -4
  97. package/dist/auth/auth-errors.js.map +1 -1
  98. package/dist/auth/complete-name-dialog-labels.d.ts +2 -0
  99. package/dist/auth/complete-name-dialog-labels.js +14 -0
  100. package/dist/auth/complete-name-dialog-labels.js.map +1 -0
  101. package/dist/auth/complete-name-dialog.d.ts +9 -11
  102. package/dist/auth/complete-name-dialog.js +4 -11
  103. package/dist/auth/complete-name-dialog.js.map +1 -1
  104. package/dist/auth/email-tag.d.ts +2 -4
  105. package/dist/auth/forgot-password-form-labels.d.ts +3 -0
  106. package/dist/auth/forgot-password-form-labels.js +17 -0
  107. package/dist/auth/forgot-password-form-labels.js.map +1 -0
  108. package/dist/auth/forgot-password-form.d.ts +9 -12
  109. package/dist/auth/forgot-password-form.js +6 -15
  110. package/dist/auth/forgot-password-form.js.map +1 -1
  111. package/dist/auth/form-rules.d.ts +5 -7
  112. package/dist/auth/new-password-fields.d.ts +4 -8
  113. package/dist/auth/new-password-fields.js +1 -1
  114. package/dist/auth/new-password-fields.js.map +1 -1
  115. package/dist/auth/not-found-page-labels.d.ts +2 -0
  116. package/dist/auth/not-found-page-labels.js +11 -0
  117. package/dist/auth/not-found-page-labels.js.map +1 -0
  118. package/dist/auth/not-found-page.d.ts +9 -11
  119. package/dist/auth/not-found-page.js +5 -10
  120. package/dist/auth/not-found-page.js.map +1 -1
  121. package/dist/auth/register-form-labels.d.ts +3 -0
  122. package/dist/auth/register-form-labels.js +28 -0
  123. package/dist/auth/register-form-labels.js.map +1 -0
  124. package/dist/auth/register-form.d.ts +174 -101
  125. package/dist/auth/register-form.js +11 -31
  126. package/dist/auth/register-form.js.map +1 -1
  127. package/dist/auth/reset-password-form-labels.d.ts +3 -0
  128. package/dist/auth/reset-password-form-labels.js +24 -0
  129. package/dist/auth/reset-password-form-labels.js.map +1 -0
  130. package/dist/auth/reset-password-form.d.ts +12 -15
  131. package/dist/auth/reset-password-form.js +6 -22
  132. package/dist/auth/reset-password-form.js.map +1 -1
  133. package/dist/auth/sign-in-form-labels.d.ts +3 -0
  134. package/dist/auth/sign-in-form-labels.js +42 -0
  135. package/dist/auth/sign-in-form-labels.js.map +1 -0
  136. package/dist/auth/sign-in-form.d.ts +15 -19
  137. package/dist/auth/sign-in-form.js +12 -46
  138. package/dist/auth/sign-in-form.js.map +1 -1
  139. package/dist/auth/status-parts.d.ts +13 -17
  140. package/dist/auth/status-parts.js +3 -3
  141. package/dist/auth/status-parts.js.map +1 -1
  142. package/dist/auth/verify-email-labels.d.ts +2 -0
  143. package/dist/auth/verify-email-labels.js +25 -0
  144. package/dist/auth/verify-email-labels.js.map +1 -0
  145. package/dist/auth/verify-email.d.ts +15 -17
  146. package/dist/auth/verify-email.js +4 -21
  147. package/dist/auth/verify-email.js.map +1 -1
  148. package/dist/billing/billing-banner.d.ts +8 -109
  149. package/dist/billing/billing-banner.js +2 -1
  150. package/dist/billing/billing-banner.js.map +1 -1
  151. package/dist/billing/billing-labels.d.ts +168 -101
  152. package/dist/billing/billing-labels.js.map +1 -1
  153. package/dist/billing/billing-lock.d.ts +10 -110
  154. package/dist/billing/billing-overview.d.ts +7 -109
  155. package/dist/billing/billing-standing.d.ts +6 -108
  156. package/dist/billing/checkout-processing.d.ts +8 -111
  157. package/dist/billing/checkout-processing.js +2 -9
  158. package/dist/billing/checkout-processing.js.map +1 -1
  159. package/dist/billing/checkout-return.d.ts +5 -7
  160. package/dist/billing/pay-page.d.ts +15 -117
  161. package/dist/billing/plan-card.d.ts +14 -115
  162. package/dist/billing/plan-card.js +15 -13
  163. package/dist/billing/plan-card.js.map +1 -1
  164. package/dist/billing/plan-limit-notice.d.ts +8 -109
  165. package/dist/billing/plan-limit-notice.js +1 -1
  166. package/dist/billing/plan-limit-notice.js.map +1 -1
  167. package/dist/billing/plan-limit-toast.d.ts +6 -107
  168. package/dist/billing/plan-limit.d.ts +2 -4
  169. package/dist/billing/plan-price.d.ts +10 -12
  170. package/dist/billing/subscription-actions.d.ts +6 -109
  171. package/dist/billing/subscription-actions.js +2 -2
  172. package/dist/billing/subscription-actions.js.map +1 -1
  173. package/dist/billing/subscription-status-chip.d.ts +7 -108
  174. package/dist/chart.d.ts +12 -113
  175. package/dist/chart.js +4 -0
  176. package/dist/chart.js.map +1 -1
  177. package/dist/components/account-chips-labels.d.ts +10 -0
  178. package/dist/components/account-chips-labels.js +15 -0
  179. package/dist/components/account-chips-labels.js.map +1 -0
  180. package/dist/components/account-chips.d.ts +22 -44
  181. package/dist/components/account-chips.js +9 -14
  182. package/dist/components/account-chips.js.map +1 -1
  183. package/dist/components/alert-banner.d.ts +15 -11
  184. package/dist/components/alert-banner.js +28 -18
  185. package/dist/components/alert-banner.js.map +1 -1
  186. package/dist/components/amount-input.d.ts +66 -110
  187. package/dist/components/amount-input.js +259 -283
  188. package/dist/components/amount-input.js.map +1 -1
  189. package/dist/components/appearance-labels.d.ts +6 -10
  190. package/dist/components/appearance-labels.js.map +1 -1
  191. package/dist/components/authed-image-labels.d.ts +2 -0
  192. package/dist/components/authed-image-labels.js +10 -0
  193. package/dist/components/authed-image-labels.js.map +1 -0
  194. package/dist/components/authed-image.d.ts +11 -13
  195. package/dist/components/authed-image.js +2 -6
  196. package/dist/components/authed-image.js.map +1 -1
  197. package/dist/components/autocomplete.d.ts +13 -11
  198. package/dist/components/autocomplete.js +33 -28
  199. package/dist/components/autocomplete.js.map +1 -1
  200. package/dist/components/breadcrumbs-labels.d.ts +2 -0
  201. package/dist/components/breadcrumbs-labels.js +9 -0
  202. package/dist/components/breadcrumbs-labels.js.map +1 -0
  203. package/dist/components/breadcrumbs.d.ts +10 -12
  204. package/dist/components/breadcrumbs.js +7 -10
  205. package/dist/components/breadcrumbs.js.map +1 -1
  206. package/dist/components/bulk-action-bar-labels.d.ts +2 -0
  207. package/dist/components/bulk-action-bar-labels.js +10 -0
  208. package/dist/components/bulk-action-bar-labels.js.map +1 -0
  209. package/dist/components/bulk-action-bar.d.ts +10 -12
  210. package/dist/components/bulk-action-bar.js +9 -12
  211. package/dist/components/bulk-action-bar.js.map +1 -1
  212. package/dist/components/button-group.d.ts +7 -110
  213. package/dist/components/button-group.js +5 -5
  214. package/dist/components/button-group.js.map +1 -1
  215. package/dist/components/button-look.d.ts +88 -0
  216. package/dist/components/button-look.js +91 -0
  217. package/dist/components/button-look.js.map +1 -0
  218. package/dist/components/button.d.ts +153 -0
  219. package/dist/components/button.js +165 -0
  220. package/dist/components/button.js.map +1 -0
  221. package/dist/components/calculator.d.ts +8 -107
  222. package/dist/components/calculator.js +10 -7
  223. package/dist/components/calculator.js.map +1 -1
  224. package/dist/components/calendar-heatmap-labels.d.ts +3 -0
  225. package/dist/components/calendar-heatmap-labels.js +12 -0
  226. package/dist/components/calendar-heatmap-labels.js.map +1 -0
  227. package/dist/components/calendar-heatmap.d.ts +13 -16
  228. package/dist/components/calendar-heatmap.js +7 -13
  229. package/dist/components/calendar-heatmap.js.map +1 -1
  230. package/dist/components/card.d.ts +145 -0
  231. package/dist/components/card.js +186 -0
  232. package/dist/components/card.js.map +1 -0
  233. package/dist/components/chart-height.d.ts +4 -7
  234. package/dist/components/chart-zoom-core.d.ts +202 -0
  235. package/dist/components/chart-zoom-core.js +334 -0
  236. package/dist/components/chart-zoom-core.js.map +1 -0
  237. package/dist/components/chart-zoom.d.ts +39 -205
  238. package/dist/components/chart-zoom.js +15 -316
  239. package/dist/components/chart-zoom.js.map +1 -1
  240. package/dist/components/chart.d.ts +11 -15
  241. package/dist/components/chart.js +11 -11
  242. package/dist/components/chart.js.map +1 -1
  243. package/dist/components/checkbox-group.d.ts +6 -10
  244. package/dist/components/checkbox-group.js +10 -9
  245. package/dist/components/checkbox-group.js.map +1 -1
  246. package/dist/components/checkbox.d.ts +8 -12
  247. package/dist/components/checkbox.js +20 -18
  248. package/dist/components/checkbox.js.map +1 -1
  249. package/dist/components/chip-input.d.ts +73 -0
  250. package/dist/components/chip-input.js +224 -0
  251. package/dist/components/chip-input.js.map +1 -0
  252. package/dist/components/chip-labels.d.ts +2 -0
  253. package/dist/components/chip-labels.js +12 -0
  254. package/dist/components/chip-labels.js.map +1 -0
  255. package/dist/components/chip.d.ts +18 -93
  256. package/dist/components/chip.js +74 -426
  257. package/dist/components/chip.js.map +1 -1
  258. package/dist/components/choice-card.d.ts +21 -18
  259. package/dist/components/choice-card.js +45 -45
  260. package/dist/components/choice-card.js.map +1 -1
  261. package/dist/components/column-mapper-labels.d.ts +5 -0
  262. package/dist/components/column-mapper-labels.js +34 -0
  263. package/dist/components/column-mapper-labels.js.map +1 -0
  264. package/dist/components/column-mapper.d.ts +15 -17
  265. package/dist/components/column-mapper.js +11 -37
  266. package/dist/components/column-mapper.js.map +1 -1
  267. package/dist/components/combobox-core.d.ts +79 -40
  268. package/dist/components/combobox-core.js +187 -121
  269. package/dist/components/combobox-core.js.map +1 -1
  270. package/dist/components/combobox-suggestions.d.ts +76 -0
  271. package/dist/components/combobox-suggestions.js +56 -0
  272. package/dist/components/combobox-suggestions.js.map +1 -0
  273. package/dist/components/combobox.d.ts +14 -159
  274. package/dist/components/combobox.js +40 -507
  275. package/dist/components/combobox.js.map +1 -1
  276. package/dist/components/confirm-dialog-labels.d.ts +7 -0
  277. package/dist/components/confirm-dialog-labels.js +10 -0
  278. package/dist/components/confirm-dialog-labels.js.map +1 -0
  279. package/dist/components/confirm-dialog.d.ts +165 -101
  280. package/dist/components/confirm-dialog.js +2 -6
  281. package/dist/components/confirm-dialog.js.map +1 -1
  282. package/dist/components/copy-button-labels.d.ts +2 -0
  283. package/dist/components/copy-button-labels.js +12 -0
  284. package/dist/components/copy-button-labels.js.map +1 -0
  285. package/dist/components/copy-button.d.ts +70 -101
  286. package/dist/components/copy-button.js +4 -9
  287. package/dist/components/copy-button.js.map +1 -1
  288. package/dist/components/country-select-labels.d.ts +2 -0
  289. package/dist/components/country-select-labels.js +10 -0
  290. package/dist/components/country-select-labels.js.map +1 -0
  291. package/dist/components/country-select.d.ts +18 -15
  292. package/dist/components/country-select.js +49 -64
  293. package/dist/components/country-select.js.map +1 -1
  294. package/dist/components/currency-option-list.d.ts +63 -0
  295. package/dist/components/currency-option-list.js +135 -0
  296. package/dist/components/currency-option-list.js.map +1 -0
  297. package/dist/components/currency-select.d.ts +10 -30
  298. package/dist/components/currency-select.js +50 -133
  299. package/dist/components/currency-select.js.map +1 -1
  300. package/dist/components/danger-confirm-labels.d.ts +14 -0
  301. package/dist/components/danger-confirm-labels.js +17 -0
  302. package/dist/components/danger-confirm-labels.js.map +1 -0
  303. package/dist/components/danger-confirm.d.ts +448 -101
  304. package/dist/components/danger-confirm.js +40 -46
  305. package/dist/components/danger-confirm.js.map +1 -1
  306. package/dist/components/data-table-cells.d.ts +9 -24
  307. package/dist/components/data-table-cells.js +1 -1
  308. package/dist/components/data-table-cells.js.map +1 -1
  309. package/dist/components/data-table-column-settings.d.ts +16 -0
  310. package/dist/components/data-table-column-settings.js +119 -0
  311. package/dist/components/data-table-column-settings.js.map +1 -0
  312. package/dist/components/data-table-filter-popover.d.ts +5 -19
  313. package/dist/components/data-table-filter-popover.js +39 -22
  314. package/dist/components/data-table-filter-popover.js.map +1 -1
  315. package/dist/components/data-table-filters.d.ts +93 -15
  316. package/dist/components/data-table-filters.js +22 -7
  317. package/dist/components/data-table-filters.js.map +1 -1
  318. package/dist/components/data-table-head.d.ts +36 -0
  319. package/dist/components/data-table-head.js +190 -0
  320. package/dist/components/data-table-head.js.map +1 -0
  321. package/dist/components/data-table-labels.d.ts +124 -15
  322. package/dist/components/data-table-labels.js +9 -5
  323. package/dist/components/data-table-labels.js.map +1 -1
  324. package/dist/components/data-table-mobile.d.ts +106 -0
  325. package/dist/components/data-table-mobile.js +412 -0
  326. package/dist/components/data-table-mobile.js.map +1 -0
  327. package/dist/components/data-table-pagination.d.ts +6 -21
  328. package/dist/components/data-table-pagination.js +7 -7
  329. package/dist/components/data-table-pagination.js.map +1 -1
  330. package/dist/components/data-table-resize.d.ts +37 -0
  331. package/dist/components/data-table-resize.js +103 -0
  332. package/dist/components/data-table-resize.js.map +1 -0
  333. package/dist/components/data-table-row-actions.d.ts +24 -0
  334. package/dist/components/data-table-row-actions.js +95 -0
  335. package/dist/components/data-table-row-actions.js.map +1 -0
  336. package/dist/components/data-table-selection.d.ts +21 -0
  337. package/dist/components/data-table-selection.js +30 -0
  338. package/dist/components/data-table-selection.js.map +1 -0
  339. package/dist/components/data-table-shared.d.ts +77 -0
  340. package/dist/components/data-table-shared.js +77 -0
  341. package/dist/components/data-table-shared.js.map +1 -0
  342. package/dist/components/data-table-sort.d.ts +8 -10
  343. package/dist/components/data-table.d.ts +603 -15
  344. package/dist/components/data-table.js +134 -927
  345. package/dist/components/data-table.js.map +1 -1
  346. package/dist/components/date-field.d.ts +203 -0
  347. package/dist/components/date-field.js +270 -0
  348. package/dist/components/date-field.js.map +1 -0
  349. package/dist/components/date-picker.d.ts +6 -261
  350. package/dist/components/date-picker.js +24 -760
  351. package/dist/components/date-picker.js.map +1 -1
  352. package/dist/components/date-range-picker.d.ts +125 -0
  353. package/dist/components/date-range-picker.js +261 -0
  354. package/dist/components/date-range-picker.js.map +1 -0
  355. package/dist/components/description-list-labels.d.ts +2 -0
  356. package/dist/components/description-list-labels.js +8 -0
  357. package/dist/components/description-list-labels.js.map +1 -0
  358. package/dist/components/description-list.d.ts +13 -15
  359. package/dist/components/description-list.js +17 -11
  360. package/dist/components/description-list.js.map +1 -1
  361. package/dist/components/dialog-frame-labels.d.ts +2 -0
  362. package/dist/components/dialog-frame-labels.js +6 -0
  363. package/dist/components/dialog-frame-labels.js.map +1 -0
  364. package/dist/components/dialog-frame.d.ts +7 -11
  365. package/dist/components/dialog-frame.js +6 -6
  366. package/dist/components/dialog-frame.js.map +1 -1
  367. package/dist/components/disclosure.d.ts +6 -10
  368. package/dist/components/disclosure.js +11 -11
  369. package/dist/components/disclosure.js.map +1 -1
  370. package/dist/components/dropdown.d.ts +55 -27
  371. package/dist/components/dropdown.js +53 -30
  372. package/dist/components/dropdown.js.map +1 -1
  373. package/dist/components/empty-state.d.ts +64 -0
  374. package/dist/components/empty-state.js +70 -0
  375. package/dist/components/empty-state.js.map +1 -0
  376. package/dist/components/entity-combobox.d.ts +10 -11
  377. package/dist/components/entity-combobox.js +14 -13
  378. package/dist/components/entity-combobox.js.map +1 -1
  379. package/dist/components/error-boundary-labels.d.ts +2 -0
  380. package/dist/components/error-boundary-labels.js +19 -0
  381. package/dist/components/error-boundary-labels.js.map +1 -0
  382. package/dist/components/error-boundary.d.ts +17 -17
  383. package/dist/components/error-boundary.js +5 -17
  384. package/dist/components/error-boundary.js.map +1 -1
  385. package/dist/components/facing-pair.d.ts +7 -116
  386. package/dist/components/facing-pair.js +1 -1
  387. package/dist/components/facing-pair.js.map +1 -1
  388. package/dist/components/field-base.d.ts +260 -0
  389. package/dist/components/field-base.js +228 -0
  390. package/dist/components/field-base.js.map +1 -0
  391. package/dist/components/field-parts.d.ts +188 -87
  392. package/dist/components/field-parts.js +60 -33
  393. package/dist/components/field-parts.js.map +1 -1
  394. package/dist/components/field-strip.d.ts +19 -28
  395. package/dist/components/field-strip.js +2 -2
  396. package/dist/components/field-strip.js.map +1 -1
  397. package/dist/components/field-sync-labels.d.ts +2 -0
  398. package/dist/components/field-sync-labels.js +12 -0
  399. package/dist/components/field-sync-labels.js.map +1 -0
  400. package/dist/components/field-sync.d.ts +20 -19
  401. package/dist/components/field-sync.js +4 -10
  402. package/dist/components/field-sync.js.map +1 -1
  403. package/dist/components/field.d.ts +45 -10
  404. package/dist/components/field.js +10 -8
  405. package/dist/components/field.js.map +1 -1
  406. package/dist/components/file-button.d.ts +85 -101
  407. package/dist/components/file-button.js +23 -169
  408. package/dist/components/file-button.js.map +1 -1
  409. package/dist/components/file-dropzone.d.ts +9 -110
  410. package/dist/components/file-dropzone.js +22 -22
  411. package/dist/components/file-dropzone.js.map +1 -1
  412. package/dist/components/floating-panel-labels.d.ts +2 -0
  413. package/dist/components/floating-panel-labels.js +9 -0
  414. package/dist/components/floating-panel-labels.js.map +1 -0
  415. package/dist/components/floating-panel.d.ts +17 -21
  416. package/dist/components/floating-panel.js +19 -18
  417. package/dist/components/floating-panel.js.map +1 -1
  418. package/dist/components/focus-ring.d.ts +9 -6
  419. package/dist/components/focus-ring.js +2 -2
  420. package/dist/components/focus-ring.js.map +1 -1
  421. package/dist/components/form-actions-labels.d.ts +2 -0
  422. package/dist/components/form-actions-labels.js +10 -0
  423. package/dist/components/form-actions-labels.js.map +1 -0
  424. package/dist/components/form-actions.d.ts +280 -101
  425. package/dist/components/form-actions.js +10 -20
  426. package/dist/components/form-actions.js.map +1 -1
  427. package/dist/components/full-bleed-dialog.d.ts +7 -8
  428. package/dist/components/full-bleed-dialog.js +14 -13
  429. package/dist/components/full-bleed-dialog.js.map +1 -1
  430. package/dist/components/grouped-picker.d.ts +21 -16
  431. package/dist/components/grouped-picker.js +76 -62
  432. package/dist/components/grouped-picker.js.map +1 -1
  433. package/dist/components/help-popover.d.ts +60 -0
  434. package/dist/components/help-popover.js +48 -0
  435. package/dist/components/help-popover.js.map +1 -0
  436. package/dist/components/hover-menu.d.ts +17 -16
  437. package/dist/components/hover-menu.js +18 -17
  438. package/dist/components/hover-menu.js.map +1 -1
  439. package/dist/components/iban-input-labels.d.ts +2 -0
  440. package/dist/components/iban-input-labels.js +13 -0
  441. package/dist/components/iban-input-labels.js.map +1 -0
  442. package/dist/components/iban-input.d.ts +73 -101
  443. package/dist/components/iban-input.js +22 -15
  444. package/dist/components/iban-input.js.map +1 -1
  445. package/dist/components/icon-button.d.ts +300 -0
  446. package/dist/components/icon-button.js +465 -0
  447. package/dist/components/icon-button.js.map +1 -0
  448. package/dist/components/icon-picker-labels.d.ts +2 -0
  449. package/dist/components/icon-picker-labels.js +12 -0
  450. package/dist/components/icon-picker-labels.js.map +1 -0
  451. package/dist/components/icon-picker.d.ts +13 -13
  452. package/dist/components/icon-picker.js +18 -17
  453. package/dist/components/icon-picker.js.map +1 -1
  454. package/dist/components/image-grid-labels.d.ts +2 -0
  455. package/dist/components/image-grid-labels.js +10 -0
  456. package/dist/components/image-grid-labels.js.map +1 -0
  457. package/dist/components/image-grid.d.ts +12 -14
  458. package/dist/components/image-grid.js +6 -10
  459. package/dist/components/image-grid.js.map +1 -1
  460. package/dist/components/inline-edit-field-labels.d.ts +2 -0
  461. package/dist/components/inline-edit-field-labels.js +10 -0
  462. package/dist/components/inline-edit-field-labels.js.map +1 -0
  463. package/dist/components/inline-edit-field.d.ts +11 -13
  464. package/dist/components/inline-edit-field.js +11 -13
  465. package/dist/components/inline-edit-field.js.map +1 -1
  466. package/dist/components/inline-entity-combobox.d.ts +155 -0
  467. package/dist/components/inline-entity-combobox.js +467 -0
  468. package/dist/components/inline-entity-combobox.js.map +1 -0
  469. package/dist/components/input.d.ts +98 -0
  470. package/dist/components/input.js +219 -0
  471. package/dist/components/input.js.map +1 -0
  472. package/dist/components/jump-calendar.d.ts +8 -0
  473. package/dist/components/jump-calendar.js +274 -0
  474. package/dist/components/jump-calendar.js.map +1 -0
  475. package/dist/components/language-select.d.ts +20 -111
  476. package/dist/components/language-select.js +12 -7
  477. package/dist/components/language-select.js.map +1 -1
  478. package/dist/components/legal-labels.d.ts +2 -0
  479. package/dist/components/legal-labels.js +100 -0
  480. package/dist/components/legal-labels.js.map +1 -0
  481. package/dist/components/legal-page.d.ts +17 -118
  482. package/dist/components/legal-page.js +2 -2
  483. package/dist/components/legal-page.js.map +1 -1
  484. package/dist/components/legal.d.ts +353 -101
  485. package/dist/components/legal.js +7 -101
  486. package/dist/components/legal.js.map +1 -1
  487. package/dist/components/lightbox-labels.d.ts +2 -0
  488. package/dist/components/lightbox-labels.js +17 -0
  489. package/dist/components/lightbox-labels.js.map +1 -0
  490. package/dist/components/lightbox.d.ts +12 -14
  491. package/dist/components/lightbox.js +9 -19
  492. package/dist/components/lightbox.js.map +1 -1
  493. package/dist/components/line-items-labels.d.ts +2 -0
  494. package/dist/components/line-items-labels.js +13 -0
  495. package/dist/components/line-items-labels.js.map +1 -0
  496. package/dist/components/line-items.d.ts +16 -18
  497. package/dist/components/line-items.js +18 -26
  498. package/dist/components/line-items.js.map +1 -1
  499. package/dist/components/list-labels.d.ts +2 -0
  500. package/dist/components/list-labels.js +9 -0
  501. package/dist/components/list-labels.js.map +1 -0
  502. package/dist/components/list.d.ts +32 -21
  503. package/dist/components/list.js +41 -25
  504. package/dist/components/list.js.map +1 -1
  505. package/dist/components/loading-state.d.ts +5 -9
  506. package/dist/components/loading-state.js +2 -2
  507. package/dist/components/loading-state.js.map +1 -1
  508. package/dist/components/measured-grid-labels.d.ts +4 -0
  509. package/dist/components/measured-grid-labels.js +21 -0
  510. package/dist/components/measured-grid-labels.js.map +1 -0
  511. package/dist/components/measured-grid.d.ts +13 -17
  512. package/dist/components/measured-grid.js +31 -50
  513. package/dist/components/measured-grid.js.map +1 -1
  514. package/dist/components/menu-item.d.ts +10 -10
  515. package/dist/components/menu-item.js +9 -9
  516. package/dist/components/menu-item.js.map +1 -1
  517. package/dist/components/mini-calendar-labels.d.ts +4 -0
  518. package/dist/components/mini-calendar-labels.js +14 -0
  519. package/dist/components/mini-calendar-labels.js.map +1 -0
  520. package/dist/components/mini-calendar.d.ts +10 -14
  521. package/dist/components/mini-calendar.js +22 -29
  522. package/dist/components/mini-calendar.js.map +1 -1
  523. package/dist/components/modal.d.ts +26 -18
  524. package/dist/components/modal.js +8 -11
  525. package/dist/components/modal.js.map +1 -1
  526. package/dist/components/money-draft.d.ts +34 -0
  527. package/dist/components/money-draft.js +39 -0
  528. package/dist/components/money-draft.js.map +1 -0
  529. package/dist/components/money-field.d.ts +13 -111
  530. package/dist/components/money-field.js +6 -22
  531. package/dist/components/money-field.js.map +1 -1
  532. package/dist/components/month-picker-labels.d.ts +5 -0
  533. package/dist/components/month-picker-labels.js +18 -0
  534. package/dist/components/month-picker-labels.js.map +1 -0
  535. package/dist/components/month-picker.d.ts +15 -13
  536. package/dist/components/month-picker.js +34 -32
  537. package/dist/components/month-picker.js.map +1 -1
  538. package/dist/components/multi-entity-combobox.d.ts +9 -11
  539. package/dist/components/multi-entity-combobox.js +14 -13
  540. package/dist/components/multi-entity-combobox.js.map +1 -1
  541. package/dist/components/multi-select.d.ts +81 -21
  542. package/dist/components/multi-select.js +171 -197
  543. package/dist/components/multi-select.js.map +1 -1
  544. package/dist/components/nav-pills.d.ts +9 -10
  545. package/dist/components/nav-pills.js +53 -42
  546. package/dist/components/nav-pills.js.map +1 -1
  547. package/dist/components/number-field.d.ts +6 -111
  548. package/dist/components/number-field.js +2 -3
  549. package/dist/components/number-field.js.map +1 -1
  550. package/dist/components/number-input.d.ts +30 -111
  551. package/dist/components/number-input.js +34 -66
  552. package/dist/components/number-input.js.map +1 -1
  553. package/dist/components/numeric-field.d.ts +85 -0
  554. package/dist/components/numeric-field.js +71 -0
  555. package/dist/components/numeric-field.js.map +1 -0
  556. package/dist/components/numpad-sheet.d.ts +5 -108
  557. package/dist/components/numpad-sheet.js +7 -7
  558. package/dist/components/numpad-sheet.js.map +1 -1
  559. package/dist/components/one-time-code-input.d.ts +6 -7
  560. package/dist/components/one-time-code-input.js +119 -124
  561. package/dist/components/one-time-code-input.js.map +1 -1
  562. package/dist/components/page-contents-labels.d.ts +2 -0
  563. package/dist/components/page-contents-labels.js +8 -0
  564. package/dist/components/page-contents-labels.js.map +1 -0
  565. package/dist/components/page-contents.d.ts +13 -15
  566. package/dist/components/page-contents.js +7 -9
  567. package/dist/components/page-contents.js.map +1 -1
  568. package/dist/components/page-header.d.ts +10 -10
  569. package/dist/components/page-header.js +3 -3
  570. package/dist/components/page-header.js.map +1 -1
  571. package/dist/components/password-strength-labels.d.ts +2 -0
  572. package/dist/components/password-strength-labels.js +21 -0
  573. package/dist/components/password-strength-labels.js.map +1 -0
  574. package/dist/components/password-strength.d.ts +15 -17
  575. package/dist/components/password-strength.js +7 -22
  576. package/dist/components/password-strength.js.map +1 -1
  577. package/dist/components/phone-input-labels.d.ts +2 -0
  578. package/dist/components/phone-input-labels.js +9 -0
  579. package/dist/components/phone-input-labels.js.map +1 -0
  580. package/dist/components/phone-input.d.ts +75 -101
  581. package/dist/components/phone-input.js +20 -23
  582. package/dist/components/phone-input.js.map +1 -1
  583. package/dist/components/picker-sheet.d.ts +20 -8
  584. package/dist/components/picker-sheet.js +22 -11
  585. package/dist/components/picker-sheet.js.map +1 -1
  586. package/dist/components/pie-chart-labels.d.ts +2 -4
  587. package/dist/components/pie-chart.d.ts +8 -11
  588. package/dist/components/pie-chart.js +5 -5
  589. package/dist/components/pie-chart.js.map +1 -1
  590. package/dist/components/popover-labels.d.ts +2 -0
  591. package/dist/components/popover-labels.js +11 -0
  592. package/dist/components/popover-labels.js.map +1 -0
  593. package/dist/components/popover.d.ts +13 -11
  594. package/dist/components/popover.js +15 -21
  595. package/dist/components/popover.js.map +1 -1
  596. package/dist/components/progress-bar-labels.d.ts +2 -0
  597. package/dist/components/progress-bar-labels.js +9 -0
  598. package/dist/components/progress-bar-labels.js.map +1 -0
  599. package/dist/components/progress-bar.d.ts +16 -15
  600. package/dist/components/progress-bar.js +22 -20
  601. package/dist/components/progress-bar.js.map +1 -1
  602. package/dist/components/qr-code.d.ts +4 -8
  603. package/dist/components/qr-code.js.map +1 -1
  604. package/dist/components/reauth-dialog-labels.d.ts +2 -0
  605. package/dist/components/reauth-dialog-labels.js +12 -0
  606. package/dist/components/reauth-dialog-labels.js.map +1 -0
  607. package/dist/components/reauth-dialog.d.ts +8 -10
  608. package/dist/components/reauth-dialog.js +3 -8
  609. package/dist/components/reauth-dialog.js.map +1 -1
  610. package/dist/components/row-actions-labels.d.ts +2 -0
  611. package/dist/components/row-actions-labels.js +9 -0
  612. package/dist/components/row-actions-labels.js.map +1 -0
  613. package/dist/components/row-actions.d.ts +224 -101
  614. package/dist/components/row-actions.js +4 -5
  615. package/dist/components/row-actions.js.map +1 -1
  616. package/dist/components/scroll-area.d.ts +6 -9
  617. package/dist/components/scroll-area.js +4 -10
  618. package/dist/components/scroll-area.js.map +1 -1
  619. package/dist/components/search-field.d.ts +12 -27
  620. package/dist/components/search-field.js +13 -16
  621. package/dist/components/search-field.js.map +1 -1
  622. package/dist/components/select.d.ts +69 -0
  623. package/dist/components/select.js +164 -0
  624. package/dist/components/select.js.map +1 -0
  625. package/dist/components/separator.d.ts +3 -7
  626. package/dist/components/separator.js.map +1 -1
  627. package/dist/components/series-chart-axes.d.ts +120 -0
  628. package/dist/components/series-chart-axes.js +164 -0
  629. package/dist/components/series-chart-axes.js.map +1 -0
  630. package/dist/components/series-chart-budget.d.ts +8 -9
  631. package/dist/components/series-chart-labels.d.ts +2 -4
  632. package/dist/components/series-chart-thin.d.ts +34 -0
  633. package/dist/components/series-chart-thin.js +103 -0
  634. package/dist/components/series-chart-thin.js.map +1 -0
  635. package/dist/components/series-chart-ticks.d.ts +9 -11
  636. package/dist/components/series-chart.d.ts +64 -214
  637. package/dist/components/series-chart.js +69 -160
  638. package/dist/components/series-chart.js.map +1 -1
  639. package/dist/components/server-wake-labels.d.ts +2 -0
  640. package/dist/components/server-wake-labels.js +9 -0
  641. package/dist/components/server-wake-labels.js.map +1 -0
  642. package/dist/components/server-wake.d.ts +32 -23
  643. package/dist/components/server-wake.js +15 -35
  644. package/dist/components/server-wake.js.map +1 -1
  645. package/dist/components/settings-fields.d.ts +46 -118
  646. package/dist/components/settings-fields.js +13 -3
  647. package/dist/components/settings-fields.js.map +1 -1
  648. package/dist/components/share-card-labels.d.ts +2 -0
  649. package/dist/components/share-card-labels.js +29 -0
  650. package/dist/components/share-card-labels.js.map +1 -0
  651. package/dist/components/share-card.d.ts +188 -101
  652. package/dist/components/share-card.js +16 -34
  653. package/dist/components/share-card.js.map +1 -1
  654. package/dist/components/sign-chip-labels.d.ts +2 -0
  655. package/dist/components/sign-chip-labels.js +11 -0
  656. package/dist/components/sign-chip-labels.js.map +1 -0
  657. package/dist/components/sign-chip.d.ts +7 -9
  658. package/dist/components/sign-chip.js +2 -7
  659. package/dist/components/sign-chip.js.map +1 -1
  660. package/dist/components/signature-pad-labels.d.ts +2 -0
  661. package/dist/components/signature-pad-labels.js +23 -0
  662. package/dist/components/signature-pad-labels.js.map +1 -0
  663. package/dist/components/signature-pad.d.ts +16 -15
  664. package/dist/components/signature-pad.js +22 -35
  665. package/dist/components/signature-pad.js.map +1 -1
  666. package/dist/components/signed-amount-labels.d.ts +2 -0
  667. package/dist/components/signed-amount-labels.js +9 -0
  668. package/dist/components/signed-amount-labels.js.map +1 -0
  669. package/dist/components/signed-amount.d.ts +19 -21
  670. package/dist/components/signed-amount.js +12 -15
  671. package/dist/components/signed-amount.js.map +1 -1
  672. package/dist/components/skeleton.d.ts +5 -9
  673. package/dist/components/skeleton.js +1 -1
  674. package/dist/components/skeleton.js.map +1 -1
  675. package/dist/components/slider.d.ts +16 -11
  676. package/dist/components/slider.js +23 -18
  677. package/dist/components/slider.js.map +1 -1
  678. package/dist/components/sparkline-labels.d.ts +2 -0
  679. package/dist/components/sparkline-labels.js +13 -0
  680. package/dist/components/sparkline-labels.js.map +1 -0
  681. package/dist/components/sparkline.d.ts +10 -12
  682. package/dist/components/sparkline.js +10 -17
  683. package/dist/components/sparkline.js.map +1 -1
  684. package/dist/components/spinner.d.ts +45 -0
  685. package/dist/components/spinner.js +39 -0
  686. package/dist/components/spinner.js.map +1 -0
  687. package/dist/components/stat-tile-labels.d.ts +2 -0
  688. package/dist/components/stat-tile-labels.js +14 -0
  689. package/dist/components/stat-tile-labels.js.map +1 -0
  690. package/dist/components/stat-tile.d.ts +15 -17
  691. package/dist/components/stat-tile.js +25 -32
  692. package/dist/components/stat-tile.js.map +1 -1
  693. package/dist/components/status-dot.d.ts +8 -20
  694. package/dist/components/status-dot.js +13 -12
  695. package/dist/components/status-dot.js.map +1 -1
  696. package/dist/components/swatch-picker-labels.d.ts +2 -0
  697. package/dist/components/swatch-picker-labels.js +9 -0
  698. package/dist/components/swatch-picker-labels.js.map +1 -0
  699. package/dist/components/swatch-picker.d.ts +14 -14
  700. package/dist/components/swatch-picker.js +14 -8
  701. package/dist/components/swatch-picker.js.map +1 -1
  702. package/dist/components/swipeable-row.d.ts +14 -27
  703. package/dist/components/swipeable-row.js +2 -2
  704. package/dist/components/swipeable-row.js.map +1 -1
  705. package/dist/components/switch.d.ts +10 -13
  706. package/dist/components/switch.js +13 -12
  707. package/dist/components/switch.js.map +1 -1
  708. package/dist/components/table.d.ts +28 -31
  709. package/dist/components/table.js +15 -15
  710. package/dist/components/table.js.map +1 -1
  711. package/dist/components/tabs.d.ts +182 -0
  712. package/dist/components/tabs.js +312 -0
  713. package/dist/components/tabs.js.map +1 -0
  714. package/dist/components/text-link.d.ts +17 -119
  715. package/dist/components/text-link.js +7 -7
  716. package/dist/components/text-link.js.map +1 -1
  717. package/dist/components/text.d.ts +14 -13
  718. package/dist/components/text.js +5 -5
  719. package/dist/components/text.js.map +1 -1
  720. package/dist/components/textarea.d.ts +20 -0
  721. package/dist/components/textarea.js +161 -0
  722. package/dist/components/textarea.js.map +1 -0
  723. package/dist/components/tile-radio.d.ts +6 -10
  724. package/dist/components/tile-radio.js +6 -6
  725. package/dist/components/tile-radio.js.map +1 -1
  726. package/dist/components/time-input.d.ts +5 -108
  727. package/dist/components/time-input.js +14 -5
  728. package/dist/components/time-input.js.map +1 -1
  729. package/dist/components/toast-labels.d.ts +2 -0
  730. package/dist/components/toast-labels.js +11 -0
  731. package/dist/components/toast-labels.js.map +1 -0
  732. package/dist/components/toast.d.ts +21 -23
  733. package/dist/components/toast.js +1 -6
  734. package/dist/components/toast.js.map +1 -1
  735. package/dist/components/toggle-group.d.ts +26 -26
  736. package/dist/components/toggle-group.js +43 -19
  737. package/dist/components/toggle-group.js.map +1 -1
  738. package/dist/components/toggle-legend.d.ts +18 -21
  739. package/dist/components/toggle-legend.js +3 -3
  740. package/dist/components/toggle-legend.js.map +1 -1
  741. package/dist/components/tooltip.d.ts +16 -15
  742. package/dist/components/tooltip.js +4 -9
  743. package/dist/components/tooltip.js.map +1 -1
  744. package/dist/components/translation-review-editor.d.ts +8 -10
  745. package/dist/components/translation-review-editor.js +6 -5
  746. package/dist/components/translation-review-editor.js.map +1 -1
  747. package/dist/components/translation-review-labels.d.ts +4 -7
  748. package/dist/components/translation-review-parts.d.ts +19 -28
  749. package/dist/components/translation-review-parts.js +4 -7
  750. package/dist/components/translation-review-parts.js.map +1 -1
  751. package/dist/components/translation-review.d.ts +26 -24
  752. package/dist/components/translation-review.js +13 -10
  753. package/dist/components/translation-review.js.map +1 -1
  754. package/dist/components/tree-view.d.ts +7 -11
  755. package/dist/components/tree-view.js +8 -8
  756. package/dist/components/tree-view.js.map +1 -1
  757. package/dist/components/treemap.d.ts +9 -13
  758. package/dist/components/trigger-aria.d.ts +2 -4
  759. package/dist/components/ui-labels.d.ts +5 -0
  760. package/dist/components/ui-labels.js +20 -0
  761. package/dist/components/ui-labels.js.map +1 -0
  762. package/dist/components/use-anchor-dir.d.ts +3 -6
  763. package/dist/components/use-mobile-reveal.d.ts +2 -6
  764. package/dist/components/use-table-state.d.ts +154 -15
  765. package/dist/components/user-avatar.d.ts +8 -21
  766. package/dist/components/user-avatar.js +1 -1
  767. package/dist/components/user-avatar.js.map +1 -1
  768. package/dist/components/wizard-stepper.d.ts +6 -6
  769. package/dist/components/wizard-stepper.js +4 -3
  770. package/dist/components/wizard-stepper.js.map +1 -1
  771. package/dist/components/write-lock-labels.d.ts +2 -0
  772. package/dist/components/write-lock-labels.js +8 -0
  773. package/dist/components/write-lock-labels.js.map +1 -0
  774. package/dist/components/write-lock.d.ts +16 -18
  775. package/dist/components/write-lock.js +4 -8
  776. package/dist/components/write-lock.js.map +1 -1
  777. package/dist/data-table.d.ts +10 -18
  778. package/dist/data-table.js.map +1 -1
  779. package/dist/demo/demo-banner.d.ts +10 -13
  780. package/dist/demo/demo-banner.js +5 -19
  781. package/dist/demo/demo-banner.js.map +1 -1
  782. package/dist/demo/demo-countdown.d.ts +7 -9
  783. package/dist/demo/demo-ended.d.ts +10 -13
  784. package/dist/demo/demo-ended.js +4 -4
  785. package/dist/demo/demo-ended.js.map +1 -1
  786. package/dist/demo/demo-labels.d.ts +4 -5
  787. package/dist/demo/demo-labels.js.map +1 -1
  788. package/dist/demo/demo-session.d.ts +3 -5
  789. package/dist/demo/demo-start.d.ts +8 -11
  790. package/dist/demo/demo-start.js +3 -2
  791. package/dist/demo/demo-start.js.map +1 -1
  792. package/dist/feedback/feedback-attachment-labels.d.ts +16 -0
  793. package/dist/feedback/feedback-attachment-labels.js +17 -0
  794. package/dist/feedback/feedback-attachment-labels.js.map +1 -0
  795. package/dist/feedback/feedback-attachment.d.ts +312 -101
  796. package/dist/feedback/feedback-attachment.js +31 -42
  797. package/dist/feedback/feedback-attachment.js.map +1 -1
  798. package/dist/feedback/feedback-capture.d.ts +2 -4
  799. package/dist/feedback/feedback-context-labels.d.ts +2 -0
  800. package/dist/feedback/feedback-context-labels.js +9 -0
  801. package/dist/feedback/feedback-context-labels.js.map +1 -0
  802. package/dist/feedback/feedback-context.d.ts +110 -101
  803. package/dist/feedback/feedback-context.js +4 -7
  804. package/dist/feedback/feedback-context.js.map +1 -1
  805. package/dist/feedback/feedback-crash.d.ts +8 -110
  806. package/dist/feedback/feedback-dialog-labels.d.ts +12 -0
  807. package/dist/feedback/feedback-dialog-labels.js +17 -0
  808. package/dist/feedback/feedback-dialog-labels.js.map +1 -0
  809. package/dist/feedback/feedback-dialog.d.ts +186 -101
  810. package/dist/feedback/feedback-dialog.js +8 -18
  811. package/dist/feedback/feedback-dialog.js.map +1 -1
  812. package/dist/feedback/feedback-inbox.d.ts +236 -101
  813. package/dist/feedback/feedback-inbox.js +31 -141
  814. package/dist/feedback/feedback-inbox.js.map +1 -1
  815. package/dist/feedback/feedback-labels.d.ts +83 -101
  816. package/dist/feedback/feedback-labels.js.map +1 -1
  817. package/dist/feedback/feedback-menu-labels.d.ts +2 -0
  818. package/dist/feedback/feedback-menu-labels.js +10 -0
  819. package/dist/feedback/feedback-menu-labels.js.map +1 -0
  820. package/dist/feedback/feedback-menu.d.ts +83 -101
  821. package/dist/feedback/feedback-menu.js +3 -7
  822. package/dist/feedback/feedback-menu.js.map +1 -1
  823. package/dist/feedback/feedback-record.d.ts +239 -101
  824. package/dist/feedback/feedback-record.js +7 -2
  825. package/dist/feedback/feedback-record.js.map +1 -1
  826. package/dist/feedback/feedback-row-detail-labels.d.ts +2 -0
  827. package/dist/feedback/feedback-row-detail-labels.js +31 -0
  828. package/dist/feedback/feedback-row-detail-labels.js.map +1 -0
  829. package/dist/feedback/feedback-row-detail.d.ts +315 -101
  830. package/dist/feedback/feedback-row-detail.js +11 -37
  831. package/dist/feedback/feedback-row-detail.js.map +1 -1
  832. package/dist/feedback/feedback-status-undo.d.ts +66 -101
  833. package/dist/feedback/feedback-status-undo.js.map +1 -1
  834. package/dist/feedback/feedback-submit-dialog.d.ts +39 -0
  835. package/dist/feedback/feedback-submit-dialog.js +66 -0
  836. package/dist/feedback/feedback-submit-dialog.js.map +1 -0
  837. package/dist/feedback/feedback-submit.d.ts +13 -109
  838. package/dist/feedback/feedback-submit.js +19 -40
  839. package/dist/feedback/feedback-submit.js.map +1 -1
  840. package/dist/feedback/feedback-swipe.d.ts +9 -110
  841. package/dist/feedback/feedback-swipe.js +1 -1
  842. package/dist/feedback/feedback-swipe.js.map +1 -1
  843. package/dist/feedback/feedback-table-labels.d.ts +2 -0
  844. package/dist/feedback/feedback-table-labels.js +26 -0
  845. package/dist/feedback/feedback-table-labels.js.map +1 -0
  846. package/dist/feedback/feedback-table.d.ts +314 -101
  847. package/dist/feedback/feedback-table.js +11 -31
  848. package/dist/feedback/feedback-table.js.map +1 -1
  849. package/dist/feedback/feedback-thread-labels.d.ts +3 -0
  850. package/dist/feedback/feedback-thread-labels.js +21 -0
  851. package/dist/feedback/feedback-thread-labels.js.map +1 -0
  852. package/dist/feedback/feedback-thread.d.ts +378 -101
  853. package/dist/feedback/feedback-thread.js +27 -34
  854. package/dist/feedback/feedback-thread.js.map +1 -1
  855. package/dist/feedback/feedback-vocabulary.d.ts +98 -0
  856. package/dist/feedback/feedback-vocabulary.js +143 -0
  857. package/dist/feedback/feedback-vocabulary.js.map +1 -0
  858. package/dist/feedback.d.ts +15 -105
  859. package/dist/hooks/use-anchored-panel.d.ts +77 -15
  860. package/dist/hooks/use-anchored-panel.js +34 -1
  861. package/dist/hooks/use-anchored-panel.js.map +1 -1
  862. package/dist/hooks/use-anchored-rect.d.ts +15 -6
  863. package/dist/hooks/use-anchored-rect.js +2 -1
  864. package/dist/hooks/use-anchored-rect.js.map +1 -1
  865. package/dist/hooks/use-announce.d.ts +4 -6
  866. package/dist/hooks/use-authed-src.d.ts +5 -7
  867. package/dist/hooks/use-authed-src.js +3 -7
  868. package/dist/hooks/use-authed-src.js.map +1 -1
  869. package/dist/hooks/use-body-scroll-lock.d.ts +1 -3
  870. package/dist/hooks/use-breakpoint.d.ts +16 -17
  871. package/dist/hooks/use-breakpoint.js.map +1 -1
  872. package/dist/hooks/use-close-transition.d.ts +8 -8
  873. package/dist/hooks/use-close-transition.js +5 -4
  874. package/dist/hooks/use-close-transition.js.map +1 -1
  875. package/dist/hooks/use-copy-to-clipboard.d.ts +5 -7
  876. package/dist/hooks/use-debounce.d.ts +13 -6
  877. package/dist/hooks/use-debounce.js.map +1 -1
  878. package/dist/hooks/use-dismiss.d.ts +37 -11
  879. package/dist/hooks/use-dismiss.js +69 -10
  880. package/dist/hooks/use-dismiss.js.map +1 -1
  881. package/dist/hooks/use-file-drop.d.ts +8 -110
  882. package/dist/hooks/use-file-drop.js +1 -1
  883. package/dist/hooks/use-file-drop.js.map +1 -1
  884. package/dist/hooks/use-file-picker-labels.d.ts +2 -0
  885. package/dist/hooks/use-file-picker-labels.js +25 -0
  886. package/dist/hooks/use-file-picker-labels.js.map +1 -0
  887. package/dist/hooks/use-file-picker.d.ts +164 -0
  888. package/dist/hooks/use-file-picker.js +149 -0
  889. package/dist/hooks/use-file-picker.js.map +1 -0
  890. package/dist/hooks/use-focus-trap.d.ts +2 -4
  891. package/dist/hooks/use-focus-trap.js +2 -1
  892. package/dist/hooks/use-focus-trap.js.map +1 -1
  893. package/dist/hooks/use-hotkey.d.ts +7 -9
  894. package/dist/hooks/use-large-text.d.ts +3 -5
  895. package/dist/hooks/use-media-query.d.ts +1 -3
  896. package/dist/hooks/use-noindex.d.ts +1 -3
  897. package/dist/hooks/use-overlay-history.d.ts +1 -3
  898. package/dist/hooks/use-row-swipe.d.ts +5 -8
  899. package/dist/hooks/use-search-param-state.d.ts +10 -11
  900. package/dist/hooks/use-windowed-rows.d.ts +4 -7
  901. package/dist/i18n/defaults.d.ts +11 -105
  902. package/dist/i18n/defaults.js +82 -82
  903. package/dist/i18n/defaults.js.map +1 -1
  904. package/dist/i18n/german.d.ts +2 -105
  905. package/dist/i18n/german.js +52 -8
  906. package/dist/i18n/german.js.map +1 -1
  907. package/dist/i18n/kit-labels.d.ts +609 -101
  908. package/dist/i18n/kit-labels.js +22 -97
  909. package/dist/i18n/kit-labels.js.map +1 -1
  910. package/dist/i18n/languages.d.ts +197 -101
  911. package/dist/i18n/locales/de-CH.d.ts +3 -106
  912. package/dist/i18n/locales/en.d.ts +4 -105
  913. package/dist/i18n/locales/en.js +1834 -4
  914. package/dist/i18n/locales/en.js.map +7 -1
  915. package/dist/i18n/locales/es.d.ts +3 -106
  916. package/dist/i18n/locales/es.js +52 -8
  917. package/dist/i18n/locales/es.js.map +1 -1
  918. package/dist/i18n/locales/fr.d.ts +3 -106
  919. package/dist/i18n/locales/fr.js +53 -8
  920. package/dist/i18n/locales/fr.js.map +1 -1
  921. package/dist/i18n/locales/hu.d.ts +3 -106
  922. package/dist/i18n/locales/hu.js +52 -8
  923. package/dist/i18n/locales/hu.js.map +1 -1
  924. package/dist/i18n/locales/it.d.ts +3 -106
  925. package/dist/i18n/locales/it.js +53 -8
  926. package/dist/i18n/locales/it.js.map +1 -1
  927. package/dist/i18n/locales/zh.d.ts +3 -106
  928. package/dist/i18n/locales/zh.js +51 -8
  929. package/dist/i18n/locales/zh.js.map +1 -1
  930. package/dist/i18n/plurals.d.ts +3 -5
  931. package/dist/i18n/review.d.ts +5 -107
  932. package/dist/i18n/review.js +4 -0
  933. package/dist/i18n/review.js.map +1 -1
  934. package/dist/i18n/shared-labels.d.ts +17 -0
  935. package/dist/i18n/shared-labels.js +111 -0
  936. package/dist/i18n/shared-labels.js.map +1 -0
  937. package/dist/i18n/swiss.d.ts +1 -3
  938. package/dist/index.d.ts +329 -249
  939. package/dist/index.js +188 -215
  940. package/dist/index.js.map +1 -1
  941. package/dist/landing/access.d.ts +7 -9
  942. package/dist/landing/access.js.map +1 -1
  943. package/dist/landing/landing-actions.d.ts +9 -109
  944. package/dist/landing/landing-actions.js +1 -1
  945. package/dist/landing/landing-actions.js.map +1 -1
  946. package/dist/landing/landing-labels.d.ts +4 -5
  947. package/dist/landing/landing-labels.js.map +1 -1
  948. package/dist/landing/landing-sections.d.ts +21 -121
  949. package/dist/landing/landing-sections.js +15 -15
  950. package/dist/landing/landing-sections.js.map +1 -1
  951. package/dist/landing/page-seo.d.ts +7 -9
  952. package/dist/landing/public-header.d.ts +10 -111
  953. package/dist/landing/public-header.js +1 -1
  954. package/dist/landing/public-header.js.map +1 -1
  955. package/dist/landing/routing.d.ts +16 -120
  956. package/dist/landing/routing.js +2 -6
  957. package/dist/landing/routing.js.map +1 -1
  958. package/dist/lib/calc.d.ts +7 -9
  959. package/dist/lib/chip-edge-snap.d.ts +10 -0
  960. package/dist/lib/chip-edge-snap.js +131 -0
  961. package/dist/lib/chip-edge-snap.js.map +1 -0
  962. package/dist/lib/clipping.d.ts +2 -4
  963. package/dist/lib/cn.d.ts +2 -5
  964. package/dist/lib/cn.js +6 -1
  965. package/dist/lib/cn.js.map +1 -1
  966. package/dist/lib/column-mapping.d.ts +10 -13
  967. package/dist/lib/countries.d.ts +3 -5
  968. package/dist/lib/dates.d.ts +25 -25
  969. package/dist/lib/dates.js.map +1 -1
  970. package/dist/lib/decimal-marks.d.ts +8 -8
  971. package/dist/lib/decimal-marks.js +1 -1
  972. package/dist/lib/decimal-marks.js.map +1 -1
  973. package/dist/lib/direction.d.ts +4 -6
  974. package/dist/lib/document-navigation.d.ts +1 -3
  975. package/dist/lib/download.d.ts +67 -0
  976. package/dist/lib/download.js +89 -0
  977. package/dist/lib/download.js.map +1 -0
  978. package/dist/lib/floating-stack.d.ts +8 -6
  979. package/dist/lib/floating-stack.js.map +1 -1
  980. package/dist/lib/format.d.ts +24 -23
  981. package/dist/lib/format.js +3 -3
  982. package/dist/lib/format.js.map +1 -1
  983. package/dist/lib/iban.d.ts +9 -11
  984. package/dist/lib/ime.d.ts +17 -0
  985. package/dist/lib/ime.js +13 -0
  986. package/dist/lib/ime.js.map +1 -0
  987. package/dist/lib/isin.d.ts +3 -5
  988. package/dist/lib/logger.d.ts +4 -6
  989. package/dist/lib/person-name.d.ts +3 -5
  990. package/dist/lib/phone.d.ts +9 -11
  991. package/dist/lib/presence.d.ts +15 -0
  992. package/dist/lib/presence.js +8 -0
  993. package/dist/lib/presence.js.map +1 -0
  994. package/dist/lib/qr-encode.d.ts +4 -6
  995. package/dist/lib/reduced-motion.d.ts +18 -0
  996. package/dist/lib/reduced-motion.js +9 -0
  997. package/dist/lib/reduced-motion.js.map +1 -0
  998. package/dist/lib/round.d.ts +22 -0
  999. package/dist/lib/round.js +15 -0
  1000. package/dist/lib/round.js.map +1 -0
  1001. package/dist/lib/safe-storage.d.ts +14 -4
  1002. package/dist/lib/safe-storage.js +24 -9
  1003. package/dist/lib/safe-storage.js.map +1 -1
  1004. package/dist/lib/server-wake.d.ts +13 -14
  1005. package/dist/lib/session-refresh.d.ts +200 -0
  1006. package/dist/lib/session-refresh.js +187 -0
  1007. package/dist/lib/session-refresh.js.map +1 -0
  1008. package/dist/lib/strip-fade.d.ts +10 -13
  1009. package/dist/lib/table-text.d.ts +14 -16
  1010. package/dist/lib/text-match.d.ts +41 -0
  1011. package/dist/lib/text-match.js +23 -0
  1012. package/dist/lib/text-match.js.map +1 -0
  1013. package/dist/lib/translation-review.d.ts +44 -45
  1014. package/dist/lib/translation-review.js +3 -2
  1015. package/dist/lib/translation-review.js.map +1 -1
  1016. package/dist/rhf/fields.d.ts +123 -189
  1017. package/dist/rhf/fields.js +46 -54
  1018. package/dist/rhf/fields.js.map +1 -1
  1019. package/dist/rhf/form-core.d.ts +153 -0
  1020. package/dist/rhf/form-core.js +143 -0
  1021. package/dist/rhf/form-core.js.map +1 -0
  1022. package/dist/rhf/form.d.ts +38 -175
  1023. package/dist/rhf/form.js +9 -131
  1024. package/dist/rhf/form.js.map +1 -1
  1025. package/dist/rhf/line-items.d.ts +40 -11
  1026. package/dist/rhf/line-items.js.map +1 -1
  1027. package/dist/rhf/use-rhf-wizard-step.d.ts +3 -6
  1028. package/dist/rhf.d.ts +4 -118
  1029. package/dist/rhf.js.map +1 -1
  1030. package/dist/search/command-palette-labels.d.ts +2 -0
  1031. package/dist/search/command-palette-labels.js +15 -0
  1032. package/dist/search/command-palette-labels.js.map +1 -0
  1033. package/dist/search/command-palette.d.ts +10 -13
  1034. package/dist/search/command-palette.js +25 -44
  1035. package/dist/search/command-palette.js.map +1 -1
  1036. package/dist/search/global-search-labels.d.ts +2 -0
  1037. package/dist/search/global-search-labels.js +12 -0
  1038. package/dist/search/global-search-labels.js.map +1 -0
  1039. package/dist/search/global-search.d.ts +17 -16
  1040. package/dist/search/global-search.js +12 -12
  1041. package/dist/search/global-search.js.map +1 -1
  1042. package/dist/search/search-index.d.ts +13 -14
  1043. package/dist/search/search-index.js +2 -1
  1044. package/dist/search/search-index.js.map +1 -1
  1045. package/dist/search/use-command-key.d.ts +9 -0
  1046. package/dist/search/use-command-key.js +18 -0
  1047. package/dist/search/use-command-key.js.map +1 -0
  1048. package/dist/search.d.ts +3 -4
  1049. package/dist/settings/settings-card-classes.d.ts +11 -0
  1050. package/dist/settings/settings-card-classes.js +8 -0
  1051. package/dist/settings/settings-card-classes.js.map +1 -0
  1052. package/dist/settings/settings-catalogue.d.ts +11 -14
  1053. package/dist/settings/settings-context.d.ts +4 -8
  1054. package/dist/settings/settings-heading.d.ts +8 -12
  1055. package/dist/settings/settings-heading.js +1 -1
  1056. package/dist/settings/settings-heading.js.map +1 -1
  1057. package/dist/settings/settings-labels.d.ts +6 -7
  1058. package/dist/settings/settings-labels.js.map +1 -1
  1059. package/dist/settings/settings-layout.d.ts +36 -13
  1060. package/dist/settings/settings-layout.js +25 -4
  1061. package/dist/settings/settings-layout.js.map +1 -1
  1062. package/dist/settings/settings-section.d.ts +4 -107
  1063. package/dist/settings/settings-section.js +2 -2
  1064. package/dist/settings/settings-section.js.map +1 -1
  1065. package/dist/settings/use-account-appearance.d.ts +11 -16
  1066. package/dist/settings/use-account-language.d.ts +8 -10
  1067. package/dist/settings/use-settings-focus.d.ts +3 -5
  1068. package/dist/settings/use-settings-focus.js +2 -4
  1069. package/dist/settings/use-settings-focus.js.map +1 -1
  1070. package/dist/settings/use-settings-route.d.ts +11 -16
  1071. package/dist/shell/app-shell-labels.d.ts +2 -0
  1072. package/dist/shell/app-shell-labels.js +9 -0
  1073. package/dist/shell/app-shell-labels.js.map +1 -0
  1074. package/dist/shell/app-shell.d.ts +216 -101
  1075. package/dist/shell/app-shell.js +51 -35
  1076. package/dist/shell/app-shell.js.map +1 -1
  1077. package/dist/shell/auth-layout.d.ts +6 -9
  1078. package/dist/shell/auth-layout.js +6 -6
  1079. package/dist/shell/auth-layout.js.map +1 -1
  1080. package/dist/shell/company-switcher-labels.d.ts +2 -0
  1081. package/dist/shell/company-switcher-labels.js +12 -0
  1082. package/dist/shell/company-switcher-labels.js.map +1 -0
  1083. package/dist/shell/company-switcher.d.ts +9 -11
  1084. package/dist/shell/company-switcher.js +3 -9
  1085. package/dist/shell/company-switcher.js.map +1 -1
  1086. package/dist/shell/option-switcher-menu.d.ts +19 -9
  1087. package/dist/shell/option-switcher-menu.js +6 -4
  1088. package/dist/shell/option-switcher-menu.js.map +1 -1
  1089. package/dist/shell/role-switcher.d.ts +5 -6
  1090. package/dist/shell/role-switcher.js +4 -3
  1091. package/dist/shell/role-switcher.js.map +1 -1
  1092. package/dist/shell/top-bar-brand.d.ts +4 -107
  1093. package/dist/shell/top-bar-brand.js +1 -1
  1094. package/dist/shell/top-bar-brand.js.map +1 -1
  1095. package/dist/shell/top-bar.d.ts +6 -9
  1096. package/dist/shell/top-bar.js +1 -1
  1097. package/dist/shell/top-bar.js.map +1 -1
  1098. package/dist/shell/topbar-action-menu.d.ts +30 -31
  1099. package/dist/shell/topbar-action-menu.js +12 -10
  1100. package/dist/shell/topbar-action-menu.js.map +1 -1
  1101. package/dist/shell/topbar-controls.d.ts +20 -18
  1102. package/dist/shell/topbar-controls.js +14 -11
  1103. package/dist/shell/topbar-controls.js.map +1 -1
  1104. package/dist/shell.d.ts +25 -116
  1105. package/dist/shell.js.map +1 -1
  1106. package/dist/table-text.d.ts +1 -1
  1107. package/dist/testing/css-variables.d.ts +4 -6
  1108. package/dist/testing/css-variables.generated.d.ts +2 -4
  1109. package/dist/testing/index.d.ts +2 -1
  1110. package/dist/testing/index.js +9 -1
  1111. package/dist/testing/index.js.map +1 -1
  1112. package/dist/testing/viewport.d.ts +93 -0
  1113. package/dist/testing/viewport.js +152 -0
  1114. package/dist/testing/viewport.js.map +1 -0
  1115. package/dist/theme/chart-palette.d.ts +7 -9
  1116. package/dist/theme/color.d.ts +14 -16
  1117. package/dist/theme/color.js +2 -1
  1118. package/dist/theme/color.js.map +1 -1
  1119. package/dist/theme/contrast-tokens.d.ts +13 -17
  1120. package/dist/theme/contrast.d.ts +22 -27
  1121. package/dist/theme/palette-derive.d.ts +16 -22
  1122. package/dist/theme/palette-derive.js +15 -7
  1123. package/dist/theme/palette-derive.js.map +1 -1
  1124. package/dist/theme/palette-presets.d.ts +25 -15
  1125. package/dist/theme/palette-presets.js +66 -66
  1126. package/dist/theme/palette-presets.js.map +1 -1
  1127. package/dist/theme/palette-store.d.ts +10 -13
  1128. package/dist/theme/text-size.d.ts +21 -26
  1129. package/dist/theme/theme-store.d.ts +9 -14
  1130. package/dist/tour/tour-labels.d.ts +2 -0
  1131. package/dist/tour/tour-labels.js +13 -0
  1132. package/dist/tour/tour-labels.js.map +1 -0
  1133. package/dist/tour/tour.d.ts +12 -14
  1134. package/dist/tour/tour.js +9 -20
  1135. package/dist/tour/tour.js.map +1 -1
  1136. package/dist/tour.d.ts +1 -2
  1137. package/dist/wizard/stepper-nav.d.ts +8 -108
  1138. package/dist/wizard/stepper-nav.js +15 -14
  1139. package/dist/wizard/stepper-nav.js.map +1 -1
  1140. package/dist/wizard/types.d.ts +18 -18
  1141. package/dist/wizard/types.js +1 -19
  1142. package/dist/wizard/types.js.map +1 -1
  1143. package/dist/wizard/use-wizard.d.ts +2 -6
  1144. package/dist/wizard/validation.d.ts +3 -7
  1145. package/dist/wizard/wizard-context.d.ts +7 -11
  1146. package/dist/wizard/wizard-labels.d.ts +4 -0
  1147. package/dist/wizard/wizard-labels.js +24 -0
  1148. package/dist/wizard/wizard-labels.js.map +1 -0
  1149. package/dist/wizard/wizard-step.d.ts +3 -7
  1150. package/dist/wizard/wizard-step.js +2 -2
  1151. package/dist/wizard/wizard-step.js.map +1 -1
  1152. package/dist/wizard/wizard-summary.d.ts +5 -8
  1153. package/dist/wizard/wizard-summary.js +6 -5
  1154. package/dist/wizard/wizard-summary.js.map +1 -1
  1155. package/dist/wizard.d.ts +7 -107
  1156. package/package.json +9 -6
  1157. package/src/account/account-parts.ts +3 -3
  1158. package/src/{components → account}/account-settings-labels.ts +11 -1
  1159. package/src/{components → account}/account-settings.tsx +145 -34
  1160. package/src/account/data-export-setting-labels.ts +20 -0
  1161. package/src/account/data-export-setting.tsx +19 -38
  1162. package/src/account/delete-account-setting-labels.ts +33 -0
  1163. package/src/account/delete-account-setting.tsx +13 -35
  1164. package/src/account/email-change-setting-labels.ts +32 -0
  1165. package/src/account/email-change-setting.tsx +17 -36
  1166. package/src/{components → account}/passkeys-setting.tsx +14 -9
  1167. package/src/account/sessions-setting-labels.ts +24 -0
  1168. package/src/account/sessions-setting.tsx +14 -28
  1169. package/src/admin/admin-action-confirm-labels.ts +19 -0
  1170. package/src/admin/admin-action-confirm.tsx +59 -38
  1171. package/src/admin/admin-action-log-labels.ts +74 -0
  1172. package/src/admin/admin-action-log.tsx +180 -54
  1173. package/src/admin/admin-parts.ts +0 -7
  1174. package/src/admin/invitations-panel-labels.ts +31 -0
  1175. package/src/admin/invitations-panel.tsx +16 -34
  1176. package/src/admin/plan-change-labels.ts +23 -0
  1177. package/src/admin/plan-change.tsx +58 -34
  1178. package/src/admin/reviewer-scope-editor-labels.ts +16 -0
  1179. package/src/admin/reviewer-scope-editor.tsx +9 -15
  1180. package/src/admin/role-select-labels.ts +16 -0
  1181. package/src/admin/role-select.tsx +13 -23
  1182. package/src/admin/transfer-ownership-dialog-labels.ts +20 -0
  1183. package/src/admin/transfer-ownership-dialog.tsx +7 -17
  1184. package/src/admin/user-roster-labels.ts +17 -0
  1185. package/src/admin/user-roster.tsx +9 -17
  1186. package/src/auth/accept-invitation-labels.ts +21 -0
  1187. package/src/auth/accept-invitation.tsx +9 -20
  1188. package/src/auth/auth-errors.ts +29 -13
  1189. package/src/auth/complete-name-dialog-labels.ts +16 -0
  1190. package/src/auth/complete-name-dialog.tsx +8 -13
  1191. package/src/auth/forgot-password-form-labels.ts +20 -0
  1192. package/src/auth/forgot-password-form.tsx +12 -20
  1193. package/src/auth/new-password-fields.tsx +1 -1
  1194. package/src/auth/not-found-page-labels.ts +12 -0
  1195. package/src/auth/not-found-page.tsx +11 -14
  1196. package/src/auth/register-form-labels.ts +31 -0
  1197. package/src/auth/register-form.tsx +18 -38
  1198. package/src/auth/reset-password-form-labels.ts +27 -0
  1199. package/src/auth/reset-password-form.tsx +12 -27
  1200. package/src/auth/sign-in-form-labels.ts +44 -0
  1201. package/src/auth/sign-in-form.tsx +18 -51
  1202. package/src/auth/status-parts.tsx +3 -3
  1203. package/src/auth/verify-email-labels.ts +26 -0
  1204. package/src/auth/verify-email.tsx +15 -30
  1205. package/src/billing/billing-banner.tsx +2 -1
  1206. package/src/billing/billing-labels.ts +1 -1
  1207. package/src/billing/checkout-processing.ts +2 -12
  1208. package/src/billing/plan-card.tsx +26 -27
  1209. package/src/billing/plan-limit-notice.tsx +1 -1
  1210. package/src/billing/subscription-actions.tsx +4 -4
  1211. package/src/chart.ts +7 -1
  1212. package/src/components/account-chips-labels.ts +16 -0
  1213. package/src/components/account-chips.tsx +13 -16
  1214. package/src/components/alert-banner.tsx +39 -19
  1215. package/src/components/amount-input.tsx +461 -405
  1216. package/src/components/appearance-labels.ts +2 -2
  1217. package/src/components/authed-image-labels.ts +11 -0
  1218. package/src/components/authed-image.tsx +6 -8
  1219. package/src/components/autocomplete.tsx +79 -78
  1220. package/src/components/breadcrumbs-labels.ts +10 -0
  1221. package/src/components/breadcrumbs.tsx +17 -14
  1222. package/src/components/bulk-action-bar-labels.ts +11 -0
  1223. package/src/components/bulk-action-bar.tsx +15 -16
  1224. package/src/components/button-group.tsx +7 -7
  1225. package/src/components/button-look.ts +230 -0
  1226. package/src/components/button.tsx +339 -0
  1227. package/src/components/calculator.tsx +18 -11
  1228. package/src/components/calendar-heatmap-labels.ts +15 -0
  1229. package/src/components/calendar-heatmap.tsx +13 -19
  1230. package/src/components/card.tsx +381 -0
  1231. package/src/components/chart-zoom-core.tsx +653 -0
  1232. package/src/components/chart-zoom.tsx +64 -648
  1233. package/src/components/chart.tsx +11 -11
  1234. package/src/components/checkbox-group.tsx +13 -10
  1235. package/src/components/checkbox.tsx +43 -42
  1236. package/src/components/chip-input.tsx +377 -0
  1237. package/src/components/chip-labels.ts +13 -0
  1238. package/src/components/chip.tsx +115 -711
  1239. package/src/components/choice-card.tsx +83 -85
  1240. package/src/components/column-mapper-labels.ts +45 -0
  1241. package/src/components/column-mapper.tsx +16 -51
  1242. package/src/components/combobox-core.tsx +346 -194
  1243. package/src/components/combobox-suggestions.tsx +129 -0
  1244. package/src/components/combobox.tsx +69 -895
  1245. package/src/components/confirm-dialog-labels.ts +13 -0
  1246. package/src/components/confirm-dialog.tsx +4 -8
  1247. package/src/components/copy-button-labels.ts +13 -0
  1248. package/src/components/copy-button.tsx +10 -12
  1249. package/src/components/country-select-labels.ts +11 -0
  1250. package/src/components/country-select.tsx +74 -89
  1251. package/src/components/currency-option-list.tsx +216 -0
  1252. package/src/components/currency-select.tsx +85 -196
  1253. package/src/components/danger-confirm-labels.ts +20 -0
  1254. package/src/components/danger-confirm.tsx +69 -77
  1255. package/src/components/data-table-cells.tsx +5 -5
  1256. package/src/components/data-table-column-settings.tsx +137 -0
  1257. package/src/components/data-table-filter-popover.tsx +49 -24
  1258. package/src/components/data-table-filters.ts +48 -11
  1259. package/src/components/data-table-head.tsx +258 -0
  1260. package/src/components/data-table-labels.ts +43 -11
  1261. package/src/components/data-table-mobile.tsx +594 -0
  1262. package/src/components/data-table-pagination.tsx +11 -10
  1263. package/src/components/data-table-resize.ts +187 -0
  1264. package/src/components/data-table-row-actions.tsx +152 -0
  1265. package/src/components/data-table-selection.ts +55 -0
  1266. package/src/components/data-table-shared.tsx +172 -0
  1267. package/src/components/data-table.tsx +178 -1300
  1268. package/src/components/date-field.tsx +627 -0
  1269. package/src/components/date-picker.tsx +58 -1446
  1270. package/src/components/date-range-picker.tsx +490 -0
  1271. package/src/components/description-list-labels.ts +9 -0
  1272. package/src/components/description-list.tsx +31 -15
  1273. package/src/components/dialog-frame-labels.ts +7 -0
  1274. package/src/components/dialog-frame.tsx +8 -6
  1275. package/src/components/disclosure.tsx +14 -14
  1276. package/src/components/dropdown.tsx +102 -40
  1277. package/src/components/empty-state.tsx +137 -0
  1278. package/src/components/entity-combobox.tsx +17 -12
  1279. package/src/components/error-boundary-labels.ts +20 -0
  1280. package/src/components/error-boundary.tsx +10 -20
  1281. package/src/components/facing-pair.ts +1 -1
  1282. package/src/components/field-base.tsx +615 -0
  1283. package/src/components/field-parts.tsx +206 -77
  1284. package/src/components/field-strip.tsx +16 -21
  1285. package/src/components/field-sync-labels.ts +13 -0
  1286. package/src/components/field-sync.tsx +11 -12
  1287. package/src/components/field.tsx +13 -11
  1288. package/src/components/file-button.tsx +64 -412
  1289. package/src/components/file-dropzone.tsx +36 -33
  1290. package/src/components/floating-panel-labels.ts +10 -0
  1291. package/src/components/floating-panel.tsx +32 -21
  1292. package/src/components/focus-ring.ts +9 -4
  1293. package/src/components/form-actions-labels.ts +11 -0
  1294. package/src/components/form-actions.tsx +17 -21
  1295. package/src/components/full-bleed-dialog.tsx +27 -25
  1296. package/src/components/grouped-picker.tsx +118 -96
  1297. package/src/components/help-popover.tsx +115 -0
  1298. package/src/components/hover-menu.tsx +46 -35
  1299. package/src/components/iban-input-labels.ts +15 -0
  1300. package/src/components/iban-input.tsx +25 -20
  1301. package/src/components/icon-button.tsx +945 -0
  1302. package/src/components/icon-picker-labels.ts +13 -0
  1303. package/src/components/icon-picker.tsx +27 -24
  1304. package/src/components/image-grid-labels.ts +11 -0
  1305. package/src/components/image-grid.tsx +13 -15
  1306. package/src/components/inline-edit-field-labels.ts +11 -0
  1307. package/src/components/inline-edit-field.tsx +20 -19
  1308. package/src/components/inline-entity-combobox.tsx +789 -0
  1309. package/src/components/input.tsx +380 -0
  1310. package/src/components/jump-calendar.tsx +385 -0
  1311. package/src/components/language-select.tsx +31 -16
  1312. package/src/components/legal-labels.ts +99 -0
  1313. package/src/components/legal-page.tsx +2 -2
  1314. package/src/components/legal.tsx +11 -101
  1315. package/src/components/lightbox-labels.ts +18 -0
  1316. package/src/components/lightbox.tsx +13 -21
  1317. package/src/components/line-items-labels.ts +14 -0
  1318. package/src/components/line-items.tsx +24 -31
  1319. package/src/components/list-labels.ts +10 -0
  1320. package/src/components/list.tsx +98 -75
  1321. package/src/components/loading-state.tsx +4 -4
  1322. package/src/components/measured-grid-labels.ts +25 -0
  1323. package/src/components/measured-grid.tsx +39 -62
  1324. package/src/components/menu-item.tsx +29 -26
  1325. package/src/components/mini-calendar-labels.ts +17 -0
  1326. package/src/components/mini-calendar.tsx +38 -45
  1327. package/src/components/modal.tsx +31 -18
  1328. package/src/components/money-draft.ts +72 -0
  1329. package/src/components/money-field.tsx +16 -30
  1330. package/src/components/month-picker-labels.ts +22 -0
  1331. package/src/components/month-picker.tsx +59 -45
  1332. package/src/components/multi-entity-combobox.tsx +17 -12
  1333. package/src/components/multi-select.tsx +313 -288
  1334. package/src/components/nav-pills.tsx +19 -8
  1335. package/src/components/number-field.tsx +7 -5
  1336. package/src/components/number-input.tsx +72 -97
  1337. package/src/components/numeric-field.ts +161 -0
  1338. package/src/components/numpad-sheet.tsx +16 -16
  1339. package/src/components/one-time-code-input.tsx +154 -169
  1340. package/src/components/page-contents-labels.ts +9 -0
  1341. package/src/components/page-contents.tsx +15 -15
  1342. package/src/components/page-header.tsx +9 -5
  1343. package/src/components/password-strength-labels.ts +23 -0
  1344. package/src/components/password-strength.tsx +13 -27
  1345. package/src/components/phone-input-labels.ts +10 -0
  1346. package/src/components/phone-input.tsx +42 -57
  1347. package/src/components/picker-sheet.tsx +47 -18
  1348. package/src/components/pie-chart.tsx +11 -9
  1349. package/src/components/popover-labels.ts +14 -0
  1350. package/src/components/popover.tsx +34 -37
  1351. package/src/components/progress-bar-labels.ts +10 -0
  1352. package/src/components/progress-bar.tsx +32 -23
  1353. package/src/components/qr-code.tsx +2 -2
  1354. package/src/components/reauth-dialog-labels.ts +13 -0
  1355. package/src/components/reauth-dialog.tsx +7 -10
  1356. package/src/components/row-actions-labels.ts +10 -0
  1357. package/src/components/row-actions.tsx +11 -10
  1358. package/src/components/scroll-area.tsx +4 -10
  1359. package/src/components/search-field.tsx +35 -49
  1360. package/src/components/select.tsx +302 -0
  1361. package/src/components/separator.tsx +2 -2
  1362. package/src/components/series-chart-axes.ts +329 -0
  1363. package/src/components/series-chart-thin.ts +180 -0
  1364. package/src/components/series-chart.tsx +124 -325
  1365. package/src/components/server-wake-labels.ts +11 -0
  1366. package/src/components/server-wake.tsx +42 -63
  1367. package/src/components/settings-fields.tsx +46 -17
  1368. package/src/components/share-card-labels.ts +30 -0
  1369. package/src/components/share-card.tsx +22 -37
  1370. package/src/components/sign-chip-labels.ts +12 -0
  1371. package/src/components/sign-chip.tsx +6 -9
  1372. package/src/components/signature-pad-labels.ts +24 -0
  1373. package/src/components/signature-pad.tsx +48 -57
  1374. package/src/components/signed-amount-labels.ts +10 -0
  1375. package/src/components/signed-amount.tsx +21 -22
  1376. package/src/components/skeleton.tsx +1 -1
  1377. package/src/components/slider.tsx +51 -39
  1378. package/src/components/sparkline-labels.ts +14 -0
  1379. package/src/components/sparkline.tsx +16 -21
  1380. package/src/components/spinner.tsx +81 -0
  1381. package/src/components/stat-tile-labels.ts +15 -0
  1382. package/src/components/stat-tile.tsx +32 -37
  1383. package/src/components/status-dot.tsx +17 -14
  1384. package/src/components/swatch-picker-labels.ts +10 -0
  1385. package/src/components/swatch-picker.tsx +23 -16
  1386. package/src/components/swipeable-row.tsx +7 -7
  1387. package/src/components/switch.tsx +33 -32
  1388. package/src/components/table.tsx +15 -15
  1389. package/src/components/tabs.tsx +660 -0
  1390. package/src/components/text-link.tsx +7 -7
  1391. package/src/components/text.tsx +10 -6
  1392. package/src/components/textarea.tsx +323 -0
  1393. package/src/components/tile-radio.tsx +6 -6
  1394. package/src/components/time-input.tsx +15 -7
  1395. package/src/components/toast-labels.ts +12 -0
  1396. package/src/components/toast.tsx +5 -8
  1397. package/src/components/toggle-group.tsx +105 -42
  1398. package/src/components/toggle-legend.tsx +6 -6
  1399. package/src/components/tooltip.tsx +10 -21
  1400. package/src/components/translation-review-editor.tsx +8 -7
  1401. package/src/components/translation-review-parts.tsx +9 -13
  1402. package/src/components/translation-review.tsx +26 -14
  1403. package/src/components/tree-view.tsx +14 -12
  1404. package/src/components/ui-labels.ts +22 -0
  1405. package/src/components/user-avatar.tsx +3 -3
  1406. package/src/components/wizard-stepper.tsx +10 -5
  1407. package/src/components/write-lock-labels.ts +9 -0
  1408. package/src/components/write-lock.tsx +10 -12
  1409. package/src/data-table.ts +4 -0
  1410. package/src/demo/demo-banner.tsx +9 -25
  1411. package/src/demo/demo-ended.tsx +8 -7
  1412. package/src/demo/demo-labels.ts +2 -2
  1413. package/src/demo/demo-start.tsx +7 -5
  1414. package/src/feedback/feedback-attachment-labels.ts +36 -0
  1415. package/src/feedback/feedback-attachment.tsx +42 -66
  1416. package/src/feedback/feedback-context-labels.ts +10 -0
  1417. package/src/feedback/feedback-context.tsx +8 -9
  1418. package/src/feedback/feedback-dialog-labels.ts +28 -0
  1419. package/src/feedback/feedback-dialog.tsx +14 -44
  1420. package/src/feedback/feedback-inbox.tsx +49 -252
  1421. package/src/feedback/feedback-labels.ts +5 -5
  1422. package/src/feedback/feedback-menu-labels.ts +11 -0
  1423. package/src/feedback/feedback-menu.tsx +13 -11
  1424. package/src/feedback/feedback-record.ts +21 -7
  1425. package/src/feedback/feedback-row-detail-labels.ts +33 -0
  1426. package/src/feedback/feedback-row-detail.tsx +30 -43
  1427. package/src/feedback/feedback-status-undo.ts +3 -2
  1428. package/src/feedback/feedback-submit-dialog.tsx +109 -0
  1429. package/src/feedback/feedback-submit.tsx +45 -55
  1430. package/src/feedback/feedback-swipe.tsx +1 -1
  1431. package/src/feedback/feedback-table-labels.ts +27 -0
  1432. package/src/feedback/feedback-table.tsx +24 -40
  1433. package/src/feedback/feedback-thread-labels.ts +22 -0
  1434. package/src/feedback/feedback-thread.tsx +48 -47
  1435. package/src/feedback/feedback-vocabulary.ts +252 -0
  1436. package/src/hooks/use-anchored-panel.ts +102 -2
  1437. package/src/hooks/use-anchored-rect.ts +11 -9
  1438. package/src/hooks/use-authed-src.ts +13 -7
  1439. package/src/hooks/use-breakpoint.ts +5 -4
  1440. package/src/hooks/use-close-transition.ts +9 -10
  1441. package/src/hooks/use-debounce.ts +9 -0
  1442. package/src/hooks/use-dismiss.ts +176 -19
  1443. package/src/hooks/use-file-drop.ts +2 -2
  1444. package/src/hooks/use-file-picker-labels.ts +29 -0
  1445. package/src/hooks/use-file-picker.tsx +363 -0
  1446. package/src/hooks/use-focus-trap.ts +19 -6
  1447. package/src/i18n/defaults.ts +91 -82
  1448. package/src/i18n/german.ts +50 -6
  1449. package/src/i18n/kit-labels.tsx +70 -119
  1450. package/src/i18n/locales/en.ts +46 -0
  1451. package/src/i18n/locales/es.ts +50 -6
  1452. package/src/i18n/locales/fr.ts +52 -7
  1453. package/src/i18n/locales/hu.ts +50 -6
  1454. package/src/i18n/locales/it.ts +51 -6
  1455. package/src/i18n/locales/zh.ts +49 -6
  1456. package/src/i18n/review.ts +4 -0
  1457. package/src/i18n/shared-labels.ts +135 -0
  1458. package/src/index.ts +412 -404
  1459. package/src/landing/access.ts +2 -1
  1460. package/src/landing/landing-actions.tsx +6 -5
  1461. package/src/landing/landing-labels.ts +2 -2
  1462. package/src/landing/landing-sections.tsx +24 -23
  1463. package/src/landing/public-header.tsx +3 -2
  1464. package/src/landing/routing.tsx +2 -7
  1465. package/src/lib/chip-edge-snap.ts +212 -0
  1466. package/src/lib/cn.ts +13 -1
  1467. package/src/lib/dates.ts +4 -2
  1468. package/src/lib/decimal-marks.ts +4 -2
  1469. package/src/lib/download.ts +172 -0
  1470. package/src/lib/floating-stack.ts +5 -1
  1471. package/src/lib/format.ts +5 -3
  1472. package/src/lib/ime.ts +24 -0
  1473. package/src/lib/presence.ts +18 -0
  1474. package/src/lib/reduced-motion.ts +21 -0
  1475. package/src/lib/round.ts +38 -0
  1476. package/src/lib/safe-storage.ts +35 -11
  1477. package/src/lib/session-refresh.ts +473 -0
  1478. package/src/lib/text-match.ts +60 -0
  1479. package/src/lib/translation-review.ts +7 -6
  1480. package/src/rhf/fields.tsx +131 -179
  1481. package/src/rhf/form-core.tsx +327 -0
  1482. package/src/rhf/form.tsx +46 -321
  1483. package/src/rhf/line-items.tsx +1 -1
  1484. package/src/rhf.ts +3 -2
  1485. package/src/search/command-palette-labels.ts +16 -0
  1486. package/src/search/command-palette.tsx +37 -50
  1487. package/src/search/global-search-labels.ts +13 -0
  1488. package/src/search/global-search.tsx +50 -24
  1489. package/src/search/search-index.ts +5 -6
  1490. package/src/search/use-command-key.ts +22 -0
  1491. package/src/settings/settings-card-classes.ts +11 -0
  1492. package/src/settings/settings-heading.tsx +1 -1
  1493. package/src/settings/settings-labels.ts +2 -2
  1494. package/src/settings/settings-layout.tsx +65 -6
  1495. package/src/settings/settings-section.tsx +5 -5
  1496. package/src/settings/use-settings-focus.ts +2 -5
  1497. package/src/shell/app-shell-labels.ts +10 -0
  1498. package/src/shell/app-shell.tsx +79 -53
  1499. package/src/shell/auth-layout.tsx +11 -10
  1500. package/src/shell/company-switcher-labels.ts +13 -0
  1501. package/src/shell/company-switcher.tsx +7 -11
  1502. package/src/shell/option-switcher-menu.tsx +25 -6
  1503. package/src/shell/role-switcher.tsx +7 -3
  1504. package/src/shell/top-bar-brand.tsx +1 -1
  1505. package/src/shell/top-bar.tsx +6 -5
  1506. package/src/shell/topbar-action-menu.tsx +39 -20
  1507. package/src/shell/topbar-controls.tsx +24 -12
  1508. package/src/shell.ts +1 -1
  1509. package/src/testing/index.ts +11 -0
  1510. package/src/testing/viewport.ts +251 -0
  1511. package/src/theme/color.ts +7 -1
  1512. package/src/theme/palette-derive.ts +29 -7
  1513. package/src/theme/palette-presets.ts +81 -68
  1514. package/src/tour/tour-labels.ts +14 -0
  1515. package/src/tour/tour.tsx +13 -23
  1516. package/src/wizard/stepper-nav.tsx +19 -18
  1517. package/src/wizard/types.ts +7 -22
  1518. package/src/wizard/wizard-labels.ts +29 -0
  1519. package/src/wizard/wizard-step.tsx +2 -2
  1520. package/src/wizard/wizard-summary.tsx +8 -7
  1521. package/tokens.css +45 -14
  1522. package/dist/components/account-settings-labels.js.map +0 -1
  1523. package/dist/components/account-settings.js.map +0 -1
  1524. package/dist/components/choice-parts.d.ts +0 -24
  1525. package/dist/components/choice-parts.js +0 -18
  1526. package/dist/components/choice-parts.js.map +0 -1
  1527. package/dist/components/passkeys-setting.js.map +0 -1
  1528. package/dist/components/ui.d.ts +0 -101
  1529. package/dist/components/ui.js +0 -1955
  1530. package/dist/components/ui.js.map +0 -1
  1531. package/dist/data-table-labels-BJ5JE_X2.d.ts +0 -923
  1532. package/dist/delete-account-setting-DAgGBrbn.d.ts +0 -8167
  1533. package/src/components/choice-parts.ts +0 -33
  1534. package/src/components/ui.tsx +0 -4233
@@ -4,12 +4,15 @@ import { useEffect, useEffectEvent, useId, useMemo, useRef, useState } from "rea
4
4
  import { createPortal } from "react-dom";
5
5
  import { CornerDownLeft, Search, X } from "lucide-react";
6
6
  import { cn } from "../lib/cn.js";
7
- import { FIELD_TOUCH_TEXT } from "../components/ui.js";
7
+ import { FIELD_TOUCH_TEXT } from "../components/field-base.js";
8
8
  import { usePhoneLayout } from "../hooks/use-breakpoint.js";
9
9
  import { useOverlayHistory } from "../hooks/use-overlay-history.js";
10
10
  import { useFocusTrap } from "../hooks/use-focus-trap.js";
11
11
  import { useBodyScrollLock } from "../hooks/use-body-scroll-lock.js";
12
+ import { takeEscape, useDismissLayer } from "../hooks/use-dismiss.js";
13
+ import { isImeEnter } from "../lib/ime.js";
12
14
  import { useKitLabels } from "../i18n/kit-labels.js";
15
+ import { DEFAULT_COMMAND_PALETTE_LABELS } from "./command-palette-labels.js";
13
16
  function groupItems(items) {
14
17
  const order = [];
15
18
  const byGroup = /* @__PURE__ */ new Map();
@@ -28,30 +31,9 @@ function groupItems(items) {
28
31
  flatIndex: new Map(flat.map((item, index) => [item, index]))
29
32
  };
30
33
  }
31
- const DEFAULT_COMMAND_PALETTE_LABELS = {
32
- placeholder: "Search\u2026",
33
- empty: "No results",
34
- loading: "Searching\u2026",
35
- dialog: "Search",
36
- error: "Search failed. Try again.",
37
- clear: "Clear search",
38
- submit: "Search",
39
- close: "Close"
40
- };
41
34
  const isThenable = (value) => typeof value?.then === "function";
42
35
  const { dialog: DEFAULT_DIALOG_NAME, ...DEFAULTS_WITHOUT_DIALOG } = DEFAULT_COMMAND_PALETTE_LABELS;
43
- function useCommandKey(onOpen) {
44
- useEffect(() => {
45
- const handler = (e) => {
46
- if ((e.metaKey || e.ctrlKey) && (e.key === "k" || e.key === "K")) {
47
- e.preventDefault();
48
- onOpen();
49
- }
50
- };
51
- document.addEventListener("keydown", handler);
52
- return () => document.removeEventListener("keydown", handler);
53
- }, [onOpen]);
54
- }
36
+ import { useCommandKey } from "./use-command-key.js";
55
37
  function CommandPalette({
56
38
  open,
57
39
  onClose,
@@ -169,16 +151,15 @@ function CommandPalette({
169
151
  e.preventDefault();
170
152
  setActive((i) => Math.max(i - 1, 0));
171
153
  } else if (e.key === "Enter") {
154
+ if (isImeEnter(e)) return;
172
155
  e.preventDefault();
173
156
  if (dirty) commit(draft);
174
157
  else choose(flat[active]);
175
158
  }
176
159
  };
160
+ useDismissLayer(open, onClose);
177
161
  const onDialogKeyDown = (e) => {
178
- if (e.key === "Escape") {
179
- e.preventDefault();
180
- onClose();
181
- }
162
+ takeEscape(e);
182
163
  };
183
164
  useEffect(() => {
184
165
  const el = listRef.current?.querySelector(`[data-index="${active}"]`);
@@ -209,8 +190,8 @@ function CommandPalette({
209
190
  onKeyDown: onDialogKeyDown,
210
191
  "data-fullscreen": isPhone || void 0,
211
192
  className: cn(
212
- "flex w-full flex-col overflow-hidden bg-[var(--bg-surface)] outline-none",
213
- isPhone ? "h-full" : "max-h-[70vh] max-w-xl rounded-xl border border-[var(--border)] shadow-2xl"
193
+ "flex w-full flex-col overflow-hidden bg-surface outline-none",
194
+ isPhone ? "h-full" : "max-h-[70vh] max-w-xl rounded-xl border border-subtle shadow-2xl"
214
195
  ),
215
196
  style: isPhone ? {
216
197
  paddingTop: "max(0px, env(safe-area-inset-top))",
@@ -219,8 +200,8 @@ function CommandPalette({
219
200
  paddingRight: "max(0px, env(safe-area-inset-right))"
220
201
  } : void 0,
221
202
  children: [
222
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-[var(--border)] px-3", children: [
223
- /* @__PURE__ */ jsx(Search, { className: "size-4 shrink-0 text-[var(--text-placeholder)]" }),
203
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-subtle px-3", children: [
204
+ /* @__PURE__ */ jsx(Search, { className: "size-4 shrink-0 text-placeholder" }),
224
205
  /* @__PURE__ */ jsx(
225
206
  "input",
226
207
  {
@@ -235,14 +216,14 @@ function CommandPalette({
235
216
  placeholder: l.placeholder,
236
217
  enterKeyHint: submitMode ? "search" : void 0,
237
218
  className: cn(
238
- "w-full bg-transparent py-3 outline-none placeholder:text-[var(--text-placeholder)] text-[var(--text-primary)]",
219
+ "w-full bg-transparent py-3 outline-none placeholder:text-placeholder text-primary",
239
220
  // 16px on a phone, or iOS zooms the page in on focus — and on any other
240
221
  // touch screen too (a tablet's popover), FIELD_TOUCH_TEXT (§10.1).
241
222
  isPhone ? "text-base" : cn("text-sm", FIELD_TOUCH_TEXT)
242
223
  )
243
224
  }
244
225
  ),
245
- loading && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-caption text-[var(--text-placeholder)]", children: l.loading }),
226
+ loading && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-caption text-placeholder", children: l.loading }),
246
227
  fieldText !== "" && /* @__PURE__ */ jsx(
247
228
  "button",
248
229
  {
@@ -252,7 +233,7 @@ function CommandPalette({
252
233
  commit("");
253
234
  inputRef.current?.focus();
254
235
  },
255
- className: "shrink-0 rounded p-1 text-[var(--text-placeholder)] hover:text-[var(--text-secondary)]",
236
+ className: "shrink-0 rounded p-1 text-placeholder hover:text-secondary",
256
237
  children: /* @__PURE__ */ jsx(X, { className: "size-4" })
257
238
  }
258
239
  ),
@@ -265,7 +246,7 @@ function CommandPalette({
265
246
  commit(draft);
266
247
  inputRef.current?.focus();
267
248
  },
268
- className: "shrink-0 rounded p-1 text-[var(--text-secondary)] hover:text-[var(--text-primary)]",
249
+ className: "shrink-0 rounded p-1 text-secondary hover:text-primary",
269
250
  children: /* @__PURE__ */ jsx(CornerDownLeft, { className: "size-4" })
270
251
  }
271
252
  ),
@@ -274,20 +255,20 @@ function CommandPalette({
274
255
  {
275
256
  type: "button",
276
257
  onClick: onClose,
277
- className: "-me-1 shrink-0 rounded px-1 py-2 text-sm text-[var(--text-secondary)] hover:text-[var(--text-primary)]",
258
+ className: "-me-1 shrink-0 rounded px-1 py-2 text-sm text-secondary hover:text-primary",
278
259
  children: l.close ?? DEFAULT_COMMAND_PALETTE_LABELS.close
279
260
  }
280
261
  )
281
262
  ] }),
282
- failed && !loading && /* @__PURE__ */ jsx("div", { role: "alert", className: "px-3 py-6 text-center text-sm text-[var(--text-muted)]", children: l.error ?? DEFAULT_COMMAND_PALETTE_LABELS.error }),
283
- !failed && results.length === 0 && !loading && /* @__PURE__ */ jsx("div", { className: "px-3 py-6 text-center text-sm text-[var(--text-muted)]", children: l.empty }),
263
+ failed && !loading && /* @__PURE__ */ jsx("div", { role: "alert", className: "px-3 py-6 text-center text-sm text-muted", children: l.error ?? DEFAULT_COMMAND_PALETTE_LABELS.error }),
264
+ !failed && results.length === 0 && !loading && /* @__PURE__ */ jsx("div", { className: "px-3 py-6 text-center text-sm text-muted", children: l.empty }),
284
265
  /* @__PURE__ */ jsx("ul", { id: listId, ref: listRef, role: "listbox", "aria-label": dialogName, className: "min-h-0 flex-1 overflow-y-auto py-1", children: groups.map(({ group, items }, groupIndex) => /* @__PURE__ */ jsxs("li", { role: "presentation", children: [
285
266
  /* @__PURE__ */ jsx(
286
267
  "div",
287
268
  {
288
269
  id: groupId(groupIndex),
289
270
  role: "presentation",
290
- className: "px-3 pb-0.5 pt-2 text-micro font-semibold uppercase tracking-wide text-[var(--text-placeholder)]",
271
+ className: "px-3 pb-0.5 pt-2 text-micro font-semibold uppercase tracking-wide text-placeholder",
291
272
  children: group
292
273
  }
293
274
  ),
@@ -298,7 +279,7 @@ function CommandPalette({
298
279
  {
299
280
  role: "presentation",
300
281
  className: cn(
301
- "flex items-center gap-2.5 px-3 text-xs text-[var(--text-placeholder)]",
282
+ "flex items-center gap-2.5 px-3 text-xs text-placeholder",
302
283
  comfortable ? "min-h-11 py-2.5" : "py-2"
303
284
  ),
304
285
  children: [
@@ -321,13 +302,13 @@ function CommandPalette({
321
302
  className: cn(
322
303
  "flex w-full items-center gap-2.5 px-3 text-start",
323
304
  comfortable ? "min-h-11 py-2.5 text-base" : "py-2 text-sm",
324
- isActive ? "bg-[var(--bg-active)] text-[var(--text-primary)]" : "text-[var(--text-secondary)]"
305
+ isActive ? "bg-active text-primary" : "text-secondary"
325
306
  )
326
307
  };
327
308
  const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
328
- item.icon && /* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center text-[var(--text-placeholder)]", children: item.icon }),
309
+ item.icon && /* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center text-placeholder", children: item.icon }),
329
310
  /* @__PURE__ */ jsx("span", { "data-private": redact || void 0, className: "min-w-0 flex-1 truncate", children: item.label }),
330
- item.hint && /* @__PURE__ */ jsx("span", { "data-private": redact || void 0, className: "shrink-0 text-xs text-[var(--text-placeholder)]", children: item.hint })
311
+ item.hint && /* @__PURE__ */ jsx("span", { "data-private": redact || void 0, className: "shrink-0 text-xs text-placeholder", children: item.hint })
331
312
  ] });
332
313
  return /* @__PURE__ */ jsx("li", { role: "presentation", children: item.href ? /* @__PURE__ */ jsx(
333
314
  "a",
@@ -346,7 +327,7 @@ function CommandPalette({
346
327
  ) : /* @__PURE__ */ jsx("button", { type: "button", ...shared, onClick: () => choose(item), children: inner }) }, item.id);
347
328
  }) })
348
329
  ] }, group)) }),
349
- l.hint && /* @__PURE__ */ jsx("div", { className: "border-t border-[var(--border)] px-3 py-1.5 text-caption text-[var(--text-placeholder)]", children: l.hint })
330
+ l.hint && /* @__PURE__ */ jsx("div", { className: "border-t border-subtle px-3 py-1.5 text-caption text-placeholder", children: l.hint })
350
331
  ]
351
332
  }
352
333
  )
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/search/command-palette.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useId, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CornerDownLeft, Search, X } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\nimport { FIELD_TOUCH_TEXT } from \"../components/ui\";\nimport { usePhoneLayout } from \"../hooks/use-breakpoint\";\nimport { useOverlayHistory } from \"../hooks/use-overlay-history\";\nimport { useFocusTrap } from \"../hooks/use-focus-trap\";\nimport { useBodyScrollLock } from \"../hooks/use-body-scroll-lock\";\nimport { useKitLabels } from \"../i18n/kit-labels\";\n\nexport interface CommandItem {\n id: string;\n /** Primary text. */\n label: string;\n /** Secondary text on the right (e.g. an amount, a date, a group hint). */\n hint?: string;\n /** Heading this item is grouped under. */\n group: string;\n /** Leading icon / element. */\n icon?: ReactNode;\n /** Invoked when the item is chosen (navigate, run an action, …). */\n onSelect: () => void;\n /** Where this item leads, when it is a navigation rather than an action. Renders\n * the row as a real anchor so it can be middle-/⌘-clicked into a new tab\n * (Keksdose feedback #451); `onSelect` still runs for a plain click and for ↵, so\n * in-app navigation stays client-side. `href` only adds what the browser can do\n * with a link and JavaScript cannot fake — the rejected alternative, an\n * `onAuxClick` calling `window.open`, gets the middle click and nothing else. */\n href?: string;\n /** Marks this row's label and hint `data-private`, so session replay and screenshot\n * tooling masks them — a payee, an account name, an amount. Overrides the palette's\n * {@link CommandPaletteProps.redactLabels} either way, so `false` un-masks one\n * harmless row (\"Settings\") in a palette that masks by default. */\n redact?: boolean;\n /**\n * `\"status\"` makes the row a line of text rather than a choice — a group's\n * \"Searching…\" while its source is still out, or its error. It is skipped by the\n * arrow keys and ↵, has no hover highlight, and its `onSelect` is never called.\n * Default `\"option\"`.\n */\n kind?: \"option\" | \"status\";\n}\n\n/** Group items preserving first-seen group order; `flat` is the navigable rows only. */\nfunction groupItems(items: CommandItem[]) {\n const order: string[] = [];\n const byGroup = new Map<string, CommandItem[]>();\n for (const item of items) {\n if (!byGroup.has(item.group)) {\n byGroup.set(item.group, []);\n order.push(item.group);\n }\n byGroup.get(item.group)!.push(item);\n }\n const flat = order.flatMap((g) => byGroup.get(g)!).filter((item) => item.kind !== \"status\");\n return {\n groups: order.map((g) => ({ group: g, items: byGroup.get(g)! })),\n flat,\n /** Each selectable item's position in `flat` — its `data-index` and keyboard slot. */\n flatIndex: new Map(flat.map((item, index) => [item, index])),\n };\n}\n\nexport interface CommandPaletteLabels {\n placeholder: string;\n empty: string;\n loading: string;\n /** Hint shown in the footer, e.g. \"↑↓ to navigate · ↵ to select · esc to close\". */\n hint?: string;\n /**\n * Accessible name of the dialog itself. It used to borrow `placeholder`, which is\n * written to sit greyed-out in an empty box (\"Search…\", \"Type a command\"), not to\n * name a window — and a reader heard the ellipsis read out as part of the name.\n *\n * Optional, unlike `placeholder`, so a translation annotated as\n * `CommandPaletteLabels` keeps compiling; the default always carries it.\n */\n dialog?: string;\n /**\n * Shown in place of the results when the `search` provider throws or its promise\n * rejects. Optional for the same reason as `dialog`; the default always carries it.\n */\n error?: string;\n /** Names the \"×\" that empties the field. Optional like `dialog`. */\n clear?: string;\n /** Names the button that commits the typed text when `searchOn=\"submit\"`. */\n submit?: string;\n /** Names the close button of the full-screen phone presentation, which has no\n * backdrop to tap and, on a phone, no Escape key. */\n close?: string;\n}\n\nexport const DEFAULT_COMMAND_PALETTE_LABELS: CommandPaletteLabels = {\n placeholder: \"Search…\",\n empty: \"No results\",\n loading: \"Searching…\",\n dialog: \"Search\",\n error: \"Search failed. Try again.\",\n clear: \"Clear search\",\n submit: \"Search\",\n close: \"Close\",\n};\n\n/**\n * How tall the palette's rows are. `\"compact\"` (the default) is the desktop list the\n * palette always drew, 36px a row; `\"comfortable\"` gives every row the kit's 44px touch\n * target (`min-h-11`) and body-size text — keksdose's phone search, where a 36px row\n * under a thumb picks its neighbour.\n */\nexport type CommandPaletteDensity = \"compact\" | \"comfortable\";\n\n/** A provider's answer is a promise — the only case with anything to wait for. */\nconst isThenable = (value: unknown): value is PromiseLike<unknown> =>\n typeof (value as PromiseLike<unknown> | null)?.then === \"function\";\n\n/** The defaults minus `dialog`, so a resolved `dialog` means someone SUPPLIED one —\n * see the dialog's `aria-label` for why that distinction matters. */\nconst { dialog: DEFAULT_DIALOG_NAME, ...DEFAULTS_WITHOUT_DIALOG } = DEFAULT_COMMAND_PALETTE_LABELS;\n\ninterface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n /**\n * Returns results for a query (called debounced as the user types; an empty\n * query is allowed — return defaults like pages/recent). Sync or async; stale\n * async responses are ignored.\n *\n * A SYNCHRONOUS provider (one returning an array, not a promise) never shows the\n * \"Searching…\" hint: its answer is there the moment it is asked, and the hint only\n * flashed through the debounce before results that were never late — keksdose's\n * transaction search filters a list already in memory. The palette tells the two\n * apart by what the provider RETURNS, call by call, so there is no prop to keep in\n * step with the implementation: an async provider shows the hint from the first\n * promise on (and during the debounce of every later query), a sync one never.\n *\n * Its IDENTITY is not a re-run signal — it is read through a ref, so the palette\n * never re-searches merely because the caller rebuilt the callback. That is\n * deliberate: a provider closing over a list rendered from a query allocates a new\n * function on most renders, and re-running the search on each would make typing\n * stutter. Use {@link CommandPaletteProps.revision} when the DATA behind the\n * provider changes.\n */\n search: (query: string) => CommandItem[] | Promise<CommandItem[]>;\n /**\n * Anything whose change means the current results are out of date — typically the\n * arrays the provider searches over. Compared by identity (as an effect dependency\n * would be), so pass stable references: a `data = []` default allocates a fresh\n * array on every render while a query is pending and would re-search forever.\n *\n * Without it, a provider whose data arrives AFTER the palette opened never gets\n * asked again: the user's last keystroke settles the debounce, the queries resolve a\n * moment later, and the groups they would have contributed are simply absent until\n * another keystroke. That is the ordinary first open on a cold cache.\n */\n revision?: unknown;\n /**\n * The search text, CONTROLLED. Keksdose binds it to the URL's `q`, so a search\n * survives a reload, can be shared as a link, and Back walks through it — none of\n * which state inside the palette can do.\n *\n * Leave it out and the palette keeps its own, as before, starting empty on every\n * open. Given, it is never reset on open: the owner decides what an open shows, and\n * a palette that blanked the URL's `q` each time would fight its own address bar.\n * `onQueryChange` is then how a keystroke gets anywhere, since it is the only writer.\n */\n query?: string;\n /** Every edit of the field's text. Fires in both modes — uncontrolled, it only\n * observes. */\n onQueryChange?: (query: string) => void;\n /**\n * When the typed text becomes THE query — the one `search` runs on and\n * `onQueryChange` reports.\n *\n * - `\"input\"` (default): every keystroke, debounced for the search, as before.\n * - `\"submit\"`: typing edits a draft; the query is committed by ↵ or the submit\n * button beside the field. Until then the results stay on the last committed query\n * and `onQueryChange` stays quiet — which is what an owner binding `query` to the\n * URL's `q` needs, or every keystroke re-filters the page behind and pushes history.\n * ↵ with a draft that differs from the committed query COMMITS; ↵ with nothing new\n * typed chooses the highlighted row, as in `\"input\"` mode. The draft follows any\n * outside change of the committed query (Back through the URL), and an uncommitted\n * draft is dropped when the palette is closed.\n *\n * The clear \"×\" commits the empty query in both modes: an emptied box over results\n * (or a page) still filtered by the old text is the stuck state Keksdose #423 was.\n */\n searchOn?: \"input\" | \"submit\";\n /** Mark every row's label and hint `data-private` (see {@link CommandItem.redact},\n * which overrides it per row). Off by default. */\n redactLabels?: boolean;\n /**\n * In the phone layout (`usePhoneLayout()`) the palette fills the screen:\n * no inset, no rounded panel, the field pinned at the top inside the safe areas and\n * the list scrolling under it, with a close button since there is no backdrop to tap.\n * On by default — a top-centred card at 70vh leaves little room once the keyboard is\n * up. `false` keeps the card on every viewport.\n */\n fullScreenOnPhone?: boolean;\n /** Row height — see {@link CommandPaletteDensity}. Default `\"compact\"`. */\n density?: CommandPaletteDensity;\n labels?: Partial<CommandPaletteLabels>;\n}\n\n/** Registers a global ⌘K / Ctrl-K shortcut that calls `onOpen`. */\nexport function useCommandKey(onOpen: () => void): void {\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && (e.key === \"k\" || e.key === \"K\")) {\n e.preventDefault();\n onOpen();\n }\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [onOpen]);\n}\n\n/**\n * A ⌘K-style command palette: a top-centred modal with a search field and a\n * grouped, keyboard-navigable result list. Domain-free — the app supplies\n * results via the `search` provider (pages, actions, records, …); each result\n * carries its own `onSelect`.\n */\nexport function CommandPalette({\n open,\n onClose,\n search,\n revision,\n query: queryProp,\n onQueryChange,\n searchOn = \"input\",\n redactLabels = false,\n fullScreenOnPhone = true,\n density = \"compact\",\n labels,\n}: CommandPaletteProps) {\n const l = useKitLabels(\"commandPalette\", DEFAULTS_WITHOUT_DIALOG, labels);\n // `dialog` is new, and until it existed the dialog was named by `placeholder`. An\n // app that translated `placeholder` and has not heard of `dialog` would otherwise\n // go from a German name to an English \"Search\" on update — so a translated\n // placeholder keeps doing the job until a `dialog` is supplied.\n const dialogName =\n l.dialog ??\n (l.placeholder !== DEFAULT_COMMAND_PALETTE_LABELS.placeholder ? l.placeholder : DEFAULT_DIALOG_NAME);\n const [ownQuery, setOwnQuery] = useState(\"\");\n const controlled = queryProp !== undefined;\n const query = controlled ? queryProp : ownQuery;\n const setQuery = (next: string) => {\n if (!controlled) setOwnQuery(next);\n onQueryChange?.(next);\n };\n const submitMode = searchOn === \"submit\";\n // The field's text in `\"submit\"` mode. It follows the committed query whenever that\n // changes — adjusted during render, React's pattern for state derived from a prop,\n // rather than in an effect that would paint the stale draft first.\n const [draft, setDraft] = useState(query);\n const [draftBase, setDraftBase] = useState(query);\n if (draftBase !== query) {\n setDraftBase(query);\n setDraft(query);\n }\n const fieldText = submitMode ? draft : query;\n const commit = (next: string) => {\n setDraft(next);\n setQuery(next);\n };\n const dirty = submitMode && draft !== query;\n const isPhone = usePhoneLayout() && fullScreenOnPhone;\n const [results, setResults] = useState<CommandItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [failed, setFailed] = useState(false);\n const [active, setActive] = useState(0);\n // Per instance: these were the literal \"command-palette-list\" / \"command-item-<id>\",\n // so two palettes on one page (an app-wide one and a scoped one) pointed each\n // other's `aria-controls` and `aria-activedescendant` at the wrong list.\n const uid = useId();\n const listId = `${uid}-list`;\n const itemId = (id: string) => `${uid}-item-${id}`;\n const groupId = (index: number) => `${uid}-group-${index}`;\n const dialogRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n // The latest `search`, callable from the debounced effect without being one of its\n // dependencies — `revision` is what re-runs it (see the prop's docstring).\n const runSearch = useEffectEvent((q: string) => search(q));\n const reqId = useRef(0);\n /** What the provider's last answer was: a promise (`false`), an array (`true`), or\n * not known yet. Only a provider known to be async shows \"Searching…\" while the\n * debounce runs — see `search`. */\n const syncRef = useRef<boolean | undefined>(undefined);\n /** The query the results on screen answer, and the row highlighted in them — so a\n * re-run for the SAME query (a `revision` change: a source streaming in) keeps the\n * highlight on its row instead of throwing it back to the top mid-arrow. */\n const shownQuery = useRef<string | null>(null);\n const activeIdRef = useRef<string | undefined>(undefined);\n\n // Back dismisses the palette (Keksdose feedback #172). Declared with the other\n // hooks, above the `if (!open) return null` below — a hook past a conditional\n // return changes the hook order between renders. Passing `open` rather than\n // mounting-while-open is what lets it sit here.\n useOverlayHistory(open, onClose);\n\n // A modal like any other: Tab stays inside, the page behind does not scroll, and\n // focus goes back to whatever opened it — the palette used to drop it on <body>.\n // Initial focus is the field, not the container: typing is the only reason to open it.\n useFocusTrap(dialogRef, { active: open, initialFocus: () => inputRef.current });\n useBodyScrollLock(open);\n\n // Reset when opened — the palette's OWN text only; a controlled query belongs to\n // its owner (see the prop). Adjusted during render on the closed-to-open transition\n // (starting from \"closed\", so a palette mounted open resets too). `controlled` is\n // read at the open, not watched: a caller switching modes while the palette is open\n // is not a reason to wipe what is typed.\n const [wasOpen, setWasOpen] = useState(false);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) {\n if (!controlled) setOwnQuery(\"\");\n // An uncommitted draft does not outlive the open it was typed in.\n setDraft(controlled ? query : \"\");\n setActive(0);\n }\n }\n // The ref half of that reset: results from a previous open do not carry a\n // highlight into this one.\n useEffect(() => {\n if (open) shownQuery.current = null;\n }, [open]);\n\n // Debounced, race-safe search.\n useEffect(() => {\n if (!open) return;\n const id = ++reqId.current;\n if (syncRef.current === false) setLoading(true);\n const run = async () => {\n try {\n const answer = runSearch(query);\n syncRef.current = !isThenable(answer);\n if (!syncRef.current) setLoading(true);\n const r = await answer;\n if (reqId.current === id) {\n const keep = shownQuery.current === query ? activeIdRef.current : undefined;\n const at = keep === undefined ? -1 : groupItems(r).flat.findIndex((item) => item.id === keep);\n shownQuery.current = query;\n setResults(r);\n setFailed(false);\n setActive(Math.max(at, 0));\n }\n } catch (err) {\n // There was no catch: the previous query's results stayed on screen as if they\n // answered this one, and the rejection went unhandled. Clear them and say so.\n if (reqId.current === id) {\n shownQuery.current = null;\n setResults([]);\n setFailed(true);\n setActive(0);\n }\n console.error(\"CommandPalette: search failed\", err);\n } finally {\n if (reqId.current === id) setLoading(false);\n }\n };\n const t = setTimeout(run, query ? 150 : 0);\n return () => clearTimeout(t);\n // `revision`, not `search`: see the prop's docstring. The debounce is re-armed on a\n // revision change, which is right — data arriving is not a keystroke and there is\n // nothing to feel laggy about.\n }, [query, open, revision]);\n\n // Group results, preserving first-seen group order; keep a flat list for nav.\n const { groups, flat, flatIndex } = useMemo(() => groupItems(results), [results]);\n useEffect(() => {\n activeIdRef.current = flat[active]?.id;\n });\n\n const choose = (item: CommandItem | undefined) => {\n if (!item) return;\n onClose();\n item.onSelect();\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActive((i) => Math.min(i + 1, flat.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActive((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (dirty) commit(draft);\n else choose(flat[active]);\n }\n };\n\n // Escape on the whole dialog, not only the field: once Tab has moved focus to a row\n // (or a footer control), Escape used to do nothing at all.\n const onDialogKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onClose();\n }\n };\n\n // Keep the active row scrolled into view.\n useEffect(() => {\n const el = listRef.current?.querySelector<HTMLElement>(`[data-index=\"${active}\"]`);\n // Optional-called, as in combobox-core: jsdom has no scrollIntoView, and every\n // consumer's tests crashed on the first highlighted row (kastlan stubbed it).\n el?.scrollIntoView?.({ block: \"nearest\" });\n }, [active]);\n\n if (!open) return null;\n\n const comfortable = density === \"comfortable\";\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- pointer-only backdrop dismiss; Escape is the keyboard path\n <div\n className={cn(\n \"fixed inset-0 z-[70] flex items-start justify-center bg-black/40\",\n isPhone ? \"p-0\" : \"p-4 pt-[10vh]\",\n )}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget) onClose();\n }}\n >\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- Escape from anywhere in the dialog */}\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={dialogName}\n // The trap's fallback target when the field is not there to take focus.\n tabIndex={-1}\n // Escape bubbling up from anything inside — a dialog is where it belongs.\n onKeyDown={onDialogKeyDown}\n data-fullscreen={isPhone || undefined}\n className={cn(\n \"flex w-full flex-col overflow-hidden bg-[var(--bg-surface)] outline-none\",\n isPhone\n ? \"h-full\"\n : \"max-h-[70vh] max-w-xl rounded-xl border border-[var(--border)] shadow-2xl\",\n )}\n // Full screen means edge to edge, so the notch, the home indicator and the\n // rounded corners are the panel's to keep clear of.\n style={\n isPhone\n ? {\n paddingTop: \"max(0px, env(safe-area-inset-top))\",\n paddingBottom: \"max(0px, env(safe-area-inset-bottom))\",\n paddingLeft: \"max(0px, env(safe-area-inset-left))\",\n paddingRight: \"max(0px, env(safe-area-inset-right))\",\n }\n : undefined\n }\n >\n <div className=\"flex shrink-0 items-center gap-2 border-b border-[var(--border)] px-3\">\n <Search className=\"size-4 shrink-0 text-[var(--text-placeholder)]\" />\n <input\n ref={inputRef}\n role=\"combobox\"\n aria-expanded\n aria-controls={listId}\n aria-activedescendant={flat[active] ? itemId(flat[active].id) : undefined}\n value={fieldText}\n onChange={(e) => (submitMode ? setDraft(e.target.value) : setQuery(e.target.value))}\n onKeyDown={onKeyDown}\n placeholder={l.placeholder}\n enterKeyHint={submitMode ? \"search\" : undefined}\n className={cn(\n \"w-full bg-transparent py-3 outline-none placeholder:text-[var(--text-placeholder)] text-[var(--text-primary)]\",\n // 16px on a phone, or iOS zooms the page in on focus — and on any other\n // touch screen too (a tablet's popover), FIELD_TOUCH_TEXT (§10.1).\n isPhone ? \"text-base\" : cn(\"text-sm\", FIELD_TOUCH_TEXT),\n )}\n />\n {loading && <span className=\"shrink-0 text-caption text-[var(--text-placeholder)]\">{l.loading}</span>}\n {fieldText !== \"\" && (\n <button\n type=\"button\"\n aria-label={l.clear ?? DEFAULT_COMMAND_PALETTE_LABELS.clear}\n onClick={() => {\n commit(\"\");\n // Clearing starts the next query far more often than it ends this one.\n inputRef.current?.focus();\n }}\n className=\"shrink-0 rounded p-1 text-[var(--text-placeholder)] hover:text-[var(--text-secondary)]\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n {dirty && (\n <button\n type=\"button\"\n aria-label={l.submit ?? DEFAULT_COMMAND_PALETTE_LABELS.submit}\n onClick={() => {\n commit(draft);\n inputRef.current?.focus();\n }}\n className=\"shrink-0 rounded p-1 text-[var(--text-secondary)] hover:text-[var(--text-primary)]\"\n >\n <CornerDownLeft className=\"size-4\" />\n </button>\n )}\n {isPhone && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"-me-1 shrink-0 rounded px-1 py-2 text-sm text-[var(--text-secondary)] hover:text-[var(--text-primary)]\"\n >\n {l.close ?? DEFAULT_COMMAND_PALETTE_LABELS.close}\n </button>\n )}\n </div>\n\n {/* The status lines sit outside the listbox: a listbox owns options and groups,\n and \"No results\" is neither. */}\n {failed && !loading && (\n <div role=\"alert\" className=\"px-3 py-6 text-center text-sm text-[var(--text-muted)]\">\n {l.error ?? DEFAULT_COMMAND_PALETTE_LABELS.error}\n </div>\n )}\n {/* `results`, not `flat`: a group whose only row is its \"Searching…\" line is not\n an empty result. */}\n {!failed && results.length === 0 && !loading && (\n <div className=\"px-3 py-6 text-center text-sm text-[var(--text-muted)]\">{l.empty}</div>\n )}\n {/* Listbox grouping: each group is a `role=\"group\"` named by its heading, and\n the list markup in between is presentational so the listbox's children are\n groups and options only — as a plain <li>/<ul> tree a reader announced\n \"list, 2 items\" between options and never tied the heading to its rows. */}\n <ul id={listId} ref={listRef} role=\"listbox\" aria-label={dialogName} className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {groups.map(({ group, items }, groupIndex) => (\n <li key={group} role=\"presentation\">\n <div\n id={groupId(groupIndex)}\n role=\"presentation\"\n className=\"px-3 pb-0.5 pt-2 text-micro font-semibold uppercase tracking-wide text-[var(--text-placeholder)]\"\n >\n {group}\n </div>\n <ul role=\"group\" aria-labelledby={groupId(groupIndex)}>\n {items.map((item) => {\n if (item.kind === \"status\") {\n return (\n <li\n key={item.id}\n role=\"presentation\"\n className={cn(\n \"flex items-center gap-2.5 px-3 text-xs text-[var(--text-placeholder)]\",\n comfortable ? \"min-h-11 py-2.5\" : \"py-2\",\n )}\n >\n {item.icon && <span className=\"flex size-4 shrink-0 items-center justify-center\">{item.icon}</span>}\n <span className=\"min-w-0 flex-1 truncate\">{item.label}</span>\n </li>\n );\n }\n const idx = flatIndex.get(item) ?? -1;\n const isActive = idx === active;\n const redact = item.redact ?? redactLabels;\n // Written once and worn by either tag below, so the anchor and the\n // button can never drift apart in looks or in listbox semantics.\n // `role=\"option\"` on an <a href> is fine: the browser's middle-click\n // behaviour keys off the element, not the ARIA role.\n const shared = {\n id: itemId(item.id),\n role: \"option\" as const,\n \"aria-selected\": isActive,\n \"data-index\": idx,\n onMouseMove: () => setActive(idx),\n className: cn(\n \"flex w-full items-center gap-2.5 px-3 text-start\",\n comfortable ? \"min-h-11 py-2.5 text-base\" : \"py-2 text-sm\",\n isActive\n ? \"bg-[var(--bg-active)] text-[var(--text-primary)]\"\n : \"text-[var(--text-secondary)]\",\n ),\n };\n const inner = (\n <>\n {item.icon && (\n <span className=\"flex size-4 shrink-0 items-center justify-center text-[var(--text-placeholder)]\">\n {item.icon}\n </span>\n )}\n <span data-private={redact || undefined} className=\"min-w-0 flex-1 truncate\">\n {item.label}\n </span>\n {item.hint && (\n <span data-private={redact || undefined} className=\"shrink-0 text-xs text-[var(--text-placeholder)]\">\n {item.hint}\n </span>\n )}\n </>\n );\n return (\n <li key={item.id} role=\"presentation\">\n {item.href ? (\n <a\n {...shared}\n href={item.href}\n draggable={false}\n onClick={(e) => {\n // A modified click belongs to the browser (feedback\n // #451) — and the palette deliberately stays OPEN for\n // it: ⌘-clicking three results in a row is the reason to\n // want this, and closing after the first would undo it.\n if (\n e.button !== 0 ||\n e.metaKey ||\n e.ctrlKey ||\n e.shiftKey ||\n e.altKey\n )\n return;\n e.preventDefault();\n choose(item);\n }}\n >\n {inner}\n </a>\n ) : (\n <button type=\"button\" {...shared} onClick={() => choose(item)}>\n {inner}\n </button>\n )}\n </li>\n );\n })}\n </ul>\n </li>\n ))}\n </ul>\n\n {l.hint && (\n <div className=\"border-t border-[var(--border)] px-3 py-1.5 text-caption text-[var(--text-placeholder)]\">\n {l.hint}\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/search/command-palette.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useId, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CornerDownLeft, Search, X } from \"lucide-react\";\nimport { cn } from \"../lib/cn\";\nimport { FIELD_TOUCH_TEXT } from \"../components/field-base\";\nimport { usePhoneLayout } from \"../hooks/use-breakpoint\";\nimport { useOverlayHistory } from \"../hooks/use-overlay-history\";\nimport { useFocusTrap } from \"../hooks/use-focus-trap\";\nimport { useBodyScrollLock } from \"../hooks/use-body-scroll-lock\";\nimport { takeEscape, useDismissLayer } from \"../hooks/use-dismiss\";\nimport { isImeEnter } from \"../lib/ime\";\nimport { useKitLabels, type LabelOverride } from \"../i18n/kit-labels\";\nimport { DEFAULT_COMMAND_PALETTE_LABELS } from \"./command-palette-labels\";\n\nexport interface CommandItem {\n id: string;\n /** Primary text. */\n label: string;\n /** Secondary text on the right (e.g. an amount, a date, a group hint). */\n hint?: string;\n /** Heading this item is grouped under. */\n group: string;\n /** Leading icon / element. */\n icon?: ReactNode;\n /** Invoked when the item is chosen (navigate, run an action, …). */\n onSelect: () => void;\n /** Where this item leads, when it is a navigation rather than an action. Renders\n * the row as a real anchor so it can be middle-/⌘-clicked into a new tab\n * (Keksdose feedback #451); `onSelect` still runs for a plain click and for ↵, so\n * in-app navigation stays client-side. `href` only adds what the browser can do\n * with a link and JavaScript cannot fake — the rejected alternative, an\n * `onAuxClick` calling `window.open`, gets the middle click and nothing else. */\n href?: string;\n /** Marks this row's label and hint `data-private`, so session replay and screenshot\n * tooling masks them — a payee, an account name, an amount. Overrides the palette's\n * {@link CommandPaletteProps.redactLabels} either way, so `false` un-masks one\n * harmless row (\"Settings\") in a palette that masks by default. */\n redact?: boolean;\n /**\n * `\"status\"` makes the row a line of text rather than a choice — a group's\n * \"Searching…\" while its source is still out, or its error. It is skipped by the\n * arrow keys and ↵, has no hover highlight, and its `onSelect` is never called.\n * Default `\"option\"`.\n */\n kind?: \"option\" | \"status\";\n}\n\n/** Group items preserving first-seen group order; `flat` is the navigable rows only. */\nfunction groupItems(items: CommandItem[]) {\n const order: string[] = [];\n const byGroup = new Map<string, CommandItem[]>();\n for (const item of items) {\n if (!byGroup.has(item.group)) {\n byGroup.set(item.group, []);\n order.push(item.group);\n }\n byGroup.get(item.group)!.push(item);\n }\n const flat = order.flatMap((g) => byGroup.get(g)!).filter((item) => item.kind !== \"status\");\n return {\n groups: order.map((g) => ({ group: g, items: byGroup.get(g)! })),\n flat,\n /** Each selectable item's position in `flat` — its `data-index` and keyboard slot. */\n flatIndex: new Map(flat.map((item, index) => [item, index])),\n };\n}\n\nexport interface CommandPaletteLabels {\n placeholder: string;\n empty: string;\n loading: string;\n /** Hint shown in the footer, e.g. \"↑↓ to navigate · ↵ to select · esc to close\". */\n hint?: string;\n /**\n * Accessible name of the dialog itself. It used to borrow `placeholder`, which is\n * written to sit greyed-out in an empty box (\"Search…\", \"Type a command\"), not to\n * name a window — and a reader heard the ellipsis read out as part of the name.\n *\n * Optional, unlike `placeholder`, so a translation annotated as\n * `CommandPaletteLabels` keeps compiling; the default always carries it.\n */\n dialog?: string;\n /**\n * Shown in place of the results when the `search` provider throws or its promise\n * rejects. Optional for the same reason as `dialog`; the default always carries it.\n */\n error?: string;\n /** Names the \"×\" that empties the field. Optional like `dialog`. */\n clear?: string;\n /** Names the button that commits the typed text when `searchOn=\"submit\"`. */\n submit?: string;\n /** Names the close button of the full-screen phone presentation, which has no\n * backdrop to tap and, on a phone, no Escape key. */\n close?: string;\n}\n\n// Defined in ./command-palette-labels, which holds no component code (0.34, KS U8).\nexport { DEFAULT_COMMAND_PALETTE_LABELS };\n\n/**\n * How tall the palette's rows are. `\"compact\"` (the default) is the desktop list the\n * palette always drew, 36px a row; `\"comfortable\"` gives every row the kit's 44px touch\n * target (`min-h-11`) and body-size text — keksdose's phone search, where a 36px row\n * under a thumb picks its neighbour.\n */\nexport type CommandPaletteDensity = \"compact\" | \"comfortable\";\n\n/** A provider's answer is a promise — the only case with anything to wait for. */\nconst isThenable = (value: unknown): value is PromiseLike<unknown> =>\n typeof (value as PromiseLike<unknown> | null)?.then === \"function\";\n\n/** The defaults minus `dialog`, so a resolved `dialog` means someone SUPPLIED one —\n * see the dialog's `aria-label` for why that distinction matters. */\nconst { dialog: DEFAULT_DIALOG_NAME, ...DEFAULTS_WITHOUT_DIALOG } = DEFAULT_COMMAND_PALETTE_LABELS;\n\ninterface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n /**\n * Returns results for a query (called debounced as the user types; an empty\n * query is allowed — return defaults like pages/recent). Sync or async; stale\n * async responses are ignored.\n *\n * A SYNCHRONOUS provider (one returning an array, not a promise) never shows the\n * \"Searching…\" hint: its answer is there the moment it is asked, and the hint only\n * flashed through the debounce before results that were never late — keksdose's\n * transaction search filters a list already in memory. The palette tells the two\n * apart by what the provider RETURNS, call by call, so there is no prop to keep in\n * step with the implementation: an async provider shows the hint from the first\n * promise on (and during the debounce of every later query), a sync one never.\n *\n * Its IDENTITY is not a re-run signal — it is read through a ref, so the palette\n * never re-searches merely because the caller rebuilt the callback. That is\n * deliberate: a provider closing over a list rendered from a query allocates a new\n * function on most renders, and re-running the search on each would make typing\n * stutter. Use {@link CommandPaletteProps.revision} when the DATA behind the\n * provider changes.\n */\n search: (query: string) => CommandItem[] | Promise<CommandItem[]>;\n /**\n * Anything whose change means the current results are out of date — typically the\n * arrays the provider searches over. Compared by identity (as an effect dependency\n * would be), so pass stable references: a `data = []` default allocates a fresh\n * array on every render while a query is pending and would re-search forever.\n *\n * Without it, a provider whose data arrives AFTER the palette opened never gets\n * asked again: the user's last keystroke settles the debounce, the queries resolve a\n * moment later, and the groups they would have contributed are simply absent until\n * another keystroke. That is the ordinary first open on a cold cache.\n */\n revision?: unknown;\n /**\n * The search text, CONTROLLED. Keksdose binds it to the URL's `q`, so a search\n * survives a reload, can be shared as a link, and Back walks through it — none of\n * which state inside the palette can do.\n *\n * Leave it out and the palette keeps its own, as before, starting empty on every\n * open. Given, it is never reset on open: the owner decides what an open shows, and\n * a palette that blanked the URL's `q` each time would fight its own address bar.\n * `onQueryChange` is then how a keystroke gets anywhere, since it is the only writer.\n */\n query?: string;\n /** Every edit of the field's text. Fires in both modes — uncontrolled, it only\n * observes. */\n onQueryChange?: (query: string) => void;\n /**\n * When the typed text becomes THE query — the one `search` runs on and\n * `onQueryChange` reports.\n *\n * - `\"input\"` (default): every keystroke, debounced for the search, as before.\n * - `\"submit\"`: typing edits a draft; the query is committed by ↵ or the submit\n * button beside the field. Until then the results stay on the last committed query\n * and `onQueryChange` stays quiet — which is what an owner binding `query` to the\n * URL's `q` needs, or every keystroke re-filters the page behind and pushes history.\n * ↵ with a draft that differs from the committed query COMMITS; ↵ with nothing new\n * typed chooses the highlighted row, as in `\"input\"` mode. The draft follows any\n * outside change of the committed query (Back through the URL), and an uncommitted\n * draft is dropped when the palette is closed.\n *\n * The clear \"×\" commits the empty query in both modes: an emptied box over results\n * (or a page) still filtered by the old text is the stuck state Keksdose #423 was.\n */\n searchOn?: \"input\" | \"submit\";\n /** Mark every row's label and hint `data-private` (see {@link CommandItem.redact},\n * which overrides it per row). Off by default. */\n redactLabels?: boolean;\n /**\n * In the phone layout (`usePhoneLayout()`) the palette fills the screen:\n * no inset, no rounded panel, the field pinned at the top inside the safe areas and\n * the list scrolling under it, with a close button since there is no backdrop to tap.\n * On by default — a top-centred card at 70vh leaves little room once the keyboard is\n * up. `false` keeps the card on every viewport.\n */\n fullScreenOnPhone?: boolean;\n /** Row height — see {@link CommandPaletteDensity}. Default `\"compact\"`. */\n density?: CommandPaletteDensity;\n labels?: LabelOverride<CommandPaletteLabels>;\n}\n\n// Defined in ./use-command-key, so `GlobalSearch` can listen for ⌘K without loading the\n// palette before it is opened (0.34, MOD-1).\nexport { useCommandKey } from \"./use-command-key\";\n\n/**\n * A ⌘K-style command palette: a top-centred modal with a search field and a\n * grouped, keyboard-navigable result list. Domain-free — the app supplies\n * results via the `search` provider (pages, actions, records, …); each result\n * carries its own `onSelect`.\n */\nexport function CommandPalette({\n open,\n onClose,\n search,\n revision,\n query: queryProp,\n onQueryChange,\n searchOn = \"input\",\n redactLabels = false,\n fullScreenOnPhone = true,\n density = \"compact\",\n labels,\n}: CommandPaletteProps) {\n const l = useKitLabels(\"commandPalette\", DEFAULTS_WITHOUT_DIALOG, labels);\n // `dialog` is new, and until it existed the dialog was named by `placeholder`. An\n // app that translated `placeholder` and has not heard of `dialog` would otherwise\n // go from a German name to an English \"Search\" on update — so a translated\n // placeholder keeps doing the job until a `dialog` is supplied.\n const dialogName =\n l.dialog ??\n (l.placeholder !== DEFAULT_COMMAND_PALETTE_LABELS.placeholder ? l.placeholder : DEFAULT_DIALOG_NAME);\n const [ownQuery, setOwnQuery] = useState(\"\");\n const controlled = queryProp !== undefined;\n const query = controlled ? queryProp : ownQuery;\n const setQuery = (next: string) => {\n if (!controlled) setOwnQuery(next);\n onQueryChange?.(next);\n };\n const submitMode = searchOn === \"submit\";\n // The field's text in `\"submit\"` mode. It follows the committed query whenever that\n // changes — adjusted during render, React's pattern for state derived from a prop,\n // rather than in an effect that would paint the stale draft first.\n const [draft, setDraft] = useState(query);\n const [draftBase, setDraftBase] = useState(query);\n if (draftBase !== query) {\n setDraftBase(query);\n setDraft(query);\n }\n const fieldText = submitMode ? draft : query;\n const commit = (next: string) => {\n setDraft(next);\n setQuery(next);\n };\n const dirty = submitMode && draft !== query;\n const isPhone = usePhoneLayout() && fullScreenOnPhone;\n const [results, setResults] = useState<CommandItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [failed, setFailed] = useState(false);\n const [active, setActive] = useState(0);\n // Per instance: these were the literal \"command-palette-list\" / \"command-item-<id>\",\n // so two palettes on one page (an app-wide one and a scoped one) pointed each\n // other's `aria-controls` and `aria-activedescendant` at the wrong list.\n const uid = useId();\n const listId = `${uid}-list`;\n const itemId = (id: string) => `${uid}-item-${id}`;\n const groupId = (index: number) => `${uid}-group-${index}`;\n const dialogRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n // The latest `search`, callable from the debounced effect without being one of its\n // dependencies — `revision` is what re-runs it (see the prop's docstring).\n const runSearch = useEffectEvent((q: string) => search(q));\n const reqId = useRef(0);\n /** What the provider's last answer was: a promise (`false`), an array (`true`), or\n * not known yet. Only a provider known to be async shows \"Searching…\" while the\n * debounce runs — see `search`. */\n const syncRef = useRef<boolean | undefined>(undefined);\n /** The query the results on screen answer, and the row highlighted in them — so a\n * re-run for the SAME query (a `revision` change: a source streaming in) keeps the\n * highlight on its row instead of throwing it back to the top mid-arrow. */\n const shownQuery = useRef<string | null>(null);\n const activeIdRef = useRef<string | undefined>(undefined);\n\n // Back dismisses the palette (Keksdose feedback #172). Declared with the other\n // hooks, above the `if (!open) return null` below — a hook past a conditional\n // return changes the hook order between renders. Passing `open` rather than\n // mounting-while-open is what lets it sit here.\n useOverlayHistory(open, onClose);\n\n // A modal like any other: Tab stays inside, the page behind does not scroll, and\n // focus goes back to whatever opened it — the palette used to drop it on <body>.\n // Initial focus is the field, not the container: typing is the only reason to open it.\n useFocusTrap(dialogRef, { active: open, initialFocus: () => inputRef.current });\n useBodyScrollLock(open);\n\n // Reset when opened — the palette's OWN text only; a controlled query belongs to\n // its owner (see the prop). Adjusted during render on the closed-to-open transition\n // (starting from \"closed\", so a palette mounted open resets too). `controlled` is\n // read at the open, not watched: a caller switching modes while the palette is open\n // is not a reason to wipe what is typed.\n const [wasOpen, setWasOpen] = useState(false);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) {\n if (!controlled) setOwnQuery(\"\");\n // An uncommitted draft does not outlive the open it was typed in.\n setDraft(controlled ? query : \"\");\n setActive(0);\n }\n }\n // The ref half of that reset: results from a previous open do not carry a\n // highlight into this one.\n useEffect(() => {\n if (open) shownQuery.current = null;\n }, [open]);\n\n // Debounced, race-safe search.\n useEffect(() => {\n if (!open) return;\n const id = ++reqId.current;\n if (syncRef.current === false) setLoading(true);\n const run = async () => {\n try {\n const answer = runSearch(query);\n syncRef.current = !isThenable(answer);\n if (!syncRef.current) setLoading(true);\n const r = await answer;\n if (reqId.current === id) {\n const keep = shownQuery.current === query ? activeIdRef.current : undefined;\n const at = keep === undefined ? -1 : groupItems(r).flat.findIndex((item) => item.id === keep);\n shownQuery.current = query;\n setResults(r);\n setFailed(false);\n setActive(Math.max(at, 0));\n }\n } catch (err) {\n // There was no catch: the previous query's results stayed on screen as if they\n // answered this one, and the rejection went unhandled. Clear them and say so.\n if (reqId.current === id) {\n shownQuery.current = null;\n setResults([]);\n setFailed(true);\n setActive(0);\n }\n console.error(\"CommandPalette: search failed\", err);\n } finally {\n if (reqId.current === id) setLoading(false);\n }\n };\n const t = setTimeout(run, query ? 150 : 0);\n return () => clearTimeout(t);\n // `revision`, not `search`: see the prop's docstring. The debounce is re-armed on a\n // revision change, which is right — data arriving is not a keystroke and there is\n // nothing to feel laggy about.\n }, [query, open, revision]);\n\n // Group results, preserving first-seen group order; keep a flat list for nav.\n const { groups, flat, flatIndex } = useMemo(() => groupItems(results), [results]);\n useEffect(() => {\n activeIdRef.current = flat[active]?.id;\n });\n\n const choose = (item: CommandItem | undefined) => {\n if (!item) return;\n onClose();\n item.onSelect();\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActive((i) => Math.min(i + 1, flat.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActive((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\") {\n // The Enter that confirms an IME composition is the IME's (BUG-9).\n if (isImeEnter(e)) return;\n e.preventDefault();\n if (dirty) commit(draft);\n else choose(flat[active]);\n }\n };\n\n // A layer on the kit's Escape stack while open (Wave 2, DUP-1), taken on the whole\n // dialog, not only the field: once Tab has moved focus to a row (or a footer\n // control), Escape used to do nothing at all. It closed without stopping the key, so\n // a dialog the palette was opened from closed with it.\n useDismissLayer(open, onClose);\n const onDialogKeyDown = (e: React.KeyboardEvent) => {\n takeEscape(e);\n };\n\n // Keep the active row scrolled into view.\n useEffect(() => {\n const el = listRef.current?.querySelector<HTMLElement>(`[data-index=\"${active}\"]`);\n // Optional-called, as in combobox-core: jsdom has no scrollIntoView, and every\n // consumer's tests crashed on the first highlighted row (kastlan stubbed it).\n el?.scrollIntoView?.({ block: \"nearest\" });\n }, [active]);\n\n if (!open) return null;\n\n const comfortable = density === \"comfortable\";\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- pointer-only backdrop dismiss; Escape is the keyboard path\n <div\n className={cn(\n \"fixed inset-0 z-[70] flex items-start justify-center bg-black/40\",\n isPhone ? \"p-0\" : \"p-4 pt-[10vh]\",\n )}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget) onClose();\n }}\n >\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- Escape from anywhere in the dialog */}\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={dialogName}\n // The trap's fallback target when the field is not there to take focus.\n tabIndex={-1}\n // Escape bubbling up from anything inside — a dialog is where it belongs.\n onKeyDown={onDialogKeyDown}\n data-fullscreen={isPhone || undefined}\n className={cn(\n \"flex w-full flex-col overflow-hidden bg-surface outline-none\",\n isPhone\n ? \"h-full\"\n : \"max-h-[70vh] max-w-xl rounded-xl border border-subtle shadow-2xl\",\n )}\n // Full screen means edge to edge, so the notch, the home indicator and the\n // rounded corners are the panel's to keep clear of.\n style={\n isPhone\n ? {\n paddingTop: \"max(0px, env(safe-area-inset-top))\",\n paddingBottom: \"max(0px, env(safe-area-inset-bottom))\",\n paddingLeft: \"max(0px, env(safe-area-inset-left))\",\n paddingRight: \"max(0px, env(safe-area-inset-right))\",\n }\n : undefined\n }\n >\n <div className=\"flex shrink-0 items-center gap-2 border-b border-subtle px-3\">\n <Search className=\"size-4 shrink-0 text-placeholder\" />\n <input\n ref={inputRef}\n role=\"combobox\"\n aria-expanded\n aria-controls={listId}\n aria-activedescendant={flat[active] ? itemId(flat[active].id) : undefined}\n value={fieldText}\n onChange={(e) => (submitMode ? setDraft(e.target.value) : setQuery(e.target.value))}\n onKeyDown={onKeyDown}\n placeholder={l.placeholder}\n enterKeyHint={submitMode ? \"search\" : undefined}\n className={cn(\n \"w-full bg-transparent py-3 outline-none placeholder:text-placeholder text-primary\",\n // 16px on a phone, or iOS zooms the page in on focus — and on any other\n // touch screen too (a tablet's popover), FIELD_TOUCH_TEXT (§10.1).\n isPhone ? \"text-base\" : cn(\"text-sm\", FIELD_TOUCH_TEXT),\n )}\n />\n {loading && <span className=\"shrink-0 text-caption text-placeholder\">{l.loading}</span>}\n {fieldText !== \"\" && (\n <button\n type=\"button\"\n aria-label={l.clear ?? DEFAULT_COMMAND_PALETTE_LABELS.clear}\n onClick={() => {\n commit(\"\");\n // Clearing starts the next query far more often than it ends this one.\n inputRef.current?.focus();\n }}\n className=\"shrink-0 rounded p-1 text-placeholder hover:text-secondary\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n {dirty && (\n <button\n type=\"button\"\n aria-label={l.submit ?? DEFAULT_COMMAND_PALETTE_LABELS.submit}\n onClick={() => {\n commit(draft);\n inputRef.current?.focus();\n }}\n className=\"shrink-0 rounded p-1 text-secondary hover:text-primary\"\n >\n <CornerDownLeft className=\"size-4\" />\n </button>\n )}\n {isPhone && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"-me-1 shrink-0 rounded px-1 py-2 text-sm text-secondary hover:text-primary\"\n >\n {l.close ?? DEFAULT_COMMAND_PALETTE_LABELS.close}\n </button>\n )}\n </div>\n\n {/* The status lines sit outside the listbox: a listbox owns options and groups,\n and \"No results\" is neither. */}\n {failed && !loading && (\n <div role=\"alert\" className=\"px-3 py-6 text-center text-sm text-muted\">\n {l.error ?? DEFAULT_COMMAND_PALETTE_LABELS.error}\n </div>\n )}\n {/* `results`, not `flat`: a group whose only row is its \"Searching…\" line is not\n an empty result. */}\n {!failed && results.length === 0 && !loading && (\n <div className=\"px-3 py-6 text-center text-sm text-muted\">{l.empty}</div>\n )}\n {/* Listbox grouping: each group is a `role=\"group\"` named by its heading, and\n the list markup in between is presentational so the listbox's children are\n groups and options only — as a plain <li>/<ul> tree a reader announced\n \"list, 2 items\" between options and never tied the heading to its rows. */}\n <ul id={listId} ref={listRef} role=\"listbox\" aria-label={dialogName} className=\"min-h-0 flex-1 overflow-y-auto py-1\">\n {groups.map(({ group, items }, groupIndex) => (\n <li key={group} role=\"presentation\">\n <div\n id={groupId(groupIndex)}\n role=\"presentation\"\n className=\"px-3 pb-0.5 pt-2 text-micro font-semibold uppercase tracking-wide text-placeholder\"\n >\n {group}\n </div>\n <ul role=\"group\" aria-labelledby={groupId(groupIndex)}>\n {items.map((item) => {\n if (item.kind === \"status\") {\n return (\n <li\n key={item.id}\n role=\"presentation\"\n className={cn(\n \"flex items-center gap-2.5 px-3 text-xs text-placeholder\",\n comfortable ? \"min-h-11 py-2.5\" : \"py-2\",\n )}\n >\n {item.icon && <span className=\"flex size-4 shrink-0 items-center justify-center\">{item.icon}</span>}\n <span className=\"min-w-0 flex-1 truncate\">{item.label}</span>\n </li>\n );\n }\n const idx = flatIndex.get(item) ?? -1;\n const isActive = idx === active;\n const redact = item.redact ?? redactLabels;\n // Written once and worn by either tag below, so the anchor and the\n // button can never drift apart in looks or in listbox semantics.\n // `role=\"option\"` on an <a href> is fine: the browser's middle-click\n // behaviour keys off the element, not the ARIA role.\n const shared = {\n id: itemId(item.id),\n role: \"option\" as const,\n \"aria-selected\": isActive,\n \"data-index\": idx,\n onMouseMove: () => setActive(idx),\n className: cn(\n \"flex w-full items-center gap-2.5 px-3 text-start\",\n comfortable ? \"min-h-11 py-2.5 text-base\" : \"py-2 text-sm\",\n isActive\n ? \"bg-active text-primary\"\n : \"text-secondary\",\n ),\n };\n const inner = (\n <>\n {item.icon && (\n <span className=\"flex size-4 shrink-0 items-center justify-center text-placeholder\">\n {item.icon}\n </span>\n )}\n <span data-private={redact || undefined} className=\"min-w-0 flex-1 truncate\">\n {item.label}\n </span>\n {item.hint && (\n <span data-private={redact || undefined} className=\"shrink-0 text-xs text-placeholder\">\n {item.hint}\n </span>\n )}\n </>\n );\n return (\n <li key={item.id} role=\"presentation\">\n {item.href ? (\n <a\n {...shared}\n href={item.href}\n draggable={false}\n onClick={(e) => {\n // A modified click belongs to the browser (feedback\n // #451) — and the palette deliberately stays OPEN for\n // it: ⌘-clicking three results in a row is the reason to\n // want this, and closing after the first would undo it.\n if (\n e.button !== 0 ||\n e.metaKey ||\n e.ctrlKey ||\n e.shiftKey ||\n e.altKey\n )\n return;\n e.preventDefault();\n choose(item);\n }}\n >\n {inner}\n </a>\n ) : (\n <button type=\"button\" {...shared} onClick={() => choose(item)}>\n {inner}\n </button>\n )}\n </li>\n );\n })}\n </ul>\n </li>\n ))}\n </ul>\n\n {l.hint && (\n <div className=\"border-t border-subtle px-3 py-1.5 text-caption text-placeholder\">\n {l.hint}\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,2 @@
1
+ import type { GlobalSearchLabels } from "./global-search.js";
2
+ export declare const DEFAULT_GLOBAL_SEARCH_LABELS: GlobalSearchLabels;
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ const DEFAULT_GLOBAL_SEARCH_LABELS = {
3
+ trigger: "Search",
4
+ placeholder: "Search or jump to\u2026",
5
+ shortcut: (keys) => `Search (${keys})`,
6
+ suggestions: "Try",
7
+ results: "Results"
8
+ };
9
+ export {
10
+ DEFAULT_GLOBAL_SEARCH_LABELS
11
+ };
12
+ //# sourceMappingURL=global-search-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/search/global-search-labels.ts"],"sourcesContent":["// The English words of ./global-search, in a module with no component code: the English\n// catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one\n// chunk like the other languages (0.34, KS U8). ./global-search re-exports them.\n\nimport type { GlobalSearchLabels } from \"./global-search\";\n\nexport const DEFAULT_GLOBAL_SEARCH_LABELS: GlobalSearchLabels = {\n trigger: \"Search\",\n placeholder: \"Search or jump to…\",\n shortcut: (keys) => `Search (${keys})`,\n suggestions: \"Try\",\n results: \"Results\",\n};\n"],"mappings":";AAMO,MAAM,+BAAmD;AAAA,EAC9D,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU,CAAC,SAAS,WAAW,IAAI;AAAA,EACnC,aAAa;AAAA,EACb,SAAS;AACX;","names":[]}
@@ -1,9 +1,9 @@
1
- import { CommandPaletteDensity, CommandPaletteLabels } from './command-palette.js';
2
- import { SearchEntry, SearchIndexOptions } from './search-index.js';
3
- import * as react from 'react';
4
- import { ReactNode } from 'react';
5
-
6
- interface GlobalSearchLabels {
1
+ import type { ReactNode } from "react";
2
+ import { type LabelOverride } from "../i18n/kit-labels.js";
3
+ import type { CommandPaletteDensity, CommandPaletteLabels } from "./command-palette.js";
4
+ import type { SearchEntry, SearchIndexOptions } from "./search-index.js";
5
+ import { DEFAULT_GLOBAL_SEARCH_LABELS } from "./global-search-labels.js";
6
+ export interface GlobalSearchLabels {
7
7
  /** The trigger's accessible name, and the dialog's. */
8
8
  trigger: string;
9
9
  /** The field's placeholder — says WHAT can be found, which "Search…" does not. */
@@ -16,14 +16,14 @@ interface GlobalSearchLabels {
16
16
  /** Heading for entries that name no `group`. */
17
17
  results: string;
18
18
  }
19
- declare const DEFAULT_GLOBAL_SEARCH_LABELS: GlobalSearchLabels;
19
+ export { DEFAULT_GLOBAL_SEARCH_LABELS };
20
20
  /**
21
21
  * A place results come from that is not the static index — a server search, a
22
22
  * local-first store too large to hand over whole. Each source is its own group, with its
23
23
  * own debounce, its own "Searching…" line and its own failure: the static groups never
24
24
  * wait for it, and one source failing never takes another's results with it.
25
25
  */
26
- interface GlobalSearchSource {
26
+ export interface GlobalSearchSource {
27
27
  /** Stable key — the effect that runs the source is keyed by it, not by identity. */
28
28
  id: string;
29
29
  /** The group its results are shown under (an entry's own `group` is ignored) — unless
@@ -61,12 +61,12 @@ interface GlobalSearchSource {
61
61
  }
62
62
  /** One of a multi-group source's groups: the `key` its entries name in `group`, and the
63
63
  * heading shown — so a server's type ("unit") need not be translated per entry. */
64
- interface GlobalSearchSourceGroup {
64
+ export interface GlobalSearchSourceGroup {
65
65
  key: string;
66
66
  label: string;
67
67
  }
68
68
  /** What a custom trigger gets: everything the default button uses. */
69
- interface GlobalSearchTriggerProps {
69
+ export interface GlobalSearchTriggerProps {
70
70
  open: () => void;
71
71
  /** Resolved `trigger` label — the accessible name. */
72
72
  label: string;
@@ -79,10 +79,10 @@ interface GlobalSearchTriggerProps {
79
79
  }
80
80
  /** A suggestion for the empty query: an entry, the `id` of one in `entries`, or a query
81
81
  * to type into the field. */
82
- type GlobalSearchSuggestion = SearchEntry | string | {
82
+ export type GlobalSearchSuggestion = SearchEntry | string | {
83
83
  query: string;
84
84
  };
85
- interface GlobalSearchProps {
85
+ export interface GlobalSearchProps {
86
86
  /**
87
87
  * The static index: pages, actions, settings rows — already filtered by the app (by
88
88
  * role, by privacy mode). Matched and ranked by {@link createSearchIndex}.
@@ -158,7 +158,7 @@ interface GlobalSearchProps {
158
158
  triggerName?: "plain" | "withShortcut";
159
159
  /** The palette's row height — `CommandPalette`'s `density`. Default `"compact"`. */
160
160
  density?: CommandPaletteDensity;
161
- labels?: Partial<GlobalSearchLabels>;
161
+ labels?: LabelOverride<GlobalSearchLabels>;
162
162
  /** Passed through to the palette (`empty`, `loading`, `error`, `hint`, …). */
163
163
  paletteLabels?: Partial<CommandPaletteLabels>;
164
164
  }
@@ -180,7 +180,8 @@ interface GlobalSearchProps {
180
180
  *
181
181
  * Inside a react-router tree it navigates with the router and builds its links with it;
182
182
  * outside one, pass `navigate` (or accept full page loads).
183
+ *
184
+ * Since 0.34 the palette's module loads on the first open (MOD-1), so the dialog appears a
185
+ * moment after the trigger or ⌘K: a test finds it with `await screen.findBy…`.
183
186
  */
184
- declare function GlobalSearch(props: GlobalSearchProps): react.JSX.Element;
185
-
186
- export { DEFAULT_GLOBAL_SEARCH_LABELS, GlobalSearch, type GlobalSearchLabels, type GlobalSearchProps, type GlobalSearchSource, type GlobalSearchSourceGroup, type GlobalSearchSuggestion, type GlobalSearchTriggerProps };
187
+ export declare function GlobalSearch(props: GlobalSearchProps): import("react").JSX.Element;
@@ -1,21 +1,19 @@
1
1
  "use client";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
- import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
3
+ import { lazy, Suspense, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
4
4
  import { useHref, useInRouterContext, useNavigate } from "react-router";
5
5
  import { AlertCircle, Loader2, Search } from "lucide-react";
6
6
  import { Tooltip } from "../components/tooltip.js";
7
7
  import { TOPBAR_TRIGGER_CLASS } from "../shell/topbar-controls.js";
8
8
  import { cn } from "../lib/cn.js";
9
9
  import { useKitLabels } from "../i18n/kit-labels.js";
10
- import { CommandPalette, DEFAULT_COMMAND_PALETTE_LABELS, useCommandKey } from "./command-palette.js";
10
+ import { DEFAULT_COMMAND_PALETTE_LABELS } from "./command-palette-labels.js";
11
+ import { useCommandKey } from "./use-command-key.js";
11
12
  import { createSearchIndex } from "./search-index.js";
12
- const DEFAULT_GLOBAL_SEARCH_LABELS = {
13
- trigger: "Search",
14
- placeholder: "Search or jump to\u2026",
15
- shortcut: (keys) => `Search (${keys})`,
16
- suggestions: "Try",
17
- results: "Results"
18
- };
13
+ import { DEFAULT_GLOBAL_SEARCH_LABELS } from "./global-search-labels.js";
14
+ const LazyCommandPalette = lazy(
15
+ () => import("./command-palette.js").then((module) => ({ default: module.CommandPalette }))
16
+ );
19
17
  function isApplePlatform() {
20
18
  if (typeof navigator === "undefined") return false;
21
19
  const nav = navigator;
@@ -101,6 +99,8 @@ function GlobalSearchImpl({
101
99
  setWasOpen(open);
102
100
  if (open && !queryControlled) setOwnQuery("");
103
101
  }
102
+ const [paletteMounted, setPaletteMounted] = useState(open);
103
+ if (open && !paletteMounted) setPaletteMounted(true);
104
104
  const openSearch = useCallback(() => setOpen(true), [setOpen]);
105
105
  const noop = useCallback(() => {
106
106
  }, []);
@@ -295,8 +295,8 @@ function GlobalSearchImpl({
295
295
  )
296
296
  }
297
297
  ),
298
- /* @__PURE__ */ jsx(
299
- CommandPalette,
298
+ paletteMounted && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
299
+ LazyCommandPalette,
300
300
  {
301
301
  open,
302
302
  onClose: () => setOpen(false),
@@ -310,7 +310,7 @@ function GlobalSearchImpl({
310
310
  density,
311
311
  labels: resolvedPaletteLabels
312
312
  }
313
- )
313
+ ) })
314
314
  ] });
315
315
  }
316
316
  const EMPTY = [];