@daikin-oss/design-system-web-components 1.0.0 → 1.1.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.
- package/CHANGELOG.md +18 -0
- package/dist/cjs/base/dds-element.cjs +1 -1
- package/dist/cjs/components/avatar/daikin-avatar.cjs +160 -0
- package/dist/cjs/components/avatar/daikin-avatar.d.cts +64 -0
- package/dist/cjs/components/avatar/index.cjs +7 -0
- package/dist/cjs/components/avatar/index.d.cts +1 -0
- package/dist/cjs/components/checkbox/daikin-checkbox.cjs +1 -0
- package/dist/cjs/components/checkbox/daikin-checkbox.d.cts +4 -0
- package/dist/cjs/components/dropdown/daikin-dropdown.cjs +145 -69
- package/dist/cjs/components/dropdown/daikin-dropdown.d.cts +48 -9
- package/dist/cjs/components/dropdown-item/daikin-dropdown-item.cjs +97 -36
- package/dist/cjs/components/dropdown-item/daikin-dropdown-item.d.cts +6 -1
- package/dist/cjs/components/icon/icons.json.cjs +1 -1
- package/dist/cjs/components/icon/icons.json.d.cts +4 -0
- package/dist/cjs/components/index.cjs +10 -0
- package/dist/cjs/components/index.d.cts +2 -0
- package/dist/cjs/components/loading/daikin-loading.cjs +91 -0
- package/dist/cjs/components/loading/daikin-loading.d.cts +32 -0
- package/dist/cjs/components/loading/index.cjs +7 -0
- package/dist/cjs/components/loading/index.d.cts +1 -0
- package/dist/cjs/index.cjs +10 -0
- package/dist/cjs/tailwind.css.cjs +1 -1
- package/dist/cjs/utils/is-similar-to-click.cjs +4 -0
- package/dist/cjs/utils/is-similar-to-click.d.cts +1 -0
- package/dist/cjs-dev/base/dds-element.cjs +1 -1
- package/dist/cjs-dev/components/avatar/daikin-avatar.cjs +160 -0
- package/dist/cjs-dev/components/avatar/daikin-avatar.d.cts +64 -0
- package/dist/cjs-dev/components/avatar/index.cjs +7 -0
- package/dist/cjs-dev/components/avatar/index.d.cts +1 -0
- package/dist/cjs-dev/components/checkbox/daikin-checkbox.cjs +1 -0
- package/dist/cjs-dev/components/checkbox/daikin-checkbox.d.cts +4 -0
- package/dist/cjs-dev/components/dropdown/daikin-dropdown.cjs +145 -69
- package/dist/cjs-dev/components/dropdown/daikin-dropdown.d.cts +48 -9
- package/dist/cjs-dev/components/dropdown-item/daikin-dropdown-item.cjs +97 -36
- package/dist/cjs-dev/components/dropdown-item/daikin-dropdown-item.d.cts +6 -1
- package/dist/cjs-dev/components/icon/icons.json.cjs +1 -1
- package/dist/cjs-dev/components/icon/icons.json.d.cts +4 -0
- package/dist/cjs-dev/components/index.cjs +10 -0
- package/dist/cjs-dev/components/index.d.cts +2 -0
- package/dist/cjs-dev/components/loading/daikin-loading.cjs +91 -0
- package/dist/cjs-dev/components/loading/daikin-loading.d.cts +32 -0
- package/dist/cjs-dev/components/loading/index.cjs +7 -0
- package/dist/cjs-dev/components/loading/index.d.cts +1 -0
- package/dist/cjs-dev/index.cjs +10 -0
- package/dist/cjs-dev/tailwind.css.cjs +1 -1
- package/dist/cjs-dev/utils/is-similar-to-click.cjs +4 -0
- package/dist/cjs-dev/utils/is-similar-to-click.d.cts +1 -0
- package/dist/es/base/dds-element.js +1 -1
- package/dist/es/components/avatar/daikin-avatar.d.ts +64 -0
- package/dist/es/components/avatar/daikin-avatar.js +161 -0
- package/dist/es/components/avatar/index.d.ts +1 -0
- package/dist/es/components/avatar/index.js +4 -0
- package/dist/es/components/checkbox/daikin-checkbox.d.ts +4 -0
- package/dist/es/components/checkbox/daikin-checkbox.js +1 -0
- package/dist/es/components/dropdown/daikin-dropdown.d.ts +48 -9
- package/dist/es/components/dropdown/daikin-dropdown.js +145 -69
- package/dist/es/components/dropdown-item/daikin-dropdown-item.d.ts +6 -1
- package/dist/es/components/dropdown-item/daikin-dropdown-item.js +97 -36
- package/dist/es/components/icon/icons.json.d.ts +4 -0
- package/dist/es/components/icon/icons.json.js +1 -1
- package/dist/es/components/index.d.ts +2 -0
- package/dist/es/components/index.js +4 -0
- package/dist/es/components/loading/daikin-loading.d.ts +32 -0
- package/dist/es/components/loading/daikin-loading.js +92 -0
- package/dist/es/components/loading/index.d.ts +1 -0
- package/dist/es/components/loading/index.js +4 -0
- package/dist/es/index.js +4 -0
- package/dist/es/tailwind.css.js +1 -1
- package/dist/es/utils/is-similar-to-click.d.ts +1 -0
- package/dist/es/utils/is-similar-to-click.js +4 -0
- package/dist/es-dev/base/dds-element.js +1 -1
- package/dist/es-dev/components/avatar/daikin-avatar.d.ts +64 -0
- package/dist/es-dev/components/avatar/daikin-avatar.js +161 -0
- package/dist/es-dev/components/avatar/index.d.ts +1 -0
- package/dist/es-dev/components/avatar/index.js +4 -0
- package/dist/es-dev/components/checkbox/daikin-checkbox.d.ts +4 -0
- package/dist/es-dev/components/checkbox/daikin-checkbox.js +1 -0
- package/dist/es-dev/components/dropdown/daikin-dropdown.d.ts +48 -9
- package/dist/es-dev/components/dropdown/daikin-dropdown.js +145 -69
- package/dist/es-dev/components/dropdown-item/daikin-dropdown-item.d.ts +6 -1
- package/dist/es-dev/components/dropdown-item/daikin-dropdown-item.js +97 -36
- package/dist/es-dev/components/icon/icons.json.d.ts +4 -0
- package/dist/es-dev/components/icon/icons.json.js +1 -1
- package/dist/es-dev/components/index.d.ts +2 -0
- package/dist/es-dev/components/index.js +4 -0
- package/dist/es-dev/components/loading/daikin-loading.d.ts +32 -0
- package/dist/es-dev/components/loading/daikin-loading.js +92 -0
- package/dist/es-dev/components/loading/index.d.ts +1 -0
- package/dist/es-dev/components/loading/index.js +4 -0
- package/dist/es-dev/index.js +4 -0
- package/dist/es-dev/tailwind.css.js +1 -1
- package/dist/es-dev/utils/is-similar-to-click.d.ts +1 -0
- package/dist/es-dev/utils/is-similar-to-click.js +4 -0
- package/icons/profile.svg +4 -0
- package/package.json +1 -1
|
@@ -119,6 +119,7 @@ exports.DaikinCheckbox = class DaikinCheckbox extends ddsElement.DDSElement {
|
|
|
119
119
|
render() {
|
|
120
120
|
return lit.html`<label
|
|
121
121
|
class="group flex gap-2 items-center size-full font-daikinSerif"
|
|
122
|
+
part="label"
|
|
122
123
|
@click=${this._handleClick}
|
|
123
124
|
>
|
|
124
125
|
<span class="p-2">
|
|
@@ -7,6 +7,10 @@ import { DDSElement } from "../../base/index.cjs";
|
|
|
7
7
|
*
|
|
8
8
|
* @fires change - A cloned event of a [change event](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event) emitted from the inner `<input type="checkbox">` element.
|
|
9
9
|
*
|
|
10
|
+
* @slot - A slot for the checkbox label content.
|
|
11
|
+
*
|
|
12
|
+
* @csspart label - Change the style of checkbox label.
|
|
13
|
+
*
|
|
10
14
|
* @example
|
|
11
15
|
*
|
|
12
16
|
* ```js
|
|
@@ -5,12 +5,14 @@ const classVarianceAuthority = require("class-variance-authority");
|
|
|
5
5
|
const lit = require("lit");
|
|
6
6
|
const decorators_js = require("lit/decorators.js");
|
|
7
7
|
const ifDefined_js = require("lit/directives/if-defined.js");
|
|
8
|
+
const ref_js = require("lit/directives/ref.js");
|
|
8
9
|
const ddsElement = require("../../base/dds-element.cjs");
|
|
9
10
|
const decorators = require("../../base/decorators.cjs");
|
|
10
11
|
require("../../base/define.cjs");
|
|
11
12
|
const clickOutside = require("../../controllers/click-outside.cjs");
|
|
12
13
|
const floatingUiAutoUpdate = require("../../controllers/floating-ui-auto-update.cjs");
|
|
13
14
|
const tailwind = require("../../tailwind.css.cjs");
|
|
15
|
+
const isSimpleKey = require("../../utils/is-simple-key.cjs");
|
|
14
16
|
var __defProp = Object.defineProperty;
|
|
15
17
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
16
18
|
var __decorateClass = (decorators2, target, key, kind) => {
|
|
@@ -24,36 +26,34 @@ var __decorateClass = (decorators2, target, key, kind) => {
|
|
|
24
26
|
const cvaButton = classVarianceAuthority.cva(
|
|
25
27
|
[
|
|
26
28
|
"flex",
|
|
29
|
+
"justify-between",
|
|
27
30
|
"items-center",
|
|
28
31
|
"gap-2",
|
|
29
32
|
"w-full",
|
|
30
33
|
"h-full",
|
|
31
34
|
"min-h-12",
|
|
32
35
|
"bg-ddt-color-common-background-default",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
+
"py-3",
|
|
37
|
+
"pl-4",
|
|
38
|
+
"pr-3",
|
|
36
39
|
"rounded",
|
|
37
40
|
"overflow-hidden",
|
|
38
41
|
"font-daikinSerif",
|
|
39
42
|
"text-left",
|
|
40
|
-
"leading-
|
|
43
|
+
"leading-[130%]",
|
|
41
44
|
"relative",
|
|
42
45
|
"outline",
|
|
43
|
-
"outline-
|
|
44
|
-
"-outline-offset-
|
|
46
|
+
"outline-1",
|
|
47
|
+
"-outline-offset-1",
|
|
45
48
|
"focus-visible:outline-2",
|
|
46
|
-
"focus-visible
|
|
49
|
+
"focus-visible:-outline-offset-2",
|
|
50
|
+
"enabled:outline-[--color-base]",
|
|
47
51
|
"disabled:text-ddt-color-common-disabled",
|
|
48
|
-
"disabled:
|
|
52
|
+
"disabled:outline-ddt-color-common-disabled",
|
|
49
53
|
"after:i-daikin-dropdown-chevron-down",
|
|
50
|
-
"after:
|
|
51
|
-
"after:
|
|
52
|
-
"after:
|
|
53
|
-
"after:m-auto",
|
|
54
|
-
"after:top-0",
|
|
55
|
-
"after:bottom-0",
|
|
56
|
-
"after:right-3",
|
|
54
|
+
"after:size-6",
|
|
55
|
+
"after:flex-none",
|
|
56
|
+
"after:ml-auto",
|
|
57
57
|
"enabled:after:text-ddt-color-common-text-primary",
|
|
58
58
|
"disabled:after:text-ddt-color-common-disabled"
|
|
59
59
|
],
|
|
@@ -64,17 +64,19 @@ const cvaButton = classVarianceAuthority.cva(
|
|
|
64
64
|
"enabled:hover:bg-ddt-color-common-surface-hover",
|
|
65
65
|
"enabled:active:bg-ddt-color-common-surface-press"
|
|
66
66
|
],
|
|
67
|
-
true: [
|
|
67
|
+
true: [
|
|
68
|
+
"enabled:bg-ddt-color-common-surface-press",
|
|
69
|
+
"after:scale-y-[-1]"
|
|
70
|
+
]
|
|
68
71
|
},
|
|
69
72
|
error: {
|
|
70
73
|
false: [
|
|
71
74
|
"var-color-ddt-color-common-neutral-default/color-base",
|
|
72
|
-
"var-color-ddt-color-common-
|
|
75
|
+
"hover:var-color-ddt-color-common-neutral-hover/color-base",
|
|
76
|
+
"active:var-color-ddt-color-common-neutral-press/color-base",
|
|
77
|
+
"focus-visible:var-color-ddt-color-common-border-focus/color-base"
|
|
73
78
|
],
|
|
74
|
-
true: [
|
|
75
|
-
"var-color-ddt-color-common-danger-default/color-base",
|
|
76
|
-
"var-color-ddt-color-common-danger-default/color-focus"
|
|
77
|
-
]
|
|
79
|
+
true: ["var-color-ddt-color-common-danger-default/color-base"]
|
|
78
80
|
},
|
|
79
81
|
placeholder: {
|
|
80
82
|
false: ["text-ddt-color-common-text-primary"],
|
|
@@ -108,37 +110,31 @@ exports.DaikinDropdown = class DaikinDropdown extends ddsElement.DDSElement {
|
|
|
108
110
|
this.required = false;
|
|
109
111
|
this.error = false;
|
|
110
112
|
this.open = false;
|
|
113
|
+
this.multiple = false;
|
|
114
|
+
this.selectedOptions = [];
|
|
115
|
+
this.maxLabels = null;
|
|
111
116
|
this._label = null;
|
|
112
|
-
this.
|
|
113
|
-
this._selectedItemLabel = "";
|
|
117
|
+
this._initialUpdateCompleted = false;
|
|
114
118
|
this._autoUpdateController = new floatingUiAutoUpdate.FloatingUIAutoUpdateController(this);
|
|
115
119
|
this._clickOutsideController = new clickOutside.ClickOutsideController(
|
|
116
120
|
this,
|
|
117
121
|
this._onClickOutside
|
|
118
122
|
);
|
|
119
123
|
this._lastFocusedItem = null;
|
|
124
|
+
this._dropdownRef = ref_js.createRef();
|
|
120
125
|
}
|
|
121
|
-
|
|
122
|
-
this.
|
|
126
|
+
get _selectionLabels() {
|
|
127
|
+
const items = this._items;
|
|
128
|
+
return this.selectedOptions.map(
|
|
129
|
+
(value) => {
|
|
130
|
+
var _a;
|
|
131
|
+
return ((_a = items.find((item) => item.value === value)) == null ? void 0 : _a.textContent) ?? "";
|
|
132
|
+
}
|
|
133
|
+
);
|
|
123
134
|
}
|
|
124
135
|
_onClickOutside() {
|
|
125
136
|
this.open = false;
|
|
126
137
|
}
|
|
127
|
-
_reflectItemsAndLabel() {
|
|
128
|
-
const items = this._items;
|
|
129
|
-
const selectedItem = items.find((item) => item.value === this.value);
|
|
130
|
-
for (const item of items) {
|
|
131
|
-
item.selected = item === selectedItem;
|
|
132
|
-
}
|
|
133
|
-
this._hasSelectedItem = !!selectedItem;
|
|
134
|
-
this._selectedItemLabel = (selectedItem == null ? void 0 : selectedItem.textContent) ?? "";
|
|
135
|
-
}
|
|
136
|
-
_handleClick() {
|
|
137
|
-
if (this.disabled) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
this.open = !this.open;
|
|
141
|
-
}
|
|
142
138
|
_searchItem(prefix) {
|
|
143
139
|
const items = this._items.filter(
|
|
144
140
|
(item) => {
|
|
@@ -160,13 +156,6 @@ exports.DaikinDropdown = class DaikinDropdown extends ddsElement.DDSElement {
|
|
|
160
156
|
this.open = true;
|
|
161
157
|
}
|
|
162
158
|
}
|
|
163
|
-
_handleKeyDownEscape() {
|
|
164
|
-
if (this.open) {
|
|
165
|
-
this.open = false;
|
|
166
|
-
} else {
|
|
167
|
-
this.value = null;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
159
|
_moveFocus(moveOffset) {
|
|
171
160
|
if (!this.open) {
|
|
172
161
|
this.open = true;
|
|
@@ -188,7 +177,56 @@ exports.DaikinDropdown = class DaikinDropdown extends ddsElement.DDSElement {
|
|
|
188
177
|
break;
|
|
189
178
|
}
|
|
190
179
|
}
|
|
180
|
+
_updateFormValue() {
|
|
181
|
+
this._internals.setFormValue(JSON.stringify(this.value));
|
|
182
|
+
}
|
|
183
|
+
_updateItemsSelectable() {
|
|
184
|
+
for (const item of this._items) {
|
|
185
|
+
item.selectable = this.multiple;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
_updateValueBySelectedOptions() {
|
|
189
|
+
this.value = this.selectedOptions.at(-1) ?? null;
|
|
190
|
+
}
|
|
191
|
+
_updateSelectedOptionsByValue() {
|
|
192
|
+
this.selectedOptions = this.value ? [this.value] : [];
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Handling for when an option is selected.
|
|
196
|
+
* If multiple selection is enabled, the specified option is added to or removed from the array of selected options.
|
|
197
|
+
* If multiple selection is disabled, the current value is set to the specified option. The selection is not cleared.
|
|
198
|
+
*
|
|
199
|
+
* @param value The value of selected option.
|
|
200
|
+
*/
|
|
201
|
+
_handleSelectOption(value) {
|
|
202
|
+
this.value = value;
|
|
203
|
+
this.selectedOptions = this.multiple ? this.selectedOptions.includes(value) ? this.selectedOptions.filter((option) => option != value) : [...this.selectedOptions, value] : [value];
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Removes the last selected option.
|
|
207
|
+
*
|
|
208
|
+
* If multiple selection is enabled, remove the last selected option and the array will eventually become empty.
|
|
209
|
+
* If multiple selection is disabled, directly empty the selected options.
|
|
210
|
+
*/
|
|
211
|
+
_removeLastSelection() {
|
|
212
|
+
if (this.multiple) {
|
|
213
|
+
this.selectedOptions = this.selectedOptions.slice(0, -1);
|
|
214
|
+
this.value = this.selectedOptions.at(-1) ?? null;
|
|
215
|
+
} else {
|
|
216
|
+
this.selectedOptions = [];
|
|
217
|
+
this.value = null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
_handleClick() {
|
|
221
|
+
if (this.disabled) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
this.open = !this.open;
|
|
225
|
+
}
|
|
191
226
|
_handleKeyDown(event) {
|
|
227
|
+
if (!isSimpleKey.isSimpleKeyEvent(event)) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
192
230
|
const printableCharacter = event.key.trim().length === 1 ? event.key : null;
|
|
193
231
|
if (printableCharacter) {
|
|
194
232
|
event.preventDefault();
|
|
@@ -212,19 +250,12 @@ exports.DaikinDropdown = class DaikinDropdown extends ddsElement.DDSElement {
|
|
|
212
250
|
break;
|
|
213
251
|
}
|
|
214
252
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if (!target || !this._items.includes(target)) {
|
|
221
|
-
return;
|
|
253
|
+
_handleKeyDownEscape() {
|
|
254
|
+
if (this.open) {
|
|
255
|
+
this.open = false;
|
|
256
|
+
} else {
|
|
257
|
+
this._removeLastSelection();
|
|
222
258
|
}
|
|
223
|
-
this._hasSelectedItem = true;
|
|
224
|
-
this._selectedItemLabel = target.textContent ?? "";
|
|
225
|
-
this.value = target.value;
|
|
226
|
-
this.open = false;
|
|
227
|
-
this.dispatchEvent(new Event("change"));
|
|
228
259
|
}
|
|
229
260
|
/**
|
|
230
261
|
* Handle `focusin` event to remember last focused item.
|
|
@@ -246,14 +277,28 @@ exports.DaikinDropdown = class DaikinDropdown extends ddsElement.DDSElement {
|
|
|
246
277
|
const item = items.find((item2) => item2 === this._lastFocusedItem) ?? items.find((item2) => item2.value === this.value) ?? items.at(0);
|
|
247
278
|
item == null ? void 0 : item.focus();
|
|
248
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
* Handle `select` event from `daikin-dropdown-item`.
|
|
282
|
+
*/
|
|
283
|
+
_handleSelect(event) {
|
|
284
|
+
this._handleSelectOption(event.target.value);
|
|
285
|
+
if (!this.multiple) {
|
|
286
|
+
this.open = false;
|
|
287
|
+
}
|
|
288
|
+
this.dispatchEvent(new Event("change"));
|
|
289
|
+
}
|
|
290
|
+
_handleSlotChange() {
|
|
291
|
+
this._updateItemsSelectable();
|
|
292
|
+
}
|
|
249
293
|
render() {
|
|
250
294
|
return lit.html`<div class="w-full relative" @keydown=${this._handleKeyDown}>
|
|
251
295
|
<button
|
|
296
|
+
${ref_js.ref(this._dropdownRef)}
|
|
252
297
|
type="button"
|
|
253
298
|
class=${cvaButton({
|
|
254
299
|
open: this.open,
|
|
255
300
|
error: this.error,
|
|
256
|
-
placeholder: !this.
|
|
301
|
+
placeholder: !this.selectedOptions.length
|
|
257
302
|
})}
|
|
258
303
|
?disabled=${this.disabled}
|
|
259
304
|
role="combobox"
|
|
@@ -266,18 +311,19 @@ exports.DaikinDropdown = class DaikinDropdown extends ddsElement.DDSElement {
|
|
|
266
311
|
@click=${this._handleClick}
|
|
267
312
|
${this._autoUpdateController.refReference()}
|
|
268
313
|
>
|
|
269
|
-
${this.
|
|
314
|
+
${this.selectedOptions.length ? this.multiple && this.selectedOptions.length > (this.maxLabels ?? 0) ? `${this.selectedOptions.length} items selected` : this._selectionLabels.join(", ") : this.placeholder}
|
|
270
315
|
</button>
|
|
271
316
|
<div
|
|
272
317
|
id="dropdown-items"
|
|
273
318
|
popover
|
|
274
|
-
class="floating-unready:hidden absolute left-[--floating-x,0] top-[--floating-y,0] min-w-[--floating-width] max-h-[12.5rem] overflow-y-auto opacity-1 transition-[opacity] rounded
|
|
319
|
+
class="floating-unready:hidden absolute left-[--floating-x,0] top-[--floating-y,0] min-w-[--floating-width] max-h-[12.5rem] border border-ddt-color-divider overflow-y-auto opacity-1 transition-[opacity] rounded"
|
|
275
320
|
aria-label=${ifDefined_js.ifDefined(this._label ?? void 0)}
|
|
276
321
|
role="listbox"
|
|
277
322
|
@floating-ready=${this._handleFloatingReady}
|
|
278
323
|
${this._autoUpdateController.refFloating()}
|
|
279
324
|
>
|
|
280
325
|
<slot
|
|
326
|
+
@slotchange=${this._handleSlotChange}
|
|
281
327
|
@select=${this._handleSelect}
|
|
282
328
|
@focusin=${this._handleFocusIn}
|
|
283
329
|
></slot>
|
|
@@ -300,11 +346,29 @@ exports.DaikinDropdown = class DaikinDropdown extends ddsElement.DDSElement {
|
|
|
300
346
|
var _a;
|
|
301
347
|
(_a = this._button) == null ? void 0 : _a.focus(options);
|
|
302
348
|
}
|
|
349
|
+
willUpdate(changedProperties) {
|
|
350
|
+
if (!this._initialUpdateCompleted) {
|
|
351
|
+
if (!!this.selectedOptions.length && (!this.value || !this.selectedOptions.includes(this.value))) {
|
|
352
|
+
this._updateValueBySelectedOptions();
|
|
353
|
+
} else if (!!this.value && !this.selectedOptions.length) {
|
|
354
|
+
this.selectedOptions = [this.value];
|
|
355
|
+
}
|
|
356
|
+
this._initialUpdateCompleted = true;
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
const hasChangedValue = changedProperties.has("value");
|
|
360
|
+
const hasChangedSelectedOptions = changedProperties.has("selectedOptions");
|
|
361
|
+
if (hasChangedValue && !hasChangedSelectedOptions) {
|
|
362
|
+
this._updateSelectedOptionsByValue();
|
|
363
|
+
}
|
|
364
|
+
if (!hasChangedValue && hasChangedSelectedOptions) {
|
|
365
|
+
this._updateValueBySelectedOptions();
|
|
366
|
+
}
|
|
367
|
+
}
|
|
303
368
|
updated(changedProperties) {
|
|
304
369
|
var _a;
|
|
305
370
|
if (changedProperties.has("value")) {
|
|
306
371
|
this._updateFormValue();
|
|
307
|
-
this._reflectItemsAndLabel();
|
|
308
372
|
}
|
|
309
373
|
if (changedProperties.has("open") || changedProperties.has("disabled")) {
|
|
310
374
|
(_a = this._autoUpdateController.floatingElement) == null ? void 0 : _a.togglePopover(
|
|
@@ -314,6 +378,15 @@ exports.DaikinDropdown = class DaikinDropdown extends ddsElement.DDSElement {
|
|
|
314
378
|
this.focus();
|
|
315
379
|
}
|
|
316
380
|
}
|
|
381
|
+
if (changedProperties.has("selectedOptions")) {
|
|
382
|
+
const items = this._items;
|
|
383
|
+
for (const item of items) {
|
|
384
|
+
item.selected = this.selectedOptions.includes(item.value);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (changedProperties.has("multiple")) {
|
|
388
|
+
this._updateItemsSelectable();
|
|
389
|
+
}
|
|
317
390
|
}
|
|
318
391
|
/**
|
|
319
392
|
* This method is used by `daikin-input-group` to reflect it's attributes to this component.
|
|
@@ -358,6 +431,15 @@ __decorateClass([
|
|
|
358
431
|
__decorateClass([
|
|
359
432
|
decorators_js.property({ type: Boolean, reflect: true })
|
|
360
433
|
], exports.DaikinDropdown.prototype, "open", 2);
|
|
434
|
+
__decorateClass([
|
|
435
|
+
decorators_js.property({ type: Boolean, reflect: true })
|
|
436
|
+
], exports.DaikinDropdown.prototype, "multiple", 2);
|
|
437
|
+
__decorateClass([
|
|
438
|
+
decorators_js.property({ type: Array, attribute: false })
|
|
439
|
+
], exports.DaikinDropdown.prototype, "selectedOptions", 2);
|
|
440
|
+
__decorateClass([
|
|
441
|
+
decorators_js.property({ type: Number, reflect: true, attribute: "max-labels" })
|
|
442
|
+
], exports.DaikinDropdown.prototype, "maxLabels", 2);
|
|
361
443
|
__decorateClass([
|
|
362
444
|
decorators_js.queryAssignedElements({ selector: "daikin-dropdown-item" })
|
|
363
445
|
], exports.DaikinDropdown.prototype, "_items", 2);
|
|
@@ -367,12 +449,6 @@ __decorateClass([
|
|
|
367
449
|
__decorateClass([
|
|
368
450
|
decorators_js.state()
|
|
369
451
|
], exports.DaikinDropdown.prototype, "_label", 2);
|
|
370
|
-
__decorateClass([
|
|
371
|
-
decorators_js.state()
|
|
372
|
-
], exports.DaikinDropdown.prototype, "_hasSelectedItem", 2);
|
|
373
|
-
__decorateClass([
|
|
374
|
-
decorators_js.state()
|
|
375
|
-
], exports.DaikinDropdown.prototype, "_selectedItemLabel", 2);
|
|
376
452
|
exports.DaikinDropdown = __decorateClass([
|
|
377
453
|
decorators.ddsElement("daikin-dropdown")
|
|
378
454
|
], exports.DaikinDropdown);
|
|
@@ -34,6 +34,9 @@ export declare class DaikinDropdown extends DDSElement {
|
|
|
34
34
|
/**
|
|
35
35
|
* Form value of the dropdown.
|
|
36
36
|
* `null` if not selected.
|
|
37
|
+
*
|
|
38
|
+
* If `multiple` is `true`, please use `selectedOptions` instead.
|
|
39
|
+
* If multiple selection is enabled, the value set to this property will be one of the selected items, and it is not possible to predict which value will be set.
|
|
37
40
|
*/
|
|
38
41
|
value: string | null;
|
|
39
42
|
/**
|
|
@@ -56,6 +59,22 @@ export declare class DaikinDropdown extends DDSElement {
|
|
|
56
59
|
* Whether the dropdown menu is opened.
|
|
57
60
|
*/
|
|
58
61
|
open: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Whether the dropdown menu is supports multiple selections.
|
|
64
|
+
*/
|
|
65
|
+
multiple: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* An array of `value` s for the currently selected option.
|
|
68
|
+
*
|
|
69
|
+
* This can be used regardless of the value of `multiple`, but if `multiple` is `true`, always use this instead of `value`.
|
|
70
|
+
* If `multiple` is `false`, the second and subsequent items will be deleted.
|
|
71
|
+
*/
|
|
72
|
+
selectedOptions: string[];
|
|
73
|
+
/**
|
|
74
|
+
* Specifies the maximum number of items to display without omission in the label when `multiple` is `true`.
|
|
75
|
+
* Specify `null` to display all selected items without omission.
|
|
76
|
+
*/
|
|
77
|
+
maxLabels: number | null;
|
|
59
78
|
private readonly _items;
|
|
60
79
|
private _button;
|
|
61
80
|
/**
|
|
@@ -63,8 +82,8 @@ export declare class DaikinDropdown extends DDSElement {
|
|
|
63
82
|
* Set automatically by `reflectInputGroup` method.
|
|
64
83
|
*/
|
|
65
84
|
private _label;
|
|
66
|
-
private
|
|
67
|
-
private
|
|
85
|
+
private get _selectionLabels();
|
|
86
|
+
private _initialUpdateCompleted;
|
|
68
87
|
private _autoUpdateController;
|
|
69
88
|
private _clickOutsideController;
|
|
70
89
|
/**
|
|
@@ -72,18 +91,32 @@ export declare class DaikinDropdown extends DDSElement {
|
|
|
72
91
|
* The next time the dropdown opens, the focus will be moved to this element.
|
|
73
92
|
*/
|
|
74
93
|
private _lastFocusedItem;
|
|
75
|
-
private
|
|
94
|
+
private _dropdownRef;
|
|
76
95
|
private _onClickOutside;
|
|
77
|
-
private _reflectItemsAndLabel;
|
|
78
|
-
private _handleClick;
|
|
79
96
|
private _searchItem;
|
|
80
|
-
private _handleKeyDownEscape;
|
|
81
97
|
private _moveFocus;
|
|
82
|
-
private
|
|
98
|
+
private _updateFormValue;
|
|
99
|
+
private _updateItemsSelectable;
|
|
100
|
+
private _updateValueBySelectedOptions;
|
|
101
|
+
private _updateSelectedOptionsByValue;
|
|
83
102
|
/**
|
|
84
|
-
*
|
|
103
|
+
* Handling for when an option is selected.
|
|
104
|
+
* If multiple selection is enabled, the specified option is added to or removed from the array of selected options.
|
|
105
|
+
* If multiple selection is disabled, the current value is set to the specified option. The selection is not cleared.
|
|
106
|
+
*
|
|
107
|
+
* @param value The value of selected option.
|
|
85
108
|
*/
|
|
86
|
-
private
|
|
109
|
+
private _handleSelectOption;
|
|
110
|
+
/**
|
|
111
|
+
* Removes the last selected option.
|
|
112
|
+
*
|
|
113
|
+
* If multiple selection is enabled, remove the last selected option and the array will eventually become empty.
|
|
114
|
+
* If multiple selection is disabled, directly empty the selected options.
|
|
115
|
+
*/
|
|
116
|
+
private _removeLastSelection;
|
|
117
|
+
private _handleClick;
|
|
118
|
+
private _handleKeyDown;
|
|
119
|
+
private _handleKeyDownEscape;
|
|
87
120
|
/**
|
|
88
121
|
* Handle `focusin` event to remember last focused item.
|
|
89
122
|
*/
|
|
@@ -94,12 +127,18 @@ export declare class DaikinDropdown extends DDSElement {
|
|
|
94
127
|
* Since the focus cannot be moved until the element is displayed on the screen, the focus is moved to the item after receiving the completion of the Floating UI position calculation here.
|
|
95
128
|
*/
|
|
96
129
|
private _handleFloatingReady;
|
|
130
|
+
/**
|
|
131
|
+
* Handle `select` event from `daikin-dropdown-item`.
|
|
132
|
+
*/
|
|
133
|
+
private _handleSelect;
|
|
134
|
+
private _handleSlotChange;
|
|
97
135
|
render(): import('lit-html').TemplateResult<1>;
|
|
98
136
|
/**
|
|
99
137
|
* Focuses on the inner button.
|
|
100
138
|
* @param options focus options
|
|
101
139
|
*/
|
|
102
140
|
focus(options?: FocusOptions): void;
|
|
141
|
+
protected willUpdate(changedProperties: PropertyValues): void;
|
|
103
142
|
protected updated(changedProperties: PropertyValues<this>): void;
|
|
104
143
|
/**
|
|
105
144
|
* This method is used by `daikin-input-group` to reflect it's attributes to this component.
|
|
@@ -7,6 +7,8 @@ const ddsElement = require("../../base/dds-element.cjs");
|
|
|
7
7
|
const decorators = require("../../base/decorators.cjs");
|
|
8
8
|
require("../../base/define.cjs");
|
|
9
9
|
const tailwind = require("../../tailwind.css.cjs");
|
|
10
|
+
const isSimilarToClick = require("../../utils/is-similar-to-click.cjs");
|
|
11
|
+
require("../checkbox/daikin-checkbox.cjs");
|
|
10
12
|
var __defProp = Object.defineProperty;
|
|
11
13
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
14
|
var __decorateClass = (decorators2, target, key, kind) => {
|
|
@@ -21,35 +23,49 @@ const cvaOption = classVarianceAuthority.cva(
|
|
|
21
23
|
[
|
|
22
24
|
"flex",
|
|
23
25
|
"items-center",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
+
"gap-1",
|
|
27
|
+
"size-full",
|
|
26
28
|
"min-h-12",
|
|
27
|
-
"text-ddt-color-common-text-primary",
|
|
28
|
-
"bg-ddt-color-common-background-default",
|
|
29
|
-
"p-3",
|
|
30
29
|
"font-daikinSerif",
|
|
31
|
-
"leading-
|
|
30
|
+
"leading-[130%]",
|
|
32
31
|
"text-left",
|
|
32
|
+
"relative",
|
|
33
33
|
"focus-visible:outline",
|
|
34
34
|
"focus-visible:outline-2",
|
|
35
35
|
"focus-visible:-outline-offset-2",
|
|
36
|
-
"focus-visible:outline-ddt-color-common-border-focus"
|
|
37
|
-
"disabled:text-ddt-color-common-disabled"
|
|
36
|
+
"focus-visible:outline-ddt-color-common-border-focus"
|
|
38
37
|
],
|
|
39
38
|
{
|
|
40
39
|
variants: {
|
|
41
40
|
selected: {
|
|
42
41
|
false: [
|
|
43
|
-
"
|
|
44
|
-
"
|
|
42
|
+
"var-color-ddt-color-common-background-default/color-primary",
|
|
43
|
+
"hover:var-color-ddt-color-common-surface-hover/color-primary",
|
|
44
|
+
"active:var-color-ddt-color-common-surface-press/color-primary"
|
|
45
45
|
],
|
|
46
46
|
true: [
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
47
|
+
"var-color-ddt-color-common-surface-selected-default/color-primary",
|
|
48
|
+
"hover:var-color-ddt-color-common-surface-selected-hover/color-primary",
|
|
49
|
+
"active:var-color-ddt-color-common-surface-selected-press/color-primary",
|
|
50
50
|
"after:i-daikin-dropdown-check",
|
|
51
|
-
"after:size-6"
|
|
51
|
+
"after:size-6",
|
|
52
|
+
"after:flex-none"
|
|
52
53
|
]
|
|
54
|
+
},
|
|
55
|
+
disabled: {
|
|
56
|
+
false: [
|
|
57
|
+
"text-ddt-color-common-text-primary",
|
|
58
|
+
"bg-[--color-primary]",
|
|
59
|
+
"cursor-pointer"
|
|
60
|
+
],
|
|
61
|
+
true: [
|
|
62
|
+
"text-ddt-color-common-disabled",
|
|
63
|
+
"bg-ddt-color-common-background-default"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
multiple: {
|
|
67
|
+
false: ["justify-between", "p-3"],
|
|
68
|
+
true: ["after:hidden"]
|
|
53
69
|
}
|
|
54
70
|
}
|
|
55
71
|
}
|
|
@@ -60,30 +76,72 @@ exports.DaikinDropdownItem = class DaikinDropdownItem extends ddsElement.DDSElem
|
|
|
60
76
|
this.value = "";
|
|
61
77
|
this.disabled = false;
|
|
62
78
|
this.selected = false;
|
|
79
|
+
this.selectable = false;
|
|
63
80
|
}
|
|
64
|
-
_handleClick() {
|
|
65
|
-
if (this.disabled) {
|
|
81
|
+
_handleClick(event) {
|
|
82
|
+
if (this.disabled || event.target.tagName === "DAIKIN-CHECKBOX") {
|
|
66
83
|
return;
|
|
67
84
|
}
|
|
68
|
-
this.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
);
|
|
85
|
+
this._emitSelect();
|
|
86
|
+
event.preventDefault();
|
|
87
|
+
}
|
|
88
|
+
_handleChange(event) {
|
|
89
|
+
this._emitSelect();
|
|
90
|
+
event.preventDefault();
|
|
91
|
+
}
|
|
92
|
+
_handleKeydown(event) {
|
|
93
|
+
if (!isSimilarToClick.isSimilarToClick(event.key) || this.disabled) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this._emitSelect();
|
|
97
|
+
event.preventDefault();
|
|
98
|
+
}
|
|
99
|
+
_handleMousedown(event) {
|
|
100
|
+
if (event.detail === 2) {
|
|
101
|
+
event.preventDefault();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
_emitSelect() {
|
|
105
|
+
this.dispatchEvent(new Event("select", { bubbles: true }));
|
|
73
106
|
}
|
|
74
107
|
render() {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
108
|
+
const optionClassName = cvaOption({
|
|
109
|
+
selected: this.selected,
|
|
110
|
+
disabled: this.disabled,
|
|
111
|
+
multiple: this.selectable
|
|
112
|
+
});
|
|
113
|
+
return this.selectable ? lit.html`<span
|
|
114
|
+
class=${optionClassName}
|
|
115
|
+
data-value=${this.value}
|
|
116
|
+
role="option"
|
|
117
|
+
aria-selected=${this.selected}
|
|
118
|
+
tabindex="-1"
|
|
119
|
+
aria-disabled=${this.disabled}
|
|
120
|
+
@click=${this._handleClick}
|
|
121
|
+
@keydown=${this._handleKeydown}
|
|
122
|
+
@mousedown=${this._handleMousedown}
|
|
123
|
+
>
|
|
124
|
+
<daikin-checkbox
|
|
125
|
+
class="size-full part-[label]:p-2 part-[label]:cursor-pointer"
|
|
126
|
+
check-state=${this.selected ? "checked" : "unchecked"}
|
|
127
|
+
tabindex="-1"
|
|
128
|
+
?disabled=${this.disabled}
|
|
129
|
+
@change=${this._handleChange}
|
|
130
|
+
>
|
|
131
|
+
<slot></slot>
|
|
132
|
+
</daikin-checkbox>
|
|
133
|
+
</span>` : lit.html`<button
|
|
134
|
+
type="button"
|
|
135
|
+
class=${optionClassName}
|
|
136
|
+
data-value=${this.value}
|
|
137
|
+
role="option"
|
|
138
|
+
aria-selected=${this.selected}
|
|
139
|
+
tabindex="-1"
|
|
140
|
+
?disabled=${this.disabled}
|
|
141
|
+
@click=${this._handleClick}
|
|
142
|
+
>
|
|
143
|
+
<slot></slot>
|
|
144
|
+
</button>`;
|
|
87
145
|
}
|
|
88
146
|
/**
|
|
89
147
|
* Focuses on the inner button.
|
|
@@ -91,7 +149,7 @@ exports.DaikinDropdownItem = class DaikinDropdownItem extends ddsElement.DDSElem
|
|
|
91
149
|
*/
|
|
92
150
|
focus(options) {
|
|
93
151
|
var _a;
|
|
94
|
-
(_a = this.
|
|
152
|
+
(_a = this._focusableElement) == null ? void 0 : _a.focus(options);
|
|
95
153
|
}
|
|
96
154
|
};
|
|
97
155
|
exports.DaikinDropdownItem.styles = lit.css`
|
|
@@ -112,8 +170,11 @@ __decorateClass([
|
|
|
112
170
|
decorators_js.property({ type: Boolean, reflect: true })
|
|
113
171
|
], exports.DaikinDropdownItem.prototype, "selected", 2);
|
|
114
172
|
__decorateClass([
|
|
115
|
-
decorators_js.
|
|
116
|
-
], exports.DaikinDropdownItem.prototype, "
|
|
173
|
+
decorators_js.property({ type: Boolean, reflect: true })
|
|
174
|
+
], exports.DaikinDropdownItem.prototype, "selectable", 2);
|
|
175
|
+
__decorateClass([
|
|
176
|
+
decorators_js.query("button,span[role=option]")
|
|
177
|
+
], exports.DaikinDropdownItem.prototype, "_focusableElement", 2);
|
|
117
178
|
exports.DaikinDropdownItem = __decorateClass([
|
|
118
179
|
decorators.ddsElement("daikin-dropdown-item")
|
|
119
180
|
], exports.DaikinDropdownItem);
|
|
@@ -34,8 +34,13 @@ export declare class DaikinDropdownItem extends DDSElement {
|
|
|
34
34
|
* Set automatically by `daikin-dropdown` component.
|
|
35
35
|
*/
|
|
36
36
|
selected: boolean;
|
|
37
|
-
|
|
37
|
+
selectable: boolean;
|
|
38
|
+
private _focusableElement;
|
|
38
39
|
private _handleClick;
|
|
40
|
+
private _handleChange;
|
|
41
|
+
private _handleKeydown;
|
|
42
|
+
private _handleMousedown;
|
|
43
|
+
private _emitSelect;
|
|
39
44
|
render(): import('lit-html').TemplateResult<1>;
|
|
40
45
|
/**
|
|
41
46
|
* Focuses on the inner button.
|