@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,134 @@
1
+ // ============================================================================
2
+ // Tooltip Component (Technical Glass Design)
3
+ // ============================================================================
4
+
5
+ @use '../tokens/tokens' as *;
6
+
7
+ .bl-tooltip {
8
+ position: relative;
9
+ display: inline-block;
10
+ }
11
+
12
+ .bl-tooltip-trigger {
13
+ cursor: help;
14
+ }
15
+
16
+ .bl-tooltip-content {
17
+ position: absolute;
18
+ z-index: var(--z-index-tooltip);
19
+ display: none;
20
+ max-width: 200px;
21
+ padding: var(--spacing-xs) var(--spacing-sm);
22
+ font-size: var(--font-size-xs);
23
+ font-family: var(--font-family-mono); // Precise, monospace possible
24
+ line-height: var(--line-height-base);
25
+ color: var(--color-text);
26
+ text-align: center;
27
+ text-decoration: none;
28
+ word-wrap: break-word;
29
+ background: var(--glass-bg-medium);
30
+ backdrop-filter: blur(var(--glass-blur-md));
31
+ -webkit-backdrop-filter: blur(var(--glass-blur-md));
32
+ border: 1px solid var(--glass-border-medium);
33
+ border-radius: var(--tech-border-radius-sm);
34
+ opacity: 0;
35
+ transition: var(--transition-opacity);
36
+
37
+ &.bl-show {
38
+ display: block;
39
+ opacity: 1;
40
+ }
41
+ }
42
+
43
+ // Tooltip Positions (Angular, Trapezoidal Arrow)
44
+ .bl-tooltip-top {
45
+ .bl-tooltip-content {
46
+ bottom: 100%;
47
+ left: 50%;
48
+ margin-bottom: var(--spacing-xs);
49
+ transform: translateX(-50%);
50
+
51
+ &::after {
52
+ position: absolute;
53
+ top: 100%;
54
+ left: 50%;
55
+ width: 0;
56
+ height: 0;
57
+ margin-left: -6px;
58
+ content: "";
59
+ border-width: 6px 6px 0 6px;
60
+ border-style: solid;
61
+ border-color: var(--glass-bg-medium) transparent transparent transparent;
62
+ clip-path: polygon(0 0, 100% 0, 80% 100%, 20% 100%); // Trapezoidal
63
+ }
64
+ }
65
+ }
66
+
67
+ .bl-tooltip-bottom {
68
+ .bl-tooltip-content {
69
+ top: 100%;
70
+ left: 50%;
71
+ margin-top: var(--spacing-xs);
72
+ transform: translateX(-50%);
73
+
74
+ &::after {
75
+ position: absolute;
76
+ bottom: 100%;
77
+ left: 50%;
78
+ width: 0;
79
+ height: 0;
80
+ margin-left: -6px;
81
+ content: "";
82
+ border-width: 0 6px 6px 6px;
83
+ border-style: solid;
84
+ border-color: transparent transparent var(--glass-bg-medium) transparent;
85
+ clip-path: polygon(20% 0, 80% 0, 100% 100%, 0 100%); // Trapezoidal
86
+ }
87
+ }
88
+ }
89
+
90
+ .bl-tooltip-left {
91
+ .bl-tooltip-content {
92
+ top: 50%;
93
+ right: 100%;
94
+ margin-right: var(--spacing-xs);
95
+ transform: translateY(-50%);
96
+
97
+ &::after {
98
+ position: absolute;
99
+ top: 50%;
100
+ left: 100%;
101
+ width: 0;
102
+ height: 0;
103
+ margin-top: -6px;
104
+ content: "";
105
+ border-width: 6px 0 6px 6px;
106
+ border-style: solid;
107
+ border-color: transparent transparent transparent var(--glass-bg-medium);
108
+ clip-path: polygon(0 20%, 0 80%, 100% 100%, 100% 0); // Trapezoidal
109
+ }
110
+ }
111
+ }
112
+
113
+ .bl-tooltip-right {
114
+ .bl-tooltip-content {
115
+ top: 50%;
116
+ left: 100%;
117
+ margin-left: var(--spacing-xs);
118
+ transform: translateY(-50%);
119
+
120
+ &::after {
121
+ position: absolute;
122
+ top: 50%;
123
+ right: 100%;
124
+ width: 0;
125
+ height: 0;
126
+ margin-top: -6px;
127
+ content: "";
128
+ border-width: 6px 6px 6px 0;
129
+ border-style: solid;
130
+ border-color: transparent var(--glass-bg-medium) transparent transparent;
131
+ clip-path: polygon(0 0, 0 100%, 100% 80%, 100% 20%); // Trapezoidal
132
+ }
133
+ }
134
+ }
@@ -0,0 +1,4 @@
1
+ # Icon font files will be placed here
2
+ # baseline-icons.woff2
3
+ # baseline-icons.woff
4
+
@@ -0,0 +1,150 @@
1
+ // ============================================================================
2
+ // Icon Font System
3
+ // ============================================================================
4
+
5
+ @use '../tokens/tokens' as *;
6
+
7
+ // Icon Font Face (to be generated from icon font files)
8
+ @font-face {
9
+ font-family: 'Baseline Icons';
10
+ src: url('../fonts/baseline-icons.woff2') format('woff2'),
11
+ url('../fonts/baseline-icons.woff') format('woff');
12
+ font-weight: normal;
13
+ font-style: normal;
14
+ font-display: swap;
15
+ }
16
+
17
+ // Base Icon Class
18
+ .bl-icon {
19
+ display: inline-block;
20
+ font-family: 'Baseline Icons';
21
+ font-style: normal;
22
+ font-weight: normal;
23
+ font-variant: normal;
24
+ text-transform: none;
25
+ line-height: 1;
26
+ speak: never;
27
+ -webkit-font-smoothing: antialiased;
28
+ -moz-osx-font-smoothing: grayscale;
29
+ vertical-align: middle;
30
+ }
31
+
32
+ // Icon Sizes
33
+ .bl-icon-xs {
34
+ font-size: 0.75rem;
35
+ width: 0.75rem;
36
+ height: 0.75rem;
37
+ }
38
+
39
+ .bl-icon-sm {
40
+ font-size: 1rem;
41
+ width: 1rem;
42
+ height: 1rem;
43
+ }
44
+
45
+ .bl-icon-md {
46
+ font-size: 1.25rem;
47
+ width: 1.25rem;
48
+ height: 1.25rem;
49
+ }
50
+
51
+ .bl-icon-lg {
52
+ font-size: 1.5rem;
53
+ width: 1.5rem;
54
+ height: 1.5rem;
55
+ }
56
+
57
+ .bl-icon-xl {
58
+ font-size: 2rem;
59
+ width: 2rem;
60
+ height: 2rem;
61
+ }
62
+
63
+ // Icon Variants (using Unicode/Private Use Area)
64
+ // These would be replaced with actual icon font mappings
65
+ .bl-icon-home::before { content: '\e900'; }
66
+ .bl-icon-user::before { content: '\e901'; }
67
+ .bl-icon-search::before { content: '\e902'; }
68
+ .bl-icon-menu::before { content: '\e903'; }
69
+ .bl-icon-close::before { content: '\e904'; }
70
+ .bl-icon-chevron-left::before { content: '\e905'; }
71
+ .bl-icon-chevron-right::before { content: '\e906'; }
72
+ .bl-icon-chevron-up::before { content: '\e907'; }
73
+ .bl-icon-chevron-down::before { content: '\e908'; }
74
+ .bl-icon-arrow-left::before { content: '\e909'; }
75
+ .bl-icon-arrow-right::before { content: '\e90a'; }
76
+ .bl-icon-arrow-up::before { content: '\e90b'; }
77
+ .bl-icon-arrow-down::before { content: '\e90c'; }
78
+ .bl-icon-check::before { content: '\e90d'; }
79
+ .bl-icon-cross::before { content: '\e90e'; }
80
+ .bl-icon-plus::before { content: '\e90f'; }
81
+ .bl-icon-minus::before { content: '\e910'; }
82
+ .bl-icon-info::before { content: '\e911'; }
83
+ .bl-icon-warning::before { content: '\e912'; }
84
+ .bl-icon-error::before { content: '\e913'; }
85
+ .bl-icon-success::before { content: '\e914'; }
86
+ .bl-icon-heart::before { content: '\e915'; }
87
+ .bl-icon-star::before { content: '\e916'; }
88
+ .bl-icon-bookmark::before { content: '\e917'; }
89
+ .bl-icon-share::before { content: '\e918'; }
90
+ .bl-icon-download::before { content: '\e919'; }
91
+ .bl-icon-upload::before { content: '\e91a'; }
92
+ .bl-icon-edit::before { content: '\e91b'; }
93
+ .bl-icon-delete::before { content: '\e91c'; }
94
+ .bl-icon-settings::before { content: '\e91d'; }
95
+ .bl-icon-bell::before { content: '\e91e'; }
96
+ .bl-icon-mail::before { content: '\e91f'; }
97
+ .bl-icon-phone::before { content: '\e920'; }
98
+ .bl-icon-calendar::before { content: '\e921'; }
99
+ .bl-icon-clock::before { content: '\e922'; }
100
+ .bl-icon-image::before { content: '\e923'; }
101
+ .bl-icon-video::before { content: '\e924'; }
102
+ .bl-icon-file::before { content: '\e925'; }
103
+ .bl-icon-folder::before { content: '\e926'; }
104
+ .bl-icon-lock::before { content: '\e927'; }
105
+ .bl-icon-unlock::before { content: '\e928'; }
106
+ .bl-icon-eye::before { content: '\e929'; }
107
+ .bl-icon-eye-off::before { content: '\e92a'; }
108
+ .bl-icon-filter::before { content: '\e92b'; }
109
+ .bl-icon-sort::before { content: '\e92c'; }
110
+ .bl-icon-grid::before { content: '\e92d'; }
111
+ .bl-icon-list::before { content: '\e92e'; }
112
+ .bl-icon-refresh::before { content: '\e92f'; }
113
+ .bl-icon-loading::before { content: '\e930'; }
114
+ .bl-icon-play::before { content: '\e931'; }
115
+ .bl-icon-pause::before { content: '\e932'; }
116
+ .bl-icon-stop::before { content: '\e933'; }
117
+ .bl-icon-next::before { content: '\e934'; }
118
+ .bl-icon-prev::before { content: '\e935'; }
119
+ .bl-icon-volume::before { content: '\e936'; }
120
+ .bl-icon-volume-off::before { content: '\e937'; }
121
+ .bl-icon-fullscreen::before { content: '\e938'; }
122
+ .bl-icon-fullscreen-exit::before { content: '\e939'; }
123
+ .bl-icon-link::before { content: '\e93a'; }
124
+ .bl-icon-external::before { content: '\e93b'; }
125
+ .bl-icon-copy::before { content: '\e93c'; }
126
+ .bl-icon-cut::before { content: '\e93d'; }
127
+ .bl-icon-paste::before { content: '\e93e'; }
128
+ .bl-icon-undo::before { content: '\e93f'; }
129
+ .bl-icon-redo::before { content: '\e940'; }
130
+ .bl-icon-save::before { content: '\e941'; }
131
+ .bl-icon-print::before { content: '\e942'; }
132
+ .bl-icon-zoom-in::before { content: '\e943'; }
133
+ .bl-icon-zoom-out::before { content: '\e944'; }
134
+ .bl-icon-maximize::before { content: '\e945'; }
135
+ .bl-icon-minimize::before { content: '\e946'; }
136
+
137
+ // Icon in Button
138
+ .bl-btn .bl-icon {
139
+ margin-right: var(--spacing-xs);
140
+ }
141
+
142
+ .bl-btn .bl-icon:last-child {
143
+ margin-right: 0;
144
+ margin-left: var(--spacing-xs);
145
+ }
146
+
147
+ .bl-btn .bl-icon:only-child {
148
+ margin: 0;
149
+ }
150
+
@@ -0,0 +1,45 @@
1
+ // ============================================================================
2
+ // Container
3
+ // ============================================================================
4
+
5
+ @use '../tokens/tokens' as *;
6
+
7
+ .bl-container {
8
+ width: 100%;
9
+ margin-left: auto;
10
+ margin-right: auto;
11
+ padding-left: var(--spacing-md);
12
+ padding-right: var(--spacing-md);
13
+
14
+ // Small devices (landscape phones, 640px and up)
15
+ @media (min-width: 640px) {
16
+ max-width: 640px;
17
+ }
18
+
19
+ // Medium devices (tablets, 768px and up)
20
+ @media (min-width: 768px) {
21
+ max-width: 768px;
22
+ }
23
+
24
+ // Large devices (desktops, 1024px and up)
25
+ @media (min-width: 1024px) {
26
+ max-width: 1024px;
27
+ }
28
+
29
+ // Extra large devices (large desktops, 1280px and up)
30
+ @media (min-width: 1280px) {
31
+ max-width: 1280px;
32
+ }
33
+
34
+ // 2X Large devices (larger desktops, 1536px and up)
35
+ @media (min-width: 1536px) {
36
+ max-width: 1536px;
37
+ }
38
+ }
39
+
40
+ .bl-container-fluid {
41
+ width: 100%;
42
+ padding-left: var(--spacing-md);
43
+ padding-right: var(--spacing-md);
44
+ }
45
+
@@ -0,0 +1,174 @@
1
+ // ============================================================================
2
+ // Flexbox Utilities
3
+ // ============================================================================
4
+
5
+ @use '../tokens/tokens' as *;
6
+
7
+ // Display
8
+ .bl-flex {
9
+ display: flex;
10
+ }
11
+
12
+ .bl-inline-flex {
13
+ display: inline-flex;
14
+ }
15
+
16
+ // Direction
17
+ .bl-flex-row {
18
+ flex-direction: row;
19
+ }
20
+
21
+ .bl-flex-row-reverse {
22
+ flex-direction: row-reverse;
23
+ }
24
+
25
+ .bl-flex-col {
26
+ flex-direction: column;
27
+ }
28
+
29
+ .bl-flex-col-reverse {
30
+ flex-direction: column-reverse;
31
+ }
32
+
33
+ // Wrap
34
+ .bl-flex-wrap {
35
+ flex-wrap: wrap;
36
+ }
37
+
38
+ .bl-flex-nowrap {
39
+ flex-wrap: nowrap;
40
+ }
41
+
42
+ .bl-flex-wrap-reverse {
43
+ flex-wrap: wrap-reverse;
44
+ }
45
+
46
+ // Justify Content
47
+ .bl-justify-start {
48
+ justify-content: flex-start;
49
+ }
50
+
51
+ .bl-justify-end {
52
+ justify-content: flex-end;
53
+ }
54
+
55
+ .bl-justify-center {
56
+ justify-content: center;
57
+ }
58
+
59
+ .bl-justify-between {
60
+ justify-content: space-between;
61
+ }
62
+
63
+ .bl-justify-around {
64
+ justify-content: space-around;
65
+ }
66
+
67
+ .bl-justify-evenly {
68
+ justify-content: space-evenly;
69
+ }
70
+
71
+ // Align Items
72
+ .bl-items-start {
73
+ align-items: flex-start;
74
+ }
75
+
76
+ .bl-items-end {
77
+ align-items: flex-end;
78
+ }
79
+
80
+ .bl-items-center {
81
+ align-items: center;
82
+ }
83
+
84
+ .bl-items-baseline {
85
+ align-items: baseline;
86
+ }
87
+
88
+ .bl-items-stretch {
89
+ align-items: stretch;
90
+ }
91
+
92
+ // Align Self
93
+ .bl-self-auto {
94
+ align-self: auto;
95
+ }
96
+
97
+ .bl-self-start {
98
+ align-self: flex-start;
99
+ }
100
+
101
+ .bl-self-end {
102
+ align-self: flex-end;
103
+ }
104
+
105
+ .bl-self-center {
106
+ align-self: center;
107
+ }
108
+
109
+ .bl-self-stretch {
110
+ align-self: stretch;
111
+ }
112
+
113
+ .bl-self-baseline {
114
+ align-self: baseline;
115
+ }
116
+
117
+ // Align Content
118
+ .bl-content-start {
119
+ align-content: flex-start;
120
+ }
121
+
122
+ .bl-content-end {
123
+ align-content: flex-end;
124
+ }
125
+
126
+ .bl-content-center {
127
+ align-content: center;
128
+ }
129
+
130
+ .bl-content-between {
131
+ align-content: space-between;
132
+ }
133
+
134
+ .bl-content-around {
135
+ align-content: space-around;
136
+ }
137
+
138
+ .bl-content-stretch {
139
+ align-content: stretch;
140
+ }
141
+
142
+ // Flex Grow/Shrink
143
+ .bl-flex-1 {
144
+ flex: 1 1 0%;
145
+ }
146
+
147
+ .bl-flex-auto {
148
+ flex: 1 1 auto;
149
+ }
150
+
151
+ .bl-flex-initial {
152
+ flex: 0 1 auto;
153
+ }
154
+
155
+ .bl-flex-none {
156
+ flex: none;
157
+ }
158
+
159
+ .bl-grow {
160
+ flex-grow: 1;
161
+ }
162
+
163
+ .bl-grow-0 {
164
+ flex-grow: 0;
165
+ }
166
+
167
+ .bl-shrink {
168
+ flex-shrink: 1;
169
+ }
170
+
171
+ .bl-shrink-0 {
172
+ flex-shrink: 0;
173
+ }
174
+
@@ -0,0 +1,128 @@
1
+ // ============================================================================
2
+ // CSS Grid Utilities
3
+ // ============================================================================
4
+
5
+ @use '../tokens/tokens' as *;
6
+
7
+ // Base Grid
8
+ .bl-grid {
9
+ display: grid;
10
+ gap: var(--spacing-md);
11
+ }
12
+
13
+ // Grid Columns (1-12)
14
+ @for $i from 1 through 12 {
15
+ .bl-grid-cols-#{$i} {
16
+ grid-template-columns: repeat(#{$i}, minmax(0, 1fr));
17
+ }
18
+ }
19
+
20
+ // Grid Rows (1-12)
21
+ @for $i from 1 through 12 {
22
+ .bl-grid-rows-#{$i} {
23
+ grid-template-rows: repeat(#{$i}, minmax(0, 1fr));
24
+ }
25
+ }
26
+
27
+ // Gap Utilities
28
+ .bl-gap-xs {
29
+ gap: var(--spacing-xs);
30
+ }
31
+
32
+ .bl-gap-sm {
33
+ gap: var(--spacing-sm);
34
+ }
35
+
36
+ .bl-gap-md {
37
+ gap: var(--spacing-md);
38
+ }
39
+
40
+ .bl-gap-lg {
41
+ gap: var(--spacing-lg);
42
+ }
43
+
44
+ .bl-gap-xl {
45
+ gap: var(--spacing-xl);
46
+ }
47
+
48
+ .bl-gap-2xl {
49
+ gap: var(--spacing-2xl);
50
+ }
51
+
52
+ // Column Gap
53
+ .bl-gap-x-xs {
54
+ column-gap: var(--spacing-xs);
55
+ }
56
+
57
+ .bl-gap-x-sm {
58
+ column-gap: var(--spacing-sm);
59
+ }
60
+
61
+ .bl-gap-x-md {
62
+ column-gap: var(--spacing-md);
63
+ }
64
+
65
+ .bl-gap-x-lg {
66
+ column-gap: var(--spacing-lg);
67
+ }
68
+
69
+ .bl-gap-x-xl {
70
+ column-gap: var(--spacing-xl);
71
+ }
72
+
73
+ .bl-gap-x-2xl {
74
+ column-gap: var(--spacing-2xl);
75
+ }
76
+
77
+ // Row Gap
78
+ .bl-gap-y-xs {
79
+ row-gap: var(--spacing-xs);
80
+ }
81
+
82
+ .bl-gap-y-sm {
83
+ row-gap: var(--spacing-sm);
84
+ }
85
+
86
+ .bl-gap-y-md {
87
+ row-gap: var(--spacing-md);
88
+ }
89
+
90
+ .bl-gap-y-lg {
91
+ row-gap: var(--spacing-lg);
92
+ }
93
+
94
+ .bl-gap-y-xl {
95
+ row-gap: var(--spacing-xl);
96
+ }
97
+
98
+ .bl-gap-y-2xl {
99
+ row-gap: var(--spacing-2xl);
100
+ }
101
+
102
+ // Grid Column Span
103
+ @for $i from 1 through 12 {
104
+ .bl-col-span-#{$i} {
105
+ grid-column: span #{$i} / span #{$i};
106
+ }
107
+ }
108
+
109
+ // Grid Row Span
110
+ @for $i from 1 through 12 {
111
+ .bl-row-span-#{$i} {
112
+ grid-row: span #{$i} / span #{$i};
113
+ }
114
+ }
115
+
116
+ // Auto Flow
117
+ .bl-grid-flow-row {
118
+ grid-auto-flow: row;
119
+ }
120
+
121
+ .bl-grid-flow-col {
122
+ grid-auto-flow: column;
123
+ }
124
+
125
+ .bl-grid-flow-dense {
126
+ grid-auto-flow: dense;
127
+ }
128
+