@eifi1/ui-kit 0.51.7 → 0.53.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 (775) hide show
  1. package/README.md +178 -67
  2. package/dist/account/account-parts.d.ts +10 -8
  3. package/dist/account/account-parts.js +1 -18
  4. package/dist/account/account-parts.js.map +1 -1
  5. package/dist/account/data-export-setting-labels.js +1 -1
  6. package/dist/account/data-export-setting-labels.js.map +1 -1
  7. package/dist/account/delete-account-setting-labels.js +1 -1
  8. package/dist/account/delete-account-setting-labels.js.map +1 -1
  9. package/dist/account/email-change-setting-labels.js +1 -1
  10. package/dist/account/email-change-setting-labels.js.map +1 -1
  11. package/dist/account/passkeys-setting.d.ts +9 -2
  12. package/dist/account/passkeys-setting.js +41 -29
  13. package/dist/account/passkeys-setting.js.map +1 -1
  14. package/dist/account/sessions-setting.d.ts +3 -2
  15. package/dist/account/sessions-setting.js +10 -8
  16. package/dist/account/sessions-setting.js.map +1 -1
  17. package/dist/admin/admin-action-confirm.js +1 -3
  18. package/dist/admin/admin-action-confirm.js.map +1 -1
  19. package/dist/admin/admin-parts.d.ts +6 -3
  20. package/dist/admin/admin-parts.js +6 -21
  21. package/dist/admin/admin-parts.js.map +1 -1
  22. package/dist/admin/mail-test-card-labels.js +1 -1
  23. package/dist/admin/mail-test-card-labels.js.map +1 -1
  24. package/dist/admin/plan-change-labels.d.ts +2 -2
  25. package/dist/admin/plan-change-labels.js +1 -17
  26. package/dist/admin/plan-change-labels.js.map +1 -1
  27. package/dist/admin/plan-change.d.ts +3 -42
  28. package/dist/admin/plan-change.js +1 -1
  29. package/dist/admin/plan-change.js.map +1 -1
  30. package/dist/admin/reviewer-scope-editor.js +3 -3
  31. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  32. package/dist/auth/auth-errors-labels.d.ts +11 -0
  33. package/dist/auth/auth-errors-labels.js +13 -0
  34. package/dist/auth/auth-errors-labels.js.map +1 -0
  35. package/dist/auth/auth-errors.d.ts +7 -23
  36. package/dist/auth/auth-errors.js +2 -15
  37. package/dist/auth/auth-errors.js.map +1 -1
  38. package/dist/auth/complete-name-dialog.js +2 -1
  39. package/dist/auth/complete-name-dialog.js.map +1 -1
  40. package/dist/auth/forgot-password-form-labels.js +1 -1
  41. package/dist/auth/forgot-password-form-labels.js.map +1 -1
  42. package/dist/auth/forgot-password-form.js +7 -2
  43. package/dist/auth/forgot-password-form.js.map +1 -1
  44. package/dist/auth/register-form-labels.js +1 -1
  45. package/dist/auth/register-form-labels.js.map +1 -1
  46. package/dist/auth/reset-password-form-labels.js +1 -1
  47. package/dist/auth/reset-password-form-labels.js.map +1 -1
  48. package/dist/auth/reset-password-form.js +5 -1
  49. package/dist/auth/reset-password-form.js.map +1 -1
  50. package/dist/auth/sign-in-form-labels.js +1 -1
  51. package/dist/auth/sign-in-form-labels.js.map +1 -1
  52. package/dist/auth/status-parts.d.ts +0 -3
  53. package/dist/auth/status-parts.js +0 -4
  54. package/dist/auth/status-parts.js.map +1 -1
  55. package/dist/auth/verify-email-labels.js +1 -1
  56. package/dist/auth/verify-email-labels.js.map +1 -1
  57. package/dist/auth/verify-email.js +7 -2
  58. package/dist/auth/verify-email.js.map +1 -1
  59. package/dist/billing/cancel-subscription.d.ts +10 -7
  60. package/dist/billing/cancel-subscription.js +6 -6
  61. package/dist/billing/cancel-subscription.js.map +1 -1
  62. package/dist/billing/plan-card.d.ts +5 -3
  63. package/dist/billing/plan-card.js +7 -8
  64. package/dist/billing/plan-card.js.map +1 -1
  65. package/dist/billing/plan-change-labels.d.ts +42 -0
  66. package/dist/billing/plan-change-labels.js +22 -0
  67. package/dist/billing/plan-change-labels.js.map +1 -0
  68. package/dist/billing/plan-switch.d.ts +9 -6
  69. package/dist/billing/plan-switch.js +7 -5
  70. package/dist/billing/plan-switch.js.map +1 -1
  71. package/dist/chart.d.ts +4 -3
  72. package/dist/chart.js +72 -4
  73. package/dist/chart.js.map +1 -1
  74. package/dist/components/account-chips.d.ts +5 -5
  75. package/dist/components/account-chips.js +11 -13
  76. package/dist/components/account-chips.js.map +1 -1
  77. package/dist/components/alert-banner.d.ts +16 -5
  78. package/dist/components/alert-banner.js +46 -1
  79. package/dist/components/alert-banner.js.map +1 -1
  80. package/dist/components/amount-input.d.ts +13 -0
  81. package/dist/components/amount-input.js +1 -0
  82. package/dist/components/amount-input.js.map +1 -1
  83. package/dist/components/autocomplete.js +57 -65
  84. package/dist/components/autocomplete.js.map +1 -1
  85. package/dist/components/bulk-action-bar.d.ts +12 -2
  86. package/dist/components/bulk-action-bar.js +65 -21
  87. package/dist/components/bulk-action-bar.js.map +1 -1
  88. package/dist/components/button-look.d.ts +5 -5
  89. package/dist/components/button-look.js.map +1 -1
  90. package/dist/components/button.d.ts +2 -2
  91. package/dist/components/button.js.map +1 -1
  92. package/dist/components/chart-edge.d.ts +16 -0
  93. package/dist/components/chart-edge.js +14 -1
  94. package/dist/components/chart-edge.js.map +1 -1
  95. package/dist/components/chart-figure.d.ts +13 -0
  96. package/dist/components/chart-figure.js +15 -0
  97. package/dist/components/chart-figure.js.map +1 -0
  98. package/dist/components/chart-zoom-core.js +1 -4
  99. package/dist/components/chart-zoom-core.js.map +1 -1
  100. package/dist/components/chart.d.ts +8 -1
  101. package/dist/components/chart.js +19 -10
  102. package/dist/components/chart.js.map +1 -1
  103. package/dist/components/combobox-core.d.ts +111 -2
  104. package/dist/components/combobox-core.js +148 -42
  105. package/dist/components/combobox-core.js.map +1 -1
  106. package/dist/components/combobox.d.ts +1 -1
  107. package/dist/components/combobox.js +141 -130
  108. package/dist/components/combobox.js.map +1 -1
  109. package/dist/components/copy-button.d.ts +6 -5
  110. package/dist/components/copy-button.js +5 -3
  111. package/dist/components/copy-button.js.map +1 -1
  112. package/dist/components/country-select.js +2 -2
  113. package/dist/components/country-select.js.map +1 -1
  114. package/dist/components/data-table-column-settings.d.ts +1 -1
  115. package/dist/components/data-table-column-settings.js +33 -7
  116. package/dist/components/data-table-column-settings.js.map +1 -1
  117. package/dist/components/data-table-filters.d.ts +4 -2
  118. package/dist/components/data-table-filters.js +2 -2
  119. package/dist/components/data-table-filters.js.map +1 -1
  120. package/dist/components/data-table-fit.d.ts +6 -4
  121. package/dist/components/data-table-fit.js +4 -1
  122. package/dist/components/data-table-fit.js.map +1 -1
  123. package/dist/components/data-table-groups.d.ts +1 -1
  124. package/dist/components/data-table-groups.js.map +1 -1
  125. package/dist/components/data-table-head.d.ts +1 -1
  126. package/dist/components/data-table-head.js +15 -12
  127. package/dist/components/data-table-head.js.map +1 -1
  128. package/dist/components/data-table-mobile.d.ts +12 -7
  129. package/dist/components/data-table-mobile.js +43 -30
  130. package/dist/components/data-table-mobile.js.map +1 -1
  131. package/dist/components/data-table-pagination.js +11 -6
  132. package/dist/components/data-table-pagination.js.map +1 -1
  133. package/dist/components/data-table-resize.d.ts +1 -1
  134. package/dist/components/data-table-resize.js.map +1 -1
  135. package/dist/components/data-table-row-actions.d.ts +2 -2
  136. package/dist/components/data-table-row-actions.js.map +1 -1
  137. package/dist/components/data-table-row.d.ts +6 -2
  138. package/dist/components/data-table-row.js +17 -10
  139. package/dist/components/data-table-row.js.map +1 -1
  140. package/dist/components/data-table-selection.d.ts +1 -1
  141. package/dist/components/data-table-selection.js.map +1 -1
  142. package/dist/components/data-table-shared.d.ts +10 -2
  143. package/dist/components/data-table-shared.js +18 -0
  144. package/dist/components/data-table-shared.js.map +1 -1
  145. package/dist/components/data-table-sort.d.ts +21 -2
  146. package/dist/components/data-table-sort.js +24 -0
  147. package/dist/components/data-table-sort.js.map +1 -1
  148. package/dist/components/data-table-virtual.d.ts +1 -1
  149. package/dist/components/data-table-virtual.js +18 -6
  150. package/dist/components/data-table-virtual.js.map +1 -1
  151. package/dist/components/data-table.d.ts +13 -4
  152. package/dist/components/data-table.js +139 -36
  153. package/dist/components/data-table.js.map +1 -1
  154. package/dist/components/date-field.d.ts +25 -3
  155. package/dist/components/date-field.js +33 -8
  156. package/dist/components/date-field.js.map +1 -1
  157. package/dist/components/date-picker.d.ts +16 -3
  158. package/dist/components/date-picker.js +55 -26
  159. package/dist/components/date-picker.js.map +1 -1
  160. package/dist/components/date-range-picker.d.ts +38 -24
  161. package/dist/components/date-range-picker.js +23 -7
  162. package/dist/components/date-range-picker.js.map +1 -1
  163. package/dist/components/error-boundary.js +37 -30
  164. package/dist/components/error-boundary.js.map +1 -1
  165. package/dist/components/{ui-labels.d.ts → field-base-labels.d.ts} +0 -2
  166. package/dist/components/{ui-labels.js → field-base-labels.js} +2 -9
  167. package/dist/components/field-base-labels.js.map +1 -0
  168. package/dist/components/field-base.d.ts +4 -3
  169. package/dist/components/field-base.js +3 -3
  170. package/dist/components/field-base.js.map +1 -1
  171. package/dist/components/form-actions.js +11 -5
  172. package/dist/components/form-actions.js.map +1 -1
  173. package/dist/components/hover-menu.d.ts +3 -0
  174. package/dist/components/hover-menu.js +5 -3
  175. package/dist/components/hover-menu.js.map +1 -1
  176. package/dist/components/icon-button.js +14 -9
  177. package/dist/components/icon-button.js.map +1 -1
  178. package/dist/components/inline-confirm.d.ts +43 -0
  179. package/dist/components/inline-confirm.js +67 -0
  180. package/dist/components/inline-confirm.js.map +1 -0
  181. package/dist/components/inline-entity-combobox.d.ts +4 -3
  182. package/dist/components/inline-entity-combobox.js +148 -140
  183. package/dist/components/inline-entity-combobox.js.map +1 -1
  184. package/dist/components/input.js +1 -1
  185. package/dist/components/input.js.map +1 -1
  186. package/dist/components/jump-calendar.js +28 -112
  187. package/dist/components/jump-calendar.js.map +1 -1
  188. package/dist/components/legal-page.d.ts +3 -1
  189. package/dist/components/legal-page.js +3 -2
  190. package/dist/components/legal-page.js.map +1 -1
  191. package/dist/components/legal.d.ts +4 -2
  192. package/dist/components/legal.js.map +1 -1
  193. package/dist/components/lightbox.d.ts +2 -2
  194. package/dist/components/lightbox.js +17 -6
  195. package/dist/components/lightbox.js.map +1 -1
  196. package/dist/components/list.d.ts +6 -2
  197. package/dist/components/list.js +3 -2
  198. package/dist/components/list.js.map +1 -1
  199. package/dist/components/measured-grid.d.ts +1 -1
  200. package/dist/components/measured-grid.js +2 -1
  201. package/dist/components/measured-grid.js.map +1 -1
  202. package/dist/components/mini-calendar.js +3 -5
  203. package/dist/components/mini-calendar.js.map +1 -1
  204. package/dist/components/modal.js +3 -1
  205. package/dist/components/modal.js.map +1 -1
  206. package/dist/components/month-grid.d.ts +55 -0
  207. package/dist/components/month-grid.js +148 -0
  208. package/dist/components/month-grid.js.map +1 -0
  209. package/dist/components/month-picker.d.ts +36 -4
  210. package/dist/components/month-picker.js +123 -146
  211. package/dist/components/month-picker.js.map +1 -1
  212. package/dist/components/multi-select.d.ts +2 -2
  213. package/dist/components/multi-select.js +11 -6
  214. package/dist/components/multi-select.js.map +1 -1
  215. package/dist/components/nav-pills.d.ts +1 -1
  216. package/dist/components/nav-pills.js.map +1 -1
  217. package/dist/components/picker-sheet.js +2 -1
  218. package/dist/components/picker-sheet.js.map +1 -1
  219. package/dist/components/pie-chart-labels.d.ts +7 -0
  220. package/dist/components/pie-chart-labels.js +1 -0
  221. package/dist/components/pie-chart-labels.js.map +1 -1
  222. package/dist/components/pie-chart.d.ts +5 -3
  223. package/dist/components/pie-chart.js +7 -22
  224. package/dist/components/pie-chart.js.map +1 -1
  225. package/dist/components/popover.d.ts +3 -0
  226. package/dist/components/popover.js +7 -1
  227. package/dist/components/popover.js.map +1 -1
  228. package/dist/components/row-actions.js +2 -1
  229. package/dist/components/row-actions.js.map +1 -1
  230. package/dist/components/series-chart-axes.d.ts +4 -4
  231. package/dist/components/series-chart-axes.js.map +1 -1
  232. package/dist/components/series-chart-labels.d.ts +7 -4
  233. package/dist/components/series-chart-labels.js.map +1 -1
  234. package/dist/components/series-chart.d.ts +92 -23
  235. package/dist/components/series-chart.js +74 -30
  236. package/dist/components/series-chart.js.map +1 -1
  237. package/dist/components/share-card.js +3 -3
  238. package/dist/components/share-card.js.map +1 -1
  239. package/dist/components/tabs-labels.d.ts +2 -0
  240. package/dist/components/tabs-labels.js +11 -0
  241. package/dist/components/tabs-labels.js.map +1 -0
  242. package/dist/components/tabs.d.ts +1 -1
  243. package/dist/components/tabs.js +1 -1
  244. package/dist/components/tabs.js.map +1 -1
  245. package/dist/components/toggle-legend.d.ts +2 -2
  246. package/dist/components/toggle-legend.js +6 -6
  247. package/dist/components/toggle-legend.js.map +1 -1
  248. package/dist/components/translation-review-editor.d.ts +4 -2
  249. package/dist/components/translation-review-editor.js +2 -3
  250. package/dist/components/translation-review-editor.js.map +1 -1
  251. package/dist/components/translation-review.d.ts +2 -1
  252. package/dist/components/translation-review.js +2 -2
  253. package/dist/components/translation-review.js.map +1 -1
  254. package/dist/components/treemap-labels.d.ts +31 -0
  255. package/dist/components/treemap-labels.js +10 -0
  256. package/dist/components/treemap-labels.js.map +1 -0
  257. package/dist/components/treemap-layout.d.ts +62 -0
  258. package/dist/components/treemap-layout.js +126 -0
  259. package/dist/components/treemap-layout.js.map +1 -0
  260. package/dist/components/treemap.d.ts +167 -19
  261. package/dist/components/treemap.js +340 -100
  262. package/dist/components/treemap.js.map +1 -1
  263. package/dist/components/use-table-state.d.ts +5 -5
  264. package/dist/components/use-table-state.js +4 -1
  265. package/dist/components/use-table-state.js.map +1 -1
  266. package/dist/data-table.d.ts +1 -2
  267. package/dist/data-table.js +1 -4
  268. package/dist/data-table.js.map +1 -1
  269. package/dist/demo/demo-countdown.d.ts +0 -5
  270. package/dist/demo/demo-countdown.js +0 -4
  271. package/dist/demo/demo-countdown.js.map +1 -1
  272. package/dist/eslint/index.js +1 -1
  273. package/dist/eslint/role-utilities.d.ts +36 -7
  274. package/dist/eslint/role-utilities.js +42 -9
  275. package/dist/eslint/role-utilities.js.map +1 -1
  276. package/dist/feedback/feedback-dialog.d.ts +25 -16
  277. package/dist/feedback/feedback-dialog.js +6 -2
  278. package/dist/feedback/feedback-dialog.js.map +1 -1
  279. package/dist/feedback/feedback-mutation.d.ts +18 -0
  280. package/dist/feedback/feedback-mutation.js +8 -0
  281. package/dist/feedback/feedback-mutation.js.map +1 -0
  282. package/dist/feedback/feedback-page-link.d.ts +53 -0
  283. package/dist/feedback/feedback-page-link.js +37 -0
  284. package/dist/feedback/feedback-page-link.js.map +1 -0
  285. package/dist/feedback/feedback-public-list.d.ts +8 -4
  286. package/dist/feedback/feedback-public-list.js +2 -2
  287. package/dist/feedback/feedback-public-list.js.map +1 -1
  288. package/dist/feedback/feedback-replies.d.ts +3 -1
  289. package/dist/feedback/feedback-replies.js +5 -4
  290. package/dist/feedback/feedback-replies.js.map +1 -1
  291. package/dist/feedback/feedback-row-detail-labels.js +0 -3
  292. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  293. package/dist/feedback/feedback-row-detail.d.ts +33 -44
  294. package/dist/feedback/feedback-row-detail.js +28 -34
  295. package/dist/feedback/feedback-row-detail.js.map +1 -1
  296. package/dist/feedback/feedback-status-undo.d.ts +17 -14
  297. package/dist/feedback/feedback-status-undo.js +10 -15
  298. package/dist/feedback/feedback-status-undo.js.map +1 -1
  299. package/dist/feedback/feedback-submit-dialog.d.ts +1 -1
  300. package/dist/feedback/feedback-submit-dialog.js +1 -1
  301. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  302. package/dist/feedback/feedback-submit.js +9 -3
  303. package/dist/feedback/feedback-submit.js.map +1 -1
  304. package/dist/feedback/feedback-swipe.d.ts +1 -1
  305. package/dist/feedback/feedback-swipe.js.map +1 -1
  306. package/dist/feedback/feedback-table.d.ts +21 -9
  307. package/dist/feedback/feedback-table.js +45 -25
  308. package/dist/feedback/feedback-table.js.map +1 -1
  309. package/dist/feedback/feedback-thread-labels.d.ts +2 -2
  310. package/dist/feedback/feedback-thread-labels.js.map +1 -1
  311. package/dist/feedback/feedback-thread.d.ts +15 -23
  312. package/dist/feedback/feedback-thread.js +2 -1
  313. package/dist/feedback/feedback-thread.js.map +1 -1
  314. package/dist/feedback.d.ts +6 -6
  315. package/dist/feedback.js +90 -6
  316. package/dist/feedback.js.map +1 -1
  317. package/dist/hooks/use-focus-trap.d.ts +35 -0
  318. package/dist/hooks/use-focus-trap.js +6 -4
  319. package/dist/hooks/use-focus-trap.js.map +1 -1
  320. package/dist/hooks/use-hotkey.d.ts +5 -2
  321. package/dist/hooks/use-hotkey.js +5 -4
  322. package/dist/hooks/use-hotkey.js.map +1 -1
  323. package/dist/hooks/use-long-press.d.ts +7 -4
  324. package/dist/hooks/use-long-press.js +3 -0
  325. package/dist/hooks/use-long-press.js.map +1 -1
  326. package/dist/hooks/use-media-query.js +12 -4
  327. package/dist/hooks/use-media-query.js.map +1 -1
  328. package/dist/hooks/use-mounted.d.ts +22 -0
  329. package/dist/hooks/use-mounted.js +24 -0
  330. package/dist/hooks/use-mounted.js.map +1 -0
  331. package/dist/hooks/use-overlay-history.js +19 -3
  332. package/dist/hooks/use-overlay-history.js.map +1 -1
  333. package/dist/i18n/defaults.js +4 -9
  334. package/dist/i18n/defaults.js.map +1 -1
  335. package/dist/i18n/german.js +7 -18
  336. package/dist/i18n/german.js.map +1 -1
  337. package/dist/i18n/kit-labels.d.ts +9 -11
  338. package/dist/i18n/kit-labels.js.map +1 -1
  339. package/dist/i18n/locales/en.js +15 -64
  340. package/dist/i18n/locales/en.js.map +3 -3
  341. package/dist/i18n/locales/es.js +7 -18
  342. package/dist/i18n/locales/es.js.map +1 -1
  343. package/dist/i18n/locales/fr.js +20 -27
  344. package/dist/i18n/locales/fr.js.map +1 -1
  345. package/dist/i18n/locales/hu.js +9 -18
  346. package/dist/i18n/locales/hu.js.map +1 -1
  347. package/dist/i18n/locales/it.js +7 -19
  348. package/dist/i18n/locales/it.js.map +1 -1
  349. package/dist/i18n/locales/zh.js +8 -18
  350. package/dist/i18n/locales/zh.js.map +1 -1
  351. package/dist/i18n/review.js +12 -2
  352. package/dist/i18n/review.js.map +1 -1
  353. package/dist/i18n/shared-labels.js +0 -1
  354. package/dist/i18n/shared-labels.js.map +1 -1
  355. package/dist/index.d.ts +21 -23
  356. package/dist/index.js +50 -65
  357. package/dist/index.js.map +1 -1
  358. package/dist/landing/routing.d.ts +3 -1
  359. package/dist/landing/routing.js +4 -7
  360. package/dist/landing/routing.js.map +1 -1
  361. package/dist/lib/broadcast.d.ts +17 -0
  362. package/dist/lib/broadcast.js +30 -0
  363. package/dist/lib/broadcast.js.map +1 -0
  364. package/dist/lib/date-format.d.ts +37 -2
  365. package/dist/lib/date-format.js +34 -8
  366. package/dist/lib/date-format.js.map +1 -1
  367. package/dist/lib/day-format.d.ts +46 -0
  368. package/dist/lib/day-format.js +46 -0
  369. package/dist/lib/day-format.js.map +1 -0
  370. package/dist/lib/describe-failure.d.ts +14 -0
  371. package/dist/lib/describe-failure.js +9 -0
  372. package/dist/lib/describe-failure.js.map +1 -0
  373. package/dist/lib/direction.d.ts +16 -0
  374. package/dist/lib/direction.js +9 -1
  375. package/dist/lib/direction.js.map +1 -1
  376. package/dist/lib/focus-left.d.ts +63 -0
  377. package/dist/lib/focus-left.js +67 -0
  378. package/dist/lib/focus-left.js.map +1 -0
  379. package/dist/lib/format.js +5 -14
  380. package/dist/lib/format.js.map +1 -1
  381. package/dist/lib/http-status.d.ts +24 -0
  382. package/dist/lib/http-status.js +14 -0
  383. package/dist/lib/http-status.js.map +1 -0
  384. package/dist/lib/intl-cache.d.ts +14 -0
  385. package/dist/lib/intl-cache.js +15 -0
  386. package/dist/lib/intl-cache.js.map +1 -0
  387. package/dist/lib/iso-day.d.ts +11 -0
  388. package/dist/lib/iso-day.js +8 -0
  389. package/dist/lib/iso-day.js.map +1 -0
  390. package/dist/lib/lazy-with-fallback.d.ts +31 -0
  391. package/dist/lib/lazy-with-fallback.js +40 -0
  392. package/dist/lib/lazy-with-fallback.js.map +1 -0
  393. package/dist/lib/path-pattern.d.ts +34 -0
  394. package/dist/lib/path-pattern.js +24 -0
  395. package/dist/lib/path-pattern.js.map +1 -0
  396. package/dist/lib/reduced-motion.d.ts +2 -1
  397. package/dist/lib/reduced-motion.js.map +1 -1
  398. package/dist/lib/round.d.ts +2 -1
  399. package/dist/lib/round.js +2 -1
  400. package/dist/lib/round.js.map +1 -1
  401. package/dist/lib/safe-storage.d.ts +24 -5
  402. package/dist/lib/safe-storage.js +27 -2
  403. package/dist/lib/safe-storage.js.map +1 -1
  404. package/dist/lib/session-refresh.js +1 -1
  405. package/dist/lib/session-refresh.js.map +1 -1
  406. package/dist/lib/share-format.d.ts +13 -0
  407. package/dist/lib/share-format.js +10 -0
  408. package/dist/lib/share-format.js.map +1 -0
  409. package/dist/lib/text-case.d.ts +17 -0
  410. package/dist/lib/text-case.js +8 -0
  411. package/dist/lib/text-case.js.map +1 -0
  412. package/dist/lib/text-match.d.ts +29 -0
  413. package/dist/lib/text-match.js +20 -2
  414. package/dist/lib/text-match.js.map +1 -1
  415. package/dist/lib/thenable.d.ts +13 -0
  416. package/dist/lib/thenable.js +8 -0
  417. package/dist/lib/thenable.js.map +1 -0
  418. package/dist/lib/translation-review.d.ts +7 -2
  419. package/dist/lib/translation-review.js +4 -4
  420. package/dist/lib/translation-review.js.map +1 -1
  421. package/dist/notifications/device-zone-report.js +1 -1
  422. package/dist/notifications/device-zone-report.js.map +1 -1
  423. package/dist/notifications/notification-bell.d.ts +2 -1
  424. package/dist/notifications/notification-bell.js +3 -3
  425. package/dist/notifications/notification-bell.js.map +1 -1
  426. package/dist/notifications/notification-inbox.d.ts +10 -6
  427. package/dist/notifications/notification-inbox.js +26 -48
  428. package/dist/notifications/notification-inbox.js.map +1 -1
  429. package/dist/notifications/notification-parts.d.ts +3 -2
  430. package/dist/notifications/notification-parts.js +1 -3
  431. package/dist/notifications/notification-parts.js.map +1 -1
  432. package/dist/notifications/notification-types-setting.js +1 -1
  433. package/dist/notifications/notification-types-setting.js.map +1 -1
  434. package/dist/notifications/notifications-labels.d.ts +6 -0
  435. package/dist/notifications/notifications-labels.js +1 -0
  436. package/dist/notifications/notifications-labels.js.map +1 -1
  437. package/dist/notifications/push-device-setting.js +1 -1
  438. package/dist/notifications/push-device-setting.js.map +1 -1
  439. package/dist/notifications/push-devices-setting.d.ts +2 -1
  440. package/dist/notifications/push-devices-setting.js +27 -49
  441. package/dist/notifications/push-devices-setting.js.map +1 -1
  442. package/dist/notifications/quiet-hours-setting.d.ts +10 -3
  443. package/dist/notifications/quiet-hours-setting.js +65 -26
  444. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  445. package/dist/notifications/unsubscribe-panel.js +4 -7
  446. package/dist/notifications/unsubscribe-panel.js.map +1 -1
  447. package/dist/notifications/use-push-device.d.ts +39 -1
  448. package/dist/notifications/use-push-device.js +28 -7
  449. package/dist/notifications/use-push-device.js.map +1 -1
  450. package/dist/offline/query-persistence.d.ts +3 -1
  451. package/dist/offline/query-persistence.js +19 -2
  452. package/dist/offline/query-persistence.js.map +1 -1
  453. package/dist/rhf/fields.d.ts +11 -4
  454. package/dist/rhf/fields.js.map +1 -1
  455. package/dist/search/command-palette.js +1 -1
  456. package/dist/search/command-palette.js.map +1 -1
  457. package/dist/search/global-search.js +19 -9
  458. package/dist/search/global-search.js.map +1 -1
  459. package/dist/search/search-index.d.ts +0 -6
  460. package/dist/search/search-index.js +0 -4
  461. package/dist/search/search-index.js.map +1 -1
  462. package/dist/search/use-command-key.d.ts +12 -1
  463. package/dist/search/use-command-key.js +3 -12
  464. package/dist/search/use-command-key.js.map +1 -1
  465. package/dist/search.d.ts +1 -1
  466. package/dist/search.js +6 -1
  467. package/dist/search.js.map +1 -1
  468. package/dist/settings/use-settings-focus.js +1 -0
  469. package/dist/settings/use-settings-focus.js.map +1 -1
  470. package/dist/shell/account-menu-language.d.ts +5 -3
  471. package/dist/shell/account-menu-language.js +2 -2
  472. package/dist/shell/account-menu-language.js.map +1 -1
  473. package/dist/shell/account-menu-text-size.d.ts +9 -6
  474. package/dist/shell/account-menu-text-size.js +2 -2
  475. package/dist/shell/account-menu-text-size.js.map +1 -1
  476. package/dist/shell/app-shell.d.ts +0 -10
  477. package/dist/shell/app-shell.js +1 -7
  478. package/dist/shell/app-shell.js.map +1 -1
  479. package/dist/shell/company-switcher.d.ts +1 -1
  480. package/dist/shell/company-switcher.js.map +1 -1
  481. package/dist/shell/dev-menu.d.ts +1 -1
  482. package/dist/shell/dev-menu.js +5 -18
  483. package/dist/shell/dev-menu.js.map +1 -1
  484. package/dist/shell/top-bar-actions.d.ts +1 -1
  485. package/dist/shell/top-bar-actions.js.map +1 -1
  486. package/dist/shell/top-bar-parts-labels.d.ts +1 -3
  487. package/dist/shell/top-bar-parts-labels.js +0 -1
  488. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  489. package/dist/shell.d.ts +7 -10
  490. package/dist/shell.js +14 -23
  491. package/dist/shell.js.map +1 -1
  492. package/dist/sync/engine.d.ts +30 -4
  493. package/dist/sync/engine.js +172 -52
  494. package/dist/sync/engine.js.map +1 -1
  495. package/dist/sync.d.ts +2 -2
  496. package/dist/sync.js +2 -10
  497. package/dist/sync.js.map +1 -1
  498. package/dist/testing/css-variables.js +3 -8
  499. package/dist/testing/css-variables.js.map +1 -1
  500. package/dist/theme/chart-palette.d.ts +0 -5
  501. package/dist/theme/chart-palette.js +0 -2
  502. package/dist/theme/chart-palette.js.map +1 -1
  503. package/dist/theme/contrast.d.ts +2 -1
  504. package/dist/theme/contrast.js +3 -8
  505. package/dist/theme/contrast.js.map +1 -1
  506. package/dist/theme/palette-store.js +6 -6
  507. package/dist/theme/palette-store.js.map +1 -1
  508. package/dist/theme/text-size.js +3 -8
  509. package/dist/theme/text-size.js.map +1 -1
  510. package/dist/theme/theme-store.js +3 -6
  511. package/dist/theme/theme-store.js.map +1 -1
  512. package/dist/tour/tour-catalogue.d.ts +7 -4
  513. package/dist/tour/tour-catalogue.js +12 -10
  514. package/dist/tour/tour-catalogue.js.map +1 -1
  515. package/dist/tour/tour-dock.d.ts +0 -2
  516. package/dist/tour/tour-dock.js +0 -2
  517. package/dist/tour/tour-dock.js.map +1 -1
  518. package/dist/tour/tour-gates.d.ts +4 -0
  519. package/dist/tour/tour-gates.js +14 -0
  520. package/dist/tour/tour-gates.js.map +1 -1
  521. package/dist/tour/tour-overlay.d.ts +27 -0
  522. package/dist/tour/tour-overlay.js +741 -0
  523. package/dist/tour/tour-overlay.js.map +1 -0
  524. package/dist/tour/tour.d.ts +13 -3
  525. package/dist/tour/tour.js +59 -781
  526. package/dist/tour/tour.js.map +1 -1
  527. package/dist/tour/use-tour-progress.js +1 -1
  528. package/dist/tour/use-tour-progress.js.map +1 -1
  529. package/dist/wizard/stepper-nav.d.ts +5 -1
  530. package/dist/wizard/stepper-nav.js.map +1 -1
  531. package/dist/wizard/types.d.ts +6 -2
  532. package/dist/wizard/types.js.map +1 -1
  533. package/dist/wizard/use-wizard.d.ts +3 -1
  534. package/dist/wizard/use-wizard.js.map +1 -1
  535. package/dist/wizard/validation.d.ts +3 -1
  536. package/dist/wizard/validation.js.map +1 -1
  537. package/package.json +10 -6
  538. package/src/account/account-parts.ts +5 -25
  539. package/src/account/data-export-setting-labels.ts +1 -1
  540. package/src/account/delete-account-setting-labels.ts +1 -1
  541. package/src/account/email-change-setting-labels.ts +1 -1
  542. package/src/account/passkeys-setting.tsx +60 -38
  543. package/src/account/sessions-setting.tsx +18 -12
  544. package/src/admin/admin-action-confirm.tsx +1 -5
  545. package/src/admin/admin-parts.ts +11 -25
  546. package/src/admin/mail-test-card-labels.ts +1 -1
  547. package/src/admin/plan-change-labels.ts +5 -23
  548. package/src/admin/plan-change.tsx +7 -44
  549. package/src/admin/reviewer-scope-editor.tsx +3 -3
  550. package/src/auth/auth-errors-labels.ts +23 -0
  551. package/src/auth/auth-errors.ts +11 -38
  552. package/src/auth/complete-name-dialog.tsx +4 -1
  553. package/src/auth/forgot-password-form-labels.ts +1 -1
  554. package/src/auth/forgot-password-form.tsx +11 -6
  555. package/src/auth/register-form-labels.ts +1 -1
  556. package/src/auth/reset-password-form-labels.ts +1 -1
  557. package/src/auth/reset-password-form.tsx +8 -4
  558. package/src/auth/sign-in-form-labels.ts +1 -1
  559. package/src/auth/status-parts.tsx +0 -6
  560. package/src/auth/verify-email-labels.ts +1 -1
  561. package/src/auth/verify-email.tsx +11 -6
  562. package/src/billing/cancel-subscription.tsx +15 -12
  563. package/src/billing/plan-card.tsx +18 -10
  564. package/src/billing/plan-change-labels.ts +66 -0
  565. package/src/billing/plan-switch.tsx +15 -12
  566. package/src/chart.ts +73 -6
  567. package/src/components/account-chips.tsx +20 -23
  568. package/src/components/alert-banner.tsx +82 -5
  569. package/src/components/amount-input.tsx +18 -7
  570. package/src/components/autocomplete.tsx +64 -70
  571. package/src/components/bulk-action-bar.tsx +70 -2
  572. package/src/components/button-look.ts +5 -5
  573. package/src/components/button.tsx +2 -2
  574. package/src/components/chart-edge.ts +34 -1
  575. package/src/components/chart-figure.tsx +35 -0
  576. package/src/components/chart-zoom-core.tsx +6 -5
  577. package/src/components/chart.tsx +26 -5
  578. package/src/components/combobox-core.tsx +293 -62
  579. package/src/components/combobox.tsx +183 -153
  580. package/src/components/copy-button.tsx +34 -23
  581. package/src/components/country-select.tsx +16 -11
  582. package/src/components/data-table-column-settings.tsx +52 -10
  583. package/src/components/data-table-filters.ts +6 -4
  584. package/src/components/data-table-fit.ts +19 -5
  585. package/src/components/data-table-groups.tsx +1 -1
  586. package/src/components/data-table-head.tsx +32 -22
  587. package/src/components/data-table-mobile.tsx +61 -26
  588. package/src/components/data-table-pagination.tsx +21 -6
  589. package/src/components/data-table-resize.ts +1 -1
  590. package/src/components/data-table-row-actions.tsx +3 -3
  591. package/src/components/data-table-row.tsx +25 -14
  592. package/src/components/data-table-selection.ts +1 -1
  593. package/src/components/data-table-shared.tsx +33 -1
  594. package/src/components/data-table-sort.ts +57 -2
  595. package/src/components/data-table-virtual.ts +32 -8
  596. package/src/components/data-table.tsx +239 -68
  597. package/src/components/date-field.tsx +66 -9
  598. package/src/components/date-picker.tsx +125 -49
  599. package/src/components/date-range-picker.tsx +71 -36
  600. package/src/components/error-boundary.tsx +53 -39
  601. package/src/components/field-base-labels.ts +20 -0
  602. package/src/components/field-base.tsx +13 -7
  603. package/src/components/form-actions.tsx +20 -5
  604. package/src/components/hover-menu.tsx +18 -8
  605. package/src/components/icon-button.tsx +14 -9
  606. package/src/components/inline-confirm.tsx +116 -0
  607. package/src/components/inline-entity-combobox.tsx +197 -153
  608. package/src/components/input.tsx +1 -1
  609. package/src/components/jump-calendar.tsx +30 -146
  610. package/src/components/legal-page.tsx +10 -7
  611. package/src/components/legal.tsx +4 -2
  612. package/src/components/lightbox.tsx +21 -8
  613. package/src/components/list.tsx +10 -4
  614. package/src/components/measured-grid.tsx +8 -4
  615. package/src/components/mini-calendar.tsx +6 -5
  616. package/src/components/modal.tsx +6 -1
  617. package/src/components/month-grid.tsx +229 -0
  618. package/src/components/month-picker.tsx +192 -200
  619. package/src/components/multi-select.tsx +21 -9
  620. package/src/components/nav-pills.tsx +1 -1
  621. package/src/components/picker-sheet.tsx +12 -9
  622. package/src/components/pie-chart-labels.ts +8 -0
  623. package/src/components/pie-chart.tsx +22 -28
  624. package/src/components/popover.tsx +18 -1
  625. package/src/components/row-actions.tsx +2 -1
  626. package/src/components/series-chart-axes.ts +9 -4
  627. package/src/components/series-chart-labels.ts +7 -4
  628. package/src/components/series-chart.tsx +253 -87
  629. package/src/components/share-card.tsx +6 -6
  630. package/src/components/tabs-labels.ts +13 -0
  631. package/src/components/tabs.tsx +2 -2
  632. package/src/components/toggle-legend.tsx +16 -11
  633. package/src/components/translation-review-editor.tsx +6 -5
  634. package/src/components/translation-review.tsx +4 -3
  635. package/src/components/treemap-labels.ts +47 -0
  636. package/src/components/treemap-layout.ts +210 -0
  637. package/src/components/treemap.tsx +780 -138
  638. package/src/components/use-table-state.ts +12 -9
  639. package/src/data-table.ts +1 -4
  640. package/src/demo/demo-countdown.ts +3 -8
  641. package/src/eslint/role-utilities.ts +97 -19
  642. package/src/feedback/feedback-dialog.tsx +30 -19
  643. package/src/feedback/feedback-mutation.ts +20 -0
  644. package/src/feedback/feedback-page-link.ts +90 -0
  645. package/src/feedback/feedback-public-list.tsx +13 -7
  646. package/src/feedback/feedback-replies.tsx +13 -6
  647. package/src/feedback/feedback-row-detail-labels.ts +0 -3
  648. package/src/feedback/feedback-row-detail.tsx +70 -84
  649. package/src/feedback/feedback-status-undo.ts +28 -28
  650. package/src/feedback/feedback-submit-dialog.tsx +2 -2
  651. package/src/feedback/feedback-submit.tsx +21 -7
  652. package/src/feedback/feedback-swipe.tsx +1 -1
  653. package/src/feedback/feedback-table.tsx +86 -38
  654. package/src/feedback/feedback-thread-labels.ts +2 -2
  655. package/src/feedback/feedback-thread.tsx +18 -26
  656. package/src/feedback.ts +89 -6
  657. package/src/hooks/use-focus-trap.ts +8 -24
  658. package/src/hooks/use-hotkey.ts +24 -7
  659. package/src/hooks/use-long-press.ts +16 -2
  660. package/src/hooks/use-media-query.ts +20 -4
  661. package/src/hooks/use-mounted.ts +39 -0
  662. package/src/hooks/use-overlay-history.ts +32 -3
  663. package/src/i18n/defaults.ts +4 -9
  664. package/src/i18n/german.ts +8 -19
  665. package/src/i18n/kit-labels.tsx +9 -11
  666. package/src/i18n/locales/es.ts +8 -19
  667. package/src/i18n/locales/fr.ts +21 -30
  668. package/src/i18n/locales/hu.ts +10 -19
  669. package/src/i18n/locales/it.ts +8 -20
  670. package/src/i18n/locales/zh.ts +9 -19
  671. package/src/i18n/review.ts +12 -2
  672. package/src/i18n/shared-labels.ts +0 -1
  673. package/src/index.ts +57 -49
  674. package/src/landing/routing.tsx +14 -10
  675. package/src/lib/broadcast.ts +52 -0
  676. package/src/lib/date-format.ts +89 -13
  677. package/src/lib/day-format.ts +96 -0
  678. package/src/lib/describe-failure.ts +18 -0
  679. package/src/lib/direction.ts +39 -0
  680. package/src/lib/focus-left.ts +156 -0
  681. package/src/lib/format.ts +5 -17
  682. package/src/lib/http-status.ts +38 -0
  683. package/src/lib/intl-cache.ts +25 -0
  684. package/src/lib/iso-day.ts +13 -0
  685. package/src/lib/lazy-with-fallback.ts +82 -0
  686. package/src/lib/path-pattern.ts +55 -0
  687. package/src/lib/reduced-motion.ts +2 -1
  688. package/src/lib/round.ts +7 -2
  689. package/src/lib/safe-storage.ts +48 -6
  690. package/src/lib/session-refresh.ts +1 -1
  691. package/src/lib/share-format.ts +18 -0
  692. package/src/lib/text-case.ts +19 -0
  693. package/src/lib/text-match.ts +57 -2
  694. package/src/lib/thenable.ts +19 -0
  695. package/src/lib/translation-review.ts +13 -5
  696. package/src/notifications/device-zone-report.ts +1 -1
  697. package/src/notifications/notification-bell.tsx +7 -4
  698. package/src/notifications/notification-inbox.tsx +40 -58
  699. package/src/notifications/notification-parts.tsx +3 -4
  700. package/src/notifications/notification-types-setting.tsx +1 -1
  701. package/src/notifications/notifications-labels.ts +7 -0
  702. package/src/notifications/push-device-setting.tsx +1 -1
  703. package/src/notifications/push-devices-setting.tsx +30 -55
  704. package/src/notifications/quiet-hours-setting.tsx +93 -31
  705. package/src/notifications/unsubscribe-panel.tsx +4 -7
  706. package/src/notifications/use-push-device.ts +76 -10
  707. package/src/offline/query-persistence.ts +35 -3
  708. package/src/rhf/fields.tsx +11 -4
  709. package/src/search/command-palette.tsx +2 -4
  710. package/src/search/global-search.tsx +36 -15
  711. package/src/search/search-index.ts +0 -15
  712. package/src/search/use-command-key.ts +13 -12
  713. package/src/search.ts +10 -1
  714. package/src/settings/use-settings-focus.ts +3 -0
  715. package/src/shell/account-menu-language.tsx +6 -4
  716. package/src/shell/account-menu-text-size.tsx +10 -7
  717. package/src/shell/app-shell.tsx +0 -13
  718. package/src/shell/company-switcher.tsx +1 -1
  719. package/src/shell/dev-menu.tsx +8 -22
  720. package/src/shell/top-bar-actions.tsx +1 -1
  721. package/src/shell/top-bar-parts-labels.ts +1 -4
  722. package/src/shell.ts +21 -17
  723. package/src/sync/engine.ts +339 -61
  724. package/src/sync.ts +2 -8
  725. package/src/testing/css-variables.ts +8 -9
  726. package/src/theme/chart-palette.ts +0 -2
  727. package/src/theme/contrast.ts +8 -9
  728. package/src/theme/palette-store.ts +9 -9
  729. package/src/theme/text-size.ts +6 -8
  730. package/src/theme/theme-store.ts +7 -9
  731. package/src/tour/tour-catalogue.tsx +26 -15
  732. package/src/tour/tour-dock.ts +0 -2
  733. package/src/tour/tour-gates.ts +23 -0
  734. package/src/tour/tour-overlay.tsx +1170 -0
  735. package/src/tour/tour.tsx +108 -1202
  736. package/src/tour/use-tour-progress.ts +1 -1
  737. package/src/wizard/stepper-nav.tsx +3 -1
  738. package/src/wizard/types.ts +11 -2
  739. package/src/wizard/use-wizard.ts +2 -1
  740. package/src/wizard/validation.ts +8 -2
  741. package/tokens.css +6 -5
  742. package/dist/components/field-sync-labels.d.ts +0 -2
  743. package/dist/components/field-sync-labels.js +0 -12
  744. package/dist/components/field-sync-labels.js.map +0 -1
  745. package/dist/components/field-sync.d.ts +0 -164
  746. package/dist/components/field-sync.js +0 -269
  747. package/dist/components/field-sync.js.map +0 -1
  748. package/dist/components/section-nav.d.ts +0 -37
  749. package/dist/components/section-nav.js +0 -33
  750. package/dist/components/section-nav.js.map +0 -1
  751. package/dist/components/sign-chip-labels.d.ts +0 -2
  752. package/dist/components/sign-chip-labels.js +0 -11
  753. package/dist/components/sign-chip-labels.js.map +0 -1
  754. package/dist/components/sign-chip.d.ts +0 -68
  755. package/dist/components/sign-chip.js +0 -47
  756. package/dist/components/sign-chip.js.map +0 -1
  757. package/dist/components/ui-labels.js.map +0 -1
  758. package/dist/lib/isin.d.ts +0 -28
  759. package/dist/lib/isin.js +0 -36
  760. package/dist/lib/isin.js.map +0 -1
  761. package/dist/shell/dev-switchers.d.ts +0 -6
  762. package/dist/shell/dev-switchers.js +0 -12
  763. package/dist/shell/dev-switchers.js.map +0 -1
  764. package/dist/shell/role-switcher.d.ts +0 -21
  765. package/dist/shell/role-switcher.js +0 -31
  766. package/dist/shell/role-switcher.js.map +0 -1
  767. package/src/components/field-sync-labels.ts +0 -13
  768. package/src/components/field-sync.tsx +0 -482
  769. package/src/components/section-nav.tsx +0 -65
  770. package/src/components/sign-chip-labels.ts +0 -12
  771. package/src/components/sign-chip.tsx +0 -124
  772. package/src/components/ui-labels.ts +0 -24
  773. package/src/lib/isin.ts +0 -62
  774. package/src/shell/dev-switchers.tsx +0 -18
  775. package/src/shell/role-switcher.tsx +0 -46
