@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.
@@ -27,73 +27,46 @@ var __export = (target, all) => {
27
27
  };
28
28
 
29
29
  // src/el-dm-cascader.ts
30
- var import_el_core = require("@duskmoon-dev/el-core");
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 styles = import_el_core.css`
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
- position: relative;
45
- width: 100%;
49
+ display: block;
46
50
  }
47
51
 
48
- /* Trigger Button */
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
- /* Value Display */
59
+ /* Override: value display as block text */
83
60
  .cascader-value {
84
- flex: 1;
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 Container (for multiple mode) */
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
- /* Icons */
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
- .cascader-clear:hover {
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
- .cascader-dropdown:popover-open {
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
- .cascader-search-input {
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.selected .cascader-option-checkbox {
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
- .cascader-option-label {
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 Results */
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
- /* Empty State */
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 States */
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 State */
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 import_el_core.BaseElement {
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-panel-options">${optionsHtml}</div>
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=B15F0C00FB473DF564756E2164756E21
903
+ //# debugId=4C6CC3A536748EA964756E2164756E21
1084
904
  //# sourceMappingURL=register.js.map