@runtypelabs/persona 3.0.0 → 3.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/README.md +33 -5
- package/dist/index.cjs +39 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +34 -2
- package/dist/index.d.ts +34 -2
- package/dist/index.global.js +76 -76
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +39 -39
- package/dist/index.js.map +1 -1
- package/dist/widget.css +90 -83
- package/package.json +1 -3
- package/src/components/artifact-pane.ts +3 -3
- package/src/components/header-builder.ts +1 -1
- package/src/runtime/host-layout.test.ts +137 -0
- package/src/runtime/host-layout.ts +81 -0
- package/src/runtime/init.test.ts +36 -1
- package/src/runtime/init.ts +1 -1
- package/src/styles/widget.css +90 -83
- package/src/types.ts +32 -2
- package/src/ui.ts +24 -6
- package/src/utils/artifact-gate.ts +1 -1
- package/src/styles/tailwind.css +0 -20
package/dist/widget.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
[data-persona-root] {
|
|
2
2
|
all: initial;
|
|
3
3
|
font-family: var(--persona-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", sans-serif);
|
|
4
4
|
font-size: var(--persona-font-size, 1rem);
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
--persona-md-blockquote-text-color: var(--persona-muted, #6b7280);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
[data-persona-root] * {
|
|
21
21
|
box-sizing: border-box;
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
/* Widget CSS Variables - scoped to widget root to avoid polluting global namespace */
|
|
97
|
-
|
|
97
|
+
[data-persona-root] {
|
|
98
98
|
--persona-radius-sm: 0.125rem;
|
|
99
99
|
--persona-radius-md: 0.375rem;
|
|
100
100
|
--persona-radius-lg: 0.5rem;
|
|
@@ -1165,37 +1165,37 @@
|
|
|
1165
1165
|
border-color: var(--persona-message-assistant-border, var(--persona-border, #e5e7eb));
|
|
1166
1166
|
}
|
|
1167
1167
|
|
|
1168
|
-
|
|
1168
|
+
[data-persona-root] .vanilla-message-assistant-bubble.persona-shadow-sm {
|
|
1169
1169
|
box-shadow: var(--persona-message-assistant-shadow, 0 1px 2px 0 rgb(0 0 0 / 0.05));
|
|
1170
1170
|
}
|
|
1171
1171
|
|
|
1172
|
-
|
|
1172
|
+
[data-persona-root] .vanilla-message-user-bubble.persona-shadow-sm {
|
|
1173
1173
|
box-shadow: var(--persona-message-user-shadow, 0 5px 15px rgba(15, 23, 42, 0.08));
|
|
1174
1174
|
}
|
|
1175
1175
|
|
|
1176
|
-
|
|
1176
|
+
[data-persona-root] .vanilla-tool-bubble.persona-shadow-sm {
|
|
1177
1177
|
box-shadow: var(--persona-tool-bubble-shadow, 0 5px 15px rgba(15, 23, 42, 0.08));
|
|
1178
1178
|
}
|
|
1179
1179
|
|
|
1180
|
-
|
|
1180
|
+
[data-persona-root] .vanilla-reasoning-bubble.persona-shadow-sm {
|
|
1181
1181
|
box-shadow: var(--persona-reasoning-bubble-shadow, 0 5px 15px rgba(15, 23, 42, 0.08));
|
|
1182
1182
|
}
|
|
1183
1183
|
|
|
1184
1184
|
/* Artifact markdown (no .vanilla-message-bubble wrapper) */
|
|
1185
|
-
|
|
1185
|
+
[data-persona-root] .persona-markdown-bubble {
|
|
1186
1186
|
color: var(--persona-text, #111827);
|
|
1187
1187
|
font-family: var(--persona-md-prose-font-family, inherit);
|
|
1188
1188
|
}
|
|
1189
1189
|
|
|
1190
|
-
|
|
1190
|
+
[data-persona-root] .persona-markdown-bubble p {
|
|
1191
1191
|
margin: 0 0 1.5em;
|
|
1192
1192
|
}
|
|
1193
1193
|
|
|
1194
|
-
|
|
1194
|
+
[data-persona-root] .persona-markdown-bubble p:last-child {
|
|
1195
1195
|
margin-bottom: 0;
|
|
1196
1196
|
}
|
|
1197
1197
|
|
|
1198
|
-
|
|
1198
|
+
[data-persona-root] .persona-markdown-bubble code:not(pre code) {
|
|
1199
1199
|
background-color: var(--persona-md-inline-code-bg);
|
|
1200
1200
|
color: var(--persona-md-inline-code-color, inherit);
|
|
1201
1201
|
padding: var(--persona-md-inline-code-padding);
|
|
@@ -1203,12 +1203,12 @@
|
|
|
1203
1203
|
font-size: var(--persona-md-inline-code-font-size);
|
|
1204
1204
|
}
|
|
1205
1205
|
|
|
1206
|
-
|
|
1206
|
+
[data-persona-root] .persona-markdown-bubble a {
|
|
1207
1207
|
color: var(--persona-md-link-color, var(--persona-accent, #3b82f6));
|
|
1208
1208
|
text-decoration: underline;
|
|
1209
1209
|
}
|
|
1210
1210
|
|
|
1211
|
-
|
|
1211
|
+
[data-persona-root] .persona-markdown-bubble pre {
|
|
1212
1212
|
background-color: var(--persona-md-code-block-bg);
|
|
1213
1213
|
border: 1px solid var(--persona-md-code-block-border-color);
|
|
1214
1214
|
border-radius: var(--persona-radius-md, 0.375rem);
|
|
@@ -1243,7 +1243,7 @@
|
|
|
1243
1243
|
text-decoration: underline;
|
|
1244
1244
|
}
|
|
1245
1245
|
|
|
1246
|
-
|
|
1246
|
+
[data-persona-root] .vanilla-message-assistant-bubble a {
|
|
1247
1247
|
color: var(--persona-md-link-color, var(--persona-accent, #3b82f6));
|
|
1248
1248
|
}
|
|
1249
1249
|
|
|
@@ -1299,6 +1299,7 @@
|
|
|
1299
1299
|
/* Ensure user message paragraphs and lists have proper styling too */
|
|
1300
1300
|
.vanilla-message-user-bubble p {
|
|
1301
1301
|
margin: 0;
|
|
1302
|
+
color: inherit;
|
|
1302
1303
|
}
|
|
1303
1304
|
|
|
1304
1305
|
.vanilla-message-user-bubble p + p {
|
|
@@ -1322,13 +1323,19 @@
|
|
|
1322
1323
|
.vanilla-message-user-bubble li {
|
|
1323
1324
|
margin: 0.25rem 0;
|
|
1324
1325
|
padding-left: 0.25rem;
|
|
1326
|
+
color: inherit;
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
.vanilla-message-assistant-bubble p,
|
|
1330
|
+
.vanilla-message-assistant-bubble li {
|
|
1331
|
+
color: inherit;
|
|
1325
1332
|
}
|
|
1326
1333
|
|
|
1327
1334
|
/* ============================================
|
|
1328
1335
|
Markdown Header Styles
|
|
1329
1336
|
============================================ */
|
|
1330
1337
|
.vanilla-message-bubble h1,
|
|
1331
|
-
|
|
1338
|
+
[data-persona-root] .persona-markdown-bubble h1 {
|
|
1332
1339
|
font-size: var(--persona-md-h1-size);
|
|
1333
1340
|
font-weight: var(--persona-md-h1-weight);
|
|
1334
1341
|
margin: var(--persona-md-h1-margin);
|
|
@@ -1337,7 +1344,7 @@
|
|
|
1337
1344
|
}
|
|
1338
1345
|
|
|
1339
1346
|
.vanilla-message-bubble h2,
|
|
1340
|
-
|
|
1347
|
+
[data-persona-root] .persona-markdown-bubble h2 {
|
|
1341
1348
|
font-size: var(--persona-md-h2-size);
|
|
1342
1349
|
font-weight: var(--persona-md-h2-weight);
|
|
1343
1350
|
margin: var(--persona-md-h2-margin);
|
|
@@ -1346,7 +1353,7 @@
|
|
|
1346
1353
|
}
|
|
1347
1354
|
|
|
1348
1355
|
.vanilla-message-bubble h3,
|
|
1349
|
-
|
|
1356
|
+
[data-persona-root] .persona-markdown-bubble h3 {
|
|
1350
1357
|
font-size: var(--persona-md-h3-size);
|
|
1351
1358
|
font-weight: var(--persona-md-h3-weight);
|
|
1352
1359
|
margin: var(--persona-md-h3-margin);
|
|
@@ -1355,7 +1362,7 @@
|
|
|
1355
1362
|
}
|
|
1356
1363
|
|
|
1357
1364
|
.vanilla-message-bubble h4,
|
|
1358
|
-
|
|
1365
|
+
[data-persona-root] .persona-markdown-bubble h4 {
|
|
1359
1366
|
font-size: var(--persona-md-h4-size);
|
|
1360
1367
|
font-weight: var(--persona-md-h4-weight);
|
|
1361
1368
|
margin: var(--persona-md-h4-margin);
|
|
@@ -1364,7 +1371,7 @@
|
|
|
1364
1371
|
}
|
|
1365
1372
|
|
|
1366
1373
|
.vanilla-message-bubble h5,
|
|
1367
|
-
|
|
1374
|
+
[data-persona-root] .persona-markdown-bubble h5 {
|
|
1368
1375
|
font-size: var(--persona-md-h5-size);
|
|
1369
1376
|
font-weight: var(--persona-md-h5-weight);
|
|
1370
1377
|
margin: var(--persona-md-h5-margin);
|
|
@@ -1373,7 +1380,7 @@
|
|
|
1373
1380
|
}
|
|
1374
1381
|
|
|
1375
1382
|
.vanilla-message-bubble h6,
|
|
1376
|
-
|
|
1383
|
+
[data-persona-root] .persona-markdown-bubble h6 {
|
|
1377
1384
|
font-size: var(--persona-md-h6-size);
|
|
1378
1385
|
font-weight: var(--persona-md-h6-weight);
|
|
1379
1386
|
margin: var(--persona-md-h6-margin);
|
|
@@ -2040,12 +2047,12 @@
|
|
|
2040
2047
|
Visibility (Tailwind parity — prefix persona-)
|
|
2041
2048
|
Shipped widget.css is hand-maintained; these utilities are used in TS but not generated by Tailwind at build time.
|
|
2042
2049
|
============================================ */
|
|
2043
|
-
|
|
2050
|
+
[data-persona-root] .persona-hidden {
|
|
2044
2051
|
display: none !important;
|
|
2045
2052
|
}
|
|
2046
2053
|
|
|
2047
2054
|
@media (min-width: 768px) {
|
|
2048
|
-
|
|
2055
|
+
[data-persona-root] .md\:persona-hidden {
|
|
2049
2056
|
display: none !important;
|
|
2050
2057
|
}
|
|
2051
2058
|
}
|
|
@@ -2055,12 +2062,12 @@
|
|
|
2055
2062
|
Vars set from TS: --persona-artifact-split-gap, --persona-artifact-pane-width,
|
|
2056
2063
|
--persona-artifact-pane-max-width, --persona-artifact-pane-min-width
|
|
2057
2064
|
============================================ */
|
|
2058
|
-
|
|
2065
|
+
[data-persona-root] .persona-artifact-split-root {
|
|
2059
2066
|
gap: var(--persona-artifact-split-gap, 0.5rem);
|
|
2060
2067
|
}
|
|
2061
2068
|
|
|
2062
2069
|
/* Document toolbar preset — optional layout vars: --persona-artifact-doc-toolbar-icon-color, etc. */
|
|
2063
|
-
|
|
2070
|
+
[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn {
|
|
2064
2071
|
display: inline-flex;
|
|
2065
2072
|
align-items: center;
|
|
2066
2073
|
justify-content: center;
|
|
@@ -2073,17 +2080,17 @@
|
|
|
2073
2080
|
line-height: 1;
|
|
2074
2081
|
}
|
|
2075
2082
|
|
|
2076
|
-
|
|
2083
|
+
[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn:hover {
|
|
2077
2084
|
color: var(--persona-artifact-toolbar-icon-hover-color, inherit);
|
|
2078
2085
|
background: var(--persona-artifact-toolbar-icon-hover-bg, var(--persona-container, #f3f4f6));
|
|
2079
2086
|
}
|
|
2080
2087
|
|
|
2081
|
-
|
|
2088
|
+
[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn[aria-pressed="true"] {
|
|
2082
2089
|
background: var(--persona-artifact-doc-toggle-active-bg, var(--persona-container, #f3f4f6));
|
|
2083
2090
|
border-color: var(--persona-artifact-doc-toggle-active-border, var(--persona-border, #e5e7eb));
|
|
2084
2091
|
}
|
|
2085
2092
|
|
|
2086
|
-
|
|
2093
|
+
[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-btn {
|
|
2087
2094
|
display: inline-flex;
|
|
2088
2095
|
align-items: center;
|
|
2089
2096
|
gap: 0.35rem;
|
|
@@ -2097,63 +2104,63 @@
|
|
|
2097
2104
|
line-height: 1.25;
|
|
2098
2105
|
}
|
|
2099
2106
|
|
|
2100
|
-
|
|
2107
|
+
[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-btn:hover {
|
|
2101
2108
|
background: var(--persona-artifact-toolbar-icon-hover-bg, var(--persona-container, #f3f4f6));
|
|
2102
2109
|
}
|
|
2103
2110
|
|
|
2104
|
-
|
|
2111
|
+
[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-label {
|
|
2105
2112
|
font-weight: 500;
|
|
2106
2113
|
}
|
|
2107
2114
|
|
|
2108
2115
|
/* Artifact tab theming */
|
|
2109
|
-
|
|
2116
|
+
[data-persona-root] .persona-artifact-tab {
|
|
2110
2117
|
background: var(--persona-artifact-tab-bg, transparent);
|
|
2111
2118
|
border-radius: var(--persona-artifact-tab-radius, 0.5rem);
|
|
2112
2119
|
color: var(--persona-artifact-tab-color, inherit);
|
|
2113
2120
|
}
|
|
2114
2121
|
|
|
2115
|
-
|
|
2122
|
+
[data-persona-root] .persona-artifact-tab.persona-bg-persona-container {
|
|
2116
2123
|
background: var(--persona-artifact-tab-active-bg, var(--persona-container, #f3f4f6));
|
|
2117
2124
|
border-color: var(--persona-artifact-tab-active-border, var(--persona-border, #e5e7eb));
|
|
2118
2125
|
}
|
|
2119
2126
|
|
|
2120
2127
|
/* Artifact toolbar background theming */
|
|
2121
|
-
|
|
2128
|
+
[data-persona-root] .persona-artifact-toolbar {
|
|
2122
2129
|
background: var(--persona-artifact-toolbar-bg, var(--persona-surface, #fff));
|
|
2123
2130
|
}
|
|
2124
2131
|
|
|
2125
2132
|
/* Toggle group gap */
|
|
2126
|
-
|
|
2133
|
+
[data-persona-root] .persona-artifact-toggle-group {
|
|
2127
2134
|
gap: var(--persona-artifact-toolbar-toggle-group-gap, 0.25rem);
|
|
2128
2135
|
}
|
|
2129
2136
|
|
|
2130
2137
|
/* Toggle button border-radius (view/code buttons) */
|
|
2131
|
-
|
|
2132
|
-
|
|
2138
|
+
[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-view-btn,
|
|
2139
|
+
[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-code-btn {
|
|
2133
2140
|
border-radius: var(--persona-artifact-toolbar-toggle-radius, var(--persona-artifact-toolbar-icon-radius, var(--persona-radius-md, 0.375rem)));
|
|
2134
2141
|
}
|
|
2135
2142
|
|
|
2136
2143
|
/* Tab hover */
|
|
2137
|
-
|
|
2144
|
+
[data-persona-root] .persona-artifact-tab:hover {
|
|
2138
2145
|
background: var(--persona-artifact-tab-hover-bg, var(--persona-container, #f3f4f6));
|
|
2139
2146
|
}
|
|
2140
2147
|
|
|
2141
2148
|
/* Tab list container */
|
|
2142
|
-
|
|
2149
|
+
[data-persona-root] .persona-artifact-list {
|
|
2143
2150
|
background: var(--persona-artifact-tab-list-bg, transparent);
|
|
2144
2151
|
border-bottom-color: var(--persona-artifact-tab-list-border-color, var(--persona-border, #e5e7eb));
|
|
2145
2152
|
padding: var(--persona-artifact-tab-list-padding, 0.5rem);
|
|
2146
2153
|
}
|
|
2147
2154
|
|
|
2148
2155
|
/* Toolbar border override */
|
|
2149
|
-
|
|
2156
|
+
[data-persona-root] .persona-artifact-toolbar-document {
|
|
2150
2157
|
border-bottom: var(--persona-artifact-toolbar-border, 1px solid var(--persona-border, #e5e7eb));
|
|
2151
2158
|
}
|
|
2152
2159
|
|
|
2153
2160
|
/* ── Composable button utilities ── */
|
|
2154
2161
|
|
|
2155
2162
|
/* Icon button — base for all icon-only buttons created by createIconButton() */
|
|
2156
|
-
|
|
2163
|
+
[data-persona-root] .persona-icon-btn {
|
|
2157
2164
|
display: inline-flex;
|
|
2158
2165
|
align-items: center;
|
|
2159
2166
|
justify-content: center;
|
|
@@ -2167,23 +2174,23 @@
|
|
|
2167
2174
|
transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
|
|
2168
2175
|
}
|
|
2169
2176
|
|
|
2170
|
-
|
|
2177
|
+
[data-persona-root] .persona-icon-btn:hover {
|
|
2171
2178
|
background: var(--persona-icon-btn-hover-bg, var(--persona-container, #f3f4f6));
|
|
2172
2179
|
color: var(--persona-icon-btn-hover-color, inherit);
|
|
2173
2180
|
}
|
|
2174
2181
|
|
|
2175
|
-
|
|
2182
|
+
[data-persona-root] .persona-icon-btn:focus-visible {
|
|
2176
2183
|
outline: 2px solid var(--persona-accent, #3b82f6);
|
|
2177
2184
|
outline-offset: 2px;
|
|
2178
2185
|
}
|
|
2179
2186
|
|
|
2180
|
-
|
|
2187
|
+
[data-persona-root] .persona-icon-btn[aria-pressed="true"] {
|
|
2181
2188
|
background: var(--persona-icon-btn-active-bg, var(--persona-container, #f3f4f6));
|
|
2182
2189
|
border-color: var(--persona-icon-btn-active-border, var(--persona-border, #e5e7eb));
|
|
2183
2190
|
}
|
|
2184
2191
|
|
|
2185
2192
|
/* Label button — icon + text button created by createLabelButton() */
|
|
2186
|
-
|
|
2193
|
+
[data-persona-root] .persona-label-btn {
|
|
2187
2194
|
display: inline-flex;
|
|
2188
2195
|
align-items: center;
|
|
2189
2196
|
gap: var(--persona-label-btn-gap, 0.35rem);
|
|
@@ -2200,84 +2207,84 @@
|
|
|
2200
2207
|
transition: background-color 0.15s ease, color 0.15s ease;
|
|
2201
2208
|
}
|
|
2202
2209
|
|
|
2203
|
-
|
|
2210
|
+
[data-persona-root] .persona-label-btn:hover {
|
|
2204
2211
|
background: var(--persona-label-btn-hover-bg, var(--persona-container, #f3f4f6));
|
|
2205
2212
|
}
|
|
2206
2213
|
|
|
2207
|
-
|
|
2214
|
+
[data-persona-root] .persona-label-btn:focus-visible {
|
|
2208
2215
|
outline: 2px solid var(--persona-accent, #3b82f6);
|
|
2209
2216
|
outline-offset: 2px;
|
|
2210
2217
|
}
|
|
2211
2218
|
|
|
2212
|
-
|
|
2219
|
+
[data-persona-root] .persona-label-btn--sm {
|
|
2213
2220
|
padding: var(--persona-label-btn-padding, 0.25rem 0.5rem);
|
|
2214
2221
|
font-size: var(--persona-label-btn-font-size, 0.75rem);
|
|
2215
2222
|
}
|
|
2216
2223
|
|
|
2217
|
-
|
|
2224
|
+
[data-persona-root] .persona-label-btn--md {
|
|
2218
2225
|
padding: 0.375rem 0.75rem;
|
|
2219
2226
|
font-size: 0.8125rem;
|
|
2220
2227
|
}
|
|
2221
2228
|
|
|
2222
|
-
|
|
2229
|
+
[data-persona-root] .persona-label-btn--primary {
|
|
2223
2230
|
background: var(--persona-primary, #3b82f6);
|
|
2224
2231
|
color: var(--persona-text-inverse, #ffffff);
|
|
2225
2232
|
border-color: transparent;
|
|
2226
2233
|
}
|
|
2227
2234
|
|
|
2228
|
-
|
|
2235
|
+
[data-persona-root] .persona-label-btn--primary:hover {
|
|
2229
2236
|
opacity: 0.9;
|
|
2230
2237
|
}
|
|
2231
2238
|
|
|
2232
|
-
|
|
2239
|
+
[data-persona-root] .persona-label-btn--destructive {
|
|
2233
2240
|
color: var(--persona-label-btn-destructive-color, #ef4444);
|
|
2234
2241
|
}
|
|
2235
2242
|
|
|
2236
|
-
|
|
2243
|
+
[data-persona-root] .persona-label-btn--ghost {
|
|
2237
2244
|
border: none;
|
|
2238
2245
|
background: transparent;
|
|
2239
2246
|
}
|
|
2240
2247
|
|
|
2241
|
-
|
|
2248
|
+
[data-persona-root] .persona-label-btn--ghost:hover {
|
|
2242
2249
|
background: var(--persona-label-btn-hover-bg, var(--persona-container, #f3f4f6));
|
|
2243
2250
|
}
|
|
2244
2251
|
|
|
2245
2252
|
/* Toggle group — mutually exclusive button set created by createToggleGroup() */
|
|
2246
|
-
|
|
2253
|
+
[data-persona-root] .persona-toggle-group {
|
|
2247
2254
|
display: inline-flex;
|
|
2248
2255
|
gap: var(--persona-toggle-group-gap, 0);
|
|
2249
2256
|
}
|
|
2250
2257
|
|
|
2251
|
-
|
|
2258
|
+
[data-persona-root] .persona-toggle-group > .persona-icon-btn {
|
|
2252
2259
|
border-radius: 0;
|
|
2253
2260
|
}
|
|
2254
2261
|
|
|
2255
|
-
|
|
2262
|
+
[data-persona-root] .persona-toggle-group > .persona-icon-btn:first-child {
|
|
2256
2263
|
border-top-left-radius: var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem)));
|
|
2257
2264
|
border-bottom-left-radius: var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem)));
|
|
2258
2265
|
}
|
|
2259
2266
|
|
|
2260
|
-
|
|
2267
|
+
[data-persona-root] .persona-toggle-group > .persona-icon-btn:last-child {
|
|
2261
2268
|
border-top-right-radius: var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem)));
|
|
2262
2269
|
border-bottom-right-radius: var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem)));
|
|
2263
2270
|
}
|
|
2264
2271
|
|
|
2265
2272
|
/* Combo button — label + chevron with dropdown */
|
|
2266
|
-
|
|
2273
|
+
[data-persona-root] .persona-combo-btn {
|
|
2267
2274
|
font-size: var(--persona-combo-btn-font-size, 0.8125rem);
|
|
2268
2275
|
font-weight: var(--persona-combo-btn-font-weight, 600);
|
|
2269
2276
|
color: var(--persona-combo-btn-color, var(--persona-text, #111827));
|
|
2270
2277
|
user-select: none;
|
|
2271
2278
|
}
|
|
2272
2279
|
|
|
2273
|
-
|
|
2280
|
+
[data-persona-root] .persona-combo-btn-label {
|
|
2274
2281
|
white-space: nowrap;
|
|
2275
2282
|
overflow: hidden;
|
|
2276
2283
|
text-overflow: ellipsis;
|
|
2277
2284
|
}
|
|
2278
2285
|
|
|
2279
2286
|
/* Dropdown menu utility */
|
|
2280
|
-
|
|
2287
|
+
[data-persona-root] .persona-dropdown-menu {
|
|
2281
2288
|
z-index: 100;
|
|
2282
2289
|
min-width: 160px;
|
|
2283
2290
|
background: var(--persona-dropdown-bg, var(--persona-surface, #fff));
|
|
@@ -2287,7 +2294,7 @@
|
|
|
2287
2294
|
box-shadow: var(--persona-dropdown-shadow, 0 4px 16px rgba(0,0,0,0.12));
|
|
2288
2295
|
}
|
|
2289
2296
|
|
|
2290
|
-
|
|
2297
|
+
[data-persona-root] .persona-dropdown-menu button {
|
|
2291
2298
|
display: flex;
|
|
2292
2299
|
align-items: center;
|
|
2293
2300
|
gap: 0.625rem;
|
|
@@ -2302,22 +2309,22 @@
|
|
|
2302
2309
|
white-space: nowrap;
|
|
2303
2310
|
}
|
|
2304
2311
|
|
|
2305
|
-
|
|
2312
|
+
[data-persona-root] .persona-dropdown-menu button:hover {
|
|
2306
2313
|
background: var(--persona-dropdown-item-hover-bg, var(--persona-container, #f3f4f6));
|
|
2307
2314
|
}
|
|
2308
2315
|
|
|
2309
|
-
|
|
2316
|
+
[data-persona-root] .persona-dropdown-menu button[data-destructive] {
|
|
2310
2317
|
color: var(--persona-dropdown-destructive-color, #ef4444);
|
|
2311
2318
|
}
|
|
2312
2319
|
|
|
2313
|
-
|
|
2320
|
+
[data-persona-root] .persona-dropdown-menu hr {
|
|
2314
2321
|
border: none;
|
|
2315
2322
|
border-top: 1px solid var(--persona-dropdown-hr, var(--persona-border, #e5e7eb));
|
|
2316
2323
|
margin: 0.25rem 0;
|
|
2317
2324
|
}
|
|
2318
2325
|
|
|
2319
2326
|
/* Draggable split handle (desktop split only; hidden in drawer / narrow host / small viewport) */
|
|
2320
|
-
|
|
2327
|
+
[data-persona-root] .persona-artifact-split-handle {
|
|
2321
2328
|
width: 6px;
|
|
2322
2329
|
flex-shrink: 0;
|
|
2323
2330
|
cursor: col-resize;
|
|
@@ -2330,24 +2337,24 @@
|
|
|
2330
2337
|
box-sizing: border-box;
|
|
2331
2338
|
}
|
|
2332
2339
|
|
|
2333
|
-
|
|
2334
|
-
|
|
2340
|
+
[data-persona-root] .persona-artifact-split-handle:hover,
|
|
2341
|
+
[data-persona-root] .persona-artifact-split-handle:focus-visible {
|
|
2335
2342
|
background: color-mix(in srgb, var(--persona-border, #e5e7eb) 55%, transparent);
|
|
2336
2343
|
outline: none;
|
|
2337
2344
|
}
|
|
2338
2345
|
|
|
2339
|
-
|
|
2346
|
+
[data-persona-root].persona-artifact-narrow-host .persona-artifact-split-handle {
|
|
2340
2347
|
display: none !important;
|
|
2341
2348
|
}
|
|
2342
2349
|
|
|
2343
2350
|
@media (max-width: 640px) {
|
|
2344
|
-
|
|
2351
|
+
[data-persona-root] .persona-artifact-split-handle {
|
|
2345
2352
|
display: none !important;
|
|
2346
2353
|
}
|
|
2347
2354
|
}
|
|
2348
2355
|
|
|
2349
2356
|
@media (min-width: 641px) {
|
|
2350
|
-
|
|
2357
|
+
[data-persona-root] .persona-artifact-pane {
|
|
2351
2358
|
width: var(--persona-artifact-pane-width, 40%);
|
|
2352
2359
|
max-width: var(--persona-artifact-pane-max-width, 28rem);
|
|
2353
2360
|
min-width: var(--persona-artifact-pane-min-width, 0);
|
|
@@ -2357,7 +2364,7 @@
|
|
|
2357
2364
|
}
|
|
2358
2365
|
|
|
2359
2366
|
/* paneBorderRadius — works on any paneAppearance; overflow clips content to rounded shape */
|
|
2360
|
-
|
|
2367
|
+
[data-persona-root] .persona-artifact-pane {
|
|
2361
2368
|
border-radius: var(--persona-artifact-pane-radius, 0);
|
|
2362
2369
|
overflow: hidden;
|
|
2363
2370
|
/* Layout paneBackground → theme components.artifact.pane.background → semantic surface */
|
|
@@ -2369,12 +2376,12 @@
|
|
|
2369
2376
|
|
|
2370
2377
|
/* paneAppearance: 'seamless' — flush with chat, no border/shadow/gap */
|
|
2371
2378
|
/* `position: relative` for resizer overlay; gap 0; positioning is applied in ui.ts */
|
|
2372
|
-
|
|
2379
|
+
[data-persona-root].persona-artifact-appearance-seamless .persona-artifact-split-root {
|
|
2373
2380
|
position: relative;
|
|
2374
2381
|
gap: 0 !important;
|
|
2375
2382
|
}
|
|
2376
2383
|
|
|
2377
|
-
|
|
2384
|
+
[data-persona-root].persona-artifact-appearance-seamless .persona-artifact-pane {
|
|
2378
2385
|
border-left-width: 0 !important;
|
|
2379
2386
|
border-left-color: transparent !important;
|
|
2380
2387
|
box-shadow: none !important;
|
|
@@ -2386,22 +2393,22 @@
|
|
|
2386
2393
|
}
|
|
2387
2394
|
|
|
2388
2395
|
/* layout.paneBorder / paneBorderLeft — theme overrides (after appearance defaults) */
|
|
2389
|
-
|
|
2396
|
+
[data-persona-root].persona-artifact-border-full .persona-artifact-pane {
|
|
2390
2397
|
border: var(--persona-artifact-pane-border) !important;
|
|
2391
2398
|
}
|
|
2392
2399
|
|
|
2393
|
-
|
|
2400
|
+
[data-persona-root].persona-artifact-border-left .persona-artifact-pane {
|
|
2394
2401
|
border-top: none !important;
|
|
2395
2402
|
border-right: none !important;
|
|
2396
2403
|
border-bottom: none !important;
|
|
2397
2404
|
border-left: var(--persona-artifact-pane-border-left) !important;
|
|
2398
2405
|
}
|
|
2399
2406
|
|
|
2400
|
-
|
|
2407
|
+
[data-persona-root].persona-artifact-appearance-seamless.persona-artifact-border-left .persona-artifact-pane {
|
|
2401
2408
|
border-left: var(--persona-artifact-pane-border-left) !important;
|
|
2402
2409
|
}
|
|
2403
2410
|
|
|
2404
|
-
|
|
2411
|
+
[data-persona-root].persona-artifact-appearance-seamless.persona-artifact-border-full .persona-artifact-pane {
|
|
2405
2412
|
border: var(--persona-artifact-pane-border) !important;
|
|
2406
2413
|
}
|
|
2407
2414
|
|
|
@@ -2410,12 +2417,12 @@
|
|
|
2410
2417
|
* Main chat card (.persona-widget-container) loses inner-right rounding; artifact gains matching outer-right.
|
|
2411
2418
|
*/
|
|
2412
2419
|
@media (min-width: 641px) {
|
|
2413
|
-
|
|
2420
|
+
[data-persona-root]:not(.persona-artifact-narrow-host).persona-artifact-unified-split .persona-widget-container {
|
|
2414
2421
|
border-top-right-radius: 0 !important;
|
|
2415
2422
|
border-bottom-right-radius: 0 !important;
|
|
2416
2423
|
}
|
|
2417
2424
|
|
|
2418
|
-
|
|
2425
|
+
[data-persona-root]:not(.persona-artifact-narrow-host).persona-artifact-unified-split .persona-artifact-pane {
|
|
2419
2426
|
border-top-left-radius: 0 !important;
|
|
2420
2427
|
border-bottom-left-radius: 0 !important;
|
|
2421
2428
|
border-top-right-radius: var(--persona-artifact-unified-outer-radius, var(--persona-radius-lg, 1rem)) !important;
|
|
@@ -2425,14 +2432,14 @@
|
|
|
2425
2432
|
}
|
|
2426
2433
|
|
|
2427
2434
|
/* Narrow floating panel: drawer inside panel (class toggled by JS from panel width) */
|
|
2428
|
-
|
|
2435
|
+
[data-persona-root].persona-artifact-narrow-host .persona-artifact-backdrop {
|
|
2429
2436
|
position: absolute !important;
|
|
2430
2437
|
inset: 0 !important;
|
|
2431
2438
|
z-index: 55 !important;
|
|
2432
2439
|
}
|
|
2433
2440
|
|
|
2434
2441
|
@media (min-width: 641px) {
|
|
2435
|
-
|
|
2442
|
+
[data-persona-root].persona-artifact-narrow-host .persona-artifact-pane {
|
|
2436
2443
|
position: absolute;
|
|
2437
2444
|
top: 0;
|
|
2438
2445
|
right: 0;
|
|
@@ -2444,13 +2451,13 @@
|
|
|
2444
2451
|
transition: transform 0.2s ease;
|
|
2445
2452
|
box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
|
|
2446
2453
|
}
|
|
2447
|
-
|
|
2454
|
+
[data-persona-root].persona-artifact-narrow-host .persona-artifact-pane.persona-artifact-drawer-open {
|
|
2448
2455
|
transform: translateX(0);
|
|
2449
2456
|
}
|
|
2450
2457
|
}
|
|
2451
2458
|
|
|
2452
2459
|
@media (max-width: 640px) {
|
|
2453
|
-
|
|
2460
|
+
[data-persona-root] .persona-artifact-pane {
|
|
2454
2461
|
position: fixed;
|
|
2455
2462
|
top: 0;
|
|
2456
2463
|
right: 0;
|
|
@@ -2461,7 +2468,7 @@
|
|
|
2461
2468
|
transition: transform 0.2s ease;
|
|
2462
2469
|
box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
|
|
2463
2470
|
}
|
|
2464
|
-
|
|
2471
|
+
[data-persona-root] .persona-artifact-pane.persona-artifact-drawer-open {
|
|
2465
2472
|
transform: translateX(0);
|
|
2466
2473
|
}
|
|
2467
2474
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runtypelabs/persona",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "Themeable, pluggable streaming agent widget for websites, in plain JS with support for voice input and reasoning / tool output.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -38,9 +38,7 @@
|
|
|
38
38
|
"eslint": "^8.57.0",
|
|
39
39
|
"eslint-config-prettier": "^9.1.0",
|
|
40
40
|
"fake-indexeddb": "^6.2.5",
|
|
41
|
-
"postcss": "^8.4.38",
|
|
42
41
|
"rimraf": "^5.0.5",
|
|
43
|
-
"tailwindcss": "^3.4.10",
|
|
44
42
|
"tsup": "^8.0.1",
|
|
45
43
|
"typescript": "^5.4.5",
|
|
46
44
|
"vitest": "^4.0.9"
|
|
@@ -203,8 +203,8 @@ export function createArtifactPane(
|
|
|
203
203
|
});
|
|
204
204
|
|
|
205
205
|
if (copyMenuChevronBtn && copyMenuItems?.length) {
|
|
206
|
-
// Resolve the portal target —
|
|
207
|
-
const resolvePortal = (): HTMLElement => shell.closest("
|
|
206
|
+
// Resolve the portal target — widget root for CSS var inheritance, escaping overflow: hidden
|
|
207
|
+
const resolvePortal = (): HTMLElement => shell.closest("[data-persona-root]") as HTMLElement ?? document.body;
|
|
208
208
|
|
|
209
209
|
const initDropdown = () => {
|
|
210
210
|
copyMenuDropdown = createDropdownMenu({
|
|
@@ -402,7 +402,7 @@ export function createArtifactPane(
|
|
|
402
402
|
shell.classList.toggle("persona-hidden", !has);
|
|
403
403
|
if (backdrop) {
|
|
404
404
|
const root =
|
|
405
|
-
typeof shell.closest === "function" ? shell.closest("
|
|
405
|
+
typeof shell.closest === "function" ? shell.closest("[data-persona-root]") : null;
|
|
406
406
|
const narrowHost = root?.classList.contains("persona-artifact-narrow-host") ?? false;
|
|
407
407
|
const isMobile =
|
|
408
408
|
narrowHost ||
|
|
@@ -2,7 +2,7 @@ import { createElement, createElementInDocument } from "../utils/dom";
|
|
|
2
2
|
import { renderLucideIcon } from "../utils/icons";
|
|
3
3
|
import { AgentWidgetConfig } from "../types";
|
|
4
4
|
|
|
5
|
-
/** CSS `color` values; variables are set on
|
|
5
|
+
/** CSS `color` values; variables are set on `[data-persona-root]` from `theme.components.header`. */
|
|
6
6
|
export const HEADER_THEME_CSS = {
|
|
7
7
|
titleColor:
|
|
8
8
|
"var(--persona-header-title-fg, var(--persona-primary, #2563eb))",
|