From e4cac91e1928ab609fa64e9ff2f8aae89f8db0b4 Mon Sep 17 00:00:00 2001 From: Peter Zimon Date: Mon, 22 May 2023 12:09:34 +0200 Subject: [PATCH] Added basic documentation to Admin Design System refs. https://github.com/TryGhost/Team/issues/3150 --- .../src/admin-x-ds/docs/About.mdx | 41 ++++++++++ .../src/admin-x-ds/docs/Develop.mdx | 73 ++++++++++++++++++ .../src/admin-x-ds/docs/Introduction.mdx | 11 --- .../admin-x-ds/docs/assets/ds-structure.png | Bin 0 -> 34375 bytes 4 files changed, 114 insertions(+), 11 deletions(-) create mode 100644 ghost/admin-x-settings/src/admin-x-ds/docs/About.mdx create mode 100644 ghost/admin-x-settings/src/admin-x-ds/docs/Develop.mdx delete mode 100644 ghost/admin-x-settings/src/admin-x-ds/docs/Introduction.mdx create mode 100644 ghost/admin-x-settings/src/admin-x-ds/docs/assets/ds-structure.png diff --git a/ghost/admin-x-settings/src/admin-x-ds/docs/About.mdx b/ghost/admin-x-settings/src/admin-x-ds/docs/About.mdx new file mode 100644 index 0000000000..be3c0a43e4 --- /dev/null +++ b/ghost/admin-x-settings/src/admin-x-ds/docs/About.mdx @@ -0,0 +1,41 @@ +import { Meta } from '@storybook/blocks'; + + + + + +
+ +# AdminX Design System + +This is a documentation of the design system of Ghost AdminX. + +## Why? + +The purpose of any design system is to bring order to chaos and this is not any diffrent here either. Historically we maintained consistency in the Ghost Admin via using components and global CSS as much as possible. However due to the growth of the product and the loose system, more and more exotic patterns and styles emerged—which resulted in inconsistency. + +The main goal of the design system (any design system) is to bring order into chaos by defining and documenting **reusable components**. + +## Install + +ATM the design system is part of the AdminX Settings project but soon it will be decoupled with the intention to be able to (re)use it in any future React based Admin projects. Eventually it should be an independent package that could be added to any React app. + +`yarn add @tryghost/admin-x-ds` + +
\ No newline at end of file diff --git a/ghost/admin-x-settings/src/admin-x-ds/docs/Develop.mdx b/ghost/admin-x-settings/src/admin-x-ds/docs/Develop.mdx new file mode 100644 index 0000000000..018c239ddb --- /dev/null +++ b/ghost/admin-x-settings/src/admin-x-ds/docs/Develop.mdx @@ -0,0 +1,73 @@ +import { Meta } from '@storybook/blocks'; +import SBStructure from './assets/ds-structure.png'; + + + + + +
+ +# Development + +Here's a guideline of how new components should be developed to match the goal of the design system. + +
+ +## Structure + +The design system contains **reusable components**. These components live in one of the following groups: + +### Global +Contains common components that are used across all parts (in all apps) of the admin: buttons, checkboxes, lists, input fields etc—the usual suspects. You can check them in the "Global" group in the sidebar. + +### App specific +The Admin is broken down to multiple React apps, each with its own set custom of reusable components. **These components are also part of the design system** which allows potential reusability in the future, and forces designers and developers to think in terms of the design system. + +### What about non-reusable components? + +With all fairness, **most of the components should be part of the design system**. Of course there pages, containers etc. in each app which are obviously **non-reusable**, however these should be built up of _mostly_ reusable components. + +

If you can't decide whether a component is reusable or not, then default to adding it to the design system!

+ +
+ +

+ +### Example: settings app + +[TBD: Settings structure] + +
+ +## How to develop new components? + +If there's a single thing you should remember is this: + +

Storybook is **the central tool** of the design system, it is **not** an afterthought. It is the **starting point** of the development of any new component.

+ +### Steps to develop new components +[TBD: expand] + +1. Create the react component in the desgn system with a rudimentary interface +2. Create a new story (you can use `Boilerplate.stories.tsx` to get started) +3. Develop the details of the new react component +4. Create stories for all interesting use cases. There should be a story for the most common parameter combinations. +5. Test the new component in your app. If something is off, think about how you can solve it in the system—avoid visual hacking in the app. + +
\ No newline at end of file diff --git a/ghost/admin-x-settings/src/admin-x-ds/docs/Introduction.mdx b/ghost/admin-x-settings/src/admin-x-ds/docs/Introduction.mdx deleted file mode 100644 index f9e0bdb750..0000000000 --- a/ghost/admin-x-settings/src/admin-x-ds/docs/Introduction.mdx +++ /dev/null @@ -1,11 +0,0 @@ -import { Meta } from '@storybook/blocks'; - - - -# Welcome to Admin X Design System - -Work in progress! - -## Install - -Should be something like `yarn add @tryghost/admin-x-ds` \ No newline at end of file diff --git a/ghost/admin-x-settings/src/admin-x-ds/docs/assets/ds-structure.png b/ghost/admin-x-settings/src/admin-x-ds/docs/assets/ds-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..6e3953c052bb8aea6edb128549481f1b39f5466e GIT binary patch literal 34375 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