@adia-ai/web-components 0.4.6 → 0.4.8

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 (399) hide show
  1. package/README.md +39 -0
  2. package/USAGE.md +29 -9
  3. package/components/accordion/accordion.a2ui.json +3 -0
  4. package/components/accordion/accordion.d.ts +27 -0
  5. package/components/accordion/accordion.js +10 -117
  6. package/components/accordion/accordion.yaml +4 -0
  7. package/components/accordion/class.js +132 -0
  8. package/components/action-list/action-list.a2ui.json +3 -0
  9. package/components/action-list/action-list.d.ts +25 -0
  10. package/components/action-list/action-list.js +9 -140
  11. package/components/action-list/action-list.yaml +4 -0
  12. package/components/action-list/class.js +156 -0
  13. package/components/agent-artifact/agent-artifact.a2ui.json +4 -0
  14. package/components/agent-artifact/agent-artifact.d.ts +35 -0
  15. package/components/agent-artifact/agent-artifact.js +8 -181
  16. package/components/agent-artifact/agent-artifact.yaml +5 -0
  17. package/components/agent-artifact/class.js +200 -0
  18. package/components/agent-feedback-bar/agent-feedback-bar.a2ui.json +3 -0
  19. package/components/agent-feedback-bar/agent-feedback-bar.d.ts +33 -0
  20. package/components/agent-feedback-bar/agent-feedback-bar.js +8 -143
  21. package/components/agent-feedback-bar/agent-feedback-bar.yaml +4 -0
  22. package/components/agent-feedback-bar/class.js +162 -0
  23. package/components/agent-questions/agent-questions.a2ui.json +3 -0
  24. package/components/agent-questions/agent-questions.d.ts +33 -0
  25. package/components/agent-questions/agent-questions.js +8 -180
  26. package/components/agent-questions/agent-questions.yaml +4 -0
  27. package/components/agent-questions/class.js +199 -0
  28. package/components/agent-reasoning/agent-reasoning.a2ui.json +4 -0
  29. package/components/agent-reasoning/agent-reasoning.d.ts +37 -0
  30. package/components/agent-reasoning/agent-reasoning.js +8 -494
  31. package/components/agent-reasoning/agent-reasoning.yaml +5 -0
  32. package/components/agent-reasoning/class.js +513 -0
  33. package/components/agent-suggestions/agent-suggestions.a2ui.json +3 -0
  34. package/components/agent-suggestions/agent-suggestions.d.ts +31 -0
  35. package/components/agent-suggestions/agent-suggestions.js +8 -78
  36. package/components/agent-suggestions/agent-suggestions.yaml +4 -0
  37. package/components/agent-suggestions/class.js +97 -0
  38. package/components/agent-trace/agent-trace.a2ui.json +1 -0
  39. package/components/agent-trace/agent-trace.d.ts +29 -0
  40. package/components/alert/alert.a2ui.json +1 -0
  41. package/components/alert/alert.d.ts +39 -0
  42. package/components/alert/alert.js +8 -175
  43. package/components/alert/class.js +194 -0
  44. package/components/aside/aside.a2ui.json +1 -0
  45. package/components/avatar/avatar.a2ui.json +3 -0
  46. package/components/avatar/avatar.d.ts +28 -0
  47. package/components/avatar/avatar.js +9 -159
  48. package/components/avatar/avatar.yaml +4 -0
  49. package/components/avatar/class.js +173 -0
  50. package/components/badge/badge.a2ui.json +3 -0
  51. package/components/badge/badge.d.ts +28 -0
  52. package/components/badge/badge.js +9 -75
  53. package/components/badge/badge.yaml +4 -0
  54. package/components/badge/class.js +93 -0
  55. package/components/block/block.a2ui.json +1 -0
  56. package/components/block/block.d.ts +20 -0
  57. package/components/block/block.js +9 -15
  58. package/components/block/class.js +33 -0
  59. package/components/breadcrumb/breadcrumb.a2ui.json +5 -0
  60. package/components/breadcrumb/breadcrumb.d.ts +24 -0
  61. package/components/breadcrumb/breadcrumb.js +8 -113
  62. package/components/breadcrumb/breadcrumb.yaml +6 -0
  63. package/components/breadcrumb/class.js +132 -0
  64. package/components/button/button.a2ui.json +3 -0
  65. package/components/button/button.d.ts +44 -0
  66. package/components/button/button.js +15 -66
  67. package/components/button/button.yaml +5 -0
  68. package/components/button/class.js +80 -0
  69. package/components/calendar-picker/calendar-picker.a2ui.json +7 -1
  70. package/components/calendar-picker/calendar-picker.js +8 -332
  71. package/components/calendar-picker/calendar-picker.yaml +51 -177
  72. package/components/calendar-picker/class.js +351 -0
  73. package/components/canvas/canvas.a2ui.json +7 -1
  74. package/components/canvas/canvas.d.ts +33 -0
  75. package/components/canvas/canvas.yaml +29 -36
  76. package/components/card/card.a2ui.json +4 -0
  77. package/components/card/card.d.ts +37 -0
  78. package/components/card/card.js +9 -50
  79. package/components/card/card.yaml +171 -433
  80. package/components/card/class.js +68 -0
  81. package/components/chart/chart.a2ui.json +1 -0
  82. package/components/chart/chart.d.ts +55 -0
  83. package/components/chart/chart.js +8 -2131
  84. package/components/chart/class.js +2150 -0
  85. package/components/chart-legend/chart-legend.a2ui.json +4 -0
  86. package/components/chart-legend/chart-legend.d.ts +37 -0
  87. package/components/chart-legend/chart-legend.js +8 -197
  88. package/components/chart-legend/chart-legend.yaml +5 -0
  89. package/components/chart-legend/class.js +215 -0
  90. package/components/chat-thread/chat-thread.a2ui.json +1 -0
  91. package/components/chat-thread/chat-thread.d.ts +27 -0
  92. package/components/chat-thread/chat-thread.js +8 -157
  93. package/components/chat-thread/class.js +176 -0
  94. package/components/check/check.a2ui.json +1 -0
  95. package/components/check/check.js +11 -52
  96. package/components/check/class.js +68 -0
  97. package/components/code/class.js +501 -0
  98. package/components/code/code.a2ui.json +1 -0
  99. package/components/code/code.js +8 -482
  100. package/components/col/class.js +30 -0
  101. package/components/col/col.a2ui.json +1 -0
  102. package/components/col/col.d.ts +24 -0
  103. package/components/col/col.js +10 -13
  104. package/components/color-picker/class.js +550 -0
  105. package/components/color-picker/color-picker.a2ui.json +3 -0
  106. package/components/color-picker/color-picker.js +8 -531
  107. package/components/color-picker/color-picker.yaml +4 -0
  108. package/components/command/class.js +364 -0
  109. package/components/command/command.a2ui.json +4 -0
  110. package/components/command/command.d.ts +31 -0
  111. package/components/command/command.js +8 -345
  112. package/components/command/command.yaml +105 -124
  113. package/components/demo-toggle/class.js +153 -0
  114. package/components/demo-toggle/demo-toggle.a2ui.json +1 -0
  115. package/components/demo-toggle/demo-toggle.d.ts +33 -0
  116. package/components/demo-toggle/demo-toggle.js +8 -135
  117. package/components/description-list/class.js +86 -0
  118. package/components/description-list/description-list.a2ui.json +1 -0
  119. package/components/description-list/description-list.d.ts +22 -0
  120. package/components/description-list/description-list.js +8 -67
  121. package/components/divider/class.js +57 -0
  122. package/components/divider/divider.a2ui.json +1 -0
  123. package/components/divider/divider.d.ts +20 -0
  124. package/components/divider/divider.js +10 -40
  125. package/components/drawer/class.js +306 -0
  126. package/components/drawer/drawer.a2ui.json +1 -0
  127. package/components/drawer/drawer.d.ts +35 -0
  128. package/components/drawer/drawer.js +8 -287
  129. package/components/embed/class.js +73 -0
  130. package/components/embed/embed.a2ui.json +1 -0
  131. package/components/embed/embed.d.ts +24 -0
  132. package/components/embed/embed.js +9 -55
  133. package/components/empty-state/class.js +108 -0
  134. package/components/empty-state/empty-state.a2ui.json +3 -0
  135. package/components/empty-state/empty-state.d.ts +22 -0
  136. package/components/empty-state/empty-state.js +9 -90
  137. package/components/empty-state/empty-state.yaml +4 -0
  138. package/components/feed/class.js +381 -0
  139. package/components/feed/feed.a2ui.json +9 -1
  140. package/components/feed/feed.d.ts +29 -0
  141. package/components/feed/feed.js +9 -367
  142. package/components/feed/feed.yaml +8 -1
  143. package/components/field/class.js +266 -0
  144. package/components/field/field.a2ui.json +1 -0
  145. package/components/field/field.d.ts +24 -0
  146. package/components/field/field.js +8 -247
  147. package/components/fields/class.js +106 -0
  148. package/components/fields/fields.a2ui.json +1 -0
  149. package/components/fields/fields.d.ts +20 -0
  150. package/components/fields/fields.js +8 -87
  151. package/components/footer/footer.a2ui.json +1 -0
  152. package/components/grid/class.js +31 -0
  153. package/components/grid/grid.a2ui.json +1 -0
  154. package/components/grid/grid.d.ts +24 -0
  155. package/components/grid/grid.js +10 -14
  156. package/components/header/header.a2ui.json +1 -0
  157. package/components/heatmap/class.js +305 -0
  158. package/components/heatmap/heatmap.a2ui.json +1 -0
  159. package/components/heatmap/heatmap.d.ts +43 -0
  160. package/components/heatmap/heatmap.js +8 -286
  161. package/components/icon/class.js +54 -0
  162. package/components/icon/icon.a2ui.json +1 -0
  163. package/components/icon/icon.d.ts +24 -0
  164. package/components/icon/icon.js +13 -40
  165. package/components/image/class.js +112 -0
  166. package/components/image/image.a2ui.json +3 -0
  167. package/components/image/image.d.ts +34 -0
  168. package/components/image/image.js +9 -94
  169. package/components/image/image.yaml +4 -0
  170. package/components/index.js +8 -0
  171. package/components/input/class.js +773 -0
  172. package/components/input/input.a2ui.json +7 -0
  173. package/components/input/input.js +8 -755
  174. package/components/input/input.yaml +177 -442
  175. package/components/inspector/class.js +142 -0
  176. package/components/inspector/inspector.a2ui.json +13 -1
  177. package/components/inspector/inspector.d.ts +18 -0
  178. package/components/inspector/inspector.js +8 -124
  179. package/components/inspector/inspector.yaml +21 -30
  180. package/components/kbd/class.js +34 -0
  181. package/components/kbd/kbd.a2ui.json +4 -0
  182. package/components/kbd/kbd.d.ts +18 -0
  183. package/components/kbd/kbd.js +10 -17
  184. package/components/kbd/kbd.yaml +54 -185
  185. package/components/link/class.js +187 -0
  186. package/components/link/link.a2ui.json +1 -0
  187. package/components/link/link.d.ts +65 -0
  188. package/components/link/link.js +8 -168
  189. package/components/list/class.js +249 -0
  190. package/components/list/list.a2ui.json +3 -0
  191. package/components/list/list.d.ts +33 -0
  192. package/components/list/list.js +9 -231
  193. package/components/list/list.yaml +4 -0
  194. package/components/menu/class.js +332 -0
  195. package/components/menu/menu.a2ui.json +3 -0
  196. package/components/menu/menu.d.ts +31 -0
  197. package/components/menu/menu.js +11 -316
  198. package/components/menu/menu.yaml +4 -0
  199. package/components/modal/class.js +231 -0
  200. package/components/modal/modal.a2ui.json +6 -1
  201. package/components/modal/modal.d.ts +33 -0
  202. package/components/modal/modal.js +8 -212
  203. package/components/modal/modal.yaml +19 -39
  204. package/components/nav/class.js +150 -0
  205. package/components/nav/nav.a2ui.json +1 -0
  206. package/components/nav/nav.d.ts +41 -0
  207. package/components/nav/nav.js +8 -131
  208. package/components/nav-group/class.js +152 -0
  209. package/components/nav-group/nav-group.a2ui.json +1 -0
  210. package/components/nav-group/nav-group.d.ts +45 -0
  211. package/components/nav-group/nav-group.js +9 -134
  212. package/components/nav-item/class.js +86 -0
  213. package/components/nav-item/nav-item.a2ui.json +1 -0
  214. package/components/nav-item/nav-item.d.ts +47 -0
  215. package/components/nav-item/nav-item.js +10 -69
  216. package/components/noodles/class.js +510 -0
  217. package/components/noodles/noodles.a2ui.json +1 -0
  218. package/components/noodles/noodles.d.ts +47 -0
  219. package/components/noodles/noodles.js +9 -493
  220. package/components/option-card/class.js +167 -0
  221. package/components/option-card/option-card.a2ui.json +3 -0
  222. package/components/option-card/option-card.js +8 -149
  223. package/components/option-card/option-card.yaml +4 -0
  224. package/components/otp-input/class.js +180 -0
  225. package/components/otp-input/otp-input.a2ui.json +6 -1
  226. package/components/otp-input/otp-input.js +9 -162
  227. package/components/otp-input/otp-input.yaml +45 -174
  228. package/components/page/class.js +97 -0
  229. package/components/page/page.a2ui.json +1 -0
  230. package/components/page/page.d.ts +47 -0
  231. package/components/page/page.js +8 -79
  232. package/components/pagination/class.js +195 -0
  233. package/components/pagination/pagination.a2ui.json +1 -0
  234. package/components/pagination/pagination.d.ts +33 -0
  235. package/components/pagination/pagination.js +9 -177
  236. package/components/pane/class.js +186 -0
  237. package/components/pane/pane.a2ui.json +20 -2
  238. package/components/pane/pane.d.ts +41 -0
  239. package/components/pane/pane.js +8 -167
  240. package/components/pane/pane.yaml +64 -158
  241. package/components/pipeline-status/class.js +189 -0
  242. package/components/pipeline-status/pipeline-status.a2ui.json +8 -1
  243. package/components/pipeline-status/pipeline-status.d.ts +22 -0
  244. package/components/pipeline-status/pipeline-status.js +9 -172
  245. package/components/pipeline-status/pipeline-status.yaml +34 -72
  246. package/components/popover/class.js +194 -0
  247. package/components/popover/popover.a2ui.json +1 -0
  248. package/components/popover/popover.d.ts +24 -0
  249. package/components/popover/popover.js +9 -176
  250. package/components/progress/class.js +74 -0
  251. package/components/progress/progress.a2ui.json +4 -0
  252. package/components/progress/progress.d.ts +20 -0
  253. package/components/progress/progress.js +10 -57
  254. package/components/progress/progress.yaml +124 -287
  255. package/components/progress-row/class.js +110 -0
  256. package/components/progress-row/progress-row.a2ui.json +3 -0
  257. package/components/progress-row/progress-row.d.ts +24 -0
  258. package/components/progress-row/progress-row.js +8 -92
  259. package/components/progress-row/progress-row.yaml +4 -0
  260. package/components/radio/class.js +83 -0
  261. package/components/radio/radio.a2ui.json +1 -0
  262. package/components/radio/radio.js +11 -67
  263. package/components/range/class.js +194 -0
  264. package/components/range/range.a2ui.json +1 -0
  265. package/components/range/range.js +9 -176
  266. package/components/rating/class.js +148 -0
  267. package/components/rating/rating.a2ui.json +1 -0
  268. package/components/rating/rating.js +9 -130
  269. package/components/richtext/class.js +87 -0
  270. package/components/richtext/richtext.a2ui.json +8 -1
  271. package/components/richtext/richtext.d.ts +20 -0
  272. package/components/richtext/richtext.js +8 -68
  273. package/components/richtext/richtext.yaml +30 -65
  274. package/components/row/class.js +50 -0
  275. package/components/row/row.a2ui.json +1 -0
  276. package/components/row/row.d.ts +37 -0
  277. package/components/row/row.js +10 -33
  278. package/components/search/class.js +134 -0
  279. package/components/search/search.a2ui.json +1 -0
  280. package/components/search/search.js +10 -117
  281. package/components/section/section.a2ui.json +1 -0
  282. package/components/segment/class.js +62 -0
  283. package/components/segment/segment.a2ui.json +3 -0
  284. package/components/segment/segment.d.ts +26 -0
  285. package/components/segment/segment.js +10 -45
  286. package/components/segment/segment.yaml +4 -0
  287. package/components/segmented/class.js +165 -0
  288. package/components/segmented/segmented.a2ui.json +5 -0
  289. package/components/segmented/segmented.js +10 -148
  290. package/components/segmented/segmented.yaml +41 -59
  291. package/components/select/class.js +408 -0
  292. package/components/select/select.a2ui.json +3 -0
  293. package/components/select/select.js +15 -396
  294. package/components/select/select.yaml +4 -0
  295. package/components/skeleton/class.js +52 -0
  296. package/components/skeleton/skeleton.a2ui.json +1 -0
  297. package/components/skeleton/skeleton.d.ts +24 -0
  298. package/components/skeleton/skeleton.js +8 -34
  299. package/components/slider/class.js +184 -0
  300. package/components/slider/slider.a2ui.json +1 -0
  301. package/components/slider/slider.js +9 -166
  302. package/components/stack/class.js +28 -0
  303. package/components/stack/stack.a2ui.json +1 -0
  304. package/components/stack/stack.d.ts +18 -0
  305. package/components/stack/stack.js +10 -11
  306. package/components/stat/stat.a2ui.json +1 -0
  307. package/components/step-progress/class.js +98 -0
  308. package/components/step-progress/step-progress.a2ui.json +1 -0
  309. package/components/step-progress/step-progress.d.ts +28 -0
  310. package/components/step-progress/step-progress.js +8 -79
  311. package/components/stepper/class.js +126 -0
  312. package/components/stepper/stepper.a2ui.json +3 -0
  313. package/components/stepper/stepper.d.ts +20 -0
  314. package/components/stepper/stepper.js +9 -112
  315. package/components/stepper/stepper.yaml +4 -0
  316. package/components/stream/class.js +109 -0
  317. package/components/stream/stream.a2ui.json +1 -0
  318. package/components/stream/stream.d.ts +33 -0
  319. package/components/stream/stream.js +8 -90
  320. package/components/swatch/class.js +131 -0
  321. package/components/swatch/swatch.a2ui.json +1 -0
  322. package/components/swatch/swatch.d.ts +29 -0
  323. package/components/swatch/swatch.js +8 -112
  324. package/components/swiper/class.js +373 -0
  325. package/components/swiper/swiper.a2ui.json +7 -0
  326. package/components/swiper/swiper.d.ts +45 -0
  327. package/components/swiper/swiper.js +8 -354
  328. package/components/swiper/swiper.yaml +72 -212
  329. package/components/switch/class.js +63 -0
  330. package/components/switch/switch.a2ui.json +7 -1
  331. package/components/switch/switch.js +11 -47
  332. package/components/switch/switch.yaml +70 -265
  333. package/components/table/class.js +1453 -0
  334. package/components/table/table.a2ui.json +7 -0
  335. package/components/table/table.d.ts +55 -0
  336. package/components/table/table.js +8 -1435
  337. package/components/table/table.yaml +8 -0
  338. package/components/table-toolbar/class.js +680 -0
  339. package/components/table-toolbar/table-toolbar.a2ui.json +12 -0
  340. package/components/table-toolbar/table-toolbar.d.ts +49 -0
  341. package/components/table-toolbar/table-toolbar.js +8 -689
  342. package/components/table-toolbar/table-toolbar.yaml +13 -0
  343. package/components/tabs/class.js +242 -0
  344. package/components/tabs/tabs.a2ui.json +3 -0
  345. package/components/tabs/tabs.d.ts +31 -0
  346. package/components/tabs/tabs.js +8 -223
  347. package/components/tabs/tabs.yaml +4 -0
  348. package/components/tag/class.js +99 -0
  349. package/components/tag/tag.a2ui.json +1 -0
  350. package/components/tag/tag.d.ts +37 -0
  351. package/components/tag/tag.js +8 -80
  352. package/components/text/class.js +46 -0
  353. package/components/text/text.a2ui.json +1 -0
  354. package/components/text/text.d.ts +26 -0
  355. package/components/text/text.js +9 -28
  356. package/components/textarea/class.js +134 -0
  357. package/components/textarea/textarea.a2ui.json +1 -0
  358. package/components/textarea/textarea.js +11 -118
  359. package/components/timeline/class.js +176 -0
  360. package/components/timeline/timeline.a2ui.json +18 -1
  361. package/components/timeline/timeline.d.ts +36 -0
  362. package/components/timeline/timeline.js +9 -162
  363. package/components/timeline/timeline.yaml +14 -1
  364. package/components/toast/class.js +92 -0
  365. package/components/toast/toast.a2ui.json +1 -0
  366. package/components/toast/toast.d.ts +33 -0
  367. package/components/toast/toast.js +9 -76
  368. package/components/toggle-group/class.js +154 -0
  369. package/components/toggle-group/toggle-group.a2ui.json +1 -0
  370. package/components/toggle-group/toggle-group.d.ts +29 -0
  371. package/components/toggle-group/toggle-group.js +11 -140
  372. package/components/toggle-scheme/class.js +286 -0
  373. package/components/toggle-scheme/toggle-scheme.a2ui.json +3 -0
  374. package/components/toggle-scheme/toggle-scheme.d.ts +51 -0
  375. package/components/toggle-scheme/toggle-scheme.js +8 -268
  376. package/components/toggle-scheme/toggle-scheme.yaml +4 -0
  377. package/components/toolbar/class.js +388 -0
  378. package/components/toolbar/toolbar.a2ui.json +3 -0
  379. package/components/toolbar/toolbar.d.ts +24 -0
  380. package/components/toolbar/toolbar.js +10 -376
  381. package/components/toolbar/toolbar.yaml +4 -0
  382. package/components/tooltip/class.js +299 -0
  383. package/components/tooltip/tooltip.a2ui.json +1 -0
  384. package/components/tooltip/tooltip.d.ts +28 -0
  385. package/components/tooltip/tooltip.js +8 -280
  386. package/components/tree/class.js +245 -0
  387. package/components/tree/tree.a2ui.json +3 -0
  388. package/components/tree/tree.d.ts +25 -0
  389. package/components/tree/tree.js +9 -244
  390. package/components/tree/tree.yaml +4 -0
  391. package/components/upload/class.js +199 -0
  392. package/components/upload/upload.a2ui.json +1 -0
  393. package/components/upload/upload.js +11 -183
  394. package/core/icons-phosphor.js +93 -0
  395. package/core/icons.js +92 -90
  396. package/core/index.js +5 -0
  397. package/index.d.ts +160 -5
  398. package/index.js +7 -0
  399. package/package.json +7 -2
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Non-side-effect class export for `<demo-toggle-ui>`.
3
+ *
4
+ * Importing this file gives you the class(es) without auto-registering the tag.
5
+ * Useful for test isolation, subclassing with tag-name override, or selective
6
+ * composition.
7
+ *
8
+ * The auto-register path stays at `@adia-ai/web-components/components/demo-toggle`
9
+ * (which imports this file + calls `defineIfFree()`).
10
+ *
11
+ * @see ../../USAGE.md#registration--auto-vs-explicit
12
+ */
13
+
14
+ /**
15
+ * <demo-toggle-ui>
16
+ * <section slot="off">…without trait…</section>
17
+ * <section slot="on">…with trait…</section>
18
+ * </demo-toggle-ui>
19
+ *
20
+ * Side-by-side "with trait / without trait" comparison primitive.
21
+ * Renders a header bar with a switch-ui that flips which child slot is
22
+ * visible. Reflects [data-state="on"|"off"] on the host so consumer CSS
23
+ * can theme the bar around the active variant.
24
+ *
25
+ * Two layout modes:
26
+ * default — only the active slot is in the layout (the other is `display: none`).
27
+ * data-mode="overlay" — both slots stack on the same coordinates; inactive
28
+ * slot is `visibility: hidden` so layout never shifts.
29
+ *
30
+ * Authoring API:
31
+ * [label-on] — header label when state=on (default: "On")
32
+ * [label-off] — header label when state=off (default: "Off")
33
+ * [initial] — "on" | "off"; only consulted when [state] is unset on connect
34
+ * [state] — "on" | "off"; reflected; the live state attribute
35
+ *
36
+ * Events:
37
+ * change — { detail: { state: "on" | "off" } }
38
+ *
39
+ * Keyboard:
40
+ * The embedded <switch-ui> handles space + enter via its own keydown wiring.
41
+ */
42
+
43
+ import { UIElement } from '../../core/element.js';
44
+ import '../switch/switch.js';
45
+ import '../row/row.js';
46
+ import '../text/text.js';
47
+
48
+ export class UIDemoToggle extends UIElement {
49
+ static properties = {
50
+ labelOn: { type: String, default: 'On', attribute: 'label-on', reflect: true },
51
+ labelOff: { type: String, default: 'Off', attribute: 'label-off', reflect: true },
52
+ initial: { type: String, default: 'off', reflect: true },
53
+ state: { type: String, default: '', reflect: true },
54
+ };
55
+
56
+ // Header bar with a switch + active label. Stamped once per class via
57
+ // static parts; live label text is updated in render() so the same
58
+ // template covers every (label-on, label-off, state) tuple.
59
+ static parts = {
60
+ bar: `
61
+ <row-ui slot="bar" gap="3" align="center" data-demo-toggle-bar>
62
+ <text-ui slot="label" data-demo-toggle-label></text-ui>
63
+ <switch-ui slot="switch" data-demo-toggle-switch></switch-ui>
64
+ </row-ui>
65
+ `,
66
+ };
67
+
68
+ static template = () => null;
69
+
70
+ #bar = null;
71
+ #switch = null;
72
+ #label = null;
73
+ #bound = false;
74
+
75
+ connected() {
76
+ // Resolve the initial state. Honor [state] if explicitly authored;
77
+ // otherwise fall back to [initial] (default "off"). Anything other
78
+ // than the literal "on" coerces to "off" so authors can't poison
79
+ // the data-state attribute with arbitrary values.
80
+ if (!this.state) {
81
+ const seed = (this.initial === 'on') ? 'on' : 'off';
82
+ this.state = seed;
83
+ } else {
84
+ this.state = (this.state === 'on') ? 'on' : 'off';
85
+ }
86
+
87
+ // Stamp the header bar lazily — `this.ensure('bar')` clones the
88
+ // blueprint into the light DOM the first time it's called.
89
+ this.#bar = this.ensure('bar');
90
+ this.#switch = this.#bar.querySelector('[data-demo-toggle-switch]');
91
+ this.#label = this.#bar.querySelector('[data-demo-toggle-label]');
92
+
93
+ if (!this.#bound) {
94
+ this.#bound = true;
95
+ this.#switch.addEventListener('change', this.#onSwitchChange);
96
+ }
97
+ }
98
+
99
+ disconnected() {
100
+ if (this.#switch) {
101
+ this.#switch.removeEventListener('change', this.#onSwitchChange);
102
+ }
103
+ this.#bar = null;
104
+ this.#switch = null;
105
+ this.#label = null;
106
+ this.#bound = false;
107
+ }
108
+
109
+ render() {
110
+ if (!this.#bar) return;
111
+ const on = this.state === 'on';
112
+
113
+ // Sync the embedded switch to the host's state. checked is a
114
+ // reflected property; the assignment fires no event because
115
+ // syncValue() short-circuits when the next state matches.
116
+ if (this.#switch.checked !== on) {
117
+ this.#switch.checked = on;
118
+ }
119
+
120
+ if (this.#label) {
121
+ this.#label.textContent = on ? this.labelOn : this.labelOff;
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Public toggle method — flips the host between on and off and emits
127
+ * a `change` event. Mirrors the click-on-switch path so consumers
128
+ * can drive the state from outside without touching the embedded
129
+ * switch directly.
130
+ */
131
+ toggle() {
132
+ this.state = (this.state === 'on') ? 'off' : 'on';
133
+ this.dispatchEvent(new CustomEvent('change', {
134
+ bubbles: true,
135
+ detail: { state: this.state },
136
+ }));
137
+ }
138
+
139
+ #onSwitchChange = (e) => {
140
+ // The embedded <switch-ui> fires a bubbling `change`. Stop it at the
141
+ // host boundary — we re-dispatch our own `change` with detail.state
142
+ // so consumers see exactly one event per toggle, not the inner
143
+ // switch's bare event AND our annotated one.
144
+ e.stopPropagation();
145
+ const next = this.#switch.checked ? 'on' : 'off';
146
+ if (next === this.state) return;
147
+ this.state = next;
148
+ this.dispatchEvent(new CustomEvent('change', {
149
+ bubbles: true,
150
+ detail: { state: this.state },
151
+ }));
152
+ };
153
+ }
@@ -53,6 +53,7 @@
53
53
  "x-adiaui": {
54
54
  "anti_patterns": [],
55
55
  "category": "container",
56
+ "composes": [],
56
57
  "events": {
57
58
  "change": {
58
59
  "description": "Fired when the toggle flips. detail contains { state }."
@@ -0,0 +1,33 @@
1
+ /**
2
+ * `<demo-toggle-ui>` — Side-by-side comparison primitive — header bar with a switch + two child slots ("on" / "off"); toggling the switch swaps which slot is visible. Used on trait detail pages to show "with trait" vs "without trait" on the same chrome. data-mode="overlay" stacks the slots on the same coordinates so layout never shifts.
3
+ *
4
+ * @see https://ui-kit.exe.xyz/site/components/demo-toggle
5
+ *
6
+ * Type declarations generated by scripts/build/dts-codegen.mjs from
7
+ * the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
8
+ * run `npm run build:components`, then `npm run codegen:dts` to
9
+ * regenerate; or hand-author this file fully if rich event types are
10
+ * needed beyond what the yaml `events:` block can express.
11
+ */
12
+
13
+ import { UIElement } from '../../core/element.js';
14
+
15
+ export type DemoToggleChangeEvent = CustomEvent<unknown>;
16
+
17
+ export class UIDemoToggle extends UIElement {
18
+ /** Initial state when [state] is not set on connect ("on" | "off"). */
19
+ initial: 'on' | 'off';
20
+ /** Header label rendered when state is "off". */
21
+ labelOff: string;
22
+ /** Header label rendered when state is "on". */
23
+ labelOn: string;
24
+ /** Current toggle state ("on" | "off"). Reflected as data-state on the host. */
25
+ state: '' | 'on' | 'off';
26
+
27
+ addEventListener<K extends keyof HTMLElementEventMap>(
28
+ type: K,
29
+ listener: (this: UIDemoToggle, ev: HTMLElementEventMap[K]) => unknown,
30
+ options?: boolean | AddEventListenerOptions,
31
+ ): void;
32
+ addEventListener(type: 'change', listener: (ev: DemoToggleChangeEvent) => unknown, options?: boolean | AddEventListenerOptions): void;
33
+ }
@@ -1,144 +1,17 @@
1
1
  /**
2
- * <demo-toggle-ui>
3
- * <section slot="off">…without trait…</section>
4
- * <section slot="on">…with trait…</section>
5
- * </demo-toggle-ui>
2
+ * `<demo-toggle-ui>` — auto-registers the tag on import.
6
3
  *
7
- * Side-by-side "with trait / without trait" comparison primitive.
8
- * Renders a header bar with a switch-ui that flips which child slot is
9
- * visible. Reflects [data-state="on"|"off"] on the host so consumer CSS
10
- * can theme the bar around the active variant.
4
+ * For non-side-effect class import (test isolation, tag override), use
5
+ * the `class` subpath:
11
6
  *
12
- * Two layout modes:
13
- * default — only the active slot is in the layout (the other is `display: none`).
14
- * data-mode="overlay" — both slots stack on the same coordinates; inactive
15
- * slot is `visibility: hidden` so layout never shifts.
7
+ * import { UIDemoToggle } from '@adia-ai/web-components/components/demo-toggle/class';
16
8
  *
17
- * Authoring API:
18
- * [label-on] — header label when state=on (default: "On")
19
- * [label-off] — header label when state=off (default: "Off")
20
- * [initial] — "on" | "off"; only consulted when [state] is unset on connect
21
- * [state] — "on" | "off"; reflected; the live state attribute
22
- *
23
- * Events:
24
- * change — { detail: { state: "on" | "off" } }
25
- *
26
- * Keyboard:
27
- * The embedded <switch-ui> handles space + enter via its own keydown wiring.
9
+ * @see ../../USAGE.md#registration--auto-vs-explicit
28
10
  */
29
11
 
30
- import { UIElement } from '../../core/element.js';
31
- import '../switch/switch.js';
32
- import '../row/row.js';
33
- import '../text/text.js';
34
-
35
- class UIDemoToggle extends UIElement {
36
- static properties = {
37
- labelOn: { type: String, default: 'On', attribute: 'label-on', reflect: true },
38
- labelOff: { type: String, default: 'Off', attribute: 'label-off', reflect: true },
39
- initial: { type: String, default: 'off', reflect: true },
40
- state: { type: String, default: '', reflect: true },
41
- };
42
-
43
- // Header bar with a switch + active label. Stamped once per class via
44
- // static parts; live label text is updated in render() so the same
45
- // template covers every (label-on, label-off, state) tuple.
46
- static parts = {
47
- bar: `
48
- <row-ui slot="bar" gap="3" align="center" data-demo-toggle-bar>
49
- <text-ui slot="label" data-demo-toggle-label></text-ui>
50
- <switch-ui slot="switch" data-demo-toggle-switch></switch-ui>
51
- </row-ui>
52
- `,
53
- };
54
-
55
- static template = () => null;
56
-
57
- #bar = null;
58
- #switch = null;
59
- #label = null;
60
- #bound = false;
61
-
62
- connected() {
63
- // Resolve the initial state. Honor [state] if explicitly authored;
64
- // otherwise fall back to [initial] (default "off"). Anything other
65
- // than the literal "on" coerces to "off" so authors can't poison
66
- // the data-state attribute with arbitrary values.
67
- if (!this.state) {
68
- const seed = (this.initial === 'on') ? 'on' : 'off';
69
- this.state = seed;
70
- } else {
71
- this.state = (this.state === 'on') ? 'on' : 'off';
72
- }
73
-
74
- // Stamp the header bar lazily — `this.ensure('bar')` clones the
75
- // blueprint into the light DOM the first time it's called.
76
- this.#bar = this.ensure('bar');
77
- this.#switch = this.#bar.querySelector('[data-demo-toggle-switch]');
78
- this.#label = this.#bar.querySelector('[data-demo-toggle-label]');
79
-
80
- if (!this.#bound) {
81
- this.#bound = true;
82
- this.#switch.addEventListener('change', this.#onSwitchChange);
83
- }
84
- }
85
-
86
- disconnected() {
87
- if (this.#switch) {
88
- this.#switch.removeEventListener('change', this.#onSwitchChange);
89
- }
90
- this.#bar = null;
91
- this.#switch = null;
92
- this.#label = null;
93
- this.#bound = false;
94
- }
95
-
96
- render() {
97
- if (!this.#bar) return;
98
- const on = this.state === 'on';
99
-
100
- // Sync the embedded switch to the host's state. checked is a
101
- // reflected property; the assignment fires no event because
102
- // syncValue() short-circuits when the next state matches.
103
- if (this.#switch.checked !== on) {
104
- this.#switch.checked = on;
105
- }
106
-
107
- if (this.#label) {
108
- this.#label.textContent = on ? this.labelOn : this.labelOff;
109
- }
110
- }
111
-
112
- /**
113
- * Public toggle method — flips the host between on and off and emits
114
- * a `change` event. Mirrors the click-on-switch path so consumers
115
- * can drive the state from outside without touching the embedded
116
- * switch directly.
117
- */
118
- toggle() {
119
- this.state = (this.state === 'on') ? 'off' : 'on';
120
- this.dispatchEvent(new CustomEvent('change', {
121
- bubbles: true,
122
- detail: { state: this.state },
123
- }));
124
- }
125
-
126
- #onSwitchChange = (e) => {
127
- // The embedded <switch-ui> fires a bubbling `change`. Stop it at the
128
- // host boundary — we re-dispatch our own `change` with detail.state
129
- // so consumers see exactly one event per toggle, not the inner
130
- // switch's bare event AND our annotated one.
131
- e.stopPropagation();
132
- const next = this.#switch.checked ? 'on' : 'off';
133
- if (next === this.state) return;
134
- this.state = next;
135
- this.dispatchEvent(new CustomEvent('change', {
136
- bubbles: true,
137
- detail: { state: this.state },
138
- }));
139
- };
140
- }
12
+ import { defineIfFree } from '../../core/register.js';
13
+ import { UIDemoToggle } from './class.js';
141
14
 
142
- customElements.define('demo-toggle-ui', UIDemoToggle);
15
+ defineIfFree('demo-toggle-ui', UIDemoToggle);
143
16
 
144
17
  export { UIDemoToggle };
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Non-side-effect class export for `<description-list-ui>`.
3
+ *
4
+ * Importing this file gives you the class(es) without auto-registering the tag.
5
+ * Useful for test isolation, subclassing with tag-name override, or selective
6
+ * composition.
7
+ *
8
+ * The auto-register path stays at `@adia-ai/web-components/components/description-list`
9
+ * (which imports this file + calls `defineIfFree()`).
10
+ *
11
+ * @see ../../USAGE.md#registration--auto-vs-explicit
12
+ */
13
+
14
+ /**
15
+ * <description-list-ui> — Semantic dl/dt/dd wrapper for key-value metadata.
16
+ *
17
+ * Pure layout component. Renders terms and descriptions in a grid.
18
+ *
19
+ * Declarative use (recommended — preserves semantics for SSR + AT):
20
+ * <description-list-ui>
21
+ * <dt>Status</dt><dd>Active</dd>
22
+ * <dt>Plan</dt><dd>Pro</dd>
23
+ * </description-list-ui>
24
+ *
25
+ * Programmatic use:
26
+ * <description-list-ui
27
+ * items='[{"term":"Status","description":"Active"}]'></description-list-ui>
28
+ *
29
+ * Props:
30
+ * layout — "stacked" (term above, default) | "inline" (term : value on one row)
31
+ * align — "start" (default) | "between" (space-between for inline layout)
32
+ * items — optional JSON array of {term, description} pairs
33
+ */
34
+
35
+ import { UIElement } from '../../core/element.js';
36
+
37
+ export class UIDescriptionList extends UIElement {
38
+ static properties = {
39
+ layout: { type: String, default: 'stacked', reflect: true },
40
+ align: { type: String, default: 'start', reflect: true },
41
+ };
42
+
43
+ static template = () => null;
44
+
45
+ connected() {
46
+ // ARIA 1.2: list role requires listitem children, but <dt>/<dd>
47
+ // aren't listitems. group role is the accurate fit for a
48
+ // labeled-pairs grouping.
49
+ this.setAttribute('role', 'group');
50
+ }
51
+
52
+ render() {
53
+ const items = this.#resolveItems();
54
+ if (!items.length) return; // preserve declarative children
55
+
56
+ this.innerHTML = items.map(({ term, description }) => `
57
+ <dt data-dl-term>${this.#escape(term)}</dt>
58
+ <dd data-dl-desc>${this.#escape(description)}</dd>
59
+ `).join('');
60
+ }
61
+
62
+ #resolveItems() {
63
+ if (Array.isArray(this._items) && this._items.length) return this._items;
64
+ const attr = this.getAttribute('items');
65
+ if (attr) {
66
+ try {
67
+ const parsed = JSON.parse(attr);
68
+ if (Array.isArray(parsed)) return parsed;
69
+ } catch { /* fall through */ }
70
+ }
71
+ return [];
72
+ }
73
+
74
+ set items(v) {
75
+ this._items = Array.isArray(v) ? v : [];
76
+ this.render();
77
+ }
78
+
79
+ get items() {
80
+ return this._items || [];
81
+ }
82
+
83
+ #escape(s) {
84
+ return String(s == null ? '' : s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
85
+ }
86
+ }
@@ -47,6 +47,7 @@
47
47
  "x-adiaui": {
48
48
  "anti_patterns": [],
49
49
  "category": "display",
50
+ "composes": [],
50
51
  "events": {},
51
52
  "examples": [],
52
53
  "keywords": [
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `<description-list-ui>` — Semantic key-value list (dl/dt/dd). Preserves native HTML semantics for screen readers and SSR. Layout supports stacked (default) or inline.
3
+ *
4
+ * @see https://ui-kit.exe.xyz/site/components/description-list
5
+ *
6
+ * Type declarations generated by scripts/build/dts-codegen.mjs from
7
+ * the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
8
+ * run `npm run build:components`, then `npm run codegen:dts` to
9
+ * regenerate; or hand-author this file fully if rich event types are
10
+ * needed beyond what the yaml `events:` block can express.
11
+ */
12
+
13
+ import { UIElement } from '../../core/element.js';
14
+
15
+ export class UIDescriptionList extends UIElement {
16
+ /** Optional JSON array of {term, description} — alternative to declarative <dt>/<dd> children */
17
+ items: unknown[];
18
+ /** Alignment for inline layout — between = term left, value right. */
19
+ align: 'start' | 'between';
20
+ /** stacked: term above description. inline: term and description on one row. */
21
+ layout: 'stacked' | 'inline';
22
+ }
@@ -1,76 +1,17 @@
1
1
  /**
2
- * <description-list-ui>Semantic dl/dt/dd wrapper for key-value metadata.
2
+ * `<description-list-ui>`auto-registers the tag on import.
3
3
  *
4
- * Pure layout component. Renders terms and descriptions in a grid.
4
+ * For non-side-effect class import (test isolation, tag override), use
5
+ * the `class` subpath:
5
6
  *
6
- * Declarative use (recommended preserves semantics for SSR + AT):
7
- * <description-list-ui>
8
- * <dt>Status</dt><dd>Active</dd>
9
- * <dt>Plan</dt><dd>Pro</dd>
10
- * </description-list-ui>
7
+ * import { UIDescriptionList } from '@adia-ai/web-components/components/description-list/class';
11
8
  *
12
- * Programmatic use:
13
- * <description-list-ui
14
- * items='[{"term":"Status","description":"Active"}]'></description-list-ui>
15
- *
16
- * Props:
17
- * layout — "stacked" (term above, default) | "inline" (term : value on one row)
18
- * align — "start" (default) | "between" (space-between for inline layout)
19
- * items — optional JSON array of {term, description} pairs
9
+ * @see ../../USAGE.md#registration--auto-vs-explicit
20
10
  */
21
11
 
22
- import { UIElement } from '../../core/element.js';
23
-
24
- class UIDescriptionList extends UIElement {
25
- static properties = {
26
- layout: { type: String, default: 'stacked', reflect: true },
27
- align: { type: String, default: 'start', reflect: true },
28
- };
29
-
30
- static template = () => null;
31
-
32
- connected() {
33
- // ARIA 1.2: list role requires listitem children, but <dt>/<dd>
34
- // aren't listitems. group role is the accurate fit for a
35
- // labeled-pairs grouping.
36
- this.setAttribute('role', 'group');
37
- }
38
-
39
- render() {
40
- const items = this.#resolveItems();
41
- if (!items.length) return; // preserve declarative children
42
-
43
- this.innerHTML = items.map(({ term, description }) => `
44
- <dt data-dl-term>${this.#escape(term)}</dt>
45
- <dd data-dl-desc>${this.#escape(description)}</dd>
46
- `).join('');
47
- }
48
-
49
- #resolveItems() {
50
- if (Array.isArray(this._items) && this._items.length) return this._items;
51
- const attr = this.getAttribute('items');
52
- if (attr) {
53
- try {
54
- const parsed = JSON.parse(attr);
55
- if (Array.isArray(parsed)) return parsed;
56
- } catch { /* fall through */ }
57
- }
58
- return [];
59
- }
60
-
61
- set items(v) {
62
- this._items = Array.isArray(v) ? v : [];
63
- this.render();
64
- }
65
-
66
- get items() {
67
- return this._items || [];
68
- }
12
+ import { defineIfFree } from '../../core/register.js';
13
+ import { UIDescriptionList } from './class.js';
69
14
 
70
- #escape(s) {
71
- return String(s == null ? '' : s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
72
- }
73
- }
15
+ defineIfFree('description-list-ui', UIDescriptionList);
74
16
 
75
- customElements.define('description-list-ui', UIDescriptionList);
76
17
  export { UIDescriptionList };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Non-side-effect class export for `<divider-ui>`.
3
+ *
4
+ * Importing this file gives you the class(es) without auto-registering the tag.
5
+ * Useful for test isolation, subclassing with tag-name override, or selective
6
+ * composition.
7
+ *
8
+ * The auto-register path stays at `@adia-ai/web-components/components/divider`
9
+ * (which imports this file + calls `defineIfFree()`).
10
+ *
11
+ * @see ../../USAGE.md#registration--auto-vs-explicit
12
+ */
13
+
14
+ /**
15
+ * <divider-ui></divider-ui>
16
+ * <divider-ui label="or"></divider-ui>
17
+ * <divider-ui vertical></divider-ui>
18
+ *
19
+ * Horizontal or vertical divider with optional label.
20
+ * Renders as a simple line, or a line broken by centered text.
21
+ */
22
+
23
+ import { UIElement } from '../../core/element.js';
24
+
25
+ export class UIDivider extends UIElement {
26
+ static properties = {
27
+ label: { type: String, default: '', reflect: true },
28
+ vertical: { type: Boolean, default: false, reflect: true },
29
+ };
30
+
31
+ static template = () => null;
32
+
33
+ connected() {
34
+ this.setAttribute('role', 'separator');
35
+ }
36
+
37
+ render() {
38
+ if (this.vertical) {
39
+ this.setAttribute('aria-orientation', 'vertical');
40
+ } else {
41
+ this.removeAttribute('aria-orientation');
42
+ }
43
+
44
+ if (this.label) {
45
+ let span = this.querySelector('[slot="label"]');
46
+ if (!span) {
47
+ span = document.createElement('span');
48
+ span.setAttribute('slot', 'label');
49
+ this.appendChild(span);
50
+ }
51
+ span.textContent = this.label;
52
+ } else {
53
+ const span = this.querySelector('[slot="label"]');
54
+ if (span) span.remove();
55
+ }
56
+ }
57
+ }
@@ -34,6 +34,7 @@
34
34
  "x-adiaui": {
35
35
  "anti_patterns": [],
36
36
  "category": "display",
37
+ "composes": [],
37
38
  "events": {},
38
39
  "examples": [
39
40
  {
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `<divider-ui>` — Horizontal or vertical divider with optional label.
3
+ *
4
+ * @see https://ui-kit.exe.xyz/site/components/divider
5
+ *
6
+ * Type declarations generated by scripts/build/dts-codegen.mjs from
7
+ * the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
8
+ * run `npm run build:components`, then `npm run codegen:dts` to
9
+ * regenerate; or hand-author this file fully if rich event types are
10
+ * needed beyond what the yaml `events:` block can express.
11
+ */
12
+
13
+ import { UIElement } from '../../core/element.js';
14
+
15
+ export class UIDivider extends UIElement {
16
+ /** Center label text */
17
+ label: string;
18
+ /** Vertical orientation */
19
+ vertical: boolean;
20
+ }