@brightspace-ui/core 2.108.0 → 2.110.0
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/components/html-block/README.md +11 -36
- package/components/html-block/demo/html-block-code.html +1 -3
- package/components/html-block/demo/html-block.html +238 -364
- package/components/html-block/html-block.js +18 -73
- package/components/list/list.js +1 -2
- package/components/paging/pageable-mixin.js +5 -0
- package/components/paging/pageable-subscriber-mixin.js +1 -1
- package/components/paging/pager-load-more.js +2 -2
- package/components/selection/selection-controls.js +18 -7
- package/components/table/demo/table-test.js +10 -8
- package/components/table/table-controls.js +6 -14
- package/components/table/table-wrapper.js +17 -1
- package/custom-elements.json +98 -6
- package/lang/ar.js +2 -1
- package/lang/cy.js +2 -1
- package/lang/da.js +2 -1
- package/lang/de.js +2 -1
- package/lang/en-gb.js +2 -1
- package/lang/en.js +2 -1
- package/lang/es-es.js +2 -1
- package/lang/es.js +2 -1
- package/lang/fr-fr.js +2 -1
- package/lang/fr.js +2 -1
- package/lang/hi.js +2 -1
- package/lang/ja.js +2 -1
- package/lang/ko.js +2 -1
- package/lang/nl.js +2 -1
- package/lang/pt.js +2 -1
- package/lang/sv.js +2 -1
- package/lang/tr.js +2 -1
- package/lang/zh-cn.js +2 -1
- package/lang/zh-tw.js +2 -1
- package/package.json +1 -1
|
@@ -134,7 +134,6 @@ const getRenderers = async() => {
|
|
|
134
134
|
|
|
135
135
|
/**
|
|
136
136
|
* A component for displaying user-authored HTML.
|
|
137
|
-
* @slot - Provide your user-authored HTML
|
|
138
137
|
*/
|
|
139
138
|
class HtmlBlock extends LitElement {
|
|
140
139
|
|
|
@@ -194,7 +193,6 @@ class HtmlBlock extends LitElement {
|
|
|
194
193
|
this.html = '';
|
|
195
194
|
this.inline = false;
|
|
196
195
|
this.noDeferredRendering = false;
|
|
197
|
-
this._hasSlottedContent = false;
|
|
198
196
|
|
|
199
197
|
this._contextObserverControllerResolve = undefined;
|
|
200
198
|
this._contextObserverControllerInitialized = new Promise(resolve => {
|
|
@@ -210,33 +208,14 @@ class HtmlBlock extends LitElement {
|
|
|
210
208
|
});
|
|
211
209
|
}
|
|
212
210
|
|
|
213
|
-
connectedCallback() {
|
|
214
|
-
super.connectedCallback();
|
|
215
|
-
|
|
216
|
-
if (!this._contentObserver || this.noDeferredRendering) return;
|
|
217
|
-
|
|
218
|
-
const slot = this.shadowRoot.querySelector('slot');
|
|
219
|
-
if (slot) {
|
|
220
|
-
const slottedNodes = slot.assignedNodes({ flatten: true });
|
|
221
|
-
this._hasSlottedContent = this._hasSlottedElements(slottedNodes);
|
|
222
|
-
|
|
223
|
-
slottedNodes.forEach(
|
|
224
|
-
node => this._contentObserver.observe(node, { attributes: true, childList: true, subtree: true })
|
|
225
|
-
);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
disconnectedCallback() {
|
|
230
|
-
super.disconnectedCallback();
|
|
231
|
-
if (this._contentObserver) this._contentObserver.disconnect();
|
|
232
|
-
}
|
|
233
|
-
|
|
234
211
|
firstUpdated(changedProperties) {
|
|
235
212
|
super.firstUpdated(changedProperties);
|
|
236
213
|
this._updateContextKeys();
|
|
237
214
|
}
|
|
238
215
|
|
|
239
216
|
render() {
|
|
217
|
+
this._validateHtml();
|
|
218
|
+
|
|
240
219
|
const renderContainerClasses = {
|
|
241
220
|
'd2l-html-block-rendered': true,
|
|
242
221
|
'd2l-html-block-compact': this.compact
|
|
@@ -244,17 +223,17 @@ class HtmlBlock extends LitElement {
|
|
|
244
223
|
|
|
245
224
|
return html`
|
|
246
225
|
<div class="${classMap(renderContainerClasses)}"></div>
|
|
247
|
-
|
|
226
|
+
${this.noDeferredRendering ? html`<slot @slotchange="${this._handleSlotChange}"></slot>` : ''}
|
|
248
227
|
`;
|
|
249
228
|
}
|
|
250
229
|
|
|
251
230
|
async updated(changedProperties) {
|
|
252
231
|
super.updated(changedProperties);
|
|
253
|
-
if (changedProperties.has('html') && this.html !== undefined && this.html !== null && !this.
|
|
232
|
+
if (changedProperties.has('html') && this.html !== undefined && this.html !== null && !this.noDeferredRendering) {
|
|
254
233
|
await this._updateRenderContainer();
|
|
255
234
|
}
|
|
256
235
|
if (await this._contextChanged()) {
|
|
257
|
-
if (this.
|
|
236
|
+
if (this.noDeferredRendering) this._renderInline();
|
|
258
237
|
else if (this.html !== undefined && this.html !== null) {
|
|
259
238
|
await this._updateRenderContainer();
|
|
260
239
|
}
|
|
@@ -279,22 +258,8 @@ class HtmlBlock extends LitElement {
|
|
|
279
258
|
}
|
|
280
259
|
|
|
281
260
|
async _handleSlotChange(e) {
|
|
282
|
-
if (!e.target || !this.shadowRoot) return;
|
|
283
|
-
|
|
284
|
-
const slottedNodes = slot.assignedNodes({ flatten: true });
|
|
285
|
-
|
|
286
|
-
if (!this.html && this._hasSlottedElements(slottedNodes)) {
|
|
287
|
-
this._hasSlottedContent = true;
|
|
288
|
-
await this._render(e.target);
|
|
289
|
-
} else {
|
|
290
|
-
this._hasSlottedContent = false;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
_hasSlottedElements(slottedNodes) {
|
|
295
|
-
if (!slottedNodes || slottedNodes.length === 0) return false;
|
|
296
|
-
if (slottedNodes.filter(node => node.nodeType === Node.ELEMENT_NODE || node.textContent).length === 0) return false;
|
|
297
|
-
return true;
|
|
261
|
+
if (!e.target || !this.shadowRoot || !this.noDeferredRendering) return;
|
|
262
|
+
await this._renderInline(e.target);
|
|
298
263
|
}
|
|
299
264
|
|
|
300
265
|
async _processRenderers(elem) {
|
|
@@ -316,11 +281,6 @@ class HtmlBlock extends LitElement {
|
|
|
316
281
|
}
|
|
317
282
|
}
|
|
318
283
|
|
|
319
|
-
async _render(slot) {
|
|
320
|
-
if (this.noDeferredRendering) await this._renderInline(slot);
|
|
321
|
-
else this._stamp(slot);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
284
|
async _renderInline(slot) {
|
|
325
285
|
if (!this.shadowRoot) return;
|
|
326
286
|
if (!slot) slot = this.shadowRoot.querySelector('slot');
|
|
@@ -332,32 +292,6 @@ class HtmlBlock extends LitElement {
|
|
|
332
292
|
await this._processRenderers(noDeferredRenderingContainer);
|
|
333
293
|
}
|
|
334
294
|
|
|
335
|
-
_stamp(slot) {
|
|
336
|
-
const renderContainer = this.shadowRoot.querySelector('.d2l-html-block-rendered');
|
|
337
|
-
|
|
338
|
-
const stampHTML = async nodes => {
|
|
339
|
-
renderContainer.innerHTML = '';
|
|
340
|
-
if (!nodes || nodes.length === 0) return;
|
|
341
|
-
|
|
342
|
-
// Nodes must be cloned into the render container before processing, as
|
|
343
|
-
// some renderers require connected nodes (e.g. MathJax).
|
|
344
|
-
nodes.forEach(node => renderContainer.appendChild(node.cloneNode(true)));
|
|
345
|
-
await this._processRenderers(renderContainer);
|
|
346
|
-
};
|
|
347
|
-
|
|
348
|
-
if (this._contentObserver) this._contentObserver.disconnect();
|
|
349
|
-
|
|
350
|
-
if (!slot) slot = this.shadowRoot.querySelector('slot');
|
|
351
|
-
const slottedNodes = slot.assignedNodes({ flatten: true });
|
|
352
|
-
|
|
353
|
-
this._contentObserver = new MutationObserver(() => stampHTML(slottedNodes));
|
|
354
|
-
slottedNodes.forEach(
|
|
355
|
-
node => this._contentObserver.observe(node, { attributes: true, childList: true, subtree: true })
|
|
356
|
-
);
|
|
357
|
-
|
|
358
|
-
stampHTML(slottedNodes);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
295
|
_updateContextKeys() {
|
|
362
296
|
if (!this._contextObserverController) return;
|
|
363
297
|
if (!this._contextKeys) this._contextKeys = new Map();
|
|
@@ -373,6 +307,17 @@ class HtmlBlock extends LitElement {
|
|
|
373
307
|
await this._processRenderers(renderContainer);
|
|
374
308
|
}
|
|
375
309
|
|
|
310
|
+
_validateHtml() {
|
|
311
|
+
if (this._validatingHtmlTimeout) clearTimeout(this._validatingHtmlTimeout);
|
|
312
|
+
|
|
313
|
+
this._validatingHtmlTimeout = setTimeout(() => {
|
|
314
|
+
this._validatingHtmlTimeout = undefined;
|
|
315
|
+
if (this.html && this.noDeferredRendering) {
|
|
316
|
+
throw new Error('<d2l-html-block>: "html" attribute is not supported with "no-deferred-rendering".');
|
|
317
|
+
}
|
|
318
|
+
}, 3000);
|
|
319
|
+
}
|
|
320
|
+
|
|
376
321
|
}
|
|
377
322
|
|
|
378
323
|
customElements.define('d2l-html-block', HtmlBlock);
|
package/components/list/list.js
CHANGED
|
@@ -183,8 +183,7 @@ class List extends PageableMixin(SelectionMixin(LitElement)) {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
_getItemByIndex(index) {
|
|
186
|
-
const items = this.getItems();
|
|
187
|
-
if (index > items.length - 1) return;
|
|
186
|
+
const items = this.getItems() || [];
|
|
188
187
|
return items[index];
|
|
189
188
|
}
|
|
190
189
|
|
|
@@ -16,6 +16,7 @@ export const PageableMixin = superclass => class extends CollectionMixin(supercl
|
|
|
16
16
|
this._itemShowingCount = 0;
|
|
17
17
|
this._pageableSubscriberRegistry = new SubscriberRegistryController(this, 'pageable', {
|
|
18
18
|
onSubscribe: this._updatePageableSubscriber.bind(this),
|
|
19
|
+
onUnsubscribe: this._clearPageableSubscriber.bind(this),
|
|
19
20
|
updateSubscribers: this._updatePageableSubscribers.bind(this)
|
|
20
21
|
});
|
|
21
22
|
}
|
|
@@ -33,6 +34,10 @@ export const PageableMixin = superclass => class extends CollectionMixin(supercl
|
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
_clearPageableSubscriber(subscriber) {
|
|
38
|
+
subscriber._pageableInfo = null;
|
|
39
|
+
}
|
|
40
|
+
|
|
36
41
|
/* must be implemented by consumer */
|
|
37
42
|
_getItemByIndex(index) { } // eslint-disable-line no-unused-vars
|
|
38
43
|
|
|
@@ -16,7 +16,7 @@ export const PageableSubscriberMixin = superclass => class extends superclass {
|
|
|
16
16
|
constructor() {
|
|
17
17
|
super();
|
|
18
18
|
|
|
19
|
-
this._pageableInfo =
|
|
19
|
+
this._pageableInfo = null;
|
|
20
20
|
this._pageableEventSubscriber = new EventSubscriberController(this, 'pageable');
|
|
21
21
|
this._pageableIdSubscriber = new IdSubscriberController(this, 'pageable', { idPropertyName: 'pageableFor' });
|
|
22
22
|
}
|
|
@@ -86,7 +86,7 @@ class LoadMore extends PageableSubscriberMixin(FocusMixin(LocalizeCoreElement(Li
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
render() {
|
|
89
|
-
if (!this.hasMore) return nothing;
|
|
89
|
+
if (!this.hasMore || !this._pageableInfo) return nothing;
|
|
90
90
|
const { itemCount, itemShowingCount } = this._pageableInfo;
|
|
91
91
|
|
|
92
92
|
return html`
|
|
@@ -101,7 +101,7 @@ class LoadMore extends PageableSubscriberMixin(FocusMixin(LocalizeCoreElement(Li
|
|
|
101
101
|
${itemCount !== null ? html`
|
|
102
102
|
<span class="d2l-offscreen">${getSeparator({ nonBreaking: true })}</span>
|
|
103
103
|
<span class="separator"></span>
|
|
104
|
-
<span class="info">${this.localize('components.
|
|
104
|
+
<span class="info">${this.localize('components.pageable.info-with-total', { countFormatted: formatNumber(itemShowingCount), totalCount: itemCount, totalCountFormatted: formatNumber(itemCount) })}</span>
|
|
105
105
|
` : nothing}
|
|
106
106
|
`}
|
|
107
107
|
</button>
|
|
@@ -4,8 +4,10 @@ import './selection-select-all-pages.js';
|
|
|
4
4
|
import './selection-summary.js';
|
|
5
5
|
import { css, html, LitElement, nothing } from 'lit';
|
|
6
6
|
import { classMap } from 'lit/directives/class-map.js';
|
|
7
|
+
import { formatNumber } from '@brightspace-ui/intl/lib/number.js';
|
|
7
8
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
8
9
|
import { LocalizeCoreElement } from '../../helpers/localize-core-element.js';
|
|
10
|
+
import { PageableSubscriberMixin } from '../paging/pageable-subscriber-mixin.js';
|
|
9
11
|
import { RtlMixin } from '../../mixins/rtl/rtl-mixin.js';
|
|
10
12
|
import { SelectionObserverMixin } from './selection-observer-mixin.js';
|
|
11
13
|
|
|
@@ -13,7 +15,7 @@ import { SelectionObserverMixin } from './selection-observer-mixin.js';
|
|
|
13
15
|
* Controls for selection components (e.g. list, table-wrapper) containing select-all, etc.
|
|
14
16
|
* @slot - Responsive container using `d2l-overflow-group` for `d2l-selection-action` elements
|
|
15
17
|
*/
|
|
16
|
-
export class SelectionControls extends SelectionObserverMixin(RtlMixin(LocalizeCoreElement(LitElement))) {
|
|
18
|
+
export class SelectionControls extends PageableSubscriberMixin(SelectionObserverMixin(RtlMixin(LocalizeCoreElement(LitElement)))) {
|
|
17
19
|
|
|
18
20
|
static get properties() {
|
|
19
21
|
return {
|
|
@@ -33,6 +35,7 @@ export class SelectionControls extends SelectionObserverMixin(RtlMixin(LocalizeC
|
|
|
33
35
|
*/
|
|
34
36
|
selectAllPagesAllowed: { type: Boolean, attribute: 'select-all-pages-allowed' },
|
|
35
37
|
_hasActions: { state: true },
|
|
38
|
+
_noSelectionText: { state: true },
|
|
36
39
|
_scrolled: { type: Boolean, reflect: true }
|
|
37
40
|
};
|
|
38
41
|
}
|
|
@@ -147,6 +150,18 @@ export class SelectionControls extends SelectionObserverMixin(RtlMixin(LocalizeC
|
|
|
147
150
|
if (changedProperties.has('noSticky')) {
|
|
148
151
|
this._stickyObserverUpdate();
|
|
149
152
|
}
|
|
153
|
+
if (changedProperties.has('_pageableInfo')) {
|
|
154
|
+
this._noSelectionText = this._getNoSelectionText();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
_getNoSelectionText() {
|
|
159
|
+
if (!this._pageableInfo) return null;
|
|
160
|
+
const { itemShowingCount: count, itemCount: totalCount } = this._pageableInfo;
|
|
161
|
+
|
|
162
|
+
return (totalCount === null || count === totalCount)
|
|
163
|
+
? this.localize('components.pageable.info', { count, countFormatted: formatNumber(count) })
|
|
164
|
+
: this.localize('components.pageable.info-with-total', { totalCount, countFormatted: formatNumber(count), totalCountFormatted: formatNumber(totalCount) });
|
|
150
165
|
}
|
|
151
166
|
|
|
152
167
|
_getSelectionControlsContainerClasses() {
|
|
@@ -166,12 +181,8 @@ export class SelectionControls extends SelectionObserverMixin(RtlMixin(LocalizeC
|
|
|
166
181
|
|
|
167
182
|
_renderSelection() {
|
|
168
183
|
return html`
|
|
169
|
-
|
|
170
|
-
<d2l-selection-summary
|
|
171
|
-
aria-hidden="true"
|
|
172
|
-
no-selection-text="${this.localize('components.selection.select-all')}"
|
|
173
|
-
>
|
|
174
|
-
</d2l-selection-summary>
|
|
184
|
+
${!this._noSelectAll ? html`<d2l-selection-select-all></d2l-selection-select-all>` : nothing}
|
|
185
|
+
<d2l-selection-summary no-selection-text="${this._noSelectionText}"></d2l-selection-summary>
|
|
175
186
|
${this.selectAllPagesAllowed ? html`<d2l-selection-select-all-pages></d2l-selection-select-all-pages>` : nothing}
|
|
176
187
|
`;
|
|
177
188
|
}
|
|
@@ -65,8 +65,8 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
|
|
|
65
65
|
return a.fruit[this._sortField] - b.fruit[this._sortField];
|
|
66
66
|
});
|
|
67
67
|
return html`
|
|
68
|
-
<d2l-table-wrapper>
|
|
69
|
-
<d2l-table-controls slot="controls" ?no-sticky="${!this.stickyControls}">
|
|
68
|
+
<d2l-table-wrapper item-count="500">
|
|
69
|
+
<d2l-table-controls slot="controls" ?no-sticky="${!this.stickyControls}" select-all-pages-allowed>
|
|
70
70
|
<d2l-selection-action
|
|
71
71
|
text="Sticky controls"
|
|
72
72
|
icon="tier1:${this.stickyControls ? 'check' : 'close-default'}"
|
|
@@ -86,14 +86,16 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
|
|
|
86
86
|
<th scope="col">Country</th>
|
|
87
87
|
${fruits.map(fruit => this._renderSortButton(fruit))}
|
|
88
88
|
</tr>
|
|
89
|
-
${[1, 2].map(() => html`
|
|
90
|
-
<tr>
|
|
91
|
-
<th scope="col" sticky></th>
|
|
92
|
-
${thText.map(text => html`<th scope="col">${text}</th>`)}
|
|
93
|
-
</tr>
|
|
94
|
-
`)}
|
|
95
89
|
</thead>
|
|
96
90
|
<tbody>
|
|
91
|
+
<tr class="d2l-table-header">
|
|
92
|
+
<th scope="col" sticky></th>
|
|
93
|
+
${thText.map(text => html`<th scope="col">${text}</th>`)}
|
|
94
|
+
</tr>
|
|
95
|
+
<tr header>
|
|
96
|
+
<th scope="col" sticky></th>
|
|
97
|
+
${thText.map(text => html`<th scope="col">${text}</th>`)}
|
|
98
|
+
</tr>
|
|
97
99
|
${sorted.map(row => html`
|
|
98
100
|
<tr ?selected="${row.selected}" data-name="${row.name}">
|
|
99
101
|
<th scope="row" sticky>
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import '
|
|
2
|
-
import '../selection/selection-summary.js';
|
|
3
|
-
import { css, html, nothing } from 'lit';
|
|
1
|
+
import { css } from 'lit';
|
|
4
2
|
import { SelectionControls } from '../selection/selection-controls.js';
|
|
5
3
|
|
|
6
4
|
/**
|
|
@@ -30,19 +28,13 @@ class TableControls extends SelectionControls {
|
|
|
30
28
|
`];
|
|
31
29
|
}
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
this._noSelectAll = true;
|
|
35
34
|
}
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
return
|
|
39
|
-
<d2l-selection-summary
|
|
40
|
-
aria-hidden="true"
|
|
41
|
-
no-selection-text="${this.localize('components.selection.select-all')}"
|
|
42
|
-
>
|
|
43
|
-
</d2l-selection-summary>
|
|
44
|
-
${this.selectAllPagesAllowed ? html`<d2l-selection-select-all-pages></d2l-selection-select-all-pages>` : nothing}
|
|
45
|
-
`;
|
|
36
|
+
_getSelectionControlsLabel() {
|
|
37
|
+
return this.localize('components.table-controls.label');
|
|
46
38
|
}
|
|
47
39
|
}
|
|
48
40
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import '../colors/colors.js';
|
|
2
2
|
import '../scroll-wrapper/scroll-wrapper.js';
|
|
3
3
|
import { css, html, LitElement, nothing } from 'lit';
|
|
4
|
+
import { PageableMixin } from '../paging/pageable-mixin.js';
|
|
4
5
|
import { RtlMixin } from '../../mixins/rtl/rtl-mixin.js';
|
|
5
6
|
import { SelectionMixin } from '../selection/selection-mixin.js';
|
|
6
7
|
|
|
@@ -166,7 +167,7 @@ export const tableStyles = css`
|
|
|
166
167
|
* @slot - Content to wrap
|
|
167
168
|
* @slot controls - Slot for `d2l-table-controls` to be rendered above the table
|
|
168
169
|
*/
|
|
169
|
-
export class TableWrapper extends RtlMixin(SelectionMixin(LitElement)) {
|
|
170
|
+
export class TableWrapper extends RtlMixin(PageableMixin(SelectionMixin(LitElement))) {
|
|
170
171
|
|
|
171
172
|
static get properties() {
|
|
172
173
|
return {
|
|
@@ -282,6 +283,8 @@ export class TableWrapper extends RtlMixin(SelectionMixin(LitElement)) {
|
|
|
282
283
|
}
|
|
283
284
|
|
|
284
285
|
updated(changedProperties) {
|
|
286
|
+
super.updated(changedProperties);
|
|
287
|
+
|
|
285
288
|
// hack: grades/groups/outcomes in the LE use this CSS class on the
|
|
286
289
|
// body to apply special CSS to the page when tables are sticky
|
|
287
290
|
// Ideally they should be adding this class to the body.
|
|
@@ -335,6 +338,18 @@ export class TableWrapper extends RtlMixin(SelectionMixin(LitElement)) {
|
|
|
335
338
|
});
|
|
336
339
|
}
|
|
337
340
|
|
|
341
|
+
_getItemByIndex(index) {
|
|
342
|
+
return this._getItems()[index];
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
_getItems() {
|
|
346
|
+
return this._table?.querySelectorAll(':not(thead) > tr:not(.d2l-table-header):not([header])') || [];
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
_getItemShowingCount() {
|
|
350
|
+
return this._getItems().length;
|
|
351
|
+
}
|
|
352
|
+
|
|
338
353
|
async _handleControlsChange() {
|
|
339
354
|
if (this._controls) {
|
|
340
355
|
await this._controls.updateComplete;
|
|
@@ -404,6 +419,7 @@ export class TableWrapper extends RtlMixin(SelectionMixin(LitElement)) {
|
|
|
404
419
|
async _handleTableChange() {
|
|
405
420
|
await new Promise(resolve => requestAnimationFrame(resolve));
|
|
406
421
|
|
|
422
|
+
this._updateItemShowingCount();
|
|
407
423
|
this._applyClassNames();
|
|
408
424
|
this._updateStickyTops();
|
|
409
425
|
}
|
package/custom-elements.json
CHANGED
|
@@ -4380,12 +4380,6 @@
|
|
|
4380
4380
|
"type": "Boolean",
|
|
4381
4381
|
"default": "false"
|
|
4382
4382
|
}
|
|
4383
|
-
],
|
|
4384
|
-
"slots": [
|
|
4385
|
-
{
|
|
4386
|
-
"name": "",
|
|
4387
|
-
"description": "Provide your user-authored HTML"
|
|
4388
|
-
}
|
|
4389
4383
|
]
|
|
4390
4384
|
},
|
|
4391
4385
|
{
|
|
@@ -8038,6 +8032,11 @@
|
|
|
8038
8032
|
"type": "boolean",
|
|
8039
8033
|
"default": "false"
|
|
8040
8034
|
},
|
|
8035
|
+
{
|
|
8036
|
+
"name": "pageable-for",
|
|
8037
|
+
"description": "Id of the `PageableMixin` component this component wants to observe (if not located within that component)",
|
|
8038
|
+
"type": "string"
|
|
8039
|
+
},
|
|
8041
8040
|
{
|
|
8042
8041
|
"name": "selection-for",
|
|
8043
8042
|
"description": "Id of the `SelectionMixin` component this component wants to observe (if not located within that component)",
|
|
@@ -8066,6 +8065,12 @@
|
|
|
8066
8065
|
"type": "boolean",
|
|
8067
8066
|
"default": "false"
|
|
8068
8067
|
},
|
|
8068
|
+
{
|
|
8069
|
+
"name": "pageableFor",
|
|
8070
|
+
"attribute": "pageable-for",
|
|
8071
|
+
"description": "Id of the `PageableMixin` component this component wants to observe (if not located within that component)",
|
|
8072
|
+
"type": "string"
|
|
8073
|
+
},
|
|
8069
8074
|
{
|
|
8070
8075
|
"name": "selectionFor",
|
|
8071
8076
|
"attribute": "selection-for",
|
|
@@ -10590,6 +10595,11 @@
|
|
|
10590
10595
|
"type": "boolean",
|
|
10591
10596
|
"default": "false"
|
|
10592
10597
|
},
|
|
10598
|
+
{
|
|
10599
|
+
"name": "pageable-for",
|
|
10600
|
+
"description": "Id of the `PageableMixin` component this component wants to observe (if not located within that component)",
|
|
10601
|
+
"type": "string"
|
|
10602
|
+
},
|
|
10593
10603
|
{
|
|
10594
10604
|
"name": "selection-for",
|
|
10595
10605
|
"description": "Id of the `SelectionMixin` component this component wants to observe (if not located within that component)",
|
|
@@ -10618,6 +10628,12 @@
|
|
|
10618
10628
|
"type": "boolean",
|
|
10619
10629
|
"default": "false"
|
|
10620
10630
|
},
|
|
10631
|
+
{
|
|
10632
|
+
"name": "pageableFor",
|
|
10633
|
+
"attribute": "pageable-for",
|
|
10634
|
+
"description": "Id of the `PageableMixin` component this component wants to observe (if not located within that component)",
|
|
10635
|
+
"type": "string"
|
|
10636
|
+
},
|
|
10621
10637
|
{
|
|
10622
10638
|
"name": "selectionFor",
|
|
10623
10639
|
"attribute": "selection-for",
|
|
@@ -10947,6 +10963,49 @@
|
|
|
10947
10963
|
}
|
|
10948
10964
|
]
|
|
10949
10965
|
},
|
|
10966
|
+
{
|
|
10967
|
+
"name": "d2l-test-pageable",
|
|
10968
|
+
"path": "./components/selection/test/selection-component.js",
|
|
10969
|
+
"attributes": [
|
|
10970
|
+
{
|
|
10971
|
+
"name": "item-count",
|
|
10972
|
+
"description": "Total number of items. If not specified, features like select-all-pages will be disabled.",
|
|
10973
|
+
"type": "number"
|
|
10974
|
+
},
|
|
10975
|
+
{
|
|
10976
|
+
"name": "selection-count-override",
|
|
10977
|
+
"description": "ADVANCED: Temporary optional parameter used to override existing count. Will be removed soon, use with caution.",
|
|
10978
|
+
"type": "number"
|
|
10979
|
+
},
|
|
10980
|
+
{
|
|
10981
|
+
"name": "selection-single",
|
|
10982
|
+
"description": "Whether to render with single selection behaviour. If `selection-single` is specified, the nested `d2l-selection-input` elements will render radios instead of checkboxes, and the selection component will maintain a single selected item.",
|
|
10983
|
+
"type": "boolean",
|
|
10984
|
+
"default": "false"
|
|
10985
|
+
}
|
|
10986
|
+
],
|
|
10987
|
+
"properties": [
|
|
10988
|
+
{
|
|
10989
|
+
"name": "itemCount",
|
|
10990
|
+
"attribute": "item-count",
|
|
10991
|
+
"description": "Total number of items. If not specified, features like select-all-pages will be disabled.",
|
|
10992
|
+
"type": "number"
|
|
10993
|
+
},
|
|
10994
|
+
{
|
|
10995
|
+
"name": "selectionCountOverride",
|
|
10996
|
+
"attribute": "selection-count-override",
|
|
10997
|
+
"description": "ADVANCED: Temporary optional parameter used to override existing count. Will be removed soon, use with caution.",
|
|
10998
|
+
"type": "number"
|
|
10999
|
+
},
|
|
11000
|
+
{
|
|
11001
|
+
"name": "selectionSingle",
|
|
11002
|
+
"attribute": "selection-single",
|
|
11003
|
+
"description": "Whether to render with single selection behaviour. If `selection-single` is specified, the nested `d2l-selection-input` elements will render radios instead of checkboxes, and the selection component will maintain a single selected item.",
|
|
11004
|
+
"type": "boolean",
|
|
11005
|
+
"default": "false"
|
|
11006
|
+
}
|
|
11007
|
+
]
|
|
11008
|
+
},
|
|
10950
11009
|
{
|
|
10951
11010
|
"name": "d2l-test-skeleton-box",
|
|
10952
11011
|
"path": "./components/skeleton/demo/skeleton-test-box.js",
|
|
@@ -11380,6 +11439,11 @@
|
|
|
11380
11439
|
"type": "'default'|'light'",
|
|
11381
11440
|
"default": "\"default\""
|
|
11382
11441
|
},
|
|
11442
|
+
{
|
|
11443
|
+
"name": "item-count",
|
|
11444
|
+
"description": "Total number of items. If not specified, features like select-all-pages will be disabled.",
|
|
11445
|
+
"type": "number"
|
|
11446
|
+
},
|
|
11383
11447
|
{
|
|
11384
11448
|
"name": "selection-count-override",
|
|
11385
11449
|
"description": "ADVANCED: Temporary optional parameter used to override existing count. Will be removed soon, use with caution.",
|
|
@@ -11424,6 +11488,12 @@
|
|
|
11424
11488
|
"type": "'default'|'light'",
|
|
11425
11489
|
"default": "\"default\""
|
|
11426
11490
|
},
|
|
11491
|
+
{
|
|
11492
|
+
"name": "itemCount",
|
|
11493
|
+
"attribute": "item-count",
|
|
11494
|
+
"description": "Total number of items. If not specified, features like select-all-pages will be disabled.",
|
|
11495
|
+
"type": "number"
|
|
11496
|
+
},
|
|
11427
11497
|
{
|
|
11428
11498
|
"name": "selectionCountOverride",
|
|
11429
11499
|
"attribute": "selection-count-override",
|
|
@@ -11513,6 +11583,11 @@
|
|
|
11513
11583
|
"type": "boolean",
|
|
11514
11584
|
"default": "false"
|
|
11515
11585
|
},
|
|
11586
|
+
{
|
|
11587
|
+
"name": "pageable-for",
|
|
11588
|
+
"description": "Id of the `PageableMixin` component this component wants to observe (if not located within that component)",
|
|
11589
|
+
"type": "string"
|
|
11590
|
+
},
|
|
11516
11591
|
{
|
|
11517
11592
|
"name": "selection-for",
|
|
11518
11593
|
"description": "Id of the `SelectionMixin` component this component wants to observe (if not located within that component)",
|
|
@@ -11541,6 +11616,12 @@
|
|
|
11541
11616
|
"type": "boolean",
|
|
11542
11617
|
"default": "false"
|
|
11543
11618
|
},
|
|
11619
|
+
{
|
|
11620
|
+
"name": "pageableFor",
|
|
11621
|
+
"attribute": "pageable-for",
|
|
11622
|
+
"description": "Id of the `PageableMixin` component this component wants to observe (if not located within that component)",
|
|
11623
|
+
"type": "string"
|
|
11624
|
+
},
|
|
11544
11625
|
{
|
|
11545
11626
|
"name": "selectionFor",
|
|
11546
11627
|
"attribute": "selection-for",
|
|
@@ -11590,6 +11671,11 @@
|
|
|
11590
11671
|
"type": "'default'|'light'",
|
|
11591
11672
|
"default": "\"default\""
|
|
11592
11673
|
},
|
|
11674
|
+
{
|
|
11675
|
+
"name": "item-count",
|
|
11676
|
+
"description": "Total number of items. If not specified, features like select-all-pages will be disabled.",
|
|
11677
|
+
"type": "number"
|
|
11678
|
+
},
|
|
11593
11679
|
{
|
|
11594
11680
|
"name": "selection-count-override",
|
|
11595
11681
|
"description": "ADVANCED: Temporary optional parameter used to override existing count. Will be removed soon, use with caution.",
|
|
@@ -11624,6 +11710,12 @@
|
|
|
11624
11710
|
"type": "'default'|'light'",
|
|
11625
11711
|
"default": "\"default\""
|
|
11626
11712
|
},
|
|
11713
|
+
{
|
|
11714
|
+
"name": "itemCount",
|
|
11715
|
+
"attribute": "item-count",
|
|
11716
|
+
"description": "Total number of items. If not specified, features like select-all-pages will be disabled.",
|
|
11717
|
+
"type": "number"
|
|
11718
|
+
},
|
|
11627
11719
|
{
|
|
11628
11720
|
"name": "selectionCountOverride",
|
|
11629
11721
|
"attribute": "selection-count-override",
|
package/lang/ar.js
CHANGED
|
@@ -94,7 +94,8 @@ export default {
|
|
|
94
94
|
"components.object-property-list.item-placeholder-text": "عنصر نائب",
|
|
95
95
|
"components.overflow-group.moreActions": "مزيد من الإجراءات",
|
|
96
96
|
"components.pager-load-more.action": "تحميل {count} إضافي",
|
|
97
|
-
"components.
|
|
97
|
+
"components.pageable.info": "{count, plural, one {{countFormatted} item} other {{countFormatted} items}}",
|
|
98
|
+
"components.pageable.info-with-total": "{totalCount, plural, one {{countFormatted} من أصل {totalCountFormatted} من العناصر} other {{countFormatted} من أصل {totalCountFormatted} من العناصر}}",
|
|
98
99
|
"components.pager-load-more.status-loading": "تحميل المزيد من المواد",
|
|
99
100
|
"components.selection.action-hint": "حدد مادة لتنفيذ هذا الإجراء.",
|
|
100
101
|
"components.selection.select-all": "تحديد الكل",
|
package/lang/cy.js
CHANGED
|
@@ -94,7 +94,8 @@ export default {
|
|
|
94
94
|
"components.object-property-list.item-placeholder-text": "Eitem Dalfan",
|
|
95
95
|
"components.overflow-group.moreActions": "Rhagor o Gamau Gweithredu",
|
|
96
96
|
"components.pager-load-more.action": "Lwytho {count} Arall",
|
|
97
|
-
"components.
|
|
97
|
+
"components.pageable.info": "{count, plural, one {{countFormatted} item} other {{countFormatted} items}}",
|
|
98
|
+
"components.pageable.info-with-total": "{totalCount, plural, one {{countFormatted} o {totalCountFormatted} eitem} other {{countFormatted} o {totalCountFormatted} eitem}}",
|
|
98
99
|
"components.pager-load-more.status-loading": "Llwytho rhagor o eitemau",
|
|
99
100
|
"components.selection.action-hint": "Dewiswch eitem i gyflawni'r weithred hon.",
|
|
100
101
|
"components.selection.select-all": "Dewis y Cyfan",
|
package/lang/da.js
CHANGED
|
@@ -94,7 +94,8 @@ export default {
|
|
|
94
94
|
"components.object-property-list.item-placeholder-text": "Pladsholder-element",
|
|
95
95
|
"components.overflow-group.moreActions": "Flere handlinger",
|
|
96
96
|
"components.pager-load-more.action": "Indlæs {count} mere",
|
|
97
|
-
"components.
|
|
97
|
+
"components.pageable.info": "{count, plural, one {{countFormatted} item} other {{countFormatted} items}}",
|
|
98
|
+
"components.pageable.info-with-total": "{totalCount, plural, one {{countFormatted} af {totalCountFormatted} element} other {{countFormatted} af {totalCountFormatted} elementer}}",
|
|
98
99
|
"components.pager-load-more.status-loading": "Indlæser flere elementer",
|
|
99
100
|
"components.selection.action-hint": "Vælg et element for at udføre denne handling.",
|
|
100
101
|
"components.selection.select-all": "Vælg alle",
|
package/lang/de.js
CHANGED
|
@@ -94,7 +94,8 @@ export default {
|
|
|
94
94
|
"components.object-property-list.item-placeholder-text": "Platzhalterelement",
|
|
95
95
|
"components.overflow-group.moreActions": "Weitere Aktionen",
|
|
96
96
|
"components.pager-load-more.action": "{count} weitere laden",
|
|
97
|
-
"components.
|
|
97
|
+
"components.pageable.info": "{count, plural, one {{countFormatted} item} other {{countFormatted} items}}",
|
|
98
|
+
"components.pageable.info-with-total": "{totalCount, plural, one {{countFormatted} von {totalCountFormatted} Element} other {{countFormatted} von {totalCountFormatted} Elementen}}",
|
|
98
99
|
"components.pager-load-more.status-loading": "Weitere Elemente werden geladen",
|
|
99
100
|
"components.selection.action-hint": "Wählen Sie ein Element aus, um diese Aktion auszuführen.",
|
|
100
101
|
"components.selection.select-all": "Alle auswählen",
|
package/lang/en-gb.js
CHANGED
|
@@ -94,7 +94,8 @@ export default {
|
|
|
94
94
|
"components.object-property-list.item-placeholder-text": "Placeholder Item",
|
|
95
95
|
"components.overflow-group.moreActions": "More Actions",
|
|
96
96
|
"components.pager-load-more.action": "Load {count} More",
|
|
97
|
-
"components.
|
|
97
|
+
"components.pageable.info": "{count, plural, one {{countFormatted} item} other {{countFormatted} items}}",
|
|
98
|
+
"components.pageable.info-with-total": "{totalCount, plural, one {{countFormatted} of {totalCountFormatted} item} other {{countFormatted} of {totalCountFormatted} items}}",
|
|
98
99
|
"components.pager-load-more.status-loading": "Loading more items",
|
|
99
100
|
"components.selection.action-hint": "Select an item to perform this action.",
|
|
100
101
|
"components.selection.select-all": "Select All",
|
package/lang/en.js
CHANGED
|
@@ -94,7 +94,8 @@ export default {
|
|
|
94
94
|
"components.object-property-list.item-placeholder-text": "Placeholder Item",
|
|
95
95
|
"components.overflow-group.moreActions": "More Actions",
|
|
96
96
|
"components.pager-load-more.action": "Load {count} More",
|
|
97
|
-
"components.
|
|
97
|
+
"components.pageable.info": "{count, plural, one {{countFormatted} item} other {{countFormatted} items}}",
|
|
98
|
+
"components.pageable.info-with-total": "{totalCount, plural, one {{countFormatted} of {totalCountFormatted} item} other {{countFormatted} of {totalCountFormatted} items}}",
|
|
98
99
|
"components.pager-load-more.status-loading": "Loading more items",
|
|
99
100
|
"components.selection.action-hint": "Select an item to perform this action.",
|
|
100
101
|
"components.selection.select-all": "Select All",
|