package/dist/tour/tour.js CHANGED
@@ -1,32 +1,43 @@
1
1
  "use client";
2
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import {
4
4
  createContext,
5
+ Suspense,
5
6
  useCallback,
6
7
  useContext,
7
8
  useEffect,
8
- useId,
9
9
  useLayoutEffect,
10
10
  useMemo,
11
11
  useRef,
12
- useState,
13
- useSyncExternalStore
12
+ useState
14
13
  } from "react";
15
- import { createPortal } from "react-dom";
16
- import { cn } from "../lib/cn.js";
17
14
  import { useKitLabels } from "../i18n/kit-labels.js";
18
- import { Button } from "../components/button.js";
19
- import { useFocusTrap } from "../hooks/use-focus-trap.js";
20
- import { useDismissLayer } from "../hooks/use-dismiss.js";
21
- import { sameRect } from "../hooks/use-anchored-rect.js";
22
- import { dirOf, horizontalStep } from "../lib/direction.js";
23
- import { isComposing } from "../lib/ime.js";
24
- import { focusQuietly } from "../lib/quiet-focus.js";
25
15
  import { DEFAULT_TOUR_LABELS } from "./tour-labels.js";
26
16
  import { completeStored, rememberAccount, rememberMigrate } from "./use-tour-progress.js";
