@dropi/ui 0.1.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.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/dropi-badge.cjs.entry.js +37 -0
  3. package/dist/cjs/dropi-button.cjs.entry.js +81 -0
  4. package/dist/cjs/dropi-checkbox.cjs.entry.js +36 -0
  5. package/dist/cjs/dropi-icon.cjs.entry.js +50 -0
  6. package/dist/cjs/dropi-input.cjs.entry.js +210 -0
  7. package/dist/cjs/dropi-radio-button.cjs.entry.js +47 -0
  8. package/dist/cjs/dropi-select.cjs.entry.js +335 -0
  9. package/dist/cjs/dropi-switch.cjs.entry.js +30 -0
  10. package/dist/cjs/dropi-tag.cjs.entry.js +68 -0
  11. package/dist/cjs/dropi-text-area.cjs.entry.js +103 -0
  12. package/dist/cjs/dropi-ui.cjs.js +24 -0
  13. package/dist/cjs/index-CuGLZVqo.js +1743 -0
  14. package/dist/cjs/index.cjs.js +2 -0
  15. package/dist/cjs/loader.cjs.js +12 -0
  16. package/dist/collection/assets/icons/symbol/svg/sprite.css.svg +1 -0
  17. package/dist/collection/collection-manifest.json +22 -0
  18. package/dist/collection/components/dropi-badge/dropi-badge.css +41 -0
  19. package/dist/collection/components/dropi-badge/dropi-badge.js +72 -0
  20. package/dist/collection/components/dropi-button/dropi-button.css +169 -0
  21. package/dist/collection/components/dropi-button/dropi-button.js +277 -0
  22. package/dist/collection/components/dropi-checkbox/dropi-checkbox.css +47 -0
  23. package/dist/collection/components/dropi-checkbox/dropi-checkbox.js +103 -0
  24. package/dist/collection/components/dropi-icon/dropi-icon.css +19 -0
  25. package/dist/collection/components/dropi-icon/dropi-icon.js +142 -0
  26. package/dist/collection/components/dropi-input/dropi-input.css +168 -0
  27. package/dist/collection/components/dropi-input/dropi-input.js +735 -0
  28. package/dist/collection/components/dropi-radio-button/dropi-radio-button.css +59 -0
  29. package/dist/collection/components/dropi-radio-button/dropi-radio-button.js +181 -0
  30. package/dist/collection/components/dropi-select/dropi-select.css +364 -0
  31. package/dist/collection/components/dropi-select/dropi-select.js +932 -0
  32. package/dist/collection/components/dropi-select/select.types.js +1 -0
  33. package/dist/collection/components/dropi-switch/dropi-switch.css +57 -0
  34. package/dist/collection/components/dropi-switch/dropi-switch.js +96 -0
  35. package/dist/collection/components/dropi-tag/dropi-tag.css +40 -0
  36. package/dist/collection/components/dropi-tag/dropi-tag.js +190 -0
  37. package/dist/collection/components/dropi-text-area/dropi-text-area.css +97 -0
  38. package/dist/collection/components/dropi-text-area/dropi-text-area.js +457 -0
  39. package/dist/collection/index.js +1 -0
  40. package/dist/collection/utils/utils.js +3 -0
  41. package/dist/collection/utils/utils.unit.test.js +16 -0
  42. package/dist/components/dropi-badge.d.ts +11 -0
  43. package/dist/components/dropi-badge.js +1 -0
  44. package/dist/components/dropi-button.d.ts +11 -0
  45. package/dist/components/dropi-button.js +1 -0
  46. package/dist/components/dropi-checkbox.d.ts +11 -0
  47. package/dist/components/dropi-checkbox.js +1 -0
  48. package/dist/components/dropi-icon.d.ts +11 -0
  49. package/dist/components/dropi-icon.js +1 -0
  50. package/dist/components/dropi-input.d.ts +11 -0
  51. package/dist/components/dropi-input.js +1 -0
  52. package/dist/components/dropi-radio-button.d.ts +11 -0
  53. package/dist/components/dropi-radio-button.js +1 -0
  54. package/dist/components/dropi-select.d.ts +11 -0
  55. package/dist/components/dropi-select.js +1 -0
  56. package/dist/components/dropi-switch.d.ts +11 -0
  57. package/dist/components/dropi-switch.js +1 -0
  58. package/dist/components/dropi-tag.d.ts +11 -0
  59. package/dist/components/dropi-tag.js +1 -0
  60. package/dist/components/dropi-text-area.d.ts +11 -0
  61. package/dist/components/dropi-text-area.js +1 -0
  62. package/dist/components/index.d.ts +35 -0
  63. package/dist/components/index.js +1 -0
  64. package/dist/components/p-MNma8N1x.js +1 -0
  65. package/dist/dropi-ui/dropi-ui.css +1 -0
  66. package/dist/dropi-ui/dropi-ui.esm.js +1 -0
  67. package/dist/dropi-ui/index.esm.js +0 -0
  68. package/dist/dropi-ui/p-1a28b8f5.entry.js +1 -0
  69. package/dist/dropi-ui/p-21abf91a.entry.js +1 -0
  70. package/dist/dropi-ui/p-52291024.entry.js +1 -0
  71. package/dist/dropi-ui/p-54502c46.entry.js +1 -0
  72. package/dist/dropi-ui/p-6f0aa619.entry.js +1 -0
  73. package/dist/dropi-ui/p-9c7076d3.entry.js +1 -0
  74. package/dist/dropi-ui/p-DFz-gwFP.js +2 -0
  75. package/dist/dropi-ui/p-a1944f3d.entry.js +1 -0
  76. package/dist/dropi-ui/p-c7b9cbda.entry.js +1 -0
  77. package/dist/dropi-ui/p-dd089a60.entry.js +1 -0
  78. package/dist/dropi-ui/p-f785011f.entry.js +1 -0
  79. package/dist/esm/dropi-badge.entry.js +35 -0
  80. package/dist/esm/dropi-button.entry.js +79 -0
  81. package/dist/esm/dropi-checkbox.entry.js +34 -0
  82. package/dist/esm/dropi-icon.entry.js +48 -0
  83. package/dist/esm/dropi-input.entry.js +208 -0
  84. package/dist/esm/dropi-radio-button.entry.js +45 -0
  85. package/dist/esm/dropi-select.entry.js +333 -0
  86. package/dist/esm/dropi-switch.entry.js +28 -0
  87. package/dist/esm/dropi-tag.entry.js +66 -0
  88. package/dist/esm/dropi-text-area.entry.js +101 -0
  89. package/dist/esm/dropi-ui.js +20 -0
  90. package/dist/esm/index-DFz-gwFP.js +1734 -0
  91. package/dist/esm/index.js +1 -0
  92. package/dist/esm/loader.js +10 -0
  93. package/dist/index.cjs.js +1 -0
  94. package/dist/index.js +1 -0
  95. package/dist/types/components/dropi-badge/dropi-badge.d.ts +12 -0
  96. package/dist/types/components/dropi-button/dropi-button.d.ts +35 -0
  97. package/dist/types/components/dropi-checkbox/dropi-checkbox.d.ts +16 -0
  98. package/dist/types/components/dropi-icon/dropi-icon.d.ts +25 -0
  99. package/dist/types/components/dropi-input/dropi-input.d.ts +92 -0
  100. package/dist/types/components/dropi-radio-button/dropi-radio-button.d.ts +25 -0
  101. package/dist/types/components/dropi-select/dropi-select.d.ts +103 -0
  102. package/dist/types/components/dropi-select/select.types.d.ts +23 -0
  103. package/dist/types/components/dropi-switch/dropi-switch.d.ts +15 -0
  104. package/dist/types/components/dropi-tag/dropi-tag.d.ts +25 -0
  105. package/dist/types/components/dropi-text-area/dropi-text-area.d.ts +53 -0
  106. package/dist/types/components.d.ts +1549 -0
  107. package/dist/types/index.d.ts +7 -0
  108. package/dist/types/stencil-public-runtime.d.ts +1860 -0
  109. package/dist/types/utils/utils.d.ts +1 -0
  110. package/dist/types/utils/utils.unit.test.d.ts +1 -0
  111. package/loader/cdn.js +1 -0
  112. package/loader/index.cjs.js +1 -0
  113. package/loader/index.d.ts +24 -0
  114. package/loader/index.es2017.js +1 -0
  115. package/loader/index.js +2 -0
  116. package/package.json +50 -0
  117. package/readme.md +89 -0
