@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,320 @@
1
+ /**
2
+ * `<Select>` — a native-fidelity combobox/listbox form control (WAI-ARIA APG). A trigger
3
+ * field (with Input's prefix/suffix/clear) shows the current selection; clicking (or
4
+ * ↓/Enter) opens a CDK-overlay `role=listbox` panel of options anchored under it. Focus
5
+ * stays on the trigger; the active option is tracked with `aria-activedescendant` (native
6
+ * combobox behaviour), navigated with the CDK `listKeyManager` (typeahead, skip-disabled).
7
+ *
8
+ * - **Single or `multiple`** — multi keeps the panel open, shows check-marked options, and a
9
+ * `"N selected"` summary; the value is an array.
10
+ * - **Any option shape** — the shared drop-list model: `optionValue`/`optionLabel`/
11
+ * `optionDescription`/`optionDisabled` accessors (default `.value`/`.label`/…; plain
12
+ * strings work), `emit: 'value'|'object'`, and a **description subtext** per row.
13
+ * - **Binding** — the Weave form-control convention: `value` (getter) + `onChange`, OR a
14
+ * structural `control` (a forms `Field`). Compose with `<FormField>` for label/hint/error.
15
+ *
16
+ * import Select from '@weave-framework/ui/select';
17
+ * <Select control={{ form.controls.country }} options={{ countries }}
18
+ * optionValue={{ (c) => c.code }} optionLabel={{ (c) => c.name }} />
19
+ */
20
+ import { signal, effect, onMount, onDispose } from '@weave-framework/runtime';
21
+ import { createOverlay, connectedPosition, listKeyManager } from '../cdk/index.js';
22
+ import { optValue, optLabel, optDescription, optDisabled, emitSelection } from '../shared/options.js';
23
+ import { buildPositions } from '../shared/positions.js';
24
+ export const template = '<div class={{ rootClass() }} ref={{ root }}>' +
25
+ '<div class="weave-select__field" ref={{ trigger }} role="combobox" tabindex={{ tabindex() }}' +
26
+ ' aria-haspopup="listbox" aria-expanded="false" aria-label={{ label() }} aria-required={{ ariaRequired() }}' +
27
+ ' aria-disabled={{ ariaDisabled() }} on:click={{ onFieldClick }} on:keydown={{ onTriggerKeydown }}>' +
28
+ '<span class="weave-select__prefix"><slot name="prefix"></slot></span>' +
29
+ '<span class={{ valueClass() }}>{{ displayText() }}</span>' +
30
+ '<span class="weave-select__spacer"></span>' +
31
+ '@if (showClear()) {' +
32
+ '<button type="button" class="weave-select__clear" tabindex="-1" aria-label={{ clearLabel() }} on:click={{ onClearClick }}>×</button>' +
33
+ '}' +
34
+ '<span class="weave-select__suffix"><slot name="suffix"></slot></span>' +
35
+ '<span class="weave-select__chevron" aria-hidden="true"></span>' +
36
+ '</div>' +
37
+ '</div>';
38
+ let _seq = 0;
39
+ export function setup(props) {
40
+ const id = ++_seq;
41
+ const root = signal(null);
42
+ const trigger = signal(null);
43
+ const open = signal(false);
44
+ let overlay = null;
45
+ let listbox = null;
46
+ const optionEls = new Map();
47
+ const isDisabled = () => !!props.disabled;
48
+ const enabledOptions = () => props.options.filter((o) => !optDisabled(o, props));
49
+ // Current selection, normalised to an array of the emitted items (string or object).
50
+ const currentSelection = () => {
51
+ const raw = props.control ? props.control.value() : props.value;
52
+ if (raw == null)
53
+ return [];
54
+ return Array.isArray(raw) ? raw : [raw];
55
+ };
56
+ const valueOf = (sel) => (typeof sel === 'string' ? sel : optValue(sel, props));
57
+ const selectedValues = () => new Set(currentSelection().map(valueOf));
58
+ const commit = (next) => {
59
+ if (props.control)
60
+ props.control.value.set(next);
61
+ else
62
+ props.onChange?.(next);
63
+ };
64
+ const labelForValue = (v) => {
65
+ const opt = props.options.find((o) => optValue(o, props) === v);
66
+ return opt ? optLabel(opt, props) : v;
67
+ };
68
+ const km = listKeyManager(enabledOptions, {
69
+ orientation: 'vertical',
70
+ wrap: true,
71
+ typeahead: true,
72
+ getLabel: (o) => optLabel(o, props),
73
+ });
74
+ function toggleOption(item) {
75
+ const v = optValue(item, props);
76
+ if (props.multiple) {
77
+ const has = selectedValues().has(v);
78
+ const kept = currentSelection().filter((s) => valueOf(s) !== v);
79
+ commit(has ? kept : [...kept, emitSelection(item, props)]);
80
+ }
81
+ else {
82
+ commit(emitSelection(item, props));
83
+ closePanel(true);
84
+ }
85
+ }
86
+ // Keep each rendered option's selected state + the active highlight in sync (reactive).
87
+ function syncSelected() {
88
+ const sel = selectedValues();
89
+ for (const [v, el] of optionEls) {
90
+ const on = sel.has(v);
91
+ el.setAttribute('aria-selected', on ? 'true' : 'false');
92
+ el.classList.toggle('weave-select__option--selected', on);
93
+ }
94
+ }
95
+ function syncActive() {
96
+ const active = km.activeItem();
97
+ const activeVal = active ? optValue(active, props) : null;
98
+ const t = trigger();
99
+ for (const [v, el] of optionEls) {
100
+ const on = v === activeVal;
101
+ el.classList.toggle('weave-select__option--active', on);
102
+ if (on) {
103
+ el.scrollIntoView({ block: 'nearest' });
104
+ t?.setAttribute('aria-activedescendant', el.id);
105
+ }
106
+ }
107
+ if (activeVal == null)
108
+ t?.removeAttribute('aria-activedescendant');
109
+ }
110
+ // (Re)populate a listbox element's option nodes from the CURRENT `props.options`. Reading
111
+ // `props.options` here means an effect that calls this while the panel is open re-tracks the list,
112
+ // so async-loaded / edited options reflect live (and every re-open renders fresh) — H3.
113
+ function renderOptions(box) {
114
+ box.textContent = '';
115
+ optionEls.clear();
116
+ for (const o of props.options) {
117
+ const v = optValue(o, props);
118
+ const opt = document.createElement('div');
119
+ opt.className = 'weave-select__option';
120
+ opt.id = `weave-select-${id}-opt-${optionEls.size}`;
121
+ opt.setAttribute('role', 'option');
122
+ const disabled = optDisabled(o, props);
123
+ if (disabled)
124
+ opt.setAttribute('aria-disabled', 'true');
125
+ const label = document.createElement('span');
126
+ label.className = 'weave-select__label';
127
+ label.textContent = optLabel(o, props);
128
+ opt.appendChild(label);
129
+ const desc = optDescription(o, props);
130
+ if (desc) {
131
+ const d = document.createElement('span');
132
+ d.className = 'weave-select__description';
133
+ d.textContent = desc;
134
+ opt.appendChild(d);
135
+ }
136
+ if (!disabled) {
137
+ opt.addEventListener('mousedown', (e) => {
138
+ e.preventDefault(); // keep focus on the trigger
139
+ km.setActiveItem(o);
140
+ toggleOption(o);
141
+ });
142
+ optionEls.set(v, opt);
143
+ }
144
+ box.appendChild(opt);
145
+ }
146
+ }
147
+ function buildListbox() {
148
+ const box = document.createElement('div');
149
+ box.id = `weave-select-${id}-listbox`;
150
+ box.className = 'weave-select__panel';
151
+ box.setAttribute('role', 'listbox');
152
+ if (props.multiple)
153
+ box.setAttribute('aria-multiselectable', 'true');
154
+ return box; // options are filled by the reactive effect once the panel opens
155
+ }
156
+ function openPanel(seedActive) {
157
+ if (open() || isDisabled() || props.options.length === 0)
158
+ return;
159
+ const t = trigger();
160
+ if (!listbox)
161
+ listbox = buildListbox();
162
+ overlay = createOverlay({
163
+ hasBackdrop: true,
164
+ backdropClass: 'weave-overlay-backdrop--transparent',
165
+ positionStrategy: connectedPosition(t, { positions: buildPositions(props.position, 'bottom-start'), offset: 4 }),
166
+ });
167
+ overlay.onBackdropClick(() => closePanel(false));
168
+ overlay.attach(listbox);
169
+ t.setAttribute('aria-expanded', 'true');
170
+ t.setAttribute('aria-controls', listbox.id); // APG: combobox controls its listbox popup
171
+ open.set(true);
172
+ syncSelected();
173
+ // Seed the active option to the first selected (or first) when opening.
174
+ const firstSel = [...selectedValues()][0];
175
+ const seedItem = firstSel != null ? props.options.find((o) => optValue(o, props) === firstSel) : undefined;
176
+ if (seedItem && !optDisabled(seedItem, props))
177
+ km.setActiveItem(seedItem);
178
+ else if (seedActive)
179
+ km.first();
180
+ syncActive();
181
+ }
182
+ function closePanel(returnFocus) {
183
+ if (!open())
184
+ return;
185
+ overlay?.detach();
186
+ overlay = null;
187
+ const t = trigger();
188
+ t?.setAttribute('aria-expanded', 'false');
189
+ t?.removeAttribute('aria-controls'); // the listbox element is detached while closed
190
+ open.set(false);
191
+ props.control?.touched?.set(true);
192
+ if (returnFocus)
193
+ trigger()?.focus();
194
+ }
195
+ const onFieldClick = () => {
196
+ if (open())
197
+ closePanel(true);
198
+ else
199
+ openPanel(false);
200
+ };
201
+ const onTriggerKeydown = (event) => {
202
+ if (isDisabled())
203
+ return;
204
+ if (!open()) {
205
+ if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {
206
+ event.preventDefault();
207
+ openPanel(true);
208
+ }
209
+ return;
210
+ }
211
+ if (event.key === 'Escape' || event.key === 'Tab') {
212
+ if (event.key === 'Escape')
213
+ event.preventDefault();
214
+ closePanel(event.key === 'Escape');
215
+ return;
216
+ }
217
+ // In the open listbox, both Enter and Space select/toggle the active option (WAI-ARIA APG
218
+ // listbox behaviour) — Space is a selection key here, not typeahead.
219
+ if (event.key === 'Enter' || event.key === ' ') {
220
+ event.preventDefault();
221
+ const it = km.activeItem();
222
+ if (it)
223
+ toggleOption(it);
224
+ return;
225
+ }
226
+ if (km.onKeydown(event)) {
227
+ event.preventDefault();
228
+ syncActive();
229
+ }
230
+ };
231
+ const onClearClick = (event) => {
232
+ event.stopPropagation(); // don't toggle the panel
233
+ commit(props.multiple ? [] : undefined);
234
+ };
235
+ // Reflect external value changes (control/value) onto the option list + aria-invalid.
236
+ effect(() => {
237
+ currentSelection();
238
+ if (open())
239
+ syncSelected();
240
+ });
241
+ // Keep the OPEN panel's options in sync with a changing `options` (async loads / edits) and
242
+ // render fresh on every open — `renderOptions` reads `props.options`, tracked while open.
243
+ effect(() => {
244
+ if (open() && listbox) {
245
+ renderOptions(listbox);
246
+ syncSelected();
247
+ syncActive();
248
+ }
249
+ });
250
+ effect(() => {
251
+ const t = trigger();
252
+ if (!t)
253
+ return;
254
+ const c = props.control;
255
+ const invalid = !!(c && c.touched?.() && c.error?.());
256
+ if (invalid)
257
+ t.setAttribute('aria-invalid', 'true');
258
+ else
259
+ t.removeAttribute('aria-invalid');
260
+ });
261
+ // Tie the (lazily-created, event-scoped) overlay to the component's lifetime.
262
+ onDispose(() => {
263
+ overlay?.dispose();
264
+ overlay = null;
265
+ });
266
+ // Empty prefix/suffix slots collapse (no dead gap), like Input.
267
+ onMount(() => {
268
+ const el = root();
269
+ if (!el)
270
+ return;
271
+ for (const part of ['prefix', 'suffix']) {
272
+ const span = el.querySelector(`.weave-select__${part}`);
273
+ if (span && !span.querySelector('*') && !(span.textContent ?? '').trim()) {
274
+ span.classList.add(`weave-select__${part}--empty`);
275
+ }
276
+ }
277
+ });
278
+ const invalidNow = () => {
279
+ const c = props.control;
280
+ return !!(c && c.touched?.() && c.error?.());
281
+ };
282
+ return {
283
+ root,
284
+ trigger,
285
+ rootClass: () => {
286
+ const parts = ['weave-select'];
287
+ if (props.multiple)
288
+ parts.push('weave-select--multiple');
289
+ if (isDisabled())
290
+ parts.push('weave-select--disabled');
291
+ if (invalidNow())
292
+ parts.push('weave-select--invalid');
293
+ if (props.class)
294
+ parts.push(props.class);
295
+ return parts.join(' ');
296
+ },
297
+ valueClass: () => {
298
+ const empty = selectedValues().size === 0;
299
+ return empty ? 'weave-select__value weave-select__value--placeholder' : 'weave-select__value';
300
+ },
301
+ displayText: () => {
302
+ const sel = selectedValues();
303
+ if (sel.size === 0)
304
+ return props.placeholder ?? '';
305
+ if (props.multiple && sel.size > 1)
306
+ return `${sel.size} selected`;
307
+ return labelForValue([...sel][0]);
308
+ },
309
+ tabindex: () => (isDisabled() ? -1 : 0),
310
+ label: () => props.label,
311
+ ariaRequired: () => (props.required ? 'true' : undefined),
312
+ ariaDisabled: () => (isDisabled() ? 'true' : undefined),
313
+ showClear: () => !!props.clearable && !isDisabled() && selectedValues().size > 0,
314
+ clearLabel: () => props.clearLabel ?? 'Clear',
315
+ onFieldClick,
316
+ onTriggerKeydown,
317
+ onClearClick,
318
+ };
319
+ }
320
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/select/select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Shared option model for every drop-list component (Menu, Select, Autocomplete). Options
3
+ * can be **any shape** — plain strings, the default `{value,label,description?,disabled?}`,
4
+ * or arbitrary data objects (e.g. an API row) — because the caller supplies **accessors**
5
+ * mapping each option to its value / label / description / disabled. Selection can **emit**
6
+ * either the value string or the whole option object. Zero-dep.
7
+ */
8
+ /** The canonical fields every drop-list row needs, after accessor resolution. */
9
+ export interface NormalizedOption<T> {
10
+ item: T;
11
+ value: string;
12
+ label: string;
13
+ description: string | undefined;
14
+ disabled: boolean;
15
+ }
16
+ /** Per-component accessors — omit to use the defaults (`.value`/`.label`/… or a string). */
17
+ export interface OptionAccessors<T> {
18
+ /** Which field is the value. Default: the string itself, or `item.value`. */
19
+ optionValue?: (item: T) => string;
20
+ /** Which field to display. Default: the string itself, or `item.label` (falls back to value). */
21
+ optionLabel?: (item: T) => string;
22
+ /** Optional subtext under the label. Default: `item.description` (none for a string). */
23
+ optionDescription?: (item: T) => string | undefined;
24
+ /** Whether the option is disabled. Default: `item.disabled` (false for a string). */
25
+ optionDisabled?: (item: T) => boolean;
26
+ /**
27
+ * What a selection carries: `'value'` (the value string, default) or `'object'` (the whole
28
+ * option `T`). Drives the `onSelect`/`onChange` argument + the stored value.
29
+ */
30
+ emit?: 'value' | 'object';
31
+ }
32
+ /** Resolve an option's value using the accessor (or the default: string self / `.value`). */
33
+ export declare function optValue<T>(item: T, acc: OptionAccessors<T>): string;
34
+ /** Resolve an option's display label (default: string self / `.label` → `.value`). */
35
+ export declare function optLabel<T>(item: T, acc: OptionAccessors<T>): string;
36
+ /** Resolve an option's subtext (default: `.description`, none for a string). */
37
+ export declare function optDescription<T>(item: T, acc: OptionAccessors<T>): string | undefined;
38
+ /** Resolve an option's disabled flag (default: `.disabled`, false for a string). */
39
+ export declare function optDisabled<T>(item: T, acc: OptionAccessors<T>): boolean;
40
+ /** Normalize an option into its canonical fields. */
41
+ export declare function normalize<T>(item: T, acc: OptionAccessors<T>): NormalizedOption<T>;
42
+ /** What a selection of `item` emits, per the `emit` mode (default `'value'`). */
43
+ export declare function emitSelection<T>(item: T, acc: OptionAccessors<T>): string | T;
44
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/shared/options.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iFAAiF;AACjF,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,4FAA4F;AAC5F,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,6EAA6E;IAC7E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC,iGAAiG;IACjG,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACpD,qFAAqF;IACrF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IACtC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC3B;AAaD,6FAA6F;AAC7F,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAIpE;AAED,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAKpE;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAKtF;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAIxE;AAED,qDAAqD;AACrD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAQlF;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAE7E"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Shared option model for every drop-list component (Menu, Select, Autocomplete). Options
3
+ * can be **any shape** — plain strings, the default `{value,label,description?,disabled?}`,
4
+ * or arbitrary data objects (e.g. an API row) — because the caller supplies **accessors**
5
+ * mapping each option to its value / label / description / disabled. Selection can **emit**
6
+ * either the value string or the whole option object. Zero-dep.
7
+ */
8
+ function isString(v) {
9
+ return typeof v === 'string';
10
+ }
11
+ /** Resolve an option's value using the accessor (or the default: string self / `.value`). */
12
+ export function optValue(item, acc) {
13
+ if (acc.optionValue)
14
+ return acc.optionValue(item);
15
+ if (isString(item))
16
+ return item;
17
+ return String(item.value);
18
+ }
19
+ /** Resolve an option's display label (default: string self / `.label` → `.value`). */
20
+ export function optLabel(item, acc) {
21
+ if (acc.optionLabel)
22
+ return acc.optionLabel(item);
23
+ if (isString(item))
24
+ return item;
25
+ const o = item;
26
+ return String(o.label ?? o.value);
27
+ }
28
+ /** Resolve an option's subtext (default: `.description`, none for a string). */
29
+ export function optDescription(item, acc) {
30
+ if (acc.optionDescription)
31
+ return acc.optionDescription(item);
32
+ if (isString(item))
33
+ return undefined;
34
+ const d = item.description;
35
+ return d == null ? undefined : String(d);
36
+ }
37
+ /** Resolve an option's disabled flag (default: `.disabled`, false for a string). */
38
+ export function optDisabled(item, acc) {
39
+ if (acc.optionDisabled)
40
+ return acc.optionDisabled(item);
41
+ if (isString(item))
42
+ return false;
43
+ return Boolean(item.disabled);
44
+ }
45
+ /** Normalize an option into its canonical fields. */
46
+ export function normalize(item, acc) {
47
+ return {
48
+ item,
49
+ value: optValue(item, acc),
50
+ label: optLabel(item, acc),
51
+ description: optDescription(item, acc),
52
+ disabled: optDisabled(item, acc),
53
+ };
54
+ }
55
+ /** What a selection of `item` emits, per the `emit` mode (default `'value'`). */
56
+ export function emitSelection(item, acc) {
57
+ return acc.emit === 'object' ? item : optValue(item, acc);
58
+ }
59
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/shared/options.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmCH,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC;AAC/B,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,QAAQ,CAAI,IAAO,EAAE,GAAuB;IAC1D,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,MAAM,CAAE,IAAkB,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,QAAQ,CAAI,IAAO,EAAE,GAAuB;IAC1D,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,CAAC,GAAc,IAAiB,CAAC;IACvC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAI,IAAO,EAAE,GAAuB;IAChE,IAAI,GAAG,CAAC,iBAAiB;QAAE,OAAO,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,CAAC,GAAa,IAAkB,CAAC,WAAW,CAAC;IACnD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAI,IAAO,EAAE,GAAuB;IAC7D,IAAI,GAAG,CAAC,cAAc;QAAE,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,OAAO,CAAE,IAAkB,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,SAAS,CAAI,IAAO,EAAE,GAAuB;IAC3D,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1B,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1B,WAAW,EAAE,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC;QACtC,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAI,IAAO,EAAE,GAAuB;IAC/D,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared connected-position vocabulary for anchored panels (Menu, Select, Autocomplete).
3
+ * A position is a named preset (RTL-aware `-start`/`-end`) or an explicit anchor pair.
4
+ */
5
+ import type { ConnectedPosition, PositionName } from '../cdk/index.js';
6
+ /**
7
+ * Where a panel sits relative to its object. Either a named preset or an explicit
8
+ * origin↔overlay anchor pair for full 3×3 control. Presets map to the mental model:
9
+ * below: `bottom-start` (left) · `bottom` (centre) · `bottom-end` (right)
10
+ * above: `top-start` (left) · `top` (centre) · `top-end` (right)
11
+ * side: `left` / `right` (+ `-start`/`-end` for top/bottom-aligned)
12
+ */
13
+ export type MenuPosition = PositionName | ConnectedPosition;
14
+ /**
15
+ * Build the flip-fallback list from a requested position. A preset gets its opposite
16
+ * appended (so it flips on overflow); an explicit pair is used as-is (shift-clamps to fit);
17
+ * nothing requested falls back to the component default (+ its opposite).
18
+ */
19
+ export declare function buildPositions(position: MenuPosition | undefined, fallback: PositionName): MenuPosition[];
20
+ //# sourceMappingURL=positions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positions.d.ts","sourceRoot":"","sources":["../../src/shared/positions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,iBAAiB,CAAC;AAiB5D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE,CAIzG"}
@@ -0,0 +1,27 @@
1
+ const OPPOSITE = {
2
+ top: 'bottom',
3
+ bottom: 'top',
4
+ left: 'right',
5
+ right: 'left',
6
+ 'top-start': 'bottom-start',
7
+ 'bottom-start': 'top-start',
8
+ 'top-end': 'bottom-end',
9
+ 'bottom-end': 'top-end',
10
+ 'left-start': 'right-start',
11
+ 'right-start': 'left-start',
12
+ 'left-end': 'right-end',
13
+ 'right-end': 'left-end',
14
+ };
15
+ /**
16
+ * Build the flip-fallback list from a requested position. A preset gets its opposite
17
+ * appended (so it flips on overflow); an explicit pair is used as-is (shift-clamps to fit);
18
+ * nothing requested falls back to the component default (+ its opposite).
19
+ */
20
+ export function buildPositions(position, fallback) {
21
+ if (position == null)
22
+ return [fallback, OPPOSITE[fallback]];
23
+ if (typeof position === 'string')
24
+ return [position, OPPOSITE[position]];
25
+ return [position];
26
+ }
27
+ //# sourceMappingURL=positions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positions.js","sourceRoot":"","sources":["../../src/shared/positions.ts"],"names":[],"mappings":"AAeA,MAAM,QAAQ,GAAuC;IACnD,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,cAAc;IAC3B,cAAc,EAAE,WAAW;IAC3B,SAAS,EAAE,YAAY;IACvB,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,aAAa;IAC3B,aAAa,EAAE,YAAY;IAC3B,UAAU,EAAE,WAAW;IACvB,WAAW,EAAE,UAAU;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAkC,EAAE,QAAsB;IACvF,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * `<Sidenav>` — the responsive layout shell: a `__drawer` beside a `__content`, in one of
3
+ * three modes:
4
+ *
5
+ * - **`side`** — the drawer is in flow and pushes the content (always-visible on wide screens).
6
+ * - **`over`** — the drawer floats over the content with a dimming backdrop; it becomes a focus
7
+ * context (focus-trap in, Esc + backdrop-click close). This is the off-canvas mobile drawer.
8
+ * - **`push`** — the drawer floats but also shifts the content over by its width (both slide).
9
+ *
10
+ * **Responsive:** omit `mode` and the Sidenav consumes the CDK `breakpointSignal` — below the
11
+ * Weave `Narrow` breakpoint (900px) it auto-switches to `over` + closed; above, `side` + open.
12
+ * This fulfils the off-canvas drawer deferred from the U2 Toolbar (a Toolbar hamburger toggles it).
13
+ *
14
+ * **Open state** is the Weave convention: controlled `opened` (getter) + `onOpenedChange`, OR
15
+ * uncontrolled `defaultOpened`. Imperative `open()`/`close()`/`toggle()` are exposed via the
16
+ * `api` ref callback (like Input's `onInputRef`).
17
+ *
18
+ * import Sidenav from '@weave-framework/ui/sidenav';
19
+ * <Sidenav opened={{ nav() }} onOpenedChange={{ nav.set }}>
20
+ * <nav slot="drawer">…links…</nav>
21
+ * <main>…page…</main>
22
+ * </Sidenav>
23
+ */
24
+ import { type Signal } from '@weave-framework/runtime';
25
+ /** The drawer layout mode. Omit to derive it responsively from the breakpoint. */
26
+ export type SidenavMode = 'side' | 'over' | 'push';
27
+ /** Imperative handle exposed via the `api` ref callback. */
28
+ export interface SidenavApi {
29
+ open(): void;
30
+ close(): void;
31
+ toggle(): void;
32
+ /** Reactive — the current open state. */
33
+ opened(): boolean;
34
+ }
35
+ export interface SidenavProps {
36
+ /** Fixed mode. Omit for responsive behaviour (over+closed when narrow, side+open when wide). */
37
+ mode?: SidenavMode;
38
+ /** Controlled open state (a getter). Ignored for the internal state when omitted. */
39
+ opened?: boolean;
40
+ /** Called with the next open state whenever it changes (backdrop/Esc/api/responsive). */
41
+ onOpenedChange?: (opened: boolean) => void;
42
+ /** Uncontrolled initial open state (explicit mode only; responsive mode derives it). */
43
+ defaultOpened?: boolean;
44
+ /** Which edge the drawer docks to. Default `'start'`. */
45
+ position?: 'start' | 'end';
46
+ /** The media query that drives responsive mode. Default the Weave `Narrow` breakpoint (900px). */
47
+ breakpoint?: string;
48
+ /** Force the backdrop on/off. Default: shown only in `over` mode. */
49
+ backdrop?: boolean;
50
+ /** Receives the imperative `{ open, close, toggle, opened }` handle once mounted. */
51
+ api?: (api: SidenavApi) => void;
52
+ /** Extra classes, forwarded onto the root. */
53
+ class?: string;
54
+ }
55
+ export declare const template: string;
56
+ export interface SidenavContext {
57
+ root: Signal<HTMLElement | null>;
58
+ drawer: Signal<HTMLElement | null>;
59
+ rootClass: () => string;
60
+ drawerModal: () => 'true' | undefined;
61
+ onKeydown: (event: KeyboardEvent) => void;
62
+ onBackdropClick: () => void;
63
+ }
64
+ export declare function setup(props: SidenavProps): SidenavContext;
65
+ //# sourceMappingURL=sidenav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidenav.d.ts","sourceRoot":"","sources":["../../src/sidenav/sidenav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAsC,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAG3F,kFAAkF;AAClF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,IAAI,IAAI,CAAC;IACf,yCAAyC;IACzC,MAAM,IAAI,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,gGAAgG;IAChG,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yFAAyF;IACzF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,wFAAwF;IACxF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC3B,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAChC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,MAKb,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CA8FzD"}