diff --git a/src/assets/images/app/projects/sistent/font-pair-dark.png b/src/assets/images/app/projects/sistent/font-pair-dark.png new file mode 100644 index 000000000000..d1baeadcc93e Binary files /dev/null and b/src/assets/images/app/projects/sistent/font-pair-dark.png differ diff --git a/src/assets/images/app/projects/sistent/font-pair-light.png b/src/assets/images/app/projects/sistent/font-pair-light.png new file mode 100644 index 000000000000..fbcfc1905d1b Binary files /dev/null and b/src/assets/images/app/projects/sistent/font-pair-light.png differ diff --git a/src/assets/images/app/projects/sistent/type-details-1-dark.png b/src/assets/images/app/projects/sistent/type-details-1-dark.png new file mode 100644 index 000000000000..5a46eacf4be5 Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-details-1-dark.png differ diff --git a/src/assets/images/app/projects/sistent/type-details-1-light.png b/src/assets/images/app/projects/sistent/type-details-1-light.png new file mode 100644 index 000000000000..86cf137677c0 Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-details-1-light.png differ diff --git a/src/assets/images/app/projects/sistent/type-scale-1-dark.png b/src/assets/images/app/projects/sistent/type-scale-1-dark.png new file mode 100644 index 000000000000..25b70ceb180a Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-scale-1-dark.png differ diff --git a/src/assets/images/app/projects/sistent/type-scale-1-light.png b/src/assets/images/app/projects/sistent/type-scale-1-light.png new file mode 100644 index 000000000000..67a52c74dc5d Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-scale-1-light.png differ diff --git a/src/assets/images/app/projects/sistent/type-scale-2-dark.png b/src/assets/images/app/projects/sistent/type-scale-2-dark.png new file mode 100644 index 000000000000..d4dfebff0be8 Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-scale-2-dark.png differ diff --git a/src/assets/images/app/projects/sistent/type-scale-2-light.png b/src/assets/images/app/projects/sistent/type-scale-2-light.png new file mode 100644 index 000000000000..b12b3b53c92c Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-scale-2-light.png differ diff --git a/src/assets/images/app/projects/sistent/type-scale-3-dark.png b/src/assets/images/app/projects/sistent/type-scale-3-dark.png new file mode 100644 index 000000000000..0518575fbe6e Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-scale-3-dark.png differ diff --git a/src/assets/images/app/projects/sistent/type-scale-3-light.png b/src/assets/images/app/projects/sistent/type-scale-3-light.png new file mode 100644 index 000000000000..cfa12f90caa2 Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-scale-3-light.png differ diff --git a/src/assets/images/app/projects/sistent/type-table-1-dark.png b/src/assets/images/app/projects/sistent/type-table-1-dark.png new file mode 100644 index 000000000000..14093a8fffef Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-table-1-dark.png differ diff --git a/src/assets/images/app/projects/sistent/type-table-1-light.png b/src/assets/images/app/projects/sistent/type-table-1-light.png new file mode 100644 index 000000000000..58e90e71c5f7 Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-table-1-light.png differ diff --git a/src/assets/images/app/projects/sistent/type-table-2-dark.png b/src/assets/images/app/projects/sistent/type-table-2-dark.png new file mode 100644 index 000000000000..bd74f313da6e Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-table-2-dark.png differ diff --git a/src/assets/images/app/projects/sistent/type-table-2-light.png b/src/assets/images/app/projects/sistent/type-table-2-light.png new file mode 100644 index 000000000000..5c23906fc5c4 Binary files /dev/null and b/src/assets/images/app/projects/sistent/type-table-2-light.png differ diff --git a/src/components/SistentNavigation/content.js b/src/components/SistentNavigation/content.js index 7fc89424582e..bde227f75937 100644 --- a/src/components/SistentNavigation/content.js +++ b/src/components/SistentNavigation/content.js @@ -2,5 +2,6 @@ export const content = [ { id: 0, link: "/projects/sistent/about", text: "About Sistent" }, { id: 1, link: "/projects/sistent/identity/color", text: "Colors" }, { id: 2, link: "/projects/sistent/identity/spacing", text: "Spacing" }, - { id: 3, link: "/projects/sistent/components", text: "Components" }, + { id: 3, link: "/projects/sistent/identity/typography", text: "Typography" }, + { id: 4, link: "/projects/sistent/components", text: "Components" }, ]; diff --git a/src/components/SistentNavigation/index.js b/src/components/SistentNavigation/index.js index 2875621a5a2c..5171e7fcd97a 100644 --- a/src/components/SistentNavigation/index.js +++ b/src/components/SistentNavigation/index.js @@ -82,6 +82,15 @@ const TOC = () => { Spacing +
  • + + Typography + +
  • )} diff --git a/src/pages/projects/sistent/identity/typography.js b/src/pages/projects/sistent/identity/typography.js new file mode 100644 index 000000000000..cd9eb97c927b --- /dev/null +++ b/src/pages/projects/sistent/identity/typography.js @@ -0,0 +1,8 @@ +import React from "react"; +import SistentTypography from "../../../../sections/Projects/Sistent/identity/typography"; + +const SistentTypographyPage = () => { + return ; +}; + +export default SistentTypographyPage; diff --git a/src/sections/Projects/Sistent/identity/typography/code.js b/src/sections/Projects/Sistent/identity/typography/code.js new file mode 100644 index 000000000000..8755a1170b33 --- /dev/null +++ b/src/sections/Projects/Sistent/identity/typography/code.js @@ -0,0 +1,55 @@ +import React from "react"; + +import TypeTable1 from "../../../../../assets/images/app/projects/sistent/type-table-1-light.png"; +import TypeTable1Dark from "../../../../../assets/images/app/projects/sistent/type-table-1-dark.png"; +import TypeTable2 from "../../../../../assets/images/app/projects/sistent/type-table-2-light.png"; +import TypeTable2Dark from "../../../../../assets/images/app/projects/sistent/type-table-2-dark.png"; +import { Col, Row } from "../../../../../reusecore/Layout"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const TypographyCode = () => { + const { isDark } = useStyledDarkMode(); + return ( +
    +

    + The different fonts are referenced using unique token names to achieve + uniform application of the texts in different use cases across multiple + platforms. These tokens, just like the color, are split into primitive + and semantic categories. +

    + +

    Primitive Category

    +
    +

    + This category refers to the seven sizes that were chosen as typesets + from the major third ratio. They form the foundation for all the other + fonts generated and used across the typography system. Since these + tokens lack complete styling however, they are should not be used + directly in designs and as such do not have any roles ascribed to them. + However, if a new role emerges and the need for a new token arises, + these typesets, serve as the reference size for any new font to be + created. +

    + + + Type Table + + + +

    Semantic Category

    +
    +

    + The fonts in this category have specifications that make them suitable + for certain use cases either across all platforms or in any given + platform. +

    + + + Type Table + + +
    + ); +}; + +export default TypographyCode; diff --git a/src/sections/Projects/Sistent/identity/typography/guidance.js b/src/sections/Projects/Sistent/identity/typography/guidance.js new file mode 100644 index 000000000000..38d3a9164296 --- /dev/null +++ b/src/sections/Projects/Sistent/identity/typography/guidance.js @@ -0,0 +1,209 @@ +import React from "react"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +import TypeScale2 from "../../../../../assets/images/app/projects/sistent/type-scale-2-light.png"; +import TypeScale2Dark from "../../../../../assets/images/app/projects/sistent/type-scale-2-dark.png"; +import TypeScale3 from "../../../../../assets/images/app/projects/sistent/type-scale-3-light.png"; +import TypeScale3Dark from "../../../../../assets/images/app/projects/sistent/type-scale-3-dark.png"; +import TypeDetails1 from "../../../../../assets/images/app/projects/sistent/type-details-1-light.png"; +import TypeDetails1Dark from "../../../../../assets/images/app/projects/sistent/type-details-1-dark.png"; + +import { Col, Row } from "../../../../../reusecore/Layout"; + +const TypographyGuidance = () => { + const { isDark } = useStyledDarkMode(); + return ( +
    +

    + After a suitable typeface has been chosen, it needs to be arranged to + form the various fonts that will be used to address different text needs + across designs. +

    + +

    Type Scale Customization

    +
    +

    + It is not compulsory that all of the sizes in a type scale be used. + However, when choosing a size from the scale, ensure to identify + possible use cases in proposed designs to ensure efficiency and reduce + any chances of having redundant text styles. Remember that less is more + and a particular font size can function in multiple capacities. After + making a selection of sizes, if there is subsequent need for an + additional size because of a recurring use case, then a suitable + corresponding size can be chosen from the scale. This is a better + practice. +

    +

    + For Layer5, we utilized the major third ratio to generate a type scale + that we could work with. +

    + + + Type Scale + + +

    + From this type scale, seven text sizes were selected to account for + various needs in our websites and products. These sizes were further + modified with suitable font specifications that will provide accurate + guidance for usage across implementations. +

    + + + Type Scale + + +

    + To create even more consistent designs, it is important to consider + typography with spacing and spatial proportions in mind. As a rule of + thumb, it is advisable that values obtained from the modular scale are + rounded off to a multiple of the base space value being used across a + set of designs. So for instance, if a set of designs has a base space + value of 4px or 6px, then, the font sizes selected are rounded off to be + multiples of four or six respectively. +

    +

    + In keeping with this, the values of the above sizes are noticeably + distinct from the original type scale that it was derived from. This is + because our base space value is 8px and as such, all the text sizes have + been rounded off to a multiple of eight. This same principle is applied + to the accompanying line heights of these text sizes as well. +

    +

    Layout Considerations

    +

    + For any digital product or website being created, one important thing to + be considered is the responsive nature of design, which translates to + what the said design will look like across different screen sizes + (desktop, tablet, and mobile). To this end, it is also crucial that any + of the text styles selected account for these different layout sizes as + well. As stated earlier, text styles can be used for multiple needs + across a given design. The important thing is that there is proper + documentation to point this out, ensuring that hierarchy and prominence + are duly established. +

    + +

    Establishing Hierarchy

    +
    +

    + Since the selected text sizes cannot all be used for the same purpose, + it is necessary to differentiate them from each other in order to have a + working typography system that applies to different use cases and layout + sizes. This will require exploration and multiple tests of these text + styles in the screen sizes they are intended for and the possible use + cases that they will account for which may have already been identified + at those early stages before use. +

    +

    + With these seven different text sizes derived from the type scale, we + have come up with ten fonts that can be applied in multiple use cases + and across multiple devices. This variation ensures that fonts are not + created randomly and utilized based on individual discretion, eventually + leading to multiple redundant fonts present in our type system. These + fonts must be considered first for application in any use case. If the + need arises for a new font to be added to the type system, sufficient + use cases have to be established to do so. +

    +

    + NOTE: +

    +

    + A new font can be something as little as changing only the font weight + of an already existing font and having both variations function in + different capacities. Of course it can also include replacing an already + existing font or creating an entirely new one to add to the type system. +

    +

    Heading

    +

    + Headings are usually the first thing a user sees when reading a block of + text. The idea is for them to be concise and provide a hint of what + readers can expect from the accompanying body of text or an entire page. + It should also capture attention and encourage further exploration. They + can range from large hero section headings to much smaller subtitle and + label headings. Whatever the case, headings at different sizes can help + to accurately indicate hierarchy and provide guidance for any reader + going through a group of text. +

    +

    + Of Layer5’s ten fonts, seven of them can function as heading text and + ensure hierarchy for different context. For text that needs to be + prominent in a group of text (especially at the beginning), any one of + these fonts will suffice. +

    +

    Paragraph

    +

    + A bulk of text content is written in body or paragraph fonts. These are + less prominent fonts that provide more context to what brief ideas any + available headings may have outlined. It can also be used for short text + in components and when creating other interface elements due to its + higher legibility when compared to heading or subtitle texts. Three font + sizes have been earmarked to function in this capacity for the text + needs in Layer5 and across all of its products. +

    + +

    Font Specification

    +
    +

    + Each font should not be a product of random choices just to have a set + of text to work with. They should be informed decisions based on how + they can assist to reinforce a brand, what they can be used to achieve + in designs, and to what extent they should be applied. +

    +

    + With these seven different text sizes derived from the type scale, we + have come up with ten fonts that can be applied in multiple use cases + and across multiple devices. This variation ensures that fonts are not + created randomly and utilized based on individual discretion, eventually + leading to multiple redundant fonts present in our type system. These + fonts must be considered first for application in any use case. If the + need arises for a new font to be added to the type system, sufficient + use cases have to be established to do so. +

    +

    Heading

    +

    + Headings are usually the first thing a user sees when reading a block of + text. The idea is for them to be concise and provide a hint of what + readers can expect from the accompanying body of text or an entire page. + It should also capture attention and encourage further exploration. They + can range from large hero section headings to much smaller subtitle and + label headings. Whatever the case, headings at different sizes can help + to accurately indicate hierarchy and provide guidance for any reader + going through a group of text. +

    +

    + Of Layer5’s ten fonts, seven of them can function as heading text and + ensure hierarchy for different context. For text that needs to be + prominent in a group of text (especially at the beginning), any one of + these fonts will suffice. +

    +

    Body

    +

    + A bulk of text content is written in body or paragraph fonts. These are + less prominent (larger) fonts that provide more context to what brief + ideas any available headings may have outlined. It can also be used for + short text in components and when creating other interface elements due + to its higher legibility when compared to heading or subtitle texts. + Three font sizes have been earmarked to function in this capacity for + the text needs in Layer5 and across all of its products. +

    +

    + Below are a list of Layer5’s fonts along with hints on how they could be + applied to create usable and efficient text for our interfaces. For + reference purposes, more documentation can be done like how frequently + these fonts can appear on a page, what ui elements or text content they + can be used for, and how to adjust some font properties to suit multiple + scenarios. Responsive design documentation of the chosen fonts should be + documented as well to govern their usage and application. +

    + + + Type Details + + +
    + ); +}; + +export default TypographyGuidance; diff --git a/src/sections/Projects/Sistent/identity/typography/index.js b/src/sections/Projects/Sistent/identity/typography/index.js new file mode 100644 index 000000000000..9b2cf04b33e5 --- /dev/null +++ b/src/sections/Projects/Sistent/identity/typography/index.js @@ -0,0 +1,93 @@ +import React, { useState } from "react"; +import { Container } from "../../../../../reusecore/Layout"; +import SistentWrapper from "../../sistent.style"; +import TOC from "../../../../../components/SistentNavigation"; +import IntraPage from "../../../../../components/handbook-navigation/intra-page"; +import Button from "../../../../../reusecore/Button"; +import TypographyOverview from "./overview"; +import TypographyGuidance from "./guidance"; +import TypographyCode from "./code"; +import SistentPagination from "../../../../../components/SistentNavigation/pagination"; + +const overviewContents = [ + { id: 0, link: "#The Basics", text: "The Basics" }, + { id: 1, link: "#Type Scale", text: "Type Scale" }, + { id: 2, link: "#Font Pairing", text: "Font Pairing" }, +]; + +const guidanceContent = [ + { + id: 0, + link: "#Type Scale Customization", + text: "Type Scale Customization", + }, + { id: 1, link: "#Establishing Hierarchy", text: "Establishing Hierarchy" }, + { id: 2, link: "#Font Specification", text: "Font Specification" }, +]; + +const codeContent = [ + { id: 0, link: "#Primitive Category", text: "Primitive Category" }, + { id: 1, link: "#Semantic Category", text: "Semantic Category" }, +]; + +const SistentTypography = () => { + const [activeTab, setActiveTab] = useState("overview"); + + const contents = () => { + if (activeTab === "overview") { + return overviewContents; + } else if (activeTab === "guidance") { + return guidanceContent; + } else if (activeTab === "code") { + return codeContent; + } + }; + + return ( + +
    +

    Typography

    +
    + +
    + +
    + +

    Typography

    +
    +

    + Most of the information that is present in a user interface for + the purpose of passing information across is represented via + typography. Correct typography structure and appropriate + application is important in all interfaces. +

    +
    +
    + {activeTab === "overview" && } + {activeTab === "guidance" && } + {activeTab === "code" && } +
    + +
    + +
    +
    + ); +}; + +export default SistentTypography; diff --git a/src/sections/Projects/Sistent/identity/typography/overview.js b/src/sections/Projects/Sistent/identity/typography/overview.js new file mode 100644 index 000000000000..70abd3f1b1e4 --- /dev/null +++ b/src/sections/Projects/Sistent/identity/typography/overview.js @@ -0,0 +1,111 @@ +import React from "react"; +import { Row, Col } from "../../../../../reusecore/Layout"; + +import TypeScale1 from "../../../../../assets/images/app/projects/sistent/type-scale-1-light.png"; +import TypeScale1Dark from "../../../../../assets/images/app/projects/sistent/type-scale-1-dark.png"; +import FontPair from "../../../../../assets/images/app/projects/sistent/font-pair-light.png"; +import FontPairDark from "../../../../../assets/images/app/projects/sistent/font-pair-dark.png"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const TypographyOverview = () => { + const { isDark } = useStyledDarkMode(); + return ( +
    +

    + There are a couple of things to consider when preparing to apply + typography to any interface. +

    + +

    The Basics

    +
    +

    +

    Typeface

    +

    + A typeface is a set of letters, numbers, and accessories that have + common design features. These characters are usually grouped into + families and used in relation to each other to ensure uniform text + representation in designs and forms of text that are relative to each + other. Qanelas Soft, Times New Roman, Merriweather, and Roboto are all + examples of typefaces. +

    +

    Font

    +

    + Often wrongly used interchangeably with typeface, a font refers to + variations of a typeface. So this includes the weight, size, line + height, tracking (letter spacing), and any other features that are added + to a typeface for it to function in a certain capacity. A key + relationship between a typeface and a font is that characters in a + typeface can be modified to form different fonts. +

    +

    Line Height

    +

    + Line height is mostly used to refer to the distance between lines of + text. WCAG standards for line height recommend a line height that is at + least 1.5 times the chosen font size, especially for small text sizes. + For larger fonts, however, evidence has shown that anything between 1.2 + and 1.5 times the font size might also be appropriate, especially + considering the fact that most large fonts used for headings and + subheadings tend not to exceed a single line of text. +

    + +

    Type Scale

    +
    +

    + Type scale with respect to typography points to the set of incremental + steps or rations that dictate how font sizes increase or decrease as you + move up or down a given hierarchy. This increase or decrease is usually + originated from a base size that serves as the defining font within the + scale. These steps create a systemic progression of font sizes that + maintain harmony and visual balance within a system because of the + relationship they share with the base font. +

    +

    + The base size used to generate a type scale is determined by the + principles governing size, typography, and other brand specific + contexts. As a design best practice, a text size of 16px is generally + accepted as very legible for responsive design. It is also a multiple of + eight which is our base space value and this is further elaborated on in + + Spacing + + . Reasons like these influence its use as a base size for our type + scale. A modular type scale can be generated using harmonious values + like the golden ratio, the major third, the perfect fifth, and so on. +

    + + + Type Scale + + +

    + Because of the progressive increase or decrease that governs the content + of a type scale, it makes it easier to obtain consistent, related, and + harmonious font sizes that can each be used for specific needs when + curating digital interfaces. +

    + +

    Font Pairing

    +
    +

    + Sometimes, it might be necessary to make use of more than one typeface. + In such a case, an applicable principle is that one of the typefaces is + used mostly for headings and subheadings, while the other is used for + most paragraphs and body text needs across the same design. Detailed + research on typefaces and their compatibility will help to make informed + decisions when it comes to choosing a typeface for font pairing. +

    +

    + Layer5 has successfully been able to implement a font pairing of Qanelas + Soft for all heading and subheading text and Open Sans for all body, + paragraph, and content text needs. +

    + + + Font Pair + + +
    + ); +}; + +export default TypographyOverview;