@ibis-design/css 0.8.2 → 1.0.0-alpha.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 (35) hide show
  1. package/README.md +46 -14
  2. package/dist/bootstrap-overrides.css +81 -0
  3. package/dist/components/authLayout.css +124 -0
  4. package/dist/components/banner.css +13 -17
  5. package/dist/components/button.css +13 -13
  6. package/dist/components/card.css +55 -0
  7. package/dist/components/cardLayout.css +71 -0
  8. package/dist/components/checkbox.css +29 -11
  9. package/dist/components/chips.css +8 -8
  10. package/dist/components/dashboardLayout.css +92 -0
  11. package/dist/components/dropdown.css +34 -16
  12. package/dist/components/dropdownButton.css +42 -28
  13. package/dist/components/formLayout.css +88 -0
  14. package/dist/components/navBottom.css +32 -0
  15. package/dist/components/navButton.css +233 -0
  16. package/dist/components/navDrawer.css +168 -0
  17. package/dist/components/navRail.css +135 -0
  18. package/dist/components/navShell.css +314 -0
  19. package/dist/components/pillTab.css +7 -12
  20. package/dist/components/radio.css +14 -13
  21. package/dist/components/switch.css +5 -8
  22. package/dist/components/textInput.css +12 -15
  23. package/dist/components/textarea.css +7 -13
  24. package/dist/components/textlink.css +6 -14
  25. package/dist/components/tipIndicator.css +4 -10
  26. package/dist/components/toaster.css +21 -27
  27. package/dist/components/topBar.css +52 -0
  28. package/dist/design-tokens.css +210 -86
  29. package/dist/tailwind.preset.js +1 -1
  30. package/dist/tailwind.theme.js +42 -2
  31. package/package.json +34 -31
  32. package/src/lib/assemble-bootstrap-overrides.ts +23 -0
  33. package/src/lib/assemble-design-tokens.ts +22 -0
  34. package/src/lib/set-theme.ts +79 -0
  35. package/src/lib/themes.ts +74 -0
