@adia-ai/web-components 0.8.40 → 0.8.42

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 (410) hide show
  1. package/CHANGELOG.md +71 -3
  2. package/MIGRATION.md +1229 -16
  3. package/README.md +25 -30
  4. package/USAGE.md +30 -4
  5. package/bin/audit-template-children.mjs +556 -0
  6. package/components/accordion/accordion-item.a2ui.json +4 -0
  7. package/components/accordion/accordion-item.yaml +2 -0
  8. package/components/accordion/accordion.a2ui.json +4 -0
  9. package/components/accordion/accordion.yaml +2 -0
  10. package/components/action-list/action-item.a2ui.json +29 -2
  11. package/components/action-list/action-item.yaml +46 -3
  12. package/components/action-list/action-list.a2ui.json +6 -1
  13. package/components/action-list/action-list.class.js +114 -11
  14. package/components/action-list/action-list.css +43 -3
  15. package/components/action-list/action-list.d.ts +6 -2
  16. package/components/action-list/action-list.yaml +5 -0
  17. package/components/adia-mark/adia-mark.a2ui.json +1 -0
  18. package/components/adia-wordmark/adia-wordmark.a2ui.json +1 -0
  19. package/components/agent-artifact/agent-artifact.a2ui.json +1 -0
  20. package/components/agent-feedback-bar/agent-feedback-bar.a2ui.json +6 -5
  21. package/components/agent-feedback-bar/agent-feedback-bar.yaml +6 -2
  22. package/components/agent-questions/agent-questions.a2ui.json +1 -0
  23. package/components/agent-reasoning/agent-reasoning.a2ui.json +6 -5
  24. package/components/agent-reasoning/agent-reasoning.yaml +6 -2
  25. package/components/agent-suggestions/agent-suggestions.a2ui.json +11 -2
  26. package/components/agent-suggestions/agent-suggestions.class.js +2 -1
  27. package/components/agent-suggestions/agent-suggestions.d.ts +4 -4
  28. package/components/agent-suggestions/agent-suggestions.yaml +4 -2
  29. package/components/agent-trace/agent-trace.a2ui.json +6 -5
  30. package/components/agent-trace/agent-trace.yaml +6 -2
  31. package/components/alert/alert.a2ui.json +1 -0
  32. package/components/alert/alert.css +1 -1
  33. package/components/anchor-bar/anchor-bar.a2ui.json +1 -0
  34. package/components/aside/aside.a2ui.json +1 -0
  35. package/components/avatar/avatar-group.a2ui.json +7 -1
  36. package/components/avatar/avatar-group.yaml +1 -0
  37. package/components/avatar/avatar.a2ui.json +12 -11
  38. package/components/avatar/avatar.d.ts +1 -1
  39. package/components/avatar/avatar.yaml +4 -4
  40. package/components/badge/badge.a2ui.json +1 -0
  41. package/components/block/block.a2ui.json +1 -0
  42. package/components/blockquote/blockquote.a2ui.json +1 -0
  43. package/components/breadcrumb/breadcrumb.a2ui.json +1 -0
  44. package/components/button/button.a2ui.json +1 -3
  45. package/components/button/button.yaml +1 -3
  46. package/components/calendar-grid/calendar-grid.a2ui.json +1 -0
  47. package/components/calendar-grid/calendar-grid.class.js +2 -1
  48. package/components/calendar-picker/calendar-picker.a2ui.json +143 -24
  49. package/components/calendar-picker/calendar-picker.class.js +490 -197
  50. package/components/calendar-picker/calendar-picker.css +120 -171
  51. package/components/calendar-picker/calendar-picker.yaml +225 -47
  52. package/components/canvas/canvas.a2ui.json +6 -5
  53. package/components/canvas/canvas.d.ts +37 -0
  54. package/components/canvas/canvas.js +72 -3
  55. package/components/canvas/canvas.yaml +6 -2
  56. package/components/card/card.a2ui.json +25 -2
  57. package/components/card/card.class.js +3 -0
  58. package/components/card/card.css +31 -1
  59. package/components/card/card.d.ts +2 -2
  60. package/components/card/card.examples.md +3 -3
  61. package/components/card/card.yaml +28 -4
  62. package/components/chart/chart.a2ui.json +27 -7
  63. package/components/chart/chart.class.js +64 -22
  64. package/components/chart/chart.css +6 -4
  65. package/components/chart/chart.d.ts +10 -4
  66. package/components/chart/chart.yaml +40 -6
  67. package/components/chart-legend/chart-legend.a2ui.json +7 -1
  68. package/components/chart-legend/chart-legend.class.js +59 -6
  69. package/components/chart-legend/chart-legend.css +5 -2
  70. package/components/chart-legend/chart-legend.d.ts +3 -1
  71. package/components/chart-legend/chart-legend.yaml +15 -1
  72. package/components/chat-thread/chat-input.a2ui.json +1 -0
  73. package/components/chat-thread/chat-thread.a2ui.json +10 -9
  74. package/components/chat-thread/chat-thread.yaml +13 -20
  75. package/components/check/check.a2ui.json +10 -9
  76. package/components/check/check.yaml +4 -4
  77. package/components/code/code.a2ui.json +1 -0
  78. package/components/col/col.a2ui.json +1 -0
  79. package/components/color-area/color-area.a2ui.json +148 -0
  80. package/components/color-area/color-area.class.js +657 -0
  81. package/components/color-area/color-area.css +188 -0
  82. package/components/color-area/color-area.d.ts +66 -0
  83. package/components/color-area/color-area.examples.md +19 -0
  84. package/components/color-area/color-area.js +17 -0
  85. package/components/color-area/color-area.yaml +183 -0
  86. package/components/color-input/color-input.a2ui.json +6 -5
  87. package/components/color-input/color-input.class.js +9 -6
  88. package/components/color-input/color-input.css +1 -1
  89. package/components/color-input/color-input.js +2 -2
  90. package/components/color-input/color-input.yaml +14 -12
  91. package/components/color-picker/color-picker.a2ui.json +16 -12
  92. package/components/color-picker/color-picker.class.js +24 -633
  93. package/components/color-picker/color-picker.css +14 -182
  94. package/components/color-picker/color-picker.yaml +41 -41
  95. package/components/combobox/combobox.a2ui.json +3 -2
  96. package/components/combobox/combobox.yaml +2 -2
  97. package/components/command/command.a2ui.json +12 -10
  98. package/components/command/command.class.js +3 -2
  99. package/components/command/command.yaml +17 -4
  100. package/components/context-menu/context-menu.a2ui.json +1 -0
  101. package/components/date-range-picker/date-range-picker.a2ui.json +2 -1
  102. package/components/date-range-picker/date-range-picker.yaml +1 -1
  103. package/components/datetime-picker/datetime-picker.a2ui.json +15 -108
  104. package/components/datetime-picker/datetime-picker.class.js +37 -690
  105. package/components/datetime-picker/datetime-picker.css +11 -183
  106. package/components/datetime-picker/datetime-picker.d.ts +4 -5
  107. package/components/datetime-picker/datetime-picker.yaml +44 -135
  108. package/components/demo-toggle/demo-toggle.a2ui.json +1 -0
  109. package/components/demo-toggle/demo-toggle.css +1 -1
  110. package/components/description-list/description-list.a2ui.json +2 -1
  111. package/components/description-list/description-list.css +1 -1
  112. package/components/description-list/description-list.d.ts +1 -1
  113. package/components/description-list/description-list.yaml +1 -1
  114. package/components/display-field/display-field.a2ui.json +1 -0
  115. package/components/divider/divider.a2ui.json +1 -0
  116. package/components/drawer/drawer.a2ui.json +1 -3
  117. package/components/drawer/drawer.css +1 -1
  118. package/components/drawer/drawer.yaml +0 -2
  119. package/components/drilldown/drilldown.a2ui.json +22 -20
  120. package/components/drilldown/drilldown.class.js +4 -3
  121. package/components/drilldown/drilldown.css +6 -6
  122. package/components/drilldown/drilldown.yaml +40 -9
  123. package/components/embed/embed.a2ui.json +6 -5
  124. package/components/embed/embed.yaml +2 -2
  125. package/components/empty-state/empty-state.a2ui.json +1 -0
  126. package/components/feed/feed-item.a2ui.json +25 -5
  127. package/components/feed/feed-item.yaml +28 -7
  128. package/components/feed/feed.a2ui.json +9 -2
  129. package/components/feed/feed.class.js +19 -12
  130. package/components/feed/feed.css +8 -8
  131. package/components/feed/feed.yaml +14 -1
  132. package/components/field/field.a2ui.json +2 -1
  133. package/components/field/field.class.js +4 -1
  134. package/components/field/field.examples.md +1 -1
  135. package/components/field/field.yaml +1 -1
  136. package/components/fields/fields.a2ui.json +1 -0
  137. package/components/fields/fields.examples.md +1 -1
  138. package/components/footer/footer.a2ui.json +1 -0
  139. package/components/frame/frame.a2ui.json +1 -0
  140. package/components/grid/grid.a2ui.json +1 -0
  141. package/components/header/header.a2ui.json +3 -2
  142. package/components/header/header.yaml +3 -3
  143. package/components/heatmap/heatmap.a2ui.json +2 -1
  144. package/components/heatmap/heatmap.class.js +1 -1
  145. package/components/heatmap/heatmap.css +4 -4
  146. package/components/heatmap/heatmap.yaml +1 -1
  147. package/components/icon/icon.a2ui.json +1 -0
  148. package/components/image/image.a2ui.json +28 -14
  149. package/components/image/image.class.js +38 -23
  150. package/components/image/image.css +18 -8
  151. package/components/image/image.d.ts +2 -2
  152. package/components/image/image.examples.md +3 -3
  153. package/components/image/image.yaml +23 -7
  154. package/components/index.js +1 -0
  155. package/components/inline-edit/inline-edit.a2ui.json +1 -0
  156. package/components/inline-message/inline-message.a2ui.json +3 -1
  157. package/components/inline-message/inline-message.class.js +3 -1
  158. package/components/inline-message/inline-message.d.ts +2 -2
  159. package/components/inline-message/inline-message.yaml +2 -1
  160. package/components/input/input.a2ui.json +66 -16
  161. package/components/input/input.class.js +64 -7
  162. package/components/input/input.css +14 -14
  163. package/components/input/input.d.ts +9 -4
  164. package/components/input/input.yaml +83 -10
  165. package/components/inspector/inspector.a2ui.json +1 -0
  166. package/components/integration-card/integration-card.a2ui.json +1 -0
  167. package/components/integration-card/integration-card.examples.md +2 -1
  168. package/components/kbd/kbd.a2ui.json +1 -0
  169. package/components/link/link.a2ui.json +2 -1
  170. package/components/link/link.yaml +1 -1
  171. package/components/list/list-item.a2ui.json +9 -0
  172. package/components/list/list-item.yaml +12 -0
  173. package/components/list/list.a2ui.json +9 -3
  174. package/components/list/list.class.js +14 -1
  175. package/components/list/list.css +12 -1
  176. package/components/list/list.d.ts +7 -5
  177. package/components/list/list.yaml +16 -6
  178. package/components/list-window/list-window.a2ui.json +1 -0
  179. package/components/list-window/list-window.class.js +2 -1
  180. package/components/loading-overlay/loading-overlay.a2ui.json +1 -0
  181. package/components/mark/mark.a2ui.json +2 -1
  182. package/components/mark/mark.yaml +1 -1
  183. package/components/menu/menu-divider.a2ui.json +1 -0
  184. package/components/menu/menu-item.a2ui.json +11 -4
  185. package/components/menu/menu-item.yaml +30 -3
  186. package/components/menu/menu-label.a2ui.json +1 -0
  187. package/components/menu/menu.a2ui.json +3 -2
  188. package/components/menu/menu.class.js +36 -8
  189. package/components/menu/menu.d.ts +5 -3
  190. package/components/menu/menu.yaml +3 -3
  191. package/components/modal/modal.a2ui.json +1 -0
  192. package/components/nav/nav.a2ui.json +1 -0
  193. package/components/nav/nav.class.js +14 -3
  194. package/components/nav-group/nav-group.a2ui.json +1 -0
  195. package/components/nav-group/nav-group.class.js +3 -1
  196. package/components/nav-item/nav-item.a2ui.json +1 -0
  197. package/components/noodles/noodles.a2ui.json +1 -0
  198. package/components/noodles/noodles.class.js +5 -1
  199. package/components/number-format/number-format.a2ui.json +1 -0
  200. package/components/option-card/option-card.a2ui.json +1 -0
  201. package/components/otp-input/otp-input.a2ui.json +3 -2
  202. package/components/otp-input/otp-input.yaml +9 -2
  203. package/components/page/page.a2ui.json +13 -0
  204. package/components/page/page.d.ts +1 -1
  205. package/components/page/page.yaml +1 -0
  206. package/components/pagination/pagination.a2ui.json +1 -0
  207. package/components/pagination/pagination.class.js +3 -2
  208. package/components/pane/pane.a2ui.json +17 -1
  209. package/components/pane/pane.class.js +35 -6
  210. package/components/pane/pane.css +17 -12
  211. package/components/pane/pane.d.ts +10 -7
  212. package/components/pane/pane.yaml +18 -1
  213. package/components/password-strength/password-strength.a2ui.json +1 -0
  214. package/components/pipeline-status/pipeline-status.a2ui.json +1 -0
  215. package/components/popover/popover.a2ui.json +7 -6
  216. package/components/popover/popover.class.js +2 -2
  217. package/components/popover/popover.d.ts +2 -2
  218. package/components/popover/popover.yaml +4 -4
  219. package/components/preview/preview.a2ui.json +1 -0
  220. package/components/preview/preview.class.js +5 -1
  221. package/components/progress/progress.a2ui.json +47 -24
  222. package/components/progress/progress.class.js +66 -11
  223. package/components/progress/progress.css +44 -26
  224. package/components/progress/progress.d.ts +7 -5
  225. package/components/progress/progress.examples.md +2 -2
  226. package/components/progress/progress.yaml +235 -53
  227. package/components/progress-row/progress-row.a2ui.json +16 -12
  228. package/components/progress-row/progress-row.d.ts +2 -2
  229. package/components/progress-row/progress-row.examples.md +2 -14
  230. package/components/progress-row/progress-row.yaml +28 -36
  231. package/components/qr-code/qr-code.a2ui.json +3 -2
  232. package/components/qr-code/qr-code.class.js +4 -4
  233. package/components/qr-code/qr-code.css +1 -1
  234. package/components/qr-code/qr-code.yaml +5 -3
  235. package/components/radio/radio.a2ui.json +8 -7
  236. package/components/radio/radio.class.js +8 -0
  237. package/components/radio/radio.yaml +3 -3
  238. package/components/radio-group/radio-group.a2ui.json +5 -3
  239. package/components/radio-group/radio-group.class.js +11 -0
  240. package/components/radio-group/radio-group.yaml +7 -1
  241. package/components/range/range.a2ui.json +6 -0
  242. package/components/range/range.class.js +2 -2
  243. package/components/range/range.css +2 -2
  244. package/components/range/range.yaml +3 -0
  245. package/components/rating/rating.a2ui.json +1 -0
  246. package/components/relative-time/relative-time.a2ui.json +1 -0
  247. package/components/richtext/richtext.a2ui.json +2 -1
  248. package/components/richtext/richtext.yaml +1 -1
  249. package/components/row/row.a2ui.json +1 -0
  250. package/components/search/search.a2ui.json +1 -0
  251. package/components/search/search.class.js +4 -1
  252. package/components/section/section.a2ui.json +1 -0
  253. package/components/segment/segment.a2ui.json +21 -10
  254. package/components/segment/segment.css +15 -0
  255. package/components/segment/segment.d.ts +2 -1
  256. package/components/segment/segment.yaml +20 -13
  257. package/components/segmented/segmented.a2ui.json +36 -7
  258. package/components/segmented/segmented.class.js +113 -22
  259. package/components/segmented/segmented.css +3 -0
  260. package/components/segmented/segmented.d.ts +3 -1
  261. package/components/segmented/segmented.yaml +80 -8
  262. package/components/select/select.a2ui.json +18 -13
  263. package/components/select/select.class.js +61 -37
  264. package/components/select/select.css +15 -13
  265. package/components/select/select.yaml +18 -7
  266. package/components/skeleton/skeleton.a2ui.json +8 -7
  267. package/components/skeleton/skeleton.class.js +8 -7
  268. package/components/skeleton/skeleton.css +21 -6
  269. package/components/skeleton/skeleton.d.ts +2 -2
  270. package/components/skeleton/skeleton.examples.md +2 -2
  271. package/components/skeleton/skeleton.yaml +3 -2
  272. package/components/skip-nav/skip-nav.a2ui.json +1 -0
  273. package/components/slider/slider.a2ui.json +6 -0
  274. package/components/slider/slider.class.js +20 -3
  275. package/components/slider/slider.css +2 -2
  276. package/components/slider/slider.yaml +3 -0
  277. package/components/spinner/spinner.a2ui.json +1 -0
  278. package/components/stack/stack.a2ui.json +1 -0
  279. package/components/stat/stat.a2ui.json +1 -0
  280. package/components/stat/stat.js +2 -2
  281. package/components/step-progress/step-progress.a2ui.json +1 -0
  282. package/components/step-progress/step-progress.yaml +1 -1
  283. package/components/stepper/stepper-item.a2ui.json +7 -3
  284. package/components/stepper/stepper-item.yaml +15 -5
  285. package/components/stepper/stepper.a2ui.json +5 -1
  286. package/components/stepper/stepper.class.js +31 -16
  287. package/components/stepper/stepper.d.ts +1 -1
  288. package/components/stepper/stepper.yaml +4 -2
  289. package/components/stream/stream.a2ui.json +1 -0
  290. package/components/swatch/swatch.a2ui.json +1 -0
  291. package/components/swatch/swatch.yaml +1 -1
  292. package/components/swiper/swiper.a2ui.json +1 -0
  293. package/components/swiper/swiper.class.js +5 -1
  294. package/components/switch/switch.a2ui.json +12 -11
  295. package/components/switch/switch.css +1 -1
  296. package/components/switch/switch.yaml +6 -6
  297. package/components/table/table.a2ui.json +1 -0
  298. package/components/table/table.class.js +14 -12
  299. package/components/table/table.css +11 -9
  300. package/components/table-toolbar/table-toolbar.a2ui.json +1 -0
  301. package/components/table-toolbar/table-toolbar.class.js +53 -22
  302. package/components/table-toolbar/table-toolbar.css +1 -1
  303. package/components/tabs/tab.a2ui.json +9 -0
  304. package/components/tabs/tab.js +4 -0
  305. package/components/tabs/tab.yaml +15 -0
  306. package/components/tabs/tabs.a2ui.json +9 -4
  307. package/components/tabs/tabs.class.js +13 -1
  308. package/components/tabs/tabs.css +8 -0
  309. package/components/tabs/tabs.d.ts +2 -0
  310. package/components/tabs/tabs.yaml +9 -2
  311. package/components/tag/tag.a2ui.json +1 -0
  312. package/components/tags-input/tags-input.a2ui.json +22 -17
  313. package/components/tags-input/tags-input.class.js +13 -11
  314. package/components/tags-input/tags-input.css +10 -6
  315. package/components/tags-input/tags-input.d.ts +16 -7
  316. package/components/tags-input/tags-input.examples.md +2 -2
  317. package/components/tags-input/tags-input.yaml +25 -8
  318. package/components/text/text.a2ui.json +6 -5
  319. package/components/text/text.css +10 -5
  320. package/components/text/text.d.ts +2 -2
  321. package/components/text/text.yaml +9 -4
  322. package/components/textarea/textarea.a2ui.json +2 -1
  323. package/components/textarea/textarea.yaml +1 -1
  324. package/components/theme-provider/theme-provider.a2ui.json +2 -1
  325. package/components/theme-provider/theme-provider.d.ts +5 -3
  326. package/components/theme-provider/theme-provider.yaml +5 -3
  327. package/components/time-picker/time-picker.a2ui.json +1 -0
  328. package/components/time-picker/time-picker.class.js +4 -2
  329. package/components/timeline/timeline-item.a2ui.json +26 -3
  330. package/components/timeline/timeline-item.yaml +22 -7
  331. package/components/timeline/timeline.a2ui.json +4 -0
  332. package/components/timeline/timeline.class.js +29 -18
  333. package/components/timeline/timeline.d.ts +3 -3
  334. package/components/timeline/timeline.yaml +2 -0
  335. package/components/toast/toast.a2ui.json +10 -3
  336. package/components/toast/toast.yaml +20 -13
  337. package/components/toc/toc.a2ui.json +1 -0
  338. package/components/toggle-group/toggle-group.a2ui.json +7 -3
  339. package/components/toggle-group/toggle-group.class.js +40 -1
  340. package/components/toggle-group/toggle-group.css +6 -1
  341. package/components/toggle-group/toggle-group.d.ts +2 -2
  342. package/components/toggle-group/toggle-group.yaml +21 -12
  343. package/components/toggle-group/toggle-option.a2ui.json +7 -3
  344. package/components/toggle-group/toggle-option.yaml +13 -7
  345. package/components/toggle-scheme/toggle-scheme.a2ui.json +2 -1
  346. package/components/toggle-scheme/toggle-scheme.yaml +1 -1
  347. package/components/toolbar/toolbar-group.a2ui.json +1 -0
  348. package/components/toolbar/toolbar.a2ui.json +1 -0
  349. package/components/toolbar/toolbar.class.js +3 -0
  350. package/components/tooltip/tooltip.a2ui.json +1 -0
  351. package/components/tour/tour-step.a2ui.json +4 -0
  352. package/components/tour/tour-step.yaml +2 -0
  353. package/components/tour/tour.a2ui.json +4 -0
  354. package/components/tour/tour.yaml +2 -0
  355. package/components/tree/tree-item.a2ui.json +5 -0
  356. package/components/tree/tree-item.yaml +3 -0
  357. package/components/tree/tree.a2ui.json +4 -0
  358. package/components/tree/tree.class.js +2 -1
  359. package/components/tree/tree.yaml +2 -0
  360. package/components/upload/upload.a2ui.json +8 -1
  361. package/components/upload/upload.class.js +35 -5
  362. package/components/upload/upload.css +28 -0
  363. package/components/upload/upload.d.ts +16 -0
  364. package/components/upload/upload.yaml +27 -7
  365. package/components/visually-hidden/visually-hidden.a2ui.json +1 -0
  366. package/core/dom.d.ts +11 -0
  367. package/core/dom.js +34 -0
  368. package/core/form.js +7 -0
  369. package/core/icons.js +5 -0
  370. package/core/index.d.ts +1 -0
  371. package/core/index.js +1 -0
  372. package/core/responsive.js +16 -4
  373. package/core/template.js +2 -1
  374. package/custom-elements.json +710 -587
  375. package/dist/host.min.css +1 -1
  376. package/dist/host.sheet.js +1 -1
  377. package/dist/theme-provider.min.js +5 -5
  378. package/dist/web-components.min.css +1 -1
  379. package/dist/web-components.min.js +92 -105
  380. package/dist/web-components.sheet.js +1 -1
  381. package/index.d.ts +12 -1
  382. package/package.json +4 -2
  383. package/patterns/admin-shell/admin-shell.examples.html +2 -2
  384. package/patterns/conversion-funnel/conversion-funnel.examples.html +15 -15
  385. package/patterns/form-system/form-system.examples.html +1 -1
  386. package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
  387. package/patterns/inline-dialog/inline-dialog.html +4 -0
  388. package/patterns/timezone-selector/timezone-selector.examples.html +1 -1
  389. package/patterns/timezone-selector/timezone-selector.html +2 -2
  390. package/styles/api/text.css +7 -0
  391. package/styles/components.css +1 -0
  392. package/traits/_catalog.json +129 -41
  393. package/traits/anchor-positioning/anchor-positioning.js +1 -0
  394. package/traits/announcer/announcer.js +1 -0
  395. package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -0
  396. package/traits/attention-pulse/attention-pulse.js +1 -0
  397. package/traits/count-up/count-up.js +1 -0
  398. package/traits/define.js +78 -0
  399. package/traits/focus-restore/focus-restore.js +2 -1
  400. package/traits/haptic-feedback/haptic-feedback.js +1 -0
  401. package/traits/input-mask/input-mask.js +1 -0
  402. package/traits/intersection-observer/intersection-observer.js +1 -0
  403. package/traits/layout-animation/layout-animation.js +1 -0
  404. package/traits/noise-texture/noise-texture.js +1 -0
  405. package/traits/resize-observer/resize-observer.js +1 -0
  406. package/traits/scroll-progress/scroll-progress.js +1 -0
  407. package/traits/snap-to-grid/snap-to-grid.js +1 -0
  408. package/traits/sound-feedback/sound-feedback.js +1 -0
  409. package/traits/spring-animate/spring-animate.js +1 -0
  410. package/traits/validation/validation.js +1 -0
