@brightspace-ui/core 3.112.3 → 3.114.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.
@@ -171,6 +171,48 @@ The `d2l-button-toggle` element is a container for buttons that toggle a `presse
171
171
  - `d2l-button-toggle-change`: dispatched when the `pressed` state changes
172
172
  <!-- docs: end hidden content -->
173
173
 
174
+ ## Split Button [d2l-button-split]
175
+
176
+ The `d2l-button-split` element is a button component that provides a main button and a slot for `d2l-button-split-item` elements. Simply provide a `key` and `text` for the main button and each item. The `d2l-button-split`'s `click` event provides the `key` of the selected action.
177
+
178
+ <!-- docs: demo code properties name:d2l-button-split sandboxTitle:'Split Button' align:flex-start autoSize:false size:medium -->
179
+ ```html
180
+ <script type="module">
181
+ import '@brightspace-ui/core/components/button/button-split.js';
182
+ import '@brightspace-ui/core/components/button/button-split-item.js';
183
+ </script>
184
+ <d2l-button-split key="save" text="Save" primary>
185
+ <d2l-button-split-item key="saveAsDraft" text="Save as Draft"></d2l-button-split-item>
186
+ <d2l-button-split-item key="saveAndClose" text="Save and Close"></d2l-button-split-item>
187
+ <d2l-button-split-item key="saveAndNew" text="Save and New"></d2l-button-split-item>
188
+ </d2l-button-split>
189
+ ```
190
+
191
+ <!-- docs: start hidden content -->
192
+ ### Properties
193
+
194
+ | Property | Type | Description |
195
+ |--|--|--|
196
+ | `description` | String | A description to be added to the main button for accessibility for additional context |
197
+ | `disabled` | Boolean | Disables the main button and menu opener |
198
+ | `disabledTooltip` | String | Tooltip text when disabled |
199
+ | `key` | String, required | Key of the main button, provided on the `click` event detail |
200
+ | `primary` | Boolean | Styles the main button and menu opener as primary buttons |
201
+ | `text` | String, required | Accessible text for the main button |
202
+
203
+ ### Item Properties
204
+
205
+ | Property | Type | Description |
206
+ |--|--|--|
207
+ | `disabled` | Boolean | Disables the menu item |
208
+ | `key` | String, required | Key of the menu item, provided on the `click` event detail |
209
+ | `text` | String, required | Accessible text for the menu item |
210
+
211
+ ### Events
212
+
213
+ - `click`: dispatched when the user clicks the main action or menu item. The `key` is provided on the event detail.
214
+ <!-- docs: end hidden content -->
215
+
174
216
  ## Add Button [d2l-button-add]
175
217
 
176
218
  The `d2l-button-add` is for quickly adding new items at a specific location, such as when adding items to a curated list. Since the Add button is meant to be subtle, it should always be used in combination with more obvious methods to add items (like a menu or primary button).
@@ -0,0 +1,40 @@
1
+ import { css, html, LitElement } from 'lit';
2
+ import { MenuItemMixin } from '../menu/menu-item-mixin.js';
3
+ import { menuItemStyles } from '../menu/menu-item-styles.js';
4
+ import { PropertyRequiredMixin } from '../../mixins/property-required/property-required-mixin.js';
5
+
6
+ /**
7
+ * An split button item component used with JS handlers.
8
+ */
9
+ class ButtonSplitItem extends PropertyRequiredMixin(MenuItemMixin(LitElement)) {
10
+
11
+ static get properties() {
12
+ return {
13
+ /**
14
+ * REQUIRED: Key of the action
15
+ * @type {string}
16
+ */
17
+ key: { type: String, required: true }
18
+ };
19
+ }
20
+
21
+ static get styles() {
22
+ return [ menuItemStyles,
23
+ css`
24
+ :host {
25
+ align-items: center;
26
+ display: flex;
27
+ padding: 0.75rem 1rem;
28
+ }
29
+ `
30
+ ];
31
+ }
32
+
33
+ render() {
34
+ return html`
35
+ <div class="d2l-menu-item-text">${this.text}</div>
36
+ `;
37
+ }
38
+ }
39
+
40
+ customElements.define('d2l-button-split-item', ButtonSplitItem);
@@ -0,0 +1,143 @@
1
+ import './button.js';
2
+ import '../colors/colors.js';
3
+ import '../dropdown/dropdown.js';
4
+ import '../dropdown/dropdown-menu.js';
5
+ import '../icons/icon.js';
6
+ import '../menu/menu.js';
7
+ import { css, html, LitElement } from 'lit';
8
+ import { FocusMixin } from '../../mixins/focus/focus-mixin.js';
9
+ import { ifDefined } from 'lit/directives/if-defined.js';
10
+ import { LocalizeCoreElement } from '../../helpers/localize-core-element.js';
11
+ import { PropertyRequiredMixin } from '../../mixins/property-required/property-required-mixin.js';
12
+
13
+ /**
14
+ * A split button that provides a main action button and slot for a menu.
15
+ */
16
+ class ButtonSplit extends FocusMixin(PropertyRequiredMixin(LocalizeCoreElement(LitElement))) {
17
+
18
+ static get properties() {
19
+ return {
20
+ /**
21
+ * ACCESSIBILITY: A description to be added to the main action button for accessibility when text does not provide enough context
22
+ * @type {string}
23
+ */
24
+ description: { type: String },
25
+ /**
26
+ * Disables the main action and dropdown opener buttons
27
+ * @type {boolean}
28
+ */
29
+ disabled: { type: Boolean, reflect: true },
30
+ /**
31
+ * Tooltip text when disabled
32
+ * @type {string}
33
+ */
34
+ disabledTooltip: { type: String, attribute: 'disabled-tooltip' },
35
+ /**
36
+ * REQUIRED: Key of the main action
37
+ * @type {string}
38
+ */
39
+ key: { type: String, required: true },
40
+ /**
41
+ * Styles the buttons as a primary buttons
42
+ * @type {boolean}
43
+ */
44
+ primary: { type: Boolean, reflect: true },
45
+ /**
46
+ * ACCESSIBILITY: REQUIRED: Accessible text for the main action button
47
+ * @type {string}
48
+ */
49
+ text: { type: String, reflect: true, required: true }
50
+ };
51
+ }
52
+
53
+ static get styles() {
54
+ return css`
55
+ :host {
56
+ display: inline-block;
57
+ }
58
+ :host([hidden]) {
59
+ display: none;
60
+ }
61
+ .container {
62
+ display: flex;
63
+ gap: 6px;
64
+ }
65
+ .main-action {
66
+ --d2l-button-start-end-radius: 0;
67
+ --d2l-button-end-end-radius: 0;
68
+ }
69
+ .d2l-dropdown-opener {
70
+ --d2l-button-start-start-radius: 0;
71
+ --d2l-button-end-start-radius: 0;
72
+ --d2l-button-padding-inline-end: 0.6rem;
73
+ --d2l-button-padding-inline-start: 0.6rem;
74
+ }
75
+ .d2l-dropdown-opener[primary] > d2l-icon {
76
+ color: #ffffff;
77
+ }
78
+ ::slotted(:not(d2l-button-split-item)) {
79
+ display: none;
80
+ }
81
+ `;
82
+ }
83
+
84
+ constructor() {
85
+ super();
86
+ this.disabled = false;
87
+ this.primary = false;
88
+ }
89
+
90
+ static get focusElementSelector() {
91
+ return '.main-action';
92
+ }
93
+
94
+ render() {
95
+ return html`
96
+ <div class="container" @click="${this.#suppressClick}">
97
+ <d2l-button
98
+ class="main-action"
99
+ @click="${this.#handleMainActionClick}"
100
+ description="${ifDefined(this.description)}"
101
+ ?disabled="${this.disabled}"
102
+ disabled-tooltip="${ifDefined(this.disabledTooltip)}"
103
+ ?primary="${this.primary}">
104
+ ${this.text}
105
+ </d2l-button>
106
+ <d2l-dropdown>
107
+ <d2l-button
108
+ aria-label="${this.localize('components.button-split.otherOptions')}"
109
+ class="d2l-dropdown-opener"
110
+ ?disabled="${this.disabled}"
111
+ ?primary="${this.primary}">
112
+ <d2l-icon icon="tier1:chevron-down"></d2l-icon>
113
+ </d2l-button>
114
+ <d2l-dropdown-menu>
115
+ <d2l-menu label="${this.localize('components.button-split.otherOptions')}" @d2l-menu-item-select="${this.#handleMenuItemSelect}">
116
+ <slot></slot>
117
+ </d2l-menu>
118
+ </d2l-dropdown-menu>
119
+ </d2l-dropdown>
120
+ </div>
121
+ `;
122
+ }
123
+
124
+ #dispatchClick(key) {
125
+ /** Dispatched when a split button is clicked. The `key` is provided on the event detail. */
126
+ this.dispatchEvent(new CustomEvent('click', { detail: { key } }));
127
+ }
128
+
129
+ #handleMainActionClick() {
130
+ this.#dispatchClick(this.key);
131
+ }
132
+
133
+ #handleMenuItemSelect(e) {
134
+ this.#dispatchClick(e.target.key);
135
+ }
136
+
137
+ #suppressClick(e) {
138
+ e.stopPropagation();
139
+ }
140
+
141
+ }
142
+
143
+ customElements.define('d2l-button-split', ButtonSplit);
@@ -4,7 +4,10 @@ import { getFocusPseudoClass } from '../../helpers/focus.js';
4
4
 
5
5
  export const buttonStyles = css`
