@eaera-com/eaera-widgets-v2 0.1.63 → 0.1.64

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.
Files changed (97) hide show
  1. package/dist/design-system/components/_alert.scss +150 -0
  2. package/dist/design-system/components/_auto-complete.scss +165 -0
  3. package/dist/design-system/components/_avatar-group.scss +25 -0
  4. package/dist/design-system/components/_avatar.scss +40 -0
  5. package/dist/design-system/components/_badge.scss +80 -0
  6. package/dist/design-system/components/_breadcrumb.scss +91 -0
  7. package/dist/design-system/components/_button.scss +378 -0
  8. package/dist/design-system/components/_card.scss +27 -0
  9. package/dist/design-system/components/_carousel.scss +104 -0
  10. package/dist/design-system/components/_cascader.scss +705 -0
  11. package/dist/design-system/components/_checkbox-list.scss +18 -0
  12. package/dist/design-system/components/_checkbox.scss +117 -0
  13. package/dist/design-system/components/_collapse.scss +84 -0
  14. package/dist/design-system/components/_color-picker.scss +195 -0
  15. package/dist/design-system/components/_country-flag.scss +56 -0
  16. package/dist/design-system/components/_currency-icon.scss +19 -0
  17. package/dist/design-system/components/_date-picker.scss +748 -0
  18. package/dist/design-system/components/_dialog.scss +101 -0
  19. package/dist/design-system/components/_divider.scss +7 -0
  20. package/dist/design-system/components/_drawer.scss +41 -0
  21. package/dist/design-system/components/_dropdown.scss +69 -0
  22. package/dist/design-system/components/_empty.scss +101 -0
  23. package/dist/design-system/components/_form.scss +151 -0
  24. package/dist/design-system/components/_growth-balance-profit-widget.scss +95 -0
  25. package/dist/design-system/components/_input-code.scss +116 -0
  26. package/dist/design-system/components/_input-number.scss +233 -0
  27. package/dist/design-system/components/_input-tag.scss +212 -0
  28. package/dist/design-system/components/_input.scss +239 -0
  29. package/dist/design-system/components/_link.scss +64 -0
  30. package/dist/design-system/components/_loading.scss +89 -0
  31. package/dist/design-system/components/_menu.scss +578 -0
  32. package/dist/design-system/components/_message-box.scss +78 -0
  33. package/dist/design-system/components/_message.scss +187 -0
  34. package/dist/design-system/components/_monthly-gain-widget.scss +114 -0
  35. package/dist/design-system/components/_pagination.scss +356 -0
  36. package/dist/design-system/components/_pl-calendar-widget.scss +171 -0
  37. package/dist/design-system/components/_popconfirm.scss +57 -0
  38. package/dist/design-system/components/_popper.scss +267 -0
  39. package/dist/design-system/components/_progress.scss +153 -0
  40. package/dist/design-system/components/_radio.scss +68 -0
  41. package/dist/design-system/components/_segmented.scss +215 -0
  42. package/dist/design-system/components/_select-country.scss +182 -0
  43. package/dist/design-system/components/_select.scss +235 -0
  44. package/dist/design-system/components/_skeleton.scss +146 -0
  45. package/dist/design-system/components/_slider.scss +142 -0
  46. package/dist/design-system/components/_spinner.scss +73 -0
  47. package/dist/design-system/components/_steps.scss +292 -0
  48. package/dist/design-system/components/_switch.scss +89 -0
  49. package/dist/design-system/components/_switcher.scss +110 -0
  50. package/dist/design-system/components/_table.scss +580 -0
  51. package/dist/design-system/components/_tabs.scss +260 -0
  52. package/dist/design-system/components/_tag.scss +208 -0
  53. package/dist/design-system/components/_time-picker.scss +255 -0
  54. package/dist/design-system/components/_time-select.scss +167 -0
  55. package/dist/design-system/components/_timeline.scss +99 -0
  56. package/dist/design-system/components/_tooltip.scss +19 -0
  57. package/dist/design-system/components/_topbar-menu.scss +67 -0
  58. package/dist/design-system/components/_trade-volume-widget.scss +114 -0
  59. package/dist/design-system/components/_transfer.scss +241 -0
  60. package/dist/design-system/components/_tree-select.scss +198 -0
  61. package/dist/design-system/components/_tree.scss +108 -0
  62. package/dist/design-system/components/_upload.scss +226 -0
  63. package/dist/design-system/themes/aurora/bridges/_element-plus-bridge.scss +58 -0
  64. package/dist/design-system/themes/aurora/elevation/_elevation-tokens.scss +67 -0
  65. package/dist/design-system/themes/aurora/elevation/_elevation-utils.scss +94 -0
  66. package/dist/design-system/themes/aurora/index.scss +133 -0
  67. package/dist/design-system/themes/aurora/layers/_layer1-palettes.scss +289 -0
  68. package/dist/design-system/themes/aurora/layers/_layer2-alias.scss +250 -0
  69. package/dist/design-system/themes/aurora/layers/_layer3-tokens.scss +242 -0
  70. package/dist/design-system/themes/aurora/themes/_dark-mode.scss +177 -0
  71. package/dist/design-system/themes/aurora/themes/projects/base.scss +11 -0
  72. package/dist/design-system/themes/aurora/tokens/_border-radius.scss +28 -0
  73. package/dist/design-system/themes/aurora/tokens/_control-height.scss +18 -0
  74. package/dist/design-system/themes/aurora/tokens/_screen-size.scss +10 -0
  75. package/dist/design-system/themes/aurora/tokens/_spacing.scss +29 -0
  76. package/dist/design-system/themes/aurora/typography/_typography-primitives.scss +11 -0
  77. package/dist/design-system/themes/aurora/typography/_typography-semantic.scss +5 -0
  78. package/dist/design-system/themes/aurora/typography/_typography-tokens.scss +185 -0
  79. package/dist/design-system/themes/aurora/typography/_typography-utils.scss +375 -0
  80. package/dist/design-system/themes/core/bridges/_element-plus-bridge.scss +82 -0
  81. package/dist/design-system/themes/core/elevation/_elevation-tokens.scss +67 -0
  82. package/dist/design-system/themes/core/elevation/_elevation-utils.scss +94 -0
  83. package/dist/design-system/themes/core/index.scss +130 -0
  84. package/dist/design-system/themes/core/layers/_layer1-palettes.scss +289 -0
  85. package/dist/design-system/themes/core/layers/_layer2-alias.scss +242 -0
  86. package/dist/design-system/themes/core/layers/_layer3-tokens.scss +220 -0
  87. package/dist/design-system/themes/core/themes/_dark-mode.scss +165 -0
  88. package/dist/design-system/themes/core/themes/projects/base.scss +11 -0
  89. package/dist/design-system/themes/core/tokens/_border-radius.scss +28 -0
  90. package/dist/design-system/themes/core/tokens/_control-height.scss +18 -0
  91. package/dist/design-system/themes/core/tokens/_screen-size.scss +10 -0
  92. package/dist/design-system/themes/core/tokens/_spacing.scss +29 -0
  93. package/dist/design-system/themes/core/typography/_typography-primitives.scss +11 -0
  94. package/dist/design-system/themes/core/typography/_typography-semantic.scss +5 -0
  95. package/dist/design-system/themes/core/typography/_typography-tokens.scss +185 -0
  96. package/dist/design-system/themes/core/typography/_typography-utils.scss +375 -0
  97. package/package.json +4 -3
