@brightspace-ui/core 2.47.1 → 2.47.4

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,5 +1,5 @@
1
1
  # Description List
2
- A Description List displays information in a vertical list of key-value pairs. Common usages could include terms & definitions, or fields & values.
2
+ A Description List displays static pairs of terms and definitions in a vertical list. In the standard HTML element `dl` these are called "terms" `dt` and "definitions" `dd`.
3
3
 
4
4
  <!-- docs: demo -->
5
5
  ```html
@@ -10,16 +10,20 @@ A Description List displays information in a vertical list of key-value pairs. C
10
10
  ```
11
11
 
12
12
  ## Best Practices
13
+
13
14
  <!-- docs: start best practices -->
14
15
  <!-- docs: start dos -->
15
- * Terms and descriptions are 1-to-1
16
+ * Keep terms short and scannable
17
+ * Use terms of similar lengths since definitions are aligned to the longest term
18
+ * Use title case for terms and sentence case for definitions
19
+ * Adjust the [responsive breakpoint](#responsive-behavior) to suit your content since longer values may need a higher breakpoint
16
20
  <!-- docs: end dos -->
17
21
 
18
22
  <!-- docs: start donts -->
19
- * Don't have a term without a description
20
- * Don't have a description without a term
21
- * Don't have multiple terms for a description
22
- * Don't have multiple descriptions for a term
23
+ * Avoid using multiple description lists on one page
24
+ * Don't use empty terms or definitions, both are required
25
+ * Don't use colons in the labels, they're unnecessary
26
+ * Don't end a definition with a period unless it has multiple sentences
23
27
  <!-- docs: end donts -->
24
28
  <!-- docs: end best practices -->
25
29
 
@@ -42,11 +46,14 @@ When the component width is less than the `breakpoint` property, the side-by-sid
42
46
  return html`
43
47
  <d2l-dl-wrapper breakpoint="600">
44
48
  <dl>
45
- <dt>Course Code That Represents The Course as a Short String</dt>
46
- <dd>A short string that represents the course, often with important information such as section or room number.</dd>
49
+ <dt>Active Course</dt>
50
+ <dd>Inactive courses are invisible, regardless of start or end dates unless the user’s role has the permission "Can View Inactive Courses"</dd>
51
+
52
+ <dt>Start Date</dt>
53
+ <dd>The start date determines when a course becomes available to learners. Users with the "Can View Course Before Start Date" permission are excluded from this restriction.</dd>
47
54
 
48
- <dt>Availability Dates</dt>
49
- <dd>The start and end date for the course. Learners can't access courses outside these dates.</dd>
55
+ <dt>End Date</dt>
56
+ <dd>The end date determines when a course becomes unavailable to learners. Users with the "Can View Course After End Date" permission are excluded from this restriction.</dd>
50
57
  </dl>
51
58
  </d2l-dl-wrapper>
52
59
  `;
@@ -60,9 +67,9 @@ When the component width is less than the `breakpoint` property, the side-by-sid
60
67
 
61
68
  ## Description List Wrapper [d2l-dl-wrapper]
62
69
 
63
- The `d2l-dl-wrapper` can be combined with `descriptionListStyles` to apply styling and resize behavior to native `dl` elements.
70
+ The `d2l-dl-wrapper` component can be combined with `descriptionListStyles` to apply styling and resize behavior to native `dl` elements.
64
71
 
65
- <!-- docs: demo live name:d2l-test-dl -->
72
+ <!-- docs: demo live name:d2l-test-dl display:block -->
66
73
  ```html
67
74
  <script type="module">
68
75
  import { html, LitElement } from 'lit';
@@ -84,11 +91,17 @@ The `d2l-dl-wrapper` can be combined with `descriptionListStyles` to apply styli
84
91
  return html`
85
92
  <d2l-dl-wrapper breakpoint="${this.breakpoint}">
86
93
  <dl>
87
- <dt>Course Code That Represents The Course as a Short String</dt>
88
- <dd>A short string that represents the course, often with important information such as section or room number.</dd>
94
+ <dt>Course Name</dt>
95
+ <dd>Brightspace 101B</dd>
96
+
97
+ <dt>Course Code</dt>
98
+ <dd>BSPC 101B</dd>
99
+
100
+ <dt>Start Date</dt>
101
+ <dd>June 14 2022</dd>
89
102
 
90
- <dt>Availability Dates</dt>
91
- <dd>The start and end date for the course. Learners can't access courses outside these dates.</dd>
103
+ <dt>Semester</dt>
104
+ <dd>2022 Summer</dd>
92
105
  </dl>
93
106
  </d2l-dl-wrapper>
94
107
  `;
@@ -4,26 +4,26 @@ import { classMap } from 'lit/directives/class-map.js';
4
4
  import ResizeObserver from 'resize-observer-polyfill/dist/ResizeObserver.es.js';
5
5
 
6
6
  export const descriptionListStyles = [
7
- _generateLabelStyles('dt'),
8
- _generateBodyCompactStyles('dd'),
7
+ _generateLabelStyles('d2l-dl-wrapper > dl > dt'),
8
+ _generateBodyCompactStyles('d2l-dl-wrapper > dl > dd'),
9
9
  css`
10
- :host {
10
+ d2l-dl-wrapper {
11
11
  --d2l-dl-wrapper-dt-min-width: min-content;
12
12
  --d2l-dl-wrapper-dt-max-width: 10rem;
13
13
  --d2l-dl-wrapper-dd-min-width: 50%;
14
14
  }
15
- dl {
15
+ d2l-dl-wrapper > dl {
16
16
  align-items: baseline;
17
17
  display: var(--d2l-dl-wrapper-dl-display, grid);
18
18
  gap: 0.3rem 1.5rem;
19
19
  grid-auto-flow: row;
20
20
  grid-template-columns: minmax(var(--d2l-dl-wrapper-dt-min-width), auto) minmax(var(--d2l-dl-wrapper-dd-min-width), 1fr);
21
21
  }
22
- dt {
22
+ d2l-dl-wrapper > dl > dt {
23
23
  margin: var(--d2l-dl-wrapper-dt-margin, 0);
24
24
  max-width: var(--d2l-dl-wrapper-dt-max-width);
25
25
  }
26
- dd {
26
+ d2l-dl-wrapper > dl > dd {
27
27
  margin: var(--d2l-dl-wrapper-dd-margin, 0);
28
28
  }
29
29
  `,
@@ -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>
@@ -2,7 +2,7 @@ import '../colors/colors.js';
2
2
  import { css, unsafeCSS } from 'lit';
3
3
 
4
4
  export const _isValidCssSelector = (selector) => {
5
- const re = /[#.]?([a-zA-Z0-9-_]+)(\[[a-zA-Z0-9-_]+\])?([a-zA-Z0-9-_]+)?/g;
5
+ const re = /([a-zA-Z0-9-_ >.#]+)(\[[a-zA-Z0-9-_]+\])?([a-zA-Z0-9-_ >.#]+)?/g;
6
6
  const match = selector.match(re);
7
7
 
8
8
  return !!match && match.length === 1 && match[0].length === selector.length;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "2.47.1",
3
+ "version": "2.47.4",
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",