@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,312 @@
1
+ /**
2
+ * `<Table>` — the flagship data surface. A real `<table>` (native `<thead>/<tbody>/
3
+ * <th scope=col>/<td>` semantics) driven by a **column-def + DataSource** API, authored as a
4
+ * Weave template so it **composes the real child components** (RULE #1) — the selection
5
+ * checkboxes ARE the `<Checkbox>` component (full behaviour, one checkbox in the library, not
6
+ * a restyled native input). Rows are a keyed `@for` over the (sorted) data; arbitrary
7
+ * `Node` cells mount via `@render`. Styled by the Weave design (hairline rows, compact 34px,
8
+ * accent as a mark).
9
+ *
10
+ * Features: sortable headers (`aria-sort`, single active, emit `onSort` + convenience client
11
+ * sort for array sources), row selection (composed `<Checkbox>` column, select-all +
12
+ * indeterminate, accentSoft tint + 2px accent left border) via the CDK `SelectionModel`,
13
+ * expandable detail rows, sticky header + sticky columns (`sticky:'start'|'end'`, offsets from
14
+ * column widths), per-column show/hide (`hidden`), and an optional `maxHeight` (the body
15
+ * scrolls vertically inside while the header stays). Virtual body is the noted follow-on.
16
+ *
17
+ * import Table from '@weave-framework/ui/table';
18
+ * import Checkbox from '@weave-framework/ui/checkbox'; // optional — the build auto-resolves the composed <Checkbox>
19
+ * <Table columns={{ cols }} dataSource={{ rows }} selectable expandable />
20
+ */
21
+ import { signal, onMount } from '@weave-framework/runtime';
22
+ import { selectionModel, isDataSource, draggable } from '../cdk/index.js';
23
+ // Fixed widths of the synthetic leading columns (used for sticky-offset maths + cell width).
24
+ const EXPAND_W = 40;
25
+ const SELECT_W = 44;
26
+ const DEFAULT_STICKY_W = 120;
27
+ const DEFAULT_MIN_W = 48;
28
+ const RESIZE_STEP = 16; // keyboard resize increment (px)
29
+ export const template = '<div class={{ rootClass() }} ref={{ host }}>' +
30
+ '<div class="weave-table__scroll" style={{ scrollStyle() }}>' +
31
+ '<table class="weave-table__grid" aria-label={{ ariaLabel() }}>' +
32
+ '<thead class="weave-table__header"><tr class="weave-table__header-row">' +
33
+ '@if (expandable()) {<th class="weave-table__header-cell weave-table__expand weave-table__cell--sticky-start" style={{ expandStyle() }}></th>}' +
34
+ '@if (selectable()) {<th class="weave-table__header-cell weave-table__select weave-table__cell--sticky-start" style={{ selectStyle() }}>' +
35
+ '@if (showSelectAll()) {<Checkbox checked={{ allChecked() }} indeterminate={{ someChecked() }} onChange={{ onSelectAll }} label="Select all rows" />}' +
36
+ '</th>}' +
37
+ '@for (col of dataCols(); track col.key) {' +
38
+ '<th class={{ headClass(col) }} scope="col" style={{ headStyle(col) }} aria-sort={{ ariaSort(col) }}>' +
39
+ '@if (col.sortable) {<button type="button" class={{ sortClass(col) }} on:click={{ () => cycleSort(col.key) }}>' +
40
+ '@render (headNode(col))<span class="weave-table__sort-arrow" aria-hidden="true">{{ arrow(col) }}</span></button>}' +
41
+ '@if (!col.sortable) {@render (headNode(col))}' +
42
+ '@if (isResizable(col)) {<span class="weave-table__resize-grip" role="separator" aria-orientation="vertical"' +
43
+ ' tabindex="0" aria-label={{ resizeLabel(col) }} data-col={{ col.key }}' +
44
+ ' aria-valuenow={{ gripValueNow(col) }} aria-valuemin={{ gripValueMin(col) }}' +
45
+ ' on:keydown={{ (e) => onGripKeydown(col.key, e) }}></span>}' +
46
+ '</th>}' +
47
+ '</tr></thead>' +
48
+ '<tbody class="weave-table__body">' +
49
+ '@for (row of rows(); track rowKey(row)) {' +
50
+ '<tr class={{ rowClass(row) }} aria-selected={{ ariaSelected(row) }}>' +
51
+ '@if (expandable()) {<td class="weave-table__cell weave-table__expand weave-table__cell--sticky-start" style={{ expandStyle() }}>' +
52
+ '<button type="button" class="weave-table__expand-toggle" aria-label="Toggle row details"' +
53
+ ' aria-expanded={{ ariaExpanded(row) }} on:click={{ () => toggleExpand(row) }}></button></td>}' +
54
+ '@if (selectable()) {<td class="weave-table__cell weave-table__select weave-table__cell--sticky-start" style={{ selectStyle() }}>' +
55
+ '<Checkbox checked={{ isSelected(row) }} onChange={{ (checked) => toggleSelect(row, checked) }} label="Select row" /></td>}' +
56
+ '@for (cell of cellsFor(row); track cell.key) {' +
57
+ '<td class={{ cell.cls }} style={{ cell.style }}>@render (cell.node)</td>}' +
58
+ '</tr>' +
59
+ '@if (rowExpanded(row)) {<tr class="weave-table__detail"><td class="weave-table__detail-cell" colspan={{ colSpan() }}>@render (detailNode(row))</td></tr>}' +
60
+ '}' +
61
+ '@if (isEmpty()) {<tr><td class="weave-table__empty" colspan={{ colSpan() }}>{{ emptyText() }}</td></tr>}' +
62
+ '</tbody></table></div></div>';
63
+ export function setup(props) {
64
+ const host = signal(null);
65
+ /* ── data source + client sort ── */
66
+ const rowsView = isDataSource(props.dataSource)
67
+ ? props.dataSource.connect()
68
+ : typeof props.dataSource === 'function'
69
+ ? props.dataSource
70
+ : (() => props.dataSource);
71
+ const isCustomSource = isDataSource(props.dataSource);
72
+ const _sort = signal(props.sort ?? { active: null, direction: null });
73
+ const sortControlled = () => props.sort !== undefined;
74
+ const sortState = () => (sortControlled() ? props.sort : _sort());
75
+ const cmpValues = (a, b) => {
76
+ if (a == null && b == null)
77
+ return 0;
78
+ if (a == null)
79
+ return -1;
80
+ if (b == null)
81
+ return 1;
82
+ if (typeof a === 'number' && typeof b === 'number')
83
+ return a - b;
84
+ return String(a).localeCompare(String(b));
85
+ };
86
+ const rows = () => {
87
+ const base = rowsView();
88
+ const s = sortState();
89
+ if (isCustomSource || props.clientSort === false || !s.active || !s.direction)
90
+ return base;
91
+ const col = props.columns.find((c) => c.key === s.active);
92
+ if (!col)
93
+ return base;
94
+ const dir = s.direction === 'asc' ? 1 : -1;
95
+ const cmp = col.compare ?? ((a, b) => cmpValues(a[col.key], b[col.key]));
96
+ return [...base].sort((a, b) => cmp(a, b) * dir);
97
+ };
98
+ const cycleSort = (key) => {
99
+ const s = sortState();
100
+ let next;
101
+ if (s.active !== key)
102
+ next = { active: key, direction: 'asc' };
103
+ else if (s.direction === 'asc')
104
+ next = { active: key, direction: 'desc' };
105
+ else if (s.direction === 'desc')
106
+ next = props.disableClear ? { active: key, direction: 'asc' } : { active: null, direction: null };
107
+ else
108
+ next = { active: key, direction: 'asc' };
109
+ if (!sortControlled())
110
+ _sort.set(next);
111
+ props.onSort?.(next);
112
+ };
113
+ /* ── selection + expansion (CDK SelectionModel) ── */
114
+ const selectable = () => !!props.selectable;
115
+ const expandable = () => !!props.expandable;
116
+ const multiple = () => props.selectionMode !== 'single';
117
+ const selection = props.selection ??
118
+ selectionModel({
119
+ multiple: props.selectionMode !== 'single',
120
+ compareWith: props.compareWith,
121
+ onChange: () => props.onSelectionChange?.(selection.selected()),
122
+ });
123
+ const expanded = selectionModel({ multiple: true, compareWith: props.compareWith });
124
+ /* ── columns + sticky offsets (from widths — no DOM measurement) ── */
125
+ const dataCols = () => props.columns.filter((c) => !c.hidden);
126
+ /* ── column resize: an internal width override (px), keyed by column ── */
127
+ const _widths = signal({});
128
+ const isResizable = (c) => c.resizable ?? !!props.resizableColumns;
129
+ const minW = (c) => c.minWidth ?? DEFAULT_MIN_W;
130
+ // Effective px width: controlled prop wins, then an internal resize override, then a numeric `width`.
131
+ const effWidth = (c) => props.columnWidths?.[c.key] ?? _widths()[c.key] ?? (typeof c.width === 'number' ? c.width : undefined);
132
+ const setWidth = (c, width) => {
133
+ const w = Math.max(minW(c), Math.round(width));
134
+ if (props.columnWidths === undefined)
135
+ _widths.set({ ..._widths(), [c.key]: w });
136
+ props.onColumnResize?.({ key: c.key, width: w });
137
+ };
138
+ const colW = (c) => effWidth(c) ?? DEFAULT_STICKY_W;
139
+ const slots = () => {
140
+ const out = [];
141
+ if (expandable())
142
+ out.push({ id: '__expand', width: EXPAND_W, sticky: 'start' });
143
+ if (selectable())
144
+ out.push({ id: '__select', width: SELECT_W, sticky: 'start' });
145
+ for (const c of dataCols())
146
+ out.push({ id: c.key, width: colW(c), sticky: c.sticky });
147
+ return out;
148
+ };
149
+ const stickyStyleFor = (id) => {
150
+ const s = slots();
151
+ const idx = s.findIndex((x) => x.id === id);
152
+ if (idx < 0 || !s[idx].sticky)
153
+ return '';
154
+ if (s[idx].sticky === 'start') {
155
+ let px = 0;
156
+ for (let i = 0; i < idx; i++)
157
+ if (s[i].sticky === 'start')
158
+ px += s[i].width;
159
+ return `left:${px}px`;
160
+ }
161
+ let px = 0;
162
+ for (let i = s.length - 1; i > idx; i--)
163
+ if (s[i].sticky === 'end')
164
+ px += s[i].width;
165
+ return `right:${px}px`;
166
+ };
167
+ const alignOf = (c) => c.align ?? (c.numeric ? 'end' : 'start');
168
+ const widthCss = (c) => {
169
+ const eff = effWidth(c);
170
+ if (eff != null)
171
+ return `width:${eff}px`;
172
+ return c.width == null ? '' : `width:${c.width}`; // a string width passes through
173
+ };
174
+ const joinStyle = (...parts) => parts.filter(Boolean).join(';');
175
+ /* ── resize interaction: pointer drag (CDK draggable) + keyboard on the grip ── */
176
+ const resizeCol = (key) => props.columns.find((c) => c.key === key);
177
+ let dragStartWidth = 0;
178
+ const onGripKeydown = (key, event) => {
179
+ const col = resizeCol(key);
180
+ if (!col)
181
+ return;
182
+ const cur = effWidth(col) ?? DEFAULT_STICKY_W;
183
+ if (event.key === 'ArrowLeft') {
184
+ setWidth(col, cur - RESIZE_STEP);
185
+ event.preventDefault();
186
+ }
187
+ else if (event.key === 'ArrowRight') {
188
+ setWidth(col, cur + RESIZE_STEP);
189
+ event.preventDefault();
190
+ }
191
+ };
192
+ // Attach a pointer-drag to each header grip once the table is in the DOM.
193
+ onMount(() => {
194
+ const el = host();
195
+ if (!el)
196
+ return;
197
+ el.querySelectorAll('.weave-table__resize-grip').forEach((grip) => {
198
+ const key = grip.getAttribute('data-col') ?? '';
199
+ const col = resizeCol(key);
200
+ if (!col)
201
+ return;
202
+ draggable(grip, {
203
+ axis: 'x',
204
+ onStart: () => {
205
+ dragStartWidth = effWidth(col) ?? grip.closest('th')?.offsetWidth ?? DEFAULT_STICKY_W;
206
+ el.setAttribute('data-resizing', 'true');
207
+ },
208
+ onMove: ({ dx }) => setWidth(col, dragStartWidth + dx),
209
+ onEnd: () => el.removeAttribute('data-resizing'),
210
+ });
211
+ });
212
+ });
213
+ // Key rows by a stable id (trackBy) or by object identity — NOT by index, so a sort
214
+ // reorders the existing DOM by identity (content stays with its row) instead of rebinding
215
+ // positions (which, with one-shot `@render` cells, would strand stale content).
216
+ const rowKey = (row) => (props.trackBy ? String(props.trackBy(row)) : row);
217
+ const asNode = (content) => (typeof content === 'string' ? document.createTextNode(content) : content);
218
+ const cellClassOf = (col) => {
219
+ const parts = ['weave-table__cell'];
220
+ if (col.numeric)
221
+ parts.push('weave-table__cell--numeric');
222
+ if (col.sticky)
223
+ parts.push(`weave-table__cell--sticky-${col.sticky}`);
224
+ return parts.join(' ');
225
+ };
226
+ const cellStyleOf = (col) => joinStyle(widthCss(col), `text-align:${alignOf(col)}`, stickyStyleFor(col.key));
227
+ const cellNodeOf = (row, col) => asNode(col.cell ? col.cell(row) : String(row[col.key] ?? ''));
228
+ return {
229
+ host,
230
+ rootClass: () => {
231
+ const parts = ['weave-table'];
232
+ if (selectable())
233
+ parts.push('weave-table--selectable');
234
+ if (props.class)
235
+ parts.push(props.class);
236
+ return parts.join(' ');
237
+ },
238
+ scrollStyle: () => props.maxHeight == null ? '' : `max-height:${typeof props.maxHeight === 'number' ? `${props.maxHeight}px` : props.maxHeight}`,
239
+ ariaLabel: () => props.ariaLabel,
240
+ selectable,
241
+ expandable,
242
+ showSelectAll: () => multiple(),
243
+ dataCols,
244
+ colSpan: () => dataCols().length + (selectable() ? 1 : 0) + (expandable() ? 1 : 0),
245
+ isEmpty: () => rows().length === 0,
246
+ emptyText: () => props.emptyText ?? 'No data',
247
+ rows,
248
+ rowKey,
249
+ rowClass: (row) => (expanded.isSelected(row) ? 'weave-table__row weave-table__row--expanded' : 'weave-table__row'),
250
+ ariaSelected: (row) => (selection.isSelected(row) ? 'true' : 'false'),
251
+ isSelected: (row) => selection.isSelected(row),
252
+ // The composed <Checkbox>'s onChange delivers the next checked state as a boolean (only
253
+ // real `on:X` events are auto-forwarded, so a data-callback prop fires exactly once).
254
+ toggleSelect: (row, checked) => {
255
+ if (checked)
256
+ selection.select(row);
257
+ else
258
+ selection.deselect(row);
259
+ },
260
+ allChecked: () => {
261
+ const data = rows();
262
+ return data.length > 0 && data.every((r) => selection.isSelected(r));
263
+ },
264
+ someChecked: () => {
265
+ const data = rows();
266
+ const n = data.filter((r) => selection.isSelected(r)).length;
267
+ return n > 0 && n < data.length;
268
+ },
269
+ onSelectAll: (checked) => {
270
+ if (checked)
271
+ selection.setSelection(...rows());
272
+ else
273
+ selection.clear();
274
+ },
275
+ isExpanded: (row) => expanded.isSelected(row),
276
+ ariaExpanded: (row) => (expanded.isSelected(row) ? 'true' : 'false'),
277
+ rowExpanded: (row) => expandable() && expanded.isSelected(row),
278
+ toggleExpand: (row) => expanded.toggle(row),
279
+ headNode: (col) => typeof col.header === 'function' ? col.header() : document.createTextNode(col.header ?? col.key),
280
+ headClass: (col) => col.sticky ? `weave-table__header-cell weave-table__cell--sticky-${col.sticky}` : 'weave-table__header-cell',
281
+ headStyle: (col) => joinStyle(widthCss(col), `text-align:${alignOf(col)}`, stickyStyleFor(col.key)),
282
+ sortClass: (col) => sortState().active === col.key ? 'weave-table__sort weave-table__sort--active' : 'weave-table__sort',
283
+ ariaSort: (col) => {
284
+ const s = sortState();
285
+ if (s.active !== col.key || !s.direction)
286
+ return 'none';
287
+ return s.direction === 'asc' ? 'ascending' : 'descending';
288
+ },
289
+ arrow: (col) => {
290
+ const s = sortState();
291
+ if (s.active !== col.key || !s.direction)
292
+ return '';
293
+ return s.direction === 'desc' ? '↓' : '↑';
294
+ },
295
+ cycleSort,
296
+ isResizable,
297
+ resizeLabel: (col) => `Resize ${typeof col.header === 'string' ? col.header : col.key} column`,
298
+ // APG window-splitter: the separator exposes its current width (once known — reactive on resize)
299
+ // and the min it can shrink to. No hard max, so aria-valuemax is intentionally omitted.
300
+ gripValueNow: (col) => {
301
+ const w = effWidth(col);
302
+ return w != null ? String(Math.round(w)) : undefined;
303
+ },
304
+ gripValueMin: (col) => String(minW(col)),
305
+ onGripKeydown,
306
+ cellsFor: (row) => dataCols().map((col) => ({ key: col.key, cls: cellClassOf(col), style: cellStyleOf(col), node: cellNodeOf(row, col) })),
307
+ detailNode: (row) => asNode(props.detail ? props.detail(row) : ''),
308
+ expandStyle: () => joinStyle('width:' + EXPAND_W + 'px', stickyStyleFor('__expand')),
309
+ selectStyle: () => joinStyle('width:' + SELECT_W + 'px', stickyStyleFor('__select')),
310
+ };
311
+ }
312
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/table/table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * `<Tabs>` — a tablist with one visible panel (WAI-ARIA tabs pattern).
3
+ *
4
+ * A row of real `<button role=tab>`s over a 1px rule; the active tab is inked and
5
+ * marked with a small accent square before its label (the Weave "mark" — no sliding
6
+ * underline, which reads as Material). Exactly one `role=tabpanel` is shown; the rest
7
+ * are `hidden`. Selection is the **active index** (design), controlled via `value` +
8
+ * `onChange` or uncontrolled from `defaultIndex`.
9
+ *
10
+ * Tabs are an items-prop (`tabs`); each tab's **content is arbitrary** — a `Node`, a
11
+ * string, or a factory `() => Node` — appended into its panel on mount. Roving tabindex
12
+ * via the CDK `listKeyManager` (horizontal, wrap, skip-disabled): Left/Right/Home/End
13
+ * move focus; **activation is manual by default** (Enter/Space/click selects) or follows
14
+ * focus when `activateOnFocus`.
15
+ *
16
+ * import Tabs from '@weave-framework/ui/tabs';
17
+ * <Tabs tabs={{ tabs }} value={{ index() }} onChange={{ setIndex }} />
18
+ */
19
+ import { type Signal } from '@weave-framework/runtime';
20
+ /** A tab panel's content: a DOM node, a plain string, or a factory returning a node. */
21
+ export type TabContent = Node | string | (() => Node);
22
+ export interface TabItem {
23
+ /** Tab label text. */
24
+ label: string;
25
+ /** Panel content, shown when this tab is active. */
26
+ content: TabContent;
27
+ /** Disable just this tab (not selectable, skipped in keyboard nav). */
28
+ disabled?: boolean;
29
+ }
30
+ export interface TabsProps {
31
+ /** The tabs, left to right. */
32
+ tabs: TabItem[];
33
+ /** Controlled selected index. */
34
+ value?: number;
35
+ /** Called with the next index on selection. */
36
+ onChange?: (index: number) => void;
37
+ /** Uncontrolled initial index (ignored when `value` is provided). Default 0. */
38
+ defaultIndex?: number;
39
+ /** Selection follows focus as you arrow (auto-activation). Default false (manual). */
40
+ activateOnFocus?: boolean;
41
+ /** Disable the whole tab set. */
42
+ disabled?: boolean;
43
+ /** Accessible name for the tablist. */
44
+ label?: string;
45
+ /** Extra classes, forwarded onto the container. */
46
+ class?: string;
47
+ }
48
+ export declare const template: string;
49
+ export interface TabsContext {
50
+ host: Signal<Element | null>;
51
+ tabs: () => TabItem[];
52
+ rootClass: () => string;
53
+ label: () => string | undefined;
54
+ tabId: (index: number) => string;
55
+ panelId: (index: number) => string;
56
+ selectedAttr: (index: number) => string;
57
+ disabledAttr: (tab: TabItem) => string | undefined;
58
+ tabTabindex: (index: number) => number;
59
+ isHidden: (index: number) => boolean;
60
+ select: (index: number) => void;
61
+ onKeydown: (event: KeyboardEvent) => void;
62
+ }
63
+ export declare function setup(props: TabsProps): TabsContext;
64
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/tabs/tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGxE,wFAAwF;AACxF,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAEtD,MAAM,WAAW,OAAO;IACtB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,OAAO,EAAE,UAAU,CAAC;IACpB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,+BAA+B;IAC/B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,MAgBb,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,OAAO,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,YAAY,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACnD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C;AAUD,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAkFnD"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * `<Tabs>` — a tablist with one visible panel (WAI-ARIA tabs pattern).
3
+ *
4
+ * A row of real `<button role=tab>`s over a 1px rule; the active tab is inked and
5
+ * marked with a small accent square before its label (the Weave "mark" — no sliding
6
+ * underline, which reads as Material). Exactly one `role=tabpanel` is shown; the rest
7
+ * are `hidden`. Selection is the **active index** (design), controlled via `value` +
8
+ * `onChange` or uncontrolled from `defaultIndex`.
9
+ *
10
+ * Tabs are an items-prop (`tabs`); each tab's **content is arbitrary** — a `Node`, a
11
+ * string, or a factory `() => Node` — appended into its panel on mount. Roving tabindex
12
+ * via the CDK `listKeyManager` (horizontal, wrap, skip-disabled): Left/Right/Home/End
13
+ * move focus; **activation is manual by default** (Enter/Space/click selects) or follows
14
+ * focus when `activateOnFocus`.
15
+ *
16
+ * import Tabs from '@weave-framework/ui/tabs';
17
+ * <Tabs tabs={{ tabs }} value={{ index() }} onChange={{ setIndex }} />
18
+ */
19
+ import { signal, onMount } from '@weave-framework/runtime';
20
+ import { listKeyManager } from '../cdk/key-manager.js';
21
+ export const template = '<div class={{ rootClass() }} ref={{ host }}>' +
22
+ '<div class="weave-tabs__list" role="tablist" aria-label={{ label() }} on:keydown={{ onKeydown }}>' +
23
+ '@for (tab of tabs(); track $index) {' +
24
+ '<button class="weave-tabs__tab" type="button" role="tab" id={{ tabId($index) }}' +
25
+ ' aria-controls={{ panelId($index) }} aria-selected={{ selectedAttr($index) }}' +
26
+ ' aria-disabled={{ disabledAttr(tab) }} tabindex={{ tabTabindex($index) }}' +
27
+ ' on:click={{ () => select($index) }}>' +
28
+ '<span class="weave-tabs__label">{{ tab.label }}</span>' +
29
+ '</button>' +
30
+ '}' +
31
+ '</div>' +
32
+ '@for (tab of tabs(); track $index) {' +
33
+ '<div class="weave-tabs__panel" role="tabpanel" id={{ panelId($index) }}' +
34
+ ' aria-labelledby={{ tabId($index) }} tabindex="0" .hidden={{ isHidden($index) }}></div>' +
35
+ '}' +
36
+ '</div>';
37
+ let _uid = 0;
38
+ function toNode(content) {
39
+ if (typeof content === 'function')
40
+ return content();
41
+ if (typeof content === 'string')
42
+ return document.createTextNode(content);
43
+ return content;
44
+ }
45
+ export function setup(props) {
46
+ const host = signal(null);
47
+ const uid = (_uid += 1);
48
+ const uncontrolled = signal(props.defaultIndex ?? 0);
49
+ const tabs = () => props.tabs ?? [];
50
+ const selectedIndex = () => (props.value !== undefined ? props.value : uncontrolled());
51
+ const isTabDisabled = (tab) => !!props.disabled || !!tab.disabled;
52
+ const tabId = (index) => `weave-tabs-${uid}-tab-${index}`;
53
+ const panelId = (index) => `weave-tabs-${uid}-panel-${index}`;
54
+ const manager = listKeyManager(tabs, {
55
+ orientation: 'horizontal',
56
+ wrap: true,
57
+ skipDisabled: true,
58
+ isDisabled: isTabDisabled,
59
+ });
60
+ // The single tabbable tab: the one the keyboard moved to, else the selected one.
61
+ const rovingIndex = () => {
62
+ const active = manager.activeIndex();
63
+ return active >= 0 ? active : selectedIndex();
64
+ };
65
+ const focusTab = (index) => {
66
+ const el = host();
67
+ el?.querySelectorAll('.weave-tabs__tab')[index]?.focus();
68
+ };
69
+ const select = (index) => {
70
+ const tab = tabs()[index];
71
+ if (!tab || isTabDisabled(tab))
72
+ return;
73
+ manager.setActiveItem(index); // roving tab stop follows the interaction
74
+ if (index === selectedIndex())
75
+ return;
76
+ if (props.value === undefined)
77
+ uncontrolled.set(index);
78
+ props.onChange?.(index);
79
+ };
80
+ const onKeydown = (event) => {
81
+ // Sync the manager to the current tab stop before it navigates, so the first Arrow
82
+ // moves relative to the selected/focused tab (not from index 0).
83
+ if (manager.activeIndex() < 0)
84
+ manager.setActiveItem(rovingIndex());
85
+ if (event.key === 'Enter' || event.key === ' ') {
86
+ select(manager.activeIndex());
87
+ event.preventDefault();
88
+ return;
89
+ }
90
+ if (manager.onKeydown(event)) {
91
+ event.preventDefault();
92
+ focusTab(manager.activeIndex());
93
+ if (props.activateOnFocus)
94
+ select(manager.activeIndex());
95
+ }
96
+ };
97
+ // Panel contents are arbitrary — append them into their panels once in the DOM.
98
+ onMount(() => {
99
+ const el = host();
100
+ if (!el)
101
+ return;
102
+ const panels = el.querySelectorAll('.weave-tabs__panel');
103
+ tabs().forEach((tab, i) => {
104
+ panels[i]?.append(toNode(tab.content));
105
+ });
106
+ });
107
+ return {
108
+ host,
109
+ tabs,
110
+ rootClass: () => (props.class ? `weave-tabs ${props.class}` : 'weave-tabs'),
111
+ label: () => props.label,
112
+ tabId,
113
+ panelId,
114
+ selectedAttr: (index) => (index === selectedIndex() ? 'true' : 'false'),
115
+ disabledAttr: (tab) => (isTabDisabled(tab) ? 'true' : undefined),
116
+ tabTabindex: (index) => {
117
+ if (isTabDisabled(tabs()[index]))
118
+ return -1;
119
+ return index === rovingIndex() ? 0 : -1;
120
+ },
121
+ isHidden: (index) => index !== selectedIndex(),
122
+ select,
123
+ onKeydown,
124
+ };
125
+ }
126
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/tabs/tabs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * `<Timepicker>` — a time field + spinner popover (the design's h : m + AM/PM columns). A
3
+ * Select-style trigger field (shares Input's chrome via the `field-underline` helper) shows
4
+ * the formatted time + a clock icon; clicking (or ↓/Enter/Space) opens a CDK-overlay panel of
5
+ * **spinbutton columns** — hour ▲/▼, minute ▲/▼ (by `step`), and an AM/PM toggle (12-hour
6
+ * locales). 12h vs 24h is derived from the locale (override with `use24`).
7
+ *
8
+ * - **Value** — a neutral `{ hours, minutes }` (24-hour internally). Binding follows the Weave
9
+ * form convention: `value` + `onChange`, OR a structural `control` (a forms `Field`).
10
+ * - **Bounds** — `min`/`max` clamp the committed time; `step` (minutes, default 5) sets the
11
+ * minute increment.
12
+ * - **Keyboard** — each column is a `role=spinbutton`: Arrow Up/Down inc/dec, with
13
+ * `aria-valuenow`/`-valuetext`. Non-modal popover (click-away + Esc).
14
+ *
15
+ * import Timepicker from '@weave-framework/ui/timepicker';
16
+ * <Timepicker control={{ form.controls.start }} step={{ 15 }} />
17
+ */
18
+ import { type Signal } from '@weave-framework/runtime';
19
+ import { type MenuPosition } from '../shared/positions.js';
20
+ /** A time of day, 24-hour internally. */
21
+ export interface TimeValue {
22
+ hours: number;
23
+ minutes: number;
24
+ }
25
+ /** The subset of a forms `Field<TimeValue>` a Timepicker binds to. */
26
+ export interface TimepickerControl {
27
+ value: Signal<TimeValue | null | undefined>;
28
+ touched?: Signal<boolean>;
29
+ error?: () => string | null;
30
+ }
31
+ export interface TimepickerProps {
32
+ /** Controlled value (a getter). Ignored when `control` is set. */
33
+ value?: TimeValue | null;
34
+ /** Called with the next value on change/clear. Ignored when `control` is set. */
35
+ onChange?: (value: TimeValue | null) => void;
36
+ /** A forms `Field<TimeValue>` — two-way value + touched-on-close + error state. */
37
+ control?: TimepickerControl;
38
+ /** Earliest selectable time (inclusive). */
39
+ min?: TimeValue;
40
+ /** Latest selectable time (inclusive). */
41
+ max?: TimeValue;
42
+ /** Minute increment. Default 5. */
43
+ step?: number;
44
+ /** Force 24-hour display (else derived from the locale). */
45
+ use24?: boolean;
46
+ /** Locale for the display format + 12/24h default. */
47
+ locale?: string;
48
+ /** Shown when nothing is selected. */
49
+ placeholder?: string;
50
+ /** Disable the control. */
51
+ disabled?: boolean;
52
+ /** Mark required (aria). */
53
+ required?: boolean;
54
+ /** Show a clear (`×`) button when a time is set. */
55
+ clearable?: boolean;
56
+ /** Accessible name (when not wrapped by a FormField label). */
57
+ label?: string;
58
+ /** Accessible name for the clear button. Default 'Clear'. */
59
+ clearLabel?: string;
60
+ /** Panel position relative to the field. Default `'bottom-start'`. */
61
+ position?: MenuPosition;
62
+ /** Extra classes, forwarded onto the root. */
63
+ class?: string;
64
+ }
65
+ export declare const template: string;
66
+ export interface TimepickerContext {
67
+ root: Signal<HTMLElement | null>;
68
+ trigger: Signal<HTMLElement | null>;
69
+ rootClass: () => string;
70
+ valueClass: () => string;
71
+ displayText: () => string;
72
+ tabindex: () => number;
73
+ label: () => string | undefined;
74
+ ariaRequired: () => 'true' | undefined;
75
+ ariaDisabled: () => 'true' | undefined;
76
+ showClear: () => boolean;
77
+ clearLabel: () => string;
78
+ onFieldClick: () => void;
79
+ onTriggerKeydown: (event: KeyboardEvent) => void;
80
+ onClearClick: (event: MouseEvent) => void;
81
+ }
82
+ export declare function setup(props: TimepickerProps): TimepickerContext;
83
+ //# sourceMappingURL=timepicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timepicker.d.ts","sourceRoot":"","sources":["../../src/timepicker/timepicker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3E,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,mFAAmF;IACnF,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,4CAA4C;IAC5C,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,MAYb,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACjD,YAAY,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CAC3C;AAYD,wBAAgB,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,iBAAiB,CAsQ/D"}