symbiote-ui 0.3.0-alpha.64 → 0.3.0-alpha.65
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
CHANGED
|
@@ -4,6 +4,13 @@ All notable changes to `symbiote-ui` will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## [0.3.0-alpha.65] - 2026-07-18
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Kept compact composer parameters on the same action row at narrow widths.
|
|
12
|
+
- Preserved full native select hit areas and explicit accessible names when footer controls collapse to icon-only presentation.
|
|
13
|
+
|
|
7
14
|
## [0.3.0-alpha.64] - 2026-07-18
|
|
8
15
|
|
|
9
16
|
### Added
|
|
@@ -417,6 +417,7 @@ sn-button.btn-send[variant="icon"].btn-stop::after {
|
|
|
417
417
|
|
|
418
418
|
.composer-footer-select-control {
|
|
419
419
|
padding-right: var(--sn-step-2);
|
|
420
|
+
position: relative;
|
|
420
421
|
}
|
|
421
422
|
|
|
422
423
|
.composer-footer-checkbox-control {
|
|
@@ -464,20 +465,27 @@ sn-button.btn-send[variant="icon"].btn-stop::after {
|
|
|
464
465
|
text-overflow: ellipsis;
|
|
465
466
|
}
|
|
466
467
|
|
|
467
|
-
.composer-param-collapsed
|
|
468
|
-
|
|
469
|
-
.composer-param-collapsed .composer-footer-value,
|
|
470
|
-
.composer-param-collapsed .composer-footer-suffix {
|
|
471
|
-
width: var(--sn-composer-collapsed-control-width);
|
|
472
|
-
max-width: var(--sn-composer-collapsed-control-width);
|
|
473
|
-
padding-right: var(--sn-composer-collapsed-control-padding);
|
|
474
|
-
color: transparent !important;
|
|
468
|
+
.composer-param-collapsed {
|
|
469
|
+
--sn-is-collapsed: 1;
|
|
475
470
|
}
|
|
476
471
|
|
|
477
|
-
|
|
478
|
-
.composer-
|
|
479
|
-
|
|
480
|
-
|
|
472
|
+
@container style(--sn-is-collapsed: 1) {
|
|
473
|
+
.composer-footer-select {
|
|
474
|
+
position: absolute;
|
|
475
|
+
inset: 0;
|
|
476
|
+
width: 100%;
|
|
477
|
+
min-width: var(--sn-composer-collapsed-control-width);
|
|
478
|
+
height: 100%;
|
|
479
|
+
box-sizing: border-box;
|
|
480
|
+
padding-right: var(--sn-composer-collapsed-control-padding);
|
|
481
|
+
opacity: 0;
|
|
482
|
+
z-index: 1;
|
|
483
|
+
cursor: pointer;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
:is(.composer-footer-label, .composer-footer-value, .composer-footer-suffix) {
|
|
487
|
+
display: none;
|
|
488
|
+
}
|
|
481
489
|
}
|
|
482
490
|
|
|
483
491
|
.composer-footer-details-popover {
|
|
@@ -786,108 +794,33 @@ sn-button.btn-send[variant="icon"].btn-stop::after {
|
|
|
786
794
|
}
|
|
787
795
|
|
|
788
796
|
@container composer-footer (width <= 560px) {
|
|
789
|
-
.composer-priority-1
|
|
790
|
-
|
|
791
|
-
.composer-priority-1 .composer-footer-value,
|
|
792
|
-
.composer-priority-1 .composer-footer-suffix {
|
|
793
|
-
width: var(--sn-composer-collapsed-control-width);
|
|
794
|
-
max-width: var(--sn-composer-collapsed-control-width);
|
|
795
|
-
padding-right: var(--sn-composer-collapsed-control-padding);
|
|
796
|
-
color: transparent !important;
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
.composer-priority-1 .composer-footer-label,
|
|
800
|
-
.composer-priority-1 .composer-footer-value,
|
|
801
|
-
.composer-priority-1 .composer-footer-suffix {
|
|
802
|
-
display: none;
|
|
797
|
+
.composer-priority-1 {
|
|
798
|
+
--sn-is-collapsed: 1;
|
|
803
799
|
}
|
|
804
800
|
}
|
|
805
801
|
|
|
806
802
|
@container composer-footer (width <= 500px) {
|
|
807
|
-
.composer-param-model.composer-long-value
|
|
808
|
-
.composer-
|
|
809
|
-
|
|
810
|
-
.composer-param-model.composer-long-value .composer-footer-suffix {
|
|
811
|
-
width: var(--sn-composer-collapsed-control-width);
|
|
812
|
-
max-width: var(--sn-composer-collapsed-control-width);
|
|
813
|
-
padding-right: var(--sn-composer-collapsed-control-padding);
|
|
814
|
-
color: transparent !important;
|
|
815
|
-
}
|
|
816
|
-
|
|
817
|
-
.composer-param-model.composer-long-value .composer-footer-label,
|
|
818
|
-
.composer-param-model.composer-long-value .composer-footer-value,
|
|
819
|
-
.composer-param-model.composer-long-value .composer-footer-suffix {
|
|
820
|
-
display: none;
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
.composer-priority-2 .composer-footer-select,
|
|
824
|
-
.composer-priority-2 .composer-footer-label,
|
|
825
|
-
.composer-priority-2 .composer-footer-value,
|
|
826
|
-
.composer-priority-2 .composer-footer-suffix {
|
|
827
|
-
width: var(--sn-composer-collapsed-control-width);
|
|
828
|
-
max-width: var(--sn-composer-collapsed-control-width);
|
|
829
|
-
padding-right: var(--sn-composer-collapsed-control-padding);
|
|
830
|
-
color: transparent !important;
|
|
831
|
-
}
|
|
832
|
-
|
|
833
|
-
.composer-priority-2 .composer-footer-label,
|
|
834
|
-
.composer-priority-2 .composer-footer-value,
|
|
835
|
-
.composer-priority-2 .composer-footer-suffix {
|
|
836
|
-
display: none;
|
|
803
|
+
.composer-param-model.composer-long-value,
|
|
804
|
+
.composer-priority-2 {
|
|
805
|
+
--sn-is-collapsed: 1;
|
|
837
806
|
}
|
|
838
807
|
}
|
|
839
808
|
|
|
840
809
|
@container composer-footer (width <= 440px) {
|
|
841
|
-
.composer-priority-3
|
|
842
|
-
|
|
843
|
-
.composer-priority-3 .composer-footer-value,
|
|
844
|
-
.composer-priority-3 .composer-footer-suffix {
|
|
845
|
-
width: var(--sn-composer-collapsed-control-width);
|
|
846
|
-
max-width: var(--sn-composer-collapsed-control-width);
|
|
847
|
-
padding-right: var(--sn-composer-collapsed-control-padding);
|
|
848
|
-
color: transparent !important;
|
|
849
|
-
}
|
|
850
|
-
|
|
851
|
-
.composer-priority-3 .composer-footer-label,
|
|
852
|
-
.composer-priority-3 .composer-footer-value,
|
|
853
|
-
.composer-priority-3 .composer-footer-suffix {
|
|
854
|
-
display: none;
|
|
810
|
+
.composer-priority-3 {
|
|
811
|
+
--sn-is-collapsed: 1;
|
|
855
812
|
}
|
|
856
813
|
}
|
|
857
814
|
|
|
858
815
|
@container composer-footer (width <= 380px) {
|
|
859
|
-
.composer-priority-4
|
|
860
|
-
|
|
861
|
-
.composer-priority-4 .composer-footer-value,
|
|
862
|
-
.composer-priority-4 .composer-footer-suffix {
|
|
863
|
-
width: var(--sn-composer-collapsed-control-width);
|
|
864
|
-
max-width: var(--sn-composer-collapsed-control-width);
|
|
865
|
-
padding-right: var(--sn-composer-collapsed-control-padding);
|
|
866
|
-
color: transparent !important;
|
|
867
|
-
}
|
|
868
|
-
|
|
869
|
-
.composer-priority-4 .composer-footer-label,
|
|
870
|
-
.composer-priority-4 .composer-footer-value,
|
|
871
|
-
.composer-priority-4 .composer-footer-suffix {
|
|
872
|
-
display: none;
|
|
816
|
+
.composer-priority-4 {
|
|
817
|
+
--sn-is-collapsed: 1;
|
|
873
818
|
}
|
|
874
819
|
}
|
|
875
820
|
|
|
876
821
|
@container composer-footer (width <= 320px) {
|
|
877
|
-
.composer-priority-5
|
|
878
|
-
|
|
879
|
-
.composer-priority-5 .composer-footer-value,
|
|
880
|
-
.composer-priority-5 .composer-footer-suffix {
|
|
881
|
-
width: var(--sn-composer-collapsed-control-width);
|
|
882
|
-
max-width: var(--sn-composer-collapsed-control-width);
|
|
883
|
-
padding-right: var(--sn-composer-collapsed-control-padding);
|
|
884
|
-
color: transparent !important;
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
.composer-priority-5 .composer-footer-label,
|
|
888
|
-
.composer-priority-5 .composer-footer-value,
|
|
889
|
-
.composer-priority-5 .composer-footer-suffix {
|
|
890
|
-
display: none;
|
|
822
|
+
.composer-priority-5 {
|
|
823
|
+
--sn-is-collapsed: 1;
|
|
891
824
|
}
|
|
892
825
|
}
|
|
893
826
|
|
|
@@ -1231,67 +1164,6 @@ chat-composer.drag-over .composer-body {
|
|
|
1231
1164
|
}
|
|
1232
1165
|
|
|
1233
1166
|
@container chat-composer (width <= 480px) {
|
|
1234
|
-
.composer-body {
|
|
1235
|
-
grid-template-columns: auto minmax(0, 1fr) auto auto;
|
|
1236
|
-
grid-template-rows: minmax(var(--sn-composer-input-min-height), auto) auto auto;
|
|
1237
|
-
}
|
|
1238
|
-
|
|
1239
|
-
:host([leading-controls]) .composer-body,
|
|
1240
|
-
chat-composer[leading-controls] .composer-body {
|
|
1241
|
-
grid-template-columns: auto minmax(0, 1fr) auto auto;
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
|
-
:host([leading-controls]) .composer-leading-controls,
|
|
1245
|
-
chat-composer[leading-controls] .composer-leading-controls {
|
|
1246
|
-
grid-column: 1;
|
|
1247
|
-
grid-row: 3;
|
|
1248
|
-
}
|
|
1249
|
-
|
|
1250
|
-
:host([leading-controls]) .composer-body textarea,
|
|
1251
|
-
chat-composer[leading-controls] .composer-body textarea {
|
|
1252
|
-
grid-column: 1 / -1;
|
|
1253
|
-
}
|
|
1254
|
-
|
|
1255
|
-
.composer-footer {
|
|
1256
|
-
grid-column: 1 / -1;
|
|
1257
|
-
grid-row: 2;
|
|
1258
|
-
}
|
|
1259
|
-
|
|
1260
|
-
.composer-actions {
|
|
1261
|
-
grid-column: 2;
|
|
1262
|
-
grid-row: 3;
|
|
1263
|
-
width: auto;
|
|
1264
|
-
max-width: min(54cqi, var(--sn-composer-actions-max-inline-size, 460px));
|
|
1265
|
-
flex-wrap: nowrap;
|
|
1266
|
-
overflow: hidden;
|
|
1267
|
-
}
|
|
1268
|
-
|
|
1269
|
-
.btn-mic {
|
|
1270
|
-
grid-column: 3;
|
|
1271
|
-
grid-row: 3;
|
|
1272
|
-
align-self: end;
|
|
1273
|
-
}
|
|
1274
|
-
|
|
1275
|
-
.composer-body > sn-button.btn-send {
|
|
1276
|
-
grid-column: 4;
|
|
1277
|
-
grid-row: 3;
|
|
1278
|
-
}
|
|
1279
|
-
|
|
1280
|
-
:host([leading-controls]) .composer-actions,
|
|
1281
|
-
chat-composer[leading-controls] .composer-actions {
|
|
1282
|
-
grid-column: 2;
|
|
1283
|
-
}
|
|
1284
|
-
|
|
1285
|
-
:host([leading-controls]) .btn-mic,
|
|
1286
|
-
chat-composer[leading-controls] .btn-mic {
|
|
1287
|
-
grid-column: 3;
|
|
1288
|
-
}
|
|
1289
|
-
|
|
1290
|
-
:host([leading-controls]) .composer-body > sn-button.btn-send,
|
|
1291
|
-
chat-composer[leading-controls] .composer-body > sn-button.btn-send {
|
|
1292
|
-
grid-column: 4;
|
|
1293
|
-
}
|
|
1294
|
-
|
|
1295
1167
|
.btn-voice-language {
|
|
1296
1168
|
min-width: calc(var(--sn-composer-send-size) * 2.2);
|
|
1297
1169
|
max-width: calc(var(--sn-composer-send-size) * 2.6);
|
|
@@ -168,6 +168,7 @@ function decorateFooterControl(item) {
|
|
|
168
168
|
let meterValue = normalizeProgress(meterSource.value ?? meterSource.progress ?? details?.progress ?? item.progress ?? 0);
|
|
169
169
|
let meterLabel = String(meterSource.label || '');
|
|
170
170
|
let meterTitle = String(meterSource.title || details?.title || item.title || item.label || item.id || '');
|
|
171
|
+
let accessibleName = String(item.title || item.label || item.id || '');
|
|
171
172
|
let hasMeter = Boolean(item.meter || details);
|
|
172
173
|
let baseClass = [
|
|
173
174
|
'composer-footer-btn',
|
|
@@ -220,6 +221,7 @@ function decorateFooterControl(item) {
|
|
|
220
221
|
hasMeter,
|
|
221
222
|
hasMeterLabel: Boolean(meterLabel),
|
|
222
223
|
meterStyle: progressStyle(meterValue),
|
|
224
|
+
accessibleName,
|
|
223
225
|
options,
|
|
224
226
|
};
|
|
225
227
|
}
|
|
@@ -1732,7 +1734,7 @@ ChatComposer.template = html`
|
|
|
1732
1734
|
<label ${{ '@class': 'selectClass', '@data-footer-control-id': 'id', '@data-footer-control-kind': 'kind', '@title': 'title', '@hidden': '!isSelect' }}>
|
|
1733
1735
|
<span class="material-symbols-outlined" ${{ '@hidden': '!hasIcon' }}>{{icon}}</span>
|
|
1734
1736
|
<span class="composer-footer-label" ${{ '@hidden': '!hasLabel' }}>{{label}}</span>
|
|
1735
|
-
<select class="composer-footer-select" ${{ '@data-footer-control-id': 'id', '@data-footer-control-kind': 'kind', '@disabled': 'disabled' }} itemize="options">
|
|
1737
|
+
<select class="composer-footer-select" ${{ '@data-footer-control-id': 'id', '@data-footer-control-kind': 'kind', '@disabled': 'disabled', '@aria-label': 'accessibleName' }} itemize="options">
|
|
1736
1738
|
<template>
|
|
1737
1739
|
<option ${{ '@value': 'value', '@selected': 'selected' }}>{{label}}</option>
|
|
1738
1740
|
</template>
|
|
@@ -1741,7 +1743,7 @@ ChatComposer.template = html`
|
|
|
1741
1743
|
</label>
|
|
1742
1744
|
<label ${{ '@class': 'checkboxClass', '@data-footer-control-id': 'id', '@data-footer-control-kind': 'kind', '@title': 'title', '@hidden': '!isCheckbox' }}>
|
|
1743
1745
|
<span class="material-symbols-outlined" ${{ '@hidden': '!hasIcon' }}>{{icon}}</span>
|
|
1744
|
-
<input class="composer-footer-checkbox" type="checkbox" ${{ '@data-footer-control-id': 'id', '@data-footer-control-kind': 'kind', checked: 'checked', '@disabled': 'disabled' }}>
|
|
1746
|
+
<input class="composer-footer-checkbox" type="checkbox" ${{ '@data-footer-control-id': 'id', '@data-footer-control-kind': 'kind', checked: 'checked', '@disabled': 'disabled', '@aria-label': 'accessibleName' }}>
|
|
1745
1747
|
<span class="composer-footer-label" ${{ '@hidden': '!hasLabel' }}>{{label}}</span>
|
|
1746
1748
|
</label>
|
|
1747
1749
|
<button type="button" ${{ '@class': 'buttonClass', '@data-footer-control-id': 'id', '@data-footer-control-kind': 'kind', '@title': 'title', '@disabled': 'disabled', '@hidden': '!isButton' }}>
|
package/package.json
CHANGED