@@ -101,6 +101,7 @@
101
101
  "registration"
102
102
  ],
103
103
  "name": "UIOptionCard",
104
+ "parts": {},
104
105
  "related": [
105
106
  "radio",
106
107
  "card",
@@ -93,12 +93,13 @@
93
93
  "input"
94
94
  ],
95
95
  "name": "UIOtpInput",
96
+ "parts": {},
96
97
  "related": [
97
98
  "button"
98
99
  ],
99
100
  "slots": {
100
- "field": {
101
- "description": "Container for the digit input boxes and optional separator"
101
+ "digit": {
102
+ "description": "Each digit input box, one per [length] — the component's own real slot=\"digit\" attribute (gh#1461; renamed from the yaml's prior `field` key, which matched no DOM element otp-input-ui stamps). Rebuilt wholesale on every #stamp() (innerHTML wipe + recreate), so this is template-owned in current behavior, not an author-content insertion point; left under slots: here since reclassifying slots:/parts: is gh#1454's charter, not this ticket's."
102
103
  }
103
104
  },
104
105
  "states": [
@@ -44,8 +44,15 @@ events:
44
44
  type: string
45
45
  description: Combined digits at the moment of the change.
46
46
  slots:
47
- field:
48
- description: Container for the digit input boxes and optional separator
47
+ digit:
48
+ description: >-
49
+ Each digit input box, one per [length] — the component's own real
50
+ slot="digit" attribute (gh#1461; renamed from the yaml's prior `field`
51
+ key, which matched no DOM element otp-input-ui stamps). Rebuilt
52
+ wholesale on every #stamp() (innerHTML wipe + recreate), so this is
53
+ template-owned in current behavior, not an author-content insertion
54
+ point; left under slots: here since reclassifying slots:/parts: is
55
+ gh#1454's charter, not this ticket's.
49
56
  states:
50
57
  - name: idle
51
58
  description: Default, ready for interaction.
@@ -31,6 +31,18 @@
31
31
  "padding": {
32
32
  "description": "Page-padding scale from the spacing system. Accepts `0`–`8`\n(mapped to `--a-space-N`). Empty (no value) applies the\n`--page-padding` token; `0` removes padding.\n",
33
33
  "type": "string",
34
+ "enum": [
35
+ "",
36
+ "0",
37
+ "1",
38
+ "2",
39
+ "3",
40
+ "4",
41
+ "5",
42
+ "6",
43
+ "7",
44
+ "8"
45
+ ],
34
46
  "default": ""
35
47
  },
36
48
  "scroll": {
@@ -77,6 +89,7 @@
77
89
  "dashboard-page"
78
90
  ],
79
91
  "name": "UIPage",
92
+ "parts": {},
80
93
  "related": [
81
94
  "app-shell",
82
95
  "card",
@@ -29,7 +29,7 @@ Centered horizontally via `margin-inline: auto`.
29
29
  (mapped to `--a-space-N`). Empty (no value) applies the
30
30
  `--page-padding` token; `0` removes padding.
31
31
  */
32
- padding: string;
32
+ padding: '' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8';
33
33
  /** Sets the page as a scroll container. `overflow-y: auto`, full
34
34
  height, contained overscroll. Use when the page IS the scroll
35
35
  surface (standalone pages); leave off when nested inside a parent
@@ -47,6 +47,7 @@ props:
47
47
  `--page-padding` token; `0` removes padding.
48
48
  type: string
49
49
  default: ""
50
+ enum: ["", "0", "1", "2", "3", "4", "5", "6", "7", "8"]
50
51
  reflect: true
51
52
  stickyHeader:
52
53
  description: |
@@ -93,6 +93,7 @@
93
93
  "paging"
94
94
  ],
95
95
  "name": "UIPagination",
96
+ "parts": {},
96
97
  "related": [
97
98
  "input",
98
99
  "table"
@@ -211,11 +211,12 @@ export class UIPagination extends UIElement {
211
211
  // state comes from button-ui's primary surface matrix (the
212
212
  // canonical token chain) \u2014 not a pagination-tier re-impl.
213
213
  el.setAttribute('variant', 'primary');
214
- el.setAttribute('data-active', '');
214
+ // aria-current="page" alone carries the active-page state — no
215
+ // private data-active mirror (gh#1332 Category A; admin-roster's
216
+ // aria-checked precedent from PR #1438).
215
217
  el.setAttribute('aria-current', 'page');
216
218
  } else {
217
219
  el.setAttribute('variant', this.#restVariant());
218
- el.removeAttribute('data-active');
219
220
  el.removeAttribute('aria-current');
220
221
  }
221
222
  }
@@ -21,6 +21,16 @@
21
21
  "component": {
22
22
  "const": "Pane"
23
23
  },
24
+ "edge": {
25
+ "description": "Opts a pane into horizontal-sibling chrome: suppresses the default\nfour-sided border and moves the resize grabber to the inner edge\n(right edge for `leading`, left edge for `trailing`). Also flips the\nresize-drag direction so `trailing` panes grow when dragged leftward.\nUnset keeps the pane-intrinsic chrome (full border, right-edge\ngrabber when resizable). Canonical spelling (ADR-0063, gh#1563)\nreplacing `side`.\n",
26
+ "type": "string",
27
+ "enum": [
28
+ "",
29
+ "leading",
30
+ "trailing"
31
+ ],
32
+ "default": ""
33
+ },
24
34
  "maxWidth": {
25
35
  "description": "Component property: maxWidth.",
26
36
  "type": "number",
@@ -37,7 +47,7 @@
37
47
  "default": false
38
48
  },
39
49
  "side": {
40
- "description": "Opts a pane into horizontal-sibling chrome: suppresses the default\nfour-sided border and moves the resize grabber to the inner edge\n(right edge for `leading`, left edge for `trailing`). Also flips the\nresize-drag direction so `trailing` panes grow when dragged leftward.\nUnset keeps the pane-intrinsic chrome (full border, right-edge\ngrabber when resizable).\n",
50
+ "description": "DEPRECATED (ADR-0063, gh#1563) use `edge` instead. Same type/default/enum; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0.",
41
51
  "type": "string",
42
52
  "enum": [
43
53
  "",
@@ -78,6 +88,7 @@
78
88
  "pane"
79
89
  ],
80
90
  "name": "UIPane",
91
+ "parts": {},
81
92
  "related": [
82
93
  "text-area"
83
94
  ],
@@ -93,6 +104,11 @@
93
104
  {
94
105
  "description": "Default, ready for interaction.",
95
106
  "name": "idle"
107
+ },
108
+ {
109
+ "description": "The resize handle is mid-drag (pointer down through pointerup/pointercancel).",
110
+ "attribute": "resizing",
111
+ "name": "resizing"
96
112
  }
97
113
  ],
98
114
  "status": "stable",
@@ -32,12 +32,13 @@
32
32
  * resizable — boolean, enables drag-to-resize (width)
33
33
  * min-width — minimum width when resizing (default: 200)
34
34
  * max-width — maximum width when resizing (default: 600)
35
- * side — 'leading' | 'trailing' | '' (default). When set, the
35
+ * edge — 'leading' | 'trailing' | '' (default). When set, the
36
36
  * pane is treated as a horizontal sibling: the default
37
37
  * four-sided border is suppressed, only the inner-edge
38
38
  * border is drawn, the resize grabber moves to that
39
39
  * inner edge, and the resize-drag direction flips so
40
- * trailing panes grow when dragged leftward.
40
+ * trailing panes grow when dragged leftward. `side` is a
41
+ * deprecated dual-read alias (ADR-0063, gh#1563).
41
42
  *
42
43
  * JS API:
43
44
  * pane.collapsed = true/false
@@ -58,11 +59,20 @@ export class UIPane extends UIElement {
58
59
  resizable: { type: Boolean, default: false, reflect: true },
59
60
  minWidth: { type: Number, default: 200, attribute: 'min-width', reflect: true },
60
61
  maxWidth: { type: Number, default: 9999, attribute: 'max-width', reflect: true },
62
+ // ADR-0063 (gh#1563) — `side` is DEPRECATED; `edge` is the canonical
63
+ // spelling (same type/default/enum). `side` stays declared (dual-read
64
+ // compat, 0.8.42); `#resolveEdge()` (called from connected()) mirrors
65
+ // an old-only value onto `edge` + warns once. Internal usage below
66
+ // reads `edge` exclusively.
61
67
  side: { type: String, default: '', reflect: true },
68
+ edge: { type: String, default: '', reflect: true },
62
69
  };
63
70
 
64
71
  static template = () => null;
65
72
 
73
+ // ADR-0063 (gh#1563) one-shot-per-class deprecation warn for [side].
74
+ static #warnedSide = false;
75
+
66
76
  #resizeEl = null;
67
77
  #dragging = false;
68
78
  #startX = 0;
@@ -72,6 +82,25 @@ export class UIPane extends UIElement {
72
82
  #bound = false;
73
83
 
74
84
  connected() {
85
+ // ADR-0063 (gh#1563) compat shim — resolve BEFORE the first render so
86
+ // there's no wrong-then-right flash. New-name precedence: [edge] wins
87
+ // outright when present; only fall back to (and mirror) [side] when
88
+ // [edge] is absent from markup. `edge` defaults `''` (not a
89
+ // true-default Boolean), so a live hasAttribute() check here is
90
+ // reliable — no gh#961 self-stamp interference (see chart-legend.class.js
91
+ // for that failure mode with a true-default Boolean).
92
+ if (!this.hasAttribute('edge') && this.hasAttribute('side')) {
93
+ this.edge = this.side;
94
+ if (!UIPane.#warnedSide) {
95
+ UIPane.#warnedSide = true;
96
+ // eslint-disable-next-line no-console
97
+ console.warn(
98
+ '[AdiaUI] <pane-ui [side]> is deprecated — use [edge] instead ' +
99
+ '(ADR-0063, gh#1563). Kept working as-is; no behavior change.',
100
+ );
101
+ }
102
+ }
103
+
75
104
  if (!this.#bound) {
76
105
  this.#bound = true;
77
106
 
@@ -138,7 +167,7 @@ export class UIPane extends UIElement {
138
167
  // it, and works under touch. Cursor is locked at the documentElement
139
168
  // level so it stays `col-resize` across the whole viewport during drag,
140
169
  // not just over the 4px handle. CSS bypasses any width transition while
141
- // `[data-resizing]` is set, so resizes track the pointer 1:1.
170
+ // `[resizing]` is set, so resizes track the pointer 1:1.
142
171
 
143
172
  #onResizeDown = (e) => {
144
173
  if (!e.isPrimary) return;
@@ -147,7 +176,7 @@ export class UIPane extends UIElement {
147
176
  this.#startX = e.clientX;
148
177
  this.#startW = this.getBoundingClientRect().width;
149
178
  this.#pointerId = e.pointerId;
150
- this.setAttribute('data-resizing', '');
179
+ this.setAttribute('resizing', '');
151
180
 
152
181
  try { this.#resizeEl.setPointerCapture(e.pointerId); } catch {}
153
182
  this.#resizeEl.addEventListener('pointermove', this.#onResizeMove);
@@ -164,7 +193,7 @@ export class UIPane extends UIElement {
164
193
  // is anchored on the RIGHT side of its flex row — dragging leftward
165
194
  // should GROW the pane (grabber moves further left = more width),
166
195
  // not shrink it. Negate dx in that case.
167
- const sign = this.side === 'trailing' ? -1 : 1;
196
+ const sign = this.edge === 'trailing' ? -1 : 1;
168
197
  const dx = (e.clientX - this.#startX) * sign;
169
198
  const w = Math.max(this.minWidth, Math.min(this.maxWidth, this.#startW + dx));
170
199
  this.style.width = `${w}px`;
@@ -173,7 +202,7 @@ export class UIPane extends UIElement {
173
202
  #onResizeUp = () => {
174
203
  if (!this.#dragging) return;
175
204
  this.#dragging = false;
176
- this.removeAttribute('data-resizing');
205
+ this.removeAttribute('resizing');
177
206
  try { this.#resizeEl?.releasePointerCapture(this.#pointerId); } catch {}
178
207
  this.#pointerId = null;
179
208
  this.#resizeEl?.removeEventListener('pointermove', this.#onResizeMove);
@@ -58,25 +58,28 @@
58
58
  width updates track 1:1 instead of interpolating through a consumer-
59
59
  declared width transition (e.g. editor-shell's collapse animation).
60
60
  Mirrors the admin-sidebar pattern. */
61
- :scope[data-resizing] {
61
+ :scope[resizing] {
62
62
  user-select: none;
63
63
  transition: none;
64
64
  }
65
65
 
66
- /* Side-aware border treatment.
66
+ /* Edge-aware border treatment. ADR-0063 (gh#1563): `[edge]` is the
67
+ canonical attribute — pane.class.js's connected() mirrors an
68
+ old-only `[side]` value onto `[edge]` before the first render, so
69
+ selecting on `[edge=...]` alone covers both spellings.
67
70
  `leading` — pane sits at the leading edge of a horizontal row, so
68
71
  the only visual separator it needs is on its trailing
69
72
  edge (right in LTR).
70
73
  `trailing` — mirror: only a leading-edge border (left in LTR).
71
- Default (no side attr) keeps the full 4-sided border. */
72
- :scope[side="leading"],
73
- :scope[side="trailing"] {
74
+ Default (no edge attr) keeps the full 4-sided border. */
75
+ :scope[edge="leading"],
76
+ :scope[edge="trailing"] {
74
77
  border: none;
75
78
  }
76
- :scope[side="leading"] {
79
+ :scope[edge="leading"] {
77
80
  border-inline-end: 1px solid var(--pane-border);
78
81
  }
79
- :scope[side="trailing"] {
82
+ :scope[edge="trailing"] {
80
83
  border-inline-start: 1px solid var(--pane-border);
81
84
  }
82
85
 
@@ -184,11 +187,13 @@
184
187
  }
185
188
 
186
189
  /* ── Resize handle ──
187
- Default (no side) positions the grabber on the right edge. When
188
- `side="trailing"` is set, flip the grabber to the left edge so it
190
+ Default (no edge) positions the grabber on the right edge. When
191
+ `edge="trailing"` is set, flip the grabber to the left edge so it
189
192
  sits on the pane's "inner" side (where it meets the sibling
190
193
  content/pane in a horizontal row). `inset-inline-*` lets the rules
191
- stay LTR/RTL-safe. */
194
+ stay LTR/RTL-safe. `side="trailing"` is a deprecated dual-read alias
195
+ (ADR-0063, gh#1563) — pane.class.js's connected() mirrors it onto
196
+ `[edge]` before the first render, so this selector alone covers both. */
192
197
  [slot="resize"] {
193
198
  position: absolute;
194
199
  top: 0;
@@ -202,7 +207,7 @@
202
207
  z-index: 1;
203
208
  }
204
209
 
205
- :scope[side="trailing"] > [slot="resize"] {
210
+ :scope[edge="trailing"] > [slot="resize"] {
206
211
  inset-inline-end: auto;
207
212
  inset-inline-start: 0;
208
213
  }
@@ -211,7 +216,7 @@
211
216
  background: var(--pane-resize-fg-hover);
212
217
  }
213
218
 
214
- :scope[data-resizing] [slot="resize"] {
219
+ :scope[resizing] [slot="resize"] {
215
220
  background: var(--pane-resize-fg-active);
216
221
  }
217
222
  }
@@ -23,19 +23,22 @@ export type PaneToggleEvent = CustomEvent<unknown>;
23
23
  export class UIPane extends UIElement {
24
24
  /** Component property: collapsed. */
25
25
  collapsed: boolean;
26
- /** Component property: maxWidth. */
27
- maxWidth: number;
28
- /** Component property: minWidth. */
29
- minWidth: number;
30
- /** Component property: resizable. */
31
- resizable: boolean;
32
26
  /** Opts a pane into horizontal-sibling chrome: suppresses the default
33
27
  four-sided border and moves the resize grabber to the inner edge
34
28
  (right edge for `leading`, left edge for `trailing`). Also flips the
35
29
  resize-drag direction so `trailing` panes grow when dragged leftward.
36
30
  Unset keeps the pane-intrinsic chrome (full border, right-edge
37
- grabber when resizable).
31
+ grabber when resizable). Canonical spelling (ADR-0063, gh#1563)
32
+ replacing `side`.
38
33
  */
34
+ edge: '' | 'leading' | 'trailing';
35
+ /** Component property: maxWidth. */
36
+ maxWidth: number;
37
+ /** Component property: minWidth. */
38
+ minWidth: number;
39
+ /** Component property: resizable. */
40
+ resizable: boolean;
41
+ /** DEPRECATED (ADR-0063, gh#1563) — use `edge` instead. Same type/default/enum; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0. */
39
42
  side: '' | 'leading' | 'trailing';
40
43
 
41
44
  addEventListener(type: 'toggle', listener: (ev: PaneToggleEvent) => unknown, options?: boolean | AddEventListenerOptions): void;
@@ -36,6 +36,18 @@ props:
36
36
  type: boolean
37
37
  default: false
38
38
  side:
39
+ description: >-
40
+ DEPRECATED (ADR-0063, gh#1563) — use `edge` instead. Same
41
+ type/default/enum; kept working as a dual-read compat shim (one-time
42
+ console.warn when it's the name that resolves). Removed in 0.9.0.
43
+ type: string
44
+ default: ''
45
+ enum:
46
+ - ''
47
+ - leading
48
+ - trailing
49
+ reflect: true
50
+ edge:
39
51
  description: 'Opts a pane into horizontal-sibling chrome: suppresses the default
40
52
 
41
53
  four-sided border and moves the resize grabber to the inner edge
@@ -46,7 +58,9 @@ props:
46
58
 
47
59
  Unset keeps the pane-intrinsic chrome (full border, right-edge
48
60
 
49
- grabber when resizable).
61
+ grabber when resizable). Canonical spelling (ADR-0063, gh#1563)
62
+
63
+ replacing `side`.
50
64
 
51
65
  '
52
66
  type: string
@@ -71,6 +85,9 @@ slots:
71
85
  states:
72
86
  - name: idle
73
87
  description: Default, ready for interaction.
88
+ - name: resizing
89
+ description: The resize handle is mid-drag (pointer down through pointerup/pointercancel).
90
+ attribute: resizing
74
91
  traits: []
75
92
  tokens: {}
76
93
  requiredIcons:
@@ -71,6 +71,7 @@
71
71
  "security"
72
72
  ],
73
73
  "name": "UIPasswordStrength",
74
+ "parts": {},
74
75
  "related": [
75
76
  "input",
76
77
  "field",
@@ -76,6 +76,7 @@
76
76
  "status"
77
77
  ],
78
78
  "name": "UIPipelineStatus",
79
+ "parts": {},
79
80
  "related": [
80
81
  "AgentTrace",
81
82
  "Stepper",
@@ -16,16 +16,16 @@
16
16
  "component": {
17
17
  "const": "Popover"
18
18
  },
19
- "gap": {
20
- "description": "Pixel offset between the anchor and the popover",
21
- "type": "number",
22
- "default": 4
23
- },
24
19
  "match-width": {
25
20
  "description": "Size the content panel to the trigger's width instead of max-content. Opt-in — the default (unset) keeps every existing consumer's content-sized panel unchanged.",
26
21
  "type": "boolean",
27
22
  "default": false
28
23
  },
24
+ "offset": {
25
+ "description": "Pixel offset between the anchor and the popover. Renamed from `[gap]` (gh#1335) — a raw-px number can't share a name with the global Scale-grammar `[gap]` attribute (ADR-0053).",
26
+ "type": "number",
27
+ "default": 4
28
+ },
29
29
  "open": {
30
30
  "description": "Controls visibility via showPopover()/hidePopover()",
31
31
  "type": "boolean",
@@ -92,13 +92,14 @@
92
92
  "right-click"
93
93
  ],
94
94
  "name": "UIPopover",
95
+ "parts": {},
95
96
  "related": [
96
97
  "button",
97
98
  "divider"
98
99
  ],
99
100
  "slots": {
100
101
  "content": {
101
- "description": "Popover body — any interactive content. Hoisted to the top-layer via :popover-open when shown. Positioned via the Popover API + CSS Anchor Positioning per [placement] / [gap]; no manual positioning required."
102
+ "description": "Popover body — any interactive content. Hoisted to the top-layer via :popover-open when shown. Positioned via the Popover API + CSS Anchor Positioning per [placement] / [offset]; no manual positioning required."
102
103
  },
103
104
  "trigger": {
104
105
  "description": "Focusable element that opens the popover when activated. Typically <button-ui>, but any focusable element works (button, a link with href). MUST be focusable for keyboard accessibility — bare <span> or <div> children will not respond to keyboard activation. Positioned at the anchor point per [placement]."
@@ -37,7 +37,7 @@ const HOVER_CLOSE_DELAY = 120;
37
37
  export class UIPopover extends UIElement {
38
38
  static properties = {
39
39
  placement: { type: String, default: 'bottom', reflect: true },
40
- gap: { type: Number, default: 4, reflect: true },
40
+ offset: { type: Number, default: 4, reflect: true },
41
41
  open: { type: Boolean, default: false, reflect: true },
42
42
  trigger: { type: String, default: 'click', reflect: true },
43
43
  matchWidth: { type: Boolean, default: false, reflect: true, attribute: 'match-width' },
@@ -107,7 +107,7 @@ export class UIPopover extends UIElement {
107
107
  this.#anchorCleanup?.();
108
108
  this.#anchorCleanup = anchorPopover(trigger, content, {
109
109
  placement: this.placement,
110
- gap: this.gap,
110
+ gap: this.offset,
111
111
  matchWidth: this.matchWidth,
112
112
  });
113
113
 
@@ -13,8 +13,8 @@
13
13
  import { UIElement } from '../../core/element.js';
14
14
 
15
15
  export class UIPopover extends UIElement {
16
- /** Pixel offset between the anchor and the popover */
17
- gap: number;
16
+ /** Pixel offset between the anchor and the popover. Renamed from `[gap]` (gh#1335) — a raw-px number can't share a name with the global Scale-grammar `[gap]` attribute (ADR-0053). */
17
+ offset: number;
18
18
  /** Controls visibility via showPopover()/hidePopover() */
19
19
  open: boolean;
20
20
  /** Popover placement */
@@ -9,8 +9,8 @@ category: container
9
9
  version: 1
10
10
  description: "Popover using Popover API + CSS Anchor Positioning. Triggers: click, hover, manual."
11
11
  props:
12
- gap:
13
- description: Pixel offset between the anchor and the popover
12
+ offset:
13
+ description: Pixel offset between the anchor and the popover. Renamed from `[gap]` (gh#1335) — a raw-px number can't share a name with the global Scale-grammar `[gap]` attribute (ADR-0053).
14
14
  type: number
15
15
  default: 4
16
16
  match-width:
@@ -60,7 +60,7 @@ slots:
60
60
  description: >-
61
61
  Popover body — any interactive content. Hoisted to the top-layer
62
62
  via :popover-open when shown. Positioned via the Popover API +
63
- CSS Anchor Positioning per [placement] / [gap]; no manual
63
+ CSS Anchor Positioning per [placement] / [offset]; no manual
64
64
  positioning required.
65
65
  states:
66
66
  - name: idle
@@ -91,7 +91,7 @@ a2ui:
91
91
  width ≈ trigger width). Use `bottom-end` only when the trigger
92
92
  sits at the right edge of a container by construction (toolbar
93
93
  spillover). Use `top-*` when the trigger sits low in the
94
- viewport (statusbar). [gap] (default 4px) sets offset from anchor.
94
+ viewport (statusbar). [offset] (default 4px) sets offset from anchor.
95
95
  - >-
96
96
  [trigger="hover"] is for non-essential disclosure only — never
97
97
  use it for popovers containing inputs, destructive actions, or
@@ -61,6 +61,7 @@
61
61
  "codepen"
62
62
  ],
63
63
  "name": "UIPreview",
64
+ "parts": {},
64
65
  "related": [
65
66
  "Code",
66
67
  "Card"
@@ -171,7 +171,11 @@ export class UIPreview extends UIElement {
171
171
  }
172
172
  };
173
173
 
174
- #scheduleFit = () => requestAnimationFrame(this.#fit);
174
+ // No rAF (SSR shim — gh#1436's render sweep) nothing to measure; the
175
+ // client fits on hydrate.
176
+ #scheduleFit = () => {
177
+ if (typeof requestAnimationFrame === 'function') requestAnimationFrame(this.#fit);
178
+ };
175
179
 
176
180
  #observeFit() {
177
181
  this.#scheduleFit();