@atelier-ui/react 0.1.12 → 0.2.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 +30 -0
- package/README.md +3 -3
- package/package.json +1 -1
- package/src/index.d.ts +29 -29
- package/src/index.js +29 -29
- package/src/index.js.map +1 -1
- package/src/lib/accordion/{llm-accordion.css → atl-accordion.css} +8 -8
- package/src/lib/accordion/{llm-accordion.d.ts → atl-accordion.d.ts} +12 -12
- package/src/lib/accordion/{llm-accordion.d.ts.map → atl-accordion.d.ts.map} +1 -1
- package/src/lib/accordion/{llm-accordion.js → atl-accordion.js} +9 -9
- package/src/lib/accordion/{llm-accordion.js.map → atl-accordion.js.map} +1 -1
- package/src/lib/alert/{llm-alert.css → atl-alert.css} +10 -10
- package/src/lib/alert/{llm-alert.d.ts → atl-alert.d.ts} +8 -8
- package/src/lib/alert/{llm-alert.d.ts.map → atl-alert.d.ts.map} +1 -1
- package/src/lib/alert/{llm-alert.js → atl-alert.js} +4 -4
- package/src/lib/alert/{llm-alert.js.map → atl-alert.js.map} +1 -1
- package/src/lib/avatar/{llm-avatar.css → atl-avatar.css} +20 -20
- package/src/lib/avatar/{llm-avatar.d.ts → atl-avatar.d.ts} +10 -10
- package/src/lib/avatar/{llm-avatar.d.ts.map → atl-avatar.d.ts.map} +1 -1
- package/src/lib/avatar/{llm-avatar.js → atl-avatar.js} +6 -6
- package/src/lib/avatar/{llm-avatar.js.map → atl-avatar.js.map} +1 -1
- package/src/lib/badge/{llm-badge.css → atl-badge.css} +9 -9
- package/src/lib/badge/atl-badge.d.ts +27 -0
- package/src/lib/badge/{llm-badge.d.ts.map → atl-badge.d.ts.map} +1 -1
- package/src/lib/badge/{llm-badge.js → atl-badge.js} +4 -4
- package/src/lib/badge/{llm-badge.js.map → atl-badge.js.map} +1 -1
- package/src/lib/breadcrumbs/{llm-breadcrumbs.css → atl-breadcrumbs.css} +11 -11
- package/src/lib/breadcrumbs/atl-breadcrumbs.d.ts +38 -0
- package/src/lib/breadcrumbs/{llm-breadcrumbs.d.ts.map → atl-breadcrumbs.d.ts.map} +1 -1
- package/src/lib/breadcrumbs/{llm-breadcrumbs.js → atl-breadcrumbs.js} +7 -7
- package/src/lib/breadcrumbs/{llm-breadcrumbs.js.map → atl-breadcrumbs.js.map} +1 -1
- package/src/lib/button/{llm-button.css → atl-button.css} +20 -20
- package/src/lib/button/{llm-button.d.ts → atl-button.d.ts} +7 -7
- package/src/lib/button/{llm-button.d.ts.map → atl-button.d.ts.map} +1 -1
- package/src/lib/button/{llm-button.js → atl-button.js} +4 -4
- package/src/lib/button/{llm-button.js.map → atl-button.js.map} +1 -1
- package/src/lib/card/{llm-card.css → atl-card.css} +20 -20
- package/src/lib/card/{llm-card.d.ts → atl-card.d.ts} +13 -13
- package/src/lib/card/{llm-card.d.ts.map → atl-card.d.ts.map} +1 -1
- package/src/lib/card/atl-card.js +30 -0
- package/src/lib/card/{llm-card.js.map → atl-card.js.map} +1 -1
- package/src/lib/chat/{llm-chat.css → atl-chat.css} +55 -55
- package/src/lib/chat/{llm-chat.d.ts → atl-chat.d.ts} +26 -26
- package/src/lib/chat/{llm-chat.d.ts.map → atl-chat.d.ts.map} +1 -1
- package/src/lib/chat/{llm-chat.js → atl-chat.js} +21 -21
- package/src/lib/chat/{llm-chat.js.map → atl-chat.js.map} +1 -1
- package/src/lib/checkbox/{llm-checkbox.css → atl-checkbox.css} +19 -19
- package/src/lib/checkbox/{llm-checkbox.d.ts → atl-checkbox.d.ts} +6 -6
- package/src/lib/checkbox/{llm-checkbox.d.ts.map → atl-checkbox.d.ts.map} +1 -1
- package/src/lib/checkbox/{llm-checkbox.js → atl-checkbox.js} +4 -4
- package/src/lib/checkbox/{llm-checkbox.js.map → atl-checkbox.js.map} +1 -1
- package/src/lib/code-block/{llm-code-block.css → atl-code-block.css} +2 -2
- package/src/lib/code-block/{llm-code-block.d.ts → atl-code-block.d.ts} +4 -4
- package/src/lib/code-block/{llm-code-block.d.ts.map → atl-code-block.d.ts.map} +1 -1
- package/src/lib/code-block/{llm-code-block.js → atl-code-block.js} +4 -4
- package/src/lib/code-block/{llm-code-block.js.map → atl-code-block.js.map} +1 -1
- package/src/lib/combobox/{llm-combobox.css → atl-combobox.css} +24 -24
- package/src/lib/combobox/{llm-combobox.d.ts → atl-combobox.d.ts} +7 -7
- package/src/lib/combobox/{llm-combobox.d.ts.map → atl-combobox.d.ts.map} +1 -1
- package/src/lib/combobox/{llm-combobox.js → atl-combobox.js} +8 -8
- package/src/lib/combobox/{llm-combobox.js.map → atl-combobox.js.map} +1 -1
- package/src/lib/dialog/{llm-dialog.css → atl-dialog.css} +18 -18
- package/src/lib/dialog/{llm-dialog.d.ts → atl-dialog.d.ts} +12 -12
- package/src/lib/dialog/{llm-dialog.d.ts.map → atl-dialog.d.ts.map} +1 -1
- package/src/lib/dialog/{llm-dialog.js → atl-dialog.js} +13 -13
- package/src/lib/dialog/{llm-dialog.js.map → atl-dialog.js.map} +1 -1
- package/src/lib/drawer/{llm-drawer.css → atl-drawer.css} +35 -35
- package/src/lib/drawer/{llm-drawer.d.ts → atl-drawer.d.ts} +12 -12
- package/src/lib/drawer/{llm-drawer.d.ts.map → atl-drawer.d.ts.map} +1 -1
- package/src/lib/drawer/{llm-drawer.js → atl-drawer.js} +13 -13
- package/src/lib/drawer/{llm-drawer.js.map → atl-drawer.js.map} +1 -1
- package/src/lib/icon/{llm-icon.css → atl-icon.css} +4 -4
- package/src/lib/icon/atl-icon.d.ts +24 -0
- package/src/lib/icon/{llm-icon.d.ts.map → atl-icon.d.ts.map} +1 -1
- package/src/lib/icon/{llm-icon.js → atl-icon.js} +5 -5
- package/src/lib/icon/{llm-icon.js.map → atl-icon.js.map} +1 -1
- package/src/lib/input/{llm-input.css → atl-input.css} +14 -14
- package/src/lib/input/{llm-input.d.ts → atl-input.d.ts} +6 -6
- package/src/lib/input/{llm-input.d.ts.map → atl-input.d.ts.map} +1 -1
- package/src/lib/input/{llm-input.js → atl-input.js} +4 -4
- package/src/lib/input/{llm-input.js.map → atl-input.js.map} +1 -1
- package/src/lib/menu/{llm-menu.css → atl-menu.css} +11 -11
- package/src/lib/menu/{llm-menu.d.ts → atl-menu.d.ts} +13 -13
- package/src/lib/menu/{llm-menu.d.ts.map → atl-menu.d.ts.map} +1 -1
- package/src/lib/menu/{llm-menu.js → atl-menu.js} +10 -10
- package/src/lib/menu/{llm-menu.js.map → atl-menu.js.map} +1 -1
- package/src/lib/pagination/{llm-pagination.css → atl-pagination.css} +1 -1
- package/src/lib/pagination/{llm-pagination.d.ts → atl-pagination.d.ts} +6 -6
- package/src/lib/pagination/{llm-pagination.d.ts.map → atl-pagination.d.ts.map} +1 -1
- package/src/lib/pagination/{llm-pagination.js → atl-pagination.js} +4 -4
- package/src/lib/pagination/{llm-pagination.js.map → atl-pagination.js.map} +1 -1
- package/src/lib/progress/{llm-progress.css → atl-progress.css} +9 -9
- package/src/lib/progress/{llm-progress.d.ts → atl-progress.d.ts} +6 -6
- package/src/lib/progress/{llm-progress.d.ts.map → atl-progress.d.ts.map} +1 -1
- package/src/lib/progress/{llm-progress.js → atl-progress.js} +4 -4
- package/src/lib/progress/{llm-progress.js.map → atl-progress.js.map} +1 -1
- package/src/lib/radio/{llm-radio.css → atl-radio.css} +11 -11
- package/src/lib/radio/{llm-radio.d.ts → atl-radio.d.ts} +7 -7
- package/src/lib/radio/{llm-radio.d.ts.map → atl-radio.d.ts.map} +1 -1
- package/src/lib/radio/{llm-radio.js → atl-radio.js} +6 -6
- package/src/lib/radio/{llm-radio.js.map → atl-radio.js.map} +1 -1
- package/src/lib/radio-group/{llm-radio-group.css → atl-radio-group.css} +6 -6
- package/src/lib/radio-group/{llm-radio-group.d.ts → atl-radio-group.d.ts} +6 -6
- package/src/lib/radio-group/{llm-radio-group.d.ts.map → atl-radio-group.d.ts.map} +1 -1
- package/src/lib/radio-group/{llm-radio-group.js → atl-radio-group.js} +4 -4
- package/src/lib/radio-group/{llm-radio-group.js.map → atl-radio-group.js.map} +1 -1
- package/src/lib/select/{llm-select.css → atl-select.css} +11 -11
- package/src/lib/select/{llm-select.d.ts → atl-select.d.ts} +10 -10
- package/src/lib/select/{llm-select.d.ts.map → atl-select.d.ts.map} +1 -1
- package/src/lib/select/{llm-select.js → atl-select.js} +6 -6
- package/src/lib/select/{llm-select.js.map → atl-select.js.map} +1 -1
- package/src/lib/skeleton/{llm-skeleton.css → atl-skeleton.css} +6 -6
- package/src/lib/skeleton/{llm-skeleton.d.ts → atl-skeleton.d.ts} +6 -6
- package/src/lib/skeleton/{llm-skeleton.d.ts.map → atl-skeleton.d.ts.map} +1 -1
- package/src/lib/skeleton/{llm-skeleton.js → atl-skeleton.js} +4 -4
- package/src/lib/skeleton/{llm-skeleton.js.map → atl-skeleton.js.map} +1 -1
- package/src/lib/spec.d.ts +120 -120
- package/src/lib/spec.js.map +1 -1
- package/src/lib/stepper/{llm-stepper.css → atl-stepper.css} +5 -5
- package/src/lib/stepper/{llm-stepper.d.ts → atl-stepper.d.ts} +9 -9
- package/src/lib/stepper/{llm-stepper.d.ts.map → atl-stepper.d.ts.map} +1 -1
- package/src/lib/stepper/{llm-stepper.js → atl-stepper.js} +11 -11
- package/src/lib/stepper/{llm-stepper.js.map → atl-stepper.js.map} +1 -1
- package/src/lib/table/{llm-table.css → atl-table.css} +30 -30
- package/src/lib/table/atl-table.d.ts +40 -0
- package/src/lib/table/{llm-table.d.ts.map → atl-table.d.ts.map} +1 -1
- package/src/lib/table/{llm-table.js → atl-table.js} +14 -14
- package/src/lib/table/{llm-table.js.map → atl-table.js.map} +1 -1
- package/src/lib/tabs/{llm-tabs.css → atl-tabs.css} +17 -17
- package/src/lib/tabs/{llm-tabs.d.ts → atl-tabs.d.ts} +12 -12
- package/src/lib/tabs/{llm-tabs.d.ts.map → atl-tabs.d.ts.map} +1 -1
- package/src/lib/tabs/{llm-tabs.js → atl-tabs.js} +11 -11
- package/src/lib/tabs/{llm-tabs.js.map → atl-tabs.js.map} +1 -1
- package/src/lib/textarea/{llm-textarea.css → atl-textarea.css} +15 -15
- package/src/lib/textarea/{llm-textarea.d.ts → atl-textarea.d.ts} +6 -6
- package/src/lib/textarea/{llm-textarea.d.ts.map → atl-textarea.d.ts.map} +1 -1
- package/src/lib/textarea/{llm-textarea.js → atl-textarea.js} +4 -4
- package/src/lib/textarea/{llm-textarea.js.map → atl-textarea.js.map} +1 -1
- package/src/lib/toast/{llm-toast.css → atl-toast.css} +16 -16
- package/src/lib/toast/atl-toast.d.ts +54 -0
- package/src/lib/toast/{llm-toast.d.ts.map → atl-toast.d.ts.map} +1 -1
- package/src/lib/toast/{llm-toast.js → atl-toast.js} +12 -12
- package/src/lib/toast/{llm-toast.js.map → atl-toast.js.map} +1 -1
- package/src/lib/toggle/{llm-toggle.css → atl-toggle.css} +16 -16
- package/src/lib/toggle/{llm-toggle.d.ts → atl-toggle.d.ts} +6 -6
- package/src/lib/toggle/{llm-toggle.d.ts.map → atl-toggle.d.ts.map} +1 -1
- package/src/lib/toggle/{llm-toggle.js → atl-toggle.js} +4 -4
- package/src/lib/toggle/{llm-toggle.js.map → atl-toggle.js.map} +1 -1
- package/src/lib/tooltip/{llm-tooltip.css → atl-tooltip.css} +12 -12
- package/src/lib/tooltip/atl-tooltip.d.ts +17 -0
- package/src/lib/tooltip/{llm-tooltip.d.ts.map → atl-tooltip.d.ts.map} +1 -1
- package/src/lib/tooltip/{llm-tooltip.js → atl-tooltip.js} +7 -7
- package/src/lib/tooltip/{llm-tooltip.js.map → atl-tooltip.js.map} +1 -1
- package/src/lib/badge/llm-badge.d.ts +0 -27
- package/src/lib/breadcrumbs/llm-breadcrumbs.d.ts +0 -38
- package/src/lib/card/llm-card.js +0 -30
- package/src/lib/icon/llm-icon.d.ts +0 -24
- package/src/lib/table/llm-table.d.ts +0 -40
- package/src/lib/toast/llm-toast.d.ts +0 -54
- package/src/lib/tooltip/llm-tooltip.d.ts +0 -17
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* ── Host wrapper ──────────────────────────────────────────────────────────── */
|
|
2
|
-
.
|
|
2
|
+
.atl-chat {
|
|
3
3
|
display: contents;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
/* ── Shared surface (header / messages / input column) ─────────────────────── */
|
|
7
|
-
.
|
|
7
|
+
.atl-chat .surface {
|
|
8
8
|
display: flex;
|
|
9
9
|
flex-direction: column;
|
|
10
10
|
background: var(--ui-color-surface);
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
16
16
|
/* DRAWER variant */
|
|
17
17
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
18
|
-
.
|
|
18
|
+
.atl-chat.variant-drawer dialog {
|
|
19
19
|
all: unset;
|
|
20
20
|
position: fixed;
|
|
21
21
|
inset: 0 0 0 auto;
|
|
@@ -34,18 +34,18 @@
|
|
|
34
34
|
overlay var(--ui-duration-slow) allow-discrete;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
.
|
|
37
|
+
.atl-chat.variant-drawer dialog[open] {
|
|
38
38
|
display: flex;
|
|
39
39
|
transform: translateX(0);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
@starting-style {
|
|
43
|
-
.
|
|
43
|
+
.atl-chat.variant-drawer dialog[open] {
|
|
44
44
|
transform: translateX(100%);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
.
|
|
48
|
+
.atl-chat.variant-drawer dialog::backdrop {
|
|
49
49
|
background: var(--ui-color-overlay);
|
|
50
50
|
backdrop-filter: blur(2px);
|
|
51
51
|
transition:
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
overlay var(--ui-duration-slow) allow-discrete;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
.
|
|
57
|
+
.atl-chat.variant-drawer .drawer-surface {
|
|
58
58
|
width: 100%;
|
|
59
59
|
height: 100%;
|
|
60
60
|
}
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
63
63
|
/* POPUP variant */
|
|
64
64
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
65
|
-
.
|
|
65
|
+
.atl-chat.variant-popup .popup-surface {
|
|
66
66
|
position: fixed;
|
|
67
67
|
bottom: calc(var(--ui-spacing-6) + 3.5rem + var(--ui-spacing-4));
|
|
68
68
|
right: var(--ui-spacing-6);
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
z-index: 100;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
.
|
|
76
|
+
.atl-chat.variant-popup .fab-bubble {
|
|
77
77
|
position: fixed;
|
|
78
78
|
bottom: var(--ui-spacing-6);
|
|
79
79
|
right: var(--ui-spacing-6);
|
|
@@ -94,12 +94,12 @@
|
|
|
94
94
|
z-index: 101;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
.
|
|
97
|
+
.atl-chat.variant-popup .fab-bubble:hover {
|
|
98
98
|
transform: scale(1.05);
|
|
99
99
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.22);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
.
|
|
102
|
+
.atl-chat.variant-popup .fab-bubble:focus-visible {
|
|
103
103
|
outline: none;
|
|
104
104
|
box-shadow: var(--ui-focus-ring), 0 6px 16px rgba(0, 0, 0, 0.18);
|
|
105
105
|
}
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
108
108
|
/* INLINE variant */
|
|
109
109
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
110
|
-
.
|
|
110
|
+
.atl-chat.variant-inline .inline-surface {
|
|
111
111
|
width: 100%;
|
|
112
112
|
height: 100%;
|
|
113
113
|
min-height: 24rem;
|
|
@@ -115,14 +115,14 @@
|
|
|
115
115
|
border-radius: var(--ui-radius-xl);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
.
|
|
118
|
+
.atl-chat.variant-inline .atl-chat-header .close-btn {
|
|
119
119
|
display: none;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
123
123
|
/* SUB-COMPONENT: header */
|
|
124
124
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
125
|
-
.
|
|
125
|
+
.atl-chat-header {
|
|
126
126
|
display: flex;
|
|
127
127
|
align-items: center;
|
|
128
128
|
justify-content: space-between;
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
flex-shrink: 0;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
.
|
|
135
|
+
.atl-chat-header .title-block {
|
|
136
136
|
display: flex;
|
|
137
137
|
align-items: center;
|
|
138
138
|
gap: var(--ui-spacing-3);
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
min-width: 0;
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
.
|
|
147
|
+
.atl-chat-header .close-btn {
|
|
148
148
|
display: inline-flex;
|
|
149
149
|
align-items: center;
|
|
150
150
|
justify-content: center;
|
|
@@ -162,12 +162,12 @@
|
|
|
162
162
|
color var(--ui-transition-fast);
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
.
|
|
165
|
+
.atl-chat-header .close-btn:hover {
|
|
166
166
|
background-color: var(--ui-color-surface-sunken);
|
|
167
167
|
color: var(--ui-color-text);
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
.
|
|
170
|
+
.atl-chat-header .close-btn:focus-visible {
|
|
171
171
|
outline: none;
|
|
172
172
|
box-shadow: var(--ui-focus-ring);
|
|
173
173
|
}
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
176
176
|
/* SUB-COMPONENT: messages */
|
|
177
177
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
178
|
-
.
|
|
178
|
+
.atl-chat-messages {
|
|
179
179
|
display: flex;
|
|
180
180
|
flex-direction: column;
|
|
181
181
|
gap: var(--ui-spacing-3);
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
191
191
|
/* SUB-COMPONENT: message bubble */
|
|
192
192
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
193
|
-
.
|
|
193
|
+
.atl-chat-message {
|
|
194
194
|
display: block;
|
|
195
195
|
max-width: 85%;
|
|
196
196
|
padding: var(--ui-spacing-3) var(--ui-spacing-4);
|
|
@@ -200,25 +200,25 @@
|
|
|
200
200
|
word-wrap: break-word;
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
-
.
|
|
204
|
-
.
|
|
203
|
+
.atl-chat-message.role-assistant,
|
|
204
|
+
.atl-chat-message.role-system {
|
|
205
205
|
background: var(--ui-color-surface-sunken);
|
|
206
206
|
color: var(--ui-color-text);
|
|
207
207
|
align-self: flex-start;
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
.
|
|
210
|
+
.atl-chat-message.role-user {
|
|
211
211
|
background: var(--ui-color-primary);
|
|
212
212
|
color: var(--ui-color-text-on-primary);
|
|
213
213
|
align-self: flex-end;
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
.
|
|
216
|
+
.atl-chat-message.role-system {
|
|
217
217
|
font-style: italic;
|
|
218
218
|
color: var(--ui-color-text-muted);
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
.
|
|
221
|
+
.atl-chat-message.is-failed {
|
|
222
222
|
background: var(--ui-color-surface-sunken);
|
|
223
223
|
border: 1px dashed var(--ui-color-danger);
|
|
224
224
|
color: var(--ui-color-text);
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
228
228
|
/* SUB-COMPONENT: typing indicator */
|
|
229
229
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
230
|
-
.
|
|
230
|
+
.atl-chat-typing {
|
|
231
231
|
display: inline-flex;
|
|
232
232
|
align-items: center;
|
|
233
233
|
gap: var(--ui-spacing-1);
|
|
@@ -237,25 +237,25 @@
|
|
|
237
237
|
align-self: flex-start;
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
.
|
|
240
|
+
.atl-chat-typing .dot {
|
|
241
241
|
width: 0.375rem;
|
|
242
242
|
height: 0.375rem;
|
|
243
243
|
border-radius: 50%;
|
|
244
244
|
background: var(--ui-color-text-muted);
|
|
245
|
-
animation:
|
|
245
|
+
animation: atl-chat-typing 1.4s infinite ease-in-out;
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
.
|
|
248
|
+
.atl-chat-typing .dot:nth-child(2) {
|
|
249
249
|
animation-delay: 0.16s;
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
.
|
|
252
|
+
.atl-chat-typing .dot:nth-child(3) {
|
|
253
253
|
animation-delay: 0.32s;
|
|
254
254
|
}
|
|
255
255
|
|
|
256
256
|
/* Inline cursor variant — drops the bubble chrome so the dots can sit at the
|
|
257
257
|
end of a streaming assistant message. */
|
|
258
|
-
.
|
|
258
|
+
.atl-chat-typing.is-inline {
|
|
259
259
|
display: inline-flex;
|
|
260
260
|
padding: 0;
|
|
261
261
|
margin-left: var(--ui-spacing-1);
|
|
@@ -265,24 +265,24 @@
|
|
|
265
265
|
align-self: auto;
|
|
266
266
|
}
|
|
267
267
|
|
|
268
|
-
.
|
|
268
|
+
.atl-chat-typing.is-inline .dot {
|
|
269
269
|
width: 0.25rem;
|
|
270
270
|
height: 0.25rem;
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
-
@keyframes
|
|
273
|
+
@keyframes atl-chat-typing {
|
|
274
274
|
0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
|
|
275
275
|
30% { opacity: 1; transform: translateY(-2px); }
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
@media (prefers-reduced-motion: reduce) {
|
|
279
|
-
.
|
|
279
|
+
.atl-chat-typing .dot {
|
|
280
280
|
animation: none;
|
|
281
281
|
opacity: 0.6;
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
.
|
|
285
|
+
.atl-chat-typing .sr-only {
|
|
286
286
|
position: absolute;
|
|
287
287
|
width: 1px;
|
|
288
288
|
height: 1px;
|
|
@@ -297,11 +297,11 @@
|
|
|
297
297
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
298
298
|
/* SUB-COMPONENT: suggestion chip */
|
|
299
299
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
300
|
-
.
|
|
300
|
+
.atl-chat-suggestion {
|
|
301
301
|
display: block;
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
-
.
|
|
304
|
+
.atl-chat-suggestion .chip {
|
|
305
305
|
display: flex;
|
|
306
306
|
flex-direction: column;
|
|
307
307
|
align-items: flex-start;
|
|
@@ -320,23 +320,23 @@
|
|
|
320
320
|
border-color var(--ui-transition-fast);
|
|
321
321
|
}
|
|
322
322
|
|
|
323
|
-
.
|
|
323
|
+
.atl-chat-suggestion .chip:hover {
|
|
324
324
|
background-color: var(--ui-color-surface-sunken);
|
|
325
325
|
border-color: var(--ui-color-border-hover);
|
|
326
326
|
}
|
|
327
327
|
|
|
328
|
-
.
|
|
328
|
+
.atl-chat-suggestion .chip:focus-visible {
|
|
329
329
|
outline: none;
|
|
330
330
|
box-shadow: var(--ui-focus-ring);
|
|
331
331
|
}
|
|
332
332
|
|
|
333
|
-
.
|
|
333
|
+
.atl-chat-suggestion .chip-label {
|
|
334
334
|
font-size: var(--ui-font-size-sm);
|
|
335
335
|
font-weight: var(--ui-font-weight-medium);
|
|
336
336
|
color: var(--ui-color-text);
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
-
.
|
|
339
|
+
.atl-chat-suggestion .chip-hint {
|
|
340
340
|
font-size: var(--ui-font-size-xs);
|
|
341
341
|
color: var(--ui-color-text-muted);
|
|
342
342
|
}
|
|
@@ -344,7 +344,7 @@
|
|
|
344
344
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
345
345
|
/* SUB-COMPONENT: input footer */
|
|
346
346
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
347
|
-
.
|
|
347
|
+
.atl-chat-input {
|
|
348
348
|
display: flex;
|
|
349
349
|
align-items: flex-end;
|
|
350
350
|
gap: var(--ui-spacing-2);
|
|
@@ -354,7 +354,7 @@
|
|
|
354
354
|
flex-shrink: 0;
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
-
.
|
|
357
|
+
.atl-chat-input .field {
|
|
358
358
|
flex: 1;
|
|
359
359
|
min-width: 0;
|
|
360
360
|
padding: var(--ui-spacing-2) var(--ui-spacing-3);
|
|
@@ -369,26 +369,26 @@
|
|
|
369
369
|
transition: border-color var(--ui-transition-fast);
|
|
370
370
|
}
|
|
371
371
|
|
|
372
|
-
.
|
|
372
|
+
.atl-chat-input .field::placeholder {
|
|
373
373
|
color: var(--ui-color-text-muted);
|
|
374
374
|
}
|
|
375
375
|
|
|
376
|
-
.
|
|
376
|
+
.atl-chat-input .field:hover:not(:disabled) {
|
|
377
377
|
border-color: var(--ui-color-input-border-hover, var(--ui-color-border-hover));
|
|
378
378
|
}
|
|
379
379
|
|
|
380
|
-
.
|
|
380
|
+
.atl-chat-input .field:focus-visible {
|
|
381
381
|
outline: none;
|
|
382
382
|
border-color: var(--ui-color-primary);
|
|
383
383
|
box-shadow: var(--ui-focus-ring);
|
|
384
384
|
}
|
|
385
385
|
|
|
386
|
-
.
|
|
386
|
+
.atl-chat-input .field:disabled {
|
|
387
387
|
opacity: var(--ui-opacity-disabled);
|
|
388
388
|
cursor: not-allowed;
|
|
389
389
|
}
|
|
390
390
|
|
|
391
|
-
.
|
|
391
|
+
.atl-chat-input .action-btn {
|
|
392
392
|
display: inline-flex;
|
|
393
393
|
align-items: center;
|
|
394
394
|
justify-content: center;
|
|
@@ -406,34 +406,34 @@
|
|
|
406
406
|
transform var(--ui-transition-fast);
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
-
.
|
|
409
|
+
.atl-chat-input .action-btn.variant-primary {
|
|
410
410
|
background: var(--ui-color-primary);
|
|
411
411
|
color: var(--ui-color-text-on-primary);
|
|
412
412
|
border-color: var(--ui-color-primary);
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
-
.
|
|
415
|
+
.atl-chat-input .action-btn.variant-primary:hover:not(:disabled) {
|
|
416
416
|
background: var(--ui-color-primary-hover);
|
|
417
417
|
border-color: var(--ui-color-primary-hover);
|
|
418
418
|
}
|
|
419
419
|
|
|
420
|
-
.
|
|
420
|
+
.atl-chat-input .action-btn.variant-danger {
|
|
421
421
|
background: var(--ui-color-danger);
|
|
422
422
|
color: var(--ui-color-text-on-danger);
|
|
423
423
|
border-color: var(--ui-color-danger);
|
|
424
424
|
}
|
|
425
425
|
|
|
426
|
-
.
|
|
426
|
+
.atl-chat-input .action-btn.variant-danger:hover {
|
|
427
427
|
background: var(--ui-color-danger-hover);
|
|
428
428
|
border-color: var(--ui-color-danger-hover);
|
|
429
429
|
}
|
|
430
430
|
|
|
431
|
-
.
|
|
431
|
+
.atl-chat-input .action-btn:disabled {
|
|
432
432
|
opacity: var(--ui-opacity-disabled);
|
|
433
433
|
cursor: not-allowed;
|
|
434
434
|
}
|
|
435
435
|
|
|
436
|
-
.
|
|
436
|
+
.atl-chat-input .action-btn:focus-visible {
|
|
437
437
|
outline: none;
|
|
438
438
|
box-shadow: var(--ui-focus-ring);
|
|
439
439
|
}
|
|
@@ -441,6 +441,6 @@
|
|
|
441
441
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
442
442
|
/* STATUS-aware tweaks */
|
|
443
443
|
/* ═══════════════════════════════════════════════════════════════════════════ */
|
|
444
|
-
.
|
|
444
|
+
.atl-chat.status-streaming .atl-chat-input .field {
|
|
445
445
|
cursor: wait;
|
|
446
446
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { HTMLAttributes, ReactNode, TextareaHTMLAttributes } from 'react';
|
|
2
|
-
import type {
|
|
3
|
-
import './
|
|
2
|
+
import type { AtlChatMessageRole, AtlChatStatus, AtlChatVariant } from '../spec';
|
|
3
|
+
import './atl-chat.css';
|
|
4
4
|
/**
|
|
5
|
-
* Properties for the
|
|
5
|
+
* Properties for the AtlChat component.
|
|
6
6
|
*/
|
|
7
|
-
export interface
|
|
7
|
+
export interface AtlChatProps {
|
|
8
8
|
/** Layout variant. */
|
|
9
|
-
variant?:
|
|
9
|
+
variant?: AtlChatVariant;
|
|
10
10
|
/** Connection / response status. */
|
|
11
|
-
status?:
|
|
11
|
+
status?: AtlChatStatus;
|
|
12
12
|
/** Whether the chat is open (drawer / popup variants). */
|
|
13
13
|
open?: boolean;
|
|
14
14
|
/** Callback when open state should change. */
|
|
@@ -18,32 +18,32 @@ export interface LlmChatProps {
|
|
|
18
18
|
/**
|
|
19
19
|
* AI assistant surface. Three layout variants share the same content slots:
|
|
20
20
|
* `drawer` (slide-in panel), `popup` (floating bubble + window), `inline`
|
|
21
|
-
* (embedded card). Compose with `
|
|
22
|
-
* `
|
|
21
|
+
* (embedded card). Compose with `AtlChatHeader`, `AtlChatMessages`,
|
|
22
|
+
* `AtlChatMessage`, `AtlChatTyping`, `AtlChatSuggestion`, `AtlChatInput`.
|
|
23
23
|
*/
|
|
24
|
-
export declare function
|
|
24
|
+
export declare function AtlChat({ variant, status, open, onOpenChange, children, }: AtlChatProps): import("react").JSX.Element;
|
|
25
25
|
/**
|
|
26
|
-
* Header slot for `
|
|
26
|
+
* Header slot for `AtlChat`. Holds the title block; the close button
|
|
27
27
|
* is rendered automatically (hidden on the inline variant via CSS).
|
|
28
28
|
*/
|
|
29
|
-
export declare function
|
|
29
|
+
export declare function AtlChatHeader({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
|
|
30
30
|
/**
|
|
31
|
-
* Scrollable message list. Project `
|
|
32
|
-
* `
|
|
31
|
+
* Scrollable message list. Project `AtlChatMessage`, `AtlChatTyping`, or
|
|
32
|
+
* `AtlChatSuggestion` children inside. Auto-scrolls to the bottom whenever
|
|
33
33
|
* children are added or content changes — important for streaming responses
|
|
34
34
|
* where new tokens are appended live.
|
|
35
35
|
*/
|
|
36
|
-
export declare function
|
|
36
|
+
export declare function AtlChatMessages({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
|
|
37
37
|
/**
|
|
38
38
|
* A single chat message. Role drives bubble alignment and color.
|
|
39
39
|
*/
|
|
40
|
-
export interface
|
|
40
|
+
export interface AtlChatMessageProps extends HTMLAttributes<HTMLDivElement> {
|
|
41
41
|
/** Sender of the message. */
|
|
42
|
-
role?:
|
|
42
|
+
role?: AtlChatMessageRole;
|
|
43
43
|
/** Marks the message as failed (red dashed border). */
|
|
44
44
|
failed?: boolean;
|
|
45
45
|
}
|
|
46
|
-
export declare function
|
|
46
|
+
export declare function AtlChatMessage({ role, failed, children, className, ...rest }: AtlChatMessageProps): import("react").JSX.Element;
|
|
47
47
|
/**
|
|
48
48
|
* Typing indicator (three animated dots).
|
|
49
49
|
*
|
|
@@ -51,18 +51,18 @@ export declare function LlmChatMessage({ role, failed, children, className, ...r
|
|
|
51
51
|
* - **Standalone bubble** (default) — render at the end of the message
|
|
52
52
|
* list to show "the assistant is starting to respond".
|
|
53
53
|
* - **Inline cursor** (`inline`) — render as the LAST child INSIDE the
|
|
54
|
-
* currently-streaming `
|
|
54
|
+
* currently-streaming `AtlChatMessage` so the dots read as a typing
|
|
55
55
|
* caret at the end of the partial text.
|
|
56
56
|
*/
|
|
57
|
-
export interface
|
|
57
|
+
export interface AtlChatTypingProps extends HTMLAttributes<HTMLDivElement> {
|
|
58
58
|
/** When true, renders as an inline cursor without bubble chrome. */
|
|
59
59
|
inline?: boolean;
|
|
60
60
|
}
|
|
61
|
-
export declare function
|
|
61
|
+
export declare function AtlChatTyping({ inline, className, ...rest }: AtlChatTypingProps): import("react").JSX.Element;
|
|
62
62
|
/**
|
|
63
63
|
* Tappable suggestion chip used in the empty state to seed a conversation.
|
|
64
64
|
*/
|
|
65
|
-
export interface
|
|
65
|
+
export interface AtlChatSuggestionProps {
|
|
66
66
|
/** Primary label of the suggestion. */
|
|
67
67
|
label: string;
|
|
68
68
|
/** Optional secondary hint text. */
|
|
@@ -71,15 +71,15 @@ export interface LlmChatSuggestionProps {
|
|
|
71
71
|
onSelected?: (label: string) => void;
|
|
72
72
|
className?: string;
|
|
73
73
|
}
|
|
74
|
-
export declare function
|
|
74
|
+
export declare function AtlChatSuggestion({ label, hint, onSelected, className, }: AtlChatSuggestionProps): import("react").JSX.Element;
|
|
75
75
|
/**
|
|
76
|
-
* Composable input footer for `
|
|
76
|
+
* Composable input footer for `AtlChat`. Wraps a textarea and emits
|
|
77
77
|
* `onSend` (or `onStop` when the chat status is `'streaming'`).
|
|
78
78
|
*
|
|
79
79
|
* The action button automatically switches between primary "Send" and
|
|
80
80
|
* danger "Stop" based on the parent chat's status.
|
|
81
81
|
*/
|
|
82
|
-
export interface
|
|
82
|
+
export interface AtlChatInputProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange'> {
|
|
83
83
|
value?: string;
|
|
84
84
|
onValueChange?: (value: string) => void;
|
|
85
85
|
onSend?: (text: string) => void;
|
|
@@ -87,5 +87,5 @@ export interface LlmChatInputProps extends Omit<TextareaHTMLAttributes<HTMLTextA
|
|
|
87
87
|
/** Accessible label for the input field. */
|
|
88
88
|
ariaLabel?: string;
|
|
89
89
|
}
|
|
90
|
-
export declare function
|
|
91
|
-
//# sourceMappingURL=
|
|
90
|
+
export declare function AtlChatInput({ value, onValueChange, onSend, onStop, placeholder, ariaLabel, ...rest }: AtlChatInputProps): import("react").JSX.Element;
|
|
91
|
+
//# sourceMappingURL=atl-chat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"atl-chat.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/chat/atl-chat.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAGd,SAAS,EACT,sBAAsB,EAOvB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,gBAAgB,CAAC;AAgBxB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,oCAAoC;IACpC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EACtB,OAAkB,EAClB,MAAe,EACf,IAAY,EACZ,YAAY,EACZ,QAAQ,GACT,EAAE,YAAY,+BAuHd;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,cAAc,CAAC,+BAiChC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,cAAc,CAAC,+BAoBhC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACzE,6BAA6B;IAC7B,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAkB,EAClB,MAAc,EACd,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,mBAAmB,+BAcrB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACxE,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAc,EACd,SAAS,EACT,GAAG,IAAI,EACR,EAAE,kBAAkB,+BAcpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,IAAI,EACJ,UAAU,EACV,SAAS,GACV,EAAE,sBAAsB,+BAexB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,WAAW,EACX,SAAuC,EACvC,GAAG,IAAI,EACR,EAAE,iBAAiB,+BAuEnB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { createContext, useContext, useEffect, useId, useRef, useState, } from 'react';
|
|
3
|
-
import './
|
|
3
|
+
import './atl-chat.css';
|
|
4
4
|
const ChatContext = createContext({
|
|
5
5
|
headerId: '',
|
|
6
6
|
status: 'idle',
|
|
@@ -10,10 +10,10 @@ const ChatContext = createContext({
|
|
|
10
10
|
/**
|
|
11
11
|
* AI assistant surface. Three layout variants share the same content slots:
|
|
12
12
|
* `drawer` (slide-in panel), `popup` (floating bubble + window), `inline`
|
|
13
|
-
* (embedded card). Compose with `
|
|
14
|
-
* `
|
|
13
|
+
* (embedded card). Compose with `AtlChatHeader`, `AtlChatMessages`,
|
|
14
|
+
* `AtlChatMessage`, `AtlChatTyping`, `AtlChatSuggestion`, `AtlChatInput`.
|
|
15
15
|
*/
|
|
16
|
-
export function
|
|
16
|
+
export function AtlChat({ variant = 'drawer', status = 'idle', open = false, onOpenChange, children, }) {
|
|
17
17
|
const dialogRef = useRef(null);
|
|
18
18
|
const headerId = useId();
|
|
19
19
|
const triggerElRef = useRef(null);
|
|
@@ -72,7 +72,7 @@ export function LlmChat({ variant = 'drawer', status = 'idle', open = false, onO
|
|
|
72
72
|
onOpenChange?.(false);
|
|
73
73
|
};
|
|
74
74
|
const hostClass = [
|
|
75
|
-
'
|
|
75
|
+
'atl-chat',
|
|
76
76
|
`variant-${variant}`,
|
|
77
77
|
`status-${status}`,
|
|
78
78
|
open && 'is-open',
|
|
@@ -88,20 +88,20 @@ export function LlmChat({ variant = 'drawer', status = 'idle', open = false, onO
|
|
|
88
88
|
return (_jsx(ChatContext.Provider, { value: ctx, children: _jsxs("div", { ref: hostRef, className: hostClass, children: [variant === 'drawer' && (_jsx("dialog", { ref: dialogRef, "aria-labelledby": headerId, "aria-modal": "true", onClick: handleBackdropClick, children: _jsx("div", { className: "surface drawer-surface", onClick: (e) => e.stopPropagation(), children: children }) })), variant === 'popup' && (_jsxs(_Fragment, { children: [open && (_jsx("div", { className: "surface popup-surface", role: "dialog", "aria-labelledby": headerId, children: children })), _jsx("button", { type: "button", className: "fab-bubble", "aria-label": open ? 'Close AI assistant' : 'Open AI assistant', "aria-expanded": open, onClick: () => onOpenChange?.(!open), children: _jsx("span", { "aria-hidden": "true", children: "AI" }) })] })), variant === 'inline' && (_jsx("section", { className: "surface inline-surface", "aria-labelledby": headerId, children: children }))] }) }));
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
|
-
* Header slot for `
|
|
91
|
+
* Header slot for `AtlChat`. Holds the title block; the close button
|
|
92
92
|
* is rendered automatically (hidden on the inline variant via CSS).
|
|
93
93
|
*/
|
|
94
|
-
export function
|
|
94
|
+
export function AtlChatHeader({ children, className, ...rest }) {
|
|
95
95
|
const ctx = useContext(ChatContext);
|
|
96
|
-
return (_jsxs("div", { id: ctx.headerId, className: ['
|
|
96
|
+
return (_jsxs("div", { id: ctx.headerId, className: ['atl-chat-header', className].filter(Boolean).join(' '), ...rest, children: [_jsx("div", { className: "title-block", children: children }), _jsx("button", { type: "button", className: "close-btn", "aria-label": "Close chat", onClick: ctx.close, children: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) })] }));
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
* Scrollable message list. Project `
|
|
100
|
-
* `
|
|
99
|
+
* Scrollable message list. Project `AtlChatMessage`, `AtlChatTyping`, or
|
|
100
|
+
* `AtlChatSuggestion` children inside. Auto-scrolls to the bottom whenever
|
|
101
101
|
* children are added or content changes — important for streaming responses
|
|
102
102
|
* where new tokens are appended live.
|
|
103
103
|
*/
|
|
104
|
-
export function
|
|
104
|
+
export function AtlChatMessages({ children, className, ...rest }) {
|
|
105
105
|
const ref = useRef(null);
|
|
106
106
|
useEffect(() => {
|
|
107
107
|
const el = ref.current;
|
|
@@ -113,11 +113,11 @@ export function LlmChatMessages({ children, className, ...rest }) {
|
|
|
113
113
|
observer.observe(el, { childList: true, subtree: true, characterData: true });
|
|
114
114
|
return () => observer.disconnect();
|
|
115
115
|
}, []);
|
|
116
|
-
return (_jsx("div", { ref: ref, className: ['
|
|
116
|
+
return (_jsx("div", { ref: ref, className: ['atl-chat-messages', className].filter(Boolean).join(' '), ...rest, children: children }));
|
|
117
117
|
}
|
|
118
|
-
export function
|
|
118
|
+
export function AtlChatMessage({ role = 'assistant', failed = false, children, className, ...rest }) {
|
|
119
119
|
const classes = [
|
|
120
|
-
'
|
|
120
|
+
'atl-chat-message',
|
|
121
121
|
`role-${role}`,
|
|
122
122
|
failed && 'is-failed',
|
|
123
123
|
className,
|
|
@@ -126,18 +126,18 @@ export function LlmChatMessage({ role = 'assistant', failed = false, children, c
|
|
|
126
126
|
.join(' ');
|
|
127
127
|
return (_jsx("div", { role: "listitem", className: classes, ...rest, children: children }));
|
|
128
128
|
}
|
|
129
|
-
export function
|
|
129
|
+
export function AtlChatTyping({ inline = false, className, ...rest }) {
|
|
130
130
|
const classes = [
|
|
131
|
-
'
|
|
131
|
+
'atl-chat-typing',
|
|
132
132
|
inline && 'is-inline',
|
|
133
133
|
className,
|
|
134
134
|
].filter(Boolean).join(' ');
|
|
135
135
|
return (_jsxs("div", { role: "status", "aria-live": "polite", className: classes, ...rest, children: [_jsx("span", { className: "dot" }), _jsx("span", { className: "dot" }), _jsx("span", { className: "dot" }), _jsx("span", { className: "sr-only", children: "Assistant is typing" })] }));
|
|
136
136
|
}
|
|
137
|
-
export function
|
|
138
|
-
return (_jsx("div", { className: ['
|
|
137
|
+
export function AtlChatSuggestion({ label, hint, onSelected, className, }) {
|
|
138
|
+
return (_jsx("div", { className: ['atl-chat-suggestion', className].filter(Boolean).join(' '), children: _jsxs("button", { type: "button", className: "chip", onClick: () => onSelected?.(label), children: [_jsx("span", { className: "chip-label", children: label }), hint && _jsx("span", { className: "chip-hint", children: hint })] }) }));
|
|
139
139
|
}
|
|
140
|
-
export function
|
|
140
|
+
export function AtlChatInput({ value, onValueChange, onSend, onStop, placeholder, ariaLabel = 'Message your AI assistant', ...rest }) {
|
|
141
141
|
const ctx = useContext(ChatContext);
|
|
142
142
|
const isStreaming = ctx.status === 'streaming';
|
|
143
143
|
const [internal, setInternal] = useState('');
|
|
@@ -170,6 +170,6 @@ export function LlmChatInput({ value, onValueChange, onSend, onStop, placeholder
|
|
|
170
170
|
emitSend();
|
|
171
171
|
}
|
|
172
172
|
};
|
|
173
|
-
return (_jsxs("div", { className: "
|
|
173
|
+
return (_jsxs("div", { className: "atl-chat-input", children: [_jsx("textarea", { className: "field", rows: 1, value: current, placeholder: effectivePlaceholder, disabled: isStreaming, "aria-label": ariaLabel, onChange: handleChange, onKeyDown: handleKeyDown, ...rest }), isStreaming ? (_jsx("button", { type: "button", className: "action-btn variant-danger size-md", onClick: onStop, children: "Stop" })) : (_jsx("button", { type: "button", className: "action-btn variant-primary size-md", disabled: !current.trim(), onClick: emitSend, children: "Send" }))] }));
|
|
174
174
|
}
|
|
175
|
-
//# sourceMappingURL=
|
|
175
|
+
//# sourceMappingURL=atl-chat.js.map
|