@duskmoon-dev/el-cascader 0.5.0 → 0.7.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/index.js
CHANGED
|
@@ -35,73 +35,46 @@ __export(exports_src, {
|
|
|
35
35
|
module.exports = __toCommonJS(exports_src);
|
|
36
36
|
|
|
37
37
|
// src/el-dm-cascader.ts
|
|
38
|
-
var
|
|
38
|
+
var import_el_base = require("@duskmoon-dev/el-base");
|
|
39
|
+
var import_cascader = require("@duskmoon-dev/core/components/cascader");
|
|
39
40
|
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>`;
|
|
40
41
|
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>`;
|
|
41
42
|
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>`;
|
|
42
43
|
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>`;
|
|
43
44
|
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>`;
|
|
44
45
|
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>`;
|
|
45
|
-
var
|
|
46
|
+
var coreStyles = import_cascader.css.replace(/@layer\s+components\s*\{/, "").replace(/\}\s*$/, "");
|
|
47
|
+
var styles = import_el_base.css`
|
|
46
48
|
:host {
|
|
47
49
|
display: inline-block;
|
|
48
50
|
width: 100%;
|
|
49
51
|
}
|
|
50
52
|
|
|
53
|
+
${coreStyles}
|
|
54
|
+
|
|
55
|
+
/* Override: block display for full-width behavior */
|
|
51
56
|
.cascader {
|
|
52
|
-
|
|
53
|
-
width: 100%;
|
|
57
|
+
display: block;
|
|
54
58
|
}
|
|
55
59
|
|
|
56
|
-
/*
|
|
60
|
+
/* Override: trigger sizing & gap */
|
|
57
61
|
.cascader-trigger {
|
|
58
|
-
display: flex;
|
|
59
|
-
align-items: center;
|
|
60
62
|
gap: 0.5rem;
|
|
61
|
-
width: 100%;
|
|
62
63
|
min-height: 2.75rem;
|
|
63
64
|
padding: 0.5rem 0.75rem;
|
|
64
|
-
font-size: var(--font-size-md, 1rem);
|
|
65
|
-
line-height: 1.5;
|
|
66
|
-
color: var(--color-on-surface);
|
|
67
|
-
background-color: var(--color-surface);
|
|
68
|
-
border: 1px solid var(--color-outline);
|
|
69
|
-
border-radius: var(--radius-md, 0.5rem);
|
|
70
|
-
cursor: pointer;
|
|
71
|
-
transition: border-color 150ms ease, box-shadow 150ms ease;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.cascader-trigger:hover:not(:disabled) {
|
|
75
|
-
border-color: var(--color-on-surface-variant);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.cascader-trigger:focus {
|
|
79
|
-
outline: none;
|
|
80
|
-
border-color: var(--color-primary);
|
|
81
|
-
box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 15%, transparent);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.cascader-trigger:disabled {
|
|
85
|
-
cursor: not-allowed;
|
|
86
|
-
opacity: 0.5;
|
|
87
|
-
background-color: var(--color-surface-container);
|
|
88
65
|
}
|
|
89
66
|
|
|
90
|
-
/*
|
|
67
|
+
/* Override: value display as block text */
|
|
91
68
|
.cascader-value {
|
|
92
|
-
|
|
93
|
-
overflow: hidden;
|
|
94
|
-
text-overflow: ellipsis;
|
|
95
|
-
white-space: nowrap;
|
|
69
|
+
display: block;
|
|
96
70
|
text-align: left;
|
|
97
71
|
}
|
|
98
72
|
|
|
99
73
|
.cascader-placeholder {
|
|
100
|
-
color: var(--color-on-surface-variant);
|
|
101
74
|
opacity: 0.7;
|
|
102
75
|
}
|
|
103
76
|
|
|
104
|
-
/* Tags
|
|
77
|
+
/* Tags (not in core) */
|
|
105
78
|
.cascader-tags {
|
|
106
79
|
display: flex;
|
|
107
80
|
flex-wrap: wrap;
|
|
@@ -161,81 +134,20 @@ var styles = import_el_core.css`
|
|
|
161
134
|
color: var(--color-on-surface-variant);
|
|
162
135
|
}
|
|
163
136
|
|
|
164
|
-
/*
|
|
165
|
-
.cascader-arrow
|
|
166
|
-
display: inline-flex;
|
|
167
|
-
align-items: center;
|
|
168
|
-
justify-content: center;
|
|
169
|
-
width: 20px;
|
|
170
|
-
height: 20px;
|
|
171
|
-
flex-shrink: 0;
|
|
172
|
-
color: var(--color-on-surface-variant);
|
|
173
|
-
transition: transform 150ms ease;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.cascader-arrow svg {
|
|
177
|
-
width: 16px;
|
|
178
|
-
height: 16px;
|
|
179
|
-
display: block;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.cascader.open .cascader-arrow {
|
|
183
|
-
transform: rotate(180deg);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
.cascader-clear {
|
|
187
|
-
display: inline-flex;
|
|
188
|
-
align-items: center;
|
|
189
|
-
justify-content: center;
|
|
190
|
-
width: 20px;
|
|
191
|
-
height: 20px;
|
|
192
|
-
padding: 0;
|
|
193
|
-
color: var(--color-on-surface-variant);
|
|
194
|
-
background-color: transparent;
|
|
195
|
-
border-radius: 50%;
|
|
196
|
-
cursor: pointer;
|
|
197
|
-
flex-shrink: 0;
|
|
198
|
-
transition: background-color 150ms ease;
|
|
199
|
-
}
|
|
200
|
-
|
|
137
|
+
/* Override: arrow/clear SVG sizing */
|
|
138
|
+
.cascader-arrow svg,
|
|
201
139
|
.cascader-clear svg {
|
|
202
|
-
width: 14px;
|
|
203
|
-
height: 14px;
|
|
204
140
|
display: block;
|
|
205
141
|
}
|
|
206
142
|
|
|
207
|
-
|
|
208
|
-
background-color: var(--color-surface-container-high);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/* Dropdown - uses Popover API (top-layer requires position: fixed) */
|
|
143
|
+
/* Override: dropdown uses Popover API (top-layer requires position: fixed) */
|
|
212
144
|
.cascader-dropdown {
|
|
213
145
|
position: fixed;
|
|
214
|
-
margin: 0;
|
|
215
|
-
padding: 0;
|
|
216
|
-
border: 1px solid var(--color-outline-variant);
|
|
217
|
-
border-radius: var(--radius-md, 0.5rem);
|
|
218
|
-
background-color: var(--color-surface);
|
|
219
|
-
box-shadow: var(--shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
|
|
220
|
-
overflow: hidden;
|
|
221
|
-
display: none;
|
|
222
146
|
flex-direction: column;
|
|
223
147
|
z-index: 1000;
|
|
224
148
|
}
|
|
225
149
|
|
|
226
|
-
|
|
227
|
-
display: flex;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/* Search */
|
|
231
|
-
.cascader-search {
|
|
232
|
-
display: flex;
|
|
233
|
-
align-items: center;
|
|
234
|
-
gap: 0.5rem;
|
|
235
|
-
padding: 0.5rem;
|
|
236
|
-
border-bottom: 1px solid var(--color-outline-variant);
|
|
237
|
-
}
|
|
238
|
-
|
|
150
|
+
/* Search icon (not in core) */
|
|
239
151
|
.cascader-search-icon {
|
|
240
152
|
display: inline-flex;
|
|
241
153
|
align-items: center;
|
|
@@ -252,86 +164,16 @@ var styles = import_el_core.css`
|
|
|
252
164
|
display: block;
|
|
253
165
|
}
|
|
254
166
|
|
|
255
|
-
|
|
256
|
-
flex: 1;
|
|
257
|
-
padding: 0.375rem 0.5rem;
|
|
258
|
-
font-size: var(--font-size-sm, 0.875rem);
|
|
259
|
-
color: var(--color-on-surface);
|
|
260
|
-
background-color: var(--color-surface-container);
|
|
261
|
-
border: none;
|
|
262
|
-
border-radius: var(--radius-sm, 0.25rem);
|
|
263
|
-
outline: none;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
.cascader-search-input:focus {
|
|
267
|
-
background-color: var(--color-surface-container-high);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
.cascader-search-input::placeholder {
|
|
271
|
-
color: var(--color-on-surface-variant);
|
|
272
|
-
opacity: 0.7;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/* Panels Container */
|
|
167
|
+
/* Override: panel max-height */
|
|
276
168
|
.cascader-panels {
|
|
277
|
-
display: flex;
|
|
278
169
|
max-height: 18rem;
|
|
279
170
|
}
|
|
280
171
|
|
|
281
|
-
/* Panel */
|
|
282
172
|
.cascader-panel {
|
|
283
|
-
display: flex;
|
|
284
|
-
flex-direction: column;
|
|
285
|
-
min-width: 10rem;
|
|
286
|
-
max-width: 14rem;
|
|
287
173
|
max-height: 18rem;
|
|
288
|
-
overflow-y: auto;
|
|
289
|
-
border-right: 1px solid var(--color-outline-variant);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
.cascader-panel:last-child {
|
|
293
|
-
border-right: none;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
.cascader-panel-options {
|
|
297
|
-
padding: 0.25rem;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/* Option */
|
|
301
|
-
.cascader-option {
|
|
302
|
-
display: flex;
|
|
303
|
-
align-items: center;
|
|
304
|
-
gap: 0.5rem;
|
|
305
|
-
width: 100%;
|
|
306
|
-
padding: 0.5rem 0.75rem;
|
|
307
|
-
font-size: var(--font-size-sm, 0.875rem);
|
|
308
|
-
color: var(--color-on-surface);
|
|
309
|
-
background-color: transparent;
|
|
310
|
-
border: none;
|
|
311
|
-
border-radius: var(--radius-sm, 0.25rem);
|
|
312
|
-
cursor: pointer;
|
|
313
|
-
text-align: left;
|
|
314
|
-
transition: background-color 150ms ease;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
.cascader-option:hover:not(.disabled) {
|
|
318
|
-
background-color: var(--color-surface-container);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
.cascader-option.active {
|
|
322
|
-
background-color: var(--color-surface-container-high);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
.cascader-option.selected {
|
|
326
|
-
background-color: var(--color-primary-container, #e8def8);
|
|
327
|
-
color: var(--color-on-primary-container, #1d1b20);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
.cascader-option.disabled {
|
|
331
|
-
opacity: 0.5;
|
|
332
|
-
cursor: not-allowed;
|
|
333
174
|
}
|
|
334
175
|
|
|
176
|
+
/* Checkbox (not in core) */
|
|
335
177
|
.cascader-option-checkbox {
|
|
336
178
|
display: flex;
|
|
337
179
|
align-items: center;
|
|
@@ -344,27 +186,13 @@ var styles = import_el_core.css`
|
|
|
344
186
|
flex-shrink: 0;
|
|
345
187
|
}
|
|
346
188
|
|
|
347
|
-
.cascader-option
|
|
189
|
+
.cascader-option-selected .cascader-option-checkbox {
|
|
348
190
|
background-color: var(--color-primary);
|
|
349
191
|
border-color: var(--color-primary);
|
|
350
192
|
color: var(--color-on-primary, white);
|
|
351
193
|
}
|
|
352
194
|
|
|
353
|
-
|
|
354
|
-
flex: 1;
|
|
355
|
-
overflow: hidden;
|
|
356
|
-
text-overflow: ellipsis;
|
|
357
|
-
white-space: nowrap;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
.cascader-option-arrow {
|
|
361
|
-
display: flex;
|
|
362
|
-
align-items: center;
|
|
363
|
-
justify-content: center;
|
|
364
|
-
color: var(--color-on-surface-variant);
|
|
365
|
-
flex-shrink: 0;
|
|
366
|
-
}
|
|
367
|
-
|
|
195
|
+
/* Loading spinner (not in core) */
|
|
368
196
|
.cascader-option-loading {
|
|
369
197
|
display: flex;
|
|
370
198
|
align-items: center;
|
|
@@ -381,7 +209,7 @@ var styles = import_el_core.css`
|
|
|
381
209
|
to { transform: rotate(360deg); }
|
|
382
210
|
}
|
|
383
211
|
|
|
384
|
-
/* Search
|
|
212
|
+
/* Search results (not in core) */
|
|
385
213
|
.cascader-search-results {
|
|
386
214
|
padding: 0.25rem;
|
|
387
215
|
max-height: 18rem;
|
|
@@ -425,15 +253,7 @@ var styles = import_el_core.css`
|
|
|
425
253
|
margin: 0 0.25rem;
|
|
426
254
|
}
|
|
427
255
|
|
|
428
|
-
/*
|
|
429
|
-
.cascader-empty {
|
|
430
|
-
padding: 1.5rem;
|
|
431
|
-
text-align: center;
|
|
432
|
-
color: var(--color-on-surface-variant);
|
|
433
|
-
font-size: var(--font-size-sm, 0.875rem);
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
/* Size Variants */
|
|
256
|
+
/* Size variants via :host (override core's container-class approach) */
|
|
437
257
|
:host([size="sm"]) .cascader-trigger {
|
|
438
258
|
min-height: 2.25rem;
|
|
439
259
|
padding: 0.375rem 0.5rem;
|
|
@@ -448,7 +268,7 @@ var styles = import_el_core.css`
|
|
|
448
268
|
border-radius: var(--radius-lg, 0.625rem);
|
|
449
269
|
}
|
|
450
270
|
|
|
451
|
-
/* Validation
|
|
271
|
+
/* Validation states via :host (override core's container-class approach) */
|
|
452
272
|
:host([validation-state="invalid"]) .cascader-trigger {
|
|
453
273
|
border-color: var(--color-error);
|
|
454
274
|
}
|
|
@@ -462,7 +282,7 @@ var styles = import_el_core.css`
|
|
|
462
282
|
border-color: var(--color-success);
|
|
463
283
|
}
|
|
464
284
|
|
|
465
|
-
/* Disabled
|
|
285
|
+
/* Disabled state via :host */
|
|
466
286
|
:host([disabled]) {
|
|
467
287
|
pointer-events: none;
|
|
468
288
|
}
|
|
@@ -474,7 +294,7 @@ var styles = import_el_core.css`
|
|
|
474
294
|
}
|
|
475
295
|
`;
|
|
476
296
|
|
|
477
|
-
class ElDmCascader extends
|
|
297
|
+
class ElDmCascader extends import_el_base.BaseElement {
|
|
478
298
|
static properties = {
|
|
479
299
|
value: { type: String, reflect: true, default: "" },
|
|
480
300
|
placeholder: { type: String, default: "Select..." },
|
|
@@ -842,7 +662,7 @@ class ElDmCascader extends import_el_core.BaseElement {
|
|
|
842
662
|
}
|
|
843
663
|
render() {
|
|
844
664
|
return `
|
|
845
|
-
<div class="cascader ${this._isOpen ? "open" : ""}">
|
|
665
|
+
<div class="cascader ${this._isOpen ? "cascader-open" : ""}">
|
|
846
666
|
${this._renderTrigger()}
|
|
847
667
|
${this._renderDropdown()}
|
|
848
668
|
</div>
|
|
@@ -930,9 +750,9 @@ class ElDmCascader extends import_el_core.BaseElement {
|
|
|
930
750
|
const hasChildren = !this._isLeaf(option);
|
|
931
751
|
const classes = [
|
|
932
752
|
"cascader-option",
|
|
933
|
-
isActive ? "active" : "",
|
|
934
|
-
isSelected ? "selected" : "",
|
|
935
|
-
option.disabled ? "disabled" : ""
|
|
753
|
+
isActive ? "cascader-option-active" : "",
|
|
754
|
+
isSelected ? "cascader-option-selected" : "",
|
|
755
|
+
option.disabled ? "cascader-option-disabled" : ""
|
|
936
756
|
].filter(Boolean).join(" ");
|
|
937
757
|
return `
|
|
938
758
|
<button
|
|
@@ -952,7 +772,7 @@ class ElDmCascader extends import_el_core.BaseElement {
|
|
|
952
772
|
}).join("");
|
|
953
773
|
return `
|
|
954
774
|
<div class="cascader-panel">
|
|
955
|
-
<div class="cascader-
|
|
775
|
+
<div class="cascader-options">${optionsHtml}</div>
|
|
956
776
|
</div>
|
|
957
777
|
`;
|
|
958
778
|
}
|
|
@@ -1085,5 +905,5 @@ function register() {
|
|
|
1085
905
|
}
|
|
1086
906
|
}
|
|
1087
907
|
|
|
1088
|
-
//# debugId=
|
|
908
|
+
//# debugId=861FBB6E5253C9AB64756E2164756E21
|
|
1089
909
|
//# sourceMappingURL=index.js.map
|