@brightspace-ui/core 3.250.1 → 3.252.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.
@@ -0,0 +1,119 @@
1
+ import { css, unsafeCSS } from 'lit';
2
+ import { _isValidCssSelector } from '../../helpers/internal/css.js';
3
+ import { registerSemanticVariableForSvgImageUrl } from '../colors/colors.js';
4
+
5
+ registerSemanticVariableForSvgImageUrl(
6
+ '--d2l-input-checkbox-check-image',
7
+ `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
8
+ <path fill="var(--d2l-theme-icon-color-standard)" d="M8.4 16.6c.6.6 1.5.6 2.1 0l8-8c.6-.6.6-1.5 0-2.1-.6-.6-1.5-.6-2.1 0l-6.9 7-1.9-1.9c-.6-.6-1.5-.6-2.1 0-.6.6-.6 1.5 0 2.1l2.9 2.9z"/>\
9
+ </svg>`
10
+ );
11
+
12
+ registerSemanticVariableForSvgImageUrl(
13
+ '--d2l-input-checkbox-indeterminate-image',
14
+ `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
15
+ <path fill="var(--d2l-theme-icon-color-standard)" d="M7.5,11h9c0.8,0,1.5,0.7,1.5,1.5l0,0c0,0.8-0.7,1.5-1.5,1.5h-9C6.7,14,6,13.3,6,12.5l0,0C6,11.7,6.7,11,7.5,11z"/>
16
+ </svg>`
17
+ );
18
+
19
+ export const cssSizes = {
20
+ inputBoxSize: 1.2,
21
+ checkboxMargin: 0.5,
22
+ };
23
+
24
+ /**
25
+ * A private helper method that should not be used by general consumers
26
+ */
27
+ export const _generateInputCheckboxStyles = (selector) => {
28
+ if (!_isValidCssSelector(selector)) return;
29
+
30
+ const selectorCSS = unsafeCSS(selector);
31
+ return css`
32
+ ${selectorCSS} {
33
+ --d2l-input-checkbox-background-image: none;
34
+ --d2l-input-checkbox-background-color: var(--d2l-theme-background-color-interactive-faint-default);
35
+ --d2l-input-checkbox-background-image-disabled:
36
+ linear-gradient(
37
+ var(--d2l-theme-background-color-interactive-faint-disabled),
38
+ var(--d2l-theme-background-color-interactive-faint-disabled)
39
+ ),
40
+ var(--d2l-input-checkbox-background-image);
41
+ -webkit-appearance: none;
42
+ -moz-appearance: none;
43
+ appearance: none;
44
+ background-image: var(--d2l-input-checkbox-background-image);
45
+ background-position: center center;
46
+ background-repeat: no-repeat;
47
+ background-size: ${cssSizes.inputBoxSize}rem ${cssSizes.inputBoxSize}rem;
48
+ border-radius: 0.3rem;
49
+ border-style: solid;
50
+ box-sizing: border-box;
51
+ display: inline-block;
52
+ height: ${cssSizes.inputBoxSize}rem;
53
+ margin: 0;
54
+ padding: 0;
55
+ vertical-align: middle;
56
+ width: ${cssSizes.inputBoxSize}rem;
57
+ }
58
+ ${selectorCSS}:checked {
59
+ --d2l-input-checkbox-background-image: var(--d2l-input-checkbox-check-image);
60
+ }
61
+ ${selectorCSS}:indeterminate {
62
+ --d2l-input-checkbox-background-image: var(--d2l-input-checkbox-indeterminate-image);
63
+ }
64
+ ${selectorCSS},
65
+ ${selectorCSS}:hover:disabled {
66
+ background-color: var(--d2l-input-checkbox-background-color);
67
+ border-color: var(--d2l-theme-border-color-emphasized);
68
+ border-width: 1px;
69
+ }
70
+ ${selectorCSS}:hover:disabled {
71
+ border-color: var(--d2l-theme-border-color-disabled);
72
+ }
73
+ ${selectorCSS}:hover,
74
+ ${selectorCSS}:focus,
75
+ ${selectorCSS}.d2l-input-checkbox-focus,
76
+ :host(.d2l-hovering) input[type="checkbox"]:not(:disabled).d2l-input-checkbox {
77
+ border-color: var(--d2l-input-checkbox-border-color-hover-focus, var(--d2l-theme-border-color-focus));
78
+ border-width: 2px;
79
+ outline: none;
80
+ }
81
+ ${selectorCSS}:disabled,
82
+ ${selectorCSS}:where([aria-disabled="true"]) {
83
+ background-image: var(--d2l-input-checkbox-background-image-disabled);
84
+ border-color: var(--d2l-theme-border-color-disabled);
85
+ }
86
+ @media (forced-colors: active) {
87
+ ${selectorCSS}:checked,
88
+ ${selectorCSS}:indeterminate {
89
+ background-image: none;
90
+ position: relative;
91
+ }
92
+ ${selectorCSS}:checked::after,
93
+ ${selectorCSS}:indeterminate::after {
94
+ background-color: FieldText;
95
+ content: "";
96
+ display: block;
97
+ height: ${cssSizes.inputBoxSize}rem;
98
+ left: 50%;
99
+ position: absolute;
100
+ top: 50%;
101
+ transform: translate(-50%, -50%);
102
+ width: ${cssSizes.inputBoxSize}rem;
103
+ }
104
+
105
+ ${selectorCSS}:disabled,
106
+ ${selectorCSS}:where([aria-disabled="true"]) {
107
+ opacity: var(--d2l-theme-opacity-disabled-control);
108
+ }
109
+
110
+ ${selectorCSS}:checked::after {
111
+ mask-image: var(--d2l-input-checkbox-check-image);
112
+ }
113
+
114
+ ${selectorCSS}:indeterminate::after {
115
+ mask-image: var(--d2l-input-checkbox-indeterminate-image);
116
+ }
117
+ }
118
+ `;
119
+ };
@@ -1,5 +1,6 @@
1
1
  import '../expand-collapse/expand-collapse-content.js';
