Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow option to preserve whitespace for Typography content #577

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/eleven-feet-knock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@cambly/syntax-core": minor
---

Add support to Typography for setting white-space CSS property.
19 changes: 18 additions & 1 deletion packages/syntax-core/src/Typography/Typography.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@
text-align: end;
}

/* Boldness */
/* Weight */

.regular {
font-weight: 400;
Expand Down Expand Up @@ -212,3 +212,20 @@
.p500 {
line-height: 115%;
}

/* White Space */
.inherit {
white-space: inherit;
}

.normal {
white-space: normal;
}

.nowrap {
white-space: nowrap;
}

.preLine {
white-space: pre-line;
}
38 changes: 38 additions & 0 deletions packages/syntax-core/src/Typography/Typography.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export default {
inline: false,
lineClamp: 0,
weight: "regular",
whiteSpace: "inherit",
tooltip: "",
},
argTypes: {
Expand Down Expand Up @@ -78,6 +79,10 @@ export default {
options: ["regular", "medium", "semiBold", "bold"],
control: { type: "radio" },
},
whiteSpace: {
options: ["inherit", "normal", "nowrap", "preLine"],
control: { type: "radio" },
},
},
tags: ["autodocs"],
} as Meta<typeof Typography>;
Expand Down Expand Up @@ -238,3 +243,36 @@ export const Weight: StoryObj<typeof Typography> = {
</>
),
};

const WHITE_SPACE_SAMPLE =
"\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sed nibh consectetur, posuere massa et, ultricies ipsum. Vivamus id placerat erat. Maecenas eleifend dolor vitae lobortis luctus. Nulla facilisi. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut vel maximus metus, a vestibulum elit. In at tellus luctus, blandit quam non, feugiat enim. In gravida blandit venenatis. Pellentesque sit amet suscipit eros. Sed euismod magna gravida eleifend dictum. Phasellus vitae sapien nec massa vestibulum consectetur vitae eget ipsum. Curabitur ut feugiat quam, ut pulvinar est.\n\n\t\t\tFusce gravida eleifend nibh scelerisque facilisis. Aliquam malesuada, magna ac suscipit finibus, enim turpis dignissim nisl, id bibendum sem risus sed mi. Nunc rutrum diam ut risus accumsan, et tristique metus eleifend. Integer placerat placerat orci vitae ullamcorper. Curabitur gravida ante ut ante auctor, et porttitor justo vulputate. Maecenas vitae nisi viverra, volutpat libero at, aliquet ipsum. Etiam fermentum vitae turpis eu placerat. Etiam vulputate tristique ipsum ut efficitur. Nullam non leo eu justo consectetur volutpat dignissim sit amet arcu. Integer nec velit id mauris cursus bibendum at nec nisl. Maecenas imperdiet gravida felis eget laoreet. Suspendisse potenti. Maecenas tincidunt, nisl non finibus ultricies, tellus tellus efficitur neque, a faucibus sapien turpis ac ipsum.\n\n\t\t\tUt ullamcorper lorem varius risus pellentesque pulvinar. Proin mi velit, auctor non quam id, euismod dignissim lacus. Duis a nulla risus. Nullam vestibulum eu lacus non viverra. Sed rhoncus mi nec orci imperdiet, quis euismod magna consequat. Fusce euismod a magna eget mattis. Aliquam convallis interdum neque in commodo. Quisque mattis neque eget metus condimentum pharetra. Maecenas aliquam maximus molestie. Proin scelerisque sodales dui nec mattis. Donec vehicula purus non tristique semper. Phasellus placerat erat ut quam semper gravida. Aliquam ac metus sit amet arcu scelerisque auctor. Vestibulum gravida mauris id metus viverra pulvinar. Vestibulum tincidunt lobortis vulputate.";

export const WhiteSpaceNormal: StoryObj<typeof Typography> = {
render: (args) => (
<>
<Typography {...args} whiteSpace="normal">
{WHITE_SPACE_SAMPLE}
</Typography>
</>
),
};

export const WhiteSpaceNowrap: StoryObj<typeof Typography> = {
render: (args) => (
<>
<Typography {...args} whiteSpace="nowrap">
{WHITE_SPACE_SAMPLE}
</Typography>
</>
),
};

export const WhiteSpacePreLine: StoryObj<typeof Typography> = {
render: (args) => (
<>
<Typography {...args} whiteSpace="preLine">
{WHITE_SPACE_SAMPLE}
</Typography>
</>
),
};
10 changes: 10 additions & 0 deletions packages/syntax-core/src/Typography/Typography.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,14 @@ const Typography = forwardRef<
* @defaultValue "regular"
*/
weight?: "regular" | "medium" | "semiBold" | "bold";
/**
* Controls how whitespace within the element is handled.
*
* See: https://developer.mozilla.org/en-US/docs/Web/CSS/white-space
*
* @defaultValue "inherit"
*/
whiteSpace?: "inherit" | "normal" | "nowrap" | "preLine";
}
>(function Typography(
{
Expand All @@ -144,6 +152,7 @@ const Typography = forwardRef<
transform = "none",
underline = false,
weight = "regular",
whiteSpace = "inherit",
},
ref,
): ReactElement {
Expand All @@ -156,6 +165,7 @@ const Typography = forwardRef<
styles.typography,
styles[align],
styles[weight],
styles[whiteSpace],
fontStyle === "serif" ? styles.serif : styles.sansSerif,
textColor(color),
inline && styles.inline,
Expand Down
Loading