@brightspace-ui/core 2.33.0 → 2.34.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.
@@ -158,6 +158,12 @@ The `d2l-list` is the container to create a styled list of items using `d2l-list
158
158
 
159
159
  The `d2l-list` supports selectable items within a list, including both single and multi selection. Selection is enabled when `d2l-list-item`s have the `selectable` attribute. When items are selectable, multiple selection is the default behaviour, however the `selection-single` attribute can be applied to the `d2l-list` to enable single selection. A `d2l-list-header` component can be added to `d2l-list`'s `header` slot to provide select-all and bulk actions.
160
160
 
161
+ ## Pageable Lists
162
+
163
+ Load-More paging functionality can be implemented in lists by placing a `d2l-pager-load-more` in `d2l-list`'s `pager` slot. The consumer must handle the `d2l-pager-load-more` event by loading more items, updating the pager state, and signalling completion by calling `complete()` on the event detail. Focus will be automatically moved on the first new item once complete. See [Paging](../../components/paging) for more details.
164
+
165
+
166
+
161
167
  ### Accessibility Properties
162
168
 
163
169
  If a `d2l-list-item` is selectable then it should have a `label` attribute that corresponds to the hidden label for the checkbox.
@@ -516,7 +522,7 @@ This event includes a detail object with helper methods attached to it.
516
522
  <!-- docs: start hidden content -->
517
523
  ## Future Improvements
518
524
 
519
- - Paging: integration with "load more", "scroll" and "numeric" paging mechanisms
525
+ - Paging: integration with "scroll" and "numeric" paging mechanisms
520
526
 
521
527
  Looking for an enhancement not listed here? Create a GitHub issue!
522
528
  <!-- docs: end hidden content -->
@@ -0,0 +1,233 @@
1
+ /* eslint-disable indent */
2
+ import '../../button/button-icon.js';
3
+ import '../../dropdown/dropdown-button-subtle.js';
4
+ import '../../dropdown/dropdown-menu.js';
5
+ import '../../dropdown/dropdown-more.js';
6
+ import '../../menu/menu.js';
7
+ import '../../menu/menu-item.js';
8
+ import '../../paging/pager-load-more.js';
9
+ import '../../selection/selection-action.js';
10
+ import '../../selection/selection-action-dropdown.js';
11
+ import '../../selection/selection-action-menu-item.js';
12
+ import '../../tooltip/tooltip.js';
13
+ import '../list-header.js';
14
+ import '../list-item-content.js';
15
+ import '../list-item.js';
16
+ import '../list.js';
17
+ import { css, html, LitElement } from 'lit';
18
+ import { getUniqueId } from '../../../helpers/uniqueId.js';
19
+ import { repeat } from 'lit/directives/repeat.js';
20
+
21
+ const items = [{
22
+ key: '1',
23
+ primaryText: 'Introductory Earth Sciences',
24
+ supportingText: 'This course explores the geological process of the Earth\'s interior and surface. These include volcanism, earthquakes, mountains...',
25
+ imgSrc: 'https://s.brightspace.com/course-images/images/38e839b1-37fa-470c-8830-b189ce4ae134/tile-high-density-max-size.jpg',
26
+ dropNested: true,
27
+ items: [{
28
+ key: '1-1',
29
+ primaryText: 'Glaciation',
30
+ supportingText: 'Nesting Allowed',
31
+ imgSrc: 'https://s.brightspace.com/course-images/images/bf648978-6637-4fdc-815b-81572c436c0e/tile-high-density-max-size.jpg',
32
+ dropNested: true,
33
+ items: []
34
+ }, {
35
+ key: '1-2',
36
+ primaryText: 'Weathering',
37
+ supportingText: 'Nesting Allowed',
38
+ imgSrc: 'https://s.brightspace.com/course-images/images/50f91ba6-7c25-482a-bd71-1c4b7c8d2154/tile-high-density-min-size.jpg',
39
+ dropNested: true,
40
+ items: []
41
+ }, {
42
+ key: '1-3',
43
+ primaryText: 'Volcanism',
44
+ supportingText: 'Nesting Allowed',
45
+ imgSrc: 'https://s.brightspace.com/course-images/images/5eb2371d-6099-4c8d-8aad-075f357012a2/tile-high-density-min-size.jpg',
46
+ dropNested: true,
47
+ items: []
48
+ }]
49
+ }, {
50
+ key: '2',
51
+ primaryText: 'Engineering Materials for Energy Systems',
52
+ supportingText: 'Shiver me timbers to go on account lookout wherry doubloon chase. Belay yo-ho-ho keelhaul squiffy black spot yardarm spyglass sheet transom heave to.',
53
+ imgSrc: 'https://s.brightspace.com/course-images/images/c87d778f-e5f1-442b-8ac7-5d1a3d7ca725/tile-high-density-max-size.jpg',
54
+ items: [{
55
+ key: '2-1',
56
+ primaryText: 'Contaminant Transport',
57
+ supportingText: 'No Nesting Allowed',
58
+ imgSrc: 'https://s.brightspace.com/course-images/images/824fffa1-86a6-4489-84ba-91edfbc1dcc4/tile-high-density-min-size.jpg',
59
+ dropNested: false,
60
+ items: []
61
+ }, {
62
+ key: '2-2',
63
+ primaryText: 'Modelling Flow in Fractured Media',
64
+ supportingText: 'No Nesting Allowed',
65
+ imgSrc: 'https://s.brightspace.com/course-images/images/e18c92a4-b996-444f-84b5-988874feccac/tile-high-density-min-size.jpg',
66
+ dropNested: false,
67
+ items: []
68
+ }]
69
+ }, {
70
+ key: '3',
71
+ primaryText: 'Geomorphology and GIS',
72
+ supportingText: 'Trysail Sail ho Corsair red ensign hulk smartly boom jib rum gangway. Case shot Shiver me timbers gangplank crack Jennys tea cup ballast Blimey lee snow crow\'s nest rutters.',
73
+ imgSrc: 'https://s.brightspace.com/course-images/images/2f035317-5014-4095-82c8-e29f34c7f99e/tile-high-density-max-size.jpg',
74
+ items: [{
75
+ key: '3-1',
76
+ primaryText: 'Carbon & Nitrogen Cycling',
77
+ supportingText: 'Nesting Allowed',
78
+ imgSrc: 'https://s.brightspace.com/course-images/images/623b420b-a305-4762-8af8-598f0e72e956/tile-high-density-min-size.jpg',
79
+ dropNested: true,
80
+ items: []
81
+ }, {
82
+ key: '3-2',
83
+ primaryText: 'Wetland Engineering',
84
+ supportingText: 'Nesting Allowed',
85
+ imgSrc: 'https://s.brightspace.com/course-images/images/26102577-8f2a-4e24-84b5-19d76decbc7a/tile-high-density-min-size.jpg',
86
+ dropNested: true,
87
+ items: []
88
+ }]
89
+ }, {
90
+ key: '4',
91
+ primaryText: 'Pedagogy Case Studies',
92
+ supportingText: 'Belay yo-ho-ho keelhaul squiffy black spot yardarm spyglass sheet transom heave to. Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors.',
93
+ imgSrc: 'https://s.brightspace.com/course-images/images/e5fd575a-bc14-4a80-89e1-46f349a76178/tile-high-density-max-size.jpg',
94
+ items: []
95
+ }, {
96
+ key: '5',
97
+ primaryText: 'Introduction to Painting',
98
+ supportingText: 'Fluke jib scourge of the seven seas boatswain schooner gaff booty Jack Tar transom spirits. Bring a spring upon her cable holystone blow the man down spanker.',
99
+ imgSrc: 'https://s.brightspace.com/course-images/images/63b162ab-b582-4bf9-8c1d-1dad04714121/tile-high-density-max-size.jpg',
100
+ items: []
101
+ }, {
102
+ key: '6',
103
+ primaryText: 'Analytical Chemistry',
104
+ supportingText: 'Trysail Sail ho Corsair red ensign hulk smartly boom jib rum gangway. Fluke jib scourge of the seven seas boatswain schooner gaff booty Jack Tar transom spirits.',
105
+ imgSrc: 'https://s.brightspace.com/course-images/images/85f865dd-4c73-49c5-8809-c872256f7715/tile-high-density-max-size.jpg',
106
+ items: []
107
+ }, {
108
+ key: '7',
109
+ primaryText: 'Plant Biology',
110
+ supportingText: 'Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors. Bring a spring upon her cable holystone blow the man down spanker.',
111
+ imgSrc: 'https://s.brightspace.com/course-images/images/61f07ae4-4686-4019-8146-1604cb8ae9bf/tile-high-density-max-size.jpg',
112
+ items: []
113
+ }];
114
+
115
+ class DemoList extends LitElement {
116
+
117
+ static get properties() {
118
+ return {
119
+ grid: { type: Boolean },
120
+ _lastItemLoadedIndex: { state: true }
121
+ };
122
+ }
123
+
124
+ static get styles() {
125
+ return css`
126
+ :host {
127
+ display: block;
128
+ }
129
+ :host([hidden]) {
130
+ display: none;
131
+ }
132
+ img {
133
+ height: 500px;
134
+ object-fit: cover;
135
+ }
136
+ `;
137
+ }
138
+
139
+ constructor() {
140
+ super();
141
+ this.items = JSON.parse(JSON.stringify(items));
142
+ this._lastItemLoadedIndex = 2;
143
+ this._pageSize = 2;
144
+ }
145
+
146
+ render() {
147
+ const loadedItems = this.items.slice(0, this._lastItemLoadedIndex + 1);
148
+ const remainingItemCount = this.items.length - loadedItems.length;
149
+ return html`
150
+ <d2l-list ?grid="${this.grid}" item-count="${this.items.length}">
151
+ <d2l-list-header slot="header" select-all-pages-allowed>
152
+ <d2l-selection-action icon="tier1:plus-default" text="Add" @d2l-selection-action-click="${this._handleAddItem}"></d2l-selection-action>
153
+ <d2l-selection-action-dropdown text="Move To" requires-selection>
154
+ <d2l-dropdown-menu>
155
+ <d2l-menu label="Move To Options">
156
+ <d2l-menu-item text="Top of Quiz"></d2l-menu-item>
157
+ <d2l-menu-item text="Bottom of Quiz"></d2l-menu-item>
158
+ <d2l-menu-item text="Section">
159
+ <d2l-menu>
160
+ <d2l-menu-item text="Option 1"></d2l-menu-item>
161
+ <d2l-menu-item text="Option 2"></d2l-menu-item>
162
+ </d2l-menu>
163
+ </d2l-menu-item>
164
+ </d2l-menu>
165
+ </d2l-dropdown-menu>
166
+ </d2l-selection-action-dropdown>
167
+ <d2l-dropdown-button-subtle text="Actions">
168
+ <d2l-dropdown-menu>
169
+ <d2l-menu label="Actions">
170
+ <d2l-selection-action-menu-item text="Bookmark (requires selection)" requires-selection></d2l-selection-action-menu-item>
171
+ <d2l-selection-action-menu-item text="Advanced"></d2l-selection-action-menu-item>
172
+ </d2l-menu>
173
+ </d2l-dropdown-menu>
174
+ </d2l-dropdown-button-subtle>
175
+ <d2l-selection-action icon="tier1:gear" text="Settings" requires-selection></d2l-selection-action>
176
+ </d2l-list-header>
177
+ ${repeat(loadedItems, item => item.key, item => {
178
+ const tooltipButtonId = getUniqueId();
179
+ return html`
180
+ <d2l-list-item href="http://www.d2l.com" key="${item.key}" label="${item.primaryText}" selectable>
181
+ <img slot="illustration" src="${item.imgSrc}">
182
+ <d2l-list-item-content>
183
+ <div>${item.primaryText}</div>
184
+ <div slot="supporting-info">${item.supportingText}</div>
185
+ </d2l-list-item-content>
186
+ <div slot="actions">
187
+ <d2l-button-icon id="${tooltipButtonId}" text="My Button" icon="tier1:preview"></d2l-button-icon>
188
+ <d2l-tooltip for="${tooltipButtonId}">Preview</d2l-tooltip>
189
+ <d2l-dropdown-more text="Open!">
190
+ <d2l-dropdown-menu>
191
+ <d2l-menu label="Astronomy">
192
+ <d2l-menu-item text="Introduction"></d2l-menu-item>
193
+ <d2l-menu-item text="Searching for the Heavens "></d2l-menu-item>
194
+ </d2l-menu>
195
+ </d2l-dropdown-menu>
196
+ </d2l-dropdown-more>
197
+ </div>
198
+ </d2l-list-item>
199
+ `;
200
+ })}
201
+ <d2l-pager-load-more slot="pager"
202
+ @d2l-pager-load-more="${this._handlePagerLoadMore}"
203
+ ?has-more="${this._lastItemLoadedIndex < this.items.length - 1}"
204
+ item-count="${this.items.length}"
205
+ page-size="${remainingItemCount < this._pageSize ? remainingItemCount : this._pageSize}">
206
+ </d2l-pager-load-more>
207
+ </d2l-list>
208
+ `;
209
+ }
210
+
211
+ _handleAddItem() {
212
+ const newKey = getUniqueId();
213
+ this.items.push({
214
+ key: newKey,
215
+ primaryText: `New Item ${newKey}`,
216
+ supportingText: 'Shiver me timbers to go on account lookout wherry doubloon chase. Belay yo-ho-ho keelhaul squiffy black spot yardarm spyglass sheet transom heave to.',
217
+ imgSrc: 'https://s.brightspace.com/course-images/images/38e839b1-37fa-470c-8830-b189ce4ae134/tile-high-density-max-size.jpg',
218
+ items: []
219
+ });
220
+ this.requestUpdate();
221
+ }
222
+
223
+ _handlePagerLoadMore(e) {
224
+ // mock delay consumers might have
225
+ setTimeout(() => {
226
+ this._lastItemLoadedIndex += this._pageSize;
227
+ e.detail.complete();
228
+ }, 2000);
229
+
230
+ }
231
+
232
+ }
233
+ customElements.define('d2l-demo-list', DemoList);
@@ -7,21 +7,17 @@
7
7
  <script type="module">
8
8
  import '../../button/button-icon.js';
9
9
  import '../../demo/demo-page.js';
10
- import '../../dropdown/dropdown-button-subtle.js';
11
10
  import '../../dropdown/dropdown-menu.js';
12
11
  import '../../dropdown/dropdown-more.js';
13
12
  import '../../menu/menu.js';
14
13
  import '../../menu/menu-item.js';
15
- import '../../selection/selection-action.js';
16
- import '../../selection/selection-action-dropdown.js';
17
- import '../../selection/selection-action-menu-item.js';
18
14
  import '../../tooltip/tooltip.js';
19
- import '../list-header.js';
20
15
  import '../list-item-content.js';
21
16
  import '../list-item.js';
22
17
  import '../list.js';
23
18
  import '../../tag-list/tag-list.js';
24
19
  import '../../tag-list/tag-list-item.js';
20
+ import './demo-list.js';
25
21
  </script>
26
22
  <style>
27
23
  img {
@@ -71,108 +67,7 @@
71
67
 
72
68
  <d2l-demo-snippet>
73
69
  <template>
74
- <d2l-list id="allFeatures" item-count="50">
75
- <d2l-list-header slot="header" select-all-pages-allowed>
76
- <d2l-selection-action icon="tier1:plus-default" text="Add"></d2l-selection-action>
77
- <d2l-selection-action-dropdown text="Move To" requires-selection>
78
- <d2l-dropdown-menu>
79
- <d2l-menu label="Move To Options">
80
- <d2l-menu-item text="Top of Quiz"></d2l-menu-item>
81
- <d2l-menu-item text="Bottom of Quiz"></d2l-menu-item>
82
- <d2l-menu-item text="Section">
83
- <d2l-menu>
84
- <d2l-menu-item text="Option 1"></d2l-menu-item>
85
- <d2l-menu-item text="Option 2"></d2l-menu-item>
86
- </d2l-menu-item>
87
- </d2l-menu-item>
88
- </d2l-menu>
89
- </d2l-dropdown-menu>
90
- </d2l-selection-action-dropdown>
91
- <d2l-dropdown-button-subtle text="Actions">
92
- <d2l-dropdown-menu>
93
- <d2l-menu label="Actions">
94
- <d2l-selection-action-menu-item text="Bookmark (requires selection)" requires-selection></d2l-selection-action-menu-item>
95
- <d2l-selection-action-menu-item text="Advanced"></d2l-selection-action-menu-item>
96
- </d2l-menu>
97
- </d2l-dropdown-menu>
98
- </d2l-dropdown-button-subtle>
99
- <d2l-selection-action icon="tier1:gear" text="Settings" requires-selection></d2l-selection-action>
100
- </d2l-list-header>
101
- <d2l-list-item href="http://www.d2l.com" selectable key="1" label="Introductory Earth Sciences">
102
- <img slot="illustration" src="https://s.brightspace.com/course-images/images/38e839b1-37fa-470c-8830-b189ce4ae134/tile-high-density-max-size.jpg"></img>
103
- <d2l-list-item-content>
104
- <div>Introductory Earth Sciences</div>
105
- <div slot="supporting-info">This course explores the geological process of the Earth's interior and surface. These include volcanism, earthquakes, mountains...</div>
106
- </d2l-list-item-content>
107
- <div slot="actions">
108
- <d2l-button-icon id="tooltip-btn-1" text="My Button" icon="tier1:preview"></d2l-button-icon>
109
- <d2l-tooltip for="tooltip-btn-1">Preview</d2l-tooltip>
110
- <d2l-dropdown-more text="Open!">
111
- <d2l-dropdown-menu>
112
- <d2l-menu label="Astronomy">
113
- <d2l-menu-item text="Introduction"></d2l-menu-item>
114
- <d2l-menu-item text="Searching for the Heavens "></d2l-menu-item>
115
- </d2l-menu>
116
- </d2l-dropdown-menu>
117
- </d2l-dropdown-more>
118
- </div>
119
- </d2l-list-item>
120
- <d2l-list-item href="http://www.d2l.com" selectable key="2" selected label="Engineering Materials for Energy Systems">
121
- <img slot="illustration" src="https://s.brightspace.com/course-images/images/e5fd575a-bc14-4a80-89e1-46f349a76178/tile-high-density-max-size.jpg"></img>
122
- <d2l-list-item-content>
123
- <div>Engineering Materials for Energy Systems</div>
124
- <div slot="supporting-info">This course explores the geological processes of the Earth's interior and surface. These include volcanism, earthquakes, mountain...</div>
125
- </d2l-list-item-content>
126
- <div slot="actions">
127
- <d2l-button-icon id="tooltip-btn-1" text="My Button" icon="tier1:preview"></d2l-button-icon>
128
- <d2l-tooltip for="tooltip-btn-1">Preview</d2l-tooltip>
129
- <d2l-dropdown-more text="Open!">
130
- <d2l-dropdown-menu>
131
- <d2l-menu label="Astronomy">
132
- <d2l-menu-item text="Introduction"></d2l-menu-item>
133
- <d2l-menu-item text="Searching for the Heavens "></d2l-menu-item>
134
- </d2l-menu>
135
- </d2l-dropdown-menu>
136
- </d2l-dropdown-more>
137
- </div>
138
- </d2l-list-item>
139
- <d2l-list-item href="http://www.d2l.com" selectable key="3" label="Geomorphology and GIS">
140
- <img slot="illustration" src="https://s.brightspace.com/course-images/images/63b162ab-b582-4bf9-8c1d-1dad04714121/tile-high-density-max-size.jpg"></img>
141
- <d2l-list-item-content>
142
- <div>Geomorphology and GIS</div>
143
- <div slot="supporting-info">This course explores the geological processes of the Earth's interior and surface. These include volcanism, earthquakes, mountain...</div>
144
- </d2l-list-item-content>
145
- <div slot="actions">
146
- <d2l-button-icon id="tooltip-btn-1" text="My Button" icon="tier1:preview"></d2l-button-icon>
147
- <d2l-tooltip for="tooltip-btn-1">Preview</d2l-tooltip>
148
- <d2l-dropdown-more text="Open!">
149
- <d2l-dropdown-menu>
150
- <d2l-menu label="Astronomy">
151
- <d2l-menu-item text="Introduction"></d2l-menu-item>
152
- <d2l-menu-item text="Searching for the Heavens "></d2l-menu-item>
153
- </d2l-menu>
154
- </d2l-dropdown-menu>
155
- </d2l-dropdown-more>
156
- </div>
157
- </d2l-list-item>
158
- </d2l-list>
159
- <script>
160
- let newItemCount = 0;
161
- document.querySelector('d2l-selection-action[text="Add"]').addEventListener('d2l-selection-action-click', () => {
162
- const item = document.createElement('d2l-list-item');
163
- item.selectable = true;
164
- item.key = `${++newItemCount}`;
165
- item.label = 'New Item';
166
- item.innerHTML = `
167
- <img slot="illustration" src="https://s.brightspace.com/course-images/images/38e839b1-37fa-470c-8830-b189ce4ae134/tile-high-density-max-size.jpg"></img>
168
- <d2l-list-item-content>
169
- <div>New Item ${newItemCount}</div>
170
- <div slot="supporting-info">Supporting Info</div>
171
- </d2l-list-item-content>
172
- `;
173
- document.querySelector('#allFeatures').appendChild(item);
174
- });
175
- </script>
70
+ <d2l-demo-list></d2l-demo-list>
176
71
  </template>
177
72
  </d2l-demo-snippet>
178
73
 
@@ -180,65 +75,7 @@
180
75
 
181
76
  <d2l-demo-snippet>
182
77
  <template>
183
- <d2l-list grid>
184
- <d2l-list-item href="http://www.d2l.com" selectable key="1" label="Introductory Earth Sciences">
185
- <img slot="illustration" src="https://s.brightspace.com/course-images/images/38e839b1-37fa-470c-8830-b189ce4ae134/tile-high-density-max-size.jpg"></img>
186
- <d2l-list-item-content>
187
- <div>Introductory Earth Sciences</div>
188
- <div slot="supporting-info">This course explores the geological process of the Earth's interior and surface. These include volcanism, earthquakes, mountains...</div>
189
- </d2l-list-item-content>
190
- <div slot="actions">
191
- <d2l-button-icon id="tooltip-btn-1" text="My Button" icon="tier1:preview"></d2l-button-icon>
192
- <d2l-tooltip for="tooltip-btn-1">Preview</d2l-tooltip>
193
- <d2l-dropdown-more text="Open!">
194
- <d2l-dropdown-menu>
195
- <d2l-menu label="Astronomy">
196
- <d2l-menu-item text="Introduction"></d2l-menu-item>
197
- <d2l-menu-item text="Searching for the Heavens "></d2l-menu-item>
198
- </d2l-menu>
199
- </d2l-dropdown-menu>
200
- </d2l-dropdown-more>
201
- </div>
202
- </d2l-list-item>
203
- <d2l-list-item href="http://www.d2l.com" selectable key="2" selected label="Engineering Materials for Energy Systems">
204
- <img slot="illustration" src="https://s.brightspace.com/course-images/images/e5fd575a-bc14-4a80-89e1-46f349a76178/tile-high-density-max-size.jpg"></img>
205
- <d2l-list-item-content>
206
- <div>Engineering Materials for Energy Systems</div>
207
- <div slot="supporting-info">This course explores the geological processes of the Earth's interior and surface. These include volcanism, earthquakes, mountain...</div>
208
- </d2l-list-item-content>
209
- <div slot="actions">
210
- <d2l-button-icon id="tooltip-btn-1" text="My Button" icon="tier1:preview"></d2l-button-icon>
211
- <d2l-tooltip for="tooltip-btn-1">Preview</d2l-tooltip>
212
- <d2l-dropdown-more text="Open!">
213
- <d2l-dropdown-menu>
214
- <d2l-menu label="Astronomy">
215
- <d2l-menu-item text="Introduction"></d2l-menu-item>
216
- <d2l-menu-item text="Searching for the Heavens "></d2l-menu-item>
217
- </d2l-menu>
218
- </d2l-dropdown-menu>
219
- </d2l-dropdown-more>
220
- </div>
221
- </d2l-list-item>
222
- <d2l-list-item href="http://www.d2l.com" selectable key="3" label="Geomorphology and GIS">
223
- <img slot="illustration" src="https://s.brightspace.com/course-images/images/63b162ab-b582-4bf9-8c1d-1dad04714121/tile-high-density-max-size.jpg"></img>
224
- <d2l-list-item-content>
225
- <div>Geomorphology and GIS</div>
226
- <div slot="supporting-info">This course explores the geological processes of the Earth's interior and surface. These include volcanism, earthquakes, mountain...</div>
227
- </d2l-list-item-content>
228
- <div slot="actions">
229
- <d2l-button-icon id="tooltip-btn-1" text="My Button" icon="tier1:preview"></d2l-button-icon>
230
- <d2l-tooltip for="tooltip-btn-1">Preview</d2l-tooltip>
231
- <d2l-dropdown-more text="Open!">
232
- <d2l-dropdown-menu>
233
- <d2l-menu label="Astronomy">
234
- <d2l-menu-item text="Introduction"></d2l-menu-item>
235
- <d2l-menu-item text="Searching for the Heavens "></d2l-menu-item>
236
- </d2l-menu>
237
- </d2l-dropdown-menu>
238
- </d2l-dropdown-more>
239
- </div>
240
- </d2l-list-item>
241
- </d2l-list>
78
+ <d2l-demo-list grid></d2l-demo-list>
242
79
  </template>
243
80
  </d2l-demo-snippet>
244
81
 
@@ -247,7 +84,7 @@
247
84
  <d2l-demo-snippet>
248
85
  <template>
249
86
  <d2l-list grid>
250
- <d2l-list-item no-primary-action selectable key="1" label="Introductory Earth Sciences">
87
+ <d2l-list-item selectable key="1" label="Introductory Earth Sciences">
251
88
  <img slot="illustration" src="https://s.brightspace.com/course-images/images/38e839b1-37fa-470c-8830-b189ce4ae134/tile-high-density-max-size.jpg"></img>
252
89
  <div>
253
90
  <d2l-list-item-content>
@@ -530,6 +530,7 @@ class ListItemGenericLayout extends RtlMixin(LitElement) {
530
530
  if (!this.gridActive) return;
531
531
  const slot = (e.path || e.composedPath()).find(node =>
532
532
  node.nodeName === 'SLOT' && node.classList.contains('d2l-cell'));
533
+ if (!slot) return;
533
534
  this._cellNum = parseInt(slot.getAttribute('data-cell-num'));
534
535
  this._cellFocusedItem = this._getFocusedItemPosition(e.target);
535
536
  }
@@ -1,6 +1,7 @@
1
1
  import { css, html, LitElement } from 'lit';
2
2
  import { getNextFocusable, getPreviousFocusable } from '../../helpers/focus.js';
3
3
  import { SelectionInfo, SelectionMixin } from '../selection/selection-mixin.js';
4
+ import { PageableMixin } from '../paging/pageable-mixin.js';
4
5
 
5
6
  const keyCodes = {
6
7
  TAB: 9
@@ -12,9 +13,10 @@ export const listSelectionStates = SelectionInfo.states;
12
13
  * A container for a styled list of items ("d2l-list-item"). It provides the appropriate "list" semantics as well as options for displaying separators, etc.
13
14
  * @slot - Slot for list items (ex. `d2l-list-item`, `d2l-list-item-button`, or custom items)
14
15
  * @slot header - Slot for `d2l-list-header` to be rendered above the list
16
+ * @slot pager - Slot for `d2l-pager-load-more` to be rendered below the list
15
17
  * @fires d2l-list-items-move - Dispatched when one or more items are moved. See [Event Details: d2l-list-items-move](#event-details%3A-%40d2l-list-items-move).
16
18
  */
17
- class List extends SelectionMixin(LitElement) {
19
+ class List extends PageableMixin(SelectionMixin(LitElement)) {
18
20
 
19
21
  static get properties() {
20
22
  return {
@@ -50,6 +52,9 @@ class List extends SelectionMixin(LitElement) {
50
52
  :host([hidden]) {
51
53
  display: none;
52
54
  }
55
+ slot[name="pager"]::slotted(*) {
56
+ margin-top: 12px;
57
+ }
53
58
  `;
