aeico-components 0.1.2 → 0.1.4

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 (224) hide show
  1. package/dist/alert.cjs +6 -0
  2. package/dist/alert.cjs.map +1 -0
  3. package/dist/alert.js +6 -0
  4. package/dist/alert.js.map +1 -0
  5. package/dist/badge.cjs +6 -0
  6. package/dist/badge.cjs.map +1 -0
  7. package/dist/badge.js +6 -0
  8. package/dist/badge.js.map +1 -0
  9. package/dist/breadcrumb.cjs +7 -0
  10. package/dist/breadcrumb.cjs.map +1 -0
  11. package/dist/breadcrumb.js +7 -0
  12. package/dist/breadcrumb.js.map +1 -0
  13. package/dist/button-group.cjs +6 -0
  14. package/dist/button-group.cjs.map +1 -0
  15. package/dist/button-group.js +6 -0
  16. package/dist/button-group.js.map +1 -0
  17. package/dist/button.cjs +6 -0
  18. package/dist/button.cjs.map +1 -0
  19. package/dist/button.js +6 -0
  20. package/dist/button.js.map +1 -0
  21. package/dist/card.cjs +6 -0
  22. package/dist/card.cjs.map +1 -0
  23. package/dist/card.js +6 -0
  24. package/dist/card.js.map +1 -0
  25. package/dist/checkbox.cjs +6 -0
  26. package/dist/checkbox.cjs.map +1 -0
  27. package/dist/checkbox.js +6 -0
  28. package/dist/checkbox.js.map +1 -0
  29. package/dist/chunks/aeico-component.cjs +17 -0
  30. package/dist/chunks/aeico-component.cjs.map +1 -0
  31. package/dist/chunks/aeico-component.js +18 -0
  32. package/dist/chunks/aeico-component.js.map +1 -0
  33. package/dist/chunks/aeico-field.cjs +179 -0
  34. package/dist/chunks/aeico-field.cjs.map +1 -0
  35. package/dist/chunks/aeico-field.js +180 -0
  36. package/dist/chunks/aeico-field.js.map +1 -0
  37. package/dist/chunks/alert.cjs +170 -0
  38. package/dist/chunks/alert.cjs.map +1 -0
  39. package/dist/chunks/alert.js +171 -0
  40. package/dist/chunks/alert.js.map +1 -0
  41. package/dist/chunks/badge.cjs +85 -0
  42. package/dist/chunks/badge.cjs.map +1 -0
  43. package/dist/chunks/badge.js +86 -0
  44. package/dist/chunks/badge.js.map +1 -0
  45. package/dist/chunks/breadcrumb-item.cjs +261 -0
  46. package/dist/chunks/breadcrumb-item.cjs.map +1 -0
  47. package/dist/chunks/breadcrumb-item.js +262 -0
  48. package/dist/chunks/breadcrumb-item.js.map +1 -0
  49. package/dist/chunks/button-group.cjs +79 -0
  50. package/dist/chunks/button-group.cjs.map +1 -0
  51. package/dist/chunks/button-group.js +80 -0
  52. package/dist/chunks/button-group.js.map +1 -0
  53. package/dist/chunks/button.cjs +351 -0
  54. package/dist/chunks/button.cjs.map +1 -0
  55. package/dist/chunks/button.js +352 -0
  56. package/dist/chunks/button.js.map +1 -0
  57. package/dist/chunks/card.cjs +93 -0
  58. package/dist/chunks/card.cjs.map +1 -0
  59. package/dist/chunks/card.js +94 -0
  60. package/dist/chunks/card.js.map +1 -0
  61. package/dist/chunks/checkbox.cjs +73 -0
  62. package/dist/chunks/checkbox.cjs.map +1 -0
  63. package/dist/chunks/checkbox.js +74 -0
  64. package/dist/chunks/checkbox.js.map +1 -0
  65. package/dist/chunks/color.cjs +4 -0
  66. package/dist/chunks/color.cjs.map +1 -0
  67. package/dist/chunks/color.js +5 -0
  68. package/dist/chunks/color.js.map +1 -0
  69. package/dist/chunks/detail.cjs +143 -0
  70. package/dist/chunks/detail.cjs.map +1 -0
  71. package/dist/chunks/detail.js +144 -0
  72. package/dist/chunks/detail.js.map +1 -0
  73. package/dist/chunks/dialog.cjs +117 -0
  74. package/dist/chunks/dialog.cjs.map +1 -0
  75. package/dist/chunks/dialog.js +118 -0
  76. package/dist/chunks/dialog.js.map +1 -0
  77. package/dist/chunks/divider.cjs +80 -0
  78. package/dist/chunks/divider.cjs.map +1 -0
  79. package/dist/chunks/divider.js +81 -0
  80. package/dist/chunks/divider.js.map +1 -0
  81. package/dist/chunks/dropdown-button.cjs +534 -0
  82. package/dist/chunks/dropdown-button.cjs.map +1 -0
  83. package/dist/chunks/dropdown-button.js +535 -0
  84. package/dist/chunks/dropdown-button.js.map +1 -0
  85. package/dist/chunks/icon-button.cjs +35 -0
  86. package/dist/chunks/icon-button.cjs.map +1 -0
  87. package/dist/chunks/icon-button.js +36 -0
  88. package/dist/chunks/icon-button.js.map +1 -0
  89. package/dist/chunks/icon.cjs +78 -0
  90. package/dist/chunks/icon.cjs.map +1 -0
  91. package/dist/chunks/icon.js +79 -0
  92. package/dist/chunks/icon.js.map +1 -0
  93. package/dist/chunks/navbar.cjs +143 -0
  94. package/dist/chunks/navbar.cjs.map +1 -0
  95. package/dist/chunks/navbar.js +144 -0
  96. package/dist/chunks/navbar.js.map +1 -0
  97. package/dist/chunks/radio.cjs +181 -0
  98. package/dist/chunks/radio.cjs.map +1 -0
  99. package/dist/chunks/radio.js +182 -0
  100. package/dist/chunks/radio.js.map +1 -0
  101. package/dist/chunks/select.cjs +350 -0
  102. package/dist/chunks/select.cjs.map +1 -0
  103. package/dist/chunks/select.js +351 -0
  104. package/dist/chunks/select.js.map +1 -0
  105. package/dist/chunks/size.cjs +4 -0
  106. package/dist/chunks/size.cjs.map +1 -0
  107. package/dist/chunks/size.js +5 -0
  108. package/dist/chunks/size.js.map +1 -0
  109. package/dist/chunks/slider.cjs +648 -0
  110. package/dist/chunks/slider.cjs.map +1 -0
  111. package/dist/chunks/slider.js +649 -0
  112. package/dist/chunks/slider.js.map +1 -0
  113. package/dist/chunks/switch.cjs +73 -0
  114. package/dist/chunks/switch.cjs.map +1 -0
  115. package/dist/chunks/switch.js +74 -0
  116. package/dist/chunks/switch.js.map +1 -0
  117. package/dist/chunks/tab-panel.cjs +166 -0
  118. package/dist/chunks/tab-panel.cjs.map +1 -0
  119. package/dist/chunks/tab-panel.js +167 -0
  120. package/dist/chunks/tab-panel.js.map +1 -0
  121. package/dist/chunks/tag.cjs +108 -0
  122. package/dist/chunks/tag.cjs.map +1 -0
  123. package/dist/chunks/tag.js +109 -0
  124. package/dist/chunks/tag.js.map +1 -0
  125. package/dist/chunks/text-input.cjs +59 -0
  126. package/dist/chunks/text-input.cjs.map +1 -0
  127. package/dist/chunks/text-input.js +60 -0
  128. package/dist/chunks/text-input.js.map +1 -0
  129. package/dist/chunks/variables.cjs +372 -0
  130. package/dist/chunks/variables.cjs.map +1 -0
  131. package/dist/chunks/variables.js +373 -0
  132. package/dist/chunks/variables.js.map +1 -0
  133. package/dist/detail.cjs +6 -0
  134. package/dist/detail.cjs.map +1 -0
  135. package/dist/detail.js +6 -0
  136. package/dist/detail.js.map +1 -0
  137. package/dist/dialog.cjs +6 -0
  138. package/dist/dialog.cjs.map +1 -0
  139. package/dist/dialog.js +6 -0
  140. package/dist/dialog.js.map +1 -0
  141. package/dist/divider.cjs +6 -0
  142. package/dist/divider.cjs.map +1 -0
  143. package/dist/divider.js +6 -0
  144. package/dist/divider.js.map +1 -0
  145. package/dist/dropdown.cjs +7 -0
  146. package/dist/dropdown.cjs.map +1 -0
  147. package/dist/dropdown.js +7 -0
  148. package/dist/dropdown.js.map +1 -0
  149. package/dist/icon-button.cjs +6 -0
  150. package/dist/icon-button.cjs.map +1 -0
  151. package/dist/icon-button.js +6 -0
  152. package/dist/icon-button.js.map +1 -0
  153. package/dist/icon.cjs +6 -0
  154. package/dist/icon.cjs.map +1 -0
  155. package/dist/icon.js +6 -0
  156. package/dist/icon.js.map +1 -0
  157. package/dist/index.cjs +49 -4223
  158. package/dist/index.cjs.map +1 -1
  159. package/dist/index.js +49 -4223
  160. package/dist/index.js.map +1 -1
  161. package/dist/navbar.cjs +6 -0
  162. package/dist/navbar.cjs.map +1 -0
  163. package/dist/navbar.js +6 -0
  164. package/dist/navbar.js.map +1 -0
  165. package/dist/radio-group.cjs +7 -0
  166. package/dist/radio-group.cjs.map +1 -0
  167. package/dist/radio-group.js +7 -0
  168. package/dist/radio-group.js.map +1 -0
  169. package/dist/select.cjs +99 -0
  170. package/dist/select.cjs.map +1 -0
  171. package/dist/select.js +99 -0
  172. package/dist/select.js.map +1 -0
  173. package/dist/slider.cjs +6 -0
  174. package/dist/slider.cjs.map +1 -0
  175. package/dist/slider.js +6 -0
  176. package/dist/slider.js.map +1 -0
  177. package/dist/switch.cjs +6 -0
  178. package/dist/switch.cjs.map +1 -0
  179. package/dist/switch.js +6 -0
  180. package/dist/switch.js.map +1 -0
  181. package/dist/tabs.cjs +8 -0
  182. package/dist/tabs.cjs.map +1 -0
  183. package/dist/tabs.js +8 -0
  184. package/dist/tabs.js.map +1 -0
  185. package/dist/tag.cjs +5 -0
  186. package/dist/tag.cjs.map +1 -0
  187. package/dist/tag.js +5 -0
  188. package/dist/tag.js.map +1 -0
  189. package/dist/text-input.cjs +6 -0
  190. package/dist/text-input.cjs.map +1 -0
  191. package/dist/text-input.js +6 -0
  192. package/dist/text-input.js.map +1 -0
  193. package/package.json +75 -63
  194. package/src/styles/color.css +117 -117
  195. package/src/styles/components/alert.css +104 -104
  196. package/src/styles/components/badge.css +67 -67
  197. package/src/styles/components/breadcrumb-item.css +59 -59
  198. package/src/styles/components/breadcrumb.css +19 -19
  199. package/src/styles/components/button-group.css +25 -25
  200. package/src/styles/components/button.css +213 -213
  201. package/src/styles/components/card.css +64 -64
  202. package/src/styles/components/checkbox.css +78 -78
  203. package/src/styles/components/detail.css +127 -127
  204. package/src/styles/components/dialog.css +103 -103
  205. package/src/styles/components/divider.css +18 -18
  206. package/src/styles/components/dropdown-item.css +91 -91
  207. package/src/styles/components/dropdown.css +179 -179
  208. package/src/styles/components/icon-button.css +116 -116
  209. package/src/styles/components/icon.css +29 -29
  210. package/src/styles/components/navbar.css +250 -250
  211. package/src/styles/components/radio-group.css +360 -360
  212. package/src/styles/components/select-option.css +43 -43
  213. package/src/styles/components/select.css +222 -222
  214. package/src/styles/components/slider.css +326 -326
  215. package/src/styles/components/switch.css +117 -117
  216. package/src/styles/components/tab-panel.css +8 -8
  217. package/src/styles/components/tab.css +44 -44
  218. package/src/styles/components/tabs.css +16 -16
  219. package/src/styles/components/tag.css +107 -107
  220. package/src/styles/components/text-input.css +110 -110
  221. package/src/styles/layout.css +43 -43
  222. package/src/styles/size.css +7 -7
  223. package/src/styles/variables.css +368 -368
  224. package/src/utils.ts +1 -0
