@visns-studio/visns-components 6.1.2 → 6.1.3

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/package.json CHANGED
@@ -91,7 +91,7 @@
91
91
  "react-dom": "^17.0.0 || ^18.0.0"
92
92
  },
93
93
  "name": "@visns-studio/visns-components",
94
- "version": "6.1.2",
94
+ "version": "6.1.3",
95
95
  "description": "Various packages to assist in the development of our Custom Applications.",
96
96
  "main": "src/index.js",
97
97
  "files": [
@@ -19,6 +19,12 @@ const Login = ({
19
19
  }) => {
20
20
  const location = useLocation();
21
21
  const navigate = useNavigate();
22
+
23
+ // Brand copy comes from the consuming project — this library is shared
24
+ // across every VISNS CRM, so nothing project-specific may be hardcoded
25
+ // here. Absent entries simply don't render (except the sign-in hint,
26
+ // which falls back to a generic line).
27
+ const branding = config.branding || {};
22
28
  const [isLoading, setIsLoading] = useState(false);
23
29
  const [showPassword, setShowPassword] = useState(false);
24
30
 
@@ -189,28 +195,39 @@ const Login = ({
189
195
  }
190
196
  aria-hidden="true"
191
197
  >
192
- <div className={styles.brandInk}>
193
- <p className={styles.eyebrow}>Construction Management</p>
194
- <p className={styles.brandLine}>Prime Builders</p>
195
- <p className={styles.brandSub}>
196
- Job tracking, inspections, site forms and labour
197
- scheduling in one place.
198
- </p>
199
- </div>
198
+ {(branding.eyebrow || branding.name || branding.tagline) && (
199
+ <div className={styles.brandInk}>
200
+ {branding.eyebrow && (
201
+ <p className={styles.eyebrow}>{branding.eyebrow}</p>
202
+ )}
203
+ {branding.name && (
204
+ <p className={styles.brandLine}>{branding.name}</p>
205
+ )}
206
+ {branding.tagline && (
207
+ <p className={styles.brandSub}>{branding.tagline}</p>
208
+ )}
209
+ </div>
210
+ )}
200
211
  </aside>
201
212
 
202
213
  <main className={styles.panel}>
203
214
  <div className={styles.panelInner}>
204
- <img src={logo} alt="Prime Builders" className={styles.logo} />
215
+ <img
216
+ src={logo}
217
+ alt={branding.name || 'Logo'}
218
+ className={styles.logo}
219
+ />
205
220
 
206
221
  <h1 className={styles.title}>Sign in</h1>
207
222
  <p className={styles.subtitle}>
208
- Use your Prime Microsoft account to continue.
223
+ {branding.signInHint ||
224
+ (ssoAvailable
225
+ ? 'Use your Microsoft account to continue.'
226
+ : 'Sign in with your email and password.')}
209
227
  </p>
210
228
 
211
- {/* Primary: this is how Prime staff actually sign in. The
212
- email form stays available underneath for accounts
213
- without a Microsoft sign-in. */}
229
+ {/* SSO leads when configured; the email form stays
230
+ available underneath for accounts without it. */}
214
231
  {renderSsoButton()}
215
232
 
216
233
  {ssoAvailable && !showEmail && (
@@ -320,9 +337,9 @@ const Login = ({
320
337
  </div>
321
338
  </div>
322
339
 
323
- <p className={styles.foot}>
324
- Prime Builders · Perth, Western Australia
325
- </p>
340
+ {branding.footer && (
341
+ <p className={styles.foot}>{branding.footer}</p>
342
+ )}
326
343
  </div>
327
344
  </main>
328
345
  </div>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Prime Builders sign in.
2
+ * Sign in.
3
3
  *
4
4
  * An asymmetric split: the company's own completed work on the left, the form
5
5
  * on the right. Colours are taken from that photograph and the logo rather
@@ -15,7 +15,7 @@
15
15
  /* Local aliases only — every brand value comes from the consuming app's
16
16
  token layer so this library stays reusable. The fallbacks are neutral
17
17
  on purpose: a project that defines nothing gets a plain, working sign
18
- in rather than Prime's colours. */
18
+ in rather than any one project's colours. */
19
19
  --ink: var(--header-color, #10192a);
20
20
  --navy: var(--primary-color, #26364a);
21
21
  --navy-deep: var(--primary-color-darker, #16202e);
@@ -55,8 +55,8 @@
55
55
  //
56
56
  // The foot is a near-solid plate rather than a fade. The brand line has to
57
57
  // hold against whatever the photograph is doing behind it, and this one is
58
- // bright exactly where the type sits, which left "Prime Builders" washing
59
- // into the render. Held high — 0.88 still at 18%, which is where the ink
58
+ // bright exactly where the type sits, which left the brand line washing
59
+ // into the photograph. Held high — 0.88 still at 18%, which is where the ink
60
60
  // block ends — so the whole block reads on one ground, then released
61
61
  // quickly to 0.06 at the top, so the sky above is still a photograph and
62
62
  // not a tint.
@@ -439,7 +439,7 @@
439
439
  }
440
440
  }
441
441
 
442
- /* Primary. This is how Prime staff actually sign in, so it carries the fill
442
+ /* Primary. SSO is the main way in when configured, so it carries the fill
443
443
  and sits above the fold of the form. */
444
444
  .sso {
445
445
  display: flex;
@@ -431,7 +431,7 @@
431
431
  appearance: none;
432
432
 
433
433
  /* Brand red on hover, matching the rest of the bar. A neutral
434
- white lift read as a system default rather than a Prime
434
+ white lift read as a system default rather than a project
435
435
  control, and left this cluster looking unrelated to everything
436
436
  around it. */
437
437
  &:hover,