@bloom-housing/ui-components 10.0.15 → 11.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 (30) hide show
  1. package/dist/__tests__/blocks/FormCard.test.js +2 -4
  2. package/dist/__tests__/blocks/FormCard.test.js.map +1 -1
  3. package/dist/src/blocks/FormCard.d.ts +1 -5
  4. package/dist/src/blocks/FormCard.js +3 -4
  5. package/dist/src/blocks/FormCard.js.map +1 -1
  6. package/dist/src/blocks/FormCard.stories.d.ts +6 -0
  7. package/dist/src/blocks/FormCard.stories.js +9 -0
  8. package/dist/src/blocks/FormCard.stories.js.map +1 -0
  9. package/dist/src/page_components/listing/ListingDetailHeader.d.ts +1 -0
  10. package/dist/src/page_components/listing/ListingDetailHeader.js +4 -2
  11. package/dist/src/page_components/listing/ListingDetailHeader.js.map +1 -1
  12. package/dist/src/page_components/listing/ListingDetailHeader.stories.d.ts +9 -0
  13. package/dist/src/page_components/listing/ListingDetailHeader.stories.js +14 -0
  14. package/dist/src/page_components/listing/ListingDetailHeader.stories.js.map +1 -0
  15. package/dist/src/page_components/listing/ListingDetails.d.ts +1 -0
  16. package/dist/src/page_components/listing/ListingDetails.js +2 -1
  17. package/dist/src/page_components/listing/ListingDetails.js.map +1 -1
  18. package/package.json +1 -1
  19. package/src/blocks/FormCard.scss +21 -10
  20. package/src/blocks/FormCard.stories.tsx +12 -0
  21. package/src/blocks/FormCard.tsx +5 -12
  22. package/src/global/app-css.scss +0 -1
  23. package/src/global/mixins.scss +11 -0
  24. package/src/page_components/listing/ContentAccordion.scss +6 -0
  25. package/src/page_components/listing/ListingDetailHeader.scss +97 -0
  26. package/src/page_components/listing/ListingDetailHeader.stories.tsx +24 -0
  27. package/src/page_components/listing/ListingDetailHeader.tsx +5 -2
  28. package/src/page_components/listing/ListingDetails.scss +11 -0
  29. package/src/page_components/listing/ListingDetails.tsx +2 -1
  30. package/src/global/headers.scss +0 -93
@@ -1,13 +1,11 @@
1
1
  import React from "react";
2
2
  import { render, cleanup } from "@testing-library/react";
3
3
  import { FormCard } from "../../src/blocks/FormCard";
4
+ import Heading from "../../src/text/Heading";
4
5
  afterEach(cleanup);
