@eifi1/ui-kit 0.33.1 → 0.35.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 (1559) hide show
  1. package/README.md +512 -306
  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 +12 -110
  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 +12 -110
  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 +64 -111
  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 +6 -108
  222. package/dist/components/calculator.js +8 -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 +2 -205
  238. package/dist/components/chart-zoom.js +2 -330
  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 +69 -0
  250. package/dist/components/chip-input.js +220 -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 +15 -160
  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 +74 -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 +58 -0
  295. package/dist/components/currency-option-list.js +107 -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 +40 -23
  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 +83 -15
  322. package/dist/components/data-table-labels.js +4 -29
  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 +93 -0
  340. package/dist/components/data-table-shared.js +99 -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 +613 -15
  344. package/dist/components/data-table.js +150 -939
  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 +10 -12
  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 +61 -30
  371. package/dist/components/dropdown.js +61 -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 +11 -12
  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 +255 -0
  389. package/dist/components/field-base.js +223 -0
  390. package/dist/components/field-base.js.map +1 -0
  391. package/dist/components/field-parts.d.ts +180 -87
  392. package/dist/components/field-parts.js +52 -33
  393. package/dist/components/field-parts.js.map +1 -1
  394. package/dist/components/field-strip.d.ts +12 -36
  395. package/dist/components/field-strip.js +24 -22
  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 +16 -19
  401. package/dist/components/field-sync.js +4 -14
  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 +12 -18
  437. package/dist/components/hover-menu.js +19 -18
  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 +34 -18
  524. package/dist/components/modal.js +13 -13
  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 +74 -25
  542. package/dist/components/multi-select.js +166 -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 +28 -112
  551. package/dist/components/number-input.js +33 -67
  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 +29 -26
  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 +50 -120
  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 +21 -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 +11 -39
  703. package/dist/components/swipeable-row.js +13 -18
  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 +24 -15
  742. package/dist/components/tooltip.js +24 -14
  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 +35 -25
  752. package/dist/components/translation-review.js +24 -13
  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 +182 -15
  765. package/dist/components/use-table-state.js +53 -8
  766. package/dist/components/use-table-state.js.map +1 -1
  767. package/dist/components/user-avatar.d.ts +10 -23
  768. package/dist/components/user-avatar.js +1 -1
  769. package/dist/components/user-avatar.js.map +1 -1
  770. package/dist/components/wizard-stepper.d.ts +4 -7
  771. package/dist/components/wizard-stepper.js +3 -3
  772. package/dist/components/wizard-stepper.js.map +1 -1
  773. package/dist/components/write-lock-labels.d.ts +2 -0
  774. package/dist/components/write-lock-labels.js +8 -0
  775. package/dist/components/write-lock-labels.js.map +1 -0
  776. package/dist/components/write-lock.d.ts +16 -18
  777. package/dist/components/write-lock.js +4 -8
  778. package/dist/components/write-lock.js.map +1 -1
  779. package/dist/currencies.d.ts +23 -0
  780. package/dist/currencies.js +38 -0
  781. package/dist/currencies.js.map +1 -0
  782. package/dist/data-table.d.ts +10 -18
  783. package/dist/data-table.js.map +1 -1
  784. package/dist/demo/demo-banner.d.ts +15 -13
  785. package/dist/demo/demo-banner.js +5 -19
  786. package/dist/demo/demo-banner.js.map +1 -1
  787. package/dist/demo/demo-countdown.d.ts +7 -9
  788. package/dist/demo/demo-ended.d.ts +10 -13
  789. package/dist/demo/demo-ended.js +4 -4
  790. package/dist/demo/demo-ended.js.map +1 -1
  791. package/dist/demo/demo-labels.d.ts +4 -5
  792. package/dist/demo/demo-labels.js.map +1 -1
  793. package/dist/demo/demo-session.d.ts +3 -5
  794. package/dist/demo/demo-start.d.ts +8 -11
  795. package/dist/demo/demo-start.js +3 -2
  796. package/dist/demo/demo-start.js.map +1 -1
  797. package/dist/eslint/index.d.ts +83 -0
  798. package/dist/eslint/index.js +69 -0
  799. package/dist/eslint/index.js.map +1 -0
  800. package/dist/eslint/role-utilities.d.ts +48 -0
  801. package/dist/eslint/role-utilities.generated.d.ts +2 -0
  802. package/dist/eslint/role-utilities.generated.js +143 -0
  803. package/dist/eslint/role-utilities.generated.js.map +1 -0
  804. package/dist/eslint/role-utilities.js +43 -0
  805. package/dist/eslint/role-utilities.js.map +1 -0
  806. package/dist/feedback/feedback-attachment-labels.d.ts +16 -0
  807. package/dist/feedback/feedback-attachment-labels.js +17 -0
  808. package/dist/feedback/feedback-attachment-labels.js.map +1 -0
  809. package/dist/feedback/feedback-attachment.d.ts +312 -101
  810. package/dist/feedback/feedback-attachment.js +31 -42
  811. package/dist/feedback/feedback-attachment.js.map +1 -1
  812. package/dist/feedback/feedback-capture.d.ts +2 -4
  813. package/dist/feedback/feedback-context-labels.d.ts +2 -0
  814. package/dist/feedback/feedback-context-labels.js +9 -0
  815. package/dist/feedback/feedback-context-labels.js.map +1 -0
  816. package/dist/feedback/feedback-context.d.ts +110 -101
  817. package/dist/feedback/feedback-context.js +4 -7
  818. package/dist/feedback/feedback-context.js.map +1 -1
  819. package/dist/feedback/feedback-crash.d.ts +8 -110
  820. package/dist/feedback/feedback-dialog-labels.d.ts +12 -0
  821. package/dist/feedback/feedback-dialog-labels.js +17 -0
  822. package/dist/feedback/feedback-dialog-labels.js.map +1 -0
  823. package/dist/feedback/feedback-dialog.d.ts +186 -101
  824. package/dist/feedback/feedback-dialog.js +8 -18
  825. package/dist/feedback/feedback-dialog.js.map +1 -1
  826. package/dist/feedback/feedback-inbox.d.ts +236 -101
  827. package/dist/feedback/feedback-inbox.js +31 -141
  828. package/dist/feedback/feedback-inbox.js.map +1 -1
  829. package/dist/feedback/feedback-labels.d.ts +83 -101
  830. package/dist/feedback/feedback-labels.js.map +1 -1
  831. package/dist/feedback/feedback-menu-labels.d.ts +2 -0
  832. package/dist/feedback/feedback-menu-labels.js +10 -0
  833. package/dist/feedback/feedback-menu-labels.js.map +1 -0
  834. package/dist/feedback/feedback-menu.d.ts +83 -101
  835. package/dist/feedback/feedback-menu.js +3 -7
  836. package/dist/feedback/feedback-menu.js.map +1 -1
  837. package/dist/feedback/feedback-record.d.ts +239 -101
  838. package/dist/feedback/feedback-record.js +7 -2
  839. package/dist/feedback/feedback-record.js.map +1 -1
  840. package/dist/feedback/feedback-row-detail-labels.d.ts +2 -0
  841. package/dist/feedback/feedback-row-detail-labels.js +31 -0
  842. package/dist/feedback/feedback-row-detail-labels.js.map +1 -0
  843. package/dist/feedback/feedback-row-detail.d.ts +315 -101
  844. package/dist/feedback/feedback-row-detail.js +11 -37
  845. package/dist/feedback/feedback-row-detail.js.map +1 -1
  846. package/dist/feedback/feedback-status-undo.d.ts +66 -101
  847. package/dist/feedback/feedback-status-undo.js.map +1 -1
  848. package/dist/feedback/feedback-submit-dialog.d.ts +39 -0
  849. package/dist/feedback/feedback-submit-dialog.js +66 -0
  850. package/dist/feedback/feedback-submit-dialog.js.map +1 -0
  851. package/dist/feedback/feedback-submit.d.ts +13 -109
  852. package/dist/feedback/feedback-submit.js +19 -40
  853. package/dist/feedback/feedback-submit.js.map +1 -1
  854. package/dist/feedback/feedback-swipe.d.ts +9 -110
  855. package/dist/feedback/feedback-swipe.js +1 -1
  856. package/dist/feedback/feedback-swipe.js.map +1 -1
  857. package/dist/feedback/feedback-table-labels.d.ts +2 -0
  858. package/dist/feedback/feedback-table-labels.js +26 -0
  859. package/dist/feedback/feedback-table-labels.js.map +1 -0
  860. package/dist/feedback/feedback-table.d.ts +314 -101
  861. package/dist/feedback/feedback-table.js +11 -31
  862. package/dist/feedback/feedback-table.js.map +1 -1
  863. package/dist/feedback/feedback-thread-labels.d.ts +3 -0
  864. package/dist/feedback/feedback-thread-labels.js +21 -0
  865. package/dist/feedback/feedback-thread-labels.js.map +1 -0
  866. package/dist/feedback/feedback-thread.d.ts +373 -101
  867. package/dist/feedback/feedback-thread.js +26 -35
  868. package/dist/feedback/feedback-thread.js.map +1 -1
  869. package/dist/feedback/feedback-vocabulary.d.ts +98 -0
  870. package/dist/feedback/feedback-vocabulary.js +143 -0
  871. package/dist/feedback/feedback-vocabulary.js.map +1 -0
  872. package/dist/feedback.d.ts +15 -105
  873. package/dist/hooks/use-anchored-panel.d.ts +77 -15
  874. package/dist/hooks/use-anchored-panel.js +34 -1
  875. package/dist/hooks/use-anchored-panel.js.map +1 -1
  876. package/dist/hooks/use-anchored-rect.d.ts +15 -6
  877. package/dist/hooks/use-anchored-rect.js +2 -1
  878. package/dist/hooks/use-anchored-rect.js.map +1 -1
  879. package/dist/hooks/use-announce.d.ts +4 -6
  880. package/dist/hooks/use-authed-src.d.ts +5 -7
  881. package/dist/hooks/use-authed-src.js +3 -7
  882. package/dist/hooks/use-authed-src.js.map +1 -1
  883. package/dist/hooks/use-body-scroll-lock.d.ts +1 -3
  884. package/dist/hooks/use-breakpoint.d.ts +16 -17
  885. package/dist/hooks/use-breakpoint.js.map +1 -1
  886. package/dist/hooks/use-close-transition.d.ts +8 -8
  887. package/dist/hooks/use-close-transition.js +5 -4
  888. package/dist/hooks/use-close-transition.js.map +1 -1
  889. package/dist/hooks/use-copy-to-clipboard.d.ts +5 -7
  890. package/dist/hooks/use-debounce.d.ts +13 -6
  891. package/dist/hooks/use-debounce.js.map +1 -1
  892. package/dist/hooks/use-dismiss.d.ts +50 -11
  893. package/dist/hooks/use-dismiss.js +80 -9
  894. package/dist/hooks/use-dismiss.js.map +1 -1
  895. package/dist/hooks/use-file-drop.d.ts +8 -110
  896. package/dist/hooks/use-file-drop.js +1 -1
  897. package/dist/hooks/use-file-drop.js.map +1 -1
  898. package/dist/hooks/use-file-picker-labels.d.ts +2 -0
  899. package/dist/hooks/use-file-picker-labels.js +25 -0
  900. package/dist/hooks/use-file-picker-labels.js.map +1 -0
  901. package/dist/hooks/use-file-picker.d.ts +164 -0
  902. package/dist/hooks/use-file-picker.js +149 -0
  903. package/dist/hooks/use-file-picker.js.map +1 -0
  904. package/dist/hooks/use-focus-trap.d.ts +2 -4
  905. package/dist/hooks/use-focus-trap.js +2 -1
  906. package/dist/hooks/use-focus-trap.js.map +1 -1
  907. package/dist/hooks/use-hotkey.d.ts +7 -9
  908. package/dist/hooks/use-large-text.d.ts +3 -5
  909. package/dist/hooks/use-media-query.d.ts +1 -3
  910. package/dist/hooks/use-noindex.d.ts +1 -3
  911. package/dist/hooks/use-overlay-history.d.ts +1 -3
  912. package/dist/hooks/use-row-swipe.d.ts +5 -8
  913. package/dist/hooks/use-search-param-state.d.ts +10 -11
  914. package/dist/hooks/use-windowed-rows.d.ts +4 -7
  915. package/dist/i18n/defaults.d.ts +11 -105
  916. package/dist/i18n/defaults.js +82 -82
  917. package/dist/i18n/defaults.js.map +1 -1
  918. package/dist/i18n/german.d.ts +2 -105
  919. package/dist/i18n/german.js +52 -8
  920. package/dist/i18n/german.js.map +1 -1
  921. package/dist/i18n/kit-labels.d.ts +619 -101
  922. package/dist/i18n/kit-labels.js +22 -97
  923. package/dist/i18n/kit-labels.js.map +1 -1
  924. package/dist/i18n/languages.d.ts +197 -101
  925. package/dist/i18n/locales/de-CH.d.ts +3 -106
  926. package/dist/i18n/locales/en.d.ts +4 -105
  927. package/dist/i18n/locales/en.js +1834 -4
  928. package/dist/i18n/locales/en.js.map +7 -1
  929. package/dist/i18n/locales/es.d.ts +3 -106
  930. package/dist/i18n/locales/es.js +52 -8
  931. package/dist/i18n/locales/es.js.map +1 -1
  932. package/dist/i18n/locales/fr.d.ts +3 -106
  933. package/dist/i18n/locales/fr.js +56 -10
  934. package/dist/i18n/locales/fr.js.map +1 -1
  935. package/dist/i18n/locales/hu.d.ts +3 -106
  936. package/dist/i18n/locales/hu.js +52 -8
  937. package/dist/i18n/locales/hu.js.map +1 -1
  938. package/dist/i18n/locales/it.d.ts +3 -106
  939. package/dist/i18n/locales/it.js +56 -10
  940. package/dist/i18n/locales/it.js.map +1 -1
  941. package/dist/i18n/locales/zh.d.ts +3 -106
  942. package/dist/i18n/locales/zh.js +51 -8
  943. package/dist/i18n/locales/zh.js.map +1 -1
  944. package/dist/i18n/plurals.d.ts +3 -5
  945. package/dist/i18n/review.d.ts +5 -107
  946. package/dist/i18n/review.js +4 -0
  947. package/dist/i18n/review.js.map +1 -1
  948. package/dist/i18n/shared-labels.d.ts +17 -0
  949. package/dist/i18n/shared-labels.js +111 -0
  950. package/dist/i18n/shared-labels.js.map +1 -0
  951. package/dist/i18n/swiss.d.ts +1 -3
  952. package/dist/index.d.ts +330 -249
  953. package/dist/index.js +188 -215
  954. package/dist/index.js.map +1 -1
  955. package/dist/landing/access.d.ts +7 -9
  956. package/dist/landing/access.js.map +1 -1
  957. package/dist/landing/landing-actions.d.ts +9 -109
  958. package/dist/landing/landing-actions.js +1 -1
  959. package/dist/landing/landing-actions.js.map +1 -1
  960. package/dist/landing/landing-labels.d.ts +4 -5
  961. package/dist/landing/landing-labels.js.map +1 -1
  962. package/dist/landing/landing-sections.d.ts +21 -121
  963. package/dist/landing/landing-sections.js +15 -15
  964. package/dist/landing/landing-sections.js.map +1 -1
  965. package/dist/landing/page-seo.d.ts +7 -9
  966. package/dist/landing/public-header.d.ts +10 -111
  967. package/dist/landing/public-header.js +1 -1
  968. package/dist/landing/public-header.js.map +1 -1
  969. package/dist/landing/routing.d.ts +16 -120
  970. package/dist/landing/routing.js +2 -6
  971. package/dist/landing/routing.js.map +1 -1
  972. package/dist/lib/calc.d.ts +7 -9
  973. package/dist/lib/chip-edge-snap.d.ts +10 -0
  974. package/dist/lib/chip-edge-snap.js +131 -0
  975. package/dist/lib/chip-edge-snap.js.map +1 -0
  976. package/dist/lib/clipping.d.ts +2 -4
  977. package/dist/lib/cn.d.ts +2 -5
  978. package/dist/lib/cn.js +6 -1
  979. package/dist/lib/cn.js.map +1 -1
  980. package/dist/lib/column-mapping.d.ts +10 -13
  981. package/dist/lib/countries.d.ts +3 -5
  982. package/dist/lib/dates.d.ts +25 -25
  983. package/dist/lib/dates.js.map +1 -1
  984. package/dist/lib/decimal-marks.d.ts +8 -8
  985. package/dist/lib/decimal-marks.js +1 -1
  986. package/dist/lib/decimal-marks.js.map +1 -1
  987. package/dist/lib/direction.d.ts +4 -6
  988. package/dist/lib/document-navigation.d.ts +1 -3
  989. package/dist/lib/download.d.ts +67 -0
  990. package/dist/lib/download.js +89 -0
  991. package/dist/lib/download.js.map +1 -0
  992. package/dist/lib/floating-stack.d.ts +8 -6
  993. package/dist/lib/floating-stack.js.map +1 -1
  994. package/dist/lib/format.d.ts +24 -23
  995. package/dist/lib/format.js +3 -3
  996. package/dist/lib/format.js.map +1 -1
  997. package/dist/lib/iban.d.ts +9 -11
  998. package/dist/lib/ime.d.ts +17 -0
  999. package/dist/lib/ime.js +13 -0
  1000. package/dist/lib/ime.js.map +1 -0
  1001. package/dist/lib/isin.d.ts +3 -5
  1002. package/dist/lib/logger.d.ts +4 -6
  1003. package/dist/lib/person-name.d.ts +3 -5
  1004. package/dist/lib/phone.d.ts +9 -11
  1005. package/dist/lib/presence.d.ts +15 -0
  1006. package/dist/lib/presence.js +8 -0
  1007. package/dist/lib/presence.js.map +1 -0
  1008. package/dist/lib/qr-encode.d.ts +4 -6
  1009. package/dist/lib/reduced-motion.d.ts +18 -0
  1010. package/dist/lib/reduced-motion.js +9 -0
  1011. package/dist/lib/reduced-motion.js.map +1 -0
  1012. package/dist/lib/refs.d.ts +13 -0
  1013. package/dist/lib/refs.js +15 -0
  1014. package/dist/lib/refs.js.map +1 -0
  1015. package/dist/lib/round.d.ts +22 -0
  1016. package/dist/lib/round.js +15 -0
  1017. package/dist/lib/round.js.map +1 -0
  1018. package/dist/lib/safe-storage.d.ts +14 -4
  1019. package/dist/lib/safe-storage.js +24 -9
  1020. package/dist/lib/safe-storage.js.map +1 -1
  1021. package/dist/lib/server-wake.d.ts +13 -14
  1022. package/dist/lib/session-refresh.d.ts +200 -0
  1023. package/dist/lib/session-refresh.js +187 -0
  1024. package/dist/lib/session-refresh.js.map +1 -0
  1025. package/dist/lib/strip-fade.d.ts +10 -13
  1026. package/dist/lib/table-text.d.ts +14 -16
  1027. package/dist/lib/text-match.d.ts +41 -0
  1028. package/dist/lib/text-match.js +23 -0
  1029. package/dist/lib/text-match.js.map +1 -0
  1030. package/dist/lib/translation-review.d.ts +44 -45
  1031. package/dist/lib/translation-review.js +3 -2
  1032. package/dist/lib/translation-review.js.map +1 -1
  1033. package/dist/rhf/fields.d.ts +131 -197
  1034. package/dist/rhf/fields.js +46 -54
  1035. package/dist/rhf/fields.js.map +1 -1
  1036. package/dist/rhf/form-core.d.ts +154 -0
  1037. package/dist/rhf/form-core.js +143 -0
  1038. package/dist/rhf/form-core.js.map +1 -0
  1039. package/dist/rhf/form.d.ts +9 -175
  1040. package/dist/rhf/form.js +2 -139
  1041. package/dist/rhf/form.js.map +1 -1
  1042. package/dist/rhf/line-items.d.ts +40 -11
  1043. package/dist/rhf/line-items.js.map +1 -1
  1044. package/dist/rhf/use-rhf-wizard-step.d.ts +3 -6
  1045. package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
  1046. package/dist/rhf.d.ts +4 -118
  1047. package/dist/rhf.js.map +1 -1
  1048. package/dist/search/command-palette-labels.d.ts +2 -0
  1049. package/dist/search/command-palette-labels.js +15 -0
  1050. package/dist/search/command-palette-labels.js.map +1 -0
  1051. package/dist/search/command-palette.d.ts +10 -13
  1052. package/dist/search/command-palette.js +25 -44
  1053. package/dist/search/command-palette.js.map +1 -1
  1054. package/dist/search/global-search-labels.d.ts +2 -0
  1055. package/dist/search/global-search-labels.js +12 -0
  1056. package/dist/search/global-search-labels.js.map +1 -0
  1057. package/dist/search/global-search.d.ts +17 -16
  1058. package/dist/search/global-search.js +12 -12
  1059. package/dist/search/global-search.js.map +1 -1
  1060. package/dist/search/search-index.d.ts +13 -14
  1061. package/dist/search/search-index.js +2 -1
  1062. package/dist/search/search-index.js.map +1 -1
  1063. package/dist/search/use-command-key.d.ts +9 -0
  1064. package/dist/search/use-command-key.js +18 -0
  1065. package/dist/search/use-command-key.js.map +1 -0
  1066. package/dist/search.d.ts +3 -4
  1067. package/dist/settings/settings-card-classes.d.ts +11 -0
  1068. package/dist/settings/settings-card-classes.js +8 -0
  1069. package/dist/settings/settings-card-classes.js.map +1 -0
  1070. package/dist/settings/settings-catalogue.d.ts +11 -14
  1071. package/dist/settings/settings-context.d.ts +4 -8
  1072. package/dist/settings/settings-heading.d.ts +8 -12
  1073. package/dist/settings/settings-heading.js +1 -1
  1074. package/dist/settings/settings-heading.js.map +1 -1
  1075. package/dist/settings/settings-labels.d.ts +6 -7
  1076. package/dist/settings/settings-labels.js.map +1 -1
  1077. package/dist/settings/settings-layout.d.ts +36 -13
  1078. package/dist/settings/settings-layout.js +25 -4
  1079. package/dist/settings/settings-layout.js.map +1 -1
  1080. package/dist/settings/settings-section.d.ts +4 -107
  1081. package/dist/settings/settings-section.js +2 -2
  1082. package/dist/settings/settings-section.js.map +1 -1
  1083. package/dist/settings/use-account-appearance.d.ts +11 -16
  1084. package/dist/settings/use-account-language.d.ts +8 -10
  1085. package/dist/settings/use-settings-focus.d.ts +3 -5
  1086. package/dist/settings/use-settings-focus.js +2 -4
  1087. package/dist/settings/use-settings-focus.js.map +1 -1
  1088. package/dist/settings/use-settings-route.d.ts +11 -16
  1089. package/dist/shell/app-shell-labels.d.ts +2 -0
  1090. package/dist/shell/app-shell-labels.js +9 -0
  1091. package/dist/shell/app-shell-labels.js.map +1 -0
  1092. package/dist/shell/app-shell.d.ts +216 -101
  1093. package/dist/shell/app-shell.js +51 -35
  1094. package/dist/shell/app-shell.js.map +1 -1
  1095. package/dist/shell/auth-layout.d.ts +6 -9
  1096. package/dist/shell/auth-layout.js +6 -6
  1097. package/dist/shell/auth-layout.js.map +1 -1
  1098. package/dist/shell/company-switcher-labels.d.ts +2 -0
  1099. package/dist/shell/company-switcher-labels.js +12 -0
  1100. package/dist/shell/company-switcher-labels.js.map +1 -0
  1101. package/dist/shell/company-switcher.d.ts +9 -11
  1102. package/dist/shell/company-switcher.js +3 -9
  1103. package/dist/shell/company-switcher.js.map +1 -1
  1104. package/dist/shell/option-switcher-menu.d.ts +7 -9
  1105. package/dist/shell/option-switcher-menu.js +4 -4
  1106. package/dist/shell/option-switcher-menu.js.map +1 -1
  1107. package/dist/shell/role-switcher.d.ts +3 -7
  1108. package/dist/shell/role-switcher.js +3 -3
  1109. package/dist/shell/role-switcher.js.map +1 -1
  1110. package/dist/shell/top-bar-brand.d.ts +4 -107
  1111. package/dist/shell/top-bar-brand.js +1 -1
  1112. package/dist/shell/top-bar-brand.js.map +1 -1
  1113. package/dist/shell/top-bar.d.ts +6 -9
  1114. package/dist/shell/top-bar.js +1 -1
  1115. package/dist/shell/top-bar.js.map +1 -1
  1116. package/dist/shell/topbar-action-menu.d.ts +18 -31
  1117. package/dist/shell/topbar-action-menu.js +10 -10
  1118. package/dist/shell/topbar-action-menu.js.map +1 -1
  1119. package/dist/shell/topbar-controls.d.ts +14 -21
  1120. package/dist/shell/topbar-controls.js +11 -11
  1121. package/dist/shell/topbar-controls.js.map +1 -1
  1122. package/dist/shell.d.ts +25 -116
  1123. package/dist/shell.js.map +1 -1
  1124. package/dist/table-text.d.ts +1 -1
  1125. package/dist/testing/css-variables.d.ts +4 -6
  1126. package/dist/testing/css-variables.generated.d.ts +2 -4
  1127. package/dist/testing/index.d.ts +2 -1
  1128. package/dist/testing/index.js +11 -1
  1129. package/dist/testing/index.js.map +1 -1
  1130. package/dist/testing/viewport.d.ts +116 -0
  1131. package/dist/testing/viewport.js +203 -0
  1132. package/dist/testing/viewport.js.map +1 -0
  1133. package/dist/theme/chart-palette.d.ts +7 -9
  1134. package/dist/theme/color.d.ts +14 -16
  1135. package/dist/theme/color.js +2 -1
  1136. package/dist/theme/color.js.map +1 -1
  1137. package/dist/theme/contrast-tokens.d.ts +13 -17
  1138. package/dist/theme/contrast.d.ts +22 -27
  1139. package/dist/theme/palette-derive.d.ts +16 -22
  1140. package/dist/theme/palette-derive.js +15 -7
  1141. package/dist/theme/palette-derive.js.map +1 -1
  1142. package/dist/theme/palette-presets.d.ts +18 -15
  1143. package/dist/theme/palette-presets.js +66 -345
  1144. package/dist/theme/palette-presets.js.map +1 -1
  1145. package/dist/theme/palette-store.d.ts +10 -13
  1146. package/dist/theme/text-size.d.ts +21 -26
  1147. package/dist/theme/theme-store.d.ts +9 -14
  1148. package/dist/tour/tour-labels.d.ts +2 -0
  1149. package/dist/tour/tour-labels.js +13 -0
  1150. package/dist/tour/tour-labels.js.map +1 -0
  1151. package/dist/tour/tour.d.ts +12 -14
  1152. package/dist/tour/tour.js +9 -20
  1153. package/dist/tour/tour.js.map +1 -1
  1154. package/dist/tour.d.ts +1 -2
  1155. package/dist/wizard/stepper-nav.d.ts +8 -108
  1156. package/dist/wizard/stepper-nav.js +15 -14
  1157. package/dist/wizard/stepper-nav.js.map +1 -1
  1158. package/dist/wizard/types.d.ts +13 -18
  1159. package/dist/wizard/types.js +2 -24
  1160. package/dist/wizard/types.js.map +1 -1
  1161. package/dist/wizard/use-wizard.d.ts +2 -6
  1162. package/dist/wizard/validation.d.ts +3 -7
  1163. package/dist/wizard/wizard-context.d.ts +7 -11
  1164. package/dist/wizard/wizard-labels.d.ts +4 -0
  1165. package/dist/wizard/wizard-labels.js +24 -0
  1166. package/dist/wizard/wizard-labels.js.map +1 -0
  1167. package/dist/wizard/wizard-step.d.ts +3 -7
  1168. package/dist/wizard/wizard-step.js +2 -2
  1169. package/dist/wizard/wizard-step.js.map +1 -1
  1170. package/dist/wizard/wizard-summary.d.ts +5 -8
  1171. package/dist/wizard/wizard-summary.js +6 -5
  1172. package/dist/wizard/wizard-summary.js.map +1 -1
  1173. package/dist/wizard.d.ts +7 -107
  1174. package/package.json +17 -6
  1175. package/src/account/account-parts.ts +3 -3
  1176. package/src/{components → account}/account-settings-labels.ts +11 -1
  1177. package/src/{components → account}/account-settings.tsx +145 -34
  1178. package/src/account/data-export-setting-labels.ts +20 -0
  1179. package/src/account/data-export-setting.tsx +19 -38
  1180. package/src/account/delete-account-setting-labels.ts +33 -0
  1181. package/src/account/delete-account-setting.tsx +13 -35
  1182. package/src/account/email-change-setting-labels.ts +32 -0
  1183. package/src/account/email-change-setting.tsx +17 -36
  1184. package/src/{components → account}/passkeys-setting.tsx +14 -9
  1185. package/src/account/sessions-setting-labels.ts +24 -0
  1186. package/src/account/sessions-setting.tsx +14 -28
  1187. package/src/admin/admin-action-confirm-labels.ts +19 -0
  1188. package/src/admin/admin-action-confirm.tsx +59 -38
  1189. package/src/admin/admin-action-log-labels.ts +74 -0
  1190. package/src/admin/admin-action-log.tsx +180 -54
  1191. package/src/admin/admin-parts.ts +0 -7
  1192. package/src/admin/invitations-panel-labels.ts +31 -0
  1193. package/src/admin/invitations-panel.tsx +16 -34
  1194. package/src/admin/plan-change-labels.ts +23 -0
  1195. package/src/admin/plan-change.tsx +58 -34
  1196. package/src/admin/reviewer-scope-editor-labels.ts +16 -0
  1197. package/src/admin/reviewer-scope-editor.tsx +9 -15
  1198. package/src/admin/role-select-labels.ts +16 -0
  1199. package/src/admin/role-select.tsx +13 -23
  1200. package/src/admin/transfer-ownership-dialog-labels.ts +20 -0
  1201. package/src/admin/transfer-ownership-dialog.tsx +7 -17
  1202. package/src/admin/user-roster-labels.ts +17 -0
  1203. package/src/admin/user-roster.tsx +9 -17
  1204. package/src/auth/accept-invitation-labels.ts +21 -0
  1205. package/src/auth/accept-invitation.tsx +9 -20
  1206. package/src/auth/auth-errors.ts +29 -13
  1207. package/src/auth/complete-name-dialog-labels.ts +16 -0
  1208. package/src/auth/complete-name-dialog.tsx +8 -13
  1209. package/src/auth/forgot-password-form-labels.ts +20 -0
  1210. package/src/auth/forgot-password-form.tsx +12 -20
  1211. package/src/auth/new-password-fields.tsx +1 -1
  1212. package/src/auth/not-found-page-labels.ts +12 -0
  1213. package/src/auth/not-found-page.tsx +11 -14
  1214. package/src/auth/register-form-labels.ts +31 -0
  1215. package/src/auth/register-form.tsx +18 -38
  1216. package/src/auth/reset-password-form-labels.ts +27 -0
  1217. package/src/auth/reset-password-form.tsx +12 -27
  1218. package/src/auth/sign-in-form-labels.ts +44 -0
  1219. package/src/auth/sign-in-form.tsx +18 -51
  1220. package/src/auth/status-parts.tsx +3 -3
  1221. package/src/auth/verify-email-labels.ts +26 -0
  1222. package/src/auth/verify-email.tsx +15 -30
  1223. package/src/billing/billing-banner.tsx +7 -3
  1224. package/src/billing/billing-labels.ts +1 -1
  1225. package/src/billing/checkout-processing.ts +2 -12
  1226. package/src/billing/plan-card.tsx +26 -27
  1227. package/src/billing/plan-limit-notice.tsx +6 -3
  1228. package/src/billing/subscription-actions.tsx +4 -4
  1229. package/src/chart.ts +9 -1
  1230. package/src/components/account-chips-labels.ts +16 -0
  1231. package/src/components/account-chips.tsx +13 -16
  1232. package/src/components/alert-banner.tsx +39 -19
  1233. package/src/components/amount-input.tsx +458 -406
  1234. package/src/components/appearance-labels.ts +2 -2
  1235. package/src/components/authed-image-labels.ts +11 -0
  1236. package/src/components/authed-image.tsx +6 -8
  1237. package/src/components/autocomplete.tsx +79 -78
  1238. package/src/components/breadcrumbs-labels.ts +10 -0
  1239. package/src/components/breadcrumbs.tsx +17 -14
  1240. package/src/components/bulk-action-bar-labels.ts +11 -0
  1241. package/src/components/bulk-action-bar.tsx +15 -16
  1242. package/src/components/button-group.tsx +7 -7
  1243. package/src/components/button-look.ts +230 -0
  1244. package/src/components/button.tsx +339 -0
  1245. package/src/components/calculator.tsx +14 -12
  1246. package/src/components/calendar-heatmap-labels.ts +15 -0
  1247. package/src/components/calendar-heatmap.tsx +13 -19
  1248. package/src/components/card.tsx +381 -0
  1249. package/src/components/chart-zoom-core.tsx +653 -0
  1250. package/src/components/chart-zoom.tsx +21 -648
  1251. package/src/components/chart.tsx +11 -11
  1252. package/src/components/checkbox-group.tsx +13 -10
  1253. package/src/components/checkbox.tsx +43 -42
  1254. package/src/components/chip-input.tsx +370 -0
  1255. package/src/components/chip-labels.ts +13 -0
  1256. package/src/components/chip.tsx +115 -711
  1257. package/src/components/choice-card.tsx +83 -85
  1258. package/src/components/column-mapper-labels.ts +45 -0
  1259. package/src/components/column-mapper.tsx +16 -51
  1260. package/src/components/combobox-core.tsx +346 -194
  1261. package/src/components/combobox-suggestions.tsx +129 -0
  1262. package/src/components/combobox.tsx +70 -896
  1263. package/src/components/confirm-dialog-labels.ts +13 -0
  1264. package/src/components/confirm-dialog.tsx +4 -8
  1265. package/src/components/copy-button-labels.ts +13 -0
  1266. package/src/components/copy-button.tsx +15 -13
  1267. package/src/components/country-select-labels.ts +11 -0
  1268. package/src/components/country-select.tsx +74 -89
  1269. package/src/components/currency-option-list.tsx +182 -0
  1270. package/src/components/currency-select.tsx +85 -196
  1271. package/src/components/danger-confirm-labels.ts +20 -0
  1272. package/src/components/danger-confirm.tsx +72 -80
  1273. package/src/components/data-table-cells.tsx +5 -5
  1274. package/src/components/data-table-column-settings.tsx +137 -0
  1275. package/src/components/data-table-filter-popover.tsx +51 -25
  1276. package/src/components/data-table-filters.ts +48 -11
  1277. package/src/components/data-table-head.tsx +258 -0
  1278. package/src/components/data-table-labels.ts +21 -71
  1279. package/src/components/data-table-mobile.tsx +594 -0
  1280. package/src/components/data-table-pagination.tsx +11 -10
  1281. package/src/components/data-table-resize.ts +187 -0
  1282. package/src/components/data-table-row-actions.tsx +152 -0
  1283. package/src/components/data-table-selection.ts +55 -0
  1284. package/src/components/data-table-shared.tsx +225 -0
  1285. package/src/components/data-table.tsx +205 -1315
  1286. package/src/components/date-field.tsx +627 -0
  1287. package/src/components/date-picker.tsx +58 -1446
  1288. package/src/components/date-range-picker.tsx +490 -0
  1289. package/src/components/description-list-labels.ts +9 -0
  1290. package/src/components/description-list.tsx +31 -15
  1291. package/src/components/dialog-frame-labels.ts +7 -0
  1292. package/src/components/dialog-frame.tsx +11 -7
  1293. package/src/components/disclosure.tsx +14 -14
  1294. package/src/components/dropdown.tsx +129 -43
  1295. package/src/components/empty-state.tsx +137 -0
  1296. package/src/components/entity-combobox.tsx +18 -13
  1297. package/src/components/error-boundary-labels.ts +20 -0
  1298. package/src/components/error-boundary.tsx +10 -20
  1299. package/src/components/facing-pair.ts +1 -1
  1300. package/src/components/field-base.tsx +604 -0
  1301. package/src/components/field-parts.tsx +192 -77
  1302. package/src/components/field-strip.tsx +12 -33
  1303. package/src/components/field-sync-labels.ts +13 -0
  1304. package/src/components/field-sync.tsx +8 -16
  1305. package/src/components/field.tsx +17 -15
  1306. package/src/components/file-button.tsx +64 -412
  1307. package/src/components/file-dropzone.tsx +36 -33
  1308. package/src/components/floating-panel-labels.ts +10 -0
  1309. package/src/components/floating-panel.tsx +32 -21
  1310. package/src/components/focus-ring.ts +9 -4
  1311. package/src/components/form-actions-labels.ts +11 -0
  1312. package/src/components/form-actions.tsx +17 -21
  1313. package/src/components/full-bleed-dialog.tsx +28 -25
  1314. package/src/components/grouped-picker.tsx +118 -96
  1315. package/src/components/help-popover.tsx +115 -0
  1316. package/src/components/hover-menu.tsx +45 -38
  1317. package/src/components/iban-input-labels.ts +15 -0
  1318. package/src/components/iban-input.tsx +25 -20
  1319. package/src/components/icon-button.tsx +945 -0
  1320. package/src/components/icon-picker-labels.ts +13 -0
  1321. package/src/components/icon-picker.tsx +27 -24
  1322. package/src/components/image-grid-labels.ts +11 -0
  1323. package/src/components/image-grid.tsx +13 -15
  1324. package/src/components/inline-edit-field-labels.ts +11 -0
  1325. package/src/components/inline-edit-field.tsx +20 -19
  1326. package/src/components/inline-entity-combobox.tsx +789 -0
  1327. package/src/components/input.tsx +380 -0
  1328. package/src/components/jump-calendar.tsx +385 -0
  1329. package/src/components/language-select.tsx +31 -16
  1330. package/src/components/legal-labels.ts +99 -0
  1331. package/src/components/legal-page.tsx +2 -2
  1332. package/src/components/legal.tsx +11 -101
  1333. package/src/components/lightbox-labels.ts +18 -0
  1334. package/src/components/lightbox.tsx +13 -21
  1335. package/src/components/line-items-labels.ts +14 -0
  1336. package/src/components/line-items.tsx +24 -31
  1337. package/src/components/list-labels.ts +10 -0
  1338. package/src/components/list.tsx +98 -75
  1339. package/src/components/loading-state.tsx +4 -4
  1340. package/src/components/measured-grid-labels.ts +25 -0
  1341. package/src/components/measured-grid.tsx +39 -62
  1342. package/src/components/menu-item.tsx +29 -26
  1343. package/src/components/mini-calendar-labels.ts +17 -0
  1344. package/src/components/mini-calendar.tsx +38 -45
  1345. package/src/components/modal.tsx +49 -20
  1346. package/src/components/money-draft.ts +72 -0
  1347. package/src/components/money-field.tsx +16 -30
  1348. package/src/components/month-picker-labels.ts +22 -0
  1349. package/src/components/month-picker.tsx +59 -45
  1350. package/src/components/multi-entity-combobox.tsx +17 -12
  1351. package/src/components/multi-select.tsx +300 -292
  1352. package/src/components/nav-pills.tsx +19 -8
  1353. package/src/components/number-field.tsx +7 -5
  1354. package/src/components/number-input.tsx +69 -99
  1355. package/src/components/numeric-field.ts +161 -0
  1356. package/src/components/numpad-sheet.tsx +16 -16
  1357. package/src/components/one-time-code-input.tsx +154 -169
  1358. package/src/components/page-contents-labels.ts +9 -0
  1359. package/src/components/page-contents.tsx +15 -15
  1360. package/src/components/page-header.tsx +9 -5
  1361. package/src/components/password-strength-labels.ts +23 -0
  1362. package/src/components/password-strength.tsx +13 -27
  1363. package/src/components/phone-input-labels.ts +10 -0
  1364. package/src/components/phone-input.tsx +42 -57
  1365. package/src/components/picker-sheet.tsx +47 -18
  1366. package/src/components/pie-chart.tsx +11 -9
  1367. package/src/components/popover-labels.ts +14 -0
  1368. package/src/components/popover.tsx +36 -37
  1369. package/src/components/progress-bar-labels.ts +10 -0
  1370. package/src/components/progress-bar.tsx +32 -23
  1371. package/src/components/qr-code.tsx +2 -2
  1372. package/src/components/reauth-dialog-labels.ts +13 -0
  1373. package/src/components/reauth-dialog.tsx +7 -10
  1374. package/src/components/row-actions-labels.ts +10 -0
  1375. package/src/components/row-actions.tsx +11 -10
  1376. package/src/components/scroll-area.tsx +4 -10
  1377. package/src/components/search-field.tsx +35 -49
  1378. package/src/components/select.tsx +302 -0
  1379. package/src/components/separator.tsx +2 -2
  1380. package/src/components/series-chart-axes.ts +329 -0
  1381. package/src/components/series-chart-thin.ts +180 -0
  1382. package/src/components/series-chart.tsx +125 -326
  1383. package/src/components/server-wake-labels.ts +11 -0
  1384. package/src/components/server-wake.tsx +39 -66
  1385. package/src/components/settings-fields.tsx +50 -19
  1386. package/src/components/share-card-labels.ts +30 -0
  1387. package/src/components/share-card.tsx +22 -37
  1388. package/src/components/sign-chip-labels.ts +12 -0
  1389. package/src/components/sign-chip.tsx +6 -9
  1390. package/src/components/signature-pad-labels.ts +24 -0
  1391. package/src/components/signature-pad.tsx +48 -57
  1392. package/src/components/signed-amount-labels.ts +10 -0
  1393. package/src/components/signed-amount.tsx +21 -22
  1394. package/src/components/skeleton.tsx +1 -1
  1395. package/src/components/slider.tsx +51 -39
  1396. package/src/components/sparkline-labels.ts +14 -0
  1397. package/src/components/sparkline.tsx +16 -21
  1398. package/src/components/spinner.tsx +81 -0
  1399. package/src/components/stat-tile-labels.ts +15 -0
  1400. package/src/components/stat-tile.tsx +39 -38
  1401. package/src/components/status-dot.tsx +17 -14
  1402. package/src/components/swatch-picker-labels.ts +10 -0
  1403. package/src/components/swatch-picker.tsx +23 -16
  1404. package/src/components/swipeable-row.tsx +17 -39
  1405. package/src/components/switch.tsx +33 -32
  1406. package/src/components/table.tsx +15 -15
  1407. package/src/components/tabs.tsx +660 -0
  1408. package/src/components/text-link.tsx +7 -7
  1409. package/src/components/text.tsx +10 -6
  1410. package/src/components/textarea.tsx +323 -0
  1411. package/src/components/tile-radio.tsx +6 -6
  1412. package/src/components/time-input.tsx +15 -7
  1413. package/src/components/toast-labels.ts +12 -0
  1414. package/src/components/toast.tsx +5 -8
  1415. package/src/components/toggle-group.tsx +105 -42
  1416. package/src/components/toggle-legend.tsx +6 -6
  1417. package/src/components/tooltip.tsx +47 -27
  1418. package/src/components/translation-review-editor.tsx +8 -7
  1419. package/src/components/translation-review-parts.tsx +9 -13
  1420. package/src/components/translation-review.tsx +50 -20
  1421. package/src/components/tree-view.tsx +14 -12
  1422. package/src/components/ui-labels.ts +22 -0
  1423. package/src/components/use-table-state.ts +91 -10
  1424. package/src/components/user-avatar.tsx +5 -5
  1425. package/src/components/wizard-stepper.tsx +7 -6
  1426. package/src/components/write-lock-labels.ts +9 -0
  1427. package/src/components/write-lock.tsx +10 -12
  1428. package/src/currencies.ts +70 -0
  1429. package/src/data-table.ts +4 -0
  1430. package/src/demo/demo-banner.tsx +16 -27
  1431. package/src/demo/demo-ended.tsx +8 -7
  1432. package/src/demo/demo-labels.ts +2 -2
  1433. package/src/demo/demo-start.tsx +7 -5
  1434. package/src/eslint/index.ts +161 -0
  1435. package/src/eslint/role-utilities.generated.ts +146 -0
  1436. package/src/eslint/role-utilities.ts +99 -0
  1437. package/src/feedback/feedback-attachment-labels.ts +36 -0
  1438. package/src/feedback/feedback-attachment.tsx +42 -66
  1439. package/src/feedback/feedback-context-labels.ts +10 -0
  1440. package/src/feedback/feedback-context.tsx +8 -9
  1441. package/src/feedback/feedback-dialog-labels.ts +28 -0
  1442. package/src/feedback/feedback-dialog.tsx +14 -44
  1443. package/src/feedback/feedback-inbox.tsx +49 -252
  1444. package/src/feedback/feedback-labels.ts +5 -5
  1445. package/src/feedback/feedback-menu-labels.ts +11 -0
  1446. package/src/feedback/feedback-menu.tsx +13 -11
  1447. package/src/feedback/feedback-record.ts +21 -7
  1448. package/src/feedback/feedback-row-detail-labels.ts +33 -0
  1449. package/src/feedback/feedback-row-detail.tsx +30 -43
  1450. package/src/feedback/feedback-status-undo.ts +3 -2
  1451. package/src/feedback/feedback-submit-dialog.tsx +109 -0
  1452. package/src/feedback/feedback-submit.tsx +45 -55
  1453. package/src/feedback/feedback-swipe.tsx +1 -1
  1454. package/src/feedback/feedback-table-labels.ts +27 -0
  1455. package/src/feedback/feedback-table.tsx +24 -40
  1456. package/src/feedback/feedback-thread-labels.ts +22 -0
  1457. package/src/feedback/feedback-thread.tsx +46 -50
  1458. package/src/feedback/feedback-vocabulary.ts +252 -0
  1459. package/src/hooks/use-anchored-panel.ts +102 -2
  1460. package/src/hooks/use-anchored-rect.ts +11 -9
  1461. package/src/hooks/use-authed-src.ts +13 -7
  1462. package/src/hooks/use-breakpoint.ts +5 -4
  1463. package/src/hooks/use-close-transition.ts +9 -10
  1464. package/src/hooks/use-debounce.ts +9 -0
  1465. package/src/hooks/use-dismiss.ts +210 -18
  1466. package/src/hooks/use-file-drop.ts +2 -2
  1467. package/src/hooks/use-file-picker-labels.ts +29 -0
  1468. package/src/hooks/use-file-picker.tsx +363 -0
  1469. package/src/hooks/use-focus-trap.ts +19 -6
  1470. package/src/i18n/defaults.ts +91 -82
  1471. package/src/i18n/german.ts +50 -6
  1472. package/src/i18n/kit-labels.tsx +85 -124
  1473. package/src/i18n/locales/en.ts +46 -0
  1474. package/src/i18n/locales/es.ts +50 -6
  1475. package/src/i18n/locales/fr.ts +55 -9
  1476. package/src/i18n/locales/hu.ts +50 -6
  1477. package/src/i18n/locales/it.ts +54 -8
  1478. package/src/i18n/locales/zh.ts +49 -6
  1479. package/src/i18n/review.ts +4 -0
  1480. package/src/i18n/shared-labels.ts +135 -0
  1481. package/src/index.ts +414 -404
  1482. package/src/landing/access.ts +2 -1
  1483. package/src/landing/landing-actions.tsx +6 -5
  1484. package/src/landing/landing-labels.ts +2 -2
  1485. package/src/landing/landing-sections.tsx +24 -23
  1486. package/src/landing/public-header.tsx +3 -2
  1487. package/src/landing/routing.tsx +2 -7
  1488. package/src/lib/chip-edge-snap.ts +212 -0
  1489. package/src/lib/cn.ts +13 -1
  1490. package/src/lib/dates.ts +4 -2
  1491. package/src/lib/decimal-marks.ts +4 -2
  1492. package/src/lib/download.ts +172 -0
  1493. package/src/lib/floating-stack.ts +5 -1
  1494. package/src/lib/format.ts +5 -3
  1495. package/src/lib/ime.ts +24 -0
  1496. package/src/lib/presence.ts +18 -0
  1497. package/src/lib/reduced-motion.ts +21 -0
  1498. package/src/lib/refs.ts +22 -0
  1499. package/src/lib/round.ts +38 -0
  1500. package/src/lib/safe-storage.ts +35 -11
  1501. package/src/lib/session-refresh.ts +473 -0
  1502. package/src/lib/text-match.ts +60 -0
  1503. package/src/lib/translation-review.ts +7 -6
  1504. package/src/rhf/fields.tsx +141 -189
  1505. package/src/rhf/form-core.tsx +328 -0
  1506. package/src/rhf/form.tsx +9 -320
  1507. package/src/rhf/line-items.tsx +2 -2
  1508. package/src/rhf/use-rhf-wizard-step.ts +4 -4
  1509. package/src/rhf.ts +4 -2
  1510. package/src/search/command-palette-labels.ts +16 -0
  1511. package/src/search/command-palette.tsx +37 -50
  1512. package/src/search/global-search-labels.ts +13 -0
  1513. package/src/search/global-search.tsx +50 -24
  1514. package/src/search/search-index.ts +5 -6
  1515. package/src/search/use-command-key.ts +22 -0
  1516. package/src/settings/settings-card-classes.ts +11 -0
  1517. package/src/settings/settings-heading.tsx +1 -1
  1518. package/src/settings/settings-labels.ts +2 -2
  1519. package/src/settings/settings-layout.tsx +65 -6
  1520. package/src/settings/settings-section.tsx +5 -5
  1521. package/src/settings/use-settings-focus.ts +2 -5
  1522. package/src/shell/app-shell-labels.ts +10 -0
  1523. package/src/shell/app-shell.tsx +79 -53
  1524. package/src/shell/auth-layout.tsx +11 -10
  1525. package/src/shell/company-switcher-labels.ts +13 -0
  1526. package/src/shell/company-switcher.tsx +7 -11
  1527. package/src/shell/option-switcher-menu.tsx +7 -5
  1528. package/src/shell/role-switcher.tsx +4 -4
  1529. package/src/shell/top-bar-brand.tsx +1 -1
  1530. package/src/shell/top-bar.tsx +6 -5
  1531. package/src/shell/topbar-action-menu.tsx +21 -19
  1532. package/src/shell/topbar-controls.tsx +15 -15
  1533. package/src/shell.ts +1 -1
  1534. package/src/testing/index.ts +13 -0
  1535. package/src/testing/viewport.ts +357 -0
  1536. package/src/theme/color.ts +7 -1
  1537. package/src/theme/palette-derive.ts +29 -7
  1538. package/src/theme/palette-presets.ts +82 -355
  1539. package/src/tour/tour-labels.ts +14 -0
  1540. package/src/tour/tour.tsx +13 -23
  1541. package/src/wizard/stepper-nav.tsx +19 -18
  1542. package/src/wizard/types.ts +3 -26
  1543. package/src/wizard/wizard-labels.ts +29 -0
  1544. package/src/wizard/wizard-step.tsx +2 -2
  1545. package/src/wizard/wizard-summary.tsx +8 -7
  1546. package/tokens.css +45 -14
  1547. package/dist/components/account-settings-labels.js.map +0 -1
  1548. package/dist/components/account-settings.js.map +0 -1
  1549. package/dist/components/choice-parts.d.ts +0 -24
  1550. package/dist/components/choice-parts.js +0 -18
  1551. package/dist/components/choice-parts.js.map +0 -1
  1552. package/dist/components/passkeys-setting.js.map +0 -1
  1553. package/dist/components/ui.d.ts +0 -101
  1554. package/dist/components/ui.js +0 -1955
  1555. package/dist/components/ui.js.map +0 -1
  1556. package/dist/data-table-labels-BJ5JE_X2.d.ts +0 -923
  1557. package/dist/delete-account-setting-DAgGBrbn.d.ts +0 -8167
  1558. package/src/components/choice-parts.ts +0 -33
  1559. package/src/components/ui.tsx +0 -4233
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Environment stubs for an app's own tests (0.34, refactor audit 2026-10, TST-10): the
3
+ * two browser APIs jsdom does not have and the kit's layout reads — `matchMedia` and
4
+ * `ResizeObserver`.
5
+ *
6
+ * Every suite rebuilt them by hand: the kit stubbed `matchMedia` in 25 files and defined
7
+ * the same `stubPhone()` eight times, keksdose stubs it in 41, and most copies answer
8
+ * one literal string. That breaks quietly at Large text, where `md` is 960 px and the
9
+ * phone query the kit writes is `(width < 960px)`, not `(width < 768px)`. These answer
10
+ * every width query from a WIDTH, as a browser does, so they stay right at every text
11
+ * size (docs/text-size-harmonization.md §3.3). The reference is keksdose's
12
+ * `frontend/src/test/viewport.ts`, which this generalises.
13
+ *
14
+ * Framework-free, like the rest of `@eifi1/ui-kit/testing`: nothing here imports vitest
15
+ * or jest. Each stub returns its own undo, so it works under either runner, and a suite
16
+ * that prefers `vi.stubGlobal` passes it {@link viewportMatchMedia} instead.
17
+ */
18
+ /** The media features a test may want besides the width. Each is off by default. */
19
+ export interface ViewportOptions {
20
+ /** The primary pointer is a finger: `(pointer: coarse)`, `(any-pointer: coarse)` and
21
+ * `(hover: none)` match; `(pointer: fine)` and `(hover: hover)` do not. */
22
+ coarse?: boolean;
23
+ /** The person asked for less motion: `(prefers-reduced-motion: reduce)` matches, and
24
+ * the kit's overlays skip their exit animations. */
25
+ reducedMotion?: boolean;
26
+ /** `(prefers-color-scheme: dark)` matches (`light` does not). */
27
+ dark?: boolean;
28
+ /** `(prefers-contrast: more)` matches. */
29
+ moreContrast?: boolean;
30
+ }
31
+ /**
32
+ * A `window.matchMedia` for a viewport `width` CSS px wide.
33
+ *
34
+ * Width queries answer from `width`: the range syntax the kit writes for `max-*`
35
+ * (`(width < 768px)`) and every other comparison, `(min-width: …)` and `(max-width: …)`,
36
+ * in px or rem; `and` and comma lists combine as in CSS. The features in `options` answer
37
+ * as set there; every other query is false. The lists keep their listeners, and
38
+ * {@link setViewportWidth} resizes the viewport under them the way a browser window
39
+ * does: each list whose answer flips fires `change`.
40
+ *
41
+ * Hand it to the runner's own global stub where the suite undoes stubs that way —
42
+ * `vi.stubGlobal("matchMedia", viewportMatchMedia(375))` — or use
43
+ * {@link stubViewportWidth}.
44
+ */
45
+ export declare function viewportMatchMedia(width: number, options?: ViewportOptions): (query: string) => MediaQueryList;
46
+ /**
47
+ * Resize the stubbed viewport to `width` CSS px, live — the window being dragged narrower,
48
+ * a phone turned (0.35, keksdose's 0.34 report). Every list the stub in force has handed
49
+ * out answers from the new width, and each one whose answer flipped fires `change` to its
50
+ * `addEventListener` listeners, its legacy `addListener` ones and its `onchange`, as in a
51
+ * browser; a list whose answer stayed the same tells nobody. So a mounted component that
52
+ * listens to a breakpoint (`usePhoneLayout()`, `useBreakpoint()`) switches without being
53
+ * rendered again.
54
+ *
55
+ * The stub in force is whatever `window.matchMedia` is now — one {@link stubViewportWidth}
56
+ * or `vi.stubGlobal("matchMedia", viewportMatchMedia(…))` put in; its features
57
+ * (`options`) stay as they were. Throws when `matchMedia` is not one of these stubs, rather
58
+ * than resize nothing. Synchronous: wrap it in `act()` when a listener sets state.
59
+ *
60
+ * ```ts
61
+ * undo = stubViewportWidth(1280);
62
+ * render(<Page />);
63
+ * act(() => setViewportWidth(375));
64
+ * expect(screen.getByRole("list")).toBeInTheDocument(); // the cards
65
+ * ```
66
+ */
67
+ export declare function setViewportWidth(width: number): void;
68
+ /**
69
+ * Make `window.matchMedia` answer as a viewport `width` CSS px wide (see
70
+ * {@link viewportMatchMedia}), and return the undo: it puts back what was there, which
71
+ * in jsdom is nothing — no `matchMedia` at all, the desktop fallback of every kit hook.
72
+ *
73
+ * ```ts
74
+ * let undo = () => {};
75
+ * afterEach(() => undo());
76
+ * it("shows cards on a phone", () => {
77
+ * undo = stubViewportWidth(375);
78
+ * …
79
+ * });
80
+ * ```
81
+ *
82
+ * Right at every text size: at Large the kit's phone query is `(width < 960px)`, which a
83
+ * 375 px viewport matches and a 1280 px one does not, as in a browser.
84
+ */
85
+ export declare function stubViewportWidth(width: number, options?: ViewportOptions): () => void;
86
+ /** A box size for {@link ResizeObserverStub.resize}, in CSS px. */
87
+ export interface StubbedBoxSize {
88
+ width: number;
89
+ height: number;
90
+ }
91
+ /** What {@link stubResizeObserver} returns: the test drives the observers. */
92
+ export interface ResizeObserverStub {
93
+ /**
94
+ * Report `target` at `size` to every live observer watching it, as a browser does once
95
+ * layout settles: one entry, with `contentRect` and the three box sizes all `size`.
96
+ * Synchronous; wrap it in `act()` when the callback sets state.
97
+ */
98
+ resize(target: Element, size: StubbedBoxSize): void;
99
+ /** The elements some live observer watches now, each once. */
100
+ observed(): Element[];
101
+ /** Put back the `ResizeObserver` that was there before — in jsdom, none. */
102
+ restore(): void;
103
+ }
104
+ /**
105
+ * Install a `ResizeObserver` the test drives. jsdom has none, and lays nothing out, so a
106
+ * component that measures itself (a windowed list, a fitted chart, a measured grid)
107
+ * either crashes on the missing global or never learns a size. Observers here record
108
+ * what they watch and are called only by {@link ResizeObserverStub.resize}.
109
+ *
110
+ * ```ts
111
+ * const ro = stubResizeObserver();
112
+ * afterEach(() => ro.restore());
113
+ * act(() => ro.resize(screen.getByRole("list"), { width: 400, height: 320 }));
114
+ * ```
115
+ */
116
+ export declare function stubResizeObserver(): ResizeObserverStub;
@@ -0,0 +1,203 @@
1
+ "use client";
2
+ function lengthPx(value, unit) {
3
+ return unit === "px" ? Number(value) : Number(value) * 16;
4
+ }
5
+ const RANGE = /^\(\s*width\s*(<=|>=|<|>)\s*([\d.]+)(px|r?em)\s*\)$/;
6
+ const MIN_MAX = /^\(\s*(min|max)-width\s*:\s*([\d.]+)(px|r?em)\s*\)$/;
7
+ const FEATURE = /^\(\s*([a-z-]+)\s*:\s*([a-z-]+)\s*\)$/;
8
+ function condition(part, width, options) {
9
+ const q = part.trim();
10
+ if (q === "all" || q === "screen") return true;
11
+ const range = RANGE.exec(q);
12
+ if (range) {
13
+ const px = lengthPx(range[2], range[3]);
14
+ switch (range[1]) {
15
+ case "<":
16
+ return width < px;
17
+ case "<=":
18
+ return width <= px;
19
+ case ">":
20
+ return width > px;
21
+ default:
22
+ return width >= px;
23
+ }
24
+ }
25
+ const minMax = MIN_MAX.exec(q);
26
+ if (minMax) {
27
+ const px = lengthPx(minMax[2], minMax[3]);
28
+ return minMax[1] === "min" ? width >= px : width <= px;
29
+ }
30
+ const feature = FEATURE.exec(q);
31
+ if (!feature) return false;
32
+ const [, name, value] = feature;
33
+ const coarse = Boolean(options.coarse);
34
+ switch (name) {
35
+ case "pointer":
36
+ case "any-pointer":
37
+ return value === (coarse ? "coarse" : "fine");
38
+ case "hover":
39
+ case "any-hover":
40
+ return value === (coarse ? "none" : "hover");
41
+ case "prefers-reduced-motion":
42
+ return value === (options.reducedMotion ? "reduce" : "no-preference");
43
+ case "prefers-color-scheme":
44
+ return value === (options.dark ? "dark" : "light");
45
+ case "prefers-contrast":
46
+ return value === (options.moreContrast ? "more" : "no-preference");
47
+ default:
48
+ return false;
49
+ }
50
+ }
51
+ function answer(query, width, options) {
52
+ return query.split(",").some(
53
+ (alternative) => alternative.split(/\s+and\s+/).every((part) => condition(part, width, options))
54
+ );
55
+ }
56
+ const VIEWPORTS = /* @__PURE__ */ new WeakMap();
57
+ function mediaQueryList(query, viewport) {
58
+ const listeners = /* @__PURE__ */ new Set();
59
+ const list = {
60
+ matches: answer(query, viewport.width, viewport.options),
61
+ media: query,
62
+ onchange: null,
63
+ addEventListener(type, listener) {
64
+ if (type === "change" && listener) listeners.add(listener);
65
+ },
66
+ removeEventListener(type, listener) {
67
+ if (type === "change" && listener) listeners.delete(listener);
68
+ },
69
+ addListener(listener) {
70
+ if (listener) listeners.add(listener);
71
+ },
72
+ removeListener(listener) {
73
+ if (listener) listeners.delete(listener);
74
+ },
75
+ dispatchEvent(event) {
76
+ if (event.type !== "change") return true;
77
+ const self = list;
78
+ list.onchange?.call(self, event);
79
+ for (const listener of [...listeners]) {
80
+ if (typeof listener === "function") listener.call(self, event);
81
+ else listener.handleEvent(event);
82
+ }
83
+ return !event.defaultPrevented;
84
+ }
85
+ };
86
+ return list;
87
+ }
88
+ function changeEvent(list) {
89
+ const event = new Event("change");
90
+ for (const [key, value] of Object.entries({ matches: list.matches, media: list.media, target: list, currentTarget: list })) {
91
+ Object.defineProperty(event, key, { value, enumerable: true });
92
+ }
93
+ return event;
94
+ }
95
+ function viewportMatchMedia(width, options = {}) {
96
+ const viewport = { width, options, lists: /* @__PURE__ */ new Set() };
97
+ const matchMedia = (query) => {
98
+ const list = mediaQueryList(query, viewport);
99
+ viewport.lists.add(list);
100
+ return list;
101
+ };
102
+ VIEWPORTS.set(matchMedia, viewport);
103
+ return matchMedia;
104
+ }
105
+ function setViewportWidth(width) {
106
+ const viewport = typeof window === "undefined" ? void 0 : VIEWPORTS.get(window.matchMedia);
107
+ if (!viewport) {
108
+ throw new Error(
109
+ 'setViewportWidth: no viewport stub is in force \u2014 put one in first with stubViewportWidth(width), or vi.stubGlobal("matchMedia", viewportMatchMedia(width)).'
110
+ );
111
+ }
112
+ viewport.width = width;
113
+ for (const list of [...viewport.lists]) {
114
+ const matches = answer(list.media, width, viewport.options);
115
+ if (matches === list.matches) continue;
116
+ list.matches = matches;
117
+ list.dispatchEvent(changeEvent(list));
118
+ }
119
+ }
120
+ function stubViewportWidth(width, options = {}) {
121
+ const before = Object.getOwnPropertyDescriptor(window, "matchMedia");
122
+ Object.defineProperty(window, "matchMedia", {
123
+ configurable: true,
124
+ writable: true,
125
+ value: viewportMatchMedia(width, options)
126
+ });
127
+ return () => {
128
+ if (before) Object.defineProperty(window, "matchMedia", before);
129
+ else Reflect.deleteProperty(window, "matchMedia");
130
+ };
131
+ }
132
+ function stubResizeObserver() {
133
+ const live = /* @__PURE__ */ new Set();
134
+ class StubResizeObserver {
135
+ constructor(callback) {
136
+ this.callback = callback;
137
+ live.add(this);
138
+ }
139
+ callback;
140
+ targets = /* @__PURE__ */ new Set();
141
+ observe(target) {
142
+ this.targets.add(target);
143
+ }
144
+ unobserve(target) {
145
+ this.targets.delete(target);
146
+ }
147
+ disconnect() {
148
+ this.targets.clear();
149
+ live.delete(this);
150
+ }
151
+ }
152
+ const before = Object.getOwnPropertyDescriptor(globalThis, "ResizeObserver");
153
+ Object.defineProperty(globalThis, "ResizeObserver", {
154
+ configurable: true,
155
+ writable: true,
156
+ value: StubResizeObserver
157
+ });
158
+ return {
159
+ resize(target, { width, height }) {
160
+ const box = [{ inlineSize: width, blockSize: height }];
161
+ const contentRect = {
162
+ x: 0,
163
+ y: 0,
164
+ top: 0,
165
+ left: 0,
166
+ width,
167
+ height,
168
+ right: width,
169
+ bottom: height,
170
+ toJSON: () => ({ x: 0, y: 0, width, height })
171
+ };
172
+ const entry = {
173
+ target,
174
+ contentRect,
175
+ borderBoxSize: box,
176
+ contentBoxSize: box,
177
+ devicePixelContentBoxSize: box
178
+ };
179
+ for (const observer of [...live]) {
180
+ if (observer.targets.has(target)) {
181
+ observer.callback([entry], observer);
182
+ }
183
+ }
184
+ },
185
+ observed() {
186
+ const all = [];
187
+ for (const observer of live) for (const target of observer.targets) if (!all.includes(target)) all.push(target);
188
+ return all;
189
+ },
190
+ restore() {
191
+ live.clear();
192
+ if (before) Object.defineProperty(globalThis, "ResizeObserver", before);
193
+ else Reflect.deleteProperty(globalThis, "ResizeObserver");
194
+ }
195
+ };
196
+ }
197
+ export {
198
+ setViewportWidth,
199
+ stubResizeObserver,
200
+ stubViewportWidth,
201
+ viewportMatchMedia
202
+ };
203
+ //# sourceMappingURL=viewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/testing/viewport.ts"],"sourcesContent":["/**\n * Environment stubs for an app's own tests (0.34, refactor audit 2026-10, TST-10): the\n * two browser APIs jsdom does not have and the kit's layout reads — `matchMedia` and\n * `ResizeObserver`.\n *\n * Every suite rebuilt them by hand: the kit stubbed `matchMedia` in 25 files and defined\n * the same `stubPhone()` eight times, keksdose stubs it in 41, and most copies answer\n * one literal string. That breaks quietly at Large text, where `md` is 960 px and the\n * phone query the kit writes is `(width < 960px)`, not `(width < 768px)`. These answer\n * every width query from a WIDTH, as a browser does, so they stay right at every text\n * size (docs/text-size-harmonization.md §3.3). The reference is keksdose's\n * `frontend/src/test/viewport.ts`, which this generalises.\n *\n * Framework-free, like the rest of `@eifi1/ui-kit/testing`: nothing here imports vitest\n * or jest. Each stub returns its own undo, so it works under either runner, and a suite\n * that prefers `vi.stubGlobal` passes it {@link viewportMatchMedia} instead.\n */\n\n/** The media features a test may want besides the width. Each is off by default. */\nexport interface ViewportOptions {\n /** The primary pointer is a finger: `(pointer: coarse)`, `(any-pointer: coarse)` and\n * `(hover: none)` match; `(pointer: fine)` and `(hover: hover)` do not. */\n coarse?: boolean;\n /** The person asked for less motion: `(prefers-reduced-motion: reduce)` matches, and\n * the kit's overlays skip their exit animations. */\n reducedMotion?: boolean;\n /** `(prefers-color-scheme: dark)` matches (`light` does not). */\n dark?: boolean;\n /** `(prefers-contrast: more)` matches. */\n moreContrast?: boolean;\n}\n\n/** One length in CSS px. A media query's `rem`/`em` is the browser's default font size,\n * 16 px, never `<html>`'s — the kit's own `breakpointQuery` writes px. */\nfunction lengthPx(value: string, unit: string): number {\n return unit === \"px\" ? Number(value) : Number(value) * 16;\n}\n\nconst RANGE = /^\\(\\s*width\\s*(<=|>=|<|>)\\s*([\\d.]+)(px|r?em)\\s*\\)$/;\nconst MIN_MAX = /^\\(\\s*(min|max)-width\\s*:\\s*([\\d.]+)(px|r?em)\\s*\\)$/;\nconst FEATURE = /^\\(\\s*([a-z-]+)\\s*:\\s*([a-z-]+)\\s*\\)$/;\n\n/** One `(…)` condition, or a media type. */\nfunction condition(part: string, width: number, options: ViewportOptions): boolean {\n const q = part.trim();\n if (q === \"all\" || q === \"screen\") return true;\n const range = RANGE.exec(q);\n if (range) {\n const px = lengthPx(range[2], range[3]);\n switch (range[1]) {\n case \"<\":\n return width < px;\n case \"<=\":\n return width <= px;\n case \">\":\n return width > px;\n default:\n return width >= px;\n }\n }\n const minMax = MIN_MAX.exec(q);\n if (minMax) {\n const px = lengthPx(minMax[2], minMax[3]);\n return minMax[1] === \"min\" ? width >= px : width <= px;\n }\n const feature = FEATURE.exec(q);\n if (!feature) return false;\n const [, name, value] = feature;\n const coarse = Boolean(options.coarse);\n switch (name) {\n case \"pointer\":\n case \"any-pointer\":\n return value === (coarse ? \"coarse\" : \"fine\");\n case \"hover\":\n case \"any-hover\":\n return value === (coarse ? \"none\" : \"hover\");\n case \"prefers-reduced-motion\":\n return value === (options.reducedMotion ? \"reduce\" : \"no-preference\");\n case \"prefers-color-scheme\":\n return value === (options.dark ? \"dark\" : \"light\");\n case \"prefers-contrast\":\n return value === (options.moreContrast ? \"more\" : \"no-preference\");\n default:\n return false;\n }\n}\n\n/** A whole query: comma lists are alternatives, `and` joins conditions, as in CSS. */\nfunction answer(query: string, width: number, options: ViewportOptions): boolean {\n return query\n .split(\",\")\n .some((alternative) =>\n alternative.split(/\\s+and\\s+/).every((part) => condition(part, width, options)),\n );\n}\n\n/** A list {@link viewportMatchMedia} handed out: what {@link setViewportWidth} flips. */\ninterface StubMediaQueryList {\n matches: boolean;\n readonly media: string;\n onchange: ((this: MediaQueryList, event: MediaQueryListEvent) => unknown) | null;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject | null): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null): void;\n addListener(listener: EventListenerOrEventListenerObject | null): void;\n removeListener(listener: EventListenerOrEventListenerObject | null): void;\n dispatchEvent(event: Event): boolean;\n}\n\n/** One stub's viewport: its width now, and every list it has handed out. */\ninterface StubViewport {\n width: number;\n readonly options: ViewportOptions;\n readonly lists: Set<StubMediaQueryList>;\n}\n\n/** Each `matchMedia` {@link viewportMatchMedia} made → its viewport. Keyed by the function,\n * so {@link setViewportWidth} finds whichever stub is in force however it was put in. */\nconst VIEWPORTS = new WeakMap<object, StubViewport>();\n\nfunction mediaQueryList(query: string, viewport: StubViewport): StubMediaQueryList {\n // One set for both APIs: in a browser `addListener(fn)` IS `addEventListener(\"change\",\n // fn)`, so adding the same function through both registers it once.\n const listeners = new Set<EventListenerOrEventListenerObject>();\n const list: StubMediaQueryList = {\n matches: answer(query, viewport.width, viewport.options),\n media: query,\n onchange: null,\n addEventListener(type, listener) {\n if (type === \"change\" && listener) listeners.add(listener);\n },\n removeEventListener(type, listener) {\n if (type === \"change\" && listener) listeners.delete(listener);\n },\n addListener(listener) {\n if (listener) listeners.add(listener);\n },\n removeListener(listener) {\n if (listener) listeners.delete(listener);\n },\n dispatchEvent(event) {\n if (event.type !== \"change\") return true;\n const self = list as unknown as MediaQueryList;\n list.onchange?.call(self, event as MediaQueryListEvent);\n for (const listener of [...listeners]) {\n if (typeof listener === \"function\") listener.call(self, event);\n else listener.handleEvent(event);\n }\n return !event.defaultPrevented;\n },\n };\n return list;\n}\n\n/** The `change` a browser fires at a list whose answer flipped: a `MediaQueryListEvent`'s\n * `matches` and `media`, on an `Event` (jsdom has no `MediaQueryListEvent`). */\nfunction changeEvent(list: StubMediaQueryList): Event {\n const event = new Event(\"change\");\n for (const [key, value] of Object.entries({ matches: list.matches, media: list.media, target: list, currentTarget: list })) {\n Object.defineProperty(event, key, { value, enumerable: true });\n }\n return event;\n}\n\n/**\n * A `window.matchMedia` for a viewport `width` CSS px wide.\n *\n * Width queries answer from `width`: the range syntax the kit writes for `max-*`\n * (`(width < 768px)`) and every other comparison, `(min-width: …)` and `(max-width: …)`,\n * in px or rem; `and` and comma lists combine as in CSS. The features in `options` answer\n * as set there; every other query is false. The lists keep their listeners, and\n * {@link setViewportWidth} resizes the viewport under them the way a browser window\n * does: each list whose answer flips fires `change`.\n *\n * Hand it to the runner's own global stub where the suite undoes stubs that way —\n * `vi.stubGlobal(\"matchMedia\", viewportMatchMedia(375))` — or use\n * {@link stubViewportWidth}.\n */\nexport function viewportMatchMedia(\n width: number,\n options: ViewportOptions = {},\n): (query: string) => MediaQueryList {\n const viewport: StubViewport = { width, options, lists: new Set() };\n const matchMedia = (query: string) => {\n const list = mediaQueryList(query, viewport);\n viewport.lists.add(list);\n return list as unknown as MediaQueryList;\n };\n VIEWPORTS.set(matchMedia, viewport);\n return matchMedia;\n}\n\n/**\n * Resize the stubbed viewport to `width` CSS px, live — the window being dragged narrower,\n * a phone turned (0.35, keksdose's 0.34 report). Every list the stub in force has handed\n * out answers from the new width, and each one whose answer flipped fires `change` to its\n * `addEventListener` listeners, its legacy `addListener` ones and its `onchange`, as in a\n * browser; a list whose answer stayed the same tells nobody. So a mounted component that\n * listens to a breakpoint (`usePhoneLayout()`, `useBreakpoint()`) switches without being\n * rendered again.\n *\n * The stub in force is whatever `window.matchMedia` is now — one {@link stubViewportWidth}\n * or `vi.stubGlobal(\"matchMedia\", viewportMatchMedia(…))` put in; its features\n * (`options`) stay as they were. Throws when `matchMedia` is not one of these stubs, rather\n * than resize nothing. Synchronous: wrap it in `act()` when a listener sets state.\n *\n * ```ts\n * undo = stubViewportWidth(1280);\n * render(<Page />);\n * act(() => setViewportWidth(375));\n * expect(screen.getByRole(\"list\")).toBeInTheDocument(); // the cards\n * ```\n */\nexport function setViewportWidth(width: number): void {\n const viewport = typeof window === \"undefined\" ? undefined : VIEWPORTS.get(window.matchMedia);\n if (!viewport) {\n throw new Error(\n \"setViewportWidth: no viewport stub is in force — put one in first with \" +\n \"stubViewportWidth(width), or vi.stubGlobal(\\\"matchMedia\\\", viewportMatchMedia(width)).\",\n );\n }\n viewport.width = width;\n for (const list of [...viewport.lists]) {\n const matches = answer(list.media, width, viewport.options);\n if (matches === list.matches) continue;\n list.matches = matches;\n list.dispatchEvent(changeEvent(list));\n }\n}\n\n/**\n * Make `window.matchMedia` answer as a viewport `width` CSS px wide (see\n * {@link viewportMatchMedia}), and return the undo: it puts back what was there, which\n * in jsdom is nothing — no `matchMedia` at all, the desktop fallback of every kit hook.\n *\n * ```ts\n * let undo = () => {};\n * afterEach(() => undo());\n * it(\"shows cards on a phone\", () => {\n * undo = stubViewportWidth(375);\n * …\n * });\n * ```\n *\n * Right at every text size: at Large the kit's phone query is `(width < 960px)`, which a\n * 375 px viewport matches and a 1280 px one does not, as in a browser.\n */\nexport function stubViewportWidth(width: number, options: ViewportOptions = {}): () => void {\n const before = Object.getOwnPropertyDescriptor(window, \"matchMedia\");\n Object.defineProperty(window, \"matchMedia\", {\n configurable: true,\n writable: true,\n value: viewportMatchMedia(width, options),\n });\n return () => {\n if (before) Object.defineProperty(window, \"matchMedia\", before);\n else Reflect.deleteProperty(window, \"matchMedia\");\n };\n}\n\n/** A box size for {@link ResizeObserverStub.resize}, in CSS px. */\nexport interface StubbedBoxSize {\n width: number;\n height: number;\n}\n\n/** What {@link stubResizeObserver} returns: the test drives the observers. */\nexport interface ResizeObserverStub {\n /**\n * Report `target` at `size` to every live observer watching it, as a browser does once\n * layout settles: one entry, with `contentRect` and the three box sizes all `size`.\n * Synchronous; wrap it in `act()` when the callback sets state.\n */\n resize(target: Element, size: StubbedBoxSize): void;\n /** The elements some live observer watches now, each once. */\n observed(): Element[];\n /** Put back the `ResizeObserver` that was there before — in jsdom, none. */\n restore(): void;\n}\n\n/**\n * Install a `ResizeObserver` the test drives. jsdom has none, and lays nothing out, so a\n * component that measures itself (a windowed list, a fitted chart, a measured grid)\n * either crashes on the missing global or never learns a size. Observers here record\n * what they watch and are called only by {@link ResizeObserverStub.resize}.\n *\n * ```ts\n * const ro = stubResizeObserver();\n * afterEach(() => ro.restore());\n * act(() => ro.resize(screen.getByRole(\"list\"), { width: 400, height: 320 }));\n * ```\n */\nexport function stubResizeObserver(): ResizeObserverStub {\n const live = new Set<StubResizeObserver>();\n\n class StubResizeObserver {\n readonly targets = new Set<Element>();\n constructor(readonly callback: ResizeObserverCallback) {\n live.add(this);\n }\n observe(target: Element) {\n this.targets.add(target);\n }\n unobserve(target: Element) {\n this.targets.delete(target);\n }\n disconnect() {\n this.targets.clear();\n live.delete(this);\n }\n }\n\n const before = Object.getOwnPropertyDescriptor(globalThis, \"ResizeObserver\");\n Object.defineProperty(globalThis, \"ResizeObserver\", {\n configurable: true,\n writable: true,\n value: StubResizeObserver,\n });\n\n return {\n resize(target, { width, height }) {\n const box = [{ inlineSize: width, blockSize: height }];\n const contentRect = {\n x: 0,\n y: 0,\n top: 0,\n left: 0,\n width,\n height,\n right: width,\n bottom: height,\n toJSON: () => ({ x: 0, y: 0, width, height }),\n };\n const entry = {\n target,\n contentRect,\n borderBoxSize: box,\n contentBoxSize: box,\n devicePixelContentBoxSize: box,\n } as unknown as ResizeObserverEntry;\n for (const observer of [...live]) {\n if (observer.targets.has(target)) {\n observer.callback([entry], observer as unknown as ResizeObserver);\n }\n }\n },\n observed() {\n const all: Element[] = [];\n for (const observer of live) for (const target of observer.targets) if (!all.includes(target)) all.push(target);\n return all;\n },\n restore() {\n live.clear();\n if (before) Object.defineProperty(globalThis, \"ResizeObserver\", before);\n else Reflect.deleteProperty(globalThis, \"ResizeObserver\");\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -5,23 +5,23 @@
5
5
  * exist — a series with no stroke at all. A fractional index is truncated, and one
