@eifi1/ui-kit 0.33.1 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1534) hide show
  1. package/README.md +444 -282
  2. package/dist/account/account-parts.d.ts +6 -8
  3. package/dist/account/account-parts.js +1 -2
  4. package/dist/account/account-parts.js.map +1 -1
  5. package/dist/{components → account}/account-settings-labels.d.ts +16 -10
  6. package/dist/{components → account}/account-settings-labels.js +3 -1
  7. package/dist/account/account-settings-labels.js.map +1 -0
  8. package/dist/{components → account}/account-settings.d.ts +53 -23
  9. package/dist/{components → account}/account-settings.js +97 -26
  10. package/dist/account/account-settings.js.map +1 -0
  11. package/dist/account/data-export-setting-labels.d.ts +2 -0
  12. package/dist/account/data-export-setting-labels.js +15 -0
  13. package/dist/account/data-export-setting-labels.js.map +1 -0
  14. package/dist/account/data-export-setting.d.ts +9 -11
  15. package/dist/account/data-export-setting.js +11 -27
  16. package/dist/account/data-export-setting.js.map +1 -1
  17. package/dist/account/delete-account-setting-labels.d.ts +2 -0
  18. package/dist/account/delete-account-setting-labels.js +23 -0
  19. package/dist/account/delete-account-setting-labels.js.map +1 -0
  20. package/dist/account/delete-account-setting.d.ts +132 -101
  21. package/dist/account/delete-account-setting.js +7 -23
  22. package/dist/account/delete-account-setting.js.map +1 -1
  23. package/dist/account/email-change-setting-labels.d.ts +2 -0
  24. package/dist/account/email-change-setting-labels.js +28 -0
  25. package/dist/account/email-change-setting-labels.js.map +1 -0
  26. package/dist/account/email-change-setting.d.ts +10 -12
  27. package/dist/account/email-change-setting.js +11 -30
  28. package/dist/account/email-change-setting.js.map +1 -1
  29. package/dist/{components → account}/passkeys-setting.d.ts +9 -12
  30. package/dist/{components → account}/passkeys-setting.js +10 -7
  31. package/dist/account/passkeys-setting.js.map +1 -0
  32. package/dist/account/sessions-setting-labels.d.ts +2 -0
  33. package/dist/account/sessions-setting-labels.js +22 -0
  34. package/dist/account/sessions-setting-labels.js.map +1 -0
  35. package/dist/account/sessions-setting.d.ts +12 -14
  36. package/dist/account/sessions-setting.js +8 -23
  37. package/dist/account/sessions-setting.js.map +1 -1
  38. package/dist/admin/admin-action-confirm-labels.d.ts +2 -0
  39. package/dist/admin/admin-action-confirm-labels.js +16 -0
  40. package/dist/admin/admin-action-confirm-labels.js.map +1 -0
  41. package/dist/admin/admin-action-confirm.d.ts +156 -101
  42. package/dist/admin/admin-action-confirm.js +17 -22
  43. package/dist/admin/admin-action-confirm.js.map +1 -1
  44. package/dist/admin/admin-action-log-labels.d.ts +2 -0
  45. package/dist/admin/admin-action-log-labels.js +73 -0
  46. package/dist/admin/admin-action-log-labels.js.map +1 -0
  47. package/dist/admin/admin-action-log.d.ts +98 -22
  48. package/dist/admin/admin-action-log.js +48 -45
  49. package/dist/admin/admin-action-log.js.map +1 -1
  50. package/dist/admin/admin-parts.d.ts +7 -14
  51. package/dist/admin/admin-parts.js +0 -4
  52. package/dist/admin/admin-parts.js.map +1 -1
  53. package/dist/admin/invitations-panel-labels.d.ts +2 -0
  54. package/dist/admin/invitations-panel-labels.js +29 -0
  55. package/dist/admin/invitations-panel-labels.js.map +1 -0
  56. package/dist/admin/invitations-panel.d.ts +167 -101
  57. package/dist/admin/invitations-panel.js +12 -31
  58. package/dist/admin/invitations-panel.js.map +1 -1
  59. package/dist/admin/plan-change-labels.d.ts +2 -0
  60. package/dist/admin/plan-change-labels.js +22 -0
  61. package/dist/admin/plan-change-labels.js.map +1 -0
  62. package/dist/admin/plan-change.d.ts +244 -101
  63. package/dist/admin/plan-change.js +16 -24
  64. package/dist/admin/plan-change.js.map +1 -1
  65. package/dist/admin/reviewer-scope-editor-labels.d.ts +2 -0
  66. package/dist/admin/reviewer-scope-editor-labels.js +14 -0
  67. package/dist/admin/reviewer-scope-editor-labels.js.map +1 -0
  68. package/dist/admin/reviewer-scope-editor.d.ts +95 -101
  69. package/dist/admin/reviewer-scope-editor.js +5 -13
  70. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  71. package/dist/admin/role-select-labels.d.ts +2 -0
  72. package/dist/admin/role-select-labels.js +15 -0
  73. package/dist/admin/role-select-labels.js.map +1 -0
  74. package/dist/admin/role-select.d.ts +136 -101
  75. package/dist/admin/role-select.js +7 -18
  76. package/dist/admin/role-select.js.map +1 -1
  77. package/dist/admin/transfer-ownership-dialog-labels.d.ts +2 -0
  78. package/dist/admin/transfer-ownership-dialog-labels.js +18 -0
  79. package/dist/admin/transfer-ownership-dialog-labels.js.map +1 -0
  80. package/dist/admin/transfer-ownership-dialog.d.ts +81 -101
  81. package/dist/admin/transfer-ownership-dialog.js +3 -15
  82. package/dist/admin/transfer-ownership-dialog.js.map +1 -1
  83. package/dist/admin/user-roster-labels.d.ts +2 -0
  84. package/dist/admin/user-roster-labels.js +16 -0
  85. package/dist/admin/user-roster-labels.js.map +1 -0
  86. package/dist/admin/user-roster.d.ts +225 -101
  87. package/dist/admin/user-roster.js +4 -14
  88. package/dist/admin/user-roster.js.map +1 -1
  89. package/dist/auth/accept-invitation-labels.d.ts +2 -0
  90. package/dist/auth/accept-invitation-labels.js +20 -0
  91. package/dist/auth/accept-invitation-labels.js.map +1 -0
  92. package/dist/auth/accept-invitation.d.ts +11 -13
  93. package/dist/auth/accept-invitation.js +3 -16
  94. package/dist/auth/accept-invitation.js.map +1 -1
  95. package/dist/auth/auth-errors.d.ts +34 -23
  96. package/dist/auth/auth-errors.js +8 -4
  97. package/dist/auth/auth-errors.js.map +1 -1
  98. package/dist/auth/complete-name-dialog-labels.d.ts +2 -0
  99. package/dist/auth/complete-name-dialog-labels.js +14 -0
  100. package/dist/auth/complete-name-dialog-labels.js.map +1 -0
  101. package/dist/auth/complete-name-dialog.d.ts +9 -11
  102. package/dist/auth/complete-name-dialog.js +4 -11
  103. package/dist/auth/complete-name-dialog.js.map +1 -1
  104. package/dist/auth/email-tag.d.ts +2 -4
  105. package/dist/auth/forgot-password-form-labels.d.ts +3 -0
  106. package/dist/auth/forgot-password-form-labels.js +17 -0
  107. package/dist/auth/forgot-password-form-labels.js.map +1 -0
  108. package/dist/auth/forgot-password-form.d.ts +9 -12
  109. package/dist/auth/forgot-password-form.js +6 -15
  110. package/dist/auth/forgot-password-form.js.map +1 -1
  111. package/dist/auth/form-rules.d.ts +5 -7
  112. package/dist/auth/new-password-fields.d.ts +4 -8
  113. package/dist/auth/new-password-fields.js +1 -1
  114. package/dist/auth/new-password-fields.js.map +1 -1
  115. package/dist/auth/not-found-page-labels.d.ts +2 -0
  116. package/dist/auth/not-found-page-labels.js +11 -0
  117. package/dist/auth/not-found-page-labels.js.map +1 -0
  118. package/dist/auth/not-found-page.d.ts +9 -11
  119. package/dist/auth/not-found-page.js +5 -10
  120. package/dist/auth/not-found-page.js.map +1 -1
  121. package/dist/auth/register-form-labels.d.ts +3 -0
  122. package/dist/auth/register-form-labels.js +28 -0
  123. package/dist/auth/register-form-labels.js.map +1 -0
  124. package/dist/auth/register-form.d.ts +174 -101
  125. package/dist/auth/register-form.js +11 -31
  126. package/dist/auth/register-form.js.map +1 -1
  127. package/dist/auth/reset-password-form-labels.d.ts +3 -0
  128. package/dist/auth/reset-password-form-labels.js +24 -0
  129. package/dist/auth/reset-password-form-labels.js.map +1 -0
  130. package/dist/auth/reset-password-form.d.ts +12 -15
  131. package/dist/auth/reset-password-form.js +6 -22
  132. package/dist/auth/reset-password-form.js.map +1 -1
  133. package/dist/auth/sign-in-form-labels.d.ts +3 -0
  134. package/dist/auth/sign-in-form-labels.js +42 -0
  135. package/dist/auth/sign-in-form-labels.js.map +1 -0
  136. package/dist/auth/sign-in-form.d.ts +15 -19
  137. package/dist/auth/sign-in-form.js +12 -46
  138. package/dist/auth/sign-in-form.js.map +1 -1
  139. package/dist/auth/status-parts.d.ts +13 -17
  140. package/dist/auth/status-parts.js +3 -3
  141. package/dist/auth/status-parts.js.map +1 -1
  142. package/dist/auth/verify-email-labels.d.ts +2 -0
  143. package/dist/auth/verify-email-labels.js +25 -0
  144. package/dist/auth/verify-email-labels.js.map +1 -0
  145. package/dist/auth/verify-email.d.ts +15 -17
  146. package/dist/auth/verify-email.js +4 -21
  147. package/dist/auth/verify-email.js.map +1 -1
  148. package/dist/billing/billing-banner.d.ts +8 -109
  149. package/dist/billing/billing-banner.js +2 -1
  150. package/dist/billing/billing-banner.js.map +1 -1
  151. package/dist/billing/billing-labels.d.ts +168 -101
  152. package/dist/billing/billing-labels.js.map +1 -1
  153. package/dist/billing/billing-lock.d.ts +10 -110
  154. package/dist/billing/billing-overview.d.ts +7 -109
  155. package/dist/billing/billing-standing.d.ts +6 -108
  156. package/dist/billing/checkout-processing.d.ts +8 -111
  157. package/dist/billing/checkout-processing.js +2 -9
  158. package/dist/billing/checkout-processing.js.map +1 -1
  159. package/dist/billing/checkout-return.d.ts +5 -7
  160. package/dist/billing/pay-page.d.ts +15 -117
  161. package/dist/billing/plan-card.d.ts +14 -115
  162. package/dist/billing/plan-card.js +15 -13
  163. package/dist/billing/plan-card.js.map +1 -1
  164. package/dist/billing/plan-limit-notice.d.ts +8 -109
  165. package/dist/billing/plan-limit-notice.js +1 -1
  166. package/dist/billing/plan-limit-notice.js.map +1 -1
  167. package/dist/billing/plan-limit-toast.d.ts +6 -107
  168. package/dist/billing/plan-limit.d.ts +2 -4
  169. package/dist/billing/plan-price.d.ts +10 -12
  170. package/dist/billing/subscription-actions.d.ts +6 -109
  171. package/dist/billing/subscription-actions.js +2 -2
  172. package/dist/billing/subscription-actions.js.map +1 -1
  173. package/dist/billing/subscription-status-chip.d.ts +7 -108
  174. package/dist/chart.d.ts +12 -113
  175. package/dist/chart.js +4 -0
  176. package/dist/chart.js.map +1 -1
  177. package/dist/components/account-chips-labels.d.ts +10 -0
  178. package/dist/components/account-chips-labels.js +15 -0
  179. package/dist/components/account-chips-labels.js.map +1 -0
  180. package/dist/components/account-chips.d.ts +22 -44
  181. package/dist/components/account-chips.js +9 -14
  182. package/dist/components/account-chips.js.map +1 -1
  183. package/dist/components/alert-banner.d.ts +15 -11
  184. package/dist/components/alert-banner.js +28 -18
  185. package/dist/components/alert-banner.js.map +1 -1
  186. package/dist/components/amount-input.d.ts +66 -110
  187. package/dist/components/amount-input.js +259 -283
  188. package/dist/components/amount-input.js.map +1 -1
  189. package/dist/components/appearance-labels.d.ts +6 -10
  190. package/dist/components/appearance-labels.js.map +1 -1
  191. package/dist/components/authed-image-labels.d.ts +2 -0
  192. package/dist/components/authed-image-labels.js +10 -0
  193. package/dist/components/authed-image-labels.js.map +1 -0
  194. package/dist/components/authed-image.d.ts +11 -13
  195. package/dist/components/authed-image.js +2 -6
  196. package/dist/components/authed-image.js.map +1 -1
  197. package/dist/components/autocomplete.d.ts +13 -11
  198. package/dist/components/autocomplete.js +33 -28
  199. package/dist/components/autocomplete.js.map +1 -1
  200. package/dist/components/breadcrumbs-labels.d.ts +2 -0
  201. package/dist/components/breadcrumbs-labels.js +9 -0
  202. package/dist/components/breadcrumbs-labels.js.map +1 -0
  203. package/dist/components/breadcrumbs.d.ts +10 -12
  204. package/dist/components/breadcrumbs.js +7 -10
  205. package/dist/components/breadcrumbs.js.map +1 -1
  206. package/dist/components/bulk-action-bar-labels.d.ts +2 -0
  207. package/dist/components/bulk-action-bar-labels.js +10 -0
  208. package/dist/components/bulk-action-bar-labels.js.map +1 -0
  209. package/dist/components/bulk-action-bar.d.ts +10 -12
  210. package/dist/components/bulk-action-bar.js +9 -12
  211. package/dist/components/bulk-action-bar.js.map +1 -1
  212. package/dist/components/button-group.d.ts +7 -110
  213. package/dist/components/button-group.js +5 -5
  214. package/dist/components/button-group.js.map +1 -1
  215. package/dist/components/button-look.d.ts +88 -0
  216. package/dist/components/button-look.js +91 -0
  217. package/dist/components/button-look.js.map +1 -0
  218. package/dist/components/button.d.ts +153 -0
  219. package/dist/components/button.js +165 -0
  220. package/dist/components/button.js.map +1 -0
  221. package/dist/components/calculator.d.ts +8 -107
  222. package/dist/components/calculator.js +10 -7
  223. package/dist/components/calculator.js.map +1 -1
  224. package/dist/components/calendar-heatmap-labels.d.ts +3 -0
  225. package/dist/components/calendar-heatmap-labels.js +12 -0
  226. package/dist/components/calendar-heatmap-labels.js.map +1 -0
  227. package/dist/components/calendar-heatmap.d.ts +13 -16
  228. package/dist/components/calendar-heatmap.js +7 -13
  229. package/dist/components/calendar-heatmap.js.map +1 -1
  230. package/dist/components/card.d.ts +145 -0
  231. package/dist/components/card.js +186 -0
  232. package/dist/components/card.js.map +1 -0
  233. package/dist/components/chart-height.d.ts +4 -7
  234. package/dist/components/chart-zoom-core.d.ts +202 -0
  235. package/dist/components/chart-zoom-core.js +334 -0
  236. package/dist/components/chart-zoom-core.js.map +1 -0
  237. package/dist/components/chart-zoom.d.ts +39 -205
  238. package/dist/components/chart-zoom.js +15 -316
  239. package/dist/components/chart-zoom.js.map +1 -1
  240. package/dist/components/chart.d.ts +11 -15
  241. package/dist/components/chart.js +11 -11
  242. package/dist/components/chart.js.map +1 -1
  243. package/dist/components/checkbox-group.d.ts +6 -10
  244. package/dist/components/checkbox-group.js +10 -9
  245. package/dist/components/checkbox-group.js.map +1 -1
  246. package/dist/components/checkbox.d.ts +8 -12
  247. package/dist/components/checkbox.js +20 -18
  248. package/dist/components/checkbox.js.map +1 -1
  249. package/dist/components/chip-input.d.ts +73 -0
  250. package/dist/components/chip-input.js +224 -0
  251. package/dist/components/chip-input.js.map +1 -0
  252. package/dist/components/chip-labels.d.ts +2 -0
  253. package/dist/components/chip-labels.js +12 -0
  254. package/dist/components/chip-labels.js.map +1 -0
  255. package/dist/components/chip.d.ts +18 -93
  256. package/dist/components/chip.js +74 -426
  257. package/dist/components/chip.js.map +1 -1
  258. package/dist/components/choice-card.d.ts +21 -18
  259. package/dist/components/choice-card.js +45 -45
  260. package/dist/components/choice-card.js.map +1 -1
  261. package/dist/components/column-mapper-labels.d.ts +5 -0
  262. package/dist/components/column-mapper-labels.js +34 -0
  263. package/dist/components/column-mapper-labels.js.map +1 -0
  264. package/dist/components/column-mapper.d.ts +15 -17
  265. package/dist/components/column-mapper.js +11 -37
  266. package/dist/components/column-mapper.js.map +1 -1
  267. package/dist/components/combobox-core.d.ts +79 -40
  268. package/dist/components/combobox-core.js +187 -121
  269. package/dist/components/combobox-core.js.map +1 -1
  270. package/dist/components/combobox-suggestions.d.ts +76 -0
  271. package/dist/components/combobox-suggestions.js +56 -0
  272. package/dist/components/combobox-suggestions.js.map +1 -0
  273. package/dist/components/combobox.d.ts +14 -159
  274. package/dist/components/combobox.js +40 -507
  275. package/dist/components/combobox.js.map +1 -1
  276. package/dist/components/confirm-dialog-labels.d.ts +7 -0
  277. package/dist/components/confirm-dialog-labels.js +10 -0
  278. package/dist/components/confirm-dialog-labels.js.map +1 -0
  279. package/dist/components/confirm-dialog.d.ts +165 -101
  280. package/dist/components/confirm-dialog.js +2 -6
  281. package/dist/components/confirm-dialog.js.map +1 -1
  282. package/dist/components/copy-button-labels.d.ts +2 -0
  283. package/dist/components/copy-button-labels.js +12 -0
  284. package/dist/components/copy-button-labels.js.map +1 -0
  285. package/dist/components/copy-button.d.ts +70 -101
  286. package/dist/components/copy-button.js +4 -9
  287. package/dist/components/copy-button.js.map +1 -1
  288. package/dist/components/country-select-labels.d.ts +2 -0
  289. package/dist/components/country-select-labels.js +10 -0
  290. package/dist/components/country-select-labels.js.map +1 -0
  291. package/dist/components/country-select.d.ts +18 -15
  292. package/dist/components/country-select.js +49 -64
  293. package/dist/components/country-select.js.map +1 -1
  294. package/dist/components/currency-option-list.d.ts +63 -0
  295. package/dist/components/currency-option-list.js +135 -0
  296. package/dist/components/currency-option-list.js.map +1 -0
  297. package/dist/components/currency-select.d.ts +10 -30
  298. package/dist/components/currency-select.js +50 -133
  299. package/dist/components/currency-select.js.map +1 -1
  300. package/dist/components/danger-confirm-labels.d.ts +14 -0
  301. package/dist/components/danger-confirm-labels.js +17 -0
  302. package/dist/components/danger-confirm-labels.js.map +1 -0
  303. package/dist/components/danger-confirm.d.ts +448 -101
  304. package/dist/components/danger-confirm.js +40 -46
  305. package/dist/components/danger-confirm.js.map +1 -1
  306. package/dist/components/data-table-cells.d.ts +9 -24
  307. package/dist/components/data-table-cells.js +1 -1
  308. package/dist/components/data-table-cells.js.map +1 -1
  309. package/dist/components/data-table-column-settings.d.ts +16 -0
  310. package/dist/components/data-table-column-settings.js +119 -0
  311. package/dist/components/data-table-column-settings.js.map +1 -0
  312. package/dist/components/data-table-filter-popover.d.ts +5 -19
  313. package/dist/components/data-table-filter-popover.js +39 -22
  314. package/dist/components/data-table-filter-popover.js.map +1 -1
  315. package/dist/components/data-table-filters.d.ts +93 -15
  316. package/dist/components/data-table-filters.js +22 -7
  317. package/dist/components/data-table-filters.js.map +1 -1
  318. package/dist/components/data-table-head.d.ts +36 -0
  319. package/dist/components/data-table-head.js +190 -0
  320. package/dist/components/data-table-head.js.map +1 -0
  321. package/dist/components/data-table-labels.d.ts +124 -15
  322. package/dist/components/data-table-labels.js +9 -5
  323. package/dist/components/data-table-labels.js.map +1 -1
  324. package/dist/components/data-table-mobile.d.ts +106 -0
  325. package/dist/components/data-table-mobile.js +412 -0
  326. package/dist/components/data-table-mobile.js.map +1 -0
  327. package/dist/components/data-table-pagination.d.ts +6 -21
  328. package/dist/components/data-table-pagination.js +7 -7
  329. package/dist/components/data-table-pagination.js.map +1 -1
  330. package/dist/components/data-table-resize.d.ts +37 -0
  331. package/dist/components/data-table-resize.js +103 -0
  332. package/dist/components/data-table-resize.js.map +1 -0
  333. package/dist/components/data-table-row-actions.d.ts +24 -0
  334. package/dist/components/data-table-row-actions.js +95 -0
  335. package/dist/components/data-table-row-actions.js.map +1 -0
  336. package/dist/components/data-table-selection.d.ts +21 -0
  337. package/dist/components/data-table-selection.js +30 -0
  338. package/dist/components/data-table-selection.js.map +1 -0
  339. package/dist/components/data-table-shared.d.ts +77 -0
  340. package/dist/components/data-table-shared.js +77 -0
  341. package/dist/components/data-table-shared.js.map +1 -0
  342. package/dist/components/data-table-sort.d.ts +8 -10
  343. package/dist/components/data-table.d.ts +603 -15
  344. package/dist/components/data-table.js +134 -927
  345. package/dist/components/data-table.js.map +1 -1
  346. package/dist/components/date-field.d.ts +203 -0
  347. package/dist/components/date-field.js +270 -0
  348. package/dist/components/date-field.js.map +1 -0
  349. package/dist/components/date-picker.d.ts +6 -261
  350. package/dist/components/date-picker.js +24 -760
  351. package/dist/components/date-picker.js.map +1 -1
  352. package/dist/components/date-range-picker.d.ts +125 -0
  353. package/dist/components/date-range-picker.js +261 -0
  354. package/dist/components/date-range-picker.js.map +1 -0
  355. package/dist/components/description-list-labels.d.ts +2 -0
  356. package/dist/components/description-list-labels.js +8 -0
  357. package/dist/components/description-list-labels.js.map +1 -0
  358. package/dist/components/description-list.d.ts +13 -15
  359. package/dist/components/description-list.js +17 -11
  360. package/dist/components/description-list.js.map +1 -1
  361. package/dist/components/dialog-frame-labels.d.ts +2 -0
  362. package/dist/components/dialog-frame-labels.js +6 -0
  363. package/dist/components/dialog-frame-labels.js.map +1 -0
  364. package/dist/components/dialog-frame.d.ts +7 -11
  365. package/dist/components/dialog-frame.js +6 -6
  366. package/dist/components/dialog-frame.js.map +1 -1
  367. package/dist/components/disclosure.d.ts +6 -10
  368. package/dist/components/disclosure.js +11 -11
  369. package/dist/components/disclosure.js.map +1 -1
  370. package/dist/components/dropdown.d.ts +55 -27
  371. package/dist/components/dropdown.js +53 -30
  372. package/dist/components/dropdown.js.map +1 -1
  373. package/dist/components/empty-state.d.ts +64 -0
  374. package/dist/components/empty-state.js +70 -0
  375. package/dist/components/empty-state.js.map +1 -0
  376. package/dist/components/entity-combobox.d.ts +10 -11
  377. package/dist/components/entity-combobox.js +14 -13
  378. package/dist/components/entity-combobox.js.map +1 -1
  379. package/dist/components/error-boundary-labels.d.ts +2 -0
  380. package/dist/components/error-boundary-labels.js +19 -0
  381. package/dist/components/error-boundary-labels.js.map +1 -0
  382. package/dist/components/error-boundary.d.ts +17 -17
  383. package/dist/components/error-boundary.js +5 -17
  384. package/dist/components/error-boundary.js.map +1 -1
  385. package/dist/components/facing-pair.d.ts +7 -116
  386. package/dist/components/facing-pair.js +1 -1
  387. package/dist/components/facing-pair.js.map +1 -1
  388. package/dist/components/field-base.d.ts +260 -0
  389. package/dist/components/field-base.js +228 -0
  390. package/dist/components/field-base.js.map +1 -0
  391. package/dist/components/field-parts.d.ts +188 -87
  392. package/dist/components/field-parts.js +60 -33
  393. package/dist/components/field-parts.js.map +1 -1
  394. package/dist/components/field-strip.d.ts +19 -28
  395. package/dist/components/field-strip.js +2 -2
  396. package/dist/components/field-strip.js.map +1 -1
  397. package/dist/components/field-sync-labels.d.ts +2 -0
  398. package/dist/components/field-sync-labels.js +12 -0
  399. package/dist/components/field-sync-labels.js.map +1 -0
  400. package/dist/components/field-sync.d.ts +20 -19
  401. package/dist/components/field-sync.js +4 -10
  402. package/dist/components/field-sync.js.map +1 -1
  403. package/dist/components/field.d.ts +45 -10
  404. package/dist/components/field.js +10 -8
  405. package/dist/components/field.js.map +1 -1
  406. package/dist/components/file-button.d.ts +85 -101
  407. package/dist/components/file-button.js +23 -169
  408. package/dist/components/file-button.js.map +1 -1
  409. package/dist/components/file-dropzone.d.ts +9 -110
  410. package/dist/components/file-dropzone.js +22 -22
  411. package/dist/components/file-dropzone.js.map +1 -1
  412. package/dist/components/floating-panel-labels.d.ts +2 -0
  413. package/dist/components/floating-panel-labels.js +9 -0
  414. package/dist/components/floating-panel-labels.js.map +1 -0
  415. package/dist/components/floating-panel.d.ts +17 -21
  416. package/dist/components/floating-panel.js +19 -18
  417. package/dist/components/floating-panel.js.map +1 -1
  418. package/dist/components/focus-ring.d.ts +9 -6
  419. package/dist/components/focus-ring.js +2 -2
  420. package/dist/components/focus-ring.js.map +1 -1
  421. package/dist/components/form-actions-labels.d.ts +2 -0
  422. package/dist/components/form-actions-labels.js +10 -0
  423. package/dist/components/form-actions-labels.js.map +1 -0
  424. package/dist/components/form-actions.d.ts +280 -101
  425. package/dist/components/form-actions.js +10 -20
  426. package/dist/components/form-actions.js.map +1 -1
  427. package/dist/components/full-bleed-dialog.d.ts +7 -8
  428. package/dist/components/full-bleed-dialog.js +14 -13
  429. package/dist/components/full-bleed-dialog.js.map +1 -1
  430. package/dist/components/grouped-picker.d.ts +21 -16
  431. package/dist/components/grouped-picker.js +76 -62
  432. package/dist/components/grouped-picker.js.map +1 -1
  433. package/dist/components/help-popover.d.ts +60 -0
  434. package/dist/components/help-popover.js +48 -0
  435. package/dist/components/help-popover.js.map +1 -0
  436. package/dist/components/hover-menu.d.ts +17 -16
  437. package/dist/components/hover-menu.js +18 -17
  438. package/dist/components/hover-menu.js.map +1 -1
  439. package/dist/components/iban-input-labels.d.ts +2 -0
  440. package/dist/components/iban-input-labels.js +13 -0
  441. package/dist/components/iban-input-labels.js.map +1 -0
  442. package/dist/components/iban-input.d.ts +73 -101
  443. package/dist/components/iban-input.js +22 -15
  444. package/dist/components/iban-input.js.map +1 -1
  445. package/dist/components/icon-button.d.ts +300 -0
  446. package/dist/components/icon-button.js +465 -0
  447. package/dist/components/icon-button.js.map +1 -0
  448. package/dist/components/icon-picker-labels.d.ts +2 -0
  449. package/dist/components/icon-picker-labels.js +12 -0
  450. package/dist/components/icon-picker-labels.js.map +1 -0
  451. package/dist/components/icon-picker.d.ts +13 -13
  452. package/dist/components/icon-picker.js +18 -17
  453. package/dist/components/icon-picker.js.map +1 -1
  454. package/dist/components/image-grid-labels.d.ts +2 -0
  455. package/dist/components/image-grid-labels.js +10 -0
  456. package/dist/components/image-grid-labels.js.map +1 -0
  457. package/dist/components/image-grid.d.ts +12 -14
  458. package/dist/components/image-grid.js +6 -10
  459. package/dist/components/image-grid.js.map +1 -1
  460. package/dist/components/inline-edit-field-labels.d.ts +2 -0
  461. package/dist/components/inline-edit-field-labels.js +10 -0
  462. package/dist/components/inline-edit-field-labels.js.map +1 -0
  463. package/dist/components/inline-edit-field.d.ts +11 -13
  464. package/dist/components/inline-edit-field.js +11 -13
  465. package/dist/components/inline-edit-field.js.map +1 -1
  466. package/dist/components/inline-entity-combobox.d.ts +155 -0
  467. package/dist/components/inline-entity-combobox.js +467 -0
  468. package/dist/components/inline-entity-combobox.js.map +1 -0
  469. package/dist/components/input.d.ts +98 -0
  470. package/dist/components/input.js +219 -0
  471. package/dist/components/input.js.map +1 -0
  472. package/dist/components/jump-calendar.d.ts +8 -0
  473. package/dist/components/jump-calendar.js +274 -0
  474. package/dist/components/jump-calendar.js.map +1 -0
  475. package/dist/components/language-select.d.ts +20 -111
  476. package/dist/components/language-select.js +12 -7
  477. package/dist/components/language-select.js.map +1 -1
  478. package/dist/components/legal-labels.d.ts +2 -0
  479. package/dist/components/legal-labels.js +100 -0
  480. package/dist/components/legal-labels.js.map +1 -0
  481. package/dist/components/legal-page.d.ts +17 -118
  482. package/dist/components/legal-page.js +2 -2
  483. package/dist/components/legal-page.js.map +1 -1
  484. package/dist/components/legal.d.ts +353 -101
  485. package/dist/components/legal.js +7 -101
  486. package/dist/components/legal.js.map +1 -1
  487. package/dist/components/lightbox-labels.d.ts +2 -0
  488. package/dist/components/lightbox-labels.js +17 -0
  489. package/dist/components/lightbox-labels.js.map +1 -0
  490. package/dist/components/lightbox.d.ts +12 -14
  491. package/dist/components/lightbox.js +9 -19
  492. package/dist/components/lightbox.js.map +1 -1
  493. package/dist/components/line-items-labels.d.ts +2 -0
  494. package/dist/components/line-items-labels.js +13 -0
  495. package/dist/components/line-items-labels.js.map +1 -0
  496. package/dist/components/line-items.d.ts +16 -18
  497. package/dist/components/line-items.js +18 -26
  498. package/dist/components/line-items.js.map +1 -1
  499. package/dist/components/list-labels.d.ts +2 -0
  500. package/dist/components/list-labels.js +9 -0
  501. package/dist/components/list-labels.js.map +1 -0
  502. package/dist/components/list.d.ts +32 -21
  503. package/dist/components/list.js +41 -25
  504. package/dist/components/list.js.map +1 -1
  505. package/dist/components/loading-state.d.ts +5 -9
  506. package/dist/components/loading-state.js +2 -2
  507. package/dist/components/loading-state.js.map +1 -1
  508. package/dist/components/measured-grid-labels.d.ts +4 -0
  509. package/dist/components/measured-grid-labels.js +21 -0
  510. package/dist/components/measured-grid-labels.js.map +1 -0
  511. package/dist/components/measured-grid.d.ts +13 -17
  512. package/dist/components/measured-grid.js +31 -50
  513. package/dist/components/measured-grid.js.map +1 -1
  514. package/dist/components/menu-item.d.ts +10 -10
  515. package/dist/components/menu-item.js +9 -9
  516. package/dist/components/menu-item.js.map +1 -1
  517. package/dist/components/mini-calendar-labels.d.ts +4 -0
  518. package/dist/components/mini-calendar-labels.js +14 -0
  519. package/dist/components/mini-calendar-labels.js.map +1 -0
  520. package/dist/components/mini-calendar.d.ts +10 -14
  521. package/dist/components/mini-calendar.js +22 -29
  522. package/dist/components/mini-calendar.js.map +1 -1
  523. package/dist/components/modal.d.ts +26 -18
  524. package/dist/components/modal.js +8 -11
  525. package/dist/components/modal.js.map +1 -1
  526. package/dist/components/money-draft.d.ts +34 -0
  527. package/dist/components/money-draft.js +39 -0
  528. package/dist/components/money-draft.js.map +1 -0
  529. package/dist/components/money-field.d.ts +13 -111
  530. package/dist/components/money-field.js +6 -22
  531. package/dist/components/money-field.js.map +1 -1
  532. package/dist/components/month-picker-labels.d.ts +5 -0
  533. package/dist/components/month-picker-labels.js +18 -0
  534. package/dist/components/month-picker-labels.js.map +1 -0
  535. package/dist/components/month-picker.d.ts +15 -13
  536. package/dist/components/month-picker.js +34 -32
  537. package/dist/components/month-picker.js.map +1 -1
  538. package/dist/components/multi-entity-combobox.d.ts +9 -11
  539. package/dist/components/multi-entity-combobox.js +14 -13
  540. package/dist/components/multi-entity-combobox.js.map +1 -1
  541. package/dist/components/multi-select.d.ts +81 -21
  542. package/dist/components/multi-select.js +171 -197
  543. package/dist/components/multi-select.js.map +1 -1
  544. package/dist/components/nav-pills.d.ts +9 -10
  545. package/dist/components/nav-pills.js +53 -42
  546. package/dist/components/nav-pills.js.map +1 -1
  547. package/dist/components/number-field.d.ts +6 -111
  548. package/dist/components/number-field.js +2 -3
  549. package/dist/components/number-field.js.map +1 -1
  550. package/dist/components/number-input.d.ts +30 -111
  551. package/dist/components/number-input.js +34 -66
  552. package/dist/components/number-input.js.map +1 -1
  553. package/dist/components/numeric-field.d.ts +85 -0
  554. package/dist/components/numeric-field.js +71 -0
  555. package/dist/components/numeric-field.js.map +1 -0
  556. package/dist/components/numpad-sheet.d.ts +5 -108
  557. package/dist/components/numpad-sheet.js +7 -7
  558. package/dist/components/numpad-sheet.js.map +1 -1
  559. package/dist/components/one-time-code-input.d.ts +6 -7
  560. package/dist/components/one-time-code-input.js +119 -124
  561. package/dist/components/one-time-code-input.js.map +1 -1
  562. package/dist/components/page-contents-labels.d.ts +2 -0
  563. package/dist/components/page-contents-labels.js +8 -0
  564. package/dist/components/page-contents-labels.js.map +1 -0
  565. package/dist/components/page-contents.d.ts +13 -15
  566. package/dist/components/page-contents.js +7 -9
  567. package/dist/components/page-contents.js.map +1 -1
  568. package/dist/components/page-header.d.ts +10 -10
  569. package/dist/components/page-header.js +3 -3
  570. package/dist/components/page-header.js.map +1 -1
  571. package/dist/components/password-strength-labels.d.ts +2 -0
  572. package/dist/components/password-strength-labels.js +21 -0
  573. package/dist/components/password-strength-labels.js.map +1 -0
  574. package/dist/components/password-strength.d.ts +15 -17
  575. package/dist/components/password-strength.js +7 -22
  576. package/dist/components/password-strength.js.map +1 -1
  577. package/dist/components/phone-input-labels.d.ts +2 -0
  578. package/dist/components/phone-input-labels.js +9 -0
  579. package/dist/components/phone-input-labels.js.map +1 -0
  580. package/dist/components/phone-input.d.ts +75 -101
  581. package/dist/components/phone-input.js +20 -23
  582. package/dist/components/phone-input.js.map +1 -1
  583. package/dist/components/picker-sheet.d.ts +20 -8
  584. package/dist/components/picker-sheet.js +22 -11
  585. package/dist/components/picker-sheet.js.map +1 -1
  586. package/dist/components/pie-chart-labels.d.ts +2 -4
  587. package/dist/components/pie-chart.d.ts +8 -11
  588. package/dist/components/pie-chart.js +5 -5
  589. package/dist/components/pie-chart.js.map +1 -1
  590. package/dist/components/popover-labels.d.ts +2 -0
  591. package/dist/components/popover-labels.js +11 -0
  592. package/dist/components/popover-labels.js.map +1 -0
  593. package/dist/components/popover.d.ts +13 -11
  594. package/dist/components/popover.js +15 -21
  595. package/dist/components/popover.js.map +1 -1
  596. package/dist/components/progress-bar-labels.d.ts +2 -0
  597. package/dist/components/progress-bar-labels.js +9 -0
  598. package/dist/components/progress-bar-labels.js.map +1 -0
  599. package/dist/components/progress-bar.d.ts +16 -15
  600. package/dist/components/progress-bar.js +22 -20
  601. package/dist/components/progress-bar.js.map +1 -1
  602. package/dist/components/qr-code.d.ts +4 -8
  603. package/dist/components/qr-code.js.map +1 -1
  604. package/dist/components/reauth-dialog-labels.d.ts +2 -0
  605. package/dist/components/reauth-dialog-labels.js +12 -0
  606. package/dist/components/reauth-dialog-labels.js.map +1 -0
  607. package/dist/components/reauth-dialog.d.ts +8 -10
  608. package/dist/components/reauth-dialog.js +3 -8
  609. package/dist/components/reauth-dialog.js.map +1 -1
  610. package/dist/components/row-actions-labels.d.ts +2 -0
  611. package/dist/components/row-actions-labels.js +9 -0
  612. package/dist/components/row-actions-labels.js.map +1 -0
  613. package/dist/components/row-actions.d.ts +224 -101
  614. package/dist/components/row-actions.js +4 -5
  615. package/dist/components/row-actions.js.map +1 -1
  616. package/dist/components/scroll-area.d.ts +6 -9
  617. package/dist/components/scroll-area.js +4 -10
  618. package/dist/components/scroll-area.js.map +1 -1
  619. package/dist/components/search-field.d.ts +12 -27
  620. package/dist/components/search-field.js +13 -16
  621. package/dist/components/search-field.js.map +1 -1
  622. package/dist/components/select.d.ts +69 -0
  623. package/dist/components/select.js +164 -0
  624. package/dist/components/select.js.map +1 -0
  625. package/dist/components/separator.d.ts +3 -7
  626. package/dist/components/separator.js.map +1 -1
  627. package/dist/components/series-chart-axes.d.ts +120 -0
  628. package/dist/components/series-chart-axes.js +164 -0
  629. package/dist/components/series-chart-axes.js.map +1 -0
  630. package/dist/components/series-chart-budget.d.ts +8 -9
  631. package/dist/components/series-chart-labels.d.ts +2 -4
  632. package/dist/components/series-chart-thin.d.ts +34 -0
  633. package/dist/components/series-chart-thin.js +103 -0
  634. package/dist/components/series-chart-thin.js.map +1 -0
  635. package/dist/components/series-chart-ticks.d.ts +9 -11
  636. package/dist/components/series-chart.d.ts +64 -214
  637. package/dist/components/series-chart.js +69 -160
  638. package/dist/components/series-chart.js.map +1 -1
  639. package/dist/components/server-wake-labels.d.ts +2 -0
  640. package/dist/components/server-wake-labels.js +9 -0
  641. package/dist/components/server-wake-labels.js.map +1 -0
  642. package/dist/components/server-wake.d.ts +32 -23
  643. package/dist/components/server-wake.js +15 -35
  644. package/dist/components/server-wake.js.map +1 -1
  645. package/dist/components/settings-fields.d.ts +46 -118
  646. package/dist/components/settings-fields.js +13 -3
  647. package/dist/components/settings-fields.js.map +1 -1
  648. package/dist/components/share-card-labels.d.ts +2 -0
  649. package/dist/components/share-card-labels.js +29 -0
  650. package/dist/components/share-card-labels.js.map +1 -0
  651. package/dist/components/share-card.d.ts +188 -101
  652. package/dist/components/share-card.js +16 -34
  653. package/dist/components/share-card.js.map +1 -1
  654. package/dist/components/sign-chip-labels.d.ts +2 -0
  655. package/dist/components/sign-chip-labels.js +11 -0
  656. package/dist/components/sign-chip-labels.js.map +1 -0
  657. package/dist/components/sign-chip.d.ts +7 -9
  658. package/dist/components/sign-chip.js +2 -7
  659. package/dist/components/sign-chip.js.map +1 -1
  660. package/dist/components/signature-pad-labels.d.ts +2 -0
  661. package/dist/components/signature-pad-labels.js +23 -0
  662. package/dist/components/signature-pad-labels.js.map +1 -0
  663. package/dist/components/signature-pad.d.ts +16 -15
  664. package/dist/components/signature-pad.js +22 -35
  665. package/dist/components/signature-pad.js.map +1 -1
  666. package/dist/components/signed-amount-labels.d.ts +2 -0
  667. package/dist/components/signed-amount-labels.js +9 -0
  668. package/dist/components/signed-amount-labels.js.map +1 -0
  669. package/dist/components/signed-amount.d.ts +19 -21
  670. package/dist/components/signed-amount.js +12 -15
  671. package/dist/components/signed-amount.js.map +1 -1
  672. package/dist/components/skeleton.d.ts +5 -9
  673. package/dist/components/skeleton.js +1 -1
  674. package/dist/components/skeleton.js.map +1 -1
  675. package/dist/components/slider.d.ts +16 -11
  676. package/dist/components/slider.js +23 -18
  677. package/dist/components/slider.js.map +1 -1
  678. package/dist/components/sparkline-labels.d.ts +2 -0
  679. package/dist/components/sparkline-labels.js +13 -0
  680. package/dist/components/sparkline-labels.js.map +1 -0
  681. package/dist/components/sparkline.d.ts +10 -12
  682. package/dist/components/sparkline.js +10 -17
  683. package/dist/components/sparkline.js.map +1 -1
  684. package/dist/components/spinner.d.ts +45 -0
  685. package/dist/components/spinner.js +39 -0
  686. package/dist/components/spinner.js.map +1 -0
  687. package/dist/components/stat-tile-labels.d.ts +2 -0
  688. package/dist/components/stat-tile-labels.js +14 -0
  689. package/dist/components/stat-tile-labels.js.map +1 -0
  690. package/dist/components/stat-tile.d.ts +15 -17
  691. package/dist/components/stat-tile.js +25 -32
  692. package/dist/components/stat-tile.js.map +1 -1
  693. package/dist/components/status-dot.d.ts +8 -20
  694. package/dist/components/status-dot.js +13 -12
  695. package/dist/components/status-dot.js.map +1 -1
  696. package/dist/components/swatch-picker-labels.d.ts +2 -0
  697. package/dist/components/swatch-picker-labels.js +9 -0
  698. package/dist/components/swatch-picker-labels.js.map +1 -0
  699. package/dist/components/swatch-picker.d.ts +14 -14
  700. package/dist/components/swatch-picker.js +14 -8
  701. package/dist/components/swatch-picker.js.map +1 -1
  702. package/dist/components/swipeable-row.d.ts +14 -27
  703. package/dist/components/swipeable-row.js +2 -2
  704. package/dist/components/swipeable-row.js.map +1 -1
  705. package/dist/components/switch.d.ts +10 -13
  706. package/dist/components/switch.js +13 -12
  707. package/dist/components/switch.js.map +1 -1
  708. package/dist/components/table.d.ts +28 -31
  709. package/dist/components/table.js +15 -15
  710. package/dist/components/table.js.map +1 -1
  711. package/dist/components/tabs.d.ts +182 -0
  712. package/dist/components/tabs.js +312 -0
  713. package/dist/components/tabs.js.map +1 -0
  714. package/dist/components/text-link.d.ts +17 -119
  715. package/dist/components/text-link.js +7 -7
  716. package/dist/components/text-link.js.map +1 -1
  717. package/dist/components/text.d.ts +14 -13
  718. package/dist/components/text.js +5 -5
  719. package/dist/components/text.js.map +1 -1
  720. package/dist/components/textarea.d.ts +20 -0
  721. package/dist/components/textarea.js +161 -0
  722. package/dist/components/textarea.js.map +1 -0
  723. package/dist/components/tile-radio.d.ts +6 -10
  724. package/dist/components/tile-radio.js +6 -6
  725. package/dist/components/tile-radio.js.map +1 -1
  726. package/dist/components/time-input.d.ts +5 -108
  727. package/dist/components/time-input.js +14 -5
  728. package/dist/components/time-input.js.map +1 -1
  729. package/dist/components/toast-labels.d.ts +2 -0
  730. package/dist/components/toast-labels.js +11 -0
  731. package/dist/components/toast-labels.js.map +1 -0
  732. package/dist/components/toast.d.ts +21 -23
  733. package/dist/components/toast.js +1 -6
  734. package/dist/components/toast.js.map +1 -1
  735. package/dist/components/toggle-group.d.ts +26 -26
  736. package/dist/components/toggle-group.js +43 -19
  737. package/dist/components/toggle-group.js.map +1 -1
  738. package/dist/components/toggle-legend.d.ts +18 -21
  739. package/dist/components/toggle-legend.js +3 -3
  740. package/dist/components/toggle-legend.js.map +1 -1
  741. package/dist/components/tooltip.d.ts +16 -15
  742. package/dist/components/tooltip.js +4 -9
  743. package/dist/components/tooltip.js.map +1 -1
  744. package/dist/components/translation-review-editor.d.ts +8 -10
  745. package/dist/components/translation-review-editor.js +6 -5
  746. package/dist/components/translation-review-editor.js.map +1 -1
  747. package/dist/components/translation-review-labels.d.ts +4 -7
  748. package/dist/components/translation-review-parts.d.ts +19 -28
  749. package/dist/components/translation-review-parts.js +4 -7
  750. package/dist/components/translation-review-parts.js.map +1 -1
  751. package/dist/components/translation-review.d.ts +26 -24
  752. package/dist/components/translation-review.js +13 -10
  753. package/dist/components/translation-review.js.map +1 -1
  754. package/dist/components/tree-view.d.ts +7 -11
  755. package/dist/components/tree-view.js +8 -8
  756. package/dist/components/tree-view.js.map +1 -1
  757. package/dist/components/treemap.d.ts +9 -13
  758. package/dist/components/trigger-aria.d.ts +2 -4
  759. package/dist/components/ui-labels.d.ts +5 -0
  760. package/dist/components/ui-labels.js +20 -0
  761. package/dist/components/ui-labels.js.map +1 -0
  762. package/dist/components/use-anchor-dir.d.ts +3 -6
  763. package/dist/components/use-mobile-reveal.d.ts +2 -6
  764. package/dist/components/use-table-state.d.ts +154 -15
  765. package/dist/components/user-avatar.d.ts +8 -21
  766. package/dist/components/user-avatar.js +1 -1
  767. package/dist/components/user-avatar.js.map +1 -1
  768. package/dist/components/wizard-stepper.d.ts +6 -6
  769. package/dist/components/wizard-stepper.js +4 -3
  770. package/dist/components/wizard-stepper.js.map +1 -1
  771. package/dist/components/write-lock-labels.d.ts +2 -0
  772. package/dist/components/write-lock-labels.js +8 -0
  773. package/dist/components/write-lock-labels.js.map +1 -0
  774. package/dist/components/write-lock.d.ts +16 -18
  775. package/dist/components/write-lock.js +4 -8
  776. package/dist/components/write-lock.js.map +1 -1
  777. package/dist/data-table.d.ts +10 -18
  778. package/dist/data-table.js.map +1 -1
  779. package/dist/demo/demo-banner.d.ts +10 -13
  780. package/dist/demo/demo-banner.js +5 -19
  781. package/dist/demo/demo-banner.js.map +1 -1
  782. package/dist/demo/demo-countdown.d.ts +7 -9
  783. package/dist/demo/demo-ended.d.ts +10 -13
  784. package/dist/demo/demo-ended.js +4 -4
  785. package/dist/demo/demo-ended.js.map +1 -1
  786. package/dist/demo/demo-labels.d.ts +4 -5
  787. package/dist/demo/demo-labels.js.map +1 -1
  788. package/dist/demo/demo-session.d.ts +3 -5
  789. package/dist/demo/demo-start.d.ts +8 -11
  790. package/dist/demo/demo-start.js +3 -2
  791. package/dist/demo/demo-start.js.map +1 -1
  792. package/dist/feedback/feedback-attachment-labels.d.ts +16 -0
  793. package/dist/feedback/feedback-attachment-labels.js +17 -0
  794. package/dist/feedback/feedback-attachment-labels.js.map +1 -0
  795. package/dist/feedback/feedback-attachment.d.ts +312 -101
  796. package/dist/feedback/feedback-attachment.js +31 -42
  797. package/dist/feedback/feedback-attachment.js.map +1 -1
  798. package/dist/feedback/feedback-capture.d.ts +2 -4
  799. package/dist/feedback/feedback-context-labels.d.ts +2 -0
  800. package/dist/feedback/feedback-context-labels.js +9 -0
  801. package/dist/feedback/feedback-context-labels.js.map +1 -0
  802. package/dist/feedback/feedback-context.d.ts +110 -101
  803. package/dist/feedback/feedback-context.js +4 -7
  804. package/dist/feedback/feedback-context.js.map +1 -1
  805. package/dist/feedback/feedback-crash.d.ts +8 -110
  806. package/dist/feedback/feedback-dialog-labels.d.ts +12 -0
  807. package/dist/feedback/feedback-dialog-labels.js +17 -0
  808. package/dist/feedback/feedback-dialog-labels.js.map +1 -0
  809. package/dist/feedback/feedback-dialog.d.ts +186 -101
  810. package/dist/feedback/feedback-dialog.js +8 -18
  811. package/dist/feedback/feedback-dialog.js.map +1 -1
  812. package/dist/feedback/feedback-inbox.d.ts +236 -101
  813. package/dist/feedback/feedback-inbox.js +31 -141
  814. package/dist/feedback/feedback-inbox.js.map +1 -1
  815. package/dist/feedback/feedback-labels.d.ts +83 -101
  816. package/dist/feedback/feedback-labels.js.map +1 -1
  817. package/dist/feedback/feedback-menu-labels.d.ts +2 -0
  818. package/dist/feedback/feedback-menu-labels.js +10 -0
  819. package/dist/feedback/feedback-menu-labels.js.map +1 -0
  820. package/dist/feedback/feedback-menu.d.ts +83 -101
  821. package/dist/feedback/feedback-menu.js +3 -7
  822. package/dist/feedback/feedback-menu.js.map +1 -1
  823. package/dist/feedback/feedback-record.d.ts +239 -101
  824. package/dist/feedback/feedback-record.js +7 -2
  825. package/dist/feedback/feedback-record.js.map +1 -1
  826. package/dist/feedback/feedback-row-detail-labels.d.ts +2 -0
  827. package/dist/feedback/feedback-row-detail-labels.js +31 -0
  828. package/dist/feedback/feedback-row-detail-labels.js.map +1 -0
  829. package/dist/feedback/feedback-row-detail.d.ts +315 -101
  830. package/dist/feedback/feedback-row-detail.js +11 -37
  831. package/dist/feedback/feedback-row-detail.js.map +1 -1
  832. package/dist/feedback/feedback-status-undo.d.ts +66 -101
  833. package/dist/feedback/feedback-status-undo.js.map +1 -1
  834. package/dist/feedback/feedback-submit-dialog.d.ts +39 -0
  835. package/dist/feedback/feedback-submit-dialog.js +66 -0
  836. package/dist/feedback/feedback-submit-dialog.js.map +1 -0
  837. package/dist/feedback/feedback-submit.d.ts +13 -109
  838. package/dist/feedback/feedback-submit.js +19 -40
  839. package/dist/feedback/feedback-submit.js.map +1 -1
  840. package/dist/feedback/feedback-swipe.d.ts +9 -110
  841. package/dist/feedback/feedback-swipe.js +1 -1
  842. package/dist/feedback/feedback-swipe.js.map +1 -1
  843. package/dist/feedback/feedback-table-labels.d.ts +2 -0
  844. package/dist/feedback/feedback-table-labels.js +26 -0
  845. package/dist/feedback/feedback-table-labels.js.map +1 -0
  846. package/dist/feedback/feedback-table.d.ts +314 -101
  847. package/dist/feedback/feedback-table.js +11 -31
  848. package/dist/feedback/feedback-table.js.map +1 -1
  849. package/dist/feedback/feedback-thread-labels.d.ts +3 -0
  850. package/dist/feedback/feedback-thread-labels.js +21 -0
  851. package/dist/feedback/feedback-thread-labels.js.map +1 -0
  852. package/dist/feedback/feedback-thread.d.ts +378 -101
  853. package/dist/feedback/feedback-thread.js +27 -34
  854. package/dist/feedback/feedback-thread.js.map +1 -1
  855. package/dist/feedback/feedback-vocabulary.d.ts +98 -0
  856. package/dist/feedback/feedback-vocabulary.js +143 -0
  857. package/dist/feedback/feedback-vocabulary.js.map +1 -0
  858. package/dist/feedback.d.ts +15 -105
  859. package/dist/hooks/use-anchored-panel.d.ts +77 -15
  860. package/dist/hooks/use-anchored-panel.js +34 -1
  861. package/dist/hooks/use-anchored-panel.js.map +1 -1
  862. package/dist/hooks/use-anchored-rect.d.ts +15 -6
  863. package/dist/hooks/use-anchored-rect.js +2 -1
  864. package/dist/hooks/use-anchored-rect.js.map +1 -1
  865. package/dist/hooks/use-announce.d.ts +4 -6
  866. package/dist/hooks/use-authed-src.d.ts +5 -7
  867. package/dist/hooks/use-authed-src.js +3 -7
  868. package/dist/hooks/use-authed-src.js.map +1 -1
  869. package/dist/hooks/use-body-scroll-lock.d.ts +1 -3
  870. package/dist/hooks/use-breakpoint.d.ts +16 -17
  871. package/dist/hooks/use-breakpoint.js.map +1 -1
  872. package/dist/hooks/use-close-transition.d.ts +8 -8
  873. package/dist/hooks/use-close-transition.js +5 -4
  874. package/dist/hooks/use-close-transition.js.map +1 -1
  875. package/dist/hooks/use-copy-to-clipboard.d.ts +5 -7
  876. package/dist/hooks/use-debounce.d.ts +13 -6
  877. package/dist/hooks/use-debounce.js.map +1 -1
  878. package/dist/hooks/use-dismiss.d.ts +37 -11
  879. package/dist/hooks/use-dismiss.js +69 -10
  880. package/dist/hooks/use-dismiss.js.map +1 -1
  881. package/dist/hooks/use-file-drop.d.ts +8 -110
  882. package/dist/hooks/use-file-drop.js +1 -1
  883. package/dist/hooks/use-file-drop.js.map +1 -1
  884. package/dist/hooks/use-file-picker-labels.d.ts +2 -0
  885. package/dist/hooks/use-file-picker-labels.js +25 -0
  886. package/dist/hooks/use-file-picker-labels.js.map +1 -0
  887. package/dist/hooks/use-file-picker.d.ts +164 -0
  888. package/dist/hooks/use-file-picker.js +149 -0
  889. package/dist/hooks/use-file-picker.js.map +1 -0
  890. package/dist/hooks/use-focus-trap.d.ts +2 -4
  891. package/dist/hooks/use-focus-trap.js +2 -1
  892. package/dist/hooks/use-focus-trap.js.map +1 -1
  893. package/dist/hooks/use-hotkey.d.ts +7 -9
  894. package/dist/hooks/use-large-text.d.ts +3 -5
  895. package/dist/hooks/use-media-query.d.ts +1 -3
  896. package/dist/hooks/use-noindex.d.ts +1 -3
  897. package/dist/hooks/use-overlay-history.d.ts +1 -3
  898. package/dist/hooks/use-row-swipe.d.ts +5 -8
  899. package/dist/hooks/use-search-param-state.d.ts +10 -11
  900. package/dist/hooks/use-windowed-rows.d.ts +4 -7
  901. package/dist/i18n/defaults.d.ts +11 -105
  902. package/dist/i18n/defaults.js +82 -82
  903. package/dist/i18n/defaults.js.map +1 -1
  904. package/dist/i18n/german.d.ts +2 -105
  905. package/dist/i18n/german.js +52 -8
  906. package/dist/i18n/german.js.map +1 -1
  907. package/dist/i18n/kit-labels.d.ts +609 -101
  908. package/dist/i18n/kit-labels.js +22 -97
  909. package/dist/i18n/kit-labels.js.map +1 -1
  910. package/dist/i18n/languages.d.ts +197 -101
  911. package/dist/i18n/locales/de-CH.d.ts +3 -106
  912. package/dist/i18n/locales/en.d.ts +4 -105
  913. package/dist/i18n/locales/en.js +1834 -4
  914. package/dist/i18n/locales/en.js.map +7 -1
  915. package/dist/i18n/locales/es.d.ts +3 -106
  916. package/dist/i18n/locales/es.js +52 -8
  917. package/dist/i18n/locales/es.js.map +1 -1
  918. package/dist/i18n/locales/fr.d.ts +3 -106
  919. package/dist/i18n/locales/fr.js +53 -8
  920. package/dist/i18n/locales/fr.js.map +1 -1
  921. package/dist/i18n/locales/hu.d.ts +3 -106
  922. package/dist/i18n/locales/hu.js +52 -8
  923. package/dist/i18n/locales/hu.js.map +1 -1
  924. package/dist/i18n/locales/it.d.ts +3 -106
  925. package/dist/i18n/locales/it.js +53 -8
  926. package/dist/i18n/locales/it.js.map +1 -1
  927. package/dist/i18n/locales/zh.d.ts +3 -106
  928. package/dist/i18n/locales/zh.js +51 -8
  929. package/dist/i18n/locales/zh.js.map +1 -1
  930. package/dist/i18n/plurals.d.ts +3 -5
  931. package/dist/i18n/review.d.ts +5 -107
  932. package/dist/i18n/review.js +4 -0
  933. package/dist/i18n/review.js.map +1 -1
  934. package/dist/i18n/shared-labels.d.ts +17 -0
  935. package/dist/i18n/shared-labels.js +111 -0
  936. package/dist/i18n/shared-labels.js.map +1 -0
  937. package/dist/i18n/swiss.d.ts +1 -3
  938. package/dist/index.d.ts +329 -249
  939. package/dist/index.js +188 -215
  940. package/dist/index.js.map +1 -1
  941. package/dist/landing/access.d.ts +7 -9
  942. package/dist/landing/access.js.map +1 -1
  943. package/dist/landing/landing-actions.d.ts +9 -109
  944. package/dist/landing/landing-actions.js +1 -1
  945. package/dist/landing/landing-actions.js.map +1 -1
  946. package/dist/landing/landing-labels.d.ts +4 -5
  947. package/dist/landing/landing-labels.js.map +1 -1
  948. package/dist/landing/landing-sections.d.ts +21 -121
  949. package/dist/landing/landing-sections.js +15 -15
  950. package/dist/landing/landing-sections.js.map +1 -1
  951. package/dist/landing/page-seo.d.ts +7 -9
  952. package/dist/landing/public-header.d.ts +10 -111
  953. package/dist/landing/public-header.js +1 -1
  954. package/dist/landing/public-header.js.map +1 -1
  955. package/dist/landing/routing.d.ts +16 -120
  956. package/dist/landing/routing.js +2 -6
  957. package/dist/landing/routing.js.map +1 -1
  958. package/dist/lib/calc.d.ts +7 -9
  959. package/dist/lib/chip-edge-snap.d.ts +10 -0
  960. package/dist/lib/chip-edge-snap.js +131 -0
  961. package/dist/lib/chip-edge-snap.js.map +1 -0
  962. package/dist/lib/clipping.d.ts +2 -4
  963. package/dist/lib/cn.d.ts +2 -5
  964. package/dist/lib/cn.js +6 -1
  965. package/dist/lib/cn.js.map +1 -1
  966. package/dist/lib/column-mapping.d.ts +10 -13
  967. package/dist/lib/countries.d.ts +3 -5
  968. package/dist/lib/dates.d.ts +25 -25
  969. package/dist/lib/dates.js.map +1 -1
  970. package/dist/lib/decimal-marks.d.ts +8 -8
  971. package/dist/lib/decimal-marks.js +1 -1
  972. package/dist/lib/decimal-marks.js.map +1 -1
  973. package/dist/lib/direction.d.ts +4 -6
  974. package/dist/lib/document-navigation.d.ts +1 -3
  975. package/dist/lib/download.d.ts +67 -0
  976. package/dist/lib/download.js +89 -0
  977. package/dist/lib/download.js.map +1 -0
  978. package/dist/lib/floating-stack.d.ts +8 -6
  979. package/dist/lib/floating-stack.js.map +1 -1
  980. package/dist/lib/format.d.ts +24 -23
  981. package/dist/lib/format.js +3 -3
  982. package/dist/lib/format.js.map +1 -1
  983. package/dist/lib/iban.d.ts +9 -11
  984. package/dist/lib/ime.d.ts +17 -0
  985. package/dist/lib/ime.js +13 -0
  986. package/dist/lib/ime.js.map +1 -0
  987. package/dist/lib/isin.d.ts +3 -5
  988. package/dist/lib/logger.d.ts +4 -6
  989. package/dist/lib/person-name.d.ts +3 -5
  990. package/dist/lib/phone.d.ts +9 -11
  991. package/dist/lib/presence.d.ts +15 -0
  992. package/dist/lib/presence.js +8 -0
  993. package/dist/lib/presence.js.map +1 -0
  994. package/dist/lib/qr-encode.d.ts +4 -6
  995. package/dist/lib/reduced-motion.d.ts +18 -0
  996. package/dist/lib/reduced-motion.js +9 -0
  997. package/dist/lib/reduced-motion.js.map +1 -0
  998. package/dist/lib/round.d.ts +22 -0
  999. package/dist/lib/round.js +15 -0
  1000. package/dist/lib/round.js.map +1 -0
  1001. package/dist/lib/safe-storage.d.ts +14 -4
  1002. package/dist/lib/safe-storage.js +24 -9
  1003. package/dist/lib/safe-storage.js.map +1 -1
  1004. package/dist/lib/server-wake.d.ts +13 -14
  1005. package/dist/lib/session-refresh.d.ts +200 -0
  1006. package/dist/lib/session-refresh.js +187 -0
  1007. package/dist/lib/session-refresh.js.map +1 -0
  1008. package/dist/lib/strip-fade.d.ts +10 -13
  1009. package/dist/lib/table-text.d.ts +14 -16
  1010. package/dist/lib/text-match.d.ts +41 -0
  1011. package/dist/lib/text-match.js +23 -0
  1012. package/dist/lib/text-match.js.map +1 -0
  1013. package/dist/lib/translation-review.d.ts +44 -45
  1014. package/dist/lib/translation-review.js +3 -2
  1015. package/dist/lib/translation-review.js.map +1 -1
  1016. package/dist/rhf/fields.d.ts +123 -189
  1017. package/dist/rhf/fields.js +46 -54
  1018. package/dist/rhf/fields.js.map +1 -1
  1019. package/dist/rhf/form-core.d.ts +153 -0
  1020. package/dist/rhf/form-core.js +143 -0
  1021. package/dist/rhf/form-core.js.map +1 -0
  1022. package/dist/rhf/form.d.ts +38 -175
  1023. package/dist/rhf/form.js +9 -131
  1024. package/dist/rhf/form.js.map +1 -1
  1025. package/dist/rhf/line-items.d.ts +40 -11
  1026. package/dist/rhf/line-items.js.map +1 -1
  1027. package/dist/rhf/use-rhf-wizard-step.d.ts +3 -6
  1028. package/dist/rhf.d.ts +4 -118
  1029. package/dist/rhf.js.map +1 -1
  1030. package/dist/search/command-palette-labels.d.ts +2 -0
  1031. package/dist/search/command-palette-labels.js +15 -0
  1032. package/dist/search/command-palette-labels.js.map +1 -0
  1033. package/dist/search/command-palette.d.ts +10 -13
  1034. package/dist/search/command-palette.js +25 -44
  1035. package/dist/search/command-palette.js.map +1 -1
  1036. package/dist/search/global-search-labels.d.ts +2 -0
  1037. package/dist/search/global-search-labels.js +12 -0
  1038. package/dist/search/global-search-labels.js.map +1 -0
  1039. package/dist/search/global-search.d.ts +17 -16
  1040. package/dist/search/global-search.js +12 -12
  1041. package/dist/search/global-search.js.map +1 -1
  1042. package/dist/search/search-index.d.ts +13 -14
  1043. package/dist/search/search-index.js +2 -1
  1044. package/dist/search/search-index.js.map +1 -1
  1045. package/dist/search/use-command-key.d.ts +9 -0
  1046. package/dist/search/use-command-key.js +18 -0
  1047. package/dist/search/use-command-key.js.map +1 -0
  1048. package/dist/search.d.ts +3 -4
  1049. package/dist/settings/settings-card-classes.d.ts +11 -0
  1050. package/dist/settings/settings-card-classes.js +8 -0
  1051. package/dist/settings/settings-card-classes.js.map +1 -0
  1052. package/dist/settings/settings-catalogue.d.ts +11 -14
  1053. package/dist/settings/settings-context.d.ts +4 -8
  1054. package/dist/settings/settings-heading.d.ts +8 -12
  1055. package/dist/settings/settings-heading.js +1 -1
  1056. package/dist/settings/settings-heading.js.map +1 -1
  1057. package/dist/settings/settings-labels.d.ts +6 -7
  1058. package/dist/settings/settings-labels.js.map +1 -1
  1059. package/dist/settings/settings-layout.d.ts +36 -13
  1060. package/dist/settings/settings-layout.js +25 -4
  1061. package/dist/settings/settings-layout.js.map +1 -1
  1062. package/dist/settings/settings-section.d.ts +4 -107
  1063. package/dist/settings/settings-section.js +2 -2
  1064. package/dist/settings/settings-section.js.map +1 -1
  1065. package/dist/settings/use-account-appearance.d.ts +11 -16
  1066. package/dist/settings/use-account-language.d.ts +8 -10
  1067. package/dist/settings/use-settings-focus.d.ts +3 -5
  1068. package/dist/settings/use-settings-focus.js +2 -4
  1069. package/dist/settings/use-settings-focus.js.map +1 -1
  1070. package/dist/settings/use-settings-route.d.ts +11 -16
  1071. package/dist/shell/app-shell-labels.d.ts +2 -0
  1072. package/dist/shell/app-shell-labels.js +9 -0
  1073. package/dist/shell/app-shell-labels.js.map +1 -0
  1074. package/dist/shell/app-shell.d.ts +216 -101
  1075. package/dist/shell/app-shell.js +51 -35
  1076. package/dist/shell/app-shell.js.map +1 -1
  1077. package/dist/shell/auth-layout.d.ts +6 -9
  1078. package/dist/shell/auth-layout.js +6 -6
  1079. package/dist/shell/auth-layout.js.map +1 -1
  1080. package/dist/shell/company-switcher-labels.d.ts +2 -0
  1081. package/dist/shell/company-switcher-labels.js +12 -0
  1082. package/dist/shell/company-switcher-labels.js.map +1 -0
  1083. package/dist/shell/company-switcher.d.ts +9 -11
  1084. package/dist/shell/company-switcher.js +3 -9
  1085. package/dist/shell/company-switcher.js.map +1 -1
  1086. package/dist/shell/option-switcher-menu.d.ts +19 -9
  1087. package/dist/shell/option-switcher-menu.js +6 -4
  1088. package/dist/shell/option-switcher-menu.js.map +1 -1
  1089. package/dist/shell/role-switcher.d.ts +5 -6
  1090. package/dist/shell/role-switcher.js +4 -3
  1091. package/dist/shell/role-switcher.js.map +1 -1
  1092. package/dist/shell/top-bar-brand.d.ts +4 -107
  1093. package/dist/shell/top-bar-brand.js +1 -1
  1094. package/dist/shell/top-bar-brand.js.map +1 -1
  1095. package/dist/shell/top-bar.d.ts +6 -9
  1096. package/dist/shell/top-bar.js +1 -1
  1097. package/dist/shell/top-bar.js.map +1 -1
  1098. package/dist/shell/topbar-action-menu.d.ts +30 -31
  1099. package/dist/shell/topbar-action-menu.js +12 -10
  1100. package/dist/shell/topbar-action-menu.js.map +1 -1
  1101. package/dist/shell/topbar-controls.d.ts +20 -18
  1102. package/dist/shell/topbar-controls.js +14 -11
  1103. package/dist/shell/topbar-controls.js.map +1 -1
  1104. package/dist/shell.d.ts +25 -116
  1105. package/dist/shell.js.map +1 -1
  1106. package/dist/table-text.d.ts +1 -1
  1107. package/dist/testing/css-variables.d.ts +4 -6
  1108. package/dist/testing/css-variables.generated.d.ts +2 -4
  1109. package/dist/testing/index.d.ts +2 -1
  1110. package/dist/testing/index.js +9 -1
  1111. package/dist/testing/index.js.map +1 -1
  1112. package/dist/testing/viewport.d.ts +93 -0
  1113. package/dist/testing/viewport.js +152 -0
  1114. package/dist/testing/viewport.js.map +1 -0
  1115. package/dist/theme/chart-palette.d.ts +7 -9
  1116. package/dist/theme/color.d.ts +14 -16
  1117. package/dist/theme/color.js +2 -1
  1118. package/dist/theme/color.js.map +1 -1
  1119. package/dist/theme/contrast-tokens.d.ts +13 -17
  1120. package/dist/theme/contrast.d.ts +22 -27
  1121. package/dist/theme/palette-derive.d.ts +16 -22
  1122. package/dist/theme/palette-derive.js +15 -7
  1123. package/dist/theme/palette-derive.js.map +1 -1
  1124. package/dist/theme/palette-presets.d.ts +25 -15
  1125. package/dist/theme/palette-presets.js +66 -66
  1126. package/dist/theme/palette-presets.js.map +1 -1
  1127. package/dist/theme/palette-store.d.ts +10 -13
  1128. package/dist/theme/text-size.d.ts +21 -26
  1129. package/dist/theme/theme-store.d.ts +9 -14
  1130. package/dist/tour/tour-labels.d.ts +2 -0
  1131. package/dist/tour/tour-labels.js +13 -0
  1132. package/dist/tour/tour-labels.js.map +1 -0
  1133. package/dist/tour/tour.d.ts +12 -14
  1134. package/dist/tour/tour.js +9 -20
  1135. package/dist/tour/tour.js.map +1 -1
  1136. package/dist/tour.d.ts +1 -2
  1137. package/dist/wizard/stepper-nav.d.ts +8 -108
  1138. package/dist/wizard/stepper-nav.js +15 -14
  1139. package/dist/wizard/stepper-nav.js.map +1 -1
  1140. package/dist/wizard/types.d.ts +18 -18
  1141. package/dist/wizard/types.js +1 -19
  1142. package/dist/wizard/types.js.map +1 -1
  1143. package/dist/wizard/use-wizard.d.ts +2 -6
  1144. package/dist/wizard/validation.d.ts +3 -7
  1145. package/dist/wizard/wizard-context.d.ts +7 -11
  1146. package/dist/wizard/wizard-labels.d.ts +4 -0
  1147. package/dist/wizard/wizard-labels.js +24 -0
  1148. package/dist/wizard/wizard-labels.js.map +1 -0
  1149. package/dist/wizard/wizard-step.d.ts +3 -7
  1150. package/dist/wizard/wizard-step.js +2 -2
  1151. package/dist/wizard/wizard-step.js.map +1 -1
  1152. package/dist/wizard/wizard-summary.d.ts +5 -8
  1153. package/dist/wizard/wizard-summary.js +6 -5
  1154. package/dist/wizard/wizard-summary.js.map +1 -1
  1155. package/dist/wizard.d.ts +7 -107
  1156. package/package.json +9 -6
  1157. package/src/account/account-parts.ts +3 -3
  1158. package/src/{components → account}/account-settings-labels.ts +11 -1
  1159. package/src/{components → account}/account-settings.tsx +145 -34
  1160. package/src/account/data-export-setting-labels.ts +20 -0
  1161. package/src/account/data-export-setting.tsx +19 -38
  1162. package/src/account/delete-account-setting-labels.ts +33 -0
  1163. package/src/account/delete-account-setting.tsx +13 -35
  1164. package/src/account/email-change-setting-labels.ts +32 -0
  1165. package/src/account/email-change-setting.tsx +17 -36
  1166. package/src/{components → account}/passkeys-setting.tsx +14 -9
  1167. package/src/account/sessions-setting-labels.ts +24 -0
  1168. package/src/account/sessions-setting.tsx +14 -28
  1169. package/src/admin/admin-action-confirm-labels.ts +19 -0
  1170. package/src/admin/admin-action-confirm.tsx +59 -38
  1171. package/src/admin/admin-action-log-labels.ts +74 -0
  1172. package/src/admin/admin-action-log.tsx +180 -54
  1173. package/src/admin/admin-parts.ts +0 -7
  1174. package/src/admin/invitations-panel-labels.ts +31 -0
  1175. package/src/admin/invitations-panel.tsx +16 -34
  1176. package/src/admin/plan-change-labels.ts +23 -0
  1177. package/src/admin/plan-change.tsx +58 -34
  1178. package/src/admin/reviewer-scope-editor-labels.ts +16 -0
  1179. package/src/admin/reviewer-scope-editor.tsx +9 -15
  1180. package/src/admin/role-select-labels.ts +16 -0
  1181. package/src/admin/role-select.tsx +13 -23
  1182. package/src/admin/transfer-ownership-dialog-labels.ts +20 -0
  1183. package/src/admin/transfer-ownership-dialog.tsx +7 -17
  1184. package/src/admin/user-roster-labels.ts +17 -0
  1185. package/src/admin/user-roster.tsx +9 -17
  1186. package/src/auth/accept-invitation-labels.ts +21 -0
  1187. package/src/auth/accept-invitation.tsx +9 -20
  1188. package/src/auth/auth-errors.ts +29 -13
  1189. package/src/auth/complete-name-dialog-labels.ts +16 -0
  1190. package/src/auth/complete-name-dialog.tsx +8 -13
  1191. package/src/auth/forgot-password-form-labels.ts +20 -0
  1192. package/src/auth/forgot-password-form.tsx +12 -20
  1193. package/src/auth/new-password-fields.tsx +1 -1
  1194. package/src/auth/not-found-page-labels.ts +12 -0
  1195. package/src/auth/not-found-page.tsx +11 -14
  1196. package/src/auth/register-form-labels.ts +31 -0
  1197. package/src/auth/register-form.tsx +18 -38
  1198. package/src/auth/reset-password-form-labels.ts +27 -0
  1199. package/src/auth/reset-password-form.tsx +12 -27
  1200. package/src/auth/sign-in-form-labels.ts +44 -0
  1201. package/src/auth/sign-in-form.tsx +18 -51
  1202. package/src/auth/status-parts.tsx +3 -3
  1203. package/src/auth/verify-email-labels.ts +26 -0
  1204. package/src/auth/verify-email.tsx +15 -30
  1205. package/src/billing/billing-banner.tsx +2 -1
  1206. package/src/billing/billing-labels.ts +1 -1
  1207. package/src/billing/checkout-processing.ts +2 -12
  1208. package/src/billing/plan-card.tsx +26 -27
  1209. package/src/billing/plan-limit-notice.tsx +1 -1
  1210. package/src/billing/subscription-actions.tsx +4 -4
  1211. package/src/chart.ts +7 -1
  1212. package/src/components/account-chips-labels.ts +16 -0
  1213. package/src/components/account-chips.tsx +13 -16
  1214. package/src/components/alert-banner.tsx +39 -19
  1215. package/src/components/amount-input.tsx +461 -405
  1216. package/src/components/appearance-labels.ts +2 -2
  1217. package/src/components/authed-image-labels.ts +11 -0
  1218. package/src/components/authed-image.tsx +6 -8
  1219. package/src/components/autocomplete.tsx +79 -78
  1220. package/src/components/breadcrumbs-labels.ts +10 -0
  1221. package/src/components/breadcrumbs.tsx +17 -14
  1222. package/src/components/bulk-action-bar-labels.ts +11 -0
  1223. package/src/components/bulk-action-bar.tsx +15 -16
  1224. package/src/components/button-group.tsx +7 -7
  1225. package/src/components/button-look.ts +230 -0
  1226. package/src/components/button.tsx +339 -0
  1227. package/src/components/calculator.tsx +18 -11
  1228. package/src/components/calendar-heatmap-labels.ts +15 -0
  1229. package/src/components/calendar-heatmap.tsx +13 -19
  1230. package/src/components/card.tsx +381 -0
  1231. package/src/components/chart-zoom-core.tsx +653 -0
  1232. package/src/components/chart-zoom.tsx +64 -648
  1233. package/src/components/chart.tsx +11 -11
  1234. package/src/components/checkbox-group.tsx +13 -10
  1235. package/src/components/checkbox.tsx +43 -42
  1236. package/src/components/chip-input.tsx +377 -0
  1237. package/src/components/chip-labels.ts +13 -0
  1238. package/src/components/chip.tsx +115 -711
  1239. package/src/components/choice-card.tsx +83 -85
  1240. package/src/components/column-mapper-labels.ts +45 -0
  1241. package/src/components/column-mapper.tsx +16 -51
  1242. package/src/components/combobox-core.tsx +346 -194
  1243. package/src/components/combobox-suggestions.tsx +129 -0
  1244. package/src/components/combobox.tsx +69 -895
  1245. package/src/components/confirm-dialog-labels.ts +13 -0
  1246. package/src/components/confirm-dialog.tsx +4 -8
  1247. package/src/components/copy-button-labels.ts +13 -0
  1248. package/src/components/copy-button.tsx +10 -12
  1249. package/src/components/country-select-labels.ts +11 -0
  1250. package/src/components/country-select.tsx +74 -89
  1251. package/src/components/currency-option-list.tsx +216 -0
  1252. package/src/components/currency-select.tsx +85 -196
  1253. package/src/components/danger-confirm-labels.ts +20 -0
  1254. package/src/components/danger-confirm.tsx +69 -77
  1255. package/src/components/data-table-cells.tsx +5 -5
  1256. package/src/components/data-table-column-settings.tsx +137 -0
  1257. package/src/components/data-table-filter-popover.tsx +49 -24
  1258. package/src/components/data-table-filters.ts +48 -11
  1259. package/src/components/data-table-head.tsx +258 -0
  1260. package/src/components/data-table-labels.ts +43 -11
  1261. package/src/components/data-table-mobile.tsx +594 -0
  1262. package/src/components/data-table-pagination.tsx +11 -10
  1263. package/src/components/data-table-resize.ts +187 -0
  1264. package/src/components/data-table-row-actions.tsx +152 -0
  1265. package/src/components/data-table-selection.ts +55 -0
  1266. package/src/components/data-table-shared.tsx +172 -0
  1267. package/src/components/data-table.tsx +178 -1300
  1268. package/src/components/date-field.tsx +627 -0
  1269. package/src/components/date-picker.tsx +58 -1446
  1270. package/src/components/date-range-picker.tsx +490 -0
  1271. package/src/components/description-list-labels.ts +9 -0
  1272. package/src/components/description-list.tsx +31 -15
  1273. package/src/components/dialog-frame-labels.ts +7 -0
  1274. package/src/components/dialog-frame.tsx +8 -6
  1275. package/src/components/disclosure.tsx +14 -14
  1276. package/src/components/dropdown.tsx +102 -40
  1277. package/src/components/empty-state.tsx +137 -0
  1278. package/src/components/entity-combobox.tsx +17 -12
  1279. package/src/components/error-boundary-labels.ts +20 -0
  1280. package/src/components/error-boundary.tsx +10 -20
  1281. package/src/components/facing-pair.ts +1 -1
  1282. package/src/components/field-base.tsx +615 -0
  1283. package/src/components/field-parts.tsx +206 -77
  1284. package/src/components/field-strip.tsx +16 -21
  1285. package/src/components/field-sync-labels.ts +13 -0
  1286. package/src/components/field-sync.tsx +11 -12
  1287. package/src/components/field.tsx +13 -11
  1288. package/src/components/file-button.tsx +64 -412
  1289. package/src/components/file-dropzone.tsx +36 -33
  1290. package/src/components/floating-panel-labels.ts +10 -0
  1291. package/src/components/floating-panel.tsx +32 -21
  1292. package/src/components/focus-ring.ts +9 -4
  1293. package/src/components/form-actions-labels.ts +11 -0
  1294. package/src/components/form-actions.tsx +17 -21
  1295. package/src/components/full-bleed-dialog.tsx +27 -25
  1296. package/src/components/grouped-picker.tsx +118 -96
  1297. package/src/components/help-popover.tsx +115 -0
  1298. package/src/components/hover-menu.tsx +46 -35
  1299. package/src/components/iban-input-labels.ts +15 -0
  1300. package/src/components/iban-input.tsx +25 -20
  1301. package/src/components/icon-button.tsx +945 -0
  1302. package/src/components/icon-picker-labels.ts +13 -0
  1303. package/src/components/icon-picker.tsx +27 -24
  1304. package/src/components/image-grid-labels.ts +11 -0
  1305. package/src/components/image-grid.tsx +13 -15
  1306. package/src/components/inline-edit-field-labels.ts +11 -0
  1307. package/src/components/inline-edit-field.tsx +20 -19
  1308. package/src/components/inline-entity-combobox.tsx +789 -0
  1309. package/src/components/input.tsx +380 -0
  1310. package/src/components/jump-calendar.tsx +385 -0
  1311. package/src/components/language-select.tsx +31 -16
  1312. package/src/components/legal-labels.ts +99 -0
  1313. package/src/components/legal-page.tsx +2 -2
  1314. package/src/components/legal.tsx +11 -101
  1315. package/src/components/lightbox-labels.ts +18 -0
  1316. package/src/components/lightbox.tsx +13 -21
  1317. package/src/components/line-items-labels.ts +14 -0
  1318. package/src/components/line-items.tsx +24 -31
  1319. package/src/components/list-labels.ts +10 -0
  1320. package/src/components/list.tsx +98 -75
  1321. package/src/components/loading-state.tsx +4 -4
  1322. package/src/components/measured-grid-labels.ts +25 -0
  1323. package/src/components/measured-grid.tsx +39 -62
  1324. package/src/components/menu-item.tsx +29 -26
  1325. package/src/components/mini-calendar-labels.ts +17 -0
  1326. package/src/components/mini-calendar.tsx +38 -45
  1327. package/src/components/modal.tsx +31 -18
  1328. package/src/components/money-draft.ts +72 -0
  1329. package/src/components/money-field.tsx +16 -30
  1330. package/src/components/month-picker-labels.ts +22 -0
  1331. package/src/components/month-picker.tsx +59 -45
  1332. package/src/components/multi-entity-combobox.tsx +17 -12
  1333. package/src/components/multi-select.tsx +313 -288
  1334. package/src/components/nav-pills.tsx +19 -8
  1335. package/src/components/number-field.tsx +7 -5
  1336. package/src/components/number-input.tsx +72 -97
  1337. package/src/components/numeric-field.ts +161 -0
  1338. package/src/components/numpad-sheet.tsx +16 -16
  1339. package/src/components/one-time-code-input.tsx +154 -169
  1340. package/src/components/page-contents-labels.ts +9 -0
  1341. package/src/components/page-contents.tsx +15 -15
  1342. package/src/components/page-header.tsx +9 -5
  1343. package/src/components/password-strength-labels.ts +23 -0
  1344. package/src/components/password-strength.tsx +13 -27
  1345. package/src/components/phone-input-labels.ts +10 -0
  1346. package/src/components/phone-input.tsx +42 -57
  1347. package/src/components/picker-sheet.tsx +47 -18
  1348. package/src/components/pie-chart.tsx +11 -9
  1349. package/src/components/popover-labels.ts +14 -0
  1350. package/src/components/popover.tsx +34 -37
  1351. package/src/components/progress-bar-labels.ts +10 -0
  1352. package/src/components/progress-bar.tsx +32 -23
  1353. package/src/components/qr-code.tsx +2 -2
  1354. package/src/components/reauth-dialog-labels.ts +13 -0
  1355. package/src/components/reauth-dialog.tsx +7 -10
  1356. package/src/components/row-actions-labels.ts +10 -0
  1357. package/src/components/row-actions.tsx +11 -10
  1358. package/src/components/scroll-area.tsx +4 -10
  1359. package/src/components/search-field.tsx +35 -49
  1360. package/src/components/select.tsx +302 -0
  1361. package/src/components/separator.tsx +2 -2
  1362. package/src/components/series-chart-axes.ts +329 -0
  1363. package/src/components/series-chart-thin.ts +180 -0
  1364. package/src/components/series-chart.tsx +124 -325
  1365. package/src/components/server-wake-labels.ts +11 -0
  1366. package/src/components/server-wake.tsx +42 -63
  1367. package/src/components/settings-fields.tsx +46 -17
  1368. package/src/components/share-card-labels.ts +30 -0
  1369. package/src/components/share-card.tsx +22 -37
  1370. package/src/components/sign-chip-labels.ts +12 -0
  1371. package/src/components/sign-chip.tsx +6 -9
  1372. package/src/components/signature-pad-labels.ts +24 -0
  1373. package/src/components/signature-pad.tsx +48 -57
  1374. package/src/components/signed-amount-labels.ts +10 -0
  1375. package/src/components/signed-amount.tsx +21 -22
  1376. package/src/components/skeleton.tsx +1 -1
  1377. package/src/components/slider.tsx +51 -39
  1378. package/src/components/sparkline-labels.ts +14 -0
  1379. package/src/components/sparkline.tsx +16 -21
  1380. package/src/components/spinner.tsx +81 -0
  1381. package/src/components/stat-tile-labels.ts +15 -0
  1382. package/src/components/stat-tile.tsx +32 -37
  1383. package/src/components/status-dot.tsx +17 -14
  1384. package/src/components/swatch-picker-labels.ts +10 -0
  1385. package/src/components/swatch-picker.tsx +23 -16
  1386. package/src/components/swipeable-row.tsx +7 -7
  1387. package/src/components/switch.tsx +33 -32
  1388. package/src/components/table.tsx +15 -15
  1389. package/src/components/tabs.tsx +660 -0
  1390. package/src/components/text-link.tsx +7 -7
  1391. package/src/components/text.tsx +10 -6
  1392. package/src/components/textarea.tsx +323 -0
  1393. package/src/components/tile-radio.tsx +6 -6
  1394. package/src/components/time-input.tsx +15 -7
  1395. package/src/components/toast-labels.ts +12 -0
  1396. package/src/components/toast.tsx +5 -8
  1397. package/src/components/toggle-group.tsx +105 -42
  1398. package/src/components/toggle-legend.tsx +6 -6
  1399. package/src/components/tooltip.tsx +10 -21
  1400. package/src/components/translation-review-editor.tsx +8 -7
  1401. package/src/components/translation-review-parts.tsx +9 -13
  1402. package/src/components/translation-review.tsx +26 -14
  1403. package/src/components/tree-view.tsx +14 -12
  1404. package/src/components/ui-labels.ts +22 -0
  1405. package/src/components/user-avatar.tsx +3 -3
  1406. package/src/components/wizard-stepper.tsx +10 -5
  1407. package/src/components/write-lock-labels.ts +9 -0
  1408. package/src/components/write-lock.tsx +10 -12
  1409. package/src/data-table.ts +4 -0
  1410. package/src/demo/demo-banner.tsx +9 -25
  1411. package/src/demo/demo-ended.tsx +8 -7
  1412. package/src/demo/demo-labels.ts +2 -2
  1413. package/src/demo/demo-start.tsx +7 -5
  1414. package/src/feedback/feedback-attachment-labels.ts +36 -0
  1415. package/src/feedback/feedback-attachment.tsx +42 -66
  1416. package/src/feedback/feedback-context-labels.ts +10 -0
  1417. package/src/feedback/feedback-context.tsx +8 -9
  1418. package/src/feedback/feedback-dialog-labels.ts +28 -0
  1419. package/src/feedback/feedback-dialog.tsx +14 -44
  1420. package/src/feedback/feedback-inbox.tsx +49 -252
  1421. package/src/feedback/feedback-labels.ts +5 -5
  1422. package/src/feedback/feedback-menu-labels.ts +11 -0
  1423. package/src/feedback/feedback-menu.tsx +13 -11
  1424. package/src/feedback/feedback-record.ts +21 -7
  1425. package/src/feedback/feedback-row-detail-labels.ts +33 -0
  1426. package/src/feedback/feedback-row-detail.tsx +30 -43
  1427. package/src/feedback/feedback-status-undo.ts +3 -2
  1428. package/src/feedback/feedback-submit-dialog.tsx +109 -0
  1429. package/src/feedback/feedback-submit.tsx +45 -55
  1430. package/src/feedback/feedback-swipe.tsx +1 -1
  1431. package/src/feedback/feedback-table-labels.ts +27 -0
  1432. package/src/feedback/feedback-table.tsx +24 -40
  1433. package/src/feedback/feedback-thread-labels.ts +22 -0
  1434. package/src/feedback/feedback-thread.tsx +48 -47
  1435. package/src/feedback/feedback-vocabulary.ts +252 -0
  1436. package/src/hooks/use-anchored-panel.ts +102 -2
  1437. package/src/hooks/use-anchored-rect.ts +11 -9
  1438. package/src/hooks/use-authed-src.ts +13 -7
  1439. package/src/hooks/use-breakpoint.ts +5 -4
  1440. package/src/hooks/use-close-transition.ts +9 -10
  1441. package/src/hooks/use-debounce.ts +9 -0
  1442. package/src/hooks/use-dismiss.ts +176 -19
  1443. package/src/hooks/use-file-drop.ts +2 -2
  1444. package/src/hooks/use-file-picker-labels.ts +29 -0
  1445. package/src/hooks/use-file-picker.tsx +363 -0
  1446. package/src/hooks/use-focus-trap.ts +19 -6
  1447. package/src/i18n/defaults.ts +91 -82
  1448. package/src/i18n/german.ts +50 -6
  1449. package/src/i18n/kit-labels.tsx +70 -119
  1450. package/src/i18n/locales/en.ts +46 -0
  1451. package/src/i18n/locales/es.ts +50 -6
  1452. package/src/i18n/locales/fr.ts +52 -7
  1453. package/src/i18n/locales/hu.ts +50 -6
  1454. package/src/i18n/locales/it.ts +51 -6
  1455. package/src/i18n/locales/zh.ts +49 -6
  1456. package/src/i18n/review.ts +4 -0
  1457. package/src/i18n/shared-labels.ts +135 -0
  1458. package/src/index.ts +412 -404
  1459. package/src/landing/access.ts +2 -1
  1460. package/src/landing/landing-actions.tsx +6 -5
  1461. package/src/landing/landing-labels.ts +2 -2
  1462. package/src/landing/landing-sections.tsx +24 -23
  1463. package/src/landing/public-header.tsx +3 -2
  1464. package/src/landing/routing.tsx +2 -7
  1465. package/src/lib/chip-edge-snap.ts +212 -0
  1466. package/src/lib/cn.ts +13 -1
  1467. package/src/lib/dates.ts +4 -2
  1468. package/src/lib/decimal-marks.ts +4 -2
  1469. package/src/lib/download.ts +172 -0
  1470. package/src/lib/floating-stack.ts +5 -1
  1471. package/src/lib/format.ts +5 -3
  1472. package/src/lib/ime.ts +24 -0
  1473. package/src/lib/presence.ts +18 -0
  1474. package/src/lib/reduced-motion.ts +21 -0
  1475. package/src/lib/round.ts +38 -0
  1476. package/src/lib/safe-storage.ts +35 -11
  1477. package/src/lib/session-refresh.ts +473 -0
  1478. package/src/lib/text-match.ts +60 -0
  1479. package/src/lib/translation-review.ts +7 -6
  1480. package/src/rhf/fields.tsx +131 -179
  1481. package/src/rhf/form-core.tsx +327 -0
  1482. package/src/rhf/form.tsx +46 -321
  1483. package/src/rhf/line-items.tsx +1 -1
  1484. package/src/rhf.ts +3 -2
  1485. package/src/search/command-palette-labels.ts +16 -0
  1486. package/src/search/command-palette.tsx +37 -50
  1487. package/src/search/global-search-labels.ts +13 -0
  1488. package/src/search/global-search.tsx +50 -24
  1489. package/src/search/search-index.ts +5 -6
  1490. package/src/search/use-command-key.ts +22 -0
  1491. package/src/settings/settings-card-classes.ts +11 -0
  1492. package/src/settings/settings-heading.tsx +1 -1
  1493. package/src/settings/settings-labels.ts +2 -2
  1494. package/src/settings/settings-layout.tsx +65 -6
  1495. package/src/settings/settings-section.tsx +5 -5
  1496. package/src/settings/use-settings-focus.ts +2 -5
  1497. package/src/shell/app-shell-labels.ts +10 -0
  1498. package/src/shell/app-shell.tsx +79 -53
  1499. package/src/shell/auth-layout.tsx +11 -10
  1500. package/src/shell/company-switcher-labels.ts +13 -0
  1501. package/src/shell/company-switcher.tsx +7 -11
  1502. package/src/shell/option-switcher-menu.tsx +25 -6
  1503. package/src/shell/role-switcher.tsx +7 -3
  1504. package/src/shell/top-bar-brand.tsx +1 -1
  1505. package/src/shell/top-bar.tsx +6 -5
  1506. package/src/shell/topbar-action-menu.tsx +39 -20
  1507. package/src/shell/topbar-controls.tsx +24 -12
  1508. package/src/shell.ts +1 -1
  1509. package/src/testing/index.ts +11 -0
  1510. package/src/testing/viewport.ts +251 -0
  1511. package/src/theme/color.ts +7 -1
  1512. package/src/theme/palette-derive.ts +29 -7
  1513. package/src/theme/palette-presets.ts +81 -68
  1514. package/src/tour/tour-labels.ts +14 -0
  1515. package/src/tour/tour.tsx +13 -23
  1516. package/src/wizard/stepper-nav.tsx +19 -18
  1517. package/src/wizard/types.ts +7 -22
  1518. package/src/wizard/wizard-labels.ts +29 -0
  1519. package/src/wizard/wizard-step.tsx +2 -2
  1520. package/src/wizard/wizard-summary.tsx +8 -7
  1521. package/tokens.css +45 -14
  1522. package/dist/components/account-settings-labels.js.map +0 -1
  1523. package/dist/components/account-settings.js.map +0 -1
  1524. package/dist/components/choice-parts.d.ts +0 -24
  1525. package/dist/components/choice-parts.js +0 -18
  1526. package/dist/components/choice-parts.js.map +0 -1
  1527. package/dist/components/passkeys-setting.js.map +0 -1
  1528. package/dist/components/ui.d.ts +0 -101
  1529. package/dist/components/ui.js +0 -1955
  1530. package/dist/components/ui.js.map +0 -1
  1531. package/dist/data-table-labels-BJ5JE_X2.d.ts +0 -923
  1532. package/dist/delete-account-setting-DAgGBrbn.d.ts +0 -8167
  1533. package/src/components/choice-parts.ts +0 -33
  1534. package/src/components/ui.tsx +0 -4233
