@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.
@@ -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
- <slot @slotchange="${this._handleSlotChange}"></slot>
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._hasSlottedContent) {
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._hasSlottedContent) this._render();
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
- const slot = this.shadowRoot.querySelector('slot');
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);
@@ -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 = { itemCount: null, itemShowingCount: 0 };
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.pager-load-more.info', { showingCount: formatNumber(itemShowingCount), totalCount: itemCount, totalCountFormatted: formatNumber(itemCount) })}</span>
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
- <d2l-selection-select-all></d2l-selection-select-all>
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 '../selection/selection-select-all-pages.js';
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
- _getSelectionControlsLabel() {
34
- return this.localize('components.table-controls.label');
31
+ constructor() {
32
+ super();
33
+ this._noSelectAll = true;
35
34
  }
36
35
 
37
- _renderSelection() {
38
- return html`
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
  }
@@ -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.pager-load-more.info": "{totalCount, plural, one {{showingCount} من أصل {totalCountFormatted} من العناصر} other {{showingCount} من أصل {totalCountFormatted} من العناصر}}",
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.pager-load-more.info": "{totalCount, plural, one {{showingCount} o {totalCountFormatted} eitem} other {{showingCount} o {totalCountFormatted} eitem}}",
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.pager-load-more.info": "{totalCount, plural, one {{showingCount} af {totalCountFormatted} element} other {{showingCount} af {totalCountFormatted} elementer}}",
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.pager-load-more.info": "{totalCount, plural, one {{showingCount} von {totalCountFormatted} Element} other {{showingCount} von {totalCountFormatted} Elementen}}",
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.pager-load-more.info": "{totalCount, plural, one {{showingCount} of {totalCountFormatted} item} other {{showingCount} of {totalCountFormatted} items}}",
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.pager-load-more.info": "{totalCount, plural, one {{showingCount} of {totalCountFormatted} item} other {{showingCount} of {totalCountFormatted} items}}",
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",