@multiplatform.one/keycloak-theme 7.83.0 → 7.83.2

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 (43) hide show
  1. package/dist/cjs/SpringboardStyles.cjs +61 -0
  2. package/dist/cjs/SpringboardStyles.native.js +67 -0
  3. package/dist/cjs/SpringboardStyles.native.js.map +1 -0
  4. package/dist/cjs/css.cjs +555 -0
  5. package/dist/cjs/css.native.js +559 -0
  6. package/dist/cjs/css.native.js.map +1 -0
  7. package/dist/cjs/glyph.cjs +71 -0
  8. package/dist/cjs/glyph.native.js +75 -0
  9. package/dist/cjs/glyph.native.js.map +1 -0
  10. package/dist/cjs/index.cjs +53 -0
  11. package/dist/cjs/index.native.js +56 -0
  12. package/dist/cjs/index.native.js.map +1 -0
  13. package/dist/cjs/themeName.cjs +42 -0
  14. package/dist/cjs/themeName.native.js +45 -0
  15. package/dist/cjs/themeName.native.js.map +1 -0
  16. package/dist/cjs/tokens.cjs +133 -0
  17. package/dist/cjs/tokens.native.js +136 -0
  18. package/dist/cjs/tokens.native.js.map +1 -0
  19. package/dist/esm/SpringboardStyles.mjs +35 -0
  20. package/dist/esm/SpringboardStyles.mjs.map +1 -0
  21. package/dist/esm/SpringboardStyles.native.js +38 -0
  22. package/dist/esm/SpringboardStyles.native.js.map +1 -0
  23. package/dist/esm/css.mjs +530 -0
  24. package/dist/esm/css.mjs.map +1 -0
  25. package/dist/esm/css.native.js +531 -0
  26. package/dist/esm/css.native.js.map +1 -0
  27. package/dist/esm/glyph.mjs +42 -0
  28. package/dist/esm/glyph.mjs.map +1 -0
  29. package/dist/esm/glyph.native.js +43 -0
  30. package/dist/esm/glyph.native.js.map +1 -0
  31. package/dist/esm/index.mjs +7 -0
  32. package/dist/esm/index.mjs.map +1 -0
  33. package/dist/esm/index.native.js +7 -0
  34. package/dist/esm/index.native.js.map +1 -0
  35. package/dist/esm/themeName.mjs +15 -0
  36. package/dist/esm/themeName.mjs.map +1 -0
  37. package/dist/esm/themeName.native.js +15 -0
  38. package/dist/esm/themeName.native.js.map +1 -0
  39. package/dist/esm/tokens.mjs +98 -0
  40. package/dist/esm/tokens.mjs.map +1 -0
  41. package/dist/esm/tokens.native.js +98 -0
  42. package/dist/esm/tokens.native.js.map +1 -0
  43. package/package.json +12 -3