@@ -0,0 +1,705 @@
1
+ @use '../themes/aurora/typography/typography-utils' as typo;
2
+ @use '../themes/aurora/elevation/elevation-utils' as elevation;
3
+
4
+ // ─────────────────────────────────────────────────────────────────────────
5
+ // CASCADER INPUT (wrapper around el-input)
6
+ // ─────────────────────────────────────────────────────────────────────────
7
+
8
+ @mixin cascader-size($height, $padding-x, $gap, $radius) {
9
+ .el-input {
10
+ height: auto;
11
+
12
+ .el-input__wrapper {
13
+ height: $height !important;
14
+ min-height: $height !important;
15
+ padding: 0 $padding-x;
16
+ border-radius: $radius;
17
+ display: flex;
18
+ align-items: center;
19
+ overflow: hidden;
20
+ }
21
+ }
22
+ }
23
+
24
+ @mixin cascader-tag-base {
25
+ @include typo.label-md;
26
+ display: inline-flex;
27
+ justify-content: center;
28
+ align-items: center;
29
+ gap: var(--er-shape-spacing-50);
30
+ padding: 0 var(--er-shape-spacing-100);
31
+ border: none;
32
+ color: var(--er-text-secondary);
33
+
34
+ .el-tag__close {
35
+ color: var(--er-icon-secondary);
36
+
37
+ &:hover {
38
+ background-color: transparent;
39
+ }
40
+ }
41
+ }
42
+
43
+ .custom-cascader.el-cascader {
44
+ // Remove El-Plus default fixed width
45
+ width: auto;
46
+ user-select: none;
47
+
48
+ // ─────────────────────────────────────────────────────────────────────
49
+ // INPUT WRAPPER — Base styles (no default size)
50
+ // ─────────────────────────────────────────────────────────────────────
51
+
52
+ .el-input__wrapper {
53
+ border: 1px solid var(--er-border-default);
54
+ background-color: var(--er-surface-container);
55
+ box-shadow: none !important;
56
+
57
+ // Hover (non-disabled, non-focused)
58
+ &:hover {
59
+ border-color: var(--er-action-primary-hover);
60
+ }
61
+
62
+ // Focus
63
+ &.is-focus,
64
+ &:focus-within {
65
+ border-color: var(--er-action-primary-default);
66
+ }
67
+
68
+ // Disabled — Figma: opacity-0.5, border stays default, bg stays
69
+ &.is-disabled {
70
+ opacity: 0.5;
71
+ cursor: not-allowed;
72
+ border-color: var(--er-border-default) !important;
73
+ background-color: var(--er-surface-container) !important;
74
+ }
75
+ }
76
+
77
+ // Override Element Plus disabled style (class on .el-input, not .el-input__wrapper)
78
+ .el-input.is-disabled .el-input__wrapper {
79
+ opacity: 0.5;
80
+ cursor: not-allowed;
81
+ border-color: var(--er-border-default) !important;
82
+ background-color: var(--er-surface-container) !important;
83
+ box-shadow: none !important;
84
+ }
85
+
86
+ // Input text
87
+ .el-input__inner {
88
+ color: var(--er-text-primary);
89
+ font-variant-numeric: lining-nums tabular-nums;
90
+ text-overflow: ellipsis;
91
+ overflow: hidden;
92
+
93
+ &::placeholder {
94
+ color: var(--er-text-muted);
95
+ font-variant-numeric: lining-nums tabular-nums;
96
+ text-overflow: ellipsis;
97
+ overflow: hidden;
98
+ }
99
+ }
100
+
101
+ // Disabled text colors — keep same as default, only wrapper opacity changes
102
+ .el-input.is-disabled .el-input__inner {
103
+ color: var(--er-text-primary);
104
+
105
+ &::placeholder {
106
+ color: var(--er-text-muted);
107
+ }
108
+ }
109
+
110
+ // Icons
111
+ .el-input__suffix,
112
+ .el-input__prefix {
113
+ display: flex;
114
+ align-items: center;
115
+
116
+ .el-icon {
117
+ color: var(--er-icon-secondary);
118
+ }
119
+ }
120
+
121
+ // ─────────────────────────────────────────────────────────────────────
122
+ // SM SIZE — Figma: h-24px, px-4px, gap-4px, corner-xs, body-sm
123
+ // ─────────────────────────────────────────────────────────────────────
124
+
125
+ &.sm {
126
+ @include cascader-size(
127
+ var(--er-control-height-sm),
128
+ var(--er-shape-spacing-50),
129
+ var(--er-shape-spacing-50),
130
+ var(--er-shape-corner-50)
131
+ );
132
+
133
+ .el-input__inner,
134
+ .el-input__inner::placeholder {
135
+ @include typo.body-sm;
136
+ }
137
+
138
+ .el-input__suffix .el-icon,
139
+ .el-input__prefix .el-icon {
140
+ width: var(--er-control-height-xxs) !important;
141
+ height: var(--er-control-height-xxs) !important;
142
+
143
+ &.icon-circle-close {
144
+ width: 12px !important;
145
+ height: 12px !important;
146
+ }
147
+
148
+ svg {
149
+ width: 100%;
150
+ height: 100%;
151
+ }
152
+ }
153
+ }
154
+
155
+ // ─────────────────────────────────────────────────────────────────────
156
+ // MD SIZE — Figma: h-32px, px-8px, gap-8px, corner-sm, body-md
157
+ // ─────────────────────────────────────────────────────────────────────
158
+
159
+ &.md {
160
+ @include cascader-size(
161
+ var(--er-control-height-md),
162
+ var(--er-shape-spacing-100),
163
+ var(--er-shape-spacing-100),
164
+ var(--er-shape-corner-100)
165
+ );
166
+
167
+ .el-input__inner,
168
+ .el-input__inner::placeholder {
169
+ @include typo.body-md;
170
+ }
171
+
172
+ .el-input__suffix .el-icon,
173
+ .el-input__prefix .el-icon {
174
+ width: var(--er-control-height-xs);
175
+ height: var(--er-control-height-xs);
176
+
177
+ &.icon-circle-close {
178
+ width: var(--er-control-height-xxs) !important;
179
+ height: var(--er-control-height-xxs) !important;
180
+ }
181
+
182
+ svg {
183
+ width: 100%;
184
+ height: 100%;
185
+ }
186
+ }
187
+ }
188
+
189
+ // ─────────────────────────────────────────────────────────────────────
190
+ // LG SIZE — Figma: h-40px, px-12px, gap-8px, corner-sm, body-md
191
+ // ─────────────────────────────────────────────────────────────────────
192
+
193
+ &.lg {
194
+ @include cascader-size(
195
+ var(--er-control-height-lg),
196
+ var(--er-shape-spacing-150),
197
+ var(--er-shape-spacing-100),
198
+ var(--er-shape-corner-100)
199
+ );
200
+
201
+ .el-input__inner,
202
+ .el-input__inner::placeholder {
203
+ @include typo.body-md;
204
+ }
205
+
206
+ .el-input__suffix .el-icon,
207
+ .el-input__prefix .el-icon {
208
+ width: var(--er-control-height-xs);
209
+ height: var(--er-control-height-xs);
210
+
211
+ &.icon-circle-close {
212
+ width: var(--er-control-height-xxs) !important;
213
+ height: var(--er-control-height-xxs) !important;
214
+ }
215
+
216
+ svg {
217
+ width: 100%;
218
+ height: 100%;
219
+ }
220
+ }
221
+ }
222
+
223
+ // ─────────────────────────────────────────────────────────────────────
224
+ // ERROR STATE
225
+ // ─────────────────────────────────────────────────────────────────────
226
+
227
+ &.is-error .el-input__wrapper,
228
+ &.error .el-input__wrapper {
229
+ border-color: var(--er-border-danger);
230
+
231
+ &:hover {
232
+ border-color: var(--er-border-danger);
233
+ }
234
+
235
+ &.is-focus,
236
+ &:focus-within {
237
+ border-color: var(--er-action-primary-default);
238
+ }
239
+ }
240
+
241
+ // ─────────────────────────────────────────────────────────────────────
242
+ // TAGS (for multiple selection)
243
+ // ─────────────────────────────────────────────────────────────────────
244
+
245
+ .el-tag {
246
+ @include cascader-tag-base;
247
+ background-color: var(--er-surface-muted);
248
+ border-radius: var(--er-shape-corner-50);
249
+ }
250
+
251
+ &.sm {
252
+ .el-tag,
253
+ .el-cascader__collapse-tag .el-tag {
254
+ height: var(--er-control-height-xs);
255
+ width: fit-content;
256
+ }
257
+ }
258
+
259
+ &.md,
260
+ &.lg {
261
+ .el-tag,
262
+ .el-cascader__collapse-tag .el-tag {
263
+ height: var(--er-control-height-sm);
264
+ border-radius: var(--er-shape-corner-50);
265
+ }
266
+ }
267
+
268
+ // Disabled state
269
+ &.is-disabled {
270
+ .el-tag,
271
+ .el-cascader__collapse-tag .el-tag {
272
+ opacity: 0.5;
273
+ }
274
+ }
275
+
276
+ .el-tag--light {
277
+ border-color: transparent;
278
+ background-color: var(--er-surface-muted);
279
+ color: var(--er-text-secondary);
280
+ }
281
+
282
+ .el-tag--plain {
283
+ background-color: transparent;
284
+ border-color: var(--er-border-default) !important;
285
+ border-style: solid;
286
+ border-width: 1px;
287
+ color: var(--er-text-secondary);
288
+ }
289
+
290
+ .el-tag--light,
291
+ .el-tag--plain {
292
+ .el-tag__close {
293
+ color: inherit;
294
+ background-color: transparent;
295
+
296
+ &:hover {
297
+ background-color: transparent;
298
+ color: inherit;
299
+ }
300
+ }
301
+ }
302
+ }
303
+
304
+ // ─────────────────────────────────────────────────────────────────────────
305
+ // CASCADER PANEL (teleported via popper-class="custom-cascader__popper")
306
+ // Figma (40538:34675): Multi-level menus
307
+ // ─────────────────────────────────────────────────────────────────────────
308
+ .custom-cascader__popper.el-popper {
309
+ padding: 0 !important;
310
+ border: none !important;
311
+ background: transparent !important;
312
+ border-radius: var(--er-shape-corner-150);
313
+ overflow: hidden;
314
+
315
+ // Arrow
316
+ .el-popper__arrow::before {
317
+ border-color: var(--er-border-subtle);
318
+ background: var(--er-surface-elevated);
319
+ }
320
+
321
+ .el-cascader__collapse-tag .el-tag {
322
+ @include cascader-tag-base;
323
+ background-color: var(--er-surface-muted);
324
+ border-radius: var(--er-shape-corner-50);
325
+
326
+ &.el-tag--plain {
327
+ background-color: transparent;
328
+ border-color: var(--er-border-default) !important;
329
+ border-style: solid;
330
+ border-width: 1px;
331
+ color: var(--er-text-secondary);
332
+ }
333
+ }
334
+
335
+ .el-cascader-node {
336
+ // Gap between checkbox and text
337
+ gap: var(--er-shape-spacing-50);
338
+
339
+ .el-cascader-node__label {
340
+ padding: 0 !important;
341
+ }
342
+
343
+ // ─────────────────────────────────────────────────────────────
344
+ // CHECKBOX
345
+ // ─────────────────────────────────────────────────────────────
346
+
347
+ .el-checkbox {
348
+ margin-right: 0;
349
+ height: 16px;
350
+ display: inline-flex;
351
+ align-items: center;
352
+ justify-content: center;
353
+ line-height: 16px;
354
+ }
355
+
356
+ .el-checkbox__input {
357
+ width: 16px;
358
+ height: 16px;
359
+ display: inline-flex;
360
+ align-items: center;
361
+ justify-content: center;
362
+ line-height: 16px;
363
+ }
364
+
365
+ .el-checkbox__inner {
366
+ box-sizing: border-box;
367
+ width: 16px;
368
+ height: 16px;
369
+ border-radius: var(--er-shape-corner-50);
370
+ border: 1.5px solid var(--er-border-strong);
371
+ }
372
+
373
+ // Hover checkbox: keep same border, no weird default blue/green border
374
+ .el-checkbox:hover .el-checkbox__inner,
375
+ .el-checkbox__input:not(.is-checked):not(.is-indeterminate):hover .el-checkbox__inner {
376
+ border-radius: var(--er-shape-corner-50);
377
+ border: 1.5px solid var(--er-border-strong);
378
+ }
379
+
380
+ // Checked / indeterminate checkbox
381
+ .el-checkbox__input.is-checked .el-checkbox__inner,
382
+ .el-checkbox__input.is-indeterminate .el-checkbox__inner {
383
+ background-color: var(--er-action-primary-default);
384
+ border-color: var(--er-action-primary-default);
385
+ }
386
+
387
+ // Checked tick alignment
388
+ .el-checkbox__input.is-checked .el-checkbox__inner::after {
389
+ box-sizing: content-box;
390
+ width: 4px;
391
+ height: 8px;
392
+ left: 4.25px;
393
+ top: 0.25px;
394
+ border: 2.5px solid var(--er-text-on-action);
395
+ border-left: 0;
396
+ border-top: 0;
397
+
398
+ transform: rotate(45deg) scaleY(1);
399
+ transform-origin: center;
400
+ }
401
+
402
+ // Indeterminate minus alignment
403
+ .el-checkbox__input.is-indeterminate .el-checkbox__inner::before {
404
+ width: 8px;
405
+ height: 2px;
406
+ left: 50%;
407
+ top: 50%;
408
+ right: auto;
409
+ bottom: auto;
410
+ background-color: var(--er-text-on-action);
411
+ transform: translate(-50%, -50%);
412
+ }
413
+
414
+ // ─────────────────────────────────────────────────────────────
415
+ // POSTFIX ARROW ICON
416
+ // ─────────────────────────────────────────────────────────────
417
+
418
+ // Default: secondary
419
+ .el-cascader-node__postfix {
420
+ position: static !important;
421
+ width: 16px;
422
+ height: 16px;
423
+ font-size: 16px;
424
+ color: var(--er-icon-secondary);
425
+ display: inline-flex;
426
+ align-items: center;
427
+ justify-content: center;
428
+ flex-shrink: 0;
429
+ margin-left: auto;
430
+ }
431
+
432
+ .el-cascader-node__postfix svg {
433
+ width: 16px;
434
+ height: 16px;
435
+ }
436
+
437
+ .el-cascader-node__postfix path {
438
+ fill: currentColor !important;
439
+ }
440
+
441
+ // Hover: icon does NOT change color
442
+ &:hover {
443
+ .el-cascader-node__postfix {
444
+ color: var(--er-icon-secondary) !important;
445
+ }
446
+ }
447
+
448
+ // Click/open path but not selected: still secondary
449
+ &.in-active-path,
450
+ &.is-active,
451
+ &.in-checked-path {
452
+ .el-cascader-node__postfix {
453
+ color: var(--er-icon-secondary) !important;
454
+ }
455
+ }
456
+
457
+ // Only checked / indeterminate: icon becomes brand
458
+ &:has(.el-checkbox__input.is-checked),
459
+ &:has(.el-checkbox__input.is-indeterminate) {
460
+ .el-cascader-node__postfix {
461
+ color: var(--er-icon-brand) !important;
462
+ }
463
+ }
464
+ }
465
+ }
466
+
467
+ .custom-cascader__popper.el-popper.el-cascader__dropdown {
468
+ background: transparent;
469
+ padding: 0;
470
+ border-radius: var(--er-shape-corner-150);
471
+ overflow: hidden;
472
+
473
+ // ─────────────────────────────────────────────────────────────────────
474
+ // CASCADER PANEL CONTAINER (outer wrapper only)
475
+ // ─────────────────────────────────────────────────────────────────────
476
+
477
+ .el-cascader-panel {
478
+ border-radius: var(--er-shape-corner-150);
479
+ border: 1px solid var(--er-border-subtle) !important;
480
+ background: var(--er-surface-elevated);
481
+ @include elevation.elevation-level-2;
482
+ overflow: hidden;
483
+ }
484
+
485
+ // ─────────────────────────────────────────────────────────────────────
486
+ // CASCADER MENU (each level panel)
487
+ // Figma: border-left border-subtle between panels, py-8px
488
+ // ─────────────────────────────────────────────────────────────────────
489
+
490
+ .el-cascader-menu {
491
+ background: var(--er-surface-elevated);
492
+ padding: var(--er-shape-spacing-100) 0;
493
+ border: none !important;
494
+ border-left: 1px solid var(--er-border-subtle) !important;
495
+ border-radius: 0;
496
+
497
+ &:first-child {
498
+ border-left: none !important;
499
+ }
500
+ }
501
+
502
+ // Wrap panels
503
+ .el-cascader-panel .el-cascader-menu__wrap {
504
+ height: 208px;
505
+ .el-cascader-menu__list {
506
+ padding: 0;
507
+ }
508
+ }
509
+
510
+ // ─────────────────────────────────────────────────────────────────────
511
+ // MENU ITEMS — Figma: h-32px, px-8px, corner-sm, body-md
512
+ // ─────────────────────────────────────────────────────────────────────
513
+
514
+ .el-cascader-node {
515
+ display: flex;
516
+ height: var(--er-control-height-md);
517
+ padding: 0 var(--er-shape-spacing-100);
518
+ border-radius: var(--er-shape-corner-100);
519
+ margin: 0 var(--er-shape-spacing-100);
520
+ align-items: center;
521
+ gap: var(--er-shape-spacing-50);
522
+ color: var(--er-text-primary);
523
+ user-select: none;
524
+
525
+ // Label text
526
+ .el-cascader-node__label {
527
+ @include typo.body-md;
528
+ color: var(--er-text-primary);
529
+ padding: 0;
530
+ flex: 1;
531
+ }
532
+
533
+ // Expand icon (chevron-right) — Figma: 16px
534
+ .el-cascader-node__postfix {
535
+ position: static !important;
536
+ .el-icon {
537
+ width: 16px;
538
+ height: 16px;
539
+ color: var(--er-icon-secondary);
540
+ }
541
+ }
542
+
543
+ // Single selection tick icon (prefix that is NOT a checkbox)
544
+ // Element Plus puts it in __prefix but we move it to the end via flex order
545
+ // Single selection tick icon
546
+ .el-cascader-node__prefix:not(.el-checkbox) {
547
+ display: none;
548
+ }
549
+
550
+ .el-cascader-node__prefix:not(.el-checkbox) svg {
551
+ width: 16px;
552
+ height: 16px;
553
+ }
554
+
555
+ .el-cascader-node__prefix:not(.el-checkbox) path {
556
+ fill: currentColor;
557
+ }
558
+
559
+ // Only show tick icon when selected
560
+ &:not(.is-active) .el-cascader-node__prefix:not(.el-checkbox) {
561
+ display: none;
562
+ }
563
+
564
+ // Checkbox (multiple mode)
565
+ // NOTE: .el-cascader-node__prefix IS .el-checkbox (same element in Element Plus DOM)
566
+ .el-cascader-node__prefix.el-checkbox {
567
+ margin-right: 0;
568
+
569
+ .el-checkbox__inner {
570
+ width: 16px;
571
+ height: 16px;
572
+ border-radius: var(--er-shape-corner-50);
573
+ border: 1.5px solid var(--er-border-strong);
574
+ }
575
+ }
576
+
577
+ // Checked / indeterminate — override Element Plus defaults
578
+ .el-checkbox__input.is-checked .el-checkbox__inner,
579
+ .el-checkbox__input.is-indeterminate .el-checkbox__inner {
580
+ background-color: var(--er-action-primary-default) !important;
581
+ border-color: var(--er-action-primary-default) !important;
582
+
583
+ &::after {
584
+ border-color: var(--er-text-on-action);
585
+ border-width: 2.5px;
586
+ }
587
+ }
588
+
589
+ // ── States ──────────────────────────────────────────────────────
590
+
591
+ // Hover — Figma: bg-action-neutral-subtle-hover
592
+ &:not(.is-disabled):hover {
593
+ background-color: var(--er-action-neutral-subtle-hover);
594
+ }
595
+
596
+ // Active/pressed
597
+ &:not(.is-disabled):active {
598
+ background-color: var(--er-action-neutral-subtle);
599
+ }
600
+
601
+ // Selected — Figma: text-brand only, no bg change
602
+ &.is-active {
603
+ background-color: transparent;
604
+
605
+ .el-cascader-node__label {
606
+ color: var(--er-action-primary-default) !important;
607
+ }
608
+
609
+ .el-cascader-node__postfix .el-icon {
610
+ color: var(--er-icon-brand) !important;
611
+ }
612
+ }
613
+
614
+ // Parent nodes in active path — NEVER show brand icon
615
+ // (overrides &.is-active when Element Plus adds both classes)
616
+ &.is-active.in-active-path {
617
+ .el-cascader-node__postfix .el-icon {
618
+ color: var(--er-icon-secondary) !important;
619
+ }
620
+ }
621
+
622
+ // Disabled — Figma: opacity-0.5
623
+ &.is-disabled {
624
+ opacity: 0.5;
625
+ cursor: not-allowed;
626
+
627
+ .el-cascader-node__label {
628
+ color: var(--er-text-primary) !important;
629
+ }
630
+ }
631
+
632
+ // In checked path (parent of selected item) — reset to default, NOT brand
633
+ &.in-active-path {
634
+ .el-cascader-node__label {
635
+ color: var(--er-text-primary);
636
+ }
637
+
638
+ .el-cascader-node__postfix .el-icon {
639
+ color: var(--er-icon-secondary) !important;
640
+ }
641
+ }
642
+
643
+ // Default / not selected — ensure icon is secondary
644
+ &:not(.is-active):not(.in-active-path) {
645
+ .el-cascader-node__postfix .el-icon {
646
+ color: var(--er-icon-secondary) !important;
647
+ }
648
+ }
649
+ }
650
+
651
+ // ─────────────────────────────────────────────────────────────────────
652
+ // EMPTY STATE
653
+ // ─────────────────────────────────────────────────────────────────────
654
+
655
+ .el-cascader-menu__empty-text {
656
+ @include typo.body-sm;
657
+ color: var(--er-text-muted);
658
+ padding: var(--er-shape-spacing-150);
659
+ }
660
+
661
+ // ─────────────────────────────────────────────────────────────────────
662
+ // SEARCH PANEL (when filterable)
663
+ // ─────────────────────────────────────────────────────────────────────
664
+
665
+ .el-cascader__search-input {
666
+ @include typo.body-md;
667
+ color: var(--er-text-primary);
668
+
669
+ &::placeholder {
670
+ color: var(--er-text-muted);
671
+ }
672
+ }
673
+
674
+ .el-cascader__suggestion-panel {
675
+ .el-cascader__suggestion-item {
676
+ @include typo.body-md;
677
+ height: var(--er-control-height-md);
678
+ padding: 0 var(--er-shape-spacing-100);
679
+ color: var(--er-text-primary);
680
+ align-items: flex-start;
681
+
682
+ &:hover {
683
+ background-color: var(--er-action-neutral-subtle-hover);
684
+ }
685
+
686
+ &.is-checked {
687
+ background-color: transparent;
688
+ color: var(--er-text-brand);
689
+ }
690
+ }
691
+ }
692
+ }
693
+
694
+ .custom-cascader__popper.el-tooltip.el-popper {
695
+ padding: 0 !important;
696
+ margin: 0 !important;
697
+ border: none !important;
698
+ background: transparent !important;
699
+ box-shadow: none !important;
700
+ overflow: visible !important;
701
+
702
+ .el-popper__arrow {
703
+ display: none !important;
704
+ }
705
+ }