@primer/view-components 0.31.0-rc.9fb3fcc2 → 0.31.0-rc.ab0118a4
Sign up to get free protection for your applications and to get access to all the features.
- package/app/assets/javascripts/app/components/primer/alpha/select_panel_element.d.ts +0 -1
- 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.d.ts +0 -1
- package/app/components/primer/alpha/select_panel_element.js +38 -19
- package/package.json +1 -1
- package/static/arguments.json +5 -5
- package/static/info_arch.json +36 -5
- package/static/previews.json +13 -0
@@ -6,7 +6,6 @@ type SelectedItem = {
|
|
6
6
|
label: string | null | undefined;
|
7
7
|
value: string | null | undefined;
|
8
8
|
inputName: string | null | undefined;
|
9
|
-
element: SelectPanelItem;
|
10
9
|
};
|
11
10
|
export type SelectPanelItem = HTMLLIElement;
|
12
11
|
export type FilterFn = (item: SelectPanelItem, query: string) => boolean;
|
@@ -15,7 +15,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
15
15
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
16
16
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
17
17
|
};
|
18
|
-
var _SelectPanelElement_instances, _SelectPanelElement_dialogIntersectionObserver, _SelectPanelElement_abortController, _SelectPanelElement_originalLabel, _SelectPanelElement_inputName, _SelectPanelElement_selectedItems, _SelectPanelElement_loadingDelayTimeoutId, _SelectPanelElement_loadingAnnouncementTimeoutId, _SelectPanelElement_waitForCondition, _SelectPanelElement_softDisableItems, _SelectPanelElement_updateTabIndices, _SelectPanelElement_potentiallyDisallowActivation, _SelectPanelElement_isAnchorActivationViaSpace, _SelectPanelElement_isActivation, _SelectPanelElement_checkSelectedItems, _SelectPanelElement_addSelectedItem, _SelectPanelElement_removeSelectedItem, _SelectPanelElement_setTextFieldLoadingSpinnerTimer, _SelectPanelElement_handleIncludeFragmentEvent, _SelectPanelElement_toggleIncludeFragmentElements, _SelectPanelElement_handleRemoteInputEvent, _SelectPanelElement_defaultFilterFn, _SelectPanelElement_handleSearchFieldEvent, _SelectPanelElement_updateItemVisibility, _SelectPanelElement_inErrorState, _SelectPanelElement_setErrorState, _SelectPanelElement_clearErrorState, _SelectPanelElement_maybeAnnounce, _SelectPanelElement_fetchStrategy_get, _SelectPanelElement_filterInputTextFieldElement_get, _SelectPanelElement_performFilteringLocally, _SelectPanelElement_handleInvokerActivated, _SelectPanelElement_handleDialogItemActivated, _SelectPanelElement_handleItemActivated, _SelectPanelElement_setDynamicLabel, _SelectPanelElement_updateInput, _SelectPanelElement_firstItem_get, _SelectPanelElement_hideItem, _SelectPanelElement_showItem, _SelectPanelElement_getItemContent;
|
18
|
+
var _SelectPanelElement_instances, _SelectPanelElement_dialogIntersectionObserver, _SelectPanelElement_abortController, _SelectPanelElement_originalLabel, _SelectPanelElement_inputName, _SelectPanelElement_selectedItems, _SelectPanelElement_loadingDelayTimeoutId, _SelectPanelElement_loadingAnnouncementTimeoutId, _SelectPanelElement_hasLoadedData, _SelectPanelElement_waitForCondition, _SelectPanelElement_softDisableItems, _SelectPanelElement_updateTabIndices, _SelectPanelElement_potentiallyDisallowActivation, _SelectPanelElement_isAnchorActivationViaSpace, _SelectPanelElement_isActivation, _SelectPanelElement_checkSelectedItems, _SelectPanelElement_addSelectedItem, _SelectPanelElement_removeSelectedItem, _SelectPanelElement_setTextFieldLoadingSpinnerTimer, _SelectPanelElement_handleIncludeFragmentEvent, _SelectPanelElement_toggleIncludeFragmentElements, _SelectPanelElement_handleRemoteInputEvent, _SelectPanelElement_defaultFilterFn, _SelectPanelElement_handleSearchFieldEvent, _SelectPanelElement_updateItemVisibility, _SelectPanelElement_inErrorState, _SelectPanelElement_setErrorState, _SelectPanelElement_clearErrorState, _SelectPanelElement_maybeAnnounce, _SelectPanelElement_fetchStrategy_get, _SelectPanelElement_filterInputTextFieldElement_get, _SelectPanelElement_performFilteringLocally, _SelectPanelElement_handleInvokerActivated, _SelectPanelElement_handleDialogItemActivated, _SelectPanelElement_handleItemActivated, _SelectPanelElement_setDynamicLabel, _SelectPanelElement_updateInput, _SelectPanelElement_firstItem_get, _SelectPanelElement_hideItem, _SelectPanelElement_showItem, _SelectPanelElement_getItemContent;
|
19
19
|
import { getAnchoredPosition } from '@primer/behaviors';
|
20
20
|
import { controller, target } from '@github/catalyst';
|
21
21
|
import { announceFromElement, announce } from '../aria_live';
|
@@ -55,6 +55,7 @@ const updateWhenVisible = (() => {
|
|
55
55
|
}));
|
56
56
|
resizeObserver.observe(el.ownerDocument.documentElement);
|
57
57
|
el.addEventListener('dialog:close', () => {
|
58
|
+
el.invokerElement?.setAttribute('aria-expanded', 'false');
|
58
59
|
anchors.delete(el);
|
59
60
|
});
|
60
61
|
el.addEventListener('dialog:open', () => {
|
@@ -73,6 +74,7 @@ let SelectPanelElement = class SelectPanelElement extends HTMLElement {
|
|
73
74
|
_SelectPanelElement_selectedItems.set(this, new Map());
|
74
75
|
_SelectPanelElement_loadingDelayTimeoutId.set(this, null);
|
75
76
|
_SelectPanelElement_loadingAnnouncementTimeoutId.set(this, null);
|
77
|
+
_SelectPanelElement_hasLoadedData.set(this, false);
|
76
78
|
}
|
77
79
|
get open() {
|
78
80
|
return this.dialog.open;
|
@@ -251,6 +253,7 @@ let SelectPanelElement = class SelectPanelElement extends HTMLElement {
|
|
251
253
|
if (event.target === this.dialog && event.type === 'close') {
|
252
254
|
// Remove data-ready so it can be set the next time the panel is opened
|
253
255
|
this.dialog.removeAttribute('data-ready');
|
256
|
+
this.invokerElement?.setAttribute('aria-expanded', 'false');
|
254
257
|
this.dispatchEvent(new CustomEvent('panelClosed', {
|
255
258
|
detail: { panel: this },
|
256
259
|
bubbles: true,
|
@@ -300,6 +303,7 @@ let SelectPanelElement = class SelectPanelElement extends HTMLElement {
|
|
300
303
|
show() {
|
301
304
|
this.updateAnchorPosition();
|
302
305
|
this.dialog.showModal();
|
306
|
+
this.invokerElement?.setAttribute('aria-expanded', 'true');
|
303
307
|
const event = new CustomEvent('dialog:open', {
|
304
308
|
detail: { dialog: this.dialog },
|
305
309
|
});
|
@@ -385,6 +389,7 @@ _SelectPanelElement_inputName = new WeakMap();
|
|
385
389
|
_SelectPanelElement_selectedItems = new WeakMap();
|
386
390
|
_SelectPanelElement_loadingDelayTimeoutId = new WeakMap();
|
387
391
|
_SelectPanelElement_loadingAnnouncementTimeoutId = new WeakMap();
|
392
|
+
_SelectPanelElement_hasLoadedData = new WeakMap();
|
388
393
|
_SelectPanelElement_instances = new WeakSet();
|
389
394
|
_SelectPanelElement_waitForCondition = function _SelectPanelElement_waitForCondition(condition, body) {
|
390
395
|
if (condition()) {
|
@@ -422,7 +427,7 @@ _SelectPanelElement_updateTabIndices = function _SelectPanelElement_updateTabInd
|
|
422
427
|
itemContent.setAttribute('tabindex', '-1');
|
423
428
|
}
|
424
429
|
// <li> elements should not themselves be tabbable
|
425
|
-
item.
|
430
|
+
item.removeAttribute('tabindex');
|
426
431
|
}
|
427
432
|
}
|
428
433
|
else {
|
@@ -437,7 +442,7 @@ _SelectPanelElement_updateTabIndices = function _SelectPanelElement_updateTabInd
|
|
437
442
|
itemContent.setAttribute('tabindex', '-1');
|
438
443
|
}
|
439
444
|
// <li> elements should not themselves be tabbable
|
440
|
-
item.
|
445
|
+
item.removeAttribute('tabindex');
|
441
446
|
}
|
442
447
|
}
|
443
448
|
if (!setZeroTabIndex && __classPrivateFieldGet(this, _SelectPanelElement_instances, "a", _SelectPanelElement_firstItem_get)) {
|
@@ -497,12 +502,14 @@ _SelectPanelElement_addSelectedItem = function _SelectPanelElement_addSelectedIt
|
|
497
502
|
value,
|
498
503
|
label: itemContent.querySelector('.ActionListItem-label')?.textContent?.trim(),
|
499
504
|
inputName: itemContent.getAttribute('data-input-name'),
|
500
|
-
element: item,
|
501
505
|
});
|
502
506
|
}
|
503
507
|
};
|
504
508
|
_SelectPanelElement_removeSelectedItem = function _SelectPanelElement_removeSelectedItem(item) {
|
505
|
-
const
|
509
|
+
const itemContent = __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item);
|
510
|
+
if (!itemContent)
|
511
|
+
return;
|
512
|
+
const value = itemContent.getAttribute('data-value');
|
506
513
|
if (value) {
|
507
514
|
__classPrivateFieldGet(this, _SelectPanelElement_selectedItems, "f").delete(value);
|
508
515
|
}
|
@@ -604,27 +611,33 @@ _SelectPanelElement_handleSearchFieldEvent = function _SelectPanelElement_handle
|
|
604
611
|
if (key === 'Enter') {
|
605
612
|
const item = this.visibleItems[0];
|
606
613
|
if (item) {
|
607
|
-
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m",
|
614
|
+
const itemContent = __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item);
|
615
|
+
if (itemContent)
|
616
|
+
itemContent.click();
|
608
617
|
}
|
609
618
|
}
|
610
619
|
else if (key === 'ArrowDown') {
|
611
|
-
const item = (this.focusableItem || this.visibleItems[0]);
|
620
|
+
const item = (this.focusableItem || __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, this.visibleItems[0]));
|
612
621
|
if (item) {
|
613
|
-
|
622
|
+
item.focus();
|
614
623
|
event.preventDefault();
|
615
624
|
}
|
616
625
|
}
|
617
626
|
else if (key === 'Home') {
|
618
627
|
const item = this.visibleItems[0];
|
619
628
|
if (item) {
|
620
|
-
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item)
|
629
|
+
const itemContent = __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item);
|
630
|
+
if (itemContent)
|
631
|
+
itemContent.focus();
|
621
632
|
event.preventDefault();
|
622
633
|
}
|
623
634
|
}
|
624
635
|
else if (key === 'End') {
|
625
636
|
if (this.visibleItems.length > 0) {
|
626
637
|
const item = this.visibleItems[this.visibleItems.length - 1];
|
627
|
-
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item)
|
638
|
+
const itemContent = __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item);
|
639
|
+
if (itemContent)
|
640
|
+
itemContent.focus();
|
628
641
|
event.preventDefault();
|
629
642
|
}
|
630
643
|
}
|
@@ -672,7 +685,13 @@ _SelectPanelElement_updateItemVisibility = function _SelectPanelElement_updateIt
|
|
672
685
|
if (!itemContent)
|
673
686
|
continue;
|
674
687
|
const value = itemContent.getAttribute('data-value');
|
675
|
-
if (
|
688
|
+
if (__classPrivateFieldGet(this, _SelectPanelElement_hasLoadedData, "f")) {
|
689
|
+
if (value && !__classPrivateFieldGet(this, _SelectPanelElement_selectedItems, "f").has(value)) {
|
690
|
+
itemContent.setAttribute(this.ariaSelectionType, 'false');
|
691
|
+
}
|
692
|
+
}
|
693
|
+
else if (value && !__classPrivateFieldGet(this, _SelectPanelElement_selectedItems, "f").has(value) && this.isItemChecked(item)) {
|
694
|
+
__classPrivateFieldSet(this, _SelectPanelElement_hasLoadedData, true, "f");
|
676
695
|
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_addSelectedItem).call(this, item);
|
677
696
|
}
|
678
697
|
}
|
@@ -786,7 +805,7 @@ _SelectPanelElement_handleDialogItemActivated = function _SelectPanelElement_han
|
|
786
805
|
dialog.addEventListener('close', handleDialogClose, { signal });
|
787
806
|
dialog.addEventListener('cancel', handleDialogClose, { signal });
|
788
807
|
};
|
789
|
-
_SelectPanelElement_handleItemActivated = function _SelectPanelElement_handleItemActivated(item
|
808
|
+
_SelectPanelElement_handleItemActivated = function _SelectPanelElement_handleItemActivated(item) {
|
790
809
|
// Hide popover after current event loop to prevent changes in focus from
|
791
810
|
// altering the target of the event. Not doing this specifically affects
|
792
811
|
// <a> tags. It causes the event to be sent to the currently focused element
|
@@ -795,7 +814,7 @@ _SelectPanelElement_handleItemActivated = function _SelectPanelElement_handleIte
|
|
795
814
|
// works fine.
|
796
815
|
if (this.selectVariant !== 'multiple') {
|
797
816
|
setTimeout(() => {
|
798
|
-
if (this.open
|
817
|
+
if (this.open) {
|
799
818
|
this.hide();
|
800
819
|
}
|
801
820
|
});
|
@@ -814,17 +833,17 @@ _SelectPanelElement_handleItemActivated = function _SelectPanelElement_handleIte
|
|
814
833
|
return;
|
815
834
|
const itemContent = __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, item);
|
816
835
|
if (this.selectVariant === 'single') {
|
836
|
+
const value = this.selectedItems[0]?.value;
|
837
|
+
const element = this.visibleItems.find(el => __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, el)?.getAttribute('data-value') === value);
|
838
|
+
if (element) {
|
839
|
+
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_getItemContent).call(this, element)?.setAttribute(this.ariaSelectionType, 'false');
|
840
|
+
}
|
841
|
+
__classPrivateFieldGet(this, _SelectPanelElement_selectedItems, "f").clear();
|
817
842
|
// Only check, never uncheck here. Single-select mode does not allow unchecking a checked item.
|
818
843
|
if (checked) {
|
819
844
|
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_addSelectedItem).call(this, item);
|
820
845
|
itemContent?.setAttribute(this.ariaSelectionType, 'true');
|
821
846
|
}
|
822
|
-
for (const checkedItem of this.querySelectorAll(`[${this.ariaSelectionType}]`)) {
|
823
|
-
if (checkedItem !== itemContent) {
|
824
|
-
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_removeSelectedItem).call(this, checkedItem);
|
825
|
-
checkedItem.setAttribute(this.ariaSelectionType, 'false');
|
826
|
-
}
|
827
|
-
}
|
828
847
|
__classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_setDynamicLabel).call(this);
|
829
848
|
}
|
830
849
|
else {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@primer/view-components",
|
3
|
-
"version": "0.31.0-rc.
|
3
|
+
"version": "0.31.0-rc.ab0118a4",
|
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
@@ -4336,9 +4336,9 @@
|
|
4336
4336
|
},
|
4337
4337
|
{
|
4338
4338
|
"name": "prefix",
|
4339
|
-
"type": "
|
4339
|
+
"type": "String",
|
4340
4340
|
"default": "`nil`",
|
4341
|
-
"description": "What to prefix the relative
|
4341
|
+
"description": "What to prefix the relative time display with."
|
4342
4342
|
},
|
4343
4343
|
{
|
4344
4344
|
"name": "second",
|
@@ -4390,7 +4390,7 @@
|
|
4390
4390
|
},
|
4391
4391
|
{
|
4392
4392
|
"name": "threshold",
|
4393
|
-
"type": "
|
4393
|
+
"type": "String",
|
4394
4394
|
"default": "`nil`",
|
4395
4395
|
"description": "The threshold, in ISO-8601 'durations' format, at which relative time displays become absolute."
|
4396
4396
|
},
|
@@ -4414,13 +4414,13 @@
|
|
4414
4414
|
},
|
4415
4415
|
{
|
4416
4416
|
"name": "lang",
|
4417
|
-
"type": "
|
4417
|
+
"type": "String",
|
4418
4418
|
"default": "`nil`",
|
4419
4419
|
"description": "The language to use."
|
4420
4420
|
},
|
4421
4421
|
{
|
4422
4422
|
"name": "title",
|
4423
|
-
"type": "
|
4423
|
+
"type": "String",
|
4424
4424
|
"default": "`nil`",
|
4425
4425
|
"description": "Provide a custom title to the element."
|
4426
4426
|
},
|
package/static/info_arch.json
CHANGED
@@ -991,6 +991,12 @@
|
|
991
991
|
"name": "description",
|
992
992
|
"description": "Description content that complements the item's label, with optional test_selector.\nSee `ActionList`'s `description_scheme` argument for layout options.",
|
993
993
|
"parameters": [
|
994
|
+
{
|
995
|
+
"name": "legacy_content",
|
996
|
+
"type": "String",
|
997
|
+
"default": "N/A",
|
998
|
+
"description": "Slot content, provided for backwards-compatibility. Pass a content block instead, or call `with_content`, eg. `component.with_description { \"My description\" }` or `component.with_description.with_content(\"My description\")`."
|
999
|
+
},
|
994
1000
|
{
|
995
1001
|
"name": "test_selector",
|
996
1002
|
"type": "String",
|
@@ -5554,6 +5560,12 @@
|
|
5554
5560
|
"name": "description",
|
5555
5561
|
"description": "Description content that complements the item's label, with optional test_selector.\nSee `ActionList`'s `description_scheme` argument for layout options.",
|
5556
5562
|
"parameters": [
|
5563
|
+
{
|
5564
|
+
"name": "legacy_content",
|
5565
|
+
"type": "String",
|
5566
|
+
"default": "N/A",
|
5567
|
+
"description": "Slot content, provided for backwards-compatibility. Pass a content block instead, or call `with_content`, eg. `component.with_description { \"My description\" }` or `component.with_description.with_content(\"My description\")`."
|
5568
|
+
},
|
5557
5569
|
{
|
5558
5570
|
"name": "test_selector",
|
5559
5571
|
"type": "String",
|
@@ -8093,6 +8105,19 @@
|
|
8093
8105
|
"color-contrast"
|
8094
8106
|
]
|
8095
8107
|
}
|
8108
|
+
},
|
8109
|
+
{
|
8110
|
+
"preview_path": "primer/alpha/select_panel/list_of_links",
|
8111
|
+
"name": "list_of_links",
|
8112
|
+
"snapshot": "interactive",
|
8113
|
+
"skip_rules": {
|
8114
|
+
"wont_fix": [
|
8115
|
+
"region"
|
8116
|
+
],
|
8117
|
+
"will_fix": [
|
8118
|
+
"color-contrast"
|
8119
|
+
]
|
8120
|
+
}
|
8096
8121
|
}
|
8097
8122
|
],
|
8098
8123
|
"subcomponents": [
|
@@ -14699,6 +14724,12 @@
|
|
14699
14724
|
"name": "description",
|
14700
14725
|
"description": "Description content that complements the item's label, with optional test_selector.\nSee `ActionList`'s `description_scheme` argument for layout options.",
|
14701
14726
|
"parameters": [
|
14727
|
+
{
|
14728
|
+
"name": "legacy_content",
|
14729
|
+
"type": "String",
|
14730
|
+
"default": "N/A",
|
14731
|
+
"description": "Slot content, provided for backwards-compatibility. Pass a content block instead, or call `with_content`, eg. `component.with_description { \"My description\" }` or `component.with_description.with_content(\"My description\")`."
|
14732
|
+
},
|
14702
14733
|
{
|
14703
14734
|
"name": "test_selector",
|
14704
14735
|
"type": "String",
|
@@ -15364,9 +15395,9 @@
|
|
15364
15395
|
},
|
15365
15396
|
{
|
15366
15397
|
"name": "prefix",
|
15367
|
-
"type": "
|
15398
|
+
"type": "String",
|
15368
15399
|
"default": "`nil`",
|
15369
|
-
"description": "What to prefix the relative
|
15400
|
+
"description": "What to prefix the relative time display with."
|
15370
15401
|
},
|
15371
15402
|
{
|
15372
15403
|
"name": "second",
|
@@ -15418,7 +15449,7 @@
|
|
15418
15449
|
},
|
15419
15450
|
{
|
15420
15451
|
"name": "threshold",
|
15421
|
-
"type": "
|
15452
|
+
"type": "String",
|
15422
15453
|
"default": "`nil`",
|
15423
15454
|
"description": "The threshold, in ISO-8601 'durations' format, at which relative time displays become absolute."
|
15424
15455
|
},
|
@@ -15442,13 +15473,13 @@
|
|
15442
15473
|
},
|
15443
15474
|
{
|
15444
15475
|
"name": "lang",
|
15445
|
-
"type": "
|
15476
|
+
"type": "String",
|
15446
15477
|
"default": "`nil`",
|
15447
15478
|
"description": "The language to use."
|
15448
15479
|
},
|
15449
15480
|
{
|
15450
15481
|
"name": "title",
|
15451
|
-
"type": "
|
15482
|
+
"type": "String",
|
15452
15483
|
"default": "`nil`",
|
15453
15484
|
"description": "Provide a custom title to the element."
|
15454
15485
|
},
|
package/static/previews.json
CHANGED
@@ -6160,6 +6160,19 @@
|
|
6160
6160
|
"color-contrast"
|
6161
6161
|
]
|
6162
6162
|
}
|
6163
|
+
},
|
6164
|
+
{
|
6165
|
+
"preview_path": "primer/alpha/select_panel/list_of_links",
|
6166
|
+
"name": "list_of_links",
|
6167
|
+
"snapshot": "interactive",
|
6168
|
+
"skip_rules": {
|
6169
|
+
"wont_fix": [
|
6170
|
+
"region"
|
6171
|
+
],
|
6172
|
+
"will_fix": [
|
6173
|
+
"color-contrast"
|
6174
|
+
]
|
6175
|
+
}
|
6163
6176
|
}
|
6164
6177
|
]
|
6165
6178
|
},
|