ferst-core 0.7.4 → 0.7.6
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/bin/ferst-update.mjs +33 -2
- package/cms/config.template.yml +227 -206
- package/components/BlockRenderer.astro +4 -0
- package/components/SiteFooter.astro +325 -270
- package/components/SiteHeader.astro +82 -19
- package/components/blocks/Heading.astro +5 -1
- package/components/recipes/Contacts.astro +139 -0
- package/components/recipes/Document.astro +157 -152
- package/components/recipes/Documents.astro +2 -2
- package/components/recipes/MediaText.astro +92 -0
- package/components/recipes/Steps.astro +121 -120
- package/components/recipes/Table.astro +7 -3
- package/components/recipes/Video.astro +1 -1
- package/content/blocks.ts +64 -8
- package/content/schemas.ts +172 -161
- package/examples/recipes.ts +2 -0
- package/fonts/OFL.txt +287 -0
- package/fonts/inter-latin-400-normal.woff2 +0 -0
- package/fonts/inter-latin-500-normal.woff2 +0 -0
- package/fonts/inter-latin-600-normal.woff2 +0 -0
- package/fonts/playfair-display-latin-700-normal.woff2 +0 -0
- package/fonts/poppins-latin-300-normal.woff2 +0 -0
- package/fonts/poppins-latin-400-normal.woff2 +0 -0
- package/fonts/poppins-latin-500-normal.woff2 +0 -0
- package/fonts/poppins-latin-600-normal.woff2 +0 -0
- package/fonts/poppins-latin-700-normal.woff2 +0 -0
- package/integration.mjs +41 -1
- package/layouts/Base.astro +3 -0
- package/lib/icons.ts +10 -0
- package/lib/links.ts +24 -12
- package/lib/nav.ts +12 -0
- package/lib/siteSettings.ts +62 -60
- package/lib/slug.ts +32 -0
- package/lib/table.ts +10 -0
- package/package.json +69 -68
package/content/schemas.ts
CHANGED
|
@@ -1,161 +1,172 @@
|
|
|
1
|
-
// Pure Zod schemas for the site-settings collections the chrome reads (identity +
|
|
2
|
-
// contact, logos, navigation, footer, theme tokens). Separated from config.ts so
|
|
3
|
-
// they can be unit-tested without `astro:content`. The page CONTENT model is the
|
|
4
|
-
// block palette in `content/blocks.ts` — a page is an ordered list of typed
|
|
5
|
-
// blocks, not a bespoke per-page-type schema.
|
|
6
|
-
import { z } from 'zod';
|
|
7
|
-
|
|
8
|
-
const navLinkSchema = z.object({
|
|
9
|
-
label: z.string(),
|
|
10
|
-
href: z.string(),
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
/** One item inside a nav dropdown / mega panel (client-configured, generic). */
|
|
14
|
-
const navGroupItemSchema = z.object({
|
|
15
|
-
title: z.string(),
|
|
16
|
-
desc: z.string().optional(),
|
|
17
|
-
href: z.string(),
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
/** An optional dropdown group in the primary nav (e.g. an "About" mega-menu
|
|
21
|
-
* or a "Services" menu). Entirely client-configured — the core ships none. */
|
|
22
|
-
const navGroupSchema = z.object({
|
|
23
|
-
label: z.string(),
|
|
24
|
-
href: z.string(),
|
|
25
|
-
items: z.array(navGroupItemSchema).default([]),
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
const siteIdentitySchema = z
|
|
29
|
-
.object({
|
|
30
|
-
/** Used in <title> as " — {siteTitle}" and the description fallback. */
|
|
31
|
-
siteTitle: z.string().default('Your Site'),
|
|
32
|
-
/** Short brand label — used in alt text and the footer. */
|
|
33
|
-
shortName: z.string().default('Your Site'),
|
|
34
|
-
/** Default <meta name="description"> when a page doesn't supply its own. */
|
|
35
|
-
description: z.string().default('A website built with Ferst.'),
|
|
36
|
-
/** Town / city — appended to the brand in alt text. */
|
|
37
|
-
location: z.string().default(''),
|
|
38
|
-
})
|
|
39
|
-
.default({});
|
|
40
|
-
|
|
41
|
-
const siteContactSchema = z
|
|
42
|
-
.object({
|
|
43
|
-
/** Human-readable phone number. Blank by default — client provides. */
|
|
44
|
-
phoneDisplay: z.string().default(''),
|
|
45
|
-
/** Digits-only form used in a `tel:` href. */
|
|
46
|
-
phoneTel: z.string().default(''),
|
|
47
|
-
email: z.string().default(''),
|
|
48
|
-
facebookUrl: z.string().default(''),
|
|
49
|
-
})
|
|
50
|
-
.default({});
|
|
51
|
-
|
|
52
|
-
/** Site identity + contact details. Logos, navigation, footer and theme tokens
|
|
53
|
-
* each have their own collection (below) so each is a focused CMS pane. */
|
|
54
|
-
export const siteSettingsSchema = z.object({
|
|
55
|
-
identity: siteIdentitySchema,
|
|
56
|
-
contact: siteContactSchema,
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
export const logoSettingsSchema = z.object({
|
|
60
|
-
/** Primary/header logo — light theme variant. Optional (SiteHeader falls back to a wordmark). */
|
|
61
|
-
primaryLogoLight: z.string().optional(),
|
|
62
|
-
/** Primary/header logo — dark theme variant. Optional. */
|
|
63
|
-
primaryLogoDark: z.string().optional(),
|
|
64
|
-
/** Secondary/footer logo — light theme variant (optional). */
|
|
65
|
-
secondaryLogoLight: z.string().optional(),
|
|
66
|
-
/** Secondary/footer logo — dark theme variant (optional). */
|
|
67
|
-
secondaryLogoDark: z.string().optional(),
|
|
68
|
-
/** Display name + target URL for the secondary/footer logo's link (optional). */
|
|
69
|
-
secondaryLogoLink: z
|
|
70
|
-
.object({
|
|
71
|
-
name: z.string().default(''),
|
|
72
|
-
url: z.string().default(''),
|
|
73
|
-
})
|
|
74
|
-
.default({}),
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
export const navbarSettingsSchema = z.object({
|
|
78
|
-
/** Simple top-level links. Empty by default — every client defines its own nav. */
|
|
79
|
-
primary: z.array(navLinkSchema).default([]),
|
|
80
|
-
/** Optional dropdown / mega-menu group. Rendered by SiteHeader only when present. */
|
|
81
|
-
dropdown: navGroupSchema.optional(),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
1
|
+
// Pure Zod schemas for the site-settings collections the chrome reads (identity +
|
|
2
|
+
// contact, logos, navigation, footer, theme tokens). Separated from config.ts so
|
|
3
|
+
// they can be unit-tested without `astro:content`. The page CONTENT model is the
|
|
4
|
+
// block palette in `content/blocks.ts` — a page is an ordered list of typed
|
|
5
|
+
// blocks, not a bespoke per-page-type schema.
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
|
|
8
|
+
const navLinkSchema = z.object({
|
|
9
|
+
label: z.string(),
|
|
10
|
+
href: z.string(),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
/** One item inside a nav dropdown / mega panel (client-configured, generic). */
|
|
14
|
+
const navGroupItemSchema = z.object({
|
|
15
|
+
title: z.string(),
|
|
16
|
+
desc: z.string().optional(),
|
|
17
|
+
href: z.string(),
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
/** An optional dropdown group in the primary nav (e.g. an "About" mega-menu
|
|
21
|
+
* or a "Services" menu). Entirely client-configured — the core ships none. */
|
|
22
|
+
const navGroupSchema = z.object({
|
|
23
|
+
label: z.string(),
|
|
24
|
+
href: z.string(),
|
|
25
|
+
items: z.array(navGroupItemSchema).default([]),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const siteIdentitySchema = z
|
|
29
|
+
.object({
|
|
30
|
+
/** Used in <title> as " — {siteTitle}" and the description fallback. */
|
|
31
|
+
siteTitle: z.string().default('Your Site'),
|
|
32
|
+
/** Short brand label — used in alt text and the footer. */
|
|
33
|
+
shortName: z.string().default('Your Site'),
|
|
34
|
+
/** Default <meta name="description"> when a page doesn't supply its own. */
|
|
35
|
+
description: z.string().default('A website built with Ferst.'),
|
|
36
|
+
/** Town / city — appended to the brand in alt text. */
|
|
37
|
+
location: z.string().default(''),
|
|
38
|
+
})
|
|
39
|
+
.default({});
|
|
40
|
+
|
|
41
|
+
const siteContactSchema = z
|
|
42
|
+
.object({
|
|
43
|
+
/** Human-readable phone number. Blank by default — client provides. */
|
|
44
|
+
phoneDisplay: z.string().default(''),
|
|
45
|
+
/** Digits-only form used in a `tel:` href. */
|
|
46
|
+
phoneTel: z.string().default(''),
|
|
47
|
+
email: z.string().default(''),
|
|
48
|
+
facebookUrl: z.string().default(''),
|
|
49
|
+
})
|
|
50
|
+
.default({});
|
|
51
|
+
|
|
52
|
+
/** Site identity + contact details. Logos, navigation, footer and theme tokens
|
|
53
|
+
* each have their own collection (below) so each is a focused CMS pane. */
|
|
54
|
+
export const siteSettingsSchema = z.object({
|
|
55
|
+
identity: siteIdentitySchema,
|
|
56
|
+
contact: siteContactSchema,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export const logoSettingsSchema = z.object({
|
|
60
|
+
/** Primary/header logo — light theme variant. Optional (SiteHeader falls back to a wordmark). */
|
|
61
|
+
primaryLogoLight: z.string().optional(),
|
|
62
|
+
/** Primary/header logo — dark theme variant. Optional. */
|
|
63
|
+
primaryLogoDark: z.string().optional(),
|
|
64
|
+
/** Secondary/footer logo — light theme variant (optional). */
|
|
65
|
+
secondaryLogoLight: z.string().optional(),
|
|
66
|
+
/** Secondary/footer logo — dark theme variant (optional). */
|
|
67
|
+
secondaryLogoDark: z.string().optional(),
|
|
68
|
+
/** Display name + target URL for the secondary/footer logo's link (optional). */
|
|
69
|
+
secondaryLogoLink: z
|
|
70
|
+
.object({
|
|
71
|
+
name: z.string().default(''),
|
|
72
|
+
url: z.string().default(''),
|
|
73
|
+
})
|
|
74
|
+
.default({}),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
export const navbarSettingsSchema = z.object({
|
|
78
|
+
/** Simple top-level links. Empty by default — every client defines its own nav. */
|
|
79
|
+
primary: z.array(navLinkSchema).default([]),
|
|
80
|
+
/** Optional dropdown / mega-menu group. Rendered by SiteHeader only when present. */
|
|
81
|
+
dropdown: navGroupSchema.optional(),
|
|
82
|
+
/** The call-to-action button in the header (and footer). Contact → /contact/ unless set;
|
|
83
|
+
* `null` hides it. */
|
|
84
|
+
cta: z
|
|
85
|
+
.object({ label: z.string(), href: z.string() })
|
|
86
|
+
.nullable()
|
|
87
|
+
.default({ label: 'Contact', href: '/contact/' }),
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
export const footerSettingsSchema = z.object({
|
|
91
|
+
/** Footer legal/info nav. Empty by default — every client defines its own. */
|
|
92
|
+
footer: z.array(navLinkSchema).default([]),
|
|
93
|
+
/** Headed footer columns for reference material (policies, safeguarding, documents,
|
|
94
|
+
* forms) — where it belongs, so the main menu stays short and clear. */
|
|
95
|
+
groups: z
|
|
96
|
+
.array(z.object({ heading: z.string(), links: z.array(navLinkSchema).min(1) }))
|
|
97
|
+
.default([]),
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* The brand — a client's design tokens, set in the CMS. The whole system is
|
|
102
|
+
* built to derive from just THREE source colours: `brand` (interactive accent),
|
|
103
|
+
* `ink` (text) and `surface` (background). `lib/themeTokens.ts` expands those
|
|
104
|
+
* into ~40 working tokens (light via `color-mix`, dark via an OKLCH translation
|
|
105
|
+
* — lightness flipped, hue kept, chroma damped so nothing turns neon), and
|
|
106
|
+
* `Base.astro` emits the result as a `<style>` that layers over the core's
|
|
107
|
+
* NEUTRAL defaults in `styles/theme.css`. Fonts and the four surface "knobs"
|
|
108
|
+
* (corners / elevation / stroke / fields) are the rest of the site-wide look —
|
|
109
|
+
* each set once, applied everywhere. `advanced.light/.dark` are a raw
|
|
110
|
+
* per-token escape hatch (power users / AI composition / back-compat) layered
|
|
111
|
+
* LAST. The core ships none of this — a brand lives in the client's repo (or
|
|
112
|
+
* the CMS), never baked into the shared core.
|
|
113
|
+
*
|
|
114
|
+
* This shape is what the Sveltia token pane edits (apps/showcase/public/admin):
|
|
115
|
+
* a client picks three colours + a font pairing + four knobs, not 40 tokens.
|
|
116
|
+
*/
|
|
117
|
+
export const themeSettingsSchema = z.object({
|
|
118
|
+
/** Interactive accent — buttons, links, icons, highlights. Blank ⇒ neutral. */
|
|
119
|
+
brand: z.string().default(''),
|
|
120
|
+
/** Text colour — headings & body. Blank ⇒ neutral. */
|
|
121
|
+
ink: z.string().default(''),
|
|
122
|
+
/** Background — page, cards, sections (tints derived from it). Blank ⇒ neutral. */
|
|
123
|
+
surface: z.string().default(''),
|
|
124
|
+
/** Site-wide font pairing (role → CSS font-family stack). Blank ⇒ core default. */
|
|
125
|
+
fonts: z
|
|
126
|
+
.object({
|
|
127
|
+
heading: z.string().default(''),
|
|
128
|
+
body: z.string().default(''),
|
|
129
|
+
display: z.string().default(''),
|
|
130
|
+
})
|
|
131
|
+
.default({}),
|
|
132
|
+
/** Corner radius applied to every card / tile / input / button. */
|
|
133
|
+
corners: z.enum(['sharp', 'rounded', 'soft']).default('rounded'),
|
|
134
|
+
/** Card/tile elevation — `flat` removes the soft shadow site-wide. */
|
|
135
|
+
elevation: z.enum(['raised', 'flat']).default('raised'),
|
|
136
|
+
/** Card/tile stroke — `off` removes the 1px border site-wide. */
|
|
137
|
+
stroke: z.enum(['on', 'off']).default('on'),
|
|
138
|
+
/** Input treatment — a single site-wide choice (a `data-field` attr on <html>). */
|
|
139
|
+
fields: z.enum(['boxed', 'filled', 'underline']).default('boxed'),
|
|
140
|
+
/** Dark-mode formula knobs (root-derivation model). `darkDepth` = how light the
|
|
141
|
+
* dark page background sits (OKLCH L); `darkChroma` = the cap on how much colour
|
|
142
|
+
* the dark ground may carry. Both feed the AUTOMATIC dark roots. */
|
|
143
|
+
darkDepth: z.number().min(0.12).max(0.4).default(0.21),
|
|
144
|
+
darkChroma: z.number().min(0).max(0.15).default(0.05),
|
|
145
|
+
/** Explicit overrides for the three dark ROOTS. Each blank ⇒ the root is derived
|
|
146
|
+
* from its light source by the formula; set ⇒ every dark token in that role
|
|
147
|
+
* re-derives from this colour. Roots only (ground / text / accent) — never a
|
|
148
|
+
* lone downstream token — so the palette can never fall out of sync. */
|
|
149
|
+
darkOverrides: z
|
|
150
|
+
.object({
|
|
151
|
+
ground: z.string().default(''),
|
|
152
|
+
text: z.string().default(''),
|
|
153
|
+
accent: z.string().default(''),
|
|
154
|
+
})
|
|
155
|
+
.default({}),
|
|
156
|
+
/** Raw per-token overrides, layered last. Rarely needed. */
|
|
157
|
+
advanced: z
|
|
158
|
+
.object({
|
|
159
|
+
light: z.record(z.string()).default({}),
|
|
160
|
+
dark: z.record(z.string()).default({}),
|
|
161
|
+
})
|
|
162
|
+
.default({}),
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
export type SiteSettings = z.infer<typeof siteSettingsSchema>;
|
|
166
|
+
export type LogoSettings = z.infer<typeof logoSettingsSchema>;
|
|
167
|
+
export type NavbarSettings = z.infer<typeof navbarSettingsSchema>;
|
|
168
|
+
export type FooterSettings = z.infer<typeof footerSettingsSchema>;
|
|
169
|
+
export type ThemeSettings = z.infer<typeof themeSettingsSchema>;
|
|
170
|
+
export type NavLink = z.infer<typeof navLinkSchema>;
|
|
171
|
+
export type NavGroup = z.infer<typeof navGroupSchema>;
|
|
172
|
+
export type NavGroupItem = z.infer<typeof navGroupItemSchema>;
|
package/examples/recipes.ts
CHANGED
|
@@ -39,4 +39,6 @@ export const recipes: GalleryEntry[] = [
|
|
|
39
39
|
{ type: 'document', description: 'A policy or legal text as one block: sections numbered automatically, a contents list linking to each (sticky beside the text on wide screens), a “last updated” date, prose formatting in each section, print-friendly.', block: { type: 'document', intro: 'These conditions apply to every booking.', updated: '2026-10-04', sections: [{ title: 'Use of the hall', body: 'The hall may be used only for the purpose stated on the booking form.' }, { title: 'Bookings', body: 'Bookings are confirmed once the deposit is received.', items: ['Book through the office.', 'Bookings can’t be transferred.'] }, { title: 'Cancellation', body: 'Cancellations made less than **seven days** before the event forfeit the deposit.' }] } },
|
|
40
40
|
{ type: 'timetable', description: 'Weekly times for one or more places (service times, opening hours, sessions): a card per place, days with no times left out, notes with links under each. Set `layout: "table"` to compare places side by side.', block: { type: 'timetable', title: 'Service times', places: [{ name: "St Placeholder's", address: '1 Example Street', schedule: [{ day: 'Saturday', times: ['6:00pm (vigil)'] }, { day: 'Sunday', times: ['8:30am', '10:30am'] }, { day: 'Weekdays', times: ['9:30am'] }], notes: 'Confessions on Saturdays from 5pm. See [how to find us](#find-us).' }, { name: "St Sample's", schedule: [{ day: 'Saturday', times: [] }, { day: 'Sunday', times: ['9:00am'] }], notes: 'No Saturday service.' }] } },
|
|
41
41
|
{ type: 'timetable', description: 'The `table` layout: days down the side, one column per place; a day nobody uses is dropped.', block: { type: 'timetable', title: 'Opening hours', layout: 'table', places: [{ name: 'Library', schedule: [{ day: 'Monday', times: ['9am–5pm'] }, { day: 'Saturday', times: ['10am–1pm'] }] }, { name: 'Café', schedule: [{ day: 'Monday', times: ['8am–4pm'] }, { day: 'Sunday', times: [] }] }] } },
|
|
42
|
+
{ type: 'contacts', description: 'A compact directory of people or offices: role as the card title, phone and email as tap targets (email with an optional subject), a shared note per group (e.g. office hours) instead of repeating it on every card.', block: { type: 'contacts', title: 'Who to contact', groups: [{ heading: 'Parish office', note: 'Office hours: **Mon–Fri 9am–1pm**.', contacts: [{ role: 'Parish Secretary', name: 'Anne Example', phone: '01234 567890', email: 'office@example.org', emailSubject: 'Parish enquiry' }, { role: 'Safeguarding Representative', email: 'safeguarding@example.org' }] }, { heading: 'Clergy', contacts: [{ role: 'Parish Priest', name: 'Fr John Example', phone: '01234 567891' }] }] } },
|
|
43
|
+
{ type: 'mediaText', description: 'An image beside its text (start or end), stacking on a phone, the image keeping its shape. Text takes prose formatting; an optional button.', block: { type: 'mediaText', title: 'Getting married here', text: 'We are delighted that you are thinking of marrying in our church.\n\nPlease contact the parish office **at least six months** before the date.', image: { src: '/placeholder.svg', alt: 'The church interior decorated for a wedding', caption: 'The church, ready for a wedding' }, imageSide: 'end', cta: { label: 'Contact the office', href: '#' } } },
|
|
42
44
|
];
|
package/fonts/OFL.txt
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
Fonts in this folder are distributed under the SIL Open Font License, Version 1.1.
|
|
2
|
+
Files taken unmodified from Fontsource (https://fontsource.org): @fontsource/inter, @fontsource/playfair-display and @fontsource/poppins 5.3.0.
|
|
3
|
+
|
|
4
|
+
==================== inter ====================
|
|
5
|
+
Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) Inter-Italic[opsz,wght].ttf: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter)
|
|
6
|
+
|
|
7
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
8
|
+
This license is copied below, and is also available with a FAQ at:
|
|
9
|
+
http://scripts.sil.org/OFL
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
-----------------------------------------------------------
|
|
13
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
14
|
+
-----------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
PREAMBLE
|
|
17
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
18
|
+
development of collaborative font projects, to support the font creation
|
|
19
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
20
|
+
open framework in which fonts may be shared and improved in partnership
|
|
21
|
+
with others.
|
|
22
|
+
|
|
23
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
24
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
25
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
26
|
+
redistributed and/or sold with any software provided that any reserved
|
|
27
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
28
|
+
however, cannot be released under any other type of license. The
|
|
29
|
+
requirement for fonts to remain under this license does not apply
|
|
30
|
+
to any document created using the fonts or their derivatives.
|
|
31
|
+
|
|
32
|
+
DEFINITIONS
|
|
33
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
34
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
35
|
+
include source files, build scripts and documentation.
|
|
36
|
+
|
|
37
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
38
|
+
copyright statement(s).
|
|
39
|
+
|
|
40
|
+
"Original Version" refers to the collection of Font Software components as
|
|
41
|
+
distributed by the Copyright Holder(s).
|
|
42
|
+
|
|
43
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
44
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
45
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
46
|
+
new environment.
|
|
47
|
+
|
|
48
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
49
|
+
writer or other person who contributed to the Font Software.
|
|
50
|
+
|
|
51
|
+
PERMISSION & CONDITIONS
|
|
52
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
53
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
54
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
55
|
+
Software, subject to the following conditions:
|
|
56
|
+
|
|
57
|
+
1) Neither the Font Software nor any of its individual components,
|
|
58
|
+
in Original or Modified Versions, may be sold by itself.
|
|
59
|
+
|
|
60
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
61
|
+
redistributed and/or sold with any software, provided that each copy
|
|
62
|
+
contains the above copyright notice and this license. These can be
|
|
63
|
+
included either as stand-alone text files, human-readable headers or
|
|
64
|
+
in the appropriate machine-readable metadata fields within text or
|
|
65
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
66
|
+
|
|
67
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
68
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
69
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
70
|
+
presented to the users.
|
|
71
|
+
|
|
72
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
73
|
+
Software shall not be used to promote, endorse or advertise any
|
|
74
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
75
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
76
|
+
permission.
|
|
77
|
+
|
|
78
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
79
|
+
must be distributed entirely under this license, and must not be
|
|
80
|
+
distributed under any other license. The requirement for fonts to
|
|
81
|
+
remain under this license does not apply to any document created
|
|
82
|
+
using the Font Software.
|
|
83
|
+
|
|
84
|
+
TERMINATION
|
|
85
|
+
This license becomes null and void if any of the above conditions are
|
|
86
|
+
not met.
|
|
87
|
+
|
|
88
|
+
DISCLAIMER
|
|
89
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
90
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
91
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
92
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
93
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
94
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
95
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
96
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
97
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
98
|
+
|
|
99
|
+
==================== playfair-display ====================
|
|
100
|
+
Copyright 2017 The Playfair Display Project Authors (https://github.com/clauseggers/Playfair-Display), with Reserved Font Name "Playfair Display". PlayfairDisplay-Italic[wght].ttf: Copyright 2017 The Playfair Display Project Authors (https://github.com/clauseggers/Playfair-Display), with Reserved Font Name "Playfair Display".
|
|
101
|
+
|
|
102
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
103
|
+
This license is copied below, and is also available with a FAQ at:
|
|
104
|
+
http://scripts.sil.org/OFL
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
-----------------------------------------------------------
|
|
108
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
109
|
+
-----------------------------------------------------------
|
|
110
|
+
|
|
111
|
+
PREAMBLE
|
|
112
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
113
|
+
development of collaborative font projects, to support the font creation
|
|
114
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
115
|
+
open framework in which fonts may be shared and improved in partnership
|
|
116
|
+
with others.
|
|
117
|
+
|
|
118
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
119
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
120
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
121
|
+
redistributed and/or sold with any software provided that any reserved
|
|
122
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
123
|
+
however, cannot be released under any other type of license. The
|
|
124
|
+
requirement for fonts to remain under this license does not apply
|
|
125
|
+
to any document created using the fonts or their derivatives.
|
|
126
|
+
|
|
127
|
+
DEFINITIONS
|
|
128
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
129
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
130
|
+
include source files, build scripts and documentation.
|
|
131
|
+
|
|
132
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
133
|
+
copyright statement(s).
|
|
134
|
+
|
|
135
|
+
"Original Version" refers to the collection of Font Software components as
|
|
136
|
+
distributed by the Copyright Holder(s).
|
|
137
|
+
|
|
138
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
139
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
140
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
141
|
+
new environment.
|
|
142
|
+
|
|
143
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
144
|
+
writer or other person who contributed to the Font Software.
|
|
145
|
+
|
|
146
|
+
PERMISSION & CONDITIONS
|
|
147
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
148
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
149
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
150
|
+
Software, subject to the following conditions:
|
|
151
|
+
|
|
152
|
+
1) Neither the Font Software nor any of its individual components,
|
|
153
|
+
in Original or Modified Versions, may be sold by itself.
|
|
154
|
+
|
|
155
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
156
|
+
redistributed and/or sold with any software, provided that each copy
|
|
157
|
+
contains the above copyright notice and this license. These can be
|
|
158
|
+
included either as stand-alone text files, human-readable headers or
|
|
159
|
+
in the appropriate machine-readable metadata fields within text or
|
|
160
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
161
|
+
|
|
162
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
163
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
164
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
165
|
+
presented to the users.
|
|
166
|
+
|
|
167
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
168
|
+
Software shall not be used to promote, endorse or advertise any
|
|
169
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
170
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
171
|
+
permission.
|
|
172
|
+
|
|
173
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
174
|
+
must be distributed entirely under this license, and must not be
|
|
175
|
+
distributed under any other license. The requirement for fonts to
|
|
176
|
+
remain under this license does not apply to any document created
|
|
177
|
+
using the Font Software.
|
|
178
|
+
|
|
179
|
+
TERMINATION
|
|
180
|
+
This license becomes null and void if any of the above conditions are
|
|
181
|
+
not met.
|
|
182
|
+
|
|
183
|
+
DISCLAIMER
|
|
184
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
185
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
186
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
187
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
188
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
189
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
190
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
191
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
192
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
193
|
+
|
|
194
|
+
==================== poppins ====================
|
|
195
|
+
Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ThinItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ExtraLight.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ExtraLightItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Light.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-LightItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Regular.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Italic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Medium.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-MediumItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-SemiBold.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-SemiBoldItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Bold.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-BoldItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ExtraBold.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ExtraBoldItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Black.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-BlackItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
|
|
196
|
+
|
|
197
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
198
|
+
This license is copied below, and is also available with a FAQ at:
|
|
199
|
+
http://scripts.sil.org/OFL
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
-----------------------------------------------------------
|
|
203
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
204
|
+
-----------------------------------------------------------
|
|
205
|
+
|
|
206
|
+
PREAMBLE
|
|
207
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
208
|
+
development of collaborative font projects, to support the font creation
|
|
209
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
210
|
+
open framework in which fonts may be shared and improved in partnership
|
|
211
|
+
with others.
|
|
212
|
+
|
|
213
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
214
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
215
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
216
|
+
redistributed and/or sold with any software provided that any reserved
|
|
217
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
218
|
+
however, cannot be released under any other type of license. The
|
|
219
|
+
requirement for fonts to remain under this license does not apply
|
|
220
|
+
to any document created using the fonts or their derivatives.
|
|
221
|
+
|
|
222
|
+
DEFINITIONS
|
|
223
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
224
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
225
|
+
include source files, build scripts and documentation.
|
|
226
|
+
|
|
227
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
228
|
+
copyright statement(s).
|
|
229
|
+
|
|
230
|
+
"Original Version" refers to the collection of Font Software components as
|
|
231
|
+
distributed by the Copyright Holder(s).
|
|
232
|
+
|
|
233
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
234
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
235
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
236
|
+
new environment.
|
|
237
|
+
|
|
238
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
239
|
+
writer or other person who contributed to the Font Software.
|
|
240
|
+
|
|
241
|
+
PERMISSION & CONDITIONS
|
|
242
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
243
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
244
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
245
|
+
Software, subject to the following conditions:
|
|
246
|
+
|
|
247
|
+
1) Neither the Font Software nor any of its individual components,
|
|
248
|
+
in Original or Modified Versions, may be sold by itself.
|
|
249
|
+
|
|
250
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
251
|
+
redistributed and/or sold with any software, provided that each copy
|
|
252
|
+
contains the above copyright notice and this license. These can be
|
|
253
|
+
included either as stand-alone text files, human-readable headers or
|
|
254
|
+
in the appropriate machine-readable metadata fields within text or
|
|
255
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
256
|
+
|
|
257
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
258
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
259
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
260
|
+
presented to the users.
|
|
261
|
+
|
|
262
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
263
|
+
Software shall not be used to promote, endorse or advertise any
|
|
264
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
265
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
266
|
+
permission.
|
|
267
|
+
|
|
268
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
269
|
+
must be distributed entirely under this license, and must not be
|
|
270
|
+
distributed under any other license. The requirement for fonts to
|
|
271
|
+
remain under this license does not apply to any document created
|
|
272
|
+
using the Font Software.
|
|
273
|
+
|
|
274
|
+
TERMINATION
|
|
275
|
+
This license becomes null and void if any of the above conditions are
|
|
276
|
+
not met.
|
|
277
|
+
|
|
278
|
+
DISCLAIMER
|
|
279
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
280
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
281
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
282
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
283
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
284
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
285
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
286
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
287
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|