@artooi/ag-ui-web-component 0.44.0 → 0.46.0
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 +182 -1
- package/README.md +245 -32
- package/dist/ag-ui-web-component.bundle.js +3696 -2798
- package/dist/ag-ui-web-component.bundle.js.map +4 -4
- package/dist/constants.d.ts +4 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/core/ag_ui_chat.d.ts +28 -8
- package/dist/core/ag_ui_chat.d.ts.map +1 -1
- 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/index.js +5084 -3481
- package/dist/index.js.map +4 -4
- package/dist/tools/tool_catalog.d.ts +5 -0
- package/dist/tools/tool_catalog.d.ts.map +1 -1
- package/dist/tools/tool_dispatch.d.ts.map +1 -1
- package/dist/ui/charts/chart_styles.d.ts +2 -0
- package/dist/ui/charts/chart_styles.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/build_composer.d.ts +30 -0
- package/dist/ui/composer/build_composer.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/skill_styles.d.ts +2 -0
- package/dist/ui/composer/skill_styles.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/interrupts/approval_styles.d.ts +2 -0
- package/dist/ui/interrupts/approval_styles.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/question_styles.d.ts +2 -0
- package/dist/ui/interrupts/question_styles.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/embedded_styles.d.ts +2 -0
- package/dist/ui/placement/embedded_styles.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_placement.d.ts.map +1 -1
- 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_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 +74 -0
- package/dist/ui/placement/surface_for.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/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 +8 -0
- package/dist/ui/progress/tool_call_card.d.ts.map +1 -1
- 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 +47 -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 +9 -4
- package/dist/ui/shell/adopt_styles.d.ts.map +1 -1
- package/dist/ui/shell/build_header.d.ts +40 -0
- package/dist/ui/shell/build_header.d.ts.map +1 -0
- package/dist/ui/shell/build_launcher.d.ts +20 -0
- package/dist/ui/shell/build_launcher.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/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 +1 -1
- package/dist/ui/styles.d.ts.map +1 -1
- 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/attachment_chip_styles.d.ts +2 -0
- package/dist/ui/transcript/attachment_chip_styles.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_styles.d.ts +2 -0
- package/dist/ui/transcript/message_styles.d.ts.map +1 -0
- package/dist/ui/transcript/transcript.d.ts +16 -1
- package/dist/ui/transcript/transcript.d.ts.map +1 -1
- 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 +18 -0
- package/dist/ui/ui_strings.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/constants.ts +4 -1
- package/src/core/ag_ui_chat.ts +164 -299
- package/src/core/read_flag.ts +13 -0
- package/src/core/read_json_attribute.ts +30 -0
- package/src/tools/tool_catalog.ts +23 -10
- package/src/tools/tool_dispatch.ts +26 -11
- package/src/ui/charts/chart_block.ts +9 -9
- package/src/ui/charts/chart_styles.ts +63 -0
- package/src/ui/composer/attachment_styles.ts +71 -0
- package/src/ui/composer/build_composer.ts +112 -0
- package/src/ui/composer/composer_styles.ts +174 -0
- package/src/ui/composer/skill_styles.ts +120 -0
- package/src/ui/history/history_styles.ts +484 -0
- package/src/ui/interrupts/approval_styles.ts +52 -0
- package/src/ui/interrupts/confirmation_styles.ts +114 -0
- package/src/ui/interrupts/question_styles.ts +73 -0
- package/src/ui/placement/collapse_styles.ts +137 -0
- package/src/ui/placement/embedded_styles.ts +14 -0
- package/src/ui/placement/launcher_styles.ts +189 -0
- package/src/ui/placement/page_styles.ts +47 -0
- package/src/ui/placement/panel_placement.ts +3 -12
- package/src/ui/placement/preset_styles.ts +33 -0
- package/src/ui/placement/resize_styles.ts +186 -0
- package/src/ui/placement/sidebar_styles.ts +88 -0
- package/src/ui/placement/small_viewport_styles.ts +56 -0
- package/src/ui/placement/surface_for.ts +135 -0
- package/src/ui/progress/run_notice_styles.ts +52 -0
- package/src/ui/progress/thoughts_styles.ts +65 -0
- package/src/ui/progress/tool_call_card.ts +11 -0
- package/src/ui/progress/tool_group_styles.ts +232 -0
- package/src/ui/progress/tool_step_group.ts +269 -0
- package/src/ui/progress/tool_step_styles.ts +472 -0
- package/src/ui/shell/adopt_styles.ts +11 -5
- package/src/ui/shell/build_header.ts +108 -0
- package/src/ui/shell/build_launcher.ts +50 -0
- package/src/ui/shell/frame_styles.ts +119 -0
- package/src/ui/shell/theme_styles.ts +11 -0
- package/src/ui/shell/token_styles.ts +406 -0
- package/src/ui/styles.ts +104 -3774
- package/src/ui/themes/classic_styles.ts +32 -0
- package/src/ui/themes/classic_tokens.ts +50 -0
- package/src/ui/themes/code_tokens.ts +21 -0
- package/src/ui/themes/ledger_styles.ts +168 -0
- package/src/ui/themes/ledger_tokens.ts +32 -0
- package/src/ui/themes/modern_styles.ts +80 -0
- package/src/ui/themes/quiet_styles.ts +115 -0
- package/src/ui/themes/scheme_styles.ts +17 -0
- package/src/ui/themes/soft_styles.ts +148 -0
- package/src/ui/themes/soft_tokens.ts +28 -0
- package/src/ui/themes/theme_hosts.ts +14 -0
- package/src/ui/transcript/attachment_chip_styles.ts +116 -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_styles.ts +262 -0
- package/src/ui/transcript/transcript.ts +109 -3
- package/src/ui/transcript/transcript_styles.ts +140 -0
- package/src/ui/ui_strings.ts +31 -0
- package/src/version.ts +1 -1
- package/dist/ui/placement/is_collapsible_placement.d.ts +0 -18
- package/dist/ui/placement/is_collapsible_placement.d.ts.map +0 -1
- package/dist/ui/placement/is_draggable_placement.d.ts +0 -9
- package/dist/ui/placement/is_draggable_placement.d.ts.map +0 -1
- package/src/ui/placement/is_collapsible_placement.ts +0 -19
- package/src/ui/placement/is_draggable_placement.ts +0 -23
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// The classic theme's contrast fixes. Classic's structure is the base
|
|
2
|
+
// stylesheet, so this holds only what it took to bring the old look to AA.
|
|
3
|
+
export const CLASSIC_STYLES: string = `
|
|
4
|
+
/* ── Classic ──────────────────────────────────────────────────────────────
|
|
5
|
+
The status pill draws its state's colour on a grey wash, which measured
|
|
6
|
+
3.75:1 for done in the light scheme and under 2.5:1 in the dark one. Each
|
|
7
|
+
state's ink is pulled halfway to the text colour: darker on the light
|
|
8
|
+
panel, lighter on the dark one, still recognisably its state. Scoped to
|
|
9
|
+
classic, so code keeps the pill it always had. */
|
|
10
|
+
:host([theme~="classic"]) .tool-call-status {
|
|
11
|
+
color: color-mix(in oklch, var(--_muted) 50%, var(--_fg));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:host([theme~="classic"]) .tool-call[data-status="deferred"] .tool-call-status {
|
|
15
|
+
color: color-mix(in oklch, var(--_accent) 50%, var(--_fg));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:host([theme~="classic"]) .tool-call[data-status="done"] .tool-call-status {
|
|
19
|
+
color: color-mix(in oklch, var(--_success) 50%, var(--_fg));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
:host([theme~="classic"]) .tool-call[data-status="error"] .tool-call-status {
|
|
23
|
+
color: color-mix(in oklch, var(--_danger) 50%, var(--_fg));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* The browser's default placeholder measured 3.93:1 on the dark composer.
|
|
27
|
+
The muted ink clears 4.5:1 in both schemes. */
|
|
28
|
+
:host([theme~="classic"]) .input::placeholder {
|
|
29
|
+
color: var(--_muted);
|
|
30
|
+
opacity: 1;
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// The classic theme: the look before the revamp, kept so a host can pin it.
|
|
2
|
+
// Tokens only; classic's structure is the base stylesheet itself.
|
|
3
|
+
export const CLASSIC_TOKENS: string = `
|
|
4
|
+
/* ── Classic ──────────────────────────────────────────────────────────────
|
|
5
|
+
Today's indigo header, accent user bubble, round launcher and heavy
|
|
6
|
+
shadow, in both schemes. The code theme starts from these as well, since
|
|
7
|
+
it was always this structure in a terminal palette. */
|
|
8
|
+
:host([theme~="classic"]),
|
|
9
|
+
:host([theme~="code"]) {
|
|
10
|
+
--_bg: var(--ag-ui-bg, light-dark(#ffffff, #15151f));
|
|
11
|
+
--_fg: var(--ag-ui-fg, light-dark(#1a1a2e, #e8e8f2));
|
|
12
|
+
--_accent: var(--ag-ui-accent, #4f46e5);
|
|
13
|
+
--_user-bg: var(--ag-ui-user-bg, #4f46e5);
|
|
14
|
+
--_user-fg: var(--ag-ui-user-fg, #ffffff);
|
|
15
|
+
--_assistant-bg: var(--ag-ui-assistant-bg, light-dark(#f1f1f6, #25253a));
|
|
16
|
+
--_hover: var(--ag-ui-hover, light-dark(#e7e7ee, #303049));
|
|
17
|
+
--_tool-bg: var(--ag-ui-tool-bg, var(--_assistant-bg));
|
|
18
|
+
--_tool-fg: var(--ag-ui-tool-fg, var(--_accent));
|
|
19
|
+
--_header-bg: var(--ag-ui-header-bg, light-dark(var(--_accent), #1f1f30));
|
|
20
|
+
--_header-fg: var(--ag-ui-header-fg, light-dark(#ffffff, #e8e8f2));
|
|
21
|
+
--_border: var(--ag-ui-border, light-dark(#e2e2ec, #33334a));
|
|
22
|
+
--_muted: var(--ag-ui-muted, light-dark(#6b7280, #9aa0b4));
|
|
23
|
+
--_success: var(--ag-ui-success, #15803d);
|
|
24
|
+
--_danger: var(--ag-ui-danger, #b91c1c);
|
|
25
|
+
--_tooltip-bg: var(--ag-ui-tooltip-bg, #1f2430);
|
|
26
|
+
--_tooltip-fg: var(--ag-ui-tooltip-fg, #f5f6fa);
|
|
27
|
+
--_font: var(--ag-ui-font, inherit);
|
|
28
|
+
--_frame-radius: var(--ag-ui-frame-radius, var(--_radius));
|
|
29
|
+
--_frame-shadow: var(--ag-ui-frame-shadow, 0 12px 32px light-dark(rgba(20, 20, 50, 0.18), rgba(0, 0, 0, 0.5)));
|
|
30
|
+
--_composer-radius: var(--ag-ui-composer-radius, 14px);
|
|
31
|
+
--_msg-radius: var(--ag-ui-msg-radius, 14px);
|
|
32
|
+
--_launcher-size: var(--ag-ui-launcher-size, 56px);
|
|
33
|
+
--_launcher-bg: var(--ag-ui-launcher-bg, var(--_header-bg));
|
|
34
|
+
--_launcher-fg: var(--ag-ui-launcher-fg, var(--_header-fg));
|
|
35
|
+
--_launcher-radius: var(--ag-ui-launcher-radius, 50%);
|
|
36
|
+
--_launcher-icon-size: var(--ag-ui-launcher-icon-size, 26px);
|
|
37
|
+
--_chart-1: var(--ag-ui-chart-1, #4f7cff);
|
|
38
|
+
--_chart-2: var(--ag-ui-chart-2, #21b573);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Classic's contrast fixes, which code does not share. The indigo accent
|
|
42
|
+
measured 2.38:1 as tool-name text on the dark card, and the old success
|
|
43
|
+
green 2.38:1 as the done mark there; in the dark scheme the tool name
|
|
44
|
+
takes the accent mixed halfway to the text colour, and success the
|
|
45
|
+
lighter green the other themes use. The light half is unchanged. */
|
|
46
|
+
:host([theme~="classic"]) {
|
|
47
|
+
--_tool-fg: var(--ag-ui-tool-fg, light-dark(var(--_accent), color-mix(in oklch, var(--_accent) 50%, var(--_fg))));
|
|
48
|
+
--_success: var(--ag-ui-success, light-dark(#15803d, #4ade80));
|
|
49
|
+
}
|
|
50
|
+
`;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// The code theme: classic's structure in a dark terminal palette. Kept for
|
|
2
|
+
// hosts that already wear it; Ledger is where a monospace look goes next.
|
|
3
|
+
export const CODE_TOKENS: string = `
|
|
4
|
+
/* ── Code ─────────────────────────────────────────────────────────────────
|
|
5
|
+
Dark only, monospace, green accent. Restates the colours classic sets,
|
|
6
|
+
after it, so code wins wherever the two would both apply. */
|
|
7
|
+
:host([theme~="code"]) {
|
|
8
|
+
--_bg: var(--ag-ui-bg, #0d1117);
|
|
9
|
+
--_fg: var(--ag-ui-fg, #c9d1d9);
|
|
10
|
+
--_accent: var(--ag-ui-accent, #3fb950);
|
|
11
|
+
--_user-bg: var(--ag-ui-user-bg, #238636);
|
|
12
|
+
--_assistant-bg: var(--ag-ui-assistant-bg, #161b22);
|
|
13
|
+
--_hover: var(--ag-ui-hover, #21262d);
|
|
14
|
+
--_header-bg: var(--ag-ui-header-bg, #010409);
|
|
15
|
+
--_header-fg: var(--ag-ui-header-fg, #c9d1d9);
|
|
16
|
+
--_border: var(--ag-ui-border, #30363d);
|
|
17
|
+
--_muted: var(--ag-ui-muted, #8b949e);
|
|
18
|
+
--_font: var(--ag-ui-font, var(--_code-font));
|
|
19
|
+
--_frame-shadow: var(--ag-ui-frame-shadow, 0 12px 32px rgba(0, 0, 0, 0.6));
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// The ledger theme's structure: rules, square corners, serif and monospace.
|
|
2
|
+
export const LEDGER_STYLES: string = `
|
|
3
|
+
/* ── Ledger ──────────────────────────────────────────────────────────────
|
|
4
|
+
Structure only; the tokens are in ledger_tokens. Serif for what the
|
|
5
|
+
agent says, monospace for what the machine did. */
|
|
6
|
+
|
|
7
|
+
:host([theme~="ledger"]) .chat {
|
|
8
|
+
line-height: var(--_leading);
|
|
9
|
+
border-color: var(--_line-strong);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
:host([theme~="ledger"]) .header {
|
|
13
|
+
padding: 8px 10px 8px 14px;
|
|
14
|
+
border-bottom-color: var(--_line-strong);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
:host([theme~="ledger"]) .header-title {
|
|
18
|
+
font-family: var(--_code-font);
|
|
19
|
+
font-size: var(--_text-xs);
|
|
20
|
+
font-weight: 600;
|
|
21
|
+
letter-spacing: 0.08em;
|
|
22
|
+
text-transform: uppercase;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:host([theme~="ledger"]) .header-title::before {
|
|
26
|
+
content: "";
|
|
27
|
+
display: inline-block;
|
|
28
|
+
width: 7px;
|
|
29
|
+
height: 7px;
|
|
30
|
+
margin-right: 8px;
|
|
31
|
+
background: var(--_accent);
|
|
32
|
+
vertical-align: 1px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
:host([theme~="ledger"]) .header-btn {
|
|
36
|
+
color: var(--_ink-3);
|
|
37
|
+
border-radius: 3px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
:host([theme~="ledger"]) .header-btn:hover {
|
|
41
|
+
background: var(--_hover);
|
|
42
|
+
color: var(--_fg);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
:host([theme~="ledger"]) .message--user {
|
|
46
|
+
align-self: stretch;
|
|
47
|
+
max-width: 100%;
|
|
48
|
+
margin-top: 6px;
|
|
49
|
+
padding: 2px 0 2px 12px;
|
|
50
|
+
border-left: 2px solid var(--_fg);
|
|
51
|
+
font-weight: 500;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:host([theme~="ledger"]) .message--user + .answer,
|
|
55
|
+
:host([theme~="ledger"]) .answer + .message--user {
|
|
56
|
+
margin-top: 4px;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
:host([theme~="ledger"]) .answer + .message--user {
|
|
60
|
+
border-top: 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
:host([theme~="ledger"]) .message--assistant {
|
|
64
|
+
padding: 0;
|
|
65
|
+
max-width: 100%;
|
|
66
|
+
font-family: var(--_serif);
|
|
67
|
+
font-size: var(--_text-lg);
|
|
68
|
+
line-height: 1.5;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
:host([theme~="ledger"]) .message--assistant a {
|
|
72
|
+
color: var(--_accent-ink);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
:host([theme~="ledger"]) .thoughts-toggle {
|
|
76
|
+
font-family: var(--_code-font);
|
|
77
|
+
font-size: var(--_text-xs);
|
|
78
|
+
letter-spacing: 0.01em;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* The step group's row reads as a ledger heading. Unscoped to grouped mode:
|
|
82
|
+
a card mode hides the row and drops the list's box, so neither reaches a
|
|
83
|
+
flattened card. */
|
|
84
|
+
:host([theme~="ledger"]) .tool-group-head {
|
|
85
|
+
font-family: var(--_code-font);
|
|
86
|
+
font-size: var(--_text-xs);
|
|
87
|
+
border-radius: 2px;
|
|
88
|
+
text-transform: uppercase;
|
|
89
|
+
letter-spacing: 0.06em;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
:host([theme~="ledger"]) .tool-group-list {
|
|
93
|
+
border-left: 1px dashed var(--_line-strong);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
:host([theme~="ledger"]) .chart-block {
|
|
97
|
+
border-top: 1px solid var(--_line-strong);
|
|
98
|
+
border-bottom: 1px solid var(--_line);
|
|
99
|
+
padding: 8px 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
:host([theme~="ledger"]) .chart-title {
|
|
103
|
+
font-family: var(--_code-font);
|
|
104
|
+
font-size: var(--_text-xs);
|
|
105
|
+
text-transform: uppercase;
|
|
106
|
+
letter-spacing: 0.08em;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
:host([theme~="ledger"]) .input-row {
|
|
110
|
+
padding-block: 10px;
|
|
111
|
+
border-top: 1px solid var(--_line-strong);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
:host([theme~="ledger"]) .composer {
|
|
115
|
+
border-color: var(--_line-strong);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
:host([theme~="ledger"]) .composer:focus-within {
|
|
119
|
+
border-color: var(--_fg);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
:host([theme~="ledger"]) .send {
|
|
123
|
+
border-radius: 3px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
:host([theme~="ledger"]) :is(.suggestion-chip, .skill-chip) {
|
|
127
|
+
background: transparent;
|
|
128
|
+
border: 1px solid var(--_line-strong);
|
|
129
|
+
color: var(--_ink-2);
|
|
130
|
+
border-radius: 2px;
|
|
131
|
+
font-family: var(--_code-font);
|
|
132
|
+
font-size: var(--_text-xs);
|
|
133
|
+
padding: 3px 8px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
:host([theme~="ledger"]) :is(.suggestion-chip, .skill-chip):hover {
|
|
137
|
+
border-color: var(--_fg);
|
|
138
|
+
color: var(--_fg);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
:host([theme~="ledger"]) .confirm {
|
|
142
|
+
border: 1px solid var(--_fg);
|
|
143
|
+
border-left: 3px solid var(--_accent);
|
|
144
|
+
border-radius: 2px;
|
|
145
|
+
padding: 10px 12px;
|
|
146
|
+
gap: 10px;
|
|
147
|
+
background: var(--_bg);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
:host([theme~="ledger"]) .confirm-btn {
|
|
151
|
+
border-radius: 2px;
|
|
152
|
+
padding: 5px 12px;
|
|
153
|
+
font-family: var(--_code-font);
|
|
154
|
+
font-size: var(--_text-xs);
|
|
155
|
+
font-weight: 600;
|
|
156
|
+
text-transform: uppercase;
|
|
157
|
+
letter-spacing: 0.06em;
|
|
158
|
+
border-color: var(--_line-strong);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
:host([theme~="ledger"]) .confirm-btn--confirm {
|
|
162
|
+
border-color: var(--_accent);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
:host([theme~="ledger"]) .launcher {
|
|
166
|
+
border: 0;
|
|
167
|
+
}
|
|
168
|
+
`;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// The ledger theme's tokens: dense and editorial, paper and ink.
|
|
2
|
+
export const LEDGER_TOKENS: string = `
|
|
3
|
+
/* ── Ledger ───────────────────────────────────────────────────────────────
|
|
4
|
+
A smaller type scale than the other themes, because density is the point.
|
|
5
|
+
Set before the density presets, so density="compact" still wins. */
|
|
6
|
+
:host([theme~="ledger"]) {
|
|
7
|
+
--_bg: var(--ag-ui-bg, light-dark(#fbfaf6, #151513));
|
|
8
|
+
--_fg: var(--ag-ui-fg, light-dark(#1d1c19, #e8e6df));
|
|
9
|
+
--_accent: var(--ag-ui-accent, light-dark(#b8410e, #f08a4b));
|
|
10
|
+
--_code-font: var(--ag-ui-code-font, "JetBrains Mono", ui-monospace, Menlo, monospace);
|
|
11
|
+
--_text-xs: var(--ag-ui-text-xs, 10.5px);
|
|
12
|
+
--_text-sm: var(--ag-ui-text-sm, 12px);
|
|
13
|
+
--_text-md: var(--ag-ui-text-md, 13px);
|
|
14
|
+
--_text-lg: var(--ag-ui-text-lg, 14.5px);
|
|
15
|
+
--_leading: var(--ag-ui-leading, 1.5);
|
|
16
|
+
--_space: var(--ag-ui-space, 8px);
|
|
17
|
+
--_pad: var(--ag-ui-pad, 14px);
|
|
18
|
+
--_radius: var(--ag-ui-radius, 3px);
|
|
19
|
+
--_frame-radius: var(--ag-ui-frame-radius, var(--ag-ui-radius, 6px));
|
|
20
|
+
--_msg-radius: var(--ag-ui-msg-radius, 0px);
|
|
21
|
+
--_composer-radius: var(--ag-ui-composer-radius, 4px);
|
|
22
|
+
--_user-bg: var(--ag-ui-user-bg, transparent);
|
|
23
|
+
--_frame-shadow: var(--ag-ui-frame-shadow, 0 0 0 1px var(--_line-strong), 0 20px 40px -28px rgb(0 0 0 / 0.45));
|
|
24
|
+
--_launcher-bg: var(--ag-ui-launcher-bg, var(--_fg));
|
|
25
|
+
--_launcher-fg: var(--ag-ui-launcher-fg, var(--_bg));
|
|
26
|
+
--_launcher-radius: var(--ag-ui-launcher-radius, 6px);
|
|
27
|
+
--_launcher-size: var(--ag-ui-launcher-size, 44px);
|
|
28
|
+
--_launcher-icon-size: var(--ag-ui-launcher-icon-size, 20px);
|
|
29
|
+
--_chart-1: var(--ag-ui-chart-1, var(--_fg));
|
|
30
|
+
--_chart-2: var(--ag-ui-chart-2, var(--_accent));
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { THEME_HOST } from "./theme_hosts.js";
|
|
2
|
+
|
|
3
|
+
// The structure every theme but classic and code shares: status as an icon,
|
|
4
|
+
// one chip row, one action row per answer, and a readable placeholder.
|
|
5
|
+
export const MODERN_STYLES: string = `
|
|
6
|
+
/* ── status as an icon, never a pill ─────────────────────────────
|
|
7
|
+
The word stays for assistive technology through the card's own label; the
|
|
8
|
+
pill only ever repeated what the icon said. */
|
|
9
|
+
${THEME_HOST.modern} .tool-call-status {
|
|
10
|
+
position: absolute;
|
|
11
|
+
width: 1px;
|
|
12
|
+
height: 1px;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
clip-path: inset(50%);
|
|
15
|
+
white-space: nowrap;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
${THEME_HOST.modern} .tool-call:is([data-status="done"], [data-status="error"], [data-status="declined"]) .tool-call-icon::before {
|
|
19
|
+
content: "";
|
|
20
|
+
width: 14px;
|
|
21
|
+
height: 14px;
|
|
22
|
+
background: currentColor;
|
|
23
|
+
mask: var(--_ico-check) center / contain no-repeat;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
${THEME_HOST.modern} .tool-call[data-status="done"] .tool-call-icon {
|
|
27
|
+
color: var(--_success);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
${THEME_HOST.modern} .tool-call[data-status="error"] .tool-call-icon {
|
|
31
|
+
color: var(--_danger);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
${THEME_HOST.modern} .tool-call[data-status="error"] .tool-call-icon::before {
|
|
35
|
+
mask-image: var(--_ico-error);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* An interrupted call is muted like a declined one but keeps the base glyph
|
|
39
|
+
rather than taking the declined mark: nobody refused it, it only did not
|
|
40
|
+
finish. */
|
|
41
|
+
${THEME_HOST.modern} .tool-call:is([data-status="declined"], [data-status="interrupted"]) .tool-call-icon {
|
|
42
|
+
color: var(--_muted);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
${THEME_HOST.modern} .tool-call[data-status="declined"] .tool-call-icon::before {
|
|
46
|
+
mask-image: var(--_ico-declined);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* The settled icon inherits colour from the icon box, so the box's own glyph
|
|
50
|
+
colour from the base rules must not win. */
|
|
51
|
+
${THEME_HOST.modern} .tool-call .tool-call-icon::before {
|
|
52
|
+
color: inherit;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* ── one chip row ────────────────────────────────────────────────
|
|
56
|
+
Follow-up suggestions are the row once a conversation has started; the
|
|
57
|
+
skill chips stay on the empty state only and otherwise live in the slash
|
|
58
|
+
palette, so two rows never compete above the composer. */
|
|
59
|
+
:host(:not([theme~="classic"], [theme~="code"], [data-empty])) .skill-chips {
|
|
60
|
+
display: none;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* ── one action row per answer ───────────────────────────────────
|
|
64
|
+
Copy and retry under every interim sentence of a long turn read as noise;
|
|
65
|
+
only the row after the last bubble of a turn stays. */
|
|
66
|
+
${THEME_HOST.modern} .message-actions:has(~ .message--assistant) {
|
|
67
|
+
display: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
${THEME_HOST.modern} .chart-block {
|
|
71
|
+
box-sizing: border-box;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* The baseline placeholder is the browser default, which measured under
|
|
75
|
+
4.5:1 on every dark surface. A derived ink clears it in both schemes. */
|
|
76
|
+
${THEME_HOST.modern} .input::placeholder {
|
|
77
|
+
color: var(--_ink-3);
|
|
78
|
+
opacity: 1;
|
|
79
|
+
}
|
|
80
|
+
`;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { THEME_HOST } from "./theme_hosts.js";
|
|
2
|
+
|
|
3
|
+
// The default theme's structure. Applies to every element wearing no other
|
|
4
|
+
// built-in theme, so a host's own named theme starts from it.
|
|
5
|
+
export const QUIET_STYLES: string = `
|
|
6
|
+
/* ── Quiet ───────────────────────────────────────────────────────────────
|
|
7
|
+
The default. Its tokens are the token defaults; this is the little
|
|
8
|
+
structure it adds on top: no bubble for the agent, hairlines, and a
|
|
9
|
+
composer that sits on the panel rather than in a band. */
|
|
10
|
+
|
|
11
|
+
${THEME_HOST.quiet} .chat {
|
|
12
|
+
font-feature-settings: "cv11", "ss01";
|
|
13
|
+
letter-spacing: -0.003em;
|
|
14
|
+
line-height: var(--_leading);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
${THEME_HOST.quiet} .header {
|
|
18
|
+
padding: 12px 14px 12px 18px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
${THEME_HOST.quiet} .header-title {
|
|
22
|
+
font-size: var(--_text-md);
|
|
23
|
+
font-weight: 600;
|
|
24
|
+
letter-spacing: -0.01em;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
${THEME_HOST.quiet} .header-btn {
|
|
28
|
+
color: var(--_ink-3);
|
|
29
|
+
border-radius: 8px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
${THEME_HOST.quiet} .header-btn:hover {
|
|
33
|
+
color: var(--_fg);
|
|
34
|
+
background: var(--_hover);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
${THEME_HOST.quiet} .message--user {
|
|
38
|
+
border-radius: var(--_msg-radius);
|
|
39
|
+
padding: 8px 12px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
${THEME_HOST.quiet} .message--assistant {
|
|
43
|
+
padding: 0;
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
${THEME_HOST.quiet} .message--assistant a {
|
|
48
|
+
color: inherit;
|
|
49
|
+
text-decoration: underline;
|
|
50
|
+
text-decoration-color: var(--_line-strong);
|
|
51
|
+
text-underline-offset: 3px;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
${THEME_HOST.quiet} .thoughts-toggle {
|
|
55
|
+
color: var(--_muted);
|
|
56
|
+
font-size: var(--_text-sm);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
${THEME_HOST.quiet} .input-row {
|
|
60
|
+
border-top: 0;
|
|
61
|
+
padding-top: 4px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
${THEME_HOST.quiet} .composer {
|
|
65
|
+
border-color: var(--_line-strong);
|
|
66
|
+
box-shadow: 0 1px 2px rgb(0 0 0 / 0.04);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
${THEME_HOST.quiet} .composer:focus-within {
|
|
70
|
+
border-color: var(--_ink-3);
|
|
71
|
+
box-shadow: 0 0 0 3px var(--_wash);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
${THEME_HOST.quiet} .send {
|
|
75
|
+
border-radius: 9px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
${THEME_HOST.quiet} :is(.suggestion-chip, .skill-chip) {
|
|
79
|
+
background: transparent;
|
|
80
|
+
border: 1px solid var(--_line);
|
|
81
|
+
color: var(--_ink-2);
|
|
82
|
+
border-radius: 999px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
${THEME_HOST.quiet} :is(.suggestion-chip, .skill-chip):hover {
|
|
86
|
+
background: var(--_hover);
|
|
87
|
+
color: var(--_fg);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
${THEME_HOST.quiet} .confirm {
|
|
91
|
+
border: 1px solid var(--_line-strong);
|
|
92
|
+
border-radius: var(--_radius);
|
|
93
|
+
padding: 14px;
|
|
94
|
+
gap: 12px;
|
|
95
|
+
box-shadow: 0 1px 2px rgb(0 0 0 / 0.04);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
${THEME_HOST.quiet} .confirm-btn {
|
|
99
|
+
border-radius: 8px;
|
|
100
|
+
padding: 7px 14px;
|
|
101
|
+
font-weight: 500;
|
|
102
|
+
font-size: var(--_text-sm);
|
|
103
|
+
border-color: var(--_line-strong);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
${THEME_HOST.quiet} .confirm-btn--confirm {
|
|
107
|
+
border-color: var(--_accent);
|
|
108
|
+
font-weight: 600;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
${THEME_HOST.quiet} .launcher {
|
|
112
|
+
border: 1px solid var(--_line-strong);
|
|
113
|
+
box-shadow: 0 1px 2px rgb(0 0 0 / 0.06), 0 8px 24px -10px rgb(0 0 0 / 0.25);
|
|
114
|
+
}
|
|
115
|
+
`;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// The scheme word of the theme attribute: light (the default), dark or auto.
|
|
2
|
+
export const SCHEME_STYLES: string = `
|
|
3
|
+
/* ── Scheme ───────────────────────────────────────────────────────────────
|
|
4
|
+
Every theme declares its colours with light-dark, so the scheme is one
|
|
5
|
+
property. Matched as a word, so dark works alone (the default theme,
|
|
6
|
+
dark) and beside a theme name (soft dark). auto follows the operating
|
|
7
|
+
system through color-scheme itself, with no media query to keep in step.
|
|
8
|
+
code is a dark-only theme and has no light half. */
|
|
9
|
+
:host([theme~="dark"]),
|
|
10
|
+
:host([theme~="code"]) {
|
|
11
|
+
color-scheme: dark;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:host([theme~="auto"]) {
|
|
15
|
+
color-scheme: light dark;
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// The soft theme's structure: pills, tinted surfaces, rounded cards.
|
|
2
|
+
export const SOFT_STYLES: string = `
|
|
3
|
+
/* ── Soft ────────────────────────────────────────────────────────────────
|
|
4
|
+
Structure only; the tokens are in soft_tokens, set before the density
|
|
5
|
+
presets. */
|
|
6
|
+
|
|
7
|
+
:host([theme~="soft"]) .chat {
|
|
8
|
+
line-height: var(--_leading);
|
|
9
|
+
background: var(--_bg);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
:host([theme~="soft"]) .header {
|
|
13
|
+
border-bottom-color: transparent;
|
|
14
|
+
padding: 14px 16px 12px 20px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
:host([theme~="soft"]) .header-title {
|
|
18
|
+
display: inline-flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
gap: 10px;
|
|
21
|
+
font-size: var(--_text-lg);
|
|
22
|
+
font-weight: 600;
|
|
23
|
+
letter-spacing: -0.015em;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:host([theme~="soft"]) .header-title::before {
|
|
27
|
+
content: "";
|
|
28
|
+
width: 22px;
|
|
29
|
+
height: 22px;
|
|
30
|
+
border-radius: 8px;
|
|
31
|
+
background: linear-gradient(140deg, color-mix(in oklch, var(--_accent) 55%, var(--_bg)), var(--_accent));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
:host([theme~="soft"]) .header-btn {
|
|
35
|
+
color: var(--_ink-3);
|
|
36
|
+
border-radius: 10px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
:host([theme~="soft"]) .header-btn:hover {
|
|
40
|
+
background: var(--_tint-2);
|
|
41
|
+
color: var(--_accent-ink);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
:host([theme~="soft"]) .messages {
|
|
45
|
+
background: linear-gradient(var(--_tint), var(--_bg) 120px);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
:host([theme~="soft"]) .message--user {
|
|
49
|
+
border-radius: var(--_msg-radius) var(--_msg-radius) 6px var(--_msg-radius);
|
|
50
|
+
padding: 9px 14px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:host([theme~="soft"]) .message--assistant {
|
|
54
|
+
padding: 0 2px;
|
|
55
|
+
max-width: 100%;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:host([theme~="soft"]) .message--assistant a {
|
|
59
|
+
color: var(--_accent-ink);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* The step group's row as a tinted pill. Unscoped to grouped mode: a card
|
|
63
|
+
mode hides the row and drops the list's box, so neither reaches a
|
|
64
|
+
flattened card. */
|
|
65
|
+
:host([theme~="soft"]) .tool-group-head {
|
|
66
|
+
background: var(--_tint);
|
|
67
|
+
border: 1px solid var(--_border);
|
|
68
|
+
border-radius: 999px;
|
|
69
|
+
padding: 5px 12px 5px 9px;
|
|
70
|
+
margin-left: 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
:host([theme~="soft"]) .tool-group-head:hover {
|
|
74
|
+
background: var(--_tint-2);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
:host([theme~="soft"]) .tool-group-list {
|
|
78
|
+
border-left-color: var(--_tint-2);
|
|
79
|
+
margin-left: 14px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:host([theme~="soft"]) .chart-block {
|
|
83
|
+
background: var(--_bg);
|
|
84
|
+
border: 1px solid var(--_border);
|
|
85
|
+
border-radius: var(--_radius);
|
|
86
|
+
padding: 12px 14px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
:host([theme~="soft"]) .input-row {
|
|
90
|
+
border-top: 0;
|
|
91
|
+
padding-block: 6px 16px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
:host([theme~="soft"]) .composer {
|
|
95
|
+
padding: 8px 8px 8px 14px;
|
|
96
|
+
border-color: var(--_border);
|
|
97
|
+
box-shadow: 0 6px 20px -10px color-mix(in oklch, var(--_accent) 35%, transparent);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
:host([theme~="soft"]) .composer:focus-within {
|
|
101
|
+
border-color: color-mix(in oklch, var(--_accent) 50%, var(--_bg));
|
|
102
|
+
box-shadow: 0 0 0 4px var(--_tint-2);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
:host([theme~="soft"]) .send {
|
|
106
|
+
border-radius: 999px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
:host([theme~="soft"]) :is(.suggestion-chip, .skill-chip) {
|
|
110
|
+
background: var(--_tint-2);
|
|
111
|
+
border: 1px solid transparent;
|
|
112
|
+
color: var(--_accent-ink);
|
|
113
|
+
border-radius: 999px;
|
|
114
|
+
font-weight: 500;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
:host([theme~="soft"]) :is(.suggestion-chip, .skill-chip):hover {
|
|
118
|
+
border-color: color-mix(in oklch, var(--_accent) 35%, var(--_bg));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
:host([theme~="soft"]) .confirm {
|
|
122
|
+
background: var(--_tint);
|
|
123
|
+
border: 1px solid var(--_border);
|
|
124
|
+
border-radius: 18px;
|
|
125
|
+
padding: 16px;
|
|
126
|
+
gap: 14px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
:host([theme~="soft"]) .confirm-btn {
|
|
130
|
+
border-radius: 999px;
|
|
131
|
+
padding: 8px 16px;
|
|
132
|
+
font-weight: 500;
|
|
133
|
+
background: var(--_bg);
|
|
134
|
+
border-color: var(--_border);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
:host([theme~="soft"]) .confirm-btn--confirm {
|
|
138
|
+
background: var(--_accent);
|
|
139
|
+
border-color: var(--_accent);
|
|
140
|
+
color: var(--_on-accent);
|
|
141
|
+
font-weight: 600;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
:host([theme~="soft"]) .launcher {
|
|
145
|
+
border: 0;
|
|
146
|
+
box-shadow: 0 14px 30px -12px color-mix(in oklch, var(--_accent) 70%, transparent);
|
|
147
|
+
}
|
|
148
|
+
`;
|