@weave-framework/ui 0.2.107

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 (384) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/autocomplete/autocomplete.d.ts +86 -0
  4. package/dist/autocomplete/autocomplete.d.ts.map +1 -0
  5. package/dist/autocomplete/autocomplete.js +263 -0
  6. package/dist/autocomplete/autocomplete.js.map +1 -0
  7. package/dist/badge/badge.d.ts +39 -0
  8. package/dist/badge/badge.d.ts.map +1 -0
  9. package/dist/badge/badge.js +59 -0
  10. package/dist/badge/badge.js.map +1 -0
  11. package/dist/bottom-sheet/bottom-sheet.d.ts +21 -0
  12. package/dist/bottom-sheet/bottom-sheet.d.ts.map +1 -0
  13. package/dist/bottom-sheet/bottom-sheet.js +82 -0
  14. package/dist/bottom-sheet/bottom-sheet.js.map +1 -0
  15. package/dist/button/button.d.ts +47 -0
  16. package/dist/button/button.d.ts.map +1 -0
  17. package/dist/button/button.js +47 -0
  18. package/dist/button/button.js.map +1 -0
  19. package/dist/button-toggle/button-toggle.d.ts +65 -0
  20. package/dist/button-toggle/button-toggle.d.ts.map +1 -0
  21. package/dist/button-toggle/button-toggle.js +127 -0
  22. package/dist/button-toggle/button-toggle.js.map +1 -0
  23. package/dist/card/card.d.ts +30 -0
  24. package/dist/card/card.d.ts.map +1 -0
  25. package/dist/card/card.js +32 -0
  26. package/dist/card/card.js.map +1 -0
  27. package/dist/cdk/bidi.d.ts +19 -0
  28. package/dist/cdk/bidi.d.ts.map +1 -0
  29. package/dist/cdk/bidi.js +32 -0
  30. package/dist/cdk/bidi.js.map +1 -0
  31. package/dist/cdk/breakpoints.d.ts +21 -0
  32. package/dist/cdk/breakpoints.d.ts.map +1 -0
  33. package/dist/cdk/breakpoints.js +39 -0
  34. package/dist/cdk/breakpoints.js.map +1 -0
  35. package/dist/cdk/clipboard.d.ts +8 -0
  36. package/dist/cdk/clipboard.d.ts.map +1 -0
  37. package/dist/cdk/clipboard.js +38 -0
  38. package/dist/cdk/clipboard.js.map +1 -0
  39. package/dist/cdk/data-source.d.ts +41 -0
  40. package/dist/cdk/data-source.d.ts.map +1 -0
  41. package/dist/cdk/data-source.js +36 -0
  42. package/dist/cdk/data-source.js.map +1 -0
  43. package/dist/cdk/date-adapter.d.ts +63 -0
  44. package/dist/cdk/date-adapter.d.ts.map +1 -0
  45. package/dist/cdk/date-adapter.js +155 -0
  46. package/dist/cdk/date-adapter.js.map +1 -0
  47. package/dist/cdk/drag-drop.d.ts +77 -0
  48. package/dist/cdk/drag-drop.d.ts.map +1 -0
  49. package/dist/cdk/drag-drop.js +268 -0
  50. package/dist/cdk/drag-drop.js.map +1 -0
  51. package/dist/cdk/focus-monitor.d.ts +27 -0
  52. package/dist/cdk/focus-monitor.d.ts.map +1 -0
  53. package/dist/cdk/focus-monitor.js +66 -0
  54. package/dist/cdk/focus-monitor.js.map +1 -0
  55. package/dist/cdk/focus-trap.d.ts +39 -0
  56. package/dist/cdk/focus-trap.d.ts.map +1 -0
  57. package/dist/cdk/focus-trap.js +127 -0
  58. package/dist/cdk/focus-trap.js.map +1 -0
  59. package/dist/cdk/index.d.ts +29 -0
  60. package/dist/cdk/index.d.ts.map +1 -0
  61. package/dist/cdk/index.js +29 -0
  62. package/dist/cdk/index.js.map +1 -0
  63. package/dist/cdk/interactivity.d.ts +19 -0
  64. package/dist/cdk/interactivity.d.ts.map +1 -0
  65. package/dist/cdk/interactivity.js +70 -0
  66. package/dist/cdk/interactivity.js.map +1 -0
  67. package/dist/cdk/key-manager.d.ts +41 -0
  68. package/dist/cdk/key-manager.d.ts.map +1 -0
  69. package/dist/cdk/key-manager.js +126 -0
  70. package/dist/cdk/key-manager.js.map +1 -0
  71. package/dist/cdk/live-announcer.d.ts +19 -0
  72. package/dist/cdk/live-announcer.d.ts.map +1 -0
  73. package/dist/cdk/live-announcer.js +48 -0
  74. package/dist/cdk/live-announcer.js.map +1 -0
  75. package/dist/cdk/observers.d.ts +17 -0
  76. package/dist/cdk/observers.d.ts.map +1 -0
  77. package/dist/cdk/observers.js +35 -0
  78. package/dist/cdk/observers.js.map +1 -0
  79. package/dist/cdk/overlay.d.ts +73 -0
  80. package/dist/cdk/overlay.d.ts.map +1 -0
  81. package/dist/cdk/overlay.js +154 -0
  82. package/dist/cdk/overlay.js.map +1 -0
  83. package/dist/cdk/platform.d.ts +22 -0
  84. package/dist/cdk/platform.d.ts.map +1 -0
  85. package/dist/cdk/platform.js +55 -0
  86. package/dist/cdk/platform.js.map +1 -0
  87. package/dist/cdk/portal.d.ts +31 -0
  88. package/dist/cdk/portal.d.ts.map +1 -0
  89. package/dist/cdk/portal.js +55 -0
  90. package/dist/cdk/portal.js.map +1 -0
  91. package/dist/cdk/positioning.d.ts +53 -0
  92. package/dist/cdk/positioning.d.ts.map +1 -0
  93. package/dist/cdk/positioning.js +140 -0
  94. package/dist/cdk/positioning.js.map +1 -0
  95. package/dist/cdk/scroll.d.ts +43 -0
  96. package/dist/cdk/scroll.d.ts.map +1 -0
  97. package/dist/cdk/scroll.js +97 -0
  98. package/dist/cdk/scroll.js.map +1 -0
  99. package/dist/cdk/selection-model.d.ts +50 -0
  100. package/dist/cdk/selection-model.d.ts.map +1 -0
  101. package/dist/cdk/selection-model.js +77 -0
  102. package/dist/cdk/selection-model.js.map +1 -0
  103. package/dist/cdk/virtual-scroll.d.ts +50 -0
  104. package/dist/cdk/virtual-scroll.d.ts.map +1 -0
  105. package/dist/cdk/virtual-scroll.js +92 -0
  106. package/dist/cdk/virtual-scroll.js.map +1 -0
  107. package/dist/checkbox/checkbox.d.ts +65 -0
  108. package/dist/checkbox/checkbox.d.ts.map +1 -0
  109. package/dist/checkbox/checkbox.js +82 -0
  110. package/dist/checkbox/checkbox.js.map +1 -0
  111. package/dist/chips/chips.d.ts +65 -0
  112. package/dist/chips/chips.d.ts.map +1 -0
  113. package/dist/chips/chips.js +119 -0
  114. package/dist/chips/chips.js.map +1 -0
  115. package/dist/context-menu/context-menu.d.ts +32 -0
  116. package/dist/context-menu/context-menu.d.ts.map +1 -0
  117. package/dist/context-menu/context-menu.js +63 -0
  118. package/dist/context-menu/context-menu.js.map +1 -0
  119. package/dist/datepicker/datepicker.d.ts +100 -0
  120. package/dist/datepicker/datepicker.d.ts.map +1 -0
  121. package/dist/datepicker/datepicker.js +440 -0
  122. package/dist/datepicker/datepicker.js.map +1 -0
  123. package/dist/dialog/dialog.d.ts +27 -0
  124. package/dist/dialog/dialog.d.ts.map +1 -0
  125. package/dist/dialog/dialog.js +47 -0
  126. package/dist/dialog/dialog.js.map +1 -0
  127. package/dist/dialog/modal-core.d.ts +42 -0
  128. package/dist/dialog/modal-core.d.ts.map +1 -0
  129. package/dist/dialog/modal-core.js +103 -0
  130. package/dist/dialog/modal-core.js.map +1 -0
  131. package/dist/expansion/expansion.d.ts +71 -0
  132. package/dist/expansion/expansion.d.ts.map +1 -0
  133. package/dist/expansion/expansion.js +127 -0
  134. package/dist/expansion/expansion.js.map +1 -0
  135. package/dist/form-field/form-field.d.ts +48 -0
  136. package/dist/form-field/form-field.d.ts.map +1 -0
  137. package/dist/form-field/form-field.js +89 -0
  138. package/dist/form-field/form-field.js.map +1 -0
  139. package/dist/grid-list/grid-list.d.ts +25 -0
  140. package/dist/grid-list/grid-list.d.ts.map +1 -0
  141. package/dist/grid-list/grid-list.js +22 -0
  142. package/dist/grid-list/grid-list.js.map +1 -0
  143. package/dist/icon/icon.d.ts +40 -0
  144. package/dist/icon/icon.d.ts.map +1 -0
  145. package/dist/icon/icon.js +99 -0
  146. package/dist/icon/icon.js.map +1 -0
  147. package/dist/icon/icons.d.ts +60 -0
  148. package/dist/icon/icons.d.ts.map +1 -0
  149. package/dist/icon/icons.js +126 -0
  150. package/dist/icon/icons.js.map +1 -0
  151. package/dist/icon/lucide-icons.d.ts +11 -0
  152. package/dist/icon/lucide-icons.d.ts.map +1 -0
  153. package/dist/icon/lucide-icons.js +65 -0
  154. package/dist/icon/lucide-icons.js.map +1 -0
  155. package/dist/index.d.ts +12 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +2 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/input/input.d.ts +90 -0
  160. package/dist/input/input.d.ts.map +1 -0
  161. package/dist/input/input.js +138 -0
  162. package/dist/input/input.js.map +1 -0
  163. package/dist/internal/compose.d.ts +26 -0
  164. package/dist/internal/compose.d.ts.map +1 -0
  165. package/dist/internal/compose.js +32 -0
  166. package/dist/internal/compose.js.map +1 -0
  167. package/dist/list/list.d.ts +70 -0
  168. package/dist/list/list.d.ts.map +1 -0
  169. package/dist/list/list.js +144 -0
  170. package/dist/list/list.js.map +1 -0
  171. package/dist/menu/menu-core.d.ts +56 -0
  172. package/dist/menu/menu-core.d.ts.map +1 -0
  173. package/dist/menu/menu-core.js +122 -0
  174. package/dist/menu/menu-core.js.map +1 -0
  175. package/dist/menu/menu.d.ts +31 -0
  176. package/dist/menu/menu.d.ts.map +1 -0
  177. package/dist/menu/menu.js +68 -0
  178. package/dist/menu/menu.js.map +1 -0
  179. package/dist/menubar/menubar.d.ts +49 -0
  180. package/dist/menubar/menubar.d.ts.map +1 -0
  181. package/dist/menubar/menubar.js +162 -0
  182. package/dist/menubar/menubar.js.map +1 -0
  183. package/dist/paginator/paginator.d.ts +89 -0
  184. package/dist/paginator/paginator.d.ts.map +1 -0
  185. package/dist/paginator/paginator.js +159 -0
  186. package/dist/paginator/paginator.js.map +1 -0
  187. package/dist/popover-edit/popover-edit.d.ts +33 -0
  188. package/dist/popover-edit/popover-edit.d.ts.map +1 -0
  189. package/dist/popover-edit/popover-edit.js +107 -0
  190. package/dist/popover-edit/popover-edit.js.map +1 -0
  191. package/dist/progress-bar/progress-bar.d.ts +32 -0
  192. package/dist/progress-bar/progress-bar.d.ts.map +1 -0
  193. package/dist/progress-bar/progress-bar.js +42 -0
  194. package/dist/progress-bar/progress-bar.js.map +1 -0
  195. package/dist/progress-spinner/progress-spinner.d.ts +25 -0
  196. package/dist/progress-spinner/progress-spinner.d.ts.map +1 -0
  197. package/dist/progress-spinner/progress-spinner.js +25 -0
  198. package/dist/progress-spinner/progress-spinner.js.map +1 -0
  199. package/dist/radio/radio.d.ts +68 -0
  200. package/dist/radio/radio.d.ts.map +1 -0
  201. package/dist/radio/radio.js +81 -0
  202. package/dist/radio/radio.js.map +1 -0
  203. package/dist/ripple/ripple.d.ts +20 -0
  204. package/dist/ripple/ripple.d.ts.map +1 -0
  205. package/dist/ripple/ripple.js +41 -0
  206. package/dist/ripple/ripple.js.map +1 -0
  207. package/dist/select/select.d.ts +83 -0
  208. package/dist/select/select.d.ts.map +1 -0
  209. package/dist/select/select.js +320 -0
  210. package/dist/select/select.js.map +1 -0
  211. package/dist/shared/options.d.ts +44 -0
  212. package/dist/shared/options.d.ts.map +1 -0
  213. package/dist/shared/options.js +59 -0
  214. package/dist/shared/options.js.map +1 -0
  215. package/dist/shared/positions.d.ts +20 -0
  216. package/dist/shared/positions.d.ts.map +1 -0
  217. package/dist/shared/positions.js +27 -0
  218. package/dist/shared/positions.js.map +1 -0
  219. package/dist/sidenav/sidenav.d.ts +65 -0
  220. package/dist/sidenav/sidenav.d.ts.map +1 -0
  221. package/dist/sidenav/sidenav.js +120 -0
  222. package/dist/sidenav/sidenav.js.map +1 -0
  223. package/dist/slide-toggle/slide-toggle.d.ts +56 -0
  224. package/dist/slide-toggle/slide-toggle.d.ts.map +1 -0
  225. package/dist/slide-toggle/slide-toggle.js +62 -0
  226. package/dist/slide-toggle/slide-toggle.js.map +1 -0
  227. package/dist/slider/slider.d.ts +69 -0
  228. package/dist/slider/slider.d.ts.map +1 -0
  229. package/dist/slider/slider.js +184 -0
  230. package/dist/slider/slider.js.map +1 -0
  231. package/dist/snackbar/snackbar.d.ts +25 -0
  232. package/dist/snackbar/snackbar.d.ts.map +1 -0
  233. package/dist/snackbar/snackbar.js +135 -0
  234. package/dist/snackbar/snackbar.js.map +1 -0
  235. package/dist/stepper/stepper.d.ts +87 -0
  236. package/dist/stepper/stepper.d.ts.map +1 -0
  237. package/dist/stepper/stepper.js +142 -0
  238. package/dist/stepper/stepper.js.map +1 -0
  239. package/dist/table/table.d.ts +140 -0
  240. package/dist/table/table.d.ts.map +1 -0
  241. package/dist/table/table.js +312 -0
  242. package/dist/table/table.js.map +1 -0
  243. package/dist/tabs/tabs.d.ts +64 -0
  244. package/dist/tabs/tabs.d.ts.map +1 -0
  245. package/dist/tabs/tabs.js +126 -0
  246. package/dist/tabs/tabs.js.map +1 -0
  247. package/dist/timepicker/timepicker.d.ts +83 -0
  248. package/dist/timepicker/timepicker.d.ts.map +1 -0
  249. package/dist/timepicker/timepicker.js +303 -0
  250. package/dist/timepicker/timepicker.js.map +1 -0
  251. package/dist/toolbar/toolbar.d.ts +34 -0
  252. package/dist/toolbar/toolbar.d.ts.map +1 -0
  253. package/dist/toolbar/toolbar.js +35 -0
  254. package/dist/toolbar/toolbar.js.map +1 -0
  255. package/dist/tooltip/tooltip.d.ts +30 -0
  256. package/dist/tooltip/tooltip.d.ts.map +1 -0
  257. package/dist/tooltip/tooltip.js +109 -0
  258. package/dist/tooltip/tooltip.js.map +1 -0
  259. package/dist/tree/tree.d.ts +100 -0
  260. package/dist/tree/tree.d.ts.map +1 -0
  261. package/dist/tree/tree.js +288 -0
  262. package/dist/tree/tree.js.map +1 -0
  263. package/package.json +230 -0
  264. package/src/styles/_api.scss +384 -0
  265. package/src/styles/_helpers.scss +101 -0
  266. package/src/styles/_index.scss +12 -0
  267. package/src/styles/_ref.scss +20 -0
  268. package/src/styles/_sass-utils.scss +14 -0
  269. package/src/styles/_token-utils.scss +24 -0
  270. package/src/styles/components/autocomplete/_index.scss +10 -0
  271. package/src/styles/components/autocomplete/_styles.scss +46 -0
  272. package/src/styles/components/autocomplete/_tokens.scss +28 -0
  273. package/src/styles/components/badge/_index.scss +12 -0
  274. package/src/styles/components/badge/_styles.scss +72 -0
  275. package/src/styles/components/badge/_tokens.scss +27 -0
  276. package/src/styles/components/bottom-sheet/_index.scss +9 -0
  277. package/src/styles/components/bottom-sheet/_styles.scss +77 -0
  278. package/src/styles/components/bottom-sheet/_tokens.scss +33 -0
  279. package/src/styles/components/button/_index.scss +12 -0
  280. package/src/styles/components/button/_styles.scss +106 -0
  281. package/src/styles/components/button/_tokens.scss +36 -0
  282. package/src/styles/components/button-toggle/_index.scss +12 -0
  283. package/src/styles/components/button-toggle/_styles.scss +57 -0
  284. package/src/styles/components/button-toggle/_tokens.scss +25 -0
  285. package/src/styles/components/card/_index.scss +15 -0
  286. package/src/styles/components/card/_styles.scss +68 -0
  287. package/src/styles/components/card/_tokens.scss +26 -0
  288. package/src/styles/components/checkbox/_index.scss +13 -0
  289. package/src/styles/components/checkbox/_styles.scss +108 -0
  290. package/src/styles/components/checkbox/_tokens.scss +25 -0
  291. package/src/styles/components/chips/_index.scss +12 -0
  292. package/src/styles/components/chips/_styles.scss +83 -0
  293. package/src/styles/components/chips/_tokens.scss +28 -0
  294. package/src/styles/components/datepicker/_index.scss +10 -0
  295. package/src/styles/components/datepicker/_styles.scss +203 -0
  296. package/src/styles/components/datepicker/_tokens.scss +50 -0
  297. package/src/styles/components/dialog/_index.scss +9 -0
  298. package/src/styles/components/dialog/_styles.scss +54 -0
  299. package/src/styles/components/dialog/_tokens.scss +29 -0
  300. package/src/styles/components/divider/_index.scss +8 -0
  301. package/src/styles/components/divider/_styles.scss +18 -0
  302. package/src/styles/components/divider/_tokens.scss +12 -0
  303. package/src/styles/components/expansion/_index.scss +14 -0
  304. package/src/styles/components/expansion/_styles.scss +128 -0
  305. package/src/styles/components/expansion/_tokens.scss +32 -0
  306. package/src/styles/components/form-field/_index.scss +13 -0
  307. package/src/styles/components/form-field/_styles.scss +39 -0
  308. package/src/styles/components/form-field/_tokens.scss +19 -0
  309. package/src/styles/components/grid-list/_index.scss +12 -0
  310. package/src/styles/components/grid-list/_styles.scss +31 -0
  311. package/src/styles/components/grid-list/_tokens.scss +18 -0
  312. package/src/styles/components/icon/_index.scss +8 -0
  313. package/src/styles/components/icon/_styles.scss +18 -0
  314. package/src/styles/components/icon/_tokens.scss +8 -0
  315. package/src/styles/components/input/_index.scss +13 -0
  316. package/src/styles/components/input/_styles.scss +111 -0
  317. package/src/styles/components/input/_tokens.scss +21 -0
  318. package/src/styles/components/list/_index.scss +12 -0
  319. package/src/styles/components/list/_styles.scss +87 -0
  320. package/src/styles/components/list/_tokens.scss +31 -0
  321. package/src/styles/components/menu/_index.scss +9 -0
  322. package/src/styles/components/menu/_styles.scss +60 -0
  323. package/src/styles/components/menu/_tokens.scss +33 -0
  324. package/src/styles/components/menubar/_index.scss +9 -0
  325. package/src/styles/components/menubar/_styles.scss +41 -0
  326. package/src/styles/components/menubar/_tokens.scss +25 -0
  327. package/src/styles/components/overlay/_index.scss +8 -0
  328. package/src/styles/components/overlay/_styles.scss +25 -0
  329. package/src/styles/components/overlay/_tokens.scss +21 -0
  330. package/src/styles/components/paginator/_index.scss +14 -0
  331. package/src/styles/components/paginator/_styles.scss +77 -0
  332. package/src/styles/components/paginator/_tokens.scss +28 -0
  333. package/src/styles/components/popover-edit/_index.scss +9 -0
  334. package/src/styles/components/popover-edit/_styles.scss +31 -0
  335. package/src/styles/components/popover-edit/_tokens.scss +21 -0
  336. package/src/styles/components/progress-bar/_index.scss +11 -0
  337. package/src/styles/components/progress-bar/_styles.scss +39 -0
  338. package/src/styles/components/progress-bar/_tokens.scss +17 -0
  339. package/src/styles/components/progress-spinner/_index.scss +11 -0
  340. package/src/styles/components/progress-spinner/_styles.scss +26 -0
  341. package/src/styles/components/progress-spinner/_tokens.scss +15 -0
  342. package/src/styles/components/radio/_index.scss +14 -0
  343. package/src/styles/components/radio/_styles.scss +92 -0
  344. package/src/styles/components/radio/_tokens.scss +24 -0
  345. package/src/styles/components/ripple/_index.scss +8 -0
  346. package/src/styles/components/ripple/_styles.scss +20 -0
  347. package/src/styles/components/ripple/_tokens.scss +12 -0
  348. package/src/styles/components/select/_index.scss +9 -0
  349. package/src/styles/components/select/_styles.scss +120 -0
  350. package/src/styles/components/select/_tokens.scss +35 -0
  351. package/src/styles/components/sidenav/_index.scss +14 -0
  352. package/src/styles/components/sidenav/_styles.scss +105 -0
  353. package/src/styles/components/sidenav/_tokens.scss +24 -0
  354. package/src/styles/components/slide-toggle/_index.scss +13 -0
  355. package/src/styles/components/slide-toggle/_styles.scss +86 -0
  356. package/src/styles/components/slide-toggle/_tokens.scss +24 -0
  357. package/src/styles/components/slider/_index.scss +13 -0
  358. package/src/styles/components/slider/_styles.scss +77 -0
  359. package/src/styles/components/slider/_tokens.scss +21 -0
  360. package/src/styles/components/snackbar/_index.scss +8 -0
  361. package/src/styles/components/snackbar/_styles.scss +59 -0
  362. package/src/styles/components/snackbar/_tokens.scss +28 -0
  363. package/src/styles/components/stepper/_index.scss +14 -0
  364. package/src/styles/components/stepper/_styles.scss +129 -0
  365. package/src/styles/components/stepper/_tokens.scss +44 -0
  366. package/src/styles/components/table/_index.scss +14 -0
  367. package/src/styles/components/table/_styles.scss +202 -0
  368. package/src/styles/components/table/_tokens.scss +47 -0
  369. package/src/styles/components/tabs/_index.scss +13 -0
  370. package/src/styles/components/tabs/_styles.scss +76 -0
  371. package/src/styles/components/tabs/_tokens.scss +28 -0
  372. package/src/styles/components/timepicker/_index.scss +9 -0
  373. package/src/styles/components/timepicker/_styles.scss +136 -0
  374. package/src/styles/components/timepicker/_tokens.scss +46 -0
  375. package/src/styles/components/toolbar/_index.scss +12 -0
  376. package/src/styles/components/toolbar/_styles.scss +41 -0
  377. package/src/styles/components/toolbar/_tokens.scss +17 -0
  378. package/src/styles/components/tooltip/_index.scss +8 -0
  379. package/src/styles/components/tooltip/_styles.scss +29 -0
  380. package/src/styles/components/tooltip/_tokens.scss +22 -0
  381. package/src/styles/components/tree/_index.scss +13 -0
  382. package/src/styles/components/tree/_styles.scss +99 -0
  383. package/src/styles/components/tree/_tokens.scss +38 -0
  384. package/src/styles/theme/_defaults.scss +50 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Focus monitor — *how* an element got focused (keyboard / mouse / touch / program),