5
6
  describe("<FormCard>", function () {
6
7
  it("can render with a header", function () {
7
- var getByText = render(React.createElement(FormCard, { header: {
8
- isVisible: true,
9
- title: "Header Text",
10
- } }, "Children go here")).getByText;
8
+ var getByText = render(React.createElement(FormCard, { header: React.createElement(Heading, null, "Header Text") }, "Children go here")).getByText;
11
9
  expect(getByText("Header Text")).not.toBeNull();
12
10
  });
13
11
  it("can apply a custom class", function () {
@@ -1 +1 @@
1
- {"version":3,"file":"FormCard.test.js","sourceRoot":"","sources":["../../../__tests__/blocks/FormCard.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEpD,SAAS,CAAC,OAAO,CAAC,CAAA;AAElB,QAAQ,CAAC,YAAY,EAAE;IACrB,EAAE,CAAC,0BAA0B,EAAE;QACrB,IAAA,SAAS,GAAK,MAAM,CAC1B,oBAAC,QAAQ,IACP,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,aAAa;aACrB,uBAGQ,CACZ,UATgB,CAShB;QACD,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;IACjD,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,0BAA0B,EAAE;QACrB,IAAA,SAAS,GAAK,MAAM,CAAC,oBAAC,QAAQ,IAAC,SAAS,EAAE,cAAc,uBAA6B,CAAC,UAA7E,CAA6E;QAC9F,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"FormCard.test.js","sourceRoot":"","sources":["../../../__tests__/blocks/FormCard.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,OAAO,MAAM,wBAAwB,CAAA;AAE5C,SAAS,CAAC,OAAO,CAAC,CAAA;AAElB,QAAQ,CAAC,YAAY,EAAE;IACrB,EAAE,CAAC,0BAA0B,EAAE;QACrB,IAAA,SAAS,GAAK,MAAM,CAC1B,oBAAC,QAAQ,IAAC,MAAM,EAAE,oBAAC,OAAO,sBAAsB,uBAA6B,CAC9E,UAFgB,CAEhB;QACD,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;IACjD,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,0BAA0B,EAAE;QACrB,IAAA,SAAS,GAAK,MAAM,CAAC,oBAAC,QAAQ,IAAC,SAAS,EAAE,cAAc,uBAA6B,CAAC,UAA7E,CAA6E;QAC9F,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,13 +1,9 @@
1
1
  import * as React from "react";
2
2
  import "./FormCard.scss";
3
3
  export interface FormCardProps {
4
- header?: FormCardHeader;
4
+ header?: React.ReactNode;
5
5
  children: React.ReactNode;
6
6
  className?: string;
7
7
  }
8
- export interface FormCardHeader {
9
- isVisible: boolean;
10
- title: string;
11
- }
12
8
  declare const FormCard: (props: FormCardProps) => JSX.Element;
13
9
  export { FormCard as default, FormCard };
@@ -1,12 +1,11 @@
1
1
  import * as React from "react";
2
2
  import "./FormCard.scss";
3
3
  var FormCard = function (props) {
4
- var _a;
5
- var classNames = props.className ? "".concat(props.className, " form-card") : "form-card";
6
- if ((_a = props.header) === null || _a === void 0 ? void 0 : _a.isVisible) {
4
+ var classNames = "form-card ".concat(props.className || "");
5
+ if (props.header) {
7
6
  return (React.createElement("article", { className: classNames },
8
7
  React.createElement("div", { className: "form-card__header" },
9
- React.createElement("header", { className: "form-card__header_group" }, props.header.title && (React.createElement("h1", { className: "form-card__header_title" }, props.header.title))),
8
+ React.createElement("header", { className: "form-card__header_group form-card__header_title" }, props.header),
10
9
  React.createElement("div", { className: "form-card__header_nav" }, props.children))));
11
10
  }
12
11
  return React.createElement("article", { className: classNames }, props.children);
@@ -1 +1 @@
1
- {"version":3,"file":"FormCard.js","sourceRoot":"","sources":["../../../src/blocks/FormCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,iBAAiB,CAAA;AAaxB,IAAM,QAAQ,GAAG,UAAC,KAAoB;;IACpC,IAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,UAAG,KAAK,CAAC,SAAS,eAAY,CAAC,CAAC,CAAC,WAAW,CAAA;IACjF,IAAI,MAAA,KAAK,CAAC,MAAM,0CAAE,SAAS,EAAE;QAC3B,OAAO,CACL,iCAAS,SAAS,EAAE,UAAU;YAC5B,6BAAK,SAAS,EAAC,mBAAmB;gBAChC,gCAAQ,SAAS,EAAC,yBAAyB,IACxC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CACrB,4BAAI,SAAS,EAAC,yBAAyB,IAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAM,CAClE,CACM;gBAET,6BAAK,SAAS,EAAC,uBAAuB,IAAE,KAAK,CAAC,QAAQ,CAAO,CACzD,CACE,CACX,CAAA;KACF;IAED,OAAO,iCAAS,SAAS,EAAE,UAAU,IAAG,KAAK,CAAC,QAAQ,CAAW,CAAA;AACnE,CAAC,CAAA;AAED,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"FormCard.js","sourceRoot":"","sources":["../../../src/blocks/FormCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,iBAAiB,CAAA;AAQxB,IAAM,QAAQ,GAAG,UAAC,KAAoB;IACpC,IAAM,UAAU,GAAG,oBAAa,KAAK,CAAC,SAAS,IAAI,EAAE,CAAE,CAAA;IACvD,IAAI,KAAK,CAAC,MAAM,EAAE;QAChB,OAAO,CACL,iCAAS,SAAS,EAAE,UAAU;YAC5B,6BAAK,SAAS,EAAC,mBAAmB;gBAChC,gCAAQ,SAAS,EAAC,iDAAiD,IAChE,KAAK,CAAC,MAAM,CACN;gBAET,6BAAK,SAAS,EAAC,uBAAuB,IAAE,KAAK,CAAC,QAAQ,CAAO,CACzD,CACE,CACX,CAAA;KACF;IAED,OAAO,iCAAS,SAAS,EAAE,UAAU,IAAG,KAAK,CAAC,QAAQ,CAAW,CAAA;AACnE,CAAC,CAAA;AAED,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ title: string;
3
+ };
4
+ export default _default;
5
+ export declare const defaultCard: () => JSX.Element;
6
+ export declare const noHeader: () => JSX.Element;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import FormCard from "./FormCard";
3
+ import Heading from "../text/Heading";
4
+ export default {
5
+ title: "Blocks/Form Card",
6
+ };
7
+ export var defaultCard = function () { return (React.createElement(FormCard, { header: React.createElement(Heading, { priority: 1 }, "Header") }, "Children")); };
8
+ export var noHeader = function () { return React.createElement(FormCard, null, "Children"); };
9
+ //# sourceMappingURL=FormCard.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormCard.stories.js","sourceRoot":"","sources":["../../../src/blocks/FormCard.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,OAAO,MAAM,iBAAiB,CAAA;AACrC,eAAe;IACb,KAAK,EAAE,kBAAkB;CAC1B,CAAA;AAED,MAAM,CAAC,IAAM,WAAW,GAAG,cAAM,OAAA,CAC/B,oBAAC,QAAQ,IAAC,MAAM,EAAE,oBAAC,OAAO,IAAC,QAAQ,EAAE,CAAC,aAAkB,eAAqB,CAC9E,EAFgC,CAEhC,CAAA;AAED,MAAM,CAAC,IAAM,QAAQ,GAAG,cAAM,OAAA,oBAAC,QAAQ,mBAAoB,EAA7B,CAA6B,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import * as React from "react";
2
+ import "./ListingDetailHeader.scss";
2
3
  export interface ListingDetailHeaderProps {
3
4
  imageAlt: string;
4
5
  imageSrc: string;
@@ -1,7 +1,9 @@
1
1
  import * as React from "react";
2
2
  import { Icon } from "../../icons/Icon";
3
- var ListingDetailHeader = function (props) { return (React.createElement("header", { className: props.hideHeader ? "detail-header md:hidden" : "detail-header" },
4
- React.createElement("img", { alt: props.imageAlt, className: "detail-header__image ", src: props.imageSrc }),
3
+ import "./ListingDetailHeader.scss";
4
+ var ListingDetailHeader = function (props) { return (React.createElement("header", { className: "detail-header ".concat(props.hideHeader ? "md:hidden" : "") },
5
+ React.createElement("span", { className: "detail-header__image-container" },
6
+ React.createElement("img", { alt: props.imageAlt, className: "detail-header__image ", src: props.imageSrc })),
5
7
  React.createElement("hgroup", { className: "detail-header__hgroup" },
6
8
  React.createElement("h2", { className: "detail-header__title" }, props.title),
7
9
  React.createElement("span", { className: "detail-header__subtitle" }, props.subtitle),
@@ -1 +1 @@
1
- {"version":3,"file":"ListingDetailHeader.js","sourceRoot":"","sources":["../../../../src/page_components/listing/ListingDetailHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAYvC,IAAM,mBAAmB,GAAG,UAAC,KAA+B,IAAK,OAAA,CAC/D,gCAAQ,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,eAAe;IAC/E,6BAAK,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAC,uBAAuB,EAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAI;IACnF,gCAAQ,SAAS,EAAC,uBAAuB;QACvC,4BAAI,SAAS,EAAC,sBAAsB,IAAE,KAAK,CAAC,KAAK,CAAM;QACvD,8BAAM,SAAS,EAAC,yBAAyB,IAAE,KAAK,CAAC,QAAQ,CAAQ;QACjE,oBAAC,IAAI,IAAC,MAAM,EAAC,WAAW,EAAC,IAAI,EAAC,QAAQ,GAAG,CAClC,CACF,CACV,EATgE,CAShE,CAAA;AAED,OAAO,EAAE,mBAAmB,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
1
+ {"version":3,"file":"ListingDetailHeader.js","sourceRoot":"","sources":["../../../../src/page_components/listing/ListingDetailHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,4BAA4B,CAAA;AAYnC,IAAM,mBAAmB,GAAG,UAAC,KAA+B,IAAK,OAAA,CAC/D,gCAAQ,SAAS,EAAE,wBAAiB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAE;IACvE,8BAAM,SAAS,EAAE,gCAAgC;QAC/C,6BAAK,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAC,uBAAuB,EAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAI,CAC9E;IACP,gCAAQ,SAAS,EAAC,uBAAuB;QACvC,4BAAI,SAAS,EAAC,sBAAsB,IAAE,KAAK,CAAC,KAAK,CAAM;QACvD,8BAAM,SAAS,EAAC,yBAAyB,IAAE,KAAK,CAAC,QAAQ,CAAQ;QACjE,oBAAC,IAAI,IAAC,MAAM,EAAC,WAAW,EAAC,IAAI,EAAC,QAAQ,GAAG,CAClC,CACF,CACV,EAXgE,CAWhE,CAAA;AAED,OAAO,EAAE,mBAAmB,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { BADGES } from "../../../.storybook/constants";
2
+ declare const _default: {
3
+ title: string;
4
+ parameters: {
5
+ badges: BADGES[];
6
+ };
7
+ };
8
+ export default _default;
9
+ export declare const Default: () => JSX.Element;
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ import { BADGES } from "../../../.storybook/constants";
3
+ import { ListingDetailHeader } from "./ListingDetailHeader";
4
+ export default {
5
+ title: "Listing/ListingDetailHeader 🚩",
6
+ parameters: {
7
+ badges: [BADGES.GEN2],
8
+ },
9
+ };
10
+ export var Default = function () {
11
+ return (React.createElement("div", { style: { maxWidth: "500px" } },
12
+ React.createElement(ListingDetailHeader, { imageAlt: "Building", imageSrc: "https://res.cloudinary.com/exygy/image/upload/w_400,c_limit,q_65/dev/listing-eligibility_advdnd.jpg", title: "Title", subtitle: "Subtitle" })));
13
+ };
14
+ //# sourceMappingURL=ListingDetailHeader.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListingDetailHeader.stories.js","sourceRoot":"","sources":["../../../../src/page_components/listing/ListingDetailHeader.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,eAAe;IACb,KAAK,EAAE,gCAAgC;IACvC,UAAU,EAAE;QACV,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;KACtB;CACF,CAAA;AAED,MAAM,CAAC,IAAM,OAAO,GAAG;IACrB,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC/B,oBAAC,mBAAmB,IAClB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAC,qGAAqG,EAC9G,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,UAAU,GACpB,CACE,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -1,3 +1,4 @@
1
1
  import { ListingDetailHeaderProps } from "./ListingDetailHeader";
2
+ import "./ListingDetails.scss";
2
3
  export declare const ListingDetails: (props: any) => JSX.Element;
3
4
  export declare const ListingDetailItem: (props: ListingDetailHeaderProps) => JSX.Element;
@@ -1,7 +1,8 @@
1
1
  import * as React from "react";
2
2
  import { ResponsiveContentList, ResponsiveContentItem, ResponsiveContentItemHeader, ResponsiveContentItemBody, } from "../../sections/ResponsiveContentList";
3
3
  import { ListingDetailHeader } from "./ListingDetailHeader";
4
- export var ListingDetails = function (props) { return (React.createElement("div", { className: "w-full md:w-2/3 md:pr-8 md:pt-8" },
4
+ import "./ListingDetails.scss";
5
+ export var ListingDetails = function (props) { return (React.createElement("div", { className: "details" },
5
6
  React.createElement(ResponsiveContentList, null, props.children))); };
6
7
  export var ListingDetailItem = function (props) { return (React.createElement(ResponsiveContentItem, { desktopClass: props.desktopClass },
7
8
  React.createElement(ResponsiveContentItemHeader, null,
@@ -1 +1 @@
1
- {"version":3,"file":"ListingDetails.js","sourceRoot":"","sources":["../../../../src/page_components/listing/ListingDetails.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAA4B,MAAM,uBAAuB,CAAA;AAErF,MAAM,CAAC,IAAM,cAAc,GAAG,UAAC,KAAU,IAAK,OAAA,CAC5C,6BAAK,SAAS,EAAC,iCAAiC;IAC9C,oBAAC,qBAAqB,QAAE,KAAK,CAAC,QAAQ,CAAyB,CAC3D,CACP,EAJ6C,CAI7C,CAAA;AAED,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,KAA+B,IAAK,OAAA,CACpE,oBAAC,qBAAqB,IAAC,YAAY,EAAE,KAAK,CAAC,YAAY;IACrD,oBAAC,2BAA2B;QAC1B,oBAAC,mBAAmB,IAClB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,UAAU,EAAE,KAAK,CAAC,UAAU,GAC5B,CAC0B;IAC9B,oBAAC,yBAAyB,QAAE,KAAK,CAAC,QAAQ,CAA6B,CACjD,CACzB,EAbqE,CAarE,CAAA"}
1
+ {"version":3,"file":"ListingDetails.js","sourceRoot":"","sources":["../../../../src/page_components/listing/ListingDetails.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAA4B,MAAM,uBAAuB,CAAA;AACrF,OAAO,uBAAuB,CAAA;AAE9B,MAAM,CAAC,IAAM,cAAc,GAAG,UAAC,KAAU,IAAK,OAAA,CAC5C,6BAAK,SAAS,EAAC,SAAS;IACtB,oBAAC,qBAAqB,QAAE,KAAK,CAAC,QAAQ,CAAyB,CAC3D,CACP,EAJ6C,CAI7C,CAAA;AAED,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,KAA+B,IAAK,OAAA,CACpE,oBAAC,qBAAqB,IAAC,YAAY,EAAE,KAAK,CAAC,YAAY;IACrD,oBAAC,2BAA2B;QAC1B,oBAAC,mBAAmB,IAClB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,UAAU,EAAE,KAAK,CAAC,UAAU,GAC5B,CAC0B;IAC9B,oBAAC,yBAAyB,QAAE,KAAK,CAAC,QAAQ,CAA6B,CACjD,CACzB,EAbqE,CAarE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloom-housing/ui-components",
3
- "version": "10.0.15",
3
+ "version": "11.0.0",
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",
@@ -1,3 +1,5 @@
1
+ @import "../global/mixins.scss";
2
+
1
3
  .form-card {
2
4
  @apply bg-white;
3
5
 
@@ -70,6 +72,7 @@
70
72
 
71
73
  @screen print {
72
74
  @apply py-2;
75
+ @apply px-0;
73
76
  }
74
77
  }
75
78
 
@@ -87,11 +90,16 @@
87
90
  }
88
91
 
89
92
  .form-card__group {
90
- @apply px-8;
93
+ @screen md {
94
+ @apply px-8;
95
+ }
96
+
97
+ @screen print {
98
+ @apply px-0;
99
+ }
91
100
  }
92
101
 
93
102
  .form-card__header {
94
- @apply text-white;
95
103
  @apply text-center;
96
104
 
97
105
  @screen md {
@@ -100,7 +108,10 @@
100
108
  }
101
109
 
102
110
  .form-card__header_group {
103
- @apply flex justify-center items-center;
111
+ @apply text-white;
112
+ @apply flex;
113
+ @apply justify-center;
114
+ @apply items-center;
104
115
  @apply bg-primary;
105
116
  @apply p-4;
106
117
  @apply h-16;
@@ -112,14 +123,14 @@
112
123
  @screen print {
113
124
  @apply py-0;
114
125
  }
115
- }
116
126
 
117
- .form-card__header_title {
118
- @apply text-xl;
119
- @apply font-alt-sans;
120
- @apply font-bold;
121
- @apply uppercase;
122
- @apply mb-0;
127
+ @include headings {
128
+ @apply text-xl;
129
+ @apply font-alt-sans;
130
+ @apply font-bold;
131
+ @apply uppercase;
132
+ @apply mb-0;
133
+ }
123
134
  }
124
135
 
125
136
  .form-card__header_nav {
@@ -0,0 +1,12 @@
1
+ import React from "react"
2
+ import FormCard from "./FormCard"
3
+ import Heading from "../text/Heading"
4
+ export default {
5
+ title: "Blocks/Form Card",
6
+ }
7
+
8
+ export const defaultCard = () => (
9
+ <FormCard header={<Heading priority={1}>Header</Heading>}>Children</FormCard>
10
+ )
11
+
12
+ export const noHeader = () => <FormCard>Children</FormCard>
@@ -2,26 +2,19 @@ import * as React from "react"
2
2
  import "./FormCard.scss"
3
3
 
4
4
  export interface FormCardProps {
5
- header?: FormCardHeader
5
+ header?: React.ReactNode
6
6
  children: React.ReactNode
7
7
  className?: string
8
8
  }
9
9
 
10
- export interface FormCardHeader {
11
- isVisible: boolean
12
- title: string
13
- }
14
-
15
10
  const FormCard = (props: FormCardProps) => {
16
- const classNames = props.className ? `${props.className} form-card` : "form-card"
17
- if (props.header?.isVisible) {
11
+ const classNames = `form-card ${props.className || ""}`
12
+ if (props.header) {
18
13
  return (
19
14
  <article className={classNames}>
20
15
  <div className="form-card__header">
21
- <header className="form-card__header_group">
22
- {props.header.title && (
23
- <h1 className="form-card__header_title">{props.header.title}</h1>
24
- )}
16
+ <header className="form-card__header_group form-card__header_title">
17
+ {props.header}
25
18
  </header>
26
19
 
27
20
  <div className="form-card__header_nav">{props.children}</div>
@@ -54,7 +54,6 @@ main {
54
54
  @import "mixins.scss";
55
55
  @import "markdown.scss";
56
56
  @import "text.scss";
57
- @import "headers.scss";
58
57
  @import "blocks.scss";
59
58
  @import "accordion.scss";
60
59
  @import "accessibility.scss";
@@ -199,3 +199,14 @@
199
199
  overflow: hidden;
200
200
  text-overflow: ellipsis;
201
201
  }
202
+
203
+ @mixin headings {
204
+ h1,
205
+ h2,
206
+ h3,
207
+ h4,
208
+ h5,
209
+ h6 {
210
+ @content;
211
+ }
212
+ }
@@ -32,3 +32,9 @@
32
32
  .accordion-gray-theme__bar.accordion-open {
33
33
  border-radius: 8px 8px 0px 0px;
34
34
  }
35
+
36
+ .toggle-header-content {
37
+ @apply font-sans;
38
+ @apply text-sm;
39
+ @apply text-gray-800;
40
+ }
@@ -0,0 +1,97 @@
1
+ .detail-header {
2
+ --text-color: var(--bloom-color-primary-darker);
3
+ --subtitle-desktop-font-size: var(--bloom-font-size-sm);
4
+ --subtitle-mobile-font-size: var(--bloom-font-size-sm);
5
+ --title-desktop-font-size: var(--bloom-font-size-2xl);
6
+ --title-mobile-font-size: var(--bloom-font-size-sm);
7
+ --title-desktop-font-family: var(--bloom-font-serif);
8
+ --title-mobile-font-family: var(--bloom-font-alt-sans);
9
+ position: relative;
10
+ padding: var(--bloom-s4) var(--bloom-s4) var(--bloom-s6) var(--bloom-s4);
11
+ border-bottom: 1px solid var(--bloom-color-gray-400);
12
+ color: var(--text-color);
13
+ display: flex;
14
+ justify-content: start;
15
+
16
+ @media (min-width: $screen-md) {
17
+ padding-top: 0;
18
+ padding-bottom: var(--bloom-s8);
19
+ border: none;
20
+ color: var(--bloom-color-gray-800);
21
+ }
22
+ }
23
+
24
+ .detail-header__image {
25
+ position: absolute;
26
+ width: var(--bloom-s12);
27
+ margin-right: var(--bloom-s2);
28
+ margin-left: 0;
29
+
30
+ @media (min-width: $screen-md) {
31
+ left: 0;
32
+ }
33
+ }
34
+
35
+ .detail-header__image-container {
36
+ width: auto;
37
+ [dir="rtl"] & {
38
+ width: var(--bloom-s14);
39
+ }
40
+ }
41
+
42
+ .detail-header__hgroup {
43
+ margin-left: var(--bloom-s12);
44
+ padding-left: var(--bloom-s4);
45
+
46
+ @media (min-width: $screen-md) {
47
+ border-left: 2px solid var(--bloom-color-primary);
48
+ }
49
+
50
+ [dir="rtl"] & {
51
+ margin-right: var(--bloom-s4);
52
+ }
53
+
54
+ .ui-icon {
55
+ position: absolute;
56
+ top: var(--bloom-s4);
57
+ right: var(--bloom-s4);
58
+
59
+ [dir="rtl"] & {
60
+ left: var(--bloom-s4);
61
+ right: auto;
62
+ }
63
+
64
+ @media (min-width: $screen-md) {
65
+ display: none;
66
+ }
67
+
68
+ svg {
69
+ width: var(--bloom-s3);
70
+ height: var(--bloom-s3);
71
+ }
72
+ }
73
+ }
74
+
75
+ .detail-header__title {
76
+ font-family: var(--title-mobile-font-family);
77
+ text-transform: uppercase;
78
+ font-size: var(--title-mobile-font-size);
79
+ letter-spacing: 0.1rem;
80
+ color: var(--text-color);
81
+ @media (min-width: $screen-md) {
82
+ font-family: var(--title-desktop-font-family);
83
+ font-size: var(--title-desktop-font-size);
84
+ text-transform: none;
85
+ letter-spacing: 0rem;
86
+ color: var(--bloom-color-gray-950);
87
+ }
88
+ }
89
+
90
+ .detail-header__subtitle {
91
+ font-size: var(--subtitle-mobile-font-size);
92
+
93
+ @media (min-width: $screen-md) {
94
+ color: var(--bloom-color-gray-800);
95
+ font-size: var(--subtitle-desktop-font-size);
96
+ }
97
+ }
@@ -0,0 +1,24 @@
1
+ import * as React from "react"
2
+ import { BADGES } from "../../../.storybook/constants"
3
+
4
+ import { ListingDetailHeader } from "./ListingDetailHeader"
5
+
6
+ export default {
7
+ title: "Listing/ListingDetailHeader 🚩",
8
+ parameters: {
9
+ badges: [BADGES.GEN2],
10
+ },
11
+ }
12
+
13
+ export const Default = () => {
14
+ return (
15
+ <div style={{ maxWidth: "500px" }}>
16
+ <ListingDetailHeader
17
+ imageAlt={"Building"}
18
+ imageSrc="https://res.cloudinary.com/exygy/image/upload/w_400,c_limit,q_65/dev/listing-eligibility_advdnd.jpg"
19
+ title={"Title"}
20
+ subtitle={"Subtitle"}
21
+ />
22
+ </div>
23
+ )
24
+ }
@@ -1,5 +1,6 @@
1
1
  import * as React from "react"
2
2
  import { Icon } from "../../icons/Icon"
3
+ import "./ListingDetailHeader.scss"
3
4
 
4
5
  export interface ListingDetailHeaderProps {
5
6
  imageAlt: string
@@ -12,8 +13,10 @@ export interface ListingDetailHeaderProps {
12
13
  }
13
14
 
14
15
  const ListingDetailHeader = (props: ListingDetailHeaderProps) => (
15
- <header className={props.hideHeader ? "detail-header md:hidden" : "detail-header"}>
16
- <img alt={props.imageAlt} className="detail-header__image " src={props.imageSrc} />
16
+ <header className={`detail-header ${props.hideHeader ? "md:hidden" : ""}`}>
17
+ <span className={"detail-header__image-container"}>
18
+ <img alt={props.imageAlt} className="detail-header__image " src={props.imageSrc} />
19
+ </span>
17
20
  <hgroup className="detail-header__hgroup">
18
21
  <h2 className="detail-header__title">{props.title}</h2>
19
22
  <span className="detail-header__subtitle">{props.subtitle}</span>
@@ -0,0 +1,11 @@
1
+ .details {
2
+ --desktop-width: calc(100% * (2 / 3));
3
+ --mobile-width: 100%;
4
+
5
+ width: var(--mobile-width);
6
+ @media (min-width: $screen-md) {
7
+ width: var(--desktop-width);
8
+ padding-right: var(--bloom-s8);
9
+ padding-top: var(--bloom-s8);
10
+ }
11
+ }
@@ -6,9 +6,10 @@ import {
6
6
  ResponsiveContentItemBody,
7
7
  } from "../../sections/ResponsiveContentList"
8
8
  import { ListingDetailHeader, ListingDetailHeaderProps } from "./ListingDetailHeader"
9
+ import "./ListingDetails.scss"
9
10
 
10
11
  export const ListingDetails = (props: any) => (
11
- <div className="w-full md:w-2/3 md:pr-8 md:pt-8">
12
+ <div className="details">
12
13
  <ResponsiveContentList>{props.children}</ResponsiveContentList>
13
14
  </div>
14
15
  )
@@ -1,93 +0,0 @@
1
- // Listing Detail
2
- .detail-header {
3
- @apply relative;
4
- @apply pr-4;
5
- @apply pb-6;
6
- @apply pl-4;
7
- @apply pt-4;
8
- @apply border-b;
9
- @apply border-gray-400;
10
- @apply text-primary-darker;
11
-
12
- @screen md {
13
- @apply pt-0;
14
- @apply pb-8;
15
- @apply text-xs;
16
- @apply border-none;
17
- @apply text-gray-800;
18
- }
19
- }
20
-
21
- .detail-header__image {
22
- @apply absolute;
23
- @apply w-12;
24
- @apply mr-2;
25
-
26
- @screen md {
27
- @apply left-0;
28
- }
29
- }
30
-
31
- .detail-header__hgroup {
32
- @apply ml-12;
33
- @apply pl-4;
34
-
35
- @screen md {
36
- @apply border-l-2;
37
- @apply border-primary;
38
- }
39
-
40
- .ui-icon {
41
- @apply absolute;
42
- top: 1rem;
43
- right: 1rem;
44
-
45
- @screen md {
46
- @apply hidden;
47
- }
48
-
49
- svg {
50
- @apply w-3;
51
- @apply h-3;
52
- }
53
- }
54
- }
55
-
56
- .detail-header__title {
57
- @apply font-alt-sans;
58
- @apply uppercase;
59
- @apply text-sm;
60
- @apply tracking-widest;
61
- @apply text-primary-darker;
62
-
63
- @screen md {
64
- @apply text-black;
65
- @apply font-serif;
66
- @apply text-2xl;
67
- @apply normal-case;
68
- @apply tracking-normal;
69
- @apply text-gray-950;
70
- }
71
- }
72
-
73
- .detail-header__subtitle {
74
- @apply text-sm;
75
-
76
- @screen md {
77
- @apply text-gray-750;
78
- }
79
- }
80
-
81
- .toggle-header {
82
- @apply bg-primary-light;
83
- @apply p-4;
84
- @apply border-b;
85
- @apply border-primary;
86
- display: flex;
87
- justify-content: space-between;
88
- }
89
- .toggle-header-content {
90
- @apply font-sans;
91
- @apply text-sm;
92
- @apply text-gray-800;
93
- }