@duskmoon-dev/el-cascader 0.5.0 → 0.6.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/dist/cjs/index.js +31 -211
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/register.js +31 -211
- package/dist/cjs/register.js.map +3 -3
- package/dist/esm/index.js +29 -209
- package/dist/esm/index.js.map +3 -3
- package/dist/esm/register.js +29 -209
- package/dist/esm/register.js.map +3 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/el-dm-cascader.d.ts +2 -2
- package/dist/types/el-dm-cascader.d.ts.map +1 -1
- package/package.json +6 -5
- package/src/duskmoon-core.d.ts +7 -0
- package/src/el-dm-cascader.test.ts +232 -0
- package/src/el-dm-cascader.ts +32 -210
package/dist/cjs/register.js
CHANGED
|
@@ -27,73 +27,46 @@ var __export = (target, all) => {
|
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
// src/el-dm-cascader.ts
|
|
30
|
-
var
|
|
30
|
+
var import_el_base = require("@duskmoon-dev/el-base");
|
|
31
|
+
var import_cascader = require("@duskmoon-dev/core/components/cascader");
|
|
31
32
|
var chevronDownIcon = `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"/></svg>`;
|
|
32
33
|
var chevronRightIcon = `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6"/></svg>`;
|
|
33
34
|
var checkIcon = `<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>`;
|
|
34
35
|
var closeIcon = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>`;
|
|
35
36
|
var searchIcon = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>`;
|
|
36
37
|
var loadingIcon = `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="spinner"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>`;
|
|
37
|
-
var
|
|
38
|
+
var coreStyles = import_cascader.css.replace(/@layer\s+components\s*\{/, "").replace(/\}\s*$/, "");
|
|
39
|
+
var styles = import_el_base.css`
|
|
38
40
|
:host {
|
|
39
41
|
display: inline-block;
|
|
40
42
|
width: 100%;
|
|
41
43
|
}
|
|
42
44
|
|
|
45
|
+
${coreStyles}
|
|
46
|
+
|
|
47
|
+
/* Override: block display for full-width behavior */
|
|
43
48
|
.cascader {
|
|
44
|
-
|
|
45
|
-
width: 100%;
|
|
49
|
+
display: block;
|
|
46
50
|
}
|
|
47
51
|
|
|
48
|
-
/*
|
|
52
|
+
/* Override: trigger sizing & gap */
|
|
49
53
|
.cascader-trigger {
|
|
50
|
-
display: flex;
|
|
51
|
-
align-items: center;
|
|
52
54
|
gap: 0.5rem;
|
|
53
|
-
width: 100%;
|
|
54
55
|
min-height: 2.75rem;
|
|
55
56
|
padding: 0.5rem 0.75rem;
|
|
56
|
-
font-size: var(--font-size-md, 1rem);
|
|
57
|
-
line-height: 1.5;
|
|
58
|
-
color: var(--color-on-surface);
|
|
59
|
-
background-color: var(--color-surface);
|
|
60
|
-
border: 1px solid var(--color-outline);
|
|
61
|
-
border-radius: var(--radius-md, 0.5rem);
|
|
62
|
-
cursor: pointer;
|
|
63
|
-
transition: border-color 150ms ease, box-shadow 150ms ease;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.cascader-trigger:hover:not(:disabled) {
|
|
67
|
-
border-color: var(--color-on-surface-variant);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.cascader-trigger:focus {
|
|
71
|
-
outline: none;
|
|
72
|
-
border-color: var(--color-primary);
|
|
73
|
-
box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 15%, transparent);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.cascader-trigger:disabled {
|
|
77
|
-
cursor: not-allowed;
|
|
78
|
-
opacity: 0.5;
|
|
79
|
-
background-color: var(--color-surface-container);
|
|
80
57
|
}
|
|
81
58
|
|
|
82
|
-
/*
|
|
59
|
+
/* Override: value display as block text */
|
|
83
60
|
.cascader-value {
|
|
84
|
-
|
|
85
|
-
overflow: hidden;
|
|
86
|
-
text-overflow: ellipsis;
|
|
87
|
-
white-space: nowrap;
|
|
61
|
+
display: block;
|
|
88
62
|
text-align: left;
|
|
89
63
|
}
|
|
90
64
|
|
|
91
65
|
.cascader-placeholder {
|
|
92
|
-
color: var(--color-on-surface-variant);
|
|
93
66
|
opacity: 0.7;
|
|
94
67
|
}
|
|
95
68
|
|
|
96
|
-
/* Tags
|
|
69
|
+
/* Tags (not in core) */
|
|
97
70
|
.cascader-tags {
|
|
98
71
|
display: flex;
|
|
99
72
|
flex-wrap: wrap;
|
|
@@ -153,81 +126,20 @@ var styles = import_el_core.css`
|
|
|
153
126
|
color: var(--color-on-surface-variant);
|
|
154
127
|
}
|
|
155
128
|
|
|
156
|
-
/*
|
|
157
|
-
.cascader-arrow
|
|
158
|
-
display: inline-flex;
|
|
159
|
-
align-items: center;
|
|
160
|
-
justify-content: center;
|
|
161
|
-
width: 20px;
|
|
162
|
-
height: 20px;
|
|
163
|
-
flex-shrink: 0;
|
|
164
|
-
color: var(--color-on-surface-variant);
|
|
165
|
-
transition: transform 150ms ease;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
.cascader-arrow svg {
|
|
169
|
-
width: 16px;
|
|
170
|
-
height: 16px;
|
|
171
|
-
display: block;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
.cascader.open .cascader-arrow {
|
|
175
|
-
transform: rotate(180deg);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.cascader-clear {
|
|
179
|
-
display: inline-flex;
|
|
180
|
-
align-items: center;
|
|
181
|
-
justify-content: center;
|
|
182
|
-
width: 20px;
|
|
183
|
-
height: 20px;
|
|
184
|
-
padding: 0;
|
|
185
|
-
color: var(--color-on-surface-variant);
|
|
186
|
-
background-color: transparent;
|
|
187
|
-
border-radius: 50%;
|
|
188
|
-
cursor: pointer;
|
|
189
|
-
flex-shrink: 0;
|
|
190
|
-
transition: background-color 150ms ease;
|
|
191
|
-
}
|
|
192
|
-
|
|
129
|
+
/* Override: arrow/clear SVG sizing */
|
|
130
|
+
.cascader-arrow svg,
|
|
193
131
|
.cascader-clear svg {
|
|
194
|
-
width: 14px;
|
|
195
|
-
height: 14px;
|
|
196
132
|
display: block;
|
|
197
133
|
}
|
|
198
134
|
|
|
199
|
-
|
|
200
|
-
background-color: var(--color-surface-container-high);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/* Dropdown - uses Popover API (top-layer requires position: fixed) */
|
|
135
|
+
/* Override: dropdown uses Popover API (top-layer requires position: fixed) */
|
|
204
136
|
.cascader-dropdown {
|
|
205
137
|
position: fixed;
|
|
206
|
-
margin: 0;
|
|
207
|
-
padding: 0;
|
|
208
|
-
border: 1px solid var(--color-outline-variant);
|
|
209
|
-
border-radius: var(--radius-md, 0.5rem);
|
|
210
|
-
background-color: var(--color-surface);
|
|
211
|
-
box-shadow: var(--shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
|
|
212
|
-
overflow: hidden;
|
|
213
|
-
display: none;
|
|
214
138
|
flex-direction: column;
|
|
215
139
|
z-index: 1000;
|
|
216
140
|
}
|
|
217
141
|
|
|
218
|
-
|
|
219
|
-
display: flex;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/* Search */
|
|
223
|
-
.cascader-search {
|
|
224
|
-
display: flex;
|
|
225
|
-
align-items: center;
|
|
226
|
-
gap: 0.5rem;
|
|
227
|
-
padding: 0.5rem;
|
|
228
|
-
border-bottom: 1px solid var(--color-outline-variant);
|
|
229
|
-
}
|
|
230
|
-
|
|
142
|
+
/* Search icon (not in core) */
|
|
231
143
|
.cascader-search-icon {
|
|
232
144
|
display: inline-flex;
|
|
233
145
|
align-items: center;
|
|
@@ -244,86 +156,16 @@ var styles = import_el_core.css`
|
|
|
244
156
|
display: block;
|
|
245
157
|
}
|
|
246
158
|
|
|
247
|
-
|
|
248
|
-
flex: 1;
|
|
249
|
-
padding: 0.375rem 0.5rem;
|
|
250
|
-
font-size: var(--font-size-sm, 0.875rem);
|
|
251
|
-
color: var(--color-on-surface);
|
|
252
|
-
background-color: var(--color-surface-container);
|
|
253
|
-
border: none;
|
|
254
|
-
border-radius: var(--radius-sm, 0.25rem);
|
|
255
|
-
outline: none;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
.cascader-search-input:focus {
|
|
259
|
-
background-color: var(--color-surface-container-high);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
.cascader-search-input::placeholder {
|
|
263
|
-
color: var(--color-on-surface-variant);
|
|
264
|
-
opacity: 0.7;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/* Panels Container */
|
|
159
|
+
/* Override: panel max-height */
|
|
268
160
|
.cascader-panels {
|
|
269
|
-
display: flex;
|
|
270
161
|
max-height: 18rem;
|
|
271
162
|
}
|
|
272
163
|
|
|
273
|
-
/* Panel */
|
|
274
164
|
.cascader-panel {
|
|
275
|
-
display: flex;
|
|
276
|
-
flex-direction: column;
|
|
277
|
-
min-width: 10rem;
|
|
278
|
-
max-width: 14rem;
|
|
279
165
|
max-height: 18rem;
|
|
280
|
-
overflow-y: auto;
|
|
281
|
-
border-right: 1px solid var(--color-outline-variant);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
.cascader-panel:last-child {
|
|
285
|
-
border-right: none;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
.cascader-panel-options {
|
|
289
|
-
padding: 0.25rem;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/* Option */
|
|
293
|
-
.cascader-option {
|
|
294
|
-
display: flex;
|
|
295
|
-
align-items: center;
|
|
296
|
-
gap: 0.5rem;
|
|
297
|
-
width: 100%;
|
|
298
|
-
padding: 0.5rem 0.75rem;
|
|
299
|
-
font-size: var(--font-size-sm, 0.875rem);
|
|
300
|
-
color: var(--color-on-surface);
|
|
301
|
-
background-color: transparent;
|
|
302
|
-
border: none;
|
|
303
|
-
border-radius: var(--radius-sm, 0.25rem);
|
|
304
|
-
cursor: pointer;
|
|
305
|
-
text-align: left;
|
|
306
|
-
transition: background-color 150ms ease;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
.cascader-option:hover:not(.disabled) {
|
|
310
|
-
background-color: var(--color-surface-container);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
.cascader-option.active {
|
|
314
|
-
background-color: var(--color-surface-container-high);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
.cascader-option.selected {
|
|
318
|
-
background-color: var(--color-primary-container, #e8def8);
|
|
319
|
-
color: var(--color-on-primary-container, #1d1b20);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
.cascader-option.disabled {
|
|
323
|
-
opacity: 0.5;
|
|
324
|
-
cursor: not-allowed;
|
|
325
166
|
}
|
|
326
167
|
|
|
168
|
+
/* Checkbox (not in core) */
|
|
327
169
|
.cascader-option-checkbox {
|
|
328
170
|
display: flex;
|
|
329
171
|
align-items: center;
|
|
@@ -336,27 +178,13 @@ var styles = import_el_core.css`
|
|
|
336
178
|
flex-shrink: 0;
|
|
337
179
|
}
|
|
338
180
|
|
|
339
|
-
.cascader-option
|
|
181
|
+
.cascader-option-selected .cascader-option-checkbox {
|
|
340
182
|
background-color: var(--color-primary);
|
|
341
183
|
border-color: var(--color-primary);
|
|
342
184
|
color: var(--color-on-primary, white);
|
|
343
185
|
}
|
|
344
186
|
|
|
345
|
-
|
|
346
|
-
flex: 1;
|
|
347
|
-
overflow: hidden;
|
|
348
|
-
text-overflow: ellipsis;
|
|
349
|
-
white-space: nowrap;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
.cascader-option-arrow {
|
|
353
|
-
display: flex;
|
|
354
|
-
align-items: center;
|
|
355
|
-
justify-content: center;
|
|
356
|
-
color: var(--color-on-surface-variant);
|
|
357
|
-
flex-shrink: 0;
|
|
358
|
-
}
|
|
359
|
-
|
|
187
|
+
/* Loading spinner (not in core) */
|
|
360
188
|
.cascader-option-loading {
|
|
361
189
|
display: flex;
|
|
362
190
|
align-items: center;
|
|
@@ -373,7 +201,7 @@ var styles = import_el_core.css`
|
|
|
373
201
|
to { transform: rotate(360deg); }
|
|
374
202
|
}
|
|
375
203
|
|
|
376
|
-
/* Search
|
|
204
|
+
/* Search results (not in core) */
|
|
377
205
|
.cascader-search-results {
|
|
378
206
|
padding: 0.25rem;
|
|
379
207
|
max-height: 18rem;
|
|
@@ -417,15 +245,7 @@ var styles = import_el_core.css`
|
|
|
417
245
|
margin: 0 0.25rem;
|
|
418
246
|
}
|
|
419
247
|
|
|
420
|
-
/*
|
|
421
|
-
.cascader-empty {
|
|
422
|
-
padding: 1.5rem;
|
|
423
|
-
text-align: center;
|
|
424
|
-
color: var(--color-on-surface-variant);
|
|
425
|
-
font-size: var(--font-size-sm, 0.875rem);
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
/* Size Variants */
|
|
248
|
+
/* Size variants via :host (override core's container-class approach) */
|
|
429
249
|
:host([size="sm"]) .cascader-trigger {
|
|
430
250
|
min-height: 2.25rem;
|
|
431
251
|
padding: 0.375rem 0.5rem;
|
|
@@ -440,7 +260,7 @@ var styles = import_el_core.css`
|
|
|
440
260
|
border-radius: var(--radius-lg, 0.625rem);
|
|
441
261
|
}
|
|
442
262
|
|
|
443
|
-
/* Validation
|
|
263
|
+
/* Validation states via :host (override core's container-class approach) */
|
|
444
264
|
:host([validation-state="invalid"]) .cascader-trigger {
|
|
445
265
|
border-color: var(--color-error);
|
|
446
266
|
}
|
|
@@ -454,7 +274,7 @@ var styles = import_el_core.css`
|
|
|
454
274
|
border-color: var(--color-success);
|
|
455
275
|
}
|
|
456
276
|
|
|
457
|
-
/* Disabled
|
|
277
|
+
/* Disabled state via :host */
|
|
458
278
|
:host([disabled]) {
|
|
459
279
|
pointer-events: none;
|
|
460
280
|
}
|
|
@@ -466,7 +286,7 @@ var styles = import_el_core.css`
|
|
|
466
286
|
}
|
|
467
287
|
`;
|
|
468
288
|
|
|
469
|
-
class ElDmCascader extends
|
|
289
|
+
class ElDmCascader extends import_el_base.BaseElement {
|
|
470
290
|
static properties = {
|
|
471
291
|
value: { type: String, reflect: true, default: "" },
|
|
472
292
|
placeholder: { type: String, default: "Select..." },
|
|
@@ -834,7 +654,7 @@ class ElDmCascader extends import_el_core.BaseElement {
|
|
|
834
654
|
}
|
|
835
655
|
render() {
|
|
836
656
|
return `
|
|
837
|
-
<div class="cascader ${this._isOpen ? "open" : ""}">
|
|
657
|
+
<div class="cascader ${this._isOpen ? "cascader-open" : ""}">
|
|
838
658
|
${this._renderTrigger()}
|
|
839
659
|
${this._renderDropdown()}
|
|
840
660
|
</div>
|
|
@@ -922,9 +742,9 @@ class ElDmCascader extends import_el_core.BaseElement {
|
|
|
922
742
|
const hasChildren = !this._isLeaf(option);
|
|
923
743
|
const classes = [
|
|
924
744
|
"cascader-option",
|
|
925
|
-
isActive ? "active" : "",
|
|
926
|
-
isSelected ? "selected" : "",
|
|
927
|
-
option.disabled ? "disabled" : ""
|
|
745
|
+
isActive ? "cascader-option-active" : "",
|
|
746
|
+
isSelected ? "cascader-option-selected" : "",
|
|
747
|
+
option.disabled ? "cascader-option-disabled" : ""
|
|
928
748
|
].filter(Boolean).join(" ");
|
|
929
749
|
return `
|
|
930
750
|
<button
|
|
@@ -944,7 +764,7 @@ class ElDmCascader extends import_el_core.BaseElement {
|
|
|
944
764
|
}).join("");
|
|
945
765
|
return `
|
|
946
766
|
<div class="cascader-panel">
|
|
947
|
-
<div class="cascader-
|
|
767
|
+
<div class="cascader-options">${optionsHtml}</div>
|
|
948
768
|
</div>
|
|
949
769
|
`;
|
|
950
770
|
}
|
|
@@ -1080,5 +900,5 @@ function register() {
|
|
|
1080
900
|
// src/register.ts
|
|
1081
901
|
register();
|
|
1082
902
|
|
|
1083
|
-
//# debugId=
|
|
903
|
+
//# debugId=4C6CC3A536748EA964756E2164756E21
|
|
1084
904
|
//# sourceMappingURL=register.js.map
|