forked from github/plane
style: workspace and project settings (#946)
This commit is contained in:
parent
d8a5b8d848
commit
7234d6f68b
@ -36,7 +36,7 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const [openColorPicker, setOpenColorPicker] = useState(false);
|
||||
const [activeColor, setActiveColor] = useState<string>("#020617");
|
||||
const [activeColor, setActiveColor] = useState<string>("#858e96");
|
||||
|
||||
const [recentEmojis, setRecentEmojis] = useState<string[]>([]);
|
||||
|
||||
@ -69,8 +69,8 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
leaveFrom="transform opacity-100 scale-100"
|
||||
leaveTo="transform opacity-0 scale-95"
|
||||
>
|
||||
<Popover.Panel className="absolute z-10 mt-2 w-[250px] rounded-[4px] bg-brand-surface-2 shadow-lg">
|
||||
<div className="h-[230px] w-[250px] overflow-auto border border-brand-base rounded-[4px] bg-brand-surface-2 p-2 shadow-xl">
|
||||
<Popover.Panel className="absolute z-10 mt-2 w-[250px] rounded-[4px] border border-brand-base bg-brand-surface-2 shadow-lg">
|
||||
<div className="h-[230px] w-[250px] overflow-auto rounded-[4px] border border-brand-base bg-brand-surface-2 p-2 shadow-xl">
|
||||
<Tab.Group as="div" className="flex h-full w-full flex-col">
|
||||
<Tab.List className="flex-0 -mx-2 flex justify-around gap-1 p-1">
|
||||
{tabOptions.map((tab) => (
|
||||
@ -82,7 +82,7 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
setOpenColorPicker(false);
|
||||
}}
|
||||
className={`-my-1 w-1/2 border-b pb-2 text-center text-sm font-medium outline-none transition-colors ${
|
||||
selected ? "border-theme text-theme" : "border-transparent text-gray-500"
|
||||
selected ? "" : "border-transparent text-brand-secondary"
|
||||
}`}
|
||||
>
|
||||
{tab.title}
|
||||
@ -95,12 +95,12 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
<Tab.Panel>
|
||||
{recentEmojis.length > 0 && (
|
||||
<div className="py-2">
|
||||
<h3 className="mb-2 ml-1 text-xs text-gray-400">Recent</h3>
|
||||
<h3 className="mb-2 text-xs text-brand-secondary">Recent</h3>
|
||||
<div className="grid grid-cols-8 gap-2">
|
||||
{recentEmojis.map((emoji) => (
|
||||
<button
|
||||
type="button"
|
||||
className="h-4 w-4 select-none text-sm hover:bg-brand-surface-2 flex items-center justify-between"
|
||||
className="flex h-4 w-4 select-none items-center justify-between text-sm"
|
||||
key={emoji}
|
||||
onClick={() => {
|
||||
onChange(emoji);
|
||||
@ -113,13 +113,13 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<hr className="w-full h-[1px] mb-2" />
|
||||
<hr className="mb-2 h-[1px] w-full border-brand-base" />
|
||||
<div>
|
||||
<div className="grid grid-cols-8 gap-x-2 gap-y-3">
|
||||
{emojis.map((emoji) => (
|
||||
<button
|
||||
type="button"
|
||||
className="h-4 w-4 mb-1 select-none text-sm hover:bg-brand-surface-2 flex items-center"
|
||||
className="mb-1 flex h-4 w-4 select-none items-center text-sm"
|
||||
key={emoji}
|
||||
onClick={() => {
|
||||
onChange(emoji);
|
||||
@ -136,7 +136,7 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
<div className="py-2">
|
||||
<Tab.Panel className="flex h-full w-full flex-col justify-center">
|
||||
<div className="relative">
|
||||
<div className="pb-2 px-1 flex items-center justify-between">
|
||||
<div className="flex items-center justify-between px-1 pb-2">
|
||||
{[
|
||||
"#FF6B00",
|
||||
"#8CC1FF",
|
||||
@ -147,7 +147,7 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
"#000000",
|
||||
].map((curCol) => (
|
||||
<span
|
||||
className="w-4 h-4 rounded-full cursor-pointer"
|
||||
className="h-4 w-4 cursor-pointer rounded-full"
|
||||
style={{ backgroundColor: curCol }}
|
||||
onClick={() => setActiveColor(curCol)}
|
||||
/>
|
||||
@ -158,14 +158,14 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
className="flex items-center gap-1"
|
||||
>
|
||||
<span
|
||||
className="w-4 h-4 rounded-full conical-gradient"
|
||||
className="conical-gradient h-4 w-4 rounded-full"
|
||||
style={{ backgroundColor: activeColor }}
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<TwitterPicker
|
||||
className={`m-2 !absolute top-4 left-4 z-10 ${
|
||||
className={`!absolute top-4 left-4 z-10 m-2 ${
|
||||
openColorPicker ? "block" : "hidden"
|
||||
}`}
|
||||
color={activeColor}
|
||||
@ -178,13 +178,12 @@ const EmojiIconPicker: React.FC<Props> = ({
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<hr className="w-full h-[1px] mb-1" />
|
||||
|
||||
<div className="grid grid-cols-8 mt-1 ml-1 gap-x-2 gap-y-3">
|
||||
<hr className="mb-1 h-[1px] w-full border-brand-base" />
|
||||
<div className="mt-1 ml-1 grid grid-cols-8 gap-x-2 gap-y-3">
|
||||
{icons.material_rounded.map((icon) => (
|
||||
<button
|
||||
type="button"
|
||||
className="h-4 w-4 mb-1 select-none text-lg hover:bg-brand-surface-2 flex items-center"
|
||||
className="mb-1 flex h-4 w-4 select-none items-center text-lg"
|
||||
key={icon.name}
|
||||
onClick={() => {
|
||||
if (onIconsClick) onIconsClick(icon.name);
|
||||
|
@ -99,7 +99,7 @@ export const SingleIntegrationCard: React.FC<Props> = ({ integration }) => {
|
||||
);
|
||||
|
||||
return (
|
||||
<div className="flex items-center justify-between gap-2 rounded-[10px] border border-brand-base bg-brand-surface-2 p-5">
|
||||
<div className="flex items-center justify-between gap-2 rounded-[10px] border border-brand-base bg-brand-base p-5">
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="h-12 w-12 flex-shrink-0">
|
||||
<Image
|
||||
|
@ -82,7 +82,7 @@ const ProjectAuthorizationWrapped: React.FC<Props> = ({
|
||||
) : error?.status === 404 ? (
|
||||
<div className="container grid h-screen place-items-center">
|
||||
<div className="space-y-4 text-center">
|
||||
<p className="text-2xl font-semibold">No such project exist. Create one?</p>
|
||||
<p className="text-2xl font-semibold">No such project exists. Create one?</p>
|
||||
<PrimaryButton
|
||||
onClick={() => {
|
||||
const e = new KeyboardEvent("keydown", { key: "p" });
|
||||
@ -131,7 +131,7 @@ const ProjectAuthorizationWrapped: React.FC<Props> = ({
|
||||
<div className="mb-12 space-y-6">
|
||||
<div>
|
||||
<h3 className="text-3xl font-semibold">Project Settings</h3>
|
||||
<p className="mt-1 text-gray-600">
|
||||
<p className="mt-1 text-brand-secondary">
|
||||
This information will be displayed to every member of the project.
|
||||
</p>
|
||||
</div>
|
||||
|
@ -143,7 +143,7 @@ export const WorkspaceAuthorizationLayout: React.FC<Props> = ({
|
||||
<h3 className="text-3xl font-semibold">
|
||||
{profilePage ? "Profile" : "Workspace"} Settings
|
||||
</h3>
|
||||
<p className="mt-1 text-gray-600">
|
||||
<p className="mt-1 text-brand-secondary">
|
||||
{profilePage
|
||||
? "This information will be visible to only you."
|
||||
: "This information will be displayed to every member of the workspace."}
|
||||
|
@ -107,8 +107,8 @@ const ControlSettings: NextPage = () => {
|
||||
<div className="space-y-8 sm:space-y-12">
|
||||
<div className="grid grid-cols-12 items-start gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Project Lead</h4>
|
||||
<p className="text-brand-secondary">Select the project leader.</p>
|
||||
<h4 className="text-lg font-semibold">Project Lead</h4>
|
||||
<p className="text-sm text-brand-secondary">Select the project leader.</p>
|
||||
</div>
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
{projectDetails ? (
|
||||
@ -120,7 +120,7 @@ const ControlSettings: NextPage = () => {
|
||||
{...field}
|
||||
label={
|
||||
people?.find((person) => person.member.id === field.value)?.member
|
||||
.first_name ?? "Select Lead"
|
||||
.first_name ?? <span className="text-brand-secondary">Select lead</span>
|
||||
}
|
||||
width="w-full"
|
||||
input
|
||||
@ -167,8 +167,10 @@ const ControlSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 items-start gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Default Assignee</h4>
|
||||
<p className="text-brand-secondary">Select the default assignee for the project.</p>
|
||||
<h4 className="text-lg font-semibold">Default Assignee</h4>
|
||||
<p className="text-sm text-brand-secondary">
|
||||
Select the default assignee for the project.
|
||||
</p>
|
||||
</div>
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
{projectDetails ? (
|
||||
@ -179,8 +181,9 @@ const ControlSettings: NextPage = () => {
|
||||
<CustomSelect
|
||||
{...field}
|
||||
label={
|
||||
people?.find((p) => p.member.id === field.value)?.member.first_name ??
|
||||
"Select Default Assignee"
|
||||
people?.find((p) => p.member.id === field.value)?.member.first_name ?? (
|
||||
<span className="text-brand-secondary">Select default assignee</span>
|
||||
)
|
||||
}
|
||||
width="w-full"
|
||||
input
|
||||
|
@ -155,8 +155,10 @@ const GeneralSettings: NextPage = () => {
|
||||
<div className="space-y-8 sm:space-y-12">
|
||||
<div className="grid grid-cols-12 items-start gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Icon & Name</h4>
|
||||
<p className="text-brand-secondary">Select an icon and a name for your project.</p>
|
||||
<h4 className="text-lg font-semibold">Icon & Name</h4>
|
||||
<p className="text-sm text-brand-secondary">
|
||||
Select an icon and a name for your project.
|
||||
</p>
|
||||
</div>
|
||||
<div className="col-span-12 flex gap-2 sm:col-span-6">
|
||||
{projectDetails ? (
|
||||
@ -196,8 +198,8 @@ const GeneralSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Description</h4>
|
||||
<p className="text-brand-secondary">Give a description to your project.</p>
|
||||
<h4 className="text-lg font-semibold">Description</h4>
|
||||
<p className="text-sm text-brand-secondary">Give a description to your project.</p>
|
||||
</div>
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
{projectDetails ? (
|
||||
@ -208,7 +210,7 @@ const GeneralSettings: NextPage = () => {
|
||||
register={register}
|
||||
placeholder="Enter project description"
|
||||
validations={{}}
|
||||
className="min-h-[46px]"
|
||||
className="min-h-[46px] text-sm"
|
||||
/>
|
||||
) : (
|
||||
<Loader className="w-full">
|
||||
@ -219,8 +221,10 @@ const GeneralSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Cover Photo</h4>
|
||||
<p className="text-gray-500">Select your cover photo from the given library.</p>
|
||||
<h4 className="text-lg font-semibold">Cover Photo</h4>
|
||||
<p className="text-sm text-gray-500">
|
||||
Select your cover photo from the given library.
|
||||
</p>
|
||||
</div>
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
{watch("cover_image") ? (
|
||||
@ -253,8 +257,8 @@ const GeneralSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Identifier</h4>
|
||||
<p className="text-brand-secondary">
|
||||
<h4 className="text-lg font-semibold">Identifier</h4>
|
||||
<p className="text-sm text-brand-secondary">
|
||||
Create a 1-6 characters{"'"} identifier for the project.
|
||||
</p>
|
||||
</div>
|
||||
@ -289,8 +293,8 @@ const GeneralSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Network</h4>
|
||||
<p className="text-brand-secondary">Select privacy type for the project.</p>
|
||||
<h4 className="text-lg font-semibold">Network</h4>
|
||||
<p className="text-sm text-brand-secondary">Select privacy type for the project.</p>
|
||||
</div>
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
{projectDetails ? (
|
||||
@ -336,8 +340,8 @@ const GeneralSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Danger Zone</h4>
|
||||
<p className="text-brand-secondary">
|
||||
<h4 className="text-lg font-semibold">Danger Zone</h4>
|
||||
<p className="text-sm text-brand-secondary">
|
||||
The danger zone of the project delete page is a critical area that requires careful
|
||||
consideration and attention. When deleting a project, all of the data and resources
|
||||
within that project will be permanently removed and cannot be recovered.
|
||||
|
@ -40,26 +40,28 @@ const BillingSettings: NextPage = () => {
|
||||
>
|
||||
<section className="space-y-8">
|
||||
<div>
|
||||
<h3 className="text-3xl font-bold leading-6 text-gray-900">Billing & Plans</h3>
|
||||
<p className="mt-4 text-sm text-gray-500">[Free launch preview] plan Pro</p>
|
||||
<h3 className="text-3xl font-bold leading-6">Billing & Plans</h3>
|
||||
<p className="mt-4 text-sm text-brand-secondary">[Free launch preview] plan Pro</p>
|
||||
</div>
|
||||
<div className="space-y-8 md:w-2/3">
|
||||
<div>
|
||||
<div className="w-80 rounded-md border bg-white p-4 text-center">
|
||||
<h4 className="text-md mb-1 leading-6 text-gray-900">Payment due</h4>
|
||||
<div className="w-80 rounded-md border border-brand-base bg-brand-base p-4 text-center">
|
||||
<h4 className="text-md mb-1 leading-6">Payment due</h4>
|
||||
<h2 className="text-3xl font-extrabold">--</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="text-md mb-1 leading-6 text-gray-900">Current plan</h4>
|
||||
<p className="mb-3 text-sm text-gray-500">You are currently using the free plan</p>
|
||||
<h4 className="text-md mb-1 leading-6">Current plan</h4>
|
||||
<p className="mb-3 text-sm text-brand-secondary">
|
||||
You are currently using the free plan
|
||||
</p>
|
||||
<a href="https://plane.so/pricing" target="_blank" rel="noreferrer">
|
||||
<SecondaryButton outline>View Plans and Upgrade</SecondaryButton>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="text-md mb-1 leading-6 text-gray-900">Billing history</h4>
|
||||
<p className="mb-3 text-sm text-gray-500">There are no invoices to display</p>
|
||||
<h4 className="text-md mb-1 leading-6">Billing history</h4>
|
||||
<p className="mb-3 text-sm text-brand-secondary">There are no invoices to display</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -176,8 +176,8 @@ const WorkspaceSettings: NextPage = () => {
|
||||
<div className="space-y-8 sm:space-y-12">
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Logo</h4>
|
||||
<p className="text-brand-secondary">
|
||||
<h4 className="text-lg font-semibold">Logo</h4>
|
||||
<p className="text-sm text-brand-secondary">
|
||||
Max file size is 5MB. Supported file types are .jpg and .png.
|
||||
</p>
|
||||
</div>
|
||||
@ -220,8 +220,8 @@ const WorkspaceSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">URL</h4>
|
||||
<p className="text-brand-secondary">Your workspace URL.</p>
|
||||
<h4 className="text-lg font-semibold">URL</h4>
|
||||
<p className="text-sm text-brand-secondary">Your workspace URL.</p>
|
||||
</div>
|
||||
<div className="col-span-12 flex items-center gap-2 sm:col-span-6">
|
||||
<Input
|
||||
@ -260,8 +260,8 @@ const WorkspaceSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Name</h4>
|
||||
<p className="text-brand-secondary">Give a name to your workspace.</p>
|
||||
<h4 className="text-lg font-semibold">Name</h4>
|
||||
<p className="text-sm text-brand-secondary">Give a name to your workspace.</p>
|
||||
</div>
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<Input
|
||||
@ -279,8 +279,8 @@ const WorkspaceSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Company Size</h4>
|
||||
<p className="text-brand-secondary">How big is your company?</p>
|
||||
<h4 className="text-lg font-semibold">Company Size</h4>
|
||||
<p className="text-sm text-brand-secondary">How big is your company?</p>
|
||||
</div>
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<Controller
|
||||
@ -310,8 +310,8 @@ const WorkspaceSettings: NextPage = () => {
|
||||
</div>
|
||||
<div className="grid grid-cols-12 gap-4 sm:gap-16">
|
||||
<div className="col-span-12 sm:col-span-6">
|
||||
<h4 className="text-xl font-semibold">Danger Zone</h4>
|
||||
<p className="text-brand-secondary">
|
||||
<h4 className="text-lg font-semibold">Danger Zone</h4>
|
||||
<p className="text-sm text-brand-secondary">
|
||||
The danger zone of the workspace delete page is a critical area that requires
|
||||
careful consideration and attention. When deleting a workspace, all of the data and
|
||||
resources within that workspace will be permanently removed and cannot be recovered.
|
||||
|
Loading…
Reference in New Issue
Block a user