27
- import { createGateRegistry, devWarnings, TourInternalContext } from "./tour-gates.js";
17
+ import { createGateRegistry, devWarnings, isShown, stepContext, TourInternalContext } from "./tour-gates.js";
28
18
  import { liveEngine } from "./tour-engine.js";
29
- import { DOCK_MAX_WIDTH, dockEdge, dockStyle, readBand, scrollIntoFreeHalf } from "./tour-dock.js";
19
+ import { lazyWithFallback } from "../lib/lazy-with-fallback.js";
20
+ const LazyTourOverlay = lazyWithFallback(
21
+ () => import("./tour-overlay.js").then((module) => module.TourOverlay),
22
+ TourOverlayUnavailable
23
+ );
24
+ const TourUnavailableContext = createContext(() => {
25
+ });
26
+ function TourOverlayUnavailable() {
27
+ const unavailable = useContext(TourUnavailableContext);
28
+ useLayoutEffect(unavailable, [unavailable]);
29
+ return null;
30
+ }
31
+ function TourOverlayLoading({ onSkip }) {
32
+ useEffect(() => {
33
+ const onKey = (e) => {
34
+ if (e.key === "Escape") onSkip();
35
+ };
36
+ document.addEventListener("keydown", onKey);
37
+ return () => document.removeEventListener("keydown", onKey);
38
+ }, [onSkip]);
39
+ return null;
40
+ }
30
41
  import { useTourGate, useTourGateRelease } from "./tour-gates.js";
