@brightspace-ui/core 3.267.1 → 3.268.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.
Files changed (113) hide show
  1. package/components/alert/alert-toast.js +98 -102
  2. package/components/alert/alert.js +109 -113
  3. package/components/backdrop/backdrop-dirty-overlay.js +13 -17
  4. package/components/backdrop/backdrop-loading.js +105 -109
  5. package/components/backdrop/backdrop.js +50 -54
  6. package/components/breadcrumbs/breadcrumb-current-page.js +19 -23
  7. package/components/breadcrumbs/breadcrumb.js +50 -54
  8. package/components/breadcrumbs/breadcrumbs.js +34 -38
  9. package/components/button/button-add.js +156 -164
  10. package/components/button/button-copy-mixin.js +9 -11
  11. package/components/button/button-copy.js +15 -19
  12. package/components/button/button-icon.js +110 -114
  13. package/components/button/button-move.js +153 -157
  14. package/components/button/button-split-item.js +16 -20
  15. package/components/button/button-split.js +70 -74
  16. package/components/button/button-subtle-copy.js +17 -19
  17. package/components/button/button-subtle.js +145 -149
  18. package/components/button/button-toggle.js +25 -29
  19. package/components/button/button.js +70 -74
  20. package/components/button/floating-buttons.js +63 -67
  21. package/components/calendar/calendar.js +244 -248
  22. package/components/card/card-content-meta.js +13 -15
  23. package/components/card/card-content-title.js +9 -11
  24. package/components/card/card-footer-link.js +76 -80
  25. package/components/card/card-loading-shimmer.js +35 -39
  26. package/components/card/card.js +188 -192
  27. package/components/collapsible-panel/collapsible-panel-group.js +17 -21
  28. package/components/collapsible-panel/collapsible-panel-summary-item.js +27 -31
  29. package/components/collapsible-panel/collapsible-panel.js +258 -262
  30. package/components/count-badge/count-badge-icon.js +12 -16
  31. package/components/count-badge/count-badge-mixin.js +124 -128
  32. package/components/count-badge/count-badge.js +2 -4
  33. package/components/description-list/description-list-wrapper.js +27 -31
  34. package/components/dialog/dialog-confirm.js +55 -59
  35. package/components/dialog/dialog-fullscreen.js +128 -132
  36. package/components/dialog/dialog-mixin.js +39 -41
  37. package/components/dialog/dialog.js +61 -65
  38. package/components/dropdown/dropdown-button-subtle.js +21 -25
  39. package/components/dropdown/dropdown-button.js +31 -35
  40. package/components/dropdown/dropdown-context-menu.js +28 -31
  41. package/components/dropdown/dropdown-menu.js +27 -31
  42. package/components/dropdown/dropdown-more.js +23 -26
  43. package/components/dropdown/dropdown-opener-mixin.js +44 -46
  44. package/components/dropdown/dropdown-popover-mixin.js +155 -159
  45. package/components/dropdown/dropdown-tabs.js +5 -7
  46. package/components/dropdown/dropdown.js +1 -3
  47. package/components/empty-state/empty-state-action-button.js +18 -22
  48. package/components/empty-state/empty-state-action-link.js +14 -18
  49. package/components/empty-state/empty-state-illustrated.js +21 -25
  50. package/components/empty-state/empty-state-simple.js +8 -12
  51. package/components/expand-collapse/expand-collapse-content.js +48 -52
  52. package/components/filter/filter-dimension-set-date-text-value.js +34 -36
  53. package/components/filter/filter-dimension-set-date-time-range-value.js +45 -47
  54. package/components/filter/filter-dimension-set-empty-state.js +17 -19
  55. package/components/filter/filter-dimension-set-value.js +27 -29
  56. package/components/filter/filter-dimension-set.js +65 -67
  57. package/components/filter/filter-overflow-group.js +15 -19
  58. package/components/filter/filter-tags.js +16 -19
  59. package/components/filter/filter.js +115 -119
  60. package/components/focus-trap/focus-trap.js +17 -21
  61. package/components/form/form-element-mixin.js +33 -35
  62. package/components/form/form-error-summary.js +37 -42
  63. package/components/form/form.js +33 -37
  64. package/components/hierarchical-view/hierarchical-view-mixin.js +76 -80
  65. package/components/hierarchical-view/hierarchical-view.js +5 -7
  66. package/components/html-block/html-block.js +45 -49
  67. package/components/icons/icon-custom.js +20 -24
  68. package/components/icons/icon.js +20 -24
  69. package/components/icons/slotted-icon-mixin.js +16 -18
  70. package/components/inputs/input-checkbox-group.js +34 -38
  71. package/components/inputs/input-checkbox.js +106 -110
  72. package/components/inputs/input-color.js +142 -148
  73. package/components/inputs/input-date-range.js +90 -94
  74. package/components/inputs/input-date-time-range-to.js +70 -74
  75. package/components/inputs/input-date-time-range.js +110 -115
  76. package/components/inputs/input-date-time.js +75 -79
  77. package/components/inputs/input-date.js +101 -105
  78. package/components/inputs/input-fieldset.js +37 -43
  79. package/components/inputs/input-group.js +10 -12
  80. package/components/inputs/input-inline-help.js +4 -6
  81. package/components/inputs/input-number.js +112 -118
  82. package/components/inputs/input-percent.js +52 -58
  83. package/components/inputs/input-radio-group.js +45 -49
  84. package/components/inputs/input-radio-spacer.js +11 -13
  85. package/components/inputs/input-radio.js +62 -66
  86. package/components/inputs/input-search.js +63 -68
  87. package/components/inputs/input-select-styles.js +30 -25
  88. package/components/inputs/input-text.js +245 -251
  89. package/components/inputs/input-textarea.js +128 -132
  90. package/components/inputs/input-time-range.js +100 -104
  91. package/components/inputs/input-time.js +107 -113
  92. package/components/link/link-mixin.js +37 -41
  93. package/components/link/link.js +113 -119
  94. package/components/list/list-controls.js +25 -29
  95. package/components/list/list-item-button-mixin.js +10 -12
  96. package/components/list/list-item-checkbox-mixin.js +35 -37
  97. package/components/list/list-item-content.js +33 -35
  98. package/components/list/list-item-drag-drop-mixin.js +45 -47
  99. package/components/list/list-item-drag-handle.js +80 -84
  100. package/components/list/list-item-drag-image.js +77 -81
  101. package/components/list/list-item-expand-collapse-mixin.js +17 -19
  102. package/components/list/list-item-generic-layout.js +222 -226
  103. package/components/list/list-item-link-mixin.js +10 -12
  104. package/components/list/list-item-mixin.js +68 -70
  105. package/components/list/list-item-nav-mixin.js +17 -19
  106. package/components/list/list-item-placement-marker.js +65 -67
  107. package/components/list/list-item-role-mixin.js +9 -11
  108. package/components/list/list-item.js +7 -9
  109. package/components/list/list.js +121 -125
  110. package/components/loading-spinner/loading-spinner.js +93 -97
  111. package/custom-elements.json +1920 -6694
  112. package/helpers/focus.js +5 -1
  113. package/package.json +3 -2
