@brightspace-ui/core 2.46.2 → 2.47.2

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.
@@ -1,9 +1,9 @@
1
1
  import '../colors/colors.js';
2
- import { codeStyles, HtmlBlockCodeRenderer } from '../../helpers/prism.js';
2
+ import { codeStyles, createHtmlBlockRenderer as createCodeRenderer } from '../../helpers/prism.js';
3
3
  import { css, html, LitElement } from 'lit';
4
4
  import { classMap } from 'lit/directives/class-map.js';
5
+ import { createHtmlBlockRenderer as createMathRenderer } from '../../helpers/mathjax.js';
5
6
  import { HtmlAttributeObserverController } from '../../controllers/attributeObserver/htmlAttributeObserverController.js';
6
- import { HtmlBlockMathRenderer } from '../../helpers/mathjax.js';
7
7
  import { requestInstance } from '../../mixins/provider-mixin.js';
8
8
  import { RtlMixin } from '../../mixins/rtl-mixin.js';
9
9
 
@@ -118,10 +118,11 @@ export const htmlBlockContentStyles = css`
118
118
 
119
119
  let renderers;
120
120
 
121
- const getRenderers = () => {
121
+ const getRenderers = async() => {
122
122
  if (renderers) return renderers;
123
- const tempRenderers = requestInstance(document, 'html-block-renderers');
124
- const defaultRenderers = [ new HtmlBlockMathRenderer(), new HtmlBlockCodeRenderer() ];
123
+ const rendererLoader = requestInstance(document, 'html-block-renderer-loader');
124
+ const tempRenderers = rendererLoader ? await rendererLoader.getRenderers() : undefined;
125
+ const defaultRenderers = [ createMathRenderer(), createCodeRenderer() ];
125
126
  renderers = (tempRenderers ? [ ...defaultRenderers, ...tempRenderers ] : defaultRenderers);
126
127
  return renderers;
127
128
  };
@@ -193,13 +194,18 @@ class HtmlBlock extends RtlMixin(LitElement) {
193
194
  this.noDeferredRendering = false;
194
195
  this._hasSlottedContent = false;
195
196
 
196
- const rendererContextAttributes = getRenderers().reduce((attrs, currentRenderer) => {
197
+ this._contextObserverControllerResolve = undefined;
198
+ this._contextObserverControllerInitialized = new Promise(resolve => {
199
+ this._contextObserverControllerResolve = resolve;
200
+ });
201
+
202
+ getRenderers().then(renderers => renderers.reduce((attrs, currentRenderer) => {
197
203
  if (currentRenderer.contextAttributes) currentRenderer.contextAttributes.forEach(attr => attrs.push(attr));
198
204
  return attrs;
199
- }, []);
200
-
201
- if (rendererContextAttributes.length === 0) return;
202
- this._contextObserverController = new HtmlAttributeObserverController(this, ...rendererContextAttributes);
205
+ }, [])).then(rendererContextAttributes => {
206
+ this._contextObserverController = new HtmlAttributeObserverController(this, ...rendererContextAttributes);
207
+ this._contextObserverControllerResolve();
208
+ });
203
209
  }
204
210
 
205
211
  connectedCallback() {
@@ -245,7 +251,7 @@ class HtmlBlock extends RtlMixin(LitElement) {
245
251
  if (changedProperties.has('html') && this.html !== undefined && this.html !== null && !this._hasSlottedContent) {
246
252
  await this._updateRenderContainer();
247
253
  }
248
- if (this._contextChanged()) {
254
+ if (await this._contextChanged()) {
249
255
  if (this._hasSlottedContent) this._render();
250
256
  else if (this.html !== undefined && this.html !== null) {
251
257
  await this._updateRenderContainer();
@@ -255,8 +261,12 @@ class HtmlBlock extends RtlMixin(LitElement) {
255
261
  }
256
262
  }
257
263
 
258
- _contextChanged() {
259
- if (!this._contextObserverController) return false;
264
+ async _contextChanged() {
265
+ await this._contextObserverControllerInitialized;
266
+ if (!this._contextKeys) {
267
+ this._updateContextKeys();
268
+ return true;
269
+ }
260
270
 
261
271
  if (this._contextKeys.size !== this._contextObserverController.values.size) return true;
262
272
  for (const [attr, val] of this._contextKeys) {
@@ -286,8 +296,10 @@ class HtmlBlock extends RtlMixin(LitElement) {
286
296
  }
287
297
 
288
298
  async _processRenderers(elem) {
289
- for (const renderer of getRenderers()) {
290
- if (this._contextObserverController && renderer.contextAttributes) {
299
+ await this._contextObserverControllerInitialized;
300
+ const renderers = await getRenderers();
301
+ for (const renderer of renderers) {
302
+ if (renderer.contextAttributes) {
291
303
  const contextValues = new Map();
292
304
  renderer.contextAttributes.forEach(attr => contextValues.set(attr, this._contextObserverController.values.get(attr)));
293
305
  await renderer.render(elem, {
@@ -54,6 +54,12 @@
54
54
  text-overflow: ellipsis;
55
55
  white-space: nowrap;
56
56
  }
57
+
58
+ .dark-background {
59
+ background-color: black;
60
+ padding: 20px;
61
+ }
62
+
57
63
  </style>
58
64
  </head>
59
65
 
@@ -152,6 +158,18 @@
152
158
  </template>
153
159
  </d2l-demo-snippet>
154
160
 
161
+ <h2>Tooltip (dark background)</h2>
162
+ <d2l-demo-snippet>
163
+ <template>
164
+ <div class="dark-background">
165
+ <d2l-button id="tooltip-dark-background">Dark Background</d2l-button>
166
+ <d2l-tooltip for="tooltip-dark-background">
167
+ All tooltips have an outline.
168
+ </d2l-tooltip>
169
+ </div>
170
+ </template>
171
+ </d2l-demo-snippet>
172
+
155
173
  <h2>Help Tooltip</h2>
156
174
  <d2l-demo-snippet>
157
175
  <template>
@@ -23,6 +23,7 @@ const defaultViewportMargin = 18;
23
23
  const contentBorderRadius = 6;
24
24
  const contentBorderSize = 1;
25
25
  const contentHorizontalPadding = 15;
26
+ const outlineSize = 1;
26
27
 
27
28
  /* once a user shows a tooltip, ignore delay if they hover adjacent target within this timeout */
28
29
  let delayTimeoutId;
@@ -179,6 +180,7 @@ class Tooltip extends RtlMixin(LitElement) {
179
180
  :host {
180
181
  --d2l-tooltip-background-color: var(--d2l-color-ferrite); /* Deprecated, use state attribute instead */
181
182
  --d2l-tooltip-border-color: var(--d2l-color-ferrite); /* Deprecated, use state attribute instead */
183
+ --d2l-tooltip-outline-color: rgba(255, 255, 255, 0.32);
182
184
  box-sizing: border-box;
183
185
  color: white;
184
186
  display: none;
@@ -273,6 +275,26 @@ class Tooltip extends RtlMixin(LitElement) {
273
275
  width: ${pointerLength}px;
274
276
  }
275
277
 
278
+ :host([_open-dir="top"]) .d2l-tooltip-pointer-outline {
279
+ clip: rect(${pointerOverhang + contentBorderSize + outlineSize * 2}px, 21px, 22px, -3px);
280
+ }
281
+
282
+ :host([_open-dir="bottom"]) .d2l-tooltip-pointer-outline {
283
+ clip: rect(-4px, 21px, ${pointerOverhang + contentBorderSize - outlineSize * 2}px, -7px);
284
+ }
285
+
286
+ :host([_open-dir="left"]) .d2l-tooltip-pointer-outline {
287
+ clip: rect(-3px, 21px, 21px, ${pointerOverhang + contentBorderSize + outlineSize * 2}px);
288
+ }
289
+
290
+ :host([_open-dir="right"]) .d2l-tooltip-pointer-outline {
291
+ clip: rect(-3px, ${pointerOverhang + contentBorderSize - outlineSize * 2}px, 21px, -4px);
292
+ }
293
+
294
+ .d2l-tooltip-pointer-outline > div {
295
+ outline: ${outlineSize}px solid var(--d2l-tooltip-outline-color);
296
+ }
297
+
276
298
  .d2l-tooltip-position {
277
299
  display: inline-block;
278
300
  height: 0;
@@ -295,6 +317,7 @@ class Tooltip extends RtlMixin(LitElement) {
295
317
  max-width: 17.5rem;
296
318
  min-height: 2.1rem;
297
319
  min-width: 2.1rem;
320
+ outline: ${outlineSize}px solid var(--d2l-tooltip-outline-color);
298
321
  overflow: hidden;
299
322
  padding: ${11 - contentBorderSize}px ${contentHorizontalPadding - contentBorderSize}px;
300
323
  position: absolute;
@@ -476,6 +499,9 @@ class Tooltip extends RtlMixin(LitElement) {
476
499
  </div>
477
500
  </div>
478
501
  </div>
502
+ <div class="d2l-tooltip-pointer d2l-tooltip-pointer-outline">
503
+ <div></div>
504
+ </div>
479
505
  <div class="d2l-tooltip-pointer">
480
506
  <div></div>
481
507
  </div>
@@ -14,9 +14,9 @@ export class HtmlAttributeObserverController {
14
14
  );
15
15
 
16
16
  this._host = host;
17
- host.addController(this);
18
17
  this._attributes = attributes;
19
18
  this.values = new Map();
19
+ host.addController(this);
20
20
  }
21
21
 
22
22
  hostConnected() {
@@ -33,7 +33,7 @@ const mathjaxFontMappings = new Map([
33
33
  let mathJaxLoaded;
34
34
  let renderingPromise = Promise.resolve();
35
35
 
36
- export class HtmlBlockMathRenderer {
36
+ class HtmlBlockMathRenderer {
37
37
 
38
38
  get contextAttributes() {
39
39
  return [mathjaxContextAttribute];
@@ -77,6 +77,10 @@ export class HtmlBlockMathRenderer {
77
77
 
78
78
  }
79
79
 
80
+ export function createHtmlBlockRenderer() {
81
+ return new HtmlBlockMathRenderer();
82
+ }
83
+
80
84
  export function loadMathJax(mathJaxConfig) {
81
85
 
82
86
  if (mathJaxLoaded) return mathJaxLoaded;
package/helpers/prism.js CHANGED
@@ -452,7 +452,7 @@ export async function formatCodeElement(elem) {
452
452
  Prism.highlightElement(code);
453
453
  }
454
454
 
455
- export class HtmlBlockCodeRenderer {
455
+ class HtmlBlockCodeRenderer {
456
456
 
457
457
  get canRenderInline() {
458
458
  return true;
@@ -471,3 +471,7 @@ export class HtmlBlockCodeRenderer {
471
471
  }
472
472
 
473
473
  }
474
+
475
+ export function createHtmlBlockRenderer() {
476
+ return new HtmlBlockCodeRenderer();
477
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "2.46.2",
3
+ "version": "2.47.2",
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",