@rhavenside/baseline-ui 1.0.0 → 1.0.2

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 CHANGED
@@ -1,43 +1,51 @@
1
- # Baseline Design Framework
1
+ # Baseline UI
2
2
 
3
- Ein neutrales, konfigurierbares Design-Framework mit SCSS-Quellen und kompiliertem CSS. Framework-unabhängig und für alle Projekte nutzbar.
3
+ Ein technisches Glas-Design-Framework mit SCSS-Quellen und kompiliertem CSS.
4
4
 
5
- ## 🎯 Philosophie
5
+ ## Installation
6
6
 
7
- Baseline ist **kein Projekt-CSS**, sondern ein **Design-Framework**:
8
-
9
- - ✅ **Darf**: Layout, Grid, Spacing, Typografie, Komponenten liefern
10
- - ✅ **Darf**: Neutral, konfigurierbar und stabil sein
11
- - ❌ **Darf nicht**: Projektbezogene Farben, Logos oder Sonderfälle enthalten
12
- - ❌ **Darf nicht**: App-Logik oder Zustände kennen
13
-
14
- ## 📦 Installation
15
-
16
- ### CDN (Schnellstart)
7
+ ### npm
17
8
 
18
- ```html
19
- <link rel="stylesheet" href="https://cdn.example.com/baseline/1.0.0/baseline.min.css">
9
+ ```bash
10
+ npm install @rhavenside/baseline-ui
20
11
  ```
21
12
 
22
- ### npm
13
+ ### CDN
23
14
 
24
- ```bash
25
- npm install @baseline/ui
15
+ ```html
16
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@rhavenside/baseline-ui@latest/dist/baseline.min.css">
26
17
  ```
27
18
 
28
19
  ### SCSS Import
29
20
 
30
21
  ```scss
31
- @use '@baseline/ui/src/baseline';
22
+ @use '@rhavenside/baseline-ui/src/baseline';
32
23
  ```
33
24
 
34
25
  ### CSS Import
35
26
 
36
27
  ```css
37
- @import '@baseline/ui/dist/baseline.css';
28
+ @import '@rhavenside/baseline-ui/dist/baseline.css';
38
29
  ```
39
30
 
40
- ## 🚀 Schnellstart
31
+ ### JavaScript (Optional)
32
+
33
+ ```html
34
+ <!-- CDN -->
35
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@rhavenside/baseline-ui@latest/dist/baseline.min.js"></script>
36
+ ```
37
+
38
+ ```javascript
39
+ // ES Module Import
40
+ import '@rhavenside/baseline-ui/dist/baseline.js';
41
+
42
+ // Oder manuell
43
+ import { initModal, openModal, closeModal } from '@rhavenside/baseline-ui/dist/baseline.js';
44
+ ```
45
+
46
+ ## Verwendung
47
+
48
+ ### HTML
41
49
 
42
50
  ```html
43
51
  <!DOCTYPE html>
@@ -45,62 +53,18 @@ npm install @baseline/ui
45
53
  <head>
46
54
  <meta charset="UTF-8">
47
55
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
48
- <title>Baseline Framework</title>
49
- <link rel="stylesheet" href="dist/baseline.min.css">
56
+ <title>Baseline UI</title>
57
+ <link rel="stylesheet" href="node_modules/@rhavenside/baseline-ui/dist/baseline.css">
50
58
  </head>
51
59
  <body>
52
60
  <div class="bl-container">
53
- <h1>Willkommen bei Baseline</h1>
61
+ <h1>Willkommen</h1>
54
62
  <button class="bl-btn bl-btn-primary">Klick mich</button>
55
63
  </div>
56
64
  </body>
57
65
  </html>
58
66
  ```
59
67
 
60
- ## 📚 Dokumentation
61
-
62
- ### Design Tokens
63
-
64
- Alle Design-Tokens sind als CSS Custom Properties verfügbar:
65
-
66
- ```css
67
- :root {
68
- --color-primary: #111827;
69
- --spacing-md: 1rem;
70
- --font-size-base: 1rem;
71
- --border-radius-md: 0.25rem;
72
- /* ... */
73
- }
74
- ```
75
-
76
- ### Layout-System
77
-
78
- #### Container
79
-
80
- ```html
81
- <div class="bl-container">Maximale Breite mit Padding</div>
82
- <div class="bl-container-fluid">Volle Breite mit Padding</div>
83
- ```
84
-
85
- #### Flexbox Grid (12 Spalten)
86
-
87
- ```html
88
- <div class="bl-row">
89
- <div class="bl-col-6">50% Breite</div>
90
- <div class="bl-col-6">50% Breite</div>
91
- </div>
92
- ```
93
-
94
- #### CSS Grid
95
-
96
- ```html
97
- <div class="bl-grid bl-grid-cols-3 bl-gap-md">
98
- <div>Item 1</div>
99
- <div>Item 2</div>
100
- <div>Item 3</div>
101
- </div>
102
- ```
103
-
104
68
  ### Komponenten
