@asturiu/v0-sdk 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +82 -2
- package/contract/assertion-vectors.json +90 -0
- package/contract/schemas/branding.schema.json +46 -0
- package/contract/schemas/definitions.schema.json +376 -0
- package/contract/schemas/portal.schema.json +56 -0
- package/contract/tenant-api-routes.json +165 -0
- package/dist/branding.d.ts +131 -0
- package/dist/branding.d.ts.map +1 -0
- package/dist/branding.js +206 -0
- package/dist/branding.js.map +1 -0
- package/dist/changesets.d.ts +58 -0
- package/dist/changesets.d.ts.map +1 -0
- package/dist/changesets.js +18 -0
- package/dist/changesets.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +12 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/changesets.d.ts +14 -0
- package/dist/cli/changesets.d.ts.map +1 -0
- package/dist/cli/changesets.js +252 -0
- package/dist/cli/changesets.js.map +1 -0
- package/dist/cli/cli.d.ts +37 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +415 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/context.d.ts +147 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +258 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/engine.d.ts +59 -0
- package/dist/cli/engine.d.ts.map +1 -0
- package/dist/cli/engine.js +85 -0
- package/dist/cli/engine.js.map +1 -0
- package/dist/cli/feedback.d.ts +40 -0
- package/dist/cli/feedback.d.ts.map +1 -0
- package/dist/cli/feedback.js +420 -0
- package/dist/cli/feedback.js.map +1 -0
- package/dist/cli/files.d.ts +83 -0
- package/dist/cli/files.d.ts.map +1 -0
- package/dist/cli/files.js +389 -0
- package/dist/cli/files.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/overview.d.ts +6 -0
- package/dist/cli/overview.d.ts.map +1 -0
- package/dist/cli/overview.js +379 -0
- package/dist/cli/overview.js.map +1 -0
- package/dist/cli/parts.d.ts +5 -0
- package/dist/cli/parts.d.ts.map +1 -0
- package/dist/cli/parts.js +414 -0
- package/dist/cli/parts.js.map +1 -0
- package/dist/cli/sources.d.ts +37 -0
- package/dist/cli/sources.d.ts.map +1 -0
- package/dist/cli/sources.js +91 -0
- package/dist/cli/sources.js.map +1 -0
- package/dist/cli/terminal.d.ts +135 -0
- package/dist/cli/terminal.d.ts.map +1 -0
- package/dist/cli/terminal.js +353 -0
- package/dist/cli/terminal.js.map +1 -0
- package/dist/cli/ui-page.d.ts +8 -0
- package/dist/cli/ui-page.d.ts.map +1 -0
- package/dist/cli/ui-page.js +216 -0
- package/dist/cli/ui-page.js.map +1 -0
- package/dist/cli/ui.d.ts +54 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +251 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/client.d.ts +88 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +165 -0
- package/dist/client.js.map +1 -0
- package/dist/contacts.d.ts +43 -0
- package/dist/contacts.d.ts.map +1 -0
- package/dist/contacts.js +46 -0
- package/dist/contacts.js.map +1 -0
- package/dist/definition-set.d.ts +731 -0
- package/dist/definition-set.d.ts.map +1 -0
- package/dist/definition-set.js +659 -0
- package/dist/definition-set.js.map +1 -0
- package/dist/definitions.d.ts +42 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +154 -0
- package/dist/definitions.js.map +1 -0
- package/dist/enrolment.d.ts +9 -0
- package/dist/enrolment.d.ts.map +1 -0
- package/dist/enrolment.js +8 -0
- package/dist/enrolment.js.map +1 -0
- package/dist/fill.d.ts +73 -0
- package/dist/fill.d.ts.map +1 -0
- package/dist/fill.js +46 -0
- package/dist/fill.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications.d.ts +33 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +36 -0
- package/dist/notifications.js.map +1 -0
- package/dist/oidc.d.ts +122 -0
- package/dist/oidc.d.ts.map +1 -0
- package/dist/oidc.js +150 -0
- package/dist/oidc.js.map +1 -0
- package/dist/overlay.d.ts +109 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +58 -0
- package/dist/overlay.js.map +1 -0
- package/dist/passes.d.ts +95 -0
- package/dist/passes.d.ts.map +1 -0
- package/dist/passes.js +140 -0
- package/dist/passes.js.map +1 -0
- package/dist/portal-options.d.ts +65 -0
- package/dist/portal-options.d.ts.map +1 -0
- package/dist/portal-options.js +120 -0
- package/dist/portal-options.js.map +1 -0
- package/dist/reads.d.ts +41 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +44 -0
- package/dist/reads.js.map +1 -0
- package/dist/recovery-words.d.ts +8 -0
- package/dist/recovery-words.d.ts.map +1 -0
- package/dist/recovery-words.js +136 -0
- package/dist/recovery-words.js.map +1 -0
- package/dist/recovery.d.ts +198 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +112 -0
- package/dist/recovery.js.map +1 -0
- package/dist/reveal.d.ts +35 -0
- package/dist/reveal.d.ts.map +1 -0
- package/dist/reveal.js +66 -0
- package/dist/reveal.js.map +1 -0
- package/dist/seal.d.ts +15 -0
- package/dist/seal.d.ts.map +1 -0
- package/dist/seal.js +0 -0
- package/dist/seal.js.map +1 -0
- package/dist/session.d.ts +66 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +61 -0
- package/dist/session.js.map +1 -0
- package/dist/signing-in-mark.d.ts +14 -0
- package/dist/signing-in-mark.d.ts.map +1 -0
- package/dist/signing-in-mark.js +24 -0
- package/dist/signing-in-mark.js.map +1 -0
- package/dist/signing-in.d.ts +22 -0
- package/dist/signing-in.d.ts.map +1 -0
- package/dist/signing-in.js +203 -0
- package/dist/signing-in.js.map +1 -0
- package/dist/tags.d.ts +96 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +88 -0
- package/dist/tags.js.map +1 -0
- package/dist/tenant-subscription.d.ts +47 -0
- package/dist/tenant-subscription.d.ts.map +1 -0
- package/dist/tenant-subscription.js +7 -0
- package/dist/tenant-subscription.js.map +1 -0
- package/dist/testing/index.d.ts +125 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +320 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/theme.d.ts +237 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +504 -0
- package/dist/theme.js.map +1 -0
- package/dist/tickets.d.ts +152 -0
- package/dist/tickets.d.ts.map +1 -0
- package/dist/tickets.js +65 -0
- package/dist/tickets.js.map +1 -0
- package/dist/tiers.d.ts +168 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +341 -0
- package/dist/tiers.js.map +1 -0
- package/dist/types.d.ts +885 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/urlid.d.ts +50 -0
- package/dist/urlid.d.ts.map +1 -0
- package/dist/urlid.js +78 -0
- package/dist/urlid.js.map +1 -0
- package/dist/version.d.ts +15 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/make/asturiu.mk +43 -0
- package/package.json +63 -4
- package/src/branding.ts +221 -0
- package/src/changesets.ts +61 -0
- package/src/cli/bin.ts +12 -0
- package/src/cli/changesets.ts +233 -0
- package/src/cli/cli.ts +425 -0
- package/src/cli/context.ts +299 -0
- package/src/cli/engine.ts +112 -0
- package/src/cli/feedback.ts +406 -0
- package/src/cli/files.ts +371 -0
- package/src/cli/index.ts +7 -0
- package/src/cli/overview.ts +343 -0
- package/src/cli/parts.ts +371 -0
- package/src/cli/sources.ts +111 -0
- package/src/cli/terminal.ts +384 -0
- package/src/cli/ui-page.ts +215 -0
- package/src/cli/ui.ts +266 -0
- package/src/client.ts +202 -0
- package/src/contacts.ts +61 -0
- package/src/definition-set.ts +965 -0
- package/src/definitions.ts +156 -0
- package/src/enrolment.ts +10 -0
- package/src/fill.ts +83 -0
- package/src/index.ts +38 -0
- package/src/notifications.ts +55 -0
- package/src/oidc.ts +199 -0
- package/src/overlay.ts +137 -0
- package/src/passes.ts +168 -0
- package/src/portal-options.ts +125 -0
- package/src/reads.ts +71 -0
- package/src/recovery-words.ts +137 -0
- package/src/recovery.ts +269 -0
- package/src/reveal.ts +72 -0
- package/src/seal.ts +0 -0
- package/src/session.ts +93 -0
- package/src/signing-in-mark.ts +23 -0
- package/src/signing-in.ts +213 -0
- package/src/tags.ts +146 -0
- package/src/tenant-subscription.ts +44 -0
- package/src/testing/index.ts +337 -0
- package/src/theme.ts +628 -0
- package/src/tickets.ts +195 -0
- package/src/tiers.ts +397 -0
- package/src/types.ts +847 -0
- package/src/urlid.ts +77 -0
- package/src/version.ts +15 -0
- package/templates/asturiu/branding.json +4 -0
- package/templates/asturiu/definitions.json +23 -0
- package/templates/asturiu/portal.json +16 -0
package/dist/theme.js
ADDED
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portal themes (ADR-033): how a Tenant's Customer Portal looks, as data. A
|
|
3
|
+
* closed vocabulary — a preset and overrides picked from fixed lists — so
|
|
4
|
+
* every choice is one the portal's stylesheet knows how to draw, and nothing
|
|
5
|
+
* a Tenant writes reaches a page as CSS. Pure and dependency-free: the Engine
|
|
6
|
+
* validates with these lists, the portal renders with them, the Admin UI
|
|
7
|
+
* edits and previews with them.
|
|
8
|
+
*
|
|
9
|
+
* Stored as `branding.theme` on the Tenant record; served on
|
|
10
|
+
* `GET /v0/portal/presentation` as `theme`.
|
|
11
|
+
*/
|
|
12
|
+
import { INLINE_IMAGE_PATTERN } from "./branding.js";
|
|
13
|
+
export const THEME_PRESETS = ["asturiu", "porcelain", "midnight", "aurora", "sandstone", "evergreen", "graphite", "ember"];
|
|
14
|
+
/** `auto` follows the device, and the person may pick light or dark on the page. */
|
|
15
|
+
export const THEME_SCHEMES = ["dark", "light", "auto"];
|
|
16
|
+
export const THEME_BACKGROUNDS = ["plain", "glow", "gradient", "mesh", "grid", "dots", "image"];
|
|
17
|
+
export const THEME_INTENSITIES = ["subtle", "medium", "bold"];
|
|
18
|
+
/** Corner radius scale: controls and cards together. */
|
|
19
|
+
export const THEME_SHAPES = ["sharp", "soft", "rounded", "pill"];
|
|
20
|
+
export const THEME_DENSITIES = ["compact", "comfortable", "spacious"];
|
|
21
|
+
export const THEME_BUTTONS = ["solid", "gradient", "outline", "soft", "glow"];
|
|
22
|
+
/** How cards, lists and tiles sit on the page. */
|
|
23
|
+
export const THEME_SURFACES = ["flat", "outlined", "raised", "glass"];
|
|
24
|
+
/** `bar`: a tab bar on a phone and a side rail on a wide screen; `floating`: a dock and a floating panel. */
|
|
25
|
+
export const THEME_NAVIGATION = ["bar", "floating"];
|
|
26
|
+
export const THEME_FONTS = ["system", "humanist", "geometric", "grotesque", "rounded", "serif", "classic", "editorial", "industrial", "mono"];
|
|
27
|
+
export const THEME_WEIGHTS = ["regular", "medium", "semibold", "bold", "heavy"];
|
|
28
|
+
/** Section labels and eyebrows. */
|
|
29
|
+
export const THEME_LABEL_CASES = ["upper", "normal"];
|
|
30
|
+
export const THEME_TONES = ["primary", "secondary", "neutral"];
|
|
31
|
+
export const THEME_ICON_STROKES = ["light", "regular", "bold"];
|
|
32
|
+
export const THEME_ICON_FRAMES = ["tile", "circle", "outline", "plain"];
|
|
33
|
+
/** The frame around the Tenant's logo (or its initial, when it has none). */
|
|
34
|
+
export const THEME_MARK_FRAMES = ["tile", "circle", "plain"];
|
|
35
|
+
export const THEME_SIGN_IN_LAYOUTS = ["centered", "card", "split"];
|
|
36
|
+
export const THEME_MOTION = ["full", "subtle", "off"];
|
|
37
|
+
/** Limits the Engine enforces on the free text and images of a theme. */
|
|
38
|
+
export const THEME_LIMITS = { headline: 80, tagline: 200, imageUrl: 400_000 };
|
|
39
|
+
/** System font stacks only: nothing is downloaded, nothing reaches another origin, and each reads well where it falls back. */
|
|
40
|
+
export const THEME_FONT_STACKS = {
|
|
41
|
+
system: { label: "System", stack: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", system-ui, sans-serif' },
|
|
42
|
+
humanist: { label: "Humanist", stack: 'Seravek, "Gill Sans Nova", Ubuntu, Calibri, "DejaVu Sans", source-sans-pro, sans-serif' },
|
|
43
|
+
geometric: { label: "Geometric", stack: 'Avenir, "Avenir Next LT Pro", Montserrat, Corbel, "URW Gothic", source-sans-pro, sans-serif' },
|
|
44
|
+
grotesque: { label: "Grotesque", stack: 'Inter, "Helvetica Neue", Helvetica, "Arial Nova", "Nimbus Sans", Arial, sans-serif' },
|
|
45
|
+
rounded: { label: "Rounded", stack: 'ui-rounded, "SF Pro Rounded", "Hiragino Maru Gothic ProN", Quicksand, Comfortaa, Manjari, "Arial Rounded MT", Calibri, sans-serif' },
|
|
46
|
+
serif: { label: "Serif", stack: 'Charter, "Bitstream Charter", "Sitka Text", Cambria, serif' },
|
|
47
|
+
classic: { label: "Classic", stack: '"Iowan Old Style", "Palatino Linotype", "URW Palladio L", P052, serif' },
|
|
48
|
+
editorial: { label: "Editorial", stack: 'Didot, "Bodoni MT", "Noto Serif Display", "URW Palladio L", P052, Sylfaen, serif' },
|
|
49
|
+
industrial: { label: "Industrial", stack: 'Bahnschrift, "DIN Alternate", "Franklin Gothic Medium", "Nimbus Sans Narrow", sans-serif-condensed, sans-serif' },
|
|
50
|
+
mono: { label: "Monospace", stack: 'ui-monospace, "SF Mono", "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace' },
|
|
51
|
+
};
|
|
52
|
+
const WEIGHT = { regular: "400", medium: "500", semibold: "600", bold: "700", heavy: "800" };
|
|
53
|
+
/**
|
|
54
|
+
* The presets. `asturiu` is the platform's own look — the Admin UI's tokens,
|
|
55
|
+
* one for one — and the default for a Tenant that sets no branding at all.
|
|
56
|
+
* Names describe a look, never a product.
|
|
57
|
+
*/
|
|
58
|
+
export const THEME_PRESET_DEFINITIONS = {
|
|
59
|
+
asturiu: {
|
|
60
|
+
label: "Asturiu",
|
|
61
|
+
description: "Ink, gold and teal. The platform's own look, as in the Admin UI.",
|
|
62
|
+
primary: "#f2c230",
|
|
63
|
+
secondary: "#35a8a4",
|
|
64
|
+
dark: { background: "#0a0b0d", surface: "#111316", surface2: "#181b20", line: "#262a31", line2: "#343941", text: "#f4f4f1", text2: "#a5aab3", text3: "#6f7580", onPrimary: "#1a1400", primaryHover: "#ffd54a" },
|
|
65
|
+
light: { background: "#f4f4f1", surface: "#ffffff", surface2: "#ecebe6", line: "#e2e1db", line2: "#cfcec7", text: "#0a0b0d", text2: "#4a4f57", text3: "#6f7580", secondary: "#2b7f8b", onPrimary: "#1a1400", primaryHover: "#ffd54a" },
|
|
66
|
+
choices: {
|
|
67
|
+
scheme: "dark",
|
|
68
|
+
background: { style: "glow", intensity: "subtle", grain: false },
|
|
69
|
+
shape: "soft",
|
|
70
|
+
density: "comfortable",
|
|
71
|
+
buttons: "solid",
|
|
72
|
+
surfaces: "outlined",
|
|
73
|
+
navigation: "bar",
|
|
74
|
+
typography: { body: "system", display: "system", weight: "semibold", labels: "upper", labelTone: "primary" },
|
|
75
|
+
icons: { stroke: "regular", frame: "tile", tone: "secondary" },
|
|
76
|
+
mark: "plain",
|
|
77
|
+
signIn: { layout: "card" },
|
|
78
|
+
motion: "subtle",
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
porcelain: {
|
|
82
|
+
label: "Porcelain",
|
|
83
|
+
description: "Bright and calm, soft shadows, rounded corners. Follows the device's light or dark setting.",
|
|
84
|
+
primary: "#4f46e5",
|
|
85
|
+
secondary: "#0ea5e9",
|
|
86
|
+
light: { background: "#f5f6f8", surface: "#ffffff", surface2: "#f1f3f6", line: "#e4e7ec", line2: "#d0d5dd", text: "#101828", text2: "#475467", text3: "#667085" },
|
|
87
|
+
dark: { background: "#0c0e12", surface: "#15181e", surface2: "#1c2028", line: "#252a33", line2: "#323844", text: "#f2f4f7", text2: "#aab2bf", text3: "#7d8696" },
|
|
88
|
+
choices: {
|
|
89
|
+
scheme: "auto",
|
|
90
|
+
background: { style: "gradient", intensity: "subtle", grain: false },
|
|
91
|
+
shape: "rounded",
|
|
92
|
+
density: "comfortable",
|
|
93
|
+
buttons: "solid",
|
|
94
|
+
surfaces: "raised",
|
|
95
|
+
navigation: "bar",
|
|
96
|
+
typography: { body: "system", display: "system", weight: "bold", labels: "upper", labelTone: "neutral" },
|
|
97
|
+
icons: { stroke: "regular", frame: "tile", tone: "primary" },
|
|
98
|
+
mark: "tile",
|
|
99
|
+
signIn: { layout: "centered" },
|
|
100
|
+
motion: "full",
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
midnight: {
|
|
104
|
+
label: "Midnight",
|
|
105
|
+
description: "Deep navy, electric blue, frosted glass over a soft colour mesh.",
|
|
106
|
+
primary: "#5b8cff",
|
|
107
|
+
secondary: "#22d3ee",
|
|
108
|
+
dark: { background: "#060a14", surface: "#0d1424", surface2: "#131c31", line: "#1c2742", line2: "#283656", text: "#eaf0ff", text2: "#9fb0d0", text3: "#6b7ca0" },
|
|
109
|
+
light: { background: "#eef2fb", surface: "#ffffff", surface2: "#e8edf8", line: "#d8e0f0", line2: "#c3cee5", text: "#0a1228", text2: "#44506b", text3: "#66728d", primary: "#3563e9", secondary: "#0891b2" },
|
|
110
|
+
choices: {
|
|
111
|
+
scheme: "dark",
|
|
112
|
+
background: { style: "mesh", intensity: "medium", grain: false },
|
|
113
|
+
shape: "rounded",
|
|
114
|
+
density: "comfortable",
|
|
115
|
+
buttons: "gradient",
|
|
116
|
+
surfaces: "glass",
|
|
117
|
+
navigation: "floating",
|
|
118
|
+
typography: { body: "geometric", display: "geometric", weight: "bold", labels: "upper", labelTone: "secondary" },
|
|
119
|
+
icons: { stroke: "light", frame: "circle", tone: "secondary" },
|
|
120
|
+
mark: "circle",
|
|
121
|
+
signIn: { layout: "split" },
|
|
122
|
+
motion: "full",
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
aurora: {
|
|
126
|
+
label: "Aurora",
|
|
127
|
+
description: "Violet and pink light on a night sky, pill shapes, glowing buttons.",
|
|
128
|
+
primary: "#a78bfa",
|
|
129
|
+
secondary: "#f472b6",
|
|
130
|
+
dark: { background: "#0a0614", surface: "#130d22", surface2: "#1b1430", line: "#2a2040", line2: "#3b2e57", text: "#f5f0ff", text2: "#b8acd6", text3: "#8576a8" },
|
|
131
|
+
light: { background: "#f7f3ff", surface: "#ffffff", surface2: "#f1ebfd", line: "#e6dcfa", line2: "#d3c4f2", text: "#1c1030", text2: "#574a73", text3: "#7a6d96", primary: "#7c3aed", secondary: "#db2777" },
|
|
132
|
+
choices: {
|
|
133
|
+
scheme: "dark",
|
|
134
|
+
background: { style: "mesh", intensity: "bold", grain: true },
|
|
135
|
+
shape: "pill",
|
|
136
|
+
density: "comfortable",
|
|
137
|
+
buttons: "glow",
|
|
138
|
+
surfaces: "glass",
|
|
139
|
+
navigation: "floating",
|
|
140
|
+
typography: { body: "rounded", display: "rounded", weight: "heavy", labels: "normal", labelTone: "primary" },
|
|
141
|
+
icons: { stroke: "regular", frame: "circle", tone: "primary" },
|
|
142
|
+
mark: "circle",
|
|
143
|
+
signIn: { layout: "card" },
|
|
144
|
+
motion: "full",
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
sandstone: {
|
|
148
|
+
label: "Sandstone",
|
|
149
|
+
description: "Warm paper, terracotta and olive, editorial serif headings, square corners.",
|
|
150
|
+
primary: "#b4532a",
|
|
151
|
+
secondary: "#5f7a3a",
|
|
152
|
+
light: { background: "#f4efe6", surface: "#fffcf6", surface2: "#efe8db", line: "#e3d9c8", line2: "#d1c3ab", text: "#2a2118", text2: "#5e5143", text3: "#85776a" },
|
|
153
|
+
dark: { background: "#15110d", surface: "#1e1913", surface2: "#262019", line: "#332b22", line2: "#463b2e", text: "#f3ece1", text2: "#bfb2a0", text3: "#8f8373", primary: "#e07a4a", secondary: "#9bb26b" },
|
|
154
|
+
choices: {
|
|
155
|
+
scheme: "light",
|
|
156
|
+
background: { style: "dots", intensity: "subtle", grain: true },
|
|
157
|
+
shape: "sharp",
|
|
158
|
+
density: "spacious",
|
|
159
|
+
buttons: "solid",
|
|
160
|
+
surfaces: "outlined",
|
|
161
|
+
navigation: "bar",
|
|
162
|
+
typography: { body: "humanist", display: "editorial", weight: "regular", labels: "upper", labelTone: "neutral" },
|
|
163
|
+
icons: { stroke: "light", frame: "plain", tone: "primary" },
|
|
164
|
+
mark: "plain",
|
|
165
|
+
signIn: { layout: "split" },
|
|
166
|
+
motion: "subtle",
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
evergreen: {
|
|
170
|
+
label: "Evergreen",
|
|
171
|
+
description: "Forest green with a touch of brass, quiet and trustworthy.",
|
|
172
|
+
primary: "#1f7a52",
|
|
173
|
+
secondary: "#c8a24a",
|
|
174
|
+
light: { background: "#f2f5f1", surface: "#ffffff", surface2: "#ebf0ea", line: "#dde5db", line2: "#c7d3c4", text: "#10201a", text2: "#44574e", text3: "#687a71", secondary: "#9a7a2c" },
|
|
175
|
+
dark: { background: "#08110d", surface: "#0f1a15", surface2: "#15231c", line: "#1f3029", line2: "#2b4136", text: "#e9f3ee", text2: "#a3b8ad", text3: "#6f8579", primary: "#3fae7c" },
|
|
176
|
+
choices: {
|
|
177
|
+
scheme: "auto",
|
|
178
|
+
background: { style: "glow", intensity: "medium", grain: false },
|
|
179
|
+
shape: "soft",
|
|
180
|
+
density: "comfortable",
|
|
181
|
+
buttons: "solid",
|
|
182
|
+
surfaces: "raised",
|
|
183
|
+
navigation: "bar",
|
|
184
|
+
typography: { body: "humanist", display: "serif", weight: "semibold", labels: "normal", labelTone: "primary" },
|
|
185
|
+
icons: { stroke: "regular", frame: "tile", tone: "primary" },
|
|
186
|
+
mark: "tile",
|
|
187
|
+
signIn: { layout: "card" },
|
|
188
|
+
motion: "subtle",
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
graphite: {
|
|
192
|
+
label: "Graphite",
|
|
193
|
+
description: "Black and white, hairlines and a fine grid. Nothing but the content.",
|
|
194
|
+
primary: "#0a0a0a",
|
|
195
|
+
secondary: "#52525b",
|
|
196
|
+
light: { background: "#fafafa", surface: "#ffffff", surface2: "#f4f4f5", line: "#e7e7e9", line2: "#d4d4d8", text: "#0a0a0a", text2: "#52525b", text3: "#71717a" },
|
|
197
|
+
dark: { background: "#09090b", surface: "#111113", surface2: "#18181b", line: "#232326", line2: "#323236", text: "#fafafa", text2: "#a1a1aa", text3: "#71717a", primary: "#fafafa", secondary: "#a1a1aa" },
|
|
198
|
+
choices: {
|
|
199
|
+
scheme: "auto",
|
|
200
|
+
background: { style: "grid", intensity: "subtle", grain: false },
|
|
201
|
+
shape: "sharp",
|
|
202
|
+
density: "compact",
|
|
203
|
+
buttons: "solid",
|
|
204
|
+
surfaces: "outlined",
|
|
205
|
+
navigation: "bar",
|
|
206
|
+
typography: { body: "grotesque", display: "grotesque", weight: "semibold", labels: "upper", labelTone: "neutral" },
|
|
207
|
+
icons: { stroke: "light", frame: "outline", tone: "neutral" },
|
|
208
|
+
mark: "tile",
|
|
209
|
+
signIn: { layout: "centered" },
|
|
210
|
+
motion: "subtle",
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
ember: {
|
|
214
|
+
label: "Ember",
|
|
215
|
+
description: "Glowing orange and amber on charcoal, bold and energetic.",
|
|
216
|
+
primary: "#ff7a1a",
|
|
217
|
+
secondary: "#ffc247",
|
|
218
|
+
dark: { background: "#0f0a08", surface: "#1a120e", surface2: "#221813", line: "#33241c", line2: "#4a3529", text: "#fff3ea", text2: "#c9ab98", text3: "#93786a" },
|
|
219
|
+
light: { background: "#fff7f0", surface: "#ffffff", surface2: "#fdeee2", line: "#f6dfcd", line2: "#e9c5a9", text: "#2a140a", text2: "#6b4a39", text3: "#8f6e5d", primary: "#e8600a", secondary: "#c98a00" },
|
|
220
|
+
choices: {
|
|
221
|
+
scheme: "dark",
|
|
222
|
+
background: { style: "gradient", intensity: "bold", grain: true },
|
|
223
|
+
shape: "rounded",
|
|
224
|
+
density: "comfortable",
|
|
225
|
+
buttons: "gradient",
|
|
226
|
+
surfaces: "raised",
|
|
227
|
+
navigation: "floating",
|
|
228
|
+
typography: { body: "system", display: "industrial", weight: "bold", labels: "upper", labelTone: "primary" },
|
|
229
|
+
icons: { stroke: "bold", frame: "tile", tone: "primary" },
|
|
230
|
+
mark: "tile",
|
|
231
|
+
signIn: { layout: "split" },
|
|
232
|
+
motion: "full",
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
/** The preset for a Tenant that names no theme: the platform's look, or — for a Tenant that only ever set `primary_color` — Porcelain in that colour, close to the portal's look before themes. */
|
|
237
|
+
export function defaultPresetFor(branding) {
|
|
238
|
+
return parseHex(branding?.primary_color) ? "porcelain" : "asturiu";
|
|
239
|
+
}
|
|
240
|
+
function parseHex(c) {
|
|
241
|
+
if (typeof c !== "string")
|
|
242
|
+
return null;
|
|
243
|
+
const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(c.trim());
|
|
244
|
+
if (!m)
|
|
245
|
+
return null;
|
|
246
|
+
const hex = m[1].length === 3 ? m[1].split("").map((x) => x + x).join("") : m[1];
|
|
247
|
+
return [0, 2, 4].map((i) => parseInt(hex.slice(i, i + 2), 16));
|
|
248
|
+
}
|
|
249
|
+
/** A colour as the theme stores it: `#rrggbb`, lower case; null when it is not one. */
|
|
250
|
+
export function themeColor(c) {
|
|
251
|
+
const rgb = parseHex(c);
|
|
252
|
+
return rgb ? toHex(rgb) : null;
|
|
253
|
+
}
|
|
254
|
+
const toHex = (rgb) => `#${rgb.map((v) => Math.round(Math.max(0, Math.min(255, v))).toString(16).padStart(2, "0")).join("")}`;
|
|
255
|
+
const mix = (a, b, t) => a.map((v, i) => v + (b[i] - v) * t);
|
|
256
|
+
const WHITE = [255, 255, 255];
|
|
257
|
+
const BLACK = [0, 0, 0];
|
|
258
|
+
function luminance([r, g, b]) {
|
|
259
|
+
const lin = (v) => {
|
|
260
|
+
const s = v / 255;
|
|
261
|
+
return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
|
|
262
|
+
};
|
|
263
|
+
return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);
|
|
264
|
+
}
|
|
265
|
+
/** WCAG contrast ratio of two colours. */
|
|
266
|
+
export function contrastRatio(a, b) {
|
|
267
|
+
const x = parseHex(a);
|
|
268
|
+
const y = parseHex(b);
|
|
269
|
+
if (!x || !y)
|
|
270
|
+
return 1;
|
|
271
|
+
return ratio(x, y);
|
|
272
|
+
}
|
|
273
|
+
function ratio(a, b) {
|
|
274
|
+
const [hi, lo] = [luminance(a), luminance(b)].sort((p, q) => q - p);
|
|
275
|
+
return (hi + 0.05) / (lo + 0.05);
|
|
276
|
+
}
|
|
277
|
+
/** Moved towards white on a dark ground, towards black on a light one, until it reads at `min` against `ground`. */
|
|
278
|
+
function readable(c, ground, min) {
|
|
279
|
+
const toward = luminance(ground) < 0.2 ? WHITE : BLACK;
|
|
280
|
+
let out = c;
|
|
281
|
+
for (let i = 0; i < 24 && ratio(out, ground) < min; i++)
|
|
282
|
+
out = mix(out, toward, 0.08);
|
|
283
|
+
return out;
|
|
284
|
+
}
|
|
285
|
+
/** Text on a fill: a deep shade of the fill itself when that reads, else white or black, whichever reads better. */
|
|
286
|
+
function onColor(fill) {
|
|
287
|
+
const deep = mix(fill, BLACK, 0.86);
|
|
288
|
+
if (ratio(deep, fill) >= 4.5)
|
|
289
|
+
return deep;
|
|
290
|
+
return ratio(WHITE, fill) >= ratio(BLACK, fill) ? WHITE : BLACK;
|
|
291
|
+
}
|
|
292
|
+
function palette(base, over, primaryHex, secondaryHex, presetPrimary, presetSecondary, dark) {
|
|
293
|
+
const bg = parseHex(over?.background) ?? parseHex(base.background);
|
|
294
|
+
const surface = parseHex(over?.surface) ?? parseHex(base.surface);
|
|
295
|
+
const custom = !!(over?.background || over?.surface || over?.text);
|
|
296
|
+
let text = parseHex(over?.text) ?? parseHex(base.text);
|
|
297
|
+
if (ratio(text, bg) < 7)
|
|
298
|
+
text = luminance(bg) < 0.2 ? [244, 244, 241] : [12, 14, 18];
|
|
299
|
+
const keep = (k, derived) => (custom ? derived : parseHex(base[k]));
|
|
300
|
+
const ownPrimary = !over?.primary && !primaryHex;
|
|
301
|
+
const primary = parseHex(over?.primary) ?? parseHex(primaryHex) ?? parseHex(base.primary ?? presetPrimary);
|
|
302
|
+
const secondary = parseHex(over?.secondary) ?? parseHex(secondaryHex) ?? parseHex(base.secondary ?? presetSecondary);
|
|
303
|
+
return {
|
|
304
|
+
background: toHex(bg),
|
|
305
|
+
surface: toHex(surface),
|
|
306
|
+
surface2: toHex(keep("surface2", mix(surface, text, dark ? 0.05 : 0.035))),
|
|
307
|
+
line: toHex(keep("line", mix(surface, text, dark ? 0.12 : 0.1))),
|
|
308
|
+
line2: toHex(keep("line2", mix(surface, text, dark ? 0.19 : 0.17))),
|
|
309
|
+
text: toHex(text),
|
|
310
|
+
text2: toHex(keep("text2", readable(mix(text, bg, 0.32), bg, 4.5))),
|
|
311
|
+
text3: toHex(keep("text3", readable(mix(text, bg, 0.5), bg, 3))),
|
|
312
|
+
primary: toHex(primary),
|
|
313
|
+
onPrimary: ownPrimary && base.onPrimary ? base.onPrimary : toHex(onColor(primary)),
|
|
314
|
+
primaryText: toHex(readable(primary, bg, 4.5)),
|
|
315
|
+
primarySoft: toHex(mix(primary, surface, dark ? 0.84 : 0.88)),
|
|
316
|
+
primaryHover: ownPrimary && base.primaryHover ? base.primaryHover : toHex(mix(primary, dark ? WHITE : BLACK, dark ? 0.16 : 0.1)),
|
|
317
|
+
secondary: toHex(secondary),
|
|
318
|
+
onSecondary: toHex(onColor(secondary)),
|
|
319
|
+
secondaryText: toHex(readable(secondary, bg, 4.5)),
|
|
320
|
+
secondarySoft: toHex(mix(secondary, surface, dark ? 0.84 : 0.88)),
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
// ------------------------------------------------------------------ reading a spec
|
|
324
|
+
const isObj = (v) => !!v && typeof v === "object" && !Array.isArray(v);
|
|
325
|
+
const pick = (list, v) => (typeof v === "string" && list.includes(v) ? v : undefined);
|
|
326
|
+
const text = (v, max) => (typeof v === "string" && v.trim() ? v.trim().slice(0, max) : undefined);
|
|
327
|
+
/**
|
|
328
|
+
* An image a theme may show: an inline base64 image, a path on this origin
|
|
329
|
+
* (how the Customer Portal names an image it serves, ADR-038) or an http(s)
|
|
330
|
+
* URL, and nothing that could leave a CSS `url("…")` — no quotes, brackets,
|
|
331
|
+
* backslashes or white space.
|
|
332
|
+
*/
|
|
333
|
+
export function themeImageUrl(v) {
|
|
334
|
+
if (typeof v !== "string" || !v || v.length > THEME_LIMITS.imageUrl)
|
|
335
|
+
return null;
|
|
336
|
+
if (INLINE_IMAGE_PATTERN.test(v))
|
|
337
|
+
return v;
|
|
338
|
+
return /^(https?:\/\/|\/(?!\/))[^\s"'()<>\\]*$/.test(v) ? v : null;
|
|
339
|
+
}
|
|
340
|
+
function schemeColors(v) {
|
|
341
|
+
if (!isObj(v))
|
|
342
|
+
return undefined;
|
|
343
|
+
const out = {};
|
|
344
|
+
for (const k of ["background", "surface", "text", "primary", "secondary"]) {
|
|
345
|
+
const c = themeColor(v[k]);
|
|
346
|
+
if (c)
|
|
347
|
+
out[k] = c;
|
|
348
|
+
}
|
|
349
|
+
return Object.keys(out).length ? out : undefined;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* The theme as far as it can be read: every known key with a valid value, the
|
|
353
|
+
* rest dropped. The Engine refuses a bad theme when it is written (the Tenant
|
|
354
|
+
* schema); this is for reading, so an odd stored value falls back to the
|
|
355
|
+
* preset's instead of breaking a page. Image paths are kept as they are — the
|
|
356
|
+
* Interface API resolves them against the Tenant's site, like `logo_url`.
|
|
357
|
+
*/
|
|
358
|
+
export function sanitizeThemeSpec(raw) {
|
|
359
|
+
if (!isObj(raw))
|
|
360
|
+
return {};
|
|
361
|
+
const out = {};
|
|
362
|
+
const set = (k, v) => {
|
|
363
|
+
if (v !== undefined && !(isObj(v) && !Object.keys(v).length))
|
|
364
|
+
out[k] = v;
|
|
365
|
+
};
|
|
366
|
+
const strip = (o) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined));
|
|
367
|
+
const image = (v) => (typeof v === "string" && /^\/(?!\/)[^\s"'()<>\\]*$/.test(v) && v.length < 2048 ? v : (themeImageUrl(v) ?? undefined));
|
|
368
|
+
set("preset", pick(THEME_PRESETS, raw.preset));
|
|
369
|
+
set("scheme", pick(THEME_SCHEMES, raw.scheme));
|
|
370
|
+
if (isObj(raw.colors))
|
|
371
|
+
set("colors", strip({ primary: themeColor(raw.colors.primary) ?? undefined, secondary: themeColor(raw.colors.secondary) ?? undefined, light: schemeColors(raw.colors.light), dark: schemeColors(raw.colors.dark) }));
|
|
372
|
+
if (isObj(raw.background))
|
|
373
|
+
set("background", strip({ style: pick(THEME_BACKGROUNDS, raw.background.style), intensity: pick(THEME_INTENSITIES, raw.background.intensity), grain: typeof raw.background.grain === "boolean" ? raw.background.grain : undefined, image_url: image(raw.background.image_url) }));
|
|
374
|
+
set("shape", pick(THEME_SHAPES, raw.shape));
|
|
375
|
+
set("density", pick(THEME_DENSITIES, raw.density));
|
|
376
|
+
set("buttons", pick(THEME_BUTTONS, raw.buttons));
|
|
377
|
+
set("surfaces", pick(THEME_SURFACES, raw.surfaces));
|
|
378
|
+
set("navigation", pick(THEME_NAVIGATION, raw.navigation));
|
|
379
|
+
if (isObj(raw.typography))
|
|
380
|
+
set("typography", strip({ body: pick(THEME_FONTS, raw.typography.body), display: pick(THEME_FONTS, raw.typography.display), weight: pick(THEME_WEIGHTS, raw.typography.weight), labels: pick(THEME_LABEL_CASES, raw.typography.labels), label_tone: pick(THEME_TONES, raw.typography.label_tone) }));
|
|
381
|
+
if (isObj(raw.icons))
|
|
382
|
+
set("icons", strip({ stroke: pick(THEME_ICON_STROKES, raw.icons.stroke), frame: pick(THEME_ICON_FRAMES, raw.icons.frame), tone: pick(THEME_TONES, raw.icons.tone) }));
|
|
383
|
+
set("mark", pick(THEME_MARK_FRAMES, raw.mark));
|
|
384
|
+
if (isObj(raw.sign_in))
|
|
385
|
+
set("sign_in", strip({ layout: pick(THEME_SIGN_IN_LAYOUTS, raw.sign_in.layout), headline: text(raw.sign_in.headline, THEME_LIMITS.headline), tagline: text(raw.sign_in.tagline, THEME_LIMITS.tagline), image_url: image(raw.sign_in.image_url) }));
|
|
386
|
+
set("motion", pick(THEME_MOTION, raw.motion));
|
|
387
|
+
return out;
|
|
388
|
+
}
|
|
389
|
+
// ------------------------------------------------------------------ resolving
|
|
390
|
+
/**
|
|
391
|
+
* Every choice made: the preset (named, or the default for this branding),
|
|
392
|
+
* then the Tenant's overrides. `branding` supplies the logo, the dark logo,
|
|
393
|
+
* the favicon and — when the theme names no primary — `primary_color`.
|
|
394
|
+
*/
|
|
395
|
+
export function resolvePortalTheme(input) {
|
|
396
|
+
const branding = input?.branding ?? {};
|
|
397
|
+
const spec = sanitizeThemeSpec(input?.theme ?? branding.theme);
|
|
398
|
+
const name = spec.preset ?? defaultPresetFor(branding);
|
|
399
|
+
const p = THEME_PRESET_DEFINITIONS[name];
|
|
400
|
+
const c = p.choices;
|
|
401
|
+
// A theme is the whole truth once set; `primary_color` speaks only for a Tenant that has none.
|
|
402
|
+
const legacy = Object.keys(spec).length ? null : themeColor(branding.primary_color);
|
|
403
|
+
const primary = spec.colors?.primary ?? legacy;
|
|
404
|
+
const secondary = spec.colors?.secondary;
|
|
405
|
+
const url = (v) => themeImageUrl(v);
|
|
406
|
+
return {
|
|
407
|
+
preset: name,
|
|
408
|
+
scheme: spec.scheme ?? c.scheme,
|
|
409
|
+
light: palette(p.light, spec.colors?.light, primary ?? null, secondary ?? null, p.primary, p.secondary, false),
|
|
410
|
+
dark: palette(p.dark, spec.colors?.dark, primary ?? null, secondary ?? null, p.primary, p.secondary, true),
|
|
411
|
+
background: {
|
|
412
|
+
style: spec.background?.style ?? c.background.style,
|
|
413
|
+
intensity: spec.background?.intensity ?? c.background.intensity,
|
|
414
|
+
grain: spec.background?.grain ?? c.background.grain,
|
|
415
|
+
imageUrl: url(spec.background?.image_url),
|
|
416
|
+
},
|
|
417
|
+
shape: spec.shape ?? c.shape,
|
|
418
|
+
density: spec.density ?? c.density,
|
|
419
|
+
buttons: spec.buttons ?? c.buttons,
|
|
420
|
+
surfaces: spec.surfaces ?? c.surfaces,
|
|
421
|
+
navigation: spec.navigation ?? c.navigation,
|
|
422
|
+
typography: {
|
|
423
|
+
body: spec.typography?.body ?? c.typography.body,
|
|
424
|
+
display: spec.typography?.display ?? c.typography.display,
|
|
425
|
+
weight: spec.typography?.weight ?? c.typography.weight,
|
|
426
|
+
labels: spec.typography?.labels ?? c.typography.labels,
|
|
427
|
+
labelTone: spec.typography?.label_tone ?? c.typography.labelTone,
|
|
428
|
+
},
|
|
429
|
+
icons: { stroke: spec.icons?.stroke ?? c.icons.stroke, frame: spec.icons?.frame ?? c.icons.frame, tone: spec.icons?.tone ?? c.icons.tone },
|
|
430
|
+
mark: spec.mark ?? c.mark,
|
|
431
|
+
signIn: { layout: spec.sign_in?.layout ?? c.signIn.layout, headline: spec.sign_in?.headline ?? null, tagline: spec.sign_in?.tagline ?? null, imageUrl: url(spec.sign_in?.image_url) },
|
|
432
|
+
motion: spec.motion ?? c.motion,
|
|
433
|
+
logoUrl: url(branding.logo_url),
|
|
434
|
+
logoDarkUrl: url(branding.logo_dark_url),
|
|
435
|
+
faviconUrl: url(branding.favicon_url),
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
const PALETTE_VARS = [
|
|
439
|
+
["background", "bg"],
|
|
440
|
+
["surface", "surface"],
|
|
441
|
+
["surface2", "surface-2"],
|
|
442
|
+
["line", "line"],
|
|
443
|
+
["line2", "line-2"],
|
|
444
|
+
["text", "text"],
|
|
445
|
+
["text2", "text-2"],
|
|
446
|
+
["text3", "text-3"],
|
|
447
|
+
["primary", "primary"],
|
|
448
|
+
["onPrimary", "on-primary"],
|
|
449
|
+
["primaryText", "primary-fg"],
|
|
450
|
+
["primarySoft", "primary-soft"],
|
|
451
|
+
["primaryHover", "primary-hover"],
|
|
452
|
+
["secondary", "secondary"],
|
|
453
|
+
["onSecondary", "on-secondary"],
|
|
454
|
+
["secondaryText", "secondary-fg"],
|
|
455
|
+
["secondarySoft", "secondary-soft"],
|
|
456
|
+
];
|
|
457
|
+
/** The CSS custom property names a palette is written to, per scheme prefix (`--l-*`, `--d-*`). */
|
|
458
|
+
export const THEME_PALETTE_VARS = PALETTE_VARS.map(([, v]) => v);
|
|
459
|
+
/**
|
|
460
|
+
* A resolved theme as the root element carries it. `scheme` overrides the
|
|
461
|
+
* theme's (a person's own light or dark choice on an `auto` theme).
|
|
462
|
+
*/
|
|
463
|
+
export function portalThemeStyle(t, scheme) {
|
|
464
|
+
const vars = {};
|
|
465
|
+
for (const [k, v] of PALETTE_VARS) {
|
|
466
|
+
vars[`--l-${v}`] = t.light[k];
|
|
467
|
+
vars[`--d-${v}`] = t.dark[k];
|
|
468
|
+
}
|
|
469
|
+
vars["--font"] = THEME_FONT_STACKS[t.typography.body].stack;
|
|
470
|
+
vars["--font-display"] = THEME_FONT_STACKS[t.typography.display].stack;
|
|
471
|
+
vars["--display-weight"] = WEIGHT[t.typography.weight];
|
|
472
|
+
if (t.background.imageUrl)
|
|
473
|
+
vars["--ground-image"] = `url("${t.background.imageUrl}")`;
|
|
474
|
+
if (t.signIn.imageUrl)
|
|
475
|
+
vars["--signin-image"] = `url("${t.signIn.imageUrl}")`;
|
|
476
|
+
const attrs = {
|
|
477
|
+
"data-preset": t.preset,
|
|
478
|
+
"data-scheme": t.scheme === "auto" && scheme ? scheme : t.scheme,
|
|
479
|
+
"data-ground": t.background.style === "image" && !t.background.imageUrl ? "glow" : t.background.style,
|
|
480
|
+
"data-intensity": t.background.intensity,
|
|
481
|
+
"data-grain": String(t.background.grain),
|
|
482
|
+
"data-shape": t.shape,
|
|
483
|
+
"data-density": t.density,
|
|
484
|
+
"data-buttons": t.buttons,
|
|
485
|
+
"data-surfaces": t.surfaces,
|
|
486
|
+
"data-nav": t.navigation,
|
|
487
|
+
"data-font-body": t.typography.body,
|
|
488
|
+
"data-font-display": t.typography.display,
|
|
489
|
+
"data-labels": t.typography.labels,
|
|
490
|
+
"data-label-tone": t.typography.labelTone,
|
|
491
|
+
"data-icon-stroke": t.icons.stroke,
|
|
492
|
+
"data-icon-frame": t.icons.frame,
|
|
493
|
+
"data-icon-tone": t.icons.tone,
|
|
494
|
+
"data-mark": t.mark,
|
|
495
|
+
"data-signin": t.signIn.layout,
|
|
496
|
+
"data-motion": t.motion,
|
|
497
|
+
};
|
|
498
|
+
return { vars, attrs };
|
|
499
|
+
}
|
|
500
|
+
/** The ground colour a browser's own chrome (status bar, overscroll) should take for each scheme. */
|
|
501
|
+
export function portalThemeColors(t) {
|
|
502
|
+
return { light: t.light.background, dark: t.dark.background, scheme: t.scheme };
|
|
503
|
+
}
|
|
504
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
|