2
2
  import '../tooltip/tooltip.js';
3
+ import { _generateInputCheckboxStyles, cssSizes } from './input-checkbox-styles.js';
3
4
  import { css, html, LitElement, nothing } from 'lit';
4
5
  import { classMap } from 'lit/directives/class-map.js';
5
6
  import { FocusMixin } from '../../mixins/focus/focus-mixin.js';
@@ -8,116 +9,9 @@ import { getUniqueId } from '../../helpers/uniqueId.js';
8
9
  import { ifDefined } from 'lit/directives/if-defined.js';
9
10
  import { InputInlineHelpMixin } from './input-inline-help.js';
10
11
  import { offscreenStyles } from '../offscreen/offscreen.js';
11
- import { registerSemanticVariableForSvgImageUrl } from '../colors/colors.js';
12
12
  import { SkeletonMixin } from '../skeleton/skeleton-mixin.js';
13
13
 
14
- registerSemanticVariableForSvgImageUrl(
15
- '--d2l-input-checkbox-check-image',
16
- `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
17
- <path fill="var(--d2l-theme-icon-color-standard)" d="M8.4 16.6c.6.6 1.5.6 2.1 0l8-8c.6-.6.6-1.5 0-2.1-.6-.6-1.5-.6-2.1 0l-6.9 7-1.9-1.9c-.6-.6-1.5-.6-2.1 0-.6.6-.6 1.5 0 2.1l2.9 2.9z"/>\
18
- </svg>`
19
- );
20
-
21
- registerSemanticVariableForSvgImageUrl(
22
- '--d2l-input-checkbox-indeterminate-image',
23
- `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
24
- <path fill="var(--d2l-theme-icon-color-standard)" d="M7.5,11h9c0.8,0,1.5,0.7,1.5,1.5l0,0c0,0.8-0.7,1.5-1.5,1.5h-9C6.7,14,6,13.3,6,12.5l0,0C6,11.7,6.7,11,7.5,11z"/>
25
- </svg>`
26
- );
27
-
28
- export const cssSizes = {
29
- inputBoxSize: 1.2,
30
- checkboxMargin: 0.5,
31
- };
32
-
33
- export const checkboxStyles = css`
34
- input[type="checkbox"].d2l-input-checkbox {
35
- --d2l-input-checkbox-background-image: none;
36
- --d2l-input-checkbox-background-color: var(--d2l-theme-background-color-interactive-faint-default);
37
- --d2l-input-checkbox-background-image-disabled:
38
- linear-gradient(
39
- var(--d2l-theme-background-color-interactive-faint-disabled),
40
- var(--d2l-theme-background-color-interactive-faint-disabled)
41
- ),
42
- var(--d2l-input-checkbox-background-image);
43
- -webkit-appearance: none;
44
- -moz-appearance: none;
45
- appearance: none;
46
- background-image: var(--d2l-input-checkbox-background-image);
47
- background-position: center center;
48
- background-repeat: no-repeat;
49
- background-size: ${cssSizes.inputBoxSize}rem ${cssSizes.inputBoxSize}rem;
50
- border-radius: 0.3rem;
51
- border-style: solid;
52
- box-sizing: border-box;
53
- display: inline-block;
54
- height: ${cssSizes.inputBoxSize}rem;
55
- margin: 0;
56
- padding: 0;
57
- vertical-align: middle;
58
- width: ${cssSizes.inputBoxSize}rem;
59
- }
60
- input[type="checkbox"].d2l-input-checkbox:checked {
61
- --d2l-input-checkbox-background-image: var(--d2l-input-checkbox-check-image);
62
- }
63
- input[type="checkbox"].d2l-input-checkbox:indeterminate {
64
- --d2l-input-checkbox-background-image: var(--d2l-input-checkbox-indeterminate-image);
65
- }
66
- input[type="checkbox"].d2l-input-checkbox,
67
- input[type="checkbox"].d2l-input-checkbox:hover:disabled {
68
- background-color: var(--d2l-input-checkbox-background-color);
69
- border-color: var(--d2l-theme-border-color-emphasized);
70
- border-width: 1px;
71
- }
72
- input[type="checkbox"].d2l-input-checkbox:hover:disabled {
73
- border-color: var(--d2l-theme-border-color-disabled);
74
- }
75
- input[type="checkbox"].d2l-input-checkbox:hover,
76
- input[type="checkbox"].d2l-input-checkbox:focus,
77
- input[type="checkbox"].d2l-input-checkbox.d2l-input-checkbox-focus,
78
- :host(.d2l-hovering) input[type="checkbox"]:not(:disabled).d2l-input-checkbox {
79
- border-color: var(--d2l-input-checkbox-border-color-hover-focus, var(--d2l-theme-border-color-focus));
80
- border-width: 2px;
81
- outline: none;
82
- }
83
- input[type="checkbox"].d2l-input-checkbox:disabled,
84
- input[type="checkbox"].d2l-input-checkbox:where([aria-disabled="true"]) {
85
- background-image: var(--d2l-input-checkbox-background-image-disabled);
86
- border-color: var(--d2l-theme-border-color-disabled);
87
- }
88
- @media (forced-colors: active) {
89
- input[type="checkbox"].d2l-input-checkbox:checked,
90
- input[type="checkbox"].d2l-input-checkbox:indeterminate {
91
- background-image: none;
92
- position: relative;
93
- }
94
- input[type="checkbox"].d2l-input-checkbox:checked::after,
95
- input[type="checkbox"].d2l-input-checkbox:indeterminate::after {
96
- background-color: FieldText;
97
- content: "";
98
- display: block;
99
- height: ${cssSizes.inputBoxSize}rem;
100
- left: 50%;
101
- position: absolute;
102
- top: 50%;
103
- transform: translate(-50%, -50%);
104
- width: ${cssSizes.inputBoxSize}rem;
105
- }
106
-
107
- input[type="checkbox"].d2l-input-checkbox:disabled,
108
- input[type="checkbox"].d2l-input-checkbox:where([aria-disabled="true"]) {
109
- opacity: var(--d2l-theme-opacity-disabled-control);
110
- }
111
-
112
- input[type="checkbox"].d2l-input-checkbox:checked::after {
113
- mask-image: var(--d2l-input-checkbox-check-image);
114
- }
115
-
116
- input[type="checkbox"].d2l-input-checkbox:indeterminate::after {
117
- mask-image: var(--d2l-input-checkbox-indeterminate-image);
118
- }
119
- }
120
- `;
14
+ export const checkboxStyles = _generateInputCheckboxStyles('input[type="checkbox"].d2l-input-checkbox');
121
15
 