@@ -1,91 +1,91 @@
1
- :host {
2
- display: block;
3
-
4
- --dropdown-item-padding: 0.5rem 0.875rem;
5
- --dropdown-item-bg: transparent;
6
- --dropdown-item-bg-hover: var(--surface-raised, rgba(0, 0, 0, 0.05));
7
- --dropdown-item-bg-active: var(--surface-raised-active, rgba(0, 0, 0, 0.1));
8
- --dropdown-item-color: var(--color-text-main, inherit);
9
- --dropdown-item-color-disabled: var(--color-text-disabled, rgba(0, 0, 0, 0.35));
10
- --dropdown-item-font-size: 0.9375rem;
11
- --dropdown-item-gap: 0.5rem;
12
- --dropdown-item-transition: background 0.1s;
13
- --dropdown-item-border-radius: var(--ae-radius-sm, 4px);
14
- }
15
-
16
- .item {
17
- display: flex;
18
- align-items: center;
19
- gap: var(--dropdown-item-gap);
20
- width: 100%;
21
- padding: var(--dropdown-item-padding);
22
- font-size: var(--dropdown-item-font-size);
23
- font-family: inherit;
24
- color: var(--dropdown-item-color);
25
- background: var(--dropdown-item-bg);
26
- border: none;
27
- border-radius: var(--dropdown-item-border-radius);
28
- text-align: left;
29
- text-decoration: none;
30
- cursor: pointer;
31
- user-select: none;
32
- white-space: nowrap;
33
- box-sizing: border-box;
34
- transition: var(--dropdown-item-transition);
35
- outline: none;
36
- }
37
-
38
- .item:hover:not(:disabled):not([aria-disabled="true"]) {
39
- background: var(--dropdown-item-bg-hover);
40
- }
41
-
42
- .item:active:not(:disabled):not([aria-disabled="true"]) {
43
- background: var(--dropdown-item-bg-active);
44
- }
45
-
46
- .item:focus-visible {
47
- background: var(--dropdown-item-bg-hover);
48
- outline: 2px solid var(--color-primary, #0e639c);
49
- outline-offset: -2px;
50
- }
51
-
52
- /* disabled */
53
- :host([disabled]) .item,
54
- .item:disabled {
55
- color: var(--dropdown-item-color-disabled);
56
- cursor: default;
57
- pointer-events: none;
58
- }
59
-
60
- /* Active item — current selection, current route, etc. */
61
- :host([active]) .item {
62
- background: var(--dropdown-item-bg-selected, rgba(0, 0, 0, 0.06));
63
- color: var(--dropdown-item-color-active, var(--color-primary, #0e639c));
64
- font-weight: 500;
65
- }
66
-
67
- /* Checkbox mode — fixed-width indicator column */
68
- .check-indicator {
69
- display: inline-flex;
70
- align-items: center;
71
- justify-content: center;
72
- width: 1em;
73
- flex-shrink: 0;
74
- }
75
-
76
- /* CSS-drawn checkmark (border trick) */
77
- .check-indicator::after {
78
- content: '';
79
- display: block;
80
- width: 0.3em;
81
- height: 0.55em;
82
- border-right: 0.125em solid currentColor;
83
- border-bottom: 0.125em solid currentColor;
84
- transform: rotate(45deg) translateY(-0.1em);
85
- opacity: 0;
86
- transition: opacity 0.1s;
87
- }
88
-
89
- :host([checked]) .check-indicator::after {
90
- opacity: 1;
91
- }
1
+ :host {
2
+ display: block;
3
+
4
+ --dropdown-item-padding: 0.5rem 0.875rem;
5
+ --dropdown-item-bg: transparent;
6
+ --dropdown-item-bg-hover: var(--surface-raised, rgba(0, 0, 0, 0.05));
7
+ --dropdown-item-bg-active: var(--surface-raised-active, rgba(0, 0, 0, 0.1));
8
+ --dropdown-item-color: var(--color-text-main, inherit);
9
+ --dropdown-item-color-disabled: var(--color-text-disabled, rgba(0, 0, 0, 0.35));
10
+ --dropdown-item-font-size: 0.9375rem;
11
+ --dropdown-item-gap: 0.5rem;
12
+ --dropdown-item-transition: background 0.1s;
13
+ --dropdown-item-border-radius: var(--ae-radius-sm, 4px);
14
+ }
15
+
16
+ .item {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: var(--dropdown-item-gap);
20
+ width: 100%;
21
+ padding: var(--dropdown-item-padding);
22
+ font-size: var(--dropdown-item-font-size);
23
+ font-family: inherit;
24
+ color: var(--dropdown-item-color);
25
+ background: var(--dropdown-item-bg);
26
+ border: none;
27
+ border-radius: var(--dropdown-item-border-radius);
28
+ text-align: left;
29
+ text-decoration: none;
30
+ cursor: pointer;
31
+ user-select: none;
32
+ white-space: nowrap;
33
+ box-sizing: border-box;
34
+ transition: var(--dropdown-item-transition);
35
+ outline: none;
36
+ }
37
+
38
+ .item:hover:not(:disabled):not([aria-disabled="true"]) {
39
+ background: var(--dropdown-item-bg-hover);
40
+ }
41
+
42
+ .item:active:not(:disabled):not([aria-disabled="true"]) {
43
+ background: var(--dropdown-item-bg-active);
44
+ }
45
+
46
+ .item:focus-visible {
47
+ background: var(--dropdown-item-bg-hover);
48
+ outline: 2px solid var(--color-primary, #0e639c);
49
+ outline-offset: -2px;
50
+ }
51
+
52
+ /* disabled */
53
+ :host([disabled]) .item,
54
+ .item:disabled {
55
+ color: var(--dropdown-item-color-disabled);
56
+ cursor: default;
57
+ pointer-events: none;
58
+ }
59
+
60
+ /* Active item — current selection, current route, etc. */
61
+ :host([active]) .item {
62
+ background: var(--dropdown-item-bg-selected, rgba(0, 0, 0, 0.06));
63
+ color: var(--dropdown-item-color-active, var(--color-primary, #0e639c));
64
+ font-weight: 500;
65
+ }
66
+
67
+ /* Checkbox mode — fixed-width indicator column */
68
+ .check-indicator {
69
+ display: inline-flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ width: 1em;
73
+ flex-shrink: 0;
74
+ }
75
+
76
+ /* CSS-drawn checkmark (border trick) */
77
+ .check-indicator::after {
78
+ content: '';
79
+ display: block;
80
+ width: 0.3em;
81
+ height: 0.55em;
82
+ border-right: 0.125em solid currentColor;
83
+ border-bottom: 0.125em solid currentColor;
84
+ transform: rotate(45deg) translateY(-0.1em);
85
+ opacity: 0;
86
+ transition: opacity 0.1s;
87
+ }
88
+
89
+ :host([checked]) .check-indicator::after {
90
+ opacity: 1;
91
+ }
@@ -1,179 +1,179 @@
1
- :host {
2
- display: inline-block;
3
- position: relative;
4
-
5
- --dropdown-z-index: 1000;
6
- --dropdown-bg: var(--surface-overlay, #fff);
7
- --dropdown-border: 1px solid var(--color-border, rgba(0, 0, 0, 0.12));
8
- --dropdown-border-radius: var(--ae-radius-md, 6px);
9
- --dropdown-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
10
- --dropdown-min-width: 10rem;
11
- --dropdown-padding: 0.25rem 0;
12
- }
13
-
14
- .trigger-wrapper {
15
- display: flex;
16
- align-items: stretch;
17
- height: 100%;
18
- }
19
-
20
- /* Internal trigger rendered when `label` prop is set.
21
- Uses --dropdown-trigger-* variables. Context components (e.g. ae-navbar)
22
- map their own tokens to these variables via ::slotted(ae-dropdown). */
23
- .trigger-label {
24
- display: inline-flex;
25
- align-items: center;
26
- height: var(--dropdown-trigger-height, auto);
27
- padding: 0 var(--dropdown-trigger-padding-x, 0.75rem);
28
- color: var(--dropdown-trigger-color, inherit);
29
- background: var(--dropdown-trigger-bg, none);
30
- border: none;
31
- border-radius: var(--dropdown-trigger-radius, 0);
32
- -webkit-appearance: none;
33
- appearance: none;
34
- cursor: pointer;
35
- font: inherit;
36
- font-size: var(--dropdown-trigger-font-size, inherit);
37
- white-space: nowrap;
38
- transition: color 0.15s ease, background-color 0.15s ease;
39
- outline-offset: 2px;
40
- }
41
-
42
- .trigger-label:hover {
43
- color: var(--dropdown-trigger-hover-color, inherit);
44
- background-color: var(--dropdown-trigger-hover-bg, transparent);
45
- }
46
-
47
- :host([disabled]) .trigger-label {
48
- opacity: 0.5;
49
- cursor: not-allowed;
50
- pointer-events: none;
51
- }
52
-
53
- /* Bootstrap-style CSS border caret — shadow DOM only, no global injection needed */
54
- .ae-dropdown-arrow {
55
- display: inline-block;
56
- width: 0;
57
- height: 0;
58
- margin-left: 0.3em;
59
- vertical-align: 0.2em;
60
- flex-shrink: 0;
61
- }
62
- .ae-dropdown-arrow--bottom {
63
- border-top: 0.35em solid;
64
- border-right: 0.35em solid transparent;
65
- border-left: 0.35em solid transparent;
66
- }
67
- .ae-dropdown-arrow--top {
68
- border-bottom: 0.35em solid;
69
- border-right: 0.35em solid transparent;
70
- border-left: 0.35em solid transparent;
71
- }
72
- .ae-dropdown-arrow--right {
73
- border-left: 0.35em solid;
74
- border-top: 0.35em solid transparent;
75
- border-bottom: 0.35em solid transparent;
76
- }
77
- .ae-dropdown-arrow--left {
78
- border-right: 0.35em solid;
79
- border-top: 0.35em solid transparent;
80
- border-bottom: 0.35em solid transparent;
81
- }
82
-
83
- .panel {
84
- display: none;
85
- position: absolute;
86
- z-index: var(--dropdown-z-index);
87
- background: var(--dropdown-bg);
88
- border: var(--dropdown-border);
89
- border-radius: var(--dropdown-border-radius);
90
- box-shadow: var(--dropdown-shadow);
91
- min-width: var(--dropdown-min-width);
92
- padding: var(--dropdown-padding);
93
- box-sizing: border-box;
94
- /* Prevent panel from being wider than viewport */
95
- max-width: calc(100vw - 16px);
96
- }
97
-
98
- .panel.open {
99
- display: block;
100
- }
101
-
102
- /* placement variants */
103
- .panel.placement-bottom-start {
104
- top: 100%;
105
- left: 0;
106
- margin-top: 4px;
107
- }
108
-
109
- .panel.placement-bottom-end {
110
- top: 100%;
111
- right: 0;
112
- margin-top: 4px;
113
- }
114
-
115
- .panel.placement-bottom {
116
- top: 100%;
117
- left: 50%;
118
- transform: translateX(-50%);
119
- margin-top: 4px;
120
- }
121
-
122
- .panel.placement-top-start {
123
- bottom: 100%;
124
- left: 0;
125
- margin-bottom: 4px;
126
- }
127
-
128
- .panel.placement-top-end {
129
- bottom: 100%;
130
- right: 0;
131
- margin-bottom: 4px;
132
- }
133
-
134
- .panel.placement-top {
135
- bottom: 100%;
136
- left: 50%;
137
- transform: translateX(-50%);
138
- margin-bottom: 4px;
139
- }
140
-
141
- /* right placements */
142
- .panel.placement-right-start {
143
- top: 0;
144
- left: 100%;
145
- margin-left: 4px;
146
- }
147
-
148
- .panel.placement-right-end {
149
- bottom: 0;
150
- left: 100%;
151
- margin-left: 4px;
152
- }
153
-
154
- .panel.placement-right {
155
- top: 50%;
156
- left: 100%;
157
- transform: translateY(-50%);
158
- margin-left: 4px;
159
- }
160
-
161
- /* left placements */
162
- .panel.placement-left-start {
163
- top: 0;
164
- right: 100%;
165
- margin-right: 4px;
166
- }
167
-
168
- .panel.placement-left-end {
169
- bottom: 0;
170
- right: 100%;
171
- margin-right: 4px;
172
- }
173
-
174
- .panel.placement-left {
175
- top: 50%;
176
- right: 100%;
177
- transform: translateY(-50%);
178
- margin-right: 4px;
179
- }
1
+ :host {
2
+ display: inline-block;
3
+ position: relative;
4
+
5
+ --dropdown-z-index: 1000;
6
+ --dropdown-bg: var(--surface-overlay, #fff);
7
+ --dropdown-border: 1px solid var(--color-border, rgba(0, 0, 0, 0.12));
8
+ --dropdown-border-radius: var(--ae-radius-md, 6px);
9
+ --dropdown-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
10
+ --dropdown-min-width: 10rem;
11
+ --dropdown-padding: 0.25rem 0;
12
+ }
13
+
14
+ .trigger-wrapper {
15
+ display: flex;
16
+ align-items: stretch;
17
+ height: 100%;
18
+ }
19
+
20
+ /* Internal trigger rendered when `label` prop is set.
21
+ Uses --dropdown-trigger-* variables. Context components (e.g. ae-navbar)
22
+ map their own tokens to these variables via ::slotted(ae-dropdown). */
23
+ .trigger-label {
24
+ display: inline-flex;
25
+ align-items: center;
26
+ height: var(--dropdown-trigger-height, auto);
27
+ padding: 0 var(--dropdown-trigger-padding-x, 0.75rem);
28
+ color: var(--dropdown-trigger-color, inherit);
29
+ background: var(--dropdown-trigger-bg, none);
30
+ border: none;
31
+ border-radius: var(--dropdown-trigger-radius, 0);
32
+ -webkit-appearance: none;
33
+ appearance: none;
34
+ cursor: pointer;
35
+ font: inherit;
36
+ font-size: var(--dropdown-trigger-font-size, inherit);
37
+ white-space: nowrap;
38
+ transition: color 0.15s ease, background-color 0.15s ease;
39
+ outline-offset: 2px;
40
+ }
41
+
42
+ .trigger-label:hover {
43
+ color: var(--dropdown-trigger-hover-color, inherit);
44
+ background-color: var(--dropdown-trigger-hover-bg, transparent);
45
+ }
46
+
47
+ :host([disabled]) .trigger-label {
48
+ opacity: 0.5;
49
+ cursor: not-allowed;
50
+ pointer-events: none;
51
+ }
52
+
53
+ /* Bootstrap-style CSS border caret — shadow DOM only, no global injection needed */
54
+ .ae-dropdown-arrow {
55
+ display: inline-block;
56
+ width: 0;
57
+ height: 0;
58
+ margin-left: 0.3em;
59
+ vertical-align: 0.2em;
60
+ flex-shrink: 0;
61
+ }
62
+ .ae-dropdown-arrow--bottom {
63
+ border-top: 0.35em solid;
64
+ border-right: 0.35em solid transparent;
65
+ border-left: 0.35em solid transparent;
66
+ }
67
+ .ae-dropdown-arrow--top {
68
+ border-bottom: 0.35em solid;
69
+ border-right: 0.35em solid transparent;
70
+ border-left: 0.35em solid transparent;
71
+ }
72
+ .ae-dropdown-arrow--right {
73
+ border-left: 0.35em solid;
74
+ border-top: 0.35em solid transparent;
75
+ border-bottom: 0.35em solid transparent;
76
+ }
77
+ .ae-dropdown-arrow--left {
78
+ border-right: 0.35em solid;
79
+ border-top: 0.35em solid transparent;
80
+ border-bottom: 0.35em solid transparent;
81
+ }
82
+
83
+ .panel {
84
+ display: none;
85
+ position: absolute;
86
+ z-index: var(--dropdown-z-index);
87
+ background: var(--dropdown-bg);
88
+ border: var(--dropdown-border);
89
+ border-radius: var(--dropdown-border-radius);
90
+ box-shadow: var(--dropdown-shadow);
91
+ min-width: var(--dropdown-min-width);
92
+ padding: var(--dropdown-padding);
93
+ box-sizing: border-box;
94
+ /* Prevent panel from being wider than viewport */
95
+ max-width: calc(100vw - 16px);
96
+ }
97
+
98
+ .panel.open {
99
+ display: block;
100
+ }
101
+
102
+ /* placement variants */
103
+ .panel.placement-bottom-start {
104
+ top: 100%;
105
+ left: 0;
106
+ margin-top: 4px;
107
+ }
108
+
109
+ .panel.placement-bottom-end {
110
+ top: 100%;
111
+ right: 0;
112
+ margin-top: 4px;
113
+ }
114
+
115
+ .panel.placement-bottom {
116
+ top: 100%;
117
+ left: 50%;
118
+ transform: translateX(-50%);
119
+ margin-top: 4px;
120
+ }
121
+
122
+ .panel.placement-top-start {
123
+ bottom: 100%;
124
+ left: 0;
125
+ margin-bottom: 4px;
126
+ }
127
+
128
+ .panel.placement-top-end {
129
+ bottom: 100%;
130
+ right: 0;
131
+ margin-bottom: 4px;
132
+ }
133
+
134
+ .panel.placement-top {
135
+ bottom: 100%;
136
+ left: 50%;
137
+ transform: translateX(-50%);
138
+ margin-bottom: 4px;
139
+ }
140
+
141
+ /* right placements */
142
+ .panel.placement-right-start {
143
+ top: 0;
144
+ left: 100%;
145
+ margin-left: 4px;
146
+ }
147
+
148
+ .panel.placement-right-end {
149
+ bottom: 0;
150
+ left: 100%;
151
+ margin-left: 4px;
152
+ }
153
+
154
+ .panel.placement-right {
155
+ top: 50%;
156
+ left: 100%;
157
+ transform: translateY(-50%);
158
+ margin-left: 4px;
159
+ }
160
+
161
+ /* left placements */
162
+ .panel.placement-left-start {
163
+ top: 0;
164
+ right: 100%;
165
+ margin-right: 4px;
166
+ }
167
+
168
+ .panel.placement-left-end {
169
+ bottom: 0;
170
+ right: 100%;
171
+ margin-right: 4px;
172
+ }
173
+
174
+ .panel.placement-left {
175
+ top: 50%;
176
+ right: 100%;
177
+ transform: translateY(-50%);
178
+ margin-right: 4px;
179
+ }