@gitbutler/design-core 2.2.2 → 3.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.
package/README.md CHANGED
@@ -10,9 +10,23 @@ npm install @gitbutler/design-core
10
10
 
11
11
  ## Usage
12
12
 
13
+ ### Single Import
14
+
15
+ The easiest way to get everything — fonts, CSS reset, text utilities, and design tokens:
16
+
17
+ ```css
18
+ @import "@gitbutler/design-core/core";
19
+ ```
20
+
21
+ Or in JavaScript/TypeScript:
22
+
23
+ ```javascript
24
+ import "@gitbutler/design-core/core";
25
+ ```
26
+
13
27
  ### Design Tokens (CSS)
14
28
 
15
- Import the design tokens CSS file:
29
+ Import only the design tokens CSS file:
16
30
 
17
31
  ```css
18
32
  @import "@gitbutler/design-core/tokens";
@@ -28,103 +42,51 @@ This provides CSS custom properties for colors, spacing, typography, and other d
28
42
 
29
43
  ### Fonts
30
44
 
31
- Import all fonts:
45
+ Import all font declarations:
32
46
 
33
47
  ```css
34
48
  @import "@gitbutler/design-core/fonts";
35
49
  ```
36
50
 
37
- Or import individual font families:
51
+ Or reference individual font files directly:
38
52
 
39
53
  ```css
40
- @import "@gitbutler/design-core/fonts/inter/Inter-Regular.woff2";
41
- @import "@gitbutler/design-core/fonts/geist-mono/GeistMono-Regular.woff2";
54
+ @import "@gitbutler/design-core/fonts/inter/Inter-Variable.woff2";
55
+ @import "@gitbutler/design-core/fonts/geist-mono/GeistMono-Variable.woff2";
42
56
  @import "@gitbutler/design-core/fonts/but-head/But-Head-Regular.woff2";
43
57
  ```
44
58
 
45
- ### Core Styles
59
+ ### Styles
46
60
 
47
- Import the core CSS styles:
61
+ Import individual style sheets:
48
62
 
49
63
  ```css
50
- @import "@gitbutler/design-core/core";
51
- ```
52
-
53
- ### Style Utilities
54
-
55
- Import individual style utilities:
56
-
57
- ```css
58
- @import "@gitbutler/design-core/styles"; /* Base styles */
59
- @import "@gitbutler/design-core/styles/base"; /* Base styles */
60
64
  @import "@gitbutler/design-core/styles/reset"; /* CSS reset */
61
65
  @import "@gitbutler/design-core/styles/text"; /* Text utilities */