6
6
  button {
7
- border-radius: 0.3rem;
7
+ border-end-end-radius: var(--d2l-button-end-end-radius, 0.3rem);
8
+ border-end-start-radius: var(--d2l-button-end-start-radius, 0.3rem);
9
+ border-start-end-radius: var(--d2l-button-start-end-radius, 0.3rem);
10
+ border-start-start-radius: var(--d2l-button-start-start-radius, 0.3rem);
8
11
  border-style: none;
9
12
  box-sizing: border-box;
10
13
  cursor: pointer;
@@ -41,7 +41,10 @@ class Button extends ButtonMixin(LitElement) {
41
41
 
42
42
  button {
43
43
  font-family: inherit;
44
- padding: 0 1.5rem;
44
+ padding-block-end: 0;
45
+ padding-block-start: 0;
46
+ padding-inline-end: var(--d2l-button-padding-inline-end, 1.5rem);
47
+ padding-inline-start: var(--d2l-button-padding-inline-start, 1.5rem);
45
48
  width: 100%;
46
49
  }
47
50
 
@@ -0,0 +1,76 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
+ <meta charset="UTF-8">
6
+ <link rel="stylesheet" href="../../demo/styles.css" type="text/css">
7
+ <script type="module">
8
+ import '../../demo/demo-page.js';
9
+ import '../button-split.js';
10
+ import '../button-split-item.js';
11
+ </script>
12
+ </head>
13
+ <body unresolved>
14
+
15
+ <d2l-demo-page page-title="d2l-button-split">
16
+
17
+ <h2>Split Button</h2>
18
+
19
+ <d2l-demo-snippet>
20
+ <template>
21
+ <button id="focusButton" style="display: block; margin-block-end: 1rem;">Focus It!</button>
22
+ <d2l-button-split key="save" text="Save">
23
+ <d2l-button-split-item key="saveAsDraft" text="Save as Draft"></d2l-button-split-item>
24
+ <d2l-button-split-item key="saveAndClose" text="Save and Close"></d2l-button-split-item>
25
+ <d2l-button-split-item key="saveAndNew" text="Save and New"></d2l-button-split-item>
26
+ </d2l-button-split>
27
+ <script>
28
+ (demo => {
29
+ const splitButton = demo.querySelector('d2l-button-split');
30
+ demo.querySelector('#focusButton').addEventListener('click', () => splitButton.focus());
31
+ splitButton.addEventListener('click', e => console.log('click:', e.detail.key));
32
+ })(document.currentScript.parentNode);
33
+ </script>
34
+ </template>
35
+ </d2l-demo-snippet>
36
+
37
+ <h2>Split Button (with a description)</h2>
38
+
39
+ <d2l-demo-snippet>
40
+ <template>
41
+ <d2l-button-split key="save" text="Save" description="Super fancy save options!">
42
+ <d2l-button-split-item key="saveAsDraft" text="Save as Draft"></d2l-button-split-item>
43
+ <d2l-button-split-item key="saveAndClose" text="Save and Close"></d2l-button-split-item>
44
+ <d2l-button-split-item key="saveAndNew" text="Save and New"></d2l-button-split-item>
45
+ </d2l-button-split>
46
+ </template>
47
+ </d2l-demo-snippet>
48
+
49
+ <h2>Split Button (primary)</h2>
50
+
51
+ <d2l-demo-snippet>
52
+ <template>
53
+ <d2l-button-split key="save" text="Save" primary>
54
+ <d2l-button-split-item key="saveAsDraft" text="Save as Draft"></d2l-button-split-item>
55
+ <d2l-button-split-item key="saveAndClose" text="Save and Close"></d2l-button-split-item>
56
+ <d2l-button-split-item key="saveAndNew" text="Save and New"></d2l-button-split-item>
57
+ </d2l-button-split>
58
+ </template>
59
+ </d2l-demo-snippet>
60
+
61
+ <h2>Split Button (disabled)</h2>
62
+
63
+ <d2l-demo-snippet>
64
+ <template>
65
+ <d2l-button-split key="save" text="Save" primary disabled disabled-tooltip="Too fancy!">
66
+ <d2l-button-split-item key="saveAsDraft" text="Save as Draft"></d2l-button-split-item>
67
+ <d2l-button-split-item key="saveAndClose" text="Save and Close"></d2l-button-split-item>
68
+ <d2l-button-split-item key="saveAndNew" text="Save and New"></d2l-button-split-item>
69
+ </d2l-button-split>
70
+ </template>
71
+ </d2l-demo-snippet>
72
+
73
+ </d2l-demo-page>
74
+
75
+ </body>
76
+ </html>
@@ -167,7 +167,7 @@ if (usePopoverMixin) {
167
167
  }
168
168
 
169
169
  #handleSelect(e) {
170
- if (['D2L-MENU-ITEM', 'D2L-MENU-ITEM-LINK', 'D2L-SELECTION-ACTION-MENU-ITEM'].indexOf(e.target.tagName) < 0) {
170
+ if (['D2L-MENU-ITEM', 'D2L-MENU-ITEM-LINK', 'D2L-SELECTION-ACTION-MENU-ITEM', 'D2L-BUTTON-SPLIT-ITEM'].indexOf(e.target.tagName) < 0) {
171
171
  return;
172
172
  }
173
173
  this.close();
@@ -268,10 +268,9 @@ if (usePopoverMixin) {
268
268
  }
269
269
 
270
270
  __getMenuElement() {
271
- if (!this.shadowRoot) return undefined;
272
- return this.shadowRoot.querySelector('.d2l-dropdown-content-slot')
273
- .assignedNodes().filter(node => node.hasAttribute
274
- && (node.getAttribute('role') === 'menu' || node.getAttribute('role') === 'listbox'))[0];
271
+ return this.shadowRoot?.querySelector('.d2l-dropdown-content-slot')
272
+ .assignedElements({ flatten: true })
273
+ .filter(node => (node.getAttribute('role') === 'menu' || node.getAttribute('role') === 'listbox'))[0];
275
274
  }
276
275
 
277
276
  _onAnimationEnd() {
@@ -351,7 +350,7 @@ if (usePopoverMixin) {
351
350
  }
352
351
 
353
352
  _onSelect(e) {
354
- if (['D2L-MENU-ITEM', 'D2L-MENU-ITEM-LINK', 'D2L-SELECTION-ACTION-MENU-ITEM'].indexOf(e.target.tagName) < 0) {
353
+ if (['D2L-MENU-ITEM', 'D2L-MENU-ITEM-LINK', 'D2L-SELECTION-ACTION-MENU-ITEM', 'D2L-BUTTON-SPLIT-ITEM'].indexOf(e.target.tagName) < 0) {
355
354
  return;
356
355
  }
357
356
  this.close();
@@ -15,7 +15,7 @@ Pass the user-authored HTML into the `html` attribute of the `d2l-html-block` an
15
15
  import '@brightspace-ui/core/components/icons/icon.js';
16
16
  </script>
17
17
  <d2l-html-block html="
18
- <style>
18
+ &lt;style&gt;
19
19
  div {
20
20
  --d2l-icon-fill-color: var(--d2l-color-cinnabar);
21
21
  }
@@ -33,13 +33,13 @@ Pass the user-authored HTML into the `html` attribute of the `d2l-html-block` an
33
33
  display: flex;
34
34
  justify-content: center;
35
35
  }
36
- </style>
37
- <div class=&quot;warning-container&quot;>
38
- <d2l-icon icon=&quot;tier3:alert&quot;></d2l-icon>
39
- <span>
40
- <b>Important:</b> user-authored HTML must be trusted or properly sanitized!
41
- </span>
42
- </div>">
36
+ &lt;/style&gt;
37
+ &lt;div class=&quot;warning-container&quot;&gt;
38
+ &lt;d2l-icon icon=&quot;tier3:alert&quot;&gt;&lt;/d2l-icon&gt;
39
+ &lt;span&gt;
40
+ &lt;b&gt;Important:&lt;/b&gt; user-authored HTML must be trusted or properly sanitized!
41
+ &lt;/span&gt;
42
+ &lt;/div&gt;">
43
43
  </d2l-html-block>
44
44
  ```
45
45
 
@@ -56,23 +56,23 @@ Examples are provided to display how user-authored math can be embedded within y
56
56
  import '@brightspace-ui/core/tools/mathjax-test-context.js';
57
57
  </script>
58
58
  <d2l-html-block html="
59
- <math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;>
60
- <msqrt>
61
- <mn>3</mn>
62
- <mi>x</mi>
63
- <mo>&#x2212;</mo>
64
- <mn>1</mn>
65
- </msqrt>
66
- <mo>+</mo>
67
- <mo stretchy=&quot;false&quot;>(</mo>
68
- <mn>1</mn>
69
- <mo>+</mo>
70
- <mi>x</mi>
71
- <msup>
72
- <mo stretchy=&quot;false&quot;>)</mo>
73
- <mn>2</mn>
74
- </msup>
75
- </math>">
59
+ &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
60
+ &lt;msqrt&gt;
61
+ &lt;mn&gt;3&lt;/mn&gt;
62
+ &lt;mi&gt;x&lt;/mi&gt;
63
+ &lt;mo&gt;&#x2212;&lt;/mo&gt;
64
+ &lt;mn&gt;1&lt;/mn&gt;
65
+ &lt;/msqrt&gt;
66
+ &lt;mo&gt;+&lt;/mo&gt;
67
+ &lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;
68
+ &lt;mn&gt;1&lt;/mn&gt;
69
+ &lt;mo&gt;+&lt;/mo&gt;
70
+ &lt;mi&gt;x&lt;/mi&gt;
71
+ &lt;msup&gt;
72
+ &lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;
73
+ &lt;mn&gt;2&lt;/mn&gt;
74
+ &lt;/msup&gt;
75
+ &lt;/math&gt;">
76
76
  </d2l-html-block>
77
77
  ```
78
78
 
@@ -25,21 +25,21 @@
25
25
 
26
26
  <h2 class="d2l-heading-3">Block Samples</h2>
27
27
 
28
- <d2l-html-block>
29
- <pre class="d2l-code d2l-code-dark"><code class="language-javascript">function helloGrumpy(name) {
28
+ <d2l-html-block html="
29
+ &lt;pre class=&quot;d2l-code d2l-code-dark&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;function helloGrumpy(name) {
30
30
  console.log(`Hi there ${name}.`);
31
31
  }
32
- helloGrumpy('Wizard');</code></pre>
33
- <br>
34
- <pre class="d2l-code d2l-code-dark"><code class="language-javascript line-numbers">function helloGrumpy(name) {
32
+ helloGrumpy('Wizard');&lt;/code&gt;&lt;/pre&gt;
33
+ &lt;br&gt;
34
+ &lt;pre class=&quot;d2l-code d2l-code-dark&quot;&gt;&lt;code class=&quot;language-javascript line-numbers&quot;&gt;function helloGrumpy(name) {
35
35
  console.log(`Hi there ${name}. Here's some really long text to test overflowing the bounding container.`);
36
36
  }
37
- helloGrumpy('Wizard');</code></pre>
37
+ helloGrumpy('Wizard');&lt;/code&gt;&lt;/pre&gt;">
38
38
  </d2l-html-block>
39
39
 
40
40
  <h2 class="d2l-heading-3">Inline Samples</h2>
41
41
 
42
- <d2l-html-block html="The best type of donuts are he kind you assign in code, for example: &lt;code class=&quot;d2l-code d2l-code-dark language-javascript&quot;&gt;const jelly = 'donuts';lgt;/code&gt;. The next best type of thing you can assign in code is stuff you can ferment. &lt;code class=&quot;d2l-code d2l-code-dark language-javascript&quot;&gt;let beer = hopsAndWater.map(ingredients => ferment(ingredients));&lt;/code&gt;"></d2l-html-block>
42
+ <d2l-html-block html="The best type of donuts are he kind you assign in code, for example: &lt;code class=&quot;d2l-code d2l-code-dark language-javascript&quot;&gt;const jelly = 'donuts';&lt;/code&gt;. The next best type of thing you can assign in code is stuff you can ferment. &lt;code class=&quot;d2l-code d2l-code-dark language-javascript&quot;&gt;let beer = hopsAndWater.map(ingredients => ferment(ingredients));&lt;/code&gt;"></d2l-html-block>
43
43
 
44
44
  </body>
45
45
  </html>
@@ -209,7 +209,7 @@
209
209
  <d2l-demo-snippet>
210
210
  <template>
211
211
  <d2l-list grid>
212
- <d2l-list-item expandable key="expand-1" label="Expandable item #1" href=" ">
212
+ <d2l-list-item expandable key="expand-1" label="Expandable item #1">
213
213
  <d2l-list-item-content>
214
214
  <div>Week 1: Introduction</div>
215
215
  <div slot="secondary" style="padding: 5px;"><d2l-tooltip-help text="Due: Jan 30, 2023">Available: Aug 11, 2023</d2l-tooltip-help></div>
@@ -217,12 +217,29 @@
217
217
  </d2l-list-item-content>
218
218
  <d2l-list grid slot="nested">
219
219
  <d2l-list-item selectable key="nested-1" label="Nested 1">
220
- <d2l-list-item-content><div>Nested item #1</div></d2l-list-item-content>
220
+ <d2l-list-item-content>
221
+ <div>Nested item #1</div>
222
+ <div slot="secondary"><d2l-button-subtle style="padding: 5px;" text="Bookmark" icon="tier1:bookmark-hollow"></d2l-button-subtle></div>
223
+ </d2l-list-item-content>
221
224
  </d2l-list-item>
222
- <d2l-list-item selectable key="nested-2" label="Nested 2">
223
- <d2l-list-item-content><div>Nested item #2</div></d2l-list-item-content>
225
+ <d2l-list-item selectable key="nested-2" label="Nested 2" expandable>
226
+ <d2l-list-item-content>
227
+ <div>Nested item #2</div>
228
+ <div slot="secondary"><d2l-button-subtle style="padding: 5px;" text="Bookmark" icon="tier1:bookmark-hollow"></d2l-button-subtle></div>
229
+ </d2l-list-item-content>
230
+ <d2l-list grid slot="nested">
231
+ <d2l-list-item selectable key="nested-1-1" label="Nested 1">
232
+ <d2l-list-item-content>
233
+ <div>Nested item #1</div>
234
+ <div slot="secondary"><d2l-button-subtle style="padding: 5px;" text="Bookmark" icon="tier1:bookmark-hollow"></d2l-button-subtle></div>
235
+ </d2l-list-item-content>
236
+ </d2l-list-item>
237
+ <d2l-list-item selectable key="nested--1" label="Nested 2">
238
+ <d2l-list-item-content><div>Nested item #2</div></d2l-list-item-content>
239
+ </d2l-list-item>
240
+ </d2l-list>
224
241
  </d2l-list-item>
225
- </d2l-list>
242
+ </d2l-list>
226
243
  </d2l-list-item>
227
244
  <d2l-list-item href="http://www.d2l.com">
228
245
  <d2l-list-item-content>
@@ -240,8 +257,10 @@
240
257
  </template>
241
258
  <script type="module">
242
259
  requestAnimationFrame(() => {
243
- document.querySelector('d2l-button-subtle').addEventListener('click', () => {
244
- console.log('d2l-button: click event');
260
+ document.querySelectorAll('d2l-button-subtle').forEach((button) => {
261
+ button.addEventListener('click', () => {
262
+ console.log('d2l-button: click event');
263
+ });
245
264
  });
246
265
  });
247
266
  </script>
@@ -1,8 +1,7 @@
1
1
  import '../colors/colors.js';
2
2
  import { css, html } from 'lit';
3
- import { listInteractiveElems, ListItemMixin } from './list-item-mixin.js';
3
+ import { isInteractiveInListItemComposedPath, ListItemMixin } from './list-item-mixin.js';
4
4
  import { getUniqueId } from '../../helpers/uniqueId.js';
5
- import { isInteractiveInComposedPath } from '../../helpers/interactive.js';
6
5
 
7
6
  export const ListItemButtonMixin = superclass => class extends ListItemMixin(superclass) {
8
7
  static get properties() {
@@ -67,7 +66,7 @@ export const ListItemButtonMixin = superclass => class extends ListItemMixin(sup
67
66
 
68
67
  _getDescendantClicked(e) {
69
68
  const isPrimaryAction = (elem) => elem === this.shadowRoot.querySelector(`#${this._primaryActionId}`);
70
- return isInteractiveInComposedPath(e.composedPath(), isPrimaryAction, { elements: listInteractiveElems });
69
+ return isInteractiveInListItemComposedPath(e, isPrimaryAction);
71
70
  }
72
71
 
73
72
  _onButtonClick(e) {
@@ -1,6 +1,7 @@
1
1
  import '../selection/selection-input.js';
2
2
  import { css, html, nothing } from 'lit';
3
3
  import { getUniqueId } from '../../helpers/uniqueId.js';
4
+ import { isInteractiveInListItemComposedPath } from './list-item-mixin.js';
4
5
  import { SelectionInfo } from '../selection/selection-mixin.js';
5
6
  import { SkeletonMixin } from '../skeleton/skeleton-mixin.js';
6
7
 
@@ -119,6 +120,9 @@ export const ListItemCheckboxMixin = superclass => class extends SkeletonMixin(s
119
120
  _onCheckboxActionClick(event) {
120
121
  event.preventDefault();
121
122
  if (this.selectionDisabled) return;
123
+ const isPrimaryAction = (elem) => elem === this.shadowRoot.querySelector('div.d2l-checkbox-action');
124
+ if (isInteractiveInListItemComposedPath(event, isPrimaryAction)) return;
125
+
122
126
  this.setSelected(!this.selected);
123
127
  const checkbox = this.shadowRoot && this.shadowRoot.querySelector(`#${this._checkboxId}`);
124
128
  if (checkbox) checkbox.focus();
@@ -2,6 +2,7 @@ import '../button/button-icon.js';
2
2
  import '../loading-spinner/loading-spinner.js';
3
3
  import { css, html, nothing } from 'lit';
4
4
  import { EventSubscriberController } from '../../controllers/subscriber/subscriberControllers.js';
5
+ import { isInteractiveInListItemComposedPath } from './list-item-mixin.js';
5
6
  import { SkeletonMixin } from '../skeleton/skeleton-mixin.js';
6
7
 
7
8
  const dragIntervalDelay = 100;
@@ -136,12 +137,12 @@ export const ListItemExpandCollapseMixin = superclass => class extends SkeletonM
136
137
  @click="${this._toggleExpandCollapse}"></d2l-button-icon>`;
137
138
  }
138
139
 
139
- _renderExpandCollapseAction() {
140
+ _renderExpandCollapseAction(content) {
140
141
  if (this.selectable || !this.expandable || this.noPrimaryAction) {
141
142
  return nothing;
142
143
  }
143
144
 
144
- return html`<div class="d2l-list-expand-collapse-action" @click="${this._toggleExpandCollapse}"></div>`;
145
+ return html`<div class="d2l-list-expand-collapse-action" @click="${this._toggleExpandCollapseAction}">${content || nothing}</div>`;
145
146
  }
146
147
 
147
148
  _renderNestedLoadingSpinner() {
@@ -168,4 +169,14 @@ export const ListItemExpandCollapseMixin = superclass => class extends SkeletonM
168
169
  bubbles: true
169
170
  }));
170
171
  }
172
+
173
+ _toggleExpandCollapseAction(e = null) {
174
+ const isPrimaryAction = (elem) => elem === this.shadowRoot.querySelector('div.d2l-list-expand-collapse-action');
175
+ if (e && isInteractiveInListItemComposedPath(e, isPrimaryAction)) {
176
+ e.preventDefault();
177
+ return;
178
+ }
179
+
180
+ this._toggleExpandCollapse(e);
181
+ }
171
182
  };
@@ -165,10 +165,13 @@ class ListItemGenericLayout extends RtlMixin(LitElement) {
165
165
  grid-column-start: control-start;
166
166
  }
167
167
 
168
- :host(:not([no-primary-action])) ::slotted([slot="control-action"]),
169
168
  :host(:not([no-primary-action])) ::slotted([slot="outside-control-action"]) {
170
169
  grid-column-end: end;
171
170
  }
171
+
172
+ :host(:not([no-primary-action])) ::slotted([slot="control-action"]) {
173
+ grid-column-end: actions-start;
174
+ }
172
175
 
173
176
  ::slotted([slot="outside-control-container"]) {
174
177
  grid-column: start / end;
@@ -1,8 +1,7 @@
1
1
  import '../colors/colors.js';
2
2
  import { css, html } from 'lit';
3
- import { listInteractiveElems, ListItemMixin } from './list-item-mixin.js';
3
+ import { isInteractiveInListItemComposedPath, ListItemMixin } from './list-item-mixin.js';
4
4
  import { getUniqueId } from '../../helpers/uniqueId.js';
5
- import { isInteractiveInComposedPath } from '../../helpers/interactive.js';
6
5
 
7
6
  export const ListItemLinkMixin = superclass => class extends ListItemMixin(superclass) {
8
7
 
@@ -53,7 +52,7 @@ export const ListItemLinkMixin = superclass => class extends ListItemMixin(super
53
52
 
54
53
  _getDescendantClicked(e) {
55
54
  const isPrimaryAction = (elem) => elem === this.shadowRoot.querySelector(`#${this._primaryActionId}`);
56
- return isInteractiveInComposedPath(e.composedPath(), isPrimaryAction, { elements: listInteractiveElems });
55
+ return isInteractiveInListItemComposedPath(e, isPrimaryAction);
57
56
  }
58
57
 
59
58
  _handleLinkClick(e) {
@@ -6,13 +6,13 @@ import '../tooltip/tooltip.js';
6
6
  import '../expand-collapse/expand-collapse-content.js';
7
7
  import { css, html, nothing } from 'lit';
8
8
  import { findComposedAncestor, getComposedParent } from '../../helpers/dom.js';
9
+ import { interactiveElements, isInteractiveInComposedPath } from '../../helpers/interactive.js';
9
10
  import { classMap } from 'lit/directives/class-map.js';
10
11
  import { composeMixins } from '../../helpers/composeMixins.js';
11
12
  import { getFirstFocusableDescendant } from '../../helpers/focus.js';
12
13
  import { getUniqueId } from '../../helpers/uniqueId.js';
13
14
  import { getValidHexColor } from '../../helpers/color.js';
14
15
  import { ifDefined } from 'lit/directives/if-defined.js';
15
- import { interactiveElements } from '../../helpers/interactive.js';
16
16
  import { LabelledMixin } from '../../mixins/labelled/labelled-mixin.js';
17
17
  import { ListItemCheckboxMixin } from './list-item-checkbox-mixin.js';
18
18
  import { ListItemDragDropMixin } from './list-item-drag-drop-mixin.js';
@@ -40,11 +40,14 @@ function addTabListener() {
40
40
 
41
41
  let hasDisplayedKeyboardTooltip = false;
42
42
 
43
- export const listInteractiveElems = {
44
- ...interactiveElements,
45
- 'd2l-button': true,
46
- 'd2l-tooltip-help': true
47
- };
43
+ export function isInteractiveInListItemComposedPath(e, isPrimaryAction) {
44
+ const listInteractiveElems = {
45
+ ...interactiveElements,
46
+ 'd2l-button': true,
47
+ 'd2l-tooltip-help': true
48
+ };
49
+ return isInteractiveInComposedPath(e.composedPath(), isPrimaryAction, { elements: listInteractiveElems });
50
+ }
48
51
 
49
52
  /**
50
53
  * @property label - The hidden label for the checkbox and expand collapse control
@@ -177,17 +180,14 @@ export const ListItemMixin = superclass => class extends composeMixins(
177
180
  :host(:not([_render-expand-collapse-slot])) .d2l-list-item-content-extend-separators > [slot="control"] {
178
181
  width: 3rem;
179
182
  }
180
- :host(:not([_has-color-slot])) .d2l-list-item-content-extend-separators > [slot="content"],
181
- :host(:not([_has-color-slot])[dir="rtl"]) .d2l-list-item-content-extend-separators > [slot="content"] {
182
- padding-left: 0.9rem;
183
- padding-right: 0.9rem;
183
+ :host(:not([_render-expand-collapse-slot])) .d2l-list-item-content-extend-separators > [slot="control"] ~ [slot="control-action"] [slot="content"] {
184
+ padding-inline-start: 3rem;
184
185
  }
185
- :host([selectable]) .d2l-list-item-content-extend-separators > [slot="content"] {
186
- padding-left: 0;
186
+ :host(:not([_has-color-slot])) .d2l-list-item-content-extend-separators [slot="content"] {
187
+ padding-inline: 0.9rem;
187
188
  }
188
- :host([dir="rtl"][selectable]) .d2l-list-item-content-extend-separators > [slot="content"] {
189
- padding-left: 0.9rem;
190
- padding-right: 0;
189
+ :host([selectable]) .d2l-list-item-content-extend-separators > [slot="content"] {
190
+ padding-inline-start: 0;
191
191
  }
192
192
 
193
193
  :host([_hovering-primary-action]) .d2l-list-item-content,
@@ -220,6 +220,10 @@ export const ListItemMixin = superclass => class extends composeMixins(
220
220
  padding-top: 0;
221
221
  }
222
222
 
223
+ [slot="control"] ~ [slot="control-action"] [slot="content"] {
224
+ padding-inline-start: 2.2rem; /* width of "control" slot set in generic-layout */
225
+ }
226
+
223
227
  [slot="content"] ::slotted([slot="illustration"]),
224
228
  [slot="content"] .d2l-list-item-illustration > * {
225
229
  border-radius: 6px;
@@ -685,7 +689,7 @@ export const ListItemMixin = superclass => class extends composeMixins(
685
689
  'hide-bottom-border': this._showAddButton && (!this._hasNestedList || this._hasNestedListAddButton)
686
690
  };
687
691
 
688
- const alignNested = ((this.draggable && this.selectable) || (this.expandable && this.selectable && this.color)) ? 'control' : undefined;
692
+ const alignNested = ((this.draggable && this.selectable) || (this.expandable && this.selectable && this.color) || (this.expandable && !this.selectable)) ? 'control' : undefined;
689
693
  const contentAreaContent = html`
690
694
  <div slot="content"
691
695
  class="d2l-list-item-content"
@@ -696,7 +700,11 @@ export const ListItemMixin = superclass => class extends composeMixins(
696
700
  <slot>${content}</slot>
697
701
  </div>
698
702
  `;
703
+
699
704
  const primaryAction = ((!this.noPrimaryAction && this._renderPrimaryAction) ? this._renderPrimaryAction(this._contentId, contentAreaContent) : null);
705
+ const renderExpandableAction = !primaryAction && !this.selectable && this.expandable && !this.noPrimaryAction;
706
+ const renderCheckboxAction = !primaryAction && this.selectable && !this.noPrimaryAction;
707
+
700
708
  let tooltipForId = null;
701
709
  if (this._showAddButton) {
702
710
  tooltipForId = this._addButtonTopId;
@@ -748,8 +756,8 @@ export const ListItemMixin = superclass => class extends composeMixins(
748
756
  <div slot="control-action"
749
757
  @mouseenter="${this._onMouseEnter}"
750
758
  @mouseleave="${this._onMouseLeave}">
751
- ${this._renderCheckboxAction('')}
752
- ${this._renderExpandCollapseAction()}
759
+ ${this._renderCheckboxAction(renderCheckboxAction ? contentAreaContent : '')}
760
+ ${this._renderExpandCollapseAction(renderExpandableAction ? contentAreaContent : null)}
753
761
  </div>` : nothing }
754
762
  ${primaryAction ? html`
755
763
  <div slot="content-action"
@@ -758,7 +766,8 @@ export const ListItemMixin = superclass => class extends composeMixins(
758
766
  @mouseenter="${this._onMouseEnterPrimaryAction}"
759
767
  @mouseleave="${this._onMouseLeavePrimaryAction}">
760
768
  ${primaryAction}
761
- </div>` : contentAreaContent}
769
+ </div>` : nothing}
770
+ ${!primaryAction && !renderExpandableAction && !renderCheckboxAction ? contentAreaContent : nothing}
762
771
  <div slot="actions"
763
772
  @mouseenter="${this._onMouseEnter}"
764
773
  @mouseleave="${this._onMouseLeave}"
@@ -619,6 +619,169 @@
619
619
  }
620
620
  ]
621
621
  },
622
+ {
623
+ "name": "d2l-button-split-item",
624
+ "path": "./components/button/button-split-item.js",
625
+ "description": "An split button item component used with JS handlers.",
626
+ "attributes": [
627
+ {
628
+ "name": "key",
629
+ "description": "REQUIRED: Key of the action",
630
+ "type": "string"
631
+ },
632
+ {
633
+ "name": "text",
634
+ "description": "REQUIRED: Text displayed by the menu item",
635
+ "type": "string"
636
+ },
637
+ {
638
+ "name": "description",
639
+ "description": "ACCESSIBILITY: A description of the menu item that will be used by screen readers for additional context",
640
+ "type": "string"
641
+ },
642
+ {
643
+ "name": "disabled",
644
+ "description": "Disables the menu item",
645
+ "type": "boolean",
646
+ "default": "false"
647
+ },
648
+ {
649
+ "name": "lines",
650
+ "description": "The number of lines to display before truncating text with an ellipsis. Defaults to 2.",
651
+ "type": "number",
652
+ "default": "2"
653
+ }
654
+ ],
655
+ "properties": [
656
+ {
657
+ "name": "key",
658
+ "attribute": "key",
659
+ "description": "REQUIRED: Key of the action",
660
+ "type": "string"
661
+ },
662
+ {
663
+ "name": "text",
664
+ "attribute": "text",
665
+ "description": "REQUIRED: Text displayed by the menu item",
666
+ "type": "string"
667
+ },
668
+ {
669
+ "name": "description",
670
+ "attribute": "description",
671
+ "description": "ACCESSIBILITY: A description of the menu item that will be used by screen readers for additional context",
672
+ "type": "string"
673
+ },
674
+ {
675
+ "name": "disabled",
676
+ "attribute": "disabled",
677
+ "description": "Disables the menu item",
678
+ "type": "boolean",
679
+ "default": "false"
680
+ },
681
+ {
682
+ "name": "lines",
683
+ "attribute": "lines",
684
+ "description": "The number of lines to display before truncating text with an ellipsis. Defaults to 2.",
685
+ "type": "number",
686
+ "default": "2"
687
+ }
688
+ ],
689
+ "events": [
690
+ {
691
+ "name": "d2l-menu-item-select",
692
+ "description": "Dispatched when the menu item is selected"
693
+ },
694
+ {
695
+ "name": "d2l-menu-item-visibility-change",
696
+ "description": "Dispatched when the visibility of the menu item changes"
697
+ }
698
+ ]
699
+ },
700
+ {
701
+ "name": "d2l-button-split",
702
+ "path": "./components/button/button-split.js",
703
+ "description": "A split button that provides a main action button and slot for a menu.",
704
+ "attributes": [
705
+ {
706
+ "name": "description",
707
+ "description": "ACCESSIBILITY: A description to be added to the main action button for accessibility when text does not provide enough context",
708
+ "type": "string"
709
+ },
710
+ {
711
+ "name": "disabled-tooltip",
712
+ "description": "Tooltip text when disabled",
713
+ "type": "string"
714
+ },
715
+ {
716
+ "name": "key",
717
+ "description": "REQUIRED: Key of the main action",
718
+ "type": "string"
719
+ },
720
+ {
721
+ "name": "text",
722
+ "description": "ACCESSIBILITY: REQUIRED: Accessible text for the main action button",
723
+ "type": "string"
724
+ },
725
+ {
726
+ "name": "disabled",
727
+ "description": "Disables the main action and dropdown opener buttons",
728
+ "type": "boolean",
729
+ "default": "false"
730
+ },
731
+ {
732
+ "name": "primary",
733
+ "description": "Styles the buttons as a primary buttons",
734
+ "type": "boolean",
735
+ "default": "false"
736
+ }
737
+ ],
738
+ "properties": [
739
+ {
740
+ "name": "description",
741
+ "attribute": "description",
742
+ "description": "ACCESSIBILITY: A description to be added to the main action button for accessibility when text does not provide enough context",
743
+ "type": "string"
744
+ },
745
+ {
746
+ "name": "disabledTooltip",
747
+ "attribute": "disabled-tooltip",
748
+ "description": "Tooltip text when disabled",
749
+ "type": "string"
750
+ },
751
+ {
752
+ "name": "key",
753
+ "attribute": "key",
754
+ "description": "REQUIRED: Key of the main action",
755
+ "type": "string"
756
+ },
757
+ {
758
+ "name": "text",
759
+ "attribute": "text",
760
+ "description": "ACCESSIBILITY: REQUIRED: Accessible text for the main action button",
761
+ "type": "string"
762
+ },
763
+ {
764
+ "name": "disabled",
765
+ "attribute": "disabled",
766
+ "description": "Disables the main action and dropdown opener buttons",
767
+ "type": "boolean",
768
+ "default": "false"
769
+ },
770
+ {
771
+ "name": "primary",
772
+ "attribute": "primary",
773
+ "description": "Styles the buttons as a primary buttons",
774
+ "type": "boolean",
775
+ "default": "false"
776
+ }
777
+ ],
778
+ "events": [
779
+ {
780
+ "name": "click",
781
+ "description": "Dispatched when a split button is clicked. The `key` is provided on the event detail."
782
+ }
783
+ ]
784
+ },
622
785
  {
623
786
  "name": "d2l-button-subtle",
624
787
  "path": "./components/button/button-subtle.js",
package/lang/ar.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "إغلاق التنبيه",
3
3
  "components.breadcrumbs.breadcrumb": "شريط التنقل",
4
4
  "components.button-add.addItem": "إضافة عنصر",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "يحتوي على أحداث.",
6
7
  "components.calendar.notSelected": "لم يتم التحديد.",
7
8
  "components.calendar.selected": "تم التحديد.",
package/lang/cy.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Cau Hysbysiad",
3
3
  "components.breadcrumbs.breadcrumb": "Briwsionyn Bara",
4
4
  "components.button-add.addItem": "Ychwanegu Eitem",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Yn Cynnwys Digwyddiadau.",
6
7
  "components.calendar.notSelected": "Heb ei Ddewis.",
7
8
  "components.calendar.selected": "Wedi'i Ddewis.",
package/lang/da.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Luk besked",
3
3
  "components.breadcrumbs.breadcrumb": "Brødkrumme",
4
4
  "components.button-add.addItem": "Tilføj element",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Har begivenheder.",
6
7
  "components.calendar.notSelected": "Ikke valgt.",
7
8
  "components.calendar.selected": "Valgt.",
package/lang/de.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Benachrichtigung schließen",
3
3
  "components.breadcrumbs.breadcrumb": "Brotkrümelnavigation",
4
4
  "components.button-add.addItem": "Element hinzufügen",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Hat Ereignisse.",
6
7
  "components.calendar.notSelected": "Nicht ausgewählt.",
7
8
  "components.calendar.selected": "Ausgewählt.",
package/lang/en-gb.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Close Alert",
3
3
  "components.breadcrumbs.breadcrumb": "Breadcrumb",
4
4
  "components.button-add.addItem": "Add Item",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Has Events.",
6
7
  "components.calendar.notSelected": "Not Selected.",
7
8
  "components.calendar.selected": "Selected.",
package/lang/en.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Close Alert",
3
3
  "components.breadcrumbs.breadcrumb": "Breadcrumb",
4
4
  "components.button-add.addItem": "Add Item",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Has Events.",
6
7
  "components.calendar.notSelected": "Not Selected.",
7
8
  "components.calendar.selected": "Selected.",
package/lang/es-es.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Cerrar alerta",
3
3
  "components.breadcrumbs.breadcrumb": "Ruta de navegación",
4
4
  "components.button-add.addItem": "Agregar elemento",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Tiene eventos.",
6
7
  "components.calendar.notSelected": "No seleccionado.",
7
8
  "components.calendar.selected": "Seleccionado.",
package/lang/es.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Cerrar alerta",
3
3
  "components.breadcrumbs.breadcrumb": "Ruta de navegación",
4
4
  "components.button-add.addItem": "Agregar elemento",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Tiene eventos.",
6
7
  "components.calendar.notSelected": "No seleccionado.",
7
8
  "components.calendar.selected": "Seleccionado.",
package/lang/fr-fr.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Fermer l'alerte",
3
3
  "components.breadcrumbs.breadcrumb": "Chemin de navigation",
4
4
  "components.button-add.addItem": "Ajouter un élément",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "A des événements.",
6
7
  "components.calendar.notSelected": "Non sélectionné.",
7
8
  "components.calendar.selected": "Sélectionné.",
package/lang/fr.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Fermer l'alerte",
3
3
  "components.breadcrumbs.breadcrumb": "Chemin de navigation",
4
4
  "components.button-add.addItem": "Ajouter un élément",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Comprend des événements.",
6
7
  "components.calendar.notSelected": "Non sélectionné(e)",
7
8
  "components.calendar.selected": "Sélectionné(e).",
package/lang/haw.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Pani i ka makaʻala",
3
3
  "components.breadcrumbs.breadcrumb": "Palapalapala",
4
4
  "components.button-add.addItem": "Pākuʻi Mea",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Loaʻa nā hanana.",
6
7
  "components.calendar.notSelected": "ʻAʻole i koho ʻia.",
7
8
  "components.calendar.selected": "Koho ʻia.",
package/lang/hi.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "अलर्ट बंद करें",
3
3
  "components.breadcrumbs.breadcrumb": "ब्रेडक्रंब",
4
4
  "components.button-add.addItem": "आइटम जोड़ें",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "ईवेंट हैं।",
6
7
  "components.calendar.notSelected": "चयनित नहीं।",
7
8
  "components.calendar.selected": "चयनित।",
package/lang/ja.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "アラートを閉じる",
3
3
  "components.breadcrumbs.breadcrumb": "階層",
4
4
  "components.button-add.addItem": "項目の追加",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "イベントがあります。",
6
7
  "components.calendar.notSelected": "選択されていません。",
7
8
  "components.calendar.selected": "選択されています。",
package/lang/ko.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "경보 닫기",
3
3
  "components.breadcrumbs.breadcrumb": "이동 경로",
4
4
  "components.button-add.addItem": "항목 추가",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "이벤트가 있습니다.",
6
7
  "components.calendar.notSelected": "선택되지 않음.",
7
8
  "components.calendar.selected": "선택됨.",
package/lang/mi.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Kati Matohi",
3
3
  "components.breadcrumbs.breadcrumb": "Pānui",
4
4
  "components.button-add.addItem": "Tāpiri Tūemi",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "He takahanga anō.",
6
7
  "components.calendar.notSelected": "Kāore i tīpakona.",
7
8
  "components.calendar.selected": "I tīpakona.",
package/lang/nl.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Waarschuwing sluiten",
3
3
  "components.breadcrumbs.breadcrumb": "Kruimelpad",
4
4
  "components.button-add.addItem": "Item toevoegen",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Bevat gebeurtenissen.",
6
7
  "components.calendar.notSelected": "Niet geselecteerd.",
7
8
  "components.calendar.selected": "Geselecteerd.",
package/lang/pt.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Fechar alerta",
3
3
  "components.breadcrumbs.breadcrumb": "Auxiliar de navegação",
4
4
  "components.button-add.addItem": "Adicionar item",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Tem eventos.",
6
7
  "components.calendar.notSelected": "Não selecionado.",
7
8
  "components.calendar.selected": "Selecionado.",
package/lang/sv.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Stängningsvarning",
3
3
  "components.breadcrumbs.breadcrumb": "Sökväg",
4
4
  "components.button-add.addItem": "Lägg till objekt",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Har händelser.",
6
7
  "components.calendar.notSelected": "Inte vald.",
7
8
  "components.calendar.selected": "Markerad.",
package/lang/tr.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "Kapatma Uyarısı",
3
3
  "components.breadcrumbs.breadcrumb": "İçerik Haritası",
4
4
  "components.button-add.addItem": "Öğe Ekle",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "Olayları Var.",
6
7
  "components.calendar.notSelected": "Seçili Değil.",
7
8
  "components.calendar.selected": "Seçili.",
package/lang/zh-cn.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "关闭提醒",
3
3
  "components.breadcrumbs.breadcrumb": "痕迹导航",
4
4
  "components.button-add.addItem": "添加项目",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "有事件。",
6
7
  "components.calendar.notSelected": "未选择。",
7
8
  "components.calendar.selected": "已选择。",
package/lang/zh-tw.js CHANGED
@@ -2,6 +2,7 @@ export default {
2
2
  "components.alert.close": "關閉警示",
3
3
  "components.breadcrumbs.breadcrumb": "導覽路徑",
4
4
  "components.button-add.addItem": "新增項目",
5
+ "components.button-split.otherOptions": "Other Options",
5
6
  "components.calendar.hasEvents": "有事件。",
6
7
  "components.calendar.notSelected": "未選取。",
7
8
  "components.calendar.selected": "已選取。",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "3.112.3",
3
+ "version": "3.114.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",