Skip to content

Commit a5a9589

Browse files
✨ Add Call to Action button component and update related files (#67)
* ✨ Add Call to Action button component and update related files * ✨ Rename button component from 'Buttont' to 'CallToAction' for clarity * ✨ Rename GithubStars component file for consistency and update import paths * ✨ Update import path for GithubStarsButton component for consistency
1 parent 9f3eacb commit a5a9589

16 files changed

+296
-205
lines changed

apps/website/src/changelogs/2024-12-06.mdx

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ title: Sidemenu with smooth hover effect
44

55
#### New component
66

7-
- A new component has been added to the website: the `Sidemenu smooth hover` component in the navigation category.
7+
- A new component has been added to the website: the `Sidemenu smooth hover` component in the navigation category.
8+
- A new button has been added to the website: the `Call to action` button in the button category.

apps/website/src/ui/star-github-project-button.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ export const dynamic = "force-static";
22

33
import { CUICUI_GITHUB_URL } from "../lib/site.const";
44

5-
import { GithubStarsButton } from "@/cuicui/common-ui/buttons/github-stars/component.github-stars";
5+
import { GithubStarsButton } from "@/cuicui/common-ui/buttons/github-stars/github-stars";
66

77
export default async function StarCuicuiGithubButton() {
88
const apiGithub = "https://api.github.com/repos/damien-schneider/cuicui";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { ArrowRightIcon } from "lucide-react";
2+
3+
export default function CallToAction() {
4+
return (
5+
<button
6+
type="button"
7+
className="group relative flex flex-row items-center p-1 pr-3 text-sm gap-2 rounded-full border border-neutral-400/15 hover:border-neutral-400/30 shadow hover:shadow-sm overflow-hidden focus-visible:outline-none focus-visible:ring-neutral-600 focus-visible:ring-2 focus-visible:rounded-full transition duration-100 bg-neutral-400/5 hover:bg-neutral-400/10"
8+
>
9+
<div className="inline-flex items-center bg-brand dark:text-violet-300 text-violet-600 border border-violet-400/20 px-3 rounded-full text-sm py-1 bg-violet-400/20">
10+
New version
11+
</div>
12+
<span className="dark:text-neutral-400 text-neutral-500">
13+
Check out the new features
14+
</span>
15+
<ArrowRightIcon className="dark:text-neutral-400 text-neutral-500 size-5 group-hover:translate-x-1 transition-transform duration-100" />
16+
<div className="absolute inset-0 -z-10 bg-gradient-to-br opacity-70 group-hover:opacity-100 transition-opacity overflow-hidden rounded-full from-violet-100 to-violet-300 backdrop-blur-md" />
17+
</button>
18+
);
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { ComponentMetaType } from "@/lib/types/component";
2+
3+
export const Component: ComponentMetaType = {
4+
name: "Call to action button",
5+
description:
6+
"A button that calls for action with a badge that can display a message.",
7+
inspiration: "Supabase",
8+
inspirationLink: "https://supabase.com/",
9+
sizePreview: "xs",
10+
};
11+
12+
export default Component;

packages/ui/cuicui/common-ui/buttons/github-stars/component.github-stars.tsx packages/ui/cuicui/common-ui/buttons/github-stars/github-stars.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import NumberFlow from "@number-flow/react";
2-
import "./github-stars.css";
2+
import "@/cuicui/common-ui/buttons/github-stars/github-stars.css";
33
import Link from "next/link";
44
import { cn } from "@/cuicui/utils/cn";
55
import type { ComponentProps } from "react";
@@ -93,7 +93,7 @@ export const GithubStarsButton = ({
9393
);
9494
};
9595

96-
const CuicuiStarIcon = ({ ...props }: React.SVGProps<SVGSVGElement>) => {
96+
const CuicuiStarIcon = ({ ...props }: ComponentProps<"svg">) => {
9797
return (
9898
<svg
9999
width="18"

packages/ui/cuicui/common-ui/buttons/github-stars/github-stars.variant.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"use client";
2-
import { GithubStarsButton } from "@/cuicui/common-ui/buttons/github-stars/component.github-stars";
2+
import { GithubStarsButton } from "@/cuicui/common-ui/buttons/github-stars/github-stars";
33
import { sleep } from "@/cuicui/utils/sleep";
44

55
import { useEffect, useState } from "react";

packages/ui/cuicui/common-ui/buttons/magnetic-button/component.magnetic-background-button.tsx packages/ui/cuicui/common-ui/buttons/magnetic-button/magnetic-background-button.tsx

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
"use client";
22

33
import { cn } from "@/cuicui/utils/cn";
4-
import { useState, useRef, type ReactNode, type MouseEvent } from "react";
4+
import {
5+
useState,
6+
useRef,
7+
type ReactNode,
8+
type MouseEvent,
9+
type ComponentProps,
10+
} from "react";
511

612
type PositionType = {
713
x: number;
@@ -19,7 +25,7 @@ export function MagneticBackgroundButton({
1925
magneticStrength?: number;
2026
className?: string;
2127
exitForce?: number;
22-
} & React.HTMLAttributes<HTMLButtonElement>) {
28+
} & ComponentProps<"button">) {
2329
const [position, setPosition] = useState<PositionType>({ x: 0, y: 0 });
2430
const [lastMousePosition, setLastMousePosition] = useState<{
2531
x: number;
@@ -60,7 +66,7 @@ export function MagneticBackgroundButton({
6066
};
6167

6268
function getFarAwayLastPosition() {
63-
if (!buttonRef.current || !lastMousePosition) {
69+
if (!(buttonRef.current && lastMousePosition)) {
6470
return { x: 0, y: 0 };
6571
}
6672
const rect = buttonRef.current.getBoundingClientRect();

packages/ui/cuicui/common-ui/buttons/magnetic-button/magnetic-background-button.variant.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MagneticBackgroundButton } from "@/cuicui/common-ui/buttons/magnetic-button/component.magnetic-background-button";
1+
import { MagneticBackgroundButton } from "@/cuicui/common-ui/buttons/magnetic-button/magnetic-background-button";
22
import { BedDoubleIcon, PopcornIcon, TvIcon, WavesIcon } from "lucide-react";
33

44
export function PreviewMagneticBackgroundButton() {

packages/ui/cuicui/common-ui/buttons/magnetic-button/component.magnetic-button.tsx packages/ui/cuicui/common-ui/buttons/magnetic-button/magnetic-button.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"use client";
2-
import { useState, useRef, type MouseEvent } from "react";
2+
import { useState, useRef, type MouseEvent, type ReactNode } from "react";
33
import { motion, useMotionValue, useSpring } from "motion/react";
44

55
const SPRING_CONFIG = { damping: 30, stiffness: 400 };
@@ -9,7 +9,7 @@ export const MagneticButton = ({
99
children,
1010
...props
1111
}: {
12-
children: React.ReactNode;
12+
children: ReactNode;
1313
} & { height?: string }) => {
1414
const [isHovered, setIsHovered] = useState(false);
1515
const x = useMotionValue(0);

packages/ui/cuicui/common-ui/buttons/magnetic-button/magnetic-button.variant.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MagneticButton } from "@/cuicui/common-ui/buttons/magnetic-button/component.magnetic-button";
1+
import { MagneticButton } from "@/cuicui/common-ui/buttons/magnetic-button/magnetic-button";
22

33
export function PreviewMagneticButton() {
44
return (
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
import { ShinyRotatingBorderButton } from "@/cuicui/common-ui/buttons/shiny-rotating-border-button/component.shiny-rotating-border-button";
1+
import { ShinyRotatingBorderButton } from "@/cuicui/common-ui/buttons/shiny-rotating-border-button/shiny-rotating-border-button";
22

33
export const PreviewShinyRotatingBorderButton = () => {
4-
return <ShinyRotatingBorderButton>Click</ShinyRotatingBorderButton>;
4+
return (
5+
<ShinyRotatingBorderButton>
6+
✨ This button is shiny
7+
</ShinyRotatingBorderButton>
8+
);
59
};
610

711
export default PreviewShinyRotatingBorderButton;

packages/ui/cuicui/hooks/use-text-to-speech/category.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ export const useTextToSpeechCategory: CategoryMetaType = {
88
isComingSoon: true,
99
icon: SpeechIcon,
1010
};
11+
12+
export default useTextToSpeechCategory;

packages/ui/cuicui/hooks/use-text-to-speech/hook/advanced-demo.variant.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { type TTSHookResponse, useTts } from "tts-react";
1111

1212
export const PreviewUseTextToSpeechAdvancedDemo = () => {
1313
if (typeof window === "undefined") {
14-
return null;
14+
return <p>Your browser does not support SpeechSynthesis</p>;
1515
}
1616
const [pitch, setPitch] = useState(1);
1717
const [volume, setVolume] = useState(1);

packages/ui/section-list.ts

+48
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import hooks_use_session_storage_category from "@/cuicui/hooks/use-session-stora
6060
import hooks_use_speech_to_text_category from "@/cuicui/hooks/use-speech-to-text/category";
6161
import hooks_use_step_category from "@/cuicui/hooks/use-step/category";
6262
import hooks_use_stopwatch_category from "@/cuicui/hooks/use-stopwatch/category";
63+
import hooks_use_text_to_speech_category from "@/cuicui/hooks/use-text-to-speech/category";
6364
import hooks_use_throttle_category from "@/cuicui/hooks/use-throttle/category";
6465
import hooks_use_video_category from "@/cuicui/hooks/use-video/category";
6566
import hooks_use_window_scroll_position_category from "@/cuicui/hooks/use-window-scroll-position/category";
@@ -110,6 +111,7 @@ import common_ui_badges_clerk_badge_component from "@/cuicui/common-ui/badges/cl
110111
import common_ui_badges_modern_simple_badges_component from "@/cuicui/common-ui/badges/modern-simple-badges/component";
111112
import common_ui_blockquotes_modern_simple_quote_component from "@/cuicui/common-ui/blockquotes/modern-simple-quote/component";
112113
import common_ui_buttons_before_effect_button_component from "@/cuicui/common-ui/buttons/before-effect-button/component";
114+
import common_ui_buttons_call_to_action_button_component from "@/cuicui/common-ui/buttons/call-to-action-button/component";
113115
import common_ui_buttons_dual_action_button_component from "@/cuicui/common-ui/buttons/dual-action-button/component";
114116
import common_ui_buttons_github_stars_component from "@/cuicui/common-ui/buttons/github-stars/component";
115117
import common_ui_buttons_growing_button_component from "@/cuicui/common-ui/buttons/growing-button/component";
@@ -156,6 +158,7 @@ import hooks_use_session_storage_hook_component from "@/cuicui/hooks/use-session
156158
import hooks_use_speech_to_text_hook_component from "@/cuicui/hooks/use-speech-to-text/hook/component";
157159
import hooks_use_step_hook_component from "@/cuicui/hooks/use-step/hook/component";
158160
import hooks_use_stopwatch_hook_component from "@/cuicui/hooks/use-stopwatch/hook/component";
161+
import hooks_use_text_to_speech_hook_component from "@/cuicui/hooks/use-text-to-speech/hook/component";
159162
import hooks_use_throttle_hook_component from "@/cuicui/hooks/use-throttle/hook/component";
160163
import hooks_use_video_hook_component from "@/cuicui/hooks/use-video/hook/component";
161164
import hooks_use_window_scroll_position_hook_component from "@/cuicui/hooks/use-window-scroll-position/hook/component";
@@ -230,6 +233,7 @@ import common_ui_blockquotes_modern_simple_quote_default_variant from "@/cuicui/
230233
import common_ui_buttons_before_effect_button_advanced_button_variant from "@/cuicui/common-ui/buttons/before-effect-button/advanced-button.variant";
231234
import common_ui_buttons_before_effect_button_default_variant from "@/cuicui/common-ui/buttons/before-effect-button/default.variant";
232235
import common_ui_buttons_before_effect_button_hover_only_variant from "@/cuicui/common-ui/buttons/before-effect-button/hover-only.variant";
236+
import common_ui_buttons_call_to_action_button_call_to_action_button_variant from "@/cuicui/common-ui/buttons/call-to-action-button/call-to-action-button.variant";
233237
import common_ui_buttons_dual_action_button_dual_action_button_variant from "@/cuicui/common-ui/buttons/dual-action-button/dual-action-button.variant";
234238
import common_ui_buttons_github_stars_github_stars_variant from "@/cuicui/common-ui/buttons/github-stars/github-stars.variant";
235239
import common_ui_buttons_github_stars_gradient_container_variant from "@/cuicui/common-ui/buttons/github-stars/gradient-container.variant";
@@ -284,6 +288,8 @@ import hooks_use_session_storage_hook_session_storage_variant from "@/cuicui/hoo
284288
import hooks_use_speech_to_text_hook_use_speech_to_text_variant from "@/cuicui/hooks/use-speech-to-text/hook/use-speech-to-text.variant";
285289
import hooks_use_step_hook_use_step_variant from "@/cuicui/hooks/use-step/hook/use-step.variant";
286290
import hooks_use_stopwatch_hook_use_stopwatch_variant from "@/cuicui/hooks/use-stopwatch/hook/use-stopwatch.variant";
291+
import hooks_use_text_to_speech_hook_advanced_demo_variant from "@/cuicui/hooks/use-text-to-speech/hook/advanced-demo.variant";
292+
import hooks_use_text_to_speech_hook_use_text_to_speech_variant from "@/cuicui/hooks/use-text-to-speech/hook/use-text-to-speech.variant";
287293
import hooks_use_throttle_hook_use_throttle_variant from "@/cuicui/hooks/use-throttle/hook/use-throttle.variant";
288294
import hooks_use_video_hook_use_video_variant from "@/cuicui/hooks/use-video/hook/use-video.variant";
289295
import hooks_use_window_scroll_position_hook_use_window_scroll_position_variant from "@/cuicui/hooks/use-window-scroll-position/hook/use-window-scroll-position.variant";
@@ -949,6 +955,20 @@ export const sectionList: SectionType[] = [
949955
},
950956
],
951957
},
958+
{
959+
meta: common_ui_buttons_call_to_action_button_component,
960+
slug: "call-to-action-button",
961+
variants: [
962+
{
963+
name: "call-to-action-button",
964+
variantComponent:
965+
common_ui_buttons_call_to_action_button_call_to_action_button_variant,
966+
slug: "call-to-action-button",
967+
pathname:
968+
"cuicui/common-ui/buttons/call-to-action-button/call-to-action-button.variant.tsx",
969+
},
970+
],
971+
},
952972
{
953973
meta: common_ui_buttons_dual_action_button_component,
954974
slug: "dual-action-button",
@@ -1849,6 +1869,34 @@ export const sectionList: SectionType[] = [
18491869
},
18501870
],
18511871
},
1872+
{
1873+
meta: hooks_use_text_to_speech_category,
1874+
slug: "use-text-to-speech",
1875+
components: [
1876+
{
1877+
meta: hooks_use_text_to_speech_hook_component,
1878+
slug: "hook",
1879+
variants: [
1880+
{
1881+
name: "advanced-demo",
1882+
variantComponent:
1883+
hooks_use_text_to_speech_hook_advanced_demo_variant,
1884+
slug: "advanced-demo",
1885+
pathname:
1886+
"cuicui/hooks/use-text-to-speech/hook/advanced-demo.variant.tsx",
1887+
},
1888+
{
1889+
name: "use-text-to-speech",
1890+
variantComponent:
1891+
hooks_use_text_to_speech_hook_use_text_to_speech_variant,
1892+
slug: "use-text-to-speech",
1893+
pathname:
1894+
"cuicui/hooks/use-text-to-speech/hook/use-text-to-speech.variant.tsx",
1895+
},
1896+
],
1897+
},
1898+
],
1899+
},
18521900
{
18531901
meta: hooks_use_throttle_category,
18541902
slug: "use-throttle",

0 commit comments

Comments
 (0)