@@ -8,45 +8,41 @@ import { PropertyRequiredMixin } from '../../mixins/property-required/property-r
8
8
  */
9
9
  class InputCheckboxGroup extends PropertyRequiredMixin(LitElement) {
10
10
 
11
- static get properties() {
12
- return {
13
- /**
14
- * REQUIRED: Label for the group of checkboxes
15
- * @type {string}
16
- */
17
- label: { required: true, type: String },
18
- /**
19
- * Hides the label visually
20
- * @type {boolean}
21
- */
22
- labelHidden: { attribute: 'label-hidden', reflect: true, type: Boolean }
23
- };
24
- }
11
+ static properties = {
12
+ /**
13
+ * REQUIRED: Label for the group of checkboxes
14
+ * @type {string}
15
+ */
16
+ label: { required: true, type: String },
17
+ /**
18
+ * Hides the label visually
19
+ * @type {boolean}
20
+ */
21
+ labelHidden: { attribute: 'label-hidden', reflect: true, type: Boolean }
22
+ };
25
23
 
26
- static get styles() {
27
- return [inputLabelStyles, css`
28
- :host {
29
- display: block;
30
- }
31
- :host([hidden]) {
32
- display: none;
33
- }
34
- .wrapper {
35
- display: flex;
36
- flex-direction: column;
37
- gap: 0.6rem;
38
- }
39
- ::slotted(d2l-input-checkbox) {
40
- margin-bottom: 0;
41
- }
42
- .d2l-input-label {
43
- margin-block-end: 0.6rem;
44
- }
45
- .d2l-input-label[hidden] {
46
- display: none;
47
- }
48
- `];
49
- }
24
+ static styles = [inputLabelStyles, css`
25
+ :host {
26
+ display: block;
27
+ }
28
+ :host([hidden]) {
29
+ display: none;
30
+ }
31
+ .wrapper {
32
+ display: flex;
33
+ flex-direction: column;
34
+ gap: 0.6rem;
35
+ }
36
+ ::slotted(d2l-input-checkbox) {
37
+ margin-bottom: 0;
38
+ }
39
+ .d2l-input-label {
40
+ margin-block-end: 0.6rem;
41
+ }
42
+ .d2l-input-label[hidden] {
43
+ display: none;
44
+ }
45
+ `];
50
46
 
51
47
  constructor() {
52
48
  super();
@@ -21,116 +21,112 @@ export const checkboxStyles = _generateInputCheckboxStyles('input[type="checkbox
21
21
  */
22
22
  class InputCheckbox extends FormElementMixin(InputInlineHelpMixin(FocusMixin(SkeletonMixin(LitElement)))) {
23
23
 
24
- static get properties() {
25
- return {
26
- /**
27
- * @ignore
28
- */
29
- ariaLabel: { type: String, attribute: 'aria-label' },
30
- /**
31
- * Checked state
32
- * @type {boolean}
33
- */
34
- checked: { type: Boolean },
35
- /**
36
- * ACCESSIBILITY: Additional information communicated to screenreader users when focusing on the input
37
- * @type {string}
38
- */
39
- description: { type: String },
40
- /**
41
- * Disables the input
42
- * @type {boolean}
43
- */
44
- disabled: { type: Boolean },
45
- /**
46
- * Tooltip text when disabled
47
- * @type {string}
48
- */
49
- disabledTooltip: { type: String, attribute: 'disabled-tooltip' },
50
- /**
51
- * Sets checkbox to an indeterminate state
52
- * @type {boolean}
53
- */
54
- indeterminate: { type: Boolean },
55
- /**
56
- * REQUIRED: Label for the input
57
- * @type {string}
58
- */
59
- label: { type: String },
60
- /**
61
- * Hides the label visually
62
- * @type {boolean}
63
- */
64
- labelHidden: { attribute: 'label-hidden', reflect: true, type: Boolean },
65
- /**
66
- * Hides the supporting slot when unchecked
67
- * @type {boolean}
68
- */
69
- supportingHiddenWhenUnchecked: { type: Boolean, attribute: 'supporting-hidden-when-unchecked', reflect: true },
70
- /**
71
- * Value of the input
72
- * @type {string}
73
- */
74
- value: { type: String },
75
- _hasSupporting: { state: true },
76
- _isHovered: { state: true },
77
- };
78
- }
79
-
80
- static get styles() {
81
- return [ super.styles, checkboxStyles, offscreenStyles,
82
- css`
83
- :host {
84
- display: block;
85
- margin-block-end: 0.6rem;
86
- }
87
- :host([hidden]) {
88
- display: none;
89
- }
90
- :host([label-hidden]) {
91
- display: inline-block;
92
- margin-block-end: 0;
93
- }
94
- label {
95
- display: flex;
96
- line-height: ${cssSizes.inputBoxSize}rem;
97
- overflow-wrap: anywhere;
98
- }
99
- .d2l-input-checkbox-wrapper {
100
- display: inline-block;
101
- }
102
- .d2l-input-checkbox-text {
103
- color: var(--d2l-theme-text-color-static-standard);
104
- display: inline-block;
105
- font-size: 0.8rem;
106
- font-weight: 400;
107
- margin-inline-start: ${cssSizes.checkboxMargin}rem;
108
- vertical-align: top;
109
- white-space: normal;
110
- }
111
- :host([label-hidden]) .d2l-input-checkbox-text {
112
- margin-inline-start: 0;
113
- }
114
- :host([skeleton]) .d2l-input-checkbox-text.d2l-skeletize::before {
115
- bottom: 0.3rem;
116
- top: 0.3rem;
117
- }
118
- .d2l-input-inline-help,
119
- .d2l-input-checkbox-supporting {
120
- margin-inline-start: ${cssSizes.inputBoxSize + cssSizes.checkboxMargin}rem;
121
- }
122
- :host(:not([skeleton])) .d2l-input-checkbox-text-disabled {
123
- opacity: 0.5;
124
- }
125
- input[type="checkbox"].d2l-input-checkbox {
126
- vertical-align: top;
127
- }
128
- .d2l-input-checkbox-supporting {
129
- margin-block-start: 0.6rem;
130
- }
131
- `
132
- ];
133
- }
24
+ static properties = {
25
+ /**
26
+ * @ignore
27
+ */
28
+ ariaLabel: { type: String, attribute: 'aria-label' },
29
+ /**
30
+ * Checked state
31
+ * @type {boolean}
32
+ */
33
+ checked: { type: Boolean },
34
+ /**
35
+ * ACCESSIBILITY: Additional information communicated to screenreader users when focusing on the input
36
+ * @type {string}
37
+ */
38
+ description: { type: String },
39
+ /**
40
+ * Disables the input
41
+ * @type {boolean}
42
+ */
43
+ disabled: { type: Boolean },
44
+ /**
45
+ * Tooltip text when disabled
46
+ * @type {string}
47
+ */
48
+ disabledTooltip: { type: String, attribute: 'disabled-tooltip' },
49
+ /**
50
+ * Sets checkbox to an indeterminate state
51
+ * @type {boolean}
52
+ */
53
+ indeterminate: { type: Boolean },
54
+ /**
55
+ * REQUIRED: Label for the input
56
+ * @type {string}
57
+ */
58
+ label: { type: String },
59
+ /**
60
+ * Hides the label visually
61
+ * @type {boolean}
62
+ */
63
+ labelHidden: { attribute: 'label-hidden', reflect: true, type: Boolean },
64
+ /**
65
+ * Hides the supporting slot when unchecked
66
+ * @type {boolean}
67
+ */
68
+ supportingHiddenWhenUnchecked: { type: Boolean, attribute: 'supporting-hidden-when-unchecked', reflect: true },
69
+ /**
70
+ * Value of the input
71
+ * @type {string}
72
+ */
73
+ value: { type: String },
74
+ _hasSupporting: { state: true },
75
+ _isHovered: { state: true },
76
+ };
77
+
78
+ static styles = [super.styles, checkboxStyles, offscreenStyles,
79
+ css`
80
+ :host {
81
+ display: block;
82
+ margin-block-end: 0.6rem;
83
+ }
84
+ :host([hidden]) {
85
+ display: none;
86
+ }
87
+ :host([label-hidden]) {
88
+ display: inline-block;
89
+ margin-block-end: 0;
90
+ }
91
+ label {
92
+ display: flex;
93
+ line-height: ${cssSizes.inputBoxSize}rem;
94
+ overflow-wrap: anywhere;
95
+ }
96
+ .d2l-input-checkbox-wrapper {
97
+ display: inline-block;
98
+ }
99
+ .d2l-input-checkbox-text {
100
+ color: var(--d2l-theme-text-color-static-standard);
101
+ display: inline-block;
102
+ font-size: 0.8rem;
103
+ font-weight: 400;
104
+ margin-inline-start: ${cssSizes.checkboxMargin}rem;
105
+ vertical-align: top;
106
+ white-space: normal;
107
+ }
108
+ :host([label-hidden]) .d2l-input-checkbox-text {
109
+ margin-inline-start: 0;
110
+ }
111
+ :host([skeleton]) .d2l-input-checkbox-text.d2l-skeletize::before {
112
+ bottom: 0.3rem;
113
+ top: 0.3rem;
114
+ }
115
+ .d2l-input-inline-help,
116
+ .d2l-input-checkbox-supporting {
117
+ margin-inline-start: ${cssSizes.inputBoxSize + cssSizes.checkboxMargin}rem;
118
+ }
119
+ :host(:not([skeleton])) .d2l-input-checkbox-text-disabled {
120
+ opacity: 0.5;
121
+ }
122
+ input[type="checkbox"].d2l-input-checkbox {
123
+ vertical-align: top;
124
+ }
125
+ .d2l-input-checkbox-supporting {
126
+ margin-block-start: 0.6rem;
127
+ }
128
+ `
129
+ ];
134
130
 
135
131
  constructor() {
136
132
  super();
@@ -88,155 +88,149 @@ const SWATCH_TRANSPARENT = `<svg xmlns="http://www.w3.org/2000/svg" width="24" h
88
88
  */
89
89
  class InputColor extends InputInlineHelpMixin(PropertyRequiredMixin(FocusMixin(FormElementMixin(LocalizeCoreElement(LitElement))))) {
90
90
 
91
- static get properties() {
92
- return {
93
- /**
94
- * ACCESSIBILITY: Value of an associated color as a HEX which will be used for color contrast analysis
95
- * @type {string}
96
- */
97
- associatedValue: { attribute: 'associated-value', type: String },
98
- /**
99
- * Puts the input into a disabled state
100
- * @type {boolean}
101
- */
102
- disabled: { reflect: true, type: Boolean },
103
- /**
104
- * Disallows the user from selecting "None" as a color value
105
- * @type {boolean}
106
- */
107
- disallowNone: { attribute: 'disallow-none', type: Boolean },
108
- /**
109
- * ACCESSIBILITY: REQUIRED: Label for the input, comes with a default value for background & foreground types.
110
- * @type {string}
111
- */
112
- label: {
113
- type: String,
114
- required: {
115
- dependentProps: ['type'],
116
- validator: (_value, elem, hasValue) => elem.type !== 'custom' || hasValue
117
- }
118
- },
119
- /**
120
- * Hides the label visually
121
- * @type {boolean}
122
- */
123
- labelHidden: { attribute: 'label-hidden', type: Boolean },
124
- /**
125
- * Puts the input into a read-only state
126
- * @type {boolean}
127
- */
128
- readonly: { type: Boolean },
129
- /**
130
- * Type of color being chosen
131
- * @type {'background'|'foreground'|'custom'}
132
- * @default end
133
- */
134
- type: { reflect: true, type: String },
135
- /**
136
- * Value of the input as a HEX color
137
- * @type {string}
138
- */
139
- value: { type: String },
140
- /**
141
- * @ignore
142
- */
143
- launchType: { attribute: 'launch-type', type: String },
144
- _opened: { state: true }
145
- };
146
- }
91
+ static properties = {
92
+ /**
93
+ * ACCESSIBILITY: Value of an associated color as a HEX which will be used for color contrast analysis
94
+ * @type {string}
95
+ */
96
+ associatedValue: { attribute: 'associated-value', type: String },
97
+ /**
98
+ * Puts the input into a disabled state
99
+ * @type {boolean}
100
+ */
101
+ disabled: { reflect: true, type: Boolean },
102
+ /**
103
+ * Disallows the user from selecting "None" as a color value
104
+ * @type {boolean}
105
+ */
106
+ disallowNone: { attribute: 'disallow-none', type: Boolean },
107
+ /**
108
+ * ACCESSIBILITY: REQUIRED: Label for the input, comes with a default value for background & foreground types.
109
+ * @type {string}
110
+ */
111
+ label: {
112
+ type: String,
113
+ required: {
114
+ dependentProps: ['type'],
115
+ validator: (_value, elem, hasValue) => elem.type !== 'custom' || hasValue
116
+ }
117
+ },
118
+ /**
119
+ * Hides the label visually
120
+ * @type {boolean}
121
+ */
122
+ labelHidden: { attribute: 'label-hidden', type: Boolean },
123
+ /**
124
+ * Puts the input into a read-only state
125
+ * @type {boolean}
126
+ */
127
+ readonly: { type: Boolean },
128
+ /**
129
+ * Type of color being chosen
130
+ * @type {'background'|'foreground'|'custom'}
131
+ * @default end
132
+ */
133
+ type: { reflect: true, type: String },
134
+ /**
135
+ * Value of the input as a HEX color
136
+ * @type {string}
137
+ */
138
+ value: { type: String },
139
+ /**
140
+ * @ignore
141
+ */
142
+ launchType: { attribute: 'launch-type', type: String },
143
+ _opened: { state: true }
144
+ };
145
+
146
+ static styles = [super.styles, buttonStyles, inputLabelStyles, css`
147
+ :host {
148
+ display: inline-block;
149
+ }
150
+ :host([hidden]) {
151
+ display: none;
152
+ }
147
153
 
148
- static get styles() {
149
- return [ super.styles, buttonStyles, inputLabelStyles,
150
- css`
151
- :host {
152
- display: inline-block;
153
- }
154
- :host([hidden]) {
155
- display: none;
156
- }
157
-
158
- button {
159
- align-items: center;
160
- background-color: var(--d2l-color-gypsum);
161
- display: flex;
162
- gap: 0.15rem;
163
- min-height: auto;
164
- padding: 0.55rem;
165
- position: relative;
166
- }
167
- button:not([aria-disabled]):hover,
168
- button:not([aria-disabled]):focus,
169
- button.opened {
170
- background-color: var(--d2l-color-mica);
171
- }
172
- :host([disabled]) button {
173
- cursor: default;
174
- opacity: 0.5;
175
- }
176
- /* Firefox includes a hidden border which messes up button dimensions */
177
- button::-moz-focus-inner {
178
- border: 0;
179
- }
180
-
181
- .d2l-input-label {
182
- margin-bottom: 0;
183
- padding-bottom: 7px; /* prevent margin-collapse with readonly swatch margins */
184
- }
185
-
186
- .swatch {
187
- border: 1px inset rgba(0, 0, 0, 0.42);
188
- border-radius: 0.1rem;
189
- box-sizing: border-box;
190
- display: inline-block;
191
- height: 0.3rem;
192
- width: 1.2rem;
193
- }
194
- :host([type="custom"]) .swatch {
195
- border-radius: 0.15rem;
196
- height: 1rem;
197
- }
198
- .swatch-transparent {
199
- background-image: ${svgToCSS(SWATCH_TRANSPARENT)};
200
- background-position-y: -1.5px;
201
- background-size: cover;
202
- }
203
- :host([type="custom"]) .swatch-transparent {
204
- background-position-y: 0;
205
- }
206
-
207
- .icon-wrapper {
208
- align-items: center;
209
- display: flex;
210
- flex-direction: column;
211
- gap: 0.1rem;
212
- }
213
- .icon-wrapper > svg {
214
- height: 0.6rem;
215
- }
216
-
217
- button,
218
- .readonly-wrapper {
219
- color: var(--d2l-color-ferrite);
220
- }
221
-
222
- .readonly-wrapper {
223
- border-radius: 0.1rem;
224
- display: block;
225
- line-height: 0;
226
- margin: 0.55rem 0;
227
- outline: none;
228
- width: 1.2rem;
229
- }
230
- ${getFocusRingStyles('.readonly-wrapper')}
231
- @media (prefers-contrast: more) {
232
- .swatch {
233
- border: 1px solid FieldText;
234
- forced-color-adjust: none;
235
- }
236
- }
237
- `
238
- ];
239
- }
154
+ button {
155
+ align-items: center;
156
+ background-color: var(--d2l-color-gypsum);
157
+ display: flex;
158
+ gap: 0.15rem;
159
+ min-height: auto;
160
+ padding: 0.55rem;
161
+ position: relative;
162
+ }
163
+ button:not([aria-disabled]):hover,
164
+ button:not([aria-disabled]):focus,
165
+ button.opened {
166
+ background-color: var(--d2l-color-mica);
167
+ }
168
+ :host([disabled]) button {
169
+ cursor: default;
170
+ opacity: 0.5;
171
+ }
172
+ /* Firefox includes a hidden border which messes up button dimensions */
173
+ button::-moz-focus-inner {
174
+ border: 0;
175
+ }
176
+
177
+ .d2l-input-label {
178
+ margin-bottom: 0;
179
+ padding-bottom: 7px; /* prevent margin-collapse with readonly swatch margins */
180
+ }
181
+
182
+ .swatch {
183
+ border: 1px inset rgba(0, 0, 0, 0.42);
184
+ border-radius: 0.1rem;
185
+ box-sizing: border-box;
186
+ display: inline-block;
187
+ height: 0.3rem;
188
+ width: 1.2rem;
189
+ }
190
+ :host([type="custom"]) .swatch {
191
+ border-radius: 0.15rem;
192
+ height: 1rem;
193
+ }
194
+ .swatch-transparent {
195
+ background-image: ${svgToCSS(SWATCH_TRANSPARENT)};
196
+ background-position-y: -1.5px;
197
+ background-size: cover;
198
+ }
199
+ :host([type="custom"]) .swatch-transparent {
200
+ background-position-y: 0;
201
+ }
202
+
203
+ .icon-wrapper {
204
+ align-items: center;
205
+ display: flex;
206
+ flex-direction: column;
207
+ gap: 0.1rem;
208
+ }
209
+ .icon-wrapper > svg {
210
+ height: 0.6rem;
211
+ }
212
+
213
+ button,
214
+ .readonly-wrapper {
215
+ color: var(--d2l-color-ferrite);
216
+ }
217
+
218
+ .readonly-wrapper {
219
+ border-radius: 0.1rem;
220
+ display: block;
221
+ line-height: 0;
222
+ margin: 0.55rem 0;
223
+ outline: none;
224
+ width: 1.2rem;
225
+ }
226
+ ${getFocusRingStyles('.readonly-wrapper')}
227
+ @media (prefers-contrast: more) {
228
+ .swatch {
229
+ border: 1px solid FieldText;
230
+ forced-color-adjust: none;
231
+ }
232
+ }
233
+ `];
240
234
 
241
235
  constructor() {
242
236
  super();