122
16
  /**
123
17
  * A component that can be used to show a checkbox and optional visible label.
@@ -40,11 +40,16 @@ const pointerRotatedLength = Math.SQRT2 * parseFloat(pointerLength);
40
40
 
41
41
  export const isPopoverSupported = ('popover' in HTMLElement.prototype);
42
42
 
43
- const getScrollbarWidth = () => {
44
- const width = window.innerWidth - document.documentElement.clientWidth;
45
- if (width > 0) return width + 1; // 16 when present, but can be 0 even if visible (ex. MacOS depending on settings)
46
- else return 0;
47
- };
43
+ const SCROLLBAR_WIDTH = (() => {
44
+ const div = document.createElement('div');
45
+ div.style.overflow = 'scroll';
46
+ div.style.position = 'fixed';
47
+ div.style.top = '-99999px';
48
+ document.documentElement.appendChild(div);
49
+ const width = div.offsetWidth - div.clientWidth;
50
+ document.documentElement.removeChild(div);
51
+ return width && width + 1;
52
+ })(); // ~16 when present, but can be 0 even if invisible (e.g. macOS depending on settings)
48
53
 
49
54
  export const PopoverMixin = superclass => class extends superclass {
50
55
 
@@ -482,6 +487,10 @@ export const PopoverMixin = superclass => class extends superclass {
482
487
  this._contentHeight = this._maxHeight !== null && availableHeight > this._maxHeight
483
488
  ? this._maxHeight - 2 : availableHeight;
484
489
 
490
+ if (height === (this._maxHeight ?? 0) || content.clientHeight >= availableHeight) {
491
+ this._width = this._width + SCROLLBAR_WIDTH;
492
+ }
493
+
485
494
  // ensure the content height has updated when the __toggleScrollStyles event handler runs
486
495
  await this.updateComplete;
487
496
  }
@@ -493,7 +502,7 @@ export const PopoverMixin = superclass => class extends superclass {
493
502
 
494
503
  };
495
504
 
496
- const scrollWidth = content.scrollWidth;
505
+ const scrollWidth = Math.ceil(content.getBoundingClientRect().width);
497
506
  const availableWidth = window.innerWidth - 40;
498
507
 
499
508
  this._width = (availableWidth > scrollWidth ? scrollWidth : availableWidth);
@@ -823,7 +832,7 @@ export const PopoverMixin = superclass => class extends superclass {
823
832
  }
824
833
 
825
834
  // if no width property set, automatically size to maximum width
826
- let widthOverride = this._width ? this._width : maxWidthOverride;
835
+ let widthOverride = this._width || maxWidthOverride;
827
836
  // ensure width is between minWidth and maxWidth
828
837
  if (widthOverride && maxWidthOverride && widthOverride > (maxWidthOverride - 20)) widthOverride = maxWidthOverride - 20;
829
838
  if (widthOverride && minWidthOverride && widthOverride < (minWidthOverride - 20)) widthOverride = minWidthOverride - 20;
@@ -910,16 +919,16 @@ export const PopoverMixin = superclass => class extends superclass {
910
919
  }
911
920
  } else {
912
921
  if (this._preferredPosition.span === positionSpans.end) {
913
- position.right = window.innerWidth - openerRect.right + xAdjustment - getScrollbarWidth();
922
+ position.right = window.innerWidth - openerRect.right + xAdjustment - SCROLLBAR_WIDTH;
914
923
  } else {
915
- position.left = (window.innerWidth - openerRect.left - xAdjustment - getScrollbarWidth()) * -1;
924
+ position.left = (window.innerWidth - openerRect.left - xAdjustment - SCROLLBAR_WIDTH) * -1;
916
925
  }
917
926
  }
918
927
  } else {
919
928
  if (!this._rtl) {
920
929
  position.left = openerRect.left + ((openerRect.width - pointerRect.width) / 2);
921
930
  } else {
922
- position.right = window.innerWidth - openerRect.left - ((openerRect.width + pointerRect.width) / 2) - getScrollbarWidth();
931
+ position.right = window.innerWidth - openerRect.left - ((openerRect.width + pointerRect.width) / 2) - SCROLLBAR_WIDTH;
923
932
  }
924
933
  }
925
934
 
@@ -937,13 +946,13 @@ export const PopoverMixin = superclass => class extends superclass {
937
946
  if (!this._rtl) {
938
947
  position.right = (openerRect.left - this._offset + 7) * -1; // 7 minor adjustment to position pointer at edge of content
939
948
  } else {
940
- position.left = (window.innerWidth - openerRect.right + 7 - this._offset - getScrollbarWidth()) * -1; // 7 minor adjustment to position pointer at edge of content
949
+ position.left = (window.innerWidth - openerRect.right + 7 - this._offset - SCROLLBAR_WIDTH) * -1; // 7 minor adjustment to position pointer at edge of content
941
950
  }
942
951
  } else {
943
952
  if (!this._rtl) {
944
953
  position.left = openerRect.left + openerRect.width + this._offset - 7; // 7 minor adjustment to position pointer at edge of content
945
954
  } else {
946
- position.right = window.innerWidth - openerRect.left - 7 + this._offset - getScrollbarWidth(); // 7 minor adjustment to position pointer at edge of content
955
+ position.right = window.innerWidth - openerRect.left - 7 + this._offset - SCROLLBAR_WIDTH; // 7 minor adjustment to position pointer at edge of content
947
956
  }
948
957
  }
949
958
 
@@ -962,7 +971,7 @@ export const PopoverMixin = superclass => class extends superclass {
962
971
  if (!this._rtl) {
963
972
  position.left = openerRect.left + xAdjustment;
964
973
  } else {
965
- position.right = window.innerWidth - openerRect.left - openerRect.width + xAdjustment - getScrollbarWidth();
974
+ position.right = window.innerWidth - openerRect.left - openerRect.width + xAdjustment - SCROLLBAR_WIDTH;
966
975
  }
967
976
  }
968
977
 
@@ -983,13 +992,13 @@ export const PopoverMixin = superclass => class extends superclass {
983
992
  if (!this._rtl) {
984
993
  position.right = (openerRect.left - this._offset) * -1;
985
994
  } else {
986
- position.left = (window.innerWidth - openerRect.right - this._offset - getScrollbarWidth()) * -1;
995
+ position.left = (window.innerWidth - openerRect.right - this._offset - SCROLLBAR_WIDTH) * -1;
987
996
  }
988
997
  } else {
989
998
  if (!this._rtl) {
990
999
  position.left = openerRect.left + openerRect.width + this._offset;
991
1000
  } else {
992
- position.right = window.innerWidth - openerRect.left + this._offset - getScrollbarWidth();
1001
+ position.right = window.innerWidth - openerRect.left + this._offset - SCROLLBAR_WIDTH;
993
1002
  }
994
1003
  }
995
1004
 
@@ -1082,7 +1091,7 @@ export const PopoverMixin = superclass => class extends superclass {
1082
1091
  const widthStyle = {
1083
1092
  maxWidth: this._maxWidth ? `${this._maxWidth}px` : undefined,
1084
1093
  minWidth: this._minWidth ? `${this._minWidth}px` : undefined,
1085
- width: this._width ? `${this._width + 3}px` : undefined // add 3 to content to account for possible rounding and also scrollWidth does not include border
1094
+ width: this._width ? `${this._width + 2}px` : undefined
1086
1095
  };
1087
1096
 
1088
1097
  const contentStyle = {
@@ -2,7 +2,7 @@ import '../colors/colors.js';
2
2
  import '../scroll-wrapper/scroll-wrapper.js';
3
3
  import '../backdrop/backdrop-loading.js';
4
4
  import { css, html, LitElement, nothing } from 'lit';
5
- import { cssSizes } from '../inputs/input-checkbox.js';
5
+ import { cssSizes } from '../inputs/input-checkbox-styles.js';
6
6
  import { getComposedParent } from '../../helpers/dom.js';
7
7
  import { getFlag } from '../../helpers/flags.js';
8
8
  import { ifDefined } from 'lit/directives/if-defined.js';
@@ -12269,13 +12269,13 @@
12269
12269
  "properties": [
12270
12270
  {
12271
12271
  "name": "properties",
12272
- "type": "{ demoMode: { type: BooleanConstructor; attribute: string; }; hasFooter: { type: BooleanConstructor; attribute: string; }; hasMainHeader: { type: BooleanConstructor; attribute: string; }; ... 7 more ...; _demoDialogOpened: { ...; }; }",
12273
- "default": "{\"demoMode\":{\"type\":\"Boolean\",\"attribute\":\"demo-mode\"},\"hasFooter\":{\"type\":\"Boolean\",\"attribute\":\"has-footer\"},\"hasMainHeader\":{\"type\":\"Boolean\",\"attribute\":\"has-main-header\"},\"hasSideNavHeader\":{\"type\":\"Boolean\",\"attribute\":\"has-side-nav-header\"},\"hasSideNavPanel\":{\"type\":\"Boolean\",\"attribute\":\"has-side-nav-panel\"},\"hasSupportingHeader\":{\"type\":\"Boolean\",\"attribute\":\"has-supporting-header\"},\"hasSupportingPanel\":{\"type\":\"Boolean\",\"attribute\":\"has-supporting-panel\"},\"navType\":{\"type\":\"String\",\"attribute\":\"nav-type\"},\"widthType\":{\"type\":\"String\",\"attribute\":\"width-type\"},\"_allowThreePanels\":{\"state\":true},\"_demoDialogOpened\":{\"state\":true}}"
12272
+ "type": "{ demoMode: { type: BooleanConstructor; attribute: string; }; hasFooter: { type: BooleanConstructor; attribute: string; }; hasImmersiveHeaderActions: { ...; }; ... 7 more ...; _demoDialogOpened: { ...; }; }",
12273
+ "default": "{\"demoMode\":{\"type\":\"Boolean\",\"attribute\":\"demo-mode\"},\"hasFooter\":{\"type\":\"Boolean\",\"attribute\":\"has-footer\"},\"hasImmersiveHeaderActions\":{\"type\":\"Boolean\",\"attribute\":\"has-immersive-header-actions\"},\"hasMainHeader\":{\"type\":\"Boolean\",\"attribute\":\"has-main-header\"},\"hasSideNavHeader\":{\"type\":\"Boolean\",\"attribute\":\"has-side-nav-header\"},\"hasSupportingHeader\":{\"type\":\"Boolean\",\"attribute\":\"has-supporting-header\"},\"header\":{\"type\":\"String\",\"attribute\":\"header\"},\"immersiveHeaderTitleType\":{\"type\":\"String\",\"attribute\":\"immersive-header-title-type\"},\"layout\":{\"type\":\"String\",\"attribute\":\"layout\"},\"widthType\":{\"type\":\"String\",\"attribute\":\"width-type\"},\"_demoDialogOpened\":{\"state\":true}}"
12274
12274
  },
12275
12275
  {
12276
12276
  "name": "styles",
12277
12277
  "type": "CSSResult[]",
12278
- "default": "[\"selectStyles\",\"tableStyles\",null]"
12278
+ "default": "[\"inputLabelStyles\",\"selectStyles\",\"tableStyles\",null]"
12279
12279
  },
12280
12280
  {
12281
12281
  "name": "demoMode",
@@ -12284,43 +12284,39 @@
12284
12284
  },
12285
12285
  {
12286
12286
  "name": "hasFooter",
12287
- "type": "boolean",
12288
- "default": "false"
12287
+ "type": "boolean"
12288
+ },
12289
+ {
12290
+ "name": "hasImmersiveHeaderActions",
12291
+ "type": "boolean"
12289
12292
  },
12290
12293
  {
12291
12294
  "name": "hasMainHeader",
12292
- "type": "boolean",
12293
- "default": "false"
12295
+ "type": "boolean"
12294
12296
  },
12295
12297
  {
12296
12298
  "name": "hasSideNavHeader",
12297
- "type": "boolean",
12298
- "default": "false"
12299
+ "type": "boolean"
12299
12300
  },
12300
12301
  {
12301
- "name": "hasSideNavPanel",
12302
- "type": "boolean",
12303
- "default": "false"
12302
+ "name": "hasSupportingHeader",
12303
+ "type": "boolean"
12304
12304
  },
12305
12305
  {
12306
- "name": "hasSupportingHeader",
12307
- "type": "boolean",
12308
- "default": "false"
12306
+ "name": "header",
12307
+ "type": "string"
12309
12308
  },
12310
12309
  {
12311
- "name": "hasSupportingPanel",
12312
- "type": "boolean",
12313
- "default": "false"
12310
+ "name": "immersiveHeaderTitleType",
12311
+ "type": "string"
12314
12312
  },
12315
12313
  {
12316
- "name": "navType",
12317
- "type": "string",
12318
- "default": "\"full\""
12314
+ "name": "layout",
12315
+ "type": "string"
12319
12316
  },
12320
12317
  {
12321
12318
  "name": "widthType",
12322
- "type": "'normal'|'wide'|'fullscreen'",
12323
- "default": "\"normal\""
12319
+ "type": "string"
12324
12320
  }
12325
12321
  ]
12326
12322
  },
@@ -1,6 +1,6 @@
1
1
  export function _isValidCssSelector(selector) {
2
2
  const partIsValid = (part) => {
3
- const re = /([a-zA-Z0-9-_ >.#]+)(\[[a-zA-Z0-9-_]+\])?([a-zA-Z0-9-_ >.#]+)?/g;
3
+ const re = /([a-zA-Z0-9-_ >.#]+)(\[[a-zA-Z0-9-_="]+\])?([a-zA-Z0-9-_ >.#]+)?/g;
4
4
  if (part === ':host') return true;
5
5
  const match = part.match(re);
6
6
  const isValid = !!match && match.length === 1 && match[0].length === part.length;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "3.250.1",
3
+ "version": "3.252.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",