@artooi/agents-web-components 0.0.0-stage → 0.1.1
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.
- package/CHANGELOG.md +77 -0
- package/LICENSE +21 -0
- package/README.md +4397 -2
- package/dist/agents-web-components.bundle.js +5708 -0
- package/dist/agents-web-components.bundle.js.map +7 -0
- package/dist/bundle.d.ts +3 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/chat.d.ts +3 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +16373 -0
- package/dist/chat.js.map +7 -0
- package/dist/chunk-ARNLFGCC.js +7715 -0
- package/dist/chunk-ARNLFGCC.js.map +7 -0
- package/dist/constants.d.ts +575 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/core/activity_registration.d.ts +19 -0
- package/dist/core/activity_registration.d.ts.map +1 -0
- package/dist/core/activity_registry.d.ts +46 -0
- package/dist/core/activity_registry.d.ts.map +1 -0
- package/dist/core/activity_renderer.d.ts +20 -0
- package/dist/core/activity_renderer.d.ts.map +1 -0
- package/dist/core/ag_ui_chat.d.ts +836 -0
- package/dist/core/ag_ui_chat.d.ts.map +1 -0
- package/dist/core/agui_client.d.ts +370 -0
- package/dist/core/agui_client.d.ts.map +1 -0
- package/dist/core/attachment.d.ts +42 -0
- package/dist/core/attachment.d.ts.map +1 -0
- package/dist/core/chat_registry.d.ts +23 -0
- package/dist/core/chat_registry.d.ts.map +1 -0
- package/dist/core/client_seed.d.ts +27 -0
- package/dist/core/client_seed.d.ts.map +1 -0
- package/dist/core/conversation_store.d.ts +195 -0
- package/dist/core/conversation_store.d.ts.map +1 -0
- package/dist/core/create_http_agent.d.ts +57 -0
- package/dist/core/create_http_agent.d.ts.map +1 -0
- package/dist/core/define_chat.d.ts +13 -0
- package/dist/core/define_chat.d.ts.map +1 -0
- package/dist/core/events/attachments_detail.d.ts +9 -0
- package/dist/core/events/attachments_detail.d.ts.map +1 -0
- package/dist/core/events/bar_height_detail.d.ts +6 -0
- package/dist/core/events/bar_height_detail.d.ts.map +1 -0
- package/dist/core/events/custom_agent_detail.d.ts +8 -0
- package/dist/core/events/custom_agent_detail.d.ts.map +1 -0
- package/dist/core/events/dock_width_detail.d.ts +8 -0
- package/dist/core/events/dock_width_detail.d.ts.map +1 -0
- package/dist/core/events/feedback_detail.d.ts +28 -0
- package/dist/core/events/feedback_detail.d.ts.map +1 -0
- package/dist/core/events/invalidate_detail.d.ts +16 -0
- package/dist/core/events/invalidate_detail.d.ts.map +1 -0
- package/dist/core/events/maximize_detail.d.ts +5 -0
- package/dist/core/events/maximize_detail.d.ts.map +1 -0
- package/dist/core/events/run_finished_detail.d.ts +36 -0
- package/dist/core/events/run_finished_detail.d.ts.map +1 -0
- package/dist/core/events/state_detail.d.ts +5 -0
- package/dist/core/events/state_detail.d.ts.map +1 -0
- package/dist/core/events/submit_detail.d.ts +8 -0
- package/dist/core/events/submit_detail.d.ts.map +1 -0
- package/dist/core/events/thread_detail.d.ts +27 -0
- package/dist/core/events/thread_detail.d.ts.map +1 -0
- package/dist/core/events/thread_title_detail.d.ts +8 -0
- package/dist/core/events/thread_title_detail.d.ts.map +1 -0
- package/dist/core/events/toggle_detail.d.ts +5 -0
- package/dist/core/events/toggle_detail.d.ts.map +1 -0
- package/dist/core/events/tool_run.d.ts +11 -0
- package/dist/core/events/tool_run.d.ts.map +1 -0
- package/dist/core/events/unread_detail.d.ts +11 -0
- package/dist/core/events/unread_detail.d.ts.map +1 -0
- package/dist/core/message_role.d.ts +4 -0
- package/dist/core/message_role.d.ts.map +1 -0
- package/dist/core/read_flag.d.ts +11 -0
- package/dist/core/read_flag.d.ts.map +1 -0
- package/dist/core/read_json_attribute.d.ts +15 -0
- package/dist/core/read_json_attribute.d.ts.map +1 -0
- package/dist/core/read_max_tool_rounds.d.ts +9 -0
- package/dist/core/read_max_tool_rounds.d.ts.map +1 -0
- package/dist/core/remote_conversation_store.d.ts +71 -0
- package/dist/core/remote_conversation_store.d.ts.map +1 -0
- package/dist/core/run_handlers.d.ts +85 -0
- package/dist/core/run_handlers.d.ts.map +1 -0
- package/dist/core/run_index.d.ts +58 -0
- package/dist/core/run_index.d.ts.map +1 -0
- package/dist/core/storage_scope.d.ts +118 -0
- package/dist/core/storage_scope.d.ts.map +1 -0
- package/dist/core/tool_outcome.d.ts +27 -0
- package/dist/core/tool_outcome.d.ts.map +1 -0
- package/dist/core/transcribe_audio.d.ts +32 -0
- package/dist/core/transcribe_audio.d.ts.map +1 -0
- package/dist/core/upload_attachment.d.ts +44 -0
- package/dist/core/upload_attachment.d.ts.map +1 -0
- package/dist/core/utils.d.ts +117 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/dom/animations.d.ts +122 -0
- package/dist/dom/animations.d.ts.map +1 -0
- package/dist/dom/dom_driver.d.ts +28 -0
- package/dist/dom/dom_driver.d.ts.map +1 -0
- package/dist/dom/highlight_overlay.d.ts +39 -0
- package/dist/dom/highlight_overlay.d.ts.map +1 -0
- package/dist/dom/native_setter.d.ts +5 -0
- package/dist/dom/native_setter.d.ts.map +1 -0
- package/dist/dom/ring_color.d.ts +16 -0
- package/dist/dom/ring_color.d.ts.map +1 -0
- package/dist/dom/utils.d.ts +3 -0
- package/dist/dom/utils.d.ts.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +223 -0
- package/dist/index.js.map +7 -0
- package/dist/skills/fill_template.d.ts +16 -0
- package/dist/skills/fill_template.d.ts.map +1 -0
- package/dist/skills/parse_skills.d.ts +8 -0
- package/dist/skills/parse_skills.d.ts.map +1 -0
- package/dist/skills/skill.d.ts +33 -0
- package/dist/skills/skill.d.ts.map +1 -0
- package/dist/skills/skill_catalog.d.ts +69 -0
- package/dist/skills/skill_catalog.d.ts.map +1 -0
- package/dist/skills/skill_name_from.d.ts +12 -0
- package/dist/skills/skill_name_from.d.ts.map +1 -0
- package/dist/tools/chat_surface_tools.d.ts +77 -0
- package/dist/tools/chat_surface_tools.d.ts.map +1 -0
- package/dist/tools/client_tool_registry.d.ts +58 -0
- package/dist/tools/client_tool_registry.d.ts.map +1 -0
- package/dist/tools/is_destructive.d.ts +14 -0
- package/dist/tools/is_destructive.d.ts.map +1 -0
- package/dist/tools/is_navigates.d.ts +9 -0
- package/dist/tools/is_navigates.d.ts.map +1 -0
- package/dist/tools/page_action_tools.d.ts +30 -0
- package/dist/tools/page_action_tools.d.ts.map +1 -0
- package/dist/tools/page_map.d.ts +16 -0
- package/dist/tools/page_map.d.ts.map +1 -0
- package/dist/tools/page_state.d.ts +27 -0
- package/dist/tools/page_state.d.ts.map +1 -0
- package/dist/tools/parse_tool_catalog.d.ts +21 -0
- package/dist/tools/parse_tool_catalog.d.ts.map +1 -0
- package/dist/tools/route_map.d.ts +37 -0
- package/dist/tools/route_map.d.ts.map +1 -0
- package/dist/tools/tool_catalog.d.ts +86 -0
- package/dist/tools/tool_catalog.d.ts.map +1 -0
- package/dist/tools/tool_dispatch.d.ts +82 -0
- package/dist/tools/tool_dispatch.d.ts.map +1 -0
- package/dist/ui/charts/chart_block.d.ts +57 -0
- package/dist/ui/charts/chart_block.d.ts.map +1 -0
- package/dist/ui/charts/chart_spec_from.d.ts +12 -0
- package/dist/ui/charts/chart_spec_from.d.ts.map +1 -0
- package/dist/ui/charts/chart_styles.d.ts +2 -0
- package/dist/ui/charts/chart_styles.d.ts.map +1 -0
- package/dist/ui/charts/chart_tool.d.ts +15 -0
- package/dist/ui/charts/chart_tool.d.ts.map +1 -0
- package/dist/ui/composer/attachment_styles.d.ts +2 -0
- package/dist/ui/composer/attachment_styles.d.ts.map +1 -0
- package/dist/ui/composer/attachment_tray.d.ts +53 -0
- package/dist/ui/composer/attachment_tray.d.ts.map +1 -0
- package/dist/ui/composer/auto_grow.d.ts +10 -0
- package/dist/ui/composer/auto_grow.d.ts.map +1 -0
- package/dist/ui/composer/build_composer.d.ts +32 -0
- package/dist/ui/composer/build_composer.d.ts.map +1 -0
- package/dist/ui/composer/composer_attachments.d.ts +57 -0
- package/dist/ui/composer/composer_attachments.d.ts.map +1 -0
- package/dist/ui/composer/composer_styles.d.ts +2 -0
- package/dist/ui/composer/composer_styles.d.ts.map +1 -0
- package/dist/ui/composer/composer_voice.d.ts +48 -0
- package/dist/ui/composer/composer_voice.d.ts.map +1 -0
- package/dist/ui/composer/skill_styles.d.ts +2 -0
- package/dist/ui/composer/skill_styles.d.ts.map +1 -0
- package/dist/ui/composer/skills_menu.d.ts +34 -0
- package/dist/ui/composer/skills_menu.d.ts.map +1 -0
- package/dist/ui/composer/voice_input.d.ts +46 -0
- package/dist/ui/composer/voice_input.d.ts.map +1 -0
- package/dist/ui/excerpts/attach_copy_buttons.d.ts +13 -0
- package/dist/ui/excerpts/attach_copy_buttons.d.ts.map +1 -0
- package/dist/ui/excerpts/copy_payload.d.ts +30 -0
- package/dist/ui/excerpts/copy_payload.d.ts.map +1 -0
- package/dist/ui/excerpts/page_quote_offer.d.ts +33 -0
- package/dist/ui/excerpts/page_quote_offer.d.ts.map +1 -0
- package/dist/ui/excerpts/place_offer.d.ts +9 -0
- package/dist/ui/excerpts/place_offer.d.ts.map +1 -0
- package/dist/ui/excerpts/quote_selection.d.ts +66 -0
- package/dist/ui/excerpts/quote_selection.d.ts.map +1 -0
- package/dist/ui/excerpts/transcript_quote_offer.d.ts +57 -0
- package/dist/ui/excerpts/transcript_quote_offer.d.ts.map +1 -0
- package/dist/ui/fill_ui_string.d.ts +32 -0
- package/dist/ui/fill_ui_string.d.ts.map +1 -0
- package/dist/ui/history/checkpoint_menu.d.ts +41 -0
- package/dist/ui/history/checkpoint_menu.d.ts.map +1 -0
- package/dist/ui/history/conversation_history.d.ts +317 -0
- package/dist/ui/history/conversation_history.d.ts.map +1 -0
- package/dist/ui/history/history_styles.d.ts +2 -0
- package/dist/ui/history/history_styles.d.ts.map +1 -0
- package/dist/ui/history/relative_time.d.ts +23 -0
- package/dist/ui/history/relative_time.d.ts.map +1 -0
- package/dist/ui/history/thread_drawer.d.ts +64 -0
- package/dist/ui/history/thread_drawer.d.ts.map +1 -0
- package/dist/ui/history/utils.d.ts +2 -0
- package/dist/ui/history/utils.d.ts.map +1 -0
- package/dist/ui/interrupts/approval_card.d.ts +64 -0
- package/dist/ui/interrupts/approval_card.d.ts.map +1 -0
- package/dist/ui/interrupts/approval_styles.d.ts +2 -0
- package/dist/ui/interrupts/approval_styles.d.ts.map +1 -0
- package/dist/ui/interrupts/confirmation_card.d.ts +51 -0
- package/dist/ui/interrupts/confirmation_card.d.ts.map +1 -0
- package/dist/ui/interrupts/confirmation_styles.d.ts +2 -0
- package/dist/ui/interrupts/confirmation_styles.d.ts.map +1 -0
- package/dist/ui/interrupts/pending_decision.d.ts +22 -0
- package/dist/ui/interrupts/pending_decision.d.ts.map +1 -0
- package/dist/ui/interrupts/question_card.d.ts +49 -0
- package/dist/ui/interrupts/question_card.d.ts.map +1 -0
- package/dist/ui/interrupts/question_styles.d.ts +2 -0
- package/dist/ui/interrupts/question_styles.d.ts.map +1 -0
- package/dist/ui/place/place.d.ts +17 -0
- package/dist/ui/place/place.d.ts.map +1 -0
- package/dist/ui/place/place_chip.d.ts +26 -0
- package/dist/ui/place/place_chip.d.ts.map +1 -0
- package/dist/ui/place/place_from_route.d.ts +9 -0
- package/dist/ui/place/place_from_route.d.ts.map +1 -0
- package/dist/ui/place/place_styles.d.ts +2 -0
- package/dist/ui/place/place_styles.d.ts.map +1 -0
- package/dist/ui/placement/clamp_launcher.d.ts +20 -0
- package/dist/ui/placement/clamp_launcher.d.ts.map +1 -0
- package/dist/ui/placement/clamp_panel.d.ts +13 -0
- package/dist/ui/placement/clamp_panel.d.ts.map +1 -0
- package/dist/ui/placement/collapse_styles.d.ts +2 -0
- package/dist/ui/placement/collapse_styles.d.ts.map +1 -0
- package/dist/ui/placement/dock_styles.d.ts +2 -0
- package/dist/ui/placement/dock_styles.d.ts.map +1 -0
- package/dist/ui/placement/embedded_styles.d.ts +2 -0
- package/dist/ui/placement/embedded_styles.d.ts.map +1 -0
- package/dist/ui/placement/launcher_drag.d.ts +49 -0
- package/dist/ui/placement/launcher_drag.d.ts.map +1 -0
- package/dist/ui/placement/launcher_placement.d.ts +77 -0
- package/dist/ui/placement/launcher_placement.d.ts.map +1 -0
- package/dist/ui/placement/launcher_styles.d.ts +2 -0
- package/dist/ui/placement/launcher_styles.d.ts.map +1 -0
- package/dist/ui/placement/page_styles.d.ts +2 -0
- package/dist/ui/placement/page_styles.d.ts.map +1 -0
- package/dist/ui/placement/panel_drag.d.ts +40 -0
- package/dist/ui/placement/panel_drag.d.ts.map +1 -0
- package/dist/ui/placement/panel_placement.d.ts +173 -0
- package/dist/ui/placement/panel_placement.d.ts.map +1 -0
- package/dist/ui/placement/place_widget.d.ts +31 -0
- package/dist/ui/placement/place_widget.d.ts.map +1 -0
- package/dist/ui/placement/preset_styles.d.ts +2 -0
- package/dist/ui/placement/preset_styles.d.ts.map +1 -0
- package/dist/ui/placement/resize_handle.d.ts +78 -0
- package/dist/ui/placement/resize_handle.d.ts.map +1 -0
- package/dist/ui/placement/resize_styles.d.ts +2 -0
- package/dist/ui/placement/resize_styles.d.ts.map +1 -0
- package/dist/ui/placement/sidebar_styles.d.ts +2 -0
- package/dist/ui/placement/sidebar_styles.d.ts.map +1 -0
- package/dist/ui/placement/small_viewport_styles.d.ts +2 -0
- package/dist/ui/placement/small_viewport_styles.d.ts.map +1 -0
- package/dist/ui/placement/surface_for.d.ts +93 -0
- package/dist/ui/placement/surface_for.d.ts.map +1 -0
- package/dist/ui/progress/prettify_tool_name.d.ts +11 -0
- package/dist/ui/progress/prettify_tool_name.d.ts.map +1 -0
- package/dist/ui/progress/run_announcer.d.ts +41 -0
- package/dist/ui/progress/run_announcer.d.ts.map +1 -0
- package/dist/ui/progress/run_notice.d.ts +21 -0
- package/dist/ui/progress/run_notice.d.ts.map +1 -0
- package/dist/ui/progress/run_notice_styles.d.ts +2 -0
- package/dist/ui/progress/run_notice_styles.d.ts.map +1 -0
- package/dist/ui/progress/subagent_panel.d.ts +101 -0
- package/dist/ui/progress/subagent_panel.d.ts.map +1 -0
- package/dist/ui/progress/subagent_progress.d.ts +57 -0
- package/dist/ui/progress/subagent_progress.d.ts.map +1 -0
- package/dist/ui/progress/subagent_update.d.ts +28 -0
- package/dist/ui/progress/subagent_update.d.ts.map +1 -0
- package/dist/ui/progress/thoughts_block.d.ts +57 -0
- package/dist/ui/progress/thoughts_block.d.ts.map +1 -0
- package/dist/ui/progress/thoughts_styles.d.ts +2 -0
- package/dist/ui/progress/thoughts_styles.d.ts.map +1 -0
- package/dist/ui/progress/tool_call_card.d.ts +167 -0
- package/dist/ui/progress/tool_call_card.d.ts.map +1 -0
- package/dist/ui/progress/tool_group_styles.d.ts +2 -0
- package/dist/ui/progress/tool_group_styles.d.ts.map +1 -0
- package/dist/ui/progress/tool_step_group.d.ts +50 -0
- package/dist/ui/progress/tool_step_group.d.ts.map +1 -0
- package/dist/ui/progress/tool_step_styles.d.ts +2 -0
- package/dist/ui/progress/tool_step_styles.d.ts.map +1 -0
- package/dist/ui/shell/adopt_styles.d.ts +28 -0
- package/dist/ui/shell/adopt_styles.d.ts.map +1 -0
- package/dist/ui/shell/build_header.d.ts +45 -0
- package/dist/ui/shell/build_header.d.ts.map +1 -0
- package/dist/ui/shell/build_launcher.d.ts +33 -0
- package/dist/ui/shell/build_launcher.d.ts.map +1 -0
- package/dist/ui/shell/collapse_glyph.d.ts +14 -0
- package/dist/ui/shell/collapse_glyph.d.ts.map +1 -0
- package/dist/ui/shell/frame_styles.d.ts +2 -0
- package/dist/ui/shell/frame_styles.d.ts.map +1 -0
- package/dist/ui/shell/glyph_slot.d.ts +7 -0
- package/dist/ui/shell/glyph_slot.d.ts.map +1 -0
- package/dist/ui/shell/header_button.d.ts +11 -0
- package/dist/ui/shell/header_button.d.ts.map +1 -0
- package/dist/ui/shell/icon_element.d.ts +12 -0
- package/dist/ui/shell/icon_element.d.ts.map +1 -0
- package/dist/ui/shell/is_unread_badge_enabled.d.ts +10 -0
- package/dist/ui/shell/is_unread_badge_enabled.d.ts.map +1 -0
- package/dist/ui/shell/read_launcher_icon_url.d.ts +8 -0
- package/dist/ui/shell/read_launcher_icon_url.d.ts.map +1 -0
- package/dist/ui/shell/theme_styles.d.ts +2 -0
- package/dist/ui/shell/theme_styles.d.ts.map +1 -0
- package/dist/ui/shell/token_styles.d.ts +2 -0
- package/dist/ui/shell/token_styles.d.ts.map +1 -0
- package/dist/ui/styles.d.ts +2 -0
- package/dist/ui/styles.d.ts.map +1 -0
- package/dist/ui/themes/classic_styles.d.ts +2 -0
- package/dist/ui/themes/classic_styles.d.ts.map +1 -0
- package/dist/ui/themes/classic_tokens.d.ts +2 -0
- package/dist/ui/themes/classic_tokens.d.ts.map +1 -0
- package/dist/ui/themes/code_tokens.d.ts +2 -0
- package/dist/ui/themes/code_tokens.d.ts.map +1 -0
- package/dist/ui/themes/ledger_styles.d.ts +2 -0
- package/dist/ui/themes/ledger_styles.d.ts.map +1 -0
- package/dist/ui/themes/ledger_tokens.d.ts +2 -0
- package/dist/ui/themes/ledger_tokens.d.ts.map +1 -0
- package/dist/ui/themes/modern_styles.d.ts +2 -0
- package/dist/ui/themes/modern_styles.d.ts.map +1 -0
- package/dist/ui/themes/quiet_styles.d.ts +2 -0
- package/dist/ui/themes/quiet_styles.d.ts.map +1 -0
- package/dist/ui/themes/scheme_styles.d.ts +2 -0
- package/dist/ui/themes/scheme_styles.d.ts.map +1 -0
- package/dist/ui/themes/soft_styles.d.ts +2 -0
- package/dist/ui/themes/soft_styles.d.ts.map +1 -0
- package/dist/ui/themes/soft_tokens.d.ts +2 -0
- package/dist/ui/themes/soft_tokens.d.ts.map +1 -0
- package/dist/ui/themes/theme_hosts.d.ts +15 -0
- package/dist/ui/themes/theme_hosts.d.ts.map +1 -0
- package/dist/ui/transcript/answer_actions.d.ts +50 -0
- package/dist/ui/transcript/answer_actions.d.ts.map +1 -0
- package/dist/ui/transcript/answer_stream.d.ts +56 -0
- package/dist/ui/transcript/answer_stream.d.ts.map +1 -0
- package/dist/ui/transcript/attachment_chip_styles.d.ts +2 -0
- package/dist/ui/transcript/attachment_chip_styles.d.ts.map +1 -0
- package/dist/ui/transcript/attachment_chips.d.ts +21 -0
- package/dist/ui/transcript/attachment_chips.d.ts.map +1 -0
- package/dist/ui/transcript/build_transcript.d.ts +21 -0
- package/dist/ui/transcript/build_transcript.d.ts.map +1 -0
- package/dist/ui/transcript/greeting_styles.d.ts +2 -0
- package/dist/ui/transcript/greeting_styles.d.ts.map +1 -0
- package/dist/ui/transcript/groups_tool_steps.d.ts +13 -0
- package/dist/ui/transcript/groups_tool_steps.d.ts.map +1 -0
- package/dist/ui/transcript/message_action_styles.d.ts +2 -0
- package/dist/ui/transcript/message_action_styles.d.ts.map +1 -0
- package/dist/ui/transcript/message_actions.d.ts +74 -0
- package/dist/ui/transcript/message_actions.d.ts.map +1 -0
- package/dist/ui/transcript/message_styles.d.ts +2 -0
- package/dist/ui/transcript/message_styles.d.ts.map +1 -0
- package/dist/ui/transcript/render_markdown.d.ts +40 -0
- package/dist/ui/transcript/render_markdown.d.ts.map +1 -0
- package/dist/ui/transcript/render_or_warn.d.ts +16 -0
- package/dist/ui/transcript/render_or_warn.d.ts.map +1 -0
- package/dist/ui/transcript/reveal_words.d.ts +8 -0
- package/dist/ui/transcript/reveal_words.d.ts.map +1 -0
- package/dist/ui/transcript/starter_chips.d.ts +21 -0
- package/dist/ui/transcript/starter_chips.d.ts.map +1 -0
- package/dist/ui/transcript/stick_to_bottom.d.ts +55 -0
- package/dist/ui/transcript/stick_to_bottom.d.ts.map +1 -0
- package/dist/ui/transcript/suggestion_chips.d.ts +29 -0
- package/dist/ui/transcript/suggestion_chips.d.ts.map +1 -0
- package/dist/ui/transcript/transcript.d.ts +196 -0
- package/dist/ui/transcript/transcript.d.ts.map +1 -0
- package/dist/ui/transcript/transcript_styles.d.ts +2 -0
- package/dist/ui/transcript/transcript_styles.d.ts.map +1 -0
- package/dist/ui/ui_strings.d.ts +352 -0
- package/dist/ui/ui_strings.d.ts.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +86 -3
- package/src/bundle.ts +2 -0
- package/src/chat.ts +2 -0
- package/src/constants.ts +650 -0
- package/src/core/activity_registration.ts +19 -0
- package/src/core/activity_registry.ts +133 -0
- package/src/core/activity_renderer.ts +19 -0
- package/src/core/ag_ui_chat.ts +3966 -0
- package/src/core/agui_client.ts +1028 -0
- package/src/core/attachment.ts +62 -0
- package/src/core/chat_registry.ts +53 -0
- package/src/core/client_seed.ts +27 -0
- package/src/core/conversation_store.ts +478 -0
- package/src/core/create_http_agent.ts +97 -0
- package/src/core/define_chat.ts +25 -0
- package/src/core/events/attachments_detail.ts +9 -0
- package/src/core/events/bar_height_detail.ts +5 -0
- package/src/core/events/custom_agent_detail.ts +7 -0
- package/src/core/events/dock_width_detail.ts +7 -0
- package/src/core/events/feedback_detail.ts +27 -0
- package/src/core/events/invalidate_detail.ts +15 -0
- package/src/core/events/maximize_detail.ts +4 -0
- package/src/core/events/run_finished_detail.ts +36 -0
- package/src/core/events/state_detail.ts +4 -0
- package/src/core/events/submit_detail.ts +8 -0
- package/src/core/events/thread_detail.ts +26 -0
- package/src/core/events/thread_title_detail.ts +7 -0
- package/src/core/events/toggle_detail.ts +4 -0
- package/src/core/events/tool_run.ts +10 -0
- package/src/core/events/unread_detail.ts +10 -0
- package/src/core/message_role.ts +4 -0
- package/src/core/read_flag.ts +13 -0
- package/src/core/read_json_attribute.ts +30 -0
- package/src/core/read_max_tool_rounds.ts +13 -0
- package/src/core/remote_conversation_store.ts +279 -0
- package/src/core/run_handlers.ts +524 -0
- package/src/core/run_index.ts +114 -0
- package/src/core/storage_scope.ts +291 -0
- package/src/core/tool_outcome.ts +39 -0
- package/src/core/transcribe_audio.ts +76 -0
- package/src/core/upload_attachment.ts +130 -0
- package/src/core/utils.ts +230 -0
- package/src/dom/animations.ts +341 -0
- package/src/dom/dom_driver.ts +91 -0
- package/src/dom/highlight_overlay.ts +204 -0
- package/src/dom/native_setter.ts +40 -0
- package/src/dom/ring_color.ts +206 -0
- package/src/dom/utils.ts +5 -0
- package/src/index.ts +220 -0
- package/src/skills/fill_template.ts +31 -0
- package/src/skills/parse_skills.ts +31 -0
- package/src/skills/skill.ts +32 -0
- package/src/skills/skill_catalog.ts +172 -0
- package/src/skills/skill_name_from.ts +19 -0
- package/src/tools/chat_surface_tools.ts +183 -0
- package/src/tools/client_tool_registry.ts +80 -0
- package/src/tools/is_destructive.ts +17 -0
- package/src/tools/is_navigates.ts +12 -0
- package/src/tools/page_action_tools.ts +123 -0
- package/src/tools/page_map.ts +26 -0
- package/src/tools/page_state.ts +57 -0
- package/src/tools/parse_tool_catalog.ts +41 -0
- package/src/tools/route_map.ts +132 -0
- package/src/tools/tool_catalog.ts +334 -0
- package/src/tools/tool_dispatch.ts +453 -0
- package/src/ui/charts/chart_block.ts +519 -0
- package/src/ui/charts/chart_spec_from.ts +125 -0
- package/src/ui/charts/chart_styles.ts +63 -0
- package/src/ui/charts/chart_tool.ts +72 -0
- package/src/ui/composer/attachment_styles.ts +71 -0
- package/src/ui/composer/attachment_tray.ts +295 -0
- package/src/ui/composer/auto_grow.ts +12 -0
- package/src/ui/composer/build_composer.ts +114 -0
- package/src/ui/composer/composer_attachments.ts +324 -0
- package/src/ui/composer/composer_styles.ts +177 -0
- package/src/ui/composer/composer_voice.ts +93 -0
- package/src/ui/composer/skill_styles.ts +120 -0
- package/src/ui/composer/skills_menu.ts +188 -0
- package/src/ui/composer/voice_input.ts +282 -0
- package/src/ui/excerpts/attach_copy_buttons.ts +73 -0
- package/src/ui/excerpts/copy_payload.ts +156 -0
- package/src/ui/excerpts/page_quote_offer.ts +203 -0
- package/src/ui/excerpts/place_offer.ts +24 -0
- package/src/ui/excerpts/quote_selection.ts +345 -0
- package/src/ui/excerpts/transcript_quote_offer.ts +175 -0
- package/src/ui/fill_ui_string.ts +41 -0
- package/src/ui/history/checkpoint_menu.ts +300 -0
- package/src/ui/history/conversation_history.ts +1169 -0
- package/src/ui/history/history_styles.ts +492 -0
- package/src/ui/history/relative_time.ts +50 -0
- package/src/ui/history/thread_drawer.ts +471 -0
- package/src/ui/history/utils.ts +11 -0
- package/src/ui/interrupts/approval_card.ts +202 -0
- package/src/ui/interrupts/approval_styles.ts +52 -0
- package/src/ui/interrupts/confirmation_card.ts +138 -0
- package/src/ui/interrupts/confirmation_styles.ts +114 -0
- package/src/ui/interrupts/pending_decision.ts +33 -0
- package/src/ui/interrupts/question_card.ts +213 -0
- package/src/ui/interrupts/question_styles.ts +73 -0
- package/src/ui/place/place.ts +16 -0
- package/src/ui/place/place_chip.ts +146 -0
- package/src/ui/place/place_from_route.ts +27 -0
- package/src/ui/place/place_styles.ts +108 -0
- package/src/ui/placement/clamp_launcher.ts +38 -0
- package/src/ui/placement/clamp_panel.ts +30 -0
- package/src/ui/placement/collapse_styles.ts +472 -0
- package/src/ui/placement/dock_styles.ts +116 -0
- package/src/ui/placement/embedded_styles.ts +14 -0
- package/src/ui/placement/launcher_drag.ts +206 -0
- package/src/ui/placement/launcher_placement.ts +133 -0
- package/src/ui/placement/launcher_styles.ts +189 -0
- package/src/ui/placement/page_styles.ts +47 -0
- package/src/ui/placement/panel_drag.ts +138 -0
- package/src/ui/placement/panel_placement.ts +1975 -0
- package/src/ui/placement/place_widget.ts +64 -0
- package/src/ui/placement/preset_styles.ts +49 -0
- package/src/ui/placement/resize_handle.ts +229 -0
- package/src/ui/placement/resize_styles.ts +201 -0
- package/src/ui/placement/sidebar_styles.ts +113 -0
- package/src/ui/placement/small_viewport_styles.ts +70 -0
- package/src/ui/placement/surface_for.ts +183 -0
- package/src/ui/progress/prettify_tool_name.ts +16 -0
- package/src/ui/progress/run_announcer.ts +67 -0
- package/src/ui/progress/run_notice.ts +61 -0
- package/src/ui/progress/run_notice_styles.ts +52 -0
- package/src/ui/progress/subagent_panel.ts +227 -0
- package/src/ui/progress/subagent_progress.ts +200 -0
- package/src/ui/progress/subagent_update.ts +89 -0
- package/src/ui/progress/thoughts_block.ts +165 -0
- package/src/ui/progress/thoughts_styles.ts +74 -0
- package/src/ui/progress/tool_call_card.ts +429 -0
- package/src/ui/progress/tool_group_styles.ts +313 -0
- package/src/ui/progress/tool_step_group.ts +317 -0
- package/src/ui/progress/tool_step_styles.ts +486 -0
- package/src/ui/shell/adopt_styles.ts +34 -0
- package/src/ui/shell/build_header.ts +121 -0
- package/src/ui/shell/build_launcher.ts +79 -0
- package/src/ui/shell/collapse_glyph.ts +42 -0
- package/src/ui/shell/frame_styles.ts +147 -0
- package/src/ui/shell/glyph_slot.ts +12 -0
- package/src/ui/shell/header_button.ts +22 -0
- package/src/ui/shell/icon_element.ts +33 -0
- package/src/ui/shell/is_unread_badge_enabled.ts +11 -0
- package/src/ui/shell/read_launcher_icon_url.ts +9 -0
- package/src/ui/shell/theme_styles.ts +11 -0
- package/src/ui/shell/token_styles.ts +480 -0
- package/src/ui/styles.ts +110 -0
- package/src/ui/themes/classic_styles.ts +32 -0
- package/src/ui/themes/classic_tokens.ts +51 -0
- package/src/ui/themes/code_tokens.ts +21 -0
- package/src/ui/themes/ledger_styles.ts +169 -0
- package/src/ui/themes/ledger_tokens.ts +33 -0
- package/src/ui/themes/modern_styles.ts +80 -0
- package/src/ui/themes/quiet_styles.ts +118 -0
- package/src/ui/themes/scheme_styles.ts +26 -0
- package/src/ui/themes/soft_styles.ts +149 -0
- package/src/ui/themes/soft_tokens.ts +29 -0
- package/src/ui/themes/theme_hosts.ts +14 -0
- package/src/ui/transcript/answer_actions.ts +165 -0
- package/src/ui/transcript/answer_stream.ts +123 -0
- package/src/ui/transcript/attachment_chip_styles.ts +116 -0
- package/src/ui/transcript/attachment_chips.ts +82 -0
- package/src/ui/transcript/build_transcript.ts +67 -0
- package/src/ui/transcript/greeting_styles.ts +171 -0
- package/src/ui/transcript/groups_tool_steps.ts +16 -0
- package/src/ui/transcript/message_action_styles.ts +155 -0
- package/src/ui/transcript/message_actions.ts +234 -0
- package/src/ui/transcript/message_styles.ts +262 -0
- package/src/ui/transcript/render_markdown.ts +181 -0
- package/src/ui/transcript/render_or_warn.ts +22 -0
- package/src/ui/transcript/reveal_words.ts +41 -0
- package/src/ui/transcript/starter_chips.ts +42 -0
- package/src/ui/transcript/stick_to_bottom.ts +126 -0
- package/src/ui/transcript/suggestion_chips.ts +73 -0
- package/src/ui/transcript/transcript.ts +555 -0
- package/src/ui/transcript/transcript_styles.ts +153 -0
- package/src/ui/ui_strings.ts +550 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { clampLauncher } from "./clamp_launcher.js";
|
|
2
|
+
import type { LauncherBox, ViewportBox } from "./launcher_placement.js";
|
|
3
|
+
|
|
4
|
+
/** What the drag needs from its host to do its job. */
|
|
5
|
+
export interface LauncherDragOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Whether the current placement lets the launcher move, read per interaction
|
|
8
|
+
* because `placement` is a live attribute. A docked rail and a full-bleed
|
|
9
|
+
* layout have nowhere to move it to.
|
|
10
|
+
*/
|
|
11
|
+
readonly enabled: () => boolean;
|
|
12
|
+
/** The launcher's current box, in viewport coordinates. */
|
|
13
|
+
readonly rect: () => LauncherBox;
|
|
14
|
+
/** The viewport the launcher has to stay inside. */
|
|
15
|
+
readonly viewport: () => ViewportBox;
|
|
16
|
+
/** Put the launcher's top-left at this point. Called per pointer move. */
|
|
17
|
+
readonly apply: (left: number, top: number) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Called once per completed move, for persistence: on `pointerup` for a
|
|
20
|
+
* drag, and when the key comes up (or focus leaves) for a key press. Never
|
|
21
|
+
* per pointer move, and never per key repeat.
|
|
22
|
+
*/
|
|
23
|
+
readonly commit: (left: number, top: number) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Ends the launcher's own listeners when aborted. The launcher outlives the
|
|
26
|
+
* element's connection to the document and this is called on every connect,
|
|
27
|
+
* so without it a re-inserted element moved one arrow press two steps.
|
|
28
|
+
*/
|
|
29
|
+
readonly signal: AbortSignal;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* How far the pointer must travel before this counts as a drag rather than a
|
|
34
|
+
* click. The launcher's first job is still to expand the panel, so a press
|
|
35
|
+
* that wanders by a pixel has to remain a press.
|
|
36
|
+
*/
|
|
37
|
+
const DRAG_THRESHOLD = 4;
|
|
38
|
+
|
|
39
|
+
/** Keyboard step, and the larger one Shift asks for. */
|
|
40
|
+
const STEP = 16;
|
|
41
|
+
const COARSE_STEP = 64;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Let the user drag the collapsed launcher anywhere on screen.
|
|
45
|
+
*
|
|
46
|
+
* The launcher is a button before it is a handle, and that ordering is the
|
|
47
|
+
* whole difficulty: every drag ends in a `click` the browser synthesises, which
|
|
48
|
+
* would expand the panel the user was only repositioning. So a completed drag
|
|
49
|
+
* arms a one-shot capture listener that eats exactly one click.
|
|
50
|
+
*
|
|
51
|
+
* Two things stop that from eating a click it should not have. A drag ending
|
|
52
|
+
* off the launcher never produces the click it armed, so the arming is cleared
|
|
53
|
+
* on the next `pointerdown` -- a pointer click is always preceded by a press,
|
|
54
|
+
* which puts the clearing ahead of any click it could reach.
|
|
55
|
+
*
|
|
56
|
+
* That leaves the clicks with no press in front of them at all: `Enter` and
|
|
57
|
+
* `Space` on the focused button, assistive technology activating it, and a host
|
|
58
|
+
* calling `click()` itself. None of those is the tail of a drag, and all of them
|
|
59
|
+
* are the only way in for someone not using a pointer, so the suppression is
|
|
60
|
+
* narrowed to clicks carrying a click count -- which is the pointer's own.
|
|
61
|
+
*/
|
|
62
|
+
export function enableLauncherDrag(launcher: HTMLElement, options: LauncherDragOptions): void {
|
|
63
|
+
let suppressClick = false;
|
|
64
|
+
const { signal } = options;
|
|
65
|
+
|
|
66
|
+
launcher.addEventListener(
|
|
67
|
+
"click",
|
|
68
|
+
(event: MouseEvent) => {
|
|
69
|
+
// detail is the click count on a pointer click and zero on a keyboard,
|
|
70
|
+
// assistive or programmatic one. Only the first kind can end a drag.
|
|
71
|
+
if (!suppressClick || event.detail === 0) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
suppressClick = false;
|
|
75
|
+
// Capture phase, so this runs before the expand handler bound to the
|
|
76
|
+
// same element rather than after it.
|
|
77
|
+
event.stopPropagation();
|
|
78
|
+
event.preventDefault();
|
|
79
|
+
},
|
|
80
|
+
{ capture: true, signal },
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
launcher.addEventListener(
|
|
84
|
+
"pointerdown",
|
|
85
|
+
(event: PointerEvent) => {
|
|
86
|
+
// Any suppression left armed by a drag that ended elsewhere dies here,
|
|
87
|
+
// before it can reach a click belonging to this new gesture.
|
|
88
|
+
suppressClick = false;
|
|
89
|
+
if (!options.enabled()) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const start = options.rect();
|
|
93
|
+
const originX = event.clientX;
|
|
94
|
+
const originY = event.clientY;
|
|
95
|
+
let dragging = false;
|
|
96
|
+
|
|
97
|
+
const onMove = (move: PointerEvent): void => {
|
|
98
|
+
const dx = move.clientX - originX;
|
|
99
|
+
const dy = move.clientY - originY;
|
|
100
|
+
if (!dragging && Math.hypot(dx, dy) < DRAG_THRESHOLD) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
dragging = true;
|
|
104
|
+
launcher.setAttribute("data-dragging", "true");
|
|
105
|
+
// Measured from the box the press started on, never from the live one:
|
|
106
|
+
// reading it each move would chase the launcher as it moves and the
|
|
107
|
+
// travel would compound.
|
|
108
|
+
const next = clampLauncher(
|
|
109
|
+
{ ...start, left: start.left + dx, top: start.top + dy },
|
|
110
|
+
options.viewport(),
|
|
111
|
+
);
|
|
112
|
+
options.apply(next.left, next.top);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const onUp = (up: PointerEvent): void => {
|
|
116
|
+
window.removeEventListener("pointermove", onMove);
|
|
117
|
+
window.removeEventListener("pointerup", onUp);
|
|
118
|
+
window.removeEventListener("pointercancel", onUp);
|
|
119
|
+
if (!dragging) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
launcher.removeAttribute("data-dragging");
|
|
123
|
+
suppressClick = true;
|
|
124
|
+
const next = clampLauncher(
|
|
125
|
+
{
|
|
126
|
+
...start,
|
|
127
|
+
left: start.left + (up.clientX - originX),
|
|
128
|
+
top: start.top + (up.clientY - originY),
|
|
129
|
+
},
|
|
130
|
+
options.viewport(),
|
|
131
|
+
);
|
|
132
|
+
options.commit(next.left, next.top);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// Listeners on `window`, not the launcher: a fast drag outruns the pointer
|
|
136
|
+
// and would otherwise strand it mid-move with no pointerup.
|
|
137
|
+
//
|
|
138
|
+
// pointercancel matters on touch, where it is routine rather than
|
|
139
|
+
// exceptional: the browser takes the pointer back for a scroll or a system
|
|
140
|
+
// gesture and never sends pointerup. Without this the move listeners stay
|
|
141
|
+
// attached and the drag stamp never clears, which leaves the launcher
|
|
142
|
+
// following a finger that has stopped and the element believing a gesture
|
|
143
|
+
// is still in flight.
|
|
144
|
+
window.addEventListener("pointermove", onMove);
|
|
145
|
+
window.addEventListener("pointerup", onUp);
|
|
146
|
+
window.addEventListener("pointercancel", onUp);
|
|
147
|
+
},
|
|
148
|
+
{ signal },
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
// The position this key gesture has applied but not yet persisted. The
|
|
152
|
+
// pointer path can commit inline because a drag has one unambiguous end; a
|
|
153
|
+
// key press does not, so the gesture's result is held here until it does.
|
|
154
|
+
let pending: { left: number; top: number } | null = null;
|
|
155
|
+
|
|
156
|
+
/** End a key gesture: persist what it applied, once. */
|
|
157
|
+
const settle = (): void => {
|
|
158
|
+
if (pending === null) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const { left, top } = pending;
|
|
162
|
+
pending = null;
|
|
163
|
+
options.commit(left, top);
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// Keyboard parity: a pointer-only move is unreachable without a mouse, and
|
|
167
|
+
// the launcher has no equivalent control elsewhere. Arrow keys are free on a
|
|
168
|
+
// button, so Enter and Space still expand.
|
|
169
|
+
launcher.addEventListener(
|
|
170
|
+
"keydown",
|
|
171
|
+
(event: KeyboardEvent) => {
|
|
172
|
+
if (!options.enabled()) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const step = event.shiftKey ? COARSE_STEP : STEP;
|
|
176
|
+
const rect = options.rect();
|
|
177
|
+
let moved: { left: number; top: number } | null = null;
|
|
178
|
+
if (event.key === "ArrowLeft") {
|
|
179
|
+
moved = { left: rect.left - step, top: rect.top };
|
|
180
|
+
} else if (event.key === "ArrowRight") {
|
|
181
|
+
moved = { left: rect.left + step, top: rect.top };
|
|
182
|
+
} else if (event.key === "ArrowUp") {
|
|
183
|
+
moved = { left: rect.left, top: rect.top - step };
|
|
184
|
+
} else if (event.key === "ArrowDown") {
|
|
185
|
+
moved = { left: rect.left, top: rect.top + step };
|
|
186
|
+
}
|
|
187
|
+
if (moved === null) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
event.preventDefault();
|
|
191
|
+
const next = clampLauncher({ ...rect, ...moved }, options.viewport());
|
|
192
|
+
// Live feedback per key event, persistence only when the gesture ends: a
|
|
193
|
+
// held arrow repeats at the OS rate, and committing here would put that
|
|
194
|
+
// many storage writes behind a single press.
|
|
195
|
+
options.apply(next.left, next.top);
|
|
196
|
+
pending = next;
|
|
197
|
+
},
|
|
198
|
+
{ signal },
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
// The key coming up ends the gesture, mirroring `pointerup`. `blur` closes
|
|
202
|
+
// one whose keyup never arrives here -- focus moved on mid-press -- because a
|
|
203
|
+
// position applied but never committed is a move the host silently forgets.
|
|
204
|
+
launcher.addEventListener("keyup", settle, { signal });
|
|
205
|
+
launcher.addEventListener("blur", settle, { signal });
|
|
206
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { SCREEN_EDGE_MARGIN } from "../../constants.js";
|
|
2
|
+
import { clampPanel } from "./clamp_panel.js";
|
|
3
|
+
import { placeWidget } from "./place_widget.js";
|
|
4
|
+
|
|
5
|
+
/** A box in viewport coordinates. */
|
|
6
|
+
export interface LauncherBox {
|
|
7
|
+
readonly left: number;
|
|
8
|
+
readonly top: number;
|
|
9
|
+
readonly width: number;
|
|
10
|
+
readonly height: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The part of the screen a widget may rest in: a width and height, and the
|
|
15
|
+
* corner they start from.
|
|
16
|
+
*
|
|
17
|
+
* The origin is not always zero. A host can reserve the edges its own chrome
|
|
18
|
+
* occupies, and a panel clamped against a viewport that starts at the top-left
|
|
19
|
+
* of the screen will happily park itself underneath a sticky header -- where it
|
|
20
|
+
* cannot be reached, and where collapsing it only hides it further.
|
|
21
|
+
*/
|
|
22
|
+
export interface ViewportBox extends Extent {
|
|
23
|
+
readonly left: number;
|
|
24
|
+
readonly top: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** A width/height pair, in CSS pixels. */
|
|
28
|
+
export interface Extent {
|
|
29
|
+
readonly width: number;
|
|
30
|
+
readonly height: number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The corner the panel is pinned by, and therefore grows away from: pinned
|
|
35
|
+
* `top-left` opens down and to the right. It is also the corner the resize grip
|
|
36
|
+
* must stay off, which is why the element stamps it rather than measuring it
|
|
37
|
+
* once the launcher has been moved.
|
|
38
|
+
*/
|
|
39
|
+
export interface ExpandCorner {
|
|
40
|
+
readonly x: "left" | "right";
|
|
41
|
+
readonly y: "top" | "bottom";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Where to put the host box, and where the launcher sits inside it. */
|
|
45
|
+
export interface LauncherPlacement {
|
|
46
|
+
/** The corner the panel opens away from. */
|
|
47
|
+
readonly corner: ExpandCorner;
|
|
48
|
+
/** An `inset` shorthand for the host box. */
|
|
49
|
+
readonly hostInset: string;
|
|
50
|
+
/** An `inset` shorthand for the launcher, relative to the host box. */
|
|
51
|
+
readonly launcherInset: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Decide where a panel should open from a launcher the user has dragged.
|
|
56
|
+
*
|
|
57
|
+
* The launcher is the fixed point: wherever it was dropped is where it stays,
|
|
58
|
+
* collapsed and expanded alike. Everything here decides what happens *around*
|
|
59
|
+
* it.
|
|
60
|
+
*
|
|
61
|
+
* Two steps, and they are separate on purpose:
|
|
62
|
+
*
|
|
63
|
+
* 1. **Pick the corner with the most clear space.** For each axis, compare the
|
|
64
|
+
* room a panel would have on either side of the launcher and pin the side
|
|
65
|
+
* with more of it. Pinning `left` means the panel runs rightward from the
|
|
66
|
+
* launcher's left edge, so the room that decides it is the distance from
|
|
67
|
+
* that edge to the far side of the viewport -- not "which half of the screen
|
|
68
|
+
* is the launcher in", which gives a different and worse answer for a
|
|
69
|
+
* launcher near the middle.
|
|
70
|
+
*
|
|
71
|
+
* 2. **Clamp the panel into the viewport, then put the launcher back.** A
|
|
72
|
+
* launcher near the centre of a short viewport has a panel taller than
|
|
73
|
+
* either side, so the winning corner still overflows. Clamping moves the
|
|
74
|
+
* host box -- and the launcher is positioned inside that box, so it would be
|
|
75
|
+
* dragged along with it. The launcher's own inset therefore carries the
|
|
76
|
+
* difference: zero in the ordinary case, and exactly the distance the clamp
|
|
77
|
+
* moved the box in the case that needs it. That the launcher may end up
|
|
78
|
+
* outside its own host box is fine; nothing clips it, and it keeps its own
|
|
79
|
+
* pointer events.
|
|
80
|
+
*
|
|
81
|
+
* Both insets are expressed from the *same* corner, which is what stops a
|
|
82
|
+
* later panel resize from dragging the launcher: the pinned corner is the one
|
|
83
|
+
* edge a resize cannot move.
|
|
84
|
+
*/
|
|
85
|
+
export function launcherPlacement(
|
|
86
|
+
launcher: LauncherBox,
|
|
87
|
+
panel: Extent,
|
|
88
|
+
viewport: ViewportBox,
|
|
89
|
+
screen: Extent,
|
|
90
|
+
margin: number = SCREEN_EDGE_MARGIN,
|
|
91
|
+
): LauncherPlacement {
|
|
92
|
+
// Room for a panel pinned to each side of the launcher. A tie goes to the
|
|
93
|
+
// first branch, so the result is deterministic for a centred launcher.
|
|
94
|
+
//
|
|
95
|
+
// Measured against the usable box's own edges, not against its width and
|
|
96
|
+
// height as if it started at the origin. The launcher's coordinates are the
|
|
97
|
+
// screen's, while the extents have already had the host's reserved edges
|
|
98
|
+
// taken out of them, so mixing the two understates the room on one side and
|
|
99
|
+
// overstates it on the other -- by the same reserved inset, in opposite
|
|
100
|
+
// directions, which is what makes the comparison flip rather than merely
|
|
101
|
+
// drift. The clamp below reads `viewport.left`/`top`; this had to as well.
|
|
102
|
+
const roomRunningRight = viewport.left + viewport.width - launcher.left;
|
|
103
|
+
const roomRunningLeft = launcher.left + launcher.width - viewport.left;
|
|
104
|
+
const roomRunningDown = viewport.top + viewport.height - launcher.top;
|
|
105
|
+
const roomRunningUp = launcher.top + launcher.height - viewport.top;
|
|
106
|
+
const corner: ExpandCorner = {
|
|
107
|
+
x: roomRunningRight >= roomRunningLeft ? "left" : "right",
|
|
108
|
+
y: roomRunningDown >= roomRunningUp ? "top" : "bottom",
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// The box the panel wants, then the box it can actually have. The launcher
|
|
112
|
+
// is not moved by that clamp -- it is the fixed point of this gesture, so its
|
|
113
|
+
// own inset carries the difference and it can end up outside the host box.
|
|
114
|
+
const wantedLeft =
|
|
115
|
+
corner.x === "left" ? launcher.left : launcher.left + launcher.width - panel.width;
|
|
116
|
+
const wantedTop =
|
|
117
|
+
corner.y === "top" ? launcher.top : launcher.top + launcher.height - panel.height;
|
|
118
|
+
const host = clampPanel(
|
|
119
|
+
{
|
|
120
|
+
left: wantedLeft,
|
|
121
|
+
top: wantedTop,
|
|
122
|
+
right: wantedLeft + panel.width,
|
|
123
|
+
bottom: wantedTop + panel.height,
|
|
124
|
+
},
|
|
125
|
+
viewport,
|
|
126
|
+
margin,
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
// The usable box decides where things may rest; the screen is what the
|
|
130
|
+
// resulting insets are measured from. They are the same only when the host
|
|
131
|
+
// has reserved nothing.
|
|
132
|
+
return { corner, ...placeWidget(host, launcher, corner, screen) };
|
|
133
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// The launcher a collapsed widget shrinks to: the round button, its unread
|
|
2
|
+
// badge, and the sidebar's edge rail, which is the same element styled again.
|
|
3
|
+
export const LAUNCHER_STYLES: string = `
|
|
4
|
+
/* ── Launcher ───────────────────────────────────────────────────────────────
|
|
5
|
+
What a collapsed widget shrinks to: a round floating button by default, the
|
|
6
|
+
sidebar's slim edge rail under that placement. A sibling of the panel, so it
|
|
7
|
+
survives the panel being hidden, and the only part of a collapsed widget
|
|
8
|
+
that takes pointer events. */
|
|
9
|
+
.launcher {
|
|
10
|
+
display: flex;
|
|
11
|
+
position: absolute;
|
|
12
|
+
inset: var(--_launcher-inset);
|
|
13
|
+
align-items: center;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
width: var(--_launcher-size);
|
|
16
|
+
height: var(--_launcher-size);
|
|
17
|
+
padding: 0;
|
|
18
|
+
border: none;
|
|
19
|
+
border-radius: var(--_launcher-radius);
|
|
20
|
+
background: var(--_launcher-bg);
|
|
21
|
+
color: var(--_launcher-fg);
|
|
22
|
+
box-shadow: var(--_shadow);
|
|
23
|
+
font: inherit;
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
pointer-events: auto;
|
|
26
|
+
/* A touch drag on the launcher moves it; without this the page scrolls under
|
|
27
|
+
the finger instead and the launcher never moves at all. */
|
|
28
|
+
touch-action: none;
|
|
29
|
+
opacity: 0;
|
|
30
|
+
transform: scale(0.4);
|
|
31
|
+
visibility: hidden;
|
|
32
|
+
transition:
|
|
33
|
+
opacity var(--_motion) var(--_ease),
|
|
34
|
+
transform var(--_motion) var(--_ease-pop),
|
|
35
|
+
visibility var(--_motion) var(--_ease);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* The launcher grows out of the corner the panel shrank into. It stays laid
|
|
39
|
+
out at rest rather than display:none, which is what lets it animate both in
|
|
40
|
+
and out: an unrendered element has no before-change style to transition
|
|
41
|
+
from, and one flipping display to none cannot transition at all. visibility
|
|
42
|
+
keeps it unpaintable, untabbable and unclickable in between, so the expanded
|
|
43
|
+
panel's own controls underneath stay reachable. */
|
|
44
|
+
:host([collapsed]) .launcher {
|
|
45
|
+
opacity: 1;
|
|
46
|
+
transform: none;
|
|
47
|
+
visibility: visible;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
:host([collapsed]) .launcher:hover {
|
|
51
|
+
transform: scale(1.06);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:host([collapsed]) .launcher:active {
|
|
55
|
+
transform: scale(0.94);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* A drag is a press and a hover at the same time, so both scale rules above are
|
|
59
|
+
live throughout it. Cancelling them is what keeps the launcher the size of
|
|
60
|
+
the thing under the pointer while it travels; the position itself comes from
|
|
61
|
+
inset, which nothing here transitions, so it tracks the pointer exactly. */
|
|
62
|
+
:host([collapsed]) .launcher[data-dragging] {
|
|
63
|
+
transform: none;
|
|
64
|
+
cursor: grabbing;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.launcher .icon-holder {
|
|
68
|
+
width: var(--_launcher-icon-size);
|
|
69
|
+
height: var(--_launcher-icon-size);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* The unread badge rides the launcher's top-right corner. The ring in the
|
|
73
|
+
widget's own background is what separates it from the launcher underneath,
|
|
74
|
+
whatever colour the host themes either one. */
|
|
75
|
+
.launcher-badge {
|
|
76
|
+
position: absolute;
|
|
77
|
+
top: -2px;
|
|
78
|
+
right: -2px;
|
|
79
|
+
display: inline-flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
justify-content: center;
|
|
82
|
+
box-sizing: border-box;
|
|
83
|
+
min-width: var(--_badge-size);
|
|
84
|
+
height: var(--_badge-size);
|
|
85
|
+
padding: 0 5px;
|
|
86
|
+
border-radius: 999px;
|
|
87
|
+
background: var(--_badge-bg);
|
|
88
|
+
color: var(--_badge-fg);
|
|
89
|
+
font-size: var(--_badge-font-size);
|
|
90
|
+
font-weight: 600;
|
|
91
|
+
line-height: 1;
|
|
92
|
+
box-shadow: 0 0 0 2px var(--_bg);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.launcher-badge[hidden] {
|
|
96
|
+
display: none;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* The sidebar collapses to an edge rail instead: full height, square, flush
|
|
100
|
+
against the dock. It slides in with the panel rather than popping. */
|
|
101
|
+
/* The edge rail. It reads as the docked edge of a panel rather than a coloured
|
|
102
|
+
stripe: the surface the panel is made of, a border on the side it docks
|
|
103
|
+
against, and the accent kept for the icon -- a full-height slab of accent is
|
|
104
|
+
the loudest thing on the page and says the least about itself.
|
|
105
|
+
|
|
106
|
+
Content sits at the top rather than centred, because a control floating in
|
|
107
|
+
the middle of a screen-high column has nothing to belong to. */
|
|
108
|
+
:host([placement="sidebar"][collapsed]) .launcher {
|
|
109
|
+
inset: 0;
|
|
110
|
+
width: auto;
|
|
111
|
+
height: auto;
|
|
112
|
+
flex-direction: column;
|
|
113
|
+
align-items: center;
|
|
114
|
+
justify-content: flex-start;
|
|
115
|
+
gap: 12px;
|
|
116
|
+
padding-top: 14px;
|
|
117
|
+
border: 0;
|
|
118
|
+
border-inline-start: 1px solid var(--_border);
|
|
119
|
+
border-radius: 0;
|
|
120
|
+
background: var(--_bg);
|
|
121
|
+
color: var(--_fg);
|
|
122
|
+
box-shadow: none;
|
|
123
|
+
transform: none;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
:host([placement="sidebar"][data-side="left"][collapsed]) .launcher {
|
|
127
|
+
border-inline-start: 0;
|
|
128
|
+
border-inline-end: 1px solid var(--_border);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* The icon keeps the accent, so there is one obvious thing to press.
|
|
132
|
+
|
|
133
|
+
The glyph is sized here rather than left to fill the holder. A glyph in an
|
|
134
|
+
icon holder takes the holder's whole box by default, which is right where the
|
|
135
|
+
holder is only a box and wrong the moment it becomes a filled circle: the
|
|
136
|
+
mark then runs edge to edge and reads as a square crammed into a disc. The
|
|
137
|
+
proportion is the floating launcher's own -- a 26px glyph in a 56px bubble --
|
|
138
|
+
so the two collapsed states look like the same widget. */
|
|
139
|
+
:host([placement="sidebar"][collapsed]) .launcher .icon-holder {
|
|
140
|
+
display: inline-flex;
|
|
141
|
+
align-items: center;
|
|
142
|
+
justify-content: center;
|
|
143
|
+
width: 34px;
|
|
144
|
+
height: 34px;
|
|
145
|
+
border-radius: 50%;
|
|
146
|
+
background: var(--_header-bg);
|
|
147
|
+
color: var(--_header-fg);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
:host([placement="sidebar"][collapsed]) .launcher .icon-holder .glyph,
|
|
151
|
+
:host([placement="sidebar"][collapsed]) .launcher .icon-holder .icon-img {
|
|
152
|
+
width: 16px;
|
|
153
|
+
height: 16px;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Written down the rail, which is the only direction it fits. Reading upward
|
|
157
|
+
is the convention for a right-hand edge and matches how a docked panel's
|
|
158
|
+
label is set everywhere it appears. */
|
|
159
|
+
.rail-label {
|
|
160
|
+
display: none;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
:host([placement="sidebar"][collapsed]) .rail-label {
|
|
164
|
+
display: block;
|
|
165
|
+
writing-mode: vertical-rl;
|
|
166
|
+
transform: rotate(180deg);
|
|
167
|
+
max-height: calc(100% - 96px);
|
|
168
|
+
overflow: hidden;
|
|
169
|
+
font-size: 0.9em;
|
|
170
|
+
font-weight: 600;
|
|
171
|
+
letter-spacing: 0.02em;
|
|
172
|
+
white-space: nowrap;
|
|
173
|
+
text-overflow: ellipsis;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
:host([placement="sidebar"][data-side="left"][collapsed]) .rail-label {
|
|
177
|
+
writing-mode: vertical-rl;
|
|
178
|
+
transform: none;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* Every transition in the stylesheet is timed by --_motion, so collapsing it to a
|
|
182
|
+
frame is the whole reduced-motion story: states still change (and display
|
|
183
|
+
still flips at the end of its discrete transition), nothing travels. */
|
|
184
|
+
@media (prefers-reduced-motion: reduce) {
|
|
185
|
+
:host {
|
|
186
|
+
--_motion: var(--ag-ui-motion, 0.001s);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
`;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// The page and full placements: a full-bleed surface with a reading column.
|
|
2
|
+
export const PAGE_STYLES: string = `
|
|
3
|
+
/* Page: full-bleed background with a centred reading column capped at
|
|
4
|
+
--ag-ui-content-max-width, where "full" is edge-to-edge and left-aligned.
|
|
5
|
+
The column comes from symmetric auto padding on the scroll area and
|
|
6
|
+
composer rather than a per-row wrapper, so user pills still right-align and
|
|
7
|
+
the assistant well spans the column. */
|
|
8
|
+
:host([placement="page"]) {
|
|
9
|
+
--_inset: var(
|
|
10
|
+
--ag-ui-inset,
|
|
11
|
+
calc(var(--_viewport-inset-top) + var(--_keyboard-inset-top)) var(--_viewport-inset-right)
|
|
12
|
+
var(--_viewport-inset-bottom) var(--_viewport-inset-left)
|
|
13
|
+
);
|
|
14
|
+
--_width: var(--ag-ui-width, var(--_viewport-width));
|
|
15
|
+
--_height: var(--ag-ui-height, var(--_viewport-height));
|
|
16
|
+
--_max-width: var(--ag-ui-max-width, var(--_viewport-width));
|
|
17
|
+
--_max-height: var(--ag-ui-max-height, var(--_viewport-height));
|
|
18
|
+
--_panel-radius: var(--ag-ui-panel-radius, 0);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
:host([placement="page"]) .messages {
|
|
22
|
+
padding-inline: max(var(--_pad), calc((100% - var(--_content-max-width)) / 2));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:host([placement="page"]) .input-row {
|
|
26
|
+
padding-inline: max(12px, calc((100% - var(--_content-max-width)) / 2));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* The rows between the message list and the composer line up with the column
|
|
30
|
+
too. Chips and tray are padding-based while palette and hint are
|
|
31
|
+
margin-based, so each gets its own inline axis nudged by the same gutter. */
|
|
32
|
+
:host([placement="page"]) .skill-chips,
|
|
33
|
+
:host([placement="page"]) .attachment-tray {
|
|
34
|
+
padding-inline: max(12px, calc((100% - var(--_content-max-width)) / 2));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
:host([placement="page"]) .skill-palette,
|
|
38
|
+
:host([placement="page"]) .skill-hint {
|
|
39
|
+
margin-inline: max(12px, calc((100% - var(--_content-max-width)) / 2));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* In the reading column the assistant well uses the full width; the user
|
|
43
|
+
message stays a right-aligned pill (its default align-self + max-width). */
|
|
44
|
+
:host([placement="page"]) .message--assistant {
|
|
45
|
+
max-width: 100%;
|
|
46
|
+
}
|
|
47
|
+
`;
|