@rhavenside/baseline-ui 1.0.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 (49) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/LICENSE +22 -0
  3. package/README.md +272 -0
  4. package/dist/.gitkeep +0 -0
  5. package/dist/baseline.css +4811 -0
  6. package/dist/baseline.css.map +1 -0
  7. package/dist/baseline.min.css +1 -0
  8. package/package.json +59 -0
  9. package/src/base/_base.scss +182 -0
  10. package/src/base/_normalize.scss +186 -0
  11. package/src/base/_reset.scss +24 -0
  12. package/src/baseline.scss +48 -0
  13. package/src/components/_alert.scss +97 -0
  14. package/src/components/_badge.scss +105 -0
  15. package/src/components/_button.scss +200 -0
  16. package/src/components/_card.scss +94 -0
  17. package/src/components/_dropdown.scss +111 -0
  18. package/src/components/_form.scss +324 -0
  19. package/src/components/_modal.scss +157 -0
  20. package/src/components/_nav.scss +211 -0
  21. package/src/components/_progress.scss +65 -0
  22. package/src/components/_spinner.scss +118 -0
  23. package/src/components/_table.scss +182 -0
  24. package/src/components/_tooltip.scss +134 -0
  25. package/src/fonts/.gitkeep +4 -0
  26. package/src/icons/_icons.scss +150 -0
  27. package/src/layout/_container.scss +45 -0
  28. package/src/layout/_flex.scss +174 -0
  29. package/src/layout/_grid-modern.scss +128 -0
  30. package/src/layout/_grid.scss +123 -0
  31. package/src/themes/_dark.scss +122 -0
  32. package/src/themes/_light.scss +7 -0
  33. package/src/tokens/_borders.scss +36 -0
  34. package/src/tokens/_colors.scss +136 -0
  35. package/src/tokens/_forms.scss +170 -0
  36. package/src/tokens/_glassmorphism.scss +60 -0
  37. package/src/tokens/_shadows.scss +24 -0
  38. package/src/tokens/_spacing.scss +31 -0
  39. package/src/tokens/_tokens.scss +14 -0
  40. package/src/tokens/_transitions.scss +42 -0
  41. package/src/tokens/_typography.scss +89 -0
  42. package/src/tokens/_z-index.scss +26 -0
  43. package/src/utilities/_accessibility.scss +76 -0
  44. package/src/utilities/_animations.scss +177 -0
  45. package/src/utilities/_display.scss +89 -0
  46. package/src/utilities/_position.scss +105 -0
  47. package/src/utilities/_spacing.scss +87 -0
  48. package/src/utilities/_text.scss +255 -0
  49. package/src/utilities/_visibility.scss +74 -0