3
+ * as a signal. This is what powers correct `:focus-visible`-style rings: show a ring
4
+ * for keyboard focus, not for a mouse click. Zero-dep, signal-native.
5
+ *
6
+ * Modality is tracked globally: an interaction (keydown/mousedown/touchstart) marks
7
+ * the current modality, which clears on the next microtask — so a focus that lands in
8
+ * the same turn as an interaction inherits it, while a programmatic `el.focus()` in a
9
+ * later turn reads as `'program'`.
10
+ */
11
+ export type FocusOrigin = 'keyboard' | 'mouse' | 'touch' | 'program';
12
+ /** The origin of the most recent focus in the document. Reactive; null before any focus. */
13
+ export declare function focusOrigin(): FocusOrigin | null;
14
+ export interface FocusMonitorRef {
15
+ /** The origin of `el`'s current focus, or null when `el` (and its descendants) are unfocused. Reactive. */
16
+ origin(): FocusOrigin | null;
17
+ /** Whether `el` (or a descendant) currently holds focus. Reactive. */
18
+ focused(): boolean;
19
+ /** Stop monitoring and release listeners. */
20
+ stop(): void;
21
+ }
22
+ /**
23
+ * Monitor a specific element's focus origin. Fires for the element and its
24
+ * descendants (focus within). Auto-stops when the surrounding owner disposes.
25
+ */
26
+ export declare function monitorFocus(el: HTMLElement): FocusMonitorRef;
27
+ //# sourceMappingURL=focus-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-monitor.d.ts","sourceRoot":"","sources":["../../src/cdk/focus-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAuBrE,4FAA4F;AAC5F,wBAAgB,WAAW,IAAI,WAAW,GAAG,IAAI,CAGhD;AAED,MAAM,WAAW,eAAe;IAC9B,2GAA2G;IAC3G,MAAM,IAAI,WAAW,GAAG,IAAI,CAAC;IAC7B,sEAAsE;IACtE,OAAO,IAAI,OAAO,CAAC;IACnB,6CAA6C;IAC7C,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,eAAe,CA2B7D"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Focus monitor — *how* an element got focused (keyboard / mouse / touch / program),
3
+ * as a signal. This is what powers correct `:focus-visible`-style rings: show a ring
4
+ * for keyboard focus, not for a mouse click. Zero-dep, signal-native.
5
+ *
6
+ * Modality is tracked globally: an interaction (keydown/mousedown/touchstart) marks
7
+ * the current modality, which clears on the next microtask — so a focus that lands in
8
+ * the same turn as an interaction inherits it, while a programmatic `el.focus()` in a
9
+ * later turn reads as `'program'`.
10
+ */
11
+ import { signal, onDispose } from '@weave-framework/runtime';
12
+ import { isBrowser } from './platform.js';
13
+ let modality = null;
14
+ let installed = false;
15
+ const _origin = signal(null);
16
+ function mark(origin) {
17
+ modality = origin;
18
+ // Clear after the current turn: a focus not caused by this interaction reads 'program'.
19
+ queueMicrotask(() => {
20
+ modality = null;
21
+ });
22
+ }
23
+ function ensureInstalled() {
24
+ if (installed || !isBrowser)
25
+ return;
26
+ installed = true;
27
+ document.addEventListener('keydown', () => mark('keyboard'), true);
28
+ document.addEventListener('mousedown', () => mark('mouse'), true);
29
+ document.addEventListener('touchstart', () => mark('touch'), true);
30
+ document.addEventListener('focusin', () => _origin.set(modality ?? 'program'), true);
31
+ }
32
+ /** The origin of the most recent focus in the document. Reactive; null before any focus. */
33
+ export function focusOrigin() {
34
+ ensureInstalled();
35
+ return _origin();
36
+ }
37
+ /**
38
+ * Monitor a specific element's focus origin. Fires for the element and its
39
+ * descendants (focus within). Auto-stops when the surrounding owner disposes.
40
+ */
41
+ export function monitorFocus(el) {
42
+ ensureInstalled();
43
+ const origin = signal(null);
44
+ const onFocusIn = () => {
45
+ origin.set(modality ?? 'program');
46
+ };
47
+ const onFocusOut = (event) => {
48
+ // Leaving the element entirely (not just moving between its descendants).
49
+ const next = event.relatedTarget;
50
+ if (!next || !el.contains(next))
51
+ origin.set(null);
52
+ };
53
+ el.addEventListener('focusin', onFocusIn);
54
+ el.addEventListener('focusout', onFocusOut);
55
+ const stop = () => {
56
+ el.removeEventListener('focusin', onFocusIn);
57
+ el.removeEventListener('focusout', onFocusOut);
58
+ };
59
+ onDispose(stop);
60
+ return {
61
+ origin: () => origin(),
62
+ focused: () => origin() !== null,
63
+ stop,
64
+ };
65
+ }
66
+ //# sourceMappingURL=focus-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-monitor.js","sourceRoot":"","sources":["../../src/cdk/focus-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,IAAI,QAAQ,GAAuB,IAAI,CAAC;AACxC,IAAI,SAAS,GAAY,KAAK,CAAC;AAC/B,MAAM,OAAO,GAA+B,MAAM,CAAqB,IAAI,CAAC,CAAC;AAE7E,SAAS,IAAI,CAAC,MAAmB;IAC/B,QAAQ,GAAG,MAAM,CAAC;IAClB,wFAAwF;IACxF,cAAc,CAAC,GAAG,EAAE;QAClB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO;IACpC,SAAS,GAAG,IAAI,CAAC;IACjB,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW;IACzB,eAAe,EAAE,CAAC;IAClB,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAAe;IAC1C,eAAe,EAAE,CAAC;IAClB,MAAM,MAAM,GAA+B,MAAM,CAAqB,IAAI,CAAC,CAAC;IAE5E,MAAM,SAAS,GAAG,GAAS,EAAE;QAC3B,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAQ,EAAE;QAC7C,0EAA0E;QAC1E,MAAM,IAAI,GAAgB,KAAK,CAAC,aAA4B,CAAC;QAC7D,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;IAEF,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1C,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7C,EAAE,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhB,OAAO;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;QACtB,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI;QAChC,IAAI;KACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Focus trap — keep Tab focus inside a region (dialogs, menus, sheets) and restore it
3
+ * on release. WAI-ARIA modal behavior, zero-dep. Wraps Tab/Shift+Tab at the region's
4
+ * tabbable boundaries, pulls stray focus back in, sets an initial focus target, and
5
+ * returns focus to wherever it was on `deactivate`.
6
+ */
7
+ export interface FocusTrapOptions {
8
+ /** Where to focus on activate: first tabbable (default), the container, or a specific element. */
9
+ initialFocus?: 'first' | 'container' | HTMLElement;
10
+ /** Restore focus to the previously-focused element on deactivate. Default true. */
11
+ restoreFocus?: boolean;
12
+ /**
13
+ * Make everything outside the trapped region `inert` + `aria-hidden` on activate (true modal
14
+ * shielding: the background can't be reached by AT, pointer, or Tab), and restore on deactivate.
15
+ * Default false. Walks the container's ancestor chain to `<body>`, marking each level's other
16
+ * children — so it works whether the region is portaled near `<body>` (Dialog) or nested in the
17
+ * component tree (over-mode Sidenav). Elements already `inert` (e.g. an outer modal) are left
18
+ * untouched, so stacked modals restore correctly.
19
+ */
20
+ inertBackground?: boolean;
21
+ /**
22
+ * One element to leave interactive while {@link inertBackground} is on — typically the modal's
23
+ * backdrop, which is a sibling of the region and must still receive click-to-dismiss.
24
+ */
25
+ inertIgnore?: HTMLElement | null;
26
+ }
27
+ export interface FocusTrap {
28
+ /** Start trapping: remember focus, wire the key handler, move focus in. */
29
+ activate(): void;
30
+ /** Stop trapping and (by default) restore the prior focus. */
31
+ deactivate(): void;
32
+ /** Focus the first tabbable (or the container if none). Returns whether anything was focused. */
33
+ focusFirst(): boolean;
34
+ /** The current tabbable boundaries, in DOM order. */
35
+ tabbables(): HTMLElement[];
36
+ }
37
+ /** Create a focus trap for `container`. Inert until {@link FocusTrap.activate}. */
38
+ export declare function focusTrap(container: HTMLElement, options?: FocusTrapOptions): FocusTrap;
39
+ //# sourceMappingURL=focus-trap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-trap.d.ts","sourceRoot":"","sources":["../../src/cdk/focus-trap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,kGAAkG;IAClG,YAAY,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;IACnD,mFAAmF;IACnF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC;AAiCD,MAAM,WAAW,SAAS;IACxB,2EAA2E;IAC3E,QAAQ,IAAI,IAAI,CAAC;IACjB,8DAA8D;IAC9D,UAAU,IAAI,IAAI,CAAC;IACnB,iGAAiG;IACjG,UAAU,IAAI,OAAO,CAAC;IACtB,qDAAqD;IACrD,SAAS,IAAI,WAAW,EAAE,CAAC;CAC5B;AAOD,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB,GAAG,SAAS,CAyE3F"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Focus trap — keep Tab focus inside a region (dialogs, menus, sheets) and restore it
3
+ * on release. WAI-ARIA modal behavior, zero-dep. Wraps Tab/Shift+Tab at the region's
4
+ * tabbable boundaries, pulls stray focus back in, sets an initial focus target, and
5
+ * returns focus to wherever it was on `deactivate`.
6
+ */
7
+ import { tabbableChildren } from './interactivity.js';
8
+ /**
9
+ * Shield everything outside `container` (modal background): walk from the container up to `<body>`,
10
+ * marking each ancestor's other element children `inert` + `aria-hidden`. Skips `ignore` (the
11
+ * backdrop) and anything already `inert`. Returns a restore fn that reverts exactly what it changed.
12
+ */
13
+ function shieldBackground(container, ignore) {
14
+ const changed = [];
15
+ let node = container;
16
+ const body = document.body;
17
+ while (node && node !== body && node.parentElement) {
18
+ const parent = node.parentElement;
19
+ for (const sib of Array.from(parent.children)) {
20
+ if (sib === node || !(sib instanceof HTMLElement))
21
+ continue;
22
+ if (ignore && (sib === ignore || sib.contains(ignore)))
23
+ continue;
24
+ if (sib.hasAttribute('inert'))
25
+ continue; // already shielded (outer modal) — don't clobber
26
+ const ariaAdded = !sib.hasAttribute('aria-hidden');
27
+ sib.setAttribute('inert', '');
28
+ if (ariaAdded)
29
+ sib.setAttribute('aria-hidden', 'true');
30
+ changed.push({ el: sib, ariaAdded });
31
+ }
32
+ node = parent;
33
+ }
34
+ return () => {
35
+ for (const { el, ariaAdded } of changed) {
36
+ el.removeAttribute('inert');
37
+ if (ariaAdded)
38
+ el.removeAttribute('aria-hidden');
39
+ }
40
+ changed.length = 0;
41
+ };
42
+ }
43
+ function focusContainer(container) {
44
+ if (!container.hasAttribute('tabindex'))
45
+ container.setAttribute('tabindex', '-1');
46
+ container.focus();
47
+ }
48
+ /** Create a focus trap for `container`. Inert until {@link FocusTrap.activate}. */
49
+ export function focusTrap(container, options = {}) {
50
+ const restoreFocus = options.restoreFocus !== false;
51
+ let previouslyFocused = null;
52
+ let active = false;
53
+ let releaseShield = null;
54
+ const tabbables = () => tabbableChildren(container);
55
+ function focusFirst() {
56
+ const items = tabbables();
57
+ if (items.length > 0) {
58
+ items[0].focus();
59
+ return true;
60
+ }
61
+ focusContainer(container);
62
+ return false;
63
+ }
64
+ function focusInitial() {
65
+ const init = options.initialFocus;
66
+ if (init instanceof HTMLElement)
67
+ init.focus();
68
+ else if (init === 'container')
69
+ focusContainer(container);
70
+ else
71
+ focusFirst();
72
+ }
73
+ function onKeydown(event) {
74
+ if (event.key !== 'Tab')
75
+ return;
76
+ const items = tabbables();
77
+ if (items.length === 0) {
78
+ event.preventDefault();
79
+ focusContainer(container);
80
+ return;
81
+ }
82
+ const first = items[0];
83
+ const last = items[items.length - 1];
84
+ const activeEl = document.activeElement;
85
+ if (!container.contains(activeEl)) {
86
+ // Focus escaped the region — pull it back to the appropriate edge.
87
+ event.preventDefault();
88
+ (event.shiftKey ? last : first).focus();
89
+ }
90
+ else if (event.shiftKey && activeEl === first) {
91
+ event.preventDefault();
92
+ last.focus();
93
+ }
94
+ else if (!event.shiftKey && activeEl === last) {
95
+ event.preventDefault();
96
+ first.focus();
97
+ }
98
+ }
99
+ return {
100
+ activate() {
101
+ if (active)
102
+ return;
103
+ active = true;
104
+ previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;
105
+ if (options.inertBackground)
106
+ releaseShield = shieldBackground(container, options.inertIgnore ?? null);
107
+ container.addEventListener('keydown', onKeydown);
108
+ focusInitial();
109
+ },
110
+ deactivate() {
111
+ if (!active)
112
+ return;
113
+ active = false;
114
+ container.removeEventListener('keydown', onKeydown);
115
+ // Un-shield BEFORE restoring focus — the opener lives in the background and can't be
116
+ // focused while still `inert`.
117
+ releaseShield?.();
118
+ releaseShield = null;
119
+ if (restoreFocus && previouslyFocused && previouslyFocused.isConnected)
120
+ previouslyFocused.focus();
121
+ previouslyFocused = null;
122
+ },
123
+ focusFirst,
124
+ tabbables,
125
+ };
126
+ }
127
+ //# sourceMappingURL=focus-trap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-trap.js","sourceRoot":"","sources":["../../src/cdk/focus-trap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `@weave-framework/ui/cdk` — the headless behavior layer under the styled Weave UI
3
+ * components (the equivalent of Angular's CDK). Every primitive here is headless
4
+ * (behavior + state, zero styling), signal-native, and zero third-party deps —
5
+ * in-house positioning, overlay stacking, scroll strategies, focus management,
6
+ * a11y key-managers, and observer→signal wrappers.
7
+ *
8
+ * U1 (foundations) ships Platform + Bidi; this barrel grows as each primitive lands.
9
+ */
10
+ export * from './platform.js';
11
+ export * from './bidi.js';
12
+ export * from './portal.js';
13
+ export * from './overlay.js';
14
+ export * from './positioning.js';
15
+ export * from './scroll.js';
16
+ export * from './interactivity.js';
17
+ export * from './focus-trap.js';
18
+ export * from './focus-monitor.js';
19
+ export * from './live-announcer.js';
20
+ export * from './key-manager.js';
21
+ export * from './observers.js';
22
+ export * from './breakpoints.js';
23
+ export * from './clipboard.js';
24
+ export * from './selection-model.js';
25
+ export * from './data-source.js';
26
+ export * from './virtual-scroll.js';
27
+ export * from './drag-drop.js';
28
+ export * from './date-adapter.js';
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `@weave-framework/ui/cdk` — the headless behavior layer under the styled Weave UI
3
+ * components (the equivalent of Angular's CDK). Every primitive here is headless
4
+ * (behavior + state, zero styling), signal-native, and zero third-party deps —
5
+ * in-house positioning, overlay stacking, scroll strategies, focus management,
6
+ * a11y key-managers, and observer→signal wrappers.
7
+ *
8
+ * U1 (foundations) ships Platform + Bidi; this barrel grows as each primitive lands.
9
+ */
10
+ export * from './platform.js';
11
+ export * from './bidi.js';
12
+ export * from './portal.js';
13
+ export * from './overlay.js';
14
+ export * from './positioning.js';
15
+ export * from './scroll.js';
16
+ export * from './interactivity.js';
17
+ export * from './focus-trap.js';
18
+ export * from './focus-monitor.js';
19
+ export * from './live-announcer.js';
20
+ export * from './key-manager.js';
21
+ export * from './observers.js';
22
+ export * from './breakpoints.js';
23
+ export * from './clipboard.js';
24
+ export * from './selection-model.js';
25
+ export * from './data-source.js';
26
+ export * from './virtual-scroll.js';
27
+ export * from './drag-drop.js';
28
+ export * from './date-adapter.js';
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Interactivity checker — "can this element be focused / tabbed to?" The primitive
3
+ * the focus-trap and key-managers stand on. Pure DOM inspection, zero-dep.
4
+ *
5
+ * `isFocusable` = can receive focus (naturally focusable, or has any `tabindex`),
6
+ * visible, and not disabled. `isTabbable` = focusable AND in the sequential tab order
7
+ * (`tabindex >= 0`). `getClientRects()` catches ancestor `display:none` too.
8
+ */
9
+ /** The element's effective tabindex: explicit attribute, else 0 if natively focusable, else -1. */
10
+ export declare function getTabIndex(el: HTMLElement): number;
11
+ /** Whether `el` can receive focus at all (incl. `tabindex="-1"`). */
12
+ export declare function isFocusable(el: Element): boolean;
13
+ /** Whether `el` is reachable by sequential Tab navigation (`tabindex >= 0`). */
14
+ export declare function isTabbable(el: Element): boolean;
15
+ /** All focusable descendants of `container`, in DOM order. */
16
+ export declare function focusableChildren(container: Element): HTMLElement[];
17
+ /** All tabbable descendants of `container`, in DOM order. */
18
+ export declare function tabbableChildren(container: Element): HTMLElement[];
19
+ //# sourceMappingURL=interactivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactivity.d.ts","sourceRoot":"","sources":["../../src/cdk/interactivity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAOnD;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAMhD;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAE/C;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG,WAAW,EAAE,CAEnE;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,GAAG,WAAW,EAAE,CAElE"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Interactivity checker — "can this element be focused / tabbed to?" The primitive
3
+ * the focus-trap and key-managers stand on. Pure DOM inspection, zero-dep.
4
+ *
5
+ * `isFocusable` = can receive focus (naturally focusable, or has any `tabindex`),
6
+ * visible, and not disabled. `isTabbable` = focusable AND in the sequential tab order
7
+ * (`tabindex >= 0`). `getClientRects()` catches ancestor `display:none` too.
8
+ */
9
+ const NATIVE_FOCUSABLE = new Set(['input', 'select', 'textarea', 'button']);
10
+ function isVisible(el) {
11
+ if (el.hidden)
12
+ return false;
13
+ const style = getComputedStyle(el);
14
+ if (style.visibility === 'hidden' || style.visibility === 'collapse')
15
+ return false;
16
+ return el.getClientRects().length > 0;
17
+ }
18
+ function isDisabled(el) {
19
+ try {
20
+ return el.matches(':disabled');
21
+ }
22
+ catch {
23
+ return el.hasAttribute('disabled');
24
+ }
25
+ }
26
+ function isNativelyFocusable(el) {
27
+ const tag = el.tagName.toLowerCase();
28
+ if (tag === 'a' || tag === 'area')
29
+ return el.hasAttribute('href');
30
+ if (NATIVE_FOCUSABLE.has(tag))
31
+ return true;
32
+ if (tag === 'iframe' || tag === 'object' || tag === 'embed')
33
+ return true;
34
+ if (tag === 'audio' || tag === 'video')
35
+ return el.hasAttribute('controls');
36
+ return el.isContentEditable;
37
+ }
38
+ /** The element's effective tabindex: explicit attribute, else 0 if natively focusable, else -1. */
39
+ export function getTabIndex(el) {
40
+ const attr = el.getAttribute('tabindex');
41
+ if (attr != null) {
42
+ const n = parseInt(attr, 10);
43
+ return Number.isNaN(n) ? -1 : n;
44
+ }
45
+ return isNativelyFocusable(el) ? 0 : -1;
46
+ }
47
+ /** Whether `el` can receive focus at all (incl. `tabindex="-1"`). */
48
+ export function isFocusable(el) {
49
+ if (!(el instanceof HTMLElement))
50
+ return false;
51
+ if (isDisabled(el) || !isVisible(el))
52
+ return false;
53
+ const attr = el.getAttribute('tabindex');
54
+ if (attr != null && !Number.isNaN(parseInt(attr, 10)))
55
+ return true;
56
+ return isNativelyFocusable(el);
57
+ }
58
+ /** Whether `el` is reachable by sequential Tab navigation (`tabindex >= 0`). */
59
+ export function isTabbable(el) {
60
+ return isFocusable(el) && getTabIndex(el) >= 0;
61
+ }
62
+ /** All focusable descendants of `container`, in DOM order. */
63
+ export function focusableChildren(container) {
64
+ return Array.from(container.querySelectorAll('*')).filter(isFocusable);
65
+ }
66
+ /** All tabbable descendants of `container`, in DOM order. */
67
+ export function tabbableChildren(container) {
68
+ return Array.from(container.querySelectorAll('*')).filter(isTabbable);
69
+ }
70
+ //# sourceMappingURL=interactivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactivity.js","sourceRoot":"","sources":["../../src/cdk/interactivity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ListKeyManager — the keyboard-navigation engine under listbox / menu / select /
3
+ * tabs / radio-group. Tracks an "active" item over a (reactive) list and moves it with
4
+ * Arrow / Home / End plus **typeahead**. Headless: it exposes `activeIndex`/`activeItem`
5
+ * signals and an `onKeydown` — the consumer decides whether to render that as roving
6
+ * `tabindex` or `aria-activedescendant`. WAI-ARIA APG list navigation, zero-dep.
7
+ */
8
+ export type Orientation = 'vertical' | 'horizontal' | 'both';
9
+ export interface ListKeyManagerOptions<T> {
10
+ /** Which arrows navigate. Default 'vertical'. */
11
+ orientation?: Orientation;
12
+ /** Wrap from last→first / first→last. Default false. */
13
+ wrap?: boolean;
14
+ /** Skip items reported disabled. Default true. */
15
+ skipDisabled?: boolean;
16
+ /** Report an item as disabled (skipped in navigation + typeahead). */
17
+ isDisabled?: (item: T) => boolean;
18
+ /** Enable type-to-select. Requires `getLabel`. Default false. */
19
+ typeahead?: boolean;
20
+ /** The text used for typeahead matching. */
21
+ getLabel?: (item: T) => string;
22
+ /** ms of inactivity before the typeahead buffer resets. Default 500. */
23
+ typeaheadDebounce?: number;
24
+ }
25
+ export interface ListKeyManager<T> {
26
+ /** Active item index, or -1 if none. Reactive. */
27
+ activeIndex(): number;
28
+ /** The active item, or null. Reactive. */
29
+ activeItem(): T | null;
30
+ /** Set the active item by index or identity (clamped/validated). */
31
+ setActiveItem(indexOrItem: number | T): void;
32
+ next(): void;
33
+ previous(): void;
34
+ first(): void;
35
+ last(): void;
36
+ /** Handle a keydown. Returns true if it drove navigation (caller should `preventDefault`). */
37
+ onKeydown(event: KeyboardEvent): boolean;
38
+ }
39
+ /** Create a key manager over `items` (a getter, so a reactive list stays live). */
40
+ export declare function listKeyManager<T>(items: () => T[], options?: ListKeyManagerOptions<T>): ListKeyManager<T>;
41
+ //# sourceMappingURL=key-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../../src/cdk/key-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,iDAAiD;IACjD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAClC,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,kDAAkD;IAClD,WAAW,IAAI,MAAM,CAAC;IACtB,0CAA0C;IAC1C,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC;IACvB,oEAAoE;IACpE,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;IAC7C,IAAI,IAAI,IAAI,CAAC;IACb,QAAQ,IAAI,IAAI,CAAC;IACjB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,8FAA8F;IAC9F,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;CAC1C;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,GAAE,qBAAqB,CAAC,CAAC,CAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAyH7G"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * ListKeyManager — the keyboard-navigation engine under listbox / menu / select /
3
+ * tabs / radio-group. Tracks an "active" item over a (reactive) list and moves it with
4
+ * Arrow / Home / End plus **typeahead**. Headless: it exposes `activeIndex`/`activeItem`
5
+ * signals and an `onKeydown` — the consumer decides whether to render that as roving
6
+ * `tabindex` or `aria-activedescendant`. WAI-ARIA APG list navigation, zero-dep.
7
+ */
8
+ import { signal } from '@weave-framework/runtime';
9
+ /** Create a key manager over `items` (a getter, so a reactive list stays live). */
10
+ export function listKeyManager(items, options = {}) {
11
+ const orientation = options.orientation ?? 'vertical';
12
+ const wrap = options.wrap ?? false;
13
+ const skipDisabled = options.skipDisabled ?? true;
14
+ const isDisabled = options.isDisabled ?? (() => false);
15
+ const getLabel = options.getLabel ?? ((i) => String(i));
16
+ const debounce = options.typeaheadDebounce ?? 500;
17
+ const _index = signal(-1);
18
+ let buffer = '';
19
+ let bufferTimer = null;
20
+ const disabledAt = (i) => skipDisabled && isDisabled(items()[i]);
21
+ function seek(from, step) {
22
+ const arr = items();
23
+ const n = arr.length;
24
+ if (n === 0)
25
+ return -1;
26
+ let i = from;
27
+ for (let count = 0; count < n; count++) {
28
+ i += step;
29
+ if (i < 0 || i >= n) {
30
+ if (!wrap)
31
+ return -1;
32
+ i = ((i % n) + n) % n;
33
+ }
34
+ if (!disabledAt(i))
35
+ return i;
36
+ }
37
+ return -1;
38
+ }
39
+ function commit(i) {
40
+ if (i !== -1)
41
+ _index.set(i);
42
+ }
43
+ function edge(forward) {
44
+ const arr = items();
45
+ commit(forward ? seek(-1, 1) : seek(arr.length, -1));
46
+ }
47
+ function setActiveItem(indexOrItem) {
48
+ const arr = items();
49
+ const i = typeof indexOrItem === 'number' ? indexOrItem : arr.indexOf(indexOrItem);
50
+ if (i >= 0 && i < arr.length)
51
+ _index.set(i);
52
+ }
53
+ function runTypeahead(char) {
54
+ if (bufferTimer)
55
+ clearTimeout(bufferTimer);
56
+ buffer += char.toLowerCase();
57
+ bufferTimer = setTimeout(() => {
58
+ buffer = '';
59
+ }, debounce);
60
+ // APG rule: a buffer of one repeated character cycles among same-initial items
61
+ // (search from the NEXT item); a distinct multi-char buffer refines from the current.
62
+ const allSame = [...buffer].every((c) => c === buffer[0]);
63
+ const search = allSame ? buffer[0] : buffer;
64
+ const startOffset = allSame ? 1 : 0;
65
+ const arr = items();
66
+ const n = arr.length;
67
+ if (n === 0)
68
+ return false;
69
+ const base = _index();
70
+ for (let k = startOffset; k < startOffset + n; k++) {
71
+ const idx = (((base + k) % n) + n) % n;
72
+ if (disabledAt(idx))
73
+ continue;
74
+ if (getLabel(arr[idx]).toLowerCase().startsWith(search)) {
75
+ _index.set(idx);
76
+ return true;
77
+ }
78
+ }
79
+ return false;
80
+ }
81
+ function onKeydown(event) {
82
+ const key = event.key;
83
+ const vertical = orientation === 'vertical' || orientation === 'both';
84
+ const horizontal = orientation === 'horizontal' || orientation === 'both';
85
+ if ((vertical && key === 'ArrowDown') || (horizontal && key === 'ArrowRight')) {
86
+ commit(seek(_index(), 1));
87
+ return true;
88
+ }
89
+ if ((vertical && key === 'ArrowUp') || (horizontal && key === 'ArrowLeft')) {
90
+ commit(seek(_index(), -1));
91
+ return true;
92
+ }
93
+ if (key === 'Home') {
94
+ edge(true);
95
+ return true;
96
+ }
97
+ if (key === 'End') {
98
+ edge(false);
99
+ return true;
100
+ }
101
+ if (options.typeahead &&
102
+ key.length === 1 &&
103
+ !event.ctrlKey &&
104
+ !event.metaKey &&
105
+ !event.altKey &&
106
+ key !== ' ') {
107
+ return runTypeahead(key);
108
+ }
109
+ return false;
110
+ }
111
+ return {
112
+ activeIndex: () => _index(),
113
+ activeItem: () => {
114
+ const arr = items();
115
+ const i = _index();
116
+ return i >= 0 && i < arr.length ? arr[i] : null;
117
+ },
118
+ setActiveItem,
119
+ next: () => commit(seek(_index(), 1)),
120
+ previous: () => commit(seek(_index(), -1)),
121
+ first: () => edge(true),
122
+ last: () => edge(false),
123
+ onKeydown,
124
+ };
125
+ }
126
+ //# sourceMappingURL=key-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-manager.js","sourceRoot":"","sources":["../../src/cdk/key-manager.ts"],"names":[],"mappings":"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"}