@bloom-housing/ui-components 10.0.1 → 10.0.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/dist/src/forms/Field.d.ts +1 -0
- package/dist/src/forms/Field.js +13 -1
- package/dist/src/forms/Field.js.map +1 -1
- package/dist/src/headers/HeadingGroup.d.ts +1 -1
- package/dist/src/headers/HeadingGroup.js +1 -1
- package/dist/src/headers/HeadingGroup.js.map +1 -1
- package/dist/src/headers/Hero.d.ts +4 -0
- package/dist/src/headers/Hero.js +16 -11
- package/dist/src/headers/Hero.js.map +1 -1
- package/dist/src/headers/Hero.stories.d.ts +5 -0
- package/dist/src/headers/Hero.stories.js +6 -1
- package/dist/src/headers/Hero.stories.js.map +1 -1
- package/dist/src/headers/PageHeader.stories.js +2 -2
- package/dist/src/headers/PageHeader.stories.js.map +1 -1
- package/package.json +1 -1
- package/src/forms/Field.tsx +13 -1
- package/src/headers/HeadingGroup.tsx +2 -2
- package/src/headers/Hero.scss +77 -39
- package/src/headers/Hero.stories.tsx +15 -2
- package/src/headers/Hero.tsx +55 -30
- package/src/headers/PageHeader.scss +10 -5
- package/src/headers/PageHeader.stories.tsx +14 -7
package/dist/src/forms/Field.js
CHANGED
|
@@ -63,13 +63,25 @@ var Field = function (props) {
|
|
|
63
63
|
labelClasses.push("text-primary");
|
|
64
64
|
if (props.readerOnly)
|
|
65
65
|
labelClasses.push("sr-only");
|
|
66
|
+
if (props.labelClassName)
|
|
67
|
+
labelClasses.push(props.labelClassName);
|
|
66
68
|
if (props.type === "radio") {
|
|
67
69
|
labelClasses.push("font-semibold");
|
|
68
70
|
}
|
|
69
71
|
if (props.error)
|
|
70
72
|
labelClasses.push("text-alert");
|
|
71
73
|
return (React.createElement("label", { className: labelClasses.join(" "), htmlFor: props.id || props.name }, props.label));
|
|
72
|
-
}, [
|
|
74
|
+
}, [
|
|
75
|
+
props.caps,
|
|
76
|
+
props.primary,
|
|
77
|
+
props.readerOnly,
|
|
78
|
+
props.labelClassName,
|
|
79
|
+
props.type,
|
|
80
|
+
props.id,
|
|
81
|
+
props.name,
|
|
82
|
+
props.label,
|
|
83
|
+
props.error,
|
|
84
|
+
]);
|
|
73
85
|
var idOrName = props.id || props.name;
|
|
74
86
|
var note = React.createElement(React.Fragment, null);
|
|
75
87
|
if (props.note) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/forms/Field.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAe,OAAO,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/forms/Field.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import "./HeadingGroup.scss";
|
|
|
3
3
|
export interface HeadingGroupProps {
|
|
4
4
|
/** A string or element to display in an `h2` tag (overridable via `headingPriority`) */
|
|
5
5
|
heading: React.ReactNode;
|
|
6
|
-
/** A string or element to display in
|
|
6
|
+
/** A string or element to display in a `p` tag */
|
|
7
7
|
subheading: React.ReactNode;
|
|
8
8
|
/**
|
|
9
9
|
* The heading level (1 through 6)
|
|
@@ -8,7 +8,7 @@ var HeadingGroup = function (props) {
|
|
|
8
8
|
classNames.push(props.className);
|
|
9
9
|
return (React.createElement("hgroup", { className: classNames.join(" "), role: "group" },
|
|
10
10
|
React.createElement(Heading, { priority: (_a = props.headingPriority) !== null && _a !== void 0 ? _a : 2 }, props.heading),
|
|
11
|
-
React.createElement("p",
|
|
11
|
+
React.createElement("p", null, props.subheading)));
|
|
12
12
|
};
|
|
13
13
|
export { HeadingGroup as default, HeadingGroup };
|
|
14
14
|
//# sourceMappingURL=HeadingGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadingGroup.js","sourceRoot":"","sources":["../../../src/headers/HeadingGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,qBAAqB,CAAA;AAgB5B,IAAM,YAAY,GAAG,UAAC,KAAwB;;IAC5C,IAAM,UAAU,GAAG,CAAC,eAAe,CAAC,CAAA;IACpC,IAAI,KAAK,CAAC,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAErD,OAAO,CACL,gCAAQ,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAC,OAAO;QACnD,oBAAC,OAAO,IAAC,QAAQ,EAAE,MAAA,KAAK,CAAC,eAAe,mCAAI,CAAC,IAAG,KAAK,CAAC,OAAO,CAAW;QACxE,
|
|
1
|
+
{"version":3,"file":"HeadingGroup.js","sourceRoot":"","sources":["../../../src/headers/HeadingGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,qBAAqB,CAAA;AAgB5B,IAAM,YAAY,GAAG,UAAC,KAAwB;;IAC5C,IAAM,UAAU,GAAG,CAAC,eAAe,CAAC,CAAA;IACpC,IAAI,KAAK,CAAC,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAErD,OAAO,CACL,gCAAQ,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAC,OAAO;QACnD,oBAAC,OAAO,IAAC,QAAQ,EAAE,MAAA,KAAK,CAAC,eAAe,mCAAI,CAAC,IAAG,KAAK,CAAC,OAAO,CAAW;QACxE,+BAAI,KAAK,CAAC,UAAU,CAAK,CAClB,CACV,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -7,10 +7,14 @@ export interface HeroProps {
|
|
|
7
7
|
buttonTitle?: string;
|
|
8
8
|
centered?: boolean;
|
|
9
9
|
children?: React.ReactNode;
|
|
10
|
+
className?: string;
|
|
10
11
|
extraLargeTitle?: boolean;
|
|
12
|
+
customActions?: React.ReactNode;
|
|
13
|
+
innerClassName?: string;
|
|
11
14
|
secondaryButtonLink?: string;
|
|
12
15
|
secondaryButtonTitle?: string;
|
|
13
16
|
title: React.ReactNode;
|
|
17
|
+
titleClassName?: string;
|
|
14
18
|
strings?: {
|
|
15
19
|
allApplicationsClosed?: string;
|
|
16
20
|
};
|
package/dist/src/headers/Hero.js
CHANGED
|
@@ -2,12 +2,19 @@ import * as React from "react";
|
|
|
2
2
|
import { LinkButton } from "../actions/LinkButton";
|
|
3
3
|
import { t } from "../helpers/translator";
|
|
4
4
|
import "./Hero.scss";
|
|
5
|
-
var HeroButton = function (props) { return (React.createElement("span", { className: props.className
|
|
5
|
+
var HeroButton = function (props) { return (React.createElement("span", { className: "".concat(props.className || "", " hero__button\"") },
|
|
6
6
|
React.createElement(LinkButton, { href: props.href }, props.title))); };
|
|
7
7
|
var Hero = function (props) {
|
|
8
8
|
var _a, _b;
|
|
9
9
|
var subHeader, styles;
|
|
10
|
-
var
|
|
10
|
+
var heroClasses = ["hero"];
|
|
11
|
+
if (props.centered)
|
|
12
|
+
heroClasses.push("centered");
|
|
13
|
+
if (props.className)
|
|
14
|
+
heroClasses.push(props.className);
|
|
15
|
+
var innerClasses = ["hero__inner"];
|
|
16
|
+
if (props.innerClassName)
|
|
17
|
+
innerClasses.push(props.innerClassName);
|
|
11
18
|
if (props.allApplicationsClosed) {
|
|
12
19
|
subHeader = (React.createElement("h2", { className: "hero__subtitle" }, (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.allApplicationsClosed) !== null && _b !== void 0 ? _b : t("welcome.allApplicationClosed")));
|
|
13
20
|
}
|
|
@@ -17,15 +24,13 @@ var Hero = function (props) {
|
|
|
17
24
|
if (props.backgroundImage) {
|
|
18
25
|
styles = { backgroundImage: "url(".concat(props.backgroundImage, ")") };
|
|
19
26
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
React.createElement(HeroButton, { className: "md:col-start-2 with_secondary", href: props.buttonLink, title: props.buttonTitle }),
|
|
28
|
-
React.createElement(HeroButton, { className: "with_secondary", href: props.secondaryButtonLink, title: props.secondaryButtonTitle }))) : (React.createElement(HeroButton, { className: "px-5", href: props.buttonLink, title: props.buttonTitle }))))));
|
|
27
|
+
return (React.createElement("div", { className: heroClasses.join(" "), style: styles, "data-test-id": "hero-component" },
|
|
28
|
+
React.createElement("div", { className: innerClasses.join(" ") },
|
|
29
|
+
React.createElement("h1", { className: "hero__title \n ".concat(props.extraLargeTitle ? "lg:text-6.5xl" : "", " \n ").concat(props.titleClassName || "", "\n ") }, props.title),
|
|
30
|
+
subHeader,
|
|
31
|
+
props.customActions ? (props.customActions) : (React.createElement(React.Fragment, null, props.buttonTitle && props.buttonLink && (React.createElement(React.Fragment, null, props.secondaryButtonTitle && props.secondaryButtonLink ? (React.createElement("div", { className: "hero__buttons" },
|
|
32
|
+
React.createElement(HeroButton, { className: "md:col-start-2 with_secondary", href: props.buttonLink, title: props.buttonTitle }),
|
|
33
|
+
React.createElement(HeroButton, { className: "with_secondary", href: props.secondaryButtonLink, title: props.secondaryButtonTitle }))) : (React.createElement(HeroButton, { className: "px-5", href: props.buttonLink, title: props.buttonTitle })))))))));
|
|
29
34
|
};
|
|
30
35
|
export { Hero as default, Hero };
|
|
31
36
|
//# sourceMappingURL=Hero.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hero.js","sourceRoot":"","sources":["../../../src/headers/Hero.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAA;AACzC,OAAO,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"Hero.js","sourceRoot":"","sources":["../../../src/headers/Hero.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAA;AACzC,OAAO,aAAa,CAAA;AAsBpB,IAAM,UAAU,GAAG,UAAC,KAA0D,IAAK,OAAA,CACjF,8BAAM,SAAS,EAAE,UAAG,KAAK,CAAC,SAAS,IAAI,EAAE,oBAAgB;IACvD,oBAAC,UAAU,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAG,KAAK,CAAC,KAAK,CAAc,CACnD,CACR,EAJkF,CAIlF,CAAA;AAED,IAAM,IAAI,GAAG,UAAC,KAAgB;;IAC5B,IAAI,SAAS,EAAE,MAAM,CAAA;IACrB,IAAM,WAAW,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,QAAQ;QAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAChD,IAAI,KAAK,CAAC,SAAS;QAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAEtD,IAAM,YAAY,GAAG,CAAC,aAAa,CAAC,CAAA;IACpC,IAAI,KAAK,CAAC,cAAc;QAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAEjE,IAAI,KAAK,CAAC,qBAAqB,EAAE;QAC/B,SAAS,GAAG,CACV,4BAAI,SAAS,EAAC,gBAAgB,IAC3B,MAAA,MAAA,KAAK,CAAC,OAAO,0CAAE,qBAAqB,mCAAI,CAAC,CAAC,8BAA8B,CAAC,CACvE,CACN,CAAA;KACF;SAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;QACzB,SAAS,GAAG,4BAAI,SAAS,EAAC,gBAAgB,IAAE,KAAK,CAAC,QAAQ,CAAM,CAAA;KACjE;IACD,IAAI,KAAK,CAAC,eAAe,EAAE;QACzB,MAAM,GAAG,EAAE,eAAe,EAAE,cAAO,KAAK,CAAC,eAAe,MAAG,EAAE,CAAA;KAC9D;IAED,OAAO,CACL,6BAAK,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,kBAAe,gBAAgB;QACjF,6BAAK,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;YACpC,4BACE,SAAS,EAAE,oCACP,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,4BAC5C,KAAK,CAAC,cAAc,IAAI,EAAE,mBAC3B,IAEF,KAAK,CAAC,KAAK,CACT;YACJ,SAAS;YAET,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CACrB,KAAK,CAAC,aAAa,CACpB,CAAC,CAAC,CAAC,CACF,0CACG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,IAAI,CACxC,0CACG,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CACzD,6BAAK,SAAS,EAAC,eAAe;gBAC5B,oBAAC,UAAU,IACT,SAAS,EAAE,+BAA+B,EAC1C,IAAI,EAAE,KAAK,CAAC,UAAU,EACtB,KAAK,EAAE,KAAK,CAAC,WAAW,GACxB;gBACF,oBAAC,UAAU,IACT,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,KAAK,CAAC,mBAAmB,EAC/B,KAAK,EAAE,KAAK,CAAC,oBAAoB,GACjC,CACE,CACP,CAAC,CAAC,CAAC,CACF,oBAAC,UAAU,IACT,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,KAAK,CAAC,UAAU,EACtB,KAAK,EAAE,KAAK,CAAC,WAAW,GACxB,CACH,CACA,CACJ,CACA,CACJ,CACG,CACF,CACP,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,CAAA"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { BADGES } from "../../.storybook/constants";
|
|
1
2
|
declare const _default: {
|
|
2
3
|
title: string;
|
|
4
|
+
parameters: {
|
|
5
|
+
badges: BADGES[];
|
|
6
|
+
};
|
|
3
7
|
};
|
|
4
8
|
export default _default;
|
|
5
9
|
export declare const withListings: () => JSX.Element;
|
|
@@ -7,3 +11,4 @@ export declare const withNoListings: () => JSX.Element;
|
|
|
7
11
|
export declare const withBackground: () => JSX.Element;
|
|
8
12
|
export declare const withSecondaryButton: () => JSX.Element;
|
|
9
13
|
export declare const withExtraLargeTitleAndSecondaryButton: () => JSX.Element;
|
|
14
|
+
export declare const withCustomActions: () => JSX.Element;
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import { BADGES } from "../../.storybook/constants";
|
|
2
3
|
import { Hero } from "./Hero";
|
|
3
4
|
export default {
|
|
4
|
-
title: "Headers/Hero",
|
|
5
|
+
title: "Headers/Hero 🚩",
|
|
6
|
+
parameters: {
|
|
7
|
+
badges: [BADGES.GEN2],
|
|
8
|
+
},
|
|
5
9
|
};
|
|
6
10
|
export var withListings = function () { return (React.createElement(Hero, { title: React.createElement(React.Fragment, null, "Say Hello to Your Hero"), buttonTitle: "I am a Button", buttonLink: "/listings" })); };
|
|
7
11
|
export var withNoListings = function () { return (React.createElement(Hero, { title: React.createElement(React.Fragment, null, "Say Hello to Your Hero"), buttonTitle: "I am a Button", buttonLink: "/listings", allApplicationsClosed: true })); };
|
|
8
12
|
export var withBackground = function () { return (React.createElement(Hero, { title: React.createElement(React.Fragment, null, "Say Hello to Your Hero"), buttonTitle: "Rental Listings", buttonLink: "/listings", backgroundImage: "/images/banner.png" })); };
|
|
9
13
|
export var withSecondaryButton = function () { return (React.createElement(Hero, { title: React.createElement(React.Fragment, null, "Say Hello to Your Hero"), buttonTitle: "Rent", buttonLink: "/listings", secondaryButtonTitle: "Buy", secondaryButtonLink: "/listings/for-sale", backgroundImage: "/images/banner.png" })); };
|
|
10
14
|
export var withExtraLargeTitleAndSecondaryButton = function () { return (React.createElement(Hero, { backgroundImage: "/images/banner.png", buttonLink: "/listings", buttonTitle: "Rent", extraLargeTitle: true, secondaryButtonLink: "/listings/for-sale", secondaryButtonTitle: "Buy", title: "Say Hello to Your Hero" })); };
|
|
15
|
+
export var withCustomActions = function () { return (React.createElement(Hero, { title: React.createElement(React.Fragment, null, "Say Hello to Your Hero"), buttonTitle: "Rental Listings", buttonLink: "/listings", backgroundImage: "/images/banner.png", customActions: React.createElement(React.Fragment, null, "Hero custom action content") })); };
|
|
11
16
|
//# sourceMappingURL=Hero.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hero.stories.js","sourceRoot":"","sources":["../../../src/headers/Hero.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Hero.stories.js","sourceRoot":"","sources":["../../../src/headers/Hero.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,eAAe;IACb,KAAK,EAAE,iBAAiB;IACxB,UAAU,EAAE;QACV,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;KACtB;CACF,CAAA;AAED,MAAM,CAAC,IAAM,YAAY,GAAG,cAAM,OAAA,CAChC,oBAAC,IAAI,IAAC,KAAK,EAAE,mEAA2B,EAAE,WAAW,EAAC,eAAe,EAAC,UAAU,EAAC,WAAW,GAAG,CAChG,EAFiC,CAEjC,CAAA;AAED,MAAM,CAAC,IAAM,cAAc,GAAG,cAAM,OAAA,CAClC,oBAAC,IAAI,IACH,KAAK,EAAE,mEAA2B,EAClC,WAAW,EAAC,eAAe,EAC3B,UAAU,EAAC,WAAW,EACtB,qBAAqB,EAAE,IAAI,GAC3B,CACH,EAPmC,CAOnC,CAAA;AAED,MAAM,CAAC,IAAM,cAAc,GAAG,cAAM,OAAA,CAClC,oBAAC,IAAI,IACH,KAAK,EAAE,mEAA2B,EAClC,WAAW,EAAC,iBAAiB,EAC7B,UAAU,EAAC,WAAW,EACtB,eAAe,EAAC,oBAAoB,GACpC,CACH,EAPmC,CAOnC,CAAA;AAED,MAAM,CAAC,IAAM,mBAAmB,GAAG,cAAM,OAAA,CACvC,oBAAC,IAAI,IACH,KAAK,EAAE,mEAA2B,EAClC,WAAW,EAAC,MAAM,EAClB,UAAU,EAAC,WAAW,EACtB,oBAAoB,EAAC,KAAK,EAC1B,mBAAmB,EAAC,oBAAoB,EACxC,eAAe,EAAC,oBAAoB,GACpC,CACH,EATwC,CASxC,CAAA;AAED,MAAM,CAAC,IAAM,qCAAqC,GAAG,cAAM,OAAA,CACzD,oBAAC,IAAI,IACH,eAAe,EAAC,oBAAoB,EACpC,UAAU,EAAC,WAAW,EACtB,WAAW,EAAC,MAAM,EAClB,eAAe,EAAE,IAAI,EACrB,mBAAmB,EAAC,oBAAoB,EACxC,oBAAoB,EAAC,KAAK,EAC1B,KAAK,EAAE,wBAAwB,GAC/B,CACH,EAV0D,CAU1D,CAAA;AAED,MAAM,CAAC,IAAM,iBAAiB,GAAG,cAAM,OAAA,CACrC,oBAAC,IAAI,IACH,KAAK,EAAE,mEAA2B,EAClC,WAAW,EAAC,iBAAiB,EAC7B,UAAU,EAAC,WAAW,EACtB,eAAe,EAAC,oBAAoB,EACpC,aAAa,EAAE,uEAA+B,GAC9C,CACH,EARsC,CAQtC,CAAA"}
|
|
@@ -18,10 +18,10 @@ export var inversed = function () { return (React.createElement(PageHeader, { ti
|
|
|
18
18
|
export var withContent = function () { return (React.createElement(PageHeader, { title: "Hello World", subtitle: "Here is a subtitle" }, "Here is some content")); };
|
|
19
19
|
export var withBackgroundImage = function () { return (React.createElement(PageHeader, { title: "Hello World", inverse: true, subtitle: "Here is a page header with a background image", backgroundImage: "/images/banner.png", className: "bg-cover bg-center" })); };
|
|
20
20
|
export var styleOverrides = function () {
|
|
21
|
-
var cssVarsOverride = "\n .page-header-overrides .page-header {\n --background-color:
|
|
21
|
+
var cssVarsOverride = "\n .page-header-overrides .page-header {\n --background-color: lightgray;\n --border-color: gray;\n --text-color: black;\n --title-font-size-desktop: 5rem;\n --title-font-size-mobile: 2rem;\n }\n ";
|
|
22
22
|
return (React.createElement(React.Fragment, null,
|
|
23
23
|
React.createElement("div", { className: "page-header-overrides" },
|
|
24
|
-
React.createElement(PageHeader, { title: "
|
|
24
|
+
React.createElement(PageHeader, { title: "Hello World", subtitle: "Here is a subtitle" }, "Here is some content"),
|
|
25
25
|
React.createElement("style", null, cssVarsOverride)),
|
|
26
26
|
React.createElement("p", { className: "mt-12 font-semibold" }, "Customized using the following variable overrides:"),
|
|
27
27
|
React.createElement("pre", null, cssVarsOverride.replace(".page-header-overrides ", ""))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageHeader.stories.js","sourceRoot":"","sources":["../../../src/headers/PageHeader.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,uBAAuB,MAAM,uBAAuB,CAAA;AAE3D,eAAe;IACb,KAAK,EAAE,wBAAwB;IAC/B,EAAE,EAAE,qBAAqB;IACzB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,uBAAuB;SAC9B;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;KACtB;CACF,CAAA;AAED,MAAM,CAAC,IAAM,eAAe,GAAG,cAAM,OAAA,oBAAC,UAAU,IAAC,KAAK,EAAC,aAAa,GAAG,EAAlC,CAAkC,CAAA;AAEvE,MAAM,CAAC,IAAM,YAAY,GAAG,cAAM,OAAA,oBAAC,UAAU,IAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,EAAC,oBAAoB,GAAG,EAAhE,CAAgE,CAAA;AAElG,MAAM,CAAC,IAAM,QAAQ,GAAG,cAAM,OAAA,CAC5B,oBAAC,UAAU,IAAC,KAAK,EAAC,qBAAqB,EAAC,QAAQ,EAAC,oBAAoB,EAAC,OAAO,SAAG,CACjF,EAF6B,CAE7B,CAAA;AAED,MAAM,CAAC,IAAM,WAAW,GAAG,cAAM,OAAA,CAC/B,oBAAC,UAAU,IAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,EAAC,oBAAoB,2BAEhD,CACd,EAJgC,CAIhC,CAAA;AAED,MAAM,CAAC,IAAM,mBAAmB,GAAG,cAAM,OAAA,CACvC,oBAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"PageHeader.stories.js","sourceRoot":"","sources":["../../../src/headers/PageHeader.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,uBAAuB,MAAM,uBAAuB,CAAA;AAE3D,eAAe;IACb,KAAK,EAAE,wBAAwB;IAC/B,EAAE,EAAE,qBAAqB;IACzB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,uBAAuB;SAC9B;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;KACtB;CACF,CAAA;AAED,MAAM,CAAC,IAAM,eAAe,GAAG,cAAM,OAAA,oBAAC,UAAU,IAAC,KAAK,EAAC,aAAa,GAAG,EAAlC,CAAkC,CAAA;AAEvE,MAAM,CAAC,IAAM,YAAY,GAAG,cAAM,OAAA,oBAAC,UAAU,IAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,EAAC,oBAAoB,GAAG,EAAhE,CAAgE,CAAA;AAElG,MAAM,CAAC,IAAM,QAAQ,GAAG,cAAM,OAAA,CAC5B,oBAAC,UAAU,IAAC,KAAK,EAAC,qBAAqB,EAAC,QAAQ,EAAC,oBAAoB,EAAC,OAAO,SAAG,CACjF,EAF6B,CAE7B,CAAA;AAED,MAAM,CAAC,IAAM,WAAW,GAAG,cAAM,OAAA,CAC/B,oBAAC,UAAU,IAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,EAAC,oBAAoB,2BAEhD,CACd,EAJgC,CAIhC,CAAA;AAED,MAAM,CAAC,IAAM,mBAAmB,GAAG,cAAM,OAAA,CACvC,oBAAC,UAAU,IACT,KAAK,EAAC,aAAa,EACnB,OAAO,QACP,QAAQ,EAAC,+CAA+C,EACxD,eAAe,EAAC,oBAAoB,EACpC,SAAS,EAAC,oBAAoB,GAC9B,CACH,EARwC,CAQxC,CAAA;AAED,MAAM,CAAC,IAAM,cAAc,GAAG;IAC5B,IAAM,eAAe,GAAG,sOAQvB,CAAA;IAED,OAAO,CACL;QACE,6BAAK,SAAS,EAAC,uBAAuB;YACpC,oBAAC,UAAU,IAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,EAAC,oBAAoB,2BAEhD;YACb,mCAAQ,eAAe,CAAS,CAC5B;QAEN,2BAAG,SAAS,EAAC,qBAAqB,yDAAuD;QAEzF,iCAAM,eAAe,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAO,CAClE,CACJ,CAAA;AACH,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bloom-housing/ui-components",
|
|
3
|
-
"version": "10.0.
|
|
3
|
+
"version": "10.0.3",
|
|
4
4
|
"author": "Sean Albert <sean.albert@exygy.com>",
|
|
5
5
|
"description": "Shared user interface components for Bloom affordable housing system",
|
|
6
6
|
"homepage": "https://github.com/bloom-housing/ui-components",
|
package/src/forms/Field.tsx
CHANGED
|
@@ -31,6 +31,7 @@ export interface FieldProps {
|
|
|
31
31
|
setValue?: UseFormMethods["setValue"]
|
|
32
32
|
dataTestId?: string
|
|
33
33
|
hidden?: boolean
|
|
34
|
+
labelClassName?: string
|
|
34
35
|
bordered?: boolean
|
|
35
36
|
}
|
|
36
37
|
|
|
@@ -99,6 +100,7 @@ const Field = (props: FieldProps) => {
|
|
|
99
100
|
if (props.caps) labelClasses.push("text__caps-spaced")
|
|
100
101
|
if (props.primary) labelClasses.push("text-primary")
|
|
101
102
|
if (props.readerOnly) labelClasses.push("sr-only")
|
|
103
|
+
if (props.labelClassName) labelClasses.push(props.labelClassName)
|
|
102
104
|
if (props.type === "radio") {
|
|
103
105
|
labelClasses.push("font-semibold")
|
|
104
106
|
}
|
|
@@ -109,7 +111,17 @@ const Field = (props: FieldProps) => {
|
|
|
109
111
|
{props.label}
|
|
110
112
|
</label>
|
|
111
113
|
)
|
|
112
|
-
}, [
|
|
114
|
+
}, [
|
|
115
|
+
props.caps,
|
|
116
|
+
props.primary,
|
|
117
|
+
props.readerOnly,
|
|
118
|
+
props.labelClassName,
|
|
119
|
+
props.type,
|
|
120
|
+
props.id,
|
|
121
|
+
props.name,
|
|
122
|
+
props.label,
|
|
123
|
+
props.error,
|
|
124
|
+
])
|
|
113
125
|
|
|
114
126
|
const idOrName = props.id || props.name
|
|
115
127
|
|
|
@@ -5,7 +5,7 @@ import "./HeadingGroup.scss"
|
|
|
5
5
|
export interface HeadingGroupProps {
|
|
6
6
|
/** A string or element to display in an `h2` tag (overridable via `headingPriority`) */
|
|
7
7
|
heading: React.ReactNode
|
|
8
|
-
/** A string or element to display in
|
|
8
|
+
/** A string or element to display in a `p` tag */
|
|
9
9
|
subheading: React.ReactNode
|
|
10
10
|
/**
|
|
11
11
|
* The heading level (1 through 6)
|
|
@@ -23,7 +23,7 @@ const HeadingGroup = (props: HeadingGroupProps) => {
|
|
|
23
23
|
return (
|
|
24
24
|
<hgroup className={classNames.join(" ")} role="group">
|
|
25
25
|
<Heading priority={props.headingPriority ?? 2}>{props.heading}</Heading>
|
|
26
|
-
<p
|
|
26
|
+
<p>{props.subheading}</p>
|
|
27
27
|
</hgroup>
|
|
28
28
|
)
|
|
29
29
|
}
|
package/src/headers/Hero.scss
CHANGED
|
@@ -1,13 +1,35 @@
|
|
|
1
1
|
.hero {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
--background-color: var(--bloom-color-primary-darker);
|
|
3
|
+
--border-radius: inherit;
|
|
4
|
+
--font-weight: inherit;
|
|
5
|
+
--inner-background-color: inherit;
|
|
6
|
+
--margin-desktop: inherit;
|
|
7
|
+
--margin-mobile: inherit;
|
|
8
|
+
--max-width: 41rem;
|
|
9
|
+
--subtitle-desktop-font-size: var(--bloom-font-size-xl);
|
|
10
|
+
--subtitle-font-weight: inherit;
|
|
11
|
+
--subtitle-margin: 0 auto var(--bloom-s8) auto;
|
|
12
|
+
--subtitle-mobile-font-size: var(--bloom-font-size-base);
|
|
13
|
+
--subtitle-text-color: var(--bloom-color-gray-100);
|
|
14
|
+
--subtitle-text-shadow: 1px 2px 5px rgba(0, 0, 0, 0.5);
|
|
15
|
+
--text-color: var(--bloom-color-white);
|
|
16
|
+
--title-desktop-font-size: var(--bloom-font-size-5xl);
|
|
17
|
+
--title-letter-spacing: -0.04em;
|
|
18
|
+
--title-line-height: inherit;
|
|
19
|
+
--title-margin-desktop: 0 0 var(--bloom-s8) 0;
|
|
20
|
+
--title-margin-mobile: 0 auto var(--bloom-s5) auto;
|
|
21
|
+
--title-mobile-font-size: var(--bloom-font-size-3xl);
|
|
22
|
+
--title-text-color: inherit;
|
|
23
|
+
|
|
24
|
+
background-color: var(--background-color);
|
|
25
|
+
background-size: cover;
|
|
26
|
+
color: var(--text-color);
|
|
27
|
+
margin: var(--margin-desktop);
|
|
28
|
+
padding: var(--bloom-s20) var(--bloom-s5);
|
|
29
|
+
|
|
30
|
+
@media (max-width: $screen-md) {
|
|
31
|
+
padding: var(--bloom-s10) var(--bloom-s5);
|
|
32
|
+
margin: var(--margin-mobile);
|
|
11
33
|
}
|
|
12
34
|
|
|
13
35
|
&.centered {
|
|
@@ -21,43 +43,59 @@
|
|
|
21
43
|
}
|
|
22
44
|
|
|
23
45
|
.hero__buttons {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
46
|
+
display: grid;
|
|
47
|
+
gap: var(--bloom-s5);
|
|
48
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
49
|
+
margin: auto;
|
|
50
|
+
width: 100%;
|
|
51
|
+
max-width: var(--bloom-screen-md);
|
|
52
|
+
|
|
53
|
+
@media (max-width: $screen-md) {
|
|
54
|
+
grid-template-columns: auto;
|
|
55
|
+
}
|
|
29
56
|
}
|
|
57
|
+
|
|
30
58
|
.hero__title {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
59
|
+
color: var(--title-text-color);
|
|
60
|
+
font-size: var(--title-desktop-font-size);
|
|
61
|
+
letter-spacing: var(--title-letter-spacing);
|
|
62
|
+
line-height: var(--title-line-height);
|
|
63
|
+
margin: var(--title-margin-desktop);
|
|
64
|
+
max-width: var(--max-width);
|
|
65
|
+
text-align: center;
|
|
66
|
+
|
|
67
|
+
@media (max-width: $screen-md) {
|
|
68
|
+
font-size: var(--title-mobile-font-size);
|
|
69
|
+
margin: var(--title-margin-mobile);
|
|
40
70
|
}
|
|
41
71
|
|
|
42
72
|
em {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-webkit-text-decoration-color:
|
|
46
|
-
-moz-text-decoration-color:
|
|
47
|
-
text-decoration-color:
|
|
73
|
+
font-style: normal;
|
|
74
|
+
text-decoration: underline;
|
|
75
|
+
-webkit-text-decoration-color: var(--bloom-color-warn);
|
|
76
|
+
-moz-text-decoration-color: var(--bloom-color-warn);
|
|
77
|
+
text-decoration-color: var(--bloom-color-warn);
|
|
48
78
|
}
|
|
49
79
|
}
|
|
50
80
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
81
|
+
.hero__subtitle {
|
|
82
|
+
text-align: center;
|
|
83
|
+
color: var(--subtitle-text-color);
|
|
84
|
+
font-family: var(--bloom-font-sans);
|
|
85
|
+
font-size: var(--subtitle-desktop-font-size);
|
|
86
|
+
font-weight: var(--subtitle-font-weight);
|
|
87
|
+
margin: var(--subtitle-margin);
|
|
88
|
+
max-width: var(--max-width);
|
|
89
|
+
text-shadow: var(--subtitle-text-shadow);
|
|
90
|
+
|
|
91
|
+
@media (max-width: $screen-md) {
|
|
92
|
+
font-size: var(--subtitle-mobile-font-size);
|
|
62
93
|
}
|
|
63
94
|
}
|
|
95
|
+
|
|
96
|
+
.hero__inner {
|
|
97
|
+
background-color: var(--inner-background-color);
|
|
98
|
+
display: flex;
|
|
99
|
+
flex-direction: column;
|
|
100
|
+
align-items: center;
|
|
101
|
+
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import * as React from "react"
|
|
2
|
-
|
|
2
|
+
import { BADGES } from "../../.storybook/constants"
|
|
3
3
|
import { Hero } from "./Hero"
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
title: "Headers/Hero",
|
|
6
|
+
title: "Headers/Hero 🚩",
|
|
7
|
+
parameters: {
|
|
8
|
+
badges: [BADGES.GEN2],
|
|
9
|
+
},
|
|
7
10
|
}
|
|
8
11
|
|
|
9
12
|
export const withListings = () => (
|
|
@@ -50,3 +53,13 @@ export const withExtraLargeTitleAndSecondaryButton = () => (
|
|
|
50
53
|
title={"Say Hello to Your Hero"}
|
|
51
54
|
/>
|
|
52
55
|
)
|
|
56
|
+
|
|
57
|
+
export const withCustomActions = () => (
|
|
58
|
+
<Hero
|
|
59
|
+
title={<>Say Hello to Your Hero</>}
|
|
60
|
+
buttonTitle="Rental Listings"
|
|
61
|
+
buttonLink="/listings"
|
|
62
|
+
backgroundImage="/images/banner.png"
|
|
63
|
+
customActions={<>Hero custom action content</>}
|
|
64
|
+
/>
|
|
65
|
+
)
|
package/src/headers/Hero.tsx
CHANGED
|
@@ -10,24 +10,34 @@ export interface HeroProps {
|
|
|
10
10
|
buttonTitle?: string
|
|
11
11
|
centered?: boolean
|
|
12
12
|
children?: React.ReactNode
|
|
13
|
+
className?: string
|
|
13
14
|
extraLargeTitle?: boolean
|
|
15
|
+
customActions?: React.ReactNode
|
|
16
|
+
innerClassName?: string
|
|
14
17
|
secondaryButtonLink?: string
|
|
15
18
|
secondaryButtonTitle?: string
|
|
16
19
|
title: React.ReactNode
|
|
20
|
+
titleClassName?: string
|
|
17
21
|
strings?: {
|
|
18
22
|
allApplicationsClosed?: string
|
|
19
23
|
}
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
const HeroButton = (props: { title: string; href: string; className?: string }) => (
|
|
23
|
-
<span className={props.className
|
|
27
|
+
<span className={`${props.className || ""} hero__button"`}>
|
|
24
28
|
<LinkButton href={props.href}>{props.title}</LinkButton>
|
|
25
29
|
</span>
|
|
26
30
|
)
|
|
27
31
|
|
|
28
32
|
const Hero = (props: HeroProps) => {
|
|
29
33
|
let subHeader, styles
|
|
30
|
-
|
|
34
|
+
const heroClasses = ["hero"]
|
|
35
|
+
if (props.centered) heroClasses.push("centered")
|
|
36
|
+
if (props.className) heroClasses.push(props.className)
|
|
37
|
+
|
|
38
|
+
const innerClasses = ["hero__inner"]
|
|
39
|
+
if (props.innerClassName) innerClasses.push(props.innerClassName)
|
|
40
|
+
|
|
31
41
|
if (props.allApplicationsClosed) {
|
|
32
42
|
subHeader = (
|
|
33
43
|
<h2 className="hero__subtitle">
|
|
@@ -40,36 +50,51 @@ const Hero = (props: HeroProps) => {
|
|
|
40
50
|
if (props.backgroundImage) {
|
|
41
51
|
styles = { backgroundImage: `url(${props.backgroundImage})` }
|
|
42
52
|
}
|
|
43
|
-
|
|
44
|
-
classNames = "centered"
|
|
45
|
-
}
|
|
53
|
+
|
|
46
54
|
return (
|
|
47
|
-
<div className={
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
<div className={heroClasses.join(" ")} style={styles} data-test-id="hero-component">
|
|
56
|
+
<div className={innerClasses.join(" ")}>
|
|
57
|
+
<h1
|
|
58
|
+
className={`hero__title
|
|
59
|
+
${props.extraLargeTitle ? "lg:text-6.5xl" : ""}
|
|
60
|
+
${props.titleClassName || ""}
|
|
61
|
+
`}
|
|
62
|
+
>
|
|
63
|
+
{props.title}
|
|
64
|
+
</h1>
|
|
65
|
+
{subHeader}
|
|
52
66
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
{props.customActions ? (
|
|
68
|
+
props.customActions
|
|
69
|
+
) : (
|
|
70
|
+
<>
|
|
71
|
+
{props.buttonTitle && props.buttonLink && (
|
|
72
|
+
<>
|
|
73
|
+
{props.secondaryButtonTitle && props.secondaryButtonLink ? (
|
|
74
|
+
<div className="hero__buttons">
|
|
75
|
+
<HeroButton
|
|
76
|
+
className={"md:col-start-2 with_secondary"}
|
|
77
|
+
href={props.buttonLink}
|
|
78
|
+
title={props.buttonTitle}
|
|
79
|
+
/>
|
|
80
|
+
<HeroButton
|
|
81
|
+
className={"with_secondary"}
|
|
82
|
+
href={props.secondaryButtonLink}
|
|
83
|
+
title={props.secondaryButtonTitle}
|
|
84
|
+
/>
|
|
85
|
+
</div>
|
|
86
|
+
) : (
|
|
87
|
+
<HeroButton
|
|
88
|
+
className={`px-5`}
|
|
89
|
+
href={props.buttonLink}
|
|
90
|
+
title={props.buttonTitle}
|
|
91
|
+
/>
|
|
92
|
+
)}
|
|
93
|
+
</>
|
|
94
|
+
)}
|
|
95
|
+
</>
|
|
96
|
+
)}
|
|
97
|
+
</div>
|
|
73
98
|
</div>
|
|
74
99
|
)
|
|
75
100
|
}
|
|
@@ -7,16 +7,19 @@
|
|
|
7
7
|
--inverse-background-color: var(--bloom-color-primary-darker);
|
|
8
8
|
--inverse-border-color: var(--bloom-color-primary);
|
|
9
9
|
--inverse-text-color: var(--bloom-color-white);
|
|
10
|
-
--title-font-size: var(--bloom-font-size-4xl);
|
|
10
|
+
--title-font-size-desktop: var(--bloom-font-size-4xl);
|
|
11
|
+
--title-font-size-mobile: var(--bloom-font-size-2xl);
|
|
12
|
+
--padding-desktop: var(--bloom-s10) 0;
|
|
13
|
+
--padding-mobile: var(--bloom-s8) 0;
|
|
11
14
|
|
|
12
15
|
/* Base Styles */
|
|
13
|
-
padding: var(--
|
|
16
|
+
padding: var(--padding-mobile);
|
|
14
17
|
background-color: var(--background-color);
|
|
15
18
|
border-top: var(--bloom-border-1) solid var(--border-color);
|
|
16
19
|
color: var(--text-color);
|
|
17
20
|
|
|
18
21
|
@media (min-width: $screen-md) {
|
|
19
|
-
padding: var(--
|
|
22
|
+
padding: var(--padding-desktop);
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
/* Variants */
|
|
@@ -46,17 +49,19 @@
|
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
.page-header__title {
|
|
52
|
+
font-size: var(--title-font-size-mobile);
|
|
49
53
|
text-align: center;
|
|
50
54
|
font-family: var(--text-font-family);
|
|
51
|
-
word-break: break-
|
|
55
|
+
word-break: break-word;
|
|
52
56
|
|
|
53
57
|
@media (min-width: $screen-md) {
|
|
54
|
-
font-size: var(--title-font-size);
|
|
58
|
+
font-size: var(--title-font-size-desktop);
|
|
55
59
|
text-align: left;
|
|
56
60
|
}
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
.page-header__lead {
|
|
64
|
+
text-align: center;
|
|
60
65
|
font-family: var(--text-font-family);
|
|
61
66
|
max-width: var(--bloom-width-5xl);
|
|
62
67
|
}
|
|
@@ -29,24 +29,31 @@ export const withContent = () => (
|
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
export const withBackgroundImage = () => (
|
|
32
|
-
<PageHeader
|
|
32
|
+
<PageHeader
|
|
33
|
+
title="Hello World"
|
|
34
|
+
inverse
|
|
35
|
+
subtitle="Here is a page header with a background image"
|
|
36
|
+
backgroundImage="/images/banner.png"
|
|
37
|
+
className="bg-cover bg-center"
|
|
38
|
+
/>
|
|
33
39
|
)
|
|
34
40
|
|
|
35
41
|
export const styleOverrides = () => {
|
|
36
42
|
const cssVarsOverride = `
|
|
37
43
|
.page-header-overrides .page-header {
|
|
38
|
-
--background-color:
|
|
39
|
-
--border-color:
|
|
40
|
-
--text-color:
|
|
41
|
-
--title-font-size:
|
|
44
|
+
--background-color: lightgray;
|
|
45
|
+
--border-color: gray;
|
|
46
|
+
--text-color: black;
|
|
47
|
+
--title-font-size-desktop: 5rem;
|
|
48
|
+
--title-font-size-mobile: 2rem;
|
|
42
49
|
}
|
|
43
50
|
`
|
|
44
51
|
|
|
45
52
|
return (
|
|
46
53
|
<>
|
|
47
54
|
<div className="page-header-overrides">
|
|
48
|
-
<PageHeader title="
|
|
49
|
-
Here is some
|
|
55
|
+
<PageHeader title="Hello World" subtitle="Here is a subtitle">
|
|
56
|
+
Here is some content
|
|
50
57
|
</PageHeader>
|
|
51
58
|
<style>{cssVarsOverride}</style>
|
|
52
59
|
</div>
|