@brightspace-ui/core 2.187.2 → 2.187.3
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.
@@ -138,7 +138,7 @@ The `d2l-button-icon` element can be used just like the native `button`, for ins
|
|
138
138
|
|--|--|--|
|
139
139
|
| `description` | String | A description to be added to the `button` for accessibility for additional context |
|
140
140
|
| `icon` | String, required | [Preset icon key](../../components/icons#preset-icons) (e.g. `tier1:gear`) |
|
141
|
-
| `text` | String, required | Accessible text for the
|
141
|
+
| `text` | String, required | Accessible text for the button |
|
142
142
|
| `disabled` | Boolean | Disables the button |
|
143
143
|
| `disabledTooltip` | String | Tooltip text when disabled |
|
144
144
|
| `h-align` | String | Possible values are undefined (default) or `text`. If `text`, aligns the button content to the leading edge of text. |
|
@@ -16,17 +16,17 @@ import { DemoPassthroughMixin } from '../../demo/demo-passthrough-mixin.js';
|
|
16
16
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
17
17
|
import { RtlMixin } from '../../../mixins/rtl/rtl-mixin.js';
|
18
18
|
|
19
|
-
const
|
19
|
+
const columns = ['Population', 'Size', 'Elevation'];
|
20
20
|
const thText = ['Additional', 'Placeholder', 'Header', 'Row'];
|
21
21
|
|
22
22
|
const data = () => [
|
23
|
-
{ name: 'Canada',
|
24
|
-
{ name: '
|
25
|
-
{ name: '
|
26
|
-
{ name: '
|
27
|
-
{ name: '
|
28
|
-
{ name: '
|
29
|
-
{ name: 'Japan',
|
23
|
+
{ name: 'Ottawa, Canada', city: 'Ottawa', country: 'Canada', data: { 'population': 994837, 'size': 2790, 'elevation': 70 }, selected: true },
|
24
|
+
{ name: 'Toronto, Canada', city: 'Toronto', country: 'Canada', data: { 'population': 2930000, 'size': 630, 'elevation': 76 }, selected: true },
|
25
|
+
{ name: 'Sydney, Australia', city: 'Sydney', country: 'Australia', data: { 'population': 5312000, 'size': 12368, 'elevation': 3 }, selected: false },
|
26
|
+
{ name: 'Cairo, Egypt', city: 'Cairo', country: 'Egypt', data: { 'population': 9540000, 'size': 3085, 'elevation': 23 }, selected: false },
|
27
|
+
{ name: 'Moscow, Russia', city: 'Moscow', country: 'Russia', data: { 'population': 12712305, 'size': 2511, 'elevation': 124 }, selected: false },
|
28
|
+
{ name: 'London, England', city: 'London', country: 'England', data: { 'population': 8982000, 'size': 1572, 'elevation': 11 }, selected: false },
|
29
|
+
{ name: 'Tokyo, Japan', city: 'Tokyo', country: 'Japan', data: { 'population': 13960000, 'size': 2194, 'elevation': 40 }, selected: false }
|
30
30
|
];
|
31
31
|
|
32
32
|
const formatter = new Intl.NumberFormat('en-US');
|
@@ -67,12 +67,6 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
|
|
67
67
|
}
|
68
68
|
|
69
69
|
render() {
|
70
|
-
const sorted = this._data.sort((a, b) => {
|
71
|
-
if (this._sortDesc) {
|
72
|
-
return b.fruit[this._sortField] - a.fruit[this._sortField];
|
73
|
-
}
|
74
|
-
return a.fruit[this._sortField] - b.fruit[this._sortField];
|
75
|
-
});
|
76
70
|
return html`
|
77
71
|
<d2l-table-wrapper item-count="${ifDefined(this.paging ? 500 : undefined)}">
|
78
72
|
<d2l-table-controls slot="controls" ?no-sticky="${!this.stickyControls}" select-all-pages-allowed>
|
@@ -92,21 +86,24 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
|
|
92
86
|
<thead>
|
93
87
|
<tr>
|
94
88
|
<th scope="col" sticky><d2l-selection-select-all></d2l-selection-select-all></th>
|
95
|
-
|
96
|
-
${
|
89
|
+
${this._renderDoubleSortButton('City', 'Country')}
|
90
|
+
${columns.map(columnHeading => this._renderSortButton(columnHeading))}
|
97
91
|
</tr>
|
98
92
|
</thead>
|
99
93
|
<tbody>
|
100
94
|
<tr class="d2l-table-header">
|
101
95
|
<th scope="col" sticky></th>
|
102
|
-
${
|
103
|
-
${fruits.map(fruit => this._renderSortButton(fruit))}
|
96
|
+
${thText.map(text => html`<th scope="col">${text}</th>`)}
|
104
97
|
</tr>
|
105
98
|
<tr header>
|
106
99
|
<th scope="col" sticky></th>
|
107
|
-
${thText.map(text => html
|
100
|
+
${thText.map(text => html`
|
101
|
+
<th scope="col">
|
102
|
+
${text}
|
103
|
+
</th>
|
104
|
+
`)}
|
108
105
|
</tr>
|
109
|
-
${
|
106
|
+
${this._data.map(row => html`
|
110
107
|
<tr ?selected="${row.selected}" data-name="${row.name}">
|
111
108
|
<th scope="row" sticky>
|
112
109
|
<d2l-selection-input
|
@@ -117,9 +114,10 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
|
|
117
114
|
</d2l-selection-input>
|
118
115
|
</th>
|
119
116
|
<th scope="row">${row.name}</th>
|
120
|
-
${
|
117
|
+
${columns.map(columnHeading => html`<td>${formatter.format(row.data[columnHeading.toLowerCase()])}</td>`)}
|
121
118
|
</tr>
|
122
119
|
`)}
|
120
|
+
|
123
121
|
</tbody>
|
124
122
|
</table>
|
125
123
|
${this.paging ? html`<d2l-pager-load-more slot="pager"
|
@@ -134,7 +132,7 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
|
|
134
132
|
_handlePagerLoadMore(e) {
|
135
133
|
const startIndex = this._data.length + 1;
|
136
134
|
for (let i = 0; i < e.target.pageSize; i++) {
|
137
|
-
this._data.push({ name: `Country ${startIndex + i}`,
|
135
|
+
this._data.push({ name: `Country ${startIndex + i}`, data: { 'population': 26320000, 'size': 6340, 'elevation': 4 }, selected: false });
|
138
136
|
}
|
139
137
|
this.requestUpdate();
|
140
138
|
e.detail.complete();
|
@@ -143,18 +141,50 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
|
|
143
141
|
_handleSort(e) {
|
144
142
|
const field = e.target.innerText.toLowerCase();
|
145
143
|
const desc = e.target.hasAttribute('desc');
|
144
|
+
this._sortDesc = field === this._sortField ? !desc : false; // if sorting on same field then reverse, otherwise sort ascending
|
146
145
|
this._sortField = field;
|
147
|
-
|
146
|
+
|
147
|
+
this._data = this._data.sort((a, b) => {
|
148
|
+
if (this._sortField === 'city' || this._sortField === 'country') {
|
149
|
+
if (this._sortDesc) {
|
150
|
+
if (a[this._sortField] > b[this._sortField]) return -1;
|
151
|
+
if (a[this._sortField] < b[this._sortField]) return 1;
|
152
|
+
} else {
|
153
|
+
if (a[this._sortField] < b[this._sortField]) return -1;
|
154
|
+
if (a[this._sortField] > b[this._sortField]) return 1;
|
155
|
+
}
|
156
|
+
} else {
|
157
|
+
if (this._sortDesc) {
|
158
|
+
return b.data[this._sortField] - a.data[this._sortField];
|
159
|
+
}
|
160
|
+
return a.data[this._sortField] - b.data[this._sortField];
|
161
|
+
}
|
162
|
+
});
|
163
|
+
}
|
164
|
+
|
165
|
+
_renderDoubleSortButton(item1, item2) {
|
166
|
+
return html`
|
167
|
+
<th scope="col">
|
168
|
+
<d2l-table-col-sort-button
|
169
|
+
@click="${this._handleSort}"
|
170
|
+
?desc="${this._sortDesc}"
|
171
|
+
?nosort="${this._sortField !== item1.toLowerCase()}">${item1}</d2l-table-col-sort-button>
|
172
|
+
<d2l-table-col-sort-button
|
173
|
+
@click="${this._handleSort}"
|
174
|
+
?desc="${this._sortDesc}"
|
175
|
+
?nosort="${this._sortField !== item2.toLowerCase()}">${item2}</d2l-table-col-sort-button>
|
176
|
+
</th>
|
177
|
+
`;
|
148
178
|
}
|
149
179
|
|
150
|
-
_renderSortButton(
|
151
|
-
const noSort = this._sortField !==
|
180
|
+
_renderSortButton(item) {
|
181
|
+
const noSort = this._sortField !== item.toLowerCase();
|
152
182
|
return html`
|
153
183
|
<th scope="col">
|
154
184
|
<d2l-table-col-sort-button
|
155
185
|
@click="${this._handleSort}"
|
156
186
|
?desc="${this._sortDesc}"
|
157
|
-
?nosort="${noSort}">${
|
187
|
+
?nosort="${noSort}">${item}</d2l-table-col-sort-button>
|
158
188
|
</th>
|
159
189
|
`;
|
160
190
|
}
|
@@ -111,6 +111,16 @@ export const TagListItemMixin = superclass => class extends LocalizeCoreElement(
|
|
111
111
|
:host(:focus-within:hover) .tag-list-item-container {
|
112
112
|
box-shadow: inset 0 0 0 2px var(--d2l-color-celestine), 0 2px 4px rgba(0, 0, 0, 0.03);
|
113
113
|
}
|
114
|
+
@supports selector(:has(a, b)) {
|
115
|
+
:host(:focus-within) .tag-list-item-container,
|
116
|
+
:host(:focus-within:hover) .tag-list-item-container {
|
117
|
+
box-shadow: inset 0 0 0 1px var(--d2l-color-gypsum), 0 2px 4px rgba(0, 0, 0, 0.03);
|
118
|
+
}
|
119
|
+
:host(:hover) .tag-list-item-container:has(:focus-visible),
|
120
|
+
.tag-list-item-container:has(:focus-visible) {
|
121
|
+
box-shadow: inset 0 0 0 2px var(--d2l-color-celestine), 0 2px 4px rgba(0, 0, 0, 0.03) !important;
|
122
|
+
}
|
123
|
+
}
|
114
124
|
:host(:hover) .tag-list-item-container,
|
115
125
|
:host(:focus-within) .tag-list-item-container {
|
116
126
|
background-color: var(--d2l-color-sylvite);
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@brightspace-ui/core",
|
3
|
-
"version": "2.187.
|
3
|
+
"version": "2.187.3",
|
4
4
|
"description": "A collection of accessible, free, open-source web components for building Brightspace applications",
|
5
5
|
"type": "module",
|
6
6
|
"repository": "https://github.com/BrightspaceUI/core.git",
|