docs: create docs workspace (#5174)

* docs: migrate ui docs to docs universe

* created yarn workspace

* added eslint and tsconfig configurations

* fix eslint configurations

* fixed eslint configurations

* shared tailwind configurations

* added shared ui package

* added more shared components

* migrating more components

* made details components shared

* move InlineCode component

* moved InputText

* moved Loading component

* Moved Modal component

* moved Select components

* Moved Tooltip component

* moved Search components

* moved ColorMode provider

* Moved Notification components and providers

* used icons package

* use UI colors in api-reference

* moved Navbar component

* used Navbar and Search in UI docs

* added Feedback to UI docs

* general enhancements

* fix color mode

* added copy colors file from ui-preset

* added features and enhancements to UI docs

* move Sidebar component and provider

* general fixes and preparations for deployment

* update docusaurus version

* adjusted versions

* fix output directory

* remove rootDirectory property

* fix yarn.lock

* moved code component

* added vale for all docs MD and MDX

* fix tests

* fix vale error

* fix deployment errors

* change ignore commands

* add output directory

* fix docs test

* general fixes

* content fixes

* fix announcement script

* added changeset

* fix vale checks

* added nofilter option

* fix vale error
This commit is contained in:
Shahed Nasser
2023-09-21 20:57:15 +03:00
committed by GitHub
parent 19c5d5ba36
commit fa7c94b4cc
3209 changed files with 32188 additions and 31018 deletions

View File

@@ -0,0 +1,89 @@
import React from "react"
import { NotificationItemProps } from "../.."
import clsx from "clsx"
import {
CheckCircleSolid,
ExclamationCircleSolid,
InformationCircleSolid,
XCircleSolid,
} from "@medusajs/icons"
import { Button } from "@/components"
export type NotificationItemLayoutDefaultProps = NotificationItemProps & {
handleClose: () => void
}
export const NotificationItemLayoutDefault: React.FC<
NotificationItemLayoutDefaultProps
> = ({
type = "info",
title = "",
text = "",
children,
isClosable = true,
handleClose,
CustomIcon,
}) => {
return (
<>
<div className={clsx("flex gap-docs_1 p-docs_1")}>
{type !== "none" && (
<div
className={clsx(
type !== "custom" && "w-docs_2 flex justify-center items-center"
)}
>
{type === "info" && (
<InformationCircleSolid className="text-medusa-fg-interactive-dark" />
)}
{type === "error" && (
<XCircleSolid className="text-medusa-tag-red-icon dark:text-medusa-tag-red-icon-dark" />
)}
{type === "warning" && (
<ExclamationCircleSolid className="text-medusa-tag-orange-icon dark:text-medusa-tag-orange-icon-dark" />
)}
{type === "success" && (
<CheckCircleSolid className="text-medusa-tag-green-icon dark:text-medusa-tag-green-icon-dark" />
)}
{type === "custom" && CustomIcon}
</div>
)}
<span
className={clsx(
"text-compact-medium-plus",
"text-medusa-fg-base dark:text-medusa-fg-base-dark"
)}
>
{title}
</span>
</div>
{(text || children) && (
<div
className={clsx(
"flex pt-0 pr-docs_1 pb-docs_1.5 pl-docs_1 gap-docs_1",
"border-0 border-b border-solid border-medusa-border-base dark:border-medusa-border-base-dark"
)}
>
<div className="w-docs_2 flex-none"></div>
<div className={clsx("flex flex-col", children && "gap-docs_1")}>
{text && (
<span
className={clsx(
"text-medium text-medusa-fg-subtle dark:text-medusa-fg-subtle-dark"
)}
>
{text}
</span>
)}
{children}
</div>
</div>
)}
{isClosable && (
<div className={clsx("p-docs_1 flex justify-end items-center")}>
<Button onClick={handleClose}>Close</Button>
</div>
)}
</>
)
}

View File

@@ -0,0 +1,63 @@
import clsx from "clsx"
import React, { Children, ReactElement } from "react"
import { NotificationItemLayoutDefault } from "./Layout/Default"
export type NotificationItemProps = {
layout?: "default" | "empty"
type?: "info" | "error" | "warning" | "success" | "custom" | "none"
CustomIcon?: React.ReactNode
title?: string
text?: string
className?: string
children?: ReactElement
isClosable?: boolean
placement?: "top" | "bottom"
show?: boolean
setShow?: (value: boolean) => void
onClose?: () => void
} & React.HTMLAttributes<HTMLDivElement>
export const NotificationItem = ({
className = "",
placement = "bottom",
show = true,
layout = "default",
setShow,
onClose,
children,
...rest
}: NotificationItemProps) => {
const handleClose = () => {
setShow?.(false)
onClose?.()
}
return (
<div
className={clsx(
"md:max-w-[320px] md:w-[320px] w-full bg-medusa-bg-base dark:bg-medusa-bg-base-dark rounded-docs_DEFAULT",
"shadow-flyout dark:shadow-flyout-dark max-h-[calc(100vh-90px)]",
"fixed md:right-docs_1 left-0 z-[400] md:m-docs_1",
placement === "bottom" && "md:bottom-docs_1 bottom-0",
placement === "top" && "md:top-docs_1 top-0",
"opacity-100 transition-opacity duration-200 ease-ease",
!show && "!opacity-0",
className
)}
>
{layout === "default" && (
<NotificationItemLayoutDefault {...rest} handleClose={handleClose}>
{children}
</NotificationItemLayoutDefault>
)}
{layout === "empty" &&
Children.map(children, (child) => {
if (child) {
return React.cloneElement(child, {
onClose: handleClose,
})
}
})}
</div>
)
}

View File

@@ -0,0 +1,58 @@
import { NotificationItemType, useNotifications } from "@/providers"
import React from "react"
import { NotificationItem } from "./Item"
import { CSSTransition, TransitionGroup } from "react-transition-group"
import clsx from "clsx"
export const NotificationContainer = () => {
const { notifications, removeNotification } = useNotifications()
const handleClose = (notification: NotificationItemType) => {
notification.onClose?.()
if (notification.id) {
removeNotification(notification.id)
}
}
const renderFilteredNotifications = (
condition: (notificaiton: NotificationItemType) => boolean,
className?: string
) => {
return (
<TransitionGroup className={className}>
{notifications.filter(condition).map((notification) => (
<CSSTransition
key={notification.id}
timeout={200}
classNames={{
enter: "animate__animated animate__slideInRight animate__fastest",
exit: "animate__animated animate__slideOutRight animate__fastest",
}}
>
<NotificationItem
{...notification}
onClose={() => handleClose(notification)}
className={clsx(
notification.className,
"!relative !top-0 !bottom-0 !right-0"
)}
/>
</CSSTransition>
))}
</TransitionGroup>
)
}
return (
<>
{renderFilteredNotifications(
(notification) => notification.placement === "top",
"flex fixed flex-col gap-docs_0.5 right-0 top-0 z-[400] md:w-auto w-full max-h-[calc(100vh-57px)] overflow-y-auto"
)}
{renderFilteredNotifications(
(notification) => notification.placement !== "top",
"flex flex-col gap-docs_0.5 fixed right-0 bottom-0 z-[400] md:w-auto w-full max-h-[calc(100vh-57px)] overflow-y-auto"
)}
</>
)
}