@brightspace-ui/core 3.60.0 → 3.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/dropdown/README.md +0 -2
- package/components/filter/demo/filter.html +7 -2
- package/components/filter/filter.js +0 -7
- package/components/hierarchical-view/demo/hierarchical-view.html +29 -0
- package/components/hierarchical-view/hierarchical-view-mixin.js +38 -26
- package/components/inputs/input-time.js +2 -1
- package/components/menu/menu.js +3 -3
- package/components/table/table-wrapper.js +1 -1
- package/package.json +1 -1
@@ -262,8 +262,6 @@ To make your usage of `d2l-dropdown-more` accessible, use the following property
|
|
262
262
|
import '@brightspace-ui/core/components/dropdown/dropdown-menu.js';
|
263
263
|
import '@brightspace-ui/core/components/menu/menu.js';
|
264
264
|
import '@brightspace-ui/core/components/menu/menu-item.js';
|
265
|
-
import '@brightspace-ui/core/components/tabs/tabs.js';
|
266
|
-
import '@brightspace-ui/core/components/tabs/tab-panel.js';
|
267
265
|
</script>
|
268
266
|
<d2l-dropdown-button text="Open!" primary>
|
269
267
|
<d2l-dropdown-menu opened>
|
@@ -16,7 +16,7 @@
|
|
16
16
|
import './filter-load-more-demo.js';
|
17
17
|
</script>
|
18
18
|
<script>
|
19
|
-
window.D2L = { LP: { Web: { UI: { Flags: { Flag: () =>
|
19
|
+
window.D2L = { LP: { Web: { UI: { Flags: { Flag: () => false } } } } };
|
20
20
|
</script>
|
21
21
|
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1.0">
|
22
22
|
<meta charset="UTF-8">
|
@@ -172,7 +172,12 @@
|
|
172
172
|
<d2l-filter-dimension-set-date-text-value key="today" range="today"></d2l-filter-dimension-set-date-text-value>
|
173
173
|
<d2l-filter-dimension-set-date-text-value key="6months" range="6months"></d2l-filter-dimension-set-date-text-value>
|
174
174
|
<d2l-filter-dimension-set-date-time-range-value key="custom" type="date"></d2l-filter-dimension-set-date-time-range-value>
|
175
|
-
<d2l-filter-dimension-set-date-time-range-value key="custom2" text="Custom Date Range with Time"></d2l-filter-dimension-set-date-time-range-value>
|
175
|
+
<d2l-filter-dimension-set-date-time-range-value key="custom2" text="Custom Date Range with Time" start-value="2024-10-12T12:00:00Z"></d2l-filter-dimension-set-date-time-range-value>
|
176
|
+
</d2l-filter-dimension-set>
|
177
|
+
<d2l-filter-dimension-set key="role" text="Role" selected-first>
|
178
|
+
<d2l-filter-dimension-set-value key="admin" text="Admin" count="0"></d2l-filter-dimension-set-value>
|
179
|
+
<d2l-filter-dimension-set-value key="instructor" text="Instructor" count="22"></d2l-filter-dimension-set-value>
|
180
|
+
<d2l-filter-dimension-set-value key="student" text="Student" count="50"></d2l-filter-dimension-set-value>
|
176
181
|
</d2l-filter-dimension-set>
|
177
182
|
</d2l-filter>
|
178
183
|
</template>
|
@@ -257,13 +257,6 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
257
257
|
firstUpdated(changedProperties) {
|
258
258
|
super.firstUpdated(changedProperties);
|
259
259
|
this.addEventListener('d2l-filter-dimension-data-change', this._handleDimensionDataChange);
|
260
|
-
|
261
|
-
// Prevent these events from bubbling out of the filter
|
262
|
-
this.addEventListener('d2l-hierarchical-view-hide-complete', this._stopPropagation);
|
263
|
-
this.addEventListener('d2l-hierarchical-view-hide-start', this._stopPropagation);
|
264
|
-
this.addEventListener('d2l-hierarchical-view-show-complete', this._stopPropagation);
|
265
|
-
this.addEventListener('d2l-hierarchical-view-show-start', this._stopPropagation);
|
266
|
-
this.addEventListener('d2l-hierarchical-view-resize', this._stopPropagation);
|
267
260
|
}
|
268
261
|
|
269
262
|
render() {
|
@@ -7,6 +7,11 @@
|
|
7
7
|
<script type="module">
|
8
8
|
import '../../demo/demo-page.js';
|
9
9
|
import '../hierarchical-view.js';
|
10
|
+
import '../../dropdown/dropdown-menu.js';
|
11
|
+
import '../../dropdown/dropdown-button.js';
|
12
|
+
import '../../menu/menu.js';
|
13
|
+
import '../../menu/menu-item.js';
|
14
|
+
|
10
15
|
</script>
|
11
16
|
<style>
|
12
17
|
#view1, #view2a, #view2b, #view3, #view4 {
|
@@ -77,6 +82,30 @@
|
|
77
82
|
<div class="buttons">
|
78
83
|
<button id="btn-parent-view-2a">view 1 (parent)</button>
|
79
84
|
<button id="btn-view-3">view 3</button>
|
85
|
+
<d2l-dropdown-button text="Open!" primary>
|
86
|
+
<d2l-dropdown-menu >
|
87
|
+
<d2l-menu label="Astronomy" root-view >
|
88
|
+
<d2l-menu-item text="Introduction"></d2l-menu-item>
|
89
|
+
<d2l-menu-item text="Searching for the Heavens "></d2l-menu-item>
|
90
|
+
<d2l-menu-item text="The Solar System">
|
91
|
+
<d2l-menu>
|
92
|
+
<d2l-menu-item text="Formation"></d2l-menu-item>
|
93
|
+
<d2l-menu-item text="Modern Solar System"></d2l-menu-item>
|
94
|
+
<d2l-menu-item text="Future Solar System"></d2l-menu-item>
|
95
|
+
<d2l-menu-item text="The Planets"></d2l-menu-item>
|
96
|
+
<d2l-menu-item text="The Sun"></d2l-menu-item>
|
97
|
+
<d2l-menu-item text="Solar & Lunar Eclipses"></d2l-menu-item>
|
98
|
+
<d2l-menu-item text="Meteors & Meteorites"></d2l-menu-item>
|
99
|
+
<d2l-menu-item text="Asteroids"></d2l-menu-item>
|
100
|
+
<d2l-menu-item text="Comets"></d2l-menu-item>
|
101
|
+
</d2l-menu>
|
102
|
+
</d2l-menu-item>
|
103
|
+
<d2l-menu-item text="Stars & Galaxies"></d2l-menu-item>
|
104
|
+
<d2l-menu-item text="The Night Sky"></d2l-menu-item>
|
105
|
+
<d2l-menu-item text="The Universe"></d2l-menu-item>
|
106
|
+
</d2l-menu>
|
107
|
+
</d2l-dropdown-menu>
|
108
|
+
</d2l-dropdown-button>
|
80
109
|
</div>
|
81
110
|
view 2a
|
82
111
|
<div class="info">min-height: 400</div>
|
@@ -14,15 +14,16 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
14
14
|
/**
|
15
15
|
* @ignore
|
16
16
|
*/
|
17
|
-
|
17
|
+
hierarchicalView: { type: Boolean },
|
18
18
|
/**
|
19
19
|
* @ignore
|
20
20
|
*/
|
21
|
-
|
21
|
+
rootView: { type: Boolean, attribute: 'root-view' },
|
22
22
|
/**
|
23
23
|
* @ignore
|
24
24
|
*/
|
25
|
-
shown: { type: Boolean, reflect: true }
|
25
|
+
shown: { type: Boolean, reflect: true },
|
26
|
+
_childView: { type: Boolean, reflect: true, attribute: 'child-view' },
|
26
27
|
};
|
27
28
|
}
|
28
29
|
|
@@ -97,10 +98,11 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
97
98
|
constructor() {
|
98
99
|
super();
|
99
100
|
|
100
|
-
/** @ignore */
|
101
|
-
this.childView = false;
|
102
101
|
/** @ignore */
|
103
102
|
this.hierarchicalView = true;
|
103
|
+
/** @ignore */
|
104
|
+
this.rootView = false;
|
105
|
+
this._childView = false;
|
104
106
|
this.__focusPrevious = false;
|
105
107
|
this.__intersectionObserver = null;
|
106
108
|
this.__isAutoSized = false;
|
@@ -111,7 +113,7 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
111
113
|
connectedCallback() {
|
112
114
|
super.connectedCallback();
|
113
115
|
|
114
|
-
this.
|
116
|
+
this.__updateRootView();
|
115
117
|
|
116
118
|
if (typeof(IntersectionObserver) === 'function') {
|
117
119
|
this.__intersectionObserver = new IntersectionObserver((entries) => {
|
@@ -135,7 +137,7 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
135
137
|
}
|
136
138
|
this.__startResizeObserver();
|
137
139
|
|
138
|
-
if (!this.
|
140
|
+
if (!this._childView) {
|
139
141
|
this.addEventListener('focus', this.__focusCapture, true);
|
140
142
|
this.addEventListener('focusout', this.__focusOutCapture, true);
|
141
143
|
this.__onWindowResize = this.__onWindowResize.bind(this);
|
@@ -167,7 +169,7 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
167
169
|
|
168
170
|
const stopPropagation = e => {
|
169
171
|
// only stop for child views, so that Esc from root view can close dropdown
|
170
|
-
if (!this.
|
172
|
+
if (!this._childView) return;
|
171
173
|
e.stopPropagation();
|
172
174
|
};
|
173
175
|
|
@@ -178,8 +180,14 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
178
180
|
this.addEventListener('keyup', stopPropagation);
|
179
181
|
this.addEventListener('keypress', stopPropagation);
|
180
182
|
|
181
|
-
this.
|
183
|
+
this.__updateRootView();
|
182
184
|
|
185
|
+
if (!this.rootView) return;
|
186
|
+
this.addEventListener('d2l-hierarchical-view-hide-complete', this.__stopPropagation);
|
187
|
+
this.addEventListener('d2l-hierarchical-view-hide-start', this.__stopPropagation);
|
188
|
+
this.addEventListener('d2l-hierarchical-view-show-complete', this.__stopPropagation);
|
189
|
+
this.addEventListener('d2l-hierarchical-view-show-start', this.__stopPropagation);
|
190
|
+
this.addEventListener('d2l-hierarchical-view-resize', this.__stopPropagation);
|
183
191
|
}
|
184
192
|
|
185
193
|
getActiveView() {
|
@@ -198,13 +206,13 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
198
206
|
}
|
199
207
|
|
200
208
|
getRootView() {
|
201
|
-
if (!this.
|
209
|
+
if (this.rootView || !this._childView) {
|
202
210
|
return this;
|
203
211
|
}
|
204
212
|
const rootView = findComposedAncestor(
|
205
213
|
this.parentNode,
|
206
214
|
(node) => {
|
207
|
-
return node.
|
215
|
+
return node.rootView;
|
208
216
|
}
|
209
217
|
);
|
210
218
|
return rootView;
|
@@ -228,7 +236,7 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
228
236
|
}
|
229
237
|
|
230
238
|
isActive() {
|
231
|
-
if ((this.
|
239
|
+
if ((this._childView && !this.shown) || !this.shadowRoot) {
|
232
240
|
return false;
|
233
241
|
} else {
|
234
242
|
const content = this.shadowRoot.querySelector('.d2l-hierarchical-view-content');
|
@@ -289,7 +297,7 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
289
297
|
}
|
290
298
|
|
291
299
|
__autoSize(view) {
|
292
|
-
if (this.__isAutoSized || this.
|
300
|
+
if (this.__isAutoSized || this._childView) return;
|
293
301
|
requestAnimationFrame(() => {
|
294
302
|
|
295
303
|
if (view.offsetParent === null) return;
|
@@ -420,17 +428,6 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
420
428
|
}
|
421
429
|
}
|
422
430
|
|
423
|
-
__isChildView() {
|
424
|
-
const parentView = findComposedAncestor(
|
425
|
-
this.parentNode,
|
426
|
-
(node) => { return node.hierarchicalView; }
|
427
|
-
);
|
428
|
-
|
429
|
-
if (parentView) {
|
430
|
-
this.childView = true;
|
431
|
-
}
|
432
|
-
}
|
433
|
-
|
434
431
|
__onHideStart(e) {
|
435
432
|
// re-enable focusable ancestor
|
436
433
|
this.__resetAncestorTabIndicies(e.detail.sourceView);
|
@@ -484,7 +481,7 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
484
481
|
}
|
485
482
|
|
486
483
|
__onKeyDown(e) {
|
487
|
-
if (this.
|
484
|
+
if (this._childView && e.keyCode === escapeKeyCode) {
|
488
485
|
e.stopPropagation();
|
489
486
|
this.hide();
|
490
487
|
return;
|
@@ -498,7 +495,7 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
498
495
|
const rootTarget = e.composedPath()[0];
|
499
496
|
if (rootTarget === this || !rootTarget.hierarchicalView) return;
|
500
497
|
|
501
|
-
if (this.
|
498
|
+
if (this._childView && !this.shown) {
|
502
499
|
/* deep link scenario */
|
503
500
|
this.show(e.detail.data, e.detail.sourceView);
|
504
501
|
}
|
@@ -562,6 +559,10 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
562
559
|
this.__resizeObserver.observe(content);
|
563
560
|
}
|
564
561
|
|
562
|
+
__stopPropagation(e) {
|
563
|
+
e.stopPropagation();
|
564
|
+
}
|
565
|
+
|
565
566
|
__updateAncestorTabIndicies(view, sourceAttribute, targetAttribute) {
|
566
567
|
const rootView = this.getRootView();
|
567
568
|
let node = getComposedParent(view);
|
@@ -577,4 +578,15 @@ export const HierarchicalViewMixin = superclass => class extends superclass {
|
|
577
578
|
}
|
578
579
|
}
|
579
580
|
|
581
|
+
__updateRootView() {
|
582
|
+
if (!this.hasAttribute('root-view')) {
|
583
|
+
const parentView = findComposedAncestor(
|
584
|
+
this.parentNode,
|
585
|
+
(node) => { return node.hierarchicalView; }
|
586
|
+
);
|
587
|
+
this.rootView = !parentView;
|
588
|
+
}
|
589
|
+
this._childView = !this.rootView;
|
590
|
+
}
|
591
|
+
|
580
592
|
};
|
@@ -373,7 +373,8 @@ class InputTime extends InputInlineHelpMixin(FocusMixin(LabelledMixin(SkeletonMi
|
|
373
373
|
class="d2l-input-time-menu"
|
374
374
|
@d2l-menu-item-change="${this._handleDropdownChange}"
|
375
375
|
id="${this._dropdownId}"
|
376
|
-
role="listbox"
|
376
|
+
role="listbox"
|
377
|
+
root-view>
|
377
378
|
${menuItems}
|
378
379
|
</d2l-menu>
|
379
380
|
<div class="d2l-input-time-timezone d2l-body-small" id="${dropdownIdTimezone}" slot="footer">${this._timezone}</div>
|
package/components/menu/menu.js
CHANGED
@@ -128,7 +128,7 @@ class Menu extends ThemeMixin(HierarchicalViewMixin(LitElement)) {
|
|
128
128
|
changedProperties.forEach((oldValue, propName) => {
|
129
129
|
if (propName === 'label') this._labelChanged();
|
130
130
|
|
131
|
-
if (propName === '
|
131
|
+
if (propName === 'rootView' && !this.rootView) {
|
132
132
|
const items = this.shadowRoot.querySelector('.d2l-menu-items');
|
133
133
|
items.insertBefore(this._createReturnItem(), items.childNodes[0]);
|
134
134
|
|
@@ -276,7 +276,7 @@ class Menu extends ThemeMixin(HierarchicalViewMixin(LitElement)) {
|
|
276
276
|
return;
|
277
277
|
}
|
278
278
|
|
279
|
-
if (this.
|
279
|
+
if (!this.rootView && e.keyCode === keyCodes.LEFT) {
|
280
280
|
e.stopPropagation();
|
281
281
|
this.hide();
|
282
282
|
return;
|
@@ -343,7 +343,7 @@ class Menu extends ThemeMixin(HierarchicalViewMixin(LitElement)) {
|
|
343
343
|
}
|
344
344
|
|
345
345
|
_onViewResize(e) {
|
346
|
-
if (this.
|
346
|
+
if (!this.rootView) return;
|
347
347
|
|
348
348
|
const eventDetails = {
|
349
349
|
bubbles: true,
|
@@ -599,7 +599,7 @@ export class TableWrapper extends RtlMixin(PageableMixin(SelectionMixin(LitEleme
|
|
599
599
|
const affectedNodes = [...removedNodes, ...addedNodes];
|
600
600
|
for (const node of affectedNodes) {
|
601
601
|
if (!(node instanceof Element)) continue;
|
602
|
-
updates.classNames ||= node.matches('tr');
|
602
|
+
updates.classNames ||= node.matches('tr, td, th');
|
603
603
|
updates.syncWidths ||= node.matches('tr');
|
604
604
|
updates.sticky ||= node.matches(SELECTORS.headers);
|
605
605
|
updates.count ||= node.matches(SELECTORS.items);
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@brightspace-ui/core",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.61.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",
|