105
69
 
106
70
  #### Button
@@ -122,9 +86,6 @@ Alle Design-Tokens sind als CSS Custom Properties verfügbar:
122
86
  <div class="bl-card-body">
123
87
  <p>Inhalt</p>
124
88
  </div>
125
- <div class="bl-card-footer">
126
- <button class="bl-btn bl-btn-primary">Aktion</button>
127
- </div>
128
89
  </div>
129
90
  ```
130
91
 
@@ -134,139 +95,75 @@ Alle Design-Tokens sind als CSS Custom Properties verfügbar:
134
95
  <div class="bl-form-group">
135
96
  <label class="bl-form-label" for="email">E-Mail</label>
136
97
  <input type="email" id="email" class="bl-input" placeholder="name@example.com">
137
- <span class="bl-form-helper">Wir teilen Ihre E-Mail nicht.</span>
138
98
  </div>
139
99
  ```
140
100
 
141
- ### Utilities
142
-
143
- #### Spacing
144
-
145
- ```html
146
- <div class="m-md p-lg">Margin & Padding</div>
147
- <div class="mt-xl mb-sm">Top & Bottom</div>
148
- ```
149
-
150
- #### Text
101
+ #### Grid
151
102
 
152
103
  ```html
153
- <p class="bl-text-center bl-text-lg bl-font-bold">Zentrierter, großer, fetter Text</p>
154
- ```
155
-
156
- #### Display
157
-
158
- ```html
159
- <div class="bl-d-flex bl-justify-center bl-items-center">Flexbox Center</div>
160
- ```
161
-
162
- ## 🎨 Theming
163
-
164
- ### Dark Mode (Automatisch)
165
-
166
- Das Framework unterstützt automatisch `prefers-color-scheme: dark`:
167
-
168
- ```css
169
- @media (prefers-color-scheme: dark) {
170
- /* Dark Mode Styles werden automatisch angewendet */
171
- }
104
+ <div class="bl-row">
105
+ <div class="bl-col-6">50% Breite</div>
106
+ <div class="bl-col-6">50% Breite</div>
107
+ </div>
172
108
  ```
173
109
 
174
- ### Manuelles Theme-Toggle
110
+ ### Utilities
175
111
 
176
112
  ```html
177
- <html class="bl-theme-dark">
178
- <!-- Dark Mode aktiviert -->
179
- </html>
113
+ <div class="m-md p-lg">Margin & Padding</div>
114
+ <div class="bl-text-center bl-text-lg">Zentrierter Text</div>
115
+ <div class="bl-d-flex bl-justify-center">Flexbox Center</div>
180
116
  ```
181
117
 
182
- Oder via Data-Attribut:
183
-
184
- ```html
185
- <html data-theme="dark">
186
- <!-- Dark Mode aktiviert -->
187
- </html>
188
- ```
118
+ ### Design Tokens
189
119
 
190
- ### Custom Properties überschreiben
120
+ Alle Design-Tokens sind als CSS Custom Properties verfügbar:
191
121
 
192
122
  ```css
193
123
  :root {
194
- --color-primary: #3b82f6; /* Eigene Primärfarbe */
195
- --spacing-md: 1.25rem; /* Eigene Abstände */
124
+ --color-accent: #4A9EFF;
125
+ --color-bg: #1A1A1A;
126
+ --spacing-md: 1rem;
127
+ --font-size-base: 1rem;
196
128
  }
197
129
  ```
198
130
 
199
- ## Accessibility
200
-
201
- Baseline ist **WCAG 2.1 AA-konform**:
202
-
203
- - Focus-Styles für alle interaktiven Elemente
204
- - Screen-Reader-Utilities (`.bl-sr-only`)
205
- - Skip-Links (`.bl-skip-link`)
206
- - High-Contrast-Mode Support
207
- - Reduced Motion Support
208
-
209
- ## 🛠️ Entwicklung
210
-
211
- ### Build
212
-
213
- ```bash
214
- npm run build
215
- ```
131
+ ### JavaScript API
216
132
 
217
- ### Watch Mode
133
+ Baseline UI bietet optionales JavaScript für interaktive Komponenten:
218
134
 
