@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.
Files changed (239) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +5 -0
  4. package/README.md +82 -2
  5. package/contract/assertion-vectors.json +90 -0
  6. package/contract/schemas/branding.schema.json +46 -0
  7. package/contract/schemas/definitions.schema.json +376 -0
  8. package/contract/schemas/portal.schema.json +56 -0
  9. package/contract/tenant-api-routes.json +165 -0
  10. package/dist/branding.d.ts +131 -0
  11. package/dist/branding.d.ts.map +1 -0
  12. package/dist/branding.js +206 -0
  13. package/dist/branding.js.map +1 -0
  14. package/dist/changesets.d.ts +58 -0
  15. package/dist/changesets.d.ts.map +1 -0
  16. package/dist/changesets.js +18 -0
  17. package/dist/changesets.js.map +1 -0
  18. package/dist/cli/bin.d.ts +3 -0
  19. package/dist/cli/bin.d.ts.map +1 -0
  20. package/dist/cli/bin.js +12 -0
  21. package/dist/cli/bin.js.map +1 -0
  22. package/dist/cli/changesets.d.ts +14 -0
  23. package/dist/cli/changesets.d.ts.map +1 -0
  24. package/dist/cli/changesets.js +252 -0
  25. package/dist/cli/changesets.js.map +1 -0
  26. package/dist/cli/cli.d.ts +37 -0
  27. package/dist/cli/cli.d.ts.map +1 -0
  28. package/dist/cli/cli.js +415 -0
  29. package/dist/cli/cli.js.map +1 -0
  30. package/dist/cli/context.d.ts +147 -0
  31. package/dist/cli/context.d.ts.map +1 -0
  32. package/dist/cli/context.js +258 -0
  33. package/dist/cli/context.js.map +1 -0
  34. package/dist/cli/engine.d.ts +59 -0
  35. package/dist/cli/engine.d.ts.map +1 -0
  36. package/dist/cli/engine.js +85 -0
  37. package/dist/cli/engine.js.map +1 -0
  38. package/dist/cli/feedback.d.ts +40 -0
  39. package/dist/cli/feedback.d.ts.map +1 -0
  40. package/dist/cli/feedback.js +420 -0
  41. package/dist/cli/feedback.js.map +1 -0
  42. package/dist/cli/files.d.ts +83 -0
  43. package/dist/cli/files.d.ts.map +1 -0
  44. package/dist/cli/files.js +389 -0
  45. package/dist/cli/files.js.map +1 -0
  46. package/dist/cli/index.d.ts +8 -0
  47. package/dist/cli/index.d.ts.map +1 -0
  48. package/dist/cli/index.js +8 -0
  49. package/dist/cli/index.js.map +1 -0
  50. package/dist/cli/overview.d.ts +6 -0
  51. package/dist/cli/overview.d.ts.map +1 -0
  52. package/dist/cli/overview.js +379 -0
  53. package/dist/cli/overview.js.map +1 -0
  54. package/dist/cli/parts.d.ts +5 -0
  55. package/dist/cli/parts.d.ts.map +1 -0
  56. package/dist/cli/parts.js +414 -0
  57. package/dist/cli/parts.js.map +1 -0
  58. package/dist/cli/sources.d.ts +37 -0
  59. package/dist/cli/sources.d.ts.map +1 -0
  60. package/dist/cli/sources.js +91 -0
  61. package/dist/cli/sources.js.map +1 -0
  62. package/dist/cli/terminal.d.ts +135 -0
  63. package/dist/cli/terminal.d.ts.map +1 -0
  64. package/dist/cli/terminal.js +353 -0
  65. package/dist/cli/terminal.js.map +1 -0
  66. package/dist/cli/ui-page.d.ts +8 -0
  67. package/dist/cli/ui-page.d.ts.map +1 -0
  68. package/dist/cli/ui-page.js +216 -0
  69. package/dist/cli/ui-page.js.map +1 -0
  70. package/dist/cli/ui.d.ts +54 -0
  71. package/dist/cli/ui.d.ts.map +1 -0
  72. package/dist/cli/ui.js +251 -0
  73. package/dist/cli/ui.js.map +1 -0
  74. package/dist/client.d.ts +88 -0
  75. package/dist/client.d.ts.map +1 -0
  76. package/dist/client.js +165 -0
  77. package/dist/client.js.map +1 -0
  78. package/dist/contacts.d.ts +43 -0
  79. package/dist/contacts.d.ts.map +1 -0
  80. package/dist/contacts.js +46 -0
  81. package/dist/contacts.js.map +1 -0
  82. package/dist/definition-set.d.ts +731 -0
  83. package/dist/definition-set.d.ts.map +1 -0
  84. package/dist/definition-set.js +659 -0
  85. package/dist/definition-set.js.map +1 -0
  86. package/dist/definitions.d.ts +42 -0
  87. package/dist/definitions.d.ts.map +1 -0
  88. package/dist/definitions.js +154 -0
  89. package/dist/definitions.js.map +1 -0
  90. package/dist/enrolment.d.ts +9 -0
  91. package/dist/enrolment.d.ts.map +1 -0
  92. package/dist/enrolment.js +8 -0
  93. package/dist/enrolment.js.map +1 -0
  94. package/dist/fill.d.ts +73 -0
  95. package/dist/fill.d.ts.map +1 -0
  96. package/dist/fill.js +46 -0
  97. package/dist/fill.js.map +1 -0
  98. package/dist/index.d.ts +39 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +39 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/notifications.d.ts +33 -0
  103. package/dist/notifications.d.ts.map +1 -0
  104. package/dist/notifications.js +36 -0
  105. package/dist/notifications.js.map +1 -0
  106. package/dist/oidc.d.ts +122 -0
  107. package/dist/oidc.d.ts.map +1 -0
  108. package/dist/oidc.js +150 -0
  109. package/dist/oidc.js.map +1 -0
  110. package/dist/overlay.d.ts +109 -0
  111. package/dist/overlay.d.ts.map +1 -0
  112. package/dist/overlay.js +58 -0
  113. package/dist/overlay.js.map +1 -0
  114. package/dist/passes.d.ts +95 -0
  115. package/dist/passes.d.ts.map +1 -0
  116. package/dist/passes.js +140 -0
  117. package/dist/passes.js.map +1 -0
  118. package/dist/portal-options.d.ts +65 -0
  119. package/dist/portal-options.d.ts.map +1 -0
  120. package/dist/portal-options.js +120 -0
  121. package/dist/portal-options.js.map +1 -0
  122. package/dist/reads.d.ts +41 -0
  123. package/dist/reads.d.ts.map +1 -0
  124. package/dist/reads.js +44 -0
  125. package/dist/reads.js.map +1 -0
  126. package/dist/recovery-words.d.ts +8 -0
  127. package/dist/recovery-words.d.ts.map +1 -0
  128. package/dist/recovery-words.js +136 -0
  129. package/dist/recovery-words.js.map +1 -0
  130. package/dist/recovery.d.ts +198 -0
  131. package/dist/recovery.d.ts.map +1 -0
  132. package/dist/recovery.js +112 -0
  133. package/dist/recovery.js.map +1 -0
  134. package/dist/reveal.d.ts +35 -0
  135. package/dist/reveal.d.ts.map +1 -0
  136. package/dist/reveal.js +66 -0
  137. package/dist/reveal.js.map +1 -0
  138. package/dist/seal.d.ts +15 -0
  139. package/dist/seal.d.ts.map +1 -0
  140. package/dist/seal.js +0 -0
  141. package/dist/seal.js.map +1 -0
  142. package/dist/session.d.ts +66 -0
  143. package/dist/session.d.ts.map +1 -0
  144. package/dist/session.js +61 -0
  145. package/dist/session.js.map +1 -0
  146. package/dist/signing-in-mark.d.ts +14 -0
  147. package/dist/signing-in-mark.d.ts.map +1 -0
  148. package/dist/signing-in-mark.js +24 -0
  149. package/dist/signing-in-mark.js.map +1 -0
  150. package/dist/signing-in.d.ts +22 -0
  151. package/dist/signing-in.d.ts.map +1 -0
  152. package/dist/signing-in.js +203 -0
  153. package/dist/signing-in.js.map +1 -0
  154. package/dist/tags.d.ts +96 -0
  155. package/dist/tags.d.ts.map +1 -0
  156. package/dist/tags.js +88 -0
  157. package/dist/tags.js.map +1 -0
  158. package/dist/tenant-subscription.d.ts +47 -0
  159. package/dist/tenant-subscription.d.ts.map +1 -0
  160. package/dist/tenant-subscription.js +7 -0
  161. package/dist/tenant-subscription.js.map +1 -0
  162. package/dist/testing/index.d.ts +125 -0
  163. package/dist/testing/index.d.ts.map +1 -0
  164. package/dist/testing/index.js +320 -0
  165. package/dist/testing/index.js.map +1 -0
  166. package/dist/theme.d.ts +237 -0
  167. package/dist/theme.d.ts.map +1 -0
  168. package/dist/theme.js +504 -0
  169. package/dist/theme.js.map +1 -0
  170. package/dist/tickets.d.ts +152 -0
  171. package/dist/tickets.d.ts.map +1 -0
  172. package/dist/tickets.js +65 -0
  173. package/dist/tickets.js.map +1 -0
  174. package/dist/tiers.d.ts +168 -0
  175. package/dist/tiers.d.ts.map +1 -0
  176. package/dist/tiers.js +341 -0
  177. package/dist/tiers.js.map +1 -0
  178. package/dist/types.d.ts +885 -0
  179. package/dist/types.d.ts.map +1 -0
  180. package/dist/types.js +12 -0
  181. package/dist/types.js.map +1 -0
  182. package/dist/urlid.d.ts +50 -0
  183. package/dist/urlid.d.ts.map +1 -0
  184. package/dist/urlid.js +78 -0
  185. package/dist/urlid.js.map +1 -0
  186. package/dist/version.d.ts +15 -0
  187. package/dist/version.d.ts.map +1 -0
  188. package/dist/version.js +15 -0
  189. package/dist/version.js.map +1 -0
  190. package/make/asturiu.mk +43 -0
  191. package/package.json +63 -4
  192. package/src/branding.ts +221 -0
  193. package/src/changesets.ts +61 -0
  194. package/src/cli/bin.ts +12 -0
  195. package/src/cli/changesets.ts +233 -0
  196. package/src/cli/cli.ts +425 -0
  197. package/src/cli/context.ts +299 -0
  198. package/src/cli/engine.ts +112 -0
  199. package/src/cli/feedback.ts +406 -0
  200. package/src/cli/files.ts +371 -0
  201. package/src/cli/index.ts +7 -0
  202. package/src/cli/overview.ts +343 -0
  203. package/src/cli/parts.ts +371 -0
  204. package/src/cli/sources.ts +111 -0
  205. package/src/cli/terminal.ts +384 -0
  206. package/src/cli/ui-page.ts +215 -0
  207. package/src/cli/ui.ts +266 -0
  208. package/src/client.ts +202 -0
  209. package/src/contacts.ts +61 -0
  210. package/src/definition-set.ts +965 -0
  211. package/src/definitions.ts +156 -0
  212. package/src/enrolment.ts +10 -0
  213. package/src/fill.ts +83 -0
  214. package/src/index.ts +38 -0
  215. package/src/notifications.ts +55 -0
  216. package/src/oidc.ts +199 -0
  217. package/src/overlay.ts +137 -0
  218. package/src/passes.ts +168 -0
  219. package/src/portal-options.ts +125 -0
  220. package/src/reads.ts +71 -0
  221. package/src/recovery-words.ts +137 -0
  222. package/src/recovery.ts +269 -0
  223. package/src/reveal.ts +72 -0
  224. package/src/seal.ts +0 -0
  225. package/src/session.ts +93 -0
  226. package/src/signing-in-mark.ts +23 -0
  227. package/src/signing-in.ts +213 -0
  228. package/src/tags.ts +146 -0
  229. package/src/tenant-subscription.ts +44 -0
  230. package/src/testing/index.ts +337 -0
  231. package/src/theme.ts +628 -0
  232. package/src/tickets.ts +195 -0
  233. package/src/tiers.ts +397 -0
  234. package/src/types.ts +847 -0
  235. package/src/urlid.ts +77 -0
  236. package/src/version.ts +15 -0
  237. package/templates/asturiu/branding.json +4 -0
  238. package/templates/asturiu/definitions.json +23 -0
  239. 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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"}