6
6
  * that is not a number (NaN, ±Infinity — an `indexOf` miss divided by something)
7
7
  * takes the first colour rather than `var(--chart-NaN)`. */
8
- declare function paletteFor(index: number): string;
8
+ export declare function paletteFor(index: number): string;
9
9
  /** Semantic money colours, theme-aware via tokens. Pair with +/- and arrow
10
10
  cues at the call site so colour is never the only signal (CVD). */
11
- declare const CHART_COLORS: {
11
+ export declare const CHART_COLORS: {
12
12
  readonly income: "var(--money-income)";
13
13
  readonly expense: "var(--money-expense)";
14
14
  readonly net: "var(--money-net)";
15
15
  readonly assigned: "var(--brand)";
16
16
  readonly activity: "var(--money-expense)";
17
17
  };
18
- declare const PALETTE_HEX: {
18
+ export declare const PALETTE_HEX: {
19
19
  readonly light: readonly ["#332288", "#88ccee", "#44aa99", "#117733", "#999933", "#ddcc77", "#cc6677", "#882255", "#aa4499"];
20
20
  readonly dark: readonly ["#7e72d6", "#9fd8f2", "#5fc4b0", "#3fa45f", "#bfbf5e", "#e8dda0", "#e08c9a", "#c25a78", "#cc78be"];
21
21
  };
22
22
  /** A heatmap's interpolation stops for one theme. Open string fields so any
23
23
  palette preset (not just the built-in default) can supply its own stops. */
24
- interface HeatStops {
24
+ export interface HeatStops {
25
25
  neutral: string;
26
26
  under: string;
27
27
  over: string;
@@ -31,7 +31,7 @@ interface HeatStops {
31
31
  }
32
32
  /** Diverging (variance: under←0→over) and sequential (spending intensity)
33
33
  heatmap stops, per theme. Teal = under/good, amber = over/spend = bad. */
34
- declare const HEATMAP_HEX: {
34
+ export declare const HEATMAP_HEX: {
35
35
  readonly light: {
36
36
  readonly neutral: "#f1e7d2";
37
37
  readonly under: "#0b6650";
@@ -50,7 +50,7 @@ declare const HEATMAP_HEX: {
50
50
  };
51
51
  };
52
52
  /** Linear interpolate two #rrggbb hexes; `t` in [0,1]. Returns #rrggbb. */
53
- declare function lerpHex(a: string, b: string, t: number): string;
53
+ export declare function lerpHex(a: string, b: string, t: number): string;
54
54
  /** Pick a legible text colour (near-black / near-white) for a solid hex fill, by
55
55
  MEASURING both against it and keeping the one that wins.
56
56
 
@@ -68,6 +68,4 @@ declare function lerpHex(a: string, b: string, t: number): string;
68
68
  category with zero assigned and positive activity — a refund). Picking a constant
69
69
  instead is what produced the earlier bug: the unparsed fill fell through to the
70
70
  light ink, near-white on a near-white cell, and the figure was invisible. */
71
- declare function textOn(hex: string): string;
72
-
73
- export { CHART_COLORS, HEATMAP_HEX, type HeatStops, PALETTE_HEX, lerpHex, paletteFor, textOn };
71
+ export declare function textOn(hex: string): string;
@@ -18,13 +18,13 @@
18
18
  *
19
19
  * Reference: Björn Ottosson, "A perceptual color space for image processing" (2020).
20
20
  */
21
- interface Rgb {
21
+ export interface Rgb {
22
22
  /** 0–255. */
23
23
  r: number;
24
24
  g: number;
25
25
  b: number;
26
26
  }
27
- interface Oklch {
27
+ export interface Oklch {
28
28
  /** Perceptual lightness, 0–1. */
29
29
  l: number;
30
30
  /** Chroma, 0–~0.4 in sRGB. */
@@ -33,9 +33,9 @@ interface Oklch {
33
33
  h: number;
34
34
  }
35
35
  /** `#rgb` or `#rrggbb` → components, or null when it is neither. */
36
- declare function parseHex(hex: string): Rgb | null;
37
- declare function toHex({ r, g, b }: Rgb): string;
38
- declare function rgbToOklch(rgb: Rgb): Oklch;
36
+ export declare function parseHex(hex: string): Rgb | null;
37
+ export declare function toHex({ r, g, b }: Rgb): string;
38
+ export declare function rgbToOklch(rgb: Rgb): Oklch;
39
39
  /**
40
40
  * OKLCH → sRGB, reducing CHROMA until the colour fits.
41
41
  *
@@ -45,13 +45,13 @@ declare function rgbToOklch(rgb: Rgb): Oklch;
45
45
  * recognisably the one that was asked for, which matters when the whole point is to
46
46
  * derive a family at a fixed lightness.
47
47
  */
48
- declare function oklchToRgb(target: Oklch): Rgb;
49
- declare function hexToOklch(hex: string): Oklch | null;
50
- declare function oklchToHex(lch: Oklch): string;
48
+ export declare function oklchToRgb(target: Oklch): Rgb;
49
+ export declare function hexToOklch(hex: string): Oklch | null;
50
+ export declare function oklchToHex(lch: Oklch): string;
51
51
  /** WCAG 2.x relative luminance. */
52
- declare function luminance(rgb: Rgb): number;
52
+ export declare function luminance(rgb: Rgb): number;
53
53
  /** WCAG 2.x contrast ratio, 1–21. Order-independent. */
54
- declare function contrast(a: Rgb | string, b: Rgb | string): number;
54
+ export declare function contrast(a: Rgb | string, b: Rgb | string): number;
55
55
  /**
56
56
  * The lightness at hue `h`, chroma `c` that hits `target` contrast against `against`.
57
57
  *
@@ -65,14 +65,12 @@ declare function contrast(a: Rgb | string, b: Rgb | string): number;
65
65
  * it returns the extreme end, and the caller should check the contrast it actually got
66
66
  * rather than assuming success — `deriveTokenSet` does exactly that.
67
67
  */
68
- declare function solveLightness(target: number, against: Rgb, h: number, c: number, direction: "lighter" | "darker"): number;
69
- type CvdType = "protanopia" | "deuteranopia" | "tritanopia";
70
- declare function simulateCvd(rgb: Rgb, type: CvdType): Rgb;
68
+ export declare function solveLightness(target: number, against: Rgb, h: number, c: number, direction: "lighter" | "darker"): number;
69
+ export type CvdType = "protanopia" | "deuteranopia" | "tritanopia";
70
+ export declare function simulateCvd(rgb: Rgb, type: CvdType): Rgb;
71
71
  /**
72
72
  * Perceptual distance in OKLab, which is what that space is FOR: a Euclidean distance
73
73
  * in OKLab corresponds far more closely to "how different do these look" than one in
74
74
  * sRGB, where the same numeric gap is obvious among greens and invisible among blues.
75
75
  */
76
- declare function deltaE(a: Rgb, b: Rgb): number;
77
-
78
- export { type CvdType, type Oklch, type Rgb, contrast, deltaE, hexToOklch, luminance, oklchToHex, oklchToRgb, parseHex, rgbToOklch, simulateCvd, solveLightness, toHex };
76
+ export declare function deltaE(a: Rgb, b: Rgb): number;
@@ -86,9 +86,10 @@ function solveLightness(target, against, h, c, direction) {
86
86
  const bgL = rgbToOklch(against).l;
87
87
  let lo = direction === "darker" ? 0 : bgL;
88
88
  let hi = direction === "darker" ? bgL : 1;
89
+ const bg = toHex(against);
89
90
  for (let i = 0; i < 24; i++) {
90
91
  const mid = (lo + hi) / 2;
91
- const got = contrast(oklchToRgb({ l: mid, c, h }), against);
92
+ const got = contrast(toHex(oklchToRgb({ l: mid, c, h })), bg);
92
93
  if (got < target) {
93
94
  if (direction === "darker") hi = mid;
94
95
  else lo = mid;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/theme/color.ts"],"sourcesContent":["/**\n * Colour maths for the palette system: sRGB ↔ OKLab ↔ OKLCH, WCAG contrast, gamut\n * clipping, and colour-vision-deficiency simulation.\n *\n * Dependency-free on purpose. This package already ships 48MB of runtime dependencies\n * for a 1.4MB library, and a colour-space conversion is forty lines of arithmetic that\n * will not change — importing culori or chroma-js to get it would be the largest\n * dependency in the kit, paid for by every consumer, to avoid writing down formulas\n * that were published once and are now fixed.\n *\n * **Why OKLCH rather than HSL.** HSL's \"lightness\" is not lightness: `hsl(60 100% 50%)`\n * (yellow) and `hsl(240 100% 50%)` (blue) claim the same 50% and differ by a factor of\n * about twelve in perceived brightness. Any scheme that derives a palette by holding HSL\n * lightness constant therefore produces a set that looks wildly uneven, and any scheme\n * that solves for contrast in HSL has to solve separately per hue. OKLab is built so a\n * given L means the same apparent lightness at every hue, which is what makes \"same\n * lightness, different hue\" a usable rule and what makes a contrast solve converge.\n *\n * Reference: Björn Ottosson, \"A perceptual color space for image processing\" (2020).\n */\n\nexport interface Rgb {\n /** 0–255. */\n r: number;\n g: number;\n b: number;\n}\n\nexport interface Oklch {\n /** Perceptual lightness, 0–1. */\n l: number;\n /** Chroma, 0–~0.4 in sRGB. */\n c: number;\n /** Hue angle in degrees, 0–360. */\n h: number;\n}\n\n/* ── sRGB ─────────────────────────────────────────────────────────────────── */\n\n/** `#rgb` or `#rrggbb` → components, or null when it is neither. */\nexport function parseHex(hex: string): Rgb | null {\n const h = hex.trim().replace(/^#/, \"\");\n const full =\n h.length === 3\n ? h\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : h;\n if (!/^[0-9a-fA-F]{6}$/.test(full)) return null;\n return {\n r: parseInt(full.slice(0, 2), 16),\n g: parseInt(full.slice(2, 4), 16),\n b: parseInt(full.slice(4, 6), 16),\n };\n}\n\nexport function toHex({ r, g, b }: Rgb): string {\n const part = (v: number) =>\n Math.max(0, Math.min(255, Math.round(v)))\n .toString(16)\n .padStart(2, \"0\");\n return `#${part(r)}${part(g)}${part(b)}`;\n}\n\n/** sRGB 0–255 → linear-light 0–1. The transfer function, not a gamma of 2.2. */\nfunction toLinear(channel: number): number {\n const c = channel / 255;\n return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n}\n\nfunction fromLinear(channel: number): number {\n const c = channel <= 0.0031308 ? 12.92 * channel : 1.055 * channel ** (1 / 2.4) - 0.055;\n return c * 255;\n}\n\n/* ── OKLab / OKLCH ────────────────────────────────────────────────────────── */\n\nexport function rgbToOklch(rgb: Rgb): Oklch {\n const r = toLinear(rgb.r);\n const g = toLinear(rgb.g);\n const b = toLinear(rgb.b);\n\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s;\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s;\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s;\n\n const c = Math.sqrt(A * A + B * B);\n // Hue is meaningless at zero chroma; 0 keeps it stable rather than NaN-adjacent.\n const h = c < 1e-6 ? 0 : ((Math.atan2(B, A) * 180) / Math.PI + 360) % 360;\n return { l: L, c, h };\n}\n\n/** OKLCH → sRGB, WITHOUT gamut clipping. May return components outside 0–255. */\nfunction oklchToRgbRaw({ l, c, h }: Oklch): Rgb {\n const rad = (h * Math.PI) / 180;\n const A = c * Math.cos(rad);\n const B = c * Math.sin(rad);\n\n const l_ = (l + 0.3963377774 * A + 0.2158037573 * B) ** 3;\n const m_ = (l - 0.1055613458 * A - 0.0638541728 * B) ** 3;\n const s_ = (l - 0.0894841775 * A - 1.291485548 * B) ** 3;\n\n return {\n r: fromLinear(4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_),\n g: fromLinear(-1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_),\n b: fromLinear(-0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_),\n };\n}\n\nfunction inGamut({ r, g, b }: Rgb): boolean {\n const ok = (v: number) => v >= -0.5 && v <= 255.5;\n return ok(r) && ok(g) && ok(b);\n}\n\n/**\n * OKLCH → sRGB, reducing CHROMA until the colour fits.\n *\n * Clamping the channels instead — the obvious approach — shifts hue and lightness\n * together and unpredictably: a saturated blue that overflows clips to a different blue\n * that is also lighter. Holding L and h and giving up chroma keeps the colour\n * recognisably the one that was asked for, which matters when the whole point is to\n * derive a family at a fixed lightness.\n */\nexport function oklchToRgb(target: Oklch): Rgb {\n const direct = oklchToRgbRaw(target);\n if (inGamut(direct)) return direct;\n\n let lo = 0;\n let hi = target.c;\n // 20 halvings resolves chroma to ~4e-7, far below a perceptible step.\n for (let i = 0; i < 20; i++) {\n const mid = (lo + hi) / 2;\n if (inGamut(oklchToRgbRaw({ ...target, c: mid }))) lo = mid;\n else hi = mid;\n }\n return oklchToRgbRaw({ ...target, c: lo });\n}\n\nexport function hexToOklch(hex: string): Oklch | null {\n const rgb = parseHex(hex);\n return rgb ? rgbToOklch(rgb) : null;\n}\n\nexport function oklchToHex(lch: Oklch): string {\n return toHex(oklchToRgb(lch));\n}\n\n/* ── WCAG contrast ────────────────────────────────────────────────────────── */\n\n/** WCAG 2.x relative luminance. */\nexport function luminance(rgb: Rgb): number {\n return 0.2126 * toLinear(rgb.r) + 0.7152 * toLinear(rgb.g) + 0.0722 * toLinear(rgb.b);\n}\n\n/** WCAG 2.x contrast ratio, 1–21. Order-independent. */\nexport function contrast(a: Rgb | string, b: Rgb | string): number {\n const ra = typeof a === \"string\" ? parseHex(a) : a;\n const rb = typeof b === \"string\" ? parseHex(b) : b;\n if (!ra || !rb) return 1;\n const la = luminance(ra);\n const lb = luminance(rb);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/**\n * The lightness at hue `h`, chroma `c` that hits `target` contrast against `against`.\n *\n * Binary search rather than algebra: OKLab lightness does not map to WCAG luminance in\n * closed form, and it is not even monotonic in the general case once gamut clipping\n * starts reducing chroma. It IS monotonic over the half-range we search — away from the\n * background — which is why the direction is chosen first.\n *\n * Returns the best lightness found. If the target is unreachable at this hue and chroma\n * (a saturated yellow cannot make 7:1 against white at any lightness without going grey)\n * it returns the extreme end, and the caller should check the contrast it actually got\n * rather than assuming success — `deriveTokenSet` does exactly that.\n */\nexport function solveLightness(\n target: number,\n against: Rgb,\n h: number,\n c: number,\n direction: \"lighter\" | \"darker\",\n): number {\n // The half-range on the far side of the background from where we are heading.\n // Going darker, that is [0, backgroundL]; going lighter, [backgroundL, 1]. Contrast is\n // monotonic across each of those halves, which is what makes a binary search valid —\n // it is NOT monotonic across the whole 0..1 range, because it turns around at the\n // background's own lightness.\n const bgL = rgbToOklch(against).l;\n let lo = direction === \"darker\" ? 0 : bgL;\n let hi = direction === \"darker\" ? bgL : 1;\n\n for (let i = 0; i < 24; i++) {\n const mid = (lo + hi) / 2;\n const got = contrast(oklchToRgb({ l: mid, c, h }), against);\n // Moving AWAY from the background raises contrast; which way that is depends on\n // whether we are going lighter or darker.\n if (got < target) {\n if (direction === \"darker\") hi = mid;\n else lo = mid;\n } else if (direction === \"darker\") lo = mid;\n else hi = mid;\n }\n return direction === \"darker\" ? lo : hi;\n}\n\n/* ── Colour-vision deficiency ─────────────────────────────────────────────── */\n\nexport type CvdType = \"protanopia\" | \"deuteranopia\" | \"tritanopia\";\n\n/**\n * Brettel/Viénot-style dichromat simulation in linear RGB.\n *\n * An approximation, and a well-established one. It is here so the kit can FAIL a\n * categorical ramp that two of its series become indistinguishable under, rather than\n * asserting CVD-safety in a comment the way `chart-palette.ts` did — the audit found\n * four of the nine default light chart hues below the 3:1 they were claimed to hold.\n */\nconst CVD_MATRIX: Record<CvdType, number[][]> = {\n protanopia: [\n [0.1705, 0.8295, 0],\n [0.1705, 0.8295, 0],\n [-0.0045, 0.0045, 1],\n ],\n deuteranopia: [\n [0.33066, 0.66934, 0],\n [0.33066, 0.66934, 0],\n [-0.02785, 0.02785, 1],\n ],\n tritanopia: [\n [1, 0.1273, -0.1273],\n [0, 0.8739, 0.1261],\n [0, 0.8739, 0.1261],\n ],\n};\n\nexport function simulateCvd(rgb: Rgb, type: CvdType): Rgb {\n const m = CVD_MATRIX[type];\n const [r, g, b] = [toLinear(rgb.r), toLinear(rgb.g), toLinear(rgb.b)];\n return {\n r: fromLinear(m[0][0] * r + m[0][1] * g + m[0][2] * b),\n g: fromLinear(m[1][0] * r + m[1][1] * g + m[1][2] * b),\n b: fromLinear(m[2][0] * r + m[2][1] * g + m[2][2] * b),\n };\n}\n\n/**\n * Perceptual distance in OKLab, which is what that space is FOR: a Euclidean distance\n * in OKLab corresponds far more closely to \"how different do these look\" than one in\n * sRGB, where the same numeric gap is obvious among greens and invisible among blues.\n */\nexport function deltaE(a: Rgb, b: Rgb): number {\n const A = rgbToOklch(a);\n const B = rgbToOklch(b);\n const aA = A.c * Math.cos((A.h * Math.PI) / 180);\n const aB = A.c * Math.sin((A.h * Math.PI) / 180);\n const bA = B.c * Math.cos((B.h * Math.PI) / 180);\n const bB = B.c * Math.sin((B.h * Math.PI) / 180);\n return Math.hypot(A.l - B.l, aA - bA, aB - bB);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/theme/color.ts"],"sourcesContent":["/**\n * Colour maths for the palette system: sRGB ↔ OKLab ↔ OKLCH, WCAG contrast, gamut\n * clipping, and colour-vision-deficiency simulation.\n *\n * Dependency-free on purpose. This package already ships 48MB of runtime dependencies\n * for a 1.4MB library, and a colour-space conversion is forty lines of arithmetic that\n * will not change — importing culori or chroma-js to get it would be the largest\n * dependency in the kit, paid for by every consumer, to avoid writing down formulas\n * that were published once and are now fixed.\n *\n * **Why OKLCH rather than HSL.** HSL's \"lightness\" is not lightness: `hsl(60 100% 50%)`\n * (yellow) and `hsl(240 100% 50%)` (blue) claim the same 50% and differ by a factor of\n * about twelve in perceived brightness. Any scheme that derives a palette by holding HSL\n * lightness constant therefore produces a set that looks wildly uneven, and any scheme\n * that solves for contrast in HSL has to solve separately per hue. OKLab is built so a\n * given L means the same apparent lightness at every hue, which is what makes \"same\n * lightness, different hue\" a usable rule and what makes a contrast solve converge.\n *\n * Reference: Björn Ottosson, \"A perceptual color space for image processing\" (2020).\n */\n\nexport interface Rgb {\n /** 0–255. */\n r: number;\n g: number;\n b: number;\n}\n\nexport interface Oklch {\n /** Perceptual lightness, 0–1. */\n l: number;\n /** Chroma, 0–~0.4 in sRGB. */\n c: number;\n /** Hue angle in degrees, 0–360. */\n h: number;\n}\n\n/* ── sRGB ─────────────────────────────────────────────────────────────────── */\n\n/** `#rgb` or `#rrggbb` → components, or null when it is neither. */\nexport function parseHex(hex: string): Rgb | null {\n const h = hex.trim().replace(/^#/, \"\");\n const full =\n h.length === 3\n ? h\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : h;\n if (!/^[0-9a-fA-F]{6}$/.test(full)) return null;\n return {\n r: parseInt(full.slice(0, 2), 16),\n g: parseInt(full.slice(2, 4), 16),\n b: parseInt(full.slice(4, 6), 16),\n };\n}\n\nexport function toHex({ r, g, b }: Rgb): string {\n const part = (v: number) =>\n Math.max(0, Math.min(255, Math.round(v)))\n .toString(16)\n .padStart(2, \"0\");\n return `#${part(r)}${part(g)}${part(b)}`;\n}\n\n/** sRGB 0–255 → linear-light 0–1. The transfer function, not a gamma of 2.2. */\nfunction toLinear(channel: number): number {\n const c = channel / 255;\n return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n}\n\nfunction fromLinear(channel: number): number {\n const c = channel <= 0.0031308 ? 12.92 * channel : 1.055 * channel ** (1 / 2.4) - 0.055;\n return c * 255;\n}\n\n/* ── OKLab / OKLCH ────────────────────────────────────────────────────────── */\n\nexport function rgbToOklch(rgb: Rgb): Oklch {\n const r = toLinear(rgb.r);\n const g = toLinear(rgb.g);\n const b = toLinear(rgb.b);\n\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s;\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s;\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s;\n\n const c = Math.sqrt(A * A + B * B);\n // Hue is meaningless at zero chroma; 0 keeps it stable rather than NaN-adjacent.\n const h = c < 1e-6 ? 0 : ((Math.atan2(B, A) * 180) / Math.PI + 360) % 360;\n return { l: L, c, h };\n}\n\n/** OKLCH → sRGB, WITHOUT gamut clipping. May return components outside 0–255. */\nfunction oklchToRgbRaw({ l, c, h }: Oklch): Rgb {\n const rad = (h * Math.PI) / 180;\n const A = c * Math.cos(rad);\n const B = c * Math.sin(rad);\n\n const l_ = (l + 0.3963377774 * A + 0.2158037573 * B) ** 3;\n const m_ = (l - 0.1055613458 * A - 0.0638541728 * B) ** 3;\n const s_ = (l - 0.0894841775 * A - 1.291485548 * B) ** 3;\n\n return {\n r: fromLinear(4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_),\n g: fromLinear(-1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_),\n b: fromLinear(-0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_),\n };\n}\n\nfunction inGamut({ r, g, b }: Rgb): boolean {\n const ok = (v: number) => v >= -0.5 && v <= 255.5;\n return ok(r) && ok(g) && ok(b);\n}\n\n/**\n * OKLCH → sRGB, reducing CHROMA until the colour fits.\n *\n * Clamping the channels instead — the obvious approach — shifts hue and lightness\n * together and unpredictably: a saturated blue that overflows clips to a different blue\n * that is also lighter. Holding L and h and giving up chroma keeps the colour\n * recognisably the one that was asked for, which matters when the whole point is to\n * derive a family at a fixed lightness.\n */\nexport function oklchToRgb(target: Oklch): Rgb {\n const direct = oklchToRgbRaw(target);\n if (inGamut(direct)) return direct;\n\n let lo = 0;\n let hi = target.c;\n // 20 halvings resolves chroma to ~4e-7, far below a perceptible step.\n for (let i = 0; i < 20; i++) {\n const mid = (lo + hi) / 2;\n if (inGamut(oklchToRgbRaw({ ...target, c: mid }))) lo = mid;\n else hi = mid;\n }\n return oklchToRgbRaw({ ...target, c: lo });\n}\n\nexport function hexToOklch(hex: string): Oklch | null {\n const rgb = parseHex(hex);\n return rgb ? rgbToOklch(rgb) : null;\n}\n\nexport function oklchToHex(lch: Oklch): string {\n return toHex(oklchToRgb(lch));\n}\n\n/* ── WCAG contrast ────────────────────────────────────────────────────────── */\n\n/** WCAG 2.x relative luminance. */\nexport function luminance(rgb: Rgb): number {\n return 0.2126 * toLinear(rgb.r) + 0.7152 * toLinear(rgb.g) + 0.0722 * toLinear(rgb.b);\n}\n\n/** WCAG 2.x contrast ratio, 1–21. Order-independent. */\nexport function contrast(a: Rgb | string, b: Rgb | string): number {\n const ra = typeof a === \"string\" ? parseHex(a) : a;\n const rb = typeof b === \"string\" ? parseHex(b) : b;\n if (!ra || !rb) return 1;\n const la = luminance(ra);\n const lb = luminance(rb);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/**\n * The lightness at hue `h`, chroma `c` that hits `target` contrast against `against`.\n *\n * Binary search rather than algebra: OKLab lightness does not map to WCAG luminance in\n * closed form, and it is not even monotonic in the general case once gamut clipping\n * starts reducing chroma. It IS monotonic over the half-range we search — away from the\n * background — which is why the direction is chosen first.\n *\n * Returns the best lightness found. If the target is unreachable at this hue and chroma\n * (a saturated yellow cannot make 7:1 against white at any lightness without going grey)\n * it returns the extreme end, and the caller should check the contrast it actually got\n * rather than assuming success — `deriveTokenSet` does exactly that.\n */\nexport function solveLightness(\n target: number,\n against: Rgb,\n h: number,\n c: number,\n direction: \"lighter\" | \"darker\",\n): number {\n // The half-range on the far side of the background from where we are heading.\n // Going darker, that is [0, backgroundL]; going lighter, [backgroundL, 1]. Contrast is\n // monotonic across each of those halves, which is what makes a binary search valid —\n // it is NOT monotonic across the whole 0..1 range, because it turns around at the\n // background's own lightness.\n const bgL = rgbToOklch(against).l;\n let lo = direction === \"darker\" ? 0 : bgL;\n let hi = direction === \"darker\" ? bgL : 1;\n // Measured on the HEX both colours are painted as, never on the float (round 0.34\n // BUG-8): a solve that stopped on the float colour rounded to a hex just under the\n // target — brand #000000's light income figure solved to 4.5000 and shipped at 4.49:1.\n // Rounding keeps contrast monotonic in each half, so the bisection still holds, and\n // the side it returns is the side whose hex clears the target.\n const bg = toHex(against);\n\n for (let i = 0; i < 24; i++) {\n const mid = (lo + hi) / 2;\n const got = contrast(toHex(oklchToRgb({ l: mid, c, h })), bg);\n // Moving AWAY from the background raises contrast; which way that is depends on\n // whether we are going lighter or darker.\n if (got < target) {\n if (direction === \"darker\") hi = mid;\n else lo = mid;\n } else if (direction === \"darker\") lo = mid;\n else hi = mid;\n }\n return direction === \"darker\" ? lo : hi;\n}\n\n/* ── Colour-vision deficiency ─────────────────────────────────────────────── */\n\nexport type CvdType = \"protanopia\" | \"deuteranopia\" | \"tritanopia\";\n\n/**\n * Brettel/Viénot-style dichromat simulation in linear RGB.\n *\n * An approximation, and a well-established one. It is here so the kit can FAIL a\n * categorical ramp that two of its series become indistinguishable under, rather than\n * asserting CVD-safety in a comment the way `chart-palette.ts` did — the audit found\n * four of the nine default light chart hues below the 3:1 they were claimed to hold.\n */\nconst CVD_MATRIX: Record<CvdType, number[][]> = {\n protanopia: [\n [0.1705, 0.8295, 0],\n [0.1705, 0.8295, 0],\n [-0.0045, 0.0045, 1],\n ],\n deuteranopia: [\n [0.33066, 0.66934, 0],\n [0.33066, 0.66934, 0],\n [-0.02785, 0.02785, 1],\n ],\n tritanopia: [\n [1, 0.1273, -0.1273],\n [0, 0.8739, 0.1261],\n [0, 0.8739, 0.1261],\n ],\n};\n\nexport function simulateCvd(rgb: Rgb, type: CvdType): Rgb {\n const m = CVD_MATRIX[type];\n const [r, g, b] = [toLinear(rgb.r), toLinear(rgb.g), toLinear(rgb.b)];\n return {\n r: fromLinear(m[0][0] * r + m[0][1] * g + m[0][2] * b),\n g: fromLinear(m[1][0] * r + m[1][1] * g + m[1][2] * b),\n b: fromLinear(m[2][0] * r + m[2][1] * g + m[2][2] * b),\n };\n}\n\n/**\n * Perceptual distance in OKLab, which is what that space is FOR: a Euclidean distance\n * in OKLab corresponds far more closely to \"how different do these look\" than one in\n * sRGB, where the same numeric gap is obvious among greens and invisible among blues.\n */\nexport function deltaE(a: Rgb, b: Rgb): number {\n const A = rgbToOklch(a);\n const B = rgbToOklch(b);\n const aA = A.c * Math.cos((A.h * Math.PI) / 180);\n const aB = A.c * Math.sin((A.h * Math.PI) / 180);\n const bA = B.c * Math.cos((B.h * Math.PI) / 180);\n const bB = B.c * Math.sin((B.h * Math.PI) / 180);\n return Math.hypot(A.l - B.l, aA - bA, aB - bB);\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,4 @@
1
- import { TokenSet } from './palette-presets.js';
2
- import './chart-palette.js';
3
-
1
+ import type { TokenSet } from "./palette-presets.js";
4
2
  /**
5
3
  * The "More contrast" step on a token set (docs/text-size-harmonization.md §5, §10.5).
6
4
  * INTERNAL — `applyTokenSet` and the contrast layer share it; it is not re-exported.
@@ -23,8 +21,8 @@ import './chart-palette.js';
23
21
  * `--border-strong` stays derived in tokens.css and grows with it.
24
22
  */
25
23
  /** The custom properties a contrast step writes. */
26
- declare const CONTRAST_STEPPED_VARS: readonly ["--text-secondary", "--text-muted", "--text-placeholder", "--border"];
27
- interface ContrastStep {
24
+ export declare const CONTRAST_STEPPED_VARS: readonly ["--text-secondary", "--text-muted", "--text-placeholder", "--border"];
25
+ export interface ContrastStep {
28
26
  textSecondary: string;
29
27
  textMuted: string;
30
28
  textPlaceholder: string;
@@ -34,7 +32,7 @@ interface ContrastStep {
34
32
  * use, so a stepped value sits where the stylesheet would have put it. A colour that is
35
33
  * not hex (a consumer's own token set) comes back unmixed. The deriver mixes with it
36
34
  * too (`--bg-hover`, `--brand-muted`, `--brand-bg`, `--brand-bg-hover`). */
37
- declare function mix(a: string, b: string, p: number): string;
35
+ export declare function mix(a: string, b: string, p: number): string;
38
36
  /**
39
37
  * `--bg-hover` in tokens.css: this share of `--text-primary` mixed into `--bg-surface`.
40
38
  *
@@ -47,9 +45,9 @@ declare function mix(a: string, b: string, p: number): string;
47
45
  * solves the money colours against this fill, and tokens-css-audit.test.ts measures
48
46
  * every text role on it in every shipped preset, so the two cannot part.
49
47
  */
50
- declare const HOVER_INK = 0.055;
48
+ export declare const HOVER_INK = 0.055;
51
49
  /** The card's hover fill (`--bg-hover`) for `t`, as tokens.css mixes it. */
52
- declare function hoverFill(t: Pick<TokenSet, "textPrimary" | "bgSurface">): string;
50
+ export declare function hoverFill(t: Pick<TokenSet, "textPrimary" | "bgSurface">): string;
53
51
  /**
54
52
  * `--brand-muted` in tokens.css: this share of `--brand` mixed into `--text-primary`.
55
53
  *
@@ -61,24 +59,22 @@ declare function hoverFill(t: Pick<TokenSet, "textPrimary" | "bgSurface">): stri
61
59
  * lighten: by the time the text cleared 4.5:1 the hover sat 1.00:1 from the chip it
62
60
  * hovers. So the text moves toward the ink, as `--bg-hover` moved for its text.
63
61
  */
64
- declare const BRAND_MUTED_SHARE = 0.62;
62
+ export declare const BRAND_MUTED_SHARE = 0.62;
65
63
  /** `--brand-bg` and `--brand-bg-hover` in tokens.css: these shares of `--brand` mixed
66
64
  * into `--bg-surface`. */
67
- declare const BRAND_BG_SHARE = 0.14;
68
- declare const BRAND_BG_HOVER_SHARE = 0.24;
65
+ export declare const BRAND_BG_SHARE = 0.14;
66
+ export declare const BRAND_BG_HOVER_SHARE = 0.24;
69
67
  /** `--brand-muted`, `--brand-bg` and `--brand-bg-hover` for `t`, as tokens.css mixes them.
70
68
  * tokens-css-audit.test.ts holds the three shares equal to the stylesheet's. */
71
- declare function brandSoft(t: Pick<TokenSet, "brand" | "textPrimary" | "bgSurface">): {
69
+ export declare function brandSoft(t: Pick<TokenSet, "brand" | "textPrimary" | "bgSurface">): {
72
70
  brandMuted: string;
73
71
  brandBg: string;
74
72
  brandBgHover: string;
75
73
  };
76
74
  /** The four stepped values for `t`. Pure. */
77
- declare function contrastStep(t: TokenSet): ContrastStep;
75
+ export declare function contrastStep(t: TokenSet): ContrastStep;
78
76
  /** Remember the set `applyTokenSet` wrote, so a contrast change can re-apply it. */
79
- declare function rememberTokenSet(el: HTMLElement, t: TokenSet): void;
77
+ export declare function rememberTokenSet(el: HTMLElement, t: TokenSet): void;
80
78
  /** The set `applyTokenSet` last wrote to `el`, or undefined when nothing did — an app
81
79
  * without the palette layer, whose base tokens come from tokens.css. */
82
- declare function rememberedTokenSet(el: HTMLElement): TokenSet | undefined;
83
-
84
- export { BRAND_BG_HOVER_SHARE, BRAND_BG_SHARE, BRAND_MUTED_SHARE, CONTRAST_STEPPED_VARS, type ContrastStep, HOVER_INK, brandSoft, contrastStep, hoverFill, mix, rememberTokenSet, rememberedTokenSet };
80
+ export declare function rememberedTokenSet(el: HTMLElement): TokenSet | undefined;