219
- ```bash
220
- npm run watch
221
- ```
135
+ #### Auto-Initialisierung
222
136
 
223
- ### Storybook
137
+ Alle Komponenten werden automatisch initialisiert, wenn das JavaScript geladen wird:
224
138
 
225
- ```bash
226
- npm run docs:dev
139
+ ```html
140
+ <script type="module" src="node_modules/@rhavenside/baseline-ui/dist/baseline.js"></script>
227
141
  ```
228
142
 
229
- ## 📖 Komponenten-Übersicht
143
+ #### Manuelle Verwendung
230
144
 
231
- - **Button** - Primäre, sekundäre, Outline, Ghost, Link Varianten
232
- - **Form** - Input, Select, Textarea, Checkbox, Radio, Switch, File, Range
233
- - **Card** - Header, Body, Footer mit Varianten
234
- - **Alert** - Info, Success, Warning, Error mit Dismiss-Funktion
235
- - **Badge** - Varianten + Pills
236
- - **Modal** - Dialog mit Backdrop, Header, Body, Footer
237
- - **Dropdown** - Trigger + Menu
238
- - **Navigation** - Horizontal, Vertical, Tabs, Pills, Breadcrumb, Pagination
239
- - **Table** - Striped, Bordered, Hover, Responsive
240
- - **Tooltip** - Alle Positionen (top, right, bottom, left)
241
- - **Progress** - Determinate, Indeterminate, Striped
242
- - **Spinner** - Loading-Indikatoren
145
+ ```javascript
146
+ import { initModal, openModal, closeModal } from '@rhavenside/baseline-ui/dist/baseline.js';
243
147
 
244
- ## 🌐 Browser-Support
148
+ // Modal öffnen
149
+ openModal('my-modal');
245
150
 
246
- - Chrome (letzte 2 Versionen)
247
- - Firefox (letzte 2 Versionen)
248
- - Safari (letzte 2 Versionen)
249
- - Edge (letzte 2 Versionen)
151
+ // Modal schließen
152
+ closeModal('my-modal');
250
153
 
