@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.
Files changed (54) hide show
  1. package/README.md +185 -0
  2. package/base/normalize.css +101 -0
  3. package/components/appbar.css +167 -0
  4. package/components/autocomplete-menu.css +142 -0
  5. package/components/avatar-add.css +112 -0
  6. package/components/avatar.css +253 -0
  7. package/components/badge-dot.css +78 -0
  8. package/components/badge.css +337 -0
  9. package/components/bar-chart-card.css +261 -0
  10. package/components/bar-chart.css +149 -0
  11. package/components/breadcrumbs.css +136 -0
  12. package/components/button.css +266 -0
  13. package/components/chart-tooltip.css +96 -0
  14. package/components/checkbox-label.css +53 -0
  15. package/components/checkbox.css +127 -0
  16. package/components/container-footer.css +22 -0
  17. package/components/container.css +17 -0
  18. package/components/date-picker-content.css +337 -0
  19. package/components/date-picker.css +103 -0
  20. package/components/date-range-picker-content.css +85 -0
  21. package/components/date-range-picker.css +72 -0
  22. package/components/dropdown-menu.css +204 -0
  23. package/components/dropdown.css +126 -0
  24. package/components/empty-state.css +83 -0
  25. package/components/featured-icon.css +194 -0
  26. package/components/illustrations.css +120 -0
  27. package/components/input-autocomplete.css +158 -0
  28. package/components/input-number.css +2 -0
  29. package/components/input-verification.css +137 -0
  30. package/components/input.css +374 -0
  31. package/components/loader-spinner.css +421 -0
  32. package/components/logo-box.css +85 -0
  33. package/components/month-picker-content.css +190 -0
  34. package/components/month-picker.css +83 -0
  35. package/components/nav-item.css +110 -0
  36. package/components/notification.css +262 -0
  37. package/components/page-navigation.css +294 -0
  38. package/components/picker-menu.css +43 -0
  39. package/components/pie-chart-card.css +213 -0
  40. package/components/pie-chart.css +80 -0
  41. package/components/product-switcher.css +127 -0
  42. package/components/property-switcher.css +95 -0
  43. package/components/radio-button-label.css +53 -0
  44. package/components/radio-button.css +134 -0
  45. package/components/sidebar.css +178 -0
  46. package/components/skeleton-loader.css +47 -0
  47. package/components/tag.css +214 -0
  48. package/components/textarea.css +211 -0
  49. package/components/toggle.css +298 -0
  50. package/components/tooltip.css +85 -0
  51. package/components/trend-chart-card.css +189 -0
  52. package/components/trend-chart.css +94 -0
  53. package/index.css +8115 -0
  54. 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
+ }