31
42
  const ENGINE_KEYS = [
32
43
  "active",
@@ -200,7 +211,14 @@ function TourProvider({
200
211
  setActiveId(null);
201
212
  }, []);
202
213
  const skip = useCallback(() => {
203
- optsRef.current.onSkip?.();
214
+ optsRef.current.onSkip?.("skipped");
215
+ setSteps(null);
216
+ setActiveId(null);
217
+ }, []);
218
+ const unavailable = useCallback(() => {
219
+ if (!stepsRef.current) return;
220
+ stepsRef.current = null;
221
+ optsRef.current.onSkip?.("unavailable");
204
222
  setSteps(null);
205
223
  setActiveId(null);
206
224
  }, []);
@@ -264,33 +282,34 @@ function TourProvider({
264
282
  });
265
283
  return /* @__PURE__ */ jsx(TourInternalContext.Provider, { value: internals, children: /* @__PURE__ */ jsxs(TourContext.Provider, { value, children: [
266
284
  children,
267
- active && /* @__PURE__ */ jsx(
268
- TourOverlay,
269
- {
270
- steps,
271
- index,
272
- via: nav.via,
273
- floor: nav.floor,
274
- position: nav.position,
275
- count: nav.count,
276
- refusal: refusal?.step === steps[index] ? refusal : null,
277
- onGoTo: goToStep,
278
- labels: merged,
279
- gates,
280
- dockOnPhones,
281
- onNext: next,
282
- onPrev: prev,
283
- onSkip: skip
284
- }
285
- )
285
+ active ? (
286
+ // Its own boundary, so the first start's chunk fetch suspends nothing of the
287
+ // app's; it shows nothing meanwhile, as the overlay itself does until it has
288
+ // located the step, and hears Escape as it does. A failed fetch ends the run
289
+ // (`TourOverlayUnavailable`).
290
+ /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(TourOverlayLoading, { onSkip: skip }), children: /* @__PURE__ */ jsx(TourUnavailableContext.Provider, { value: unavailable, children: /* @__PURE__ */ jsx(
291
+ LazyTourOverlay,
292
+ {
293
+ steps,
294
+ index,
295
+ via: nav.via,
296
+ floor: nav.floor,
297
+ position: nav.position,
298
+ count: nav.count,
299
+ refusal: refusal?.step === steps[index] ? refusal : null,
300
+ onGoTo: goToStep,
301
+ labels: merged,
302
+ gates,
303
+ dockOnPhones,
304
+ onNext: next,
305
+ onPrev: prev,
306
+ onSkip: skip
307
+ }
308
+ ) }) })
309
+ ) : null
286
310
  ] }) });