251
- ## 📝 Versionierung
154
+ // Manuell initialisieren
155
+ const modal = document.getElementById('my-modal');
156
+ initModal(modal);
157
+ ```
252
158
 
253
- Baseline verwendet [Semantic Versioning](https://semver.org/):
159
+ #### Verfügbare Funktionen
254
160
 
255
- - **1.x** = Stabil
256
- - Breaking Changes nur bei Major-Version
257
- - Changelog wird immer gepflegt
161
+ - **Modal**: `initModal()`, `openModal()`, `closeModal()`
162
+ - **Dropdown**: `initDropdown()`
163
+ - **Tooltip**: `initTooltip()`
164
+ - **Tabs**: `initTabs()`
165
+ - **Alert**: `initAlert()`, `dismissAlert()`
258
166
 
259
- ## 📄 Lizenz
167
+ ## Lizenz
260
168
 
261
169
  MIT License - siehe [LICENSE](LICENSE) Datei
262
-
263
- ## 🤝 Beitragen
264
-
265
- Beiträge sind willkommen! Bitte erstelle ein Issue oder einen Pull Request.
266
-
267
- ## 🔗 Links
268
-
269
- - [GitHub](https://github.com/yourusername/baseline)
270
- - [Dokumentation](https://baseline.example.com)
271
- - [Changelog](CHANGELOG.md)
272
-
package/dist/baseline.css CHANGED
@@ -120,7 +120,7 @@
120
120
 
121
121
  :root {
122
122
  --z-index-base: 0;
123
- --z-index-dropdown: 1000;
123
+ --z-index-dropdown: 9999;
124
124
  --z-index-sticky: 1020;
125
125
  --z-index-fixed: 1030;
126
126
  --z-index-modal-backdrop: 1040;
@@ -3066,29 +3066,159 @@ textarea {
3066
3066
  font-size: var(--form-input-font-size);
3067
3067
  line-height: var(--form-input-line-height);
3068
3068
  color: var(--color-text);
3069
- background: var(--glass-bg-light);
3069
+ background: var(--glass-bg-medium);
3070
3070
  border: 1px solid var(--glass-border-medium);
3071
- border-radius: var(--tech-border-radius-sm);
3072
- backdrop-filter: blur(var(--glass-blur-md));
3073
- -webkit-backdrop-filter: blur(var(--glass-blur-md));
3071
+ border-radius: var(--tech-border-radius-md);
3072
+ backdrop-filter: blur(var(--glass-blur-lg));
3073
+ -webkit-backdrop-filter: blur(var(--glass-blur-lg));
3074
3074
  transition: var(--transition-base);
3075
3075
  cursor: pointer;
3076
3076
  appearance: none;
3077
+ -webkit-appearance: none;
3078
+ -moz-appearance: none;
3077
3079
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%23ffffff' d='M0 2l4 4 4-4z'/%3E%3C/svg%3E");
3078
3080
  background-repeat: no-repeat;
3079
3081
  background-position: right var(--form-input-padding-x) center;
3080
3082
  background-size: 0.75rem;
3083
+ box-shadow: var(--glass-shadow-sm);
3081
3084
  }
3082
3085
  .bl-select:focus {
3083
3086
  outline: none;
3084
3087
  border-width: 2px;
3085
3088
  border-color: var(--color-accent);
3086
3089
  background-color: var(--glass-bg-medium);
3090
+ box-shadow: var(--glass-shadow-md), 0 0 0 1px var(--color-accent);
3091
+ }
3092
+ .bl-select:hover {
3093
+ background-color: var(--glass-bg-heavy);
3094
+ border-color: var(--glass-border-heavy);
3087
3095
  }
3088
3096
  .bl-select:disabled {
3089
3097
  opacity: var(--form-input-opacity-disabled);
3090
3098
  cursor: not-allowed;
3091
3099
  background-color: var(--glass-bg-dark);
3100
+ box-shadow: none;
3101
+ }
3102
+ .bl-select.bl-select-converted {
3103
+ display: none;
3104
+ }
3105
+
3106
+ .bl-select-dropdown {
3107
+ position: relative;
3108
+ display: block;
3109
+ width: 100%;
3110
+ }
3111
+ .bl-select-dropdown .bl-select-toggle {
3112
+ display: flex;
3113
+ align-items: center;
3114
+ justify-content: space-between;
3115
+ width: 100%;
3116
+ padding: var(--form-input-padding-y) var(--form-input-padding-x);
3117
+ font-family: var(--font-family-base);
3118
+ font-size: var(--form-input-font-size);
3119
+ line-height: var(--form-input-line-height);
3120
+ color: var(--color-text);
3121
+ background: var(--glass-bg-medium);
3122
+ border: 1px solid var(--glass-border-medium);
3123
+ border-radius: var(--tech-border-radius-md);
3124
+ backdrop-filter: blur(var(--glass-blur-lg));
3125
+ -webkit-backdrop-filter: blur(var(--glass-blur-lg));
3126
+ transition: var(--transition-base);
3127
+ cursor: pointer;
3128
+ box-shadow: var(--glass-shadow-sm);
3129
+ text-align: left;
3130
+ border: none;
3131
+ }
3132
+ .bl-select-dropdown .bl-select-toggle::after {
3133
+ display: inline-block;
3134
+ margin-left: var(--spacing-xs);
3135
+ vertical-align: 0.255em;
3136
+ content: "";
3137
+ border-top: 0.3em solid var(--color-text);
3138
+ border-right: 0.3em solid transparent;
3139
+ border-bottom: 0;
3140
+ border-left: 0.3em solid transparent;
3141
+ flex-shrink: 0;
3142
+ }
3143
+ .bl-select-dropdown .bl-select-toggle:focus {
3144
+ outline: none;
3145
+ border-width: 2px;
3146
+ border-color: var(--color-accent);
3147
+ box-shadow: var(--glass-shadow-md), 0 0 0 1px var(--color-accent);
3148
+ }
3149
+ .bl-select-dropdown .bl-select-toggle:hover {
3150
+ background-color: var(--glass-bg-heavy);
3151
+ border-color: var(--glass-border-heavy);
3152
+ }
3153
+ .bl-select-dropdown .bl-select-toggle:disabled {
3154
+ opacity: var(--form-input-opacity-disabled);
3155
+ cursor: not-allowed;
3156
+ background-color: var(--glass-bg-dark);
3157
+ }
3158
+ .bl-select-dropdown .bl-select-menu {
3159
+ position: absolute;
3160
+ top: 100%;
3161
+ left: 0;
3162
+ z-index: 999999 !important;
3163
+ display: none;
3164
+ width: 100%;
3165
+ min-width: 100%;
3166
+ padding: var(--spacing-xs) 0;
3167
+ margin: var(--spacing-xs) 0 0 0;
3168
+ font-size: var(--font-size-base);
3169
+ color: var(--color-text);
3170
+ text-align: left;
3171
+ list-style: none;
3172
+ background: var(--glass-bg-medium);
3173
+ backdrop-filter: blur(var(--glass-blur-lg));
3174
+ -webkit-backdrop-filter: blur(var(--glass-blur-lg));
3175
+ border: 1px solid var(--glass-border-medium);
3176
+ border-radius: var(--tech-border-radius-md);
3177
+ overflow: hidden;
3178
+ overflow-y: auto;
3179
+ max-height: 300px;
3180
+ box-shadow: var(--glass-shadow-lg);
3181
+ }
3182
+ .bl-select-dropdown .bl-select-menu.bl-show {
3183
+ display: block;
3184
+ }
3185
+ .bl-select-dropdown .bl-select-item {
3186
+ display: block;
3187
+ width: 100%;
3188
+ padding: var(--spacing-sm) var(--spacing-md);
3189
+ clear: both;
3190
+ font-weight: var(--font-weight-normal);
3191
+ color: var(--color-text);
3192
+ text-align: inherit;
3193
+ text-decoration: none;
3194
+ white-space: nowrap;
3195
+ background-color: transparent;
3196
+ border: 0;
3197
+ cursor: pointer;
3198
+ transition: var(--transition-base);
3199
+ }
3200
+ .bl-select-dropdown .bl-select-item:hover, .bl-select-dropdown .bl-select-item:focus {
3201
+ color: var(--color-text);
3202
+ text-decoration: none;
3203
+ background: var(--glass-bg-heavy);
3204
+ }
3205
+ .bl-select-dropdown .bl-select-item:active {
3206
+ color: var(--color-text);
3207
+ background: var(--glass-bg-heavy);
3208
+ }
3209
+ .bl-select-dropdown .bl-select-item.bl-selected {
3210
+ background: var(--glass-bg-heavy);
3211
+ color: var(--color-accent);
3212
+ }
3213
+ .bl-select-dropdown .bl-select-item.bl-selected::before {
3214
+ content: "✓ ";
3215
+ margin-right: var(--spacing-xs);
3216
+ }
3217
+ .bl-select-dropdown .bl-select-item.bl-disabled, .bl-select-dropdown .bl-select-item:disabled {
3218
+ color: var(--color-text-muted);
3219
+ pointer-events: none;
3220
+ background-color: transparent;
3221
+ opacity: 0.6;
3092
3222
  }
3093
3223
 
3094
3224
  .bl-input-error,
@@ -3300,8 +3430,11 @@ textarea {
3300
3430
  transition: var(--transition-base);
3301
3431
  position: relative;
3302
3432
  }
3303
- .bl-card.bl-card-accent {
3304
- border-left: 2px solid var(--color-accent);
3433
+ .bl-card.bl-card-accent-left {
3434
+ border-left: 4px solid var(--color-accent);
3435
+ }
3436
+ .bl-card.bl-card-accent-right {
3437
+ border-right: 4px solid var(--color-accent);
3305
3438
  }
3306
3439
 
3307
3440
  .bl-card-header {
@@ -3342,16 +3475,10 @@ textarea {
3342
3475
  .bl-card-primary {
3343
3476
  border-color: var(--color-accent);
3344
3477
  }
3345
- .bl-card-primary.bl-card-accent {
3346
- border-left-color: var(--color-accent);
3347
- }
3348
3478
 
3349
3479
  .bl-card-secondary {
3350
3480
  border-color: var(--glass-border-heavy);
3351
3481
  }
3352
- .bl-card-secondary.bl-card-accent {
3353
- border-left-color: var(--color-secondary);
3354
- }
3355
3482
 
3356
3483
  .bl-card-shadow {
3357
3484
  box-shadow: var(--glass-shadow-md);
@@ -3703,7 +3830,7 @@ textarea {
3703
3830
  position: absolute;
3704
3831
  top: 100%;
3705
3832
  left: 0;
3706
- z-index: var(--z-index-dropdown);
3833
+ z-index: 99999 !important;
3707
3834
  display: none;
3708
3835
  min-width: 10rem;
3709
3836
  padding: var(--spacing-xs) 0;
@@ -3718,6 +3845,9 @@ textarea {
3718
3845
  border: 1px solid var(--glass-border-medium);
3719
3846
  border-radius: var(--tech-border-radius-md);
3720
3847
  overflow: hidden;
3848
+ overflow-y: auto;
3849
+ max-height: 300px;
3850
+ box-shadow: var(--glass-shadow-lg);
3721
3851
  }
3722
3852
  .bl-dropdown-menu.bl-show {
3723
3853
  display: block;