@@ -0,0 +1,59 @@
1
+ :host {
2
+ display: inline-block;
3
+ }
4
+
5
+ *, *::before, *::after { box-sizing: border-box; }
6
+
7
+ .dropi-radio-button {
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: flex-start;
11
+ gap: 20px;
12
+ }
13
+
14
+ label {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: 8px;
18
+ cursor: pointer;
19
+ color: var(--Gray-Gray-700, #32394d);
20
+ font-size: var(--font-size-s, 12px);
21
+ font-weight: var(--font-weight-regular, 400);
22
+ line-height: 1.5;
23
+ }
24
+
25
+ input[type='radio'] {
26
+ appearance: none;
27
+ width: 20px;
28
+ height: 20px;
29
+ border: 2px solid var(--Gray-Gray-200, #c3c9d9);
30
+ border-radius: 50%;
31
+ background-color: transparent;
32
+ position: relative;
33
+ cursor: pointer;
34
+ outline: none;
35
+ flex-shrink: 0;
36
+ display: flex;
37
+ justify-content: center;
38
+ align-items: center;
39
+ }
40
+
41
+ input[type='radio']::before {
42
+ content: '';
43
+ position: absolute;
44
+ top: 3px;
45
+ left: 3px;
46
+ width: 10px;
47
+ height: 10px;
48
+ background-color: var(--Primary-Primary-400, #f7b46f);
49
+ border-radius: 50%;
50
+ display: none;
51
+ }
52
+
53
+ input[type='radio']:checked {
54
+ border: 2px solid var(--Primary-Primary-500, #f49a3d);
55
+ }
56
+
57
+ input[type='radio']:checked::before {
58
+ display: block;
59
+ }
@@ -0,0 +1,181 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * @component dropi-radio-button
4
+ * Styled radio button with label.
5
+ */
6
+ export class DropiRadioButton {
7
+ /** Label text displayed next to the radio */
8
+ label = '';
9
+ /** Input name (for grouping radio buttons) */
10
+ name = 'radio';
11
+ /** Input id */
12
+ inputId = 'radioButton';
13
+ /** Whether this radio is selected */
14
+ checked = false;
15
+ /**
16
+ * Set to true to programmatically reset this radio to unchecked.
17
+ * Useful when the parent needs to clear a group.
18
+ */
19
+ resetTrigger = false;
20
+ /** Emitted when the radio is selected */
21
+ dropiChange;
22
+ onResetTrigger(val) {
23
+ if (val)
24
+ this.checked = false;
25
+ }
26
+ handleChange(e) {
27
+ this.checked = e.target.checked;
28
+ this.dropiChange.emit(e);
29
+ }
30
+ render() {
31
+ return (h("div", { key: '3b31699bf088bee52465981074c0aea48b6fe112', class: "dropi-radio-button" }, h("label", { key: '072d19bd9c88739b849db0e264c65183eaab2132', htmlFor: this.inputId }, h("input", { key: '82d1600002e9dc2795cdc5c731997742adc8e2db', id: this.inputId, type: "radio", name: this.name, checked: this.checked, onChange: (e) => this.handleChange(e) }), this.label)));
32
+ }
33
+ static get is() { return "dropi-radio-button"; }
34
+ static get encapsulation() { return "shadow"; }
35
+ static get formAssociated() { return true; }
36
+ static get originalStyleUrls() {
37
+ return {
38
+ "$": ["dropi-radio-button.css"]
39
+ };
40
+ }
41
+ static get styleUrls() {
42
+ return {
43
+ "$": ["dropi-radio-button.css"]
44
+ };
45
+ }
46
+ static get properties() {
47
+ return {
48
+ "label": {
49
+ "type": "string",
50
+ "mutable": false,
51
+ "complexType": {
52
+ "original": "string",
53
+ "resolved": "string",
54
+ "references": {}
55
+ },
56
+ "required": false,
57
+ "optional": false,
58
+ "docs": {
59
+ "tags": [],
60
+ "text": "Label text displayed next to the radio"
61
+ },
62
+ "getter": false,
63
+ "setter": false,
64
+ "reflect": false,
65
+ "attribute": "label",
66
+ "defaultValue": "''"
67
+ },
68
+ "name": {
69
+ "type": "string",
70
+ "mutable": false,
71
+ "complexType": {
72
+ "original": "string",
73
+ "resolved": "string",
74
+ "references": {}
75
+ },
76
+ "required": false,
77
+ "optional": false,
78
+ "docs": {
79
+ "tags": [],
80
+ "text": "Input name (for grouping radio buttons)"
81
+ },
82
+ "getter": false,
83
+ "setter": false,
84
+ "reflect": false,
85
+ "attribute": "name",
86
+ "defaultValue": "'radio'"
87
+ },
88
+ "inputId": {
89
+ "type": "string",
90
+ "mutable": false,
91
+ "complexType": {
92
+ "original": "string",
93
+ "resolved": "string",
94
+ "references": {}
95
+ },
96
+ "required": false,
97
+ "optional": false,
98
+ "docs": {
99
+ "tags": [],
100
+ "text": "Input id"
101
+ },
102
+ "getter": false,
103
+ "setter": false,
104
+ "reflect": false,
105
+ "attribute": "input-id",
106
+ "defaultValue": "'radioButton'"
107
+ },
108
+ "checked": {
109
+ "type": "boolean",
110
+ "mutable": true,
111
+ "complexType": {
112
+ "original": "boolean",
113
+ "resolved": "boolean",
114
+ "references": {}
115
+ },
116
+ "required": false,
117
+ "optional": false,
118
+ "docs": {
119
+ "tags": [],
120
+ "text": "Whether this radio is selected"
121
+ },
122
+ "getter": false,
123
+ "setter": false,
124
+ "reflect": true,
125
+ "attribute": "checked",
126
+ "defaultValue": "false"
127
+ },
128
+ "resetTrigger": {
129
+ "type": "boolean",
130
+ "mutable": false,
131
+ "complexType": {
132
+ "original": "boolean",
133
+ "resolved": "boolean",
134
+ "references": {}
135
+ },
136
+ "required": false,
137
+ "optional": false,
138
+ "docs": {
139
+ "tags": [],
140
+ "text": "Set to true to programmatically reset this radio to unchecked.\nUseful when the parent needs to clear a group."
141
+ },
142
+ "getter": false,
143
+ "setter": false,
144
+ "reflect": false,
145
+ "attribute": "reset-trigger",
146
+ "defaultValue": "false"
147
+ }
148
+ };
149
+ }
150
+ static get events() {
151
+ return [{
152
+ "method": "dropiChange",
153
+ "name": "dropiChange",
154
+ "bubbles": true,
155
+ "cancelable": true,
156
+ "composed": true,
157
+ "docs": {
158
+ "tags": [],
159
+ "text": "Emitted when the radio is selected"
160
+ },
161
+ "complexType": {
162
+ "original": "Event",
163
+ "resolved": "Event",
164
+ "references": {
165
+ "Event": {
166
+ "location": "import",
167
+ "path": "@stencil/core",
168
+ "id": "node_modules::Event",
169
+ "referenceLocation": "Event"
170
+ }
171
+ }
172
+ }
173
+ }];
174
+ }
175
+ static get watchers() {
176
+ return [{
177
+ "propName": "resetTrigger",
178
+ "methodName": "onResetTrigger"
179
+ }];
180
+ }
181
+ }
@@ -0,0 +1,364 @@
1
+ :host {
2
+ display: block;
3
+ width: 100%;
4
+ }
5
+
6
+ *, *::before, *::after { box-sizing: border-box; }
7
+
8
+ /* ── Wrapper ────────────────────────────────────────────────── */
9
+ .custom-select {
10
+ position: relative;
11
+ width: 100%;
12
+ }
13
+
14
+ .custom-select label {
15
+ font-size: var(--font-size-xs, 10px);
16
+ font-weight: var(--font-weight-regular, 400);
17
+ color: var(--Gray-Gray-600, #475066);
18
+ }
19
+
20
+ .disabled-label {
21
+ color: var(--Gray-Gray-400, #858ea6) !important;
22
+ }
23
+
24
+ .asterisk {
25
+ color: var(--Error-Error-500, #f46a6b);
26
+ }
27
+
28
+ /* ── Trigger row ────────────────────────────────────────────── */
29
+ .dropdown-container {
30
+ display: flex;
31
+ align-items: center;
32
+ gap: 4px;
33
+ }
34
+
35
+ .left-label {
36
+ color: var(--Gray-Gray-600, #475066);
37
+ font-size: var(--font-size-m, 14px);
38
+ white-space: nowrap;
39
+ }
40
+
41
+ /* ── Trigger button ─────────────────────────────────────────── */
42
+ .select-button {
43
+ box-sizing: border-box;
44
+ width: 100%;
45
+ height: 40px;
46
+ padding: 0 0.75rem;
47
+ border: 1px solid var(--Gray-Gray-200, #c3c9d9);
48
+ border-radius: var(--Border-2, 8px);
49
+ background: var(--Neutral-White, #fff);
50
+ color: var(--Gray-Gray-500, #69738c);
51
+ font-size: var(--font-size-s, 12px);
52
+ font-family: inherit;
53
+ display: flex;
54
+ justify-content: space-between;
55
+ align-items: center;
56
+ text-align: left;
57
+ cursor: pointer;
58
+ transition: border-color 0.2s ease;
59
+ gap: 8px;
60
+ }
61
+
62
+ .select-button:focus {
63
+ outline: none;
64
+ border-color: var(--Info-Info-500, #50a5f1);
65
+ }
66
+
67
+ .select-button:disabled {
68
+ border-color: var(--Gray-Gray-200, #c3c9d9);
69
+ color: var(--Gray-Gray-400, #858ea6);
70
+ background-color: var(--Gray-Gray-50, #f7f8fa);
71
+ cursor: not-allowed;
72
+ }
73
+
74
+ .select-completed {
75
+ border-color: var(--Gray-Gray-400, #858ea6);
76
+ color: var(--Gray-Gray-600, #475066);
77
+ }
78
+
79
+ .select-button-error {
80
+ border-color: var(--Error-Error-500, #f46a6b) !important;
81
+ }
82
+
83
+ .no-border {
84
+ border: none !important;
85
+ color: var(--Gray-Gray-600, #475066);
86
+ padding: var(--Size-4, 16px);
87
+ background-color: transparent !important;
88
+ gap: var(--Size-2, 8px);
89
+ }
90
+
91
+ .no-border:disabled {
92
+ background-color: transparent !important;
93
+ }
94
+
95
+ /* ── Button content ─────────────────────────────────────────── */
96
+ .button-content {
97
+ display: flex;
98
+ align-items: center;
99
+ gap: 8px;
100
+ overflow: hidden;
101
+ flex: 1;
102
+ min-width: 0;
103
+ }
104
+
105
+ .elipsis {
106
+ flex: 1 1 auto;
107
+ min-width: 0;
108
+ overflow: hidden;
109
+ text-overflow: ellipsis;
110
+ white-space: nowrap;
111
+ }
112
+
113
+ /* ── Dropdown overlay (fixed position) ──────────────────────── */
114
+ .select-dropdown-overlay {
115
+ position: fixed;
116
+ max-height: 250px;
117
+ overflow-y: auto;
118
+ list-style: none;
119
+ padding: var(--Size-4, 16px) var(--Size-4, 16px) var(--Size-3, 12px);
120
+ margin: 0;
121
+ border-radius: var(--Border-2, 8px);
122
+ background: var(--Neutral-White, #fff);
123
+ box-shadow: 0px 8px 24px rgba(0, 0, 0, 0.12);
124
+ z-index: 9999;
125
+ animation: dropdown-open 120ms ease-out;
126
+ }
127
+
128
+ @keyframes dropdown-open {
129
+ from { opacity: 0; transform: scaleY(0.95); transform-origin: top; }
130
+ to { opacity: 1; transform: scaleY(1); transform-origin: top; }
131
+ }
132
+
133
+ /* ── Options ────────────────────────────────────────────────── */
134
+ .option {
135
+ box-sizing: border-box;
136
+ width: 100%;
137
+ min-height: 40px;
138
+ border-radius: var(--Border-2, 8px);
139
+ padding: var(--Size-3, 12px) var(--Size-4, 16px);
140
+ border: none;
141
+ background: transparent;
142
+ text-align: left;
143
+ color: var(--Gray-Gray-600, #475066);
144
+ font-size: var(--font-size-s, 12px);
145
+ font-family: inherit;
146
+ cursor: pointer;
147
+ display: flex;
148
+ align-items: center;
149
+ gap: var(--Size-2, 8px);
150
+ transition: background 0.15s ease;
151
+ }
152
+
153
+ .option:hover:not(:disabled) {
154
+ background: var(--Gray-Gray-50, #f7f8fa);
155
+ }
156
+
157
+ .option:disabled,
158
+ .disabled-option {
159
+ opacity: 0.5;
160
+ cursor: not-allowed;
161
+ }
162
+
163
+ .option.selected-option:not(.option-radio) {
164
+ background: var(--Primary-Primary-50, #fef8f2);
165
+ color: var(--Primary-Primary-500, #f49a3d);
166
+ }
167
+
168
+ /* ── Grouped options ─────────────────────────────────────────── */
169
+ .option-group-title {
170
+ padding: var(--Size-3, 12px) var(--Size-4, 16px);
171
+ font-size: var(--font-size-s, 12px);
172
+ font-weight: var(--font-weight-medium, 500);
173
+ color: var(--Gray-Gray-500, #69738c);
174
+ list-style: none;
175
+ }
176
+
177
+ .option-group {
178
+ padding-left: var(--Size-6, 32px);
179
+ }
180
+
181
+ /* ── Sticky search ───────────────────────────────────────────── */
182
+ .sticky-search {
183
+ position: sticky;
184
+ top: calc(-1 * var(--Size-4, 16px));
185
+ background: var(--Neutral-White, #fff);
186
+ z-index: 10;
187
+ margin: calc(-1 * var(--Size-4, 16px)) calc(-1 * var(--Size-4, 16px)) 0;
188
+ padding: var(--Size-2, 8px) var(--Size-4, 16px);
189
+ border-bottom: 1px solid var(--Gray-Gray-100, #e6eaf2);
190
+ list-style: none;
191
+ }
192
+
193
+ .search-wrapper {
194
+ display: flex;
195
+ align-items: center;
196
+ gap: 8px;
197
+ border: 1px solid var(--Gray-Gray-200, #c3c9d9);
198
+ border-radius: var(--Border-2, 8px);
199
+ padding: 6px 10px;
200
+ background: var(--Neutral-White, #fff);
201
+ }
202
+
203
+ .search-input {
204
+ flex: 1;
205
+ border: none;
206
+ outline: none;
207
+ font-size: var(--font-size-s, 12px);
208
+ font-family: inherit;
209
+ color: var(--Gray-Gray-700, #32394d);
210
+ background: transparent;
211
+ }
212
+
213
+ .search-input::placeholder {
214
+ color: var(--Gray-Gray-400, #858ea6);
215
+ }
216
+
217
+ .search-clear {
218
+ background: none;
219
+ border: none;
220
+ cursor: pointer;
221
+ padding: 0;
222
+ display: flex;
223
+ align-items: center;
224
+ }
225
+
226
+ /* ── Multi-select checkbox ───────────────────────────────────── */
227
+ .multi-checkbox {
228
+ width: 18px;
229
+ height: 18px;
230
+ min-width: 18px;
231
+ border-radius: var(--Border-1, 4px);
232
+ border: 2px solid var(--Gray-Gray-200, #c3c9d9);
233
+ display: flex;
234
+ align-items: center;
235
+ justify-content: center;
236
+ flex-shrink: 0;
237
+ transition: background 0.15s, border-color 0.15s;
238
+ }
239
+
240
+ .multi-checkbox.checked {
241
+ background: var(--Primary-Primary-500, #f49a3d);
242
+ border-color: var(--Primary-Primary-500, #f49a3d);
243
+ }
244
+
245
+ /* ── Radio options ───────────────────────────────────────────── */
246
+ .option-radio {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: 12px;
250
+ }
251
+
252
+ .option-radio.selected-option {
253
+ border-radius: var(--Border-2, 8px);
254
+ background: var(--Primary-Primary-50, #fef8f2);
255
+ color: var(--Primary-Primary-500, #f49a3d);
256
+ }
257
+
258
+ .option-radio.selected-option .option-second-label {
259
+ color: var(--Primary-Primary-500, #f49a3d);
260
+ }
261
+
262
+ .radio {
263
+ width: 20px;
264
+ height: 20px;
265
+ min-width: 20px;
266
+ border-radius: 50%;
267
+ border: 2px solid var(--Gray-Gray-200, #c3c9d9);
268
+ display: flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ flex-shrink: 0;
272
+ }
273
+
274
+ .radio.selected {
275
+ border-color: var(--Primary-Primary-500, #f49a3d);
276
+ }
277
+
278
+ .circle {
279
+ width: 12px;
280
+ height: 12px;
281
+ border-radius: 50%;
282
+ background: var(--Primary-Primary-500, #f49a3d);
283
+ }
284
+
285
+ .labels-container {
286
+ display: flex;
287
+ justify-content: space-between;
288
+ width: 100%;
289
+ min-width: 0;
290
+ }
291
+
292
+ .option-image {
293
+ width: 24px;
294
+ height: 24px;
295
+ border-radius: 60px;
296
+ object-fit: cover;
297
+ flex-shrink: 0;
298
+ }
299
+
300
+ .small-image {
301
+ width: 20px;
302
+ height: 20px;
303
+ }
304
+
305
+ .option-image-fallback {
306
+ width: 24px;
307
+ height: 24px;
308
+ border-radius: 60px;
309
+ background: var(--Primary-Primary-500, #f49a3d);
310
+ color: white;
311
+ font-size: 13px;
312
+ font-weight: bold;
313
+ display: flex;
314
+ justify-content: center;
315
+ align-items: center;
316
+ flex-shrink: 0;
317
+ }
318
+
319
+ .small-image.option-image-fallback {
320
+ width: 20px;
321
+ height: 20px;
322
+ }
323
+
324
+ .option-second-label {
325
+ color: var(--Gray-Gray-700, #32394d);
326
+ font-weight: 700;
327
+ white-space: nowrap;
328
+ }
329
+
330
+ /* ── Country flag placeholder ────────────────────────────────── */
331
+ .flag-placeholder {
332
+ font-size: 11px;
333
+ font-weight: 600;
334
+ color: var(--Gray-Gray-500, #69738c);
335
+ flex-shrink: 0;
336
+ }
337
+
338
+ /* ── Helper / error text ────────────────────────────────────── */
339
+ .select-helper,
340
+ .select-helper-error {
341
+ display: flex;
342
+ gap: var(--Size-1, 4px);
343
+ align-items: center;
344
+ margin-top: var(--Size-1, 4px);
345
+ }
346
+
347
+ .select-helper span {
348
+ color: var(--Gray-Gray-600, #475066);
349
+ font-size: var(--font-size-xs, 10px);
350
+ }
351
+
352
+ .select-helper-error span {
353
+ color: var(--Error-Error-500, #f46a6b);
354
+ font-size: var(--font-size-xs, 10px);
355
+ }
356
+
357
+ /* ── No results ─────────────────────────────────────────────── */
358
+ .no-results {
359
+ padding: var(--Size-3, 12px) var(--Size-4, 16px);
360
+ color: var(--Gray-Gray-400, #858ea6);
361
+ font-size: var(--font-size-s, 12px);
362
+ list-style: none;
363
+ text-align: center;
364
+ }