@@ -0,0 +1,233 @@
1
+ /* Shared nav button styles — import via @ibis-design/css/components/navButton.css */
2
+
3
+ .ib-nav-button {
4
+ min-width: 4em;
5
+ height: 3.5em;
6
+ border: var(--border-width-default) solid transparent;
7
+ cursor: pointer;
8
+ transition:
9
+ filter var(--transition-duration-fast) var(--transition-timing-default),
10
+ transform var(--transition-duration-fast) var(--transition-timing-default),
11
+ box-shadow var(--transition-duration-fast) var(--transition-timing-default);
12
+ display: inline-flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ }
16
+
17
+ .ib-nav-button-drawer {
18
+ height: 3.5em;
19
+ width: 100%;
20
+ justify-content: flex-start;
21
+ }
22
+
23
+ .ib-nav-button-rail {
24
+ height: 3.5em;
25
+ width: 4em;
26
+ justify-content: center;
27
+ align-items: center;
28
+ }
29
+
30
+ .ib-nav-button-content {
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: flex-start;
34
+ gap: var(--spacing-2);
35
+ width: 100%;
36
+ height: 100%;
37
+ }
38
+
39
+ .ib-nav-button-icon {
40
+ display: flex;
41
+ justify-content: center;
42
+ align-items: center;
43
+ }
44
+
45
+ .ib-nav-button-label {
46
+ font-family: var(--font-family-sans);
47
+ font-weight: var(--font-weight-extralight);
48
+ font-size: var(--font-size-body-sm);
49
+ text-align: left;
50
+ margin-left: var(--spacing-1);
51
+ }
52
+
53
+ .ib-nav-button-bottom-container {
54
+ display: flex;
55
+ flex-direction: column;
56
+ align-items: center;
57
+ justify-content: center;
58
+ gap: var(--spacing-1);
59
+ }
60
+
61
+ .ib-nav-button-bottom {
62
+ height: 3.5em;
63
+ width: 5em;
64
+ justify-content: center;
65
+ align-items: center;
66
+ padding: var(--spacing-2) var(--spacing-4);
67
+ border-radius: var(--border-radius-xl);
68
+ }
69
+
70
+ .ib-nav-button-bottom-label {
71
+ font-family: var(--font-family-sans);
72
+ font-weight: var(--font-weight-extralight);
73
+ font-size: var(--font-size-body-sm);
74
+ color: var(--color-text-primary);
75
+ text-align: center;
76
+ margin-top: var(--spacing-1);
77
+ }
78
+
79
+ .ib-nav-button--sm {
80
+ padding: var(--spacing-1) var(--spacing-2);
81
+ font-size: var(--font-size-body-sm);
82
+ border-radius: var(--border-radius-sm);
83
+ }
84
+
85
+ .ib-nav-button--md {
86
+ padding: var(--spacing-2) var(--spacing-4);
87
+ font-size: var(--font-size-body-sm);
88
+ border-radius: var(--border-radius-md);
89
+ }
90
+
91
+ .ib-nav-button--lg {
92
+ padding: var(--spacing-3) var(--spacing-6);
93
+ font-size: var(--font-size-body-lg);
94
+ border-radius: var(--border-radius-lg);
95
+ }
96
+
97
+ .ib-nav-button--icon-only {
98
+ width: 4em;
99
+ height: 3.5em;
100
+ padding: var(--spacing-2);
101
+ justify-content: center;
102
+ align-items: center;
103
+ }
104
+
105
+ .ib-nav-button-drawer.ib-nav-button--icon-only {
106
+ width: 4em;
107
+ }
108
+
109
+ .ib-nav-button--icon-only .ib-nav-button-content {
110
+ gap: 0;
111
+ width: auto;
112
+ }
113
+
114
+ .ib-nav-button--primary {
115
+ background: transparent;
116
+ color: var(--color-interactive-primary-fg);
117
+ border: none;
118
+ }
119
+
120
+ .ib-nav-button--primary-selected {
121
+ background: var(--color-interactive-primary-bg-selected);
122
+ color: var(--color-interactive-primary-bg-menu-selected);
123
+ border: none;
124
+ }
125
+
126
+ .ib-nav-button--primary:not(:disabled):hover,
127
+ .ib-nav-button--primary:not(:disabled):active {
128
+ box-shadow: none;
129
+ }
130
+
131
+ .ib-nav-button--primary:not(:disabled):hover {
132
+ background: var(--color-interactive-primary-bg-hover);
133
+ border-width: var(--border-width-hairline);
134
+ }
135
+
136
+ .ib-nav-button--primary:not(:disabled):active {
137
+ background: var(--color-interactive-primary-bg-hover);
138
+ }
139
+
140
+ .ib-nav-button--primary:disabled {
141
+ background: var(--color-surface-disabled);
142
+ color: var(--color-interactive-primary-fg-disabled);
143
+ }
144
+
145
+ .ib-nav-button--secondary {
146
+ background-color: transparent;
147
+ color: var(--color-brand-secondary);
148
+ border-color: var(--color-brand-secondary);
149
+ }
150
+
151
+ .ib-nav-button--secondary:not(:disabled):hover {
152
+ background-color: var(--color-surface-subtle);
153
+ }
154
+
155
+ .ib-nav-button:disabled {
156
+ opacity: var(--opacity-disabled);
157
+ cursor: not-allowed;
158
+ }
159
+
160
+ .ib-nav-button--loading {
161
+ position: relative;
162
+ cursor: not-allowed;
163
+ pointer-events: none;
164
+ }
165
+
166
+ .ib-nav-button-loader {
167
+ position: absolute;
168
+ width: 1em;
169
+ height: 1em;
170
+ border: var(--border-width-default) solid var(--color-text-primary);
171
+ border-top-color: var(--color-surface-default);
172
+ border-radius: 50%;
173
+ animation: ib-nav-button-spin 0.8s linear infinite;
174
+ top: 50%;
175
+ left: 50%;
176
+ transform: translate(-50%, -50%);
177
+ }
178
+
179
+ .ib-nav-button--skeleton {
180
+ position: relative;
181
+ overflow: hidden;
182
+ background: var(--color-surface-muted);
183
+ color: transparent;
184
+ border-color: var(--color-text-muted);
185
+ cursor: default;
186
+ pointer-events: none;
187
+ }
188
+
189
+ .ib-nav-button--skeleton::after {
190
+ content: "";
191
+ position: absolute;
192
+ top: 50%;
193
+ left: 50%;
194
+ transform: translate(-50%, -50%);
195
+ width: 80%;
196
+ height: 1em;
197
+ background-color: var(--color-text-disabled);
198
+ }
199
+
200
+ .ib-nav-button--icon-only.ib-nav-button--skeleton::after {
201
+ width: 1em;
202
+ height: 1em;
203
+ border-radius: var(--border-radius-xs);
204
+ }
205
+
206
+ .ib-nav-button--skeleton::before {
207
+ content: "";
208
+ position: absolute;
209
+ inset: 0;
210
+ background: var(--gradient-skeleton);
211
+ transform: translateX(-100%);
212
+ animation: ib-nav-shimmer 2s infinite;
213
+ border-radius: inherit;
214
+ }
215
+
216
+ @keyframes ib-nav-button-spin {
217
+ from {
218
+ transform: translate(-50%, -50%) rotate(0deg);
219
+ }
220
+ to {
221
+ transform: translate(-50%, -50%) rotate(360deg);
222
+ }
223
+ }
224
+
225
+ @keyframes ib-nav-shimmer {
226
+ 0% {
227
+ transform: translateX(-100%);
228
+ }
229
+
230
+ 100% {
231
+ transform: translateX(100%);
232
+ }
233
+ }
@@ -0,0 +1,168 @@
1
+ /* Nav Drawer — import via @ibis-design/css/components/navDrawer.css */
2
+
3
+ .ib-nav-drawer {
4
+ position: fixed;
5
+ top: 0;
6
+ left: 0;
7
+ height: 100dvh;
8
+ width: 360px;
9
+ display: flex;
10
+ flex-direction: column;
11
+ background-color: var(--color-surface-default);
12
+ border-right: var(--border-width-thin) solid var(--border-color-subtle);
13
+ border-bottom-right-radius: var(--border-radius-lg);
14
+ box-shadow: 1px 0 8px 0 var(--shadow-color-black-soft);
15
+ z-index: var(--z-index-sticky);
16
+ box-sizing: border-box;
17
+ padding: var(--spacing-4) 0;
18
+ }
19
+
20
+ .ib-nav-drawer__top {
21
+ display: flex;
22
+ flex-direction: row;
23
+ align-items: center;
24
+ justify-content: space-between;
25
+ width: 100%;
26
+ padding: 0 var(--spacing-4);
27
+ box-sizing: border-box;
28
+ margin-bottom: var(--spacing-6);
29
+ }
30
+
31
+ .ib-nav-drawer__logo {
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: flex-start;
35
+ }
36
+
37
+ .ib-nav-drawer__logo-placeholder {
38
+ width: 40px;
39
+ height: 40px;
40
+ border-radius: var(--border-radius-full);
41
+ background: var(--gradient-brand-primary);
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ color: var(--color-text-inverse);
46
+ font-family: var(--font-family-heading);
47
+ font-weight: var(--font-weight-bold);
48
+ font-size: var(--font-size-body-lg);
49
+ }
50
+
51
+ .ib-nav-drawer-logo-image {
52
+ height: 48px;
53
+ width: auto;
54
+ object-fit: contain;
55
+ }
56
+
57
+ .ib-nav-drawer__toggle {
58
+ all: unset;
59
+ display: flex;
60
+ align-items: center;
61
+ justify-content: center;
62
+ width: 28px;
63
+ height: 28px;
64
+ border-radius: var(--border-radius-md);
65
+ color: var(--color-text-muted);
66
+ cursor: pointer;
67
+ transition:
68
+ background-color var(--transition-duration-fast) var(--transition-timing-default),
69
+ color var(--transition-duration-fast) var(--transition-timing-default);
70
+ }
71
+
72
+ .ib-nav-drawer__toggle:hover {
73
+ background-color: var(--color-interactive-neutral-bg-hover);
74
+ color: var(--color-text-primary);
75
+ }
76
+
77
+ .ib-nav-drawer__toggle svg {
78
+ width: 16px;
79
+ height: 16px;
80
+ }
81
+
82
+ .ib-nav-drawer__section {
83
+ display: flex;
84
+ flex-direction: column;
85
+ gap: var(--spacing-2);
86
+ flex: 1;
87
+ width: 100%;
88
+ padding: 0 var(--spacing-4);
89
+ box-sizing: border-box;
90
+ overflow-y: auto;
91
+ }
92
+
93
+ .ib-nav-drawer__section-label {
94
+ font-family: var(--font-family-sans);
95
+ font-size: var(--font-size-body-sm);
96
+ font-weight: var(--font-weight-medium);
97
+ color: var(--color-text-muted);
98
+ padding: 0 var(--spacing-2);
99
+ }
100
+
101
+ .ib-nav-drawer__nav {
102
+ display: flex;
103
+ flex-direction: column;
104
+ gap: var(--spacing-2);
105
+ width: 100%;
106
+ }
107
+
108
+ .ib-nav-drawer__bottom {
109
+ display: flex;
110
+ flex-direction: column;
111
+ gap: var(--spacing-2);
112
+ width: 100%;
113
+ padding: 0 var(--spacing-4);
114
+ box-sizing: border-box;
115
+ border-top: var(--border-width-thin) solid var(--border-color-subtle);
116
+ padding-top: var(--spacing-4);
117
+ margin-top: var(--spacing-4);
118
+ }
119
+
120
+ .ib-nav-drawer__actions {
121
+ display: flex;
122
+ flex-direction: column;
123
+ gap: var(--spacing-2);
124
+ width: 100%;
125
+ }
126
+
127
+ .ib-nav-drawer__footer {
128
+ display: flex;
129
+ flex-direction: column;
130
+ gap: var(--spacing-1);
131
+ padding: var(--spacing-3) var(--spacing-2) 0;
132
+ }
133
+
134
+ .ib-nav-drawer__footer span {
135
+ font-family: var(--font-family-sans);
136
+ font-size: var(--font-size-body-xs);
137
+ color: var(--color-text-muted);
138
+ }
139
+
140
+ .ib-nav-drawer-icon {
141
+ display: flex;
142
+ align-items: center;
143
+ justify-content: center;
144
+ transition: transform var(--transition-duration-normal) var(--transition-timing-default);
145
+ transform: scale(1);
146
+ }
147
+
148
+ .ib-nav-drawer-icon--selected {
149
+ transform: scale(1.1);
150
+ }
151
+
152
+ :global(.ib-nav-signout:not(:disabled):hover) {
153
+ background-color: color-mix(
154
+ in srgb,
155
+ var(--color-status-error) calc(var(--opacity-5) * 100%),
156
+ transparent
157
+ );
158
+ }
159
+
160
+ /* Start off-screen to the left, slide in when open
161
+ :global(.ib-nav-drawer) {
162
+ transition: transform var(--transition-duration-slow) var(--transition-timing-in-out);
163
+ transform: translateX(-100%);
164
+ }
165
+
166
+ :global(.ib-nav-drawer--visible) {
167
+ transform: translateX(0);
168
+ } */
@@ -0,0 +1,135 @@
1
+ /* Nav Rail — import via @ibis-design/css/components/navRail.css */
2
+
3
+ .ib-nav-rail {
4
+ position: fixed;
5
+ top: 0;
6
+ left: 0;
7
+ height: 100dvh;
8
+ width: 72px;
9
+ display: flex;
10
+ flex-direction: column;
11
+ align-items: center;
12
+ background-color: var(--color-surface-default);
13
+ border-right: var(--border-width-thin) solid var(--border-color-subtle);
14
+ border-bottom-right-radius: var(--border-radius-lg);
15
+ box-shadow: 1px 0 8px 0 var(--shadow-color-black-soft);
16
+ z-index: var(--z-index-sticky);
17
+ box-sizing: border-box;
18
+ padding: var(--spacing-4) 0;
19
+ }
20
+
21
+ .ib-nav-rail__top {
22
+ display: flex;
23
+ flex-direction: column;
24
+ align-items: center;
25
+ gap: var(--spacing-3);
26
+ width: 100%;
27
+ padding: 0 var(--spacing-2);
28
+ box-sizing: border-box;
29
+ margin-bottom: var(--spacing-4);
30
+ }
31
+
32
+ .ib-nav-rail__logo {
33
+ display: flex;
34
+ align-items: center;
35
+ justify-content: center;
36
+ width: 100%;
37
+ }
38
+
39
+ .ib-nav-rail__logo-placeholder {
40
+ width: 40px;
41
+ height: 40px;
42
+ border-radius: var(--border-radius-full);
43
+ background: var(--gradient-brand-primary);
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ color: var(--color-text-inverse);
48
+ font-family: var(--font-family-heading);
49
+ font-weight: var(--font-weight-bold);
50
+ font-size: var(--font-size-body-lg);
51
+ }
52
+
53
+ .ib-nav-rail-logo-image {
54
+ width: 40px;
55
+ height: 40px;
56
+ object-fit: contain;
57
+ }
58
+
59
+ .ib-nav-rail__toggle {
60
+ all: unset;
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: center;
64
+ width: 28px;
65
+ height: 28px;
66
+ border-radius: var(--border-radius-md);
67
+ color: var(--color-text-muted);
68
+ cursor: pointer;
69
+ transition:
70
+ background-color var(--transition-duration-fast) var(--transition-timing-default),
71
+ color var(--transition-duration-fast) var(--transition-timing-default);
72
+ }
73
+
74
+ .ib-nav-rail__toggle:hover {
75
+ background-color: var(--color-interactive-neutral-bg-hover);
76
+ color: var(--color-text-primary);
77
+ }
78
+
79
+ .ib-nav-rail__toggle svg {
80
+ width: 16px;
81
+ height: 16px;
82
+ }
83
+
84
+ .ib-nav-rail__nav {
85
+ display: flex;
86
+ flex-direction: column;
87
+ align-items: center;
88
+ gap: var(--spacing-1);
89
+ flex: 1;
90
+ width: 100%;
91
+ padding: 0 var(--spacing-2);
92
+ box-sizing: border-box;
93
+ }
94
+
95
+ .ib-nav-rail__actions {
96
+ display: flex;
97
+ flex-direction: column;
98
+ align-items: center;
99
+ gap: var(--spacing-1);
100
+ width: 100%;
101
+ padding: 0 var(--spacing-2);
102
+ box-sizing: border-box;
103
+ border-top: var(--border-width-thin) solid var(--border-color-subtle);
104
+ padding-top: var(--spacing-3);
105
+ margin-top: var(--spacing-3);
106
+ }
107
+
108
+ .ib-nav-rail-icon {
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ transition: transform var(--transition-duration-normal) var(--transition-timing-default);
113
+ transform: scale(1);
114
+ }
115
+
116
+ .ib-nav-rail-icon--selected {
117
+ transform: scale(1.1);
118
+ }
119
+
120
+ :global(.ib-nav-signout:not(:disabled):hover) {
121
+ background-color: color-mix(
122
+ in srgb,
123
+ var(--color-status-error) calc(var(--opacity-5) * 100%),
124
+ transparent
125
+ );
126
+ }
127
+
128
+ /* Slide out to the left when drawer opens
129
+ :global(.ib-nav-rail) {
130
+ transition: transform var(--transition-duration-slow) var(--transition-timing-in-out);
131
+ }
132
+
133
+ :global(.ib-nav-rail--hidden) {
134
+ transform: translateX(-100%);
135
+ } */