62
66
  ```
63
67
 
64
- ### Utility Classes
65
-
66
- Import all utility classes at once:
67
-
68
- ```css
69
- @import "@gitbutler/design-core/utility";
70
- ```
71
-
72
- Or in JavaScript/TypeScript:
73
-
74
- ```javascript
75
- import "@gitbutler/design-core/utility";
76
- ```
77
-
78
- Or import individual utility class files:
68
+ **Text utilities** include:
79
69
 
80
- ```css
81
- @import "@gitbutler/design-core/utility/general"; /* Border radius, colors, borders */
82
- @import "@gitbutler/design-core/utility/helpers"; /* Scrollbar helpers, stack utilities */
83
- @import "@gitbutler/design-core/utility/layout"; /* Spacing, positioning, flexbox, overflow, text alignment */
84
- ```
85
-
86
- **General utilities** include:
87
-
88
- - Border radius (`.radius-s`, `.radius-m`, `.radius-ml`, `.radius-l`)
89
- - Background colors (`.clr-bg-1`, `.clr-bg-2`, `.clr-bg-3` and their muted variants)
90
- - Borders (`.clr-border-1`, `.clr-border-2`, `.clr-border-3`)
91
- - Text colors (`.text-1`, `.text-2`, `.text-3`)
92
-
93
- **Helper utilities** include:
94
-
95
- - Scrollbar utilities (`.hide-native-scrollbar`, `.scrollbar`)
96
- - Stack layouts (`.stack-v`, `.stack-h`)
97
-
98
- **Layout utilities** include:
99
-
100
- - Spacing (margin, padding, gap in 2px increments from 2px to 48px)
101
- - Positioning (`.relative`, `.absolute`, `.fixed`, `.sticky`, positioning utilities)
102
- - Size (`.full-width`, `.full-height`)
103
- - Flexbox (`.flex`, `.flex-col`, alignment and justify utilities, flex grow/shrink)
104
- - Overflow (`.overflow-hidden`, `.overflow-auto`, `.overflow-scroll`, `.overflow-visible`)
105
- - Text alignment (`.text-center`, `.text-left`, `.text-right`, `.text-nowrap`)
70
+ - Size classes (`.text-10`, `.text-11`, `.text-12`, `.text-13`, `.text-14`, `.text-15`, `.text-16`, `.text-accent-head`)
71
+ - Weight modifiers (`.text-semibold`, `.text-bold`)
72
+ - Style modifiers (`.text-italic`, `.text-monospace`, `.text-body`, `.text-balance`, `.text-pre`)
106
73
 
107
74
  ## Available Exports
108
75
 
109
- - `@gitbutler/design-core/tokens` - CSS custom properties
76
+ - `@gitbutler/design-core/core` - Single import: fonts + reset + text utilities + tokens
77
+ - `@gitbutler/design-core/tokens` - CSS custom properties (design tokens)
110
78
  - `@gitbutler/design-core/fonts` - All font CSS declarations
111
79
  - `@gitbutler/design-core/fonts/*` - Individual font files
112
- - `@gitbutler/design-core/core` - Core CSS styles
113
- - `@gitbutler/design-core/styles` - Base style utilities
114
- - `@gitbutler/design-core/styles/base` - Base styles
115
80
  - `@gitbutler/design-core/styles/reset` - CSS reset
116
- - `@gitbutler/design-core/styles/text` - Text utilities
117
- - `@gitbutler/design-core/utility` - All utility classes (combined)
118
- - `@gitbutler/design-core/utility/general` - General utility classes (borders, colors)
119
- - `@gitbutler/design-core/utility/helpers` - Helper utility classes (scrollbar, stacks)
120
- - `@gitbutler/design-core/utility/layout` - Layout utility classes (spacing, flexbox, positioning)
81
+ - `@gitbutler/design-core/styles/text` - Text utility classes
121
82
 
122
83
  ## Included Fonts
123
84
 
124
- - **Inter** - Primary UI font family
125
- - **Geist Mono** - Monospace font for code
126
- - **But Head** - Brand display font
127
- - **PP Editorial** - Editorial content font
85
+ All fonts are variable fonts unless noted.
86
+
87
+ - **Inter** Primary UI font (`Inter-Variable.woff2`, `Inter-Variable-Italic.woff2`)
88
+ - **Geist Mono** Monospace font for code (`GeistMono-Variable.woff2`)
89
+ - **But Head** — Brand display font (`But-Head-Regular.woff2`, `But-Head-Italic.woff2`)
128
90
 
129
91
  ## Development
130
92
 
package/fonts/fonts.css CHANGED
@@ -30,79 +30,23 @@
30
30
 
31
31
  @font-face {
32
32
  font-style: normal;
33
- font-weight: 400;
34
- src: url("geist-mono/GeistMono-Regular.woff2") format("woff2");
35
- font-family: "Geist Mono";
36
- font-display: swap;
37
- }
38
- @font-face {
39
- font-style: normal;
40
- font-weight: 500;
41
- src: url("geist-mono/GeistMono-Medium.woff2") format("woff2");
42
- font-family: "Geist Mono";
43
- font-display: swap;
44
- }
45
- @font-face {
46
- font-style: normal;
47
- font-weight: 700;
48
- src: url("geist-mono/GeistMono-Bold.woff2") format("woff2");
33
+ font-weight: 100 900;
34
+ src: url("geist-mono/GeistMono-Variable.woff2") format("woff2");
49
35
  font-family: "Geist Mono";
50
36
  font-display: swap;
51
37
  }
52
38
 
53
39
  @font-face {
54
40
  font-style: normal;
55
- font-weight: 400;
56
- src: url("inter/Inter-Regular.woff2") format("woff2");
57
- font-family: "Inter";
58
- font-display: swap;
59
- }
60
- @font-face {
61
- font-style: italic;
62
- font-weight: 400;
63
- src: url("inter/Inter-Italic.woff2") format("woff2");
64
- font-family: "Inter";
65
- font-display: swap;
66
- }
67
- @font-face {
68
- font-style: normal;
69
- font-weight: 500;
70
- src: url("inter/Inter-Medium.woff2") format("woff2");
71
- font-family: "Inter";
72
- font-display: swap;
73
- }
74
- @font-face {
75
- font-style: italic;
76
- font-weight: 500;
77
- src: url("inter/Inter-MediumItalic.woff2") format("woff2");
78
- font-family: "Inter";
79
- font-display: swap;
80
- }
81
- @font-face {
82
- font-style: normal;
83
- font-weight: 600;
84
- src: url("inter/Inter-SemiBold.woff2") format("woff2");
85
- font-family: "Inter";
86
- font-display: swap;
87
- }
88
- @font-face {
89
- font-style: italic;
90
- font-weight: 600;
91
- src: url("inter/Inter-SemiBoldItalic.woff2") format("woff2");
92
- font-family: "Inter";
93
- font-display: swap;
94
- }
95
- @font-face {
96
- font-style: normal;
97
- font-weight: 700;
98
- src: url("inter/Inter-Bold.woff2") format("woff2");
41
+ font-weight: 100 900;
42
+ src: url("inter/Inter-Variable.woff2") format("woff2");
99
43
  font-family: "Inter";
100
44
  font-display: swap;
101
45
  }
102
46
  @font-face {
103
47
  font-style: italic;
104
- font-weight: 700;
105
- src: url("inter/Inter-BoldItalic.woff2") format("woff2");
48
+ font-weight: 100 900;
49
+ src: url("inter/Inter-Variable-Italic.woff2") format("woff2");
106
50
  font-family: "Inter";
107
51
  font-display: swap;
108
52
  }
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitbutler/design-core",
3
- "version": "2.2.2",
3
+ "version": "3.0.0",
4
4
  "type": "module",
5
5
  "description": "Design tokens for GitButler applications",
6
6
  "keywords": [
@@ -20,25 +20,16 @@
20
20
  "./fonts": "./fonts/fonts.css",
21
21
  "./fonts/*": "./fonts/*",
22
22
  "./core": "./core.css",
23
- "./styles": "./styles/base.css",
24
- "./styles/base": "./styles/base.css",
25
23
  "./styles/reset": "./styles/reset.css",
26
- "./styles/text": "./styles/text.css",
27
- "./utility": "./utility/utility.css",
28
- "./utility/general": "./utility/general.css",
29
- "./utility/helpers": "./utility/helpers.css",
30
- "./utility/layout": "./utility/layout.min.css"
24
+ "./styles/text": "./styles/text.css"
31
25
  },
32
26
  "scripts": {
33
- "build": "npx tz build",
34
- "build:tokens": "npx tz build",
35
- "dev:tokens": "npx tz build --watch",
36
- "prepublishOnly": "npm run build:tokens",
27
+ "build": "node scripts/postprocess-light-dark.mjs",
28
+ "dev:tokens": "node scripts/postprocess-light-dark.mjs --watch",
29
+ "prepublishOnly": "npm run build",
37
30
  "format": "prettier --write \"**/*.{css,ts,js}\"",
