@actabldesign/bellhop-styles 0.0.3
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/README.md +185 -0
- package/base/normalize.css +101 -0
- package/components/appbar.css +167 -0
- package/components/autocomplete-menu.css +142 -0
- package/components/avatar-add.css +112 -0
- package/components/avatar.css +253 -0
- package/components/badge-dot.css +78 -0
- package/components/badge.css +337 -0
- package/components/bar-chart-card.css +261 -0
- package/components/bar-chart.css +149 -0
- package/components/breadcrumbs.css +136 -0
- package/components/button.css +266 -0
- package/components/chart-tooltip.css +96 -0
- package/components/checkbox-label.css +53 -0
- package/components/checkbox.css +127 -0
- package/components/container-footer.css +22 -0
- package/components/container.css +17 -0
- package/components/date-picker-content.css +337 -0
- package/components/date-picker.css +103 -0
- package/components/date-range-picker-content.css +85 -0
- package/components/date-range-picker.css +72 -0
- package/components/dropdown-menu.css +204 -0
- package/components/dropdown.css +126 -0
- package/components/empty-state.css +83 -0
- package/components/featured-icon.css +194 -0
- package/components/illustrations.css +120 -0
- package/components/input-autocomplete.css +158 -0
- package/components/input-number.css +2 -0
- package/components/input-verification.css +137 -0
- package/components/input.css +374 -0
- package/components/loader-spinner.css +421 -0
- package/components/logo-box.css +85 -0
- package/components/month-picker-content.css +190 -0
- package/components/month-picker.css +83 -0
- package/components/nav-item.css +110 -0
- package/components/notification.css +262 -0
- package/components/page-navigation.css +294 -0
- package/components/picker-menu.css +43 -0
- package/components/pie-chart-card.css +213 -0
- package/components/pie-chart.css +80 -0
- package/components/product-switcher.css +127 -0
- package/components/property-switcher.css +95 -0
- package/components/radio-button-label.css +53 -0
- package/components/radio-button.css +134 -0
- package/components/sidebar.css +178 -0
- package/components/skeleton-loader.css +47 -0
- package/components/tag.css +214 -0
- package/components/textarea.css +211 -0
- package/components/toggle.css +298 -0
- package/components/tooltip.css +85 -0
- package/components/trend-chart-card.css +189 -0
- package/components/trend-chart.css +94 -0
- package/index.css +8115 -0
- package/package.json +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# BellhopOS Styles
|
|
2
|
+
|
|
3
|
+
Shared CSS styles and design tokens for the BellhopOS design system. This package provides framework-agnostic styles that can be used with Angular, React, or any other framework.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @actabldesign/bellhop-styles
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Import All Styles
|
|
14
|
+
|
|
15
|
+
Import the complete style package in your main CSS or TypeScript/JavaScript file:
|
|
16
|
+
|
|
17
|
+
```css
|
|
18
|
+
@import '@actabldesign/bellhop-styles';
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
or in TypeScript/JavaScript:
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import '@actabldesign/bellhop-styles';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Import Individual Style Modules
|
|
28
|
+
|
|
29
|
+
For more granular control, you can import individual style modules:
|
|
30
|
+
|
|
31
|
+
```css
|
|
32
|
+
@import '@actabldesign/bellhop-styles/base/colors.css';
|
|
33
|
+
@import '@actabldesign/bellhop-styles/base/typography.css';
|
|
34
|
+
@import '@actabldesign/bellhop-styles/base/spacing.css';
|
|
35
|
+
@import '@actabldesign/bellhop-styles/base/shadows.css';
|
|
36
|
+
@import '@actabldesign/bellhop-styles/base/radius.css';
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Using Design Tokens
|
|
40
|
+
|
|
41
|
+
All design tokens are available as CSS custom properties:
|
|
42
|
+
|
|
43
|
+
```css
|
|
44
|
+
.my-component {
|
|
45
|
+
/* Colors */
|
|
46
|
+
background-color: var(--color-primary-500);
|
|
47
|
+
color: var(--color-neutral-800);
|
|
48
|
+
|
|
49
|
+
/* Spacing */
|
|
50
|
+
padding: var(--spacing-4);
|
|
51
|
+
margin: var(--spacing-2);
|
|
52
|
+
|
|
53
|
+
/* Typography */
|
|
54
|
+
font-family: var(--font-inter);
|
|
55
|
+
font-size: var(--text-sm-size);
|
|
56
|
+
line-height: var(--text-sm-line);
|
|
57
|
+
|
|
58
|
+
/* Shadows */
|
|
59
|
+
box-shadow: var(--shadow-md);
|
|
60
|
+
|
|
61
|
+
/* Border Radius */
|
|
62
|
+
border-radius: var(--radius-md);
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Design Tokens Reference
|
|
67
|
+
|
|
68
|
+
### Colors
|
|
69
|
+
|
|
70
|
+
#### Primary Colors
|
|
71
|
+
- `--color-primary-50` to `--color-primary-900`
|
|
72
|
+
- `--color-primary-500` (default brand color)
|
|
73
|
+
|
|
74
|
+
#### Neutral Colors
|
|
75
|
+
- `--color-neutral-50` to `--color-neutral-900`
|
|
76
|
+
- `--color-white`, `--color-black`
|
|
77
|
+
|
|
78
|
+
#### Semantic Colors
|
|
79
|
+
- **Success**: `--color-success-50` to `--color-success-900`
|
|
80
|
+
- **Warning**: `--color-warning-50` to `--color-warning-900`
|
|
81
|
+
- **Error**: `--color-error-50` to `--color-error-900`
|
|
82
|
+
- **Info**: `--color-info-50` to `--color-info-900`
|
|
83
|
+
|
|
84
|
+
### Typography
|
|
85
|
+
|
|
86
|
+
#### Font Families
|
|
87
|
+
- `--font-inter`: Primary font family
|
|
88
|
+
|
|
89
|
+
#### Font Sizes
|
|
90
|
+
- `--text-xs-size` (0.75rem)
|
|
91
|
+
- `--text-sm-size` (0.875rem)
|
|
92
|
+
- `--text-base-size` (1rem)
|
|
93
|
+
- `--text-lg-size` (1.125rem)
|
|
94
|
+
- `--text-xl-size` (1.25rem)
|
|
95
|
+
- And more...
|
|
96
|
+
|
|
97
|
+
#### Font Weights
|
|
98
|
+
- `--font-light` (300)
|
|
99
|
+
- `--font-normal` (400)
|
|
100
|
+
- `--font-medium` (500)
|
|
101
|
+
- `--font-semibold` (600)
|
|
102
|
+
- `--font-bold` (700)
|
|
103
|
+
|
|
104
|
+
### Spacing
|
|
105
|
+
|
|
106
|
+
Spacing scale from 0.5 to 96 (in 0.25rem increments):
|
|
107
|
+
- `--spacing-0-5` (0.125rem)
|
|
108
|
+
- `--spacing-1` (0.25rem)
|
|
109
|
+
- `--spacing-2` (0.5rem)
|
|
110
|
+
- `--spacing-4` (1rem)
|
|
111
|
+
- `--spacing-8` (2rem)
|
|
112
|
+
- And more...
|
|
113
|
+
|
|
114
|
+
### Shadows
|
|
115
|
+
|
|
116
|
+
- `--shadow-xs`: Extra small shadow
|
|
117
|
+
- `--shadow-sm`: Small shadow
|
|
118
|
+
- `--shadow-md`: Medium shadow
|
|
119
|
+
- `--shadow-lg`: Large shadow
|
|
120
|
+
- `--shadow-xl`: Extra large shadow
|
|
121
|
+
|
|
122
|
+
### Border Radius
|
|
123
|
+
|
|
124
|
+
- `--radius-sm` (0.125rem)
|
|
125
|
+
- `--radius-md` (0.25rem)
|
|
126
|
+
- `--radius-lg` (0.5rem)
|
|
127
|
+
- `--radius-xl` (1rem)
|
|
128
|
+
- `--radius-full` (9999px)
|
|
129
|
+
|
|
130
|
+
## Component Styles
|
|
131
|
+
|
|
132
|
+
The package includes pre-built component styles that follow the BellhopOS design system. These are automatically applied when using BellhopOS components.
|
|
133
|
+
|
|
134
|
+
### Layout Classes
|
|
135
|
+
|
|
136
|
+
```css
|
|
137
|
+
.app-layout { /* Dashboard layout */ }
|
|
138
|
+
.app-sidebar { /* Sidebar container */ }
|
|
139
|
+
.app-main { /* Main content area */ }
|
|
140
|
+
.bellhop-content-container { /* Content wrapper */ }
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Framework Integration
|
|
144
|
+
|
|
145
|
+
### React
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
import '@actabldesign/bellhop-styles';
|
|
149
|
+
|
|
150
|
+
function App() {
|
|
151
|
+
return (
|
|
152
|
+
<div className="app-layout">
|
|
153
|
+
{/* Your components */}
|
|
154
|
+
</div>
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Angular
|
|
160
|
+
|
|
161
|
+
Add to your `src/styles.css`:
|
|
162
|
+
|
|
163
|
+
```css
|
|
164
|
+
@import '@actabldesign/bellhop-styles';
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Vanilla JavaScript/HTML
|
|
168
|
+
|
|
169
|
+
```html
|
|
170
|
+
<link rel="stylesheet" href="node_modules/@actabldesign/bellhop-styles/index.css">
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Development
|
|
174
|
+
|
|
175
|
+
This package is built using Rollup and PostCSS.
|
|
176
|
+
|
|
177
|
+
### Building
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
npm run build:lib:styles
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## License
|
|
184
|
+
|
|
185
|
+
MIT
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/* Base normalization for consistent rendering across frameworks */
|
|
2
|
+
|
|
3
|
+
/* Ensure consistent font rendering */
|
|
4
|
+
* {
|
|
5
|
+
-webkit-font-smoothing: antialiased;
|
|
6
|
+
-moz-osx-font-smoothing: grayscale;
|
|
7
|
+
text-rendering: optimizeLegibility;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Set default font family with proper fallbacks */
|
|
11
|
+
body {
|
|
12
|
+
font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Ensure consistent box sizing */
|
|
16
|
+
*,
|
|
17
|
+
*::before,
|
|
18
|
+
*::after {
|
|
19
|
+
box-sizing: border-box;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Remove default margins */
|
|
23
|
+
body,
|
|
24
|
+
h1,
|
|
25
|
+
h2,
|
|
26
|
+
h3,
|
|
27
|
+
h4,
|
|
28
|
+
h5,
|
|
29
|
+
h6,
|
|
30
|
+
p,
|
|
31
|
+
figure,
|
|
32
|
+
blockquote,
|
|
33
|
+
dl,
|
|
34
|
+
dd {
|
|
35
|
+
margin: 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Set core root defaults */
|
|
39
|
+
html:focus-within {
|
|
40
|
+
scroll-behavior: smooth;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Set core body defaults */
|
|
44
|
+
body {
|
|
45
|
+
min-height: 100vh;
|
|
46
|
+
text-rendering: optimizeSpeed;
|
|
47
|
+
line-height: 1.5;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Make images easier to work with */
|
|
51
|
+
img,
|
|
52
|
+
picture,
|
|
53
|
+
video,
|
|
54
|
+
canvas,
|
|
55
|
+
svg {
|
|
56
|
+
display: block;
|
|
57
|
+
max-width: 100%;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Inherit fonts for inputs and buttons */
|
|
61
|
+
input,
|
|
62
|
+
button,
|
|
63
|
+
textarea,
|
|
64
|
+
select {
|
|
65
|
+
font: inherit;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* Remove native browser focus outlines for form elements */
|
|
69
|
+
/* Components should provide their own focus styling */
|
|
70
|
+
input,
|
|
71
|
+
textarea,
|
|
72
|
+
button,
|
|
73
|
+
select {
|
|
74
|
+
outline: none;
|
|
75
|
+
box-shadow: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
input:focus,
|
|
79
|
+
textarea:focus,
|
|
80
|
+
button:focus,
|
|
81
|
+
select:focus {
|
|
82
|
+
outline: none;
|
|
83
|
+
border: none;
|
|
84
|
+
box-shadow: none;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Remove all animations, transitions and smooth scroll for people that prefer not to see them */
|
|
88
|
+
@media (prefers-reduced-motion: reduce) {
|
|
89
|
+
html:focus-within {
|
|
90
|
+
scroll-behavior: auto;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
*,
|
|
94
|
+
*::before,
|
|
95
|
+
*::after {
|
|
96
|
+
animation-duration: 0.01ms !important;
|
|
97
|
+
animation-iteration-count: 1 !important;
|
|
98
|
+
transition-duration: 0.01ms !important;
|
|
99
|
+
scroll-behavior: auto !important;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
.appbar {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: space-between;
|
|
5
|
+
height: 56px;
|
|
6
|
+
padding: 0 var(--spacing-sm);
|
|
7
|
+
background-color: var(--color-white);
|
|
8
|
+
border-bottom: 1px solid var(--color-neutral-200);
|
|
9
|
+
font-family: var(--font-inter);
|
|
10
|
+
position: sticky;
|
|
11
|
+
top: 0;
|
|
12
|
+
z-index: 1000;
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
user-select: none;
|
|
15
|
+
-webkit-user-select: none;
|
|
16
|
+
-moz-user-select: none;
|
|
17
|
+
-ms-user-select: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Left Section */
|
|
21
|
+
.left-section {
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
gap: var(--spacing-xl);
|
|
25
|
+
flex-shrink: 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Menu toggle styles removed - now using app-button component */
|
|
29
|
+
|
|
30
|
+
.logo {
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
width: var(--spacing-4xl);
|
|
35
|
+
height: var(--spacing-4xl);
|
|
36
|
+
color: var(--color-brand-500);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.logo-image {
|
|
40
|
+
width: 36px;
|
|
41
|
+
height: 36px;
|
|
42
|
+
object-fit: contain;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.property-name {
|
|
46
|
+
font-size: var(--text-md-size);
|
|
47
|
+
font-weight: var(--weight-semibold);
|
|
48
|
+
color: var(--color-neutral-800);
|
|
49
|
+
line-height: var(--text-md-line);
|
|
50
|
+
white-space: nowrap;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Center Section */
|
|
54
|
+
.center-section {
|
|
55
|
+
flex: 1;
|
|
56
|
+
display: flex;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
min-width: 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.breadcrumbs {
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
gap: var(--spacing-md);
|
|
65
|
+
max-width: 100%;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.breadcrumb-item {
|
|
69
|
+
font-size: var(--text-sm-size);
|
|
70
|
+
font-weight: var(--weight-regular);
|
|
71
|
+
line-height: var(--text-sm-line);
|
|
72
|
+
color: var(--color-neutral-500);
|
|
73
|
+
background: none;
|
|
74
|
+
border: none;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
padding: var(--spacing-xs) var(--spacing-md);
|
|
77
|
+
border-radius: var(--radius-xs);
|
|
78
|
+
transition: all 0.2s ease;
|
|
79
|
+
white-space: nowrap;
|
|
80
|
+
text-overflow: ellipsis;
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
.breadcrumb-item.active {
|
|
86
|
+
color: var(--color-neutral-800);
|
|
87
|
+
font-weight: var(--weight-medium);
|
|
88
|
+
cursor: default;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.breadcrumb-item:disabled {
|
|
92
|
+
cursor: default;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.breadcrumb-separator {
|
|
96
|
+
color: var(--color-neutral-200);
|
|
97
|
+
flex-shrink: 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Right Section */
|
|
101
|
+
.right-section {
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
gap: var(--spacing-md);
|
|
105
|
+
flex-shrink: 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Icon button styles removed - now using app-button component */
|
|
109
|
+
|
|
110
|
+
.icon-button-wrapper {
|
|
111
|
+
position: relative;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.icon-badge-dot {
|
|
115
|
+
position: absolute;
|
|
116
|
+
top: 0;
|
|
117
|
+
right: 4px;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Responsive Design */
|
|
121
|
+
@media (max-width: 768px) {
|
|
122
|
+
.appbar {
|
|
123
|
+
padding: 0 16px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.property-name {
|
|
127
|
+
display: none;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.left-section {
|
|
131
|
+
gap: 12px;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.breadcrumbs {
|
|
135
|
+
max-width: 200px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.breadcrumb-item {
|
|
139
|
+
font-size: 13px;
|
|
140
|
+
padding: 2px 6px;
|
|
141
|
+
max-width: 80px;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@media (max-width: 480px) {
|
|
146
|
+
.appbar {
|
|
147
|
+
padding: 0 12px;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.breadcrumbs {
|
|
151
|
+
max-width: 150px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.breadcrumb-item {
|
|
155
|
+
font-size: 12px;
|
|
156
|
+
max-width: 60px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.right-section {
|
|
160
|
+
gap: 4px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.icon-button {
|
|
164
|
+
width: 32px;
|
|
165
|
+
height: 32px;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
AUTOCOMPLETE MENU COMPONENT
|
|
3
|
+
Shared styles for all frameworks
|
|
4
|
+
========================================================================== */
|
|
5
|
+
|
|
6
|
+
.autocomplete-menu {
|
|
7
|
+
position: absolute;
|
|
8
|
+
z-index: 1000;
|
|
9
|
+
top: calc(100% + var(--spacing-sm));
|
|
10
|
+
left: 0;
|
|
11
|
+
right: 0;
|
|
12
|
+
width: 100%;
|
|
13
|
+
min-width: 240px;
|
|
14
|
+
background: var(--color-white);
|
|
15
|
+
border-radius: var(--radius-md);
|
|
16
|
+
box-shadow: 0px 32px 64px -12px rgba(64, 73, 104, 0.14),
|
|
17
|
+
0px 0px 1px 1px rgba(64, 73, 104, 0.1);
|
|
18
|
+
border: 1px solid var(--color-neutral-200);
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
overflow-y: auto;
|
|
21
|
+
/* Add padding like dropdown-menu items container */
|
|
22
|
+
padding: var(--spacing-xs) 0;
|
|
23
|
+
/* Optimizations for stable layout */
|
|
24
|
+
box-sizing: border-box;
|
|
25
|
+
transform: translateZ(0); /* Hardware acceleration */
|
|
26
|
+
will-change: opacity, transform;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
/* Menu Items - Match dropdown-menu styling exactly */
|
|
31
|
+
.autocomplete-item {
|
|
32
|
+
padding: var(--spacing-xxs) var(--spacing-sm);
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.autocomplete-item.disabled {
|
|
37
|
+
opacity: 0.5;
|
|
38
|
+
cursor: not-allowed;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.item-content {
|
|
42
|
+
display: flex;
|
|
43
|
+
align-items: center;
|
|
44
|
+
justify-content: space-between;
|
|
45
|
+
gap: var(--spacing-lg);
|
|
46
|
+
padding: var(--spacing-xl) var(--spacing-md);
|
|
47
|
+
border-radius: var(--radius-sm);
|
|
48
|
+
transition: background-color 0.15s ease;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.autocomplete-item:hover:not(.disabled) .item-content {
|
|
52
|
+
background: var(--color-neutral-100);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.autocomplete-item.selected .item-content {
|
|
56
|
+
background: var(--color-neutral-100);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.item-text {
|
|
60
|
+
font-family: var(--font-inter);
|
|
61
|
+
font-weight: var(--weight-medium);
|
|
62
|
+
font-size: var(--text-sm-size);
|
|
63
|
+
line-height: var(--text-sm-line);
|
|
64
|
+
color: var(--color-neutral-700);
|
|
65
|
+
flex: 1;
|
|
66
|
+
white-space: nowrap;
|
|
67
|
+
overflow: hidden;
|
|
68
|
+
text-overflow: ellipsis;
|
|
69
|
+
min-width: 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.autocomplete-item.selected .item-text {
|
|
73
|
+
color: var(--color-neutral-700);
|
|
74
|
+
font-weight: var(--weight-medium);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.autocomplete-item.disabled .item-text {
|
|
78
|
+
color: var(--color-neutral-400);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Highlight matching text */
|
|
82
|
+
.item-text .highlight {
|
|
83
|
+
font-weight: var(--weight-semibold);
|
|
84
|
+
color: var(--color-neutral-800);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Check icon for multi-select */
|
|
88
|
+
.check-icon {
|
|
89
|
+
font-size: var(--text-xl-size);
|
|
90
|
+
color: var(--color-brand-600);
|
|
91
|
+
flex-shrink: 0;
|
|
92
|
+
font-variation-settings: 'FILL' 1, 'wght' 500, 'GRAD' 0, 'opsz' 24;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Custom Scrollbar */
|
|
96
|
+
.autocomplete-menu::-webkit-scrollbar {
|
|
97
|
+
width: 6px;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.autocomplete-menu::-webkit-scrollbar-track {
|
|
101
|
+
background: var(--color-neutral-50);
|
|
102
|
+
border-radius: var(--radius-xs);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.autocomplete-menu::-webkit-scrollbar-thumb {
|
|
106
|
+
background: var(--color-neutral-200);
|
|
107
|
+
border-radius: var(--radius-xs);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.autocomplete-menu::-webkit-scrollbar-thumb:hover {
|
|
111
|
+
background: var(--color-neutral-300);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* Firefox scrollbar */
|
|
115
|
+
.autocomplete-menu {
|
|
116
|
+
scrollbar-width: thin;
|
|
117
|
+
scrollbar-color: var(--color-neutral-200) var(--color-neutral-50);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* High contrast mode support */
|
|
121
|
+
@media (prefers-contrast: high) {
|
|
122
|
+
.autocomplete-menu {
|
|
123
|
+
border-width: 2px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.autocomplete-item.selected {
|
|
127
|
+
outline: 2px solid var(--color-brand-500);
|
|
128
|
+
outline-offset: -2px;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* Reduced motion support */
|
|
133
|
+
@media (prefers-reduced-motion: reduce) {
|
|
134
|
+
.autocomplete-menu.animate-dropdown-enter,
|
|
135
|
+
.autocomplete-menu.animate-dropdown-exit {
|
|
136
|
+
animation: none;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.autocomplete-item {
|
|
140
|
+
transition: none;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
AVATAR ADD BUTTON COMPONENT
|
|
3
|
+
Shared styles for all frameworks
|
|
4
|
+
========================================================================== */
|
|
5
|
+
|
|
6
|
+
/* Base Button */
|
|
7
|
+
.avatar-add {
|
|
8
|
+
position: relative;
|
|
9
|
+
display: inline-flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
background-color: var(--color-white);
|
|
13
|
+
border: 1px dashed var(--color-neutral-300);
|
|
14
|
+
border-radius: 50%;
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
transition: all 0.2s ease-in-out;
|
|
17
|
+
padding: 0;
|
|
18
|
+
outline: none;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Button Sizes */
|
|
22
|
+
.avatar-add-xs {
|
|
23
|
+
width: 24px;
|
|
24
|
+
height: 24px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.avatar-add-sm {
|
|
28
|
+
width: 32px;
|
|
29
|
+
height: 32px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.avatar-add-md {
|
|
33
|
+
width: 40px;
|
|
34
|
+
height: 40px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* ==========================================================================
|
|
38
|
+
BUTTON STATES
|
|
39
|
+
========================================================================== */
|
|
40
|
+
|
|
41
|
+
/* Hover State */
|
|
42
|
+
.avatar-add-hover,
|
|
43
|
+
.avatar-add:hover:not(:disabled) {
|
|
44
|
+
background-color: var(--color-neutral-50);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.avatar-add-hover .avatar-add-icon,
|
|
48
|
+
.avatar-add:hover:not(:disabled) .avatar-add-icon {
|
|
49
|
+
color: var(--color-neutral-600);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Focus State */
|
|
53
|
+
.avatar-add-focus,
|
|
54
|
+
.avatar-add:focus-visible {
|
|
55
|
+
background-color: var(--color-white);
|
|
56
|
+
box-shadow: 0 0 0 2px var(--color-white), 0 0 0 4px var(--color-brand-500);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Disabled State */
|
|
60
|
+
.avatar-add-disabled,
|
|
61
|
+
.avatar-add:disabled {
|
|
62
|
+
background-color: var(--color-neutral-50);
|
|
63
|
+
cursor: not-allowed;
|
|
64
|
+
pointer-events: none;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.avatar-add-disabled .avatar-add-icon,
|
|
68
|
+
.avatar-add:disabled .avatar-add-icon {
|
|
69
|
+
color: var(--color-neutral-300);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* ==========================================================================
|
|
73
|
+
CONTENT ELEMENTS
|
|
74
|
+
========================================================================== */
|
|
75
|
+
|
|
76
|
+
/* Content Container */
|
|
77
|
+
.avatar-add-content {
|
|
78
|
+
display: flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
justify-content: center;
|
|
81
|
+
padding: 4px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Icon */
|
|
85
|
+
.avatar-add-icon {
|
|
86
|
+
color: var(--color-neutral-500);
|
|
87
|
+
line-height: 1;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Icon Sizes - adjusted for Material Symbols stroke weight */
|
|
91
|
+
.avatar-add-xs .avatar-add-icon,
|
|
92
|
+
.avatar-add-sm .avatar-add-icon {
|
|
93
|
+
font-variation-settings: 'wght' 400;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.avatar-add-md .avatar-add-icon {
|
|
97
|
+
font-variation-settings: 'wght' 500;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* ==========================================================================
|
|
101
|
+
TOOLTIP POSITIONING
|
|
102
|
+
========================================================================== */
|
|
103
|
+
|
|
104
|
+
.avatar-add-button {
|
|
105
|
+
position: relative;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.avatar-add-tooltip {
|
|
109
|
+
position: absolute;
|
|
110
|
+
top: 0;
|
|
111
|
+
left: 50%;
|
|
112
|
+
}
|