@brightspace-ui/core 3.62.1 → 3.62.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,6 +27,12 @@
27
27
  <template>
28
28
  <d2l-count-badge id="badge-announce-changes"size="small" announce-changes tab-stop text=" 1 new notification." type="notification" number="1"></d2l-count-badge>
29
29
  <d2l-button id="increment-count">Increment Count</d2l-button>
30
+ <script type="module">
31
+ document.getElementById('increment-count').addEventListener('click', () => {
32
+ document.getElementById('badge-announce-changes').number += 1;
33
+ document.getElementById('badge-announce-changes').text = `${document.getElementById('badge-announce-changes').number} new notifications.`;
34
+ });
35
+ </script>
30
36
  </template>
31
37
  </d2l-demo-snippet>
32
38
 
@@ -61,12 +67,7 @@
61
67
  <d2l-count-badge size="small" has-tooltip text=" 2 new notifications." type="notification" number="2"></d2l-count-badge>
62
68
  </template>
63
69
  </d2l-demo-snippet>
70
+
64
71
  </d2l-demo-page>
65
- <script type="module">
66
- document.getElementById('increment-count').addEventListener('click', () => {
67
- document.getElementById('badge-announce-changes').number += 1;
68
- document.getElementById('badge-announce-changes').text = `${document.getElementById('badge-announce-changes').number} new notifications.`;
69
- });
70
- </script>
71
72
  </body>
72
73
  </html>
@@ -36,10 +36,6 @@ class CodeView extends LitElement {
36
36
  super.attributeChangedCallback(name, oldval, newval);
37
37
  }
38
38
 