287
311
  }
288
312
  const NO_NAV = { index: 0, floor: 0, via: "start", position: 0, count: 0 };
289
- const NOOP = () => {
290
- };
291
- function stepContext(gates, via) {
292
- return { gate: (key) => gates.get(key), via };
293
- }
294
313
  function resolveAt(steps, at) {
295
314
  if (typeof at === "number") return Math.min(Math.max(0, Math.floor(at)), Math.max(0, steps.length - 1));
296
315
  const anchor = `data-tour="${at}"`;
@@ -300,747 +319,6 @@ function resolveAt(steps, at) {
300
319
  console.warn(`[ui-kit] A tour was started at "${at}", but no step targets [${anchor}]: it starts at 0.`);
301
320
  return 0;
302
321
  }
303
- function firstEmptied(steps, floor, index, gates) {
304
- const ctx = stepContext(gates, "goto");
305
- for (let j = floor; j < index; j++) {
306
- const key = steps[j].gate;
307
- if (key && gates.get(key) === false && isShown(steps[j], ctx)) return j;
308
- }
309
- return -1;
310
- }
311
- function isShown(step, ctx) {
312
- if (!step.when) return true;
313
- try {
314
- return step.when(ctx) === true;
315
- } catch (error) {
316
- console.error(error);
317
- return false;
318
- }
319
- }
320
- function isVisible(el) {
321
- const r = el.getBoundingClientRect();
322
- if (r.width <= 0 || r.height <= 0) return false;
323
- const style = getComputedStyle(el);
324
- return style.visibility !== "hidden" && style.display !== "none";
325
- }
326
- function queryVisibleTarget(selector) {
327
- const els = document.querySelectorAll(selector);
328
- for (const el of els) {
329
- if (isVisible(el)) return el;
330
- }
331
- return null;
332
- }
333
- function rectOf(el) {
334
- const r = el.getBoundingClientRect();
335
- return { top: r.top, left: r.left, width: r.width, height: r.height };
336
- }
337
- const RING_BAND = 6;
338
- function spotRectOf(el, step) {
339
- const own = rectOf(el);
340
- if (!isFieldStep(step)) return own;
341
- const ids = /* @__PURE__ */ new Set();
342
- const holders = [el, ...Array.from(el.querySelectorAll("[aria-describedby]"))];
343
- for (const holder of holders) {
344
- for (const id of (holder.getAttribute("aria-describedby") ?? "").split(/\s+/)) if (id) ids.add(id);
345
- }
346
- if (ids.size === 0) return own;
347
- const lines = [];
348
- for (const id of ids) {
349
- const line = document.getElementById(id);
350
- if (!line || el.contains(line) || line.closest('[role="tooltip"]') || !isVisible(line)) continue;
351
- const r = line.getBoundingClientRect();
352
- if (r.width > 1 && r.height > 1) lines.push(r);
353
- }
354
- let top = own.top;
355
- let left = own.left;
356
- let right = own.left + own.width;
357
- let bottom = own.top + own.height;
358
- const reach = (step.padding ?? 8) + RING_BAND;
359
- for (let grew = true; grew; ) {
360
- grew = false;
361
- for (let i = lines.length - 1; i >= 0; i--) {
362
- const r = lines[i];
363
- const across = r.left < right && r.right > left;
364
- const gap = Math.max(r.top - bottom, top - r.bottom);
365
- if (!across || gap > reach) continue;
366
- top = Math.min(top, r.top);
367
- left = Math.min(left, r.left);
368
- right = Math.max(right, r.right);
369
- bottom = Math.max(bottom, r.bottom);
370
- lines.splice(i, 1);
371
- grew = true;
372
- }
373
- }
374
- return { top, left, width: right - left, height: bottom - top };
375
- }
376
- function layerHost(el) {
377
- return el.closest("[data-kit-layer]");
378
- }
379
- function coversViewport(host, el) {
380
- let surface = host;
381
- if (host.getAttribute("data-kit-layer") === "backdrop") {
382
- for (const child of Array.from(host.children)) {
383
- if (child.contains(el)) {
384
- surface = child;
385
- break;
386
- }
387
- }
388
- }
389
- const r = surface.getBoundingClientRect();
390
- const vv = window.visualViewport;
391
- const top = vv?.offsetTop ?? 0;
392
- const bottom = top + (vv?.height ?? window.innerHeight);
393
- const width = vv?.width ?? window.innerWidth;
394
- return r.width > 0 && r.left <= 1 && r.top <= top + 1 && r.right >= width - 1 && r.bottom >= bottom - 1;
395
- }
396
- function docks(step, dockOnPhones) {
397
- if (typeof window === "undefined" || window.innerWidth >= DOCK_MAX_WIDTH || !step.target) return false;
398
- return step.placement === "dock" || step.placement === void 0 && dockOnPhones && isFieldStep(step);
399
- }
400
- function isFieldStep(step) {
401
- return !!(step.interactive || step.awaitInput || step.gate || step.awaitGate);
402
- }
403
- function firstFocusable(el) {
404
- if (el instanceof HTMLElement && el.matches(FOCUSABLE_CONTROL)) return el;
405
- return el.querySelector(FOCUSABLE_CONTROL);
406
- }
407
- function tabStops(el) {
408
- const all = el.matches(FOCUSABLE_CONTROL) ? [el] : [];
409
- return all.concat(
410
- Array.from(el.querySelectorAll(FOCUSABLE_CONTROL)).filter(
411
- (x) => x.tabIndex >= 0 && !x.closest("[hidden],[inert]")
412
- )
413
- );
414
- }
415
- const FOCUSABLE_CONTROL = 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])';
416
- function coarsePointer() {
417
- return typeof window !== "undefined" && typeof window.matchMedia === "function" ? window.matchMedia("(pointer: coarse)").matches : false;
418
- }
419
- function TourOverlay({
420
- steps,
421
- index,
422
- via,
423
- floor,
424
- position,
425
- count,
426
- refusal,
427
- onGoTo,
428
- labels,
429
- gates,
430
- dockOnPhones,
431
- onNext,
432
- onPrev,
433
- onSkip
434
- }) {
435
- const step = steps[index];
436
- const isFirst = position <= 1;
437
- const isLast = position >= count;
438
- const [located, setLocated] = useState(null);
439
- const current = located !== null && located.index === index && located.step === step ? located : null;
440
- const ready = current !== null;
441
- const rect = current?.rect ?? null;
442
- const dir = current?.dir ?? "ltr";
443
- const rootRef = useRef(null);
444
- const cardRef = useRef(null);
445
- const bodyId = useId();
446
- const hintId = useId();
447
- const gateVersion = useSyncExternalStore(gates.subscribe, gates.version, gates.version);
448
- const gateKey = step.gate;
449
- const enforced = !!gateKey && gates.has(gateKey);
450
- const locked = enforced && gates.get(gateKey) !== true;
451
- const [polite, setPolite] = useState("");
452
- const announce = useCallback((text) => {
453
- setPolite((prev) => prev === text ? `${text}\u200B` : text);
454
- }, []);
455
- useEffect(() => {
456
- let cancelled = false;
457
- let raf = 0;
458
- const settle = (el) => {
459
- let layer2 = null;
460
- let fullScreen = false;
461
- if (el && isFieldStep(step)) {
462
- const host = layerHost(el);
463
- layer2 = document.createElement("div");
464
- layer2.setAttribute("data-tour-layer", "");
465
- if (host) host.after(layer2);
466
- else document.body.appendChild(layer2);
467
- fullScreen = !!host && coversViewport(host, el);
468
- }
469
- setLocated({ index, step, rect: el ? spotRectOf(el, step) : null, dir: dirOf(el), layer: layer2, fullScreen });
470
- };
471
- void (async () => {
472
- try {
473
- await step.beforeStep?.(stepContext(gates, via));
474
- } catch (error) {
475
- console.error(error);
476
- }
477
- if (cancelled) return;
478
- if (!step.target) {
479
- settle(null);
480
- return;
481
- }
482
- let tries = 0;
483
- const find = () => {
484
- if (cancelled) return;
485
- const el = queryVisibleTarget(step.target);
486
- if (el) {
487
- if (docks(step, dockOnPhones)) scrollIntoFreeHalf(el, null, null);
488
- else el.scrollIntoView({ block: "center", behavior: "smooth" });
489
- settle(el);
490
- return;
491
- }
492
- if (tries++ < 45) raf = requestAnimationFrame(find);
493
- else settle(null);
494
- };
495
- find();
496
- })();
497
- return () => {
498
- cancelled = true;
499
- cancelAnimationFrame(raf);
500
- };
501
- }, [index, step]);
502
- useEffect(() => {
503
- if (!step.target) return;
504
- const update = () => {
505
- const el = queryVisibleTarget(step.target);
506
- if (el) {
507
- const next = spotRectOf(el, step);
508
- const host = layerHost(el);
509
- const full = !!host && coversViewport(host, el);
510
- setLocated((prev) => {
511
- if (!prev || prev.index !== index || prev.step !== step) return prev;
512
- const fullScreen = prev.layer ? full : prev.fullScreen;
513
- if (sameRect(prev.rect, next) && fullScreen === prev.fullScreen) return prev;
514
- return { ...prev, rect: next, fullScreen };
515
- });
516
- }
517
- };
518
- window.addEventListener("scroll", update, true);
519
- window.addEventListener("resize", update);
520
- const id = window.setInterval(update, 250);
521
- return () => {
522
- window.removeEventListener("scroll", update, true);
523
- window.removeEventListener("resize", update);
524
- clearInterval(id);
525
- };
526
- }, [index, step]);
527
- const layer = located?.layer ?? null;
528
- useEffect(() => {
529
- if (!layer) return;
530
- return () => layer.remove();
531
- }, [layer]);
532
- useDismissLayer(
533
- ready,
534
- (e) => {
535
- if (fieldStepNow && step.target && e.target instanceof Node) {
536
- const el = queryVisibleTarget(step.target);
537
- if (el?.contains(e.target)) return;
538
- }
539
- onSkip();
540
- },
541
- // Not an overlay to `useOverlayOpen`: a floating launcher a tour spotlights stays.
542
- { overlay: false }
543
- );
544
- const spotted = rect !== null;
545
- useEffect(() => {
546
- if (!ready || !spotted || !step.awaitClick || !step.target) return;
547
- const el = queryVisibleTarget(step.target);
548
- if (!el) return;
549
- const onClick = () => window.setTimeout(() => onNext(), 0);
550
- el.addEventListener("click", onClick, { once: true });
551
- return () => el.removeEventListener("click", onClick);
552
- }, [ready, spotted, index, step, onNext]);
553
- const interactive = spotted && !!step.target && !!(step.interactive || step.awaitInput || step.gate || step.awaitGate);
554
- const guided = interactive && !!(step.gate || step.awaitInput || step.awaitGate);
555
- const fieldStepNow = interactive;
556
- const awaitsRelease = spotted && !!step.target && !!step.awaitGate;
557
- const warnedGateRef = useRef(null);
558
- useEffect(() => {
559
- if (!ready || !gateKey || gates.has(gateKey) || !devWarnings() || warnedGateRef.current === step) return;
560
- warnedGateRef.current = step;
561
- console.warn(
562
- `[ui-kit] Tour step "${step.title}" waits for the gate "${gateKey}", which nothing publishes: its Next is open. Publish it with useTourGate beside the field, or the form has closed under the tour.`
563
- );
564
- }, [ready, gateKey, gates, step, gateVersion]);
565
- useEffect(() => {
566
- if (!ready || !step.optional || step.gate || !devWarnings()) return;
567
- console.warn(
568
- `[ui-kit] Tour step "${step.title}" is \`optional\` without a \`gate\`: it shows the Optional chip and a plain Next. "Leave empty" needs a gate to compare.`
569
- );
570
- }, [ready, step]);
571
- const wasLockedRef = useRef(null);
572
- useEffect(() => {
573
- if (!ready || !gateKey) return;
574
- const before = wasLockedRef.current;
575
- if (before && before.step === step && before.locked && !locked && enforced) announce(labels.gateReady);
576
- wasLockedRef.current = { step, locked };
577
- }, [ready, gateKey, step, locked, enforced, announce, labels.gateReady]);
578
- useEffect(() => {
579
- if (!ready || !guided || !step.target) return;
580
- const el = queryVisibleTarget(step.target);
581
- const control = el ? firstFocusable(el) : null;
582
- const previous = control ? control.getAttribute("aria-describedby") : null;
583
- if (control) control.setAttribute("aria-describedby", previous ? `${previous} ${bodyId}` : bodyId);
584
- if (coarsePointer() || !control) cardRef.current?.focus();
585
- else if (!el.contains(document.activeElement)) focusQuietly(control);
586
- if (!control) return;
587
- return () => {
588
- if (previous === null) control.removeAttribute("aria-describedby");
589
- else control.setAttribute("aria-describedby", previous);
590
- };
591
- }, [ready, guided, index, step, bodyId]);
592
- useEffect(() => {
593
- if (!ready || !guided || !step.target) return;
594
- const onTab = (e) => {
595
- if (e.key !== "Tab") return;
596
- const el = queryVisibleTarget(step.target);
597
- const card = cardRef.current;
598
- if (!el || !card) return;
599
- const active = document.activeElement;
600
- const fieldStops = tabStops(el);
601
- const cardStops = tabStops(card);
602
- if (fieldStops.length === 0 || cardStops.length === 0) return;
603
- let to = null;
604
- if (active instanceof Node && el.contains(active)) {
605
- if (!e.shiftKey && active === fieldStops[fieldStops.length - 1]) to = cardStops[0];
606
- else if (e.shiftKey && active === fieldStops[0]) to = cardStops[cardStops.length - 1];
607
- } else if (active instanceof Node && card.contains(active)) {
608
- if (!e.shiftKey && active === cardStops[cardStops.length - 1]) to = fieldStops[0];
609
- else if (e.shiftKey && (active === cardStops[0] || active === card)) to = fieldStops[fieldStops.length - 1];
610
- }
611
- if (!to) return;
612
- e.preventDefault();
613
- e.stopPropagation();
614
- to.focus();
615
- };
616
- document.addEventListener("keydown", onTab, true);
617
- return () => document.removeEventListener("keydown", onTab, true);
618
- }, [ready, guided, index, step]);
619
- useEffect(() => {
620
- if (!ready || !spotted || !gateKey || !step.target) return;
621
- const el = queryVisibleTarget(step.target);
622
- if (!el) return;
623
- const satisfied = () => !gates.has(gateKey) || gates.get(gateKey) === true;
624
- let timer = 0;
625
- let armed = el.contains(document.activeElement);
626
- const check = () => {
627
- window.clearTimeout(timer);
628
- timer = window.setTimeout(() => {
629
- if (satisfied()) onNext();
630
- }, 0);
631
- };
632
- const onFocusIn = () => {
633
- armed = true;
634
- };
635
- const onFocusOut = (e) => {
636
- const to = e.relatedTarget;
637
- if (to instanceof Node && el.contains(to)) return;
638
- const wasArmed = armed;
639
- armed = false;
640
- if (!wasArmed) return;
641
- if (to === null || to instanceof Node && rootRef.current?.contains(to)) check();
642
- };
643
- const onKeyDown = (e) => {
644
- if (e.key !== "Enter" || !(e.target instanceof Node) || !el.contains(e.target)) return;
645
- if (e.defaultPrevented || isComposing(e)) return;
646
- if (e.target instanceof HTMLTextAreaElement && !(e.ctrlKey || e.metaKey)) return;
647
- check();
648
- };
649
- el.addEventListener("focusin", onFocusIn);
650
- el.addEventListener("focusout", onFocusOut);
651
- document.addEventListener("keydown", onKeyDown);
652
- return () => {
653
- window.clearTimeout(timer);
654
- el.removeEventListener("focusin", onFocusIn);
655
- el.removeEventListener("focusout", onFocusOut);
656
- document.removeEventListener("keydown", onKeyDown);
657
- };
658
- }, [ready, spotted, gateKey, gates, index, step, onNext]);
659
- useEffect(() => {
660
- if (!ready || !spotted || !step.awaitInput || !step.target) return;
661
- const el = queryVisibleTarget(step.target);
662
- if (!el) return;
663
- const read = () => fieldValues(el);
664
- const before = read();
665
- let timer = 0;
666
- let done = false;
667
- const check = () => {
668
- window.clearTimeout(timer);
669
- timer = window.setTimeout(() => {
670
- if (done || read() === before) return;
671
- done = true;
672
- onNext();
673
- }, 0);
674
- };
675
- const onFocusOut = (e) => {
676
- if (e.relatedTarget instanceof Node && el.contains(e.relatedTarget)) return;
677
- check();
678
- };
679
- const onKeyDown = (e) => {
680
- if (e.key === "Enter") check();
681
- };
682
- el.addEventListener("focusout", onFocusOut);
683
- el.addEventListener("keydown", onKeyDown);
684
- el.addEventListener("change", check);
685
- return () => {
686
- window.clearTimeout(timer);
687
- el.removeEventListener("focusout", onFocusOut);
688
- el.removeEventListener("keydown", onKeyDown);
689
- el.removeEventListener("change", check);
690
- };
691
- }, [ready, spotted, index, step, onNext]);
692
- const gateHint = step.gateHint ?? labels.gateHint;
693
- const lockedNext = useCallback(() => {
694
- const el = step.target ? queryVisibleTarget(step.target) : null;
695
- const control = el ? firstFocusable(el) : null;
696
- if (control) focusQuietly(control);
697
- announce(gateHint);
698
- }, [step.target, announce, gateHint]);
699
- const tryNext = awaitsRelease ? NOOP : locked ? lockedNext : onNext;
700
- const backTo = refusal ? firstEmptied(steps, floor, index, gates) : -1;
701
- useEffect(() => {
702
- const onKey = (e) => {
703
- if (interactive && e.target instanceof Node && e.target !== document.body && !rootRef.current?.contains(e.target)) {
704
- return;
705
- }
706
- if (e.key === "Escape") {
707
- if (!ready) onSkip();
708
- return;
709
- }
710
- if (!ready) return;
711
- if (e.key === "Enter") {
712
- if (step.awaitClick || step.awaitInput || ownsKey(e.target, "Enter")) return;
713
- e.preventDefault();
714
- tryNext();
715
- return;
716
- }
717
- if (ownsKey(e.target, e.key)) return;
718
- const delta = horizontalStep(e.key, rootRef.current);
719
- if (delta === 1) {
720
- e.preventDefault();
721
- tryNext();
722
- } else if (delta === -1) {
723
- if (!isFirst) onPrev();
724
- }
725
- };
726
- document.addEventListener("keydown", onKey);
727
- return () => document.removeEventListener("keydown", onKey);
728
- }, [isFirst, step, interactive, tryNext, onPrev, onSkip, ready]);
729
- if (!ready) return null;
730
- const bare = interactive && !!current?.fullScreen;
731
- const pad = step.padding ?? 8;
732
- const spot = rect ? { top: rect.top - pad, left: rect.left - pad, width: rect.width + pad * 2, height: rect.height + pad * 2 } : null;
733
- return createPortal(
734
- /* @__PURE__ */ jsxs(
735
- "div",
736
- {
737
- ref: rootRef,
738
- className: cn("pointer-events-none fixed inset-0", interactive ? "z-50" : "z-[60]"),
739
- role: "dialog",
740
- "aria-modal": interactive ? void 0 : "true",
741
- "data-tour-overlay": "",
742
- "data-tour-interactive": interactive ? "" : void 0,
743
- "data-tour-bare": bare ? "" : void 0,
744
- "aria-label": step.title,
745
- dir,
746
- children: [
747
- spot && !bare && /* @__PURE__ */ jsx(SpotlightShields, { spot }),
748
- spot ? /* @__PURE__ */ jsx(
749
- "div",
750
- {
751
- className: "pointer-events-none fixed rounded-lg transition-all duration-200 ease-out",
752
- style: {
753
- top: spot.top,
754
- left: spot.left,
755
- width: spot.width,
756
- height: spot.height,
757
- // A two-tone frame, not a single translucent ring.
758
- //
759
- // The old treatment was `ring-2 ring-white/80` over a 55% scrim, and it
760
- // "was barely visible" on the app's blue-tinted surfaces. Two reasons,
761
- // and a single ring can't fix either: at 55% the surround stays bright
762
- // enough that the un-dimmed hole barely reads AS a hole, and a 80%-white
763
- // ring sitting on the edge of a light card is white-on-near-white.
764
- //
765
- // So: an opaque white band immediately around the target, a dark keyline
766
- // outside it, then the scrim. Whatever the target's own colour is, one of
767
- // the two bands is always in contrast with it and the other is always in
768
- // contrast with the dimmed surround — there is no background that can
769
- // swallow both. The blurred layer between them softens the step so the
770
- // frame reads as lighting rather than as a pasted-on rectangle.
771
- boxShadow: [
772
- "0 0 0 3px rgba(255,255,255,0.98)",
773
- "0 0 0 5px rgba(15,23,42,0.92)",
774
- "0 0 18px 6px rgba(15,23,42,0.45)",
775
- ...bare ? [] : ["0 0 0 9999px rgba(15,23,42,0.70)"]
776
- ].join(", ")
777
- }
778
- }
779
- ) : /* @__PURE__ */ jsx("div", { className: "pointer-events-auto fixed inset-0 bg-black/70" }),
780
- /* @__PURE__ */ jsx(
781
- TourCard,
782
- {
783
- cardRef,
784
- step,
785
- index,
786
- position,
787
- total: count,
788
- labels,
789
- isFirst,
790
- isLast,
791
- rect: spot,
792
- dir,
793
- trap: !guided,
794
- bodyId,
795
- hintId,
796
- locked,
797
- gateHint,
798
- onBack: onPrev,
799
- onNext: tryNext,
800
- onLeaveEmpty: onNext,
801
- onSkip,
802
- awaitsRelease,
803
- docked: spot !== null && docks(step, dockOnPhones),
804
- refusal,
805
- backTo: backTo >= 0 ? { title: steps[backTo].title, go: () => onGoTo(backTo) } : null
806
- }
807
- ),
808
- /* @__PURE__ */ jsx("div", { className: "sr-only", "aria-live": "polite", "aria-atomic": "true", children: polite })
809
- ]
810
- }
811
- ),
812
- interactive && current?.layer || document.body
813
- );
814
- }
815
- function fieldValues(el) {
816
- const fields = el.matches("input,textarea,select") ? [el] : Array.from(el.querySelectorAll("input,textarea,select"));
817
- return fields.map(
818
- (f) => f instanceof HTMLInputElement && (f.type === "checkbox" || f.type === "radio") ? String(f.checked) : f.value
819
- ).join("\0");
820
- }
821
- function ownsKey(target, key) {
822
- if (!(target instanceof HTMLElement)) return false;
823
- if (target.isContentEditable) return true;
824
- const tag = target.tagName;
825
- if (tag === "TEXTAREA" || tag === "SELECT") return true;
826
- if (tag === "INPUT") {
827
- const type = target.type;
828
- return key !== "Enter" || type !== "checkbox";
829
- }
830
- if (key !== "Enter") return false;
831
- return tag === "BUTTON" || tag === "A" && target.hasAttribute("href") || target.getAttribute("role") === "button" || target.getAttribute("role") === "link";
832
- }
833
- function SpotlightShields({ spot }) {
834
- const shield = "pointer-events-auto fixed";
835
- const bottom = spot.top + spot.height;
836
- return /* @__PURE__ */ jsxs(Fragment, { children: [
837
- /* @__PURE__ */ jsx(
838
- "div",
839
- {
840
- "data-tour-shield": "",
841
- className: shield,
842
- style: { top: 0, left: 0, right: 0, height: Math.max(0, spot.top) }
843
- }
844
- ),
845
- /* @__PURE__ */ jsx("div", { "data-tour-shield": "", className: shield, style: { top: bottom, left: 0, right: 0, bottom: 0 } }),
846
- /* @__PURE__ */ jsx(
847
- "div",
848
- {
849
- "data-tour-shield": "",
850
- className: shield,
851
- style: { top: spot.top, left: 0, width: Math.max(0, spot.left), height: spot.height }
852
- }
853
- ),
854
- /* @__PURE__ */ jsx(
855
- "div",
856
- {
857
- "data-tour-shield": "",
858
- className: shield,
859
- style: { top: spot.top, left: spot.left + spot.width, right: 0, height: spot.height }
860
- }
861
- )
862
- ] });
863
- }
864
- function placeCard(rect, cw, ch, vw, vh, m, placement, dir = "ltr") {
865
- if (placement === "start") placement = dir === "rtl" ? "right" : "left";
866
- else if (placement === "end") placement = dir === "rtl" ? "left" : "right";
867
- if (!rect || placement === "center") {
868
- return { top: Math.max(m, (vh - ch) / 2), left: Math.max(m, (vw - cw) / 2) };
869
- }
870
- const clampX = (x) => Math.min(Math.max(m, x), Math.max(m, vw - cw - m));
871
- const clampY = (y) => Math.min(Math.max(m, y), Math.max(m, vh - ch - m));
872
- const centerX = clampX(rect.left + rect.width / 2 - cw / 2);
873
- const centerY = clampY(rect.top + rect.height / 2 - ch / 2);
874
- const belowTop = rect.top + rect.height + m;
875
- const aboveTop = rect.top - ch - m;
876
- const rightLeft = rect.left + rect.width + m;
877
- const leftLeft = rect.left - cw - m;
878
- const fitsBelow = belowTop + ch <= vh;
879
- const fitsAbove = aboveTop >= 0;
880
- const fitsRight = rightLeft + cw <= vw;
881
- const fitsLeft = leftLeft >= 0;
882
- switch (placement) {
883
- case "top":
884
- return { top: fitsAbove ? aboveTop : fitsBelow ? belowTop : clampY(aboveTop), left: centerX };
885
- case "bottom":
886
- return { top: fitsBelow ? belowTop : fitsAbove ? aboveTop : clampY(belowTop), left: centerX };
887
- case "right":
888
- return { top: centerY, left: fitsRight ? rightLeft : fitsLeft ? leftLeft : clampX(rightLeft) };
889
- case "left":
890
- return { top: centerY, left: fitsLeft ? leftLeft : fitsRight ? rightLeft : clampX(leftLeft) };
891
- default:
892
- if (fitsBelow) return { top: belowTop, left: centerX };
893
- if (fitsAbove) return { top: aboveTop, left: centerX };
894
- return { top: Math.max(m, (vh - ch) / 2), left: centerX };
895
- }
896
- }
897
- function TourCard({
898
- cardRef: ref,
899
- step,
900
- index,
901
- position,
902
- total,
903
- labels,
904
- isFirst,
905
- isLast,
906
- rect,
907
- dir,
908
- trap,
909
- bodyId,
910
- hintId,
911
- locked,
912
- gateHint,
913
- onBack,
914
- onNext,
915
- onLeaveEmpty,
916
- onSkip,
917
- awaitsRelease,
918
- docked,
919
- refusal,
920
- backTo
921
- }) {
922
- const [style, setStyle] = useState({ opacity: 0 });
923
- useFocusTrap(ref, { active: trap });
924
- const edgeRef = useRef(null);
925
- const [bandTick, setBandTick] = useState(0);
926
- const [edge, setEdge] = useState(null);
927
- useEffect(() => {
928
- if (!docked) return;
929
- let last = "";
930
- const look = () => {
931
- const target = step.target ? queryVisibleTarget(step.target) : null;
932
- const band = readBand(target, ref.current);
933
- const key = `${band.top}:${band.bottom}`;
934
- if (key === last) return;
935
- last = key;
936
- if (target) {
937
- const r = target.getBoundingClientRect();
938
- if (r.top < band.top || r.bottom > band.bottom) {
939
- edgeRef.current = scrollIntoFreeHalf(target, ref.current, edgeRef.current);
940
- }
941
- }
942
- setBandTick((t) => t + 1);
943
- };
944
- const vv = window.visualViewport;
945
- vv?.addEventListener("resize", look);
946
- vv?.addEventListener("scroll", look);
947
- window.addEventListener("resize", look);
948
- const id = window.setInterval(look, 250);
949
- return () => {
950
- vv?.removeEventListener("resize", look);
951
- vv?.removeEventListener("scroll", look);
952
- window.removeEventListener("resize", look);
953
- clearInterval(id);
954
- };
955
- }, [docked, step.target, ref]);
956
- useLayoutEffect(() => {
957
- const card = ref.current;
958
- if (!card) return;
959
- if (docked) {
960
- const target = step.target ? queryVisibleTarget(step.target) : null;
961
- const band = readBand(target, card);
962
- const next = rect ? dockEdge(rect, band, edgeRef.current, card.offsetHeight) : "bottom";
963
- edgeRef.current = next;
964
- setEdge(next);
965
- setStyle(dockStyle(next, rect, band));
966
- return;
967
- }
968
- setEdge(null);
969
- setStyle(
970
- placeCard(
971
- rect,
972
- card.offsetWidth,
973
- card.offsetHeight,
974
- window.innerWidth,
975
- window.innerHeight,
976
- 12,
977
- step.placement,
978
- dir
979
- )
980
- );
981
- }, [ref, rect, index, step.placement, step.target, dir, docked, bandTick]);
982
- const awaitsTarget = (step.awaitClick || step.awaitInput) && step.target && rect || awaitsRelease;
983
- return /* @__PURE__ */ jsxs(
984
- "div",
985
- {
986
- ref,
987
- tabIndex: -1,
988
- style,
989
- "data-tour-card": "",
990
- "data-tour-docked": edge ?? void 0,
991
- className: cn(
992
- "pointer-events-auto fixed z-[61] w-80 max-w-[calc(100vw-1.5rem)] rounded-lg border border-subtle bg-surface p-4 shadow-xl outline-none transition-all duration-200 ease-out",
993
- // Docked, the height is capped: the body scrolls, the title and buttons stay.
994
- docked && "flex flex-col"
995
- ),
996
- children: [
997
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-1 text-sm font-semibold text-primary", children: [
998
- /* @__PURE__ */ jsx("span", { children: step.title }),
999
- step.optional && /* @__PURE__ */ jsx("span", { className: "rounded-full border border-subtle px-1.5 py-px text-xs font-normal text-muted", children: labels.optional })
1000
- ] }),
1001
- /* @__PURE__ */ jsx(
1002
- "div",
1003
- {
1004
- id: bodyId,
1005
- className: cn("mt-1 text-sm leading-relaxed text-secondary", docked && "min-h-0 shrink overflow-y-auto"),
1006
- children: step.body
1007
- }
1008
- ),
1009
- step.action && /* @__PURE__ */ jsx("div", { className: "mt-3", children: step.action }),
1010
- /* @__PURE__ */ jsxs("div", { className: "mt-4 space-y-2", children: [
1011
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
1012
- /* @__PURE__ */ jsx("button", { type: "button", onClick: onSkip, className: "text-xs text-placeholder hover:text-secondary", children: labels.skip }),
1013
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1014
- /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap text-xs tabular-nums text-placeholder", children: labels.step(position, total) }),
1015
- !isFirst && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: onBack, className: "px-2.5 py-1 text-xs", children: labels.back }),
1016
- step.optional && locked && !awaitsTarget && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: onLeaveEmpty, className: "px-2.5 py-1 text-xs", children: labels.leaveEmpty }),
1017
- !awaitsTarget && /* @__PURE__ */ jsx(
1018
- Button,
1019
- {
1020
- variant: "accent",
1021
- onClick: onNext,
1022
- "aria-disabled": locked || void 0,
1023
- "aria-describedby": locked ? hintId : void 0,
1024
- className: cn("px-2.5 py-1 text-xs", locked && "opacity-60"),
1025
- children: isLast ? labels.done : labels.next
1026
- }
1027
- )
1028
- ] })
1029
- ] }),
1030
- awaitsTarget && /* @__PURE__ */ jsx("div", { className: "text-center text-xs italic text-placeholder", children: awaitsRelease ? step.awaitGateHint ?? labels.awaitGateHint : step.awaitInput && !step.awaitClick ? labels.awaitInputHint : labels.awaitClickHint }),
1031
- awaitsRelease && /* @__PURE__ */ jsxs("div", { "aria-live": "assertive", "aria-atomic": "true", className: "space-y-1", children: [
1032
- refusal && /* @__PURE__ */ jsxs("p", { "data-tour-refused": "", className: "text-xs text-danger", children: [
1033
- refusal.reason ?? labels.awaitGateRefused,
1034
- refusal.seq % 2 === 0 ? "\u200B" : ""
1035
- ] }),
1036
- refusal && backTo && /* @__PURE__ */ jsx(Button, { variant: "link", onClick: backTo.go, className: "text-xs", children: labels.backToStep(backTo.title) })
1037
- ] }),
1038
- locked && !awaitsTarget && /* @__PURE__ */ jsx("div", { id: hintId, className: "text-center text-xs italic text-placeholder", children: gateHint })
1039
- ] })
1040
- ]
1041
- }
1042
- );
1043
- }
1044
322
  export {
1045
323
  DEFAULT_TOUR_LABELS,
1046
324
  TourProvider,