@agent-ui-kit/web-components 0.0.8 → 0.0.14

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 (470) hide show
  1. package/README.md +67 -4
  2. package/dist/agent-ui.css +1 -1
  3. package/dist/api.colors.json +2 -2
  4. package/dist/api.colors.yaml +2 -2
  5. package/dist/api.components.json +2859 -368
  6. package/dist/api.tokens.json +3 -3
  7. package/dist/api.tokens.yaml +3 -3
  8. package/dist/blocks/agent-chat/agent-chat.d.ts +0 -0
  9. package/dist/blocks/announcement-card/announcement-card.d.ts +0 -0
  10. package/dist/blocks/bpm-process/bpm-process.d.ts +0 -0
  11. package/dist/blocks/chart-activity/chart-activity.d.ts +0 -0
  12. package/dist/blocks/chart-card/chart-card.d.ts +0 -0
  13. package/dist/blocks/chart-donut/chart-donut.d.ts +0 -0
  14. package/dist/blocks/chart-grouped/chart-grouped.d.ts +0 -0
  15. package/dist/blocks/chart-horizontal/chart-horizontal.d.ts +0 -0
  16. package/dist/blocks/chart-interactive/chart-interactive.d.ts +0 -0
  17. package/dist/blocks/chart-labeled/chart-labeled.d.ts +0 -0
  18. package/dist/blocks/checkout-form/checkout-form.d.ts +0 -0
  19. package/dist/blocks/clinical-trial/clinical-trial.d.ts +0 -0
  20. package/dist/blocks/contributors/contributors.d.ts +0 -0
  21. package/dist/blocks/cyber-threat/cyber-threat.d.ts +0 -0
  22. package/dist/blocks/dashboard-layout/dashboard-layout.d.ts +0 -0
  23. package/dist/blocks/data-eng-dag/data-eng-dag.d.ts +0 -0
  24. package/dist/blocks/date-picker/date-picker.d.ts +0 -0
  25. package/dist/blocks/ddx-workflow/ddx-workflow.d.ts +0 -0
  26. package/dist/blocks/empty-state/empty-state.d.ts +0 -0
  27. package/dist/blocks/env-variables/env-variables.d.ts +0 -0
  28. package/dist/blocks/feature-upgrade/feature-upgrade.d.ts +0 -0
  29. package/dist/blocks/financial-risk/financial-risk.d.ts +0 -0
  30. package/dist/blocks/flow-editor/flow-editor.d.ts +0 -0
  31. package/dist/blocks/gen-ai-pipeline/gen-ai-pipeline.d.ts +0 -0
  32. package/dist/blocks/index.d.ts +0 -0
  33. package/dist/blocks/issue-assign/issue-assign.d.ts +0 -0
  34. package/dist/blocks/keyboard-shortcuts/keyboard-shortcuts.d.ts +0 -0
  35. package/dist/blocks/login-branded/login-branded.d.ts +0 -0
  36. package/dist/blocks/login-email-only/login-email-only.d.ts +0 -0
  37. package/dist/blocks/login-form/login-form.d.ts +0 -0
  38. package/dist/blocks/login-simple/login-simple.d.ts +0 -0
  39. package/dist/blocks/login-social/login-social.d.ts +0 -0
  40. package/dist/blocks/login-two-column/login-two-column.d.ts +0 -0
  41. package/dist/blocks/marketing-automation/marketing-automation.d.ts +0 -0
  42. package/dist/blocks/member-list/member-list.d.ts +0 -0
  43. package/dist/blocks/ml-pipeline/ml-pipeline.d.ts +0 -0
  44. package/dist/blocks/nav-card/nav-card.d.ts +0 -0
  45. package/dist/blocks/notification-list/notification-list.d.ts +0 -0
  46. package/dist/blocks/oncology-pathway/oncology-pathway.d.ts +0 -0
  47. package/dist/blocks/pricing-card/pricing-card.d.ts +0 -0
  48. package/dist/blocks/processing-state/processing-state.d.ts +0 -0
  49. package/dist/blocks/profile-card/profile-card.d.ts +0 -0
  50. package/dist/blocks/saas-onboarding/saas-onboarding.d.ts +0 -0
  51. package/dist/blocks/settings-form/settings-form.d.ts +0 -0
  52. package/dist/blocks/settings-panel/settings-panel.d.ts +0 -0
  53. package/dist/blocks/sidebar-nav/sidebar-nav.d.ts +0 -0
  54. package/dist/blocks/signup-form/signup-form.d.ts +0 -0
  55. package/dist/blocks/stat-cards/stat-cards.d.ts +0 -0
  56. package/dist/blocks/status-card/status-card.d.ts +0 -0
  57. package/dist/blocks/suggested-labs/suggested-labs.d.ts +0 -0
  58. package/dist/blocks/supply-chain/supply-chain.d.ts +0 -0
  59. package/dist/blocks/survey-card/survey-card.d.ts +0 -0
  60. package/dist/blocks/tabbed-panel/tabbed-panel.d.ts +0 -0
  61. package/dist/blocks/team-empty/team-empty.d.ts +0 -0
  62. package/dist/blocks/usage-billing/usage-billing.d.ts +0 -0
  63. package/dist/blocks-incoming/action-toolbar/action-toolbar.d.ts +0 -0
  64. package/dist/blocks-incoming/agent-artifact-card/agent-artifact-card.d.ts +0 -0
  65. package/dist/blocks-incoming/agent-chat-response/agent-chat-response.d.ts +0 -0
  66. package/dist/blocks-incoming/agent-code-result/agent-code-result.d.ts +0 -0
  67. package/dist/blocks-incoming/agent-context-panel/agent-context-panel.d.ts +0 -0
  68. package/dist/blocks-incoming/agent-feedback-controls/agent-feedback-controls.d.ts +0 -0
  69. package/dist/blocks-incoming/agent-follow-up-chips/agent-follow-up-chips.d.ts +0 -0
  70. package/dist/blocks-incoming/agent-model-selector/agent-model-selector.d.ts +0 -0
  71. package/dist/blocks-incoming/agent-prompt-input/agent-prompt-input.d.ts +0 -0
  72. package/dist/blocks-incoming/agent-streaming-message/agent-streaming-message.d.ts +0 -0
  73. package/dist/blocks-incoming/agent-suggestion-card/agent-suggestion-card.d.ts +0 -0
  74. package/dist/blocks-incoming/agent-task-card/agent-task-card.d.ts +0 -0
  75. package/dist/blocks-incoming/agent-thinking-state/agent-thinking-state.d.ts +0 -0
  76. package/dist/blocks-incoming/agent-tool-use-card/agent-tool-use-card.d.ts +0 -0
  77. package/dist/blocks-incoming/auth-card/auth-card.d.ts +0 -0
  78. package/dist/blocks-incoming/commerce-pricing-table/commerce-pricing-table.d.ts +0 -0
  79. package/dist/blocks-incoming/comms-chat-thread/comms-chat-thread.d.ts +0 -0
  80. package/dist/blocks-incoming/comms-notification-list/comms-notification-list.d.ts +0 -0
  81. package/dist/blocks-incoming/content-article-card/content-article-card.d.ts +0 -0
  82. package/dist/blocks-incoming/dashboard-kpi-grid/dashboard-kpi-grid.d.ts +0 -0
  83. package/dist/blocks-incoming/data-activity-log/data-activity-log.d.ts +0 -0
  84. package/dist/blocks-incoming/data-metric-card/data-metric-card.d.ts +0 -0
  85. package/dist/blocks-incoming/data-table/data-table.d.ts +0 -0
  86. package/dist/blocks-incoming/data-timeline/data-timeline.d.ts +0 -0
  87. package/dist/blocks-incoming/feedback-alert-banner/feedback-alert-banner.d.ts +0 -0
  88. package/dist/blocks-incoming/feedback-empty-state/feedback-empty-state.d.ts +0 -0
  89. package/dist/blocks-incoming/feedback-progress-stepper/feedback-progress-stepper.d.ts +0 -0
  90. package/dist/blocks-incoming/form-settings-section/form-settings-section.d.ts +0 -0
  91. package/dist/blocks-incoming/game-battleship/game-battleship.d.ts +0 -0
  92. package/dist/blocks-incoming/game-chess/game-chess.d.ts +0 -0
  93. package/dist/blocks-incoming/game-connect-four/game-connect-four.d.ts +0 -0
  94. package/dist/blocks-incoming/game-tic-tac-toe/game-tic-tac-toe.d.ts +0 -0
  95. package/dist/blocks-incoming/list-kanban-board/list-kanban-board.d.ts +0 -0
  96. package/dist/blocks-incoming/media-image-gallery/media-image-gallery.d.ts +0 -0
  97. package/dist/blocks-incoming/nav-sidebar/nav-sidebar.d.ts +0 -0
  98. package/dist/blocks-incoming/onboard-stepper/onboard-stepper.d.ts +0 -0
  99. package/dist/blocks-incoming/overlay-confirmation-modal/overlay-confirmation-modal.d.ts +0 -0
  100. package/dist/blocks-incoming/overlay-dropdown-menu/overlay-dropdown-menu.d.ts +0 -0
  101. package/dist/blocks-incoming/user-profile-card/user-profile-card.d.ts +0 -0
  102. package/dist/blocks-incoming/user-team-list/user-team-list.d.ts +0 -0
  103. package/dist/chunks/{agent-ciCayeod.js → agent-C72JZNe6.js} +8 -8
  104. package/dist/chunks/{agent-ciCayeod.js.map → agent-C72JZNe6.js.map} +1 -1
  105. package/dist/chunks/empty-state-5M3uR5CM.js +5160 -0
  106. package/dist/chunks/empty-state-5M3uR5CM.js.map +1 -0
  107. package/dist/components/accordion/accordion-item.d.ts +9 -0
  108. package/dist/components/accordion/accordion.d.ts +9 -0
  109. package/dist/components/accordion/index.d.ts +2 -0
  110. package/dist/components/agent/agent-activity.d.ts +13 -0
  111. package/dist/components/agent/agent-feed.d.ts +13 -0
  112. package/dist/components/agent/agent-input.d.ts +18 -0
  113. package/dist/components/agent/agent-message.d.ts +22 -0
  114. package/dist/components/agent/agent-panel.d.ts +16 -0
  115. package/dist/components/agent/agent-prompt.d.ts +7 -0
  116. package/dist/components/agent/agent-seeds.d.ts +15 -0
  117. package/dist/components/agent/agent-text.d.ts +14 -0
  118. package/dist/components/agent/agent-thread.d.ts +11 -0
  119. package/dist/components/agent/index.d.ts +9 -0
  120. package/dist/components/agent.js +1 -1
  121. package/dist/components/alert/alert.d.ts +3 -0
  122. package/dist/components/alert/index.d.ts +1 -0
  123. package/dist/components/app-shell/app-shell.d.ts +4 -0
  124. package/dist/components/app-shell/index.d.ts +1 -0
  125. package/dist/components/avatar-group/avatar-group.d.ts +10 -0
  126. package/dist/components/avatar-group/index.d.ts +1 -0
  127. package/dist/components/breadcrumb/breadcrumb-item.d.ts +8 -0
  128. package/dist/components/breadcrumb/breadcrumb.d.ts +7 -0
  129. package/dist/components/breadcrumb/index.d.ts +2 -0
  130. package/dist/components/button/button.d.ts +17 -0
  131. package/dist/components/button/index.d.ts +1 -0
  132. package/dist/components/calendar/calendar.d.ts +26 -0
  133. package/dist/components/calendar/index.d.ts +3 -0
  134. package/dist/components/calendar/store/calendar-store.d.ts +60 -0
  135. package/dist/components/calendar-picker/calendar-picker.d.ts +14 -0
  136. package/dist/components/calendar-picker/index.d.ts +1 -0
  137. package/dist/components/calendar-range-picker/calendar-range-picker.d.ts +14 -0
  138. package/dist/components/calendar-range-picker/index.d.ts +1 -0
  139. package/dist/components/canvas/canvas.d.ts +19 -0
  140. package/dist/components/canvas/index.d.ts +1 -0
  141. package/dist/components/carousel/carousel.d.ts +13 -0
  142. package/dist/components/carousel/index.d.ts +1 -0
  143. package/dist/components/checkbox/checkbox.d.ts +18 -0
  144. package/dist/components/checkbox/index.d.ts +1 -0
  145. package/dist/components/chip/chip.d.ts +8 -0
  146. package/dist/components/chip/index.d.ts +1 -0
  147. package/dist/components/code-block/code-block.d.ts +10 -0
  148. package/dist/components/code-block/index.d.ts +1 -0
  149. package/dist/components/color-area/color-area.d.ts +11 -0
  150. package/dist/components/color-area/index.d.ts +1 -0
  151. package/dist/components/color-field/color-field.d.ts +10 -0
  152. package/dist/components/color-field/index.d.ts +1 -0
  153. package/dist/components/color-picker/color-picker.d.ts +10 -0
  154. package/dist/components/color-picker/index.d.ts +1 -0
  155. package/dist/components/color-slider/color-slider.d.ts +15 -0
  156. package/dist/components/color-slider/index.d.ts +1 -0
  157. package/dist/components/command/command-empty.d.ts +4 -0
  158. package/dist/components/command/command-group.d.ts +6 -0
  159. package/dist/components/command/command-input.d.ts +12 -0
  160. package/dist/components/command/command-item.d.ts +10 -0
  161. package/dist/components/command/command-list.d.ts +4 -0
  162. package/dist/components/command/command.d.ts +6 -0
  163. package/dist/components/command/index.d.ts +6 -0
  164. package/dist/components/container/container.d.ts +11 -0
  165. package/dist/components/container/index.d.ts +1 -0
  166. package/dist/components/context-menu/context-menu.d.ts +12 -0
  167. package/dist/components/context-menu/index.d.ts +1 -0
  168. package/dist/components/copy-button/copy-button.d.ts +10 -0
  169. package/dist/components/copy-button/index.d.ts +1 -0
  170. package/dist/components/date-field/date-field.d.ts +13 -0
  171. package/dist/components/date-field/index.d.ts +1 -0
  172. package/dist/components/dialog/dialog.d.ts +12 -0
  173. package/dist/components/dialog/index.d.ts +1 -0
  174. package/dist/components/disclosure/disclosure.d.ts +10 -0
  175. package/dist/components/disclosure/index.d.ts +1 -0
  176. package/dist/components/disclosure-group/disclosure-group.d.ts +8 -0
  177. package/dist/components/disclosure-group/index.d.ts +1 -0
  178. package/dist/components/drawer/drawer.d.ts +13 -0
  179. package/dist/components/drawer/index.d.ts +1 -0
  180. package/dist/components/dropdown-menu/dropdown-menu.d.ts +12 -0
  181. package/dist/components/dropdown-menu/index.d.ts +1 -0
  182. package/dist/components/editor/context.d.ts +15 -0
  183. package/dist/components/editor/editor-layer.d.ts +11 -0
  184. package/dist/components/editor/editor.d.ts +32 -0
  185. package/dist/components/editor/index.d.ts +4 -0
  186. package/dist/components/editor.js +1 -1
  187. package/dist/components/empty-state/empty-state.d.ts +10 -0
  188. package/dist/components/empty-state/index.d.ts +1 -0
  189. package/dist/components/feed/feed.d.ts +11 -0
  190. package/dist/components/feed/index.d.ts +1 -0
  191. package/dist/components/field/index.d.ts +0 -0
  192. package/dist/components/file-upload/file-upload.d.ts +13 -0
  193. package/dist/components/file-upload/index.d.ts +1 -0
  194. package/dist/components/graph/graph-layer.d.ts +3 -0
  195. package/dist/components/graph/graph-node.d.ts +13 -0
  196. package/dist/components/graph/graph-noodle.d.ts +19 -0
  197. package/dist/components/graph/graph-port.d.ts +17 -0
  198. package/dist/components/graph/graph-ui.d.ts +10 -0
  199. package/dist/components/graph/index.d.ts +5 -0
  200. package/dist/components/graph.js +1 -1
  201. package/dist/components/gripper/gripper.d.ts +9 -0
  202. package/dist/components/gripper/index.d.ts +1 -0
  203. package/dist/components/hover-card/hover-card.d.ts +11 -0
  204. package/dist/components/hover-card/index.d.ts +1 -0
  205. package/dist/components/icon/icon.d.ts +12 -0
  206. package/dist/components/icon/index.d.ts +2 -0
  207. package/dist/components/icon/registry.d.ts +8 -0
  208. package/dist/components/image/image.d.ts +13 -0
  209. package/dist/components/image/index.d.ts +1 -0
  210. package/dist/components/index.d.ts +72 -0
  211. package/dist/components/input/index.d.ts +2 -0
  212. package/dist/components/input/input-otp.d.ts +17 -0
  213. package/dist/components/input/input.d.ts +29 -0
  214. package/dist/components/link/index.d.ts +1 -0
  215. package/dist/components/link/link.d.ts +3 -0
  216. package/dist/components/meter/index.d.ts +1 -0
  217. package/dist/components/meter/meter.d.ts +8 -0
  218. package/dist/components/nav-item/index.d.ts +1 -0
  219. package/dist/components/nav-item/nav-item.d.ts +3 -0
  220. package/dist/components/noodles/datasets.d.ts +16 -0
  221. package/dist/components/noodles/index.d.ts +3 -0
  222. package/dist/components/noodles/noodle-controller.d.ts +71 -0
  223. package/dist/components/noodles/noodles.d.ts +30 -0
  224. package/dist/components/notification-center/index.d.ts +2 -0
  225. package/dist/components/notification-center/notification-center.d.ts +27 -0
  226. package/dist/components/optgroup/index.d.ts +1 -0
  227. package/dist/components/optgroup/optgroup.d.ts +9 -0
  228. package/dist/components/option/index.d.ts +1 -0
  229. package/dist/components/option/option.d.ts +11 -0
  230. package/dist/components/page/index.d.ts +3 -0
  231. package/dist/components/page/page-context.d.ts +4 -0
  232. package/dist/components/page/page-main.d.ts +3 -0
  233. package/dist/components/page/page.d.ts +4 -0
  234. package/dist/components/pagination/index.d.ts +1 -0
  235. package/dist/components/pagination/pagination.d.ts +10 -0
  236. package/dist/components/pane/index.d.ts +2 -0
  237. package/dist/components/pane/pane.d.ts +27 -0
  238. package/dist/components/pane/panes.d.ts +10 -0
  239. package/dist/components/preview-app/index.d.ts +1 -0
  240. package/dist/components/preview-app/preview-app.d.ts +8 -0
  241. package/dist/components/progress/index.d.ts +1 -0
  242. package/dist/components/progress/progress.d.ts +6 -0
  243. package/dist/components/progress-circle/index.d.ts +1 -0
  244. package/dist/components/progress-circle/progress-circle.d.ts +9 -0
  245. package/dist/components/radio/index.d.ts +2 -0
  246. package/dist/components/radio/radio-group.d.ts +10 -0
  247. package/dist/components/radio/radio.d.ts +17 -0
  248. package/dist/components/range/index.d.ts +1 -0
  249. package/dist/components/range/range.d.ts +18 -0
  250. package/dist/components/root/index.d.ts +1 -0
  251. package/dist/components/root/root.d.ts +4 -0
  252. package/dist/components/segmented-control/index.d.ts +2 -0
  253. package/dist/components/segmented-control/segment.d.ts +8 -0
  254. package/dist/components/segmented-control/segmented-control.d.ts +13 -0
  255. package/dist/components/select/index.d.ts +1 -0
  256. package/dist/components/select/select.d.ts +37 -0
  257. package/dist/components/sidebar/index.d.ts +4 -0
  258. package/dist/components/sidebar/sidebar-content.d.ts +4 -0
  259. package/dist/components/sidebar/sidebar-footer.d.ts +4 -0
  260. package/dist/components/sidebar/sidebar-header.d.ts +4 -0
  261. package/dist/components/sidebar/sidebar.d.ts +14 -0
  262. package/dist/components/skeleton/index.d.ts +1 -0
  263. package/dist/components/skeleton/skeleton.d.ts +3 -0
  264. package/dist/components/sparkline/index.d.ts +1 -0
  265. package/dist/components/sparkline/sparkline.d.ts +8 -0
  266. package/dist/components/spinner/index.d.ts +1 -0
  267. package/dist/components/spinner/spinner.d.ts +3 -0
  268. package/dist/components/stat/index.d.ts +1 -0
  269. package/dist/components/stat/stat.d.ts +11 -0
  270. package/dist/components/stepper/index.d.ts +2 -0
  271. package/dist/components/stepper/step.d.ts +3 -0
  272. package/dist/components/stepper/stepper.d.ts +3 -0
  273. package/dist/components/switch/index.d.ts +1 -0
  274. package/dist/components/switch/switch.d.ts +16 -0
  275. package/dist/components/tab/index.d.ts +3 -0
  276. package/dist/components/tab/tab-panel.d.ts +7 -0
  277. package/dist/components/tab/tab.d.ts +8 -0
  278. package/dist/components/tab/tabs.d.ts +9 -0
  279. package/dist/components/table/index.d.ts +7 -0
  280. package/dist/components/table/table-body.d.ts +3 -0
  281. package/dist/components/table/table-cell.d.ts +3 -0
  282. package/dist/components/table/table-column.d.ts +11 -0
  283. package/dist/components/table/table-head.d.ts +3 -0
  284. package/dist/components/table/table-header.d.ts +3 -0
  285. package/dist/components/table/table-row.d.ts +3 -0
  286. package/dist/components/table/table.d.ts +16 -0
  287. package/dist/components/tag-group/index.d.ts +1 -0
  288. package/dist/components/tag-group/tag-group.d.ts +10 -0
  289. package/dist/components/textarea/index.d.ts +1 -0
  290. package/dist/components/textarea/textarea.d.ts +23 -0
  291. package/dist/components/time-field/index.d.ts +1 -0
  292. package/dist/components/time-field/time-field.d.ts +14 -0
  293. package/dist/components/toast/index.d.ts +2 -0
  294. package/dist/components/toast/toast.d.ts +19 -0
  295. package/dist/components/tooltip/index.d.ts +1 -0
  296. package/dist/components/tooltip/tooltip.d.ts +9 -0
  297. package/dist/components/tree/index.d.ts +2 -0
  298. package/dist/components/tree/tree-item.d.ts +11 -0
  299. package/dist/components/tree/tree.d.ts +6 -0
  300. package/dist/components.js +123 -3120
  301. package/dist/components.js.map +1 -1
  302. package/dist/docs/blocks/chart-interactive.yaml +4 -10
  303. package/dist/docs/blocks/checkout-form.yaml +13 -13
  304. package/dist/docs/blocks/contributors.yaml +25 -26
  305. package/dist/docs/blocks/dashboard-layout.yaml +24 -42
  306. package/dist/docs/blocks/empty-state.yaml +4 -9
  307. package/dist/docs/blocks/env-variables.yaml +2 -2
  308. package/dist/docs/blocks/feature-upgrade.yaml +4 -4
  309. package/dist/docs/blocks/issue-assign.yaml +7 -7
  310. package/dist/docs/blocks/profile-card.yaml +8 -17
  311. package/dist/docs/blocks/settings-form.yaml +4 -4
  312. package/dist/docs/blocks/sidebar-nav.yaml +19 -19
  313. package/dist/docs/blocks/stat-cards.yaml +9 -26
  314. package/dist/docs/blocks/status-card.yaml +3 -3
  315. package/dist/docs/blocks/suggested-labs.yaml +4 -4
  316. package/dist/docs/blocks/survey-card.yaml +9 -9
  317. package/dist/docs/blocks/tabbed-panel.yaml +1 -1
  318. package/dist/docs/blocks/team-empty.yaml +6 -14
  319. package/dist/docs/blocks/usage-billing.yaml +12 -37
  320. package/dist/docs/components/alert.yaml +79 -0
  321. package/dist/docs/components/avatar-group.yaml +86 -0
  322. package/dist/docs/components/calendar-picker.yaml +142 -0
  323. package/dist/docs/components/calendar-range-picker.yaml +139 -0
  324. package/dist/docs/components/chip.yaml +91 -0
  325. package/dist/docs/components/code-block.yaml +126 -0
  326. package/dist/docs/components/color-picker.yaml +78 -0
  327. package/dist/docs/components/context-menu.yaml +102 -0
  328. package/dist/docs/components/date-field.yaml +115 -0
  329. package/dist/docs/components/disclosure-group.yaml +69 -0
  330. package/dist/docs/components/disclosure.yaml +81 -0
  331. package/dist/docs/components/dropdown-menu.yaml +146 -0
  332. package/dist/docs/components/hover-card.yaml +85 -0
  333. package/dist/docs/components/index.yaml +168 -0
  334. package/dist/docs/components/input.yaml +25 -0
  335. package/dist/docs/components/link.yaml +85 -0
  336. package/dist/docs/components/meter.yaml +89 -0
  337. package/dist/docs/components/nav-item.yaml +93 -0
  338. package/dist/docs/components/progress-circle.yaml +105 -0
  339. package/dist/docs/components/progress.yaml +104 -0
  340. package/dist/docs/components/skeleton.yaml +81 -0
  341. package/dist/docs/components/sparkline.yaml +88 -0
  342. package/dist/docs/components/spinner.yaml +75 -0
  343. package/dist/docs/components/step.yaml +91 -0
  344. package/dist/docs/components/stepper.yaml +91 -0
  345. package/dist/docs/components/tag-group.yaml +90 -0
  346. package/dist/docs/components/time-field.yaml +120 -0
  347. package/dist/element/agent-element.d.ts +29 -0
  348. package/dist/element/context.d.ts +20 -0
  349. package/dist/element/define.d.ts +2 -0
  350. package/dist/element/index.d.ts +4 -0
  351. package/dist/element/types.d.ts +23 -0
  352. package/dist/element.js +1 -1
  353. package/dist/icons.d.ts +1 -0
  354. package/dist/icons.js +49 -43
  355. package/dist/icons.js.map +1 -1
  356. package/dist/reactivity.js +1 -1
  357. package/dist/register.d.ts +1 -0
  358. package/dist/register.js +369 -342
  359. package/dist/register.js.map +1 -1
  360. package/dist/store.js +1 -1
  361. package/dist/styles-entry.d.ts +0 -0
  362. package/dist/traits/attach.d.ts +12 -0
  363. package/dist/traits/auto-dismiss/auto-dismiss.d.ts +0 -0
  364. package/dist/traits/auto-dismiss/auto-dismiss.trait.d.ts +2 -0
  365. package/dist/traits/backtick-wrap/backtick-wrap.d.ts +0 -0
  366. package/dist/traits/backtick-wrap/backtick-wrap.trait.d.ts +2 -0
  367. package/dist/traits/clipboard/clipboard.d.ts +0 -0
  368. package/dist/traits/clipboard/clipboard.trait.d.ts +2 -0
  369. package/dist/traits/collapsible/collapsible.d.ts +0 -0
  370. package/dist/traits/collapsible/collapsible.trait.d.ts +2 -0
  371. package/dist/traits/confetti/confetti.d.ts +0 -0
  372. package/dist/traits/confetti/confetti.trait.d.ts +2 -0
  373. package/dist/traits/copy/copy.d.ts +0 -0
  374. package/dist/traits/copy/copy.trait.d.ts +2 -0
  375. package/dist/traits/css-inspect/css-inspect-controller.d.ts +38 -0
  376. package/dist/traits/css-inspect/css-inspect.d.ts +0 -0
  377. package/dist/traits/css-inspect/css-inspect.trait.d.ts +2 -0
  378. package/dist/traits/dismiss/dismiss.d.ts +0 -0
  379. package/dist/traits/dismiss/dismiss.trait.d.ts +2 -0
  380. package/dist/traits/drag/drag.d.ts +0 -0
  381. package/dist/traits/drag/drag.trait.d.ts +2 -0
  382. package/dist/traits/drop-zone/drop-zone.d.ts +0 -0
  383. package/dist/traits/drop-zone/drop-zone.trait.d.ts +2 -0
  384. package/dist/traits/edit/edit.d.ts +0 -0
  385. package/dist/traits/edit/edit.trait.d.ts +2 -0
  386. package/dist/traits/flip/flip.d.ts +0 -0
  387. package/dist/traits/flip/flip.trait.d.ts +2 -0
  388. package/dist/traits/gateway/gateway.d.ts +0 -0
  389. package/dist/traits/gateway/gateway.trait.d.ts +2 -0
  390. package/dist/traits/hover/hover.d.ts +0 -0
  391. package/dist/traits/hover/hover.trait.d.ts +2 -0
  392. package/dist/traits/index.d.ts +6 -0
  393. package/dist/traits/intersect/intersect.d.ts +0 -0
  394. package/dist/traits/intersect/intersect.trait.d.ts +2 -0
  395. package/dist/traits/link-paste/link-paste.d.ts +0 -0
  396. package/dist/traits/link-paste/link-paste.trait.d.ts +2 -0
  397. package/dist/traits/linked-scroll/linked-scroll.d.ts +0 -0
  398. package/dist/traits/linked-scroll/linked-scroll.trait.d.ts +2 -0
  399. package/dist/traits/list-navigate/list-navigate.d.ts +0 -0
  400. package/dist/traits/list-navigate/list-navigate.trait.d.ts +2 -0
  401. package/dist/traits/magnet/magnet.d.ts +0 -0
  402. package/dist/traits/magnet/magnet.trait.d.ts +2 -0
  403. package/dist/traits/mention/mention.d.ts +0 -0
  404. package/dist/traits/mention/mention.trait.d.ts +2 -0
  405. package/dist/traits/modal/modal.d.ts +0 -0
  406. package/dist/traits/modal/modal.trait.d.ts +2 -0
  407. package/dist/traits/noodle/noodle.d.ts +0 -0
  408. package/dist/traits/noodle/noodle.trait.d.ts +2 -0
  409. package/dist/traits/overlay/overlay.d.ts +0 -0
  410. package/dist/traits/overlay/overlay.trait.d.ts +3 -0
  411. package/dist/traits/pan-zoom/pan-zoom.d.ts +0 -0
  412. package/dist/traits/pan-zoom/pan-zoom.trait.d.ts +2 -0
  413. package/dist/traits/parallax/parallax.d.ts +0 -0
  414. package/dist/traits/parallax/parallax.trait.d.ts +2 -0
  415. package/dist/traits/parse.d.ts +3 -0
  416. package/dist/traits/persist/persist.d.ts +0 -0
  417. package/dist/traits/persist/persist.trait.d.ts +2 -0
  418. package/dist/traits/popover/overlay.d.ts +2 -0
  419. package/dist/traits/popover/popover.d.ts +0 -0
  420. package/dist/traits/popover/popover.trait.d.ts +2 -0
  421. package/dist/traits/present/present.d.ts +0 -0
  422. package/dist/traits/present/present.trait.d.ts +2 -0
  423. package/dist/traits/press-hold/press-hold.d.ts +0 -0
  424. package/dist/traits/press-hold/press-hold.trait.d.ts +2 -0
  425. package/dist/traits/range-select/range-select.d.ts +0 -0
  426. package/dist/traits/range-select/range-select.trait.d.ts +2 -0
  427. package/dist/traits/registry.d.ts +17 -0
  428. package/dist/traits/resize/resize.d.ts +0 -0
  429. package/dist/traits/resize/resize.trait.d.ts +2 -0
  430. package/dist/traits/ripple/ripple.d.ts +0 -0
  431. package/dist/traits/ripple/ripple.trait.d.ts +2 -0
  432. package/dist/traits/roving-focus/roving-focus.d.ts +0 -0
  433. package/dist/traits/roving-focus/roving-focus.trait.d.ts +2 -0
  434. package/dist/traits/search/search.d.ts +0 -0
  435. package/dist/traits/search/search.trait.d.ts +2 -0
  436. package/dist/traits/selection/selection.d.ts +0 -0
  437. package/dist/traits/selection/selection.trait.d.ts +2 -0
  438. package/dist/traits/shortcut/shortcut.d.ts +0 -0
  439. package/dist/traits/shortcut/shortcut.trait.d.ts +2 -0
  440. package/dist/traits/slash-command/slash-command.d.ts +0 -0
  441. package/dist/traits/slash-command/slash-command.trait.d.ts +2 -0
  442. package/dist/traits/snap-resize/snap-resize.d.ts +0 -0
  443. package/dist/traits/snap-resize/snap-resize.trait.d.ts +2 -0
  444. package/dist/traits/sort/sort.d.ts +0 -0
  445. package/dist/traits/sort/sort.trait.d.ts +2 -0
  446. package/dist/traits/store/store.d.ts +0 -0
  447. package/dist/traits/store/store.trait.d.ts +2 -0
  448. package/dist/traits/swipe/swipe.d.ts +0 -0
  449. package/dist/traits/swipe/swipe.trait.d.ts +2 -0
  450. package/dist/traits/text-trigger/text-trigger.d.ts +0 -0
  451. package/dist/traits/text-trigger/text-trigger.trait.d.ts +2 -0
  452. package/dist/traits/toast/toast.d.ts +0 -0
  453. package/dist/traits/toast/toast.trait.d.ts +2 -0
  454. package/dist/traits/toggle-scheme/toggle-scheme.d.ts +0 -0
  455. package/dist/traits/toggle-scheme/toggle-scheme.trait.d.ts +2 -0
  456. package/dist/traits/toggle-state/toggle-state.d.ts +0 -0
  457. package/dist/traits/toggle-state/toggle-state.trait.d.ts +2 -0
  458. package/dist/traits/tooltip/tooltip.d.ts +0 -0
  459. package/dist/traits/tooltip/tooltip.trait.d.ts +2 -0
  460. package/dist/traits/toss/toss.d.ts +0 -0
  461. package/dist/traits/toss/toss.trait.d.ts +2 -0
  462. package/dist/traits/trap-focus/trap-focus.d.ts +0 -0
  463. package/dist/traits/trap-focus/trap-focus.trait.d.ts +2 -0
  464. package/dist/traits/types.d.ts +45 -0
  465. package/dist/traits/validate/validate.d.ts +0 -0
  466. package/dist/traits/validate/validate.trait.d.ts +2 -0
  467. package/dist/traits/virtual-scroll/virtual-scroll.d.ts +0 -0
  468. package/dist/traits/virtual-scroll/virtual-scroll.trait.d.ts +2 -0
  469. package/dist/traits.js +45 -45
  470. package/package.json +52 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state-5M3uR5CM.js","sources":["../../src/components/button/button.ts","../../src/components/input/input.ts","../../src/components/input/input-otp.ts","../../src/components/checkbox/checkbox.ts","../../src/components/switch/switch.ts","../../src/components/radio/radio.ts","../../src/components/radio/radio-group.ts","../../src/components/textarea/textarea.ts","../../src/components/container/container.ts","../../src/components/dialog/dialog.ts","../../src/components/drawer/drawer.ts","../../src/components/icon/icon.ts","../../src/components/tooltip/tooltip.ts","../../src/components/range/range.ts","../../src/components/gripper/gripper.ts","../../src/components/option/option.ts","../../src/components/optgroup/optgroup.ts","../../src/components/select/select.ts","../../src/components/toast/toast.ts","../../src/components/tab/tabs.ts","../../src/components/tab/tab.ts","../../src/components/tab/tab-panel.ts","../../src/components/accordion/accordion.ts","../../src/components/accordion/accordion-item.ts","../../src/components/breadcrumb/breadcrumb.ts","../../src/components/breadcrumb/breadcrumb-item.ts","../../src/components/segmented-control/segmented-control.ts","../../src/components/segmented-control/segment.ts","../../src/components/pagination/pagination.ts","../../src/components/command/command.ts","../../src/components/command/command-empty.ts","../../src/components/command/command-group.ts","../../src/components/command/command-input.ts","../../src/components/command/command-item.ts","../../src/components/command/command-list.ts","../../src/components/pane/panes.ts","../../src/components/pane/pane.ts","../../src/components/table/table.ts","../../src/components/table/table-body.ts","../../src/components/table/table-cell.ts","../../src/components/table/table-head.ts","../../src/components/table/table-header.ts","../../src/components/table/table-row.ts","../../src/components/tree/tree.ts","../../src/components/tree/tree-item.ts","../../src/components/feed/feed.ts","../../src/components/root/root.ts","../../src/components/calendar-picker/calendar-picker.ts","../../src/components/calendar-range-picker/calendar-range-picker.ts","../../src/components/app-shell/app-shell.ts","../../src/components/page/page.ts","../../src/components/page/page-main.ts","../../src/components/page/page-context.ts","../../src/components/sidebar/sidebar.ts","../../src/components/sidebar/sidebar-header.ts","../../src/components/sidebar/sidebar-content.ts","../../src/components/sidebar/sidebar-footer.ts","../../src/components/progress/progress.ts","../../src/components/code-block/code-block.ts","../../src/components/sparkline/sparkline.ts","../../src/components/chip/chip.ts","../../src/components/disclosure/disclosure.ts","../../src/components/avatar-group/avatar-group.ts","../../src/components/progress-circle/progress-circle.ts","../../src/components/disclosure-group/disclosure-group.ts","../../src/components/tag-group/tag-group.ts","../../src/components/color-area/color-area.ts","../../src/components/color-slider/color-slider.ts","../../src/components/color-field/color-field.ts","../../src/components/time-field/time-field.ts","../../src/components/date-field/date-field.ts","../../src/components/context-menu/context-menu.ts","../../src/components/dropdown-menu/dropdown-menu.ts","../../src/components/hover-card/hover-card.ts","../../src/components/color-picker/color-picker.ts","../../src/components/file-upload/file-upload.ts","../../src/components/copy-button/copy-button.ts","../../src/components/stat/stat.ts","../../src/components/image/image.ts","../../src/components/carousel/carousel.ts","../../src/components/notification-center/notification-center.ts","../../src/components/empty-state/empty-state.ts"],"sourcesContent":["// ── aui-button ───────────────────────────────────────────────\n//\n// Polymorphic action trigger.\n// Touches every API surface: variants, intents, sizes, density,\n// radius, slots (leading/trailing), hide-label, link mode, disabled,\n// loading, form association.\n//\n// This is intentionally the first real component — if the pattern\n// works here, it scales to every other component.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiButton extends AgentElement {\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n loading: { type: 'boolean', default: false },\n type: { type: 'enum', values: ['button', 'submit', 'reset'], default: 'button' },\n label: { type: 'string', default: '' },\n icon: { type: 'string', default: '' },\n 'icon-leading': { type: 'string', default: '' },\n 'icon-trailing': { type: 'string', default: '' },\n 'text-leading': { type: 'string', default: '' },\n 'text-trailing': { type: 'string', default: '' },\n href: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare loading: boolean\n declare type: 'button' | 'submit' | 'reset'\n declare label: string\n declare icon: string\n declare 'icon-leading': string\n declare 'icon-trailing': string\n declare 'text-leading': string\n declare 'text-trailing': string\n declare href: string\n\n #stampedLeading: HTMLElement | null = null\n #stampedLeadingText: HTMLElement | null = null\n #stampedTrailing: HTMLElement | null = null\n #stampedTrailingText: HTMLElement | null = null\n\n protected override activate(): void {\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.setAttribute('role', 'button')\n\n // Detect inline text content (CSS can't see text nodes)\n const hasTextContent = Array.from(this.childNodes).some(\n n => n.nodeType === 3 && n.textContent!.trim()\n )\n if (hasTextContent) this.setAttribute('data-has-text', '')\n\n // Sync disabled → aria-disabled\n this.addEffect(() => {\n this.setAttribute('aria-disabled', String(this.disabled))\n this.setAttribute('tabindex', this.disabled ? '-1' : '0')\n })\n\n // Sync label → aria-label (CSS handles the visual via ::after)\n this.addEffect(() => {\n if (this.label) {\n this.setAttribute('aria-label', this.label)\n } else {\n this.removeAttribute('aria-label')\n }\n })\n\n // Stamp leading icon\n this.addEffect(() => {\n const name = this['icon-leading'] || this.icon\n const text = this['text-leading']\n if (name && !this.#stampedLeading) {\n this.#stampedLeading = document.createElement('aui-icon')\n this.#stampedLeading.setAttribute('slot', 'leading')\n this.prepend(this.#stampedLeading)\n }\n if (this.#stampedLeading) {\n if (name) {\n this.#stampedLeading.setAttribute('name', name)\n } else {\n this.#stampedLeading.remove()\n this.#stampedLeading = null\n }\n }\n // Stamp leading text as separate span\n if (text && !this.#stampedLeadingText) {\n this.#stampedLeadingText = document.createElement('span')\n this.#stampedLeadingText.setAttribute('slot', 'leading-text')\n const leading = this.#stampedLeading\n if (leading) leading.after(this.#stampedLeadingText)\n else this.prepend(this.#stampedLeadingText)\n }\n if (this.#stampedLeadingText) {\n if (text) {\n this.#stampedLeadingText.textContent = text\n } else {\n this.#stampedLeadingText.remove()\n this.#stampedLeadingText = null\n }\n }\n })\n\n // Stamp trailing icon\n this.addEffect(() => {\n const name = this['icon-trailing']\n const text = this['text-trailing']\n if (name && !this.#stampedTrailing) {\n this.#stampedTrailing = document.createElement('aui-icon')\n this.#stampedTrailing.setAttribute('slot', 'trailing')\n this.append(this.#stampedTrailing)\n }\n if (this.#stampedTrailing) {\n if (name) {\n this.#stampedTrailing.setAttribute('name', name)\n } else {\n this.#stampedTrailing.remove()\n this.#stampedTrailing = null\n }\n }\n // Stamp trailing text as separate span\n if (text && !this.#stampedTrailingText) {\n this.#stampedTrailingText = document.createElement('span')\n this.#stampedTrailingText.setAttribute('slot', 'trailing-text')\n const trailing = this.#stampedTrailing\n if (trailing) trailing.before(this.#stampedTrailingText)\n else this.append(this.#stampedTrailingText)\n }\n if (this.#stampedTrailingText) {\n if (text) {\n this.#stampedTrailingText.textContent = text\n } else {\n this.#stampedTrailingText.remove()\n this.#stampedTrailingText = null\n }\n }\n })\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #handleClick = (e: Event): void => {\n if ((this as any).disabled || (this as any).loading) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n\n // Link mode — navigate\n const href = (this as any).href as string\n if (href) {\n window.location.href = href\n return\n }\n\n // Form submit/reset\n const btnType = (this as any).type as string\n if (btnType === 'submit' || btnType === 'reset') {\n const form = this.closest('form')\n if (form) {\n if (btnType === 'submit') form.requestSubmit()\n else form.reset()\n }\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.click()\n }\n }\n}\n","// ── aui-input ────────────────────────────────────────────────\n//\n// Text input using contenteditable surface — no native <input>.\n//\n// Architecture (following native-ui pattern):\n// - Host element: flex container, owns visual chrome (border,\n// radius, padding) and slot layout (leading/trailing).\n// - Inner <span data-surface contenteditable=\"plaintext-only\">:\n// the actual editing surface. Separate from host because\n// contenteditable breaks when the editable element uses\n// display: flex with child elements.\n// - ElementInternals: form participation, constraint validation,\n// custom states (:state(empty) for placeholder).\n//\n// No <input>, <button>, or any native form element.\n//\n// Search enhancement (type=\"search\"):\n// - Auto-stamps a leading search icon (magnifying-glass SVG)\n// - Auto-stamps a trailing clear indicator (unless [no-clear])\n// - Dispatches debounced `search` event after typing stops\n// - Escape key clears field (or blurs if already empty)\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Inline SVGs for search mode ────────────────────────────────\n\nconst SEARCH_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><circle cx=\"116\" cy=\"116\" r=\"84\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"175.4\" y1=\"175.4\" x2=\"224\" y2=\"224\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/></svg>`\n\nconst X_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><line x1=\"200\" y1=\"56\" x2=\"56\" y2=\"200\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"200\" y1=\"200\" x2=\"56\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/></svg>`\n\nexport class AuiInput extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n readonly: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n clearable: { type: 'boolean', default: false },\n autofocus: { type: 'boolean', default: false },\n type: { type: 'enum', values: ['text', 'email', 'password', 'search', 'url', 'tel', 'number'], default: 'text' },\n placeholder: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n pattern: { type: 'string', default: '' },\n maxlength: { type: 'string', default: '' },\n font: { type: 'string', default: 'sans' },\n debounce: { type: 'string', default: '200' },\n 'no-clear': { type: 'boolean', default: false },\n }\n\n declare disabled: boolean\n declare readonly: boolean\n declare required: boolean\n declare clearable: boolean\n declare autofocus: boolean\n declare type: string\n declare placeholder: string\n declare value: string\n declare name: string\n declare pattern: string\n declare maxlength: string\n declare font: string\n declare debounce: string\n declare 'no-clear': boolean\n\n #internals: ElementInternals\n #surface: HTMLElement | null = null\n #clearEl: HTMLElement | null = null\n #stepUpEl: HTMLElement | null = null\n #stepDownEl: HTMLElement | null = null\n #syncing = false\n #searchIcon: HTMLElement | null = null\n #searchClearEl: HTMLElement | null = null\n #searchDebounceTimer: ReturnType<typeof setTimeout> | null = null\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'textbox'\n }\n\n protected override activate(): void {\n // Stamp the editing surface\n this.#surface = this.querySelector('[data-surface]')\n if (!this.#surface) {\n this.#surface = document.createElement('span')\n this.#surface.setAttribute('data-surface', '')\n this.#surface.setAttribute('contenteditable', 'plaintext-only')\n this.#surface.setAttribute('spellcheck', 'false')\n this.#surface.setAttribute('tabindex', '0')\n\n // Insert before trailing slot if present\n const trailing = this.querySelector('[slot=\"trailing\"]')\n if (trailing) {\n this.insertBefore(this.#surface, trailing)\n } else {\n this.appendChild(this.#surface)\n }\n }\n\n // Stamp clear indicator (not a <button>)\n if (this.clearable && !this.querySelector('[data-clear]')) {\n this.#clearEl = document.createElement('span')\n this.#clearEl.setAttribute('data-clear', '')\n this.#clearEl.setAttribute('role', 'button')\n this.#clearEl.setAttribute('tabindex', '-1')\n this.#clearEl.setAttribute('aria-label', 'Clear')\n this.#clearEl.textContent = '✕'\n const trailing = this.querySelector('[slot=\"trailing\"]')\n if (trailing) {\n this.insertBefore(this.#clearEl, trailing)\n } else {\n this.appendChild(this.#clearEl)\n }\n } else {\n this.#clearEl = this.querySelector('[data-clear]')\n }\n\n // Pre-fill value\n if (this.value && this.#surface) {\n this.#surface.textContent = this.value\n }\n\n // Sync reactive state\n this.addEffect(() => {\n const locked = this.disabled || this.readonly\n this.#surface?.setAttribute('contenteditable', locked ? 'false' : 'plaintext-only')\n\n if (this.disabled) {\n this.#surface?.setAttribute('tabindex', '-1')\n } else {\n this.#surface?.setAttribute('tabindex', '0')\n }\n\n // Sync placeholder to data attribute for CSS ::before\n this.#surface?.setAttribute('data-placeholder', this.placeholder || '')\n\n // Form internals\n this.#internals.setFormValue(this.value || null)\n this.#updateEmptyState()\n this.#validate()\n })\n\n // Sync value attribute → surface (only when not typing)\n this.addEffect(() => {\n const val = this.value\n if (!this.#syncing && this.#surface && this.#surface.textContent !== val) {\n this.#surface.textContent = val\n this.#updateEmptyState()\n }\n })\n\n // Events on surface\n this.#surface.addEventListener('input', this.#handleInput)\n this.#surface.addEventListener('keydown', this.#handleKeydown)\n this.#surface.addEventListener('focus', this.#handleFocus)\n this.#surface.addEventListener('blur', this.#handleBlur)\n this.#surface.addEventListener('paste', this.#handlePaste)\n\n // Click on wrapper focuses surface\n this.addEventListener('click', this.#handleWrapperClick)\n\n // Clear handler\n this.#clearEl?.addEventListener('click', this.#handleClear)\n\n // Autofocus\n if (this.autofocus) {\n requestAnimationFrame(() => this.#surface?.focus())\n }\n\n // ── Number stepper ─────────────────────────────────────\n if (this.type === 'number') {\n // Stamp decrement button\n if (!this.querySelector('[data-input-stepper=\"down\"]')) {\n this.#stepDownEl = document.createElement('span')\n this.#stepDownEl.setAttribute('data-input-stepper', 'down')\n this.#stepDownEl.setAttribute('role', 'button')\n this.#stepDownEl.setAttribute('tabindex', '-1')\n this.#stepDownEl.setAttribute('aria-label', 'Decrease')\n // Insert before the surface\n this.insertBefore(this.#stepDownEl, this.#surface)\n } else {\n this.#stepDownEl = this.querySelector('[data-input-stepper=\"down\"]')\n }\n\n // Stamp increment button\n if (!this.querySelector('[data-input-stepper=\"up\"]')) {\n this.#stepUpEl = document.createElement('span')\n this.#stepUpEl.setAttribute('data-input-stepper', 'up')\n this.#stepUpEl.setAttribute('role', 'button')\n this.#stepUpEl.setAttribute('tabindex', '-1')\n this.#stepUpEl.setAttribute('aria-label', 'Increase')\n // Insert after the surface\n const next = this.#surface?.nextSibling ?? null\n if (next) {\n this.insertBefore(this.#stepUpEl, next)\n } else {\n this.appendChild(this.#stepUpEl)\n }\n } else {\n this.#stepUpEl = this.querySelector('[data-input-stepper=\"up\"]')\n }\n\n this.#stepDownEl?.addEventListener('click', this.#handleStepDown)\n this.#stepUpEl?.addEventListener('click', this.#handleStepUp)\n }\n\n // ── Search type enhancement ──────────────────────────────\n if (this.type === 'search') {\n // 1. Stamp leading search icon (if no [slot=\"leading\"] child)\n if (!this.querySelector('[slot=\"leading\"]')) {\n this.#searchIcon = document.createElement('span')\n this.#searchIcon.setAttribute('slot', 'leading')\n this.#searchIcon.setAttribute('data-input-search-icon', '')\n this.#searchIcon.innerHTML = SEARCH_SVG\n this.insertBefore(this.#searchIcon, this.firstChild)\n }\n\n // 2. Stamp trailing clear indicator (unless [no-clear])\n if (!this['no-clear'] && !this.querySelector('[data-input-clear]')) {\n this.#searchClearEl = document.createElement('span')\n this.#searchClearEl.setAttribute('data-input-clear', '')\n this.#searchClearEl.setAttribute('role', 'button')\n this.#searchClearEl.setAttribute('tabindex', '-1')\n this.#searchClearEl.setAttribute('aria-label', 'Clear')\n this.#searchClearEl.innerHTML = X_SVG\n // Insert before trailing slot if present\n const trailing = this.querySelector('[slot=\"trailing\"]')\n if (trailing) {\n this.insertBefore(this.#searchClearEl, trailing)\n } else {\n this.appendChild(this.#searchClearEl)\n }\n } else {\n this.#searchClearEl = this.querySelector('[data-input-clear]')\n }\n\n this.#searchClearEl?.addEventListener('click', this.#handleSearchClear)\n }\n }\n\n protected override dispose(): void {\n this.#surface?.removeEventListener('input', this.#handleInput)\n this.#surface?.removeEventListener('keydown', this.#handleKeydown)\n this.#surface?.removeEventListener('focus', this.#handleFocus)\n this.#surface?.removeEventListener('blur', this.#handleBlur)\n this.#surface?.removeEventListener('paste', this.#handlePaste)\n this.removeEventListener('click', this.#handleWrapperClick)\n this.#clearEl?.removeEventListener('click', this.#handleClear)\n this.#stepDownEl?.removeEventListener('click', this.#handleStepDown)\n this.#stepUpEl?.removeEventListener('click', this.#handleStepUp)\n this.#searchClearEl?.removeEventListener('click', this.#handleSearchClear)\n if (this.#searchDebounceTimer) clearTimeout(this.#searchDebounceTimer)\n }\n\n // ── Public API ──────────────────────────────────────────\n\n focus(options?: FocusOptions): void {\n this.#surface?.focus(options)\n }\n\n blur(): void {\n this.#surface?.blur()\n }\n\n select(): void {\n if (!this.#surface) return\n const range = document.createRange()\n range.selectNodeContents(this.#surface)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n }\n\n // ── Form callbacks ────────────────────────────────────\n\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled\n }\n\n formResetCallback(): void {\n this.value = ''\n if (this.#surface) this.#surface.textContent = ''\n this.#updateEmptyState()\n }\n\n formStateRestoreCallback(state: string): void {\n this.value = state ?? ''\n if (this.#surface) this.#surface.textContent = this.value\n }\n\n // ── Internal ──────────────────────────────────────────\n\n #updateEmptyState(): void {\n const empty = !(this.#surface?.textContent?.trim())\n try {\n if (empty) {\n this.#internals.states?.add('empty')\n } else {\n this.#internals.states?.delete('empty')\n }\n } catch {\n // CustomStateSet not supported\n }\n // Fallback: data attribute for browsers without :state()\n this.toggleAttribute('data-input-empty', empty)\n }\n\n #validate(): void {\n if (this.required && !this.value?.trim()) {\n this.#internals.setValidity(\n { valueMissing: true },\n 'This field is required',\n this.#surface ?? undefined,\n )\n } else if (this.pattern && this.value) {\n try {\n const re = new RegExp(`^(?:${this.pattern})$`)\n if (!re.test(this.value)) {\n this.#internals.setValidity(\n { patternMismatch: true },\n `Please match the requested format`,\n this.#surface ?? undefined,\n )\n return\n }\n } catch { /* invalid regex — skip */ }\n this.#internals.setValidity({})\n } else {\n this.#internals.setValidity({})\n }\n }\n\n #resetCaretIfEmpty(): void {\n if (!this.#surface || this.#surface.textContent?.trim()) return\n const sel = window.getSelection()\n if (!sel) return\n sel.setPosition(this.#surface, 0)\n }\n\n // ── Event handlers ────────────────────────────────────\n\n #handleInput = (): void => {\n this.#syncing = true\n this.value = this.#surface?.textContent ?? ''\n this.#internals.setFormValue(this.value || null)\n this.#updateEmptyState()\n this.#syncing = false\n\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n\n // Debounced search event\n if (this.type === 'search') {\n this.#scheduleSearchEvent()\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n // Search: Escape clears or blurs\n if (this.type === 'search' && e.key === 'Escape') {\n e.preventDefault()\n if (this.value?.trim()) {\n // Clear the value\n if (this.#surface) this.#surface.textContent = ''\n this.value = ''\n this.#internals.setFormValue(null)\n this.#updateEmptyState()\n this.#dispatchSearchEvent()\n } else {\n // Already empty — blur\n this.#surface?.blur()\n }\n return\n }\n\n // Single-line: block Enter\n if (e.key === 'Enter') {\n e.preventDefault()\n // Submit form if inside one\n this.#internals.form?.requestSubmit()\n return\n }\n\n // Number stepper: ArrowUp / ArrowDown\n if (this.type === 'number') {\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n this.#adjust(1)\n return\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n this.#adjust(-1)\n return\n }\n }\n\n // Maxlength enforcement\n if (this.maxlength) {\n const max = parseInt(this.maxlength, 10)\n const len = this.#surface?.textContent?.length ?? 0\n if (len >= max && e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n const sel = window.getSelection()\n // Allow typing if there's a selection (will replace)\n if (!sel?.toString()) {\n e.preventDefault()\n }\n }\n }\n }\n\n #handleFocus = (): void => {\n this.#resetCaretIfEmpty()\n }\n\n #handleBlur = (): void => {\n // Clamp number value to [min, max] on blur\n if (this.type === 'number' && this.value.trim()) {\n const val = parseFloat(this.value)\n if (!isNaN(val)) {\n const min = this.hasAttribute('min') ? parseFloat(this.getAttribute('min')!) : -Infinity\n const max = this.hasAttribute('max') ? parseFloat(this.getAttribute('max')!) : Infinity\n const clamped = Math.min(max, Math.max(min, val))\n if (clamped !== val) {\n const newVal = String(clamped)\n this.value = newVal\n if (this.#surface) this.#surface.textContent = newVal\n this.#internals.setFormValue(newVal)\n this.#updateEmptyState()\n }\n }\n }\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handlePaste = (e: ClipboardEvent): void => {\n // Enforce single-line: strip newlines from pasted content\n e.preventDefault()\n let text = e.clipboardData?.getData('text/plain') ?? ''\n text = text.replace(/[\\r\\n]+/g, ' ')\n\n // Maxlength enforcement on paste\n if (this.maxlength) {\n const max = parseInt(this.maxlength, 10)\n const current = this.#surface?.textContent?.length ?? 0\n const sel = window.getSelection()\n const selLen = sel?.toString().length ?? 0\n const available = max - current + selLen\n text = text.slice(0, Math.max(0, available))\n }\n\n document.execCommand('insertText', false, text)\n }\n\n #handleWrapperClick = (e: Event): void => {\n const target = e.target as HTMLElement\n if (target === this || target.getAttribute('slot') === 'leading') {\n this.#surface?.focus()\n this.#resetCaretIfEmpty()\n } else if (target === this.#surface) {\n // Clicking on the surface when empty (placeholder visible):\n // the caret may land after the ::before pseudo-element content.\n // Force it to position 0.\n this.#resetCaretIfEmpty()\n }\n }\n\n #handleClear = (e: Event): void => {\n e.stopPropagation()\n if (this.#surface) {\n this.#surface.textContent = ''\n }\n this.value = ''\n this.#internals.setFormValue(null)\n this.#updateEmptyState()\n this.#surface?.focus()\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n // ── Number stepper ──────────────────────────────────────\n\n #adjust(delta: number): void {\n const val = parseFloat(this.value) || 0\n const step = parseFloat(this.getAttribute('step') || '1')\n const min = this.hasAttribute('min') ? parseFloat(this.getAttribute('min')!) : -Infinity\n const max = this.hasAttribute('max') ? parseFloat(this.getAttribute('max')!) : Infinity\n const next = Math.min(max, Math.max(min, val + delta * step))\n const newVal = String(next)\n this.value = newVal\n if (this.#surface) this.#surface.textContent = newVal\n this.#internals.setFormValue(newVal)\n this.#updateEmptyState()\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleStepUp = (e: Event): void => {\n e.stopPropagation()\n this.#adjust(1)\n }\n\n #handleStepDown = (e: Event): void => {\n e.stopPropagation()\n this.#adjust(-1)\n }\n\n // ── Search helpers ──────────────────────────────────────────\n\n #scheduleSearchEvent(): void {\n if (this.#searchDebounceTimer) clearTimeout(this.#searchDebounceTimer)\n const delay = parseInt(this.debounce, 10) || 200\n this.#searchDebounceTimer = setTimeout(() => {\n this.#dispatchSearchEvent()\n }, delay)\n }\n\n #dispatchSearchEvent(): void {\n if (this.#searchDebounceTimer) {\n clearTimeout(this.#searchDebounceTimer)\n this.#searchDebounceTimer = null\n }\n this.dispatchEvent(new CustomEvent('search', {\n bubbles: true,\n composed: true,\n detail: { value: this.value ?? '' },\n }))\n }\n\n #handleSearchClear = (e: Event): void => {\n e.stopPropagation()\n if (this.#surface) this.#surface.textContent = ''\n this.value = ''\n this.#internals.setFormValue(null)\n this.#updateEmptyState()\n this.#surface?.focus()\n this.#dispatchSearchEvent()\n }\n}\n","// ── aui-input-otp ────────────────────────────────────────────\n//\n// Segmented OTP input — no native <input> elements.\n// Stamps N contenteditable spans as cells. Handles auto-advance,\n// backspace navigation, paste distribution.\n// Uses ElementInternals for form participation.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiInputOtp extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n length: { type: 'string', default: '6' },\n disabled: { type: 'boolean', default: false },\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n }\n\n declare length: string\n declare disabled: boolean\n declare value: string\n declare name: string\n\n #internals: ElementInternals\n #cells: HTMLElement[] = []\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n }\n\n protected override activate(): void {\n const len = parseInt(this.length, 10) || 6\n\n this.setAttribute('role', 'group')\n this.setAttribute('aria-label', 'One-time code')\n\n // Stamp cells\n for (let i = 0; i < len; i++) {\n const cell = document.createElement('span')\n cell.setAttribute('data-cell', String(i))\n cell.setAttribute('contenteditable', 'plaintext-only')\n cell.setAttribute('inputmode', 'numeric')\n cell.setAttribute('tabindex', '0')\n cell.setAttribute('aria-label', `Digit ${i + 1} of ${len}`)\n this.appendChild(cell)\n this.#cells.push(cell)\n }\n\n // Sync disabled\n this.addEffect(() => {\n for (const cell of this.#cells) {\n cell.setAttribute('contenteditable', this.disabled ? 'false' : 'plaintext-only')\n cell.setAttribute('tabindex', this.disabled ? '-1' : '0')\n }\n this.#internals.setFormValue(this.value || null)\n })\n\n // Pre-fill\n if (this.value) this.#distributeValue(this.value)\n\n // Wire events\n for (const cell of this.#cells) {\n cell.addEventListener('input', this.#handleCellInput)\n cell.addEventListener('keydown', this.#handleCellKeydown)\n cell.addEventListener('paste', this.#handlePaste)\n cell.addEventListener('focus', this.#handleFocus)\n }\n }\n\n protected override dispose(): void {\n for (const cell of this.#cells) {\n cell.removeEventListener('input', this.#handleCellInput)\n cell.removeEventListener('keydown', this.#handleCellKeydown)\n cell.removeEventListener('paste', this.#handlePaste)\n cell.removeEventListener('focus', this.#handleFocus)\n }\n this.#cells = []\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.clear() }\n\n focus(options?: FocusOptions): void {\n const first = this.#cells.find(c => !c.textContent) ?? this.#cells[0]\n first?.focus(options)\n }\n\n clear(): void {\n for (const cell of this.#cells) cell.textContent = ''\n this.#syncValue()\n this.#cells[0]?.focus()\n }\n\n #distributeValue(val: string): void {\n for (let i = 0; i < this.#cells.length; i++) {\n this.#cells[i].textContent = val[i] ?? ''\n }\n }\n\n #syncValue(): void {\n const val = this.#cells.map(c => c.textContent ?? '').join('')\n this.value = val\n this.#internals.setFormValue(val || null)\n\n if (val.length === this.#cells.length) {\n this.dispatchEvent(new CustomEvent('aui:complete', { bubbles: true, detail: { value: val } }))\n }\n }\n\n #getCellIndex(cell: HTMLElement): number {\n return this.#cells.indexOf(cell)\n }\n\n #handleCellInput = (e: Event): void => {\n const cell = e.target as HTMLElement\n const idx = this.#getCellIndex(cell)\n\n // Keep only last character\n const text = cell.textContent ?? ''\n if (text.length > 1) {\n cell.textContent = text.slice(-1)\n }\n\n this.#syncValue()\n\n // Auto-advance\n if (cell.textContent && idx < this.#cells.length - 1) {\n this.#cells[idx + 1].focus()\n }\n }\n\n #handleCellKeydown = (e: KeyboardEvent): void => {\n const cell = e.target as HTMLElement\n const idx = this.#getCellIndex(cell)\n\n if (e.key === 'Backspace') {\n if (!cell.textContent && idx > 0) {\n e.preventDefault()\n this.#cells[idx - 1].textContent = ''\n this.#cells[idx - 1].focus()\n this.#syncValue()\n }\n } else if (e.key === 'ArrowLeft' && idx > 0) {\n e.preventDefault()\n this.#cells[idx - 1].focus()\n } else if (e.key === 'ArrowRight' && idx < this.#cells.length - 1) {\n e.preventDefault()\n this.#cells[idx + 1].focus()\n } else if (e.key === 'Enter') {\n e.preventDefault()\n }\n }\n\n #handlePaste = (e: ClipboardEvent): void => {\n e.preventDefault()\n const text = e.clipboardData?.getData('text') ?? ''\n const digits = text.replace(/\\D/g, '').slice(0, this.#cells.length)\n this.#distributeValue(digits)\n this.#syncValue()\n const focusIdx = Math.min(digits.length, this.#cells.length - 1)\n this.#cells[focusIdx]?.focus()\n }\n\n #handleFocus = (e: Event): void => {\n const cell = e.target as HTMLElement\n // Select all content in cell\n const range = document.createRange()\n range.selectNodeContents(cell)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n }\n}\n","// ── aui-checkbox ─────────────────────────────────────────────\n//\n// Custom checkbox — no native <input>.\n// Uses ElementInternals for form participation.\n// Visual box + check icon via CSS pseudo-element.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCheckbox extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n checked: { type: 'boolean', default: false },\n indeterminate: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n label: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: 'on' },\n }\n\n declare disabled: boolean\n declare checked: boolean\n declare indeterminate: boolean\n declare required: boolean\n declare label: string\n declare name: string\n declare value: string\n\n #internals: ElementInternals\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'checkbox'\n }\n\n protected override activate(): void {\n // Stamp visual box\n if (!this.querySelector('[data-box]')) {\n const box = document.createElement('span')\n box.setAttribute('data-box', '')\n this.prepend(box)\n }\n\n // Sync state\n this.addEffect(() => {\n this.setAttribute('aria-checked', this.indeterminate ? 'mixed' : String(this.checked))\n this.setAttribute('aria-disabled', String(this.disabled))\n\n // Form value\n this.#internals.setFormValue(this.checked ? (this.value || 'on') : null)\n\n // Validation\n if (this.required && !this.checked) {\n this.#internals.setValidity({ valueMissing: true }, 'Please check this box')\n } else {\n this.#internals.setValidity({})\n }\n })\n\n // Sync label → aria-label\n this.addEffect(() => {\n if (this.label) this.setAttribute('aria-label', this.label)\n else this.removeAttribute('aria-label')\n })\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.checked = false; this.indeterminate = false }\n\n #toggle(): void {\n if (this.disabled) return\n this.indeterminate = false\n this.checked = !this.checked\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleClick = (e: Event): void => {\n e.preventDefault()\n this.#toggle()\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n this.#toggle()\n }\n }\n}\n","// ── aui-switch ──────────────────────────────────────────────\n//\n// Toggle switch — no native <input>.\n// Uses ElementInternals for form participation.\n// Visual track + thumb via CSS pseudo-element.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiSwitch extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n checked: { type: 'boolean', default: false },\n label: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: 'on' },\n }\n\n declare disabled: boolean\n declare checked: boolean\n declare label: string\n declare name: string\n declare value: string\n\n #internals: ElementInternals\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'switch'\n }\n\n protected override activate(): void {\n // Stamp track\n if (!this.querySelector('[data-track]')) {\n const track = document.createElement('span')\n track.setAttribute('data-track', '')\n this.prepend(track)\n }\n\n this.addEffect(() => {\n this.setAttribute('aria-checked', String(this.checked))\n this.setAttribute('aria-disabled', String(this.disabled))\n this.#internals.setFormValue(this.checked ? (this.value || 'on') : null)\n })\n\n // Sync label → aria-label (CSS handles visual via ::after)\n this.addEffect(() => {\n if (this.label) this.setAttribute('aria-label', this.label)\n else this.removeAttribute('aria-label')\n })\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.checked = false }\n\n #toggle(): void {\n if (this.disabled) return\n this.checked = !this.checked\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleClick = (e: Event): void => {\n e.preventDefault()\n this.#toggle()\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n this.#toggle()\n }\n }\n}\n","// ── aui-radio ───────────────────────────────────────────────\n//\n// Radio button — no native <input>.\n// Uses ElementInternals for form participation.\n// Selection coordination via aui-radio-group.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiRadio extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n checked: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n label: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare checked: boolean\n declare required: boolean\n declare label: string\n declare name: string\n declare value: string\n\n #internals: ElementInternals\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'radio'\n }\n\n protected override activate(): void {\n // Stamp visual circle\n if (!this.querySelector('[data-circle]')) {\n const circle = document.createElement('span')\n circle.setAttribute('data-circle', '')\n this.prepend(circle)\n }\n\n this.addEffect(() => {\n this.setAttribute('aria-checked', String(this.checked))\n this.setAttribute('aria-disabled', String(this.disabled))\n this.#internals.setFormValue(this.checked ? (this.value || '') : null)\n })\n\n // Sync label → aria-label (CSS handles visual via ::after)\n this.addEffect(() => {\n if (this.label) this.setAttribute('aria-label', this.label)\n else this.removeAttribute('aria-label')\n })\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.checked = false }\n\n #select(): void {\n if (this.disabled || this.checked) return\n this.checked = true\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleClick = (e: Event): void => {\n e.preventDefault()\n this.#select()\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n this.#select()\n }\n }\n}\n","// ── aui-radio-group ─────────────────────────────────────────\n//\n// Container that coordinates aui-radio children.\n// Manages name propagation, single-selection enforcement,\n// and keyboard navigation (arrow keys).\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiRadioGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare name: string\n declare value: string\n\n protected override activate(): void {\n this.setAttribute('role', 'radiogroup')\n\n // Propagate name and disabled to child radios\n this.addEffect(() => {\n for (const radio of this.#radios()) {\n if (this.name) radio.setAttribute('name', this.name)\n if (this.disabled) {\n radio.setAttribute('disabled', '')\n }\n }\n })\n\n // Sync value → check the matching radio\n this.addEffect(() => {\n if (!this.value) return\n for (const radio of this.#radios()) {\n const isMatch = radio.getAttribute('value') === this.value\n if (isMatch && !radio.hasAttribute('checked')) {\n radio.setAttribute('checked', '')\n } else if (!isMatch && radio.hasAttribute('checked')) {\n radio.removeAttribute('checked')\n }\n }\n })\n\n // Listen for change events from child radios\n this.addEventListener('change', this.#handleChange)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('change', this.#handleChange)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #radios(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-radio'))\n }\n\n #handleChange = (e: Event): void => {\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-RADIO') return\n\n const val = target.getAttribute('value') || ''\n this.value = val\n\n // Uncheck siblings\n for (const radio of this.#radios()) {\n if (radio !== target && radio.hasAttribute('checked')) {\n radio.removeAttribute('checked')\n }\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const radios = this.#radios().filter(r => !r.hasAttribute('disabled'))\n if (radios.length === 0) return\n\n const current = radios.findIndex(r => r.hasAttribute('checked'))\n let next = -1\n\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault()\n next = current < radios.length - 1 ? current + 1 : 0\n break\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault()\n next = current > 0 ? current - 1 : radios.length - 1\n break\n default:\n return\n }\n\n if (next >= 0) {\n radios[next].click()\n radios[next].focus()\n }\n }\n}\n","// ── aui-textarea ────────────────────────────────────────────\n//\n// Multi-line text input using contenteditable — no native <textarea>.\n// Stamps a div[data-surface] as the editing area.\n// Supports autogrow via scrollHeight measurement.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTextarea extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n readonly: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n autogrow: { type: 'boolean', default: false },\n autofocus: { type: 'boolean', default: false },\n placeholder: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n rows: { type: 'string', default: '3' },\n maxlength: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare readonly: boolean\n declare required: boolean\n declare autogrow: boolean\n declare autofocus: boolean\n declare placeholder: string\n declare value: string\n declare name: string\n declare rows: string\n declare maxlength: string\n\n #internals: ElementInternals\n #surface: HTMLElement | null = null\n #syncing = false\n #autogrowRaf: number | null = null\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'textbox'\n this.#internals.ariaMultiLine = 'true'\n }\n\n protected override activate(): void {\n this.#surface = this.querySelector('[data-surface]')\n if (!this.#surface) {\n this.#surface = document.createElement('div')\n this.#surface.setAttribute('data-surface', '')\n this.#surface.setAttribute('contenteditable', 'plaintext-only')\n this.#surface.setAttribute('spellcheck', 'false')\n this.#surface.setAttribute('tabindex', '0')\n this.appendChild(this.#surface)\n }\n\n if (this.value && this.#surface) {\n this.#surface.textContent = this.value\n }\n\n this.addEffect(() => {\n const locked = this.disabled || this.readonly\n this.#surface?.setAttribute('contenteditable', locked ? 'false' : 'plaintext-only')\n this.#surface?.setAttribute('tabindex', this.disabled ? '-1' : '0')\n this.#surface?.setAttribute('data-placeholder', this.placeholder || '')\n\n const rows = parseInt(this.rows, 10) || 3\n this.style.setProperty('--_rows', String(rows))\n\n this.#internals.setFormValue(this.value || null)\n this.#updateEmptyState()\n })\n\n this.addEffect(() => {\n const val = this.value\n if (!this.#syncing && this.#surface && this.#surface.textContent !== val) {\n this.#surface.textContent = val\n this.#updateEmptyState()\n if (this.autogrow) this.#autoResize()\n }\n })\n\n this.#surface.addEventListener('input', this.#handleInput)\n this.#surface.addEventListener('blur', this.#handleBlur)\n this.addEventListener('click', this.#handleWrapperClick)\n\n if (this.autofocus) {\n requestAnimationFrame(() => this.#surface?.focus())\n }\n }\n\n protected override dispose(): void {\n this.#surface?.removeEventListener('input', this.#handleInput)\n this.#surface?.removeEventListener('blur', this.#handleBlur)\n this.removeEventListener('click', this.#handleWrapperClick)\n if (this.#autogrowRaf !== null) cancelAnimationFrame(this.#autogrowRaf)\n }\n\n focus(options?: FocusOptions): void { this.#surface?.focus(options) }\n blur(): void { this.#surface?.blur() }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void {\n this.value = ''\n if (this.#surface) this.#surface.textContent = ''\n this.#updateEmptyState()\n }\n\n #updateEmptyState(): void {\n const empty = !(this.#surface?.textContent?.trim())\n try {\n if (empty) this.#internals.states?.add('empty')\n else this.#internals.states?.delete('empty')\n } catch { /* CustomStateSet not supported */ }\n this.toggleAttribute('data-input-empty', empty)\n }\n\n #autoResize(): void {\n if (this.#autogrowRaf !== null) cancelAnimationFrame(this.#autogrowRaf)\n this.#autogrowRaf = requestAnimationFrame(() => {\n if (!this.#surface) return\n this.#surface.style.height = 'auto'\n this.#surface.style.height = this.#surface.scrollHeight + 'px'\n })\n }\n\n #handleInput = (): void => {\n this.#syncing = true\n this.value = this.#surface?.textContent ?? ''\n this.#internals.setFormValue(this.value || null)\n this.#updateEmptyState()\n if (this.autogrow) this.#autoResize()\n this.#syncing = false\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n }\n\n #handleBlur = (): void => {\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleWrapperClick = (e: Event): void => {\n if (e.target === this) this.#surface?.focus()\n }\n}\n","// ── aui-container ────────────────────────────────────────────\n//\n// Unified card/panel surface. Minimal JS — just interactive\n// card behavior (click-to-navigate) when [interactive] is set.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiContainer extends AgentElement {\n static override attributes: AttributeSchema = {\n bordered: { type: 'boolean', default: false },\n elevation: { type: 'string', default: '' },\n interactive: { type: 'boolean', default: false },\n href: { type: 'string', default: '' },\n }\n\n declare bordered: boolean\n declare elevation: string\n declare interactive: boolean\n declare href: string\n\n protected override activate(): void {\n if (this.interactive) {\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n this.setAttribute('role', 'button')\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #handleClick = (): void => {\n if (this.href) {\n window.location.href = this.href\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if ((e.key === 'Enter' || e.key === ' ') && this.href) {\n e.preventDefault()\n window.location.href = this.href\n }\n }\n}\n","// ── aui-dialog ──────────────────────────────────────────────\n//\n// Modal dialog using native <dialog> element.\n//\n// Pattern: <dialog> is a full-viewport shell (inset: 0, transparent).\n// Content wrapper [data-dialog-content] is absolutely positioned\n// inside and centered. Backdrop fades via ::backdrop.\n// Native <dialog> handles focus trapping and Escape key.\n//\n// Animations: content scales up + fades in, backdrop overlay fades.\n// Exit animation plays before dialog.close() via [data-dialog-closing].\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nfunction getDuration(el: Element): number {\n const raw = getComputedStyle(el).getPropertyValue('--aui-duration').trim()\n return parseFloat(raw) || 200\n}\n\nexport class AuiDialog extends AgentElement {\n static override attributes: AttributeSchema = {\n open: { type: 'boolean', default: false },\n size: { type: 'enum', values: ['sm', 'lg', 'xl', 'full'], default: '' },\n }\n\n declare open: boolean\n declare size: string\n\n #dialog: HTMLDialogElement | null = null\n #content: HTMLElement | null = null\n #closing = false\n\n get dialogElement(): HTMLDialogElement | null {\n return this.#dialog\n }\n\n #ensureDialog(): HTMLDialogElement {\n if (this.#dialog) return this.#dialog\n\n // Find or create the <dialog> shell\n this.#dialog = this.querySelector('dialog')\n if (!this.#dialog) {\n this.#dialog = document.createElement('dialog')\n\n // Create content wrapper inside the dialog\n this.#content = document.createElement('div')\n this.#content.setAttribute('data-dialog-content', '')\n\n // Move all children into the content wrapper\n while (this.firstChild && this.firstChild !== this.#dialog) {\n this.#content.appendChild(this.firstChild)\n }\n\n this.#dialog.appendChild(this.#content)\n this.appendChild(this.#dialog)\n } else {\n this.#content = this.#dialog.querySelector('[data-dialog-content]')\n }\n\n this.#dialog.addEventListener('cancel', this.#handleCancel)\n this.#dialog.addEventListener('close', this.#handleClose)\n this.#dialog.addEventListener('click', this.#handleBackdropClick)\n return this.#dialog\n }\n\n protected override activate(): void {\n this.#ensureDialog()\n\n this.addEffect(() => {\n if (this.open) {\n this.show()\n } else {\n this.hide()\n }\n })\n }\n\n protected override dispose(): void {\n this.#dialog?.removeEventListener('cancel', this.#handleCancel)\n this.#dialog?.removeEventListener('close', this.#handleClose)\n this.#dialog?.removeEventListener('click', this.#handleBackdropClick)\n }\n\n // ── Public API ──────────────────────────────────────────\n\n show(): void {\n const dialog = this.#ensureDialog()\n if (dialog.open) return\n\n dialog.showModal()\n\n // Trigger entry animation on next frame\n requestAnimationFrame(() => {\n dialog.setAttribute('data-dialog-open', '')\n })\n\n if (!this.hasAttribute('open')) {\n this.setAttribute('open', '')\n }\n }\n\n hide(): void {\n if (!this.#dialog || !this.#dialog.open || this.#closing) return\n\n this.#closing = true\n this.#dialog.removeAttribute('data-dialog-open')\n this.#dialog.setAttribute('data-dialog-closing', '')\n\n setTimeout(() => {\n this.#closing = false\n this.#dialog?.removeAttribute('data-dialog-closing')\n this.#dialog?.close()\n\n }, getDuration(this))\n }\n\n // ── Internal ────────────────────────────────────────────\n\n #handleCancel = (e: Event): void => {\n e.preventDefault()\n this.hide()\n }\n\n #handleClose = (): void => {\n this.removeAttribute('open')\n this.dispatchEvent(new Event('close', { bubbles: true }))\n }\n\n #handleBackdropClick = (e: MouseEvent): void => {\n // With full-viewport dialog, clicking outside the content panel\n // means clicking on the transparent dialog shell itself\n if (e.target === this.#dialog) {\n this.hide()\n }\n }\n}\n","// ── aui-drawer ──────────────────────────────────────────────\n//\n// Slide-out panel anchored to a viewport edge.\n//\n// Pattern: <dialog> is a full-viewport shell (inset: 0, transparent).\n// Content wrapper [data-drawer-content] is absolutely positioned\n// against one edge. Native <dialog> handles focus trapping,\n// Escape key, and ::backdrop.\n//\n// Animations: content slides in/out, backdrop overlay fades.\n// Exit animation plays before dialog.close() via [data-drawer-closing].\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nfunction getDuration(el: Element): number {\n const raw = getComputedStyle(el).getPropertyValue('--aui-duration').trim()\n return parseFloat(raw) || 200\n}\n\nexport class AuiDrawer extends AgentElement {\n static override attributes: AttributeSchema = {\n open: { type: 'boolean', default: false },\n side: { type: 'enum', values: ['left', 'right', 'top', 'bottom'], default: 'right' },\n 'scroll-lock': { type: 'boolean', default: false },\n }\n\n declare open: boolean\n declare side: string\n declare 'scroll-lock': boolean\n\n #dialog: HTMLDialogElement | null = null\n #content: HTMLElement | null = null\n #closing = false\n\n get dialogElement(): HTMLDialogElement | null {\n return this.#dialog\n }\n\n #ensureDialog(): HTMLDialogElement {\n if (this.#dialog) return this.#dialog\n\n this.#dialog = this.querySelector('dialog')\n if (!this.#dialog) {\n this.#dialog = document.createElement('dialog')\n\n // Create content wrapper inside the dialog\n this.#content = document.createElement('div')\n this.#content.setAttribute('data-drawer-content', '')\n\n // Move all children into the content wrapper\n while (this.firstChild && this.firstChild !== this.#dialog) {\n this.#content.appendChild(this.firstChild)\n }\n\n this.#dialog.appendChild(this.#content)\n this.appendChild(this.#dialog)\n } else {\n this.#content = this.#dialog.querySelector('[data-drawer-content]')\n }\n\n this.#dialog.addEventListener('cancel', this.#handleCancel)\n this.#dialog.addEventListener('close', this.#handleClose)\n this.#dialog.addEventListener('click', this.#handleBackdropClick)\n return this.#dialog\n }\n\n protected override activate(): void {\n this.#ensureDialog()\n\n this.addEffect(() => {\n if (this.open) {\n this.show()\n } else {\n this.hide()\n }\n })\n }\n\n protected override dispose(): void {\n if (this.#dialog) {\n this.#dialog.removeEventListener('cancel', this.#handleCancel)\n this.#dialog.removeEventListener('close', this.#handleClose)\n this.#dialog.removeEventListener('click', this.#handleBackdropClick)\n }\n }\n\n show(): void {\n const dialog = this.#ensureDialog()\n if (dialog.open) return\n\n if (this['scroll-lock']) {\n document.documentElement.style.overflow = 'hidden'\n }\n\n dialog.showModal()\n\n // Trigger entry animation on next frame\n requestAnimationFrame(() => {\n dialog.setAttribute('data-drawer-open', '')\n })\n\n if (!this.hasAttribute('open')) {\n this.setAttribute('open', '')\n }\n }\n\n hide(): void {\n if (!this.#dialog || !this.#dialog.open || this.#closing) return\n\n this.#closing = true\n this.#dialog.removeAttribute('data-drawer-open')\n this.#dialog.setAttribute('data-drawer-closing', '')\n\n setTimeout(() => {\n this.#closing = false\n this.#dialog?.removeAttribute('data-drawer-closing')\n this.#dialog?.close()\n\n if (this['scroll-lock'] && !document.querySelector('dialog[open]')) {\n document.documentElement.style.overflow = ''\n }\n }, getDuration(this))\n }\n\n #handleCancel = (e: Event): void => {\n // Intercept Escape key — prevent instant close so we can animate out\n e.preventDefault()\n this.hide()\n }\n\n #handleClose = (): void => {\n if (this['scroll-lock'] && !document.querySelector('dialog[open]')) {\n document.documentElement.style.overflow = ''\n }\n this.removeAttribute('open')\n this.dispatchEvent(new Event('close', { bubbles: true }))\n }\n\n #handleBackdropClick = (e: MouseEvent): void => {\n // With full-viewport dialog, clicking outside the content panel\n // means clicking on the transparent dialog shell itself\n if (e.target === this.#dialog) {\n this.hide()\n }\n }\n}\n","// ── aui-icon ─────────────────────────────────────────────────\n//\n// Renders an SVG icon from registry lookup, URL fetch, or inline child.\n//\n// Sources (in priority order):\n// 1. name=\"flask\" — lookup from global icon registry\n// 2. src=\"/icons/x.svg\" — fetch SVG from URL\n// 3. <svg> child — inline SVG (no attribute needed)\n//\n// Label:\n// label=\"Intelligence\" — renders text via ::after (CSS)\n// Also sets aria-label for accessibility.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\nimport { getIcon, onRegistryChange } from './registry.ts'\n\n// Cache fetched SVGs by URL\nconst fetchCache = new Map<string, string>()\n\nexport class AuiIcon extends AgentElement {\n static override attributes: AttributeSchema = {\n name: { type: 'string', default: '' },\n src: { type: 'string', default: '' },\n label: { type: 'string', default: '' },\n 'text-leading': { type: 'string', default: '' },\n 'text-trailing': { type: 'string', default: '' },\n }\n\n declare name: string\n declare src: string\n declare label: string\n declare 'text-leading': string\n declare 'text-trailing': string\n\n #registryDispose: (() => void) | null = null\n #hasInlineChild = false\n\n protected override activate(): void {\n // Check for inline SVG child (before we render anything)\n this.#hasInlineChild = this.querySelector('svg') !== null\n\n // Accessibility\n this.addEffect(() => {\n const text = this.label || this['text-leading'] || this['text-trailing']\n if (text) {\n this.setAttribute('role', 'img')\n this.setAttribute('aria-label', text)\n } else {\n this.setAttribute('role', 'presentation')\n this.setAttribute('aria-hidden', 'true')\n this.removeAttribute('aria-label')\n }\n })\n\n // Render from registry or src (skip if inline SVG child exists)\n this.addEffect(() => {\n if (this.#hasInlineChild) return\n\n const key = this.name\n if (key) {\n this.#renderFromRegistry(key)\n } else if (this.src) {\n this.#renderFromSrc(this.src)\n }\n })\n\n // Re-render when registry changes (late-registered icons)\n this.#registryDispose = onRegistryChange(() => {\n if (this.#hasInlineChild) return\n const key = this.name\n if (key && !this.querySelector('svg')) {\n this.#renderFromRegistry(key)\n }\n })\n }\n\n protected override dispose(): void {\n this.#registryDispose?.()\n this.#registryDispose = null\n }\n\n #renderFromRegistry(key: string): void {\n const svg = getIcon(key)\n if (svg) this.#setSvg(svg)\n }\n\n async #renderFromSrc(url: string): Promise<void> {\n const cached = fetchCache.get(url)\n if (cached) { this.#setSvg(cached); return }\n\n try {\n const res = await fetch(url)\n if (!res.ok) return\n const text = await res.text()\n if (!text.includes('<svg')) return\n fetchCache.set(url, text)\n // Only apply if src hasn't changed during fetch\n if (this.src === url) this.#setSvg(text)\n } catch {}\n }\n\n #setSvg(svg: string): void {\n // Preserve existing ::after by only replacing SVG content\n const existing = this.querySelector('svg')\n if (existing) existing.remove()\n\n const template = document.createElement('template')\n template.innerHTML = svg\n const svgEl = template.content.firstElementChild\n if (svgEl) this.prepend(svgEl)\n }\n}\n","// ── aui-tooltip ──────────────────────────────────────────────\n//\n// Hover/focus tooltip using the Popover API.\n// Renders as a sibling to its anchor element. The previous\n// sibling (or parent) is auto-discovered as the anchor.\n//\n// Uses CSS anchor positioning for placement. The popover\n// surfaces in the top layer — no z-index management needed.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTooltip extends AgentElement {\n static override attributes: AttributeSchema = {\n content: { type: 'string', default: '' },\n position: { type: 'enum', values: ['top', 'bottom', 'left', 'right'], default: 'top' },\n }\n\n declare content: string\n declare position: string\n\n #popover: HTMLElement | null = null\n #anchor: HTMLElement | null = null\n #anchorName: string = ''\n\n protected override activate(): void {\n // Resolve anchor: previous sibling or parent\n this.#anchor = (this.previousElementSibling as HTMLElement) ?? this.parentElement\n\n // Generate unique anchor name\n const id = `tooltip-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // Create popover surface\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('role', 'tooltip')\n this.#popover.id = id\n this.appendChild(this.#popover)\n\n // Set CSS anchor name on the anchor element\n if (this.#anchor) {\n (this.#anchor.style as any).anchorName = this.#anchorName\n this.#anchor.setAttribute('aria-describedby', id)\n }\n\n // Pass anchor name to CSS via custom property\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // Sync content text\n this.addEffect(() => {\n if (this.#popover) this.#popover.textContent = this.content\n })\n\n // Wire show/hide on anchor\n if (this.#anchor) {\n this.#anchor.addEventListener('mouseenter', this.#show)\n this.#anchor.addEventListener('mouseleave', this.#hide)\n this.#anchor.addEventListener('focusin', this.#show)\n this.#anchor.addEventListener('focusout', this.#hide)\n }\n\n // Escape key dismisses tooltip\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n if (this.#anchor) {\n this.#anchor.removeEventListener('mouseenter', this.#show)\n this.#anchor.removeEventListener('mouseleave', this.#hide)\n this.#anchor.removeEventListener('focusin', this.#show)\n this.#anchor.removeEventListener('focusout', this.#hide)\n this.#anchor.removeAttribute('aria-describedby')\n ;(this.#anchor.style as any).anchorName = ''\n }\n this.#popover?.hidePopover()\n this.#popover?.remove()\n this.#popover = null\n this.#anchor = null\n }\n\n #show = (): void => {\n try { this.#popover?.showPopover() } catch { /* already open */ }\n }\n\n #hide = (): void => {\n try { this.#popover?.hidePopover() } catch { /* already closed */ }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') {\n this.#hide()\n }\n }\n}\n","// ── aui-range ────────────────────────────────────────────────\n//\n// Slider control — no native <input type=\"range\">.\n// Full-height pill track via CSS ::before/::after.\n// Thumb [data-thumb] is a direct child of the range element.\n// --_pct (0–1 float) drives fill width and thumb position via CSS.\n// Uses ElementInternals for form participation.\n// Keyboard: Arrow keys, Home/End, PageUp/PageDown.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiRange extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n min: { type: 'string', default: '0' },\n max: { type: 'string', default: '100' },\n step: { type: 'string', default: '1' },\n value: { type: 'string', default: '50' },\n label: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare min: string\n declare max: string\n declare step: string\n declare value: string\n declare label: string\n declare name: string\n\n #internals: ElementInternals\n #thumb: HTMLElement | null = null\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'slider'\n }\n\n protected override activate(): void {\n // Stamp thumb as direct child (track/fill are CSS ::before/::after)\n this.#thumb = this.querySelector('[data-thumb]')\n if (!this.#thumb) {\n this.#thumb = document.createElement('span')\n this.#thumb.setAttribute('data-thumb', '')\n this.appendChild(this.#thumb)\n }\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n // Sync state reactively\n this.addEffect(() => {\n const min = parseFloat(this.min) || 0\n const max = parseFloat(this.max) || 100\n const val = parseFloat(this.value) || 0\n\n this.setAttribute('aria-valuemin', String(min))\n this.setAttribute('aria-valuemax', String(max))\n this.setAttribute('aria-valuenow', String(val))\n this.setAttribute('aria-disabled', String(this.disabled))\n\n if (this.label) {\n this.setAttribute('aria-label', this.label)\n }\n\n // WHY: 0–1 float so CSS calc() can use it as a multiplier directly\n const pct = (max - min) > 0 ? (val - min) / (max - min) : 0\n this.style.setProperty('--_pct', String(Math.max(0, Math.min(1, pct))))\n\n this.#internals.setFormValue(this.value || null)\n })\n\n // Pointer events on the range element itself (whole pill is interactive)\n this.addEventListener('pointerdown', this.#handlePointerDown)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('pointerdown', this.#handlePointerDown)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.value = '50' }\n\n // ── Pointer interaction ───────────────────────────────\n\n #handlePointerDown = (e: PointerEvent): void => {\n if (this.disabled) return\n // Ignore clicks on thumb (let it propagate to range)\n e.preventDefault()\n this.setPointerCapture(e.pointerId)\n this.setAttribute('data-range-pressed', '')\n this.#setValueFromPointer(e)\n\n this.addEventListener('pointermove', this.#handlePointerMove)\n this.addEventListener('pointerup', this.#handlePointerUp)\n }\n\n #handlePointerMove = (e: PointerEvent): void => {\n this.#setValueFromPointer(e)\n }\n\n #handlePointerUp = (_e: PointerEvent): void => {\n this.removeAttribute('data-range-pressed')\n this.removeEventListener('pointermove', this.#handlePointerMove)\n this.removeEventListener('pointerup', this.#handlePointerUp)\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #setValueFromPointer(e: PointerEvent): void {\n const rect = this.getBoundingClientRect()\n const pct = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const min = parseFloat(this.min) || 0\n const max = parseFloat(this.max) || 100\n const step = parseFloat(this.step) || 1\n const raw = min + pct * (max - min)\n const snapped = Math.round(raw / step) * step\n const clamped = Math.max(min, Math.min(max, snapped))\n this.value = String(clamped)\n this.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n // ── Keyboard interaction ──────────────────────────────\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n\n const min = parseFloat(this.min) || 0\n const max = parseFloat(this.max) || 100\n const step = parseFloat(this.step) || 1\n const val = parseFloat(this.value) || 0\n const bigStep = (max - min) / 10\n\n let next: number | undefined\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = Math.min(max, val + step)\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = Math.max(min, val - step)\n break\n case 'PageUp':\n next = Math.min(max, val + bigStep)\n break\n case 'PageDown':\n next = Math.max(min, val - bigStep)\n break\n case 'Home':\n next = min\n break\n case 'End':\n next = max\n break\n default:\n return\n }\n\n e.preventDefault()\n this.value = String(next)\n this.dispatchEvent(new Event('input', { bubbles: true }))\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n}\n","// ── aui-gripper ──────────────────────────────────────────────\n//\n// Resize handle. Reports frame-to-frame pointer deltas (not\n// cumulative from start). This avoids jump on first click\n// caused by pointer capture coordinate shift.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiGripper extends AgentElement {\n static override attributes: AttributeSchema = {\n orientation: { type: 'enum', values: ['horizontal', 'vertical'], default: 'horizontal' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare orientation: string\n declare disabled: boolean\n\n #lastX = 0\n #lastY = 0\n #dragging = false\n\n protected override activate(): void {\n this.setAttribute('role', 'separator')\n\n this.addEffect(() => {\n this.setAttribute('aria-orientation', this.orientation || 'horizontal')\n this.setAttribute('aria-disabled', String(this.disabled))\n })\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.addEventListener('pointerdown', this.#handlePointerDown)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('pointerdown', this.#handlePointerDown)\n this.removeEventListener('keydown', this.#handleKeydown)\n this.#stopDrag()\n }\n\n #handlePointerDown = (e: PointerEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n\n this.#lastX = e.clientX\n this.#lastY = e.clientY\n this.#dragging = true\n\n this.setPointerCapture(e.pointerId)\n this.setAttribute('data-gripper-dragging', '')\n\n this.addEventListener('pointermove', this.#handlePointerMove)\n this.addEventListener('pointerup', this.#handlePointerUp)\n this.addEventListener('pointercancel', this.#handlePointerUp)\n\n this.dispatchEvent(new CustomEvent('aui:resize-start', { bubbles: true }))\n }\n\n #handlePointerMove = (e: PointerEvent): void => {\n if (!this.#dragging) return\n\n const dx = e.clientX - this.#lastX\n const dy = e.clientY - this.#lastY\n this.#lastX = e.clientX\n this.#lastY = e.clientY\n\n const isHorizontal = this.orientation !== 'vertical'\n\n this.dispatchEvent(new CustomEvent('aui:resize-move', {\n bubbles: true,\n detail: { dx, dy, delta: isHorizontal ? dx : dy },\n }))\n }\n\n #handlePointerUp = (): void => {\n if (!this.#dragging) return\n this.#stopDrag()\n this.dispatchEvent(new CustomEvent('aui:resize-end', { bubbles: true }))\n }\n\n #stopDrag(): void {\n this.#dragging = false\n this.removeAttribute('data-gripper-dragging')\n this.removeEventListener('pointermove', this.#handlePointerMove)\n this.removeEventListener('pointerup', this.#handlePointerUp)\n this.removeEventListener('pointercancel', this.#handlePointerUp)\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n\n const isHorizontal = this.orientation !== 'vertical'\n const step = e.shiftKey ? 10 : 1\n let delta = 0\n\n if (isHorizontal) {\n if (e.key === 'ArrowLeft') delta = -step\n else if (e.key === 'ArrowRight') delta = step\n else return\n } else {\n if (e.key === 'ArrowUp') delta = -step\n else if (e.key === 'ArrowDown') delta = step\n else return\n }\n\n e.preventDefault()\n this.dispatchEvent(new CustomEvent('aui:resize-move', {\n bubbles: true,\n detail: { dx: isHorizontal ? delta : 0, dy: isHorizontal ? 0 : delta, delta },\n }))\n }\n}\n","// ── aui-option ──────────────────────────────────────────────\n//\n// A selectable option within aui-select.\n// Lightweight — most behavior is coordinated by the parent listbox.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiOption extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n selected: { type: 'boolean', default: false },\n label: { type: 'string', default: '' },\n }\n\n declare value: string\n declare disabled: boolean\n declare selected: boolean\n declare label: string\n\n /** The display text for this option. */\n get displayLabel(): string {\n return this.label || this.textContent?.trim() || this.value\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'option')\n\n this.addEffect(() => {\n this.setAttribute('aria-selected', String(this.selected))\n this.setAttribute('aria-disabled', String(this.disabled))\n })\n }\n}\n","// ── aui-optgroup ─────────────────────────────────────────────\n//\n// Groups options under a label header within aui-select.\n// Adds optional `divider` attribute for visual separation.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiOptgroup extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n divider: { type: 'boolean', default: false },\n }\n\n declare label: string\n declare disabled: boolean\n declare divider: boolean\n\n #header: HTMLElement | null = null\n\n protected override activate(): void {\n this.setAttribute('role', 'group')\n\n // Stamp group header\n this.#header = this.querySelector('[data-group-label]')\n if (!this.#header && this.label) {\n this.#header = document.createElement('div')\n this.#header.setAttribute('data-group-label', '')\n this.#header.setAttribute('role', 'presentation')\n this.#header.id = `optgroup-${crypto.randomUUID().slice(0, 8)}`\n this.prepend(this.#header)\n }\n\n this.addEffect(() => {\n if (this.#header) {\n this.#header.textContent = this.label\n this.setAttribute('aria-labelledby', this.#header.id)\n }\n this.setAttribute('aria-disabled', String(this.disabled))\n\n // Cascade disabled to child options\n for (const opt of this.querySelectorAll('aui-option')) {\n if (this.disabled) {\n opt.setAttribute('disabled', '')\n }\n }\n })\n }\n}\n","// ── aui-select ──────────────────────────────────────────────\n//\n// Unified select component with multiple interaction modes.\n//\n// Modes (via `mode` attribute):\n// (none) → dropdown: trigger + chevron + popover listbox\n// \"bar\" → toolbar: inline items, overflow via ResizeObserver\n// \"list\" → standalone listbox: all items visible, scrollable\n// \"combobox\" → searchable dropdown: contenteditable + filtered popover\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Constants ────────────────────────────────────────────────\n\nconst CHEVRON_SVG = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><polyline points=\"48,80 128,160 208,80\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"24\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n\nconst MORE_ICON = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"1em\" height=\"1em\"><circle cx=\"128\" cy=\"128\" r=\"16\"/><circle cx=\"64\" cy=\"128\" r=\"16\"/><circle cx=\"192\" cy=\"128\" r=\"16\"/></svg>`\n\nconst PRIORITY_ORDER: Record<string, number> = { '0': 0, low: 0, '1': 1, normal: 1, '2': 2, high: 2, pin: 999 }\n\nconst FOCUSABLE_BAR = ':is(aui-option, aui-button, button, [tabindex]):not([disabled]):not([data-overflow-trigger])'\nconst FOCUSABLE_BAR_WITH_TRIGGER = ':is(aui-option, aui-button, button, [tabindex]):not([disabled])'\n\n// ── Overflow types ───────────────────────────────────────────\n\ninterface OverflowUnit {\n el: HTMLElement\n flexItems: HTMLElement[]\n priority: string // '0' | '1' | '2' | 'low' | 'normal' | 'high' | 'pin'\n pinned: boolean\n index: number\n width: number\n}\n\n// ── Helpers ──────────────────────────────────────────────────\n\nfunction isOptionTag(tag: string): boolean {\n return tag === 'AUI-OPTION'\n}\n\nfunction isGroupTag(tag: string): boolean {\n return tag === 'AUI-OPTGROUP'\n}\n\nfunction isOptionOrGroup(el: Element): boolean {\n return isOptionTag(el.tagName) || isGroupTag(el.tagName)\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiSelect extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n mode: { type: 'enum', values: ['bar', 'list', 'combobox'], default: '' },\n disabled: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n placeholder: { type: 'string', default: 'Select…' },\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n open: { type: 'boolean', default: false },\n multiple: { type: 'boolean', default: false },\n // Bar mode\n orientation: { type: 'enum', values: ['vertical'], default: '' },\n transparent: { type: 'boolean', default: false },\n fill: { type: 'boolean', default: false },\n padding: { type: 'string', default: '' },\n }\n\n declare mode: string\n declare disabled: boolean\n declare required: boolean\n declare placeholder: string\n declare value: string\n declare name: string\n declare open: boolean\n declare multiple: boolean\n declare orientation: string\n declare transparent: boolean\n declare fill: boolean\n declare padding: string\n\n #internals: ElementInternals\n\n // ── Shared state ─────────────────────────────────────────\n #anchorName: string = ''\n\n // ── Dropdown mode state ──────────────────────────────────\n #trigger: HTMLElement | null = null\n #triggerLabel: HTMLElement | null = null\n #chevron: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #listboxEl: HTMLElement | null = null\n\n // ── Bar mode state ───────────────────────────────────────\n #barTriggerBtn: HTMLElement | null = null\n #barOverflowPopover: HTMLElement | null = null\n #barOverflowList: HTMLElement | null = null\n #resizeObserver: ResizeObserver | null = null\n #mutationObserver: MutationObserver | null = null\n #measureRaf: number | null = null\n\n // ── List mode state ──────────────────────────────────────\n #listActiveIndex = -1\n #typeBuffer = ''\n #typeTimer: ReturnType<typeof setTimeout> | null = null\n\n // ── Combobox mode state ──────────────────────────────────\n #comboSurface: HTMLElement | null = null\n #comboPopover: HTMLElement | null = null\n #comboListbox: HTMLElement | null = null\n #allComboOptions: HTMLElement[] = []\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n }\n\n // ════════════════════════════════════════════════════════════\n // Lifecycle\n // ════════════════════════════════════════════════════════════\n\n protected override activate(): void {\n switch (this.mode) {\n case 'bar': this.#activateBar(); break\n case 'list': this.#activateList(); break\n case 'combobox': this.#activateCombobox(); break\n default: this.#activateDropdown(); break\n }\n }\n\n protected override dispose(): void {\n switch (this.mode) {\n case 'bar': this.#disposeBar(); break\n case 'list': this.#disposeList(); break\n case 'combobox': this.#disposeCombobox(); break\n default: this.#disposeDropdown(); break\n }\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void {\n this.value = ''\n if (this.#comboSurface) this.#comboSurface.textContent = ''\n }\n\n // ════════════════════════════════════════════════════════════\n // Public API\n // ════════════════════════════════════════════════════════════\n\n /** Get all option elements (including inside groups). */\n get options(): HTMLElement[] {\n if (this.mode === '' || this.mode === undefined) {\n // Dropdown — options are inside the internal listbox\n return Array.from(this.#listboxEl?.querySelectorAll('aui-option') ?? [])\n }\n if (this.mode === 'combobox') {\n return Array.from(this.#comboListbox?.querySelectorAll('aui-option') ?? [])\n }\n // List and bar modes — options are direct descendants\n return Array.from(this.querySelectorAll('aui-option'))\n }\n\n /** Get enabled options. */\n get enabledOptions(): HTMLElement[] {\n return this.options.filter(o => !o.hasAttribute('disabled'))\n }\n\n /** Get the currently active (highlighted) option. */\n get activeOption(): HTMLElement | null {\n if (this.mode === 'list') {\n const opts = this.enabledOptions\n return opts[this.#listActiveIndex] ?? null\n }\n // For dropdown/combobox, delegate to internal listbox\n const lb = this.#listboxEl ?? this.#comboListbox\n return (lb as any)?.activeOption ?? null\n }\n\n /** Internal listbox element (for dropdown mode). */\n get listboxElement(): HTMLElement | null { return this.#listboxEl }\n\n /** Programmatically select an option by value. */\n selectValue(val: string): void {\n if (this.mode === 'list') {\n const opt = this.options.find(\n o => (o.getAttribute('value') ?? o.textContent?.trim()) === val\n )\n if (opt && !opt.hasAttribute('disabled')) {\n this.#listSelectOption(opt)\n }\n } else {\n const lb = this.#listboxEl ?? this.#comboListbox\n ;(lb as any)?.selectValue?.(val)\n }\n }\n\n /** Highlight a specific option by index (for external control). */\n highlightIndex(index: number): void {\n if (this.mode === 'list') {\n this.#listSetActive(index)\n } else {\n const lb = this.#listboxEl ?? this.#comboListbox\n ;(lb as any)?.highlightIndex?.(index)\n }\n }\n\n /** Reset the active highlight. */\n clearHighlight(): void {\n if (this.mode === 'list') {\n this.#listClearActive()\n } else {\n const lb = this.#listboxEl ?? this.#comboListbox\n ;(lb as any)?.clearHighlight?.()\n }\n }\n\n // ════════════════════════════════════════════════════════════\n // Shared popover helpers (dropdown + combobox)\n // ════════════════════════════════════════════════════════════\n\n #openPopover(): void {\n const popover = this.#popover ?? this.#comboPopover\n if (!popover || this.disabled) return\n try { popover.showPopover() } catch {}\n this.open = true\n\n // For dropdown mode, highlight current value\n if (this.mode !== 'combobox') {\n const lb = this.#listboxEl as any\n if (lb?.enabledOptions && lb.value) {\n const idx = lb.enabledOptions.findIndex(\n (o: HTMLElement) => (o.getAttribute('value') ?? o.textContent?.trim()) === lb.value\n )\n if (idx >= 0) lb.highlightIndex(idx)\n }\n this.#listboxEl?.focus()\n }\n }\n\n #closePopover(): void {\n const popover = this.#popover ?? this.#comboPopover\n if (!popover) return\n try { popover.hidePopover() } catch {}\n this.open = false\n const lb = this.#listboxEl ?? this.#comboListbox\n ;(lb as any)?.clearHighlight?.()\n }\n\n // ════════════════════════════════════════════════════════════\n // MODE: Dropdown (default)\n // ════════════════════════════════════════════════════════════\n\n #activateDropdown(): void {\n const id = `select-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Stamp trigger (span, not button) ─────────────\n this.#trigger = document.createElement('span')\n this.#trigger.setAttribute('data-trigger', '')\n this.#trigger.setAttribute('role', 'combobox')\n this.#trigger.setAttribute('aria-haspopup', 'listbox')\n this.#trigger.setAttribute('tabindex', '0')\n this.#trigger.id = id\n\n this.#triggerLabel = document.createElement('span')\n this.#triggerLabel.setAttribute('data-label', '')\n this.#trigger.appendChild(this.#triggerLabel)\n\n this.#chevron = document.createElement('span')\n this.#chevron.setAttribute('data-chevron', '')\n this.#chevron.innerHTML = CHEVRON_SVG\n this.#trigger.appendChild(this.#chevron)\n\n // ── Stamp popover + listbox ──────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-dropdown', '')\n\n this.#listboxEl = document.createElement('aui-listbox')\n this.#popover.appendChild(this.#listboxEl)\n\n // Move child options into listbox\n const children = Array.from(this.children)\n for (const child of children) {\n if (isOptionOrGroup(child)) {\n this.#listboxEl.appendChild(child)\n }\n }\n\n this.appendChild(this.#trigger!)\n this.appendChild(this.#popover!)\n\n // Anchor positioning\n ;(this.#trigger.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // Sync state\n this.addEffect(() => {\n if (this.disabled) {\n this.#trigger!.setAttribute('tabindex', '-1')\n } else {\n this.#trigger!.setAttribute('tabindex', '0')\n }\n this.#trigger!.setAttribute('aria-expanded', String(this.open))\n this.#trigger!.setAttribute('aria-disabled', String(this.disabled))\n this.#internals.setFormValue(this.value || null)\n this.#dropdownUpdateLabel()\n })\n\n // Events\n this.#trigger.addEventListener('click', this.#dropdownTriggerClick)\n this.#trigger.addEventListener('keydown', this.#dropdownTriggerKeydown)\n this.#listboxEl.addEventListener('click', this.#dropdownListboxClick)\n this.#listboxEl.addEventListener('change', this.#dropdownListboxChange as EventListener)\n this.#listboxEl.addEventListener('keydown', this.#dropdownListboxKeydown)\n document.addEventListener('click', this.#dropdownOutsideClick)\n\n if (this.value) {\n (this.#listboxEl as any).value = this.value\n }\n }\n\n #dropdownListboxClick = (e: Event): void => {\n const option = (e.target as HTMLElement).closest('aui-option') as HTMLElement | null\n if (!option || option.hasAttribute('disabled')) return\n\n // Select the option\n for (const opt of this.#listboxEl!.querySelectorAll('aui-option')) {\n ;(opt as any).selected = false\n }\n ;(option as any).selected = true\n this.value = (option as any).value ?? option.getAttribute('value') ?? ''\n\n // Fire change\n this.#listboxEl!.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value, option },\n }))\n\n this.#closePopover()\n }\n\n #disposeDropdown(): void {\n this.#trigger?.removeEventListener('click', this.#dropdownTriggerClick)\n this.#trigger?.removeEventListener('keydown', this.#dropdownTriggerKeydown)\n this.#listboxEl?.removeEventListener('click', this.#dropdownListboxClick)\n this.#listboxEl?.removeEventListener('change', this.#dropdownListboxChange as EventListener)\n this.#listboxEl?.removeEventListener('keydown', this.#dropdownListboxKeydown)\n document.removeEventListener('click', this.#dropdownOutsideClick)\n this.#closePopover()\n }\n\n #dropdownUpdateLabel(): void {\n if (!this.#triggerLabel) return\n const selected = this.#listboxEl?.querySelector('aui-option[selected]') as any\n if (selected) {\n this.#triggerLabel.textContent = selected.displayLabel ?? selected.textContent?.trim() ?? ''\n this.#triggerLabel.removeAttribute('data-placeholder')\n } else {\n this.#triggerLabel.textContent = this.placeholder\n this.#triggerLabel.setAttribute('data-placeholder', '')\n }\n }\n\n #dropdownTriggerClick = (): void => {\n if (this.disabled) return\n if (this.open) this.#closePopover()\n else this.#openPopover()\n }\n\n #dropdownTriggerKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!this.open) this.#openPopover()\n } else if (e.key === 'Escape') {\n this.#closePopover()\n }\n }\n\n #dropdownListboxChange = (e: CustomEvent): void => {\n e.stopPropagation()\n this.value = e.detail.value\n this.#internals.setFormValue(this.value || null)\n this.#dropdownUpdateLabel()\n this.#closePopover()\n this.#trigger?.focus()\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: e.detail }))\n }\n\n #dropdownListboxKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') { e.preventDefault(); this.#closePopover(); this.#trigger?.focus() }\n else if (e.key === 'Tab') { this.#closePopover() }\n }\n\n #dropdownOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) this.#closePopover()\n }\n\n // ════════════════════════════════════════════════════════════\n // MODE: Bar (toolbar)\n // ════════════════════════════════════════════════════════════\n\n #activateBar(): void {\n this.setAttribute('role', 'toolbar')\n if (!this.hasAttribute('aria-label')) {\n this.setAttribute('aria-label', 'Toolbar')\n }\n if (this.orientation) {\n this.setAttribute('aria-orientation', this.orientation || 'horizontal')\n }\n\n // ── Stamp overflow trigger + popover ──────────────\n this.#barTriggerBtn = document.createElement('span')\n this.#barTriggerBtn.setAttribute('data-overflow-trigger', '')\n this.#barTriggerBtn.setAttribute('role', 'button')\n this.#barTriggerBtn.setAttribute('tabindex', '0')\n this.#barTriggerBtn.setAttribute('aria-label', 'More actions')\n this.#barTriggerBtn.setAttribute('aria-haspopup', 'true')\n this.#barTriggerBtn.innerHTML = MORE_ICON\n this.appendChild(this.#barTriggerBtn)\n\n this.#barOverflowPopover = document.createElement('div')\n this.#barOverflowPopover.setAttribute('data-overflow-popover', '')\n this.#barOverflowPopover.setAttribute('popover', 'auto')\n this.#barOverflowPopover.setAttribute('role', 'menu')\n this.appendChild(this.#barOverflowPopover)\n\n this.#barOverflowList = document.createElement('div')\n this.#barOverflowList.setAttribute('data-overflow-list', '')\n this.#barOverflowPopover.appendChild(this.#barOverflowList)\n\n // Wire trigger\n this.#barTriggerBtn.addEventListener('click', this.#barOnTriggerClick)\n this.#barTriggerBtn.addEventListener('keydown', this.#barOnTriggerKeydown)\n this.#barOverflowList.addEventListener('click', this.#barOnOverflowItemClick)\n\n // Keyboard navigation\n this.addEventListener('keydown', this.#barHandleKeydown)\n\n // Auto-stamp dividers between adjacent optgroups\n this.#barStampGroupDividers()\n\n // Observe resize\n this.#resizeObserver = new ResizeObserver(() => this.#barScheduleMeasure())\n this.#resizeObserver.observe(this)\n\n // Observe child changes (ignore mutations inside the overflow popover)\n this.#mutationObserver = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (this.#barOverflowPopover?.contains(m.target as Node)) continue\n this.#barScheduleMeasure()\n return\n }\n })\n this.#mutationObserver.observe(this, { childList: true, subtree: true })\n\n // Initial measure\n this.#barScheduleMeasure()\n }\n\n #disposeBar(): void {\n if (this.#measureRaf !== null) cancelAnimationFrame(this.#measureRaf)\n this.#resizeObserver?.disconnect()\n this.#mutationObserver?.disconnect()\n this.removeEventListener('keydown', this.#barHandleKeydown)\n this.#barTriggerBtn?.removeEventListener('click', this.#barOnTriggerClick)\n this.#barTriggerBtn?.removeEventListener('keydown', this.#barOnTriggerKeydown)\n this.#barOverflowList?.removeEventListener('click', this.#barOnOverflowItemClick)\n }\n\n // ── Bar: Group dividers ───────────────────────────────\n\n #barStampGroupDividers(): void {\n const children = Array.from(this.children)\n let prevWasGroup = false\n\n for (const child of children) {\n if (!(child instanceof HTMLElement)) continue\n if (child.hasAttribute('data-overflow-trigger') || child.hasAttribute('data-overflow-popover')) continue\n\n const isGroup = child.tagName === 'AUI-OPTGROUP'\n if (isGroup && prevWasGroup) {\n // Insert divider before this group\n const hr = document.createElement('hr')\n hr.setAttribute('data-group-divider', '')\n this.insertBefore(hr, child)\n }\n if (isGroup || isOptionTag(child.tagName)) {\n prevWasGroup = isGroup\n }\n }\n }\n\n // ── Bar: Measurement ───────────────────────────────────\n\n #barScheduleMeasure(): void {\n if (this.#measureRaf !== null) return\n this.#measureRaf = requestAnimationFrame(() => {\n this.#measureRaf = null\n this.#barMeasure()\n })\n }\n\n #barGetContentChildren(): HTMLElement[] {\n return Array.from(this.children).filter(\n (c): c is HTMLElement =>\n c instanceof HTMLElement &&\n !c.hasAttribute('data-overflow-trigger') &&\n !c.hasAttribute('data-overflow-popover')\n )\n }\n\n #barMeasure(): void {\n if (this.orientation === 'vertical') {\n this.#barClearOverflow()\n return\n }\n\n // Pause mutation observer to prevent loops\n this.#mutationObserver?.disconnect()\n\n // Ensure trigger + popover are at the end\n if (this.#barTriggerBtn && this.#barTriggerBtn.nextElementSibling !== this.#barOverflowPopover) {\n this.appendChild(this.#barTriggerBtn)\n }\n if (this.#barOverflowPopover && this.#barOverflowPopover !== this.lastElementChild) {\n this.appendChild(this.#barOverflowPopover)\n }\n\n const children = this.#barGetContentChildren()\n if (children.length === 0) {\n this.#barReconnectMutationObserver()\n return\n }\n\n // Reset\n for (const child of children) {\n child.removeAttribute('data-select-overflow')\n }\n this.removeAttribute('data-select-overflowing')\n\n // Enter measurement mode\n this.setAttribute('data-select-measuring', '')\n\n const cs = getComputedStyle(this)\n const gap = parseFloat(cs.gap) || 0\n const contentWidth =\n this.clientWidth -\n (parseFloat(cs.paddingInlineStart) || 0) -\n (parseFloat(cs.paddingInlineEnd) || 0)\n\n if (contentWidth <= 0) {\n this.removeAttribute('data-select-measuring')\n this.#barReconnectMutationObserver()\n return\n }\n\n const units = this.#barBuildOverflowUnits(children)\n\n // Sum intrinsic widths\n let totalWidth = 0\n let flatIndex = 0\n for (const unit of units) {\n for (const item of unit.flexItems) {\n if (flatIndex > 0) totalWidth += gap\n totalWidth += item.offsetWidth\n flatIndex++\n }\n }\n\n // No overflow (1px tolerance for subpixel rounding in offsetWidth)\n if (totalWidth <= contentWidth + 1) {\n this.removeAttribute('data-select-measuring')\n this.#barClearOverflowMenu()\n this.#barReconnectMutationObserver()\n return\n }\n\n // Overflow detected\n this.setAttribute('data-select-overflowing', '')\n\n // Measure per-unit widths\n for (const unit of units) {\n let w = 0\n for (let i = 0; i < unit.flexItems.length; i++) {\n if (i > 0) w += gap\n w += unit.flexItems[i].offsetWidth\n }\n unit.width = w\n }\n\n // Exit measurement mode\n this.removeAttribute('data-select-measuring')\n\n // Trigger button width\n const triggerWidth = this.#barTriggerBtn?.offsetWidth ?? 0\n\n // Filter candidates (not pinned)\n const candidates = units.filter(u => !u.pinned)\n if (candidates.length === 0) {\n this.#barClearOverflowMenu()\n this.#barReconnectMutationObserver()\n return\n }\n\n // Sort: low priority first, then reverse DOM order within same priority\n candidates.sort((a, b) => {\n const pa = PRIORITY_ORDER[a.priority] ?? 1\n const pb = PRIORITY_ORDER[b.priority] ?? 1\n if (pa !== pb) return pa - pb\n return b.index - a.index\n })\n\n // Greedy overflow: remove lowest-priority items until remaining fits\n const overflowed = new Set<HTMLElement>()\n let remaining = totalWidth\n const available = contentWidth - triggerWidth - gap\n\n for (const unit of candidates) {\n if (remaining <= available) break\n overflowed.add(unit.el)\n remaining -= unit.width + gap\n }\n\n if (overflowed.size === 0) {\n this.removeAttribute('data-select-overflowing')\n this.#barClearOverflowMenu()\n this.#barReconnectMutationObserver()\n return\n }\n\n // Apply data-overflow (and hide adjacent group dividers)\n for (const el of overflowed) {\n el.setAttribute('data-select-overflow', '')\n // Hide adjacent auto-stamped group dividers\n const prev = el.previousElementSibling\n if (prev?.hasAttribute('data-group-divider')) {\n prev.setAttribute('data-select-overflow', '')\n }\n const next = el.nextElementSibling\n if (next?.hasAttribute('data-group-divider')) {\n next.setAttribute('data-select-overflow', '')\n }\n }\n\n // Rebuild overflow menu\n this.#barRebuildOverflowMenu()\n this.#barReconnectMutationObserver()\n }\n\n #barBuildOverflowUnits(children: HTMLElement[]): OverflowUnit[] {\n const units: OverflowUnit[] = []\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n if (child.tagName === 'HR' || child.tagName === 'AUI-DIVIDER') continue\n\n // Read priority: data-priority > overflow-priority > default \"normal\"\n const rawPriority = child.getAttribute('data-priority')\n ?? child.getAttribute('overflow-priority')\n ?? 'normal'\n const priority = rawPriority as OverflowUnit['priority']\n const pinned = rawPriority === 'pin' || child.hasAttribute('overflow-pin')\n\n if (child.tagName === 'AUI-OPTGROUP') {\n const flexItems: HTMLElement[] = []\n for (const gc of child.children) {\n if (gc instanceof HTMLElement && gc.tagName !== 'HR' && gc.tagName !== 'AUI-DIVIDER') {\n flexItems.push(gc)\n }\n }\n units.push({ el: child, flexItems, priority, pinned, index: i, width: 0 })\n } else {\n units.push({ el: child, flexItems: [child], priority, pinned, index: i, width: 0 })\n }\n }\n return units\n }\n\n // ── Bar: Overflow menu ─────────────────────────────────\n\n #barClearOverflow(): void {\n for (const child of this.#barGetContentChildren()) {\n child.removeAttribute('data-select-overflow')\n }\n this.removeAttribute('data-select-overflowing')\n this.removeAttribute('data-select-measuring')\n this.#barClearOverflowMenu()\n }\n\n #barClearOverflowMenu(): void {\n if (this.#barOverflowList) this.#barOverflowList.innerHTML = ''\n }\n\n #barRebuildOverflowMenu(): void {\n this.#barClearOverflowMenu()\n if (!this.#barOverflowList) return\n\n const children = this.#barGetContentChildren()\n let itemIndex = 0\n\n for (const child of children) {\n if (!child.hasAttribute('data-select-overflow')) continue\n\n if (child.tagName === 'AUI-OPTGROUP') {\n // Clone the group with its options into the overflow menu\n const group = document.createElement('aui-optgroup')\n const groupLabel = child.getAttribute('label')\n if (groupLabel) group.setAttribute('label', groupLabel)\n group.setAttribute('divider', '')\n\n for (const gc of child.children) {\n if (!(gc instanceof HTMLElement)) continue\n if (gc.tagName === 'HR' || gc.tagName === 'AUI-DIVIDER' || gc.hasAttribute('data-group-label')) continue\n\n const option = document.createElement('aui-option')\n option.textContent = this.#barExtractLabel(gc)\n option.setAttribute('data-overflow-index', String(itemIndex))\n group.appendChild(option)\n itemIndex++\n }\n\n this.#barOverflowList.appendChild(group)\n } else if (child.tagName !== 'HR' && child.tagName !== 'AUI-DIVIDER') {\n const option = document.createElement('aui-option')\n option.textContent = this.#barExtractLabel(child)\n option.setAttribute('data-overflow-index', String(itemIndex))\n this.#barOverflowList.appendChild(option)\n itemIndex++\n }\n }\n }\n\n /** Flat list of overflowed source elements, in DOM order (for click dispatch). */\n #barGetOverflowSources(): HTMLElement[] {\n const sources: HTMLElement[] = []\n for (const child of this.#barGetContentChildren()) {\n if (!child.hasAttribute('data-select-overflow')) continue\n if (child.tagName === 'AUI-OPTGROUP') {\n for (const gc of child.children) {\n if (gc instanceof HTMLElement && gc.tagName !== 'HR' && gc.tagName !== 'AUI-DIVIDER' && !gc.hasAttribute('data-group-label')) {\n sources.push(gc)\n }\n }\n } else if (child.tagName !== 'HR' && child.tagName !== 'AUI-DIVIDER') {\n sources.push(child)\n }\n }\n return sources\n }\n\n #barExtractLabel(el: HTMLElement): string {\n const ariaLabel = el.getAttribute('aria-label')\n if (ariaLabel) return ariaLabel\n const labelAttr = el.getAttribute('label')\n if (labelAttr) return labelAttr\n const text = el.textContent?.trim()\n if (text) return text\n const icon = el.getAttribute('icon')\n if (icon) return icon.charAt(0).toUpperCase() + icon.slice(1).replace(/-/g, ' ')\n return 'Action'\n }\n\n #barReconnectMutationObserver(): void {\n this.#mutationObserver?.observe(this, { childList: true, subtree: true })\n }\n\n // ── Bar: Event handlers ────────────────────────────────\n\n #barOnTriggerClick = (e: Event): void => {\n e.stopPropagation()\n this.#barPositionPopover()\n this.#barOverflowPopover?.togglePopover()\n }\n\n #barOnTriggerKeydown = (e: Event): void => {\n const ke = e as KeyboardEvent\n if (ke.key === 'Enter' || ke.key === ' ') {\n ke.preventDefault()\n this.#barPositionPopover()\n this.#barOverflowPopover?.togglePopover()\n }\n }\n\n #barPositionPopover(): void {\n if (!this.#barTriggerBtn || !this.#barOverflowPopover) return\n const rect = this.#barTriggerBtn.getBoundingClientRect()\n this.#barOverflowPopover.style.top = `${rect.bottom + 2}px`\n this.#barOverflowPopover.style.right = `${window.innerWidth - rect.right}px`\n }\n\n #barOnOverflowItemClick = (e: Event): void => {\n const target = (e.target as HTMLElement).closest('[data-overflow-index]') as HTMLElement | null\n if (!target) return\n\n const index = parseInt(target.getAttribute('data-overflow-index')!, 10)\n const source = this.#barGetOverflowSources()[index]\n if (source) source.click()\n\n this.#barOverflowPopover?.hidePopover()\n }\n\n // ── Bar: Keyboard navigation ───────────────────────────\n\n #barGetFocusable(): HTMLElement[] {\n const all: HTMLElement[] = []\n const selector = this.hasAttribute('data-select-overflowing')\n ? FOCUSABLE_BAR_WITH_TRIGGER\n : FOCUSABLE_BAR\n\n for (const child of this.#barGetContentChildren()) {\n if (child.hasAttribute('data-select-overflow')) continue\n if (child.tagName === 'AUI-OPTGROUP') {\n for (const gc of child.children) {\n if (gc instanceof HTMLElement && gc.matches(selector)) all.push(gc)\n }\n } else if (child.matches(selector)) {\n all.push(child)\n }\n }\n\n // Include trigger when overflowing\n if (this.#barTriggerBtn && this.hasAttribute('data-select-overflowing')) {\n all.push(this.#barTriggerBtn)\n }\n\n return all\n }\n\n #barHandleKeydown = (e: KeyboardEvent): void => {\n const isVertical = this.orientation === 'vertical'\n const forward = isVertical ? 'ArrowDown' : 'ArrowRight'\n const backward = isVertical ? 'ArrowUp' : 'ArrowLeft'\n\n if (e.key !== forward && e.key !== backward && e.key !== 'Home' && e.key !== 'End') return\n\n const items = this.#barGetFocusable()\n if (items.length === 0) return\n\n const current = items.indexOf(document.activeElement as HTMLElement)\n let next: number | undefined\n\n switch (e.key) {\n case forward:\n next = current < items.length - 1 ? current + 1 : 0\n break\n case backward:\n next = current > 0 ? current - 1 : items.length - 1\n break\n case 'Home':\n next = 0\n break\n case 'End':\n next = items.length - 1\n break\n }\n\n if (next !== undefined) {\n e.preventDefault()\n items[next].setAttribute('tabindex', '0')\n items[next].focus()\n if (current >= 0 && current !== next) {\n items[current].setAttribute('tabindex', '-1')\n }\n }\n }\n\n // ════════════════════════════════════════════════════════════\n // MODE: List (standalone listbox)\n // ════════════════════════════════════════════════════════════\n\n #activateList(): void {\n this.setAttribute('role', 'listbox')\n\n this.addEffect(() => {\n if (this.multiple) {\n this.setAttribute('aria-multiselectable', 'true')\n } else {\n this.removeAttribute('aria-multiselectable')\n }\n })\n\n // Initial selection from value\n if (this.value) {\n this.#listSyncSelection()\n }\n\n this.addEventListener('click', this.#listHandleClick)\n this.addEventListener('keydown', this.#listHandleKeydown)\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n }\n\n #disposeList(): void {\n this.removeEventListener('click', this.#listHandleClick)\n this.removeEventListener('keydown', this.#listHandleKeydown)\n if (this.#typeTimer) clearTimeout(this.#typeTimer)\n }\n\n // ── List: Selection ────────────────────────────────────\n\n #listSelectOption(opt: HTMLElement): void {\n if (!this.multiple) {\n for (const o of this.options) {\n o.removeAttribute('selected')\n }\n }\n\n const wasSelected = opt.hasAttribute('selected')\n if (this.multiple && wasSelected) {\n opt.removeAttribute('selected')\n } else {\n opt.setAttribute('selected', '')\n }\n\n this.#listSyncValue()\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: {\n value: this.value,\n option: opt,\n label: (opt as any).displayLabel ?? opt.textContent?.trim() ?? '',\n },\n }))\n }\n\n #listSyncValue(): void {\n const selected = this.options.filter(o => o.hasAttribute('selected'))\n if (this.multiple) {\n this.value = selected.map(o => o.getAttribute('value') ?? o.textContent?.trim() ?? '').join(',')\n } else {\n const opt = selected[0]\n this.value = opt?.getAttribute('value') ?? opt?.textContent?.trim() ?? ''\n }\n this.#internals.setFormValue(this.value || null)\n }\n\n #listSyncSelection(): void {\n const values = this.value.split(',').map(v => v.trim()).filter(Boolean)\n for (const opt of this.options) {\n const optVal = opt.getAttribute('value') ?? opt.textContent?.trim() ?? ''\n if (values.includes(optVal)) {\n opt.setAttribute('selected', '')\n } else {\n opt.removeAttribute('selected')\n }\n }\n }\n\n // ── List: Active (keyboard highlight) ──────────────────\n\n #listSetActive(index: number): void {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n\n this.#listClearActive()\n\n this.#listActiveIndex = Math.max(0, Math.min(index, opts.length - 1))\n const opt = opts[this.#listActiveIndex]\n opt.setAttribute('data-navigate-active', '')\n opt.scrollIntoView({ block: 'nearest' })\n\n if (opt.id) {\n this.setAttribute('aria-activedescendant', opt.id)\n }\n }\n\n #listClearActive(): void {\n for (const opt of this.options) {\n opt.removeAttribute('data-navigate-active')\n }\n this.removeAttribute('aria-activedescendant')\n }\n\n // ── List: Event handlers ───────────────────────────────\n\n #listHandleClick = (e: Event): void => {\n const target = (e.target as HTMLElement).closest('aui-option')\n if (!target || target.hasAttribute('disabled')) return\n\n this.#listSelectOption(target as HTMLElement)\n\n const idx = this.enabledOptions.indexOf(target as HTMLElement)\n if (idx >= 0) this.#listSetActive(idx)\n }\n\n #listHandleKeydown = (e: KeyboardEvent): void => {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = this.#listActiveIndex < opts.length - 1 ? this.#listActiveIndex + 1 : 0\n this.#listSetActive(next)\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = this.#listActiveIndex > 0 ? this.#listActiveIndex - 1 : opts.length - 1\n this.#listSetActive(prev)\n break\n }\n case 'Home': {\n e.preventDefault()\n this.#listSetActive(0)\n break\n }\n case 'End': {\n e.preventDefault()\n this.#listSetActive(opts.length - 1)\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n const active = opts[this.#listActiveIndex]\n if (active) this.#listSelectOption(active)\n break\n }\n default: {\n // Type-ahead\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n this.#listHandleTypeAhead(e.key)\n }\n }\n }\n }\n\n #listHandleTypeAhead(char: string): void {\n this.#typeBuffer += char.toLowerCase()\n if (this.#typeTimer) clearTimeout(this.#typeTimer)\n this.#typeTimer = setTimeout(() => { this.#typeBuffer = '' }, 500)\n\n const opts = this.enabledOptions\n const match = opts.findIndex(o => {\n const label = (o as any).displayLabel?.toLowerCase() ?? o.textContent?.trim().toLowerCase() ?? ''\n return label.startsWith(this.#typeBuffer)\n })\n\n if (match >= 0) this.#listSetActive(match)\n }\n\n // ════════════════════════════════════════════════════════════\n // MODE: Combobox (searchable dropdown)\n // ════════════════════════════════════════════════════════════\n\n #activateCombobox(): void {\n const id = `combobox-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // Stamp contenteditable search surface\n this.#comboSurface = document.createElement('span')\n this.#comboSurface.setAttribute('data-input', '')\n this.#comboSurface.setAttribute('contenteditable', 'plaintext-only')\n this.#comboSurface.setAttribute('role', 'combobox')\n this.#comboSurface.setAttribute('aria-haspopup', 'listbox')\n this.#comboSurface.setAttribute('aria-autocomplete', 'list')\n this.#comboSurface.setAttribute('tabindex', '0')\n this.#comboSurface.id = id\n\n // Stamp popover + listbox\n this.#comboPopover = document.createElement('div')\n this.#comboPopover.setAttribute('popover', 'manual')\n this.#comboPopover.setAttribute('data-dropdown', '')\n\n this.#comboListbox = document.createElement('aui-listbox')\n this.#comboListbox.id = `${id}-listbox`\n this.#comboSurface.setAttribute('aria-controls', this.#comboListbox.id)\n this.#comboPopover.appendChild(this.#comboListbox)\n\n // Move child options into listbox\n const children = Array.from(this.children)\n for (const child of children) {\n if (isOptionOrGroup(child)) {\n this.#comboListbox.appendChild(child)\n }\n }\n this.#allComboOptions = Array.from(this.#comboListbox.querySelectorAll('aui-option'))\n\n this.appendChild(this.#comboSurface!)\n this.appendChild(this.#comboPopover!)\n\n ;(this.#comboSurface!.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // Sync state\n this.addEffect(() => {\n const locked = this.disabled\n this.#comboSurface!.setAttribute('contenteditable', locked ? 'false' : 'plaintext-only')\n this.#comboSurface!.setAttribute('tabindex', locked ? '-1' : '0')\n this.#comboSurface!.setAttribute('aria-expanded', String(this.open))\n this.#comboSurface!.setAttribute('data-placeholder', this.placeholder || '')\n this.#internals.setFormValue(this.value || null)\n\n const empty = !(this.#comboSurface!.textContent?.trim())\n this.toggleAttribute('data-input-empty', empty)\n })\n\n // Set initial display value\n if (this.value) {\n const match = this.#allComboOptions.find(\n o => (o.getAttribute('value') ?? o.textContent?.trim()) === this.value\n )\n if (match && this.#comboSurface) {\n this.#comboSurface.textContent = (match as any).displayLabel ?? match.textContent?.trim() ?? ''\n }\n }\n\n this.#comboSurface.addEventListener('input', this.#comboHandleInput)\n this.#comboSurface.addEventListener('focus', this.#comboHandleFocus)\n this.#comboSurface.addEventListener('keydown', this.#comboHandleKeydown)\n this.#comboListbox.addEventListener('change', this.#comboHandleListboxChange as EventListener)\n this.#comboListbox.addEventListener('keydown', this.#comboHandleListboxKeydown)\n document.addEventListener('click', this.#comboHandleOutsideClick)\n }\n\n #disposeCombobox(): void {\n this.#comboSurface?.removeEventListener('input', this.#comboHandleInput)\n this.#comboSurface?.removeEventListener('focus', this.#comboHandleFocus)\n this.#comboSurface?.removeEventListener('keydown', this.#comboHandleKeydown)\n this.#comboListbox?.removeEventListener('change', this.#comboHandleListboxChange as EventListener)\n this.#comboListbox?.removeEventListener('keydown', this.#comboHandleListboxKeydown)\n document.removeEventListener('click', this.#comboHandleOutsideClick)\n this.#closePopover()\n }\n\n #comboFilter(query: string): void {\n const q = query.toLowerCase()\n for (const opt of this.#allComboOptions) {\n const label = (opt as any).displayLabel?.toLowerCase() ?? opt.textContent?.trim().toLowerCase() ?? ''\n opt.style.display = (!q || label.includes(q)) ? '' : 'none'\n }\n // Filter groups — hide groups with no visible options\n const groups = this.#comboListbox?.querySelectorAll('aui-optgroup') ?? []\n for (const group of groups) {\n const hasVisible = group.querySelector('aui-option:not([style*=\"display: none\"])')\n ;(group as HTMLElement).style.display = hasVisible ? '' : 'none'\n }\n }\n\n #comboHandleInput = (): void => {\n if (!this.open) this.#openPopover()\n this.#comboFilter(this.#comboSurface?.textContent ?? '')\n this.toggleAttribute('data-input-empty', !(this.#comboSurface?.textContent?.trim()))\n }\n\n #comboHandleFocus = (): void => {\n this.#openPopover()\n this.#comboFilter(this.#comboSurface?.textContent ?? '')\n }\n\n #comboHandleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter') {\n e.preventDefault()\n const lb = this.#comboListbox as any\n const active = lb?.activeOption\n if (active && this.open) active.click()\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n if (!this.open) this.#openPopover()\n this.#comboListbox?.focus()\n } else if (e.key === 'Escape') {\n this.#closePopover()\n }\n }\n\n #comboHandleListboxChange = (e: CustomEvent): void => {\n e.stopPropagation()\n this.value = e.detail.value\n this.#internals.setFormValue(this.value || null)\n if (this.#comboSurface) this.#comboSurface.textContent = e.detail.label ?? ''\n this.toggleAttribute('data-input-empty', !this.value)\n this.#closePopover()\n this.#comboSurface?.focus()\n this.#comboFilter('')\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: e.detail }))\n }\n\n #comboHandleListboxKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') { e.preventDefault(); this.#closePopover(); this.#comboSurface?.focus() }\n else if (e.key === 'Tab') { this.#closePopover() }\n }\n\n #comboHandleOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) this.#closePopover()\n }\n}\n","// ── aui-toast ────────────────────────────────────────────────\n//\n// Toast notification — no native <button> elements.\n// Close indicator is a span[role=\"button\"].\n// Imperative API: AuiToast.show({ message, intent, duration }).\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport interface ToastOptions {\n message: string\n intent?: 'info' | 'success' | 'warning' | 'danger'\n duration?: number\n closeable?: boolean\n}\n\nlet containerEl: HTMLElement | null = null\n\nfunction getContainer(): HTMLElement {\n if (containerEl && containerEl.isConnected) return containerEl\n containerEl = document.querySelector('aui-toast-container')\n if (!containerEl) {\n containerEl = document.createElement('aui-toast-container')\n document.body.appendChild(containerEl)\n }\n return containerEl\n}\n\nexport class AuiToast extends AgentElement {\n static override attributes: AttributeSchema = {\n open: { type: 'boolean', default: false },\n message: { type: 'string', default: '' },\n duration: { type: 'string', default: '4000' },\n closeable: { type: 'boolean', default: true },\n }\n\n declare open: boolean\n declare message: string\n declare duration: string\n declare closeable: boolean\n\n #timer: ReturnType<typeof setTimeout> | null = null\n #closeEl: HTMLElement | null = null\n #content: HTMLElement | null = null\n\n static show(opts: ToastOptions): AuiToast {\n const toast = document.createElement('aui-toast') as AuiToast\n toast.setAttribute('message', opts.message)\n if (opts.intent) toast.setAttribute(opts.intent, '')\n if (opts.duration !== undefined) toast.setAttribute('duration', String(opts.duration))\n if (opts.closeable === false) toast.removeAttribute('closeable')\n else toast.setAttribute('closeable', '')\n getContainer().appendChild(toast)\n requestAnimationFrame(() => toast.setAttribute('open', ''))\n return toast\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'status')\n this.setAttribute('aria-live', 'polite')\n\n this.#content = document.createElement('span')\n this.#content.setAttribute('data-message', '')\n this.appendChild(this.#content)\n\n this.#closeEl = document.createElement('span')\n this.#closeEl.setAttribute('data-close', '')\n this.#closeEl.setAttribute('role', 'button')\n this.#closeEl.setAttribute('tabindex', '0')\n this.#closeEl.setAttribute('aria-label', 'Dismiss')\n this.#closeEl.textContent = '✕'\n this.appendChild(this.#closeEl)\n\n this.addEffect(() => {\n if (this.#content) this.#content.textContent = this.message\n })\n\n this.addEffect(() => {\n if (this.#closeEl) {\n this.#closeEl.style.display = this.closeable ? '' : 'none'\n }\n })\n\n this.addEffect(() => {\n if (this.#timer) clearTimeout(this.#timer)\n if (this.open) {\n const ms = parseInt(this.duration, 10) || 4000\n if (ms > 0) {\n this.#timer = setTimeout(() => this.dismiss(), ms)\n }\n }\n })\n\n this.#closeEl.addEventListener('click', this.#handleClose)\n this.#closeEl.addEventListener('keydown', this.#handleCloseKeydown)\n }\n\n protected override dispose(): void {\n if (this.#timer) clearTimeout(this.#timer)\n this.#closeEl?.removeEventListener('click', this.#handleClose)\n this.#closeEl?.removeEventListener('keydown', this.#handleCloseKeydown)\n }\n\n dismiss(): void {\n this.open = false\n this.dispatchEvent(new Event('dismiss', { bubbles: true }))\n setTimeout(() => this.remove(), 200)\n }\n\n #handleClose = (e: Event): void => {\n e.stopPropagation()\n this.dismiss()\n }\n\n #handleCloseKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.dismiss()\n }\n }\n}\n","// ── aui-tabs ─────────────────────────────────────────────────\n//\n// Tabbed interface coordinator. Contains aui-tab triggers and\n// aui-tab-panel content. Handles selection, keyboard navigation\n// (roving tabindex with arrow keys), and ARIA wiring.\n//\n// Structure:\n// <aui-tabs value=\"general\">\n// <aui-tab value=\"general\">General</aui-tab>\n// <aui-tab value=\"advanced\">Advanced</aui-tab>\n// <aui-tab-panel value=\"general\">…</aui-tab-panel>\n// <aui-tab-panel value=\"advanced\">…</aui-tab-panel>\n// </aui-tabs>\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTabs extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n orientation: { type: 'enum', values: ['vertical'], default: '' },\n }\n\n declare value: string\n declare orientation: string\n\n protected override activate(): void {\n this.setAttribute('role', 'tablist')\n\n this.addEffect(() => {\n if (this.orientation) {\n this.setAttribute('aria-orientation', this.orientation)\n } else {\n this.removeAttribute('aria-orientation')\n }\n })\n\n // Wire ARIA ids between tabs and panels\n this.#wireAria()\n\n // Set tab count for CSS grid\n this.style.setProperty('--_tab-count', String(this.#tabs.length))\n\n // Sync selection\n this.addEffect(() => {\n this.#syncSelection()\n })\n\n // Auto-select first tab if no value set\n if (!this.value) {\n const firstTab = this.querySelector('aui-tab:not([disabled])')\n if (firstTab) {\n this.value = firstTab.getAttribute('value') ?? ''\n }\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n // ── Internal ──────────────────────────────────────────\n\n get #tabs(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-tab'))\n }\n\n get #enabledTabs(): HTMLElement[] {\n return this.#tabs.filter(t => !t.hasAttribute('disabled'))\n }\n\n get #panels(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-tab-panel'))\n }\n\n #wireAria(): void {\n const tabs = this.#tabs\n const panels = this.#panels\n\n for (const tab of tabs) {\n const val = tab.getAttribute('value') ?? ''\n if (!tab.id) tab.id = `tab-${val}-${crypto.randomUUID().slice(0, 4)}`\n\n const panel = panels.find(p => p.getAttribute('value') === val)\n if (panel) {\n if (!panel.id) panel.id = `panel-${val}-${crypto.randomUUID().slice(0, 4)}`\n tab.setAttribute('aria-controls', panel.id)\n panel.setAttribute('aria-labelledby', tab.id)\n }\n }\n }\n\n #syncSelection(): void {\n const val = this.value\n const tabs = this.#tabs\n let selectedIdx = -1\n\n for (let i = 0; i < tabs.length; i++) {\n const isSelected = tabs[i].getAttribute('value') === val\n if (isSelected) {\n tabs[i].setAttribute('selected', '')\n selectedIdx = i\n } else {\n tabs[i].removeAttribute('selected')\n }\n }\n\n for (const panel of this.#panels) {\n const isActive = panel.getAttribute('value') === val\n if (isActive) panel.setAttribute('active', '')\n else panel.removeAttribute('active')\n }\n\n // Update indicator position via CSS custom properties\n this.style.setProperty('--_tab-count', String(tabs.length))\n if (selectedIdx >= 0) {\n this.style.setProperty('--_indicator-index', String(selectedIdx))\n this.setAttribute('data-indicator-ready', '')\n } else {\n this.removeAttribute('data-indicator-ready')\n }\n }\n\n #select(tab: HTMLElement): void {\n if (tab.hasAttribute('disabled')) return\n const val = tab.getAttribute('value') ?? ''\n this.value = val\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: val },\n }))\n }\n\n #handleClick = (e: Event): void => {\n const tab = (e.target as HTMLElement).closest('aui-tab')\n if (tab && this.contains(tab)) {\n this.#select(tab as HTMLElement)\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-TAB') return\n\n const isVertical = this.orientation === 'vertical'\n const forward = isVertical ? 'ArrowDown' : 'ArrowRight'\n const backward = isVertical ? 'ArrowUp' : 'ArrowLeft'\n\n const tabs = this.#enabledTabs\n const idx = tabs.indexOf(target)\n if (idx < 0) return\n\n let next: number | undefined\n\n switch (e.key) {\n case forward:\n next = idx < tabs.length - 1 ? idx + 1 : 0\n break\n case backward:\n next = idx > 0 ? idx - 1 : tabs.length - 1\n break\n case 'Home':\n next = 0\n break\n case 'End':\n next = tabs.length - 1\n break\n default:\n return\n }\n\n e.preventDefault()\n const nextTab = tabs[next]\n nextTab.focus()\n this.#select(nextTab)\n }\n}\n","// ── aui-tab ──────────────────────────────────────────────────\n//\n// Individual tab trigger within aui-tabs. Lightweight — most\n// behavior is coordinated by the parent tabs component.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTab extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n selected: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare disabled: boolean\n declare selected: boolean\n\n protected override activate(): void {\n this.setAttribute('role', 'tab')\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', this.selected ? '0' : '-1')\n }\n\n this.addEffect(() => {\n this.setAttribute('aria-selected', String(this.selected))\n this.setAttribute('aria-disabled', String(this.disabled))\n this.setAttribute('tabindex', this.selected ? '0' : '-1')\n })\n }\n}\n","// ── aui-tab-panel ────────────────────────────────────────────\n//\n// Content panel associated with a tab. Shown/hidden by the\n// parent aui-tabs based on the active tab value.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTabPanel extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n active: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare active: boolean\n\n protected override activate(): void {\n this.setAttribute('role', 'tabpanel')\n\n this.addEffect(() => {\n this.setAttribute('aria-hidden', String(!this.active))\n if (!this.active) {\n this.setAttribute('tabindex', '-1')\n } else {\n this.setAttribute('tabindex', '0')\n }\n })\n }\n}\n","// ── aui-accordion ────────────────────────────────────────────\n//\n// Coordinator for aui-accordion-item children.\n// Enforces single-open behavior when `multiple` is not set.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiAccordion extends AgentElement {\n static override attributes: AttributeSchema = {\n multiple: { type: 'boolean', default: false },\n caret: { type: 'enum', values: ['leading', 'trailing'], default: 'leading' },\n }\n\n declare multiple: boolean\n declare caret: string\n\n protected override activate(): void {\n this.addEventListener('toggle', this.#handleToggle)\n }\n\n protected override dispose(): void {\n this.removeEventListener('toggle', this.#handleToggle)\n }\n\n #handleToggle = (e: Event): void => {\n if (this.multiple) return\n\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-ACCORDION-ITEM') return\n if (!target.hasAttribute('open')) return\n\n // Close all other items\n const items = this.querySelectorAll('aui-accordion-item[open]')\n for (const item of items) {\n if (item !== target) {\n item.removeAttribute('open')\n }\n }\n }\n}\n","// ── aui-accordion-item ───────────────────────────────────────\n//\n// Collapsible section — no native <details>/<summary>.\n// Uses [data-header] as the trigger and [data-content] as the\n// collapsible panel. Open/close driven by the [open] attribute.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiAccordionItem extends AgentElement {\n static override attributes: AttributeSchema = {\n open: { type: 'boolean', default: false },\n disabled: { type: 'boolean', default: false },\n }\n\n declare open: boolean\n declare disabled: boolean\n\n #header: HTMLElement | null = null\n #content: HTMLElement | null = null\n\n protected override activate(): void {\n // Find or stamp header\n this.#header = this.querySelector('[data-header]')\n if (!this.#header) {\n this.#header = document.createElement('div')\n this.#header.setAttribute('data-header', '')\n this.#header.setAttribute('role', 'button')\n this.#header.setAttribute('tabindex', '0')\n\n // Stamp chevron using aui-icon\n const chevron = document.createElement('aui-icon')\n chevron.setAttribute('name', 'caret-right')\n chevron.setAttribute('data-chevron', '')\n this.#header.appendChild(chevron)\n\n // Move [data-trigger] content into header, or use first element child\n const triggerEl = this.querySelector('[data-trigger]')\n if (triggerEl) {\n this.#header.appendChild(triggerEl)\n } else {\n // First element child becomes the trigger label\n const firstEl = Array.from(this.childNodes).find(\n c => c.nodeType === Node.ELEMENT_NODE\n ) as HTMLElement | undefined\n if (firstEl) {\n this.#header.appendChild(firstEl)\n }\n }\n\n // Wrap remaining children in content panel\n this.#content = document.createElement('div')\n this.#content.setAttribute('data-content', '')\n while (this.firstChild && this.firstChild !== this.#header) {\n this.#content.appendChild(this.firstChild)\n }\n\n this.appendChild(this.#header)\n this.appendChild(this.#content)\n } else {\n this.#content = this.querySelector('[data-content]')\n }\n\n // ARIA\n const headerId = `acc-h-${crypto.randomUUID().slice(0, 6)}`\n const contentId = `acc-c-${crypto.randomUUID().slice(0, 6)}`\n this.#header.id = headerId\n if (this.#content) {\n this.#content.id = contentId\n this.#content.setAttribute('role', 'region')\n this.#content.setAttribute('aria-labelledby', headerId)\n }\n this.#header.setAttribute('aria-controls', contentId)\n\n this.addEffect(() => {\n this.#header!.setAttribute('aria-expanded', String(this.open))\n this.#header!.setAttribute('aria-disabled', String(this.disabled))\n })\n\n this.#header.addEventListener('click', this.#handleClick)\n this.#header.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.#header?.removeEventListener('click', this.#handleClick)\n this.#header?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #toggle(): void {\n if (this.disabled) return\n this.open = !this.open\n this.dispatchEvent(new CustomEvent('toggle', { bubbles: true, detail: { open: this.open } }))\n }\n\n #handleClick = (): void => { this.#toggle() }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.#toggle()\n }\n }\n}\n","// ── aui-breadcrumb ───────────────────────────────────────────\n//\n// Breadcrumb navigation container. Sets nav + aria-label.\n// Children are aui-breadcrumb-item elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiBreadcrumb extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: 'Breadcrumb' },\n joiner: { type: 'string', default: '/' },\n }\n\n declare label: string\n declare joiner: string\n\n protected override activate(): void {\n this.setAttribute('role', 'navigation')\n\n this.addEffect(() => {\n this.setAttribute('aria-label', this.label || 'Breadcrumb')\n this.style.setProperty('--_joiner', `\"${this.joiner || '/'}\"`)\n })\n }\n}\n","// ── aui-breadcrumb-item ──────────────────────────────────────\n//\n// Individual breadcrumb link or current-page indicator.\n// Lightweight — mostly CSS-driven.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiBreadcrumbItem extends AgentElement {\n static override attributes: AttributeSchema = {\n href: { type: 'string', default: '' },\n current: { type: 'boolean', default: false },\n }\n\n declare href: string\n declare current: boolean\n\n #link: HTMLAnchorElement | null = null\n\n protected override activate(): void {\n this.addEffect(() => {\n if (this.current) {\n this.setAttribute('aria-current', 'page')\n } else {\n this.removeAttribute('aria-current')\n }\n })\n\n // Stamp <a> if href is set and not already present\n this.addEffect(() => {\n if (this.href && !this.current) {\n if (!this.#link) {\n this.#link = document.createElement('a')\n // Move text content into link\n while (this.firstChild && this.firstChild !== this.#link) {\n this.#link.appendChild(this.firstChild)\n }\n this.appendChild(this.#link)\n }\n this.#link.href = this.href\n }\n })\n }\n}\n","// ── aui-segmented-control ────────────────────────────────────\n//\n// Toggle between mutually exclusive options.\n// Floating indicator element animates between segments via\n// CSS transform — GPU-accelerated, no @property needed.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiSegmentedControl extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n }\n\n declare value: string\n declare name: string\n\n #internals: ElementInternals\n #indicator: HTMLElement | null = null\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'radiogroup'\n }\n\n protected override activate(): void {\n this.addEffect(() => {\n this.#internals.setFormValue(this.value || null)\n this.#syncSelection()\n this.#updateIndicator()\n })\n\n if (!this.value) {\n const first = this.querySelector('aui-segment:not([disabled])')\n if (first) this.value = first.getAttribute('value') ?? ''\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void {\n for (const seg of this.#segments) seg.toggleAttribute('disabled', disabled)\n }\n\n formResetCallback(): void {\n const first = this.querySelector('aui-segment:not([disabled])')\n this.value = first?.getAttribute('value') ?? ''\n }\n\n get #segments(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-segment'))\n }\n\n get #enabledSegments(): HTMLElement[] {\n return this.#segments.filter(s => !s.hasAttribute('disabled'))\n }\n\n #syncSelection(): void {\n for (const seg of this.#segments) {\n if (seg.getAttribute('value') === this.value) {\n seg.setAttribute('selected', '')\n } else {\n seg.removeAttribute('selected')\n }\n }\n }\n\n #updateIndicator(): void {\n const segs = this.#segments\n const selectedIdx = segs.findIndex(s => s.getAttribute('value') === this.value)\n\n if (selectedIdx < 0) {\n this.removeAttribute('data-indicator-ready')\n return\n }\n\n // Lazy-create floating indicator (real DOM element, not pseudo)\n if (!this.#indicator) {\n this.#indicator = document.createElement('div')\n this.#indicator.setAttribute('data-indicator', '')\n this.prepend(this.#indicator)\n }\n\n this.style.setProperty('--_segment-count', `${segs.length}`)\n this.#indicator.style.transform = `translateX(${selectedIdx * 100}%)`\n this.setAttribute('data-indicator-ready', '')\n }\n\n #select(seg: HTMLElement): void {\n if (seg.hasAttribute('disabled')) return\n this.value = seg.getAttribute('value') ?? ''\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: { value: this.value } }))\n }\n\n #handleClick = (e: Event): void => {\n const seg = (e.target as HTMLElement).closest('aui-segment')\n if (seg && this.contains(seg)) this.#select(seg as HTMLElement)\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-SEGMENT') return\n const segs = this.#enabledSegments\n const idx = segs.indexOf(target)\n if (idx < 0) return\n let next: number | undefined\n switch (e.key) {\n case 'ArrowRight': case 'ArrowDown': next = idx < segs.length - 1 ? idx + 1 : 0; break\n case 'ArrowLeft': case 'ArrowUp': next = idx > 0 ? idx - 1 : segs.length - 1; break\n case 'Home': next = 0; break\n case 'End': next = segs.length - 1; break\n default: return\n }\n e.preventDefault()\n segs[next].focus()\n this.#select(segs[next])\n }\n}\n","// ── aui-segment ──────────────────────────────────────────────\n//\n// Individual segment within aui-segmented-control.\n// Lightweight — selection coordinated by parent.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiSegment extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n selected: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare disabled: boolean\n declare selected: boolean\n\n protected override activate(): void {\n this.setAttribute('role', 'radio')\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', this.selected ? '0' : '-1')\n }\n\n this.addEffect(() => {\n this.setAttribute('aria-checked', String(this.selected))\n this.setAttribute('aria-disabled', String(this.disabled))\n this.setAttribute('tabindex', this.selected ? '0' : '-1')\n })\n }\n}\n","// ── aui-pagination ───────────────────────────────────────────\n//\n// Page navigation — no native <button> elements.\n// Stamps span[role=\"button\"] for page numbers and prev/next.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiPagination extends AgentElement {\n static override attributes: AttributeSchema = {\n page: { type: 'string', default: '1' },\n total: { type: 'string', default: '1' },\n siblings: { type: 'string', default: '1' },\n }\n\n declare page: string\n declare total: string\n declare siblings: string\n\n protected override activate(): void {\n this.setAttribute('role', 'navigation')\n this.setAttribute('aria-label', 'Pagination')\n\n this.addEffect(() => { this.#render() })\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #render(): void {\n const current = parseInt(this.page, 10) || 1\n const total = parseInt(this.total, 10) || 1\n const siblings = parseInt(this.siblings, 10) || 1\n const pages = this.#computePages(current, total, siblings)\n\n this.innerHTML = ''\n\n const prev = this.#createPageEl('‹', current - 1, current <= 1)\n prev.setAttribute('aria-label', 'Previous page')\n prev.setAttribute('data-pagination-prev', '')\n this.appendChild(prev)\n\n for (const p of pages) {\n if (p === '…') {\n const el = document.createElement('span')\n el.setAttribute('data-pagination-ellipsis', '')\n el.textContent = '…'\n this.appendChild(el)\n } else {\n const num = p as number\n const el = this.#createPageEl(String(num), num, false)\n if (num === current) {\n el.setAttribute('aria-current', 'page')\n el.setAttribute('data-pagination-current', '')\n }\n this.appendChild(el)\n }\n }\n\n const next = this.#createPageEl('›', current + 1, current >= total)\n next.setAttribute('aria-label', 'Next page')\n next.setAttribute('data-pagination-next', '')\n this.appendChild(next)\n }\n\n #createPageEl(label: string, page: number, disabled: boolean): HTMLElement {\n const el = document.createElement('span')\n el.setAttribute('role', 'button')\n el.setAttribute('tabindex', disabled ? '-1' : '0')\n el.setAttribute('data-pagination-page', String(page))\n el.textContent = label\n if (disabled) el.setAttribute('aria-disabled', 'true')\n return el\n }\n\n #computePages(current: number, total: number, siblings: number): (number | '…')[] {\n if (total <= (siblings * 2 + 5)) {\n return Array.from({ length: total }, (_, i) => i + 1)\n }\n const pages: (number | '…')[] = []\n const leftSibling = Math.max(current - siblings, 2)\n const rightSibling = Math.min(current + siblings, total - 1)\n\n pages.push(1)\n if (leftSibling > 2) pages.push('…')\n else for (let i = 2; i < leftSibling; i++) pages.push(i)\n for (let i = leftSibling; i <= rightSibling; i++) pages.push(i)\n if (rightSibling < total - 1) pages.push('…')\n else for (let i = rightSibling + 1; i < total; i++) pages.push(i)\n pages.push(total)\n return pages\n }\n\n #handleClick = (e: Event): void => {\n const el = (e.target as HTMLElement).closest('[data-pagination-page]')\n if (!el || el.getAttribute('aria-disabled') === 'true') return\n const newPage = parseInt(el.getAttribute('data-pagination-page') ?? '', 10)\n if (isNaN(newPage)) return\n this.page = String(newPage)\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: { page: newPage } }))\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n const el = e.target as HTMLElement\n if (el.hasAttribute('data-pagination-page')) { e.preventDefault(); el.click() }\n }\n }\n}\n","// ── aui-command ──────────────────────────────────────────────\n//\n// Command palette root. Composes: aui-command-input (search),\n// aui-command-list (scrollable results), aui-command-item (actions),\n// aui-command-group (grouping), aui-command-empty (no results).\n//\n// Handles: filtering, keyboard navigation (arrow/enter/escape),\n// active item tracking, and event dispatch.\n//\n// Designed to be placed inside aui-dialog for modal usage.\n\nimport { AgentElement } from '#element'\n\nexport class AuiCommand extends AgentElement {\n #activeIndex = -1\n\n protected override activate(): void {\n this.setAttribute('role', 'search')\n\n // Listen for input from command-input\n this.addEventListener('input', this.#handleInput)\n this.addEventListener('keydown', this.#handleKeydown)\n this.addEventListener('click', this.#handleClick)\n\n // Highlight first item\n requestAnimationFrame(() => {\n this.#setActive(0)\n })\n }\n\n protected override dispose(): void {\n this.removeEventListener('input', this.#handleInput)\n this.removeEventListener('keydown', this.#handleKeydown)\n this.removeEventListener('click', this.#handleClick)\n }\n\n // ── Queries ───────────────────────────────────────────\n\n get #items(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-command-item'))\n }\n\n get #visibleItems(): HTMLElement[] {\n return this.#items.filter(i => !i.hasAttribute('hidden') && !i.hasAttribute('disabled'))\n }\n\n get #inputEl(): HTMLElement | null {\n return this.querySelector('aui-command-input')\n }\n\n get #emptyEl(): HTMLElement | null {\n return this.querySelector('aui-command-empty')\n }\n\n get #listEl(): HTMLElement | null {\n return this.querySelector('aui-command-list')\n }\n\n // ── Filtering ─────────────────────────────────────────\n\n #filter(query: string): void {\n const q = query.toLowerCase().trim()\n\n for (const item of this.#items) {\n const text = (item as any).searchText ?? item.textContent?.toLowerCase() ?? ''\n const matches = !q || text.includes(q)\n item.toggleAttribute('hidden', !matches)\n }\n\n // Toggle empty state\n const visible = this.#visibleItems\n if (this.#emptyEl) {\n this.#emptyEl.toggleAttribute('hidden', visible.length > 0)\n }\n\n // Reset active to first visible\n this.#setActive(0)\n }\n\n // ── Active item tracking ──────────────────────────────\n\n #setActive(index: number): void {\n const items = this.#visibleItems\n if (items.length === 0) {\n this.#activeIndex = -1\n this.#clearActive()\n return\n }\n\n this.#clearActive()\n this.#activeIndex = Math.max(0, Math.min(index, items.length - 1))\n const item = items[this.#activeIndex]\n item.setAttribute('data-navigate-active', '')\n item.scrollIntoView({ block: 'nearest' })\n\n // Update aria-activedescendant on listbox\n if (item.id && this.#listEl) {\n this.#listEl.setAttribute('aria-activedescendant', item.id)\n }\n }\n\n #clearActive(): void {\n for (const item of this.#items) {\n item.removeAttribute('data-navigate-active')\n }\n this.#listEl?.removeAttribute('aria-activedescendant')\n }\n\n // ── Event handlers ────────────────────────────────────\n\n #handleInput = (): void => {\n const query = (this.#inputEl as any)?.query ?? ''\n this.#filter(query)\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const items = this.#visibleItems\n if (items.length === 0 && e.key !== 'Escape') return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = this.#activeIndex < items.length - 1 ? this.#activeIndex + 1 : 0\n this.#setActive(next)\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = this.#activeIndex > 0 ? this.#activeIndex - 1 : items.length - 1\n this.#setActive(prev)\n break\n }\n case 'Home': {\n e.preventDefault()\n this.#setActive(0)\n break\n }\n case 'End': {\n e.preventDefault()\n this.#setActive(items.length - 1)\n break\n }\n case 'Enter': {\n e.preventDefault()\n const active = items[this.#activeIndex]\n if (active) this.#selectItem(active)\n break\n }\n case 'Escape': {\n this.dispatchEvent(new Event('dismiss', { bubbles: true }))\n break\n }\n }\n }\n\n #handleClick = (e: Event): void => {\n const item = (e.target as HTMLElement).closest('aui-command-item') as HTMLElement | null\n if (!item || item.hasAttribute('disabled') || item.hasAttribute('hidden')) return\n this.#selectItem(item)\n }\n\n #selectItem(item: HTMLElement): void {\n const value = item.getAttribute('value') ?? item.textContent?.trim() ?? ''\n const label = item.textContent?.trim() ?? ''\n\n this.dispatchEvent(new CustomEvent('select', {\n bubbles: true,\n detail: { value, label, item },\n }))\n }\n}\n","// ── aui-command-empty ────────────────────────────────────────\n//\n// Shown when no command items match the search query.\n// CSS-only visibility via [hidden] attribute toggled by parent.\n\nimport { AgentElement } from '#element'\n\nexport class AuiCommandEmpty extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'status')\n // Start hidden — parent command will toggle\n if (!this.hasAttribute('hidden')) {\n this.setAttribute('hidden', '')\n }\n }\n}\n","// ── aui-command-group ────────────────────────────────────────\n//\n// Groups command items under a heading label.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCommandGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n }\n\n declare label: string\n\n protected override activate(): void {\n this.setAttribute('role', 'group')\n\n // Stamp heading if label is set\n let heading = this.querySelector('[data-heading]')\n if (!heading && this.label) {\n heading = document.createElement('span')\n heading.setAttribute('data-heading', '')\n heading.id = `cmdg-${crypto.randomUUID().slice(0, 6)}`\n this.prepend(heading)\n }\n\n this.addEffect(() => {\n const h = this.querySelector('[data-heading]')\n if (h) {\n h.textContent = this.label\n this.setAttribute('aria-labelledby', h.id)\n }\n })\n }\n}\n","// ── aui-command-input ────────────────────────────────────────\n//\n// Search input for the command palette.\n// Uses contenteditable span — no native <input>.\n// Fires 'input' events that the parent aui-command listens to.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCommandInput extends AgentElement {\n static override attributes: AttributeSchema = {\n placeholder: { type: 'string', default: 'Search…' },\n }\n\n declare placeholder: string\n\n #surface: HTMLElement | null = null\n\n get query(): string {\n return this.#surface?.textContent?.trim() ?? ''\n }\n\n set query(val: string) {\n if (this.#surface) this.#surface.textContent = val\n this.#updateEmptyState()\n }\n\n protected override activate(): void {\n this.#surface = this.querySelector('[data-surface]')\n if (!this.#surface) {\n this.#surface = document.createElement('span')\n this.#surface.setAttribute('data-surface', '')\n this.#surface.setAttribute('contenteditable', 'plaintext-only')\n this.#surface.setAttribute('tabindex', '0')\n this.#surface.setAttribute('role', 'searchbox')\n this.#surface.setAttribute('aria-label', 'Search commands')\n this.appendChild(this.#surface)\n }\n\n this.addEffect(() => {\n this.#surface?.setAttribute('data-placeholder', this.placeholder || 'Search…')\n })\n\n this.#updateEmptyState()\n\n this.#surface.addEventListener('input', this.#handleInput)\n this.#surface.addEventListener('keydown', this.#handleKeydown)\n this.#surface.addEventListener('focus', this.#handleFocus)\n }\n\n protected override dispose(): void {\n this.#surface?.removeEventListener('input', this.#handleInput)\n this.#surface?.removeEventListener('keydown', this.#handleKeydown)\n this.#surface?.removeEventListener('focus', this.#handleFocus)\n }\n\n focus(options?: FocusOptions): void {\n this.#surface?.focus(options)\n }\n\n clear(): void {\n if (this.#surface) this.#surface.textContent = ''\n this.#updateEmptyState()\n this.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n #updateEmptyState(): void {\n this.toggleAttribute('data-input-empty', !this.#surface?.textContent?.trim())\n }\n\n #handleInput = (): void => {\n this.#updateEmptyState()\n this.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n // Block Enter (single-line), let ArrowDown/Up/Escape bubble to parent\n if (e.key === 'Enter') {\n e.preventDefault()\n }\n }\n\n #handleFocus = (): void => {\n // Reset caret if empty\n if (!this.#surface?.textContent?.trim()) {\n const sel = window.getSelection()\n sel?.setPosition(this.#surface!, 0)\n }\n }\n}\n","// ── aui-command-item ─────────────────────────────────────────\n//\n// Selectable item within aui-command-list. Lightweight — most\n// behavior coordinated by the parent command component.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCommandItem extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n keywords: { type: 'string', default: '' },\n }\n\n declare value: string\n declare disabled: boolean\n declare keywords: string\n\n /** Combined search text for filtering. */\n get searchText(): string {\n return `${this.textContent?.trim() ?? ''} ${this.value} ${this.keywords}`.toLowerCase()\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'option')\n\n this.addEffect(() => {\n this.setAttribute('aria-disabled', String(this.disabled))\n })\n }\n}\n","// ── aui-command-list ─────────────────────────────────────────\n//\n// Scrollable container for command items and groups.\n\nimport { AgentElement } from '#element'\n\nexport class AuiCommandList extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'listbox')\n }\n}\n","// ── aui-panes ────────────────────────────────────────────────\n//\n// Split-pane layout with pointer-proximity resize between children.\n// No handle elements — hit-tests pointer position against pane\n// boundaries and renders accent bar via ::after on the hovered pane.\n// Light DOM. Children should be <aui-pane> elements.\n//\n// Resize algorithm based on VS Code's SplitView:\n// - Cascade: delta propagates through all panes in each direction\n// - Priority: high-priority panes resize first, low-priority last\n// - Proportional: container resize maintains pane proportions\n// - Constraints: min/max sizes respected at every step\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nconst Priority = { High: 0, Normal: 1, Low: 2 } as const\ntype Priority = (typeof Priority)[keyof typeof Priority]\n\nconst clamp = (v: number, min: number, max: number): number =>\n Math.min(max, Math.max(min, v))\n\n/** Resolve --aui-sidebar-width-collapsed to pixels via a temporary element. */\nlet cachedCollapsedWidth: number | null = null\nfunction resolveCollapsedWidth(el: HTMLElement): number {\n if (cachedCollapsedWidth !== null) return cachedCollapsedWidth\n const probe = document.createElement('div')\n probe.style.cssText = 'position:absolute;visibility:hidden;width:var(--aui-sidebar-width-collapsed,2.75rem)'\n el.appendChild(probe)\n cachedCollapsedWidth = probe.offsetWidth || 44\n probe.remove()\n return cachedCollapsedWidth\n}\n\nexport class AuiPanes extends AgentElement {\n static override attributes: AttributeSchema = {\n direction: { type: 'enum', values: ['vertical'], default: '' },\n }\n\n static override deferChildren = true\n\n declare direction: string\n\n #observer: MutationObserver | null = null\n #resizeObserver: ResizeObserver | null = null\n\n // Hover state\n #hoverPane: HTMLElement | null = null\n\n // Resize state\n #activeIndex = -1\n #startSizes: number[] = []\n #panes: HTMLElement[] = []\n #startX = 0\n #startY = 0\n\n // Drag pointer ID (for releasing capture)\n #dragPointerId = -1\n\n // Pixel-based sizes — source of truth during/after resize\n #sizes: number[] = []\n\n // Proportional layout\n #proportions: number[] | null = null\n\n get isVertical(): boolean {\n return this.direction === 'vertical'\n }\n\n protected override activate(): void {\n this.addEventListener('pointermove', this.#onHover)\n this.addEventListener('pointerleave', this.#onLeave)\n // Capture phase so we intercept before children\n this.addEventListener('pointerdown', this.#onPointerDown, true)\n\n this.#initSizes()\n\n this.#observer = new MutationObserver(this.#onChildChange)\n this.#observer.observe(this, {\n childList: true,\n attributes: true,\n attributeFilter: ['hidden', 'minimized', 'priority'],\n subtree: true,\n })\n\n // Observe container resize for proportional layout\n this.#resizeObserver = new ResizeObserver(this.#onContainerResize)\n this.#resizeObserver.observe(this)\n\n // React to direction changes\n this.addEffect(() => {\n // Read direction to track it\n void this.direction\n this.#initSizes()\n })\n }\n\n protected override dispose(): void {\n this.#clearHover()\n this.#cleanupDrag()\n this.#observer?.disconnect()\n this.#observer = null\n this.#resizeObserver?.disconnect()\n this.#resizeObserver = null\n this.removeEventListener('pointermove', this.#onHover)\n this.removeEventListener('pointerleave', this.#onLeave)\n this.removeEventListener('pointerdown', this.#onPointerDown, true)\n }\n\n // ── Pane queries ──\n\n #getVisibleChildren(): HTMLElement[] {\n return Array.from(this.children).filter(\n c => c instanceof HTMLElement && !c.hidden\n ) as HTMLElement[]\n }\n\n #getMinSize(el: HTMLElement): number {\n const v = el.getAttribute('size-min')\n return v ? Number(v) : resolveCollapsedWidth(el)\n }\n\n #getMaxSize(el: HTMLElement): number {\n const v = el.getAttribute('size-max')\n return v ? Number(v) : Infinity\n }\n\n #getPriority(el: HTMLElement): Priority {\n const v = el.getAttribute('priority')\n if (v === 'high') return Priority.High\n if (v === 'low') return Priority.Low\n return Priority.Normal\n }\n\n // ── Size management ──\n\n /** Read current pixel sizes from layout and establish initial state. */\n #initSizes(): void {\n const panes = this.#getVisibleChildren()\n const isVertical = this.isVertical\n\n // Apply declared sizes first\n for (const pane of panes) {\n if (pane.hasAttribute('minimized')) continue\n const fixedSize = pane.getAttribute('fixed-size')\n const basis = pane.getAttribute('basis')\n if (fixedSize && fixedSize !== 'auto') {\n pane.style.flex = `0 1 ${fixedSize}`\n } else if (basis) {\n pane.style.flex = `1 1 ${basis}`\n } else {\n pane.style.removeProperty('flex')\n pane.style.removeProperty('flex-basis')\n }\n }\n\n // Force layout, then read pixel sizes\n const sizes = panes.map(p => {\n const rect = p.getBoundingClientRect()\n return isVertical ? rect.height : rect.width\n })\n\n this.#sizes = sizes\n this.#panes = panes\n this.#saveProportions()\n this.#applySizes()\n }\n\n /** Apply pixel sizes as flex values. */\n #applySizes(): void {\n const panes = this.#getVisibleChildren()\n const total = this.#sizes.reduce((s, v) => s + v, 0)\n if (total <= 0) return\n\n for (let i = 0; i < panes.length; i++) {\n if (panes[i].hasAttribute('minimized')) continue\n const size = this.#sizes[i] ?? 0\n // Use flex-grow proportional to pixel size, flex-basis 0\n panes[i].style.flex = `${size} 1 0px`\n }\n }\n\n /** Save current proportions for proportional container resize. */\n #saveProportions(): void {\n const total = this.#sizes.reduce((s, v) => s + v, 0)\n if (total <= 0) {\n this.#proportions = null\n return\n }\n this.#proportions = this.#sizes.map(s => s / total)\n }\n\n // ── Cascade resize algorithm ──\n\n /**\n * Resize panes at the given sash index by delta pixels.\n * Delta cascades through \"before\" panes (index -> 0) and\n * \"after\" panes (index+1 -> end), respecting min/max constraints\n * and priority ordering.\n */\n #resize(index: number, delta: number, sizes: number[]): number[] {\n const panes = this.#panes\n const result = [...sizes]\n\n // Build index arrays for each side of the sash\n const beforeIndexes: number[] = []\n for (let i = index; i >= 0; i--) beforeIndexes.push(i)\n const afterIndexes: number[] = []\n for (let i = index + 1; i < panes.length; i++) afterIndexes.push(i)\n\n // Sort by priority: high-priority panes consume delta first\n const sortByPriority = (indexes: number[]): number[] => {\n const high: number[] = []\n const normal: number[] = []\n const low: number[] = []\n for (const i of indexes) {\n const p = this.#getPriority(panes[i])\n if (p === Priority.High) high.push(i)\n else if (p === Priority.Low) low.push(i)\n else normal.push(i)\n }\n return [...high, ...normal, ...low]\n }\n\n const sortedBefore = sortByPriority(beforeIndexes)\n const sortedAfter = sortByPriority(afterIndexes)\n\n // Calculate how much delta each side can absorb\n let minDelta = 0\n let maxDelta = 0\n for (const i of sortedBefore) {\n minDelta += this.#getMinSize(panes[i]) - sizes[i]\n maxDelta += this.#getMaxSize(panes[i]) - sizes[i]\n }\n let minDeltaAfter = 0\n let maxDeltaAfter = 0\n for (const i of sortedAfter) {\n minDeltaAfter += sizes[i] - this.#getMaxSize(panes[i])\n maxDeltaAfter += sizes[i] - this.#getMinSize(panes[i])\n }\n\n // Clamp delta to the intersection of both sides' constraints\n const effectiveMin = Math.max(minDelta, minDeltaAfter)\n const effectiveMax = Math.min(maxDelta, maxDeltaAfter)\n delta = clamp(delta, effectiveMin, effectiveMax)\n\n // Distribute delta to \"before\" panes (they grow with positive delta)\n let remaining = delta\n for (const i of sortedBefore) {\n const newSize = clamp(\n sizes[i] + remaining,\n this.#getMinSize(panes[i]),\n this.#getMaxSize(panes[i]),\n )\n const consumed = newSize - sizes[i]\n remaining -= consumed\n result[i] = newSize\n }\n\n // Distribute negative delta to \"after\" panes (they shrink with positive delta)\n remaining = delta\n for (const i of sortedAfter) {\n const newSize = clamp(\n sizes[i] - remaining,\n this.#getMinSize(panes[i]),\n this.#getMaxSize(panes[i]),\n )\n const consumed = sizes[i] - newSize\n remaining -= consumed\n result[i] = newSize\n }\n\n return result\n }\n\n /**\n * After any size change, distribute leftover space (positive or negative)\n * across all panes in priority order.\n */\n #distributeEmptySpace(sizes: number[]): number[] {\n const panes = this.#panes\n const result = [...sizes]\n const containerSize = this.#getContainerSize()\n let emptyDelta = containerSize - result.reduce((s, v) => s + v, 0)\n\n if (Math.abs(emptyDelta) < 0.5) return result\n\n // Build priority-sorted index list\n const high: number[] = []\n const normal: number[] = []\n const low: number[] = []\n for (let i = 0; i < panes.length; i++) {\n const p = this.#getPriority(panes[i])\n if (p === Priority.High) high.push(i)\n else if (p === Priority.Low) low.push(i)\n else normal.push(i)\n }\n const sorted = [...high, ...normal, ...low]\n\n for (let i = 0; Math.abs(emptyDelta) >= 0.5 && i < sorted.length; i++) {\n const idx = sorted[i]\n const pane = panes[idx]\n const newSize = clamp(\n result[idx] + emptyDelta,\n this.#getMinSize(pane),\n this.#getMaxSize(pane),\n )\n const consumed = newSize - result[idx]\n emptyDelta -= consumed\n result[idx] = newSize\n }\n\n return result\n }\n\n #getContainerSize(): number {\n const rect = this.getBoundingClientRect()\n return this.isVertical ? rect.height : rect.width\n }\n\n // ── Proportional container resize ──\n\n #lastContainerSize = 0\n\n #onContainerResize = (): void => {\n // Skip during active drag\n if (this.#activeIndex >= 0) return\n\n const containerSize = this.#getContainerSize()\n if (containerSize <= 0) return\n\n // Skip initial or no-change\n if (this.#lastContainerSize === 0) {\n this.#lastContainerSize = containerSize\n return\n }\n if (Math.abs(containerSize - this.#lastContainerSize) < 1) return\n this.#lastContainerSize = containerSize\n\n const panes = this.#getVisibleChildren()\n if (panes.length === 0) return\n this.#panes = panes\n\n if (this.#proportions && this.#proportions.length === panes.length) {\n // Proportional resize: scale each pane by its saved proportion\n const newSizes = this.#proportions.map((p, i) =>\n clamp(\n Math.round(p * containerSize),\n this.#getMinSize(panes[i]),\n this.#getMaxSize(panes[i]),\n )\n )\n this.#sizes = this.#distributeEmptySpace(newSizes)\n } else {\n // No proportions saved — distribute empty space\n this.#sizes = this.#distributeEmptySpace(this.#sizes)\n }\n\n this.#applySizes()\n }\n\n // ── Boundary hit-testing ──\n\n #hitBoundary(clientX: number, clientY: number): number {\n const panes = this.#getVisibleChildren()\n if (panes.length < 2) return -1\n const isVertical = this.isVertical\n const threshold = 8\n\n for (let i = 0; i < panes.length - 1; i++) {\n const rect = panes[i].getBoundingClientRect()\n const edge = isVertical ? rect.bottom : rect.right\n const pos = isVertical ? clientY : clientX\n if (Math.abs(pos - edge) <= threshold) return i\n }\n return -1\n }\n\n // ── Hover ──\n\n #onHover = (e: PointerEvent): void => {\n if (this.#activeIndex >= 0) return\n const index = this.#hitBoundary(e.clientX, e.clientY)\n const panes = this.#getVisibleChildren()\n\n if (index >= 0) {\n const pane = panes[index]\n if (this.#hoverPane !== pane) {\n this.#clearHover()\n const edge = this.isVertical ? 'bottom' : 'right'\n pane.setAttribute('data-panes-edge-near', edge)\n this.#hoverPane = pane\n }\n } else {\n this.#clearHover()\n }\n }\n\n #onLeave = (): void => {\n if (this.#activeIndex >= 0) return\n this.#clearHover()\n }\n\n #clearHover(): void {\n if (this.#hoverPane) {\n this.#hoverPane.removeAttribute('data-panes-edge-near')\n this.#hoverPane = null\n }\n }\n\n // ── Drag resize ──\n\n #onPointerDown = (e: PointerEvent): void => {\n if (e.button !== 0) return\n const index = this.#hitBoundary(e.clientX, e.clientY)\n if (index < 0) return\n\n e.preventDefault()\n e.stopPropagation()\n this.#clearHover()\n\n this.#activeIndex = index\n this.#panes = this.#getVisibleChildren()\n this.#startX = e.clientX\n this.#startY = e.clientY\n\n // Snapshot current sizes\n const isVertical = this.isVertical\n this.#startSizes = this.#panes.map(p => {\n const rect = p.getBoundingClientRect()\n return isVertical ? rect.height : rect.width\n })\n this.#sizes = [...this.#startSizes]\n\n this.setAttribute('data-panes-resizing', '')\n const edge = isVertical ? 'bottom' : 'right'\n this.#panes[index].setAttribute('data-panes-edge-active', edge)\n\n this.#dragPointerId = e.pointerId\n this.setPointerCapture(e.pointerId)\n document.addEventListener('pointermove', this.#onDragMove)\n document.addEventListener('pointerup', this.#onDragEnd)\n document.addEventListener('pointercancel', this.#onDragCancel)\n document.addEventListener('keydown', this.#onKeyDown)\n }\n\n #onDragMove = (e: PointerEvent): void => {\n if (this.#activeIndex < 0) return\n\n const delta = this.isVertical\n ? e.clientY - this.#startY\n : e.clientX - this.#startX\n\n // Cascade resize from start sizes\n this.#sizes = this.#resize(this.#activeIndex, delta, this.#startSizes)\n this.#applySizes()\n }\n\n #onDragEnd = (): void => {\n if (this.#activeIndex < 0) return\n\n // Read final sizes from layout\n const isVertical = this.isVertical\n this.#sizes = this.#panes.map(p => {\n const rect = p.getBoundingClientRect()\n return isVertical ? rect.height : rect.width\n })\n this.#saveProportions()\n\n this.dispatchEvent(new CustomEvent('aui:panes-resize', {\n bubbles: true,\n composed: true,\n detail: {\n sizes: this.#sizes,\n index: this.#activeIndex,\n },\n }))\n\n this.#cleanupDrag()\n }\n\n #onDragCancel = (): void => {\n if (this.#activeIndex < 0) return\n // Revert to start sizes\n this.#sizes = [...this.#startSizes]\n this.#applySizes()\n this.#cleanupDrag()\n }\n\n #onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.#activeIndex >= 0) {\n e.preventDefault()\n this.#onDragCancel()\n }\n }\n\n #cleanupDrag(): void {\n if (this.#activeIndex >= 0) {\n this.#panes[this.#activeIndex]?.removeAttribute('data-panes-edge-active')\n }\n if (this.#dragPointerId >= 0) {\n try { this.releasePointerCapture(this.#dragPointerId) } catch { /* already released */ }\n this.#dragPointerId = -1\n }\n this.#activeIndex = -1\n this.#startSizes = []\n this.removeAttribute('data-panes-resizing')\n document.removeEventListener('pointermove', this.#onDragMove)\n document.removeEventListener('pointerup', this.#onDragEnd)\n document.removeEventListener('pointercancel', this.#onDragCancel)\n document.removeEventListener('keydown', this.#onKeyDown)\n }\n\n // ── Child mutation observer (debounced) ──\n\n #pendingDistribute = 0\n\n #onChildChange = (mutations: MutationRecord[]): void => {\n // Only react to changes on direct children (not deep descendants)\n let relevant = false\n for (const m of mutations) {\n const target = m.target as HTMLElement\n if (m.type === 'childList' && target === (this as unknown as HTMLElement)) { relevant = true; break }\n if (m.type === 'attributes' && target.parentElement === this) { relevant = true; break }\n }\n if (!relevant) return\n\n if (this.#pendingDistribute) return\n this.#pendingDistribute = requestAnimationFrame(() => {\n this.#pendingDistribute = 0\n this.#initSizes()\n })\n }\n}\n","// ── aui-pane ─────────────────────────────────────────────────\n//\n// Individual pane within <aui-panes>. Light DOM.\n// If `label` is set and no <aui-header> child exists, stamps a\n// compact header with label, optional icon, and close/minimize buttons.\n//\n// Attributes: label, icon, closeable, minimizable, minimized,\n// size, basis, priority, tabs, collapse\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nconst headerTpl = document.createElement('template')\nheaderTpl.innerHTML = `\n <aui-header data-pane-header>\n <aui-pane-label></aui-pane-label>\n </aui-header>\n`\n\nconst headerBtnTpl = document.createElement('template')\nheaderBtnTpl.innerHTML = `<aui-button ghost></aui-button>`\n\nexport class AuiPane extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n icon: { type: 'string', default: '' },\n closeable: { type: 'boolean', default: false },\n minimizable: { type: 'boolean', default: false },\n minimized: { type: 'boolean', default: false },\n 'fixed-size': { type: 'string', default: '' },\n basis: { type: 'string', default: '' },\n priority: { type: 'enum', values: ['high', 'normal', 'low'], default: 'normal' },\n tabs: { type: 'boolean', default: false },\n collapse: { type: 'string', default: '' },\n }\n\n declare label: string\n declare icon: string\n declare closeable: boolean\n declare minimizable: boolean\n declare minimized: boolean\n declare 'fixed-size': string\n declare basis: string\n declare priority: string\n declare tabs: boolean\n declare collapse: string\n\n // Stamped header references\n #stampedHeader: HTMLElement | null = null\n #labelEl: HTMLElement | null = null\n #iconEl: HTMLElement | null = null\n #minimizeBtn: HTMLElement | null = null\n #closeBtn: HTMLElement | null = null\n\n // Tabs\n #tabsEl: HTMLElement | null = null\n\n // Collapse state (internal)\n #collapsed = false\n\n protected override activate(): void {\n this.#stampHeader()\n this.#wrapContent()\n this.#syncSize()\n\n // Label effect\n this.addEffect(() => {\n const label = this.label\n if (this.#labelEl) this.#labelEl.textContent = label\n\n // Stamp/remove header when label changes\n if (label && !this.#stampedHeader) this.#stampHeader()\n else if (!label && this.#stampedHeader) this.#removeStampedHeader()\n })\n\n // Minimized effect\n this.addEffect(() => {\n const min = this.minimized\n if (this.#minimizeBtn) {\n const icon = this.#minimizeBtn.querySelector('aui-icon')\n if (icon) icon.setAttribute('icon', min ? 'caret-up' : 'minus')\n }\n })\n\n // Fixed-size effect\n this.addEffect(() => {\n void this['fixed-size']\n this.#syncSize()\n })\n\n // Basis effect\n this.addEffect(() => {\n const basis = this.basis\n if (basis) this.style.flexBasis = basis\n else this.style.removeProperty('flex-basis')\n })\n\n // Icon effect\n this.addEffect(() => {\n const val = this.icon\n this.#syncIcon(val || null)\n })\n\n // Closeable effect\n this.addEffect(() => {\n this.#syncCloseButton(this.closeable)\n })\n\n // Minimizable effect\n this.addEffect(() => {\n this.#syncMinimizeButton(this.minimizable)\n })\n\n // Tabs effect\n this.addEffect(() => {\n if (this.tabs && !this.#tabsEl) this.#stampTabs()\n else if (!this.tabs && this.#tabsEl) this.#removeTabs()\n })\n\n // Collapse effect\n this.addEffect(() => {\n // collapse attr just configures direction — actual collapsing is via method\n void this.collapse\n })\n }\n\n // ── Public methods ──\n\n /** Collapse the pane to a thin strip. */\n collapsePane(): void {\n this.#collapsed = true\n this.setAttribute('collapsed', '')\n this.dispatchEvent(new CustomEvent('aui:pane-collapse', {\n bubbles: true,\n composed: true,\n detail: { pane: this },\n }))\n }\n\n /** Restore from collapsed state. */\n expand(): void {\n this.#collapsed = false\n this.removeAttribute('collapsed')\n this.dispatchEvent(new CustomEvent('aui:pane-expand', {\n bubbles: true,\n composed: true,\n detail: { pane: this },\n }))\n }\n\n /** Close the pane. Dispatches cancelable `aui:pane-close`. */\n close(): void {\n const event = new CustomEvent('aui:pane-close', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: { pane: this },\n })\n if (this.dispatchEvent(event)) {\n this.hidden = true\n }\n }\n\n /** Minimize the pane to header-only. */\n minimize(): void {\n this.minimized = true\n this.dispatchEvent(new CustomEvent('aui:pane-minimize', {\n bubbles: true,\n composed: true,\n detail: { pane: this },\n }))\n }\n\n /** Restore from minimized state. */\n restore(): void {\n this.minimized = false\n this.dispatchEvent(new CustomEvent('aui:pane-restore', {\n bubbles: true,\n composed: true,\n detail: { pane: this },\n }))\n }\n\n // ── Size sync ──\n\n #syncSize(): void {\n const size = this['fixed-size']\n if (size && size !== 'auto') {\n this.style.flex = `0 1 ${size}`\n } else {\n this.style.removeProperty('flex')\n }\n }\n\n // ── Content wrapping ──\n\n /** Wrap non-structural children in <aui-content>. */\n #wrapContent(): void {\n // Skip if already wrapped\n if (this.querySelector(':scope > aui-content')) return\n\n const content = document.createElement('aui-content')\n const toWrap: Node[] = []\n\n for (const child of Array.from(this.childNodes)) {\n // Keep headers, slotted elements, and the stamped header in place\n if (child instanceof HTMLElement) {\n if (child.tagName === 'AUI-HEADER' || child.hasAttribute('data-pane-header')) continue\n if (child.hasAttribute('slot')) continue\n if (child.tagName === 'AUI-CANVAS') continue\n }\n toWrap.push(child)\n }\n\n if (toWrap.length === 0) return\n\n for (const node of toWrap) content.appendChild(node)\n this.appendChild(content)\n }\n\n // ── Header stamping ──\n\n #stampHeader(): void {\n if (this.querySelector(':scope > aui-header')) return\n const label = this.label\n if (!label) return\n\n const fragment = headerTpl.content.cloneNode(true) as DocumentFragment\n const header = fragment.firstElementChild as HTMLElement\n const labelEl = header.querySelector('aui-pane-label') as HTMLElement\n\n labelEl.textContent = label\n this.#labelEl = labelEl\n\n // Icon (optional)\n const icon = this.icon\n if (icon) {\n const iconEl = document.createElement('aui-icon')\n iconEl.setAttribute('icon', icon)\n header.insertBefore(iconEl, labelEl)\n this.#iconEl = iconEl\n }\n\n // Minimize button\n if (this.minimizable) {\n this.#minimizeBtn = this.#createHeaderButton(\n this.minimized ? 'caret-up' : 'minus',\n () => { if (this.minimized) this.restore(); else this.minimize() },\n )\n header.appendChild(this.#minimizeBtn)\n }\n\n // Close button\n if (this.closeable) {\n this.#closeBtn = this.#createHeaderButton('x', () => this.close())\n header.appendChild(this.#closeBtn)\n }\n\n this.prepend(header)\n this.#stampedHeader = header\n }\n\n #removeStampedHeader(): void {\n if (!this.#stampedHeader) return\n this.#stampedHeader.remove()\n this.#stampedHeader = null\n this.#labelEl = null\n this.#iconEl = null\n this.#minimizeBtn = null\n this.#closeBtn = null\n }\n\n #createHeaderButton(iconName: string, handler: () => void): HTMLElement {\n const btn = headerBtnTpl.content.firstElementChild!.cloneNode(true) as HTMLElement\n btn.setAttribute('icon', iconName)\n btn.setAttribute('slot', 'trailing')\n btn.addEventListener('click', handler)\n return btn\n }\n\n #syncIcon(val: string | null): void {\n if (!this.#stampedHeader) return\n if (val && this.#iconEl) {\n this.#iconEl.setAttribute('icon', val)\n } else if (val && !this.#iconEl) {\n const iconEl = document.createElement('aui-icon')\n iconEl.setAttribute('icon', val)\n this.#stampedHeader.prepend(iconEl)\n this.#iconEl = iconEl\n } else if (!val && this.#iconEl) {\n this.#iconEl.remove()\n this.#iconEl = null\n }\n }\n\n #syncCloseButton(show: boolean): void {\n if (!this.#stampedHeader) return\n if (show && !this.#closeBtn) {\n this.#closeBtn = this.#createHeaderButton('x', () => this.close())\n this.#stampedHeader.appendChild(this.#closeBtn)\n } else if (!show && this.#closeBtn) {\n this.#closeBtn.remove()\n this.#closeBtn = null\n }\n }\n\n #syncMinimizeButton(show: boolean): void {\n if (!this.#stampedHeader) return\n if (show && !this.#minimizeBtn) {\n this.#minimizeBtn = this.#createHeaderButton(\n this.minimized ? 'caret-up' : 'minus',\n () => { if (this.minimized) this.restore(); else this.minimize() },\n )\n if (this.#closeBtn) {\n this.#stampedHeader.insertBefore(this.#minimizeBtn, this.#closeBtn)\n } else {\n this.#stampedHeader.appendChild(this.#minimizeBtn)\n }\n } else if (!show && this.#minimizeBtn) {\n this.#minimizeBtn.remove()\n this.#minimizeBtn = null\n }\n }\n\n // ── Tabs ──\n\n #stampTabs(): void {\n if (this.#tabsEl) return\n this.#tabsEl = document.createElement('aui-tabs')\n\n // Find children with data-tab-id and create tabs\n for (const child of this.children) {\n if (!(child instanceof HTMLElement)) continue\n const tabId = child.getAttribute('data-tab-id')\n const tabLabel = child.getAttribute('data-tab-label')\n if (!tabId || !tabLabel) continue\n\n const tab = document.createElement('aui-tab')\n tab.setAttribute('label', tabLabel)\n tab.setAttribute('data-for', tabId)\n this.#tabsEl.appendChild(tab)\n }\n\n // Listen for tab changes\n this.#tabsEl.addEventListener('change', (e: Event) => {\n const detail = (e as CustomEvent).detail as { tab?: HTMLElement }\n const tabId = detail.tab?.getAttribute('data-for')\n if (!tabId) return\n this.#showTabContent(tabId)\n })\n\n // Insert after header\n const header = this.querySelector(':scope > aui-header, :scope > [data-pane-header]')\n if (header) header.after(this.#tabsEl)\n else this.prepend(this.#tabsEl)\n\n // Show first tab's content\n queueMicrotask(() => {\n const firstTab = this.#tabsEl?.querySelector('aui-tab')\n const firstId = firstTab?.getAttribute('data-for')\n if (firstId) this.#showTabContent(firstId)\n })\n }\n\n #removeTabs(): void {\n this.#tabsEl?.remove()\n this.#tabsEl = null\n // Show all tab content again\n for (const child of this.children) {\n if (child instanceof HTMLElement && child.hasAttribute('data-tab-id')) {\n child.removeAttribute('hidden')\n }\n }\n }\n\n #showTabContent(activeId: string): void {\n for (const child of this.children) {\n if (!(child instanceof HTMLElement)) continue\n const tabId = child.getAttribute('data-tab-id')\n if (!tabId) continue\n if (tabId === activeId) child.removeAttribute('hidden')\n else child.setAttribute('hidden', '')\n }\n }\n\n protected override dispose(): void {\n this.#removeStampedHeader()\n this.#removeTabs()\n }\n}\n","// ── aui-table ────────────────────────────────────────────────\n//\n// CSS grid table. Uses subgrid for aligned columns.\n//\n// Supports two modes:\n// 1. Declarative HTML — static rows via <aui-table-head>/<aui-table-body>\n// 2. Data-driven — columns via <aui-table-column>, data via <script> or src\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\ninterface ColumnDef {\n key: string\n label: string\n sortable: boolean\n filterable: boolean\n width: string\n type: 'string' | 'number' | 'date'\n align: 'start' | 'center' | 'end'\n}\n\ntype SortDir = 'asc' | 'desc' | 'none'\n\nexport class AuiTable extends AgentElement {\n static override attributes: AttributeSchema = {\n cols: { type: 'string', default: '' },\n src: { type: 'string', default: '' },\n selectable: { type: 'boolean', default: false },\n sortable: { type: 'boolean', default: false },\n searchable: { type: 'boolean', default: false },\n paginate: { type: 'string', default: '0' },\n }\n\n declare cols: string\n declare src: string\n declare selectable: boolean\n declare sortable: boolean\n declare searchable: boolean\n declare paginate: string\n\n #columns: ColumnDef[] = []\n #data: Record<string, unknown>[] = []\n #sortKey = ''\n #sortDir: SortDir = 'none'\n #searchTerm = ''\n #currentPage = 1\n #selectedIds = new Set<string>()\n #dataMode = false\n\n // Stable DOM refs (created once, never destroyed)\n #toolbar: HTMLElement | null = null\n #headEl: HTMLElement | null = null\n #bodyEl: HTMLElement | null = null\n #footerEl: HTMLElement | null = null\n #searchDebounceId: ReturnType<typeof setTimeout> | null = null\n\n get selectedIds(): Set<string> { return new Set(this.#selectedIds) }\n get dataMode(): boolean { return this.#dataMode }\n\n setData(data: Record<string, unknown>[]): void {\n this.#data = [...data]\n this.#currentPage = 1\n this.#selectedIds.clear()\n this.#render()\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'table')\n this.#columns = this.#parseColumns()\n this.#dataMode = this.#columns.length > 0\n\n if (!this.#dataMode) {\n // Declarative mode\n this.addEffect(() => {\n if (this.cols) this.style.gridTemplateColumns = this.cols\n })\n return\n }\n\n // Data mode\n this.#loadData()\n this.#buildStructure()\n this.#render()\n\n // Event delegation — single handler survives re-renders\n this.addEventListener('click', this.#onClick)\n\n // Src changes\n this.addEffect(() => {\n if (this.src) this.#fetchData(this.src)\n })\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#onClick)\n if (this.#searchDebounceId) clearTimeout(this.#searchDebounceId)\n }\n\n // ── Column parsing ─────────────────────────────────────────\n\n #parseColumns(): ColumnDef[] {\n return Array.from(this.querySelectorAll('aui-table-column')).map(el => ({\n key: el.getAttribute('key') || '',\n label: el.getAttribute('label') || el.getAttribute('key') || '',\n sortable: el.hasAttribute('sortable'),\n filterable: el.hasAttribute('filterable'),\n width: el.getAttribute('width') || '1fr',\n type: (el.getAttribute('type') as ColumnDef['type']) || 'string',\n align: (el.getAttribute('align') as ColumnDef['align']) || 'start',\n })).filter(c => c.key)\n }\n\n // ── Data loading ───────────────────────────────────────────\n\n #loadData(): void {\n const script = this.querySelector('script[type=\"application/json\"]')\n if (script?.textContent) {\n try {\n const parsed = JSON.parse(script.textContent)\n if (Array.isArray(parsed)) this.#data = parsed\n } catch { /* ignore */ }\n return\n }\n if (this.src) this.#fetchData(this.src)\n }\n\n async #fetchData(url: string): Promise<void> {\n try {\n const res = await fetch(url)\n if (!res.ok) return\n const json = await res.json()\n this.#data = Array.isArray(json) ? json : json?.data ?? []\n this.#currentPage = 1\n this.#selectedIds.clear()\n this.#render()\n } catch { /* ignore */ }\n }\n\n // ── Structure (built once) ─────────────────────────────────\n\n #buildStructure(): void {\n // Remove non-config children\n for (const child of [...this.children]) {\n const tag = child.tagName?.toLowerCase()\n if (tag !== 'aui-table-column' && tag !== 'script') child.remove()\n }\n\n // Grid columns\n const widths = this.#columns.map(c => c.width)\n if (this.selectable) widths.unshift('2.5rem')\n this.style.gridTemplateColumns = widths.join(' ')\n\n // Search toolbar\n if (this.searchable) {\n const toolbar = document.createElement('div')\n toolbar.setAttribute('data-table-toolbar', '')\n const input = document.createElement('aui-input')\n input.setAttribute('placeholder', 'Search...')\n input.setAttribute('type', 'search')\n input.setAttribute('width', 'full')\n toolbar.appendChild(input)\n this.#toolbar = toolbar\n this.appendChild(toolbar)\n\n // Listen for input events\n const onSearch = () => {\n if (this.#searchDebounceId) clearTimeout(this.#searchDebounceId)\n this.#searchDebounceId = setTimeout(() => {\n this.#searchTerm = ((input as any).value || '').trim()\n this.#currentPage = 1\n this.#render()\n }, 200)\n }\n input.addEventListener('input', onSearch)\n }\n\n // Head (stable container)\n this.#headEl = document.createElement('aui-table-head')\n this.appendChild(this.#headEl)\n\n // Body (stable container)\n this.#bodyEl = document.createElement('aui-table-body')\n this.appendChild(this.#bodyEl)\n\n // Footer (stable container)\n if (this.#pageSize > 0) {\n this.#footerEl = document.createElement('div')\n this.#footerEl.setAttribute('data-table-footer', '')\n this.appendChild(this.#footerEl)\n }\n }\n\n // ── Event delegation ───────────────────────────────────────\n\n #onClick = (e: Event): void => {\n const target = e.target as HTMLElement\n\n // Sort: click on header\n const header = target.closest('aui-table-header[data-table-sortable]') as HTMLElement\n if (header) {\n const key = header.dataset.key\n if (key) {\n this.#toggleSort(key)\n return\n }\n }\n\n // Select: click on checkbox\n const checkbox = target.closest('aui-checkbox[data-table-check]') as HTMLElement\n if (checkbox) {\n const rowId = checkbox.dataset.rowId\n if (rowId === '__all__') {\n this.#toggleSelectAll()\n } else if (rowId) {\n this.#toggleSelect(rowId)\n }\n return\n }\n\n // Pagination\n const pageBtn = target.closest('[data-table-page]') as HTMLElement\n if (pageBtn) {\n const page = parseInt(pageBtn.dataset.tablePage!, 10)\n if (!isNaN(page) && page !== this.#currentPage) {\n this.#currentPage = page\n this.dispatchEvent(new CustomEvent('aui:page-change', { bubbles: true, detail: { page } }))\n this.#render()\n }\n }\n }\n\n // ── Sort ───────────────────────────────────────────────────\n\n #toggleSort(key: string): void {\n if (this.#sortKey === key) {\n const cycle: SortDir[] = ['asc', 'desc', 'none']\n this.#sortDir = cycle[(cycle.indexOf(this.#sortDir) + 1) % 3]\n if (this.#sortDir === 'none') this.#sortKey = ''\n } else {\n this.#sortKey = key\n this.#sortDir = 'asc'\n }\n this.#currentPage = 1\n this.dispatchEvent(new CustomEvent('aui:sort-change', { bubbles: true, detail: { key: this.#sortKey, dir: this.#sortDir } }))\n this.#render()\n }\n\n // ── Selection ──────────────────────────────────────────────\n\n #rowId(row: Record<string, unknown>): string {\n return row.id != null ? String(row.id) : JSON.stringify(row)\n }\n\n #toggleSelect(id: string): void {\n if (this.#selectedIds.has(id)) this.#selectedIds.delete(id)\n else this.#selectedIds.add(id)\n this.dispatchEvent(new CustomEvent('aui:selection-change', { bubbles: true, detail: { selectedIds: [...this.#selectedIds] } }))\n this.#render()\n }\n\n #toggleSelectAll(): void {\n const pageRows = this.#paginate(this.#derive())\n const allSelected = pageRows.length > 0 && pageRows.every(r => this.#selectedIds.has(this.#rowId(r)))\n for (const r of pageRows) {\n const id = this.#rowId(r)\n if (allSelected) this.#selectedIds.delete(id)\n else this.#selectedIds.add(id)\n }\n this.dispatchEvent(new CustomEvent('aui:selection-change', { bubbles: true, detail: { selectedIds: [...this.#selectedIds] } }))\n this.#render()\n }\n\n // ── Derived data ───────────────────────────────────────────\n\n get #pageSize(): number { return parseInt(this.paginate, 10) || 0 }\n\n #derive(): Record<string, unknown>[] {\n let view = [...this.#data]\n\n // Search\n if (this.#searchTerm) {\n const term = this.#searchTerm.toLowerCase()\n const keys = this.#columns.map(c => c.key)\n view = view.filter(row => keys.some(k => {\n const v = row[k]\n return v != null && String(v).toLowerCase().includes(term)\n }))\n }\n\n // Sort\n if (this.#sortKey && this.#sortDir !== 'none') {\n const col = this.#columns.find(c => c.key === this.#sortKey)\n const type = col?.type || 'string'\n const mult = this.#sortDir === 'desc' ? -1 : 1\n const key = this.#sortKey\n view.sort((a, b) => {\n const av = a[key], bv = b[key]\n if (av == null && bv == null) return 0\n if (av == null) return 1\n if (bv == null) return -1\n if (type === 'number') return (Number(av) - Number(bv)) * mult\n if (type === 'date') return (new Date(String(av)).getTime() - new Date(String(bv)).getTime()) * mult\n return String(av).localeCompare(String(bv)) * mult\n })\n }\n\n return view\n }\n\n #paginate(view: Record<string, unknown>[]): Record<string, unknown>[] {\n const size = this.#pageSize\n if (size <= 0) return view\n const start = (this.#currentPage - 1) * size\n return view.slice(start, start + size)\n }\n\n // ── Render (updates innerHTML of stable containers) ────────\n\n #render(): void {\n if (!this.#dataMode || !this.#headEl || !this.#bodyEl) return\n\n const filtered = this.#derive()\n const paged = this.#paginate(filtered)\n\n // HEAD\n this.#headEl.innerHTML = ''\n const headerRow = document.createElement('aui-table-row')\n\n if (this.selectable) {\n const th = document.createElement('aui-table-header')\n const allSel = paged.length > 0 && paged.every(r => this.#selectedIds.has(this.#rowId(r)))\n const cb = document.createElement('aui-checkbox')\n cb.setAttribute('data-table-check', '')\n cb.setAttribute('data-row-id', '__all__')\n if (allSel) cb.setAttribute('checked', '')\n th.appendChild(cb)\n headerRow.appendChild(th)\n }\n\n for (const col of this.#columns) {\n const th = document.createElement('aui-table-header')\n const isSortable = col.sortable || this.sortable\n th.textContent = col.label\n if (col.align !== 'start') th.style.justifyContent = col.align\n if (isSortable) {\n th.setAttribute('data-table-sortable', '')\n th.dataset.key = col.key\n th.style.cursor = 'pointer'\n if (this.#sortKey === col.key && this.#sortDir !== 'none') {\n th.setAttribute('data-table-sort', this.#sortDir)\n }\n }\n headerRow.appendChild(th)\n }\n this.#headEl.appendChild(headerRow)\n\n // BODY\n this.#bodyEl.innerHTML = ''\n for (const rowData of paged) {\n const row = document.createElement('aui-table-row')\n const id = this.#rowId(rowData)\n const isSel = this.#selectedIds.has(id)\n if (isSel) row.setAttribute('data-table-selected', '')\n\n if (this.selectable) {\n const td = document.createElement('aui-table-cell')\n const cb = document.createElement('aui-checkbox')\n cb.setAttribute('data-table-check', '')\n cb.setAttribute('data-row-id', id)\n if (isSel) cb.setAttribute('checked', '')\n td.appendChild(cb)\n row.appendChild(td)\n }\n\n for (const col of this.#columns) {\n const td = document.createElement('aui-table-cell')\n const val = rowData[col.key]\n td.textContent = val != null ? String(val) : ''\n if (col.align !== 'start') td.style.justifyContent = col.align\n row.appendChild(td)\n }\n\n this.#bodyEl.appendChild(row)\n }\n\n // FOOTER\n if (this.#footerEl) {\n this.#footerEl.innerHTML = ''\n const size = this.#pageSize\n const total = filtered.length\n const totalPages = Math.max(1, Math.ceil(total / size))\n if (this.#currentPage > totalPages) this.#currentPage = totalPages\n\n const start = total === 0 ? 0 : (this.#currentPage - 1) * size + 1\n const end = Math.min(this.#currentPage * size, total)\n\n const info = document.createElement('span')\n info.setAttribute('data-table-page-info', '')\n info.textContent = `${start}\\u2013${end} of ${total}`\n this.#footerEl.appendChild(info)\n\n const controls = document.createElement('span')\n controls.setAttribute('data-table-page-controls', '')\n controls.style.cssText = 'display:inline-flex;gap:0.25rem;align-items:center;'\n\n const prevBtn = document.createElement('button')\n prevBtn.setAttribute('data-table-page', String(this.#currentPage - 1))\n prevBtn.disabled = this.#currentPage <= 1\n prevBtn.textContent = '\\u2039'\n prevBtn.style.cssText = 'all:unset;cursor:pointer;padding:0.25rem 0.5rem;border-radius:var(--aui-radius);font-size:var(--aui-font-sm);color:var(--aui-ink-muted);'\n if (prevBtn.disabled) prevBtn.style.opacity = '0.4'\n controls.appendChild(prevBtn)\n\n for (let i = 1; i <= totalPages; i++) {\n const btn = document.createElement('button')\n btn.setAttribute('data-table-page', String(i))\n btn.textContent = String(i)\n btn.style.cssText = `all:unset;cursor:pointer;padding:0.25rem 0.5rem;border-radius:var(--aui-radius);font-size:var(--aui-font-sm);${i === this.#currentPage ? 'background:var(--aui-accent);color:white;' : 'color:var(--aui-ink-muted);'}`\n controls.appendChild(btn)\n }\n\n const nextBtn = document.createElement('button')\n nextBtn.setAttribute('data-table-page', String(this.#currentPage + 1))\n nextBtn.disabled = this.#currentPage >= totalPages\n nextBtn.textContent = '\\u203A'\n nextBtn.style.cssText = 'all:unset;cursor:pointer;padding:0.25rem 0.5rem;border-radius:var(--aui-radius);font-size:var(--aui-font-sm);color:var(--aui-ink-muted);'\n if (nextBtn.disabled) nextBtn.style.opacity = '0.4'\n controls.appendChild(nextBtn)\n\n this.#footerEl.appendChild(controls)\n }\n }\n}\n","import { AgentElement } from '#element'\n\nexport class AuiTableBody extends AgentElement {}\n","import { AgentElement } from '#element'\n\nexport class AuiTableCell extends AgentElement {}\n","import { AgentElement } from '#element'\n\nexport class AuiTableHead extends AgentElement {}\n","import { AgentElement } from '#element'\n\nexport class AuiTableHeader extends AgentElement {}\n","import { AgentElement } from '#element'\n\nexport class AuiTableRow extends AgentElement {}\n","// ── aui-tree ─────────────────────────────────────────────────\n//\n// Tree view container. Hosts aui-tree-item children with\n// nested expand/collapse. Keyboard navigation via arrow keys.\n\nimport { AgentElement } from '#element'\n\nexport class AuiTree extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'tree')\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n get #visibleLabels(): HTMLElement[] {\n const labels: HTMLElement[] = []\n for (const label of this.querySelectorAll('[data-label]')) {\n const item = label.closest('aui-tree-item') as HTMLElement | null\n if (!item) continue\n // Skip hidden (inside collapsed parent)\n const parent = item.parentElement?.closest('aui-tree-item') as HTMLElement | null\n if (parent && !parent.hasAttribute('expanded') && item.parentElement?.hasAttribute('data-children')) continue\n labels.push(label as HTMLElement)\n }\n return labels\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return\n\n const labels = this.#visibleLabels\n const current = labels.indexOf(document.activeElement as HTMLElement)\n if (current < 0) return\n\n e.preventDefault()\n let next: number\n if (e.key === 'ArrowDown') {\n next = current < labels.length - 1 ? current + 1 : 0\n } else {\n next = current > 0 ? current - 1 : labels.length - 1\n }\n labels[next].focus()\n }\n}\n","// ── aui-tree-item ────────────────────────────────────────────\n//\n// Tree node with expand/collapse. Nests children inside\n// [data-children] container. Depth tracked via --_depth CSS var.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// Uses registered caret-right icon if available, falls back to inline SVG\nconst CARET_TAG = `<aui-icon name=\"caret-right\" size=\"sm\"></aui-icon>`\n\nexport class AuiTreeItem extends AgentElement {\n static override attributes: AttributeSchema = {\n expanded: { type: 'boolean', default: false },\n selected: { type: 'boolean', default: false },\n disabled: { type: 'boolean', default: false },\n }\n\n declare expanded: boolean\n declare selected: boolean\n declare disabled: boolean\n\n #label: HTMLElement | null = null\n #childContainer: HTMLElement | null = null\n #caret: HTMLElement | null = null\n\n get expandable(): boolean {\n return !!this.querySelector(':scope > [data-children] > aui-tree-item')\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'treeitem')\n\n // Organize: find or stamp label + children container\n this.#label = this.querySelector(':scope > [data-label]')\n if (!this.#label) {\n this.#label = document.createElement('div')\n this.#label.setAttribute('data-label', '')\n this.#label.setAttribute('tabindex', '0')\n\n // Stamp caret\n this.#caret = document.createElement('span')\n this.#caret.setAttribute('data-caret', '')\n this.#caret.innerHTML = CARET_TAG\n this.#label.appendChild(this.#caret)\n\n // Move first text/inline content into label\n const triggerEl = this.querySelector(':scope > [data-trigger]')\n if (triggerEl) {\n this.#label.appendChild(triggerEl)\n } else {\n // Move non-tree-item children into label\n const toMove: Node[] = []\n for (const child of Array.from(this.childNodes)) {\n if (child instanceof HTMLElement && (child.tagName === 'AUI-TREE-ITEM' || child.hasAttribute('data-children'))) continue\n toMove.push(child)\n }\n for (const node of toMove) this.#label.appendChild(node)\n }\n\n // Wrap nested tree items in children container\n const nestedItems = Array.from(this.querySelectorAll(':scope > aui-tree-item'))\n if (nestedItems.length > 0) {\n this.#childContainer = document.createElement('div')\n this.#childContainer.setAttribute('data-children', '')\n this.#childContainer.setAttribute('role', 'group')\n for (const item of nestedItems) {\n this.#childContainer.appendChild(item)\n }\n this.prepend(this.#label)\n this.appendChild(this.#childContainer)\n } else {\n this.prepend(this.#label)\n }\n } else {\n this.#caret = this.querySelector(':scope > [data-label] > [data-caret]')\n this.#childContainer = this.querySelector(':scope > [data-children]')\n }\n\n // Calculate depth\n let depth = 0\n let parent = this.parentElement\n while (parent) {\n if (parent.tagName === 'AUI-TREE-ITEM') depth++\n if (parent.tagName === 'AUI-TREE') break\n parent = parent.parentElement\n }\n this.#label?.style.setProperty('--_depth', String(depth))\n\n // Sync state\n this.addEffect(() => {\n this.setAttribute('aria-expanded', this.expandable ? String(this.expanded) : '')\n this.setAttribute('aria-selected', String(this.selected))\n this.setAttribute('aria-disabled', String(this.disabled))\n\n // Hide caret if not expandable\n if (this.#caret) {\n this.#caret.style.visibility = this.expandable ? 'visible' : 'hidden'\n }\n })\n\n this.#label?.addEventListener('click', this.#handleClick)\n this.#label?.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.#label?.removeEventListener('click', this.#handleClick)\n this.#label?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #handleClick = (): void => {\n if (this.disabled) return\n if (this.expandable) {\n this.expanded = !this.expanded\n }\n this.selected = true\n this.dispatchEvent(new CustomEvent('select', { bubbles: true, detail: { item: this } }))\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.#handleClick()\n } else if (e.key === 'ArrowRight' && this.expandable && !this.expanded) {\n e.preventDefault()\n this.expanded = true\n } else if (e.key === 'ArrowLeft' && this.expanded) {\n e.preventDefault()\n this.expanded = false\n }\n }\n}\n","// ── aui-feed ─────────────────────────────────────────────────\n//\n// Scrollable feed container for messages, activity streams,\n// or any chronological content. Supports bottom-anchoring\n// (chat-style) and auto-scroll on new children.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiFeed extends AgentElement {\n static override attributes: AttributeSchema = {\n align: { type: 'enum', values: ['end'], default: '' },\n scrollable: { type: 'boolean', default: false },\n autoscroll: { type: 'boolean', default: false },\n }\n\n declare align: string\n declare scrollable: boolean\n declare autoscroll: boolean\n\n #observer: MutationObserver | null = null\n\n protected override activate(): void {\n this.setAttribute('role', 'feed')\n\n if (this.autoscroll) {\n this.#observer = new MutationObserver(() => {\n if (this.#isPinned()) {\n this.#scrollToEnd()\n }\n })\n this.#observer.observe(this, { childList: true, subtree: true })\n }\n }\n\n protected override dispose(): void {\n this.#observer?.disconnect()\n }\n\n #isPinned(): boolean {\n return this.scrollHeight - this.scrollTop - this.clientHeight < 40\n }\n\n #scrollToEnd(): void {\n requestAnimationFrame(() => {\n this.scrollTop = this.scrollHeight\n })\n }\n\n scrollToEnd(): void {\n this.#scrollToEnd()\n }\n}\n","// ── aui-root ─────────────────────────────────────────────────\n//\n// App shell root element. Block container that establishes\n// the component context (tokens, layers). Simple pass-through.\n\nimport { AgentElement } from '#element'\n\nexport class AuiRoot extends AgentElement {\n protected override activate(): void {\n // Root is a semantic shell — no special behavior needed.\n // Tokens and layers are established by CSS foundation import.\n }\n}\n","// ── aui-calendar-picker ─────────────────────────────────────\n//\n// Compound input component: trigger (read-only input look) +\n// popover containing an aui-calendar for date selection.\n//\n// On calendar date select → update value, close popover, fire change.\n// On trigger click → toggle popover.\n// Sync value ↔ calendar selected date.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Constants ────────────────────────────────────────────────\n\nconst CALENDAR_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><rect x=\"40\" y=\"40\" width=\"176\" height=\"176\" rx=\"8\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"176\" y1=\"24\" x2=\"176\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"80\" y1=\"24\" x2=\"80\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"40\" y1=\"88\" x2=\"216\" y2=\"88\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/></svg>`\n\nconst CHEVRON_SVG = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><polyline points=\"48,80 128,160 208,80\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"24\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n\n// ── Format helpers ──────────────────────────────────────────\n\nfunction formatDate(iso: string, format: string): string {\n if (!iso) return ''\n const [y, m, d] = iso.split('-').map(Number)\n if (!y || !m || !d) return iso\n\n return format\n .replace('YYYY', String(y).padStart(4, '0'))\n .replace('yyyy', String(y).padStart(4, '0'))\n .replace('MM', String(m).padStart(2, '0'))\n .replace('DD', String(d).padStart(2, '0'))\n .replace('dd', String(d).padStart(2, '0'))\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiCalendarPicker extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n placeholder: { type: 'string', default: 'Select date' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n format: { type: 'string', default: 'YYYY-MM-DD' },\n open: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare placeholder: string\n declare min: string\n declare max: string\n declare disabled: boolean\n declare format: string\n declare open: boolean\n\n // ── Internal references ────────────────────────────────────\n\n #anchorName: string = ''\n #trigger: HTMLElement | null = null\n #triggerLabel: HTMLElement | null = null\n #chevron: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #calendar: HTMLElement | null = null\n\n // ════════════════════════════════════════════════════════════\n // Lifecycle\n // ════════════════════════════════════════════════════════════\n\n protected override activate(): void {\n const id = `cal-picker-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Stamp trigger ────────────────────────────────────\n this.#trigger = document.createElement('span')\n this.#trigger.setAttribute('data-trigger', '')\n this.#trigger.setAttribute('role', 'combobox')\n this.#trigger.setAttribute('aria-haspopup', 'dialog')\n this.#trigger.setAttribute('tabindex', '0')\n this.#trigger.id = id\n\n this.#triggerLabel = document.createElement('span')\n this.#triggerLabel.setAttribute('data-label', '')\n this.#trigger.appendChild(this.#triggerLabel)\n\n // Calendar icon\n const icon = document.createElement('span')\n icon.setAttribute('data-icon', '')\n icon.innerHTML = CALENDAR_SVG\n this.#trigger.appendChild(icon)\n\n // Chevron\n this.#chevron = document.createElement('span')\n this.#chevron.setAttribute('data-chevron', '')\n this.#chevron.innerHTML = CHEVRON_SVG\n this.#trigger.appendChild(this.#chevron)\n\n // ── Stamp popover + calendar ─────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-dropdown', '')\n\n this.#calendar = document.createElement('aui-calendar')\n this.#popover.appendChild(this.#calendar)\n\n this.appendChild(this.#trigger!)\n this.appendChild(this.#popover!)\n\n // Anchor positioning\n ;(this.#trigger.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // ── Sync state via effects ───────────────────────────\n this.addEffect(() => {\n if (this.disabled) {\n this.#trigger!.setAttribute('tabindex', '-1')\n } else {\n this.#trigger!.setAttribute('tabindex', '0')\n }\n this.#trigger!.setAttribute('aria-expanded', String(this.open))\n this.#trigger!.setAttribute('aria-disabled', String(this.disabled))\n this.#updateLabel()\n })\n\n // Sync min/max to calendar\n this.addEffect(() => {\n if (this.min) {\n this.#calendar!.setAttribute('min', this.min)\n } else {\n this.#calendar!.removeAttribute('min')\n }\n if (this.max) {\n this.#calendar!.setAttribute('max', this.max)\n } else {\n this.#calendar!.removeAttribute('max')\n }\n })\n\n // Sync value to calendar\n this.addEffect(() => {\n if (this.value) {\n this.#calendar!.setAttribute('value', this.value)\n } else {\n this.#calendar!.removeAttribute('value')\n }\n })\n\n // ── Events ───────────────────────────────────────────\n this.#trigger.addEventListener('click', this.#onTriggerClick)\n this.#trigger.addEventListener('keydown', this.#onTriggerKeydown)\n this.#calendar.addEventListener('change', this.#onCalendarChange as EventListener)\n document.addEventListener('click', this.#onOutsideClick)\n document.addEventListener('keydown', this.#onDocumentKeydown)\n }\n\n protected override dispose(): void {\n this.#trigger?.removeEventListener('click', this.#onTriggerClick)\n this.#trigger?.removeEventListener('keydown', this.#onTriggerKeydown)\n this.#calendar?.removeEventListener('change', this.#onCalendarChange as EventListener)\n document.removeEventListener('click', this.#onOutsideClick)\n document.removeEventListener('keydown', this.#onDocumentKeydown)\n this.#closePopover()\n }\n\n // ════════════════════════════════════════════════════════════\n // Popover control\n // ════════════════════════════════════════════════════════════\n\n #openPopover(): void {\n if (!this.#popover || this.disabled) return\n try { this.#popover.showPopover() } catch {}\n this.open = true\n // Focus the calendar for keyboard nav\n this.#calendar?.focus()\n }\n\n #closePopover(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n }\n\n // ════════════════════════════════════════════════════════════\n // Display\n // ════════════════════════════════════════════════════════════\n\n #updateLabel(): void {\n if (!this.#triggerLabel) return\n if (this.value) {\n this.#triggerLabel.textContent = formatDate(this.value, this.format)\n this.#triggerLabel.removeAttribute('data-placeholder')\n } else {\n this.#triggerLabel.textContent = this.placeholder\n this.#triggerLabel.setAttribute('data-placeholder', '')\n }\n }\n\n // ════════════════════════════════════════════════════════════\n // Event handlers\n // ════════════════════════════════════════════════════════════\n\n #onTriggerClick = (): void => {\n if (this.disabled) return\n if (this.open) this.#closePopover()\n else this.#openPopover()\n }\n\n #onTriggerKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!this.open) this.#openPopover()\n } else if (e.key === 'Escape') {\n this.#closePopover()\n }\n }\n\n #onCalendarChange = (e: CustomEvent): void => {\n e.stopPropagation()\n const iso = e.detail?.value ?? ''\n this.value = iso\n this.#updateLabel()\n this.#closePopover()\n this.#trigger?.focus()\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: {\n value: iso,\n date: iso ? new Date(iso + 'T00:00:00') : null,\n },\n }))\n }\n\n #onOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) {\n this.#closePopover()\n }\n }\n\n #onDocumentKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n this.#closePopover()\n this.#trigger?.focus()\n }\n }\n}\n","// ── aui-calendar-range-picker ──────────────────────────────────\n//\n// Compound input component: trigger (read-only input look) +\n// popover containing an aui-calendar in range selection mode.\n//\n// On calendar range select -> update start/end, close popover, fire change.\n// On trigger click -> toggle popover.\n// Sync start/end <-> calendar range dates.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Constants ────────────────────────────────────────────────\n\nconst CALENDAR_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><rect x=\"40\" y=\"40\" width=\"176\" height=\"176\" rx=\"8\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"176\" y1=\"24\" x2=\"176\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"80\" y1=\"24\" x2=\"80\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"40\" y1=\"88\" x2=\"216\" y2=\"88\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/></svg>`\n\nconst CHEVRON_SVG = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><polyline points=\"48,80 128,160 208,80\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"24\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n\n// ── Format helpers ──────────────────────────────────────────\n\nfunction formatDateShort(iso: string): string {\n if (!iso) return ''\n const [y, m, d] = iso.split('-').map(Number)\n if (!y || !m || !d) return iso\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n return `${months[m - 1]} ${d}`\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiCalendarRangePicker extends AgentElement {\n static override attributes: AttributeSchema = {\n start: { type: 'string', default: '' },\n end: { type: 'string', default: '' },\n placeholder: { type: 'string', default: 'Select dates' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n open: { type: 'boolean', default: false },\n }\n\n declare start: string\n declare end: string\n declare placeholder: string\n declare min: string\n declare max: string\n declare disabled: boolean\n declare open: boolean\n\n // ── Internal references ────────────────────────────────────\n\n #anchorName: string = ''\n #trigger: HTMLElement | null = null\n #triggerLabel: HTMLElement | null = null\n #chevron: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #calendar: HTMLElement | null = null\n\n // ════════════════════════════════════════════════════════════\n // Lifecycle\n // ════════════════════════════════════════════════════════════\n\n protected override activate(): void {\n const id = `cal-range-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Stamp trigger ────────────────────────────────────\n this.#trigger = document.createElement('span')\n this.#trigger.setAttribute('data-trigger', '')\n this.#trigger.setAttribute('role', 'combobox')\n this.#trigger.setAttribute('aria-haspopup', 'dialog')\n this.#trigger.setAttribute('tabindex', '0')\n this.#trigger.id = id\n\n this.#triggerLabel = document.createElement('span')\n this.#triggerLabel.setAttribute('data-label', '')\n this.#trigger.appendChild(this.#triggerLabel)\n\n // Calendar icon\n const icon = document.createElement('span')\n icon.setAttribute('data-icon', '')\n icon.innerHTML = CALENDAR_SVG\n this.#trigger.appendChild(icon)\n\n // Chevron\n this.#chevron = document.createElement('span')\n this.#chevron.setAttribute('data-chevron', '')\n this.#chevron.innerHTML = CHEVRON_SVG\n this.#trigger.appendChild(this.#chevron)\n\n // ── Stamp popover + calendar ─────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-dropdown', '')\n\n this.#calendar = document.createElement('aui-calendar')\n this.#calendar.setAttribute('range', '')\n this.#popover.appendChild(this.#calendar)\n\n this.appendChild(this.#trigger!)\n this.appendChild(this.#popover!)\n\n // Anchor positioning\n ;(this.#trigger.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // ── Sync state via effects ───────────────────────────\n this.addEffect(() => {\n if (this.disabled) {\n this.#trigger!.setAttribute('tabindex', '-1')\n } else {\n this.#trigger!.setAttribute('tabindex', '0')\n }\n this.#trigger!.setAttribute('aria-expanded', String(this.open))\n this.#trigger!.setAttribute('aria-disabled', String(this.disabled))\n this.#updateLabel()\n })\n\n // Sync min/max to calendar\n this.addEffect(() => {\n if (this.min) {\n this.#calendar!.setAttribute('min', this.min)\n } else {\n this.#calendar!.removeAttribute('min')\n }\n if (this.max) {\n this.#calendar!.setAttribute('max', this.max)\n } else {\n this.#calendar!.removeAttribute('max')\n }\n })\n\n // Sync start/end to calendar\n this.addEffect(() => {\n if (this.start) {\n this.#calendar!.setAttribute('start', this.start)\n } else {\n this.#calendar!.removeAttribute('start')\n }\n if (this.end) {\n this.#calendar!.setAttribute('end', this.end)\n } else {\n this.#calendar!.removeAttribute('end')\n }\n })\n\n // ── Events ───────────────────────────────────────────\n this.#trigger.addEventListener('click', this.#onTriggerClick)\n this.#trigger.addEventListener('keydown', this.#onTriggerKeydown)\n this.#calendar.addEventListener('aui:range-select', this.#onCalendarRangeSelect as EventListener)\n document.addEventListener('click', this.#onOutsideClick)\n document.addEventListener('keydown', this.#onDocumentKeydown)\n }\n\n protected override dispose(): void {\n this.#trigger?.removeEventListener('click', this.#onTriggerClick)\n this.#trigger?.removeEventListener('keydown', this.#onTriggerKeydown)\n this.#calendar?.removeEventListener('aui:range-select', this.#onCalendarRangeSelect as EventListener)\n document.removeEventListener('click', this.#onOutsideClick)\n document.removeEventListener('keydown', this.#onDocumentKeydown)\n this.#closePopover()\n }\n\n // ════════════════════════════════════════════════════════════\n // Popover control\n // ════════════════════════════════════════════════════════════\n\n #openPopover(): void {\n if (!this.#popover || this.disabled) return\n try { this.#popover.showPopover() } catch {}\n this.open = true\n // Focus the calendar for keyboard nav\n this.#calendar?.focus()\n }\n\n #closePopover(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n }\n\n // ════════════════════════════════════════════════════════════\n // Display\n // ════════════════════════════════════════════════════════════\n\n #updateLabel(): void {\n if (!this.#triggerLabel) return\n if (this.start && this.end) {\n this.#triggerLabel.textContent = `${formatDateShort(this.start)} \\u2014 ${formatDateShort(this.end)}`\n this.#triggerLabel.removeAttribute('data-placeholder')\n } else if (this.start) {\n this.#triggerLabel.textContent = `${formatDateShort(this.start)} \\u2014 ...`\n this.#triggerLabel.removeAttribute('data-placeholder')\n } else {\n this.#triggerLabel.textContent = this.placeholder\n this.#triggerLabel.setAttribute('data-placeholder', '')\n }\n }\n\n // ════════════════════════════════════════════════════════════\n // Event handlers\n // ════════════════════════════════════════════════════════════\n\n #onTriggerClick = (): void => {\n if (this.disabled) return\n if (this.open) this.#closePopover()\n else this.#openPopover()\n }\n\n #onTriggerKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!this.open) this.#openPopover()\n } else if (e.key === 'Escape') {\n this.#closePopover()\n }\n }\n\n #onCalendarRangeSelect = (e: CustomEvent): void => {\n e.stopPropagation()\n const start = e.detail?.start ?? ''\n const end = e.detail?.end ?? ''\n this.start = start\n this.end = end\n this.#updateLabel()\n this.#closePopover()\n this.#trigger?.focus()\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: { start, end },\n }))\n }\n\n #onOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) {\n this.#closePopover()\n }\n }\n\n #onDocumentKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n this.#closePopover()\n this.#trigger?.focus()\n }\n }\n}\n","// ── aui-app-shell ────────────────────────────────────────────\n//\n// Full-page application shell. Flex layout with collapsible\n// sidebar and content column.\n//\n// DOM structure:\n//\n// <aui-app-shell>\n// <aui-sidebar>…</aui-sidebar>\n// <aui-page>\n// <aui-page-context>context bar</aui-page-context>\n// <aui-page-main>\n// <main>page content</main>\n// </aui-page-main>\n// </aui-page>\n// </aui-app-shell>\n\nimport { AgentElement } from '#element'\n\nexport class AuiAppShell extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'application')\n }\n}\n","// ── aui-page ─────────────────────────────────────────────────\n//\n// Content column within the <aui-app-shell>.\n// Contains <aui-page-context> (header bar) and <aui-page-main> (canvas).\n\nimport { AgentElement } from '#element'\n\nexport class AuiPage extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'main')\n }\n}\n","// ── aui-page-main ────────────────────────────────────────────\n//\n// Canvas area below the page context bar.\n// Contains <main> with scrollable, rounded content panel.\n\nimport { AgentElement } from '#element'\n\nexport class AuiPageMain extends AgentElement {}\n","// ── aui-page-context ─────────────────────────────────────────\n//\n// Page context bar with leading, center, and trailing sections.\n// Adaptive 3-column grid via :has() selectors.\n//\n// Children: <div> (leading), <aui-breadcrumb>, <aside> (trailing)\n\nimport { AgentElement } from '#element'\n\nexport class AuiPageContext extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'navigation')\n this.setAttribute('aria-label', 'Breadcrumb')\n }\n}\n","// ── <aui-sidebar> ────────────────────────────────────────────\n//\n// Layout shell for sidebar navigation. Flex column, sticky,\n// resizable, collapsible to icon-rail via container queries.\n//\n// Attributes: width, min-width, max-width, collapsed,\n// collapsible, side, disabled\n// Events: aui:sidebar-resize, aui:sidebar-collapse\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\nimport { signal, untrack } from '#reactivity'\n\nconst handleTpl = document.createElement('template')\nhandleTpl.innerHTML = '<aui-sidebar-resize-handle></aui-sidebar-resize-handle>'\n\nexport class AuiSidebar extends AgentElement {\n static override attributes: AttributeSchema = {\n 'width': { type: 'string', default: '240' },\n 'min-width': { type: 'string', default: '56' },\n 'max-width': { type: 'string', default: '480' },\n 'collapsed': { type: 'boolean', default: false },\n 'collapsible': { type: 'boolean', default: false },\n 'side': { type: 'enum', values: ['left', 'right'] as const, default: 'left' },\n 'disabled': { type: 'boolean', default: false },\n }\n\n declare collapsed: boolean\n declare collapsible: boolean\n declare side: 'left' | 'right'\n declare disabled: boolean\n\n #width = signal(240)\n #minWidth = 56\n #maxWidth = 480\n\n // Resize state\n #handleEl: HTMLElement | null = null\n #resizing = false\n #startX = 0\n #startWidth = 0\n #dragPointerId = -1\n\n protected override activate(): void {\n this.setAttribute('role', 'complementary')\n\n const w = parseInt(this.getAttribute('width') ?? '', 10)\n if (w > 0) this.#width.value = w\n this.#minWidth = parseInt(this.getAttribute('min-width') ?? '', 10) || 56\n this.#maxWidth = parseInt(this.getAttribute('max-width') ?? '', 10) || 480\n\n // Stamp resize handle\n const frag = handleTpl.content.cloneNode(true) as DocumentFragment\n this.#handleEl = frag.querySelector('aui-sidebar-resize-handle')!\n this.appendChild(frag)\n\n this.#handleEl.addEventListener('pointerdown', this.#onResizeDown)\n\n // Width effect\n this.addEffect(() => {\n const w = this.#width.value\n this.style.setProperty('--aui-sidebar-width', `${w}px`)\n })\n }\n\n // ── Public API ──\n\n collapse(): void {\n this.setAttribute('collapsed', '')\n this.dispatchEvent(new CustomEvent('aui:sidebar-collapse', {\n bubbles: true,\n detail: { collapsed: true },\n }))\n }\n\n expand(): void {\n this.removeAttribute('collapsed')\n this.dispatchEvent(new CustomEvent('aui:sidebar-collapse', {\n bubbles: true,\n detail: { collapsed: false },\n }))\n }\n\n toggle(): void {\n if (this.collapsed) this.expand()\n else this.collapse()\n }\n\n // ── Resize ──\n\n #onResizeDown = (e: PointerEvent): void => {\n if (this.disabled) return\n if (this.collapsed) return\n e.preventDefault()\n\n this.#resizing = true\n this.#startX = e.clientX\n this.#startWidth = untrack(() => this.#width.value)\n this.#dragPointerId = e.pointerId\n this.setAttribute('data-sidebar-resizing', '')\n\n this.#handleEl!.setPointerCapture(e.pointerId)\n document.documentElement.setAttribute('data-sidebar-resizing', '')\n\n this.#handleEl!.addEventListener('pointermove', this.#onResizeMove)\n this.#handleEl!.addEventListener('pointerup', this.#onResizeUp)\n this.#handleEl!.addEventListener('pointercancel', this.#onResizeUp)\n }\n\n #onResizeMove = (e: PointerEvent): void => {\n if (!this.#resizing) return\n const side = this.getAttribute('side')\n const delta = side === 'right'\n ? this.#startX - e.clientX\n : e.clientX - this.#startX\n const w = Math.round(Math.max(this.#minWidth, Math.min(this.#maxWidth, this.#startWidth + delta)))\n this.#width.value = w\n }\n\n #onResizeUp = (): void => {\n if (!this.#resizing) return\n this.#resizing = false\n this.removeAttribute('data-sidebar-resizing')\n document.documentElement.removeAttribute('data-sidebar-resizing')\n\n if (this.#dragPointerId >= 0 && this.#handleEl) {\n this.#handleEl.releasePointerCapture(this.#dragPointerId)\n }\n this.#dragPointerId = -1\n\n this.#handleEl?.removeEventListener('pointermove', this.#onResizeMove)\n this.#handleEl?.removeEventListener('pointerup', this.#onResizeUp)\n this.#handleEl?.removeEventListener('pointercancel', this.#onResizeUp)\n\n this.dispatchEvent(new CustomEvent('aui:sidebar-resize', {\n bubbles: true,\n detail: { width: untrack(() => this.#width.value) },\n }))\n }\n\n // ── Cleanup ──\n\n protected override dispose(): void {\n this.#handleEl?.removeEventListener('pointerdown', this.#onResizeDown)\n this.#handleEl?.remove()\n this.#handleEl = null\n document.documentElement.removeAttribute('data-sidebar-resizing')\n }\n}\n","// ── <aui-sidebar-header> ─────────────────────────────────────\n//\n// Sticky top overlay within aui-sidebar.\n// Pinned above the scrollable content area.\n\nimport { AgentElement } from '#element'\n\nexport class AuiSidebarHeader extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'none')\n }\n}\n","// ── <aui-sidebar-content> ────────────────────────────────────\n//\n// Scrollable content area within aui-sidebar.\n// Sits between the header and footer overlays.\n// Mask-image driven by parent's height custom properties.\n\nimport { AgentElement } from '#element'\n\nexport class AuiSidebarContent extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'none')\n }\n}\n","// ── <aui-sidebar-footer> ─────────────────────────────────────\n//\n// Sticky bottom overlay within aui-sidebar.\n// Pinned below the scrollable content area.\n\nimport { AgentElement } from '#element'\n\nexport class AuiSidebarFooter extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'none')\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiProgress extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '0' },\n }\n\n declare value: string\n\n protected override activate(): void {\n this.addEffect(() => {\n const v = Math.max(0, Math.min(100, Number(this.value) || 0))\n this.style.setProperty('--aui-progress-value', String(v))\n })\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCodeBlock extends AgentElement {\n static override attributes: AttributeSchema = {\n language: { type: 'string', default: '' },\n filename: { type: 'string', default: '' },\n copyable: { type: 'boolean', default: false },\n 'max-height': { type: 'string', default: '' },\n }\n\n declare language: string\n declare filename: string\n declare copyable: boolean\n declare 'max-height': string\n\n #header: HTMLElement | null = null\n #labelEl: HTMLElement | null = null\n #copyBtn: HTMLElement | null = null\n #codeEl: HTMLElement | null = null\n\n protected override activate(): void {\n // Wrap existing text content in an aui-code element\n if (!this.querySelector('aui-code')) {\n this.#codeEl = document.createElement('aui-code')\n // Move all child nodes into aui-code\n while (this.firstChild) {\n this.#codeEl.appendChild(this.firstChild)\n }\n this.appendChild(this.#codeEl)\n } else {\n this.#codeEl = this.querySelector('aui-code')\n }\n\n // Reactive: stamp/update header\n this.addEffect(() => {\n const label = this.filename || this.language\n const showHeader = !!label || this.copyable\n\n if (showHeader && !this.#header) {\n this.#header = document.createElement('div')\n this.#header.setAttribute('data-code-header', '')\n\n this.#labelEl = document.createElement('span')\n this.#labelEl.setAttribute('data-code-label', '')\n this.#header.appendChild(this.#labelEl)\n\n const spacer = document.createElement('span')\n spacer.style.flex = '1'\n this.#header.appendChild(spacer)\n\n this.#copyBtn = document.createElement('button')\n this.#copyBtn.setAttribute('data-code-copy', '')\n this.#copyBtn.textContent = 'Copy'\n this.#copyBtn.addEventListener('click', this.#onCopy)\n this.#header.appendChild(this.#copyBtn)\n\n // Insert header before code\n this.insertBefore(this.#header, this.#codeEl)\n }\n\n if (this.#labelEl) {\n this.#labelEl.textContent = label\n }\n\n if (this.#copyBtn) {\n this.#copyBtn.style.display = this.copyable ? '' : 'none'\n }\n\n if (!showHeader && this.#header) {\n this.#header.remove()\n this.#header = null\n this.#labelEl = null\n this.#copyBtn = null\n }\n })\n\n // Reactive: max-height\n this.addEffect(() => {\n const mh = this['max-height']\n if (mh && this.#codeEl) {\n this.#codeEl.style.maxHeight = mh\n this.#codeEl.style.overflow = 'auto'\n } else if (this.#codeEl) {\n this.#codeEl.style.removeProperty('max-height')\n this.#codeEl.style.removeProperty('overflow')\n }\n })\n }\n\n #onCopy = async (): Promise<void> => {\n const text = this.#codeEl?.textContent ?? ''\n try {\n await navigator.clipboard.writeText(text)\n if (this.#copyBtn) {\n this.#copyBtn.textContent = 'Copied!'\n setTimeout(() => { if (this.#copyBtn) this.#copyBtn.textContent = 'Copy' }, 1500)\n }\n } catch {}\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiSparkline extends AgentElement {\n static override attributes: AttributeSchema = {\n values: { type: 'string', default: '' },\n color: { type: 'string', default: '1' },\n highlight: { type: 'string', default: 'last' },\n }\n\n declare values: string\n declare color: string\n declare highlight: string\n\n protected override activate(): void {\n this.addEffect(() => {\n const raw = this.values\n if (!raw) { this.innerHTML = ''; return }\n\n const vals = raw.split(',').map(v => Number(v.trim())).filter(v => !isNaN(v))\n if (vals.length === 0) { this.innerHTML = ''; return }\n\n const max = Math.max(...vals)\n const colorVar = `var(--aui-chart-${this.color})`\n const highlightMode = this.highlight\n\n // Find highlight index\n let highlightIdx = -1\n if (highlightMode === 'last') highlightIdx = vals.length - 1\n else if (highlightMode === 'max') highlightIdx = vals.indexOf(max)\n\n // Stamp bars\n this.innerHTML = ''\n for (let i = 0; i < vals.length; i++) {\n const pct = max > 0 ? (vals[i] / max) * 100 : 0\n const bar = document.createElement('div')\n bar.setAttribute('data-sparkline-bar', '')\n bar.style.height = `${pct}%`\n bar.style.background = colorVar\n if (i !== highlightIdx && highlightMode !== 'none') {\n bar.style.opacity = '0.4'\n }\n this.appendChild(bar)\n }\n })\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiChip extends AgentElement {\n static override attributes: AttributeSchema = {\n removable: { type: 'boolean', default: false },\n }\n\n declare removable: boolean\n\n #removeBtn: HTMLButtonElement | null = null\n\n protected override activate(): void {\n this.#stampRemoveButton()\n }\n\n protected override dispose(): void {\n this.#removeBtn?.remove()\n this.#removeBtn = null\n }\n\n #stampRemoveButton(): void {\n if (!this.removable) return\n\n const btn = document.createElement('button')\n btn.setAttribute('data-chip-remove', '')\n btn.setAttribute('aria-label', 'Remove')\n btn.innerHTML = '<aui-icon name=\"x\" size=\"xs\"></aui-icon>'\n btn.addEventListener('click', () => {\n this.dispatchEvent(new CustomEvent('remove', { bubbles: true }))\n this.remove()\n })\n this.append(btn)\n this.#removeBtn = btn\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiDisclosure extends AgentElement {\n static override attributes: AttributeSchema = {\n summary: { type: 'string', default: '' },\n open: { type: 'boolean', default: false },\n }\n\n declare summary: string\n declare open: boolean\n\n #trigger: HTMLButtonElement | null = null\n\n protected override activate(): void {\n this.#stamp()\n }\n\n protected override dispose(): void {\n this.#trigger?.removeEventListener('click', this.#handleClick)\n this.#trigger = null\n }\n\n #handleClick = (): void => {\n this.toggleAttribute('open')\n this.#trigger?.setAttribute(\n 'aria-expanded',\n String(this.hasAttribute('open')),\n )\n }\n\n toggle(): void {\n this.toggleAttribute('open')\n this.#trigger?.setAttribute(\n 'aria-expanded',\n String(this.hasAttribute('open')),\n )\n }\n\n #stamp(): void {\n // Collect existing children (the content)\n const children = Array.from(this.childNodes)\n\n // Create trigger button\n const trigger = document.createElement('button')\n trigger.setAttribute('data-disclosure-trigger', '')\n trigger.setAttribute('aria-expanded', String(this.hasAttribute('open')))\n trigger.innerHTML = `\n <span data-disclosure-label>${this.getAttribute('summary') || ''}</span>\n <aui-icon name=\"chevron-down\" size=\"xs\" data-disclosure-chevron></aui-icon>\n `\n trigger.addEventListener('click', this.#handleClick)\n this.#trigger = trigger\n\n // Wrap content\n const inner = document.createElement('div')\n inner.setAttribute('data-disclosure-inner', '')\n for (const child of children) {\n inner.appendChild(child)\n }\n\n const content = document.createElement('div')\n content.setAttribute('data-disclosure-content', '')\n content.appendChild(inner)\n\n // Stamp into host\n this.appendChild(trigger)\n this.appendChild(content)\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiAvatarGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n max: { type: 'string', default: '' },\n size: { type: 'string', default: '' },\n }\n\n static override deferChildren = true\n\n declare max: string\n declare size: string\n\n #counter: HTMLSpanElement | null = null\n\n protected override activate(): void {\n this.#applyMax()\n this.#applySize()\n }\n\n protected override dispose(): void {\n this.#counter?.remove()\n this.#counter = null\n }\n\n #applyMax(): void {\n const max = parseInt(this.max || '0')\n if (!max) return\n\n const avatars = Array.from(this.querySelectorAll(':scope > aui-avatar'))\n if (avatars.length <= max) return\n\n const overflow = avatars.length - max\n avatars.slice(max).forEach((a) => ((a as HTMLElement).style.display = 'none'))\n\n const counter = document.createElement('span')\n counter.setAttribute('data-avatar-group-overflow', '')\n counter.textContent = `+${overflow}`\n this.append(counter)\n this.#counter = counter\n }\n\n #applySize(): void {\n if (!this.size) return\n const avatars = this.querySelectorAll(':scope > aui-avatar')\n for (const avatar of avatars) {\n avatar.setAttribute('size', this.size)\n }\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiProgressCircle extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '0' },\n label: { type: 'string', default: '' },\n }\n\n declare value: string\n declare label: string\n\n #svg: SVGSVGElement | null = null\n #fill: SVGCircleElement | null = null\n #labelEl: HTMLSpanElement | null = null\n\n protected override activate(): void {\n this.#stamp()\n this.addEffect(() => {\n this.#updateValue()\n this.#updateLabel()\n })\n }\n\n protected override dispose(): void {\n this.#svg = null\n this.#fill = null\n this.#labelEl = null\n }\n\n #stamp(): void {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('viewBox', '0 0 36 36')\n\n const track = document.createElementNS('http://www.w3.org/2000/svg', 'circle')\n track.setAttribute('cx', '18')\n track.setAttribute('cy', '18')\n track.setAttribute('r', '15.9')\n track.setAttribute('data-progress-circle-track', '')\n\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'circle')\n fill.setAttribute('cx', '18')\n fill.setAttribute('cy', '18')\n fill.setAttribute('r', '15.9')\n fill.setAttribute('data-progress-circle-fill', '')\n\n svg.appendChild(track)\n svg.appendChild(fill)\n this.appendChild(svg)\n this.#svg = svg\n this.#fill = fill\n\n const labelEl = document.createElement('span')\n labelEl.setAttribute('data-progress-circle-label', '')\n this.appendChild(labelEl)\n this.#labelEl = labelEl\n }\n\n #updateValue(): void {\n const v = Math.max(0, Math.min(100, Number(this.value) || 0))\n this.style.setProperty('--aui-progress-circle-value', String(v))\n }\n\n #updateLabel(): void {\n if (!this.#labelEl) return\n const text = this.getAttribute('label') || ''\n this.#labelEl.textContent = text\n this.#labelEl.style.display = text ? '' : 'none'\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiDisclosureGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n exclusive: { type: 'boolean', default: false },\n }\n\n declare exclusive: boolean\n\n #handleToggle = (e: Event): void => {\n if (!this.exclusive) return\n\n const target = e.target as HTMLElement\n // Only handle direct child disclosures\n if (target.parentElement !== this) return\n if (target.localName !== 'aui-disclosure') return\n if (!target.hasAttribute('open')) return\n\n for (const child of this.querySelectorAll(':scope > aui-disclosure[open]')) {\n if (child !== target) {\n child.removeAttribute('open')\n }\n }\n }\n\n #observer: MutationObserver | null = null\n\n protected override activate(): void {\n // Listen for attribute changes on child disclosures\n this.#observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (\n m.type === 'attributes' &&\n m.attributeName === 'open' &&\n (m.target as HTMLElement).hasAttribute('open')\n ) {\n this.#handleToggle({ target: m.target } as unknown as Event)\n }\n }\n })\n\n this.#observer.observe(this, {\n attributes: true,\n attributeFilter: ['open'],\n subtree: false,\n })\n\n // Also observe direct children (subtree:false only catches this element)\n // We need to observe each child disclosure for attribute changes\n this.#observeChildren()\n }\n\n protected override dispose(): void {\n this.#observer?.disconnect()\n this.#observer = null\n }\n\n #observeChildren(): void {\n if (!this.#observer) return\n for (const child of this.querySelectorAll(':scope > aui-disclosure')) {\n this.#observer.observe(child, {\n attributes: true,\n attributeFilter: ['open'],\n })\n }\n\n // Watch for dynamically added children\n const childObserver = new MutationObserver(() => {\n if (!this.#observer) return\n for (const child of this.querySelectorAll(':scope > aui-disclosure')) {\n this.#observer.observe(child, {\n attributes: true,\n attributeFilter: ['open'],\n })\n }\n })\n childObserver.observe(this, { childList: true })\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTagGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n }\n\n declare label: string\n declare max: string\n\n protected override activate(): void {\n this.setAttribute('role', 'list')\n\n this.addEffect(() => {\n const lbl = this.getAttribute('label') || ''\n if (lbl) {\n this.setAttribute('aria-label', lbl)\n } else {\n this.removeAttribute('aria-label')\n }\n })\n\n this.addEventListener('keydown', this.#handleKeydown)\n this.addEventListener('remove', this.#handleRemove)\n }\n\n protected override dispose(): void {\n this.removeEventListener('keydown', this.#handleKeydown)\n this.removeEventListener('remove', this.#handleRemove)\n }\n\n #getChips(): HTMLElement[] {\n return Array.from(this.querySelectorAll(':scope > aui-chip')) as HTMLElement[]\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const chips = this.#getChips()\n if (chips.length === 0) return\n\n const target = e.target as HTMLElement\n const currentIndex = chips.indexOf(target.closest('aui-chip') as HTMLElement)\n if (currentIndex === -1) return\n\n let nextIndex = -1\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n e.preventDefault()\n nextIndex = currentIndex < chips.length - 1 ? currentIndex + 1 : 0\n break\n case 'ArrowLeft':\n case 'ArrowUp':\n e.preventDefault()\n nextIndex = currentIndex > 0 ? currentIndex - 1 : chips.length - 1\n break\n case 'Home':\n e.preventDefault()\n nextIndex = 0\n break\n case 'End':\n e.preventDefault()\n nextIndex = chips.length - 1\n break\n case 'Delete':\n case 'Backspace': {\n if (!target.closest('aui-chip')?.hasAttribute('removable')) return\n e.preventDefault()\n const chip = chips[currentIndex]\n // Focus neighbor before removing\n const neighbor = chips[currentIndex + 1] || chips[currentIndex - 1]\n chip.dispatchEvent(new CustomEvent('remove', { bubbles: true }))\n chip.remove()\n if (neighbor) {\n neighbor.setAttribute('tabindex', '0')\n neighbor.focus()\n }\n return\n }\n default:\n return\n }\n\n if (nextIndex >= 0) {\n // Update roving tabindex\n for (const c of chips) c.setAttribute('tabindex', '-1')\n chips[nextIndex].setAttribute('tabindex', '0')\n chips[nextIndex].focus()\n }\n }\n\n #handleRemove = (e: Event): void => {\n const chip = (e.target as HTMLElement).closest('aui-chip')\n if (!chip || chip.parentElement !== this) return\n\n const chips = this.#getChips()\n const idx = chips.indexOf(chip as HTMLElement)\n const neighbor = chips[idx + 1] || chips[idx - 1]\n\n // After removal, focus neighbor\n requestAnimationFrame(() => {\n const remaining = this.#getChips()\n if (neighbor && remaining.includes(neighbor)) {\n neighbor.setAttribute('tabindex', '0')\n neighbor.focus()\n } else if (remaining.length > 0) {\n remaining[0].setAttribute('tabindex', '0')\n remaining[0].focus()\n }\n })\n }\n\n get atMax(): boolean {\n const m = Number(this.max)\n if (!m) return false\n return this.#getChips().length >= m\n }\n}\n","// ── aui-color-area ────────────────────────────────────────────\n//\n// 2D gradient surface for picking saturation and lightness values\n// at a given hue. Renders two overlapping gradients (white→hue,\n// black→transparent) with a draggable thumb indicator.\n//\n// Uses HSL model: X axis = saturation (0–100), Y axis = lightness (0–100).\n// Pointer and keyboard driven. No native form elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiColorArea extends AgentElement {\n static override attributes: AttributeSchema = {\n hue: { type: 'string', default: '0' },\n saturation: { type: 'string', default: '100' },\n lightness: { type: 'string', default: '50' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare hue: string\n declare saturation: string\n declare lightness: string\n declare disabled: boolean\n\n #gradient: HTMLElement | null = null\n #thumb: HTMLElement | null = null\n\n protected override activate(): void {\n // Stamp internal structure\n if (!this.querySelector('[data-color-area-gradient]')) {\n this.#gradient = document.createElement('div')\n this.#gradient.setAttribute('data-color-area-gradient', '')\n this.prepend(this.#gradient)\n } else {\n this.#gradient = this.querySelector('[data-color-area-gradient]')\n }\n\n if (!this.querySelector('[data-color-area-thumb]')) {\n this.#thumb = document.createElement('div')\n this.#thumb.setAttribute('data-color-area-thumb', '')\n this.#thumb.setAttribute('tabindex', '0')\n this.#thumb.setAttribute('role', 'slider')\n this.#thumb.setAttribute('aria-label', 'Color')\n this.appendChild(this.#thumb)\n } else {\n this.#thumb = this.querySelector('[data-color-area-thumb]')\n }\n\n // Sync state reactively\n this.addEffect(() => {\n const h = this.#clamp(parseFloat(this.hue) || 0, 0, 360)\n const s = this.#clamp(parseFloat(this.saturation) || 0, 0, 100)\n const l = this.#clamp(parseFloat(this.lightness) || 0, 0, 100)\n\n this.style.setProperty('--_hue', String(h))\n this.style.setProperty('--_sat', String(s / 100))\n this.style.setProperty('--_lit', String(1 - l / 100))\n\n if (this.#thumb) {\n this.#thumb.setAttribute('aria-valuetext', `hsl(${h}, ${s}%, ${l}%)`)\n }\n })\n\n this.addEventListener('pointerdown', this.#handlePointerDown)\n this.#thumb!.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('pointerdown', this.#handlePointerDown)\n this.#thumb?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n // ── Pointer interaction ───────────────────────────────\n\n #handlePointerDown = (e: PointerEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n this.setPointerCapture(e.pointerId)\n this.setAttribute('data-color-area-pressed', '')\n this.#setValueFromPointer(e)\n this.#thumb?.focus()\n\n this.addEventListener('pointermove', this.#handlePointerMove)\n this.addEventListener('pointerup', this.#handlePointerUp)\n }\n\n #handlePointerMove = (e: PointerEvent): void => {\n this.#setValueFromPointer(e)\n }\n\n #handlePointerUp = (_e: PointerEvent): void => {\n this.removeAttribute('data-color-area-pressed')\n this.removeEventListener('pointermove', this.#handlePointerMove)\n this.removeEventListener('pointerup', this.#handlePointerUp)\n this.#dispatchChange()\n }\n\n #setValueFromPointer(e: PointerEvent): void {\n const rect = this.getBoundingClientRect()\n const x = this.#clamp((e.clientX - rect.left) / rect.width, 0, 1)\n const y = this.#clamp((e.clientY - rect.top) / rect.height, 0, 1)\n\n const s = Math.round(x * 100)\n const l = Math.round((1 - y) * 100)\n\n this.saturation = String(s)\n this.lightness = String(l)\n\n this.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n detail: { h: parseFloat(this.hue) || 0, s, l },\n }))\n }\n\n // ── Keyboard interaction ──────────────────────────────\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n\n const step = e.shiftKey ? 10 : 1\n let s = parseFloat(this.saturation) || 0\n let l = parseFloat(this.lightness) || 0\n\n switch (e.key) {\n case 'ArrowRight': s = Math.min(100, s + step); break\n case 'ArrowLeft': s = Math.max(0, s - step); break\n case 'ArrowUp': l = Math.min(100, l + step); break\n case 'ArrowDown': l = Math.max(0, l - step); break\n default: return\n }\n\n e.preventDefault()\n this.saturation = String(s)\n this.lightness = String(l)\n\n this.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n detail: { h: parseFloat(this.hue) || 0, s, l },\n }))\n this.#dispatchChange()\n }\n\n #dispatchChange(): void {\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: {\n h: parseFloat(this.hue) || 0,\n s: parseFloat(this.saturation) || 0,\n l: parseFloat(this.lightness) || 0,\n },\n }))\n }\n\n #clamp(val: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, val))\n }\n}\n","// ── aui-color-slider ──────────────────────────────────────────\n//\n// Single-axis gradient slider for a specific color channel\n// (hue, saturation, lightness, or alpha). Renders a gradient\n// track and draggable thumb. Pointer and keyboard driven.\n// No native form elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nconst CHANNEL_DEFAULTS: Record<string, { min: number; max: number }> = {\n hue: { min: 0, max: 360 },\n saturation: { min: 0, max: 100 },\n lightness: { min: 0, max: 100 },\n alpha: { min: 0, max: 1 },\n}\n\nexport class AuiColorSlider extends AgentElement {\n static override attributes: AttributeSchema = {\n channel: { type: 'string', default: 'hue' },\n value: { type: 'string', default: '0' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n hue: { type: 'string', default: '0' },\n saturation: { type: 'string', default: '100' },\n lightness: { type: 'string', default: '50' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare channel: string\n declare value: string\n declare min: string\n declare max: string\n declare hue: string\n declare saturation: string\n declare lightness: string\n declare disabled: boolean\n\n #track: HTMLElement | null = null\n #thumb: HTMLElement | null = null\n\n protected override activate(): void {\n // Stamp internal structure\n if (!this.querySelector('[data-color-slider-track]')) {\n this.#track = document.createElement('div')\n this.#track.setAttribute('data-color-slider-track', '')\n this.prepend(this.#track)\n } else {\n this.#track = this.querySelector('[data-color-slider-track]')\n }\n\n if (!this.querySelector('[data-color-slider-thumb]')) {\n this.#thumb = document.createElement('div')\n this.#thumb.setAttribute('data-color-slider-thumb', '')\n this.#thumb.setAttribute('tabindex', '0')\n this.#thumb.setAttribute('role', 'slider')\n this.appendChild(this.#thumb)\n } else {\n this.#thumb = this.querySelector('[data-color-slider-thumb]')\n }\n\n // Sync state reactively\n this.addEffect(() => {\n const ch = this.channel || 'hue'\n const defaults = CHANNEL_DEFAULTS[ch] || CHANNEL_DEFAULTS.hue\n const min = this.min !== '' ? parseFloat(this.min) : defaults.min\n const max = this.max !== '' ? parseFloat(this.max) : defaults.max\n const val = parseFloat(this.value) || 0\n const h = parseFloat(this.hue) || 0\n const s = parseFloat(this.saturation) || 100\n const l = parseFloat(this.lightness) || 50\n\n // Position thumb\n const pct = (max - min) > 0 ? (val - min) / (max - min) : 0\n this.style.setProperty('--_pct', String(Math.max(0, Math.min(1, pct))))\n\n // Set reference values for CSS gradient\n this.style.setProperty('--_hue', String(h))\n this.style.setProperty('--_sat', String(s))\n this.style.setProperty('--_lit', String(l))\n\n // ARIA\n if (this.#thumb) {\n this.#thumb.setAttribute('aria-label', ch.charAt(0).toUpperCase() + ch.slice(1))\n this.#thumb.setAttribute('aria-valuemin', String(min))\n this.#thumb.setAttribute('aria-valuemax', String(max))\n this.#thumb.setAttribute('aria-valuenow', String(val))\n }\n\n // Dynamic gradient for saturation/lightness/alpha tracks\n if (this.#track) {\n if (ch === 'saturation') {\n this.#track.style.background = `linear-gradient(to right, hsl(${h}, 0%, ${l}%), hsl(${h}, 100%, ${l}%))`\n } else if (ch === 'lightness') {\n this.#track.style.background = `linear-gradient(to right, hsl(${h}, ${s}%, 0%), hsl(${h}, ${s}%, 50%), hsl(${h}, ${s}%, 100%))`\n } else if (ch === 'alpha') {\n this.#track.style.background = `linear-gradient(to right, transparent, hsl(${h}, ${s}%, ${l}%))`\n } else {\n // Hue: handled by CSS\n this.#track.style.background = ''\n }\n }\n })\n\n this.addEventListener('pointerdown', this.#handlePointerDown)\n this.#thumb!.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('pointerdown', this.#handlePointerDown)\n this.#thumb?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #getRange(): { min: number; max: number; step: number } {\n const ch = this.channel || 'hue'\n const defaults = CHANNEL_DEFAULTS[ch] || CHANNEL_DEFAULTS.hue\n const min = this.min !== '' ? parseFloat(this.min) : defaults.min\n const max = this.max !== '' ? parseFloat(this.max) : defaults.max\n const step = ch === 'alpha' ? 0.01 : 1\n return { min, max, step }\n }\n\n // ── Pointer interaction ───────────────────────────────\n\n #handlePointerDown = (e: PointerEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n this.setPointerCapture(e.pointerId)\n this.setAttribute('data-color-slider-pressed', '')\n this.#setValueFromPointer(e)\n this.#thumb?.focus()\n\n this.addEventListener('pointermove', this.#handlePointerMove)\n this.addEventListener('pointerup', this.#handlePointerUp)\n }\n\n #handlePointerMove = (e: PointerEvent): void => {\n this.#setValueFromPointer(e)\n }\n\n #handlePointerUp = (_e: PointerEvent): void => {\n this.removeAttribute('data-color-slider-pressed')\n this.removeEventListener('pointermove', this.#handlePointerMove)\n this.removeEventListener('pointerup', this.#handlePointerUp)\n this.#dispatchChange()\n }\n\n #setValueFromPointer(e: PointerEvent): void {\n const rect = this.getBoundingClientRect()\n const pct = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const { min, max, step } = this.#getRange()\n const raw = min + pct * (max - min)\n const snapped = Math.round(raw / step) * step\n const clamped = Math.max(min, Math.min(max, snapped))\n // Round to avoid float artifacts\n this.value = String(Math.round(clamped * 100) / 100)\n\n this.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n detail: { channel: this.channel, value: parseFloat(this.value) },\n }))\n }\n\n // ── Keyboard interaction ──────────────────────────────\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n\n const { min, max, step } = this.#getRange()\n const val = parseFloat(this.value) || 0\n const bigStep = e.shiftKey ? step * 10 : step\n let next: number | undefined\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = Math.min(max, val + bigStep)\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = Math.max(min, val - bigStep)\n break\n case 'Home':\n next = min\n break\n case 'End':\n next = max\n break\n default:\n return\n }\n\n e.preventDefault()\n this.value = String(Math.round(next * 100) / 100)\n this.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n detail: { channel: this.channel, value: parseFloat(this.value) },\n }))\n this.#dispatchChange()\n }\n\n #dispatchChange(): void {\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { channel: this.channel, value: parseFloat(this.value) },\n }))\n }\n}\n","// ── aui-color-field ───────────────────────────────────────────\n//\n// Text input for color values with an inline color swatch preview.\n// Supports hex, rgb, and oklch formats. Validates on blur and\n// normalizes to the specified format.\n//\n// Internal structure:\n// aui-color-field\n// span[data-color-field-swatch] color preview circle\n// span[data-color-field-input] contenteditable text surface\n//\n// No native form elements (<input>, <select>, etc.).\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiColorField extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n format: { type: 'string', default: 'hex' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare format: string\n declare disabled: boolean\n\n #swatch: HTMLElement | null = null\n #input: HTMLElement | null = null\n\n protected override activate(): void {\n // Stamp swatch\n if (!this.querySelector('[data-color-field-swatch]')) {\n this.#swatch = document.createElement('span')\n this.#swatch.setAttribute('data-color-field-swatch', '')\n this.prepend(this.#swatch)\n } else {\n this.#swatch = this.querySelector('[data-color-field-swatch]')\n }\n\n // Stamp input surface\n if (!this.querySelector('[data-color-field-input]')) {\n this.#input = document.createElement('span')\n this.#input.setAttribute('data-color-field-input', '')\n this.#input.setAttribute('contenteditable', 'plaintext-only')\n this.#input.setAttribute('spellcheck', 'false')\n this.#input.setAttribute('role', 'textbox')\n this.#input.setAttribute('aria-label', 'Color value')\n this.appendChild(this.#input)\n } else {\n this.#input = this.querySelector('[data-color-field-input]')\n }\n\n // Sync state\n this.addEffect(() => {\n const v = this.value || ''\n if (this.#swatch) {\n this.#swatch.style.setProperty('--_swatch-color', v || 'transparent')\n }\n // Only sync to input if not currently editing\n if (this.#input && document.activeElement !== this.#input) {\n this.#input.textContent = v\n }\n // Empty state for placeholder\n if (v) {\n this.removeAttribute('data-color-field-empty')\n } else {\n this.setAttribute('data-color-field-empty', '')\n }\n })\n\n this.addEffect(() => {\n if (this.#input) {\n if (this.disabled) {\n this.#input.removeAttribute('contenteditable')\n this.#input.setAttribute('aria-disabled', 'true')\n } else {\n this.#input.setAttribute('contenteditable', 'plaintext-only')\n this.#input.removeAttribute('aria-disabled')\n }\n }\n })\n\n this.#input!.addEventListener('input', this.#handleInput)\n this.#input!.addEventListener('blur', this.#handleBlur)\n this.#input!.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.#input?.removeEventListener('input', this.#handleInput)\n this.#input?.removeEventListener('blur', this.#handleBlur)\n this.#input?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #handleInput = (): void => {\n const text = this.#input?.textContent?.trim() || ''\n // Live swatch update for valid colors\n if (this.#isValidColor(text)) {\n this.removeAttribute('data-color-field-invalid')\n if (this.#swatch) {\n this.#swatch.style.setProperty('--_swatch-color', text)\n }\n } else if (text) {\n this.setAttribute('data-color-field-invalid', '')\n }\n }\n\n #handleBlur = (): void => {\n const text = this.#input?.textContent?.trim() || ''\n if (!text) {\n this.value = ''\n this.removeAttribute('data-color-field-invalid')\n return\n }\n if (this.#isValidColor(text)) {\n this.value = text\n this.removeAttribute('data-color-field-invalid')\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value, format: this.format },\n }))\n } else {\n this.setAttribute('data-color-field-invalid', '')\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter') {\n e.preventDefault()\n this.#input?.blur()\n }\n }\n\n #isValidColor(str: string): boolean {\n // Test using CSS.supports for broad format coverage\n if (typeof CSS !== 'undefined' && CSS.supports) {\n return CSS.supports('color', str)\n }\n // Fallback: check common patterns\n return /^#([0-9a-f]{3,8})$/i.test(str) ||\n /^rgb/i.test(str) ||\n /^oklch/i.test(str) ||\n /^hsl/i.test(str)\n }\n}\n","// ── aui-time-field ────────────────────────────────────────────\n//\n// Segmented time input with independently editable hour and minute\n// segments. Supports 12h and 24h formats.\n//\n// Internal structure:\n// aui-time-field\n// span[data-time-segment=\"hour\"] spinbutton\n// span[data-time-separator] \":\"\n// span[data-time-segment=\"minute\"] spinbutton\n// span[data-time-segment=\"period\"] AM/PM (12h only)\n//\n// Each segment is a contenteditable-free span with tabindex and\n// spinbutton role. Keyboard: Arrow Up/Down to increment, digit\n// typing with auto-advance, Left/Right/Tab between segments.\n// No native form elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTimeField extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n step: { type: 'string', default: '1' },\n format: { type: 'string', default: '24h' },\n placeholder: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare min: string\n declare max: string\n declare step: string\n declare format: string\n declare placeholder: string\n declare disabled: boolean\n\n #segments: HTMLElement[] = []\n #digitBuffer = ''\n #digitTimer: ReturnType<typeof setTimeout> | null = null\n\n protected override activate(): void {\n this.#buildSegments()\n\n this.addEffect(() => {\n this.#updateFromValue()\n })\n\n this.addEffect(() => {\n for (const seg of this.#segments) {\n seg.setAttribute('tabindex', this.disabled ? '-1' : '0')\n }\n })\n\n this.addEventListener('keydown', this.#handleKeydown)\n this.addEventListener('focusin', this.#handleFocusIn)\n }\n\n protected override dispose(): void {\n this.removeEventListener('keydown', this.#handleKeydown)\n this.removeEventListener('focusin', this.#handleFocusIn)\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n }\n\n #buildSegments(): void {\n // Clear existing content\n this.innerHTML = ''\n this.#segments = []\n\n const hourSeg = this.#createSegment('hour', 'Hour', 0, this.format === '12h' ? 12 : 23)\n const sep = document.createElement('span')\n sep.setAttribute('data-time-separator', '')\n sep.textContent = ':'\n const minSeg = this.#createSegment('minute', 'Minute', 0, 59)\n\n this.append(hourSeg, sep, minSeg)\n this.#segments = [hourSeg, minSeg]\n\n if (this.format === '12h') {\n const periodSeg = document.createElement('span')\n periodSeg.setAttribute('data-time-segment', 'period')\n periodSeg.setAttribute('tabindex', '0')\n periodSeg.setAttribute('role', 'spinbutton')\n periodSeg.setAttribute('aria-label', 'AM/PM')\n periodSeg.setAttribute('aria-valuemin', '0')\n periodSeg.setAttribute('aria-valuemax', '1')\n periodSeg.textContent = 'AM'\n this.appendChild(periodSeg)\n this.#segments.push(periodSeg)\n }\n }\n\n #createSegment(name: string, label: string, min: number, max: number): HTMLElement {\n const seg = document.createElement('span')\n seg.setAttribute('data-time-segment', name)\n seg.setAttribute('tabindex', '0')\n seg.setAttribute('role', 'spinbutton')\n seg.setAttribute('aria-label', label)\n seg.setAttribute('aria-valuemin', String(min))\n seg.setAttribute('aria-valuemax', String(max))\n seg.textContent = '--'\n return seg\n }\n\n #updateFromValue(): void {\n const val = this.value\n if (!val || !/^\\d{1,2}:\\d{2}$/.test(val)) {\n for (const seg of this.#segments) {\n if (seg.getAttribute('data-time-segment') === 'period') {\n seg.textContent = 'AM'\n } else {\n seg.textContent = '--'\n }\n }\n return\n }\n\n const [hStr, mStr] = val.split(':')\n let h = parseInt(hStr, 10)\n const m = parseInt(mStr, 10)\n\n const hourSeg = this.querySelector('[data-time-segment=\"hour\"]') as HTMLElement\n const minSeg = this.querySelector('[data-time-segment=\"minute\"]') as HTMLElement\n const periodSeg = this.querySelector('[data-time-segment=\"period\"]') as HTMLElement\n\n if (this.format === '12h') {\n const period = h >= 12 ? 'PM' : 'AM'\n h = h % 12 || 12\n if (hourSeg) hourSeg.textContent = String(h).padStart(2, '0')\n if (minSeg) minSeg.textContent = String(m).padStart(2, '0')\n if (periodSeg) periodSeg.textContent = period\n } else {\n if (hourSeg) hourSeg.textContent = String(h).padStart(2, '0')\n if (minSeg) minSeg.textContent = String(m).padStart(2, '0')\n }\n }\n\n #handleFocusIn = (e: FocusEvent): void => {\n this.#digitBuffer = ''\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n // Select segment text visually\n const seg = (e.target as HTMLElement)\n if (seg.hasAttribute('data-time-segment')) {\n const range = document.createRange()\n range.selectNodeContents(seg)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n const seg = e.target as HTMLElement\n if (!seg.hasAttribute('data-time-segment')) return\n const segType = seg.getAttribute('data-time-segment')!\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault()\n this.#incrementSegment(seg, segType, e.key === 'ArrowUp' ? 1 : -1)\n return\n }\n\n if (e.key === 'ArrowRight' || e.key === 'Tab' && !e.shiftKey) {\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n if (e.key === 'ArrowRight') e.preventDefault()\n if (e.key === 'Tab') e.preventDefault()\n this.#segments[idx + 1].focus()\n }\n return\n }\n\n if (e.key === 'ArrowLeft' || e.key === 'Tab' && e.shiftKey) {\n const idx = this.#segments.indexOf(seg)\n if (idx > 0) {\n if (e.key === 'ArrowLeft') e.preventDefault()\n if (e.key === 'Tab') e.preventDefault()\n this.#segments[idx - 1].focus()\n }\n return\n }\n\n if (e.key === 'Backspace') {\n e.preventDefault()\n seg.textContent = '--'\n this.#digitBuffer = ''\n this.#commitValue()\n return\n }\n\n // Digit entry\n if (/^\\d$/.test(e.key) && segType !== 'period') {\n e.preventDefault()\n this.#enterDigit(seg, segType, e.key)\n return\n }\n\n // AM/PM toggle\n if (segType === 'period' && (e.key === 'a' || e.key === 'A' || e.key === 'p' || e.key === 'P')) {\n e.preventDefault()\n seg.textContent = e.key.toLowerCase() === 'a' ? 'AM' : 'PM'\n this.#commitValue()\n return\n }\n }\n\n #enterDigit(seg: HTMLElement, segType: string, digit: string): void {\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n\n this.#digitBuffer += digit\n\n if (this.#digitBuffer.length >= 2) {\n const num = parseInt(this.#digitBuffer, 10)\n const max = segType === 'hour'\n ? (this.format === '12h' ? 12 : 23)\n : 59\n const clamped = Math.min(num, max)\n seg.textContent = String(clamped).padStart(2, '0')\n this.#digitBuffer = ''\n this.#commitValue()\n // Auto-advance to next segment\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n this.#segments[idx + 1].focus()\n }\n } else {\n seg.textContent = digit.padStart(2, '0')\n this.#digitTimer = setTimeout(() => {\n this.#digitBuffer = ''\n this.#commitValue()\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n this.#segments[idx + 1].focus()\n }\n }, 800)\n }\n }\n\n #incrementSegment(seg: HTMLElement, segType: string, dir: number): void {\n if (segType === 'period') {\n seg.textContent = seg.textContent === 'AM' ? 'PM' : 'AM'\n this.#commitValue()\n return\n }\n\n const text = seg.textContent || '--'\n const current = text === '--' ? 0 : parseInt(text, 10)\n const max = segType === 'hour'\n ? (this.format === '12h' ? 12 : 23)\n : 59\n const min = segType === 'hour' && this.format === '12h' ? 1 : 0\n const step = segType === 'minute' ? (parseInt(this.step, 10) || 1) : 1\n\n let next = current + dir * step\n if (next > max) next = min\n if (next < min) next = max\n\n seg.textContent = String(next).padStart(2, '0')\n this.#commitValue()\n }\n\n #commitValue(): void {\n const hourSeg = this.querySelector('[data-time-segment=\"hour\"]') as HTMLElement\n const minSeg = this.querySelector('[data-time-segment=\"minute\"]') as HTMLElement\n\n const hText = hourSeg?.textContent || '--'\n const mText = minSeg?.textContent || '--'\n\n if (hText === '--' || mText === '--') {\n this.value = ''\n return\n }\n\n let h = parseInt(hText, 10)\n const m = parseInt(mText, 10)\n\n if (this.format === '12h') {\n const periodSeg = this.querySelector('[data-time-segment=\"period\"]') as HTMLElement\n const period = periodSeg?.textContent || 'AM'\n if (period === 'PM' && h < 12) h += 12\n if (period === 'AM' && h === 12) h = 0\n }\n\n const newValue = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`\n if (newValue !== this.value) {\n this.value = newValue\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value },\n }))\n }\n }\n}\n","// ── aui-date-field ────────────────────────────────────────────\n//\n// Segmented date input with independently editable month, day,\n// and year segments. Segment order determined by format attribute.\n//\n// Internal structure (MM/DD/YYYY):\n// aui-date-field\n// span[data-date-segment=\"month\"] spinbutton\n// span[data-date-separator] \"/\"\n// span[data-date-segment=\"day\"] spinbutton\n// span[data-date-separator] \"/\"\n// span[data-date-segment=\"year\"] spinbutton\n//\n// Keyboard: Arrow Up/Down to increment, digit typing with\n// auto-advance, Left/Right/Tab between segments. Validates\n// on blur (e.g. Feb 30 clamps to Feb 28/29). No native form elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\ninterface SegmentDef {\n name: string\n label: string\n min: number\n max: number\n digits: number\n}\n\nconst FORMATS: Record<string, { segments: string[]; separator: string }> = {\n 'MM/DD/YYYY': { segments: ['month', 'day', 'year'], separator: '/' },\n 'DD/MM/YYYY': { segments: ['day', 'month', 'year'], separator: '/' },\n 'YYYY-MM-DD': { segments: ['year', 'month', 'day'], separator: '-' },\n}\n\nconst SEGMENT_DEFS: Record<string, SegmentDef> = {\n month: { name: 'month', label: 'Month', min: 1, max: 12, digits: 2 },\n day: { name: 'day', label: 'Day', min: 1, max: 31, digits: 2 },\n year: { name: 'year', label: 'Year', min: 1900, max: 2100, digits: 4 },\n}\n\nexport class AuiDateField extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n format: { type: 'string', default: 'MM/DD/YYYY' },\n placeholder: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare min: string\n declare max: string\n declare format: string\n declare placeholder: string\n declare disabled: boolean\n\n #segments: HTMLElement[] = []\n #digitBuffer = ''\n #digitTimer: ReturnType<typeof setTimeout> | null = null\n\n protected override activate(): void {\n this.#buildSegments()\n\n this.addEffect(() => {\n this.#updateFromValue()\n })\n\n this.addEffect(() => {\n for (const seg of this.#segments) {\n seg.setAttribute('tabindex', this.disabled ? '-1' : '0')\n }\n })\n\n this.addEventListener('keydown', this.#handleKeydown)\n this.addEventListener('focusin', this.#handleFocusIn)\n }\n\n protected override dispose(): void {\n this.removeEventListener('keydown', this.#handleKeydown)\n this.removeEventListener('focusin', this.#handleFocusIn)\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n }\n\n #buildSegments(): void {\n this.innerHTML = ''\n this.#segments = []\n\n const fmt = FORMATS[this.format] || FORMATS['MM/DD/YYYY']\n\n for (let i = 0; i < fmt.segments.length; i++) {\n if (i > 0) {\n const sep = document.createElement('span')\n sep.setAttribute('data-date-separator', '')\n sep.textContent = fmt.separator\n this.appendChild(sep)\n }\n\n const def = SEGMENT_DEFS[fmt.segments[i]]\n const seg = document.createElement('span')\n seg.setAttribute('data-date-segment', def.name)\n seg.setAttribute('tabindex', '0')\n seg.setAttribute('role', 'spinbutton')\n seg.setAttribute('aria-label', def.label)\n seg.setAttribute('aria-valuemin', String(def.min))\n seg.setAttribute('aria-valuemax', String(def.max))\n seg.textContent = def.name === 'year' ? '----' : '--'\n this.appendChild(seg)\n this.#segments.push(seg)\n }\n }\n\n #updateFromValue(): void {\n const val = this.value\n if (!val || !/^\\d{4}-\\d{2}-\\d{2}$/.test(val)) {\n for (const seg of this.#segments) {\n const name = seg.getAttribute('data-date-segment')\n seg.textContent = name === 'year' ? '----' : '--'\n }\n return\n }\n\n const [yStr, mStr, dStr] = val.split('-')\n const monthSeg = this.querySelector('[data-date-segment=\"month\"]') as HTMLElement\n const daySeg = this.querySelector('[data-date-segment=\"day\"]') as HTMLElement\n const yearSeg = this.querySelector('[data-date-segment=\"year\"]') as HTMLElement\n\n if (monthSeg) monthSeg.textContent = mStr\n if (daySeg) daySeg.textContent = dStr\n if (yearSeg) yearSeg.textContent = yStr\n }\n\n #handleFocusIn = (e: FocusEvent): void => {\n this.#digitBuffer = ''\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n const seg = e.target as HTMLElement\n if (seg.hasAttribute('data-date-segment')) {\n const range = document.createRange()\n range.selectNodeContents(seg)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n const seg = e.target as HTMLElement\n if (!seg.hasAttribute('data-date-segment')) return\n const segType = seg.getAttribute('data-date-segment')!\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault()\n this.#incrementSegment(seg, segType, e.key === 'ArrowUp' ? 1 : -1)\n return\n }\n\n if (e.key === 'ArrowRight' || (e.key === 'Tab' && !e.shiftKey)) {\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n e.preventDefault()\n this.#segments[idx + 1].focus()\n }\n return\n }\n\n if (e.key === 'ArrowLeft' || (e.key === 'Tab' && e.shiftKey)) {\n const idx = this.#segments.indexOf(seg)\n if (idx > 0) {\n e.preventDefault()\n this.#segments[idx - 1].focus()\n }\n return\n }\n\n if (e.key === 'Backspace') {\n e.preventDefault()\n const def = SEGMENT_DEFS[segType]\n seg.textContent = def.digits === 4 ? '----' : '--'\n this.#digitBuffer = ''\n this.#commitValue()\n return\n }\n\n // Digit entry\n if (/^\\d$/.test(e.key)) {\n e.preventDefault()\n this.#enterDigit(seg, segType, e.key)\n return\n }\n }\n\n #enterDigit(seg: HTMLElement, segType: string, digit: string): void {\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n const def = SEGMENT_DEFS[segType]\n\n this.#digitBuffer += digit\n\n if (this.#digitBuffer.length >= def.digits) {\n const num = parseInt(this.#digitBuffer, 10)\n const clamped = Math.max(def.min, Math.min(def.max, num))\n seg.textContent = String(clamped).padStart(def.digits, '0')\n this.#digitBuffer = ''\n this.#commitValue()\n // Auto-advance\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n this.#segments[idx + 1].focus()\n }\n } else {\n seg.textContent = this.#digitBuffer.padStart(def.digits, '0')\n this.#digitTimer = setTimeout(() => {\n const num = parseInt(this.#digitBuffer, 10)\n if (!isNaN(num)) {\n const clamped = Math.max(def.min, Math.min(def.max, num))\n seg.textContent = String(clamped).padStart(def.digits, '0')\n }\n this.#digitBuffer = ''\n this.#commitValue()\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n this.#segments[idx + 1].focus()\n }\n }, 800)\n }\n }\n\n #incrementSegment(seg: HTMLElement, segType: string, dir: number): void {\n const def = SEGMENT_DEFS[segType]\n const text = seg.textContent || ''\n const isEmpty = text === '--' || text === '----'\n const current = isEmpty ? (dir > 0 ? def.min - 1 : def.max + 1) : parseInt(text, 10)\n\n let next = current + dir\n if (next > def.max) next = def.min\n if (next < def.min) next = def.max\n\n seg.textContent = String(next).padStart(def.digits, '0')\n this.#commitValue()\n }\n\n #commitValue(): void {\n const monthSeg = this.querySelector('[data-date-segment=\"month\"]') as HTMLElement\n const daySeg = this.querySelector('[data-date-segment=\"day\"]') as HTMLElement\n const yearSeg = this.querySelector('[data-date-segment=\"year\"]') as HTMLElement\n\n const mText = monthSeg?.textContent || '--'\n const dText = daySeg?.textContent || '--'\n const yText = yearSeg?.textContent || '----'\n\n if (mText === '--' || dText === '--' || yText === '----') {\n this.value = ''\n return\n }\n\n let m = parseInt(mText, 10)\n let d = parseInt(dText, 10)\n const y = parseInt(yText, 10)\n\n // Clamp day to valid range for month\n const maxDay = new Date(y, m, 0).getDate()\n if (d > maxDay) {\n d = maxDay\n if (daySeg) daySeg.textContent = String(d).padStart(2, '0')\n }\n\n const newValue = `${String(y).padStart(4, '0')}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`\n if (newValue !== this.value) {\n this.value = newValue\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value, date: new Date(y, m - 1, d) },\n }))\n }\n }\n}\n","// ── aui-context-menu ────────────────────────────────────────\n//\n// Right-click triggered context menu using the Popover API.\n// Positions a popover at the pointer location on `contextmenu`\n// event. Reuses aui-option for items and aui-optgroup for groups.\n//\n// Keyboard: ArrowDown/Up to navigate, Enter to select, Escape to close.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Helpers ────────────────────────────────────────────────\n\nfunction isOptionOrGroup(el: Element): boolean {\n return el.tagName === 'AUI-OPTION' || el.tagName === 'AUI-OPTGROUP'\n}\n\n// ── Component ──────────────────────────────────────────────\n\nexport class AuiContextMenu extends AgentElement {\n static override attributes: AttributeSchema = {\n target: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n open: { type: 'boolean', default: false },\n }\n\n declare target: string\n declare disabled: boolean\n declare open: boolean\n\n #popover: HTMLElement | null = null\n #listbox: HTMLElement | null = null\n #targetEl: Element | null = null\n #activeIndex = -1\n\n protected override activate(): void {\n // ── Stamp popover + listbox ────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-context-menu-popover', '')\n this.#popover.setAttribute('role', 'menu')\n\n this.#listbox = document.createElement('div')\n this.#listbox.setAttribute('data-context-menu-list', '')\n this.#listbox.setAttribute('role', 'menu')\n this.#listbox.setAttribute('tabindex', '-1')\n this.#popover.appendChild(this.#listbox)\n\n // Move child options/groups into listbox\n const children = Array.from(this.children)\n for (const child of children) {\n if (isOptionOrGroup(child)) {\n this.#listbox.appendChild(child)\n }\n }\n\n this.appendChild(this.#popover)\n\n // ── Resolve target ─────────────────────────────────\n this.addEffect(() => {\n // Detach from previous target\n if (this.#targetEl) {\n this.#targetEl.removeEventListener('contextmenu', this.#onContextMenu as EventListener)\n this.#targetEl = null\n }\n\n // Resolve new target\n const selector = this.target\n if (selector) {\n this.#targetEl = document.querySelector(selector)\n }\n if (!this.#targetEl) {\n // Fallback: parent element\n this.#targetEl = this.parentElement\n }\n\n if (this.#targetEl) {\n this.#targetEl.addEventListener('contextmenu', this.#onContextMenu as EventListener)\n }\n })\n\n // ── Events ─────────────────────────────────────────\n this.#listbox.addEventListener('click', this.#onListboxClick)\n this.#listbox.addEventListener('keydown', this.#onListboxKeydown)\n document.addEventListener('click', this.#onOutsideClick)\n document.addEventListener('keydown', this.#onDocumentKeydown)\n }\n\n protected override dispose(): void {\n if (this.#targetEl) {\n this.#targetEl.removeEventListener('contextmenu', this.#onContextMenu as EventListener)\n }\n this.#listbox?.removeEventListener('click', this.#onListboxClick)\n this.#listbox?.removeEventListener('keydown', this.#onListboxKeydown)\n document.removeEventListener('click', this.#onOutsideClick)\n document.removeEventListener('keydown', this.#onDocumentKeydown)\n this.#closeMenu()\n }\n\n // ── Options ─────────────────────────────────────────────\n\n get options(): HTMLElement[] {\n return Array.from(this.#listbox?.querySelectorAll('aui-option') ?? [])\n }\n\n get enabledOptions(): HTMLElement[] {\n return this.options.filter(o => !o.hasAttribute('disabled'))\n }\n\n // ── Popover control ─────────────────────────────────────\n\n #openMenu(x: number, y: number): void {\n if (!this.#popover || this.disabled) return\n this.#popover.style.left = `${x}px`\n this.#popover.style.top = `${y}px`\n try { this.#popover.showPopover() } catch {}\n this.open = true\n this.#activeIndex = -1\n this.#clearActive()\n // Focus the listbox for keyboard nav\n requestAnimationFrame(() => this.#listbox?.focus())\n }\n\n #closeMenu(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n this.#activeIndex = -1\n this.#clearActive()\n }\n\n // ── Active (keyboard highlight) ─────────────────────────\n\n #setActive(index: number): void {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n this.#clearActive()\n this.#activeIndex = Math.max(0, Math.min(index, opts.length - 1))\n const opt = opts[this.#activeIndex]\n opt.setAttribute('data-navigate-active', '')\n opt.scrollIntoView({ block: 'nearest' })\n }\n\n #clearActive(): void {\n for (const opt of this.options) {\n opt.removeAttribute('data-navigate-active')\n }\n }\n\n // ── Select ──────────────────────────────────────────────\n\n #selectOption(opt: HTMLElement): void {\n const value = opt.getAttribute('value') ?? opt.textContent?.trim() ?? ''\n this.#closeMenu()\n this.dispatchEvent(new CustomEvent('select', {\n bubbles: true,\n composed: true,\n detail: { value },\n }))\n }\n\n // ── Event handlers ──────────────────────────────────────\n\n #onContextMenu = (e: MouseEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n // Close any currently open menu first\n if (this.open) this.#closeMenu()\n this.#openMenu(e.clientX, e.clientY)\n }\n\n #onListboxClick = (e: Event): void => {\n const option = (e.target as HTMLElement).closest('aui-option') as HTMLElement | null\n if (!option || option.hasAttribute('disabled')) return\n this.#selectOption(option)\n }\n\n #onListboxKeydown = (e: KeyboardEvent): void => {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = this.#activeIndex < opts.length - 1 ? this.#activeIndex + 1 : 0\n this.#setActive(next)\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = this.#activeIndex > 0 ? this.#activeIndex - 1 : opts.length - 1\n this.#setActive(prev)\n break\n }\n case 'Home': {\n e.preventDefault()\n this.#setActive(0)\n break\n }\n case 'End': {\n e.preventDefault()\n this.#setActive(opts.length - 1)\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n const active = opts[this.#activeIndex]\n if (active) this.#selectOption(active)\n break\n }\n case 'Escape': {\n e.preventDefault()\n this.#closeMenu()\n break\n }\n }\n }\n\n #onOutsideClick = (e: Event): void => {\n if (this.open && !this.#popover?.contains(e.target as Node)) {\n this.#closeMenu()\n }\n }\n\n #onDocumentKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n this.#closeMenu()\n }\n }\n}\n","// ── aui-dropdown-menu ───────────────────────────────────────\n//\n// Trigger button + popover menu for ACTIONS (not selection).\n// Unlike aui-select, does not track selection state — items\n// are fire-and-forget actions that emit a `select` event.\n//\n// Stamps a trigger span with button styling, opens a popover\n// with aui-option items on click. Keyboard: arrow nav, Enter\n// to select, Escape to close.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Constants ────────────────────────────────────────────────\n\nconst CHEVRON_SVG = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><polyline points=\"48,80 128,160 208,80\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"24\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n\n// ── Helpers ──────────────────────────────────────────────────\n\nfunction isOptionOrGroup(el: Element): boolean {\n return el.tagName === 'AUI-OPTION' || el.tagName === 'AUI-OPTGROUP'\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiDropdownMenu extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n 'icon-leading': { type: 'string', default: '' },\n 'icon-trailing': { type: 'string', default: '' },\n 'hide-label': { type: 'boolean', default: false },\n disabled: { type: 'boolean', default: false },\n open: { type: 'boolean', default: false },\n }\n\n declare label: string\n declare disabled: boolean\n declare open: boolean\n\n #anchorName: string = ''\n #trigger: HTMLElement | null = null\n #triggerLabel: HTMLElement | null = null\n #chevron: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #listbox: HTMLElement | null = null\n #activeIndex = -1\n\n protected override activate(): void {\n const id = `dropdown-menu-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Stamp trigger ────────────────────────────────────\n this.#trigger = document.createElement('span')\n this.#trigger.setAttribute('data-trigger', '')\n this.#trigger.setAttribute('role', 'button')\n this.#trigger.setAttribute('aria-haspopup', 'menu')\n this.#trigger.setAttribute('tabindex', '0')\n this.#trigger.id = id\n\n this.#triggerLabel = document.createElement('span')\n this.#triggerLabel.setAttribute('data-label', '')\n this.#trigger.appendChild(this.#triggerLabel)\n\n this.#chevron = document.createElement('span')\n this.#chevron.setAttribute('data-chevron', '')\n this.#chevron.innerHTML = CHEVRON_SVG\n this.#trigger.appendChild(this.#chevron)\n\n // ── Stamp popover + listbox ──────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'auto')\n this.#popover.setAttribute('data-dropdown', '')\n\n this.#listbox = document.createElement('div')\n this.#listbox.setAttribute('data-dropdown-menu-list', '')\n this.#listbox.setAttribute('role', 'menu')\n this.#listbox.setAttribute('tabindex', '-1')\n this.#popover.appendChild(this.#listbox)\n\n // Move child options/groups into listbox\n const children = Array.from(this.children)\n for (const child of children) {\n if (isOptionOrGroup(child)) {\n this.#listbox.appendChild(child)\n }\n }\n\n this.appendChild(this.#trigger!)\n this.appendChild(this.#popover!)\n\n // Anchor positioning\n ;(this.#trigger.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // ── Sync state ───────────────────────────────────────\n this.addEffect(() => {\n if (this.disabled) {\n this.#trigger!.setAttribute('tabindex', '-1')\n } else {\n this.#trigger!.setAttribute('tabindex', '0')\n }\n this.#trigger!.setAttribute('aria-expanded', String(this.open))\n this.#trigger!.setAttribute('aria-disabled', String(this.disabled))\n\n // Label\n const label = this.label || ''\n this.#triggerLabel!.textContent = label\n })\n\n // ── Events ───────────────────────────────────────────\n this.#trigger.addEventListener('click', this.#onTriggerClick)\n this.#trigger.addEventListener('keydown', this.#onTriggerKeydown)\n this.#listbox.addEventListener('click', this.#onListboxClick)\n this.#listbox.addEventListener('keydown', this.#onListboxKeydown)\n document.addEventListener('click', this.#onOutsideClick)\n }\n\n protected override dispose(): void {\n this.#trigger?.removeEventListener('click', this.#onTriggerClick)\n this.#trigger?.removeEventListener('keydown', this.#onTriggerKeydown)\n this.#listbox?.removeEventListener('click', this.#onListboxClick)\n this.#listbox?.removeEventListener('keydown', this.#onListboxKeydown)\n document.removeEventListener('click', this.#onOutsideClick)\n this.#closeMenu()\n }\n\n // ── Options ─────────────────────────────────────────────\n\n get options(): HTMLElement[] {\n return Array.from(this.#listbox?.querySelectorAll('aui-option') ?? [])\n }\n\n get enabledOptions(): HTMLElement[] {\n return this.options.filter(o => !o.hasAttribute('disabled'))\n }\n\n // ── Popover control ─────────────────────────────────────\n\n #openMenu(): void {\n if (!this.#popover || this.disabled) return\n try { this.#popover.showPopover() } catch {}\n this.open = true\n this.#activeIndex = -1\n this.#clearActive()\n requestAnimationFrame(() => this.#listbox?.focus())\n }\n\n #closeMenu(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n this.#activeIndex = -1\n this.#clearActive()\n }\n\n // ── Active (keyboard highlight) ─────────────────────────\n\n #setActive(index: number): void {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n this.#clearActive()\n this.#activeIndex = Math.max(0, Math.min(index, opts.length - 1))\n const opt = opts[this.#activeIndex]\n opt.setAttribute('data-navigate-active', '')\n opt.scrollIntoView({ block: 'nearest' })\n }\n\n #clearActive(): void {\n for (const opt of this.options) {\n opt.removeAttribute('data-navigate-active')\n }\n }\n\n // ── Select ──────────────────────────────────────────────\n\n #selectOption(opt: HTMLElement): void {\n const value = opt.getAttribute('value') ?? opt.textContent?.trim() ?? ''\n this.#closeMenu()\n this.#trigger?.focus()\n this.dispatchEvent(new CustomEvent('select', {\n bubbles: true,\n composed: true,\n detail: { value },\n }))\n }\n\n // ── Event handlers ──────────────────────────────────────\n\n #onTriggerClick = (): void => {\n if (this.disabled) return\n if (this.open) this.#closeMenu()\n else this.#openMenu()\n }\n\n #onTriggerKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!this.open) this.#openMenu()\n } else if (e.key === 'Escape') {\n this.#closeMenu()\n }\n }\n\n #onListboxClick = (e: Event): void => {\n const option = (e.target as HTMLElement).closest('aui-option') as HTMLElement | null\n if (!option || option.hasAttribute('disabled')) return\n this.#selectOption(option)\n }\n\n #onListboxKeydown = (e: KeyboardEvent): void => {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = this.#activeIndex < opts.length - 1 ? this.#activeIndex + 1 : 0\n this.#setActive(next)\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = this.#activeIndex > 0 ? this.#activeIndex - 1 : opts.length - 1\n this.#setActive(prev)\n break\n }\n case 'Home': {\n e.preventDefault()\n this.#setActive(0)\n break\n }\n case 'End': {\n e.preventDefault()\n this.#setActive(opts.length - 1)\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n const active = opts[this.#activeIndex]\n if (active) this.#selectOption(active)\n break\n }\n case 'Escape': {\n e.preventDefault()\n this.#closeMenu()\n this.#trigger?.focus()\n break\n }\n case 'Tab': {\n this.#closeMenu()\n break\n }\n }\n }\n\n #onOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) {\n this.#closeMenu()\n }\n }\n}\n","// ── aui-hover-card ──────────────────────────────────────────\n//\n// Rich preview card shown on hover/focus with configurable delay.\n// Uses Popover API + CSS anchor positioning. Resolves anchor from\n// a CSS selector or falls back to previous sibling / parent.\n//\n// On hover: show after delay. On leave: hide after hide-delay.\n// Moving pointer into the card cancels the hide timer.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiHoverCard extends AgentElement {\n static override attributes: AttributeSchema = {\n anchor: { type: 'string', default: '' },\n delay: { type: 'string', default: '300' },\n 'hide-delay': { type: 'string', default: '200' },\n side: { type: 'enum', values: ['top', 'bottom', 'left', 'right'], default: 'bottom' },\n open: { type: 'boolean', default: false },\n }\n\n declare anchor: string\n declare delay: string\n declare side: string\n declare open: boolean\n\n #popover: HTMLElement | null = null\n #anchorEl: HTMLElement | null = null\n #anchorName: string = ''\n #showTimer: ReturnType<typeof setTimeout> | null = null\n #hideTimer: ReturnType<typeof setTimeout> | null = null\n\n protected override activate(): void {\n const id = `hover-card-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Create popover surface ────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-hover-card-popover', '')\n this.#popover.setAttribute('role', 'tooltip')\n this.#popover.id = id\n\n // Move all child content into the popover\n while (this.firstChild) {\n this.#popover.appendChild(this.firstChild)\n }\n this.appendChild(this.#popover)\n\n // Pass anchor name to CSS\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // ── Resolve anchor ────────────────────────────────\n this.addEffect(() => {\n // Detach from previous anchor\n if (this.#anchorEl) {\n this.#anchorEl.removeEventListener('mouseenter', this.#onAnchorEnter)\n this.#anchorEl.removeEventListener('mouseleave', this.#onAnchorLeave)\n this.#anchorEl.removeEventListener('focusin', this.#onAnchorFocusIn)\n this.#anchorEl.removeEventListener('focusout', this.#onAnchorFocusOut)\n ;(this.#anchorEl.style as any).anchorName = ''\n this.#anchorEl.removeAttribute('aria-describedby')\n this.#anchorEl = null\n }\n\n // Resolve new anchor\n const selector = this.anchor\n if (selector) {\n this.#anchorEl = document.querySelector(selector)\n }\n if (!this.#anchorEl) {\n this.#anchorEl = (this.previousElementSibling as HTMLElement) ?? this.parentElement\n }\n\n if (this.#anchorEl) {\n ;(this.#anchorEl.style as any).anchorName = this.#anchorName\n this.#anchorEl.setAttribute('aria-describedby', id)\n this.#anchorEl.addEventListener('mouseenter', this.#onAnchorEnter)\n this.#anchorEl.addEventListener('mouseleave', this.#onAnchorLeave)\n this.#anchorEl.addEventListener('focusin', this.#onAnchorFocusIn)\n this.#anchorEl.addEventListener('focusout', this.#onAnchorFocusOut)\n }\n })\n\n // ── Popover pointer events (cancel hide when hovering card) ──\n this.#popover.addEventListener('mouseenter', this.#onPopoverEnter)\n this.#popover.addEventListener('mouseleave', this.#onPopoverLeave)\n\n // ── Escape key ────────────────────────────────────\n this.addEventListener('keydown', this.#onKeydown)\n }\n\n protected override dispose(): void {\n this.#clearTimers()\n if (this.#anchorEl) {\n this.#anchorEl.removeEventListener('mouseenter', this.#onAnchorEnter)\n this.#anchorEl.removeEventListener('mouseleave', this.#onAnchorLeave)\n this.#anchorEl.removeEventListener('focusin', this.#onAnchorFocusIn)\n this.#anchorEl.removeEventListener('focusout', this.#onAnchorFocusOut)\n ;(this.#anchorEl.style as any).anchorName = ''\n this.#anchorEl.removeAttribute('aria-describedby')\n }\n this.#popover?.removeEventListener('mouseenter', this.#onPopoverEnter)\n this.#popover?.removeEventListener('mouseleave', this.#onPopoverLeave)\n this.removeEventListener('keydown', this.#onKeydown)\n this.#hide()\n }\n\n // ── Show / Hide ─────────────────────────────────────────\n\n #show(): void {\n if (!this.#popover) return\n try { this.#popover.showPopover() } catch {}\n this.open = true\n }\n\n #hide(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n }\n\n #clearTimers(): void {\n if (this.#showTimer !== null) { clearTimeout(this.#showTimer); this.#showTimer = null }\n if (this.#hideTimer !== null) { clearTimeout(this.#hideTimer); this.#hideTimer = null }\n }\n\n #scheduleShow(): void {\n this.#clearTimers()\n const ms = parseInt(this.delay) || 300\n this.#showTimer = setTimeout(() => {\n this.#showTimer = null\n this.#show()\n }, ms)\n }\n\n #scheduleHide(): void {\n if (this.#showTimer !== null) { clearTimeout(this.#showTimer); this.#showTimer = null }\n const hideDelay = this.getAttribute('hide-delay')\n const ms = hideDelay !== null ? (parseInt(hideDelay) || 200) : 200\n this.#hideTimer = setTimeout(() => {\n this.#hideTimer = null\n this.#hide()\n }, ms)\n }\n\n // ── Event handlers ──────────────────────────────────────\n\n #onAnchorEnter = (): void => {\n this.#scheduleShow()\n }\n\n #onAnchorLeave = (): void => {\n this.#scheduleHide()\n }\n\n #onAnchorFocusIn = (): void => {\n this.#scheduleShow()\n }\n\n #onAnchorFocusOut = (): void => {\n this.#scheduleHide()\n }\n\n #onPopoverEnter = (): void => {\n // Cancel pending hide — user moved into the card\n if (this.#hideTimer !== null) {\n clearTimeout(this.#hideTimer)\n this.#hideTimer = null\n }\n }\n\n #onPopoverLeave = (): void => {\n this.#scheduleHide()\n }\n\n #onKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n this.#clearTimers()\n this.#hide()\n }\n }\n}\n","// ── aui-color-picker ────────────────────────────────────────\n//\n// Compound color picker composing:\n// - aui-color-area (saturation + lightness 2D surface)\n// - aui-color-slider[channel=\"hue\"]\n// - aui-color-slider[channel=\"alpha\"] (optional)\n// - aui-color-field (text input with swatch)\n//\n// Syncs all sub-components bidirectionally. Parses/serializes\n// between hex and HSL internally.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Color conversion helpers ──────────────────────────────────\n\nfunction hexToHsl(hex: string): { h: number; s: number; l: number; a: number } {\n let r = 0, g = 0, b = 0, a = 1\n hex = hex.replace(/^#/, '')\n\n if (hex.length === 3 || hex.length === 4) {\n r = parseInt(hex[0] + hex[0], 16) / 255\n g = parseInt(hex[1] + hex[1], 16) / 255\n b = parseInt(hex[2] + hex[2], 16) / 255\n if (hex.length === 4) a = parseInt(hex[3] + hex[3], 16) / 255\n } else if (hex.length === 6 || hex.length === 8) {\n r = parseInt(hex.slice(0, 2), 16) / 255\n g = parseInt(hex.slice(2, 4), 16) / 255\n b = parseInt(hex.slice(4, 6), 16) / 255\n if (hex.length === 8) a = parseInt(hex.slice(6, 8), 16) / 255\n }\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const diff = max - min\n\n let h = 0\n let s = 0\n const l = (max + min) / 2\n\n if (diff !== 0) {\n s = l > 0.5 ? diff / (2 - max - min) : diff / (max + min)\n switch (max) {\n case r: h = ((g - b) / diff + (g < b ? 6 : 0)) / 6; break\n case g: h = ((b - r) / diff + 2) / 6; break\n case b: h = ((r - g) / diff + 4) / 6; break\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n a: Math.round(a * 100) / 100,\n }\n}\n\nfunction hslToHex(h: number, s: number, l: number, a = 1): string {\n s /= 100\n l /= 100\n\n const c = (1 - Math.abs(2 * l - 1)) * s\n const x = c * (1 - Math.abs((h / 60) % 2 - 1))\n const m = l - c / 2\n\n let r = 0, g = 0, b = 0\n if (h < 60) { r = c; g = x; b = 0 }\n else if (h < 120) { r = x; g = c; b = 0 }\n else if (h < 180) { r = 0; g = c; b = x }\n else if (h < 240) { r = 0; g = x; b = c }\n else if (h < 300) { r = x; g = 0; b = c }\n else { r = c; g = 0; b = x }\n\n const toHex = (v: number) => Math.round((v + m) * 255).toString(16).padStart(2, '0')\n let hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`\n if (a < 1) {\n hex += Math.round(a * 255).toString(16).padStart(2, '0')\n }\n return hex\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiColorPicker extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '#000000' },\n format: { type: 'string', default: 'hex' },\n 'show-alpha': { type: 'boolean', default: false },\n disabled: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare format: string\n declare disabled: boolean\n\n #area: HTMLElement | null = null\n #hueSlider: HTMLElement | null = null\n #alphaSlider: HTMLElement | null = null\n #field: HTMLElement | null = null\n\n // Internal HSL(A) state\n #h = 0\n #s = 0\n #l = 0\n #a = 1\n #updating = false\n\n protected override activate(): void {\n // ── Stamp sub-components ──────────────────────────\n this.#area = document.createElement('aui-color-area')\n this.#area.setAttribute('data-color-picker-area', '')\n\n this.#hueSlider = document.createElement('aui-color-slider')\n this.#hueSlider.setAttribute('channel', 'hue')\n this.#hueSlider.setAttribute('data-color-picker-hue', '')\n\n this.#alphaSlider = document.createElement('aui-color-slider')\n this.#alphaSlider.setAttribute('channel', 'alpha')\n this.#alphaSlider.setAttribute('data-color-picker-alpha', '')\n\n this.#field = document.createElement('aui-color-field')\n this.#field.setAttribute('data-color-picker-field', '')\n\n this.appendChild(this.#area)\n this.appendChild(this.#hueSlider)\n this.appendChild(this.#alphaSlider)\n this.appendChild(this.#field)\n\n // ── Parse initial value ──────────────────────────\n this.#parseValue()\n\n // ── Sync state to sub-components ─────────────────\n this.addEffect(() => {\n const showAlpha = this.hasAttribute('show-alpha')\n if (showAlpha) {\n this.#alphaSlider!.style.display = ''\n } else {\n this.#alphaSlider!.style.display = 'none'\n }\n\n if (this.disabled) {\n this.#area!.setAttribute('disabled', '')\n this.#hueSlider!.setAttribute('disabled', '')\n this.#alphaSlider!.setAttribute('disabled', '')\n this.#field!.setAttribute('disabled', '')\n } else {\n this.#area!.removeAttribute('disabled')\n this.#hueSlider!.removeAttribute('disabled')\n this.#alphaSlider!.removeAttribute('disabled')\n this.#field!.removeAttribute('disabled')\n }\n })\n\n this.addEffect(() => {\n if (this.#updating) return\n this.#parseValue()\n this.#syncToSubComponents()\n })\n\n // ── Listen to sub-component events ───────────────\n this.#area!.addEventListener('input', this.#onAreaInput as EventListener)\n this.#area!.addEventListener('change', this.#onAreaChange as EventListener)\n this.#hueSlider!.addEventListener('input', this.#onHueInput as EventListener)\n this.#hueSlider!.addEventListener('change', this.#onHueChange as EventListener)\n this.#alphaSlider!.addEventListener('input', this.#onAlphaInput as EventListener)\n this.#alphaSlider!.addEventListener('change', this.#onAlphaChange as EventListener)\n this.#field!.addEventListener('change', this.#onFieldChange as EventListener)\n }\n\n protected override dispose(): void {\n this.#area?.removeEventListener('input', this.#onAreaInput as EventListener)\n this.#area?.removeEventListener('change', this.#onAreaChange as EventListener)\n this.#hueSlider?.removeEventListener('input', this.#onHueInput as EventListener)\n this.#hueSlider?.removeEventListener('change', this.#onHueChange as EventListener)\n this.#alphaSlider?.removeEventListener('input', this.#onAlphaInput as EventListener)\n this.#alphaSlider?.removeEventListener('change', this.#onAlphaChange as EventListener)\n this.#field?.removeEventListener('change', this.#onFieldChange as EventListener)\n }\n\n // ── Value parsing ───────────────────────────────────────\n\n #parseValue(): void {\n const val = this.value || '#000000'\n if (val.startsWith('#')) {\n const hsl = hexToHsl(val)\n this.#h = hsl.h\n this.#s = hsl.s\n this.#l = hsl.l\n this.#a = hsl.a\n }\n }\n\n // ── Sync sub-components ─────────────────────────────────\n\n #syncToSubComponents(): void {\n if (this.#area) {\n this.#area.setAttribute('hue', String(this.#h))\n this.#area.setAttribute('saturation', String(this.#s))\n this.#area.setAttribute('lightness', String(this.#l))\n }\n if (this.#hueSlider) {\n this.#hueSlider.setAttribute('value', String(this.#h))\n this.#hueSlider.setAttribute('hue', String(this.#h))\n this.#hueSlider.setAttribute('saturation', String(this.#s))\n this.#hueSlider.setAttribute('lightness', String(this.#l))\n }\n if (this.#alphaSlider) {\n this.#alphaSlider.setAttribute('value', String(this.#a))\n this.#alphaSlider.setAttribute('hue', String(this.#h))\n this.#alphaSlider.setAttribute('saturation', String(this.#s))\n this.#alphaSlider.setAttribute('lightness', String(this.#l))\n }\n if (this.#field) {\n const hex = hslToHex(this.#h, this.#s, this.#l, this.#a)\n this.#field.setAttribute('value', hex)\n }\n }\n\n #updateValue(): void {\n this.#updating = true\n this.value = hslToHex(this.#h, this.#s, this.#l, this.#a)\n this.#syncToSubComponents()\n this.#updating = false\n }\n\n #dispatchChange(): void {\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: {\n value: this.value,\n h: this.#h,\n s: this.#s,\n l: this.#l,\n a: this.#a,\n },\n }))\n }\n\n // ── Event handlers ──────────────────────────────────────\n\n #onAreaInput = (e: CustomEvent): void => {\n e.stopPropagation()\n this.#s = e.detail.s\n this.#l = e.detail.l\n this.#updateValue()\n }\n\n #onAreaChange = (e: CustomEvent): void => {\n e.stopPropagation()\n this.#s = e.detail.s\n this.#l = e.detail.l\n this.#updateValue()\n this.#dispatchChange()\n }\n\n #onHueInput = (e: CustomEvent): void => {\n e.stopPropagation()\n this.#h = e.detail.value\n this.#updateValue()\n }\n\n #onHueChange = (e: CustomEvent): void => {\n e.stopPropagation()\n this.#h = e.detail.value\n this.#updateValue()\n this.#dispatchChange()\n }\n\n #onAlphaInput = (e: CustomEvent): void => {\n e.stopPropagation()\n this.#a = e.detail.value\n this.#updateValue()\n }\n\n #onAlphaChange = (e: CustomEvent): void => {\n e.stopPropagation()\n this.#a = e.detail.value\n this.#updateValue()\n this.#dispatchChange()\n }\n\n #onFieldChange = (e: CustomEvent): void => {\n e.stopPropagation()\n const newVal = e.detail.value || ''\n if (newVal.startsWith('#')) {\n const hsl = hexToHsl(newVal)\n this.#h = hsl.h\n this.#s = hsl.s\n this.#l = hsl.l\n this.#a = hsl.a\n this.#updateValue()\n this.#dispatchChange()\n }\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nfunction parseMaxSize(str: string): number {\n const match = str.match(/^(\\d+(?:\\.\\d+)?)\\s*(KB|MB|GB)$/i)\n if (!match) return Infinity\n const val = parseFloat(match[1])\n const unit = match[2].toUpperCase()\n if (unit === 'KB') return val * 1024\n if (unit === 'MB') return val * 1024 * 1024\n if (unit === 'GB') return val * 1024 * 1024 * 1024\n return Infinity\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nexport class AuiFileUpload extends AgentElement {\n static override attributes: AttributeSchema = {\n accept: { type: 'string', default: '' },\n multiple: { type: 'boolean', default: false },\n 'max-size': { type: 'string', default: '' },\n 'max-files': { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare accept: string\n declare multiple: boolean\n declare 'max-size': string\n declare 'max-files': string\n declare disabled: boolean\n\n #zone: HTMLElement | null = null\n #input: HTMLInputElement | null = null\n #list: HTMLElement | null = null\n #files: File[] = []\n\n get files(): File[] {\n return [...this.#files]\n }\n\n protected override activate(): void {\n // Stamp drop zone\n this.#zone = document.createElement('div')\n this.#zone.setAttribute('data-file-upload-zone', '')\n\n const icon = document.createElement('aui-icon')\n icon.setAttribute('name', 'upload-simple')\n icon.setAttribute('size', 'lg')\n this.#zone.appendChild(icon)\n\n const text = document.createElement('span')\n text.setAttribute('data-file-upload-text', '')\n text.textContent = 'Drop files here or click to browse'\n this.#zone.appendChild(text)\n\n this.#input = document.createElement('input')\n this.#input.type = 'file'\n this.#input.setAttribute('data-file-upload-input', '')\n this.#input.hidden = true\n this.#zone.appendChild(this.#input)\n\n this.#list = document.createElement('div')\n this.#list.setAttribute('data-file-upload-list', '')\n\n this.prepend(this.#zone)\n this.appendChild(this.#list)\n\n // Reactive: sync input attrs\n this.addEffect(() => {\n if (!this.#input) return\n if (this.accept) this.#input.accept = this.accept\n else this.#input.removeAttribute('accept')\n this.#input.multiple = this.multiple\n })\n\n // Event: click zone to open file picker\n this.#zone.addEventListener('click', this.#onZoneClick)\n\n // Event: file input change\n this.#input.addEventListener('change', this.#onInputChange)\n\n // Drag events\n this.#zone.addEventListener('dragover', this.#onDragOver)\n this.#zone.addEventListener('dragleave', this.#onDragLeave)\n this.#zone.addEventListener('drop', this.#onDrop)\n }\n\n protected override dispose(): void {\n this.#zone?.removeEventListener('click', this.#onZoneClick)\n this.#zone?.removeEventListener('dragover', this.#onDragOver)\n this.#zone?.removeEventListener('dragleave', this.#onDragLeave)\n this.#zone?.removeEventListener('drop', this.#onDrop)\n this.#input?.removeEventListener('change', this.#onInputChange)\n this.#zone?.remove()\n this.#list?.remove()\n this.#zone = null\n this.#input = null\n this.#list = null\n this.#files = []\n }\n\n #onZoneClick = (): void => {\n if (this.disabled) return\n this.#input?.click()\n }\n\n #onInputChange = (): void => {\n if (!this.#input?.files) return\n this.#addFiles(Array.from(this.#input.files))\n this.#input.value = ''\n }\n\n #onDragOver = (e: DragEvent): void => {\n e.preventDefault()\n if (this.disabled) return\n this.#zone?.setAttribute('data-file-upload-drag-active', '')\n }\n\n #onDragLeave = (): void => {\n this.#zone?.removeAttribute('data-file-upload-drag-active')\n }\n\n #onDrop = (e: DragEvent): void => {\n e.preventDefault()\n this.#zone?.removeAttribute('data-file-upload-drag-active')\n if (this.disabled) return\n if (!e.dataTransfer?.files) return\n this.#addFiles(Array.from(e.dataTransfer.files))\n }\n\n #addFiles(incoming: File[]): void {\n const maxSize = this['max-size'] ? parseMaxSize(this['max-size']) : Infinity\n const maxFiles = this['max-files'] ? parseInt(this['max-files'], 10) : Infinity\n\n for (const file of incoming) {\n if (file.size > maxSize) continue\n if (this.#files.length >= maxFiles) break\n // Skip duplicates by name+size\n if (this.#files.some(f => f.name === file.name && f.size === file.size)) continue\n this.#files.push(file)\n }\n\n this.#renderList()\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { files: this.files },\n }))\n }\n\n #removeFile(index: number): void {\n const file = this.#files[index]\n if (!file) return\n this.#files.splice(index, 1)\n this.#renderList()\n this.dispatchEvent(new CustomEvent('remove', {\n bubbles: true,\n detail: { file, index },\n }))\n }\n\n #renderList(): void {\n if (!this.#list) return\n this.#list.innerHTML = ''\n\n for (let i = 0; i < this.#files.length; i++) {\n const file = this.#files[i]\n const item = document.createElement('div')\n item.setAttribute('data-file-upload-item', '')\n\n // Image preview\n if (file.type.startsWith('image/')) {\n const preview = document.createElement('img')\n preview.setAttribute('data-file-upload-preview', '')\n preview.src = URL.createObjectURL(file)\n preview.alt = file.name\n item.appendChild(preview)\n } else {\n const icon = document.createElement('aui-icon')\n icon.setAttribute('name', 'file-text')\n icon.setAttribute('size', 'sm')\n icon.setAttribute('data-file-upload-file-icon', '')\n item.appendChild(icon)\n }\n\n const nameEl = document.createElement('span')\n nameEl.setAttribute('data-file-upload-name', '')\n nameEl.textContent = file.name\n item.appendChild(nameEl)\n\n const sizeEl = document.createElement('span')\n sizeEl.setAttribute('data-file-upload-size', '')\n sizeEl.textContent = formatSize(file.size)\n item.appendChild(sizeEl)\n\n const removeBtn = document.createElement('button')\n removeBtn.setAttribute('data-file-upload-remove', '')\n removeBtn.setAttribute('aria-label', `Remove ${file.name}`)\n removeBtn.innerHTML = '<aui-icon name=\"x\" size=\"xs\"></aui-icon>'\n const idx = i\n removeBtn.addEventListener('click', (e) => {\n e.stopPropagation()\n this.#removeFile(idx)\n })\n item.appendChild(removeBtn)\n\n this.#list.appendChild(item)\n }\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCopyButton extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n label: { type: 'string', default: 'Copy' },\n size: { type: 'enum', default: '', values: ['sm', '', 'lg'] },\n }\n\n declare value: string\n declare label: string\n declare size: string\n\n #trigger: HTMLButtonElement | null = null\n #copyIcon: HTMLElement | null = null\n #checkIcon: HTMLElement | null = null\n #timeout: ReturnType<typeof setTimeout> | null = null\n\n protected override activate(): void {\n this.#trigger = document.createElement('button')\n this.#trigger.setAttribute('data-copy-trigger', '')\n\n this.#copyIcon = document.createElement('aui-icon')\n this.#copyIcon.setAttribute('name', 'copy')\n this.#copyIcon.setAttribute('data-copy-icon', '')\n\n this.#checkIcon = document.createElement('aui-icon')\n this.#checkIcon.setAttribute('name', 'check')\n this.#checkIcon.setAttribute('data-copy-check', '')\n this.#checkIcon.hidden = true\n\n this.#trigger.appendChild(this.#copyIcon)\n this.#trigger.appendChild(this.#checkIcon)\n\n // Insert trigger before existing children (content to copy)\n const firstChild = this.firstChild\n if (firstChild) {\n this.insertBefore(this.#trigger, firstChild)\n } else {\n this.appendChild(this.#trigger)\n }\n\n // Reactive: sync label\n this.addEffect(() => {\n if (this.#trigger) {\n this.#trigger.setAttribute('aria-label', this.label || 'Copy')\n }\n })\n\n // Reactive: sync icon size\n this.addEffect(() => {\n const iconSize = this.size === 'sm' ? 'xs' : this.size === 'lg' ? 'md' : 'sm'\n if (this.#copyIcon) this.#copyIcon.setAttribute('size', iconSize)\n if (this.#checkIcon) this.#checkIcon.setAttribute('size', iconSize)\n })\n\n this.#trigger.addEventListener('click', this.#onCopy)\n }\n\n protected override dispose(): void {\n if (this.#timeout) clearTimeout(this.#timeout)\n this.#trigger?.removeEventListener('click', this.#onCopy)\n this.#trigger?.remove()\n this.#trigger = null\n this.#copyIcon = null\n this.#checkIcon = null\n }\n\n #onCopy = async (): Promise<void> => {\n // Determine text: value attr takes priority, then textContent of non-trigger children\n let text = this.value\n if (!text) {\n // Collect text from children that aren't the trigger\n const children = Array.from(this.childNodes)\n text = children\n .filter(n => n !== this.#trigger)\n .map(n => n.textContent)\n .join('')\n .trim()\n }\n\n if (!text) return\n\n try {\n await navigator.clipboard.writeText(text)\n this.#showCheck()\n } catch {\n // Clipboard API failed (e.g. not HTTPS)\n }\n }\n\n #showCheck(): void {\n if (this.#timeout) clearTimeout(this.#timeout)\n\n if (this.#copyIcon) this.#copyIcon.hidden = true\n if (this.#checkIcon) this.#checkIcon.hidden = false\n this.#trigger?.setAttribute('data-copy-copied', '')\n\n this.#timeout = setTimeout(() => {\n if (this.#copyIcon) this.#copyIcon.hidden = false\n if (this.#checkIcon) this.#checkIcon.hidden = true\n this.#trigger?.removeAttribute('data-copy-copied')\n this.#timeout = null\n }, 1500)\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiStat extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n trend: { type: 'enum', default: '', values: ['up', 'down', 'neutral', ''] },\n change: { type: 'string', default: '' },\n }\n\n declare label: string\n declare value: string\n declare trend: string\n declare change: string\n\n #labelEl: HTMLElement | null = null\n #valueEl: HTMLElement | null = null\n #changeEl: HTMLElement | null = null\n\n protected override activate(): void {\n // Stamp label\n this.#labelEl = document.createElement('span')\n this.#labelEl.setAttribute('data-stat-label', '')\n\n // Stamp value\n this.#valueEl = document.createElement('span')\n this.#valueEl.setAttribute('data-stat-value', '')\n\n // Stamp change row\n this.#changeEl = document.createElement('span')\n this.#changeEl.setAttribute('data-stat-change', '')\n\n // Insert before any existing children (e.g. sparkline)\n const firstChild = this.firstChild\n if (firstChild) {\n this.insertBefore(this.#changeEl, firstChild)\n this.insertBefore(this.#valueEl, this.#changeEl)\n this.insertBefore(this.#labelEl, this.#valueEl)\n } else {\n this.appendChild(this.#labelEl)\n this.appendChild(this.#valueEl)\n this.appendChild(this.#changeEl)\n }\n\n // Reactive: update content\n this.addEffect(() => {\n if (this.#labelEl) {\n this.#labelEl.textContent = this.label\n this.#labelEl.style.display = this.label ? '' : 'none'\n }\n })\n\n this.addEffect(() => {\n if (this.#valueEl) {\n this.#valueEl.textContent = this.value\n this.#valueEl.style.display = this.value ? '' : 'none'\n }\n })\n\n this.addEffect(() => {\n if (!this.#changeEl) return\n const trend = this.trend\n const change = this.change\n\n if (!change && !trend) {\n this.#changeEl.style.display = 'none'\n return\n }\n\n this.#changeEl.style.display = ''\n\n if (trend) {\n this.#changeEl.setAttribute('data-stat-trend', trend)\n } else {\n this.#changeEl.removeAttribute('data-stat-trend')\n }\n\n // Build: arrow + text\n let html = ''\n if (trend === 'up' || trend === 'down') {\n html += '<span data-stat-arrow></span>'\n }\n html += change || ''\n this.#changeEl.innerHTML = html\n })\n }\n\n protected override dispose(): void {\n this.#labelEl?.remove()\n this.#valueEl?.remove()\n this.#changeEl?.remove()\n this.#labelEl = null\n this.#valueEl = null\n this.#changeEl = null\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiImage extends AgentElement {\n static override attributes: AttributeSchema = {\n src: { type: 'string', default: '' },\n alt: { type: 'string', default: '' },\n aspect: { type: 'string', default: '' },\n fallback: { type: 'string', default: '' },\n fit: { type: 'enum', default: 'cover', values: ['cover', 'contain'] },\n zoomable: { type: 'boolean', default: false },\n }\n\n declare src: string\n declare alt: string\n declare aspect: string\n declare fallback: string\n declare fit: string\n declare zoomable: boolean\n\n #img: HTMLImageElement | null = null\n #dialog: HTMLDialogElement | null = null\n #fallbackShown = false\n\n protected override activate(): void {\n this.#stamp()\n this.addEffect(() => this.#syncSrc())\n this.addEffect(() => this.#syncAlt())\n this.addEffect(() => this.#syncAspect())\n this.addEffect(() => this.#syncFit())\n }\n\n protected override dispose(): void {\n this.#dialog?.remove()\n this.#img = null\n this.#dialog = null\n }\n\n #stamp(): void {\n const img = document.createElement('img')\n img.loading = 'lazy'\n img.draggable = false\n img.setAttribute('data-image-el', '')\n\n img.addEventListener('load', () => {\n this.setAttribute('data-image-loaded', '')\n this.removeAttribute('data-image-error')\n this.#fallbackShown = false\n })\n\n img.addEventListener('error', () => {\n if (this.#fallbackShown) return\n this.#fallbackShown = true\n this.removeAttribute('data-image-loaded')\n this.setAttribute('data-image-error', '')\n\n if (this.fallback) {\n img.src = this.fallback\n }\n })\n\n this.prepend(img)\n this.#img = img\n\n if (this.zoomable) {\n this.setAttribute('data-image-zoomable', '')\n this.addEventListener('click', this.#openLightbox)\n }\n }\n\n #syncSrc(): void {\n const s = this.src\n if (this.#img && s) {\n this.#fallbackShown = false\n this.#img.src = s\n }\n }\n\n #syncAlt(): void {\n const a = this.alt\n if (this.#img) this.#img.alt = a\n }\n\n #syncAspect(): void {\n const a = this.aspect\n if (a) {\n this.style.aspectRatio = a\n } else {\n this.style.removeProperty('aspect-ratio')\n }\n }\n\n #syncFit(): void {\n const f = this.fit\n if (this.#img) this.#img.style.objectFit = f\n }\n\n #openLightbox = (): void => {\n if (!this.src) return\n\n const dialog = document.createElement('dialog')\n dialog.setAttribute('data-image-lightbox', '')\n\n const img = document.createElement('img')\n img.src = this.src\n img.alt = this.alt\n\n dialog.append(img)\n\n dialog.addEventListener('click', () => {\n dialog.close()\n })\n\n dialog.addEventListener('close', () => {\n dialog.remove()\n this.#dialog = null\n })\n\n document.body.append(dialog)\n this.#dialog = dialog\n dialog.showModal()\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCarousel extends AgentElement {\n static override deferChildren = true\n\n static override attributes: AttributeSchema = {\n 'auto-play': { type: 'boolean', default: false },\n interval: { type: 'string', default: '4000' },\n loop: { type: 'boolean', default: false },\n 'show-arrows': { type: 'boolean', default: false },\n 'show-dots': { type: 'boolean', default: false },\n }\n\n declare 'auto-play': boolean\n declare interval: string\n declare loop: boolean\n declare 'show-arrows': boolean\n declare 'show-dots': boolean\n\n #track: HTMLDivElement | null = null\n #dotsContainer: HTMLDivElement | null = null\n #prevBtn: HTMLButtonElement | null = null\n #nextBtn: HTMLButtonElement | null = null\n #autoPlayTimer: ReturnType<typeof setInterval> | null = null\n #observer: IntersectionObserver | null = null\n #currentIndex = 0\n\n protected override activate(): void {\n this.#stamp()\n this.addEffect(() => this.#syncAutoPlay())\n this.addEffect(() => this.#syncArrows())\n this.addEffect(() => this.#syncDots())\n }\n\n protected override dispose(): void {\n this.#stopAutoPlay()\n this.#observer?.disconnect()\n this.#track = null\n this.#dotsContainer = null\n this.#prevBtn = null\n this.#nextBtn = null\n }\n\n #stamp(): void {\n // Wrap existing children in a track\n const track = document.createElement('div')\n track.setAttribute('data-carousel-track', '')\n track.setAttribute('tabindex', '0')\n track.setAttribute('role', 'group')\n track.setAttribute('aria-roledescription', 'carousel')\n\n // Move all children into the track\n while (this.firstChild) {\n const child = this.firstChild\n if (child instanceof HTMLElement) {\n child.setAttribute('data-carousel-slide', '')\n child.setAttribute('role', 'group')\n child.setAttribute('aria-roledescription', 'slide')\n }\n track.append(child)\n }\n\n this.append(track)\n this.#track = track\n\n // Scroll listener for dot sync\n track.addEventListener('scroll', this.#onScroll, { passive: true })\n\n // Keyboard navigation\n track.addEventListener('keydown', this.#onKeydown)\n\n // Pause auto-play on hover/focus\n this.addEventListener('mouseenter', this.#pauseAutoPlay)\n this.addEventListener('mouseleave', this.#resumeAutoPlay)\n this.addEventListener('focusin', this.#pauseAutoPlay)\n this.addEventListener('focusout', this.#resumeAutoPlay)\n\n // Set up intersection observer for slide visibility\n this.#observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const slides = this.#getSlides()\n const idx = slides.indexOf(entry.target as HTMLElement)\n if (idx !== -1) {\n this.#currentIndex = idx\n this.#updateDots()\n this.dispatchEvent(\n new CustomEvent('aui:carousel-change', {\n bubbles: true,\n detail: { index: idx },\n }),\n )\n }\n }\n }\n },\n { root: track, threshold: 0.5 },\n )\n\n for (const slide of this.#getSlides()) {\n this.#observer.observe(slide)\n }\n }\n\n #getSlides(): HTMLElement[] {\n if (!this.#track) return []\n return Array.from(this.#track.querySelectorAll('[data-carousel-slide]'))\n }\n\n #syncArrows(): void {\n const show = this['show-arrows']\n if (show && !this.#prevBtn) {\n const prev = document.createElement('button')\n prev.setAttribute('data-carousel-prev', '')\n prev.setAttribute('aria-label', 'Previous slide')\n prev.innerHTML = '<aui-icon name=\"caret-left\" size=\"sm\"></aui-icon>'\n prev.addEventListener('click', () => this.#goTo(this.#currentIndex - 1))\n\n const next = document.createElement('button')\n next.setAttribute('data-carousel-next', '')\n next.setAttribute('aria-label', 'Next slide')\n next.innerHTML = '<aui-icon name=\"caret-right\" size=\"sm\"></aui-icon>'\n next.addEventListener('click', () => this.#goTo(this.#currentIndex + 1))\n\n this.append(prev, next)\n this.#prevBtn = prev\n this.#nextBtn = next\n } else if (!show && this.#prevBtn) {\n this.#prevBtn.remove()\n this.#nextBtn?.remove()\n this.#prevBtn = null\n this.#nextBtn = null\n }\n }\n\n #syncDots(): void {\n const show = this['show-dots']\n if (show && !this.#dotsContainer) {\n const dots = document.createElement('div')\n dots.setAttribute('data-carousel-dots', '')\n dots.setAttribute('role', 'tablist')\n\n const slides = this.#getSlides()\n for (let i = 0; i < slides.length; i++) {\n const dot = document.createElement('button')\n dot.setAttribute('data-carousel-dot', '')\n dot.setAttribute('role', 'tab')\n dot.setAttribute('aria-label', `Go to slide ${i + 1}`)\n if (i === this.#currentIndex) dot.setAttribute('data-carousel-dot-active', '')\n dot.addEventListener('click', () => this.#goTo(i))\n dots.append(dot)\n }\n\n this.append(dots)\n this.#dotsContainer = dots\n } else if (!show && this.#dotsContainer) {\n this.#dotsContainer.remove()\n this.#dotsContainer = null\n }\n }\n\n #updateDots(): void {\n if (!this.#dotsContainer) return\n const dots = this.#dotsContainer.querySelectorAll('[data-carousel-dot]')\n for (let i = 0; i < dots.length; i++) {\n if (i === this.#currentIndex) {\n dots[i].setAttribute('data-carousel-dot-active', '')\n } else {\n dots[i].removeAttribute('data-carousel-dot-active')\n }\n }\n }\n\n #goTo(index: number): void {\n const slides = this.#getSlides()\n if (!slides.length || !this.#track) return\n\n let target = index\n if (this.loop) {\n target = ((index % slides.length) + slides.length) % slides.length\n } else {\n target = Math.max(0, Math.min(index, slides.length - 1))\n }\n\n const slide = slides[target]\n if (slide) {\n slide.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })\n }\n }\n\n #syncAutoPlay(): void {\n const play = this['auto-play']\n if (play) {\n this.#startAutoPlay()\n } else {\n this.#stopAutoPlay()\n }\n }\n\n #startAutoPlay(): void {\n this.#stopAutoPlay()\n const ms = parseInt(this.interval, 10) || 4000\n this.#autoPlayTimer = setInterval(() => {\n const slides = this.#getSlides()\n const next = this.#currentIndex + 1\n if (next >= slides.length && !this.loop) {\n this.#goTo(0)\n } else {\n this.#goTo(next)\n }\n }, ms)\n }\n\n #stopAutoPlay(): void {\n if (this.#autoPlayTimer !== null) {\n clearInterval(this.#autoPlayTimer)\n this.#autoPlayTimer = null\n }\n }\n\n #pauseAutoPlay = (): void => {\n this.#stopAutoPlay()\n }\n\n #resumeAutoPlay = (): void => {\n if (this['auto-play']) this.#startAutoPlay()\n }\n\n #onScroll = (): void => {\n // Handled by IntersectionObserver\n }\n\n #onKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n this.#goTo(this.#currentIndex - 1)\n } else if (e.key === 'ArrowRight') {\n e.preventDefault()\n this.#goTo(this.#currentIndex + 1)\n }\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport interface Notification {\n id: string\n title: string\n message?: string\n intent?: string\n timestamp: number\n read: boolean\n}\n\nlet _idCounter = 0\n\nexport class AuiNotificationCenter extends AgentElement {\n static override attributes: AttributeSchema = {\n max: { type: 'string', default: '50' },\n }\n\n declare max: string\n\n #notifications: Notification[] = []\n #trigger: HTMLButtonElement | null = null\n #badge: HTMLSpanElement | null = null\n #panel: HTMLDivElement | null = null\n #list: HTMLDivElement | null = null\n #emptyEl: HTMLDivElement | null = null\n #clearBtn: HTMLButtonElement | null = null\n\n protected override activate(): void {\n this.#stamp()\n }\n\n protected override dispose(): void {\n this.#trigger = null\n this.#badge = null\n this.#panel = null\n this.#list = null\n this.#emptyEl = null\n this.#clearBtn = null\n this.#notifications.length = 0\n }\n\n // ── Public API ──────────────────────────────────────────────\n\n add(opts: { title: string; message?: string; intent?: string; timestamp?: number }): string {\n const id = `notif-${++_idCounter}`\n const notif: Notification = {\n id,\n title: opts.title,\n message: opts.message,\n intent: opts.intent,\n timestamp: opts.timestamp ?? Date.now(),\n read: false,\n }\n\n this.#notifications.unshift(notif)\n\n // Enforce max\n const limit = parseInt(this.max, 10) || 50\n if (this.#notifications.length > limit) {\n this.#notifications.length = limit\n }\n\n this.#render()\n return id\n }\n\n markRead(id: string): void {\n const notif = this.#notifications.find((n) => n.id === id)\n if (notif && !notif.read) {\n notif.read = true\n this.#render()\n this.dispatchEvent(\n new CustomEvent('aui:notification-read', { bubbles: true, detail: { id } }),\n )\n }\n }\n\n dismiss(id: string): void {\n const idx = this.#notifications.findIndex((n) => n.id === id)\n if (idx !== -1) {\n this.#notifications.splice(idx, 1)\n this.#render()\n this.dispatchEvent(\n new CustomEvent('aui:notification-dismiss', { bubbles: true, detail: { id } }),\n )\n }\n }\n\n clearAll(): void {\n this.#notifications.length = 0\n this.#render()\n }\n\n get notifications(): ReadonlyArray<Notification> {\n return this.#notifications\n }\n\n get unreadCount(): number {\n return this.#notifications.filter((n) => !n.read).length\n }\n\n // ── Internal ────────────────────────────────────────────────\n\n #stamp(): void {\n // Trigger button\n const trigger = document.createElement('button')\n trigger.setAttribute('data-nc-trigger', '')\n trigger.setAttribute('aria-label', 'Notifications')\n trigger.innerHTML = '<aui-icon name=\"bell\" size=\"sm\"></aui-icon>'\n trigger.addEventListener('click', this.#togglePanel)\n\n const badge = document.createElement('span')\n badge.setAttribute('data-nc-badge', '')\n badge.hidden = true\n trigger.append(badge)\n\n // Panel\n const panel = document.createElement('div')\n panel.setAttribute('data-nc-panel', '')\n panel.setAttribute('popover', 'auto')\n\n // Panel header\n const header = document.createElement('div')\n header.setAttribute('data-nc-header', '')\n\n const title = document.createElement('span')\n title.setAttribute('data-nc-title', '')\n title.textContent = 'Notifications'\n\n const clearBtn = document.createElement('button')\n clearBtn.setAttribute('data-nc-clear', '')\n clearBtn.textContent = 'Clear all'\n clearBtn.addEventListener('click', () => this.clearAll())\n this.#clearBtn = clearBtn\n\n header.append(title, clearBtn)\n\n // List\n const list = document.createElement('div')\n list.setAttribute('data-nc-list', '')\n this.#list = list\n\n // Empty state\n const empty = document.createElement('div')\n empty.setAttribute('data-nc-empty', '')\n empty.textContent = 'No notifications'\n this.#emptyEl = empty\n\n panel.append(header, list, empty)\n\n this.append(trigger, panel)\n this.#trigger = trigger\n this.#badge = badge\n this.#panel = panel\n\n this.#render()\n }\n\n #togglePanel = (): void => {\n if (!this.#panel) return\n\n try {\n this.#panel.togglePopover()\n } catch {\n // Fallback if popover not supported\n const visible = this.#panel.hasAttribute('data-nc-visible')\n if (visible) {\n this.#panel.removeAttribute('data-nc-visible')\n } else {\n this.#panel.setAttribute('data-nc-visible', '')\n }\n }\n\n // Anchor positioning\n if (this.#trigger) {\n const anchorName = '--aui-nc-anchor'\n this.#trigger.style.anchorName = anchorName\n this.#panel.style.positionAnchor = anchorName\n }\n }\n\n #render(): void {\n if (!this.#list || !this.#badge || !this.#emptyEl || !this.#clearBtn) return\n\n // Badge\n const unread = this.unreadCount\n if (unread > 0) {\n this.#badge.textContent = unread > 99 ? '99+' : String(unread)\n this.#badge.hidden = false\n } else {\n this.#badge.hidden = true\n }\n\n // Clear button visibility\n this.#clearBtn.hidden = this.#notifications.length === 0\n\n // Empty state\n this.#emptyEl.hidden = this.#notifications.length > 0\n\n // Render list\n this.#list.innerHTML = ''\n for (const notif of this.#notifications) {\n const item = document.createElement('div')\n item.setAttribute('data-nc-item', '')\n if (!notif.read) item.setAttribute('data-nc-unread', '')\n if (notif.intent) item.setAttribute('data-nc-intent', notif.intent)\n\n item.addEventListener('click', () => this.markRead(notif.id))\n\n const content = document.createElement('div')\n content.setAttribute('data-nc-item-content', '')\n\n const titleEl = document.createElement('div')\n titleEl.setAttribute('data-nc-item-title', '')\n titleEl.textContent = notif.title\n\n content.append(titleEl)\n\n if (notif.message) {\n const msgEl = document.createElement('div')\n msgEl.setAttribute('data-nc-item-message', '')\n msgEl.textContent = notif.message\n content.append(msgEl)\n }\n\n const timeEl = document.createElement('div')\n timeEl.setAttribute('data-nc-item-time', '')\n timeEl.textContent = this.#formatTime(notif.timestamp)\n content.append(timeEl)\n\n const dismissBtn = document.createElement('button')\n dismissBtn.setAttribute('data-nc-item-dismiss', '')\n dismissBtn.setAttribute('aria-label', 'Dismiss')\n dismissBtn.innerHTML = '<aui-icon name=\"x\" size=\"xs\"></aui-icon>'\n dismissBtn.addEventListener('click', (e) => {\n e.stopPropagation()\n this.dismiss(notif.id)\n })\n\n item.append(content, dismissBtn)\n this.#list.append(item)\n }\n }\n\n #formatTime(ts: number): string {\n const diff = Date.now() - ts\n const minutes = Math.floor(diff / 60000)\n if (minutes < 1) return 'Just now'\n if (minutes < 60) return `${minutes}m ago`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n const days = Math.floor(hours / 24)\n return `${days}d ago`\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiEmptyState extends AgentElement {\n static override attributes: AttributeSchema = {\n icon: { type: 'string', default: '' },\n heading: { type: 'string', default: '' },\n description: { type: 'string', default: '' },\n }\n\n declare icon: string\n declare heading: string\n declare description: string\n\n #iconEl: HTMLElement | null = null\n #headingEl: HTMLElement | null = null\n #descEl: HTMLElement | null = null\n #actionSlot: HTMLDivElement | null = null\n\n protected override activate(): void {\n this.#stamp()\n this.addEffect(() => this.#syncIcon())\n this.addEffect(() => this.#syncHeading())\n this.addEffect(() => this.#syncDescription())\n }\n\n protected override dispose(): void {\n this.#iconEl = null\n this.#headingEl = null\n this.#descEl = null\n this.#actionSlot = null\n }\n\n #stamp(): void {\n // Capture existing children for the action slot\n const children = Array.from(this.childNodes)\n\n // Icon\n const iconEl = document.createElement('aui-icon')\n iconEl.setAttribute('data-empty-state-icon', '')\n iconEl.setAttribute('size', 'xl')\n this.#iconEl = iconEl\n\n // Heading\n const headingEl = document.createElement('aui-heading')\n headingEl.setAttribute('data-empty-state-heading', '')\n headingEl.setAttribute('size', 'md')\n this.#headingEl = headingEl\n\n // Description\n const descEl = document.createElement('aui-text')\n descEl.setAttribute('data-empty-state-description', '')\n descEl.setAttribute('muted', '')\n descEl.setAttribute('size', 'sm')\n this.#descEl = descEl\n\n // Action slot\n const actionSlot = document.createElement('div')\n actionSlot.setAttribute('data-empty-state-actions', '')\n for (const child of children) {\n actionSlot.append(child)\n }\n this.#actionSlot = actionSlot\n\n this.append(iconEl, headingEl, descEl, actionSlot)\n }\n\n #syncIcon(): void {\n const name = this.icon\n if (this.#iconEl) {\n if (name) {\n this.#iconEl.setAttribute('name', name)\n this.#iconEl.hidden = false\n } else {\n this.#iconEl.hidden = true\n }\n }\n }\n\n #syncHeading(): void {\n const text = this.heading\n if (this.#headingEl) {\n this.#headingEl.textContent = text\n this.#headingEl.hidden = !text\n }\n }\n\n #syncDescription(): void {\n const text = this.description\n if (this.#descEl) {\n this.#descEl.textContent = text\n this.#descEl.hidden = !text\n }\n }\n}\n"],"names":["AuiButton","AgentElement","#stampedLeading","#stampedLeadingText","#stampedTrailing","#stampedTrailingText","#handleClick","#handleKeydown","n","name","text","leading","trailing","e","href","btnType","form","SEARCH_SVG","X_SVG","AuiInput","#internals","#surface","#clearEl","#stepUpEl","#stepDownEl","#syncing","#searchIcon","#searchClearEl","#searchDebounceTimer","locked","#updateEmptyState","#validate","val","#handleInput","#handleFocus","#handleBlur","#handlePaste","#handleWrapperClick","#handleClear","next","#handleStepDown","#handleStepUp","#handleSearchClear","options","range","sel","disabled","state","empty","#resetCaretIfEmpty","#scheduleSearchEvent","#dispatchSearchEvent","#adjust","max","min","clamped","newVal","current","selLen","available","target","delta","step","delay","AuiInputOtp","#cells","len","i","cell","#distributeValue","#handleCellInput","#handleCellKeydown","c","#syncValue","#getCellIndex","idx","digits","focusIdx","AuiCheckbox","box","#toggle","AuiSwitch","track","AuiRadio","circle","#select","AuiRadioGroup","radio","#radios","isMatch","#handleChange","radios","r","AuiTextarea","#autogrowRaf","rows","#autoResize","AuiContainer","getDuration","el","raw","AuiDialog","#dialog","#content","#closing","#ensureDialog","#handleCancel","#handleClose","#handleBackdropClick","dialog","AuiDrawer","fetchCache","AuiIcon","#registryDispose","#hasInlineChild","key","#renderFromRegistry","#renderFromSrc","onRegistryChange","svg","getIcon","#setSvg","url","cached","res","existing","template","svgEl","AuiTooltip","#popover","#anchor","#anchorName","id","#show","#hide","AuiRange","#thumb","pct","#handlePointerDown","#setValueFromPointer","#handlePointerMove","#handlePointerUp","_e","rect","snapped","bigStep","AuiGripper","#lastX","#lastY","#dragging","#stopDrag","dx","dy","isHorizontal","AuiOption","AuiOptgroup","#header","opt","CHEVRON_SVG","MORE_ICON","PRIORITY_ORDER","FOCUSABLE_BAR","FOCUSABLE_BAR_WITH_TRIGGER","isOptionTag","tag","isGroupTag","isOptionOrGroup","AuiSelect","#trigger","#triggerLabel","#chevron","#listboxEl","#barTriggerBtn","#barOverflowPopover","#barOverflowList","#resizeObserver","#mutationObserver","#measureRaf","#listActiveIndex","#typeBuffer","#typeTimer","#comboSurface","#comboPopover","#comboListbox","#allComboOptions","#activateBar","#activateList","#activateCombobox","#activateDropdown","#disposeBar","#disposeList","#disposeCombobox","#disposeDropdown","o","#listSelectOption","index","#listSetActive","#listClearActive","#openPopover","popover","lb","#closePopover","children","child","#dropdownUpdateLabel","#dropdownTriggerClick","#dropdownTriggerKeydown","#dropdownListboxClick","#dropdownListboxChange","#dropdownListboxKeydown","#dropdownOutsideClick","option","selected","#barOnTriggerClick","#barOnTriggerKeydown","#barOnOverflowItemClick","#barHandleKeydown","#barStampGroupDividers","#barScheduleMeasure","mutations","m","prevWasGroup","isGroup","hr","#barMeasure","#barGetContentChildren","#barClearOverflow","#barReconnectMutationObserver","cs","gap","contentWidth","units","#barBuildOverflowUnits","totalWidth","flatIndex","unit","item","#barClearOverflowMenu","w","triggerWidth","candidates","u","a","pa","pb","overflowed","remaining","prev","#barRebuildOverflowMenu","rawPriority","priority","pinned","flexItems","gc","itemIndex","group","groupLabel","#barExtractLabel","#barGetOverflowSources","sources","ariaLabel","labelAttr","icon","#barPositionPopover","ke","source","#barGetFocusable","all","selector","isVertical","forward","backward","items","#listSyncSelection","#listHandleClick","#listHandleKeydown","wasSelected","#listSyncValue","values","v","optVal","opts","active","#listHandleTypeAhead","char","match","#comboHandleInput","#comboHandleFocus","#comboHandleKeydown","#comboHandleListboxChange","#comboHandleListboxKeydown","#comboHandleOutsideClick","#comboFilter","query","q","label","groups","hasVisible","containerEl","getContainer","AuiToast","#timer","#closeEl","toast","ms","#handleCloseKeydown","AuiTabs","#wireAria","#tabs","#syncSelection","firstTab","#enabledTabs","#panels","tabs","panels","tab","panel","p","selectedIdx","nextTab","AuiTab","AuiTabPanel","AuiAccordion","#handleToggle","AuiAccordionItem","chevron","triggerEl","firstEl","headerId","contentId","AuiBreadcrumb","AuiBreadcrumbItem","#link","AuiSegmentedControl","#indicator","#updateIndicator","first","seg","#segments","#enabledSegments","s","segs","AuiSegment","AuiPagination","#render","total","siblings","pages","#computePages","#createPageEl","num","page","_","leftSibling","rightSibling","newPage","AuiCommand","#activeIndex","#setActive","#items","#visibleItems","#inputEl","#emptyEl","#listEl","#filter","matches","visible","#clearActive","#selectItem","value","AuiCommandEmpty","AuiCommandGroup","heading","h","AuiCommandInput","AuiCommandItem","AuiCommandList","Priority","clamp","cachedCollapsedWidth","resolveCollapsedWidth","probe","AuiPanes","#observer","#hoverPane","#startSizes","#panes","#startX","#startY","#dragPointerId","#sizes","#proportions","#onHover","#onLeave","#onPointerDown","#initSizes","#onChildChange","#onContainerResize","#clearHover","#cleanupDrag","#getVisibleChildren","#getMinSize","#getMaxSize","#getPriority","panes","pane","fixedSize","basis","sizes","#saveProportions","#applySizes","size","#resize","result","beforeIndexes","afterIndexes","sortByPriority","indexes","high","normal","low","sortedBefore","sortedAfter","minDelta","maxDelta","minDeltaAfter","maxDeltaAfter","effectiveMin","effectiveMax","newSize","consumed","#distributeEmptySpace","emptyDelta","#getContainerSize","sorted","#lastContainerSize","containerSize","newSizes","#hitBoundary","clientX","clientY","threshold","edge","#onDragMove","#onDragEnd","#onDragCancel","#onKeyDown","#pendingDistribute","relevant","headerTpl","headerBtnTpl","AuiPane","#stampedHeader","#labelEl","#iconEl","#minimizeBtn","#closeBtn","#tabsEl","#collapsed","#stampHeader","#wrapContent","#syncSize","#removeStampedHeader","#syncIcon","#syncCloseButton","#syncMinimizeButton","#stampTabs","#removeTabs","event","content","toWrap","node","header","labelEl","iconEl","#createHeaderButton","iconName","handler","btn","show","tabId","tabLabel","#showTabContent","firstId","activeId","AuiTable","#columns","#data","#sortKey","#sortDir","#searchTerm","#currentPage","#selectedIds","#dataMode","#toolbar","#headEl","#bodyEl","#footerEl","#searchDebounceId","data","#parseColumns","#loadData","#buildStructure","#onClick","#fetchData","script","parsed","json","widths","toolbar","input","onSearch","#pageSize","#toggleSort","checkbox","rowId","#toggleSelectAll","#toggleSelect","pageBtn","cycle","#rowId","row","pageRows","#paginate","#derive","allSelected","view","term","keys","k","type","mult","b","av","bv","start","filtered","paged","headerRow","th","allSel","cb","col","isSortable","rowData","isSel","td","totalPages","end","info","controls","prevBtn","nextBtn","AuiTableBody","AuiTableCell","AuiTableHead","AuiTableHeader","AuiTableRow","AuiTree","#visibleLabels","labels","parent","CARET_TAG","AuiTreeItem","#label","#childContainer","#caret","toMove","nestedItems","depth","AuiFeed","#isPinned","#scrollToEnd","AuiRoot","CALENDAR_SVG","formatDate","iso","format","y","d","AuiCalendarPicker","#calendar","#updateLabel","#onTriggerClick","#onTriggerKeydown","#onCalendarChange","#onOutsideClick","#onDocumentKeydown","formatDateShort","AuiCalendarRangePicker","#onCalendarRangeSelect","AuiAppShell","AuiPage","AuiPageMain","AuiPageContext","handleTpl","AuiSidebar","#width","signal","#minWidth","#maxWidth","#handleEl","#resizing","#startWidth","frag","#onResizeDown","untrack","#onResizeMove","#onResizeUp","AuiSidebarHeader","AuiSidebarContent","AuiSidebarFooter","AuiProgress","AuiCodeBlock","#copyBtn","#codeEl","showHeader","spacer","#onCopy","mh","AuiSparkline","vals","colorVar","highlightMode","highlightIdx","bar","AuiChip","#removeBtn","#stampRemoveButton","AuiDisclosure","#stamp","trigger","inner","AuiAvatarGroup","#counter","#applyMax","#applySize","avatars","overflow","counter","avatar","AuiProgressCircle","#svg","#fill","#updateValue","fill","AuiDisclosureGroup","#observeChildren","AuiTagGroup","lbl","#handleRemove","#getChips","chips","currentIndex","nextIndex","chip","neighbor","AuiColorArea","#gradient","#clamp","l","#dispatchChange","x","CHANNEL_DEFAULTS","AuiColorSlider","#track","ch","defaults","#getRange","AuiColorField","#swatch","#input","#isValidColor","str","AuiTimeField","#digitBuffer","#digitTimer","#buildSegments","#updateFromValue","#handleFocusIn","hourSeg","#createSegment","sep","minSeg","periodSeg","hStr","mStr","period","segType","#incrementSegment","#commitValue","#enterDigit","digit","dir","hText","mText","newValue","FORMATS","SEGMENT_DEFS","AuiDateField","fmt","def","yStr","dStr","monthSeg","daySeg","yearSeg","dText","yText","maxDay","AuiContextMenu","#listbox","#targetEl","#onContextMenu","#onListboxClick","#onListboxKeydown","#closeMenu","#openMenu","#selectOption","AuiDropdownMenu","AuiHoverCard","#anchorEl","#showTimer","#hideTimer","#onAnchorEnter","#onAnchorLeave","#onAnchorFocusIn","#onAnchorFocusOut","#onPopoverEnter","#onPopoverLeave","#onKeydown","#clearTimers","#scheduleShow","#scheduleHide","hideDelay","hexToHsl","hex","g","diff","hslToHex","toHex","AuiColorPicker","#area","#hueSlider","#alphaSlider","#field","#h","#s","#l","#a","#updating","#parseValue","#syncToSubComponents","#onAreaInput","#onAreaChange","#onHueInput","#onHueChange","#onAlphaInput","#onAlphaChange","#onFieldChange","hsl","parseMaxSize","formatSize","bytes","AuiFileUpload","#zone","#list","#files","#onZoneClick","#onInputChange","#onDragOver","#onDragLeave","#onDrop","#addFiles","incoming","maxSize","maxFiles","file","f","#renderList","#removeFile","preview","nameEl","sizeEl","removeBtn","AuiCopyButton","#copyIcon","#checkIcon","#timeout","firstChild","iconSize","#showCheck","AuiStat","#valueEl","#changeEl","trend","change","html","AuiImage","#img","#fallbackShown","#syncSrc","#syncAlt","#syncAspect","#syncFit","img","#openLightbox","AuiCarousel","#dotsContainer","#prevBtn","#nextBtn","#autoPlayTimer","#currentIndex","#syncAutoPlay","#syncArrows","#syncDots","#stopAutoPlay","#onScroll","#pauseAutoPlay","#resumeAutoPlay","entries","entry","#getSlides","#updateDots","slide","#goTo","dots","slides","dot","#startAutoPlay","_idCounter","AuiNotificationCenter","#notifications","#badge","#panel","#clearBtn","notif","limit","#togglePanel","badge","title","clearBtn","list","anchorName","unread","titleEl","msgEl","timeEl","#formatTime","dismissBtn","ts","minutes","hours","AuiEmptyState","#headingEl","#descEl","#actionSlot","#syncHeading","#syncDescription","headingEl","descEl","actionSlot"],"mappings":"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"}