@primer/view-components 0.29.0-rc.e93857ff → 0.30.0-rc.2e940d27
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/app/assets/javascripts/primer_view_components.js +1 -1
- package/app/assets/javascripts/primer_view_components.js.map +1 -1
- package/app/components/primer/alpha/select_panel_element.js +43 -8
- package/package.json +1 -1
- package/static/arguments.json +22 -0
- package/static/audited_at.json +1 -0
- package/static/constants.json +3 -1
- package/static/info_arch.json +63 -0
- package/static/statuses.json +1 -0
@@ -183,6 +183,15 @@ let SelectPanelElement = class SelectPanelElement extends HTMLElement {
|
|
183
183
|
for (const entry of entries) {
|
184
184
|
const elem = entry.target;
|
185
185
|
if (entry.isIntersecting && elem === this.dialog) {
|
186
|
+
// Focus on the filter input when the dialog opens to work around a Safari limitation
|
187
|
+
// that prevents the autofocus attribute from working as it does in other browsers
|
188
|
+
if (this.filterInputTextField) {
|
189
|
+
if (document.activeElement !== this.filterInputTextField) {
|
190
|
+
this.filterInputTextField.focus();
|
191
|
+
}
|
192
|
+
}
|
193
|
+
// signal that any focus hijinks are finished (thanks Safari)
|
194
|
+
this.dialog.setAttribute('data-ready', 'true');
|
186
195
|
this.updateAnchorPosition();
|
187
196
|
if (__classPrivateFieldGet(this, _SelectPanelElement_instances, "a", _SelectPanelElement_fetchStrategy_get) === FetchStrategy.LOCAL) {
|
188
197
|
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_updateItemVisibility).call(this);
|
@@ -191,11 +200,11 @@ let SelectPanelElement = class SelectPanelElement extends HTMLElement {
|
|
191
200
|
}
|
192
201
|
}), "f");
|
193
202
|
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_waitForCondition).call(this, () => Boolean(this.dialog), () => {
|
203
|
+
__classPrivateFieldGet(this, _SelectPanelElement_dialogIntersectionObserver, "f").observe(this.dialog);
|
204
|
+
this.dialog.addEventListener('close', this, { signal });
|
194
205
|
if (this.getAttribute('data-open-on-load') === 'true') {
|
195
206
|
this.show();
|
196
207
|
}
|
197
|
-
__classPrivateFieldGet(this, _SelectPanelElement_dialogIntersectionObserver, "f").observe(this.dialog);
|
198
|
-
this.dialog.addEventListener('close', this, { signal });
|
199
208
|
});
|
200
209
|
if (__classPrivateFieldGet(this, _SelectPanelElement_instances, "a", _SelectPanelElement_fetchStrategy_get) === FetchStrategy.LOCAL) {
|
201
210
|
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_waitForCondition).call(this, () => this.items.length > 0, () => {
|
@@ -240,6 +249,8 @@ let SelectPanelElement = class SelectPanelElement extends HTMLElement {
|
|
240
249
|
return;
|
241
250
|
}
|
242
251
|
if (event.target === this.dialog && event.type === 'close') {
|
252
|
+
// Remove data-ready so it can be set the next time the panel is opened
|
253
|
+
this.dialog.removeAttribute('data-ready');
|
243
254
|
this.dispatchEvent(new CustomEvent('panelClosed', {
|
244
255
|
detail: { panel: this },
|
245
256
|
bubbles: true,
|
@@ -588,10 +599,34 @@ _SelectPanelElement_defaultFilterFn = function _SelectPanelElement_defaultFilter
|
|
588
599
|
return text.indexOf(query.toLowerCase()) > -1;
|
589
600
|
};
|
590
601
|
_SelectPanelElement_handleSearchFieldEvent = function _SelectPanelElement_handleSearchFieldEvent(event) {
|
591
|
-
if (event.type === 'keydown'
|
592
|
-
|
593
|
-
|
594
|
-
|
602
|
+
if (event.type === 'keydown') {
|
603
|
+
const key = event.key;
|
604
|
+
if (key === 'Enter') {
|
605
|
+
const item = this.visibleItems[0];
|
606
|
+
if (item) {
|
607
|
+
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_handleItemActivated).call(this, item, false);
|
608
|
+
}
|
609
|
+
}
|
610
|
+
else if (key === 'ArrowDown') {
|
611
|
+
const item = (this.focusableItem || this.visibleItems[0]);
|
612
|
+
if (item) {
|
613
|
+
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item).focus();
|
614
|
+
event.preventDefault();
|
615
|
+
}
|
616
|
+
}
|
617
|
+
else if (key === 'Home') {
|
618
|
+
const item = this.visibleItems[0];
|
619
|
+
if (item) {
|
620
|
+
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item).focus();
|
621
|
+
event.preventDefault();
|
622
|
+
}
|
623
|
+
}
|
624
|
+
else if (key === 'End') {
|
625
|
+
if (this.visibleItems.length > 0) {
|
626
|
+
const item = this.visibleItems[this.visibleItems.length - 1];
|
627
|
+
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item).focus();
|
628
|
+
event.preventDefault();
|
629
|
+
}
|
595
630
|
}
|
596
631
|
}
|
597
632
|
if (event.type !== 'input')
|
@@ -751,7 +786,7 @@ _SelectPanelElement_handleDialogItemActivated = function _SelectPanelElement_han
|
|
751
786
|
dialog.addEventListener('close', handleDialogClose, { signal });
|
752
787
|
dialog.addEventListener('cancel', handleDialogClose, { signal });
|
753
788
|
};
|
754
|
-
_SelectPanelElement_handleItemActivated = function _SelectPanelElement_handleItemActivated(item) {
|
789
|
+
_SelectPanelElement_handleItemActivated = function _SelectPanelElement_handleItemActivated(item, shouldClose = true) {
|
755
790
|
// Hide popover after current event loop to prevent changes in focus from
|
756
791
|
// altering the target of the event. Not doing this specifically affects
|
757
792
|
// <a> tags. It causes the event to be sent to the currently focused element
|
@@ -760,7 +795,7 @@ _SelectPanelElement_handleItemActivated = function _SelectPanelElement_handleIte
|
|
760
795
|
// works fine.
|
761
796
|
if (this.selectVariant !== 'multiple') {
|
762
797
|
setTimeout(() => {
|
763
|
-
if (this.open) {
|
798
|
+
if (this.open && shouldClose) {
|
764
799
|
this.hide();
|
765
800
|
}
|
766
801
|
});
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@primer/view-components",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.30.0-rc.2e940d27",
|
4
4
|
"description": "ViewComponents for the Primer Design System",
|
5
5
|
"main": "app/assets/javascripts/primer_view_components.js",
|
6
6
|
"module": "app/components/primer/primer.js",
|
package/static/arguments.json
CHANGED
@@ -2467,6 +2467,28 @@
|
|
2467
2467
|
"type": "Symbol",
|
2468
2468
|
"default": "`:outside_bottom`",
|
2469
2469
|
"description": "The side to anchor the Overlay to. One of `:inside_bottom`, `:inside_center`, `:inside_left`, `:inside_right`, `:inside_top`, `:outside_bottom`, `:outside_left`, `:outside_right`, or `:outside_top`."
|
2470
|
+
},
|
2471
|
+
{
|
2472
|
+
"name": "system_arguments",
|
2473
|
+
"type": "Hash",
|
2474
|
+
"default": "N/A",
|
2475
|
+
"description": "[System arguments](/system-arguments)"
|
2476
|
+
}
|
2477
|
+
]
|
2478
|
+
},
|
2479
|
+
{
|
2480
|
+
"component": "SelectPanel::ItemList",
|
2481
|
+
"status": "alpha",
|
2482
|
+
"a11y_reviewed": true,
|
2483
|
+
"short_name": "SelectPanelItemList",
|
2484
|
+
"source": "https://github.com/primer/view_components/tree/main/app/components/primer/alpha/select_panel/item_list.rb",
|
2485
|
+
"lookbook": "https://primer.style/view-components/lookbook/inspect/primer/alpha/select_panel/item_list/default/",
|
2486
|
+
"parameters": [
|
2487
|
+
{
|
2488
|
+
"name": "system_arguments",
|
2489
|
+
"type": "Hash",
|
2490
|
+
"default": "N/A",
|
2491
|
+
"description": "The arguments accepted by [ActionList](/components/alpha/actionlist)."
|
2470
2492
|
}
|
2471
2493
|
]
|
2472
2494
|
},
|
package/static/audited_at.json
CHANGED
@@ -53,6 +53,7 @@
|
|
53
53
|
"Primer::Alpha::SegmentedControl::Item": "2023-02-01",
|
54
54
|
"Primer::Alpha::Select": "",
|
55
55
|
"Primer::Alpha::SelectPanel": "",
|
56
|
+
"Primer::Alpha::SelectPanel::ItemList": "2023-07-10",
|
56
57
|
"Primer::Alpha::SubmitButton": "",
|
57
58
|
"Primer::Alpha::TabContainer": "",
|
58
59
|
"Primer::Alpha::TabNav": "",
|
package/static/constants.json
CHANGED
@@ -606,13 +606,15 @@
|
|
606
606
|
"eventually_local",
|
607
607
|
"local"
|
608
608
|
],
|
609
|
-
"ItemList": "Primer::Alpha::
|
609
|
+
"ItemList": "Primer::Alpha::SelectPanel::ItemList",
|
610
610
|
"SELECT_VARIANT_OPTIONS": [
|
611
611
|
"single",
|
612
612
|
"multiple",
|
613
613
|
"none"
|
614
614
|
]
|
615
615
|
},
|
616
|
+
"Primer::Alpha::SelectPanel::ItemList": {
|
617
|
+
},
|
616
618
|
"Primer::Alpha::SubmitButton": {
|
617
619
|
},
|
618
620
|
"Primer::Alpha::TabContainer": {
|
package/static/info_arch.json
CHANGED
@@ -7630,6 +7630,12 @@
|
|
7630
7630
|
"type": "Symbol",
|
7631
7631
|
"default": "`:outside_bottom`",
|
7632
7632
|
"description": "The side to anchor the Overlay to. One of `:inside_bottom`, `:inside_center`, `:inside_left`, `:inside_right`, `:inside_top`, `:outside_bottom`, `:outside_left`, `:outside_right`, or `:outside_top`."
|
7633
|
+
},
|
7634
|
+
{
|
7635
|
+
"name": "system_arguments",
|
7636
|
+
"type": "Hash",
|
7637
|
+
"default": "N/A",
|
7638
|
+
"description": "{{link_to_system_arguments_docs}}"
|
7633
7639
|
}
|
7634
7640
|
],
|
7635
7641
|
"slots": [
|
@@ -8080,7 +8086,64 @@
|
|
8080
8086
|
}
|
8081
8087
|
],
|
8082
8088
|
"subcomponents": [
|
8089
|
+
{
|
8090
|
+
"fully_qualified_name": "Primer::Alpha::SelectPanel::ItemList",
|
8091
|
+
"description": "The component that should be used to render the list of items in the body of a SelectPanel.",
|
8092
|
+
"accessibility_docs": null,
|
8093
|
+
"is_form_component": false,
|
8094
|
+
"is_published": true,
|
8095
|
+
"requires_js": true,
|
8096
|
+
"component": "SelectPanel::ItemList",
|
8097
|
+
"status": "alpha",
|
8098
|
+
"a11y_reviewed": true,
|
8099
|
+
"short_name": "SelectPanelItemList",
|
8100
|
+
"source": "https://github.com/primer/view_components/tree/main/app/components/primer/alpha/select_panel/item_list.rb",
|
8101
|
+
"lookbook": "https://primer.style/view-components/lookbook/inspect/primer/alpha/select_panel/item_list/default/",
|
8102
|
+
"parameters": [
|
8103
|
+
{
|
8104
|
+
"name": "system_arguments",
|
8105
|
+
"type": "Hash",
|
8106
|
+
"default": "N/A",
|
8107
|
+
"description": "The arguments accepted by {{#link_to_component}}Primer::Alpha::ActionList{{/link_to_component}}."
|
8108
|
+
}
|
8109
|
+
],
|
8110
|
+
"slots": [
|
8111
|
+
{
|
8112
|
+
"name": "heading",
|
8113
|
+
"description": "Heading text rendered above the list of items.",
|
8114
|
+
"parameters": [
|
8115
|
+
{
|
8116
|
+
"name": "component_klass",
|
8117
|
+
"type": "Class",
|
8118
|
+
"default": "N/A",
|
8119
|
+
"description": "The class to use instead of the default {{#link_to_component}}Primer::Alpha::ActionList::Heading{{/link_to_component}}."
|
8120
|
+
},
|
8121
|
+
{
|
8122
|
+
"name": "system_arguments",
|
8123
|
+
"type": "Hash",
|
8124
|
+
"default": "N/A",
|
8125
|
+
"description": "The arguments accepted by `component_klass`."
|
8126
|
+
}
|
8127
|
+
]
|
8128
|
+
},
|
8129
|
+
{
|
8130
|
+
"name": "items",
|
8131
|
+
"description": "Items. Items can be individual items, avatar items, or dividers. See the documentation for `#with_item`, `#with_divider`, and `#with_avatar_item` respectively for more information.",
|
8132
|
+
"parameters": [
|
8133
|
+
|
8134
|
+
]
|
8135
|
+
}
|
8136
|
+
],
|
8137
|
+
"methods": [
|
8138
|
+
|
8139
|
+
],
|
8140
|
+
"previews": [
|
8083
8141
|
|
8142
|
+
],
|
8143
|
+
"subcomponents": [
|
8144
|
+
|
8145
|
+
]
|
8146
|
+
}
|
8084
8147
|
]
|
8085
8148
|
},
|
8086
8149
|
{
|
package/static/statuses.json
CHANGED
@@ -53,6 +53,7 @@
|
|
53
53
|
"Primer::Alpha::SegmentedControl::Item": "alpha",
|
54
54
|
"Primer::Alpha::Select": "alpha",
|
55
55
|
"Primer::Alpha::SelectPanel": "alpha",
|
56
|
+
"Primer::Alpha::SelectPanel::ItemList": "alpha",
|
56
57
|
"Primer::Alpha::SubmitButton": "alpha",
|
57
58
|
"Primer::Alpha::TabContainer": "alpha",
|
58
59
|
"Primer::Alpha::TabNav": "alpha",
|