54
59
  }
55
60
 
@@ -58,9 +63,16 @@ class List extends SelectionMixin(LitElement) {
58
63
  this.dragMultiple = false;
59
64
  this.extendSeparators = false;
60
65
  this.grid = false;
66
+ this._itemsShowingCount = 0;
67
+ this._itemsShowingTotalCount = 0;
61
68
  this._listItemChanges = [];
62
69
  }
63
70
 
71
+ connectedCallback() {
72
+ super.connectedCallback();
73
+ this.addEventListener('d2l-list-items-showing-count-change', this._handleListItemsShowingCountChange);
74
+ }
75
+
64
76
  disconnectedCallback() {
65
77
  super.disconnectedCallback();
66
78
  if (this._intersectionObserver) this._intersectionObserver.disconnect();
@@ -115,14 +127,15 @@ class List extends SelectionMixin(LitElement) {
115
127
  <div class="d2l-list-top-sentinel"></div>
116
128
  <div role="${role}" class="d2l-list-container">
117
129
  <slot name="header"></slot>
118
- <slot @keydown="${this._handleKeyDown}"></slot>
130
+ <slot @keydown="${this._handleKeyDown}" @slotchange="${this._handleSlotChange}"></slot>
131
+ ${this._renderPagerContainer()}
119
132
  </div>
120
133
  `;
121
134
  }
122
135
 
123
- getItems() {
136
+ getItems(slot) {
124
137
  if (!this.shadowRoot) return;
125
- const slot = this.shadowRoot.querySelector('slot:not([name])');
138
+ if (!slot) slot = this.shadowRoot.querySelector('slot:not([name])');
126
139
  if (!slot) return [];
127
140
  return slot.assignedNodes({ flatten: true }).filter((node) => {
128
141
  return node.nodeType === Node.ELEMENT_NODE && (node.role === 'rowgroup' || node.role === 'listitem');
@@ -175,6 +188,35 @@ class List extends SelectionMixin(LitElement) {
175
188
  return new SelectionInfo(keys, selectionInfo.state);
176
189
  }
177
190
 
191
+ _getItemByIndex(index) {
192
+ const items = this.getItems();
193
+ if (index > items.length - 1) return;
194
+ return items[index];
195
+ }
196
+
197
+ async _getItemsShowingCount() {
198
+ if (this.slot === 'nested') return this._itemsShowingCount;
199
+ else return this._getListItemsShowingTotalCount(false);
200
+ }
201
+
202
+ _getLastItemIndex() {
203
+ return this._itemsShowingCount - 1;
204
+ }
205
+
206
+ async _getListItemsShowingTotalCount(refresh) {
207
+ if (refresh) {
208
+ this._itemsShowingTotalCount = await this.getItems().reduce(async(count, item) => {
209
+ await item.updateComplete;
210
+ if (item._selectionProvider) {
211
+ return (await count + await item._selectionProvider._getListItemsShowingTotalCount(true));
212
+ } else {
213
+ return await count;
214
+ }
215
+ }, this._itemsShowingCount);
216
+ }
217
+ return this._itemsShowingTotalCount;
218
+ }
219
+
178
220
  _handleKeyDown(e) {
179
221
  if (!this.grid || this.slot === 'nested' || e.keyCode !== keyCodes.TAB) return;
180
222
  e.preventDefault();
@@ -184,6 +226,36 @@ class List extends SelectionMixin(LitElement) {
184
226
  if (focusable) focusable.focus();
185
227
  }
186
228
 
229
+ _handleListItemsShowingCountChange() {
230
+ if (this.slot === 'nested') return;
231
+
232
+ // debounce the updates for first render case
233
+ if (this._updateItemsShowingTotalCountRequested) return;
234
+
235
+ this._updateItemsShowingTotalCountRequested = true;
236
+ setTimeout(async() => {
237
+ const oldCount = this._itemsShowingTotalCount;
238
+ const newCount = await this._getListItemsShowingTotalCount(true);
239
+ if (oldCount !== newCount) this._updatePagerCount(newCount);
240
+ this._updateItemsShowingTotalCountRequested = false;
241
+ }, 0);
242
+ }
243
+
244
+ async _handleSlotChange(e) {
245
+ const items = this.getItems(e.target);
246
+ if (this._itemsShowingCount === items.length) return;
247
+ this._itemsShowingCount = items.length;
248
+
249
+ this._updatePagerCount(await this._getListItemsShowingTotalCount(true));
250
+
251
+ /** @ignore */
252
+ this.dispatchEvent(new CustomEvent('d2l-list-items-showing-count-change', {
253
+ bubbles: true,
254
+ composed: true,
255
+ detail: { count: this._itemsShowingCount }
256
+ }));
257
+ }
258
+
187
259
  }
188
260
 
189
261
  customElements.define('d2l-list', List);
@@ -0,0 +1,55 @@
1
+ # Paging
2
+
3
+ The paging components and mixins can be used to provide consistent paging functionality.
4
+
5
+ <!-- docs: demo -->
6
+ ```html
7
+ <script type="module">
8
+ import '@brightspace-ui/core/components/paging/pager-load-more.js';
9
+ </script>
10
+ <d2l-pager-load-more has-more page-size="3" item-count="15"></d2l-pager-load-more>
11
+ ```
12
+
13
+ ## Best Practices
14
+ <!-- docs: start best practices -->
15
+ <!-- docs: start dos -->
16
+ * Consider the performance impact of acquiring the optional total `item-count`. The `item-count` provides useful context for the user, but counting large numbers of rows can be detrimental to performance. As a very general guide, when the total number of rows that needs to be counted is < 50,000, it's not a performance concern.
17
+ <!-- docs: end dos -->
18
+
19
+ ## Load More Paging [d2l-pager-load-more]
20
+
21
+ The `d2l-pager-load-more` component can be used in conjunction with pageable components such as `d2l-list` to provide load-more paging functionality. The pager will dispatch the `d2l-pager-load-more` when clicked, and then the consumer handles the event by loading more items, updating the pager state, and signalling completion by calling `complete()` on the event detail. Focus will be automatically moved on the first new item once complete.
22
+
23
+ See [Pageable Lists](../../components/list/#pageable-lists).
24
+
25
+ ```html
26
+ <d2l-list>
27
+ <d2l-list-item ...></d2l-list-item>
28
+ <d2l-list-item ...></d2l-list-item>
29
+ <d2l-pager-load-more slot="pager" has-more page-size="10" item-count="85"></d2l-pager-load-more>
30
+ </d2l-list>
31
+ ```
32
+
33
+ ```javascript
34
+ pager.addEventListener('d2l-pager-load-more', e => {
35
+ // load more items
36
+ ...
37
+
38
+ e.detail.complete();
39
+ });
40
+ ```
41
+
42
+ <!-- docs: start hidden content -->
43
+ ### Properties
44
+ | Property | Type | Description |
45
+ |---|---|---|
46
+ | `has-more` | Boolean, default: `false` | Whether there are more items that can be loaded. |
47
+ | `item-count` | Number | Total number of items. If not specified, neither it nor the count of items showing will be displayed. |
48
+ | `page-size` | Number, default: 50 | The number of additional items to load. |
49
+
50
+ ### Events
51
+
52
+ | Event | Description |
53
+ |---|---|
54
+ | `d2l-pager-load-more` | Dispatched when the user clicks the Load More button. The `pageSize` can be accessed from the event `target`. The consumer must call the `complete()` method on the event detail to signal completion after the new items have been loaded. |
55
+ <!-- docs: end hidden content -->
@@ -0,0 +1,86 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
+ <meta charset="UTF-8">
6
+ <link rel="stylesheet" href="../../demo/styles.css" type="text/css">
7
+ <script type="module">
8
+ import '../../demo/demo-page.js';
9
+ import '../test/pageable-component.js';
10
+ import '../pager-load-more.js';
11
+ </script>
12
+ <style>
13
+ a {
14
+ outline: none;
15
+ text-decoration: none;
16
+ }
17
+ a:focus {
18
+ text-decoration: underline;
19
+ }
20
+ </style>
21
+ </head>
22
+ <body unresolved>
23
+
24
+ <d2l-demo-page page-title="Paging Components">
25
+
26
+ <h2>Load More Pager</h2>
27
+
28
+ <d2l-demo-snippet>
29
+ <template>
30
+ <d2l-test-pageable>
31
+ <ul>
32
+ <li><a href="https://some-website">item 1</a></li>
33
+ <li><a href="https://some-website">item 2</a></li>
34
+ </ul>
35
+ <d2l-pager-load-more id="pager1" slot="pager" has-more page-size="3" item-count="12"></d2l-pager-load-more>
36
+ </d2l-test-pageable>
37
+ <script>
38
+ document.querySelector('#pager1').addEventListener('d2l-pager-load-more', window.handleLoadMore);
39
+ </script>
40
+ </template>
41
+ </d2l-demo-snippet>
42
+
43
+ <h2>Load More Pager (no item count)</h2>
44
+
45
+ <d2l-demo-snippet>
46
+ <template>
47
+ <d2l-test-pageable>
48
+ <ul>
49
+ <li><a href="https://some-website">item 1</a></li>
50
+ <li><a href="https://some-website">item 2</a></li>
51
+ </ul>
52
+ <d2l-pager-load-more id="pager2" slot="pager" has-more page-size="3"></d2l-pager-load-more>
53
+ </d2l-test-pageable>
54
+ <script>
55
+ document.querySelector('#pager2').addEventListener('d2l-pager-load-more', window.handleLoadMore);
56
+ </script>
57
+ </template>
58
+ </d2l-demo-snippet>
59
+
60
+ </d2l-demo-page>
61
+
62
+ <script>
63
+ const ITEM_COUNT = 12;
64
+ window.handleLoadMore = e => {
65
+ // fake delay
66
+ setTimeout(() => {
67
+ const list = e.target.parentNode.querySelector('ul');
68
+ let remainingCount = ITEM_COUNT - list.children.length;
69
+ const numberToLoad = remainingCount < e.target.pageSize ? remainingCount : e.target.pageSize;
70
+ for (let i = 0; i < numberToLoad; i++) {
71
+ const newItem = list.lastElementChild.cloneNode(true);
72
+ newItem.querySelector('a').textContent = `item ${list.children.length + 1}`;
73
+ list.appendChild(newItem);
74
+ }
75
+ if (list.children.length === ITEM_COUNT) {
76
+ e.target.hasMore = false;
77
+ } else {
78
+ remainingCount = ITEM_COUNT - list.children.length;
79
+ if (remainingCount < e.target.pageSize) e.target.pageSize = remainingCount;
80
+ }
81
+ e.detail.complete();
82
+ }, 1000);
83
+ };
84
+ </script>
85
+ </body>
86
+ </html>
@@ -0,0 +1,35 @@
1
+ import { html } from 'lit';
2
+
3
+ export const PageableMixin = superclass => class extends superclass {
4
+
5
+ constructor() {
6
+ super();
7
+ this._pageable = true;
8
+ }
9
+
10
+ /* must be implemented by consumer */
11
+ _getItemByIndex(index) { } // eslint-disable-line no-unused-vars
12
+
13
+ /* must be implemented by consumer */
14
+ async _getItemsShowingCount() { }
15
+
16
+ /* must be implemented by consumer */
17
+ _getLastItemIndex() { }
18
+
19
+ async _handlePagerSlotChange(e) {
20
+ this._updatePagerCount(await this._getItemsShowingCount(), e.target);
21
+ }
22
+
23
+ _renderPagerContainer() {
24
+ return html`<slot name="pager" @slotchange="${this._handlePagerSlotChange}"></slot>`;
25
+ }
26
+
27
+ _updatePagerCount(count, slot) {
28
+ if (!slot) slot = this.shadowRoot.querySelector('slot[name="pager"]');
29
+ const elements = slot.assignedElements({ flatten: true });
30
+ if (elements.length > 0) {
31
+ elements[0].itemShowingCount = count;
32
+ }
33
+ }
34
+
35
+ };
@@ -0,0 +1,146 @@
1
+ import '../colors/colors.js';
2
+ import '../loading-spinner/loading-spinner.js';
3
+ import { css, html, LitElement, nothing } from 'lit';
4
+ import { buttonStyles } from '../button/button-styles.js';
5
+ import { findComposedAncestor } from '../../helpers/dom.js';
6
+ import { FocusMixin } from '../../mixins/focus-mixin.js';
7
+ import { FocusVisiblePolyfillMixin } from '../../mixins/focus-visible-polyfill-mixin.js';
8
+ import { getFirstFocusableDescendant } from '../../helpers/focus.js';
9
+ import { getSeparator } from '@brightspace-ui/intl/lib/list.js';
10
+ import { labelStyles } from '../typography/styles.js';
11
+ import { LocalizeCoreElement } from '../../helpers/localize-core-element.js';
12
+ import { offscreenStyles } from '../offscreen/offscreen.js';
13
+
14
+ const nativeFocus = document.createElement('div').focus;
15
+
16
+ /**
17
+ * A pager component for load-more paging.
18
+ * @fires d2l-pager-load-more - Dispatched when the user clicks the load-more button. Consumers must call the provided "complete" method once items have been loaded.
19
+ */
20
+ class LoadMore extends FocusMixin(FocusVisiblePolyfillMixin(LocalizeCoreElement(LitElement))) {
21
+
22
+ static get properties() {
23
+ return {
24
+ /**
25
+ * Whether there are more items that can be loaded.
26
+ * @type {boolean}
27
+ */
28
+ hasMore: { type: Boolean, attribute: 'has-more', reflect: true },
29
+ /**
30
+ * Total number of items. If not specified, neither it nor the count of items showing will be displayed.
31
+ * @type {number}
32
+ */
33
+ itemCount: { type: Number, attribute: 'item-count', reflect: true },
34
+ /**
35
+ * The number of additional items to load.
36
+ * @type {number}
37
+ */
38
+ pageSize: { type: Number, attribute: 'page-size', reflect: true },
39
+ /**
40
+ * The number of items showing. Assigned by PageableMixin.
41
+ * @ignore
42
+ */
43
+ itemShowingCount: { attribute: false, type: Number },
44
+ _loading: { state: true }
45
+ };
46
+ }
47
+
48
+ static get styles() {
49
+ return [ buttonStyles, labelStyles, offscreenStyles, css`
50
+ :host {
51
+ display: block;
52
+ }
53
+ :host(:not([has-more])),
54
+ :host([hidden]) {
55
+ display: none;
56
+ }
57
+ button {
58
+ align-items: center;
59
+ background-color: var(--d2l-color-regolith);
60
+ border: 1px solid var(--d2l-color-sylvite);
61
+ display: flex;
62
+ gap: 0.5rem;
63
+ justify-content: center;
64
+ width: 100%;
65
+ }
66
+ button:hover {
67
+ background-color: var(--d2l-color-sylvite);
68
+ border-color: var(--d2l-color-gypsum);
69
+ }
70
+ .action {
71
+ color: var(--d2l-color-celestine);
72
+ }
73
+ .separator {
74
+ border-right: 1px solid var(--d2l-color-mica);
75
+ height: 0.8rem;
76
+ }
77
+ .info {
78
+ color: var(--d2l-color-galena);
79
+ font-weight: 400;
80
+ }
81
+ `];
82
+ }
83
+
84
+ constructor() {
85
+ super();
86
+ this.hasMore = false;
87
+ this.itemCount = -1;
88
+ /** @ignore */
89
+ this.itemShowingCount = 0;
90
+ this.pageSize = 50;
91
+ this._loading = false;
92
+ }
93
+
94
+ static get focusElementSelector() {
95
+ return 'button';
96
+ }
97
+
98
+ render() {
99
+ if (!this.hasMore) return;
100
+ return html`<button ?disabled="${this._loading}" class="d2l-label-text" @click="${this._handleClick}" type="button">
101
+ ${this._loading ? html`
102
+ <span class="d2l-offscreen" role="alert">${this.localize('components.pager-load-more.status-loading')}</span>
103
+ <d2l-loading-spinner size="24"></d2l-loading-spinner>
104
+ ` : html`
105
+ <span class="action">${this.localize('components.pager-load-more.action', { count: this.pageSize })}</span>
106
+ ${this.itemCount > -1 ? html`
107
+ <span class="d2l-offscreen">${getSeparator({ nonBreaking: true })}</span>
108
+ <span class="separator"></span>
109
+ <span class="info">${this.localize('components.pager-load-more.info', { showingCount: this.itemShowingCount, totalCount: this.itemCount })}</span>
110
+ ` : nothing}
111
+ `}
112
+ </button>
113
+ `;
114
+ }
115
+
116
+ async _handleClick() {
117
+ const pageable = findComposedAncestor(this, node => node._pageable);
118
+ if (!pageable) return;
119
+ const lastItemIndex = pageable._getLastItemIndex();
120
+
121
+ await new Promise(resolve => {
122
+ this._loading = true;
123
+ this.dispatchEvent(new CustomEvent('d2l-pager-load-more', {
124
+ bubbles: false,
125
+ composed: false,
126
+ detail: { complete: resolve }
127
+ }));
128
+ });
129
+ this._loading = false;
130
+
131
+ const item = pageable._getItemByIndex(lastItemIndex + 1);
132
+
133
+ if (!item) return;
134
+ if (item.updateComplete) await item.updateComplete;
135
+
136
+ if (item.focus !== nativeFocus) {
137
+ requestAnimationFrame(() => item.focus());
138
+ } else {
139
+ const firstFocusable = getFirstFocusableDescendant(item);
140
+ if (firstFocusable) firstFocusable.focus();
141
+ }
142
+ }
143
+
144
+ }
145
+
146
+ customElements.define('d2l-pager-load-more', LoadMore);
@@ -6533,6 +6533,26 @@
6533
6533
  }
6534
6534
  ]
6535
6535
  },
6536
+ {
6537
+ "name": "d2l-demo-list",
6538
+ "path": "./components/list/demo/demo-list.js",
6539
+ "attributes": [
6540
+ {
6541
+ "name": "grid",
6542
+ "type": "boolean"
6543
+ }
6544
+ ],
6545
+ "properties": [
6546
+ {
6547
+ "name": "grid",
6548
+ "attribute": "grid",
6549
+ "type": "boolean"
6550
+ },
6551
+ {
6552
+ "name": "items"
6553
+ }
6554
+ ]
6555
+ },
6536
6556
  {
6537
6557
  "name": "d2l-demo-list-drag-and-drop-position",
6538
6558
  "path": "./components/list/demo/list-drag-and-drop-position.js",
@@ -7633,6 +7653,10 @@
7633
7653
  {
7634
7654
  "name": "header",
7635
7655
  "description": "Slot for `d2l-list-header` to be rendered above the list"
7656
+ },
7657
+ {
7658
+ "name": "pager",
7659
+ "description": "Slot for `d2l-pager-load-more` to be rendered below the list"
7636
7660
  }
7637
7661
  ]
7638
7662
  },
@@ -8637,6 +8661,64 @@
8637
8661
  }
8638
8662
  ]
8639
8663
  },
8664
+ {
8665
+ "name": "d2l-pager-load-more",
8666
+ "path": "./components/paging/pager-load-more.js",
8667
+ "description": "A pager component for load-more paging.",
8668
+ "attributes": [
8669
+ {
8670
+ "name": "has-more",
8671
+ "description": "Whether there are more items that can be loaded.",
8672
+ "type": "boolean",
8673
+ "default": "false"
8674
+ },
8675
+ {
8676
+ "name": "item-count",
8677
+ "description": "Total number of items. If not specified, neither it nor the count of items showing will be displayed.",
8678
+ "type": "number",
8679
+ "default": "-1"
8680
+ },
8681
+ {
8682
+ "name": "page-size",
8683
+ "description": "The number of additional items to load.",
8684
+ "type": "number",
8685
+ "default": "50"
8686
+ }
8687
+ ],
8688
+ "properties": [
8689
+ {
8690
+ "name": "hasMore",
8691
+ "attribute": "has-more",
8692
+ "description": "Whether there are more items that can be loaded.",
8693
+ "type": "boolean",
8694
+ "default": "false"
8695
+ },
8696
+ {
8697
+ "name": "itemCount",
8698
+ "attribute": "item-count",
8699
+ "description": "Total number of items. If not specified, neither it nor the count of items showing will be displayed.",
8700
+ "type": "number",
8701
+ "default": "-1"
8702
+ },
8703
+ {
8704
+ "name": "pageSize",
8705
+ "attribute": "page-size",
8706
+ "description": "The number of additional items to load.",
8707
+ "type": "number",
8708
+ "default": "50"
8709
+ }
8710
+ ],
8711
+ "events": [
8712
+ {
8713
+ "name": "d2l-pager-load-more",
8714
+ "description": "Dispatched when the user clicks the load-more button. Consumers must call the provided \"complete\" method once items have been loaded."
8715
+ }
8716
+ ]
8717
+ },
8718
+ {
8719
+ "name": "d2l-test-pageable",
8720
+ "path": "./components/paging/test/pageable-component.js"
8721
+ },
8640
8722
  {
8641
8723
  "name": "d2l-test-scroll-wrapper",
8642
8724
  "path": "./components/scroll-wrapper/demo/scroll-wrapper-test.js",
package/lang/ar.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "أقل",
92
92
  "components.more-less.more": "المزيد",
93
93
  "components.overflow-group.moreActions": "مزيد من الإجراءات",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "حدد مادة لتنفيذ هذا الإجراء.",
95
98
  "components.selection.select-all": "تحديد الكل",
96
99
  "components.selection.select-all-items": "تحديد كل المواد الـ {count}.",
package/lang/cy.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "llai",
92
92
  "components.more-less.more": "mwy",
93
93
  "components.overflow-group.moreActions": "Rhagor o Gamau Gweithredu",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Dewiswch eitem i gyflawni'r weithred hon.",
95
98
  "components.selection.select-all": "Dewis y Cyfan",
96
99
  "components.selection.select-all-items": "Dewis Pob {count} Eitem",
package/lang/da.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "færre",
92
92
  "components.more-less.more": "flere",
93
93
  "components.overflow-group.moreActions": "Flere handlinger",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Vælg et element for at udføre denne handling.",
95
98
  "components.selection.select-all": "Vælg alle",
96
99
  "components.selection.select-all-items": "Vælg alle {count} elementer",
package/lang/de.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "Weniger",
92
92
  "components.more-less.more": "mehr",
93
93
  "components.overflow-group.moreActions": "Weitere Aktionen",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Wählen Sie ein Element aus, um diese Aktion auszuführen.",
95
98
  "components.selection.select-all": "Alle auswählen",
96
99
  "components.selection.select-all-items": "Alle {count} Elemente auswählen",
package/lang/en.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "less",
92
92
  "components.more-less.more": "more",
93
93
  "components.overflow-group.moreActions": "More Actions",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Select an item to perform this action.",
95
98
  "components.selection.select-all": "Select All",
96
99
  "components.selection.select-all-items": "Select All {count} Items",
package/lang/es-es.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "menos",
92
92
  "components.more-less.more": "más",
93
93
  "components.overflow-group.moreActions": "Más acciones",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Seleccione un elemento para realizar esta acción.",
95
98
  "components.selection.select-all": "Seleccionar todo",
96
99
  "components.selection.select-all-items": "Seleccione los {count} elementos",
package/lang/es.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "menos",
92
92
  "components.more-less.more": "más",
93
93
  "components.overflow-group.moreActions": "Más acciones",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Seleccione un elemento para realizar esta acción.",
95
98
  "components.selection.select-all": "Seleccionar todo",
96
99
  "components.selection.select-all-items": "Seleccione todos los {count} elementos",
package/lang/fr-fr.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "moins",
92
92
  "components.more-less.more": "plus",
93
93
  "components.overflow-group.moreActions": "Plus d'actions",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Sélectionnez un élément pour exécuter cette action.",
95
98
  "components.selection.select-all": "Tout sélectionner",
96
99
  "components.selection.select-all-items": "Sélectionner tous les {count} éléments",
package/lang/fr.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "moins",
92
92
  "components.more-less.more": "plus",
93
93
  "components.overflow-group.moreActions": "Plus d'actions",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Sélectionner un élément pour exécuter cette action.",
95
98
  "components.selection.select-all": "Tout sélectionner",
96
99
  "components.selection.select-all-items": "Sélectionner tous les {count} éléments",
package/lang/hi.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "कम",
92
92
  "components.more-less.more": "अधिक",
93
93
  "components.overflow-group.moreActions": "अधिक क्रियाएँ",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "यह कार्रवाई निष्पादित करने के लिए कोई आइटम का चयन करें।",
95
98
  "components.selection.select-all": "सभी का चयन करें",
96
99
  "components.selection.select-all-items": "सभी {count} आइटम चुनें।",
package/lang/ja.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "減らす",
92
92
  "components.more-less.more": "増やす",
93
93
  "components.overflow-group.moreActions": "その他のアクション",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "このアクションを実行するための項目を選択します。",
95
98
  "components.selection.select-all": "すべて選択",
96
99
  "components.selection.select-all-items": "{count} 個の項目をすべて選択",
package/lang/ko.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "축소",
92
92
  "components.more-less.more": "더 보기",
93
93
  "components.overflow-group.moreActions": "추가 작업",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "이 작업을 수행할 항목을 선택하십시오.",
95
98
  "components.selection.select-all": "모두 선택",
96
99
  "components.selection.select-all-items": "{count}개 항목을 모두 선택하십시오.",
package/lang/nl.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "minder",
92
92
  "components.more-less.more": "meer",
93
93
  "components.overflow-group.moreActions": "Meer acties",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Selecteer een item om deze actie uit te voeren.",
95
98
  "components.selection.select-all": "Alles selecteren",
96
99
  "components.selection.select-all-items": "Alle {count} records selecteren",
package/lang/pt.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "menos",
92
92
  "components.more-less.more": "mais",
93
93
  "components.overflow-group.moreActions": "Mais ações",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Selecione um item para realizar esta ação.",
95
98
  "components.selection.select-all": "Selecionar tudo",
96
99
  "components.selection.select-all-items": "Selecione todos os {count} itens",
package/lang/sv.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "mindre",
92
92
  "components.more-less.more": "mer",
93
93
  "components.overflow-group.moreActions": "Fler åtgärder",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Välj ett objekt för att utföra åtgärden.",
95
98
  "components.selection.select-all": "Välj alla",
96
99
  "components.selection.select-all-items": "Välj alla {count} objekt",
package/lang/tr.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "daha az",
92
92
  "components.more-less.more": "daha fazla",
93
93
  "components.overflow-group.moreActions": "Daha Fazla Eylem",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "Bu eylemi gerçekleştirebilmek için bir öğe seçin.",
95
98
  "components.selection.select-all": "Tümünü Seç",
96
99
  "components.selection.select-all-items": "{count} Öğenin Tamamını Seç",
package/lang/zh-cn.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "更少",
92
92
  "components.more-less.more": "更多",
93
93
  "components.overflow-group.moreActions": "更多操作",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "选择一个项目后才能执行此操作。",
95
98
  "components.selection.select-all": "全选",
96
99
  "components.selection.select-all-items": "选择全部 {count} 个项目",
package/lang/zh-tw.js CHANGED
@@ -91,6 +91,9 @@ export default {
91
91
  "components.more-less.less": "較少",
92
92
  "components.more-less.more": "較多",
93
93
  "components.overflow-group.moreActions": "其他動作",
94
+ "components.pager-load-more.action": "Load {count} More",
95
+ "components.pager-load-more.info": "{showingCount} of {totalCount} items",
96
+ "components.pager-load-more.status-loading": "Loading more items",
94
97
  "components.selection.action-hint": "選取項目以執行此動作。",
95
98
  "components.selection.select-all": "全選",
96
99
  "components.selection.select-all-items": "選取所有 {count} 個項目",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "2.33.0",
3
+ "version": "2.34.0",
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",