@arolariu/components 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/EXAMPLES.md +1035 -1035
- package/changelog.md +5 -0
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/alert.js.map +1 -1
- package/dist/components/ui/aspect-ratio.js.map +1 -1
- package/dist/components/ui/avatar.js.map +1 -1
- package/dist/components/ui/background-beams.js.map +1 -1
- package/dist/components/ui/badge.js.map +1 -1
- package/dist/components/ui/breadcrumb.js.map +1 -1
- package/dist/components/ui/bubble-background.js.map +1 -1
- package/dist/components/ui/button-group.js.map +1 -1
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/calendar.js.map +1 -1
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/carousel.js.map +1 -1
- package/dist/components/ui/chart.js.map +1 -1
- package/dist/components/ui/checkbox.js +2 -2
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/collapsible.d.ts +2 -1
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js +2 -30
- package/dist/components/ui/collapsible.js.map +1 -1
- package/dist/components/ui/command.js.map +1 -1
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/counting-number.js.map +1 -1
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/dot-background.js.map +1 -1
- package/dist/components/ui/drawer.js.map +1 -1
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/dropdrawer.js.map +1 -1
- package/dist/components/ui/empty.js.map +1 -1
- package/dist/components/ui/field.js +1 -1
- package/dist/components/ui/field.js.map +1 -1
- package/dist/components/ui/fireworks-background.js.map +1 -1
- package/dist/components/ui/flip-button.js.map +1 -1
- package/dist/components/ui/form.d.ts.map +1 -1
- package/dist/components/ui/form.js +4 -3
- package/dist/components/ui/form.js.map +1 -1
- package/dist/components/ui/gradient-background.js.map +1 -1
- package/dist/components/ui/gradient-text.js.map +1 -1
- package/dist/components/ui/highlight-text.js.map +1 -1
- package/dist/components/ui/hole-background.js.map +1 -1
- package/dist/components/ui/hover-card.js.map +1 -1
- package/dist/components/ui/input-group.d.ts.map +1 -1
- package/dist/components/ui/input-group.js.map +1 -1
- package/dist/components/ui/input-otp.js.map +1 -1
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/item.js.map +1 -1
- package/dist/components/ui/kbd.js.map +1 -1
- package/dist/components/ui/label.js.map +1 -1
- package/dist/components/ui/menubar.js.map +1 -1
- package/dist/components/ui/navigation-menu.js.map +1 -1
- package/dist/components/ui/pagination.js.map +1 -1
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/progress.js.map +1 -1
- package/dist/components/ui/radio-group.js.map +1 -1
- package/dist/components/ui/resizable.js.map +1 -1
- package/dist/components/ui/ripple-button.js.map +1 -1
- package/dist/components/ui/scratcher.js.map +1 -1
- package/dist/components/ui/scroll-area.js.map +1 -1
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/separator.js.map +1 -1
- package/dist/components/ui/sheet.js.map +1 -1
- package/dist/components/ui/sidebar.d.ts.map +1 -1
- package/dist/components/ui/sidebar.js.map +1 -1
- package/dist/components/ui/skeleton.js.map +1 -1
- package/dist/components/ui/slider.js.map +1 -1
- package/dist/components/ui/sonner.js.map +1 -1
- package/dist/components/ui/spinner.js.map +1 -1
- package/dist/components/ui/switch.js.map +1 -1
- package/dist/components/ui/table.d.ts.map +1 -1
- package/dist/components/ui/table.js.map +1 -1
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/components/ui/textarea.js.map +1 -1
- package/dist/components/ui/toggle-group.js.map +1 -1
- package/dist/components/ui/toggle.js.map +1 -1
- package/dist/components/ui/tooltip.js.map +1 -1
- package/dist/components/ui/typewriter.js +6 -2
- package/dist/components/ui/typewriter.js.map +1 -1
- package/dist/hooks/useIsMobile.js.map +1 -1
- package/dist/hooks/useWindowSize.js.map +1 -1
- package/dist/index.css +25 -1779
- package/dist/index.css.map +1 -1
- package/dist/lib/utilities.js.map +1 -1
- package/package.json +2 -15
- package/src/components/ui/chart.tsx +1 -1
- package/src/components/ui/checkbox.tsx +2 -2
- package/src/components/ui/collapsible.tsx +3 -1
- package/src/components/ui/field.tsx +1 -1
- package/src/components/ui/form.tsx +8 -4
- package/src/components/ui/input-group.tsx +2 -0
- package/src/components/ui/sidebar.tsx +2 -0
- package/src/components/ui/table.tsx +2 -0
- package/src/components/ui/typewriter.tsx +2 -2
- package/src/index.css +6 -6
- package/dist/components/ui/field.d.ts +0 -26
- package/dist/components/ui/field.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/empty.js","sources":["../../../src/components/ui/empty.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport {cva, type VariantProps} from \"class-variance-authority\";\r\nimport * as React from \"react\";\r\n\r\nfunction Empty({className, ...props}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot='empty'\r\n className={cn(\r\n \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction EmptyHeader({className, ...props}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot='empty-header'\r\n className={cn(\"flex max-w-sm flex-col items-center gap-2 text-center\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nconst emptyMediaVariants = cva(\"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\", {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n icon: \"bg-neutral-100 text-neutral-950 flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6 dark:bg-neutral-800 dark:text-neutral-50\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n});\r\n\r\nfunction EmptyMedia({className, variant = \"default\", ...props}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\r\n return (\r\n <div\r\n data-slot='empty-icon'\r\n data-variant={variant}\r\n className={cn(emptyMediaVariants({variant, className}))}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction EmptyTitle({className, ...props}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot='empty-title'\r\n className={cn(\"text-lg font-medium tracking-tight\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction EmptyDescription({className, ...props}: React.ComponentProps<\"p\">) {\r\n return (\r\n <div\r\n data-slot='empty-description'\r\n className={cn(\r\n \"text-sm/relaxed text-neutral-500 dark:text-neutral-400 [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-neutral-900 dark:[&>a:hover]:text-neutral-50\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction EmptyContent({className, ...props}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot='empty-content'\r\n className={cn(\"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle};\r\n"],"names":["Empty","className","props","cn","EmptyHeader","emptyMediaVariants","cva","EmptyMedia","variant","EmptyTitle","EmptyDescription","EmptyContent"],"mappings":";;;;;AAMA,SAASA,MAAM,EAACC,SAAS,EAAE,GAAGC,OAAmC;IAC/D,OAAO,WAAP,GACE,IAAC;QACC,aAAU;QACV,WAAWC,GACT,gIACAF;QAED,GAAGC,KAAK;;AAGf;AAEA,SAASE,YAAY,EAACH,SAAS,EAAE,GAAGC,OAAmC;IACrE,OAAO,WAAP,GACE,IAAC;QACC,aAAU;QACV,WAAWC,GAAG,yDAAyDF;QACtE,GAAGC,KAAK;;AAGf;AAEA,MAAMG,qBAAqBC,IAAI,+FAA+F;IAC5H,UAAU;QACR,SAAS;YACP,SAAS;YACT,MAAM;QACR;IACF;IACA,iBAAiB;QACf,SAAS;IACX;AACF;AAEA,SAASC,WAAW,EAACN,SAAS,EAAEO,UAAU,SAAS,EAAE,GAAGN,OAA6E;IACnI,OAAO,WAAP,GACE,IAAC;QACC,aAAU;QACV,gBAAcM;QACd,WAAWL,GAAGE,mBAAmB;YAACG;YAASP;QAAS;QACnD,GAAGC,KAAK;;AAGf;AAEA,SAASO,WAAW,EAACR,SAAS,EAAE,GAAGC,OAAmC;IACpE,OAAO,WAAP,GACE,IAAC;QACC,aAAU;QACV,WAAWC,GAAG,sCAAsCF;QACnD,GAAGC,KAAK;;AAGf;AAEA,SAASQ,iBAAiB,EAACT,SAAS,EAAE,GAAGC,OAAiC;IACxE,OAAO,WAAP,GACE,IAAC;QACC,aAAU;QACV,WAAWC,GACT,iKACAF;QAED,GAAGC,KAAK;;AAGf;AAEA,SAASS,aAAa,EAACV,SAAS,EAAE,GAAGC,OAAmC;IACtE,OAAO,WAAP,GACE,IAAC;QACC,aAAU;QACV,WAAWC,GAAG,iFAAiFF;QAC9F,GAAGC,KAAK;;AAGf"}
|
|
@@ -98,7 +98,7 @@ function FieldSeparator({ children, className, ...props }) {
|
|
|
98
98
|
/*#__PURE__*/ jsx(Separator, {
|
|
99
99
|
className: "absolute inset-0 top-1/2"
|
|
100
100
|
}),
|
|
101
|
-
children && /*#__PURE__*/ jsx("span", {
|
|
101
|
+
Boolean(children) && /*#__PURE__*/ jsx("span", {
|
|
102
102
|
className: "relative mx-auto block w-fit bg-white px-2 text-neutral-500 dark:bg-neutral-950 dark:text-neutral-400",
|
|
103
103
|
"data-slot": "field-separator-content",
|
|
104
104
|
children: children
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/field.js","sources":["../../../src/components/ui/field.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {cva, type VariantProps} from \"class-variance-authority\";\r\nimport * as React from \"react\";\r\n\r\nimport {Label} from \"@/components/ui/label\";\r\nimport {Separator} from \"@/components/ui/separator\";\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nfunction FieldSet({className, ...props}: React.ComponentProps<\"fieldset\">) {\r\n return (\r\n <fieldset\r\n data-slot='field-set'\r\n className={cn(\"flex flex-col gap-6\", \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FieldLegend({className, variant = \"legend\", ...props}: React.ComponentProps<\"legend\"> & {variant?: \"legend\" | \"label\"}) {\r\n return (\r\n <legend\r\n data-slot='field-legend'\r\n data-variant={variant}\r\n className={cn(\"mb-3 font-medium\", \"data-[variant=legend]:text-base\", \"data-[variant=label]:text-sm\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FieldGroup({className, ...props}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot='field-group'\r\n className={cn(\r\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nconst fieldVariants = cva(\"group/field data-[invalid=true]:text-red-500 flex w-full gap-3 dark:data-[invalid=true]:text-red-900\", {\r\n variants: {\r\n orientation: {\r\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\r\n horizontal: [\r\n \"flex-row items-center\",\r\n \"[&>[data-slot=field-label]]:flex-auto\",\r\n \"has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start\",\r\n ],\r\n responsive: [\r\n \"@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\r\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\r\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\r\n ],\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"vertical\",\r\n },\r\n});\r\n\r\nfunction Field({className, orientation = \"vertical\", ...props}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\r\n return (\r\n <div\r\n role='group'\r\n data-slot='field'\r\n data-orientation={orientation}\r\n className={cn(fieldVariants({orientation}), className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FieldContent({className, ...props}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot='field-content'\r\n className={cn(\"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FieldLabel({className, ...props}: React.ComponentProps<typeof Label>) {\r\n return (\r\n <Label\r\n data-slot='field-label'\r\n className={cn(\r\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\r\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4\",\r\n \"has-data-[state=checked]:border-neutral-900 has-data-[state=checked]:bg-neutral-900/5 dark:has-data-[state=checked]:border-neutral-50 dark:dark:has-data-[state=checked]:bg-neutral-50/10 dark:has-data-[state=checked]:bg-neutral-50/5 dark:has-data-[state=checked]:bg-neutral-900/10\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FieldTitle({className, ...props}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot='field-label'\r\n className={cn(\r\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FieldDescription({className, ...props}: React.ComponentProps<\"p\">) {\r\n return (\r\n <p\r\n data-slot='field-description'\r\n className={cn(\r\n \"text-sm leading-normal font-normal text-neutral-500 group-has-[[data-orientation=horizontal]]/field:text-balance dark:text-neutral-400\",\r\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\r\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-neutral-900 dark:[&>a:hover]:text-neutral-50\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FieldSeparator({\r\n children,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n children?: React.ReactNode;\r\n}) {\r\n return (\r\n <div\r\n data-slot='field-separator'\r\n data-content={Boolean(children) || undefined}\r\n className={cn(\"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\", className)}\r\n {...props}>\r\n <Separator className='absolute inset-0 top-1/2' />\r\n {Boolean(children) && (\r\n <span\r\n className='relative mx-auto block w-fit bg-white px-2 text-neutral-500 dark:bg-neutral-950 dark:text-neutral-400'\r\n data-slot='field-separator-content'>\r\n {children}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nfunction FieldError({\r\n className,\r\n children,\r\n errors,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n errors?: Array<{message?: string} | undefined>;\r\n}) {\r\n // eslint-disable-next-line sonarjs/function-return-type -- expected different return type.\r\n const content = React.useMemo(() => {\r\n if (children) {\r\n return children;\r\n }\r\n\r\n if (!errors) {\r\n return null;\r\n }\r\n\r\n if (errors?.length === 1 && errors[0]?.message) {\r\n return errors[0].message;\r\n }\r\n\r\n return (\r\n <ul className='ml-4 flex list-disc flex-col gap-1'>\r\n {errors.map((error, index) => error?.message && <li key={index}>{error.message}</li>)}\r\n </ul>\r\n );\r\n }, [children, errors]);\r\n\r\n if (!content) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n role='alert'\r\n data-slot='field-error'\r\n className={cn(\"text-sm font-normal text-red-500 dark:text-red-900\", className)}\r\n {...props}>\r\n {content}\r\n </div>\r\n );\r\n}\r\n\r\nexport {Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle};\r\n"],"names":["FieldSet","className","props","cn","FieldLegend","variant","FieldGroup","fieldVariants","cva","Field","orientation","FieldContent","FieldLabel","Label","FieldTitle","FieldDescription","FieldSeparator","children","Boolean","undefined","Separator","FieldError","errors","content","React","error","index"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components\\ui\\fireworks-background.js","sources":["webpack://@arolariu/components/./src/components/ui/fireworks-background.tsx"],"sourcesContent":["\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nconst rand = (min: number, max: number): number => Math.random() * (max - min) + min;\r\nconst randInt = (min: number, max: number): number => Math.floor(Math.random() * (max - min) + min);\r\nconst randColor = (): string => `hsl(${randInt(0, 360)}, 100%, 50%)`;\r\n\r\ninterface ParticleType {\r\n x: number;\r\n y: number;\r\n color: string;\r\n speed: number;\r\n direction: number;\r\n vx: number;\r\n vy: number;\r\n gravity: number;\r\n friction: number;\r\n alpha: number;\r\n decay: number;\r\n size: number;\r\n update: () => void;\r\n draw: (ctx: CanvasRenderingContext2D) => void;\r\n isAlive: () => boolean;\r\n}\r\n\r\nconst createParticle = (\r\n x: number,\r\n y: number,\r\n color: string,\r\n speed: number,\r\n direction: number,\r\n gravity: number,\r\n friction: number,\r\n size: number,\r\n): ParticleType => {\r\n const vx = Math.cos(direction) * speed;\r\n const vy = Math.sin(direction) * speed;\r\n const alpha = 1;\r\n const decay = rand(0.005, 0.02);\r\n\r\n return {\r\n x,\r\n y,\r\n color,\r\n speed,\r\n direction,\r\n vx,\r\n vy,\r\n gravity,\r\n friction,\r\n alpha,\r\n decay,\r\n size,\r\n update() {\r\n this.vx *= this.friction;\r\n this.vy *= this.friction;\r\n this.vy += this.gravity;\r\n this.x += this.vx;\r\n this.y += this.vy;\r\n this.alpha -= this.decay;\r\n },\r\n draw(ctx: CanvasRenderingContext2D) {\r\n ctx.save();\r\n ctx.globalAlpha = this.alpha;\r\n ctx.beginPath();\r\n ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);\r\n ctx.fillStyle = this.color;\r\n ctx.fill();\r\n ctx.restore();\r\n },\r\n isAlive() {\r\n return this.alpha > 0;\r\n },\r\n };\r\n};\r\n\r\ninterface FireworkType {\r\n x: number;\r\n y: number;\r\n targetY: number;\r\n color: string;\r\n speed: number;\r\n size: number;\r\n angle: number;\r\n vx: number;\r\n vy: number;\r\n trail: {x: number; y: number}[];\r\n trailLength: number;\r\n exploded: boolean;\r\n update: () => boolean;\r\n explode: () => void;\r\n draw: (ctx: CanvasRenderingContext2D) => void;\r\n}\r\n\r\nconst createFirework = (\r\n x: number,\r\n y: number,\r\n targetY: number,\r\n color: string,\r\n speed: number,\r\n size: number,\r\n particleSpeed: {min: number; max: number} | number,\r\n particleSize: {min: number; max: number} | number,\r\n onExplode: (particles: ParticleType[]) => void,\r\n): FireworkType => {\r\n const angle = -Math.PI / 2 + rand(-0.3, 0.3);\r\n const vx = Math.cos(angle) * speed;\r\n const vy = Math.sin(angle) * speed;\r\n const trail: {x: number; y: number}[] = [];\r\n const trailLength = randInt(10, 25);\r\n\r\n return {\r\n x,\r\n y,\r\n targetY,\r\n color,\r\n speed,\r\n size,\r\n angle,\r\n vx,\r\n vy,\r\n trail,\r\n trailLength,\r\n exploded: false,\r\n update() {\r\n this.trail.push({x: this.x, y: this.y});\r\n if (this.trail.length > this.trailLength) {\r\n this.trail.shift();\r\n }\r\n this.x += this.vx;\r\n this.y += this.vy;\r\n this.vy += 0.02;\r\n if (this.vy >= 0 || this.y <= this.targetY) {\r\n this.explode();\r\n return false;\r\n }\r\n return true;\r\n },\r\n explode() {\r\n const numParticles = randInt(50, 150);\r\n const particles: ParticleType[] = [];\r\n for (let i = 0; i < numParticles; i++) {\r\n const particleAngle = rand(0, Math.PI * 2);\r\n const localParticleSpeed = getValueByRange(particleSpeed);\r\n const localParticleSize = getValueByRange(particleSize);\r\n particles.push(createParticle(this.x, this.y, this.color, localParticleSpeed, particleAngle, 0.05, 0.98, localParticleSize));\r\n }\r\n onExplode(particles);\r\n },\r\n draw(ctx: CanvasRenderingContext2D) {\r\n ctx.save();\r\n ctx.beginPath();\r\n if (this.trail.length > 1) {\r\n ctx.moveTo(this.trail[0].x, this.trail[0].y);\r\n for (const point of this.trail) {\r\n ctx.lineTo(point.x, point.y);\r\n }\r\n } else {\r\n ctx.moveTo(this.x, this.y);\r\n ctx.lineTo(this.x, this.y);\r\n }\r\n ctx.strokeStyle = this.color;\r\n ctx.lineWidth = this.size;\r\n ctx.lineCap = \"round\";\r\n ctx.stroke();\r\n ctx.restore();\r\n },\r\n };\r\n};\r\n\r\nconst getValueByRange = (range: {min: number; max: number} | number): number => {\r\n if (typeof range === \"number\") {\r\n return range;\r\n }\r\n return rand(range.min, range.max);\r\n};\r\n\r\nconst getColor = (color: string | string[] | undefined): string => {\r\n if (Array.isArray(color)) {\r\n return color[randInt(0, color.length)];\r\n }\r\n return color ?? randColor();\r\n};\r\n\r\ninterface FireworksBackgroundProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\"> {\r\n canvasProps?: React.HTMLAttributes<HTMLCanvasElement>;\r\n population?: number;\r\n color?: string | string[];\r\n fireworkSpeed?: {min: number; max: number} | number;\r\n fireworkSize?: {min: number; max: number} | number;\r\n particleSpeed?: {min: number; max: number} | number;\r\n particleSize?: {min: number; max: number} | number;\r\n}\r\n\r\nconst FireworksBackground = React.forwardRef<HTMLDivElement, FireworksBackgroundProps>(\r\n (\r\n {\r\n className,\r\n canvasProps,\r\n population = 1,\r\n color,\r\n fireworkSpeed = {min: 4, max: 8},\r\n fireworkSize = {min: 2, max: 5},\r\n particleSpeed = {min: 2, max: 7},\r\n particleSize = {min: 1, max: 5},\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n React.useImperativeHandle(ref, () => containerRef.current as HTMLDivElement);\r\n\r\n React.useEffect(() => {\r\n const canvas = canvasRef.current;\r\n const container = containerRef.current;\r\n if (!canvas || !container) return;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n let maxX = window.innerWidth;\r\n let ratio = container.offsetHeight / container.offsetWidth;\r\n let maxY = maxX * ratio;\r\n canvas.width = maxX;\r\n canvas.height = maxY;\r\n\r\n const setCanvasSize = () => {\r\n maxX = window.innerWidth;\r\n ratio = container.offsetHeight / container.offsetWidth;\r\n maxY = maxX * ratio;\r\n canvas.width = maxX;\r\n canvas.height = maxY;\r\n };\r\n window.addEventListener(\"resize\", setCanvasSize);\r\n\r\n const explosions: ParticleType[] = [];\r\n const fireworks: FireworkType[] = [];\r\n\r\n const handleExplosion = (particles: ParticleType[]) => {\r\n explosions.push(...particles);\r\n };\r\n\r\n const launchFirework = () => {\r\n const x = rand(maxX * 0.1, maxX * 0.9);\r\n const y = maxY;\r\n const targetY = rand(maxY * 0.1, maxY * 0.4);\r\n const fireworkColor = getColor(color);\r\n const speed = getValueByRange(fireworkSpeed);\r\n const size = getValueByRange(fireworkSize);\r\n fireworks.push(createFirework(x, y, targetY, fireworkColor, speed, size, particleSpeed, particleSize, handleExplosion));\r\n const timeout = rand(300, 800) / population;\r\n setTimeout(launchFirework, timeout);\r\n };\r\n\r\n launchFirework();\r\n\r\n // eslint-disable-next-line init-declarations -- firework animation id\r\n let animationFrameId: number;\r\n const animate = () => {\r\n ctx.clearRect(0, 0, maxX, maxY);\r\n\r\n for (let i = fireworks.length - 1; i >= 0; i--) {\r\n const firework = fireworks[i];\r\n if (firework.update()) {\r\n firework.draw(ctx);\r\n } else {\r\n fireworks.splice(i, 1);\r\n }\r\n }\r\n\r\n for (let i = explosions.length - 1; i >= 0; i--) {\r\n const particle = explosions[i];\r\n particle.update();\r\n if (particle.isAlive()) {\r\n particle.draw(ctx);\r\n } else {\r\n explosions.splice(i, 1);\r\n }\r\n }\r\n\r\n animationFrameId = requestAnimationFrame(animate);\r\n };\r\n\r\n animate();\r\n\r\n const handleClick = (event: MouseEvent) => {\r\n const x = event.clientX;\r\n const y = maxY;\r\n const targetY = event.clientY;\r\n const fireworkColor = getColor(color);\r\n const speed = getValueByRange(fireworkSpeed);\r\n const size = getValueByRange(fireworkSize);\r\n fireworks.push(createFirework(x, y, targetY, fireworkColor, speed, size, particleSpeed, particleSize, handleExplosion));\r\n };\r\n\r\n container.addEventListener(\"click\", handleClick);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", setCanvasSize);\r\n container.removeEventListener(\"click\", handleClick);\r\n cancelAnimationFrame(animationFrameId);\r\n };\r\n }, [population, color, fireworkSpeed, fireworkSize, particleSpeed, particleSize]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"relative size-full overflow-hidden\", className)}\r\n {...props}>\r\n <canvas\r\n {...canvasProps}\r\n ref={canvasRef}\r\n className={cn(\"absolute inset-0 size-full\", canvasProps?.className)}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nFireworksBackground.displayName = \"FireworksBackground\";\r\n\r\nexport {FireworksBackground, type FireworksBackgroundProps};\r\n"],"names":["rand","min","max","Math","randInt","randColor","createParticle","x","y","color","speed","direction","gravity","friction","size","vx","vy","alpha","decay","ctx","createFirework","targetY","particleSpeed","particleSize","onExplode","angle","trail","trailLength","numParticles","particles","i","particleAngle","localParticleSpeed","getValueByRange","localParticleSize","point","range","getColor","Array","FireworksBackground","React","className","canvasProps","population","fireworkSpeed","fireworkSize","props","ref","canvasRef","containerRef","canvas","container","maxX","window","ratio","maxY","setCanvasSize","explosions","fireworks","handleExplosion","launchFirework","fireworkColor","timeout","setTimeout","animationFrameId","animate","firework","particle","requestAnimationFrame","handleClick","event","cancelAnimationFrame","cn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/ui/fireworks-background.js","sources":["../../../src/components/ui/fireworks-background.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nconst rand = (min: number, max: number): number => Math.random() * (max - min) + min;\r\nconst randInt = (min: number, max: number): number => Math.floor(Math.random() * (max - min) + min);\r\nconst randColor = (): string => `hsl(${randInt(0, 360)}, 100%, 50%)`;\r\n\r\ninterface ParticleType {\r\n x: number;\r\n y: number;\r\n color: string;\r\n speed: number;\r\n direction: number;\r\n vx: number;\r\n vy: number;\r\n gravity: number;\r\n friction: number;\r\n alpha: number;\r\n decay: number;\r\n size: number;\r\n update: () => void;\r\n draw: (ctx: CanvasRenderingContext2D) => void;\r\n isAlive: () => boolean;\r\n}\r\n\r\nconst createParticle = (\r\n x: number,\r\n y: number,\r\n color: string,\r\n speed: number,\r\n direction: number,\r\n gravity: number,\r\n friction: number,\r\n size: number,\r\n): ParticleType => {\r\n const vx = Math.cos(direction) * speed;\r\n const vy = Math.sin(direction) * speed;\r\n const alpha = 1;\r\n const decay = rand(0.005, 0.02);\r\n\r\n return {\r\n x,\r\n y,\r\n color,\r\n speed,\r\n direction,\r\n vx,\r\n vy,\r\n gravity,\r\n friction,\r\n alpha,\r\n decay,\r\n size,\r\n update() {\r\n this.vx *= this.friction;\r\n this.vy *= this.friction;\r\n this.vy += this.gravity;\r\n this.x += this.vx;\r\n this.y += this.vy;\r\n this.alpha -= this.decay;\r\n },\r\n draw(ctx: CanvasRenderingContext2D) {\r\n ctx.save();\r\n ctx.globalAlpha = this.alpha;\r\n ctx.beginPath();\r\n ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);\r\n ctx.fillStyle = this.color;\r\n ctx.fill();\r\n ctx.restore();\r\n },\r\n isAlive() {\r\n return this.alpha > 0;\r\n },\r\n };\r\n};\r\n\r\ninterface FireworkType {\r\n x: number;\r\n y: number;\r\n targetY: number;\r\n color: string;\r\n speed: number;\r\n size: number;\r\n angle: number;\r\n vx: number;\r\n vy: number;\r\n trail: {x: number; y: number}[];\r\n trailLength: number;\r\n exploded: boolean;\r\n update: () => boolean;\r\n explode: () => void;\r\n draw: (ctx: CanvasRenderingContext2D) => void;\r\n}\r\n\r\nconst createFirework = (\r\n x: number,\r\n y: number,\r\n targetY: number,\r\n color: string,\r\n speed: number,\r\n size: number,\r\n particleSpeed: {min: number; max: number} | number,\r\n particleSize: {min: number; max: number} | number,\r\n onExplode: (particles: ParticleType[]) => void,\r\n): FireworkType => {\r\n const angle = -Math.PI / 2 + rand(-0.3, 0.3);\r\n const vx = Math.cos(angle) * speed;\r\n const vy = Math.sin(angle) * speed;\r\n const trail: {x: number; y: number}[] = [];\r\n const trailLength = randInt(10, 25);\r\n\r\n return {\r\n x,\r\n y,\r\n targetY,\r\n color,\r\n speed,\r\n size,\r\n angle,\r\n vx,\r\n vy,\r\n trail,\r\n trailLength,\r\n exploded: false,\r\n update() {\r\n this.trail.push({x: this.x, y: this.y});\r\n if (this.trail.length > this.trailLength) {\r\n this.trail.shift();\r\n }\r\n this.x += this.vx;\r\n this.y += this.vy;\r\n this.vy += 0.02;\r\n if (this.vy >= 0 || this.y <= this.targetY) {\r\n this.explode();\r\n return false;\r\n }\r\n return true;\r\n },\r\n explode() {\r\n const numParticles = randInt(50, 150);\r\n const particles: ParticleType[] = [];\r\n for (let i = 0; i < numParticles; i++) {\r\n const particleAngle = rand(0, Math.PI * 2);\r\n const localParticleSpeed = getValueByRange(particleSpeed);\r\n const localParticleSize = getValueByRange(particleSize);\r\n particles.push(createParticle(this.x, this.y, this.color, localParticleSpeed, particleAngle, 0.05, 0.98, localParticleSize));\r\n }\r\n onExplode(particles);\r\n },\r\n draw(ctx: CanvasRenderingContext2D) {\r\n ctx.save();\r\n ctx.beginPath();\r\n if (this.trail.length > 1) {\r\n ctx.moveTo(this.trail[0].x, this.trail[0].y);\r\n for (const point of this.trail) {\r\n ctx.lineTo(point.x, point.y);\r\n }\r\n } else {\r\n ctx.moveTo(this.x, this.y);\r\n ctx.lineTo(this.x, this.y);\r\n }\r\n ctx.strokeStyle = this.color;\r\n ctx.lineWidth = this.size;\r\n ctx.lineCap = \"round\";\r\n ctx.stroke();\r\n ctx.restore();\r\n },\r\n };\r\n};\r\n\r\nconst getValueByRange = (range: {min: number; max: number} | number): number => {\r\n if (typeof range === \"number\") {\r\n return range;\r\n }\r\n return rand(range.min, range.max);\r\n};\r\n\r\nconst getColor = (color: string | string[] | undefined): string => {\r\n if (Array.isArray(color)) {\r\n return color[randInt(0, color.length)];\r\n }\r\n return color ?? randColor();\r\n};\r\n\r\ninterface FireworksBackgroundProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\"> {\r\n canvasProps?: React.HTMLAttributes<HTMLCanvasElement>;\r\n population?: number;\r\n color?: string | string[];\r\n fireworkSpeed?: {min: number; max: number} | number;\r\n fireworkSize?: {min: number; max: number} | number;\r\n particleSpeed?: {min: number; max: number} | number;\r\n particleSize?: {min: number; max: number} | number;\r\n}\r\n\r\nconst FireworksBackground = React.forwardRef<HTMLDivElement, FireworksBackgroundProps>(\r\n (\r\n {\r\n className,\r\n canvasProps,\r\n population = 1,\r\n color,\r\n fireworkSpeed = {min: 4, max: 8},\r\n fireworkSize = {min: 2, max: 5},\r\n particleSpeed = {min: 2, max: 7},\r\n particleSize = {min: 1, max: 5},\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n React.useImperativeHandle(ref, () => containerRef.current as HTMLDivElement);\r\n\r\n React.useEffect(() => {\r\n const canvas = canvasRef.current;\r\n const container = containerRef.current;\r\n if (!canvas || !container) return;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n let maxX = window.innerWidth;\r\n let ratio = container.offsetHeight / container.offsetWidth;\r\n let maxY = maxX * ratio;\r\n canvas.width = maxX;\r\n canvas.height = maxY;\r\n\r\n const setCanvasSize = () => {\r\n maxX = window.innerWidth;\r\n ratio = container.offsetHeight / container.offsetWidth;\r\n maxY = maxX * ratio;\r\n canvas.width = maxX;\r\n canvas.height = maxY;\r\n };\r\n window.addEventListener(\"resize\", setCanvasSize);\r\n\r\n const explosions: ParticleType[] = [];\r\n const fireworks: FireworkType[] = [];\r\n\r\n const handleExplosion = (particles: ParticleType[]) => {\r\n explosions.push(...particles);\r\n };\r\n\r\n const launchFirework = () => {\r\n const x = rand(maxX * 0.1, maxX * 0.9);\r\n const y = maxY;\r\n const targetY = rand(maxY * 0.1, maxY * 0.4);\r\n const fireworkColor = getColor(color);\r\n const speed = getValueByRange(fireworkSpeed);\r\n const size = getValueByRange(fireworkSize);\r\n fireworks.push(createFirework(x, y, targetY, fireworkColor, speed, size, particleSpeed, particleSize, handleExplosion));\r\n const timeout = rand(300, 800) / population;\r\n setTimeout(launchFirework, timeout);\r\n };\r\n\r\n launchFirework();\r\n\r\n // eslint-disable-next-line init-declarations -- firework animation id\r\n let animationFrameId: number;\r\n const animate = () => {\r\n ctx.clearRect(0, 0, maxX, maxY);\r\n\r\n for (let i = fireworks.length - 1; i >= 0; i--) {\r\n const firework = fireworks[i];\r\n if (firework.update()) {\r\n firework.draw(ctx);\r\n } else {\r\n fireworks.splice(i, 1);\r\n }\r\n }\r\n\r\n for (let i = explosions.length - 1; i >= 0; i--) {\r\n const particle = explosions[i];\r\n particle.update();\r\n if (particle.isAlive()) {\r\n particle.draw(ctx);\r\n } else {\r\n explosions.splice(i, 1);\r\n }\r\n }\r\n\r\n animationFrameId = requestAnimationFrame(animate);\r\n };\r\n\r\n animate();\r\n\r\n const handleClick = (event: MouseEvent) => {\r\n const x = event.clientX;\r\n const y = maxY;\r\n const targetY = event.clientY;\r\n const fireworkColor = getColor(color);\r\n const speed = getValueByRange(fireworkSpeed);\r\n const size = getValueByRange(fireworkSize);\r\n fireworks.push(createFirework(x, y, targetY, fireworkColor, speed, size, particleSpeed, particleSize, handleExplosion));\r\n };\r\n\r\n container.addEventListener(\"click\", handleClick);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", setCanvasSize);\r\n container.removeEventListener(\"click\", handleClick);\r\n cancelAnimationFrame(animationFrameId);\r\n };\r\n }, [population, color, fireworkSpeed, fireworkSize, particleSpeed, particleSize]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"relative size-full overflow-hidden\", className)}\r\n {...props}>\r\n <canvas\r\n {...canvasProps}\r\n ref={canvasRef}\r\n className={cn(\"absolute inset-0 size-full\", canvasProps?.className)}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nFireworksBackground.displayName = \"FireworksBackground\";\r\n\r\nexport {FireworksBackground, type FireworksBackgroundProps};\r\n"],"names":["rand","min","max","Math","randInt","randColor","createParticle","x","y","color","speed","direction","gravity","friction","size","vx","vy","alpha","decay","ctx","createFirework","targetY","particleSpeed","particleSize","onExplode","angle","trail","trailLength","numParticles","particles","i","particleAngle","localParticleSpeed","getValueByRange","localParticleSize","point","range","getColor","Array","FireworksBackground","React","className","canvasProps","population","fireworkSpeed","fireworkSize","props","ref","canvasRef","containerRef","canvas","container","maxX","window","ratio","maxY","setCanvasSize","explosions","fireworks","handleExplosion","launchFirework","fireworkColor","timeout","setTimeout","animationFrameId","animate","firework","particle","requestAnimationFrame","handleClick","event","cancelAnimationFrame","cn"],"mappings":";;;;AAMA,MAAMA,OAAO,CAACC,KAAaC,MAAwBC,KAAK,MAAM,KAAMD,CAAAA,MAAMD,GAAE,IAAKA;AACjF,MAAMG,UAAU,CAACH,KAAaC,MAAwBC,KAAK,KAAK,CAACA,KAAK,MAAM,KAAMD,CAAAA,MAAMD,GAAE,IAAKA;AAC/F,MAAMI,YAAY,IAAc,CAAC,IAAI,EAAED,QAAQ,GAAG,KAAK,YAAY,CAAC;AAoBpE,MAAME,iBAAiB,CACrBC,GACAC,GACAC,OACAC,OACAC,WACAC,SACAC,UACAC;IAEA,MAAMC,KAAKZ,KAAK,GAAG,CAACQ,aAAaD;IACjC,MAAMM,KAAKb,KAAK,GAAG,CAACQ,aAAaD;IACjC,MAAMO,QAAQ;IACd,MAAMC,QAAQlB,KAAK,OAAO;IAE1B,OAAO;QACLO;QACAC;QACAC;QACAC;QACAC;QACAI;QACAC;QACAJ;QACAC;QACAI;QACAC;QACAJ;QACA;YACE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ;YACxB,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ;YACxB,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO;YACvB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE;YACjB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE;YACjB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;QAC1B;QACA,MAAKK,GAA6B;YAChCA,IAAI,IAAI;YACRA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK;YAC5BA,IAAI,SAAS;YACbA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,GAAGhB,AAAU,IAAVA,KAAK,EAAE;YAC7CgB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK;YAC1BA,IAAI,IAAI;YACRA,IAAI,OAAO;QACb;QACA;YACE,OAAO,IAAI,CAAC,KAAK,GAAG;QACtB;IACF;AACF;AAoBA,MAAMC,iBAAiB,CACrBb,GACAC,GACAa,SACAZ,OACAC,OACAI,MACAQ,eACAC,cACAC;IAEA,MAAMC,QAAQ,CAACtB,KAAK,EAAE,GAAG,IAAIH,KAAK,MAAM;IACxC,MAAMe,KAAKZ,KAAK,GAAG,CAACsB,SAASf;IAC7B,MAAMM,KAAKb,KAAK,GAAG,CAACsB,SAASf;IAC7B,MAAMgB,QAAkC,EAAE;IAC1C,MAAMC,cAAcvB,QAAQ,IAAI;IAEhC,OAAO;QACLG;QACAC;QACAa;QACAZ;QACAC;QACAI;QACAW;QACAV;QACAC;QACAU;QACAC;QACA,UAAU;QACV;YACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAC,GAAG,IAAI,CAAC,CAAC;gBAAE,GAAG,IAAI,CAAC,CAAC;YAAA;YACrC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EACtC,IAAI,CAAC,KAAK,CAAC,KAAK;YAElB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE;YACjB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE;YACjB,IAAI,CAAC,EAAE,IAAI;YACX,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC1C,IAAI,CAAC,OAAO;gBACZ,OAAO;YACT;YACA,OAAO;QACT;QACA;YACE,MAAMC,eAAexB,QAAQ,IAAI;YACjC,MAAMyB,YAA4B,EAAE;YACpC,IAAK,IAAIC,IAAI,GAAGA,IAAIF,cAAcE,IAAK;gBACrC,MAAMC,gBAAgB/B,KAAK,GAAGG,AAAU,IAAVA,KAAK,EAAE;gBACrC,MAAM6B,qBAAqBC,gBAAgBX;gBAC3C,MAAMY,oBAAoBD,gBAAgBV;gBAC1CM,UAAU,IAAI,CAACvB,eAAe,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE0B,oBAAoBD,eAAe,MAAM,MAAMG;YAC3G;YACAV,UAAUK;QACZ;QACA,MAAKV,GAA6B;YAChCA,IAAI,IAAI;YACRA,IAAI,SAAS;YACb,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;gBACzBA,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC3C,KAAK,MAAMgB,SAAS,IAAI,CAAC,KAAK,CAC5BhB,IAAI,MAAM,CAACgB,MAAM,CAAC,EAAEA,MAAM,CAAC;YAE/B,OAAO;gBACLhB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACzBA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC3B;YACAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK;YAC5BA,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI;YACzBA,IAAI,OAAO,GAAG;YACdA,IAAI,MAAM;YACVA,IAAI,OAAO;QACb;IACF;AACF;AAEA,MAAMc,kBAAkB,CAACG;IACvB,IAAI,AAAiB,YAAjB,OAAOA,OACT,OAAOA;IAET,OAAOpC,KAAKoC,MAAM,GAAG,EAAEA,MAAM,GAAG;AAClC;AAEA,MAAMC,WAAW,CAAC5B;IAChB,IAAI6B,MAAM,OAAO,CAAC7B,QAChB,OAAOA,KAAK,CAACL,QAAQ,GAAGK,MAAM,MAAM,EAAE;IAExC,OAAOA,SAASJ;AAClB;AAYA,MAAMkC,sBAAsB,WAAtBA,GAAsBC,WAC1B,CACE,EACEC,SAAS,EACTC,WAAW,EACXC,aAAa,CAAC,EACdlC,KAAK,EACLmC,gBAAgB;IAAC,KAAK;IAAG,KAAK;AAAC,CAAC,EAChCC,eAAe;IAAC,KAAK;IAAG,KAAK;AAAC,CAAC,EAC/BvB,gBAAgB;IAAC,KAAK;IAAG,KAAK;AAAC,CAAC,EAChCC,eAAe;IAAC,KAAK;IAAG,KAAK;AAAC,CAAC,EAC/B,GAAGuB,OACJ,EACDC;IAEA,MAAMC,YAAYR,OAAgC;IAClD,MAAMS,eAAeT,OAA6B;IAClDA,oBAA0BO,KAAK,IAAME,aAAa,OAAO;IAEzDT,UAAgB;QACd,MAAMU,SAASF,UAAU,OAAO;QAChC,MAAMG,YAAYF,aAAa,OAAO;QACtC,IAAI,CAACC,UAAU,CAACC,WAAW;QAC3B,MAAMhC,MAAM+B,OAAO,UAAU,CAAC;QAC9B,IAAI,CAAC/B,KAAK;QAEV,IAAIiC,OAAOC,OAAO,UAAU;QAC5B,IAAIC,QAAQH,UAAU,YAAY,GAAGA,UAAU,WAAW;QAC1D,IAAII,OAAOH,OAAOE;QAClBJ,OAAO,KAAK,GAAGE;QACfF,OAAO,MAAM,GAAGK;QAEhB,MAAMC,gBAAgB;YACpBJ,OAAOC,OAAO,UAAU;YACxBC,QAAQH,UAAU,YAAY,GAAGA,UAAU,WAAW;YACtDI,OAAOH,OAAOE;YACdJ,OAAO,KAAK,GAAGE;YACfF,OAAO,MAAM,GAAGK;QAClB;QACAF,OAAO,gBAAgB,CAAC,UAAUG;QAElC,MAAMC,aAA6B,EAAE;QACrC,MAAMC,YAA4B,EAAE;QAEpC,MAAMC,kBAAkB,CAAC9B;YACvB4B,WAAW,IAAI,IAAI5B;QACrB;QAEA,MAAM+B,iBAAiB;YACrB,MAAMrD,IAAIP,KAAKoD,AAAO,MAAPA,MAAYA,AAAO,MAAPA;YAC3B,MAAM5C,IAAI+C;YACV,MAAMlC,UAAUrB,KAAKuD,AAAO,MAAPA,MAAYA,AAAO,MAAPA;YACjC,MAAMM,gBAAgBxB,SAAS5B;YAC/B,MAAMC,QAAQuB,gBAAgBW;YAC9B,MAAM9B,OAAOmB,gBAAgBY;YAC7Ba,UAAU,IAAI,CAACtC,eAAeb,GAAGC,GAAGa,SAASwC,eAAenD,OAAOI,MAAMQ,eAAeC,cAAcoC;YACtG,MAAMG,UAAU9D,KAAK,KAAK,OAAO2C;YACjCoB,WAAWH,gBAAgBE;QAC7B;QAEAF;QAGA,IAAII;QACJ,MAAMC,UAAU;YACd9C,IAAI,SAAS,CAAC,GAAG,GAAGiC,MAAMG;YAE1B,IAAK,IAAIzB,IAAI4B,UAAU,MAAM,GAAG,GAAG5B,KAAK,GAAGA,IAAK;gBAC9C,MAAMoC,WAAWR,SAAS,CAAC5B,EAAE;gBAC7B,IAAIoC,SAAS,MAAM,IACjBA,SAAS,IAAI,CAAC/C;qBAEduC,UAAU,MAAM,CAAC5B,GAAG;YAExB;YAEA,IAAK,IAAIA,IAAI2B,WAAW,MAAM,GAAG,GAAG3B,KAAK,GAAGA,IAAK;gBAC/C,MAAMqC,WAAWV,UAAU,CAAC3B,EAAE;gBAC9BqC,SAAS,MAAM;gBACf,IAAIA,SAAS,OAAO,IAClBA,SAAS,IAAI,CAAChD;qBAEdsC,WAAW,MAAM,CAAC3B,GAAG;YAEzB;YAEAkC,mBAAmBI,sBAAsBH;QAC3C;QAEAA;QAEA,MAAMI,cAAc,CAACC;YACnB,MAAM/D,IAAI+D,MAAM,OAAO;YACvB,MAAM9D,IAAI+C;YACV,MAAMlC,UAAUiD,MAAM,OAAO;YAC7B,MAAMT,gBAAgBxB,SAAS5B;YAC/B,MAAMC,QAAQuB,gBAAgBW;YAC9B,MAAM9B,OAAOmB,gBAAgBY;YAC7Ba,UAAU,IAAI,CAACtC,eAAeb,GAAGC,GAAGa,SAASwC,eAAenD,OAAOI,MAAMQ,eAAeC,cAAcoC;QACxG;QAEAR,UAAU,gBAAgB,CAAC,SAASkB;QAEpC,OAAO;YACLhB,OAAO,mBAAmB,CAAC,UAAUG;YACrCL,UAAU,mBAAmB,CAAC,SAASkB;YACvCE,qBAAqBP;QACvB;IACF,GAAG;QAACrB;QAAYlC;QAAOmC;QAAeC;QAAcvB;QAAeC;KAAa;IAEhF,OAAO,WAAP,GACE,IAAC;QACC,KAAK0B;QACL,WAAWuB,GAAG,sCAAsC/B;QACnD,GAAGK,KAAK;kBACT,kBAAC;YACE,GAAGJ,WAAW;YACf,KAAKM;YACL,WAAWwB,GAAG,8BAA8B9B,aAAa;;;AAIjE;AAGFH,oBAAoB,WAAW,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/flip-button.js","sources":["../../../src/components/ui/flip-button.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {type HTMLMotionProps, type Transition, type Variant, motion} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\ntype FlipDirection = \"top\" | \"bottom\" | \"left\" | \"righ\";\r\n\r\ninterface FlipButtonProps extends HTMLMotionProps<\"button\"> {\r\n frontText: string;\r\n backText: string;\r\n transition?: Transition;\r\n frontClassName?: string;\r\n backClassName?: string;\r\n from?: FlipDirection;\r\n}\r\n\r\nconst defaultSpanClassName = \"absolute inset-0 flex items-center justify-center rounded-lg\";\r\n\r\nconst FlipButton = React.forwardRef<HTMLButtonElement, FlipButtonProps>(\r\n (\r\n {\r\n frontText,\r\n backText,\r\n transition = {type: \"spring\", stiffness: 280, damping: 20},\r\n className,\r\n frontClassName,\r\n backClassName,\r\n from = \"top\",\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const isVertical = from === \"top\" || from === \"bottom\";\r\n const rotateAxis = isVertical ? \"rotateX\" : \"rotateY\";\r\n\r\n const frontOffset = from === \"top\" || from === \"left\" ? \"50%\" : \"-50%\";\r\n const backOffset = from === \"top\" || from === \"left\" ? \"-50%\" : \"50%\";\r\n\r\n const buildVariant = (opacity: number, rotation: number, offset: string | null = null): Variant => ({\r\n opacity,\r\n [rotateAxis]: rotation,\r\n ...(isVertical && offset !== null ? {y: offset} : {}),\r\n ...(!isVertical && offset !== null ? {x: offset} : {}),\r\n });\r\n\r\n const frontVariants = {\r\n initial: buildVariant(1, 0, \"0%\"),\r\n hover: buildVariant(0, 90, frontOffset),\r\n };\r\n\r\n const backVariants = {\r\n initial: buildVariant(0, 90, backOffset),\r\n hover: buildVariant(1, 0, \"0%\"),\r\n };\r\n\r\n return (\r\n <motion.button\r\n ref={ref}\r\n initial='initial'\r\n whileHover='hover'\r\n whileTap={{scale: 0.95}}\r\n className={cn(\r\n \"relative inline-block h-10 cursor-pointer px-4 py-2 text-sm font-medium perspective-[1000px] focus:outline-none\",\r\n className,\r\n )}\r\n {...props}>\r\n <motion.span\r\n variants={frontVariants}\r\n transition={transition}\r\n className={cn(defaultSpanClassName, \"bg-muted text-black dark:text-white\", frontClassName)}>\r\n {frontText}\r\n </motion.span>\r\n <motion.span\r\n variants={backVariants}\r\n transition={transition}\r\n className={cn(defaultSpanClassName, \"bg-primary text-primary-foreground\", backClassName)}>\r\n {backText}\r\n </motion.span>\r\n <span className='invisible'>{frontText}</span>\r\n </motion.button>\r\n );\r\n },\r\n);\r\n\r\nFlipButton.displayName = \"FlipButton\";\r\n\r\nexport {FlipButton, type FlipButtonProps, type FlipDirection};\r\n"],"names":["defaultSpanClassName","FlipButton","React","frontText","backText","transition","className","frontClassName","backClassName","from","props","ref","isVertical","rotateAxis","frontOffset","backOffset","buildVariant","opacity","rotation","offset","frontVariants","backVariants","motion","cn"],"mappings":";;;;;AAkBA,MAAMA,uBAAuB;AAE7B,MAAMC,aAAa,WAAbA,GAAaC,WACjB,CACE,EACEC,SAAS,EACTC,QAAQ,EACRC,aAAa;IAAC,MAAM;IAAU,WAAW;IAAK,SAAS;AAAE,CAAC,EAC1DC,SAAS,EACTC,cAAc,EACdC,aAAa,EACbC,OAAO,KAAK,EACZ,GAAGC,OACJ,EACDC;IAEA,MAAMC,aAAaH,AAAS,UAATA,QAAkBA,AAAS,aAATA;IACrC,MAAMI,aAAaD,aAAa,YAAY;IAE5C,MAAME,cAAcL,AAAS,UAATA,QAAkBA,AAAS,WAATA,OAAkB,QAAQ;IAChE,MAAMM,aAAaN,AAAS,UAATA,QAAkBA,AAAS,WAATA,OAAkB,SAAS;IAEhE,MAAMO,eAAe,CAACC,SAAiBC,UAAkBC,SAAwB,IAAI,GAAe;YAClGF;YACA,CAACJ,WAAW,EAAEK;YACd,GAAIN,cAAcO,AAAW,SAAXA,SAAkB;gBAAC,GAAGA;YAAM,IAAI,CAAC,CAAC;YACpD,GAAI,CAACP,cAAcO,AAAW,SAAXA,SAAkB;gBAAC,GAAGA;YAAM,IAAI,CAAC,CAAC;QACvD;IAEA,MAAMC,gBAAgB;QACpB,SAASJ,aAAa,GAAG,GAAG;QAC5B,OAAOA,aAAa,GAAG,IAAIF;IAC7B;IAEA,MAAMO,eAAe;QACnB,SAASL,aAAa,GAAG,IAAID;QAC7B,OAAOC,aAAa,GAAG,GAAG;IAC5B;IAEA,OAAO,WAAP,GACE,KAACM,OAAO,MAAM;QACZ,KAAKX;QACL,SAAQ;QACR,YAAW;QACX,UAAU;YAAC,OAAO;QAAI;QACtB,WAAWY,GACT,mHACAjB;QAED,GAAGI,KAAK;;0BACT,IAACY,OAAO,IAAI;gBACV,UAAUF;gBACV,YAAYf;gBACZ,WAAWkB,GAAGvB,sBAAsB,uCAAuCO;0BAC1EJ;;0BAEH,IAACmB,OAAO,IAAI;gBACV,UAAUD;gBACV,YAAYhB;gBACZ,WAAWkB,GAAGvB,sBAAsB,sCAAsCQ;0BACzEJ;;0BAEH,IAAC;gBAAK,WAAU;0BAAaD;;;;AAGnC;AAGFF,WAAW,WAAW,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/components/ui/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA2C,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAKjI,QAAA,MAAM,IAAI,4MAAe,CAAC;AAW1B,QAAA,MAAM,SAAS,GAAI,YAAY,SAAS,WAAW,GAAG,WAAW,EAAE,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAAE,cAEjI,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,4CAMtC,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/components/ui/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA2C,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAKjI,QAAA,MAAM,IAAI,4MAAe,CAAC;AAW1B,QAAA,MAAM,SAAS,GAAI,YAAY,SAAS,WAAW,GAAG,WAAW,EAAE,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAAE,cAEjI,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,4CAMtC,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;CAyBjB,CAAC;AAQF,QAAA,MAAM,QAAQ,6GAYZ,CAAC;AAGH,QAAA,MAAM,SAAS,yJAcb,CAAC;AAGH,QAAA,MAAM,WAAW,8JAYf,CAAC;AAGH,QAAA,MAAM,eAAe,yHAWnB,CAAC;AAGH,QAAA,MAAM,WAAW,yHAmBhB,CAAC;AAGF,OAAO,EAAC,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAC,CAAC"}
|
|
@@ -6,7 +6,7 @@ import { Controller, FormProvider, useFormContext } from "react-hook-form";
|
|
|
6
6
|
import { Label } from "./label.js";
|
|
7
7
|
import { cn } from "../../lib/utilities.js";
|
|
8
8
|
const Form = FormProvider;
|
|
9
|
-
const FormFieldContext = /*#__PURE__*/ createContext(
|
|
9
|
+
const FormFieldContext = /*#__PURE__*/ createContext(null);
|
|
10
10
|
const FormField = ({ ...props })=>/*#__PURE__*/ jsx(FormFieldContext.Provider, {
|
|
11
11
|
value: {
|
|
12
12
|
name: props.name
|
|
@@ -19,8 +19,9 @@ const useFormField = ()=>{
|
|
|
19
19
|
const fieldContext = useContext(FormFieldContext);
|
|
20
20
|
const itemContext = useContext(FormItemContext);
|
|
21
21
|
const { getFieldState, formState } = useFormContext();
|
|
22
|
-
const fieldState = getFieldState(fieldContext.name, formState);
|
|
23
22
|
if (!fieldContext) throw new Error("useFormField should be used within <FormField>");
|
|
23
|
+
if (!itemContext) throw new Error("useFormField should be used within <FormItem>");
|
|
24
|
+
const fieldState = getFieldState(fieldContext.name, formState);
|
|
24
25
|
const { id } = itemContext;
|
|
25
26
|
return {
|
|
26
27
|
id,
|
|
@@ -31,7 +32,7 @@ const useFormField = ()=>{
|
|
|
31
32
|
...fieldState
|
|
32
33
|
};
|
|
33
34
|
};
|
|
34
|
-
const FormItemContext = /*#__PURE__*/ createContext(
|
|
35
|
+
const FormItemContext = /*#__PURE__*/ createContext(null);
|
|
35
36
|
const FormItem = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>{
|
|
36
37
|
const id = useId();
|
|
37
38
|
return /*#__PURE__*/ jsx(FormItemContext.Provider, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/form.js","sources":["../../../src/components/ui/form.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\r\nimport {Slot} from \"@radix-ui/react-slot\";\r\nimport * as React from \"react\";\r\nimport {Controller, FormProvider, useFormContext, type ControllerProps, type FieldPath, type FieldValues} from \"react-hook-form\";\r\n\r\nimport {Label} from \"@/components/ui/label\";\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nconst Form = FormProvider;\r\n\r\ntype FormFieldContextValue<\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n name: TName;\r\n};\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue | null>(null);\r\n\r\nconst FormField = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({\r\n ...props\r\n}: ControllerProps<TFieldValues, TName>) => {\r\n return (\r\n <FormFieldContext.Provider value={{name: props.name}}>\r\n <Controller {...props} />\r\n </FormFieldContext.Provider>\r\n );\r\n};\r\n\r\nconst useFormField = () => {\r\n const fieldContext = React.useContext(FormFieldContext);\r\n const itemContext = React.useContext(FormItemContext);\r\n const {getFieldState, formState} = useFormContext();\r\n\r\n if (!fieldContext) {\r\n throw new Error(\"useFormField should be used within <FormField>\");\r\n }\r\n\r\n if (!itemContext) {\r\n throw new Error(\"useFormField should be used within <FormItem>\");\r\n }\r\n\r\n const fieldState = getFieldState(fieldContext.name, formState);\r\n\r\n const {id} = itemContext;\r\n\r\n return {\r\n id,\r\n name: fieldContext.name,\r\n formItemId: `${id}-form-item`,\r\n formDescriptionId: `${id}-form-item-description`,\r\n formMessageId: `${id}-form-item-message`,\r\n ...fieldState,\r\n };\r\n};\r\n\r\ntype FormItemContextValue = {\r\n id: string;\r\n};\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue | null>(null);\r\n\r\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({className, ...props}, ref) => {\r\n const id = React.useId();\r\n\r\n return (\r\n <FormItemContext.Provider value={{id}}>\r\n <div\r\n ref={ref}\r\n className={cn(\"space-y-2\", className)}\r\n {...props}\r\n />\r\n </FormItemContext.Provider>\r\n );\r\n});\r\nFormItem.displayName = \"FormItem\";\r\n\r\nconst FormLabel = React.forwardRef<\r\n React.ComponentRef<typeof LabelPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\r\n>(({className, ...props}, ref) => {\r\n const {error, formItemId} = useFormField();\r\n\r\n return (\r\n <Label\r\n ref={ref}\r\n className={cn(error && \"text-red-500 dark:text-red-900\", className)}\r\n htmlFor={formItemId}\r\n {...props}\r\n />\r\n );\r\n});\r\nFormLabel.displayName = \"FormLabel\";\r\n\r\nconst FormControl = React.forwardRef<React.ComponentRef<typeof Slot>, React.ComponentPropsWithoutRef<typeof Slot>>(({...props}, ref) => {\r\n const {error, formItemId, formDescriptionId, formMessageId} = useFormField();\r\n\r\n return (\r\n <Slot\r\n ref={ref}\r\n id={formItemId}\r\n aria-describedby={error ? `${formDescriptionId} ${formMessageId}` : `${formDescriptionId}`}\r\n aria-invalid={Boolean(error)}\r\n {...props}\r\n />\r\n );\r\n});\r\nFormControl.displayName = \"FormControl\";\r\n\r\nconst FormDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(({className, ...props}, ref) => {\r\n const {formDescriptionId} = useFormField();\r\n\r\n return (\r\n <p\r\n ref={ref}\r\n id={formDescriptionId}\r\n className={cn(\"text-[0.8rem] text-neutral-500 dark:text-neutral-400\", className)}\r\n {...props}\r\n />\r\n );\r\n});\r\nFormDescription.displayName = \"FormDescription\";\r\n\r\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\r\n ({className, children, ...props}, ref) => {\r\n const {error, formMessageId} = useFormField();\r\n const body = error ? String(error?.message ?? \"\") : children;\r\n\r\n if (!body) {\r\n return null;\r\n }\r\n\r\n return (\r\n <p\r\n ref={ref}\r\n id={formMessageId}\r\n className={cn(\"text-[0.8rem] font-medium text-red-500 dark:text-red-900\", className)}\r\n {...props}>\r\n {body}\r\n </p>\r\n );\r\n },\r\n);\r\nFormMessage.displayName = \"FormMessage\";\r\n\r\nexport {Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField};\r\n"],"names":["Form","FormProvider","FormFieldContext","React","FormField","props","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","formState","useFormContext","Error","fieldState","id","FormItem","className","ref","cn","FormLabel","error","formItemId","Label","FormControl","formDescriptionId","formMessageId","Slot","Boolean","FormDescription","FormMessage","children","body","String"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/gradient-background.js","sources":["../../../src/components/ui/gradient-background.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {HTMLMotionProps, motion, type Transition} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\ninterface GradientBackgroundProps extends HTMLMotionProps<\"div\"> {\r\n transition?: Transition;\r\n}\r\n\r\nconst GradientBackground = React.forwardRef<HTMLDivElement, GradientBackgroundProps>(\r\n ({className, transition = {duration: 15, ease: \"easeInOut\", repeat: Infinity}, ...props}, ref) => {\r\n return (\r\n <motion.div\r\n ref={ref}\r\n className={cn(\"size-full bg-gradient-to-br from-blue-500 via-purple-500 to-pink-500 bg-[length:400%_400%]\", className)}\r\n animate={{\r\n backgroundPosition: [\"0% 50%\", \"100% 50%\", \"0% 50%\"],\r\n }}\r\n transition={transition}\r\n {...props}\r\n />\r\n );\r\n },\r\n);\r\n\r\nGradientBackground.displayName = \"GradientBackground\";\r\n\r\nexport {GradientBackground, type GradientBackgroundProps};\r\n"],"names":["GradientBackground","React","className","transition","Infinity","props","ref","motion","cn"],"mappings":";;;;;AAWA,MAAMA,qBAAqB,WAArBA,GAAqBC,WACzB,CAAC,EAACC,SAAS,EAAEC,aAAa;IAAC,UAAU;IAAI,MAAM;IAAa,QAAQC;AAAQ,CAAC,EAAE,GAAGC,OAAM,EAAEC,MACjF,WAAP,GACE,IAACC,OAAO,GAAG;QACT,KAAKD;QACL,WAAWE,GAAG,8FAA8FN;QAC5G,SAAS;YACP,oBAAoB;gBAAC;gBAAU;gBAAY;aAAS;QACtD;QACA,YAAYC;QACX,GAAGE,KAAK;;AAMjBL,mBAAmB,WAAW,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/gradient-text.js","sources":["../../../src/components/ui/gradient-text.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, type Transition} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\ninterface GradientTextProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n text: string;\r\n gradient?: string;\r\n neon?: boolean;\r\n transition?: Transition;\r\n}\r\n\r\nconst GradientText = React.forwardRef<HTMLSpanElement, GradientTextProps>(\r\n (\r\n {\r\n text,\r\n className,\r\n gradient = \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\",\r\n neon = false,\r\n transition = {duration: 50, repeat: Infinity, ease: \"linear\"},\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const baseStyle: React.CSSProperties = {\r\n backgroundImage: gradient,\r\n };\r\n\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(\"relative inline-block\", className)}\r\n {...props}>\r\n <motion.span\r\n className='m-0 bg-[length:700%_100%] bg-clip-text bg-[position:0%_0%] text-transparent'\r\n style={baseStyle}\r\n initial={{backgroundPosition: \"0% 0%\"}}\r\n animate={{backgroundPosition: \"500% 100%\"}}\r\n transition={transition}>\r\n {text}\r\n </motion.span>\r\n\r\n {Boolean(neon) && (\r\n <motion.span\r\n className='absolute top-0 left-0 m-0 bg-[length:700%_100%] bg-clip-text bg-[position:0%_0%] text-transparent mix-blend-plus-lighter blur-[8px]'\r\n style={baseStyle}\r\n initial={{backgroundPosition: \"0% 0%\"}}\r\n animate={{backgroundPosition: \"500% 100%\"}}\r\n transition={transition}>\r\n {text}\r\n </motion.span>\r\n )}\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nGradientText.displayName = \"GradientText\";\r\n\r\nexport {GradientText, type GradientTextProps};\r\n"],"names":["GradientText","React","text","className","gradient","neon","transition","Infinity","props","ref","baseStyle","cn","motion","Boolean"],"mappings":";;;;;AAcA,MAAMA,eAAe,WAAfA,GAAeC,WACnB,CACE,EACEC,IAAI,EACJC,SAAS,EACTC,WAAW,yFAAyF,EACpGC,OAAO,KAAK,EACZC,aAAa;IAAC,UAAU;IAAI,QAAQC;IAAU,MAAM;AAAQ,CAAC,EAC7D,GAAGC,OACJ,EACDC;IAEA,MAAMC,YAAiC;QACrC,iBAAiBN;IACnB;IAEA,OAAO,WAAP,GACE,KAAC;QACC,KAAKK;QACL,WAAWE,GAAG,yBAAyBR;QACtC,GAAGK,KAAK;;0BACT,IAACI,OAAO,IAAI;gBACV,WAAU;gBACV,OAAOF;gBACP,SAAS;oBAAC,oBAAoB;gBAAO;gBACrC,SAAS;oBAAC,oBAAoB;gBAAW;gBACzC,YAAYJ;0BACXJ;;YAGFW,QAAQR,SAAS,WAATA,GACP,IAACO,OAAO,IAAI;gBACV,WAAU;gBACV,OAAOF;gBACP,SAAS;oBAAC,oBAAoB;gBAAO;gBACrC,SAAS;oBAAC,oBAAoB;gBAAW;gBACzC,YAAYJ;0BACXJ;;;;AAKX;AAGFF,aAAa,WAAW,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/highlight-text.js","sources":["../../../src/components/ui/highlight-text.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, useInView, type HTMLMotionProps, type Transition, type UseInViewOptions} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\ninterface HighlightTextProps extends HTMLMotionProps<\"span\"> {\r\n text: string;\r\n inView?: boolean;\r\n inViewMargin?: UseInViewOptions[\"margin\"];\r\n inViewOnce?: boolean;\r\n transition?: Transition;\r\n}\r\n\r\nconst animation = {backgroundSize: \"100% 100%\"};\r\n\r\nconst HighlightText = React.forwardRef<HTMLSpanElement, HighlightTextProps>(\r\n ({text, className, inView = false, inViewMargin = \"0px\", transition = {duration: 2, ease: \"easeInOut\"}, ...props}, ref) => {\r\n const localRef = React.useRef<HTMLSpanElement>(null);\r\n React.useImperativeHandle(ref, () => localRef.current as HTMLSpanElement);\r\n\r\n const inViewResult = useInView(localRef, {\r\n once: true,\r\n margin: inViewMargin,\r\n });\r\n const isInView = !inView || inViewResult;\r\n\r\n return (\r\n <motion.span\r\n ref={localRef}\r\n initial={{\r\n backgroundSize: \"0% 100%\",\r\n }}\r\n animate={isInView ? animation : undefined}\r\n transition={transition}\r\n style={{\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"left center\",\r\n display: \"inline\",\r\n }}\r\n className={cn(\r\n `relative inline-block rounded-lg bg-gradient-to-r from-blue-100 to-purple-100 px-2 py-1 dark:from-blue-500 dark:to-purple-500`,\r\n className,\r\n )}\r\n {...props}>\r\n {text}\r\n </motion.span>\r\n );\r\n },\r\n);\r\nHighlightText.displayName = \"HighlightText\";\r\n\r\nexport {HighlightText, type HighlightTextProps};\r\n"],"names":["animation","HighlightText","React","text","className","inView","inViewMargin","transition","props","ref","localRef","inViewResult","useInView","isInView","motion","undefined","cn"],"mappings":";;;;;AAeA,MAAMA,YAAY;IAAC,gBAAgB;AAAW;AAE9C,MAAMC,gBAAgB,WAAhBA,GAAgBC,WACpB,CAAC,EAACC,IAAI,EAAEC,SAAS,EAAEC,SAAS,KAAK,EAAEC,eAAe,KAAK,EAAEC,aAAa;IAAC,UAAU;IAAG,MAAM;AAAW,CAAC,EAAE,GAAGC,OAAM,EAAEC;IACjH,MAAMC,WAAWR,OAA8B;IAC/CA,oBAA0BO,KAAK,IAAMC,SAAS,OAAO;IAErD,MAAMC,eAAeC,UAAUF,UAAU;QACvC,MAAM;QACN,QAAQJ;IACV;IACA,MAAMO,WAAW,CAACR,UAAUM;IAE5B,OAAO,WAAP,GACE,IAACG,OAAO,IAAI;QACV,KAAKJ;QACL,SAAS;YACP,gBAAgB;QAClB;QACA,SAASG,WAAWb,YAAYe;QAChC,YAAYR;QACZ,OAAO;YACL,kBAAkB;YAClB,oBAAoB;YACpB,SAAS;QACX;QACA,WAAWS,GACT,iIACAZ;QAED,GAAGI,KAAK;kBACRL;;AAGP;AAEFF,cAAc,WAAW,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components\\ui\\hole-background.js","sources":["webpack://@arolariu/components/./src/components/ui/hole-background.tsx"],"sourcesContent":["\r\n\r\nimport {motion} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\ninterface HoleBackgroundProps extends React.HTMLAttributes<HTMLCanvasElement> {\r\n strokeColor?: string;\r\n numberOfLines?: number;\r\n numberOfDiscs?: number;\r\n particleRGBColor?: [number, number, number];\r\n}\r\n\r\nconst linear = (p: number) => p;\r\nconst easeInExpo = (p: number) => (p === 0 ? 0 : 2 ** (10 * (p - 1)));\r\n\r\nconst HoleBackground = React.forwardRef<HTMLCanvasElement, HoleBackgroundProps>(\r\n (\r\n {strokeColor = \"#737373\", numberOfLines = 50, numberOfDiscs = 50, particleRGBColor = [255, 255, 255], className, children, ...props},\r\n ref,\r\n ) => {\r\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\r\n React.useImperativeHandle(ref, () => canvasRef.current as HTMLCanvasElement);\r\n\r\n const animationFrameIdRef = React.useRef<number>(0);\r\n const stateRef = React.useRef<any>({\r\n discs: [] as any[],\r\n lines: [] as any[],\r\n particles: [] as any[],\r\n clip: {},\r\n startDisc: {},\r\n endDisc: {},\r\n rect: {width: 0, height: 0},\r\n render: {width: 0, height: 0, dpi: 1},\r\n particleArea: {},\r\n linesCanvas: null,\r\n });\r\n\r\n const tweenValue = React.useCallback((start: number, end: number, p: number, ease: \"inExpo\" | null = null) => {\r\n const delta = end - start;\r\n const easeFn = ease === \"inExpo\" ? easeInExpo : linear;\r\n return start + delta * easeFn(p);\r\n }, []);\r\n\r\n const tweenDisc = React.useCallback(\r\n (disc: any) => {\r\n const {startDisc, endDisc} = stateRef.current;\r\n disc.x = tweenValue(startDisc.x, endDisc.x, disc.p);\r\n disc.y = tweenValue(startDisc.y, endDisc.y, disc.p, \"inExpo\");\r\n disc.w = tweenValue(startDisc.w, endDisc.w, disc.p);\r\n disc.h = tweenValue(startDisc.h, endDisc.h, disc.p);\r\n },\r\n [tweenValue],\r\n );\r\n\r\n const setSize = React.useCallback(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const rect = canvas.getBoundingClientRect();\r\n stateRef.current.rect = {width: rect.width, height: rect.height};\r\n stateRef.current.render = {\r\n width: rect.width,\r\n height: rect.height,\r\n dpi: window.devicePixelRatio || 1,\r\n };\r\n canvas.width = stateRef.current.render.width * stateRef.current.render.dpi;\r\n canvas.height = stateRef.current.render.height * stateRef.current.render.dpi;\r\n }, []);\r\n\r\n const setDiscs = React.useCallback(() => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.discs = [];\r\n stateRef.current.startDisc = {\r\n x: width * 0.5,\r\n y: height * 0.45,\r\n w: width * 0.75,\r\n h: height * 0.7,\r\n };\r\n stateRef.current.endDisc = {\r\n x: width * 0.5,\r\n y: height * 0.95,\r\n w: 0,\r\n h: 0,\r\n };\r\n let prevBottom = height;\r\n stateRef.current.clip = {};\r\n for (let i = 0; i < numberOfDiscs; i++) {\r\n const p = i / numberOfDiscs;\r\n const disc = {p, x: 0, y: 0, w: 0, h: 0};\r\n tweenDisc(disc);\r\n const bottom = disc.y + disc.h;\r\n if (bottom <= prevBottom) {\r\n stateRef.current.clip = {disc: {...disc}, i};\r\n }\r\n prevBottom = bottom;\r\n stateRef.current.discs.push(disc);\r\n }\r\n const clipPath = new Path2D();\r\n const {disc} = stateRef.current.clip;\r\n clipPath.ellipse(disc.x, disc.y, disc.w, disc.h, 0, 0, Math.PI * 2);\r\n clipPath.rect(disc.x - disc.w, 0, disc.w * 2, disc.y);\r\n stateRef.current.clip.path = clipPath;\r\n }, [tweenDisc]);\r\n\r\n const setLines = React.useCallback(() => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.lines = [];\r\n const linesAngle = (Math.PI * 2) / numberOfLines;\r\n for (let i = 0; i < numberOfLines; i++) {\r\n stateRef.current.lines.push([]);\r\n }\r\n stateRef.current.discs.forEach((disc: any) => {\r\n for (let i = 0; i < numberOfLines; i++) {\r\n const angle = i * linesAngle;\r\n const p = {\r\n x: disc.x + Math.cos(angle) * disc.w,\r\n y: disc.y + Math.sin(angle) * disc.h,\r\n };\r\n stateRef.current.lines[i].push(p);\r\n }\r\n });\r\n const offCanvas = document.createElement(\"canvas\");\r\n offCanvas.width = width;\r\n offCanvas.height = height;\r\n const ctx = offCanvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n stateRef.current.lines.forEach((line: any) => {\r\n ctx.save();\r\n let lineIsIn = false;\r\n line.forEach((p1: any, j: number) => {\r\n if (j === 0) return;\r\n const p0 = line[j - 1];\r\n if (\r\n !lineIsIn\r\n && (ctx.isPointInPath(stateRef.current.clip.path, p1.x, p1.y) || ctx.isPointInStroke(stateRef.current.clip.path, p1.x, p1.y))\r\n ) {\r\n lineIsIn = true;\r\n } else if (lineIsIn) {\r\n ctx.clip(stateRef.current.clip.path);\r\n }\r\n ctx.beginPath();\r\n ctx.moveTo(p0.x, p0.y);\r\n ctx.lineTo(p1.x, p1.y);\r\n ctx.strokeStyle = strokeColor;\r\n ctx.lineWidth = 2;\r\n ctx.stroke();\r\n ctx.closePath();\r\n });\r\n ctx.restore();\r\n });\r\n stateRef.current.linesCanvas = offCanvas;\r\n }, [strokeColor]);\r\n\r\n const initParticle = React.useCallback((start: boolean = false) => {\r\n const sx = stateRef.current.particleArea.sx + stateRef.current.particleArea.sw * Math.random();\r\n const ex = stateRef.current.particleArea.ex + stateRef.current.particleArea.ew * Math.random();\r\n const dx = ex - sx;\r\n const y = start ? stateRef.current.particleArea.h * Math.random() : stateRef.current.particleArea.h;\r\n const r = 0.5 + Math.random() * 4;\r\n const vy = 0.5 + Math.random();\r\n return {\r\n x: sx,\r\n sx,\r\n dx,\r\n y,\r\n vy,\r\n p: 0,\r\n r,\r\n c: `rgba(${particleRGBColor[0]}, ${particleRGBColor[1]}, ${particleRGBColor[2]}, ${Math.random()})`,\r\n };\r\n }, []);\r\n\r\n const setParticles = React.useCallback(() => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.particles = [];\r\n const {disc} = stateRef.current.clip;\r\n stateRef.current.particleArea = {\r\n sw: disc.w * 0.5,\r\n ew: disc.w * 2,\r\n h: height * 0.85,\r\n };\r\n stateRef.current.particleArea.sx = (width - stateRef.current.particleArea.sw) / 2;\r\n stateRef.current.particleArea.ex = (width - stateRef.current.particleArea.ew) / 2;\r\n const totalParticles = 100;\r\n for (let i = 0; i < totalParticles; i++) {\r\n stateRef.current.particles.push(initParticle(true));\r\n }\r\n }, [initParticle]);\r\n\r\n const drawDiscs = React.useCallback(\r\n (ctx: CanvasRenderingContext2D) => {\r\n ctx.strokeStyle = strokeColor;\r\n ctx.lineWidth = 2;\r\n const outerDisc = stateRef.current.startDisc;\r\n ctx.beginPath();\r\n ctx.ellipse(outerDisc.x, outerDisc.y, outerDisc.w, outerDisc.h, 0, 0, Math.PI * 2);\r\n ctx.stroke();\r\n ctx.closePath();\r\n stateRef.current.discs.forEach((disc: any, i: number) => {\r\n if (i % 5 !== 0) return;\r\n if (disc.w < stateRef.current.clip.disc.w - 5) {\r\n ctx.save();\r\n ctx.clip(stateRef.current.clip.path);\r\n }\r\n ctx.beginPath();\r\n ctx.ellipse(disc.x, disc.y, disc.w, disc.h, 0, 0, Math.PI * 2);\r\n ctx.stroke();\r\n ctx.closePath();\r\n if (disc.w < stateRef.current.clip.disc.w - 5) {\r\n ctx.restore();\r\n }\r\n });\r\n },\r\n [strokeColor],\r\n );\r\n\r\n const drawLines = React.useCallback((ctx: CanvasRenderingContext2D) => {\r\n if (stateRef.current.linesCanvas) {\r\n ctx.drawImage(stateRef.current.linesCanvas, 0, 0);\r\n }\r\n }, []);\r\n\r\n const drawParticles = React.useCallback((ctx: CanvasRenderingContext2D) => {\r\n ctx.save();\r\n ctx.clip(stateRef.current.clip.path);\r\n stateRef.current.particles.forEach((particle: any) => {\r\n ctx.fillStyle = particle.c;\r\n ctx.beginPath();\r\n ctx.rect(particle.x, particle.y, particle.r, particle.r);\r\n ctx.closePath();\r\n ctx.fill();\r\n });\r\n ctx.restore();\r\n }, []);\r\n\r\n const moveDiscs = React.useCallback(() => {\r\n stateRef.current.discs.forEach((disc: any) => {\r\n disc.p = (disc.p + 0.001) % 1;\r\n tweenDisc(disc);\r\n });\r\n }, [tweenDisc]);\r\n\r\n const moveParticles = React.useCallback(() => {\r\n stateRef.current.particles.forEach((particle: any, idx: number) => {\r\n particle.p = 1 - particle.y / stateRef.current.particleArea.h;\r\n particle.x = particle.sx + particle.dx * particle.p;\r\n particle.y -= particle.vy;\r\n if (particle.y < 0) {\r\n stateRef.current.particles[idx] = initParticle();\r\n }\r\n });\r\n }, [initParticle]);\r\n\r\n const tick = React.useCallback(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n ctx.save();\r\n ctx.scale(stateRef.current.render.dpi, stateRef.current.render.dpi);\r\n moveDiscs();\r\n moveParticles();\r\n drawDiscs(ctx);\r\n drawLines(ctx);\r\n drawParticles(ctx);\r\n ctx.restore();\r\n animationFrameIdRef.current = requestAnimationFrame(tick);\r\n }, [moveDiscs, moveParticles, drawDiscs, drawLines, drawParticles]);\r\n\r\n const init = React.useCallback(() => {\r\n setSize();\r\n setDiscs();\r\n setLines();\r\n setParticles();\r\n }, [setSize, setDiscs, setLines, setParticles]);\r\n\r\n React.useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n init();\r\n tick();\r\n const handleResize = () => {\r\n setSize();\r\n setDiscs();\r\n setLines();\r\n setParticles();\r\n };\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n cancelAnimationFrame(animationFrameIdRef.current);\r\n };\r\n }, [init, tick, setSize, setDiscs, setLines, setParticles]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative size-full overflow-hidden\",\r\n 'before:absolute before:top-1/2 before:left-1/2 before:block before:size-[140%] before:[transform:translate3d(-50%,-50%,0)] before:content-[\"\"] before:[background:radial-gradient(ellipse_at_50%_55%,transparent_10%,white_50%)] dark:before:[background:radial-gradient(ellipse_at_50%_55%,transparent_10%,black_50%)]',\r\n 'after:absolute after:top-1/2 after:left-1/2 after:z-[5] after:block after:size-full after:[transform:translate3d(-50%,-50%,0)] after:mix-blend-overlay after:content-[\"\"] after:[background:radial-gradient(ellipse_at_50%_75%,#a900ff_20%,transparent_75%)]',\r\n className,\r\n )}>\r\n {children}\r\n <canvas\r\n ref={canvasRef}\r\n className='absolute inset-0 block size-full opacity-10 dark:opacity-20'\r\n {...props}\r\n />\r\n <motion.div\r\n className={cn(\r\n \"absolute top-[-71.5%] left-1/2 z-[3] h-[140%] w-[30%] [transform:translate3d(-50%,0,0)] rounded-b-full [background-size:100%_200%] [background-position:0%_100%] opacity-75 mix-blend-plus-darker blur-3xl dark:mix-blend-plus-lighter\",\r\n \"[background:linear-gradient(20deg,#00f8f1,#ffbd1e40_16.5%,#fe848f_33%,#fe848f40_49.5%,#00f8f1_66%,#00f8f180_85.5%,#ffbd1e_100%)_0_100%_/_100%_200%] dark:[background:linear-gradient(20deg,#00f8f1,#ffbd1e20_16.5%,#fe848f_33%,#fe848f20_49.5%,#00f8f1_66%,#00f8f160_85.5%,#ffbd1e_100%)_0_100%_/_100%_200%]\",\r\n )}\r\n animate={{backgroundPosition: \"0% 300%\"}}\r\n transition={{duration: 5, ease: \"linear\", repeat: Infinity}}\r\n />\r\n <div className='absolute top-0 left-0 z-[7] size-full opacity-50 mix-blend-overlay dark:[background:repeating-linear-gradient(transparent,transparent_1px,white_1px,white_2px)]' />\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nHoleBackground.displayName = \"HoleBackground\";\r\nexport {HoleBackground, type HoleBackgroundProps};\r\n"],"names":["linear","p","easeInExpo","HoleBackground","React","strokeColor","numberOfLines","numberOfDiscs","particleRGBColor","className","children","props","ref","canvasRef","animationFrameIdRef","stateRef","tweenValue","start","end","ease","delta","easeFn","tweenDisc","disc","startDisc","endDisc","setSize","canvas","rect","window","setDiscs","width","height","prevBottom","i","bottom","clipPath","Path2D","Math","setLines","linesAngle","angle","offCanvas","document","ctx","line","lineIsIn","p1","j","p0","initParticle","sx","ex","dx","y","r","vy","setParticles","totalParticles","drawDiscs","outerDisc","drawLines","drawParticles","particle","moveDiscs","moveParticles","idx","tick","requestAnimationFrame","init","handleResize","cancelAnimationFrame","cn","motion","Infinity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/ui/hole-background.js","sources":["../../../src/components/ui/hole-background.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\ninterface HoleBackgroundProps extends React.HTMLAttributes<HTMLCanvasElement> {\r\n strokeColor?: string;\r\n numberOfLines?: number;\r\n numberOfDiscs?: number;\r\n particleRGBColor?: [number, number, number];\r\n}\r\n\r\nconst linear = (p: number) => p;\r\nconst easeInExpo = (p: number) => (p === 0 ? 0 : 2 ** (10 * (p - 1)));\r\n\r\nconst HoleBackground = React.forwardRef<HTMLCanvasElement, HoleBackgroundProps>(\r\n (\r\n {strokeColor = \"#737373\", numberOfLines = 50, numberOfDiscs = 50, particleRGBColor = [255, 255, 255], className, children, ...props},\r\n ref,\r\n ) => {\r\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\r\n React.useImperativeHandle(ref, () => canvasRef.current as HTMLCanvasElement);\r\n\r\n const animationFrameIdRef = React.useRef<number>(0);\r\n const stateRef = React.useRef<any>({\r\n discs: [] as any[],\r\n lines: [] as any[],\r\n particles: [] as any[],\r\n clip: {},\r\n startDisc: {},\r\n endDisc: {},\r\n rect: {width: 0, height: 0},\r\n render: {width: 0, height: 0, dpi: 1},\r\n particleArea: {},\r\n linesCanvas: null,\r\n });\r\n\r\n const tweenValue = React.useCallback((start: number, end: number, p: number, ease: \"inExpo\" | null = null) => {\r\n const delta = end - start;\r\n const easeFn = ease === \"inExpo\" ? easeInExpo : linear;\r\n return start + delta * easeFn(p);\r\n }, []);\r\n\r\n const tweenDisc = React.useCallback(\r\n (disc: any) => {\r\n const {startDisc, endDisc} = stateRef.current;\r\n disc.x = tweenValue(startDisc.x, endDisc.x, disc.p);\r\n disc.y = tweenValue(startDisc.y, endDisc.y, disc.p, \"inExpo\");\r\n disc.w = tweenValue(startDisc.w, endDisc.w, disc.p);\r\n disc.h = tweenValue(startDisc.h, endDisc.h, disc.p);\r\n },\r\n [tweenValue],\r\n );\r\n\r\n const setSize = React.useCallback(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const rect = canvas.getBoundingClientRect();\r\n stateRef.current.rect = {width: rect.width, height: rect.height};\r\n stateRef.current.render = {\r\n width: rect.width,\r\n height: rect.height,\r\n dpi: window.devicePixelRatio || 1,\r\n };\r\n canvas.width = stateRef.current.render.width * stateRef.current.render.dpi;\r\n canvas.height = stateRef.current.render.height * stateRef.current.render.dpi;\r\n }, []);\r\n\r\n const setDiscs = React.useCallback(() => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.discs = [];\r\n stateRef.current.startDisc = {\r\n x: width * 0.5,\r\n y: height * 0.45,\r\n w: width * 0.75,\r\n h: height * 0.7,\r\n };\r\n stateRef.current.endDisc = {\r\n x: width * 0.5,\r\n y: height * 0.95,\r\n w: 0,\r\n h: 0,\r\n };\r\n let prevBottom = height;\r\n stateRef.current.clip = {};\r\n for (let i = 0; i < numberOfDiscs; i++) {\r\n const p = i / numberOfDiscs;\r\n const disc = {p, x: 0, y: 0, w: 0, h: 0};\r\n tweenDisc(disc);\r\n const bottom = disc.y + disc.h;\r\n if (bottom <= prevBottom) {\r\n stateRef.current.clip = {disc: {...disc}, i};\r\n }\r\n prevBottom = bottom;\r\n stateRef.current.discs.push(disc);\r\n }\r\n const clipPath = new Path2D();\r\n const {disc} = stateRef.current.clip;\r\n clipPath.ellipse(disc.x, disc.y, disc.w, disc.h, 0, 0, Math.PI * 2);\r\n clipPath.rect(disc.x - disc.w, 0, disc.w * 2, disc.y);\r\n stateRef.current.clip.path = clipPath;\r\n }, [tweenDisc]);\r\n\r\n const setLines = React.useCallback(() => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.lines = [];\r\n const linesAngle = (Math.PI * 2) / numberOfLines;\r\n for (let i = 0; i < numberOfLines; i++) {\r\n stateRef.current.lines.push([]);\r\n }\r\n stateRef.current.discs.forEach((disc: any) => {\r\n for (let i = 0; i < numberOfLines; i++) {\r\n const angle = i * linesAngle;\r\n const p = {\r\n x: disc.x + Math.cos(angle) * disc.w,\r\n y: disc.y + Math.sin(angle) * disc.h,\r\n };\r\n stateRef.current.lines[i].push(p);\r\n }\r\n });\r\n const offCanvas = document.createElement(\"canvas\");\r\n offCanvas.width = width;\r\n offCanvas.height = height;\r\n const ctx = offCanvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n stateRef.current.lines.forEach((line: any) => {\r\n ctx.save();\r\n let lineIsIn = false;\r\n line.forEach((p1: any, j: number) => {\r\n if (j === 0) return;\r\n const p0 = line[j - 1];\r\n if (\r\n !lineIsIn\r\n && (ctx.isPointInPath(stateRef.current.clip.path, p1.x, p1.y) || ctx.isPointInStroke(stateRef.current.clip.path, p1.x, p1.y))\r\n ) {\r\n lineIsIn = true;\r\n } else if (lineIsIn) {\r\n ctx.clip(stateRef.current.clip.path);\r\n }\r\n ctx.beginPath();\r\n ctx.moveTo(p0.x, p0.y);\r\n ctx.lineTo(p1.x, p1.y);\r\n ctx.strokeStyle = strokeColor;\r\n ctx.lineWidth = 2;\r\n ctx.stroke();\r\n ctx.closePath();\r\n });\r\n ctx.restore();\r\n });\r\n stateRef.current.linesCanvas = offCanvas;\r\n }, [strokeColor]);\r\n\r\n const initParticle = React.useCallback((start: boolean = false) => {\r\n const sx = stateRef.current.particleArea.sx + stateRef.current.particleArea.sw * Math.random();\r\n const ex = stateRef.current.particleArea.ex + stateRef.current.particleArea.ew * Math.random();\r\n const dx = ex - sx;\r\n const y = start ? stateRef.current.particleArea.h * Math.random() : stateRef.current.particleArea.h;\r\n const r = 0.5 + Math.random() * 4;\r\n const vy = 0.5 + Math.random();\r\n return {\r\n x: sx,\r\n sx,\r\n dx,\r\n y,\r\n vy,\r\n p: 0,\r\n r,\r\n c: `rgba(${particleRGBColor[0]}, ${particleRGBColor[1]}, ${particleRGBColor[2]}, ${Math.random()})`,\r\n };\r\n }, []);\r\n\r\n const setParticles = React.useCallback(() => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.particles = [];\r\n const {disc} = stateRef.current.clip;\r\n stateRef.current.particleArea = {\r\n sw: disc.w * 0.5,\r\n ew: disc.w * 2,\r\n h: height * 0.85,\r\n };\r\n stateRef.current.particleArea.sx = (width - stateRef.current.particleArea.sw) / 2;\r\n stateRef.current.particleArea.ex = (width - stateRef.current.particleArea.ew) / 2;\r\n const totalParticles = 100;\r\n for (let i = 0; i < totalParticles; i++) {\r\n stateRef.current.particles.push(initParticle(true));\r\n }\r\n }, [initParticle]);\r\n\r\n const drawDiscs = React.useCallback(\r\n (ctx: CanvasRenderingContext2D) => {\r\n ctx.strokeStyle = strokeColor;\r\n ctx.lineWidth = 2;\r\n const outerDisc = stateRef.current.startDisc;\r\n ctx.beginPath();\r\n ctx.ellipse(outerDisc.x, outerDisc.y, outerDisc.w, outerDisc.h, 0, 0, Math.PI * 2);\r\n ctx.stroke();\r\n ctx.closePath();\r\n stateRef.current.discs.forEach((disc: any, i: number) => {\r\n if (i % 5 !== 0) return;\r\n if (disc.w < stateRef.current.clip.disc.w - 5) {\r\n ctx.save();\r\n ctx.clip(stateRef.current.clip.path);\r\n }\r\n ctx.beginPath();\r\n ctx.ellipse(disc.x, disc.y, disc.w, disc.h, 0, 0, Math.PI * 2);\r\n ctx.stroke();\r\n ctx.closePath();\r\n if (disc.w < stateRef.current.clip.disc.w - 5) {\r\n ctx.restore();\r\n }\r\n });\r\n },\r\n [strokeColor],\r\n );\r\n\r\n const drawLines = React.useCallback((ctx: CanvasRenderingContext2D) => {\r\n if (stateRef.current.linesCanvas) {\r\n ctx.drawImage(stateRef.current.linesCanvas, 0, 0);\r\n }\r\n }, []);\r\n\r\n const drawParticles = React.useCallback((ctx: CanvasRenderingContext2D) => {\r\n ctx.save();\r\n ctx.clip(stateRef.current.clip.path);\r\n stateRef.current.particles.forEach((particle: any) => {\r\n ctx.fillStyle = particle.c;\r\n ctx.beginPath();\r\n ctx.rect(particle.x, particle.y, particle.r, particle.r);\r\n ctx.closePath();\r\n ctx.fill();\r\n });\r\n ctx.restore();\r\n }, []);\r\n\r\n const moveDiscs = React.useCallback(() => {\r\n stateRef.current.discs.forEach((disc: any) => {\r\n disc.p = (disc.p + 0.001) % 1;\r\n tweenDisc(disc);\r\n });\r\n }, [tweenDisc]);\r\n\r\n const moveParticles = React.useCallback(() => {\r\n stateRef.current.particles.forEach((particle: any, idx: number) => {\r\n particle.p = 1 - particle.y / stateRef.current.particleArea.h;\r\n particle.x = particle.sx + particle.dx * particle.p;\r\n particle.y -= particle.vy;\r\n if (particle.y < 0) {\r\n stateRef.current.particles[idx] = initParticle();\r\n }\r\n });\r\n }, [initParticle]);\r\n\r\n const tick = React.useCallback(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n ctx.save();\r\n ctx.scale(stateRef.current.render.dpi, stateRef.current.render.dpi);\r\n moveDiscs();\r\n moveParticles();\r\n drawDiscs(ctx);\r\n drawLines(ctx);\r\n drawParticles(ctx);\r\n ctx.restore();\r\n animationFrameIdRef.current = requestAnimationFrame(tick);\r\n }, [moveDiscs, moveParticles, drawDiscs, drawLines, drawParticles]);\r\n\r\n const init = React.useCallback(() => {\r\n setSize();\r\n setDiscs();\r\n setLines();\r\n setParticles();\r\n }, [setSize, setDiscs, setLines, setParticles]);\r\n\r\n React.useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n init();\r\n tick();\r\n const handleResize = () => {\r\n setSize();\r\n setDiscs();\r\n setLines();\r\n setParticles();\r\n };\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n cancelAnimationFrame(animationFrameIdRef.current);\r\n };\r\n }, [init, tick, setSize, setDiscs, setLines, setParticles]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative size-full overflow-hidden\",\r\n 'before:absolute before:top-1/2 before:left-1/2 before:block before:size-[140%] before:[transform:translate3d(-50%,-50%,0)] before:content-[\"\"] before:[background:radial-gradient(ellipse_at_50%_55%,transparent_10%,white_50%)] dark:before:[background:radial-gradient(ellipse_at_50%_55%,transparent_10%,black_50%)]',\r\n 'after:absolute after:top-1/2 after:left-1/2 after:z-[5] after:block after:size-full after:[transform:translate3d(-50%,-50%,0)] after:mix-blend-overlay after:content-[\"\"] after:[background:radial-gradient(ellipse_at_50%_75%,#a900ff_20%,transparent_75%)]',\r\n className,\r\n )}>\r\n {children}\r\n <canvas\r\n ref={canvasRef}\r\n className='absolute inset-0 block size-full opacity-10 dark:opacity-20'\r\n {...props}\r\n />\r\n <motion.div\r\n className={cn(\r\n \"absolute top-[-71.5%] left-1/2 z-[3] h-[140%] w-[30%] [transform:translate3d(-50%,0,0)] rounded-b-full [background-size:100%_200%] [background-position:0%_100%] opacity-75 mix-blend-plus-darker blur-3xl dark:mix-blend-plus-lighter\",\r\n \"[background:linear-gradient(20deg,#00f8f1,#ffbd1e40_16.5%,#fe848f_33%,#fe848f40_49.5%,#00f8f1_66%,#00f8f180_85.5%,#ffbd1e_100%)_0_100%_/_100%_200%] dark:[background:linear-gradient(20deg,#00f8f1,#ffbd1e20_16.5%,#fe848f_33%,#fe848f20_49.5%,#00f8f1_66%,#00f8f160_85.5%,#ffbd1e_100%)_0_100%_/_100%_200%]\",\r\n )}\r\n animate={{backgroundPosition: \"0% 300%\"}}\r\n transition={{duration: 5, ease: \"linear\", repeat: Infinity}}\r\n />\r\n <div className='absolute top-0 left-0 z-[7] size-full opacity-50 mix-blend-overlay dark:[background:repeating-linear-gradient(transparent,transparent_1px,white_1px,white_2px)]' />\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nHoleBackground.displayName = \"HoleBackground\";\r\nexport {HoleBackground, type HoleBackgroundProps};\r\n"],"names":["linear","p","easeInExpo","HoleBackground","React","strokeColor","numberOfLines","numberOfDiscs","particleRGBColor","className","children","props","ref","canvasRef","animationFrameIdRef","stateRef","tweenValue","start","end","ease","delta","easeFn","tweenDisc","disc","startDisc","endDisc","setSize","canvas","rect","window","setDiscs","width","height","prevBottom","i","bottom","clipPath","Path2D","Math","setLines","linesAngle","angle","offCanvas","document","ctx","line","lineIsIn","p1","j","p0","initParticle","sx","ex","dx","y","r","vy","setParticles","totalParticles","drawDiscs","outerDisc","drawLines","drawParticles","particle","moveDiscs","moveParticles","idx","tick","requestAnimationFrame","init","handleResize","cancelAnimationFrame","cn","motion","Infinity"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/hover-card.js","sources":["../../../src/components/ui/hover-card.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nconst HoverCard = HoverCardPrimitive.Root;\r\n\r\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\r\n\r\nconst HoverCardContent = React.forwardRef<\r\n React.ComponentRef<typeof HoverCardPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\r\n>(({className, align = \"center\", sideOffset = 4, ...props}, ref) => (\r\n <HoverCardPrimitive.Content\r\n ref={ref}\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 origin-[--radix-hover-card-content-transform-origin] rounded-md border border-neutral-200 bg-white p-4 text-neutral-950 shadow-md outline-none dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n));\r\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\r\n\r\nexport {HoverCard, HoverCardContent, HoverCardTrigger};\r\n"],"names":["HoverCard","HoverCardPrimitive","HoverCardTrigger","HoverCardContent","React","className","align","sideOffset","props","ref","cn"],"mappings":";;;;;AAOA,MAAMA,YAAYC;AAElB,MAAMC,mBAAmBD;AAEzB,MAAME,mBAAmB,WAAnBA,GAAmBC,WAGvB,CAAC,EAACC,SAAS,EAAEC,QAAQ,QAAQ,EAAEC,aAAa,CAAC,EAAE,GAAGC,OAAM,EAAEC,MAAAA,WAAAA,GAC1D,IAACR,SAA0B;QACzB,KAAKQ;QACL,OAAOH;QACP,YAAYC;QACZ,WAAWG,GACT,8iBACAL;QAED,GAAGG,KAAK;;AAGbL,iBAAiB,WAAW,GAAGF,QAAAA,WAAsC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-group.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input-group.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"input-group.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input-group.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAM,KAAK,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAK9C,iBAAS,UAAU,CAAC,EAAC,SAAS,EAAE,GAAG,KAAK,EAAC,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CA0BrE;AAED,QAAA,MAAM,uBAAuB;;iEAe5B,CAAC;AAEF,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,KAAsB,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,uBAAuB,CAAC,2CAgB5E;AAED,QAAA,MAAM,wBAAwB;;iEAY5B,CAAC;AAEH,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,IAAe,EACf,OAAiB,EACjB,IAAW,EACX,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,wBAAwB,CAAC,2CAUnG;AAED,iBAAS,cAAc,CAAC,EAAC,SAAS,EAAE,GAAG,KAAK,EAAC,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAU1E;AAED,iBAAS,eAAe,CAAC,EAAC,SAAS,EAAE,GAAG,KAAK,EAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,2CAQ5E;AAED,iBAAS,kBAAkB,CAAC,EAAC,SAAS,EAAE,GAAG,KAAK,EAAC,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,2CAWlF;AAED,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/input-group.js","sources":["../../../src/components/ui/input-group.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/* eslint-disable */\r\n\r\nimport {cva, type VariantProps} from \"class-variance-authority\";\r\nimport * as React from \"react\";\r\n\r\nimport {Button} from \"@/components/ui/button\";\r\nimport {Input} from \"@/components/ui/input\";\r\nimport {Textarea} from \"@/components/ui/textarea\";\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nfunction InputGroup({className, ...props}: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot='input-group'\r\n role='group'\r\n className={cn(\r\n \"group/input-group relative flex w-full items-center rounded-md border border-neutral-200 shadow-xs transition-[color,box-shadow] outline-none dark:border-neutral-800 dark:bg-neutral-200/30 dark:dark:bg-neutral-800/30\",\r\n \"h-9 has-[>textarea]:h-auto\",\r\n\r\n // Variants based on alignment.\r\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\r\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\r\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\r\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\r\n\r\n // Focus state.\r\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot=input-group-control]:focus-visible]:ring-neutral-950 dark:has-[[data-slot=input-group-control]:focus-visible]:ring-neutral-300\",\r\n\r\n // Error state.\r\n \"has-[[data-slot][aria-invalid=true]]:border-red-500 has-[[data-slot][aria-invalid=true]]:ring-red-500/20 dark:has-[[data-slot][aria-invalid=true]]:border-red-900 dark:dark:has-[[data-slot][aria-invalid=true]]:ring-red-900/40 dark:has-[[data-slot][aria-invalid=true]]:ring-red-500/40 dark:has-[[data-slot][aria-invalid=true]]:ring-red-900/20\",\r\n\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nconst inputGroupAddonVariants = cva(\r\n \"text-neutral-500 flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4 dark:text-neutral-400\",\r\n {\r\n variants: {\r\n align: {\r\n \"inline-start\": \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\r\n \"inline-end\": \"order-last pr-3 has-[>button]:mr-[-0.4rem] has-[>kbd]:mr-[-0.35rem]\",\r\n \"block-start\": \"[.border-b]:pb-3 order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5\",\r\n \"block-end\": \"[.border-t]:pt-3 order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5\",\r\n },\r\n },\r\n defaultVariants: {\r\n align: \"inline-start\",\r\n },\r\n },\r\n);\r\n\r\nfunction InputGroupAddon({\r\n className,\r\n align = \"inline-start\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\r\n return (\r\n <div\r\n role='group'\r\n data-slot='input-group-addon'\r\n data-align={align}\r\n className={cn(inputGroupAddonVariants({align}), className)}\r\n onClick={(e) => {\r\n if ((e.target as HTMLElement).closest(\"button\")) {\r\n return;\r\n }\r\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\r\n }}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nconst inputGroupButtonVariants = cva(\"flex items-center gap-2 text-sm shadow-none\", {\r\n variants: {\r\n size: {\r\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\r\n sm: \"h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5\",\r\n \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\r\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"xs\",\r\n },\r\n});\r\n\r\nfunction InputGroupButton({\r\n className,\r\n type = \"button\",\r\n variant = \"ghost\",\r\n size = \"xs\",\r\n ...props\r\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> & VariantProps<typeof inputGroupButtonVariants>) {\r\n return (\r\n <Button\r\n type={type}\r\n data-size={size}\r\n variant={variant}\r\n className={cn(inputGroupButtonVariants({size}), className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction InputGroupText({className, ...props}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n className={cn(\r\n \"flex items-center gap-2 text-sm text-neutral-500 dark:text-neutral-400 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction InputGroupInput({className, ...props}: React.ComponentProps<\"input\">) {\r\n return (\r\n <Input\r\n data-slot='input-group-control'\r\n className={cn(\"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction InputGroupTextarea({className, ...props}: React.ComponentProps<\"textarea\">) {\r\n return (\r\n <Textarea\r\n data-slot='input-group-control'\r\n className={cn(\r\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea};\r\n"],"names":["InputGroup","className","props","cn","inputGroupAddonVariants","cva","InputGroupAddon","align","e","inputGroupButtonVariants","InputGroupButton","type","variant","size","Button","InputGroupText","InputGroupInput","Input","InputGroupTextarea","Textarea"],"mappings":";;;;;;;;AAYA,SAASA,WAAW,EAACC,SAAS,EAAE,GAAGC,OAAmC;IACpE,OAAO,WAAP,GACE,IAAC;QACC,aAAU;QACV,MAAK;QACL,WAAWC,GACT,4NACA,8BAGA,mDACA,iDACA,kIACA,4HAGA,6MAGA,wVAEAF;QAED,GAAGC,KAAK;;AAGf;AAEA,MAAME,0BAA0BC,IAC9B,4QACA;IACE,UAAU;QACR,OAAO;YACL,gBAAgB;YAChB,cAAc;YACd,eAAe;YACf,aAAa;QACf;IACF;IACA,iBAAiB;QACf,OAAO;IACT;AACF;AAGF,SAASC,gBAAgB,EACvBL,SAAS,EACTM,QAAQ,cAAc,EACtB,GAAGL,OACwE;IAC3E,OAAO,WAAP,GACE,IAAC;QACC,MAAK;QACL,aAAU;QACV,cAAYK;QACZ,WAAWJ,GAAGC,wBAAwB;YAACG;QAAK,IAAIN;QAChD,SAAS,CAACO;YACR,IAAKA,EAAE,MAAM,CAAiB,OAAO,CAAC,WACpC;YAEFA,EAAE,aAAa,CAAC,aAAa,EAAE,cAAc,UAAU;QACzD;QACC,GAAGN,KAAK;;AAGf;AAEA,MAAMO,2BAA2BJ,IAAI,+CAA+C;IAClF,UAAU;QACR,MAAM;YACJ,IAAI;YACJ,IAAI;YACJ,WAAW;YACX,WAAW;QACb;IACF;IACA,iBAAiB;QACf,MAAM;IACR;AACF;AAEA,SAASK,iBAAiB,EACxBT,SAAS,EACTU,OAAO,QAAQ,EACfC,UAAU,OAAO,EACjBC,OAAO,IAAI,EACX,GAAGX,OAC+F;IAClG,OAAO,WAAP,GACE,IAACY,QAAMA;QACL,MAAMH;QACN,aAAWE;QACX,SAASD;QACT,WAAWT,GAAGM,yBAAyB;YAACI;QAAI,IAAIZ;QAC/C,GAAGC,KAAK;;AAGf;AAEA,SAASa,eAAe,EAACd,SAAS,EAAE,GAAGC,OAAoC;IACzE,OAAO,WAAP,GACE,IAAC;QACC,WAAWC,GACT,2IACAF;QAED,GAAGC,KAAK;;AAGf;AAEA,SAASc,gBAAgB,EAACf,SAAS,EAAE,GAAGC,OAAqC;IAC3E,OAAO,WAAP,GACE,IAACe,OAAKA;QACJ,aAAU;QACV,WAAWd,GAAG,oGAAoGF;QACjH,GAAGC,KAAK;;AAGf;AAEA,SAASgB,mBAAmB,EAACjB,SAAS,EAAE,GAAGC,OAAwC;IACjF,OAAO,WAAP,GACE,IAACiB,UAAQA;QACP,aAAU;QACV,WAAWhB,GACT,qHACAF;QAED,GAAGC,KAAK;;AAGf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/input-otp.js","sources":["../../../src/components/ui/input-otp.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {OTPInput, OTPInputContext} from \"input-otp\";\r\nimport {Minus} from \"lucide-react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nconst InputOTP = React.forwardRef<React.ComponentRef<typeof OTPInput>, React.ComponentPropsWithoutRef<typeof OTPInput>>(\r\n ({className, containerClassName, ...props}, ref) => (\r\n <OTPInput\r\n ref={ref}\r\n containerClassName={cn(\"flex items-center gap-2 has-[:disabled]:opacity-50\", containerClassName)}\r\n className={cn(\"disabled:cursor-not-allowed\", className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\nInputOTP.displayName = \"InputOTP\";\r\n\r\nconst InputOTPGroup = React.forwardRef<React.ComponentRef<\"div\">, React.ComponentPropsWithoutRef<\"div\">>(({className, ...props}, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex items-center\", className)}\r\n {...props}\r\n />\r\n));\r\nInputOTPGroup.displayName = \"InputOTPGroup\";\r\n\r\nconst InputOTPSlot = React.forwardRef<React.ComponentRef<\"div\">, React.ComponentPropsWithoutRef<\"div\"> & {index: number}>(\r\n ({index, className, ...props}, ref) => {\r\n const inputOTPContext = React.useContext(OTPInputContext);\r\n const {char, hasFakeCaret, isActive} = inputOTPContext.slots[index];\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"relative flex h-9 w-9 items-center justify-center border-y border-r border-neutral-200 text-sm shadow-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md dark:border-neutral-800\",\r\n isActive && \"z-10 ring-1 ring-neutral-950 dark:ring-neutral-300\",\r\n className,\r\n )}\r\n {...props}>\r\n {char}\r\n {Boolean(hasFakeCaret) && (\r\n <div className='pointer-events-none absolute inset-0 flex items-center justify-center'>\r\n <div className='animate-caret-blink h-4 w-px bg-neutral-950 duration-1000 dark:bg-neutral-50' />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\nInputOTPSlot.displayName = \"InputOTPSlot\";\r\n\r\nconst InputOTPSeparator = React.forwardRef<React.ComponentRef<\"div\">, React.ComponentPropsWithoutRef<\"div\">>(({...props}, ref) => (\r\n <div\r\n ref={ref}\r\n role='separator'\r\n {...props}>\r\n <Minus />\r\n </div>\r\n));\r\nInputOTPSeparator.displayName = \"InputOTPSeparator\";\r\n\r\nexport {InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot};\r\n"],"names":["InputOTP","React","className","containerClassName","props","ref","OTPInput","cn","InputOTPGroup","InputOTPSlot","index","inputOTPContext","OTPInputContext","char","hasFakeCaret","isActive","Boolean","InputOTPSeparator","Minus"],"mappings":";;;;;;AAQA,MAAMA,WAAW,WAAXA,GAAWC,WACf,CAAC,EAACC,SAAS,EAAEC,kBAAkB,EAAE,GAAGC,OAAM,EAAEC,MAAAA,WAAAA,GAC1C,IAACC,UAAQA;QACP,KAAKD;QACL,oBAAoBE,GAAG,sDAAsDJ;QAC7E,WAAWI,GAAG,+BAA+BL;QAC5C,GAAGE,KAAK;;AAIfJ,SAAS,WAAW,GAAG;AAEvB,MAAMQ,gBAAgB,WAAhBA,GAAgBP,WAAmF,CAAC,EAACC,SAAS,EAAE,GAAGE,OAAM,EAAEC,MAAAA,WAAAA,GAC/H,IAAC;QACC,KAAKA;QACL,WAAWE,GAAG,qBAAqBL;QAClC,GAAGE,KAAK;;AAGbI,cAAc,WAAW,GAAG;AAE5B,MAAMC,eAAe,WAAfA,GAAeR,WACnB,CAAC,EAACS,KAAK,EAAER,SAAS,EAAE,GAAGE,OAAM,EAAEC;IAC7B,MAAMM,kBAAkBV,WAAiBW;IACzC,MAAM,EAACC,IAAI,EAAEC,YAAY,EAAEC,QAAQ,EAAC,GAAGJ,gBAAgB,KAAK,CAACD,MAAM;IAEnE,OAAO,WAAP,GACE,KAAC;QACC,KAAKL;QACL,WAAWE,GACT,uMACAQ,YAAY,sDACZb;QAED,GAAGE,KAAK;;YACRS;YACAG,QAAQF,iBAAiB,WAAjBA,GACP,IAAC;gBAAI,WAAU;0BACb,kBAAC;oBAAI,WAAU;;;;;AAKzB;AAEFL,aAAa,WAAW,GAAG;AAE3B,MAAMQ,oBAAoB,WAApBA,GAAoBhB,WAAmF,CAAC,EAAC,GAAGG,OAAM,EAAEC,MAAAA,WAAAA,GACxH,IAAC;QACC,KAAKA;QACL,MAAK;QACJ,GAAGD,KAAK;kBACT,kBAACc,OAAKA,CAAAA;;AAGVD,kBAAkB,WAAW,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components
|
|
1
|
+
{"version":3,"file":"components/ui/input.js","sources":["../../../src/components/ui/input.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport * as React from \"react\";\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(({className, type, ...props}, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n className={cn(\r\n \"flex h-9 w-full rounded-md border border-neutral-200 bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-neutral-950 placeholder:text-neutral-500 focus-visible:ring-1 focus-visible:ring-neutral-950 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:border-neutral-800 dark:file:text-neutral-50 dark:placeholder:text-neutral-400 dark:focus-visible:ring-neutral-300\",\r\n className,\r\n )}\r\n ref={ref}\r\n {...props}\r\n />\r\n );\r\n});\r\nInput.displayName = \"Input\";\r\n\r\nexport {Input};\r\n"],"names":["Input","React","className","type","props","ref","cn"],"mappings":";;;;AAKA,MAAMA,QAAQ,WAARA,GAAQC,WAAkE,CAAC,EAACC,SAAS,EAAEC,IAAI,EAAE,GAAGC,OAAM,EAAEC,MACrG,WAAP,GACE,IAAC;QACC,MAAMF;QACN,WAAWG,GACT,4eACAJ;QAEF,KAAKG;QACJ,GAAGD,KAAK;;AAIfJ,MAAM,WAAW,GAAG"}
|