@pieai/swimmer-ui-kit 1.0.1 → 1.2.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/CHANGELOG.md +131 -0
- package/bin/swimmer-ui-check.mjs +136 -0
- package/dist/fonts/OFL-Baloo2.txt +93 -0
- package/dist/fonts/OFL-Geist.txt +92 -0
- package/dist/fonts/baloo-2-latin-variable.woff2 +0 -0
- package/dist/fonts/geist-sans-latin-variable.woff2 +0 -0
- package/dist/fonts.css +1 -0
- package/dist/index.d.ts +94 -17
- package/dist/index.js +4729 -3060
- package/dist/preview.css +1 -0
- package/dist/styles.css +1 -1
- package/package.json +48 -36
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,137 @@
|
|
|
3
3
|
All notable changes to `@pieai/swimmer-ui-kit`.
|
|
4
4
|
Format: [Keep a Changelog](https://keepachangelog.com); versioning: semver.
|
|
5
5
|
|
|
6
|
+
## 1.2.0 — 2026-07-18
|
|
7
|
+
|
|
8
|
+
Purely additive: an official "overlay glass" HUD surface tone plus a compact
|
|
9
|
+
density, for products that float kit chrome over a live scene (TuringPact 3D
|
|
10
|
+
tavern, SupaLuv cinematic stage). No exported component, prop, class, or token
|
|
11
|
+
was removed or renamed.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Overlay glass scope: `data-game-ui-tone="glass"` (alias class
|
|
16
|
+
`.game-ui-overlay-scope`) re-scopes semantic surface/text/elevation tokens on
|
|
17
|
+
a subtree to dark translucent glass — fill `rgba(12,14,20,0.72)`, 1px light
|
|
18
|
+
border, no clay box-shadow, warm accent hover/primary, WCAG-visible warm
|
|
19
|
+
focus ring (`--game-ui-overlay-glass-focus-ring`). Nests inside light or
|
|
20
|
+
`night` page themes.
|
|
21
|
+
- Compact density: `data-game-ui-density="compact"` (orthogonal to tone) —
|
|
22
|
+
34px control floor, tighter panel/chip padding for HUD clusters.
|
|
23
|
+
- Primitive tokens `--game-ui-overlay-glass-*` in `theme.css`; TS mirrors
|
|
24
|
+
`CLAY_OVERLAY_GLASS_TOKENS` and `GAME_UI_OVERLAY` attr/class constants.
|
|
25
|
+
- Clay `GameAssetIcon` gets a soft dark drop-shadow inside glass scope so
|
|
26
|
+
sculpted icons read on translucent dark chips.
|
|
27
|
+
- Stories/preview compare: same HUD cluster in default clay vs overlay glass
|
|
28
|
+
over a busy scene background, light and night contexts.
|
|
29
|
+
|
|
30
|
+
### Migration notes
|
|
31
|
+
|
|
32
|
+
- Consumers opt in per subtree; nothing changes without the attribute.
|
|
33
|
+
- SupaLuv can delete its `.vn-stage .game-ui-button` `!important` overrides
|
|
34
|
+
(stage.css ~217-360) after wrapping its HUD in the glass scope.
|
|
35
|
+
|
|
36
|
+
## 1.1.0 — 2026-07-13
|
|
37
|
+
|
|
38
|
+
A design-system quality pass: fixes real bugs in the existing surface
|
|
39
|
+
(radial menu, contrast, fonts) and starts paying down the "central kitchen"
|
|
40
|
+
governance/packaging debt (token adoption checker, theme contract export,
|
|
41
|
+
demo CSS split). No exported component or prop was removed or renamed.
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
|
|
45
|
+
- `GAME_UI_THEME_CONTRACT`, an exported `readonly string[]` of every
|
|
46
|
+
semantic token a complete theme (like the official `night` theme) must
|
|
47
|
+
override. Downstream custom themes (e.g. an `abyss` theme) can assert
|
|
48
|
+
their own CSS covers the same list instead of eyeballing the docs.
|
|
49
|
+
- Optional `./fonts.css` subpath: `@font-face` rules + bundled Latin-subset
|
|
50
|
+
woff2 for Baloo 2 and Geist Variable (SIL OFL), the two families
|
|
51
|
+
`theme.css`'s font stack already names. Not loading it still works
|
|
52
|
+
(progressive enhancement, system-font fallback) but non-standard font
|
|
53
|
+
weights (620/860/930) collapse to 400/700 without it.
|
|
54
|
+
- `swimmer-ui-check`, a zero-dependency bin (`npx swimmer-ui-check <dir>`)
|
|
55
|
+
that scans a consumer's own CSS/TSX for raw color literals outside
|
|
56
|
+
`:root`/`[data-*theme*]` blocks — the same "no bare colors in component
|
|
57
|
+
rules" rule `src/tokens.test.ts` enforces inside this repo, made runnable
|
|
58
|
+
against downstream code.
|
|
59
|
+
- `GameModal` gained `position="bottom"`, a mobile action-sheet variant of
|
|
60
|
+
the same native `<dialog>` (unchanged focus trap/Esc/backdrop, only the
|
|
61
|
+
frame's placement/shape/entrance differ). Replaces the hand-rolled
|
|
62
|
+
backdrop+slide-up-panel pattern some consumers were building themselves
|
|
63
|
+
(a known source of missing focus-trap/Esc handling).
|
|
64
|
+
- `GameRadialMenu` gained an `onSelect?: (id: string) => void` callback
|
|
65
|
+
(previously clicking an item did nothing).
|
|
66
|
+
- Demo site and Storybook both gained a light/night theme toggle (demo site:
|
|
67
|
+
navbar control using the kit's own `GameToggle`-style button; Storybook:
|
|
68
|
+
a global toolbar entry that sets `data-game-ui-theme` for every story).
|
|
69
|
+
|
|
70
|
+
### Changed
|
|
71
|
+
|
|
72
|
+
- **`GameRadialMenu` is now actually styled.** It rendered as unstyled
|
|
73
|
+
browser-default buttons before (`.game-ui-radial-item` had no CSS rule at
|
|
74
|
+
all); it's now a real circular wheel using clock-position placement.
|
|
75
|
+
`role="menu"`/`role="menuitem"` (which had no working keyboard model)
|
|
76
|
+
changed to `role="group"` + plain buttons.
|
|
77
|
+
- **Button/tab/badge text contrast, both themes.** WCAG-measured failures
|
|
78
|
+
as low as 2.52:1 on the primary button in the night theme (need 4.5:1).
|
|
79
|
+
Fixed at the token layer only (`theme.css`): `--game-ui-accent-contrast`
|
|
80
|
+
is now a dark-ink color shared by primary/danger/success buttons, the
|
|
81
|
+
active tab/segmented pill, avatar initials, and the checkbox check —
|
|
82
|
+
component rules did not change. Two further raw-brand-color-as-text
|
|
83
|
+
spots (`--game-ui-danger` on `.game-ui-field-error`/`-required`,
|
|
84
|
+
`--game-ui-accent` on the first-session step numbers) got their own new
|
|
85
|
+
`--game-ui-danger-ink`/`--game-ui-accent-ink` tokens. HUD-chip and
|
|
86
|
+
fact-chip secondary text (`.game-ui-hud-chip small/em`,
|
|
87
|
+
`.game-ui-fact-copy small/em`) stopped fading `--game-ui-text-on-dark` to
|
|
88
|
+
72% opacity, which dropped under 4.5:1 against realistic glass-chip
|
|
89
|
+
backdrops. All of the above are locked in by an expanded WCAG contrast
|
|
90
|
+
guard test (`src/tokens.test.ts`), not just fixed once.
|
|
91
|
+
- `GameSlider`'s range input now has a token-styled clay thumb/track
|
|
92
|
+
(`::-webkit-slider-thumb`/`::-moz-range-thumb`) instead of bare
|
|
93
|
+
`accent-color`.
|
|
94
|
+
- `GameTooltip` auto-generates `aria-describedby` linking the trigger to
|
|
95
|
+
the tooltip text (was visual-only). `GameTabs` accepts an optional `id` +
|
|
96
|
+
per-tab `panelId` to auto-populate `aria-controls`.
|
|
97
|
+
- Interactive controls get a `@media (forced-colors: active)` fallback
|
|
98
|
+
(Windows High Contrast) — pressed/selected states get a real border
|
|
99
|
+
instead of relying on a `color-mix()` wash forced-colors mode ignores.
|
|
100
|
+
- Storybook's `@storybook/addon-a11y` gate went from cosmetic
|
|
101
|
+
(`test: 'todo'`) to enforced (`test: 'error'`) — a real axe violation now
|
|
102
|
+
fails `pnpm test`, not just shows up in the Storybook UI.
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
|
|
106
|
+
- Three accessibility bugs the newly-enforced Storybook a11y gate caught:
|
|
107
|
+
`GameCardFan` used an invalid `role="listitem"` on an `<article>`
|
|
108
|
+
(changed to a plain `<li>`); two scrollable job-list containers in
|
|
109
|
+
`GameContractorTools` had no keyboard focus path; `GameContractorPanel`'s
|
|
110
|
+
mobile drawer rendered the selected job twice (drawer + standalone card)
|
|
111
|
+
when open, producing duplicate ARIA landmarks.
|
|
112
|
+
- `vitest.config.ts`'s unit-test include glob was `src/**/*.test.ts` —
|
|
113
|
+
it silently excluded every `*.test.tsx` file. Five files and ~30 tests
|
|
114
|
+
had never actually run via `pnpm test` despite the command exiting 0.
|
|
115
|
+
Fixed the glob, which then surfaced (and fixed) two further dormant test
|
|
116
|
+
bugs it had been hiding.
|
|
117
|
+
- The demo site's token ledger truncated every value to `var(--…` and
|
|
118
|
+
broke token names mid-word (`TOUCHMINIM UMPX`); values now wrap instead
|
|
119
|
+
of ellipsis-truncating, and cards no longer stretch to their tallest
|
|
120
|
+
sibling in the grid.
|
|
121
|
+
|
|
122
|
+
### Breaking (packaging only — no component/prop/class/token removed)
|
|
123
|
+
|
|
124
|
+
- **`GameUiPreview`'s demo-only CSS moved to a new optional `./preview.css`
|
|
125
|
+
subpath.** It was ~13KB of stage/showcase-only rules
|
|
126
|
+
(`.game-ui-preview-*`, `.game-ui-swatch`/`.game-ui-token-*`,
|
|
127
|
+
`.game-ui-stage-world`, `.game-ui-proof-frame`, the first-session demo
|
|
128
|
+
world) that every consumer paid for in `styles.css` even though
|
|
129
|
+
`GameUiPreview` is a kit-internal showcase component almost nobody
|
|
130
|
+
renders in production. If you render `<GameUiPreview />` (as TuringPact's
|
|
131
|
+
`/ui-preview` route does), add
|
|
132
|
+
`import '@pieai/swimmer-ui-kit/preview.css'` alongside `./styles.css` or
|
|
133
|
+
it renders unstyled. Everyone else needs no code change —
|
|
134
|
+
`.game-ui-*`/`--game-ui-*` names are unchanged, only which file the CSS
|
|
135
|
+
ships in. `dist/styles.css` dropped from 89.2KB to 77.8KB minified.
|
|
136
|
+
|
|
6
137
|
## 1.0.1 — 2026-07-11
|
|
7
138
|
|
|
8
139
|
### Added
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Scans consumer CSS for raw color literals living in component rules
|
|
3
|
+
// instead of flowing through SwimmerUIKit tokens. Mirrors the guard check
|
|
4
|
+
// the kit runs on its own styles.css in src/tokens.test.ts, packaged so
|
|
5
|
+
// downstream products can hold their own component CSS to the same
|
|
6
|
+
// "token-only" bar the design-system-guide asks for.
|
|
7
|
+
//
|
|
8
|
+
// Raw colors are expected (and fine) inside token-defining blocks —
|
|
9
|
+
// :root { ... } or an attribute-selector theme/tone block like
|
|
10
|
+
// [data-game-ui-theme='night'] / [data-game-ui-tone='glass'] /
|
|
11
|
+
// [data-theme='dark'] — since that is how the design-system-guide tells
|
|
12
|
+
// consumers to re-theme or re-scope surface tones. Only raw colors inside
|
|
13
|
+
// *other* selectors (component rules) are flagged.
|
|
14
|
+
//
|
|
15
|
+
// Usage: swimmer-ui-check [dir] [--ext=css,tsx]
|
|
16
|
+
// dir directory to scan, default "src"
|
|
17
|
+
// --ext comma-separated extensions to scan, default "css"
|
|
18
|
+
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
19
|
+
import { extname, join, relative } from 'node:path';
|
|
20
|
+
|
|
21
|
+
const RAW_COLOR = /#[0-9a-fA-F]{3,8}\b|\brgba?\(|\bhsla?\(|\boklch\(/g;
|
|
22
|
+
const TOKEN_BLOCK_SELECTOR = /:root\b|\[data-[\w-]*(?:theme|tone)[\w-]*\s*=/i;
|
|
23
|
+
const IGNORE_DIRS = new Set([
|
|
24
|
+
'node_modules',
|
|
25
|
+
'dist',
|
|
26
|
+
'.git',
|
|
27
|
+
'storybook-static',
|
|
28
|
+
'site-dist',
|
|
29
|
+
'build',
|
|
30
|
+
]);
|
|
31
|
+
|
|
32
|
+
function walk(dir, exts, out) {
|
|
33
|
+
for (const entry of readdirSync(dir)) {
|
|
34
|
+
if (IGNORE_DIRS.has(entry)) continue;
|
|
35
|
+
const full = join(dir, entry);
|
|
36
|
+
const stat = statSync(full);
|
|
37
|
+
if (stat.isDirectory()) walk(full, exts, out);
|
|
38
|
+
else if (exts.has(extname(entry))) out.push(full);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function lineFinder(text) {
|
|
43
|
+
const offsets = [0];
|
|
44
|
+
for (let i = 0; i < text.length; i += 1) if (text[i] === '\n') offsets.push(i + 1);
|
|
45
|
+
return (index) => {
|
|
46
|
+
let lo = 0;
|
|
47
|
+
let hi = offsets.length - 1;
|
|
48
|
+
while (lo < hi) {
|
|
49
|
+
const mid = (lo + hi + 1) >> 1;
|
|
50
|
+
if (offsets[mid] <= index) lo = mid;
|
|
51
|
+
else hi = mid - 1;
|
|
52
|
+
}
|
|
53
|
+
return lo + 1;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Brace-depth scan (not a real CSS parser, good enough for this lint):
|
|
59
|
+
* every `{`/`}` pushes/pops whether the block it opened is a token-defining
|
|
60
|
+
* selector, and raw colors are only reported for declarations whose
|
|
61
|
+
* innermost enclosing block is not one of those.
|
|
62
|
+
*/
|
|
63
|
+
function findViolations(css) {
|
|
64
|
+
const withoutComments = css.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, ' '));
|
|
65
|
+
const lineOf = lineFinder(withoutComments);
|
|
66
|
+
|
|
67
|
+
const blockIsTokenScope = [];
|
|
68
|
+
let blockStart = 0;
|
|
69
|
+
let cursor = 0;
|
|
70
|
+
const violations = [];
|
|
71
|
+
|
|
72
|
+
while (cursor < withoutComments.length) {
|
|
73
|
+
const open = withoutComments.indexOf('{', cursor);
|
|
74
|
+
const close = withoutComments.indexOf('}', cursor);
|
|
75
|
+
if (open === -1 && close === -1) break;
|
|
76
|
+
|
|
77
|
+
if (open !== -1 && (close === -1 || open < close)) {
|
|
78
|
+
const selector = withoutComments.slice(blockStart, open);
|
|
79
|
+
blockIsTokenScope.push(TOKEN_BLOCK_SELECTOR.test(selector));
|
|
80
|
+
blockStart = open + 1;
|
|
81
|
+
cursor = open + 1;
|
|
82
|
+
} else {
|
|
83
|
+
const body = withoutComments.slice(blockStart, close);
|
|
84
|
+
const allowed = blockIsTokenScope.pop() ?? false;
|
|
85
|
+
if (!allowed) {
|
|
86
|
+
for (const match of body.matchAll(RAW_COLOR)) {
|
|
87
|
+
violations.push({ line: lineOf(blockStart + match.index), text: match[0] });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
blockStart = close + 1;
|
|
91
|
+
cursor = close + 1;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return violations;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const args = process.argv.slice(2);
|
|
98
|
+
const target = args.find((a) => !a.startsWith('--')) ?? 'src';
|
|
99
|
+
const extArg = args.find((a) => a.startsWith('--ext='));
|
|
100
|
+
const exts = new Set(
|
|
101
|
+
(extArg ? extArg.slice('--ext='.length).split(',') : ['css']).map((e) =>
|
|
102
|
+
e.startsWith('.') ? e : `.${e}`,
|
|
103
|
+
),
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const files = [];
|
|
107
|
+
try {
|
|
108
|
+
walk(target, exts, files);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
console.error(`swimmer-ui-check: cannot read "${target}": ${error.message}`);
|
|
111
|
+
process.exit(2);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
let violationCount = 0;
|
|
115
|
+
for (const file of files) {
|
|
116
|
+
const text = readFileSync(file, 'utf8');
|
|
117
|
+
for (const violation of findViolations(text)) {
|
|
118
|
+
console.log(
|
|
119
|
+
`${relative(process.cwd(), file)}:${violation.line}: raw color literal "${violation.text}" — use var(--game-ui-*) instead`,
|
|
120
|
+
);
|
|
121
|
+
violationCount += 1;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (violationCount > 0) {
|
|
126
|
+
console.error(
|
|
127
|
+
`\nswimmer-ui-check: ${violationCount} raw color literal(s) in ${files.length} file(s) under "${target}". ` +
|
|
128
|
+
'Raw colors are expected inside :root / [data-*theme*=...] / [data-*tone*=...] token blocks ' +
|
|
129
|
+
'(that is how you re-theme or re-scope the kit) but not inside component rules — see the ' +
|
|
130
|
+
'design-system-guide "主题化配方" section.',
|
|
131
|
+
);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
console.log(
|
|
135
|
+
`swimmer-ui-check: 0 raw color literals in component rules across ${files.length} file(s) under "${target}". Clean.`,
|
|
136
|
+
);
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2019 The Baloo 2 Project Authors (https://github.com/EkType/Baloo2)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Copyright (c) 2023 Vercel, in collaboration with basement.studio
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
-----------------------------------------------------------
|
|
8
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
9
|
+
-----------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
PREAMBLE
|
|
12
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
13
|
+
development of collaborative font projects, to support the font creation
|
|
14
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
15
|
+
open framework in which fonts may be shared and improved in partnership
|
|
16
|
+
with others.
|
|
17
|
+
|
|
18
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
19
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
20
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
21
|
+
redistributed and/or sold with any software provided that any reserved
|
|
22
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
23
|
+
however, cannot be released under any other type of license. The
|
|
24
|
+
requirement for fonts to remain under this license does not apply
|
|
25
|
+
to any document created using the fonts or their derivatives.
|
|
26
|
+
|
|
27
|
+
DEFINITIONS
|
|
28
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
29
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
30
|
+
include source files, build scripts and documentation.
|
|
31
|
+
|
|
32
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
33
|
+
copyright statement(s).
|
|
34
|
+
|
|
35
|
+
"Original Version" refers to the collection of Font Software components as
|
|
36
|
+
distributed by the Copyright Holder(s).
|
|
37
|
+
|
|
38
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
39
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
40
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
41
|
+
new environment.
|
|
42
|
+
|
|
43
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
44
|
+
writer or other person who contributed to the Font Software.
|
|
45
|
+
|
|
46
|
+
PERMISSION AND CONDITIONS
|
|
47
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
48
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
49
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
50
|
+
Software, subject to the following conditions:
|
|
51
|
+
|
|
52
|
+
1) Neither the Font Software nor any of its individual components,
|
|
53
|
+
in Original or Modified Versions, may be sold by itself.
|
|
54
|
+
|
|
55
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
56
|
+
redistributed and/or sold with any software, provided that each copy
|
|
57
|
+
contains the above copyright notice and this license. These can be
|
|
58
|
+
included either as stand-alone text files, human-readable headers or
|
|
59
|
+
in the appropriate machine-readable metadata fields within text or
|
|
60
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
61
|
+
|
|
62
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
63
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
64
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
65
|
+
presented to the users.
|
|
66
|
+
|
|
67
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
68
|
+
Software shall not be used to promote, endorse or advertise any
|
|
69
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
70
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
71
|
+
permission.
|
|
72
|
+
|
|
73
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
74
|
+
must be distributed entirely under this license, and must not be
|
|
75
|
+
distributed under any other license. The requirement for fonts to
|
|
76
|
+
remain under this license does not apply to any document created
|
|
77
|
+
using the Font Software.
|
|
78
|
+
|
|
79
|
+
TERMINATION
|
|
80
|
+
This license becomes null and void if any of the above conditions are
|
|
81
|
+
not met.
|
|
82
|
+
|
|
83
|
+
DISCLAIMER
|
|
84
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
85
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
86
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
87
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
88
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
89
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
90
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
91
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
92
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|
package/dist/fonts.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@font-face{font-family:"Baloo 2";font-style:normal;font-weight:400 800;font-display:swap;src:url(./fonts/baloo-2-latin-variable.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Variable;font-style:normal;font-weight:100 900;font-display:swap;src:url(./fonts/geist-sans-latin-variable.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
|