@@ -572,7 +572,6 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
572
572
return h (
573
573
BFormTag ,
574
574
{
575
- key : `li-tag__${ tag } ` ,
576
575
class : tagClass ,
577
576
props : {
578
577
// `BFormTag` will auto generate an ID
@@ -584,7 +583,8 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
584
583
pill : tagPills ,
585
584
removeLabel : tagRemoveLabel
586
585
} ,
587
- on : { remove : ( ) => removeTag ( tag ) }
586
+ on : { remove : ( ) => removeTag ( tag ) } ,
587
+ key : `tags_${ tag } `
588
588
} ,
589
589
tag
590
590
)
@@ -640,40 +640,52 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
640
640
invisible : disableAddButton
641
641
} ,
642
642
style : { fontSize : '90%' } ,
643
- props : { variant : addButtonVariant , disabled : disableAddButton || isLimitReached } ,
643
+ props : {
644
+ variant : addButtonVariant ,
645
+ disabled : disableAddButton || isLimitReached
646
+ } ,
644
647
on : { click : ( ) => addTag ( ) }
645
648
} ,
646
649
[ this . normalizeSlot ( 'add-button-text' ) || addButtonText ]
647
650
)
648
651
649
- // ID of the tags+ input `<ul>` list
650
- // Note we could concatenate inputAttrs.id with `__TAG__LIST__`
651
- // But note that the inputID may be null until after mount
652
- // `safeId` returns `null`, if no user provided ID, until after
653
- // mount when a unique ID is generated
654
- const tagListId = this . safeId ( '__TAG__LIST__ ' )
652
+ // ID of the tags + input `<ul>` list
653
+ // Note we could concatenate ` inputAttrs.id` with '__tag_list__'
654
+ // but `inputId` may be ` null` until after mount
655
+ // `safeId() ` returns `null`, if no user provided ID,
656
+ // until after mount when a unique ID is generated
657
+ const tagListId = this . safeId ( '__tag_list__ ' )
655
658
656
659
const $field = h (
657
660
'li' ,
658
661
{
659
- key : '__li-input__' ,
660
- staticClass : 'flex-grow-1' ,
662
+ staticClass : 'b-from-tags-field flex-grow-1' ,
661
663
attrs : {
662
664
role : 'none' ,
663
665
'aria-live' : 'off' ,
664
666
'aria-controls' : tagListId
665
- }
667
+ } ,
668
+ key : 'tags_field'
666
669
} ,
667
- [ h ( 'div' , { staticClass : 'd-flex' , attrs : { role : 'group' } } , [ $input , $button ] ) ]
670
+ [
671
+ h (
672
+ 'div' ,
673
+ {
674
+ staticClass : 'd-flex' ,
675
+ attrs : { role : 'group' }
676
+ } ,
677
+ [ $input , $button ]
678
+ )
679
+ ]
668
680
)
669
681
670
682
// Wrap in an unordered list element (we use a list for accessibility)
671
683
const $ul = h (
672
684
'ul' ,
673
685
{
674
- key : '_tags_list_' ,
675
686
staticClass : 'b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center' ,
676
- attrs : { id : tagListId }
687
+ attrs : { id : tagListId } ,
688
+ key : 'tags_list'
677
689
} ,
678
690
[ $tags , $field ]
679
691
)
@@ -691,8 +703,8 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
691
703
$invalid = h (
692
704
BFormInvalidFeedback ,
693
705
{
694
- key : '_tags_invalid_feedback_' ,
695
- props : { id : invalidFeedbackId , forceShow : true }
706
+ props : { id : invalidFeedbackId , forceShow : true } ,
707
+ key : 'tags_invalid_feedback'
696
708
} ,
697
709
[ this . invalidTagText , ': ' , this . invalidTags . join ( joiner ) ]
698
710
)
@@ -704,8 +716,8 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
704
716
$duplicate = h (
705
717
BFormText ,
706
718
{
707
- key : '_tags_duplicate_feedback_' ,
708
- props : { id : duplicateFeedbackId }
719
+ props : { id : duplicateFeedbackId } ,
720
+ key : 'tags_duplicate_feedback'
709
721
} ,
710
722
[ this . duplicateTagText , ': ' , this . duplicateTags . join ( joiner ) ]
711
723
)
@@ -717,8 +729,8 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
717
729
$limit = h (
718
730
BFormText ,
719
731
{
720
- key : '_tags_limit_feedback_' ,
721
- props : { id : limitFeedbackId }
732
+ props : { id : limitFeedbackId } ,
733
+ key : 'tags_limit_feedback'
722
734
} ,
723
735
[ limitTagsText ]
724
736
)
@@ -727,8 +739,11 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
727
739
$feedback = h (
728
740
'div' ,
729
741
{
730
- key : '_tags_feedback_' ,
731
- attrs : { 'aria-live' : 'polite' , 'aria-atomic' : 'true' }
742
+ attrs : {
743
+ 'aria-live' : 'polite' ,
744
+ 'aria-atomic' : 'true'
745
+ } ,
746
+ key : 'tags_feedback'
732
747
} ,
733
748
[ $invalid , $duplicate , $limit ]
734
749
)
@@ -789,7 +804,7 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
789
804
{
790
805
staticClass : 'sr-only' ,
791
806
attrs : {
792
- id : this . safeId ( '_selected-tags_ ' ) ,
807
+ id : this . safeId ( '__selected_tags__ ' ) ,
793
808
role : 'status' ,
794
809
for : this . computedInputId ,
795
810
'aria-live' : this . hasFocus ? 'polite' : 'off' ,
@@ -806,7 +821,7 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
806
821
{
807
822
staticClass : 'sr-only' ,
808
823
attrs : {
809
- id : this . safeId ( '_removed-tags_ ' ) ,
824
+ id : this . safeId ( '__removed_tags__ ' ) ,
810
825
role : 'status' ,
811
826
'aria-live' : this . hasFocus ? 'assertive' : 'off' ,
812
827
'aria-atomic' : 'true'
@@ -822,13 +837,13 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
822
837
// for native submission of forms
823
838
$hidden = this . tags . map ( tag => {
824
839
return h ( 'input' , {
825
- key : tag ,
826
840
attrs : {
827
841
type : 'hidden' ,
828
842
value : tag ,
829
843
name : this . name ,
830
844
form : this . form || null
831
- }
845
+ } ,
846
+ key : `tag_input_${ tag } `
832
847
} )
833
848
} )
834
849
}
@@ -849,7 +864,7 @@ export const BFormTags = /*#__PURE__*/ Vue.extend({
849
864
id : this . safeId ( ) ,
850
865
role : 'group' ,
851
866
tabindex : this . disabled || this . noOuterFocus ? null : '-1' ,
852
- 'aria-describedby' : this . safeId ( '_selected_ ' )
867
+ 'aria-describedby' : this . safeId ( '__selected_tags__ ' )
853
868
} ,
854
869
on : {
855
870
click : this . onClick ,
0 commit comments