@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 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 import_el_core = require("@duskmoon-dev/el-core");
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 styles = import_el_core.css`
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
- position: relative;
53
- width: 100%;
57
+ display: block;
54
58
  }
55
59
 
56
- /* Trigger Button */
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
- /* Value Display */
67
+ /* Override: value display as block text */
91
68
  .cascader-value {
92
- flex: 1;
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 Container (for multiple mode) */
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
- /* Icons */
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
- .cascader-clear:hover {
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
- .cascader-dropdown:popover-open {
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
- .cascader-search-input {
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.selected .cascader-option-checkbox {
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
- .cascader-option-label {
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 Results */
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
- /* Empty State */
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 States */
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 State */
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 import_el_core.BaseElement {
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-panel-options">${optionsHtml}</div>
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=563AC9BF97CC5E2A64756E2164756E21
908
+ //# debugId=861FBB6E5253C9AB64756E2164756E21
1089
909
  //# sourceMappingURL=index.js.map