39
- firstUpdated() {
40
- this._updateCode(this.shadowRoot.querySelector('slot'));
41
- }
42
-
43
39
  render() {
44
40
  return html`
45
41
  <div class="d2l-code-view-src"><slot @slotchange="${this._handleSlotChange}"></slot></div>
@@ -117,10 +117,6 @@ class DemoSnippet extends LitElement {
117
117
  this._skeletonOn = false;
118
118
  }
119
119
 
120
- firstUpdated() {
121
- this._updateCode(this.shadowRoot.querySelector('slot:not([name="_demo"])'));
122
- }
123
-
124
120
  render() {
125
121
  const skeleton = this._hasSkeleton ? html`<d2l-switch text="Skeleton" ?on="${this._skeletonOn}" @change="${this._handleSkeletonChange}"></d2l-switch>` : null;
126
122
  const switches = html`
@@ -137,7 +133,7 @@ class DemoSnippet extends LitElement {
137
133
  <div class="d2l-demo-snippet-demo">
138
134
  <div class="d2l-demo-snippet-demo-padding">
139
135
  <slot name="_demo"></slot>
140
- <slot></slot>
136
+ <slot @slotchange="${this._handleSlotChange}"></slot>
141
137
  </div>
142
138
  </div>
143
139
  ${settings}
@@ -152,15 +148,10 @@ class DemoSnippet extends LitElement {
152
148
  changedProperties.forEach((_, prop) => {
153
149
  if (prop === '_code') {
154
150
  if (this.shadowRoot) this.shadowRoot.querySelector('d2l-code-view').forceUpdate();
155
- this._updateHasSkeleton();
156
151
  }
157
152
  });
158
153
  }
159
154
 
160
- forceCodeUpdate() {
161
- if (this.shadowRoot) this._updateCode(this.shadowRoot.querySelector('slot:not([name="_demo"])'));
162
- }
163
-
164
155
  _applyAttr(name, value, applyToShadowRoot) {
165
156
  const query = this._isTemplate ? 'slot[name="_demo"]' : 'slot:not([name="_demo"])';
166
157
  if (!this.shadowRoot) return;
@@ -239,6 +230,10 @@ class DemoSnippet extends LitElement {
239
230
  this._applyAttr('skeleton', this._skeletonOn, false);
240
231
  }
241
232
 
233
+ _handleSlotChange(e) {
234
+ this._updateCode(e.target);
235
+ }
236
+
242
237
  _removeImportedDemo() {
243
238
  if (!this.shadowRoot) return;
244
239
  const nodes = this.shadowRoot.querySelector('slot[name="_demo"]').assignedNodes();
@@ -276,6 +271,8 @@ class DemoSnippet extends LitElement {
276
271
  }
277
272
  const textNode = document.createTextNode(this._formatCode(tempContainer.innerHTML));
278
273
  this._code = textNode.textContent;
274
+
275
+ this._updateHasSkeleton();
279
276
  }
280
277
 
281
278
  _updateHasSkeleton() {
@@ -23,7 +23,7 @@ class MeterCircle extends MeterMixin(RtlMixin(LitElement)) {
23
23
  .d2l-meter-full-bar {
24
24
  fill: var(--d2l-meter-circle-fill, none);
25
25
  }
26
- .d2l-meter-text {
26
+ .d2l-meter-circle-text {
27
27
  font-size: 0.55rem;
28
28
  }
29
29
  ` ];
@@ -47,6 +47,7 @@ class MeterCircle extends MeterMixin(RtlMixin(LitElement)) {
47
47
  const textClasses = {
48
48
  'd2l-meter-text-ltr': !this.percent,
49
49
  'd2l-body-standard': true,
50
+ 'd2l-meter-circle-text': true,
50
51
  'd2l-meter-text': true
51
52
  };
52
53
 
@@ -22,16 +22,16 @@ import { ifDefined } from 'lit/directives/if-defined.js';
22
22
  import { RtlMixin } from '../../../mixins/rtl/rtl-mixin.js';
23
23
 
24
24
  const columns = ['Population', 'Size', 'Elevation'];
25
- const thText = ['Additional', 'Placeholder', 'Header', 'Row'];
25
+ const thText = ['Additional', 'Placeholder', 'Header', 'Row', 'Cells'];
26
26
 
27
27
  const data = () => [
28
- { name: 'Ottawa, Canada', data: { 'city': 'Ottawa', 'country': 'Canada', 'population': 994837, 'size': 2790, 'elevation': 70 }, selected: true },
29
- { name: 'Toronto, Canada', data: { 'city': 'Toronto', 'country': 'Canada', 'population': 2930000, 'size': 630, 'elevation': 76 }, selected: true },
30
- { name: 'Sydney, Australia', data: { 'city': 'Sydney', 'country': 'Australia', 'population': 5312000, 'size': 12368, 'elevation': 3 }, selected: false },
31
- { name: 'Cairo, Egypt', data: { 'city': 'Cairo', 'country': 'Egypt', 'population': 9540000, 'size': 3085, 'elevation': 23 }, selected: false },
32
- { name: 'Moscow, Russia', data: { 'city': 'Moscow', 'country': 'Russia', 'population': 12712305, 'size': 2511, 'elevation': 124 }, selected: false },
33
- { name: 'London, England', data: { 'city': 'London', 'country': 'England', 'population': 8982000, 'size': 1572, 'elevation': 11 }, selected: false },
34
- { name: 'Tokyo, Japan', data: { 'city': 'Tokyo', 'country': 'Japan', 'population': 13960000, 'size': 2194, 'elevation': 40 }, selected: false }
28
+ { name: 'Ottawa, Canada', data: { 'city': 'Ottawa', 'country': 'Canada', 'population': 994837, 'size': 2790, 'elevation': 70, 'latitude': 45.32, 'longitude': -75.71 }, selected: true },
29
+ { name: 'Toronto, Canada', data: { 'city': 'Toronto', 'country': 'Canada', 'population': 2930000, 'size': 630, 'elevation': 76, 'latitude': 43.69, 'longitude': -79.41 }, selected: true },
30
+ { name: 'Sydney, Australia', data: { 'city': 'Sydney', 'country': 'Australia', 'population': 5312000, 'size': 12368, 'elevation': 3, 'latitude': -33.86, 'longitude': 151.13 }, selected: false },
31
+ { name: 'Cairo, Egypt', data: { 'city': 'Cairo', 'country': 'Egypt', 'population': 9540000, 'size': 3085, 'elevation': 23, 'latitude': 30.05, 'longitude': 31.25 }, selected: false },
32
+ { name: 'Moscow, Russia', data: { 'city': 'Moscow', 'country': 'Russia', 'population': 12712305, 'size': 2511, 'elevation': 124, 'latitude': 55.70, 'longitude': 35.59 }, selected: false },
33
+ { name: 'London, England', data: { 'city': 'London', 'country': 'England', 'population': 8982000, 'size': 1572, 'elevation': 11, 'latitude': 51.49, 'longitude': -0.12 }, selected: false },
34
+ { name: 'Tokyo, Japan', data: { 'city': 'Tokyo', 'country': 'Japan', 'population': 13960000, 'size': 2194, 'elevation': 40, 'latitude': 35.68, 'longitude': 139.74 }, selected: false }
35
35
  ];
36
36
 
37
37
  const formatter = new Intl.NumberFormat('en-US');
@@ -104,20 +104,22 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
104
104
  ${this.multiLine ? html`
105
105
  <tr>
106
106
  <th scope="col" sticky><d2l-selection-select-all></d2l-selection-select-all></th>
107
- ${this._renderDoubleSortButton('Location')}
108
- <th scope="col" colspan="${columns.length}" sticky>
107
+ ${this._renderDoubleSortButton('City', 'Country')}
108
+ <th scope="col" colspan="${columns.length + 1}" sticky>
109
109
  Metrics
110
110
  </th>
111
111
  </tr>
112
112
  <tr>
113
113
  <th scope="col" sticky></th>
114
114
  ${columns.map(columnHeading => this._renderSortButton(columnHeading))}
115
+ ${this._renderMenuSortButton('Coordinates', ['Latitude', 'Longitude'])}
115
116
  </tr>
116
117
  ` : html`
117
118
  <tr>
118
119
  <th scope="col" sticky><d2l-selection-select-all></d2l-selection-select-all></th>
119
- ${this._renderDoubleSortButton('Location')}
120
+ ${this._renderDoubleSortButton('City', 'Country')}
120
121
  ${columns.map(columnHeading => this._renderSortButton(columnHeading))}
122
+ ${this._renderMenuSortButton('Coordinates', ['Latitude', 'Longitude'])}
121
123
  </tr>
122
124
  `}
123
125
  </thead>
@@ -145,7 +147,8 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
145
147
  </d2l-selection-input>
146
148
  </th>
147
149
  <th scope="row">${row.name}</th>
148
- ${columns.map(columnHeading => html`<td>${formatter.format(row.data[columnHeading.toLowerCase()])}</td>`)}
150
+ ${columns.map(columnHeading => { const val = row.data[columnHeading.toLowerCase()]; return val ? html`<td>${formatter.format(val)}</td>` : null; }) }
151
+ <td>${[formatter.format(row.data.latitude), formatter.format(row.data.longitude)].join(', ')}</td>
149
152
  </tr>
150
153
  `)}
151
154
  </tbody>
@@ -162,7 +165,7 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
162
165
  _handlePagerLoadMore(e) {
163
166
  const startIndex = this._data.length + 1;
164
167
  for (let i = 0; i < e.target.pageSize; i++) {
165
- this._data.push({ name: `City ${startIndex + i}, Country ${startIndex + i}`, data: { 'city': `City ${startIndex + i}`, 'country': `Country ${startIndex + i}`, 'population': 26320000, 'size': 6340, 'elevation': 4 }, selected: false });
168
+ this._data.push({ name: `City ${startIndex + i}, Country ${startIndex + i}`, data: { 'city': `City ${startIndex + i}`, 'country': `Country ${startIndex + i}`, 'population': 26320000, 'size': 6340, 'elevation': 4, 'latitude': 3, 'longitude': 3 }, selected: false });
166
169
  }
167
170
  this.requestUpdate();
168
171
  e.detail.complete();
@@ -195,17 +198,31 @@ class TestTable extends RtlMixin(DemoPassthroughMixin(TableWrapper, 'd2l-table-w
195
198
  });
196
199
  }
197
200
 
198
- _renderDoubleSortButton(name) {
199
- const noSort = this._sortField?.toLowerCase() !== 'city' && this._sortField?.toLowerCase() !== 'country';
201
+ _renderDoubleSortButton(item1, item2) {
200
202
  return html`
201
203
  <th rowspan="${this.multiLine ? 2 : 1}" scope="col">
204
+ <d2l-table-col-sort-button
205
+ @click="${this._handleSort}"
206
+ ?desc="${this._sortDesc}"
207
+ ?nosort="${this._sortField !== item1.toLowerCase()}">${item1}</d2l-table-col-sort-button>
208
+ <d2l-table-col-sort-button
209
+ @click="${this._handleSort}"
210
+ ?desc="${this._sortDesc}"
211
+ ?nosort="${this._sortField !== item2.toLowerCase()}">${item2}</d2l-table-col-sort-button>
212
+ </th>
213
+ `;
214
+ }
215
+
216
+ _renderMenuSortButton(name, items) {
217
+ const noSort = !items.map(i => i.toLowerCase()).includes(this._sortField?.toLowerCase());
218
+ return html`
219
+ <th scope="col">
202
220
  <d2l-table-col-sort-button
203
221
  ?desc="${this._sortDesc}"
204
- ?nosort="${noSort}">${name}
205
- <d2l-table-col-sort-button-item slot="items" text="City, A to Z" data-field="city" @d2l-table-col-sort-button-item-change="${this._handleSortComplex}" value="1"></d2l-table-col-sort-button-item>
206
- <d2l-table-col-sort-button-item slot="items" text="City, Z to A" data-field="city" data-desc @d2l-table-col-sort-button-item-change="${this._handleSortComplex}" value="2"></d2l-table-col-sort-button-item>
207
- <d2l-table-col-sort-button-item slot="items" text="Country, A to Z" data-field="country" @d2l-table-col-sort-button-item-change="${this._handleSortComplex}" value="3"></d2l-table-col-sort-button-item>
208
- <d2l-table-col-sort-button-item slot="items" text="Country, Z to A" data-field="country" data-desc @d2l-table-col-sort-button-item-change="${this._handleSortComplex}" value="4"></d2l-table-col-sort-button-item>
222
+ ?nosort="${noSort}">
223
+ <span>${name}</span>${items.map((item, idx) => html`
224
+ <d2l-table-col-sort-button-item slot="items" text="${item}, ascending" data-field="${item.toLowerCase()}" @d2l-table-col-sort-button-item-change="${this._handleSortComplex}" value="${idx * 2 + 1}"></d2l-table-col-sort-button-item>
225
+ <d2l-table-col-sort-button-item slot="items" text="${item}, descending" data-field="${item.toLowerCase()}" data-desc @d2l-table-col-sort-button-item-change="${this._handleSortComplex}" value="${idx * 2 + 2}"></d2l-table-col-sort-button-item>`)}
209
226
  </d2l-table-col-sort-button>
210
227
  </th>
211
228
  `;
@@ -111,9 +111,7 @@ export const tableStyles = css`
111
111
  .d2l-table th.d2l-table-header-col-sortable-siblings d2l-table-col-sort-button {
112
112
  --d2l-table-col-sort-button-width: unset;
113
113
  }
114
- .d2l-table-header-col-sortable-no-sorted.d2l-table-header-col-sortable-siblings :last-child {
115
- padding-inline-end: calc(0.6rem + 18px);
116
- }
114
+
117
115
  @supports selector(:has(a, b)) {
118
116
  .d2l-table > * > tr > th:has(d2l-table-col-sort-button) {
119
117
  height: calc(var(--d2l-table-cell-overall-height) - var(--d2l-table-cell-col-sort-button-size-offset));
@@ -129,7 +127,8 @@ export const tableStyles = css`
129
127
  .d2l-table th d2l-table-col-sort-button[nosort] ~ :last-child {
130
128
  padding-inline-end: calc(0.6rem + 18px);
131
129
  }
132
- .d2l-table th d2l-table-col-sort-button:not([nosort]) ~ :last-child {
130
+ .d2l-table th d2l-table-col-sort-button:not([nosort]) ~ :last-child,
131
+ .d2l-table th d2l-table-col-sort-button:last-child:not([nosort]) {
133
132
  padding-inline-end: unset;
134
133
  }
135
134
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "3.62.1",
3
+ "version": "3.62.3",
4
4
  "description": "A collection of accessible, free, open-source web components for building Brightspace applications",
5
5
  "type": "module",
6
6
  "repository": "https://github.com/BrightspaceUI/core.git",