@@ -0,0 +1,531 @@
1
+ import { accent, caption, field, fontFamily as defaultFontFamily, icon, ink, plate, status, trigger, wallpaperColors, wallpaperLayers } from "./tokens.native.js";
2
+ function cssString(value) {
3
+ return JSON.stringify(value);
4
+ }
5
+ function customProperties() {
6
+ return [
7
+ // Surfaces.
8
+ `--kc-page-bg: ${wallpaperColors.base};`, `--kc-card-bg: ${plate.fill};`, `--kc-input-bg: ${field.background};`,
9
+ // Ink.
10
+ `--kc-text: ${ink.primary};`, `--kc-muted: ${ink.muted};`, `--kc-placeholder: ${ink.faint};`,
11
+ // Hairlines.
12
+ `--kc-border: ${field.border};`, `--kc-border-hover: ${field.borderHover};`, `--kc-border-focus: ${field.borderFocus};`, `--kc-border-strong: ${field.borderHover};`, `--kc-divider: ${field.divider};`,
13
+ // Interaction.
14
+ `--kc-hover-bg: ${field.ghost};`, `--kc-press-bg: ${field.ghostHover};`, `--kc-ring: ${accent.sky};`, `--kc-link: ${accent.sky};`,
15
+ // Call to action.
16
+ `--kc-cta-bg: ${accent.indigo};`, `--kc-cta-fg: ${ink.primary};`, `--kc-cta-hover: ${accent.indigoHover};`, `--kc-cta-press: ${accent.indigoPress};`,
17
+ // Disabled — washed chrome, lowest legible ink.
18
+ `--kc-disabled-bg: ${field.ghost};`, `--kc-disabled-border: ${field.border};`, `--kc-disabled-text: ${ink.faint};`,
19
+ // Feedback.
20
+ `--kc-error-text: ${status.error};`, `--kc-error-border: ${status.error};`, `--kc-warning-border: ${status.warning};`, `--kc-success-border: ${status.success};`, `--kc-info-border: ${status.info};`, `--kc-menu-shadow: rgba(0,0,0,0.45);`,
21
+ // Springboard's own, consumed only by this sheet.
22
+ `--sb-plate-fill: ${plate.fill};`, `--sb-plate-highlight: ${plate.highlight};`, `--sb-plate-radius: ${plate.radius}px;`, `--sb-icon-size: ${icon.size}px;`, `--sb-icon-radius: ${icon.radius}px;`, `--sb-caption-size: ${caption.fontSize}px;`, `--sb-caption-line: ${caption.lineHeight}px;`].join("\n ");
23
+ }
24
+ var onWallpaperShadow = `0 ${caption.shadowOffsetY}px ${caption.shadowBlur}px ${wallpaperColors.textShadow}`;
25
+ var plateShadow = `0 ${trigger.shadowOffsetY}px ${trigger.shadowBlur}px rgba(0,0,0,0.45)`;
26
+ var iconShadow = `0 ${icon.shadowOffsetY}px ${icon.shadowBlur}px ${icon.shadowColor}`;
27
+ function markRules(scope, mark) {
28
+ var monogramSize = Math.round(icon.size * 0.34);
29
+ var monogramLine = Math.round(icon.size * 0.4);
30
+ return `
31
+ /* \u2500\u2500 the estate's glyph: the springboard's own squircle \u2500\u2500\u2500\u2500\u2500\u2500 */
32
+ ${scope} .login-pf-page #kc-page-title,
33
+ ${scope} .login-pf-page #kc-username {
34
+ display: flex;
35
+ flex-direction: column;
36
+ align-items: center;
37
+ gap: ${caption.marginTop}px;
38
+ }
39
+ ${scope} .login-pf-page #kc-page-title::before,
40
+ ${scope} .login-pf-page #kc-username::before {
41
+ content: ${cssString(mark.monogram)};
42
+ box-sizing: border-box;
43
+ width: var(--sb-icon-size);
44
+ height: var(--sb-icon-size);
45
+ border-radius: var(--sb-icon-radius);
46
+ background: ${mark.background};
47
+ color: ${mark.foreground};
48
+ box-shadow: ${iconShadow};
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ font-size: ${monogramSize}px;
53
+ line-height: ${monogramLine}px;
54
+ font-weight: 800;
55
+ letter-spacing: 0.5px;
56
+ user-select: none;
57
+ }`;
58
+ }
59
+ function buildSpringboardCss() {
60
+ var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
61
+ var {
62
+ mark,
63
+ fontFamily = defaultFontFamily,
64
+ focusRingWidthPx = 2,
65
+ focusRingOffsetPx = 2,
66
+ minPressTargetPx = 44,
67
+ cardMaxWidthPx = 420
68
+ } = options;
69
+ var scope = "html.login-pf";
70
+ var vars = customProperties();
71
+ var cardPadY = plate.paddingVertical + 12;
72
+ var cardPadX = plate.paddingHorizontal + 8;
73
+ return `
74
+ /* \u2500\u2500 springboard tokens, both colour schemes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
75
+ /* One dark surface in light and dark alike \u2014 see ./tokens.ts. */
76
+ ${scope},
77
+ ${scope}.t_dark {
78
+ ${vars}
79
+ }
80
+
81
+ /* \u2500\u2500 the wallpaper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
82
+ ${scope} {
83
+ background-color: ${wallpaperColors.base};
84
+ background-image: ${wallpaperLayers};
85
+ /* Fixed so the glows stay anchored to the viewport instead of tiling
86
+ down a page that grew a scrollbar (a long consent screen, a locale
87
+ list). The springboard's wallpaper is a layer behind everything, not
88
+ a background that scrolls with content. */
89
+ background-attachment: fixed;
90
+ background-repeat: no-repeat;
91
+ background-size: cover;
92
+ min-height: 100%;
93
+ }
94
+ ${scope} body {
95
+ background: transparent none;
96
+ color: ${ink.primary};
97
+ font-family: ${fontFamily};
98
+ -webkit-font-smoothing: antialiased;
99
+ }
100
+ ${scope} .login-pf-page {
101
+ background: transparent;
102
+ padding-bottom: 40px;
103
+ }
104
+
105
+ /* \u2500\u2500 the realm title, sitting straight on the wallpaper \u2500\u2500\u2500\u2500\u2500\u2500 */
106
+ /* Caption anatomy from the launcher: white with a halo, because this
107
+ text has no plate under it and may land on either glow. */
108
+ ${scope} .login-pf-page #kc-header-wrapper {
109
+ color: ${wallpaperColors.text};
110
+ text-shadow: ${onWallpaperShadow};
111
+ font-weight: 700;
112
+ font-size: 22px;
113
+ line-height: 1.3;
114
+ letter-spacing: normal;
115
+ text-transform: none;
116
+ padding: 44px 16px 18px;
117
+ }
118
+
119
+ /* \u2500\u2500 the card: the dock's glass shelf, grown to hold a form \u2500\u2500 */
120
+ ${scope} .login-pf-page .card-pf {
121
+ max-width: ${cardMaxWidthPx}px;
122
+ margin: 0 auto;
123
+ background: var(--sb-plate-fill);
124
+ border: 1px solid var(--sb-plate-highlight);
125
+ border-radius: var(--sb-plate-radius);
126
+ /* The shelf's top-edge inner highlight ('inset 0 1px 0 #fff4' in the
127
+ launcher payload) plus the trigger's elevation under the slab. */
128
+ box-shadow:
129
+ inset 0 1px 0 ${plate.highlight},
130
+ ${plateShadow};
131
+ /* "blur-ish" is the launcher's own word for the dock material. Where
132
+ backdrop-filter is unsupported the fill alone still reads as a slab,
133
+ so this degrades rather than breaks. */
134
+ backdrop-filter: blur(22px) saturate(140%);
135
+ -webkit-backdrop-filter: blur(22px) saturate(140%);
136
+ padding: ${cardPadY}px ${cardPadX}px;
137
+ overflow: hidden;
138
+ }
139
+ ${scope} .login-pf-page .login-pf-header h1,
140
+ ${scope} .login-pf-page #kc-page-title {
141
+ color: ${ink.primary};
142
+ font-weight: 700;
143
+ font-size: 20px;
144
+ line-height: 1.3;
145
+ margin: 0 0 ${plate.gap}px;
146
+ }
147
+ ${mark ? markRules(scope, mark) : ""}
148
+
149
+ /* \u2500\u2500 labels and prose \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
150
+ ${scope} .login-pf-page label,
151
+ ${scope} .login-pf-page .pf-c-form__label,
152
+ ${scope} .login-pf-page .pf-c-form__label-text {
153
+ color: ${ink.secondary};
154
+ font-weight: 500;
155
+ font-size: 14px;
156
+ }
157
+ ${scope} .login-pf-page .instruction,
158
+ ${scope} .login-pf-page .subtitle,
159
+ ${scope} .login-pf-page .pf-c-form__helper-text,
160
+ ${scope} .login-pf-page #kc-info,
161
+ ${scope} .login-pf-page .login-pf-signup {
162
+ color: ${ink.muted};
163
+ }
164
+ ${scope} .login-pf-page #kc-attempted-username {
165
+ color: ${ink.primary};
166
+ font-weight: 600;
167
+ }
168
+
169
+ /* \u2500\u2500 fields: inset into the slab, not laid on top of it \u2500\u2500\u2500\u2500\u2500\u2500 */
170
+ ${scope} .login-pf-page .pf-c-form-control,
171
+ ${scope} .login-pf-page input[type="text"],
172
+ ${scope} .login-pf-page input[type="password"],
173
+ ${scope} .login-pf-page input[type="email"],
174
+ ${scope} .login-pf-page input[type="tel"],
175
+ ${scope} .login-pf-page input[type="number"],
176
+ ${scope} .login-pf-page select,
177
+ ${scope} .login-pf-page textarea {
178
+ min-height: ${minPressTargetPx}px;
179
+ background-color: ${field.background};
180
+ color: ${ink.primary};
181
+ border: 1px solid ${field.border};
182
+ box-shadow: none;
183
+ }
184
+ ${scope} .login-pf-page .pf-c-form-control:hover,
185
+ ${scope} .login-pf-page select:hover,
186
+ ${scope} .login-pf-page textarea:hover {
187
+ border-color: ${field.borderHover};
188
+ }
189
+ ${scope} .login-pf-page .pf-c-form-control:focus,
190
+ ${scope} .login-pf-page select:focus,
191
+ ${scope} .login-pf-page textarea:focus {
192
+ border-color: ${field.borderFocus};
193
+ background-color: ${field.background};
194
+ }
195
+ ${scope} .login-pf-page .pf-c-form-control::placeholder,
196
+ ${scope} .login-pf-page input::placeholder {
197
+ color: ${ink.faint};
198
+ }
199
+ ${scope} .login-pf-page .pf-c-form-control[aria-invalid="true"] {
200
+ border-color: ${status.error};
201
+ }
202
+ /* \u2605 THE INPUT GROUP IS OPAQUE WHITE IN PATTERNFLY, and that one fact
203
+ defeats the whole field treatment above. '.pf-c-input-group' wraps the
204
+ password field and its visibility toggle; both of those are painted in
205
+ TRANSLUCENT springboard colours, so over a white parent the field
206
+ composites to mid-grey and the toggle to near-white \u2014 which is exactly
207
+ how it rendered before this rule existed. Clearing the parent is what
208
+ makes the two translucent children land on the slab instead. */
209
+ /* LC-149 FIELD-TRAILING-ACTION: the reveal sits inside the password field
210
+ as a chromeless trailing eye, not a bordered button beside it. The field
211
+ keeps the end cap clear, and PatternFly's in-field invalid glyph steps
212
+ aside for it. */
213
+ ${scope} .login-pf-page .pf-c-input-group {
214
+ background: transparent;
215
+ position: relative;
216
+ display: flex;
217
+ align-items: stretch;
218
+ }
219
+ ${scope} .login-pf-page .pf-c-input-group .pf-c-form-control,
220
+ ${scope} .login-pf-page .pf-c-input-group .pf-c-form-control[aria-invalid="true"] {
221
+ flex: 1 1 auto;
222
+ padding-inline-end: ${minPressTargetPx}px;
223
+ background-image: none;
224
+ }
225
+ ${scope} .login-pf-page .pf-c-input-group .pf-c-button.pf-m-control,
226
+ ${scope} .login-pf-page .pf-c-input-group .pf-c-button.pf-m-control:hover,
227
+ ${scope} .login-pf-page .pf-c-input-group .pf-c-button.pf-m-control:active {
228
+ position: absolute;
229
+ inset-block: 0;
230
+ inset-inline-end: 0;
231
+ z-index: 1;
232
+ width: ${minPressTargetPx}px;
233
+ min-width: ${minPressTargetPx}px;
234
+ min-height: 0;
235
+ padding: 0;
236
+ background-color: transparent;
237
+ border-color: transparent;
238
+ box-shadow: none;
239
+ color: ${ink.secondary};
240
+ }
241
+ ${scope} .login-pf-page .pf-c-input-group .pf-c-button.pf-m-control:hover {
242
+ color: ${ink.primary};
243
+ }
244
+
245
+ /* Chrome paints autofilled inputs a fixed pale yellow that no colour
246
+ property overrides \u2014 the inset shadow is the documented way to repaint
247
+ the field, and without it a remembered username lands as a white bar in
248
+ the middle of the slab. */
249
+ ${scope} .login-pf-page input:-webkit-autofill,
250
+ ${scope} .login-pf-page input:-webkit-autofill:hover,
251
+ ${scope} .login-pf-page input:-webkit-autofill:focus {
252
+ -webkit-box-shadow: 0 0 0 1000px ${field.background} inset;
253
+ -webkit-text-fill-color: ${ink.primary};
254
+ caret-color: ${ink.primary};
255
+ }
256
+
257
+ /* \u2500\u2500 buttons \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
258
+ ${scope} .login-pf-page .pf-c-button {
259
+ min-height: ${minPressTargetPx}px;
260
+ font-weight: 600;
261
+ }
262
+ ${scope} .login-pf-page .pf-c-button.pf-m-primary,
263
+ ${scope} .login-pf-page input.pf-m-primary[type="submit"],
264
+ ${scope} .login-pf-page input.pf-m-primary[type="button"] {
265
+ background-color: ${accent.indigo};
266
+ border-color: ${accent.indigo};
267
+ color: ${ink.primary};
268
+ box-shadow: ${iconShadow};
269
+ }
270
+ ${scope} .login-pf-page .pf-c-button.pf-m-primary:hover,
271
+ ${scope} .login-pf-page input.pf-m-primary[type="submit"]:hover {
272
+ background-color: ${accent.indigoHover};
273
+ border-color: ${accent.indigoHover};
274
+ }
275
+ ${scope} .login-pf-page .pf-c-button.pf-m-primary:active,
276
+ ${scope} .login-pf-page input.pf-m-primary[type="submit"]:active {
277
+ background-color: ${accent.indigoPress};
278
+ border-color: ${accent.indigoPress};
279
+ }
280
+ ${scope} .login-pf-page .pf-c-button.pf-m-primary:disabled,
281
+ ${scope} .login-pf-page input.pf-m-primary[type="submit"]:disabled {
282
+ background-color: ${field.ghost};
283
+ border-color: ${field.border};
284
+ color: ${ink.faint};
285
+ box-shadow: none;
286
+ }
287
+ ${scope} .login-pf-page .pf-c-button.pf-m-control,
288
+ ${scope} .login-pf-page .pf-c-button.pf-m-secondary,
289
+ ${scope} .login-pf-page .pf-c-button.btn-default:not(.pf-m-primary) {
290
+ background-color: ${field.ghost};
291
+ border-color: ${field.border};
292
+ color: ${ink.primary};
293
+ }
294
+ ${scope} .login-pf-page .pf-c-button.pf-m-control:hover,
295
+ ${scope} .login-pf-page .pf-c-button.pf-m-secondary:hover,
296
+ ${scope} .login-pf-page .pf-c-button.btn-default:not(.pf-m-primary):hover {
297
+ background-color: ${field.ghostHover};
298
+ border-color: ${field.borderHover};
299
+ color: ${ink.primary};
300
+ }
301
+ /* PatternFly draws control-button borders on an ::after overlay and
302
+ accents its bottom edge on interaction; on the slab that reads as a
303
+ stray underline beneath the password-visibility toggle. */
304
+ ${scope} .login-pf-page .pf-c-button::after,
305
+ ${scope} .login-pf-page .pf-c-button:hover::after,
306
+ ${scope} .login-pf-page .pf-c-button:focus::after,
307
+ ${scope} .login-pf-page .pf-c-button:active::after {
308
+ content: none;
309
+ }
310
+
311
+ /* \u2500\u2500 the remember-me checkbox \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
312
+ /* \u2605 THE RESET IS PART OF THE SKIN, not borrowed from the house sheet.
313
+ A native checkbox is a 13px white box drawn by the platform: no colour
314
+ property reaches it, so on the slab it reads as a bright chip with no
315
+ relationship to anything around it. 'appearance: none' is what makes it
316
+ paintable at all. The visual square stays 22px inside a transparent
317
+ border that pads the hit box out to the press-target floor, so the
318
+ control is small and the target is not (DG-A11Y-01).
319
+
320
+ The house sheet bakes its tick glyph as a data-URI at build time from
321
+ the ramp's CTA foreground, so the springboard's tick is restated here
322
+ rather than inherited through a custom property. */
323
+ ${scope} .login-pf-page input[type="checkbox"] {
324
+ appearance: none;
325
+ -webkit-appearance: none;
326
+ position: static;
327
+ box-sizing: content-box;
328
+ width: 22px;
329
+ height: 22px;
330
+ border: ${Math.round((minPressTargetPx - 22) / 2)}px solid transparent;
331
+ border-radius: ${Math.round((minPressTargetPx - 22) / 2) + 8}px;
332
+ background-clip: padding-box;
333
+ background-repeat: no-repeat;
334
+ background-position: center;
335
+ background-size: 15px 15px;
336
+ margin: 0 4px 0 0;
337
+ flex: 0 0 auto;
338
+ cursor: pointer;
339
+ background-color: ${field.background};
340
+ box-shadow: inset 0 0 0 1.5px ${field.borderHover};
341
+ }
342
+ ${scope} .login-pf-page .checkbox label,
343
+ ${scope} .login-pf-page .pf-c-check {
344
+ display: inline-flex;
345
+ align-items: center;
346
+ min-height: ${minPressTargetPx}px;
347
+ padding-left: 0;
348
+ margin: 0;
349
+ cursor: pointer;
350
+ }
351
+ ${scope} .login-pf-page input[type="checkbox"]:checked,
352
+ ${scope}.t_dark .login-pf-page input[type="checkbox"]:checked {
353
+ background-color: ${accent.indigo};
354
+ box-shadow: inset 0 0 0 1.5px ${accent.indigo};
355
+ background-image: url("data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="${ink.primary}" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>`)}");
356
+ }
357
+
358
+ /* \u2500\u2500 links \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
359
+ ${scope} .login-pf-page a {
360
+ color: ${accent.sky};
361
+ }
362
+ ${scope} .login-pf-page a:hover {
363
+ color: ${accent.sky};
364
+ }
365
+
366
+ /* \u2500\u2500 alerts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
367
+ ${scope} .login-pf-page .pf-c-alert.pf-m-inline {
368
+ background: ${field.background};
369
+ border: 1px solid ${field.border};
370
+ border-left-width: 3px;
371
+ border-left-color: ${status.info};
372
+ }
373
+ ${scope} .login-pf-page .pf-c-alert.pf-m-inline.pf-m-danger {
374
+ border-left-color: ${status.error};
375
+ }
376
+ ${scope} .login-pf-page .pf-c-alert.pf-m-inline.pf-m-warning {
377
+ border-left-color: ${status.warning};
378
+ }
379
+ ${scope} .login-pf-page .pf-c-alert.pf-m-inline.pf-m-success {
380
+ border-left-color: ${status.success};
381
+ }
382
+ ${scope} .login-pf-page .pf-c-alert__title {
383
+ color: ${ink.primary};
384
+ }
385
+ ${scope} .login-pf-page .pf-c-alert__icon {
386
+ color: ${ink.muted};
387
+ }
388
+ ${scope} .login-pf-page span#input-error,
389
+ ${scope} .login-pf-page [id^="input-error"],
390
+ ${scope} .login-pf-page .pf-m-error,
391
+ ${scope} .login-pf-page .required {
392
+ color: ${status.error};
393
+ }
394
+
395
+ /* \u2500\u2500 identity providers: the SSO buttons \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
396
+ /* \u2605 CHROME ONLY. Every provider row is an <a href={p.loginUrl}> that
397
+ keycloakify renders from social.providers; nothing here changes what
398
+ it points at, what it is called, or whether it appears. */
399
+ ${scope} .login-pf-page #kc-social-providers h2 {
400
+ color: ${ink.muted};
401
+ font-size: 13px;
402
+ font-weight: 500;
403
+ }
404
+ ${scope} .login-pf-page hr,
405
+ ${scope} .login-pf-page #kc-social-providers hr {
406
+ border-top: 1px solid ${field.divider};
407
+ opacity: 1;
408
+ }
409
+ ${scope} .login-pf-page .kc-social-item,
410
+ ${scope} .login-pf-page .kc-social-links a,
411
+ ${scope} .login-pf-page #kc-social-providers li a {
412
+ min-height: ${minPressTargetPx}px;
413
+ background: ${field.ghost};
414
+ border: 1px solid ${field.border};
415
+ border-radius: var(--sb-icon-radius);
416
+ color: ${ink.primary};
417
+ text-decoration: none;
418
+ }
419
+ ${scope} .login-pf-page .kc-social-item:hover,
420
+ ${scope} .login-pf-page .kc-social-links a:hover,
421
+ ${scope} .login-pf-page #kc-social-providers li a:hover {
422
+ background: ${field.ghostHover};
423
+ border-color: ${field.borderHover};
424
+ color: ${ink.primary};
425
+ }
426
+ ${scope} .login-pf-page .kc-social-provider-name,
427
+ ${scope} .login-pf-page .kc-social-icon-text {
428
+ color: ${ink.primary};
429
+ }
430
+
431
+ /* \u2500\u2500 the OTP credential tiles (login-otp.ftl) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
432
+ ${scope} .login-pf-page .pf-c-tile {
433
+ background: ${field.background};
434
+ border: 1px solid ${field.border};
435
+ border-radius: var(--sb-icon-radius);
436
+ color: ${ink.primary};
437
+ }
438
+ ${scope} .login-pf-page .pf-c-tile__input:checked + .pf-c-tile,
439
+ ${scope} .login-pf-page .pf-c-tile__input:checked + label {
440
+ border-color: ${accent.indigo};
441
+ background: ${field.ghostHover};
442
+ }
443
+ ${scope} .login-pf-page .pf-c-tile__title,
444
+ ${scope} .login-pf-page .pf-c-tile__icon {
445
+ color: ${ink.primary};
446
+ }
447
+
448
+ /* \u2500\u2500 the registration / back-to-app footer band \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
449
+ /* The stock sheet bleeds #kc-info to the card edge as a #f0f0f0 band.
450
+ On the slab it becomes the dock's own darker step. */
451
+ ${scope} .login-pf-page #kc-info {
452
+ margin: ${plate.gap}px -${cardPadX}px -${cardPadY}px;
453
+ padding: 0;
454
+ color: ${ink.muted};
455
+ }
456
+ ${scope} .login-pf-page #kc-info-wrapper {
457
+ background: rgba(8, 11, 20, 0.42);
458
+ border-top: 1px solid ${field.divider};
459
+ border-radius: 0 0 ${plate.radius - 1}px ${plate.radius - 1}px;
460
+ padding: 14px ${cardPadX}px;
461
+ color: ${ink.muted};
462
+ text-align: center;
463
+ }
464
+ ${scope} .login-pf-page #kc-info-wrapper a {
465
+ color: ${accent.sky};
466
+ }
467
+
468
+ /* \u2500\u2500 the locale menu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
469
+ ${scope} .login-pf-page #kc-current-locale-link {
470
+ color: ${ink.muted};
471
+ }
472
+ ${scope} .login-pf-page #kc-current-locale-link:hover {
473
+ background: ${field.ghost};
474
+ color: ${ink.primary};
475
+ }
476
+ ${scope} .login-pf-page .pf-c-dropdown__menu {
477
+ background: ${wallpaperColors.base};
478
+ border: 1px solid ${plate.highlight};
479
+ box-shadow: ${plateShadow};
480
+ }
481
+ ${scope} .login-pf-page .pf-c-dropdown__menu-item {
482
+ color: ${ink.primary};
483
+ }
484
+ ${scope} .login-pf-page .pf-c-dropdown__menu-item:hover {
485
+ background: ${field.ghost};
486
+ color: ${ink.primary};
487
+ }
488
+
489
+ /* \u2500\u2500 focus ring (DG-A11Y-01: non-removable) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
490
+ /* !important outranks both PatternFly's focus styles and the house
491
+ ThemeProvider's global outline reset. The keyboard ring is the one
492
+ affordance a skin must never take away. */
493
+ ${scope} a:focus-visible,
494
+ ${scope} button:focus-visible,
495
+ ${scope} input:focus-visible,
496
+ ${scope} select:focus-visible,
497
+ ${scope} textarea:focus-visible,
498
+ ${scope} [tabindex]:focus-visible {
499
+ outline: ${focusRingWidthPx}px solid ${accent.sky} !important;
500
+ outline-offset: ${focusRingOffsetPx}px !important;
501
+ box-shadow: none !important;
502
+ }
503
+ /* LC-133 FOCUS-IS-BORDER (FZ-7717): a text field is the exception. It
504
+ focuses with its own border in the accent, at the width it already has,
505
+ so it changes colour and never size. */
506
+ ${scope} .login-pf-page .pf-c-form-control:focus,
507
+ ${scope} .login-pf-page .pf-c-form-control:focus-visible {
508
+ border-color: ${field.borderFocus};
509
+ outline: none !important;
510
+ }
511
+
512
+ /* \u2500\u2500 small screens keep the slab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
513
+ @media (max-width: 767px) {
514
+ ${scope} .login-pf-page .card-pf {
515
+ margin: 0 12px;
516
+ background: var(--sb-plate-fill);
517
+ border: 1px solid var(--sb-plate-highlight);
518
+ border-radius: var(--sb-plate-radius);
519
+ box-shadow:
520
+ inset 0 1px 0 ${plate.highlight},
521
+ ${plateShadow};
522
+ }
523
+ ${scope} .login-pf-page #kc-header-wrapper {
524
+ padding: 28px 16px 14px;
525
+ font-size: 19px;
526
+ }
527
+ }
528
+ `;
529
+ }
530
+ export { buildSpringboardCss };
531
+ //# sourceMappingURL=css.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["accent","caption","field","fontFamily","defaultFontFamily","icon","ink","plate","status","trigger","wallpaperColors","wallpaperLayers","cssString","value","JSON","stringify","customProperties","base","fill","background","primary","muted","faint","border","borderHover","borderFocus","divider","ghost","ghostHover","sky","indigo","indigoHover","indigoPress","error","warning","success","info","highlight","radius","size","fontSize","lineHeight","join","onWallpaperShadow","shadowOffsetY","shadowBlur","textShadow","plateShadow","iconShadow","shadowColor","markRules","scope","mark","monogramSize","Math","round","monogramLine","marginTop","monogram","foreground","buildSpringboardCss","options","arguments","length","focusRingWidthPx","focusRingOffsetPx","minPressTargetPx","cardMaxWidthPx","vars","cardPadY","paddingVertical","cardPadX","paddingHorizontal","text","gap","secondary","encodeURIComponent"],"sources":["../../src/css.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,42 @@
1
+ function stableHash(seed) {
2
+ let hash = 2166136261;
3
+ for (let i = 0; i < seed.length; i++) {
4
+ hash ^= seed.charCodeAt(i);
5
+ hash = Math.imul(hash, 16777619) >>> 0;
6
+ }
7
+ return hash >>> 0;
8
+ }
9
+ function glyphHue(seed) {
10
+ return stableHash(seed) % 360;
11
+ }
12
+ function glyphMonogram(name) {
13
+ const trimmed = name.trim();
14
+ if (!trimmed) return "?";
15
+ const words = trimmed.split(/[\s\-_.]+/).filter(Boolean);
16
+ if (words.length >= 2) {
17
+ return `${words[0][0] ?? ""}${words[1][0] ?? ""}`.toUpperCase();
18
+ }
19
+ return trimmed.slice(0, 2).toUpperCase();
20
+ }
21
+ function glyphColors(seed) {
22
+ const hue = glyphHue(seed);
23
+ return {
24
+ background: `hsl(${hue}, 62%, 42%)`,
25
+ foreground: "hsl(0, 0%, 98%)"
26
+ };
27
+ }
28
+ function glyphMark(params) {
29
+ const {
30
+ name,
31
+ displayName
32
+ } = params;
33
+ const seed = name.trim() || displayName?.trim() || "";
34
+ const label = displayName?.trim() || name;
35
+ return {
36
+ ...glyphColors(seed),
37
+ monogram: glyphMonogram(label),
38
+ hue: glyphHue(seed)
39
+ };
40
+ }
41
+ export { glyphColors, glyphHue, glyphMark, glyphMonogram, stableHash };
42
+ //# sourceMappingURL=glyph.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["stableHash","seed","hash","i","length","charCodeAt","Math","imul","glyphHue","glyphMonogram","name","trimmed","trim","words","split","filter","Boolean","toUpperCase","slice","glyphColors","hue","background","foreground","glyphMark","params","displayName","label","monogram"],"sources":["../../src/glyph.ts"],"sourcesContent":[null],"mappings":"AA6BO,SAASA,WAAWC,IAAA,EAAsB;EAC/C,IAAIC,IAAA,GAAO;EACX,SAASC,CAAA,GAAI,GAAGA,CAAA,GAAIF,IAAA,CAAKG,MAAA,EAAQD,CAAA,IAAK;IACpCD,IAAA,IAAQD,IAAA,CAAKI,UAAA,CAAWF,CAAC;IAEzBD,IAAA,GAAOI,IAAA,CAAKC,IAAA,CAAKL,IAAA,EAAM,QAAU,MAAM;EACzC;EACA,OAAOA,IAAA,KAAS;AAClB;AAGO,SAASM,SAASP,IAAA,EAAsB;EAC7C,OAAOD,UAAA,CAAWC,IAAI,IAAI;AAC5B;AAOO,SAASQ,cAAcC,IAAA,EAAsB;EAClD,MAAMC,OAAA,GAAUD,IAAA,CAAKE,IAAA,CAAK;EAC1B,IAAI,CAACD,OAAA,EAAS,OAAO;EACrB,MAAME,KAAA,GAAQF,OAAA,CAAQG,KAAA,CAAM,WAAW,EAAEC,MAAA,CAAOC,OAAO;EACvD,IAAIH,KAAA,CAAMT,MAAA,IAAU,GAAG;IACrB,OAAO,GAAGS,KAAA,CAAM,CAAC,EAAG,CAAC,KAAK,EAAE,GAAGA,KAAA,CAAM,CAAC,EAAG,CAAC,KAAK,EAAE,GAAGI,WAAA,CAAY;EAClE;EACA,OAAON,OAAA,CAAQO,KAAA,CAAM,GAAG,CAAC,EAAED,WAAA,CAAY;AACzC;AAaO,SAASE,YAAYlB,IAAA,EAA2B;EACrD,MAAMmB,GAAA,GAAMZ,QAAA,CAASP,IAAI;EACzB,OAAO;IACLoB,UAAA,EAAY,OAAOD,GAAG;IACtBE,UAAA,EAAY;EACd;AACF;AAuBO,SAASC,UAAUC,MAAA,EAA2D;EACnF,MAAM;IAAEd,IAAA;IAAMe;EAAY,IAAID,MAAA;EAC9B,MAAMvB,IAAA,GAAOS,IAAA,CAAKE,IAAA,CAAK,KAAKa,WAAA,EAAab,IAAA,CAAK,KAAK;EACnD,MAAMc,KAAA,GAAQD,WAAA,EAAab,IAAA,CAAK,KAAKF,IAAA;EACrC,OAAO;IACL,GAAGS,WAAA,CAAYlB,IAAI;IACnB0B,QAAA,EAAUlB,aAAA,CAAciB,KAAK;IAC7BN,GAAA,EAAKZ,QAAA,CAASP,IAAI;EACpB;AACF","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ function stableHash(seed) {
2
+ var hash = 2166136261;
3
+ for (var i = 0; i < seed.length; i++) {
4
+ hash ^= seed.charCodeAt(i);
5
+ hash = Math.imul(hash, 16777619) >>> 0;
6
+ }
7
+ return hash >>> 0;
8
+ }
9
+ function glyphHue(seed) {
10
+ return stableHash(seed) % 360;
11
+ }
12
+ function glyphMonogram(name) {
13
+ var trimmed = name.trim();
14
+ if (!trimmed) return "?";
15
+ var words = trimmed.split(/[\s\-_.]+/).filter(Boolean);
16
+ if (words.length >= 2) {
17
+ var _words__, _words__1;
18
+ return `${(_words__ = words[0][0]) !== null && _words__ !== void 0 ? _words__ : ""}${(_words__1 = words[1][0]) !== null && _words__1 !== void 0 ? _words__1 : ""}`.toUpperCase();
19
+ }
20
+ return trimmed.slice(0, 2).toUpperCase();
21
+ }
22
+ function glyphColors(seed) {
23
+ var hue = glyphHue(seed);
24
+ return {
25
+ background: `hsl(${hue}, 62%, 42%)`,
26
+ foreground: "hsl(0, 0%, 98%)"
27
+ };
28
+ }
29
+ function glyphMark(params) {
30
+ var {
31
+ name,
32
+ displayName
33
+ } = params;
34
+ var seed = name.trim() || (displayName === null || displayName === void 0 ? void 0 : displayName.trim()) || "";
35
+ var label = (displayName === null || displayName === void 0 ? void 0 : displayName.trim()) || name;
36
+ return {
37
+ ...glyphColors(seed),
38
+ monogram: glyphMonogram(label),
39
+ hue: glyphHue(seed)
40
+ };
41
+ }
42
+ export { glyphColors, glyphHue, glyphMark, glyphMonogram, stableHash };
43
+ //# sourceMappingURL=glyph.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["stableHash","seed","hash","i","length","charCodeAt","Math","imul","glyphHue","glyphMonogram","name","trimmed","trim","words","split","filter","Boolean","_words__","_words__1","toUpperCase","slice","glyphColors","hue","background","foreground","glyphMark","params","displayName","label","monogram"],"sources":["../../src/glyph.ts"],"sourcesContent":[null],"mappings":"AA6BO,SAASA,WAAWC,IAAA,EAAsB;EAC/C,IAAIC,IAAA,GAAO;EACX,SAASC,CAAA,GAAI,GAAGA,CAAA,GAAIF,IAAA,CAAKG,MAAA,EAAQD,CAAA,IAAK;IACpCD,IAAA,IAAQD,IAAA,CAAKI,UAAA,CAAWF,CAAC;IAEzBD,IAAA,GAAOI,IAAA,CAAKC,IAAA,CAAKL,IAAA,EAAM,QAAU,MAAM;EACzC;EACA,OAAOA,IAAA,KAAS;AAClB;AAGO,SAASM,SAASP,IAAA,EAAsB;EAC7C,OAAOD,UAAA,CAAWC,IAAI,IAAI;AAC5B;AAOO,SAASQ,cAAcC,IAAA,EAAsB;EAClD,IAAAC,OAAM,GAAAD,IAAU,CAAAE,IAAK;EACrB,IAAI,CAACD,OAAA,EAAS,OAAO;EACrB,IAAAE,KAAM,GAAAF,OAAQ,CAAAG,KAAQ,YAAM,EAAWC,MAAE,CAAAC,OAAO;EAChD,IAAIH,KAAA,CAAMT,MAAA,IAAU,GAAG;IACrB,IAAAa,QAAU,EAAAC,SAAW;IACvB,WAAAD,QAAA,GAAAJ,KAAA,oBAAAI,QAAA,cAAAA,QAAA,SAAAC,SAAA,GAAAL,KAAA,oBAAAK,SAAA,cAAAA,SAAA,QAAAC,WAAA;EACA;EACF,OAAAR,OAAA,CAAAS,KAAA,OAAAD,WAAA;AAaO;AACL,SAAME,WAAMA,CAAApB,IAAS,EAAI;EACzB,IAAAqB,GAAO,GAAAd,QAAA,CAAAP,IAAA;EAAA,OACL;IACAsB,UAAA,EAAY,OAAAD,GAAA;IACdE,UAAA;EACF;AAuBO;AACL,SAAMC,SAAQA,CAAAC,MAAA;EACd;IAAMhB,IAAA;IAAAiB;EAAiB,IAAKD,MAAA;EAC5B,IAAAzB,IAAM,GAAAS,IAAQ,CAAAE,IAAA,OAAae,WAAU,aAAAA,WAAA,uBAAAA,WAAA,CAAAf,IAAA;EACrC,IAAAgB,KAAO,IAAAD,WAAA,aAAAA,WAAA,uBAAAA,WAAA,CAAAf,IAAA,OAAAF,IAAA;EAAA,OACF;IACH,GAAAW,WAAU,CAAApB,IAAA;IACV4B,QAAK,EAAApB,aAAa,CAAAmB,KAAA;IACpBN,GAAA,EAAAd,QAAA,CAAAP,IAAA;EACF","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import { buildSpringboardCss } from "./css.mjs";
2
+ import { glyphColors, glyphHue, glyphMark, glyphMonogram, stableHash } from "./glyph.mjs";
3
+ import { resolveMark, SpringboardStyles } from "./SpringboardStyles.mjs";
4
+ import { houseThemeName, isSpringboardTheme, springboardThemeName } from "./themeName.mjs";
5
+ import { accent, caption, field, fontFamily, icon, ink, plate, status, trigger, wallpaperColors, wallpaperLayers } from "./tokens.mjs";
6
+ export { SpringboardStyles, accent, buildSpringboardCss, caption, field, fontFamily, glyphColors, glyphHue, glyphMark, glyphMonogram, houseThemeName, icon, ink, isSpringboardTheme, plate, resolveMark, springboardThemeName, stableHash, status, trigger, wallpaperColors, wallpaperLayers };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["buildSpringboardCss","glyphColors","glyphHue","glyphMark","glyphMonogram","stableHash","resolveMark","SpringboardStyles","houseThemeName","isSpringboardTheme","springboardThemeName","accent","caption","field","fontFamily","icon","ink","plate","status","trigger","wallpaperColors","wallpaperLayers"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAiBA,SAASA,mBAAA,QAAuD;AAChE,SACEC,WAAA,EACAC,QAAA,EACAC,SAAA,EACAC,aAAA,EACAC,UAAA,QAGK;AACP,SACEC,WAAA,EACAC,iBAAA,QAGK;AACP,SAASC,cAAA,EAAgBC,kBAAA,EAAoBC,oBAAA,QAA4B;AACzE,SACEC,MAAA,EACAC,OAAA,EACAC,KAAA,EACAC,UAAA,EACAC,IAAA,EACAC,GAAA,EACAC,KAAA,EACAC,MAAA,EACAC,OAAA,EACAC,eAAA,EACAC,eAAA,QACK","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import { buildSpringboardCss } from "./css.native.js";
2
+ import { glyphColors, glyphHue, glyphMark, glyphMonogram, stableHash } from "./glyph.native.js";
3
+ import { resolveMark, SpringboardStyles } from "./SpringboardStyles.native.js";
4
+ import { houseThemeName, isSpringboardTheme, springboardThemeName } from "./themeName.native.js";
5
+ import { accent, caption, field, fontFamily, icon, ink, plate, status, trigger, wallpaperColors, wallpaperLayers } from "./tokens.native.js";
6
+ export { SpringboardStyles, accent, buildSpringboardCss, caption, field, fontFamily, glyphColors, glyphHue, glyphMark, glyphMonogram, houseThemeName, icon, ink, isSpringboardTheme, plate, resolveMark, springboardThemeName, stableHash, status, trigger, wallpaperColors, wallpaperLayers };
7
+ //# sourceMappingURL=index.native.js.map