38
31
  "format:check": "prettier --check \"**/*.{css,ts,js}\"",
39
- "dev:hue-dini": "cd tools/hue-dini && pnpm dev",
40
- "dev:generator": "cd color-generator && pnpm dev",
41
- "build:generator": "cd color-generator && pnpm build"
32
+ "dev:hue-dini": "cd tools/hue-dini && pnpm dev"
42
33
  },
43
34
  "devDependencies": {
44
35
  "@terrazzo/cli": "0.10.3",
@@ -50,7 +41,6 @@
50
41
  "tokens/",
51
42
  "fonts/",
52
43
  "styles/",
53
- "utility/",
54
44
  "core.css",
55
45
  "README.md"
56
46
  ],
package/styles/reset.css CHANGED
@@ -1,18 +1,17 @@
1
1
  /* BOILERPLATE CSS */
2
- /* reset all styles */
3
2
  @layer reset {
4
- /* base */
3
+ /* Box sizing rules */
5
4
  *,
6
- :after,
7
- :before {
5
+ *::before,
6
+ *::after {
8
7
  box-sizing: border-box;
9
- border: 0 solid;
10
8
  }
11
9
 
10
+ /* Prevent font size inflation */
12
11
  html {
13
- overscroll-behavior: none;
14
- font-size: 16px;
15
- line-height: 1.5;
12
+ -moz-text-size-adjust: none;
13
+ -webkit-text-size-adjust: none;
14
+ text-size-adjust: none;
16
15
  -webkit-font-smoothing: antialiased;
17
16
  -moz-osx-font-smoothing: grayscale;
18
17
  text-rendering: optimizeLegibility;
@@ -24,246 +23,57 @@
24
23
  margin: 0;
25
24
  overflow-x: hidden;
26
25
  color: var(--text-1);
27
- font-family: var(--font-default);
26
+ font-family: var(--fontfamily-base);
28
27
  }
29
28
 
30
- /* elements */
31
- hr {
32
- height: 0;
33
- border-top-width: 1px;
34
- color: inherit;
35
- }
36
-
37
- abbr:where([title]) {
38
- -webkit-text-decoration: underline dotted;
39
- text-decoration: underline dotted;
40
- }
41
-
42
- h1,
43
- h2,
44
- h3,
45
- h4,
46
- h5,
47
- h6 {
48
- font-weight: inherit;
49
- font-size: inherit;
50
- }
51
-
52
- a {
53
- color: inherit;
54
- text-decoration: inherit;
55
- }
56
-
57
- b,
58
- strong {
59
- font-weight: bolder;
60
- }
61
-
62
- code,
63
- kbd,
64
- pre,
65
- samp {
66
- font-size: 1em;
67
- font-family: var(--font-mono);
68
- font-variation-settings: normal;
69
- font-feature-settings: normal;
70
- }
71
-
72
- small {
73
- font-size: 80%;
74
- }
75
-
76
- sub,
77
- sup {
78
- position: relative;
79
- font-size: 75%;
80
- line-height: 0;
81
- vertical-align: baseline;
82
- }
83
-
84
- sub {
85
- bottom: -0.25em;
86
- }
87
-
88
- sup {
89
- top: -0.5em;
90
- }
91
-
92
- table {
93
- border-color: inherit;
94
- border-collapse: collapse;
95
- text-indent: 0;
96
- }
97
-
98
- button,
99
29
  input,
100
- optgroup,
101
- select,
102
- textarea {
103
- margin: 0;
30
+ textarea,
31
+ select {
104
32
  padding: 0;
105
- border: 0;
33
+ border: none;
34
+ background: none;
106
35
  color: inherit;
107
- font-weight: inherit;
108
- font-size: 100%;
36
+ font: inherit;
109
37
  line-height: inherit;
110
- font-family: inherit;
111
- font-variation-settings: inherit;
112
- font-feature-settings: inherit;
113
- letter-spacing: inherit;
114
- background: transparent;
115
- }
116
-
117
- button,
118
- select {
119
- text-transform: none;
120
- }
121
-
122
- button,
123
- input:where([type="button"]),
124
- input:where([type="reset"]),
125
- input:where([type="submit"]) {
126
- -webkit-appearance: button;
127
- background-image: none;
128
- background-color: transparent;
129
- outline: none;
130
- touch-action: manipulation;
131
- }
132
-
133
- :-moz-focusring {
134
- outline: auto;
135
- }
136
-
137
- :-moz-ui-invalid {
138
- box-shadow: none;
139
- }
140
-
141
- progress {
142
- vertical-align: baseline;
143
38
  }
144
39
 
145
- ::-webkit-inner-spin-button,
146
- ::-webkit-outer-spin-button {
147
- height: auto;
148
- }
149
-
150
- [type="search"] {
151
- -webkit-appearance: textfield;
152
- outline-offset: -2px;
153
- }
154
-
155
- ::-webkit-search-decoration {
156
- -webkit-appearance: none;
157
- }
158
-
159
- ::-webkit-file-upload-button {
160
- -webkit-appearance: button;
40
+ button {
41
+ padding: 0;
42
+ border: none;
43
+ background: none;
44
+ color: inherit;
161
45
  font: inherit;
46
+ line-height: inherit;
47
+ text-align: left;
162
48
  }
163
49
 
164
- summary {
165
- display: list-item;
50
+ * {
51
+ box-sizing: border-box;
166
52
  }
167
53
 
168
- blockquote,
169
- dd,
170
- dl,
171
- figure,
172
54
  h1,
173
55
  h2,
174
56
  h3,
175
57
  h4,
176
58
  h5,
177
- h6,
178
- hr,
179
- p,
180
- pre {
181
- margin: 0;
59
+ h6 {
60
+ margin-block: 0;
182
61
  }
183
62
 
184
- fieldset {
185
- margin: 0;
63
+ code,
64
+ pre {
65
+ font-family: var(--fontfamily-mono);
186
66
  }
187
67
 
188
- fieldset,
189
- legend {
190
- padding: 0;
68
+ ul,
69
+ pre,
70
+ p {
71
+ margin-block: 0;
191
72
  }
192
73
 
193
- menu,
194
- ol,
195
- ul {
196
- margin: 0;
197
- padding: 0;
74
+ ul,
75
+ ol {
76
+ padding-left: 0;
198
77
  list-style: none;
199
78
  }
200
-
201
- dialog {
202
- padding: 0;
203
- }
204
-
205
- textarea {
206
- resize: vertical;
207
- }
208
-
209
- input::-moz-placeholder,
210
- textarea::-moz-placeholder {
211
- color: #9ca3af;
212
- opacity: 1;
213
- }
214
-
215
- input::placeholder,
216
- textarea::placeholder {
217
- color: #9ca3af;
218
- opacity: 1;
219
- }
220
-
221
- [role="button"],
222
- button {
223
- text-align: left;
224
- cursor: pointer;
225
- }
226
-
227
- [role="button"]:disabled,
228
- button:disabled,
229
- :disabled {
230
- cursor: not-allowed;
231
- }
232
-
233
- audio,
234
- canvas,
235
- embed,
236
- iframe,
237
- img,
238
- object,
239
- video {
240
- display: block;
241
- vertical-align: middle;
242
- }
243
-
244
- img,
245
- video {
246
- max-width: 100%;
247
- height: auto;
248
- }
249
-
250
- [hidden] {
251
- display: none;
252
- }
253
-
254
- /* Focus outline for keyboard navigation */
255
- a:focus-visible,
256
- button:focus-visible,
257
- input:focus-visible,
258
- select:focus-visible,
259
- textarea:focus-visible,
260
- [tabindex]:focus-visible,
261
- [role="button"]:focus-visible,
262
- [role="link"]:focus-visible,
263
- details:focus-visible,
264
- summary:focus-visible,
265
- .focus-visible:focus-visible {
266
- outline: 2px solid var(--clr-theme-pop-element);
267
- outline-offset: -2px;
268
- }
269
79
  }