@@ -1,1955 +0,0 @@
1
- "use client";
2
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
- import { createContext, forwardRef, useContext, useId, useLayoutEffect, useRef, useState } from "react";
4
- import { ChevronDown, Eye, EyeOff, Plus, X } from "lucide-react";
5
- import { cn } from "../lib/cn.js";
6
- import { FOCUS_RING, FOCUS_RING_WIDTH } from "./focus-ring.js";
7
- import { scrollIntoStrip, useStripFade } from "../lib/strip-fade.js";
8
- import { horizontalStep } from "../lib/direction.js";
9
- import { usePhoneLayout } from "../hooks/use-breakpoint.js";
10
- import { useLargeText } from "../hooks/use-large-text.js";
11
- import { Tooltip } from "./tooltip.js";
12
- import { DEFAULT_COMMON_LABELS, useKitLabels, useKitLink } from "../i18n/kit-labels.js";
13
- import { pickLinkRenderer, replacingClick, routerLinkNavigation } from "./text-link.js";
14
- import { useCommitReason } from "./write-lock.js";
15
- import { mergeDescribedBy } from "./choice-parts.js";
16
- import {
17
- CompactControlsContext,
18
- DisabledReasonLine,
19
- EndHintRow,
20
- FieldCaption,
21
- LockedReason,
22
- useDisabledReasonLine,
23
- useFieldHint,
24
- useLockReason,
25
- FLOATING_LABEL_STATIC,
26
- LABEL_ABOVE_AT_LARGE,
27
- LABEL_ABOVE_BOX,
28
- STATIC_LABEL_TYPE
29
- } from "./field-parts.js";
30
- import { FieldLabel, FLOATING_LABEL_STATIC as FLOATING_LABEL_STATIC2, FieldHint } from "./field-parts.js";
31
- import { FOCUS_RING as FOCUS_RING2, FOCUS_RING_WIDTH as FOCUS_RING_WIDTH2 } from "./focus-ring.js";
32
- const BUTTON_BASE = cn(
33
- "inline-flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:shrink-0",
34
- FOCUS_RING_WIDTH
35
- );
36
- const TOUCH_TARGET_LARGE = "large:min-h-[48px] large:min-w-[48px]";
37
- const BUTTON_SIZES = {
38
- md: "gap-2 px-3 py-2 text-sm",
39
- sm: "gap-1.5 px-2 py-1 text-xs"
40
- };
41
- const BUTTON_SIZES_LARGE = {
42
- md: "large:min-h-[48px]",
43
- sm: "large:min-h-[48px] large:py-2.5"
44
- };
45
- const HOVER_INK = "hover:bg-[color-mix(in_srgb,var(--text-primary)_7%,transparent)]";
46
- const buttonVariantClasses = {
47
- primary: (
48
- // Hovers onto `--bg-active`, not `--border` (0.33, §12.9): More contrast steps the
49
- // border until it is a 3:1 LINE, and as a fill under the label that left 2.7:1.
50
- "border border-[var(--border)] bg-[var(--bg-surface-2)] text-[var(--text-primary)] hover:bg-active focus-visible:ring-[var(--brand)]"
51
- ),
52
- secondary: `border border-[var(--border)] bg-transparent text-[var(--text-primary)] ${HOVER_INK} focus-visible:ring-[var(--brand)]`,
53
- ghost: `bg-transparent text-[var(--text-primary)] ${HOVER_INK} focus-visible:ring-[var(--brand)]`,
54
- danger: "bg-[var(--danger)] text-[var(--danger-contrast)] hover:bg-[var(--danger-hover)] focus-visible:ring-[var(--danger-border-strong)]",
55
- brand: "bg-[var(--brand)] text-[var(--brand-contrast)] hover:bg-[var(--brand-hover)] focus-visible:ring-[var(--brand)]",
56
- // A text link that is still a `<button>` — keksdose's six hand-rolled
57
- // `<button className="text-brand underline">` sites ("Resend code", "Show all",
58
- // "Undo" in a toast…), which act rather than navigate and so must not be anchors.
59
- // The box padding goes (`p-0`) so it sits in a sentence at the text's own size, but
60
- // the base's focus ring stays: those copies had `outline-none` and no ring, so
61
- // a keyboard user tabbing onto them saw nothing at all. `rounded-sm` keeps that
62
- // ring hugging the word instead of drawing a pill round it.
63
- link: "rounded-sm p-0 bg-transparent text-[var(--brand)] underline-offset-4 hover:underline focus-visible:ring-[var(--brand)]"
64
- };
65
- const BUTTON_TONES = {
66
- muted: "text-[var(--text-secondary)] hover:text-[var(--text-primary)] disabled:hover:text-[var(--text-secondary)]",
67
- danger: "text-[var(--text-secondary)] hover:text-[var(--danger)] focus-visible:ring-[var(--danger-border-strong)] disabled:hover:text-[var(--text-secondary)]"
68
- };
69
- const TONED_VARIANTS = /* @__PURE__ */ new Set(["link", "ghost"]);
70
- const BUTTON_BOXED_DANGER = {
71
- // Not boxed, but its hover is a fill: the danger wash under the danger text, as
72
- // IconButton's danger tone (0.33). On B′'s translucent ink `--danger` fell to 4.2:1
73
- // over a light page.
74
- ghost: "hover:bg-[var(--danger-bg)]",
75
- secondary: "border-[var(--danger-border)] bg-transparent text-[var(--danger)] hover:bg-[var(--danger-bg)] focus-visible:ring-[var(--danger-border-strong)]",
76
- primary: "border-[var(--danger-border)] bg-[var(--danger-bg)] text-[var(--danger)] hover:border-[var(--danger)] hover:bg-[var(--danger)] hover:text-[var(--danger-contrast)] focus-visible:ring-[var(--danger-border-strong)] disabled:hover:border-[var(--danger-border)] disabled:hover:bg-[var(--danger-bg)] disabled:hover:text-[var(--danger)]"
77
- };
78
- const BUTTON_LINK_PRESSED = "font-medium text-[var(--brand)] hover:text-[var(--brand)] disabled:hover:text-[var(--brand)]";
79
- function buttonClasses(variant = "primary", classNameOrOptions) {
80
- const { size = "md", className } = typeof classNameOrOptions === "object" ? classNameOrOptions : { className: classNameOrOptions };
81
- return cn(
82
- BUTTON_BASE,
83
- BUTTON_SIZES[size],
84
- variant !== "link" && BUTTON_SIZES_LARGE[size],
85
- buttonVariantClasses[variant],
86
- className
87
- );
88
- }
89
- function hasContent(node) {
90
- return node !== void 0 && node !== null && node !== false && node !== "";
91
- }
92
- import {
93
- CompactControls,
94
- DisabledReasonLine as DisabledReasonLine2,
95
- DISABLED_REASON_LINE_CLASS,
96
- useDisabledReasonLine as useDisabledReasonLine2
97
- } from "./field-parts.js";
98
- function buttonLook(variant, size, stretch, tone) {
99
- return cn(
100
- BUTTON_BASE,
101
- BUTTON_SIZES[size],
102
- // §4: `sm` at `md`'s height and the 48 px target at Large — not on a `link`. In the
103
- // order `buttonClasses` has it, so the two strings stay identical.
104
- variant !== "link" && BUTTON_SIZES_LARGE[size],
105
- // In a flex row next to a taller labelled field, `stretch` makes the button
106
- // fill the field's height so the two line up (self-stretch overrides the row's
107
- // align-items). No effect outside a flex row / when it's already the tallest.
108
- stretch && "self-stretch",
109
- buttonVariantClasses[variant],
110
- tone !== "default" && TONED_VARIANTS.has(variant) && BUTTON_TONES[tone],
111
- tone === "danger" && BUTTON_BOXED_DANGER[variant]
112
- );
113
- }
114
- function Button(props) {
115
- if (props.href !== void 0) return /* @__PURE__ */ jsx(ButtonLink, { ...props });
116
- return /* @__PURE__ */ jsx(ButtonElement, { ...props });
117
- }
118
- function RenderedButtonLink({ render, ...props }) {
119
- return render(props);
120
- }
121
- function ButtonLink({
122
- href,
123
- renderLink,
124
- external,
125
- replace,
126
- reloadDocument,
127
- disabled,
128
- variant = "primary",
129
- size = "md",
130
- stretch,
131
- tone = "default",
132
- className,
133
- children,
134
- target,
135
- rel,
136
- onClick,
137
- ...rest
138
- }) {
139
- const kitLink = useKitLink();
140
- const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
141
- const Link = reloadDocument ? void 0 : pickLinkRenderer(renderLink, kitLink, href);
142
- const newTab = !disabled && (external || target === "_blank");
143
- const cls = cn(
144
- buttonLook(variant, size, stretch, tone),
145
- // `relative` holds the sr-only note (see sr-only-containment.test).
146
- newTab && "relative",
147
- // BUTTON_BASE's `disabled:` classes never match an `<a>`; no pointer events also
148
- // keeps the hover fill from lighting up on something that refuses the click.
149
- disabled && "pointer-events-none cursor-not-allowed opacity-50",
150
- className
151
- );
152
- const body = /* @__PURE__ */ jsxs(Fragment, { children: [
153
- children,
154
- newTab && " ",
155
- newTab && /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
156
- "(",
157
- common.opensInNewTab,
158
- ")"
159
- ] })
160
- ] });
161
- if (disabled) {
162
- return /* @__PURE__ */ jsx("a", { ...rest, role: "link", "aria-disabled": "true", className: cls, children: body });
163
- }
164
- if (external || !Link) {
165
- return /* @__PURE__ */ jsx(
166
- "a",
167
- {
168
- ...rest,
169
- href,
170
- target: external ? "_blank" : target,
171
- rel: external ? rel ?? "noopener noreferrer" : rel,
172
- onClick: external ? onClick : replacingClick(onClick, href, replace, target),
173
- className: cls,
174
- children: body
175
- }
176
- );
177
- }
178
- return /* @__PURE__ */ jsx(
179
- RenderedButtonLink,
180
- {
181
- render: Link,
182
- ...rest,
183
- ...routerLinkNavigation(replace),
184
- href,
185
- target,
186
- rel,
187
- onClick,
188
- className: cls,
189
- children: body
190
- }
191
- );
192
- }
193
- function ButtonElement({
194
- variant = "primary",
195
- size = "md",
196
- stretch,
197
- tone = "default",
198
- pressed,
199
- disabledReason: ownDisabledReason,
200
- disabledReasonDisplay,
201
- commit,
202
- pending,
203
- className,
204
- onClick,
205
- children,
206
- href: _href,
207
- renderLink: _renderLink,
208
- external: _external,
209
- replace: _replace,
210
- reloadDocument: _reloadDocument,
211
- ...rest
212
- }) {
213
- const reasonId = useId();
214
- const disabledReason = useCommitReason(commit, ownDisabledReason);
215
- const locked = hasContent(disabledReason);
216
- const inert = locked || Boolean(pending);
217
- const ownDescribedBy = rest["aria-describedby"];
218
- const button = /* @__PURE__ */ jsx(
219
- "button",
220
- {
221
- ...rest,
222
- disabled: inert ? void 0 : rest.disabled,
223
- "aria-disabled": inert || rest["aria-disabled"],
224
- "aria-busy": pending || rest["aria-busy"],
225
- "aria-describedby": locked ? ownDescribedBy ? `${ownDescribedBy} ${reasonId}` : reasonId : ownDescribedBy,
226
- "aria-pressed": pressed ?? rest["aria-pressed"],
227
- onClick: (e) => {
228
- if (inert) {
229
- e.preventDefault();
230
- return;
231
- }
232
- onClick?.(e);
233
- },
234
- className: cn(
235
- buttonLook(variant, size, stretch, tone),
236
- pressed && (variant === "link" ? BUTTON_LINK_PRESSED : ICON_BUTTON_PRESSED),
237
- // The disabled look for the focusable kind of disabled.
238
- locked && "cursor-not-allowed opacity-50",
239
- // No dimming while pending: the spinner IS the state, and at half opacity it
240
- // would be the faintest thing on the button. `relative` anchors it.
241
- pending && "relative cursor-progress",
242
- className
243
- ),
244
- children: pending ? /* @__PURE__ */ jsxs(Fragment, { children: [
245
- /* @__PURE__ */ jsx("span", { className: "inline-flex items-center justify-center gap-[inherit] opacity-0", children }),
246
- /* @__PURE__ */ jsx(
247
- Spinner,
248
- {
249
- label: null,
250
- className: "absolute inset-0 m-auto size-4 border-current/30 border-t-current"
251
- }
252
- )
253
- ] }) : children
254
- }
255
- );
256
- if (!locked) return button;
257
- return /* @__PURE__ */ jsx(
258
- ReasonFrame,
259
- {
260
- reason: disabledReason,
261
- reasonId,
262
- display: disabledReasonDisplay,
263
- className: stretch ? "self-stretch" : void 0,
264
- children: button
265
- }
266
- );
267
- }
268
- function ReasonFrame({
269
- reason,
270
- reasonId,
271
- display,
272
- className,
273
- side,
274
- portal,
275
- children
276
- }) {
277
- const line = useDisabledReasonLine(display);
278
- if (line) {
279
- return /* @__PURE__ */ jsx(DisabledReasonLine, { id: reasonId, reason, className, children });
280
- }
281
- return /* @__PURE__ */ jsx(Tooltip, { label: reason, side, portal, className, children: /* @__PURE__ */ jsxs(Fragment, { children: [
282
- children,
283
- /* @__PURE__ */ jsx("span", { id: reasonId, hidden: true, children: reason })
284
- ] }) });
285
- }
286
- const ICON_BUTTON_BASE = cn(
287
- "inline-flex items-center justify-center rounded-md transition-colors focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed",
288
- FOCUS_RING_WIDTH
289
- );
290
- const ICON_BUTTON_SIZES = {
291
- // 64px with a 28px glyph: a camera's shutter (keksdose invoices/camera-capture.tsx:248,
292
- // `size-16` by hand) — the one control of a full-screen capture view, thumb-sized.
293
- "2xl": "size-16 [&_svg]:size-7",
294
- // 48px with a 24px glyph: the one primary action of a phone screen or sheet, a step
295
- // past the 44px minimum rather than on it.
296
- xl: "size-12 [&_svg]:size-6",
297
- // The 44px touch target (WCAG 2.5.5's size) with the same 20px glyph — keksdose's
298
- // bulk-action bars write `size-11` by hand over an `md` button to get it on phones.
299
- lg: "size-11 [&_svg]:size-5",
300
- md: "size-9 [&_svg]:size-5",
301
- sm: "size-8 [&_svg]:size-5",
302
- xs: "size-7 rounded [&_svg]:size-4",
303
- "2xs": "size-6 rounded [&_svg]:size-3.5"
304
- };
305
- const ICON_BUTTON_STRETCH_SIZES = {
306
- "2xl": "w-16 min-h-16 self-stretch [&_svg]:size-7",
307
- xl: "w-12 min-h-12 self-stretch [&_svg]:size-6",
308
- lg: "w-11 min-h-11 self-stretch [&_svg]:size-5",
309
- md: "w-9 min-h-9 self-stretch [&_svg]:size-5",
310
- sm: "w-8 min-h-8 self-stretch [&_svg]:size-5",
311
- xs: "w-7 min-h-7 self-stretch rounded [&_svg]:size-4",
312
- "2xs": "w-6 min-h-6 self-stretch rounded [&_svg]:size-3.5"
313
- };
314
- const ICON_BUTTON_TEXT_SIZES = {
315
- "2xl": "h-16 gap-2 px-4 text-base [&_svg]:size-7",
316
- xl: "h-12 gap-2 px-3.5 text-sm [&_svg]:size-6",
317
- lg: "h-11 gap-2 px-3 text-sm [&_svg]:size-5",
318
- md: "h-9 gap-1.5 px-2.5 text-sm [&_svg]:size-5",
319
- sm: "h-8 gap-1.5 px-2 text-sm [&_svg]:size-5",
320
- xs: "h-7 gap-1 rounded px-1.5 text-xs [&_svg]:size-4",
321
- "2xs": "h-6 gap-1 rounded px-1.5 text-xs [&_svg]:size-3.5"
322
- };
323
- const ICON_BUTTON_TEXT_STRETCH_SIZES = {
324
- "2xl": "min-h-16 self-stretch gap-2 px-4 text-base [&_svg]:size-7",
325
- xl: "min-h-12 self-stretch gap-2 px-3.5 text-sm [&_svg]:size-6",
326
- lg: "min-h-11 self-stretch gap-2 px-3 text-sm [&_svg]:size-5",
327
- md: "min-h-9 self-stretch gap-1.5 px-2.5 text-sm [&_svg]:size-5",
328
- sm: "min-h-8 self-stretch gap-1.5 px-2 text-sm [&_svg]:size-5",
329
- xs: "min-h-7 self-stretch gap-1 rounded px-1.5 text-xs [&_svg]:size-4",
330
- "2xs": "min-h-6 self-stretch gap-1 rounded px-1.5 text-xs [&_svg]:size-3.5"
331
- };
332
- const ICON_BUTTON_TOUCH_LARGE = {
333
- "2xl": "",
334
- xl: "",
335
- lg: "",
336
- md: TOUCH_TARGET_LARGE,
337
- sm: TOUCH_TARGET_LARGE,
338
- xs: TOUCH_TARGET_LARGE,
339
- "2xs": "relative large:after:absolute large:after:inset-[calc((100%-48px)/2)] large:after:content-['']"
340
- };
341
- const ICON_BUTTON_TONES = {
342
- danger: {
343
- quiet: "text-[var(--text-placeholder)] hover:bg-[var(--danger-bg)] hover:text-[var(--danger)] focus-visible:ring-[var(--danger-border-strong)]",
344
- toned: "text-[var(--danger)] hover:bg-[var(--danger-bg)] focus-visible:ring-[var(--danger-border-strong)]"
345
- },
346
- warning: {
347
- quiet: "text-[var(--text-placeholder)] hover:bg-[var(--warning-bg)] hover:text-[var(--warning)] focus-visible:ring-warning-strong",
348
- // The ring is warning's loud line (0.33, k27): `--warning-border`, amber-300, was a
349
- // focus ring at 1.1:1 on the light surfaces.
350
- toned: "text-[var(--warning)] hover:bg-[var(--warning-bg)] focus-visible:ring-warning-strong"
351
- },
352
- info: {
353
- quiet: "text-[var(--text-placeholder)] hover:bg-[var(--info-bg)] hover:text-[var(--info)] focus-visible:ring-[var(--info-border)]",
354
- toned: "text-[var(--info)] hover:bg-[var(--info-bg)] focus-visible:ring-[var(--info-border)]"
355
- },
356
- success: {
357
- quiet: "text-[var(--text-placeholder)] hover:bg-[var(--success-bg)] hover:text-[var(--success)] focus-visible:ring-[var(--success-border)]",
358
- toned: "text-[var(--success)] hover:bg-[var(--success-bg)] focus-visible:ring-[var(--success-border)]"
359
- },
360
- // The hover fill and the ring are MIXED from the one colour, since a custom tone
361
- // brings no `-bg` / `-border` pair of its own. The fallback is the body colour, so a
362
- // `custom` tone with no colour set is the default look rather than invisible.
363
- custom: {
364
- quiet: "text-[var(--text-placeholder)] hover:bg-[color-mix(in_srgb,var(--icon-button-tone,var(--text-primary))_12%,transparent)] hover:text-[var(--icon-button-tone,var(--text-primary))] focus-visible:ring-[color-mix(in_srgb,var(--icon-button-tone,var(--text-primary))_40%,transparent)]",
365
- toned: "text-[var(--icon-button-tone,var(--text-primary))] hover:bg-[color-mix(in_srgb,var(--icon-button-tone,var(--text-primary))_12%,transparent)] focus-visible:ring-[color-mix(in_srgb,var(--icon-button-tone,var(--text-primary))_40%,transparent)]"
366
- }
367
- };
368
- const ICON_BUTTON_MUTED = `text-[var(--text-placeholder)] ${HOVER_INK} hover:text-[var(--text-primary)]`;
369
- const QUIET_BY_DEFAULT = {
370
- danger: true,
371
- warning: false,
372
- info: false,
373
- success: false,
374
- custom: false
375
- };
376
- function iconButtonToneClass(tone, quiet) {
377
- if (tone === "default") return "";
378
- if (tone === "muted") return cn(ICON_BUTTON_MUTED, ICON_BUTTON_QUIET_DISABLED_REST);
379
- const isQuiet = quiet ?? QUIET_BY_DEFAULT[tone];
380
- const look = ICON_BUTTON_TONES[tone];
381
- return isQuiet ? cn(look.quiet, ICON_BUTTON_QUIET_DISABLED_REST) : look.toned;
382
- }
383
- const ICON_BUTTON_DISABLED_REST = {
384
- primary: "disabled:hover:bg-[var(--bg-surface-2)]",
385
- secondary: "disabled:hover:bg-transparent",
386
- ghost: "disabled:hover:bg-transparent",
387
- danger: "disabled:hover:bg-[var(--danger)]",
388
- brand: "disabled:hover:bg-[var(--brand)]",
389
- link: "disabled:hover:bg-transparent disabled:hover:no-underline",
390
- overlay: "disabled:hover:bg-[color-mix(in_srgb,var(--bg-inverse)_60%,transparent)]",
391
- shutter: "disabled:hover:bg-[var(--media-scrim)]"
392
- };
393
- const ICON_BUTTON_QUIET_DISABLED_REST = "disabled:hover:text-[var(--text-placeholder)]";
394
- const ICON_BUTTON_PRESSED = "bg-[var(--brand-bg)] text-[var(--brand)] hover:bg-[var(--brand-bg-hover)] hover:text-brand-muted disabled:hover:bg-[var(--brand-bg)] disabled:hover:text-[var(--brand)]";
395
- const ICON_BUTTON_OVERLAY = "rounded-full bg-[color-mix(in_srgb,var(--bg-inverse)_60%,transparent)] text-[var(--text-inverse)] backdrop-blur-sm hover:bg-[color-mix(in_srgb,var(--bg-inverse)_75%,transparent)] focus-visible:ring-[var(--text-inverse)]";
396
- const ICON_BUTTON_SHUTTER = "rounded-full border-4 border-[var(--media-ink)] bg-[var(--media-scrim)] text-[var(--media-ink)] backdrop-blur-sm hover:bg-[var(--media-scrim-hover)] focus-visible:ring-[var(--media-ink)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--media-scrim-hover)]";
397
- const ICON_BUTTON_GLYPH_SIZES = {
398
- 12: "[&_svg]:size-3",
399
- 14: "[&_svg]:size-3.5",
400
- 16: "[&_svg]:size-4",
401
- 20: "[&_svg]:size-5",
402
- 24: "[&_svg]:size-6",
403
- 28: "[&_svg]:size-7"
404
- };
405
- const ICON_BUTTON_SPINNER = {
406
- "2xl": "size-7",
407
- xl: "size-6",
408
- lg: "size-5",
409
- md: "size-5",
410
- sm: "size-5",
411
- xs: "size-4",
412
- "2xs": "size-3.5"
413
- };
414
- const ICON_BUTTON_SPINNER_GLYPH = {
415
- 12: "size-3",
416
- 14: "size-3.5",
417
- 16: "size-4",
418
- 20: "size-5",
419
- 24: "size-6",
420
- 28: "size-7"
421
- };
422
- function useIconButtonText(label, labelVisible, variant, tooltip) {
423
- const large = useLargeText();
424
- const compact = useContext(CompactControlsContext);
425
- if (!large || label === void 0 || label === "" || !tooltip) return false;
426
- const visible = labelVisible ?? (!compact && variant !== "overlay" && variant !== "shutter");
427
- return visible;
428
- }
429
- function IconButtonText({ label }) {
430
- return /* @__PURE__ */ jsx("span", { "data-slot": "icon-button-label", children: label });
431
- }
432
- const ICON_BUTTON_TONE_PAIR = "[--icon-button-tone:var(--icon-button-tone-light)] dark:[--icon-button-tone:var(--icon-button-tone-dark)]";
433
- function toneColorStyle(toneColor, style) {
434
- if (toneColor === void 0) return style;
435
- const vars = typeof toneColor === "string" ? { "--icon-button-tone": toneColor } : { "--icon-button-tone-light": toneColor.light, "--icon-button-tone-dark": toneColor.dark };
436
- return { ...style, ...vars };
437
- }
438
- function iconButtonLook({
439
- variant,
440
- size,
441
- stretch,
442
- glyphSize,
443
- shape,
444
- tone,
445
- quiet,
446
- toneColor,
447
- withText = false
448
- }) {
449
- return cn(
450
- ICON_BUTTON_BASE,
451
- withText ? cn("font-medium whitespace-nowrap", stretch ? ICON_BUTTON_TEXT_STRETCH_SIZES[size] : ICON_BUTTON_TEXT_SIZES[size]) : stretch ? ICON_BUTTON_STRETCH_SIZES[size] : ICON_BUTTON_SIZES[size],
452
- // With text the pill is a 48 px target at any size; the square follows its size.
453
- withText ? TOUCH_TARGET_LARGE : ICON_BUTTON_TOUCH_LARGE[size],
454
- glyphSize !== void 0 && ICON_BUTTON_GLYPH_SIZES[glyphSize],
455
- // After the size, so the overlay's `rounded-full` beats the small sizes' `rounded`.
456
- variant === "overlay" ? ICON_BUTTON_OVERLAY : variant === "shutter" ? ICON_BUTTON_SHUTTER : buttonVariantClasses[variant],
457
- shape === "round" && "rounded-full",
458
- ICON_BUTTON_DISABLED_REST[variant],
459
- iconButtonToneClass(tone, quiet),
460
- toneColor !== void 0 && typeof toneColor !== "string" && ICON_BUTTON_TONE_PAIR
461
- );
462
- }
463
- function withIconButtonBadge(control, badge, stretch) {
464
- if (!hasContent(badge)) return control;
465
- return /* @__PURE__ */ jsxs("span", { className: cn("relative inline-flex shrink-0", stretch && "self-stretch"), children: [
466
- control,
467
- /* @__PURE__ */ jsx(
468
- "span",
469
- {
470
- "aria-hidden": true,
471
- "data-slot": "icon-button-badge",
472
- className: "pointer-events-none absolute -end-0.5 -bottom-0.5 inline-flex rounded-full bg-[var(--bg-surface)] [&_svg]:size-3",
473
- children: badge
474
- }
475
- )
476
- ] });
477
- }
478
- function IconButton(props) {
479
- if (props.href !== void 0) return /* @__PURE__ */ jsx(IconButtonLink, { ...props });
480
- return /* @__PURE__ */ jsx(IconButtonElement, { ...props });
481
- }
482
- IconButton.displayName = "IconButton";
483
- function IconButtonLink({
484
- href,
485
- renderLink,
486
- external,
487
- replace,
488
- reloadDocument,
489
- disabled,
490
- variant = "ghost",
491
- size = "md",
492
- tone: toneProp,
493
- quiet,
494
- stopPropagation,
495
- stretch,
496
- shape = "square",
497
- toneColor,
498
- label,
499
- labelVisible,
500
- tooltip = true,
501
- tooltipSide,
502
- tooltipPortal,
503
- tooltipLazy = true,
504
- glyphSize,
505
- badge,
506
- className,
507
- style,
508
- target,
509
- rel,
510
- onClick,
511
- onKeyDown,
512
- children: glyph,
513
- ref,
514
- ...rest
515
- }) {
516
- const withText = useIconButtonText(label, labelVisible, variant, tooltip);
517
- const children = withText ? /* @__PURE__ */ jsxs(Fragment, { children: [
518
- glyph,
519
- /* @__PURE__ */ jsx(IconButtonText, { label })
520
- ] }) : glyph;
521
- const kitLink = useKitLink();
522
- const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
523
- const tone = toneProp ?? (toneColor !== void 0 ? "custom" : "default");
524
- const Link = reloadDocument ? void 0 : pickLinkRenderer(renderLink, kitLink, href);
525
- const newTab = !disabled && (external || target === "_blank");
526
- const name = rest["aria-label"] ?? label;
527
- const ariaLabel = name !== void 0 && newTab ? `${name} (${common.opensInNewTab})` : name;
528
- const handleClick = (e) => {
529
- if (stopPropagation) e.stopPropagation();
530
- onClick?.(e);
531
- };
532
- const handleKeyDown = (e) => {
533
- if (stopPropagation && e.key === "Enter") e.stopPropagation();
534
- onKeyDown?.(e);
535
- };
536
- const cls = cn(
537
- iconButtonLook({ variant, size, stretch, glyphSize, shape, tone, quiet, toneColor, withText }),
538
- // BASE's `disabled:` classes never match an `<a>` — Button's disabled link look.
539
- disabled && "pointer-events-none cursor-not-allowed opacity-50",
540
- className
541
- );
542
- const look = { style: toneColorStyle(toneColor, style), className: cls };
543
- let control;
544
- if (disabled) {
545
- control = /* @__PURE__ */ jsx("a", { ...rest, ...look, ref, role: "link", "aria-disabled": "true", "aria-label": ariaLabel, children });
546
- } else if (external || !Link) {
547
- control = /* @__PURE__ */ jsx(
548
- "a",
549
- {
550
- ...rest,
551
- ...look,
552
- ref,
553
- href,
554
- "aria-label": ariaLabel,
555
- target: external ? "_blank" : target,
556
- rel: external ? rel ?? "noopener noreferrer" : rel,
557
- onClick: external ? handleClick : replacingClick(handleClick, href, replace, target),
558
- onKeyDown: handleKeyDown,
559
- children
560
- }
561
- );
562
- } else {
563
- control = /* @__PURE__ */ jsx(
564
- RenderedButtonLink,
565
- {
566
- render: Link,
567
- ...rest,
568
- ...look,
569
- ...routerLinkNavigation(replace),
570
- ref,
571
- href,
572
- "aria-label": ariaLabel,
573
- target,
574
- rel,
575
- onClick: handleClick,
576
- onKeyDown: handleKeyDown,
577
- children
578
- }
579
- );
580
- }
581
- control = withIconButtonBadge(control, badge, stretch);
582
- if (!tooltip || withText || label === void 0 || label === "") return control;
583
- return (
584
- // A fragment, as on the button: the bubble says what `aria-label` already does.
585
- /* @__PURE__ */ jsx(
586
- Tooltip,
587
- {
588
- label,
589
- side: tooltipSide,
590
- portal: tooltipPortal,
591
- lazy: tooltipLazy,
592
- className: stretch ? "self-stretch" : void 0,
593
- children: /* @__PURE__ */ jsx(Fragment, { children: control })
594
- }
595
- )
596
- );
597
- }
598
- function IconButtonElement({
599
- variant = "ghost",
600
- size = "md",
601
- tone: toneProp,
602
- quiet,
603
- pressed,
604
- stopPropagation,
605
- stretch,
606
- shape = "square",
607
- toneColor,
608
- label,
609
- labelVisible,
610
- tooltip = true,
611
- tooltipSide,
612
- tooltipPortal,
613
- tooltipLazy = true,
614
- disabledReason: ownDisabledReason,
615
- disabledReasonDisplay,
616
- commit,
617
- pending,
618
- glyphSize,
619
- badge,
620
- disabledStyle = "dim",
621
- className,
622
- style,
623
- onClick,
624
- onKeyDown,
625
- children,
626
- href: _href,
627
- renderLink: _renderLink,
628
- external: _external,
629
- replace: _replace,
630
- reloadDocument: _reloadDocument,
631
- ref,
632
- ...rest
633
- }) {
634
- const tone = toneProp ?? (toneColor !== void 0 ? "custom" : "default");
635
- const keep = disabledStyle === "keep";
636
- const withText = useIconButtonText(label, labelVisible, variant, tooltip);
637
- const reasonId = useId();
638
- const disabledReason = useCommitReason(commit, ownDisabledReason);
639
- const locked = hasContent(disabledReason);
640
- const inert = locked || Boolean(pending);
641
- const ownDescribedBy = rest["aria-describedby"];
642
- const button = /* @__PURE__ */ jsxs(
643
- "button",
644
- {
645
- ref,
646
- ...rest,
647
- disabled: inert ? void 0 : rest.disabled,
648
- "aria-disabled": inert || rest["aria-disabled"],
649
- "aria-busy": pending || rest["aria-busy"],
650
- "aria-describedby": locked ? ownDescribedBy ? `${ownDescribedBy} ${reasonId}` : reasonId : ownDescribedBy,
651
- "aria-label": rest["aria-label"] ?? label,
652
- "aria-pressed": pressed ?? rest["aria-pressed"],
653
- style: toneColorStyle(toneColor, style),
654
- onClick: (e) => {
655
- if (stopPropagation) e.stopPropagation();
656
- if (inert) {
657
- e.preventDefault();
658
- return;
659
- }
660
- onClick?.(e);
661
- },
662
- onKeyDown: (e) => {
663
- if (stopPropagation && (e.key === "Enter" || e.key === " ")) e.stopPropagation();
664
- onKeyDown?.(e);
665
- },
666
- className: cn(
667
- iconButtonLook({ variant, size, stretch, glyphSize, shape, tone, quiet, toneColor, withText }),
668
- pressed && ICON_BUTTON_PRESSED,
669
- // The disabled look for the focusable kind of disabled, as on Button.
670
- locked && (keep ? "cursor-default" : "cursor-not-allowed opacity-50"),
671
- keep && "disabled:cursor-default disabled:opacity-100",
672
- pending && "cursor-progress",
673
- className
674
- ),
675
- children: [
676
- pending ? (
677
- // Decorative, as on Button: `aria-busy` says it. Sized to the glyph it stands
678
- // in for, in the glyph's colour, so the swap does not change the button's look.
679
- /* @__PURE__ */ jsx(
680
- Spinner,
681
- {
682
- label: null,
683
- className: cn(
684
- "border-current/30 border-t-current",
685
- glyphSize !== void 0 ? ICON_BUTTON_SPINNER_GLYPH[glyphSize] : ICON_BUTTON_SPINNER[size]
686
- )
687
- }
688
- )
689
- ) : children,
690
- withText && /* @__PURE__ */ jsx(IconButtonText, { label })
691
- ]
692
- }
693
- );
694
- const control = withIconButtonBadge(button, badge, stretch);
695
- if (locked) {
696
- return (
697
- // Button's shape: the reason as a line under it, or the bubble with a hidden copy
698
- // for the description (see ReasonFrame).
699
- /* @__PURE__ */ jsx(
700
- ReasonFrame,
701
- {
702
- reason: disabledReason,
703
- reasonId,
704
- display: disabledReasonDisplay,
705
- side: tooltipSide,
706
- portal: tooltipPortal,
707
- className: stretch ? "self-stretch" : void 0,
708
- children: control
709
- }
710
- )
711
- );
712
- }
713
- if (!tooltip || withText || label === void 0 || label === "") return control;
714
- return (
715
- // A fragment, so Tooltip leaves the button's description alone: the bubble says
716
- // exactly what `aria-label` already does. Lazy by default — see `tooltipLazy`.
717
- /* @__PURE__ */ jsx(
718
- Tooltip,
719
- {
720
- label,
721
- side: tooltipSide,
722
- portal: tooltipPortal,
723
- lazy: tooltipLazy,
724
- className: stretch ? "self-stretch" : void 0,
725
- children: /* @__PURE__ */ jsx(Fragment, { children: control })
726
- }
727
- )
728
- );
729
- }
730
- const FIELD_TOUCH_TEXT = "pointer-coarse:text-[length:max(0.875rem,16px)]";
731
- const FIELD_BASE = "block w-full rounded-md border border-[var(--border)] bg-[var(--bg-surface)] px-3 py-2 text-sm text-[var(--text-primary)] shadow-sm placeholder:text-[var(--text-placeholder)] focus:border-[var(--brand)] focus:ring-[var(--brand)] " + // §10.1: at least 16 px on a touch screen, or iOS zooms the page on focus.
732
- FIELD_TOUCH_TEXT + " disabled:cursor-default disabled:bg-[var(--bg-surface-2)] disabled:text-[var(--text-muted)] [&[readonly]]:bg-[var(--bg-surface-2)] [&[readonly]]:text-[var(--text-muted)]";
733
- const FIELD_WRITABLE_LOOK = "[&[readonly]]:bg-[var(--bg-surface)] [&[readonly]]:text-[var(--text-primary)]";
734
- const FIELD_FLOATING_PAD = "pt-4 pb-1 large:py-2";
735
- const FIELD_INVALID = "border-[var(--danger-border-strong)] ring-1 ring-[var(--danger-border-strong)] focus:border-[var(--danger)] focus:ring-[var(--danger)]";
736
- const FLOATING_INPUT_CLASS = cn(FIELD_BASE, FIELD_FLOATING_PAD, "peer placeholder:text-transparent");
737
- const PHONE_QUERY = "(max-width: 767px)";
738
- const FIELD_DISPLAY = "block w-full border-x-0 border-t-0 border-b border-[var(--border)] bg-transparent px-0 pt-0 pb-1 text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)] focus:border-[var(--brand)] focus:outline-none focus:ring-0 disabled:opacity-60";
739
- const FIELD_TRIGGER = cn(
740
- FIELD_BASE,
741
- "relative flex items-center justify-between gap-2 text-start hover:bg-[var(--bg-hover)]",
742
- "[&>:first-child]:min-h-[1lh]"
743
- );
744
- function FieldChevron({ className, ...rest }) {
745
- return /* @__PURE__ */ jsx(
746
- ChevronDown,
747
- {
748
- ...rest,
749
- "aria-hidden": true,
750
- className: cn(
751
- "pointer-events-none absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-[var(--text-placeholder)]",
752
- className
753
- )
754
- }
755
- );
756
- }
757
- const LABEL_FLOATED_AT_LARGE = "large:text-caption large:leading-tight large:text-secondary large:transition-none";
758
- const FLOATING_LABEL_CLASS = cn(
759
- "pointer-events-none absolute start-3 top-2.5 text-sm text-[var(--text-placeholder)] transition-all",
760
- "max-w-[calc(100%-1.5rem)] truncate-until-large",
761
- "peer-focus:top-1 peer-focus:text-caption peer-focus:leading-tight peer-focus:text-[var(--text-secondary)]",
762
- "peer-[:not(:placeholder-shown)]:top-1 peer-[:not(:placeholder-shown)]:text-caption peer-[:not(:placeholder-shown)]:leading-tight peer-[:not(:placeholder-shown)]:text-[var(--text-secondary)]",
763
- "peer-disabled:opacity-50",
764
- LABEL_ABOVE_AT_LARGE,
765
- "large:block",
766
- LABEL_FLOATED_AT_LARGE
767
- );
768
- const FLOATING_ROW_CLASS = cn(
769
- "pointer-events-none absolute start-3 top-2.5 flex items-center gap-1 transition-all",
770
- "max-w-[calc(100%-3rem)] text-sm text-[var(--text-placeholder)]",
771
- "peer-focus:top-1 peer-focus:text-caption peer-focus:leading-tight peer-focus:text-[var(--text-secondary)]",
772
- "peer-[:not(:placeholder-shown)]:top-1 peer-[:not(:placeholder-shown)]:text-caption peer-[:not(:placeholder-shown)]:leading-tight peer-[:not(:placeholder-shown)]:text-[var(--text-secondary)]",
773
- "peer-disabled:opacity-50",
774
- LABEL_ABOVE_AT_LARGE,
775
- LABEL_FLOATED_AT_LARGE
776
- );
777
- const STATIC_ROW_CLASS = cn("pointer-events-none absolute inset-x-3 top-1 flex items-center gap-1", LABEL_ABOVE_AT_LARGE);
778
- function FloatingField({
779
- className,
780
- htmlFor,
781
- label,
782
- staticLabel,
783
- srOnlyLabel,
784
- hint,
785
- children,
786
- ...rest
787
- }) {
788
- const withHint = hint !== void 0 && !srOnlyLabel;
789
- const atEnd = withHint && staticLabel;
790
- const above = label !== void 0 && !srOnlyLabel;
791
- const labelEl = label !== void 0 && /* @__PURE__ */ jsx(
792
- "label",
793
- {
794
- htmlFor,
795
- "data-field-label": above && !withHint ? "" : void 0,
796
- className: srOnlyLabel ? "sr-only" : atEnd ? cn("pointer-events-none min-w-0 truncate-until-large", STATIC_LABEL_TYPE) : withHint ? "pointer-events-none min-w-0 truncate-until-large" : staticLabel ? FLOATING_LABEL_STATIC : FLOATING_LABEL_CLASS,
797
- children: label
798
- }
799
- );
800
- return (
801
- // `relative` is the whole contract of this wrapper — the floating label and every
802
- // control that hangs off it (a reveal toggle, a chevron) are positioned against
803
- // this box — so it is merged through `cn` after the spread rather than left where
804
- // a caller's stray `className` or `style` could unset it. At Large, with a label
805
- // above, a grid: the label's row over the field's, the field's parts in the latter.
806
- /* @__PURE__ */ jsxs("div", { ...rest, className: cn("relative", above && LABEL_ABOVE_BOX, className), children: [
807
- children,
808
- withHint ? (
809
- // Static: `inset-x-3` rather than `start-3`, so a long label truncates at
810
- // the field's own end padding instead of running under the chevron.
811
- // Animated: the row floats with the label and is only as wide as it needs
812
- // to be. Either way the hint keeps its width (`shrink-0`) and the label
813
- // is the one that gives way.
814
- /* @__PURE__ */ jsxs("div", { "data-field-label": "", className: atEnd ? STATIC_ROW_CLASS : FLOATING_ROW_CLASS, children: [
815
- labelEl,
816
- /* @__PURE__ */ jsx("span", { className: "pointer-events-auto flex shrink-0 items-center", children: hint })
817
- ] })
818
- ) : labelEl
819
- ] })
820
- );
821
- }
822
- function Label({ required, size = "md", disabled, className, children, ...rest }) {
823
- return /* @__PURE__ */ jsxs(
824
- "label",
825
- {
826
- ...rest,
827
- className: cn(
828
- "inline-flex items-center gap-0.5 font-medium leading-none text-[var(--text-primary)]",
829
- size === "sm" ? "text-xs" : "text-sm",
830
- disabled && "cursor-default opacity-50",
831
- className
832
- ),
833
- children: [
834
- children,
835
- required && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "text-[var(--danger)]", children: "*" })
836
- ]
837
- }
838
- );
839
- }
840
- const FIELD_ERROR_CLASS = "mt-1 text-caption leading-tight text-[var(--danger)]";
841
- function useFieldError(error, invalid, describedBy, ariaInvalid) {
842
- const errorId = useId();
843
- const hasError = error !== void 0 && error !== null && error !== false && error !== "";
844
- return {
845
- /** A field carrying a message that says what is wrong with it IS wrong. */
846
- isInvalid: Boolean(invalid) || hasError || ariaInvalid === true || ariaInvalid === "true",
847
- describedBy: hasError ? describedBy ? `${describedBy} ${errorId}` : errorId : describedBy,
848
- errorEl: hasError ? /* @__PURE__ */ jsx("p", { id: errorId, className: FIELD_ERROR_CLASS, children: error }) : null
849
- };
850
- }
851
- function FieldGroup({
852
- errorEl,
853
- reserve = false,
854
- children
855
- }) {
856
- if (errorEl === null && !reserve) return /* @__PURE__ */ jsx(Fragment, { children });
857
- return /* @__PURE__ */ jsxs("div", { children: [
858
- children,
859
- errorEl
860
- ] });
861
- }
862
- const DEFAULT_PASSWORD_REVEAL_LABELS = {
863
- show: "Show password",
864
- hide: "Hide password"
865
- };
866
- function resolvePasswordRevealLabels(partial) {
867
- if (!partial) return DEFAULT_PASSWORD_REVEAL_LABELS;
868
- return { ...DEFAULT_PASSWORD_REVEAL_LABELS, ...partial };
869
- }
870
- const DEFAULT_CHARACTER_COUNT_LABELS = {
871
- count: (used, max) => `${used} of ${max} characters`,
872
- remaining: (left) => left === 1 ? "1 character left" : `${left} characters left`,
873
- limitReached: "Character limit reached"
874
- };
875
- function textLength(value) {
876
- return value === void 0 || value === null ? 0 : String(value).length;
877
- }
878
- function useTypedLength(value, defaultValue) {
879
- const [typed, setTyped] = useState(() => textLength(defaultValue));
880
- return { used: value !== void 0 ? textLength(value) : typed, track: (text) => setTyped(text.length) };
881
- }
882
- function nearLimitAt(max) {
883
- return Math.min(20, Math.max(1, Math.ceil(max * 0.1)));
884
- }
885
- function countZone(used, max) {
886
- if (used >= max) return "limit";
887
- return max - used <= nearLimitAt(max) ? "near" : "ok";
888
- }
889
- function CharacterCount({
890
- id,
891
- used,
892
- max,
893
- labels,
894
- caption
895
- }) {
896
- const zone = countZone(used, max);
897
- const [said, setSaid] = useState({ zone, text: "" });
898
- if (said.zone !== zone) {
899
- setSaid({
900
- zone,
901
- text: zone === "near" ? labels.remaining(max - used) : zone === "limit" ? labels.limitReached : ""
902
- });
903
- }
904
- return (
905
- // `relative` holds the sr-only region (see sr-only-containment.test).
906
- /* @__PURE__ */ jsxs("div", { className: "relative mt-1 flex items-start gap-2", children: [
907
- /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: caption }),
908
- /* @__PURE__ */ jsxs(
909
- "span",
910
- {
911
- "aria-hidden": true,
912
- className: cn(
913
- "shrink-0 text-caption leading-tight tabular-nums",
914
- zone === "limit" ? "text-[var(--danger)]" : zone === "near" ? "text-[var(--warning)]" : "text-[var(--text-muted)]"
915
- ),
916
- children: [
917
- used,
918
- "/",
919
- max
920
- ]
921
- }
922
- ),
923
- /* @__PURE__ */ jsx("span", { id, hidden: true, children: labels.count(used, max) }),
924
- /* @__PURE__ */ jsx("span", { role: "status", className: "sr-only", children: said.text })
925
- ] })
926
- );
927
- }
928
- function fieldBelow(hint, counter, errorEl) {
929
- if (counter === null && hint.captionText === void 0 && errorEl === null) return null;
930
- return /* @__PURE__ */ jsxs(Fragment, { children: [
931
- counter ?? /* @__PURE__ */ jsx(FieldCaption, { parts: hint }),
932
- errorEl
933
- ] });
934
- }
935
- const FLOATING_PLACEHOLDER_ON_FOCUS = "focus:placeholder:text-[var(--text-placeholder)]";
936
- const hasPlaceholderText = (placeholder) => placeholder !== void 0 && placeholder.trim() !== "";
937
- const PICKER_TYPES = /* @__PURE__ */ new Set(["date", "datetime-local", "month", "time", "week"]);
938
- function useCharacterCountLabels(prop) {
939
- return useKitLabels("characterCount", DEFAULT_CHARACTER_COUNT_LABELS, prop);
940
- }
941
- const Input = forwardRef(function Input2(props, ref) {
942
- const {
943
- className,
944
- inputClassName,
945
- label,
946
- id,
947
- placeholder,
948
- type,
949
- variant = "field",
950
- invalid,
951
- error,
952
- hint,
953
- showCount,
954
- countLabels,
955
- passwordLabels,
956
- ...rest
957
- } = props;
958
- const reserve = "error" in props || "hint" in props || "showCount" in props;
959
- const generated = useId();
960
- const fieldId = id ?? generated;
961
- const countId = useId();
962
- const hintParts = useFieldHint(hint, rest["aria-describedby"]);
963
- const maxLength = rest.maxLength;
964
- const counting = Boolean(showCount) && typeof maxLength === "number" && maxLength > 0;
965
- const length = useTypedLength(rest.value, rest.defaultValue);
966
- const countText = useCharacterCountLabels(countLabels);
967
- const { isInvalid, describedBy, errorEl } = useFieldError(
968
- error,
969
- invalid,
970
- // Caller's, caption, count — then the error, appended by the hook.
971
- mergeDescribedBy(hintParts.describedBy, counting && countId),
972
- rest["aria-invalid"]
973
- );
974
- const counter = counting ? /* @__PURE__ */ jsx(
975
- CharacterCount,
976
- {
977
- id: countId,
978
- used: length.used,
979
- max: maxLength,
980
- labels: countText,
981
- caption: /* @__PURE__ */ jsx(FieldCaption, { parts: hintParts, className: "mt-0" })
982
- }
983
- ) : null;
984
- const below = fieldBelow(hintParts, counter, errorEl);
985
- const onChange = counting ? (e) => {
986
- length.track(e.target.value);
987
- rest.onChange?.(e);
988
- } : rest.onChange;
989
- const asDisplay = usePhoneLayout() && variant === "display";
990
- const isPassword = type === "password";
991
- const [revealed, setRevealed] = useState(false);
992
- const effectiveType = isPassword && revealed ? "text" : type;
993
- const handleClick = PICKER_TYPES.has(type ?? "") ? (e) => {
994
- rest.onClick?.(e);
995
- try {
996
- e.currentTarget.showPicker?.();
997
- } catch {
998
- }
999
- } : rest.onClick;
1000
- const passwordText = useKitLabels("passwordReveal", DEFAULT_PASSWORD_REVEAL_LABELS, passwordLabels);
1001
- const revealToggle = isPassword ? /* @__PURE__ */ jsx(
1002
- "button",
1003
- {
1004
- type: "button",
1005
- onClick: () => setRevealed((v) => !v),
1006
- disabled: rest.disabled,
1007
- "aria-label": revealed ? passwordText.hide : passwordText.show,
1008
- "aria-pressed": revealed,
1009
- className: cn(
1010
- "absolute inset-y-0 end-0 flex items-center rounded-e-md px-2.5 text-[var(--text-placeholder)] transition-colors hover:text-[var(--text-secondary)] focus:outline-none disabled:cursor-default disabled:opacity-50",
1011
- FOCUS_RING
1012
- ),
1013
- children: revealed ? /* @__PURE__ */ jsx(EyeOff, { className: "size-4" }) : /* @__PURE__ */ jsx(Eye, { className: "size-4" })
1014
- }
1015
- ) : null;
1016
- if (label === void 0) {
1017
- const endHint = hintParts.labelHint;
1018
- const ownClass = endHint === void 0 ? className : void 0;
1019
- if (!isPassword) {
1020
- return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsx(EndHintRow, { hint: endHint, className, children: /* @__PURE__ */ jsx(
1021
- "input",
1022
- {
1023
- ref,
1024
- id,
1025
- type,
1026
- placeholder,
1027
- ...rest,
1028
- "aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
1029
- "aria-describedby": describedBy,
1030
- onClick: handleClick,
1031
- onChange,
1032
- className: cn(FIELD_BASE, ownClass, inputClassName, isInvalid && FIELD_INVALID)
1033
- }
1034
- ) }) });
1035
- }
1036
- return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsx(EndHintRow, { hint: endHint, className, children: /* @__PURE__ */ jsxs("div", { className: cn("relative", ownClass), children: [
1037
- /* @__PURE__ */ jsx(
1038
- "input",
1039
- {
1040
- ref,
1041
- id,
1042
- type: effectiveType,
1043
- placeholder,
1044
- ...rest,
1045
- "aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
1046
- "aria-describedby": describedBy,
1047
- onChange,
1048
- className: cn(FIELD_BASE, "pe-9", inputClassName, isInvalid && FIELD_INVALID)
1049
- }
1050
- ),
1051
- revealToggle
1052
- ] }) }) });
1053
- }
1054
- const ownPlaceholder = hasPlaceholderText(placeholder);
1055
- return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsxs(
1056
- FloatingField,
1057
- {
1058
- className,
1059
- htmlFor: fieldId,
1060
- label,
1061
- srOnlyLabel: asDisplay,
1062
- hint: hintParts.labelHint,
1063
- children: [
1064
- /* @__PURE__ */ jsx(
1065
- "input",
1066
- {
1067
- ref,
1068
- id: fieldId,
1069
- type: effectiveType,
1070
- placeholder: asDisplay ? placeholder ?? (typeof label === "string" ? label : " ") : ownPlaceholder ? placeholder : " ",
1071
- ...rest,
1072
- "aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
1073
- "aria-describedby": describedBy,
1074
- onClick: handleClick,
1075
- onChange,
1076
- className: cn(
1077
- asDisplay ? cn(FIELD_DISPLAY, "text-xl font-semibold leading-snug") : cn(FLOATING_INPUT_CLASS, ownPlaceholder && FLOATING_PLACEHOLDER_ON_FOCUS),
1078
- isPassword && "pe-9",
1079
- inputClassName,
1080
- isInvalid && FIELD_INVALID
1081
- )
1082
- }
1083
- ),
1084
- revealToggle
1085
- ]
1086
- }
1087
- ) });
1088
- });
1089
- Input.displayName = "Input";
1090
- const SELECT_SM = "h-7 py-0 ps-2 pe-7 text-xs";
1091
- const LOCKED_SELECT_KEYS = /* @__PURE__ */ new Set(["Tab", "Escape", "Shift"]);
1092
- const FIELD_LOCKED = "cursor-not-allowed bg-[var(--bg-surface-2)] text-[var(--text-muted)]";
1093
- const Select = forwardRef(function Select2(props, ref) {
1094
- const {
1095
- className,
1096
- label,
1097
- id,
1098
- children,
1099
- invalid,
1100
- error,
1101
- hint,
1102
- size,
1103
- selectClassName,
1104
- disabledReason,
1105
- commit,
1106
- onMouseDown,
1107
- onKeyDown,
1108
- onChange,
1109
- ...rest
1110
- } = props;
1111
- const reserve = "error" in props || "hint" in props || "showCount" in props;
1112
- const generated = useId();
1113
- const lock = useLockReason(commit, disabledReason);
1114
- const locked = lock.locked;
1115
- const nativeSize = typeof size === "number" ? size : void 0;
1116
- const listBox = nativeSize !== void 0 && nativeSize > 1 || Boolean(rest.multiple);
1117
- const small = size === "sm" && label === void 0;
1118
- const fieldId = id ?? generated;
1119
- const hintId = useId();
1120
- const textHint = typeof hint === "string" && hint !== "" || typeof hint === "number";
1121
- const { isInvalid, describedBy, errorEl } = useFieldError(
1122
- error,
1123
- invalid,
1124
- // The caption goes in BEFORE the error — the standing advice first, the news
1125
- // second, the order useFieldError keeps for a caller's own description. A lock's
1126
- // reason sits between the two.
1127
- mergeDescribedBy(rest["aria-describedby"], textHint && hintId, locked && lock.reasonId),
1128
- rest["aria-invalid"]
1129
- );
1130
- const below = textHint || errorEl !== null ? /* @__PURE__ */ jsxs(Fragment, { children: [
1131
- textHint && /* @__PURE__ */ jsx("p", { id: hintId, className: "mt-1 text-caption leading-tight text-[var(--text-muted)]", children: hint }),
1132
- errorEl
1133
- ] }) : null;
1134
- const chevron = rest.disabled || listBox || locked ? null : /* @__PURE__ */ jsx(FieldChevron, { className: small ? "end-1.5 size-3.5" : void 0 });
1135
- const dress = listBox ? "overflow-y-auto [&_option]:py-1" : "appearance-none pe-9";
1136
- const interaction = locked ? {
1137
- disabled: void 0,
1138
- "aria-disabled": true,
1139
- onMouseDown: (e) => e.preventDefault(),
1140
- onKeyDown: (e) => {
1141
- if (!LOCKED_SELECT_KEYS.has(e.key) && !e.ctrlKey && !e.metaKey) e.preventDefault();
1142
- },
1143
- onChange: () => {
1144
- }
1145
- } : { onMouseDown, onKeyDown, onChange };
1146
- const boxClass = locked ? void 0 : className;
1147
- const withReason = (box) => locked ? /* @__PURE__ */ jsx(LockedReason, { lock, className: cn("block", className), children: box }) : box;
1148
- if (label === void 0) {
1149
- const select = /* @__PURE__ */ jsx(
1150
- "select",
1151
- {
1152
- ref,
1153
- id,
1154
- size: nativeSize,
1155
- ...rest,
1156
- ...interaction,
1157
- "aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
1158
- "aria-describedby": describedBy,
1159
- className: cn(
1160
- FIELD_BASE,
1161
- dress,
1162
- listBox && "py-0",
1163
- small && SELECT_SM,
1164
- locked && FIELD_LOCKED,
1165
- selectClassName,
1166
- isInvalid && FIELD_INVALID
1167
- ),
1168
- children
1169
- }
1170
- );
1171
- if (hasContent(hint) && !textHint) {
1172
- return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: withReason(
1173
- /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1.5", boxClass), children: [
1174
- /* @__PURE__ */ jsxs("div", { className: "relative min-w-0 flex-1", children: [
1175
- select,
1176
- chevron
1177
- ] }),
1178
- /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center", children: hint })
1179
- ] })
1180
- ) });
1181
- }
1182
- return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: withReason(
1183
- /* @__PURE__ */ jsxs("div", { className: cn("relative", boxClass), children: [
1184
- select,
1185
- chevron
1186
- ] })
1187
- ) });
1188
- }
1189
- return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: withReason(
1190
- /* @__PURE__ */ jsxs(
1191
- FloatingField,
1192
- {
1193
- className: boxClass,
1194
- htmlFor: fieldId,
1195
- label,
1196
- staticLabel: true,
1197
- hint: textHint ? void 0 : hint,
1198
- children: [
1199
- /* @__PURE__ */ jsx(
1200
- "select",
1201
- {
1202
- ref,
1203
- id: fieldId,
1204
- size: nativeSize,
1205
- ...rest,
1206
- ...interaction,
1207
- "aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
1208
- "aria-describedby": describedBy,
1209
- className: cn(
1210
- FIELD_BASE,
1211
- // The floated label takes the top strip of a list box too, so its first
1212
- // row starts under the label rather than behind it. No bottom padding — see
1213
- // `dress`.
1214
- // At Large the label stands above the field (§10.17): no strip.
1215
- listBox ? "pt-5 pb-0 large:pt-2" : FIELD_FLOATING_PAD,
1216
- "peer",
1217
- dress,
1218
- locked && FIELD_LOCKED,
1219
- selectClassName,
1220
- isInvalid && FIELD_INVALID
1221
- ),
1222
- children
1223
- }
1224
- ),
1225
- chevron
1226
- ]
1227
- }
1228
- )
1229
- ) });
1230
- });
1231
- Select.displayName = "Select";
1232
- const TEXTAREA_LABEL_EDGE = cn(
1233
- "after:pointer-events-none after:absolute after:inset-x-0 after:top-full after:h-[var(--label-strip-edge,0px)] after:content-['']",
1234
- "after:bg-inherit after:[mask-image:linear-gradient(#000_var(--label-strip-edge-solid,0px),transparent)]"
1235
- );
1236
- const LABEL_EDGE_SOFT_PX = 3;
1237
- function labelEdge(scrollTop, lineHeight) {
1238
- if (!(scrollTop > 0)) return { height: 0, solid: 0 };
1239
- if (!(lineHeight > 0)) return { height: Math.min(scrollTop, LABEL_EDGE_SOFT_PX), solid: 0 };
1240
- const gone = scrollTop % lineHeight;
1241
- const left = gone === 0 ? 0 : lineHeight - gone;
1242
- if (left > 0 && left <= lineHeight / 2) return { height: left, solid: left };
1243
- return { height: Math.min(gone, LABEL_EDGE_SOFT_PX), solid: 0 };
1244
- }
1245
- const TEXTAREA_LABEL_STRIP = cn(
1246
- "pointer-events-none absolute inset-x-px top-px hidden h-4 rounded-t-[calc(0.375rem-1px)] bg-[var(--bg-surface)]",
1247
- // Never at Large (0.33, §10.17): the label stands above the field, so there is no
1248
- // strip to keep scrolled text out of, and a layer here would hide the first line.
1249
- "not-large:peer-focus:block not-large:peer-[:not(:placeholder-shown)]:block",
1250
- "peer-disabled:bg-[var(--bg-surface-2)] peer-[[readonly]]:bg-[var(--bg-surface-2)]",
1251
- TEXTAREA_LABEL_EDGE
1252
- );
1253
- function TextareaLabelStrip() {
1254
- const ref = useRef(null);
1255
- useLayoutEffect(() => {
1256
- const strip = ref.current;
1257
- const field = strip?.previousElementSibling;
1258
- if (!strip || !(field instanceof HTMLTextAreaElement)) return;
1259
- const fit = () => {
1260
- if (field.offsetWidth === 0) return;
1261
- const style = getComputedStyle(field);
1262
- const borderLeft = parseFloat(style.borderLeftWidth) || 0;
1263
- const borderRight = parseFloat(style.borderRightWidth) || 0;
1264
- const gutter = field.offsetWidth - field.clientWidth - borderLeft - borderRight;
1265
- const bar = gutter > 1.5;
1266
- const onLeft = field.clientLeft - borderLeft > 1.5;
1267
- const rtl = style.direction === "rtl";
1268
- const atEnd = onLeft === rtl;
1269
- const border = (end) => end === rtl ? borderLeft : borderRight;
1270
- strip.style.insetInlineEnd = bar && atEnd ? `${border(true) + gutter}px` : "";
1271
- strip.style.insetInlineStart = bar && !atEnd ? `${border(false) + gutter}px` : "";
1272
- strip.style.borderStartEndRadius = bar && atEnd ? "0" : "";
1273
- strip.style.borderStartStartRadius = bar && !atEnd ? "0" : "";
1274
- };
1275
- const follow = () => {
1276
- const edge = labelEdge(field.scrollTop, parseFloat(getComputedStyle(field).lineHeight));
1277
- if (edge.height > 0) {
1278
- strip.style.setProperty("--label-strip-edge", `${edge.height}px`);
1279
- strip.style.setProperty("--label-strip-edge-solid", `${edge.solid}px`);
1280
- } else {
1281
- strip.style.removeProperty("--label-strip-edge");
1282
- strip.style.removeProperty("--label-strip-edge-solid");
1283
- }
1284
- };
1285
- fit();
1286
- follow();
1287
- field.addEventListener("scroll", follow, { passive: true });
1288
- if (typeof ResizeObserver === "undefined") return () => field.removeEventListener("scroll", follow);
1289
- const observer = new ResizeObserver(() => {
1290
- fit();
1291
- follow();
1292
- });
1293
- observer.observe(field);
1294
- return () => {
1295
- field.removeEventListener("scroll", follow);
1296
- observer.disconnect();
1297
- };
1298
- }, []);
1299
- return /* @__PURE__ */ jsx("span", { ref, "aria-hidden": true, "data-slot": "label-strip", className: TEXTAREA_LABEL_STRIP });
1300
- }
1301
- const Textarea = forwardRef(function Textarea2(props, ref) {
1302
- const { className, label, id, placeholder, invalid, error, hint, showCount, countLabels, ...rest } = props;
1303
- const reserve = "error" in props || "hint" in props || "showCount" in props;
1304
- const generated = useId();
1305
- const fieldId = id ?? generated;
1306
- const countId = useId();
1307
- const hintParts = useFieldHint(hint, rest["aria-describedby"]);
1308
- const maxLength = rest.maxLength;
1309
- const counting = Boolean(showCount) && typeof maxLength === "number" && maxLength > 0;
1310
- const length = useTypedLength(rest.value, rest.defaultValue);
1311
- const countText = useCharacterCountLabels(countLabels);
1312
- const { isInvalid, describedBy, errorEl } = useFieldError(
1313
- error,
1314
- invalid,
1315
- mergeDescribedBy(hintParts.describedBy, counting && countId),
1316
- rest["aria-invalid"]
1317
- );
1318
- const counter = counting ? /* @__PURE__ */ jsx(
1319
- CharacterCount,
1320
- {
1321
- id: countId,
1322
- used: length.used,
1323
- max: maxLength,
1324
- labels: countText,
1325
- caption: /* @__PURE__ */ jsx(FieldCaption, { parts: hintParts, className: "mt-0" })
1326
- }
1327
- ) : null;
1328
- const below = fieldBelow(hintParts, counter, errorEl);
1329
- const onChange = counting ? (e) => {
1330
- length.track(e.target.value);
1331
- rest.onChange?.(e);
1332
- } : rest.onChange;
1333
- if (label === void 0) {
1334
- const endHint = hintParts.labelHint;
1335
- return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsx(EndHintRow, { hint: endHint, className, children: /* @__PURE__ */ jsx(
1336
- "textarea",
1337
- {
1338
- ref,
1339
- id,
1340
- placeholder,
1341
- ...rest,
1342
- "aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
1343
- "aria-describedby": describedBy,
1344
- onChange,
1345
- className: cn(FIELD_BASE, endHint === void 0 && className, isInvalid && FIELD_INVALID)
1346
- }
1347
- ) }) });
1348
- }
1349
- const ownPlaceholder = hasPlaceholderText(placeholder);
1350
- return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsxs(FloatingField, { className, htmlFor: fieldId, label, hint: hintParts.labelHint, children: [
1351
- /* @__PURE__ */ jsx(
1352
- "textarea",
1353
- {
1354
- ref,
1355
- id: fieldId,
1356
- placeholder: ownPlaceholder ? placeholder : " ",
1357
- ...rest,
1358
- "aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
1359
- "aria-describedby": describedBy,
1360
- onChange,
1361
- className: cn(
1362
- FLOATING_INPUT_CLASS,
1363
- ownPlaceholder && FLOATING_PLACEHOLDER_ON_FOCUS,
1364
- isInvalid && FIELD_INVALID
1365
- )
1366
- }
1367
- ),
1368
- /* @__PURE__ */ jsx(TextareaLabelStrip, {})
1369
- ] }) });
1370
- });
1371
- Textarea.displayName = "Textarea";
1372
- const CARD_TONES = {
1373
- warning: {
1374
- border: "border-[var(--warning-border)]",
1375
- fill: "bg-[var(--warning-bg)]",
1376
- title: "[&_[data-slot=card-title]]:text-[var(--warning)]"
1377
- },
1378
- danger: {
1379
- border: "border-[var(--danger-border)]",
1380
- fill: "bg-[var(--danger-bg)]",
1381
- title: "[&_[data-slot=card-title]]:text-[var(--danger)]"
1382
- },
1383
- info: {
1384
- border: "border-[var(--info-border)]",
1385
- fill: "bg-[var(--info-bg)]",
1386
- title: "[&_[data-slot=card-title]]:text-[var(--info)]"
1387
- },
1388
- success: {
1389
- border: "border-[var(--success-border)]",
1390
- fill: "bg-[var(--success-bg)]",
1391
- title: "[&_[data-slot=card-title]]:text-[var(--success)]"
1392
- }
1393
- };
1394
- const CARD_PADDING = {
1395
- none: "p-0",
1396
- sm: "p-3",
1397
- md: "p-4"
1398
- };
1399
- const CARD_PADDING_STRONG = {
1400
- none: "p-0",
1401
- sm: "p-[calc(0.75rem-1px)]",
1402
- md: "p-[calc(1rem-1px)]"
1403
- };
1404
- const CARD_TONE_WASH = {
1405
- warning: "bg-[image:linear-gradient(var(--warning-bg),var(--warning-bg))]",
1406
- danger: "bg-[image:linear-gradient(var(--danger-bg),var(--danger-bg))]",
1407
- info: "bg-[image:linear-gradient(var(--info-bg),var(--info-bg))]",
1408
- success: "bg-[image:linear-gradient(var(--success-bg),var(--success-bg))]"
1409
- };
1410
- const CARD_TONES_STRONG = {
1411
- warning: "border-2 border-warning-strong",
1412
- danger: "border-2 border-[var(--danger-border-strong)]",
1413
- info: "border-2 border-[var(--info)]",
1414
- success: "border-2 border-[var(--success)]"
1415
- };
1416
- const CardPaddedContext = createContext(false);
1417
- const CardDensityContext = createContext("comfortable");
1418
- function Card({
1419
- className,
1420
- children,
1421
- flush,
1422
- variant = "default",
1423
- tone,
1424
- toneStrength = "soft",
1425
- toneFill = false,
1426
- density = "comfortable",
1427
- padding,
1428
- ...rest
1429
- }) {
1430
- const toned = tone ? CARD_TONES[tone] : void 0;
1431
- const bordered = variant !== "inset";
1432
- const strong = toned !== void 0 && bordered && toneStrength === "strong";
1433
- const ownPadding = padding ?? (variant === "inset" ? "sm" : variant === "outline" ? "md" : void 0);
1434
- return /* @__PURE__ */ jsx(
1435
- "div",
1436
- {
1437
- "data-tone": tone,
1438
- "data-tone-strength": strong ? "strong" : void 0,
1439
- "data-density": density === "compact" ? "compact" : void 0,
1440
- ...rest,
1441
- className: cn(
1442
- variant === "inset" ? "rounded-md bg-[var(--bg-surface-2)] p-3" : variant === "outline" ? (
1443
- // No shadow and no `flush`: it sits on a surface that already has both.
1444
- "rounded-lg border border-[var(--border)] bg-[var(--bg-surface)] p-4"
1445
- ) : cn(
1446
- // Surface + border are theme tokens so the palette switcher (feedback
1447
- // #307) can re-skin every card; a caller's own bg-*/border-* override
1448
- // still wins via tailwind-merge.
1449
- "bg-[var(--bg-surface)]",
1450
- flush ? "border-y border-[var(--border)] md:rounded-lg md:border md:shadow-sm" : "rounded-lg border border-[var(--border)] shadow-sm"
1451
- ),
1452
- toned && (bordered ? toned.border : toned.fill),
1453
- strong && tone && CARD_TONES_STRONG[tone],
1454
- toneFill && bordered && tone && CARD_TONE_WASH[tone],
1455
- toned?.title,
1456
- ownPadding && (strong ? CARD_PADDING_STRONG : CARD_PADDING)[ownPadding],
1457
- className
1458
- ),
1459
- children: /* @__PURE__ */ jsx(CardPaddedContext.Provider, { value: ownPadding !== void 0, children: /* @__PURE__ */ jsx(CardDensityContext.Provider, { value: density, children }) })
1460
- }
1461
- );
1462
- }
1463
- const CARD_STACK_ACTION = "max-sm:grid-cols-1 max-sm:[&>[data-slot=card-action]]:col-start-1 max-sm:[&>[data-slot=card-action]]:row-span-1 max-sm:[&>[data-slot=card-action]]:row-start-auto max-sm:[&>[data-slot=card-action]]:justify-self-start";
1464
- const CARD_STACK_ACTION_AT_LARGE = "large:max-sm:grid-cols-1 large:max-sm:[&>[data-slot=card-action]]:col-start-1 large:max-sm:[&>[data-slot=card-action]]:row-span-1 large:max-sm:[&>[data-slot=card-action]]:row-start-auto large:max-sm:[&>[data-slot=card-action]]:justify-self-start";
1465
- function CardHeader({ className, stackAction, ...props }) {
1466
- const padded = useContext(CardPaddedContext);
1467
- const compact = useContext(CardDensityContext) === "compact";
1468
- return /* @__PURE__ */ jsx(
1469
- "div",
1470
- {
1471
- "data-slot": "card-header",
1472
- className: cn(
1473
- // Grid (not flex) so CardAction can occupy a top-right column; with no
1474
- // action it collapses to one column and title/description stack.
1475
- //
1476
- // The two-column switch sets a VARIABLE, not `grid-template-columns`. As
1477
- // `has-data-[slot=card-action]:grid-cols-[1fr_auto]` it was two classes of
1478
- // specificity (the class plus the attribute inside `:has()`), and a caller's
1479
- // `max-sm:grid-cols-1` — one class inside a media query — lost to it at every
1480
- // width, so the action could never be stacked on a phone from outside. Now the
1481
- // property itself is set by a plain one-class utility that any `grid-cols-*`
1482
- // variant of the caller's outranks by coming later in the sheet; the `:has()`
1483
- // rule only picks the value. The base `1fr` resets the variable so a header
1484
- // never inherits an ancestor header's two columns.
1485
- "grid auto-rows-min items-start gap-1.5 [--card-header-cols:1fr] has-data-[slot=card-action]:[--card-header-cols:1fr_auto] grid-cols-[var(--card-header-cols,1fr)]",
1486
- padded ? "px-0 pt-0" : "px-6 pt-6",
1487
- compact && "gap-0.5",
1488
- stackAction === true && CARD_STACK_ACTION,
1489
- stackAction === void 0 && CARD_STACK_ACTION_AT_LARGE,
1490
- className
1491
- ),
1492
- ...props
1493
- }
1494
- );
1495
- }
1496
- function CardTitle({ className, as: Tag = "div", ...props }) {
1497
- const compact = useContext(CardDensityContext) === "compact";
1498
- return /* @__PURE__ */ jsx(
1499
- Tag,
1500
- {
1501
- "data-slot": "card-title",
1502
- className: cn(compact ? "text-sm font-medium leading-snug" : "font-semibold leading-none", className),
1503
- ...props
1504
- }
1505
- );
1506
- }
1507
- function CardDescription({ className, ...props }) {
1508
- const compact = useContext(CardDensityContext) === "compact";
1509
- return /* @__PURE__ */ jsx(
1510
- "div",
1511
- {
1512
- "data-slot": "card-description",
1513
- className: cn(compact ? "text-xs" : "text-sm", "text-[var(--text-muted)]", className),
1514
- ...props
1515
- }
1516
- );
1517
- }
1518
- function CardAction({ className, ...props }) {
1519
- return /* @__PURE__ */ jsx(
1520
- "div",
1521
- {
1522
- "data-slot": "card-action",
1523
- className: cn("col-start-2 row-start-1 row-span-2 self-start justify-self-end", className),
1524
- ...props
1525
- }
1526
- );
1527
- }
1528
- function CardContent({ className, ...props }) {
1529
- const padded = useContext(CardPaddedContext);
1530
- return /* @__PURE__ */ jsx("div", { "data-slot": "card-content", className: cn(!padded && "px-6 last:pb-6", className), ...props });
1531
- }
1532
- function CardFooter({ className, ...props }) {
1533
- const padded = useContext(CardPaddedContext);
1534
- return /* @__PURE__ */ jsx(
1535
- "div",
1536
- {
1537
- "data-slot": "card-footer",
1538
- className: cn("flex items-center", !padded && "px-6 pb-6", className),
1539
- ...props
1540
- }
1541
- );
1542
- }
1543
- function Spinner({ className, label, showLabel, labelPosition = "end", ...rest }) {
1544
- const common = useKitLabels("common", DEFAULT_COMMON_LABELS, {
1545
- loading: label ?? void 0
1546
- });
1547
- const ring = cn(
1548
- "relative inline-block h-5 w-5 animate-spin rounded-full border-2 border-[var(--border)] border-t-[var(--text-primary)]",
1549
- className
1550
- );
1551
- if (label === null) return /* @__PURE__ */ jsx("span", { "aria-hidden": true, ...rest, className: ring });
1552
- if (showLabel) {
1553
- return /* @__PURE__ */ jsxs(
1554
- "span",
1555
- {
1556
- role: "status",
1557
- ...rest,
1558
- className: cn(
1559
- "inline-flex items-center text-sm text-[var(--text-secondary)]",
1560
- labelPosition === "below" ? "flex-col gap-2 text-center" : "gap-2"
1561
- ),
1562
- children: [
1563
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: ring }),
1564
- /* @__PURE__ */ jsx("span", { children: common.loading })
1565
- ]
1566
- }
1567
- );
1568
- }
1569
- return /* @__PURE__ */ jsx("span", { role: "status", ...rest, className: ring, children: /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
1570
- common.loading,
1571
- " "
1572
- ] }) });
1573
- }
1574
- const EMPTY_STATE_TONE = {
1575
- danger: "text-[var(--danger)]",
1576
- success: "text-[var(--success)]"
1577
- };
1578
- function EmptyState({
1579
- title,
1580
- hint,
1581
- icon,
1582
- action,
1583
- headingAs,
1584
- variant = "box",
1585
- tone,
1586
- size = "md",
1587
- className,
1588
- ...rest
1589
- }) {
1590
- const Title = headingAs ?? "div";
1591
- const toneClass = tone ? EMPTY_STATE_TONE[tone] : void 0;
1592
- const hasHint = hint != null && hint !== false && hint !== "";
1593
- if (variant === "inline") {
1594
- const sm = size === "sm";
1595
- return /* @__PURE__ */ jsxs(
1596
- "div",
1597
- {
1598
- ...rest,
1599
- className: cn(
1600
- "flex flex-wrap items-center text-[var(--text-muted)]",
1601
- sm ? "justify-start gap-x-1.5 gap-y-0.5 py-1 text-start text-xs" : "justify-center gap-x-2 gap-y-1 py-4 text-center text-sm",
1602
- className
1603
- ),
1604
- children: [
1605
- icon != null && /* @__PURE__ */ jsx(
1606
- "span",
1607
- {
1608
- "aria-hidden": true,
1609
- className: cn("flex text-[var(--text-placeholder)]", sm ? "[&_svg]:size-3.5" : "[&_svg]:size-4", toneClass),
1610
- children: icon
1611
- }
1612
- ),
1613
- /* @__PURE__ */ jsx(Title, { className: cn(sm ? "text-xs" : "text-sm", toneClass), children: title }),
1614
- hasHint && /* @__PURE__ */ jsx("span", { className: "text-xs", children: hint }),
1615
- action != null && /* @__PURE__ */ jsx("span", { className: "flex flex-wrap items-center gap-2", children: action })
1616
- ]
1617
- }
1618
- );
1619
- }
1620
- return /* @__PURE__ */ jsxs(
1621
- "div",
1622
- {
1623
- ...rest,
1624
- className: cn(
1625
- "flex flex-col items-center justify-center rounded-lg border border-dashed border-[var(--border-strong)] bg-[var(--bg-surface-2)] px-4 py-10 text-center text-sm text-[var(--text-muted)]",
1626
- className
1627
- ),
1628
- children: [
1629
- icon != null && /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: cn("mb-3 text-[var(--text-placeholder)] [&_svg]:size-8", toneClass), children: icon }),
1630
- /* @__PURE__ */ jsx(Title, { className: cn("text-sm font-medium text-[var(--text-secondary)]", toneClass), children: title }),
1631
- hasHint && /* @__PURE__ */ jsx("div", { className: "mt-1 text-xs", children: hint }),
1632
- action != null && /* @__PURE__ */ jsx("div", { className: "mt-4 flex flex-wrap items-center justify-center gap-2", children: action })
1633
- ]
1634
- }
1635
- );
1636
- }
1637
- const DEFAULT_TABS_LABELS = {
1638
- add: "Add tab",
1639
- remove: (tab) => `Remove ${tab}`
1640
- };
1641
- const TABLIST_CLASSES = "flex gap-1 overflow-x-auto overflow-y-hidden border-b border-[var(--border)]";
1642
- const TABLIST_VERTICAL_CLASSES = "flex flex-col gap-0.5";
1643
- const TAB_VERTICAL_CLASSES = FOCUS_RING_WIDTH + " flex w-full items-center rounded-md px-3 py-2 text-start text-sm font-medium transition-colors focus:outline-none focus-visible:ring-[var(--border-strong)]";
1644
- const TAB_VERTICAL_ACTIVE_CLASSES = "bg-[var(--bg-active)] text-[var(--text-primary)]";
1645
- const TAB_VERTICAL_INACTIVE_CLASSES = "text-[var(--text-muted)] hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)]";
1646
- const TABLIST_WRAP_CLASSES = "flex flex-wrap gap-1.5 md:flex-nowrap md:gap-1 md:overflow-x-auto md:overflow-y-hidden md:border-b md:border-[var(--border)]";
1647
- const TAB_CLASSES = FOCUS_RING_WIDTH + " max-w-full whitespace-nowrap px-3 py-2 text-sm font-medium transition-colors border-b-2 -mb-px focus:outline-none focus-visible:ring-[var(--border-strong)]";
1648
- const TAB_ACTIVE_CLASSES = "border-[var(--text-primary)] text-[var(--text-primary)]";
1649
- const TAB_INACTIVE_CLASSES = "border-transparent text-[var(--text-muted)] hover:text-[var(--text-secondary)] hover:border-[var(--border-strong)]";
1650
- const TAB_WRAP_CLASSES = FOCUS_RING_WIDTH + " max-w-full whitespace-nowrap rounded-md px-2.5 py-2 text-xs font-medium transition-colors focus:outline-none focus-visible:ring-[var(--border-strong)] md:rounded-none md:border-b-2 md:-mb-px md:bg-transparent md:px-3 md:py-2 md:text-sm";
1651
- const TAB_WRAP_ACTIVE_CLASSES = "bg-[var(--brand)] text-[var(--brand-contrast)] md:border-[var(--text-primary)] md:text-[var(--text-primary)]";
1652
- const TAB_WRAP_INACTIVE_CLASSES = "bg-[var(--bg-surface)] text-[var(--text-primary)] md:border-transparent md:text-[var(--text-muted)] md:hover:border-[var(--border-strong)] md:hover:text-[var(--text-secondary)]";
1653
- const TAB_REMOVABLE_CLASSES = "pe-8 md:pe-8";
1654
- const TAB_EMPTY_CLASSES = "-mx-1.5 rounded border border-dashed border-[var(--border-strong)] px-1.5";
1655
- const TAB_ADD_CLASSES = FOCUS_RING_WIDTH + " inline-flex items-center gap-1 whitespace-nowrap rounded-md px-3 py-2 text-sm font-medium text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)] focus:outline-none focus-visible:ring-[var(--border-strong)] disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:size-4";
1656
- const TAB_ADD_WRAP_CLASSES = "px-2.5 text-xs md:px-3 md:text-sm";
1657
- const TAB_ADD_PHONE_CLASSES = "relative max-md:px-2";
1658
- function Tabs({
1659
- tabs,
1660
- active,
1661
- onChange,
1662
- className,
1663
- wrap = false,
1664
- label,
1665
- panelId,
1666
- onRemove,
1667
- removeOn = "every",
1668
- onAdd,
1669
- addLabel,
1670
- labels,
1671
- busy = false,
1672
- orientation = "horizontal",
1673
- "aria-label": ariaLabel,
1674
- ...rest
1675
- }) {
1676
- const text = useKitLabels("tabs", DEFAULT_TABS_LABELS, labels);
1677
- const phone = usePhoneLayout();
1678
- const vertical = orientation === "vertical" && !phone;
1679
- const stripRef = useRef(null);
1680
- const fade = useStripFade(stripRef);
1681
- useLayoutEffect(() => {
1682
- const strip = stripRef.current;
1683
- const tab = strip?.querySelector('[role="tab"][aria-selected="true"]');
1684
- if (strip && tab) scrollIntoStrip(strip, tab);
1685
- }, [active]);
1686
- const isRemovable = (tab) => onRemove !== void 0 && tab.removable !== false;
1687
- const deletesOnKey = (tab) => isRemovable(tab) && (removeOn === "every" || tab.id === active);
1688
- const nameOf = (tab) => tab.name ?? (typeof tab.label === "string" ? tab.label : tab.id);
1689
- const pendingFocus = useRef(null);
1690
- const requestRemove = (id) => {
1691
- const index = tabs.findIndex((t) => t.id === id);
1692
- pendingFocus.current = {
1693
- removed: id,
1694
- wasActive: id === active,
1695
- neighbour: (tabs[index + 1] ?? tabs[index - 1])?.id
1696
- };
1697
- onRemove?.(id);
1698
- };
1699
- useLayoutEffect(() => {
1700
- const pending = pendingFocus.current;
1701
- if (!pending || tabs.some((t) => t.id === pending.removed)) return;
1702
- pendingFocus.current = null;
1703
- const strip = stripRef.current;
1704
- if (!strip) return;
1705
- const focused = document.activeElement;
1706
- if (focused && focused !== document.body && !strip.contains(focused)) return;
1707
- const target = !pending.wasActive && tabs.some((t) => t.id === pending.neighbour) ? pending.neighbour : active;
1708
- const index = tabs.findIndex((t) => t.id === target);
1709
- strip.querySelectorAll('[role="tab"]')[index]?.focus();
1710
- }, [tabs, active]);
1711
- const onTabKeyDown = (e, tab) => {
1712
- if (e.key === "Delete" && deletesOnKey(tab)) {
1713
- e.preventDefault();
1714
- if (!busy) requestRemove(tab.id);
1715
- return;
1716
- }
1717
- const step = vertical ? e.key === "ArrowDown" ? 1 : e.key === "ArrowUp" ? -1 : 0 : horizontalStep(e.key, e.currentTarget);
1718
- if (step === 0 && e.key !== "Home" && e.key !== "End") return;
1719
- const strip = e.currentTarget.closest('[role="tablist"]');
1720
- if (!strip) return;
1721
- const items = Array.from(strip.querySelectorAll('[role="tab"]'));
1722
- const from = items.indexOf(e.currentTarget);
1723
- if (from === -1) return;
1724
- e.preventDefault();
1725
- const to = e.key === "Home" ? 0 : e.key === "End" ? items.length - 1 : (from + step + items.length) % items.length;
1726
- items[to]?.focus();
1727
- };
1728
- const tablist = /* @__PURE__ */ jsx(
1729
- "div",
1730
- {
1731
- ...rest,
1732
- ref: stripRef,
1733
- role: "tablist",
1734
- "aria-label": ariaLabel ?? label,
1735
- "aria-orientation": vertical ? "vertical" : void 0,
1736
- style: fade.mask ? { ...rest.style, maskImage: fade.mask, WebkitMaskImage: fade.mask } : rest.style,
1737
- "data-overflow": fade.overflow,
1738
- className: cn(
1739
- vertical ? TABLIST_VERTICAL_CLASSES : wrap ? TABLIST_WRAP_CLASSES : TABLIST_CLASSES,
1740
- onAdd ? "min-w-0" : className
1741
- ),
1742
- children: tabs.map((tab) => {
1743
- const isActive = tab.id === active;
1744
- const removable = isRemovable(tab);
1745
- const shared = {
1746
- role: "tab",
1747
- "aria-selected": isActive,
1748
- // Roving tabindex: the whole strip is ONE stop in the page's tab order, and
1749
- // it is the open tab. Ten report tabs otherwise cost ten Tab presses to step
1750
- // over on the way to the table below them (live #262's strip is the extreme
1751
- // case, but every strip in the app paid it).
1752
- //
1753
- // The stop follows the SELECTION, not the focus. Arrowing is a look around —
1754
- // activation here is manual, because a tab can be a real route — so re-
1755
- // pointing the stop at a report the user only arrowed past would hand the
1756
- // strip back on the next visit in a state they never chose. The cost is that
1757
- // Tab out and back returns to the open tab rather than to the last one
1758
- // looked at; the ARIA pattern allows either, and this one needs no second
1759
- // piece of state shadowing `active`.
1760
- tabIndex: isActive ? 0 : -1,
1761
- // Only the open tab: see `panelId`.
1762
- "aria-controls": isActive ? panelId : void 0,
1763
- id: isActive && panelId ? `${panelId}-tab` : void 0,
1764
- "aria-keyshortcuts": deletesOnKey(tab) ? "Delete" : void 0,
1765
- onKeyDown: (e) => onTabKeyDown(e, tab),
1766
- className: vertical ? cn(
1767
- TAB_VERTICAL_CLASSES,
1768
- isActive ? TAB_VERTICAL_ACTIVE_CLASSES : TAB_VERTICAL_INACTIVE_CLASSES,
1769
- removable && "pe-8"
1770
- ) : cn(
1771
- wrap ? TAB_WRAP_CLASSES : TAB_CLASSES,
1772
- wrap ? isActive ? TAB_WRAP_ACTIVE_CLASSES : TAB_WRAP_INACTIVE_CLASSES : isActive ? TAB_ACTIVE_CLASSES : TAB_INACTIVE_CLASSES,
1773
- removable && TAB_REMOVABLE_CLASSES
1774
- )
1775
- };
1776
- const inner = /* @__PURE__ */ jsxs(
1777
- "span",
1778
- {
1779
- className: cn(
1780
- // In a side nav the row is the full width, so the label takes it and a
1781
- // badge lands at the row's end, where a column of counts lines up.
1782
- vertical ? "flex min-w-0 flex-1 items-center gap-1.5" : "inline-flex max-w-full min-w-0 items-center gap-1.5",
1783
- tab.empty && TAB_EMPTY_CLASSES
1784
- ),
1785
- children: [
1786
- tab.icon != null && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "inline-flex shrink-0 items-center gap-0.5", children: tab.icon }),
1787
- tab.detail != null ? (
1788
- // `min-w-0` + `truncate` on each line: capped by the tab's `max-w-full`, a
1789
- // long detail ends in an ellipsis. The whole text stays the tab's name.
1790
- /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col items-start text-start", children: [
1791
- /* @__PURE__ */ jsx("span", { className: "max-w-full truncate", children: tab.label }),
1792
- " ",
1793
- /* @__PURE__ */ jsx(
1794
- "span",
1795
- {
1796
- className: cn(
1797
- "max-w-full truncate text-caption font-normal leading-tight text-[var(--text-muted)]",
1798
- // On a wrapped strip's filled chip (below `md`) the muted grey
1799
- // was dark text on the brand fill — "loop 2" all but vanished
1800
- // under the one label that most needed reading. It takes the
1801
- // chip's own ink instead, as the label and the × already do.
1802
- wrap && isActive && !vertical && "text-[var(--brand-contrast)] md:text-[var(--text-muted)]"
1803
- ),
1804
- children: tab.detail
1805
- }
1806
- )
1807
- ] })
1808
- ) : tab.label,
1809
- tab.badge != null ? vertical ? /* @__PURE__ */ jsx("span", { className: "ms-auto flex shrink-0 items-center", children: tab.badge }) : tab.badge : null
1810
- ]
1811
- }
1812
- );
1813
- const element = tab.href ? /* @__PURE__ */ jsx(
1814
- "a",
1815
- {
1816
- ...shared,
1817
- href: tab.href,
1818
- draggable: false,
1819
- onClick: (e) => {
1820
- if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
1821
- e.preventDefault();
1822
- onChange(tab.id);
1823
- },
1824
- onKeyDown: (e) => {
1825
- onTabKeyDown(e, tab);
1826
- if (e.defaultPrevented || e.key !== " ") return;
1827
- e.preventDefault();
1828
- onChange(tab.id);
1829
- },
1830
- children: inner
1831
- },
1832
- tab.id
1833
- ) : /* @__PURE__ */ jsx("button", { ...shared, onClick: () => onChange(tab.id), children: inner }, tab.id);
1834
- if (!removable) return element;
1835
- return (
1836
- // The × cannot go INSIDE the tab: a button in a button is invalid HTML, and
1837
- // a tab's children are presentational, so a reader would flatten it into the
1838
- // tab's name. It sits beside the tab, over the gutter the tab reserves.
1839
- /* @__PURE__ */ jsxs("div", { className: cn("relative flex max-w-full", !vertical && "shrink-0"), children: [
1840
- element,
1841
- isActive && /* @__PURE__ */ jsx(
1842
- IconButton,
1843
- {
1844
- size: "2xs",
1845
- tone: "danger",
1846
- tabIndex: -1,
1847
- type: "button",
1848
- "aria-label": text.remove(nameOf(tab)),
1849
- disabled: busy,
1850
- onClick: () => requestRemove(tab.id),
1851
- className: cn(
1852
- "absolute inset-y-0 end-1 my-auto",
1853
- // On a wrapped strip's filled chip the quiet grey would vanish into
1854
- // the brand fill below `md`.
1855
- wrap && "text-[var(--brand-contrast)] md:text-[var(--text-placeholder)]"
1856
- ),
1857
- children: /* @__PURE__ */ jsx(X, {})
1858
- }
1859
- )
1860
- ] }, tab.id)
1861
- );
1862
- })
1863
- }
1864
- );
1865
- if (!onAdd) return tablist;
1866
- if (vertical) {
1867
- return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-0.5", className), children: [
1868
- tablist,
1869
- /* @__PURE__ */ jsxs("button", { type: "button", onClick: onAdd, disabled: busy, className: TAB_ADD_CLASSES, children: [
1870
- /* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
1871
- addLabel ?? text.add
1872
- ] })
1873
- ] });
1874
- }
1875
- return /* @__PURE__ */ jsxs(
1876
- "div",
1877
- {
1878
- className: cn(
1879
- wrap ? "flex flex-wrap items-end gap-1.5 md:flex-nowrap md:gap-0" : "flex items-end",
1880
- className
1881
- ),
1882
- children: [
1883
- tablist,
1884
- /* @__PURE__ */ jsx(
1885
- "div",
1886
- {
1887
- className: cn(
1888
- "flex flex-1 items-center",
1889
- wrap ? "md:self-stretch md:border-b md:border-[var(--border)]" : "self-stretch border-b border-[var(--border)]"
1890
- ),
1891
- children: /* @__PURE__ */ jsxs(
1892
- "button",
1893
- {
1894
- type: "button",
1895
- onClick: onAdd,
1896
- disabled: busy,
1897
- className: cn(TAB_ADD_CLASSES, wrap ? TAB_ADD_WRAP_CLASSES : TAB_ADD_PHONE_CLASSES),
1898
- children: [
1899
- /* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
1900
- /* @__PURE__ */ jsx("span", { className: wrap ? void 0 : "max-md:sr-only", children: addLabel ?? text.add })
1901
- ]
1902
- }
1903
- )
1904
- }
1905
- )
1906
- ]
1907
- }
1908
- );
1909
- }
1910
- export {
1911
- Button,
1912
- Card,
1913
- CardAction,
1914
- CardContent,
1915
- CardDescription,
1916
- CardFooter,
1917
- CardHeader,
1918
- CardTitle,
1919
- CompactControls,
1920
- DEFAULT_CHARACTER_COUNT_LABELS,
1921
- DEFAULT_PASSWORD_REVEAL_LABELS,
1922
- DEFAULT_TABS_LABELS,
1923
- DISABLED_REASON_LINE_CLASS,
1924
- DisabledReasonLine2 as DisabledReasonLine,
1925
- EmptyState,
1926
- FIELD_BASE,
1927
- FIELD_DISPLAY,
1928
- FIELD_FLOATING_PAD,
1929
- FIELD_INVALID,
1930
- FIELD_TOUCH_TEXT,
1931
- FIELD_TRIGGER,
1932
- FIELD_WRITABLE_LOOK,
1933
- FLOATING_INPUT_CLASS,
1934
- FLOATING_LABEL_CLASS,
1935
- FLOATING_LABEL_STATIC2 as FLOATING_LABEL_STATIC,
1936
- FOCUS_RING2 as FOCUS_RING,
1937
- FOCUS_RING_WIDTH2 as FOCUS_RING_WIDTH,
1938
- FieldChevron,
1939
- FieldHint,
1940
- FieldLabel,
1941
- FloatingField,
1942
- IconButton,
1943
- Input,
1944
- Label,
1945
- PHONE_QUERY,
1946
- Select,
1947
- Spinner,
1948
- TOUCH_TARGET_LARGE,
1949
- Tabs,
1950
- Textarea,
1951
- buttonClasses,
1952
- resolvePasswordRevealLabels,
1953
- useDisabledReasonLine2 as useDisabledReasonLine
1954
- };
1955
- //# sourceMappingURL=ui.js.map