@@ -0,0 +1,182 @@
1
+ // ============================================================================
2
+ // Base Styles (Technical Glass Design)
3
+ // ============================================================================
4
+
5
+ @use '../tokens/tokens' as *;
6
+
7
+ // Root Element
8
+ :root {
9
+ font-size: 16px; // Base font size for rem calculations
10
+ }
11
+
12
+ // Body (Dark Graphite, Desaturated)
13
+ body {
14
+ font-family: var(--font-family-base);
15
+ font-size: var(--font-size-base);
16
+ line-height: var(--line-height-base);
17
+ color: var(--color-text);
18
+ background-color: var(--color-bg);
19
+ -webkit-font-smoothing: antialiased;
20
+ -moz-osx-font-smoothing: grayscale;
21
+ min-height: 100vh;
22
+ }
23
+
24
+ // Headings (High Contrast)
25
+ h1, h2, h3, h4, h5, h6 {
26
+ margin: 0;
27
+ font-weight: var(--font-weight-semibold);
28
+ line-height: var(--line-height-tight);
29
+ color: var(--color-text);
30
+ }
31
+
32
+ h1 {
33
+ font-size: var(--font-size-4xl);
34
+ }
35
+
36
+ h2 {
37
+ font-size: var(--font-size-3xl);
38
+ }
39
+
40
+ h3 {
41
+ font-size: var(--font-size-2xl);
42
+ }
43
+
44
+ h4 {
45
+ font-size: var(--font-size-xl);
46
+ }
47
+
48
+ h5 {
49
+ font-size: var(--font-size-lg);
50
+ }
51
+
52
+ h6 {
53
+ font-size: var(--font-size-base);
54
+ }
55
+
56
+ // Paragraphs
57
+ p {
58
+ margin: 0;
59
+ line-height: var(--line-height-base);
60
+ color: var(--color-text);
61
+ }
62
+
63
+ // Links
64
+ a {
65
+ color: var(--color-accent);
66
+ text-decoration: none;
67
+ transition: var(--transition-colors);
68
+
69
+ &:hover {
70
+ color: var(--color-accent-light);
71
+ }
72
+
73
+ &:focus {
74
+ outline: 1px solid var(--color-border-focus);
75
+ outline-offset: 2px;
76
+ }
77
+ }
78
+
79
+ // Lists
80
+ ul, ol {
81
+ margin: 0;
82
+ padding: 0;
83
+ list-style: none;
84
+ }
85
+
86
+ // Images
87
+ img {
88
+ max-width: 100%;
89
+ height: auto;
90
+ display: block;
91
+ }
92
+
93
+ // Horizontal Rule
94
+ hr {
95
+ border: 0;
96
+ border-top: 1px solid var(--color-border);
97
+ margin: var(--spacing-lg) 0;
98
+ }
99
+
100
+ // Code (Technical Style, Monospace)
101
+ code {
102
+ font-family: var(--font-family-mono);
103
+ font-size: 0.875em;
104
+ background: var(--glass-bg-light);
105
+ backdrop-filter: blur(var(--glass-blur-sm));
106
+ -webkit-backdrop-filter: blur(var(--glass-blur-sm));
107
+ border: 1px solid var(--glass-border-light);
108
+ padding: 0.125em 0.25em;
109
+ border-radius: var(--tech-border-radius-sm);
110
+ color: var(--color-text);
111
+ }
112
+
113
+ pre {
114
+ font-family: var(--font-family-mono);
115
+ font-size: var(--font-size-sm);
116
+ background: var(--glass-bg-medium);
117
+ backdrop-filter: blur(var(--glass-blur-md));
118
+ -webkit-backdrop-filter: blur(var(--glass-blur-md));
119
+ border: 1px solid var(--glass-border-medium);
120
+ padding: var(--spacing-md);
121
+ border-radius: var(--tech-border-radius-md);
122
+ overflow-x: auto;
123
+ color: var(--color-text);
124
+
125
+ code {
126
+ background-color: transparent;
127
+ padding: 0;
128
+ border: none;
129
+ }
130
+ }
131
+
132
+ // Blockquote
133
+ blockquote {
134
+ margin: 0;
135
+ padding-left: var(--spacing-lg);
136
+ border-left: var(--border-width-base) solid var(--color-border);
137
+ color: var(--color-text-muted);
138
+ background: var(--glass-bg-light);
139
+ backdrop-filter: blur(var(--glass-blur-sm));
140
+ -webkit-backdrop-filter: blur(var(--glass-blur-sm));
141
+ padding: var(--spacing-md);
142
+ border-radius: var(--tech-border-radius-md);
143
+ }
144
+
145
+ // Tables (basic)
146
+ table {
147
+ width: 100%;
148
+ border-collapse: collapse;
149
+ }
150
+
151
+ // Buttons (reset)
152
+ button {
153
+ background: none;
154
+ border: none;
155
+ padding: 0;
156
+ font: inherit;
157
+ cursor: pointer;
158
+ color: inherit;
159
+ }
160
+
161
+ // Inputs (reset)
162
+ input,
163
+ select,
164
+ textarea {
165
+ font: inherit;
166
+ color: inherit;
167
+ }
168
+
169
+ // Focus styles (accessibility)
170
+ *:focus {
171
+ outline: 1px solid var(--color-border-focus);
172
+ outline-offset: 2px;
173
+ }
174
+
175
+ *:focus:not(:focus-visible) {
176
+ outline: none;
177
+ }
178
+
179
+ *:focus-visible {
180
+ outline: 1px solid var(--color-border-focus);
181
+ outline-offset: 2px;
182
+ }
@@ -0,0 +1,186 @@
1
+ // ============================================================================
2
+ // Normalize.css-inspired Browser Normalization
3
+ // ============================================================================
4
+
5
+ // Document
6
+ html {
7
+ line-height: 1.15;
8
+ -webkit-text-size-adjust: 100%;
9
+ }
10
+
11
+ // Sections
12
+ body {
13
+ margin: 0;
14
+ }
15
+
16
+ // Grouping content
17
+ hr {
18
+ box-sizing: content-box;
19
+ height: 0;
20
+ overflow: visible;
21
+ }
22
+
23
+ pre {
24
+ font-family: monospace, monospace;
25
+ font-size: 1em;
26
+ }
27
+
28
+ // Text-level semantics
29
+ abbr[title] {
30
+ border-bottom: none;
31
+ text-decoration: underline;
32
+ text-decoration: underline dotted;
33
+ }
34
+
35
+ b,
36
+ strong {
37
+ font-weight: bolder;
38
+ }
39
+
40
+ code,
41
+ kbd,
42
+ samp {
43
+ font-family: monospace, monospace;
44
+ font-size: 1em;
45
+ }
46
+
47
+ small {
48
+ font-size: 80%;
49
+ }
50
+
51
+ sub,
52
+ sup {
53
+ font-size: 75%;
54
+ line-height: 0;
55
+ position: relative;
56
+ vertical-align: baseline;
57
+ }
58
+
59
+ sub {
60
+ bottom: -0.25em;
61
+ }
62
+
63
+ sup {
64
+ top: -0.5em;
65
+ }
66
+
67
+ // Embedded content
68
+ img {
69
+ border-style: none;
70
+ max-width: 100%;
71
+ height: auto;
72
+ display: block;
73
+ }
74
+
75
+ svg:not(:root) {
76
+ overflow: hidden;
77
+ }
78
+
79
+ // Forms
80
+ button,
81
+ input,
82
+ optgroup,
83
+ select,
84
+ textarea {
85
+ font-family: inherit;
86
+ font-size: 100%;
87
+ line-height: 1.15;
88
+ margin: 0;
89
+ }
90
+
91
+ button,
92
+ input {
93
+ overflow: visible;
94
+ }
95
+
96
+ button,
97
+ select {
98
+ text-transform: none;
99
+ }
100
+
101
+ button,
102
+ [type="button"],
103
+ [type="reset"],
104
+ [type="submit"] {
105
+ -webkit-appearance: button;
106
+ }
107
+
108
+ button::-moz-focus-inner,
109
+ [type="button"]::-moz-focus-inner,
110
+ [type="reset"]::-moz-focus-inner,
111
+ [type="submit"]::-moz-focus-inner {
112
+ border-style: none;
113
+ padding: 0;
114
+ }
115
+
116
+ button:-moz-focusring,
117
+ [type="button"]:-moz-focusring,
118
+ [type="reset"]:-moz-focusring,
119
+ [type="submit"]:-moz-focusring {
120
+ outline: 1px dotted ButtonText;
121
+ }
122
+
123
+ fieldset {
124
+ padding: 0.35em 0.75em 0.625em;
125
+ }
126
+
127
+ legend {
128
+ box-sizing: border-box;
129
+ color: inherit;
130
+ display: table;
131
+ max-width: 100%;
132
+ padding: 0;
133
+ white-space: normal;
134
+ }
135
+
136
+ progress {
137
+ vertical-align: baseline;
138
+ }
139
+
140
+ textarea {
141
+ overflow: auto;
142
+ }
143
+
144
+ [type="checkbox"],
145
+ [type="radio"] {
146
+ box-sizing: border-box;
147
+ padding: 0;
148
+ }
149
+
150
+ [type="number"]::-webkit-inner-spin-button,
151
+ [type="number"]::-webkit-outer-spin-button {
152
+ height: auto;
153
+ }
154
+
155
+ [type="search"] {
156
+ -webkit-appearance: textfield;
157
+ outline-offset: -2px;
158
+ }
159
+
160
+ [type="search"]::-webkit-search-decoration {
161
+ -webkit-appearance: none;
162
+ }
163
+
164
+ ::-webkit-file-upload-button {
165
+ -webkit-appearance: button;
166
+ font: inherit;
167
+ }
168
+
169
+ // Interactive
170
+ details {
171
+ display: block;
172
+ }
173
+
174
+ summary {
175
+ display: list-item;
176
+ }
177
+
178
+ // Misc
179
+ template {
180
+ display: none;
181
+ }
182
+
183
+ [hidden] {
184
+ display: none;
185
+ }
186
+
@@ -0,0 +1,24 @@
1
+ // ============================================================================
2
+ // CSS Reset
3
+ // ============================================================================
4
+
5
+ *,
6
+ *::before,
7
+ *::after {
8
+ box-sizing: border-box;
9
+ margin: 0;
10
+ padding: 0;
11
+ }
12
+
13
+ html {
14
+ -webkit-text-size-adjust: 100%;
15
+ -webkit-font-smoothing: antialiased;
16
+ -moz-osx-font-smoothing: grayscale;
17
+ text-rendering: optimizeLegibility;
18
+ }
19
+
20
+ body {
21
+ margin: 0;
22
+ padding: 0;
23
+ }
24
+
@@ -0,0 +1,48 @@
1
+ // ============================================================================
2
+ // Baseline Design Framework
3
+ // Main Entry Point
4
+ // ============================================================================
5
+
6
+ // 1. Design Tokens (CSS Custom Properties)
7
+ @use 'tokens/tokens';
8
+
9
+ // 2. Base Layer (Reset & Normalization)
10
+ @use 'base/reset';
11
+ @use 'base/normalize';
12
+ @use 'base/base';
13
+
14
+ // 3. Layout System
15
+ @use 'layout/container';
16
+ @use 'layout/grid';
17
+ @use 'layout/grid-modern';
18
+ @use 'layout/flex';
19
+
20
+ // 4. Utilities
21
+ @use 'utilities/spacing';
22
+ @use 'utilities/display';
23
+ @use 'utilities/text';
24
+ @use 'utilities/visibility';
25
+ @use 'utilities/position';
26
+ @use 'utilities/animations';
27
+ @use 'utilities/accessibility';
28
+
29
+ // 5. Components
30
+ @use 'components/button';
31
+ @use 'components/form';
32
+ @use 'components/card';
33
+ @use 'components/alert';
34
+ @use 'components/badge';
35
+ @use 'components/modal';
36
+ @use 'components/dropdown';
37
+ @use 'components/nav';
38
+ @use 'components/table';
39
+ @use 'components/tooltip';
40
+ @use 'components/progress';
41
+ @use 'components/spinner';
42
+
43
+ // 6. Icons
44
+ @use 'icons/icons';
45
+
46
+ // 7. Themes (Dark Mode)
47
+ @use 'themes/dark';
48
+
@@ -0,0 +1,97 @@
1
+ // ============================================================================
2
+ // Alert Component (Technical Glass Design)
3
+ // ============================================================================
4
+
5
+ @use '../tokens/tokens' as *;
6
+
7
+ .bl-alert {
8
+ position: relative;
9
+ padding: var(--spacing-md);
10
+ margin-bottom: var(--spacing-md);
11
+ border: 1px solid var(--glass-border-medium);
12
+ border-left-width: 2px; // Clear border color line
13
+ border-radius: var(--tech-border-radius-md);
14
+ background: var(--glass-bg-medium);
15
+ backdrop-filter: blur(var(--glass-blur-md));
16
+ -webkit-backdrop-filter: blur(var(--glass-blur-md));
17
+ color: var(--color-text);
18
+ }
19
+
20
+ .bl-alert-title {
21
+ margin: 0 0 var(--spacing-xs) 0;
22
+ font-size: var(--font-size-base);
23
+ font-weight: var(--font-weight-semibold);
24
+ color: var(--color-text);
25
+ }
26
+
27
+ .bl-alert-message {
28
+ margin: 0;
29
+ font-size: var(--font-size-sm);
30
+ color: var(--color-text-muted);
31
+ }
32
+
33
+ // Alert Variants (Structure: Line → Title → Text)
34
+ .bl-alert-info {
35
+ border-left-color: var(--color-accent);
36
+ color: var(--color-text);
37
+
38
+ .bl-alert-title {
39
+ color: var(--color-text);
40
+ }
41
+ }
42
+
43
+ .bl-alert-success {
44
+ border-left-color: var(--color-success);
45
+ color: var(--color-text);
46
+
47
+ .bl-alert-title {
48
+ color: var(--color-text);
49
+ }
50
+ }
51
+
52
+ .bl-alert-warning {
53
+ border-left-color: var(--color-warning);
54
+ color: var(--color-text);
55
+
56
+ .bl-alert-title {
57
+ color: var(--color-text);
58
+ }
59
+ }
60
+
61
+ .bl-alert-error {
62
+ border-left-color: var(--color-error);
63
+ color: var(--color-text);
64
+
65
+ .bl-alert-title {
66
+ color: var(--color-text);
67
+ }
68
+ }
69
+
70
+ // Dismissible Alert
71
+ .bl-alert-dismissible {
72
+ padding-right: var(--spacing-3xl);
73
+ }
74
+
75
+ .bl-alert-close {
76
+ position: absolute;
77
+ top: var(--spacing-sm);
78
+ right: var(--spacing-sm);
79
+ padding: var(--spacing-xs);
80
+ background: transparent;
81
+ border: none;
82
+ cursor: pointer;
83
+ opacity: 0.6;
84
+ transition: var(--transition-opacity);
85
+ color: var(--color-text);
86
+ border-radius: var(--tech-border-radius-sm);
87
+
88
+ &:hover {
89
+ opacity: 1;
90
+ }
91
+
92
+ &::before {
93
+ content: '×';
94
+ font-size: var(--font-size-xl);
95
+ line-height: 1;
96
+ }
97
+ }
@@ -0,0 +1,105 @@
1
+ // ============================================================================
2
+ // Badge Component (Technical Glass Design - 2-part)
3
+ // ============================================================================
4
+
5
+ @use '../tokens/tokens' as *;
6
+
7
+ .bl-badge {
8
+ display: inline-flex;
9
+ align-items: stretch;
10
+ overflow: hidden;
11
+ font-size: var(--font-size-xs);
12
+ font-weight: var(--font-weight-medium);
13
+ line-height: 1;
14
+ white-space: nowrap;
15
+ vertical-align: baseline;
16
+ border-radius: var(--tech-border-radius-sm);
17
+ border: 1px solid var(--glass-border-medium);
18
+ }
19
+
20
+ // Badge Label (Left Part - Matte)
21
+ .bl-badge-label {
22
+ display: inline-flex;
23
+ align-items: center;
24
+ padding: var(--spacing-xs) var(--spacing-sm);
25
+ background: var(--glass-bg-light);
26
+ backdrop-filter: blur(var(--glass-blur-sm));
27
+ -webkit-backdrop-filter: blur(var(--glass-blur-sm));
28
+ color: var(--color-text-muted);
29
+ border-right: 1px solid var(--glass-border-medium); // Technical edge
30
+ flex-shrink: 0;
31
+ }
32
+
33
+ // Badge Value (Right Part - Glassy or Accented)
34
+ .bl-badge-value {
35
+ display: inline-flex;
36
+ align-items: center;
37
+ padding: var(--spacing-xs) var(--spacing-sm);
38
+ background: var(--glass-bg-medium);
39
+ backdrop-filter: blur(var(--glass-blur-md));
40
+ -webkit-backdrop-filter: blur(var(--glass-blur-md));
41
+ color: var(--color-text);
42
+ flex-shrink: 0;
43
+ }
44
+
45
+ // Badge Variants
46
+ .bl-badge-primary {
47
+ .bl-badge-value {
48
+ background: var(--color-accent);
49
+ color: var(--color-text-inverse);
50
+ }
51
+ }
52
+
53
+ .bl-badge-secondary {
54
+ .bl-badge-value {
55
+ background: var(--glass-bg-heavy);
56
+ color: var(--color-text);
57
+ }
58
+ }
59
+
60
+ .bl-badge-success {
61
+ .bl-badge-value {
62
+ background: var(--color-success);
63
+ color: var(--color-text-inverse);
64
+ }
65
+ }
66
+
67
+ .bl-badge-warning {
68
+ .bl-badge-value {
69
+ background: var(--color-warning);
70
+ color: var(--color-text-inverse);
71
+ }
72
+ }
73
+
74
+ .bl-badge-error {
75
+ .bl-badge-value {
76
+ background: var(--color-error);
77
+ color: var(--color-text-inverse);
78
+ }
79
+ }
80
+
81
+ .bl-badge-info {
82
+ .bl-badge-value {
83
+ background: var(--color-info);
84
+ color: var(--color-text-inverse);
85
+ }
86
+ }
87
+
88
+ // Badge Sizes
89
+ .bl-badge-sm {
90
+ font-size: 0.625rem;
91
+
92
+ .bl-badge-label,
93
+ .bl-badge-value {
94
+ padding: 0.125rem var(--spacing-xs);
95
+ }
96
+ }
97
+
98
+ .bl-badge-lg {
99
+ font-size: var(--font-size-sm);
100
+
101
+ .bl-badge-label,
102
+ .bl-badge-value {
103
+ padding: var(--spacing-sm) var(--spacing-md);
104
+ }
105
+ }