unicornial-ui 0.0.5 → 0.0.6

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.
@@ -0,0 +1,10 @@
1
+ import { type HTMLAttributes } from "react";
2
+ type Variant = "dots-grid" | "isometric-dot-paper" | "paper" | "diamond-grid" | "paper-45" | "lines" | "falling-stars";
3
+ export interface BackgroundProps extends HTMLAttributes<HTMLDivElement> {
4
+ variant?: Variant;
5
+ color?: string;
6
+ size?: number;
7
+ }
8
+ export declare const Background: import("react").ForwardRefExoticComponent<BackgroundProps & import("react").RefAttributes<HTMLDivElement>>;
9
+ export default Background;
10
+ //# sourceMappingURL=Background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Background.d.ts","sourceRoot":"","sources":["../../../src/components/Background.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,OAAO,CAAC;AAGjE,KAAK,OAAO,GACR,WAAW,GACX,qBAAqB,GACrB,OAAO,GACP,cAAc,GACd,UAAU,GACV,OAAO,GACP,eAAe,CAAC;AAEpB,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA4DD,eAAO,MAAM,UAAU,4GA4CtB,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAc,MAAM,OAAO,CAAC;AAE9D,KAAK,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAC7D,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/B,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAmBD,eAAO,MAAM,MAAM,2GAoBjB,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAuB,MAAM,OAAO,CAAC;AAGvE,KAAK,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAC7D,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/B,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAmCD,eAAO,MAAM,MAAM,2GAyEjB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type AnchorHTMLAttributes, type HTMLAttributes, type ImgHTMLAttributes } from "react";
2
+ type Behaviour = "default" | "sticky" | "blur";
3
+ export interface HeaderProps extends HTMLAttributes<HTMLElement> {
4
+ behaviour?: Behaviour;
5
+ }
6
+ export interface HeaderLogoProps extends ImgHTMLAttributes<HTMLImageElement> {
7
+ }
8
+ export interface HeaderNavButtonProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
9
+ }
10
+ export declare const Header: import("react").ForwardRefExoticComponent<HeaderProps & import("react").RefAttributes<HTMLElement>>;
11
+ export declare const HeaderLogo: import("react").ForwardRefExoticComponent<HeaderLogoProps & import("react").RefAttributes<HTMLImageElement>>;
12
+ export declare const HeaderNavButton: import("react").ForwardRefExoticComponent<HeaderNavButtonProps & import("react").RefAttributes<HTMLAnchorElement>>;
13
+ export declare const HeaderNamespace: import("react").ForwardRefExoticComponent<HeaderProps & import("react").RefAttributes<HTMLElement>> & {
14
+ Logo: import("react").ForwardRefExoticComponent<HeaderLogoProps & import("react").RefAttributes<HTMLImageElement>>;
15
+ NavButton: import("react").ForwardRefExoticComponent<HeaderNavButtonProps & import("react").RefAttributes<HTMLAnchorElement>>;
16
+ };
17
+ export default HeaderNamespace;
18
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAKvB,MAAM,OAAO,CAAC;AAGf,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC9D,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB,CAAC,gBAAgB,CAAC;CAAG;AAE/E,MAAM,WAAW,oBACf,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;CAAG;AAwBpD,eAAO,MAAM,MAAM,qGAqEjB,CAAC;AAEH,eAAO,MAAM,UAAU,8GActB,CAAC;AAEF,eAAO,MAAM,eAAe,oHA8C1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;CAG1B,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type InputHTMLAttributes, type ReactNode } from "react";
2
+ type Variant = "default" | "filled" | "underline";
3
+ type Size = "sm" | "md" | "lg";
4
+ export interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
5
+ variant?: Variant;
6
+ Isize?: Size;
7
+ error?: boolean;
8
+ leftIcon?: ReactNode;
9
+ rightIcon?: ReactNode;
10
+ wrapperClassName?: string;
11
+ }
12
+ export declare const Input: import("react").ForwardRefExoticComponent<InputProps & import("react").RefAttributes<HTMLInputElement>>;
13
+ export {};
14
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EAGxB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,KAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAClD,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/B,MAAM,WAAW,UAAW,SAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAsDD,eAAO,MAAM,KAAK,yGA0KhB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type HTMLAttributes } from "react";
2
+ type Variant = "line" | "point";
3
+ type Orientation = "horizontal" | "vertical";
4
+ export interface SeparatorProps extends HTMLAttributes<HTMLDivElement> {
5
+ variant?: Variant;
6
+ orientation?: Orientation;
7
+ color?: string;
8
+ thickness?: number;
9
+ spacing?: number;
10
+ }
11
+ export declare const Separator: import("react").ForwardRefExoticComponent<SeparatorProps & import("react").RefAttributes<HTMLDivElement>>;
12
+ export default Separator;
13
+ //# sourceMappingURL=Separator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Separator.d.ts","sourceRoot":"","sources":["../../../src/components/Separator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,OAAO,CAAC;AAGjE,KAAK,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAChC,KAAK,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;AAE7C,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,cAAc,CAAC;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,SAAS,2GAkFrB,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1,3 +1,9 @@
1
1
  import "./index.css";
2
2
  export { Button } from "./components/Button";
3
+ export { default as Header } from "./components/Header";
4
+ export { default as Background } from "./components/Background";
5
+ export { default as Separator } from "./components/Separator";
6
+ export { Input } from "./components/Input";
7
+ export { Validate, validators } from "./utils/validation";
8
+ export { ThemeProvider, useTheme, themeConfig, type ThemeConfig, type ThemeColors, type ThemeTextClasses, type ThemeContextValue, } from "./theme/ThemeProvider";
3
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,QAAQ,EACR,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.tsx"],"names":[],"mappings":"AAGA,OAAO,aAAa,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { type ReactNode } from "react";
2
+ import defaultConfig from "./theme.config.json";
3
+ export interface ThemeColors {
4
+ primary: string;
5
+ secondary: string;
6
+ }
7
+ export interface ThemeTextClasses {
8
+ title: string;
9
+ subtitle: string;
10
+ normal: string;
11
+ }
12
+ export interface ThemeConfig {
13
+ colors: ThemeColors;
14
+ darkMode: boolean;
15
+ text: ThemeTextClasses;
16
+ }
17
+ export interface ThemeContextValue extends ThemeConfig {
18
+ enabled: boolean;
19
+ setColors: (colors: Partial<ThemeColors>) => void;
20
+ setDarkMode: (enabled: boolean) => void;
21
+ setText: (text: Partial<ThemeTextClasses>) => void;
22
+ setTheme: (config: Partial<ThemeConfig>) => void;
23
+ }
24
+ export interface ThemeProviderProps {
25
+ children: ReactNode;
26
+ config?: Partial<ThemeConfig>;
27
+ }
28
+ export declare function ThemeProvider({ children, config }: ThemeProviderProps): import("react").JSX.Element;
29
+ export declare function useTheme(): ThemeContextValue;
30
+ export { defaultConfig as themeConfig };
31
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AACf,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAClD;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC/B;AAsBD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,kBAAkB,+BAyDrE;AAED,wBAAgB,QAAQ,IAAI,iBAAiB,CAe5C;AAED,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface ValidationResult {
2
+ valid: boolean;
3
+ message: string;
4
+ }
5
+ export type Validator = (value: unknown) => ValidationResult;
6
+ export declare const validators: Record<string, (...args: any[]) => Validator>;
7
+ export declare class Validate {
8
+ private checks;
9
+ private add;
10
+ static email(): Validate;
11
+ static onlyNumbers(): Validate;
12
+ static min(n: number): Validate;
13
+ static max(n: number): Validate;
14
+ email(): this;
15
+ onlyNumbers(): this;
16
+ min(n: number): this;
17
+ max(n: number): this;
18
+ validate(value: unknown): ValidationResult;
19
+ }
20
+ export default Validate;
21
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,gBAAgB,CAAC;AAW7D,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,SAAS,CAyCpE,CAAC;AAEF,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAmB;IAEjC,OAAO,CAAC,GAAG;IAKX,MAAM,CAAC,KAAK,IAAI,QAAQ;IAIxB,MAAM,CAAC,WAAW,IAAI,QAAQ;IAI9B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ;IAI/B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ;IAI/B,KAAK,IAAI,IAAI;IAIb,WAAW,IAAI,IAAI;IAInB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIpB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIpB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;CAS3C;AAED,eAAe,QAAQ,CAAC"}
@@ -1,3 +1,3 @@
1
1
  /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:system-ui, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, Consolas, monospace;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-bold:700;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text:#6b6375;--color-text-h:#08060d;--color-bg:#fff;--color-border:#e5e4e7;--color-code-bg:#f4f3ec;--color-accent:#aa3bff;--color-accent-bg:#aa3bff1a;--color-accent-border:#aa3bff80;--font-heading:system-ui, "Segoe UI", Roboto, sans-serif}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.relative{position:relative}.flex{display:flex}.inline-flex{display:inline-flex}.min-h-screen{min-height:100vh}.max-w-md{max-width:var(--container-md)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-6{gap:calc(var(--spacing) * 6)}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-border{border-color:var(--color-border)}.bg-accent{background-color:var(--color-accent)}.bg-bg{background-color:var(--color-bg)}.bg-code-bg{background-color:var(--color-code-bg)}.bg-transparent{background-color:#0000}.p-8{padding:calc(var(--spacing) * 8)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-7{padding-inline:calc(var(--spacing) * 7)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.text-center{text-align:center}.font-heading{font-family:var(--font-heading)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-text{color:var(--color-text)}.text-text-h{color:var(--color-text-h)}.text-white{color:var(--color-white)}.accent-bg{accent-color:var(--color-bg)}.accent-border{accent-color:var(--color-border)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-accent-border:hover{border-color:var(--color-accent-border)}.hover\:bg-accent-bg:hover{background-color:var(--color-accent-bg)}.hover\:bg-accent\/90:hover{background-color:#aa3bffe6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/90:hover{background-color:color-mix(in oklab, var(--color-accent) 90%, transparent)}}.hover\:bg-code-bg\/80:hover{background-color:#f4f3eccc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-code-bg\/80:hover{background-color:color-mix(in oklab, var(--color-code-bg) 80%, transparent)}}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-accent\/50:focus-visible{--tw-ring-color:#aa3bff80}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-accent\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.focus-visible\:ring-code-bg\/50:focus-visible{--tw-ring-color:#f4f3ec80}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-code-bg\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-code-bg) 50%, transparent)}}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:system-ui, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, Consolas, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-white:#fff;--spacing:.25rem;--container-md:28rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text:#6b6375;--color-text-h:#08060d;--color-bg:#fff;--color-border:#e5e4e7;--color-code-bg:#f4f3ec;--color-accent:#aa3bff;--color-accent-bg:#aa3bff1a;--color-accent-border:#aa3bff80;--font-heading:system-ui, "Segoe UI", Roboto, sans-serif}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.top-0{top:0}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.left-4{left:calc(var(--spacing) * 4)}.-z-10{z-index:calc(10 * -1)}.z-50{z-index:50}.flex{display:flex}.inline-flex{display:inline-flex}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-full{height:100%}.max-h-\[48px\]{max-height:48px}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-auto{width:auto}.w-full{width:100%}.max-w-11\/12{max-width:91.6667%}.max-w-md{max-width:var(--container-md)}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-not-allowed{cursor:not-allowed}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-border{border-color:var(--color-border)}.border-red-500{border-color:var(--color-red-500)}.border-b-red-500{border-bottom-color:var(--color-red-500)}.border-b-transparent{border-bottom-color:#0000}.bg-accent{background-color:var(--color-accent)}.bg-bg{background-color:var(--color-bg)}.bg-bg\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.bg-bg\/70{background-color:color-mix(in oklab, var(--color-bg) 70%, transparent)}}.bg-code-bg{background-color:var(--color-code-bg)}.bg-transparent{background-color:#0000}.object-contain{object-fit:contain}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-7{padding-inline:calc(var(--spacing) * 7)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-44{padding-top:calc(var(--spacing) * 44)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pr-11{padding-right:calc(var(--spacing) * 11)}.pr-13{padding-right:calc(var(--spacing) * 13)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-11{padding-left:calc(var(--spacing) * 11)}.pl-13{padding-left:calc(var(--spacing) * 13)}.text-center{text-align:center}.font-heading{font-family:var(--font-heading)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-text{color:var(--color-text)}.text-text-h{color:var(--color-text-h)}.text-white{color:var(--color-white)}.underline{text-decoration-line:underline}.accent-bg{accent-color:var(--color-bg)}.accent-border{accent-color:var(--color-border)}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.placeholder\:text-\[color\:var\(--placeholder-color\)\]::placeholder{color:var(--placeholder-color)}.focus-within\:border-b-2:focus-within,.focus-within\:border-b-\[2px\]:focus-within{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.focus-within\:border-\[var\(--focus-border\)\]:focus-within{border-color:var(--focus-border)}.focus-within\:border-accent:focus-within{border-color:var(--color-accent)}.focus-within\:border-b-\[var\(--focus-border\)\]:focus-within{border-bottom-color:var(--focus-border)}.focus-within\:border-b-accent:focus-within{border-bottom-color:var(--color-accent)}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\:ring-\[var\(--ring-color\)\]:focus-within{--tw-ring-color:var(--ring-color)}.focus-within\:ring-accent\/50:focus-within{--tw-ring-color:#aa3bff80}@supports (color:color-mix(in lab, red, red)){.focus-within\:ring-accent\/50:focus-within{--tw-ring-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.focus-within\:ring-offset-0:focus-within{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}@media (hover:hover){.hover\:border-\[var\(--hover-border\)\]:hover{border-color:var(--hover-border)}.hover\:border-accent-border:hover{border-color:var(--color-accent-border)}.hover\:bg-\[var\(--hover-bg\)\]:hover{background-color:var(--hover-bg)}.hover\:bg-accent-bg:hover{background-color:var(--color-accent-bg)}.hover\:bg-accent\/90:hover{background-color:#aa3bffe6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/90:hover{background-color:color-mix(in oklab, var(--color-accent) 90%, transparent)}}.hover\:bg-code-bg\/80:hover{background-color:#f4f3eccc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-code-bg\/80:hover{background-color:color-mix(in oklab, var(--color-code-bg) 80%, transparent)}}.hover\:text-\[var\(--hover-color\)\]:hover{color:var(--hover-color)}.hover\:text-accent:hover{color:var(--color-accent)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-accent\/50:focus-visible{--tw-ring-color:#aa3bff80}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-accent\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.focus-visible\:ring-code-bg\/50:focus-visible{--tw-ring-color:#f4f3ec80}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-code-bg\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-code-bg) 50%, transparent)}}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}}@keyframes falling-stars{0%{background-position:0 0,0 0,0 0,0 0}to{background-position:500px 1000px,300px 600px,700px 1400px,400px 800px}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
3
3
  /*$vite$:1*/
@@ -1,33 +1,580 @@
1
1
  import "./unicornial-ui.css";
2
- import { forwardRef as e } from "react";
3
- import { jsx as t } from "react/jsx-runtime";
2
+ import { createContext as e, forwardRef as t, useCallback as n, useContext as r, useEffect as i, useMemo as a, useState as o } from "react";
3
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
+ var l = {
5
+ colors: {
6
+ primary: "#aa3bff",
7
+ secondary: "#f4f3ec"
8
+ },
9
+ darkMode: !1,
10
+ text: {
11
+ title: "text-3xl font-bold text-text-h",
12
+ subtitle: "text-xl font-semibold text-text-h",
13
+ normal: "text-base font-normal text-text"
14
+ }
15
+ }, u = e(null), d = (e, t) => {
16
+ let n = { ...e };
17
+ for (let r of Object.keys(t)) {
18
+ let i = t[r];
19
+ i && typeof i == "object" && !Array.isArray(i) && e[r] && typeof e[r] == "object" && !Array.isArray(e[r]) ? n[r] = d(e[r], i) : i !== void 0 && (n[r] = i);
20
+ }
21
+ return n;
22
+ };
23
+ function f({ children: e, config: t }) {
24
+ let r = a(() => d(l, t ?? {}), [t]), [c, f] = o(r.colors), [p, m] = o(r.darkMode), [h, g] = o(r.text), _ = n((e) => {
25
+ f((t) => ({
26
+ ...t,
27
+ ...e
28
+ }));
29
+ }, []), v = n((e) => {
30
+ m(e);
31
+ }, []), y = n((e) => {
32
+ g((t) => ({
33
+ ...t,
34
+ ...e
35
+ }));
36
+ }, []), b = n((e) => {
37
+ e.colors && f((t) => ({
38
+ ...t,
39
+ ...e.colors
40
+ })), e.darkMode !== void 0 && m(e.darkMode), e.text && g((t) => ({
41
+ ...t,
42
+ ...e.text
43
+ }));
44
+ }, []);
45
+ i(() => {
46
+ if (typeof document > "u") return;
47
+ let e = document.documentElement;
48
+ p ? e.classList.add("dark") : e.classList.remove("dark"), e.style.setProperty("--theme-primary", c.primary), e.style.setProperty("--theme-secondary", c.secondary);
49
+ }, [c, p]);
50
+ let x = a(() => ({
51
+ enabled: !0,
52
+ colors: c,
53
+ darkMode: p,
54
+ text: h,
55
+ setColors: _,
56
+ setDarkMode: v,
57
+ setText: y,
58
+ setTheme: b
59
+ }), [
60
+ c,
61
+ p,
62
+ h,
63
+ _,
64
+ v,
65
+ y,
66
+ b
67
+ ]);
68
+ return /* @__PURE__ */ s(u.Provider, {
69
+ value: x,
70
+ children: e
71
+ });
72
+ }
73
+ function p() {
74
+ return r(u) || {
75
+ enabled: !1,
76
+ colors: l.colors,
77
+ darkMode: l.darkMode,
78
+ text: l.text,
79
+ setColors: () => {},
80
+ setDarkMode: () => {},
81
+ setText: () => {},
82
+ setTheme: () => {}
83
+ };
84
+ }
85
+ //#endregion
4
86
  //#region src/components/Button.tsx
5
- var n = {
87
+ var m = {
6
88
  primary: "bg-accent text-white hover:bg-accent/90 focus-visible:ring-accent/50",
7
89
  secondary: "bg-code-bg text-text-h hover:bg-code-bg/80 focus-visible:ring-code-bg/50",
8
90
  outline: "border border-border bg-transparent text-text-h hover:bg-accent-bg hover:border-accent-border focus-visible:ring-accent/50",
9
91
  ghost: "bg-transparent text-text-h hover:bg-accent-bg focus-visible:ring-accent/50"
10
- }, r = {
92
+ }, h = {
11
93
  sm: "px-3 py-1.5 text-sm gap-1.5",
12
94
  md: "px-5 py-2.5 text-base gap-2",
13
95
  lg: "px-7 py-3 text-lg gap-2.5"
14
- }, i = e(function({ variant: e = "primary", size: i = "md", className: a = "", ...o }, s) {
15
- return /* @__PURE__ */ t("button", {
16
- ref: s,
96
+ };
97
+ function g(e, t) {
98
+ let n = e.replace("#", ""), r = n.length === 3 ? n.split("").map((e) => e + e).join("") : n, i = parseInt(r, 16);
99
+ return `rgba(${i >> 16 & 255}, ${i >> 8 & 255}, ${i & 255}, ${t})`;
100
+ }
101
+ var _ = t(function({ variant: e = "primary", size: t = "md", className: n = "", style: r, ...i }, o) {
102
+ let c = p(), l = a(() => {
103
+ if (!c.enabled) return;
104
+ let t = c.colors.primary, n = c.colors.secondary, r = g(t, .1), i = g(t, .5), a = g(t, .5);
105
+ switch (e) {
106
+ case "primary": return {
107
+ backgroundColor: t,
108
+ color: "#fff",
109
+ "--tw-ring-color": a
110
+ };
111
+ case "secondary": return {
112
+ backgroundColor: n,
113
+ color: "#08060d"
114
+ };
115
+ case "outline": return {
116
+ borderColor: "#e5e4e7",
117
+ backgroundColor: "transparent",
118
+ color: "#08060d",
119
+ "--hover-bg": r,
120
+ "--hover-border": i,
121
+ "--tw-ring-color": a
122
+ };
123
+ default: return {
124
+ backgroundColor: "transparent",
125
+ color: "#08060d",
126
+ "--hover-bg": r,
127
+ "--tw-ring-color": a
128
+ };
129
+ }
130
+ }, [c, e]), u = c.enabled && e === "primary" ? "hover:brightness-110" : c.enabled && e === "outline" ? "hover:bg-[var(--hover-bg)] hover:border-[var(--hover-border)]" : c.enabled ? "hover:bg-[var(--hover-bg)]" : "";
131
+ return /* @__PURE__ */ s("button", {
132
+ ref: o,
17
133
  className: [
18
134
  "inline-flex items-center justify-center font-medium rounded-lg",
19
135
  "transition-all duration-200 ease-in-out",
20
136
  "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
21
137
  "disabled:opacity-50 disabled:pointer-events-none",
22
138
  "select-none",
23
- n[e],
24
- r[i],
25
- a
139
+ m[e],
140
+ h[t],
141
+ u,
142
+ n
143
+ ].join(" "),
144
+ style: {
145
+ ...l,
146
+ ...r
147
+ },
148
+ ...i
149
+ });
150
+ }), v = {
151
+ default: "",
152
+ sticky: "sticky top-0 z-50",
153
+ blur: "sticky top-0 z-50 transition-all duration-300"
154
+ };
155
+ function y(e, t) {
156
+ let n = e.replace("#", ""), r = n.length === 3 ? n.split("").map((e) => e + e).join("") : n, i = parseInt(r, 16);
157
+ return `rgba(${i >> 16 & 255}, ${i >> 8 & 255}, ${i & 255}, ${t})`;
158
+ }
159
+ var b = t(function({ behaviour: e = "default", className: t = "", style: n, children: r, ...c }, l) {
160
+ let u = p(), [d, f] = o(!1);
161
+ i(() => {
162
+ if (e !== "blur") return;
163
+ let t = () => {
164
+ f(window.scrollY > 0);
165
+ };
166
+ return t(), window.addEventListener("scroll", t, { passive: !0 }), () => window.removeEventListener("scroll", t);
167
+ }, [e]);
168
+ let m = e === "blur" && d ? "backdrop-blur-md bg-bg/70 border-b border-border shadow" : e === "blur" ? "bg-bg" : "bg-bg border-b border-border", h = a(() => {
169
+ if (!u.enabled) return;
170
+ let t = u.darkMode ? "#0b0912" : "#ffffff", n = u.darkMode ? "#2a2535" : "#e5e4e7", r = y(u.darkMode ? "#0b0912" : "#ffffff", .7), i = d ? "rgba(0, 0, 0, 0.1) 0 4px 12px -2px" : void 0;
171
+ return e === "blur" && d ? {
172
+ backgroundColor: r,
173
+ borderBottom: `1px solid ${n}`,
174
+ boxShadow: i,
175
+ color: u.darkMode ? "#e8e4f0" : "#08060d"
176
+ } : {
177
+ backgroundColor: t,
178
+ borderBottom: e === "default" ? void 0 : `1px solid ${n}`,
179
+ color: u.darkMode ? "#e8e4f0" : "#08060d"
180
+ };
181
+ }, [
182
+ u,
183
+ e,
184
+ d
185
+ ]);
186
+ return /* @__PURE__ */ s("header", {
187
+ ref: l,
188
+ className: [
189
+ "w-full px-6 py-4 flex items-center justify-between",
190
+ v[e],
191
+ m,
192
+ t
193
+ ].join(" "),
194
+ style: {
195
+ ...h,
196
+ ...n
197
+ },
198
+ ...c,
199
+ children: r
200
+ });
201
+ }), x = t(function({ className: e = "", style: t, alt: n = "", ...r }, i) {
202
+ return /* @__PURE__ */ s("div", {
203
+ className: "h-full flex items-center justify-center shrink-0",
204
+ children: /* @__PURE__ */ s("img", {
205
+ ref: i,
206
+ alt: n,
207
+ className: "h-full max-h-[48px] w-auto object-contain",
208
+ style: {
209
+ aspectRatio: "auto",
210
+ ...t
211
+ },
212
+ ...r
213
+ })
214
+ });
215
+ }), S = t(function({ className: e = "", style: t, children: n, ...r }, i) {
216
+ let o = p(), c = a(() => {
217
+ if (!o.enabled) return;
218
+ let e = y(o.colors.primary, .5);
219
+ return {
220
+ color: o.darkMode ? "#e8e4f0" : "#08060d",
221
+ "--tw-ring-color": e,
222
+ "--hover-color": o.colors.primary
223
+ };
224
+ }, [o]), l = o.enabled ? "hover:text-[var(--hover-color)]" : "";
225
+ return /* @__PURE__ */ s("a", {
226
+ ref: i,
227
+ className: [
228
+ "inline-flex items-center justify-center",
229
+ "px-3 py-2 text-sm font-medium",
230
+ o.enabled ? "" : "text-text-h hover:text-accent",
231
+ l,
232
+ "transition-colors duration-200 ease-in-out",
233
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 rounded-md",
234
+ o.enabled ? "" : "focus-visible:ring-accent/50",
235
+ "select-none",
236
+ e
26
237
  ].join(" "),
27
- ...o
238
+ style: {
239
+ ...c,
240
+ ...t
241
+ },
242
+ ...r,
243
+ children: n
28
244
  });
245
+ }), C = Object.assign(b, {
246
+ Logo: x,
247
+ NavButton: S
29
248
  });
30
249
  //#endregion
31
- export { i as Button };
250
+ //#region src/components/Background.tsx
251
+ function w(e, t) {
252
+ let n = e.replace("#", ""), r = n.length === 3 ? n.split("").map((e) => e + e).join("") : n, i = parseInt(r, 16);
253
+ return `rgba(${i >> 16 & 255}, ${i >> 8 & 255}, ${i & 255}, ${t})`;
254
+ }
255
+ var T = {
256
+ "dots-grid": (e, t) => ({
257
+ backgroundImage: `radial-gradient(${e} 1px, transparent 1px)`,
258
+ backgroundSize: `${t}px ${t}px`
259
+ }),
260
+ "isometric-dot-paper": (e, t) => ({
261
+ backgroundImage: `radial-gradient(${e} 1px, transparent 1px)`,
262
+ backgroundSize: `${t}px ${t * 1.732}px`,
263
+ backgroundPosition: `0 0, ${t / 2}px ${t * 1.732 / 2}px`
264
+ }),
265
+ paper: (e, t) => ({
266
+ backgroundImage: `linear-gradient(${e} 1px, transparent 1px), linear-gradient(90deg, ${e} 1px, transparent 1px)`,
267
+ backgroundSize: `${t}px ${t}px`
268
+ }),
269
+ "diamond-grid": (e, t) => ({
270
+ backgroundImage: `linear-gradient(45deg, ${e} 1px, transparent 1px), linear-gradient(-45deg, ${e} 1px, transparent 1px)`,
271
+ backgroundSize: `${t}px ${t}px`
272
+ }),
273
+ "paper-45": (e, t) => ({
274
+ backgroundImage: `linear-gradient(45deg, ${e} 1px, transparent 1px), linear-gradient(-45deg, ${e} 1px, transparent 1px)`,
275
+ backgroundSize: `${t}px ${t}px`
276
+ }),
277
+ lines: (e, t) => ({
278
+ backgroundImage: `linear-gradient(${e} 1px, transparent 1px)`,
279
+ backgroundSize: `${t}px ${t}px`
280
+ }),
281
+ "falling-stars": (e, t) => ({
282
+ backgroundImage: `
283
+ radial-gradient(${e} 1px, transparent 1px),
284
+ radial-gradient(${e} 1px, transparent 1px),
285
+ radial-gradient(${e} 1.5px, transparent 1.5px),
286
+ radial-gradient(${e} 1px, transparent 1px)
287
+ `,
288
+ backgroundSize: `${t * 5}px ${t * 5}px, ${t * 3}px ${t * 3}px, ${t * 7}px ${t * 7}px, ${t * 4}px ${t * 4}px`,
289
+ backgroundPosition: `0 0, ${t}px ${t * 2}px, ${t * 3}px ${t}px, ${t * 2}px ${t * 4}px`,
290
+ animation: "falling-stars 20s linear infinite"
291
+ })
292
+ }, E = t(function({ variant: e = "dots-grid", color: t, size: n = 24, className: r = "", style: i, children: o, ...l }, u) {
293
+ let d = p(), f = a(() => t || (d.enabled ? w(d.colors.primary, .25) : "rgba(170, 59, 255, 0.25)"), [t, d]), m = a(() => T[e](f, n), [
294
+ e,
295
+ f,
296
+ n
297
+ ]);
298
+ return /* @__PURE__ */ c("div", {
299
+ ref: u,
300
+ className: ["w-full h-full relative overflow-hidden", r].join(" "),
301
+ style: i,
302
+ ...l,
303
+ children: [/* @__PURE__ */ s("div", {
304
+ "aria-hidden": !0,
305
+ className: "absolute inset-0 -z-10 pointer-events-none",
306
+ style: m
307
+ }), o]
308
+ });
309
+ }), D = t(function({ variant: e = "line", orientation: t = "horizontal", color: n, thickness: r = 1, spacing: i = 16, className: o = "", style: c, ...l }, u) {
310
+ let d = p(), f = a(() => n || (d.enabled && d.darkMode ? "#2a2535" : "#e5e4e7"), [n, d]), m = t === "horizontal";
311
+ if (e === "point") {
312
+ let e = m ? {
313
+ paddingTop: i,
314
+ paddingBottom: i
315
+ } : {
316
+ paddingLeft: i,
317
+ paddingRight: i
318
+ };
319
+ return /* @__PURE__ */ s("div", {
320
+ ref: u,
321
+ className: [
322
+ "flex items-center justify-center shrink-0",
323
+ m ? "w-full" : "h-full",
324
+ o
325
+ ].join(" "),
326
+ style: {
327
+ ...e,
328
+ ...c
329
+ },
330
+ ...l,
331
+ children: /* @__PURE__ */ s("span", {
332
+ "aria-hidden": !0,
333
+ className: "rounded-full shrink-0",
334
+ style: {
335
+ width: r * 4,
336
+ height: r * 4,
337
+ backgroundColor: f
338
+ }
339
+ })
340
+ });
341
+ }
342
+ let h = m ? {
343
+ height: r,
344
+ backgroundColor: f,
345
+ marginTop: i,
346
+ marginBottom: i
347
+ } : {
348
+ width: r,
349
+ backgroundColor: f,
350
+ marginLeft: i,
351
+ marginRight: i
352
+ };
353
+ return /* @__PURE__ */ s("div", {
354
+ ref: u,
355
+ role: "separator",
356
+ "aria-orientation": t,
357
+ className: [
358
+ "shrink-0",
359
+ m ? "w-full" : "h-full",
360
+ o
361
+ ].join(" "),
362
+ style: {
363
+ ...h,
364
+ ...c
365
+ },
366
+ ...l
367
+ });
368
+ }), O = {
369
+ sm: "h-8 px-3 text-sm",
370
+ md: "h-10 px-4 text-base",
371
+ lg: "h-12 px-5 text-lg"
372
+ }, k = {
373
+ sm: "pl-9 pr-3",
374
+ md: "pl-11 pr-4",
375
+ lg: "pl-13 pr-5"
376
+ }, A = {
377
+ sm: "pl-3 pr-9",
378
+ md: "pl-4 pr-11",
379
+ lg: "pl-5 pr-13"
380
+ }, j = {
381
+ sm: "pl-9 pr-9",
382
+ md: "pl-11 pr-11",
383
+ lg: "pl-13 pr-13"
384
+ }, M = {
385
+ sm: "w-4 h-4 left-2.5",
386
+ md: "w-5 h-5 left-3",
387
+ lg: "w-6 h-6 left-4"
388
+ }, N = {
389
+ sm: "w-4 h-4 right-2.5",
390
+ md: "w-5 h-5 right-3",
391
+ lg: "w-6 h-6 right-4"
392
+ };
393
+ function P(e, t) {
394
+ let n = e.replace("#", ""), r = n.length === 3 ? n.split("").map((e) => e + e).join("") : n, i = parseInt(r, 16);
395
+ return `rgba(${i >> 16 & 255}, ${i >> 8 & 255}, ${i & 255}, ${t})`;
396
+ }
397
+ var F = t(function({ variant: e = "default", Isize: t = "md", error: n = !1, leftIcon: r, rightIcon: i, className: o = "", wrapperClassName: l = "", style: u, disabled: d, ...f }, m) {
398
+ let h = p(), g = a(() => {
399
+ if (!h.enabled) return;
400
+ let t = h.colors.primary, r = h.darkMode ? "#2a2535" : "#e5e4e7", i = h.darkMode ? "#14111f" : "#f5f5f7", a = "#ef4444", o = { borderRadius: e === "underline" ? 0 : 8 };
401
+ switch (e) {
402
+ case "filled": return {
403
+ ...o,
404
+ backgroundColor: i,
405
+ borderBottom: `2px solid ${n ? a : "transparent"}`,
406
+ "--focus-border": n ? a : t,
407
+ "--ring-color": P(n ? a : t, .5)
408
+ };
409
+ case "underline": return {
410
+ ...o,
411
+ backgroundColor: "transparent",
412
+ borderBottom: `1.5px solid ${n ? a : r}`,
413
+ "--focus-border": n ? a : t,
414
+ "--ring-color": P(n ? a : t, .5)
415
+ };
416
+ default: return {
417
+ ...o,
418
+ backgroundColor: h.darkMode ? "#0b0912" : "#ffffff",
419
+ border: `1px solid ${n ? a : r}`,
420
+ "--focus-border": n ? a : t,
421
+ "--ring-color": P(n ? a : t, .5)
422
+ };
423
+ }
424
+ }, [
425
+ h,
426
+ e,
427
+ n
428
+ ]), _ = a(() => {
429
+ if (h.enabled) return e === "underline" ? "focus-within:border-b-[2px] focus-within:border-b-[var(--focus-border)]" : "focus-within:ring-2 focus-within:ring-[var(--ring-color)] focus-within:ring-offset-0 focus-within:border-[var(--focus-border)]";
430
+ if (e === "underline") return n ? "border-b-2 border-b-red-500 focus-within:border-b-accent" : "border-b border-border focus-within:border-b-2 focus-within:border-b-accent";
431
+ let t = "focus-within:ring-2 focus-within:ring-accent/50 focus-within:ring-offset-0";
432
+ switch (e) {
433
+ case "filled": return n ? `bg-code-bg border-b-2 border-b-red-500 ${t} focus-within:border-b-accent` : `bg-code-bg border-b-2 border-b-transparent ${t} focus-within:border-b-accent`;
434
+ default: return n ? `bg-bg border border-red-500 rounded-lg ${t} focus-within:border-accent` : `bg-bg border border-border rounded-lg ${t} focus-within:border-accent`;
435
+ }
436
+ }, [
437
+ h,
438
+ e,
439
+ n
440
+ ]), v = r && i ? j[t] : r ? k[t] : i ? A[t] : O[t], y = e === "underline" ? "bg-transparent rounded-none" : "rounded-lg", b = a(() => h.enabled ? {
441
+ color: h.darkMode ? "#e8e4f0" : "#08060d",
442
+ "--placeholder-color": P(h.darkMode ? "#908a9e" : "#706a7c", 1),
443
+ backgroundColor: "transparent"
444
+ } : void 0, [h]), x = h.enabled ? "placeholder:text-[color:var(--placeholder-color)]" : "placeholder:text-text-muted";
445
+ return /* @__PURE__ */ c("div", {
446
+ className: [
447
+ "relative w-full flex items-center",
448
+ _,
449
+ d ? "opacity-50 cursor-not-allowed" : "",
450
+ l
451
+ ].join(" "),
452
+ style: g,
453
+ children: [
454
+ r && /* @__PURE__ */ s("span", {
455
+ "aria-hidden": !0,
456
+ className: ["absolute text-text-muted pointer-events-none shrink-0", M[t]].join(" "),
457
+ children: r
458
+ }),
459
+ /* @__PURE__ */ s("input", {
460
+ ref: m,
461
+ disabled: d,
462
+ className: [
463
+ "w-full h-full outline-none bg-transparent font-normal",
464
+ "transition-all duration-200 ease-in-out",
465
+ "disabled:cursor-not-allowed",
466
+ v,
467
+ y,
468
+ x,
469
+ o
470
+ ].join(" "),
471
+ style: {
472
+ ...b,
473
+ ...u
474
+ },
475
+ ...f
476
+ }),
477
+ i && /* @__PURE__ */ s("span", {
478
+ "aria-hidden": !0,
479
+ className: ["absolute text-text-muted pointer-events-none shrink-0", N[t]].join(" "),
480
+ children: i
481
+ })
482
+ ]
483
+ });
484
+ }), I = (e) => typeof e == "string" && e.trim() !== "" && !isNaN(Number(e)), L = (e) => typeof e == "number" ? isNaN(e) ? null : e : I(e) ? Number(e) : null, R = {
485
+ email: () => (e) => {
486
+ let t = String(e ?? "");
487
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t) ? {
488
+ valid: !0,
489
+ message: ""
490
+ } : {
491
+ valid: !1,
492
+ message: "El valor no es un correo válido"
493
+ };
494
+ },
495
+ onlyNumbers: () => (e) => {
496
+ let t = String(e ?? "");
497
+ return /^\d+$/.test(t) ? {
498
+ valid: !0,
499
+ message: ""
500
+ } : {
501
+ valid: !1,
502
+ message: "El valor debe contener solo números"
503
+ };
504
+ },
505
+ min: (e) => (t) => {
506
+ let n = L(t);
507
+ return n === null ? String(t ?? "").length >= e ? {
508
+ valid: !0,
509
+ message: ""
510
+ } : {
511
+ valid: !1,
512
+ message: `La longitud debe ser al menos ${e}`
513
+ } : n >= e ? {
514
+ valid: !0,
515
+ message: ""
516
+ } : {
517
+ valid: !1,
518
+ message: `El valor debe ser mayor o igual a ${e}`
519
+ };
520
+ },
521
+ max: (e) => (t) => {
522
+ let n = L(t);
523
+ return n === null ? String(t ?? "").length <= e ? {
524
+ valid: !0,
525
+ message: ""
526
+ } : {
527
+ valid: !1,
528
+ message: `La longitud debe ser como máximo ${e}`
529
+ } : n <= e ? {
530
+ valid: !0,
531
+ message: ""
532
+ } : {
533
+ valid: !1,
534
+ message: `El valor debe ser menor o igual a ${e}`
535
+ };
536
+ }
537
+ }, z = class e {
538
+ checks = [];
539
+ add(e) {
540
+ return this.checks.push(e), this;
541
+ }
542
+ static email() {
543
+ return new e().email();
544
+ }
545
+ static onlyNumbers() {
546
+ return new e().onlyNumbers();
547
+ }
548
+ static min(t) {
549
+ return new e().min(t);
550
+ }
551
+ static max(t) {
552
+ return new e().max(t);
553
+ }
554
+ email() {
555
+ return this.add(R.email());
556
+ }
557
+ onlyNumbers() {
558
+ return this.add(R.onlyNumbers());
559
+ }
560
+ min(e) {
561
+ return this.add(R.min(e));
562
+ }
563
+ max(e) {
564
+ return this.add(R.max(e));
565
+ }
566
+ validate(e) {
567
+ for (let t of this.checks) {
568
+ let n = t(e);
569
+ if (!n.valid) return n;
570
+ }
571
+ return {
572
+ valid: !0,
573
+ message: ""
574
+ };
575
+ }
576
+ };
577
+ //#endregion
578
+ export { E as Background, _ as Button, C as Header, F as Input, D as Separator, f as ThemeProvider, z as Validate, l as themeConfig, p as useTheme, R as validators };
32
579
 
33
580
  //# sourceMappingURL=unicornial-ui.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unicornial-ui.es.js","names":[],"sources":["../src/components/Button.tsx"],"sourcesContent":["import { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\ntype Variant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\ntype Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: Variant;\n size?: Size;\n}\n\nconst variantClasses: Record<Variant, string> = {\n primary:\n \"bg-accent text-white hover:bg-accent/90 focus-visible:ring-accent/50\",\n secondary:\n \"bg-code-bg text-text-h hover:bg-code-bg/80 focus-visible:ring-code-bg/50\",\n outline:\n \"border border-border bg-transparent text-text-h hover:bg-accent-bg hover:border-accent-border focus-visible:ring-accent/50\",\n ghost:\n \"bg-transparent text-text-h hover:bg-accent-bg focus-visible:ring-accent/50\",\n};\n\nconst sizeClasses: Record<Size, string> = {\n sm: \"px-3 py-1.5 text-sm gap-1.5\",\n md: \"px-5 py-2.5 text-base gap-2\",\n lg: \"px-7 py-3 text-lg gap-2.5\",\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { variant = \"primary\", size = \"md\", className = \"\", ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n className={[\n \"inline-flex items-center justify-center font-medium rounded-lg\",\n \"transition-all duration-200 ease-in-out\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"select-none\",\n variantClasses[variant],\n sizeClasses[size],\n className,\n ].join(\" \")}\n {...props}\n />\n );\n});\n"],"mappings":";;;;IAWE,IACE;CACF,SAAA;CAEA,WACE;CACF,SACE;CACJ,OAAA;AAEA,GACE,IAAI;CACJ,IAAI;CACJ,IAAI;CACN,IAAA;AAEA,GAIE,IACE,EAAA,SAAA,EAAA,aAAA,WAAA,UAAA,MAAA,eAAA,IAAA,GAAA,KAAA,GAAA;QACO,kBAAA,UAAA;EACL;aACE;GACA;GACA;GACA;GACA;GACA;GACA,EAAY;GACZ,EAAA;GACD;EACD,CAAA,CAAA,KAAI,GAAA;EACL,GAAA;CAEJ,CAAA"}
1
+ {"version":3,"file":"unicornial-ui.es.js","names":[],"sources":["../src/theme/theme.config.json","../src/theme/ThemeProvider.tsx","../src/components/Button.tsx","../src/components/Header.tsx","../src/components/Background.tsx","../src/components/Separator.tsx","../src/components/Input.tsx","../src/utils/validation.ts"],"sourcesContent":["{\n \"colors\": {\n \"primary\": \"#aa3bff\",\n \"secondary\": \"#f4f3ec\"\n },\n \"darkMode\": false,\n \"text\": {\n \"title\": \"text-3xl font-bold text-text-h\",\n \"subtitle\": \"text-xl font-semibold text-text-h\",\n \"normal\": \"text-base font-normal text-text\"\n }\n}\n","import {\n createContext,\n useContext,\n type ReactNode,\n useMemo,\n useState,\n useCallback,\n useEffect,\n} from \"react\";\nimport defaultConfig from \"./theme.config.json\";\n\nexport interface ThemeColors {\n primary: string;\n secondary: string;\n}\n\nexport interface ThemeTextClasses {\n title: string;\n subtitle: string;\n normal: string;\n}\n\nexport interface ThemeConfig {\n colors: ThemeColors;\n darkMode: boolean;\n text: ThemeTextClasses;\n}\n\nexport interface ThemeContextValue extends ThemeConfig {\n enabled: boolean;\n setColors: (colors: Partial<ThemeColors>) => void;\n setDarkMode: (enabled: boolean) => void;\n setText: (text: Partial<ThemeTextClasses>) => void;\n setTheme: (config: Partial<ThemeConfig>) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n children: ReactNode;\n config?: Partial<ThemeConfig>;\n}\n\nconst deepMerge = <T extends object>(base: T, overrides: Partial<T>): T => {\n const result: any = { ...base };\n for (const key of Object.keys(overrides) as (keyof T)[]) {\n const value = overrides[key];\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n base[key] &&\n typeof base[key] === \"object\" &&\n !Array.isArray(base[key])\n ) {\n result[key] = deepMerge(base[key] as any, value as any);\n } else if (value !== undefined) {\n result[key] = value;\n }\n }\n return result as T;\n};\n\nexport function ThemeProvider({ children, config }: ThemeProviderProps) {\n const mergedInitial = useMemo(\n () => deepMerge(defaultConfig as ThemeConfig, config ?? {}),\n [config],\n );\n\n const [colors, setColorsState] = useState<ThemeColors>(mergedInitial.colors);\n const [darkMode, setDarkModeState] = useState<boolean>(mergedInitial.darkMode);\n const [text, setTextState] = useState<ThemeTextClasses>(mergedInitial.text);\n\n const setColors = useCallback((partial: Partial<ThemeColors>) => {\n setColorsState((prev) => ({ ...prev, ...partial }));\n }, []);\n\n const setDarkMode = useCallback((enabled: boolean) => {\n setDarkModeState(enabled);\n }, []);\n\n const setText = useCallback((partial: Partial<ThemeTextClasses>) => {\n setTextState((prev) => ({ ...prev, ...partial }));\n }, []);\n\n const setTheme = useCallback((partial: Partial<ThemeConfig>) => {\n if (partial.colors) setColorsState((prev) => ({ ...prev, ...partial.colors! }));\n if (partial.darkMode !== undefined) setDarkModeState(partial.darkMode);\n if (partial.text) setTextState((prev) => ({ ...prev, ...partial.text! }));\n }, []);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n if (darkMode) {\n root.classList.add(\"dark\");\n } else {\n root.classList.remove(\"dark\");\n }\n root.style.setProperty(\"--theme-primary\", colors.primary);\n root.style.setProperty(\"--theme-secondary\", colors.secondary);\n }, [colors, darkMode]);\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n enabled: true,\n colors,\n darkMode,\n text,\n setColors,\n setDarkMode,\n setText,\n setTheme,\n }),\n [colors, darkMode, text, setColors, setDarkMode, setText, setTheme],\n );\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n return {\n enabled: false,\n colors: defaultConfig.colors as ThemeColors,\n darkMode: defaultConfig.darkMode,\n text: defaultConfig.text as ThemeTextClasses,\n setColors: () => {},\n setDarkMode: () => {},\n setText: () => {},\n setTheme: () => {},\n };\n }\n return ctx;\n}\n\nexport { defaultConfig as themeConfig };\n","import { type ButtonHTMLAttributes, forwardRef, useMemo } from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Variant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\ntype Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: Variant;\n size?: Size;\n}\n\nconst variantClasses: Record<Variant, string> = {\n primary:\n \"bg-accent text-white hover:bg-accent/90 focus-visible:ring-accent/50\",\n secondary:\n \"bg-code-bg text-text-h hover:bg-code-bg/80 focus-visible:ring-code-bg/50\",\n outline:\n \"border border-border bg-transparent text-text-h hover:bg-accent-bg hover:border-accent-border focus-visible:ring-accent/50\",\n ghost:\n \"bg-transparent text-text-h hover:bg-accent-bg focus-visible:ring-accent/50\",\n};\n\nconst sizeClasses: Record<Size, string> = {\n sm: \"px-3 py-1.5 text-sm gap-1.5\",\n md: \"px-5 py-2.5 text-base gap-2\",\n lg: \"px-7 py-3 text-lg gap-2.5\",\n};\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const cleaned = hex.replace(\"#\", \"\");\n const full =\n cleaned.length === 3\n ? cleaned\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : cleaned;\n const num = parseInt(full, 16);\n const r = (num >> 16) & 0xff;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { variant = \"primary\", size = \"md\", className = \"\", style, ...props },\n ref,\n) {\n const theme = useTheme();\n\n const themeStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const primary = theme.colors.primary;\n const secondary = theme.colors.secondary;\n const primaryBg = hexToRgba(primary, 0.1);\n const primaryBorder = hexToRgba(primary, 0.5);\n const primaryRing = hexToRgba(primary, 0.5);\n\n switch (variant) {\n case \"primary\":\n return {\n backgroundColor: primary,\n color: \"#fff\",\n [\"--tw-ring-color\" as any]: primaryRing,\n };\n case \"secondary\":\n return {\n backgroundColor: secondary,\n color: \"#08060d\",\n };\n case \"outline\":\n return {\n borderColor: \"#e5e4e7\",\n backgroundColor: \"transparent\",\n color: \"#08060d\",\n [\"--hover-bg\" as any]: primaryBg,\n [\"--hover-border\" as any]: primaryBorder,\n [\"--tw-ring-color\" as any]: primaryRing,\n };\n case \"ghost\":\n default:\n return {\n backgroundColor: \"transparent\",\n color: \"#08060d\",\n [\"--hover-bg\" as any]: primaryBg,\n [\"--tw-ring-color\" as any]: primaryRing,\n };\n }\n }, [theme, variant]);\n\n const themeHoverClass =\n theme.enabled && variant === \"primary\"\n ? \"hover:brightness-110\"\n : theme.enabled && variant === \"outline\"\n ? \"hover:bg-[var(--hover-bg)] hover:border-[var(--hover-border)]\"\n : theme.enabled\n ? \"hover:bg-[var(--hover-bg)]\"\n : \"\";\n\n return (\n <button\n ref={ref}\n className={[\n \"inline-flex items-center justify-center font-medium rounded-lg\",\n \"transition-all duration-200 ease-in-out\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"select-none\",\n variantClasses[variant],\n sizeClasses[size],\n themeHoverClass,\n className,\n ].join(\" \")}\n style={{ ...themeStyle, ...style }}\n {...props}\n />\n );\n});\n","import {\n type AnchorHTMLAttributes,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n useEffect,\n useState,\n forwardRef,\n useMemo,\n} from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Behaviour = \"default\" | \"sticky\" | \"blur\";\n\nexport interface HeaderProps extends HTMLAttributes<HTMLElement> {\n behaviour?: Behaviour;\n}\n\nexport interface HeaderLogoProps extends ImgHTMLAttributes<HTMLImageElement> {}\n\nexport interface HeaderNavButtonProps\n extends AnchorHTMLAttributes<HTMLAnchorElement> {}\n\nconst behaviourContainerClasses: Record<Behaviour, string> = {\n default: \"\",\n sticky: \"sticky top-0 z-50\",\n blur: \"sticky top-0 z-50 transition-all duration-300\",\n};\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const cleaned = hex.replace(\"#\", \"\");\n const full =\n cleaned.length === 3\n ? cleaned\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : cleaned;\n const num = parseInt(full, 16);\n const r = (num >> 16) & 0xff;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const Header = forwardRef<HTMLElement, HeaderProps>(function Header(\n { behaviour = \"default\", className = \"\", style, children, ...props },\n ref,\n) {\n const theme = useTheme();\n const [scrolled, setScrolled] = useState(false);\n\n useEffect(() => {\n if (behaviour !== \"blur\") return;\n\n const handleScroll = () => {\n setScrolled(window.scrollY > 0);\n };\n\n handleScroll();\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n return () => window.removeEventListener(\"scroll\", handleScroll);\n }, [behaviour]);\n\n const blurClasses =\n behaviour === \"blur\" && scrolled\n ? \"backdrop-blur-md bg-bg/70 border-b border-border shadow\"\n : behaviour === \"blur\"\n ? \"bg-bg\"\n : behaviour === \"sticky\"\n ? \"bg-bg border-b border-border\"\n : \"bg-bg border-b border-border\";\n\n const themeStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const bg = theme.darkMode ? \"#0b0912\" : \"#ffffff\";\n const border = theme.darkMode ? \"#2a2535\" : \"#e5e4e7\";\n const blurBg = hexToRgba(theme.darkMode ? \"#0b0912\" : \"#ffffff\", 0.7);\n const shadow = scrolled\n ? \"rgba(0, 0, 0, 0.1) 0 4px 12px -2px\"\n : undefined;\n\n if (behaviour === \"blur\" && scrolled) {\n return {\n backgroundColor: blurBg,\n borderBottom: `1px solid ${border}`,\n boxShadow: shadow,\n color: theme.darkMode ? \"#e8e4f0\" : \"#08060d\",\n };\n }\n return {\n backgroundColor: bg,\n borderBottom:\n behaviour !== \"default\" ? `1px solid ${border}` : undefined,\n color: theme.darkMode ? \"#e8e4f0\" : \"#08060d\",\n };\n }, [theme, behaviour, scrolled]);\n\n return (\n <header\n ref={ref}\n className={[\n \"w-full px-6 py-4 flex items-center justify-between\",\n behaviourContainerClasses[behaviour],\n blurClasses,\n className,\n ].join(\" \")}\n style={{ ...themeStyle, ...style }}\n {...props}\n >\n {children}\n </header>\n );\n});\n\nexport const HeaderLogo = forwardRef<HTMLImageElement, HeaderLogoProps>(\n function HeaderLogo({ className = \"\", style, alt = \"\", ...props }, ref) {\n return (\n <div className=\"h-full flex items-center justify-center shrink-0\">\n <img\n ref={ref}\n alt={alt}\n className=\"h-full max-h-[48px] w-auto object-contain\"\n style={{ aspectRatio: \"auto\", ...style }}\n {...props}\n />\n </div>\n );\n },\n);\n\nexport const HeaderNavButton = forwardRef<\n HTMLAnchorElement,\n HeaderNavButtonProps\n>(function HeaderNavButton(\n { className = \"\", style, children, ...props },\n ref,\n) {\n const theme = useTheme();\n\n const themeStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const ringColor = hexToRgba(theme.colors.primary, 0.5);\n return {\n color: theme.darkMode ? \"#e8e4f0\" : \"#08060d\",\n [\"--tw-ring-color\" as any]: ringColor,\n [\"--hover-color\" as any]: theme.colors.primary,\n };\n }, [theme]);\n\n const themeHoverClass = theme.enabled ? \"hover:text-[var(--hover-color)]\" : \"\";\n\n const originalClass = theme.enabled ? \"\" : \"text-text-h hover:text-accent\";\n const originalRing = theme.enabled\n ? \"\"\n : \"focus-visible:ring-accent/50\";\n\n return (\n <a\n ref={ref}\n className={[\n \"inline-flex items-center justify-center\",\n \"px-3 py-2 text-sm font-medium\",\n originalClass,\n themeHoverClass,\n \"transition-colors duration-200 ease-in-out\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 rounded-md\",\n originalRing,\n \"select-none\",\n className,\n ].join(\" \")}\n style={{ ...themeStyle, ...style }}\n {...props}\n >\n {children}\n </a>\n );\n});\n\nexport const HeaderNamespace = Object.assign(Header, {\n Logo: HeaderLogo,\n NavButton: HeaderNavButton,\n});\n\nexport default HeaderNamespace;\n","import { type HTMLAttributes, forwardRef, useMemo } from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Variant =\n | \"dots-grid\"\n | \"isometric-dot-paper\"\n | \"paper\"\n | \"diamond-grid\"\n | \"paper-45\"\n | \"lines\"\n | \"falling-stars\";\n\nexport interface BackgroundProps extends HTMLAttributes<HTMLDivElement> {\n variant?: Variant;\n color?: string;\n size?: number;\n}\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const cleaned = hex.replace(\"#\", \"\");\n const full =\n cleaned.length === 3\n ? cleaned\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : cleaned;\n const num = parseInt(full, 16);\n const r = (num >> 16) & 0xff;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nconst variantStyles: Record<\n Variant,\n (color: string, size: number) => React.CSSProperties\n> = {\n \"dots-grid\": (c, s) => ({\n backgroundImage: `radial-gradient(${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n \"isometric-dot-paper\": (c, s) => ({\n backgroundImage: `radial-gradient(${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s * 1.732}px`,\n backgroundPosition: `0 0, ${s / 2}px ${(s * 1.732) / 2}px`,\n }),\n paper: (c, s) => ({\n backgroundImage: `linear-gradient(${c} 1px, transparent 1px), linear-gradient(90deg, ${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n \"diamond-grid\": (c, s) => ({\n backgroundImage: `linear-gradient(45deg, ${c} 1px, transparent 1px), linear-gradient(-45deg, ${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n \"paper-45\": (c, s) => ({\n backgroundImage: `linear-gradient(45deg, ${c} 1px, transparent 1px), linear-gradient(-45deg, ${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n lines: (c, s) => ({\n backgroundImage: `linear-gradient(${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n \"falling-stars\": (c, s) => ({\n backgroundImage: `\n radial-gradient(${c} 1px, transparent 1px),\n radial-gradient(${c} 1px, transparent 1px),\n radial-gradient(${c} 1.5px, transparent 1.5px),\n radial-gradient(${c} 1px, transparent 1px)\n `,\n backgroundSize: `${s * 5}px ${s * 5}px, ${s * 3}px ${s * 3}px, ${s * 7}px ${s * 7}px, ${s * 4}px ${s * 4}px`,\n backgroundPosition: `0 0, ${s}px ${s * 2}px, ${s * 3}px ${s}px, ${s * 2}px ${s * 4}px`,\n animation: \"falling-stars 20s linear infinite\",\n }),\n};\n\nexport const Background = forwardRef<HTMLDivElement, BackgroundProps>(\n function Background(\n {\n variant = \"dots-grid\",\n color,\n size = 24,\n className = \"\",\n style,\n children,\n ...props\n },\n ref,\n ) {\n const theme = useTheme();\n\n const resolvedColor = useMemo(() => {\n if (color) return color;\n if (theme.enabled) return hexToRgba(theme.colors.primary, 0.25);\n return \"rgba(170, 59, 255, 0.25)\";\n }, [color, theme]);\n\n const bgStyles = useMemo<React.CSSProperties>(\n () => variantStyles[variant](resolvedColor, size),\n [variant, resolvedColor, size],\n );\n\n return (\n <div\n ref={ref}\n className={[\"w-full h-full relative overflow-hidden\", className].join(\n \" \",\n )}\n style={style}\n {...props}\n >\n <div\n aria-hidden\n className=\"absolute inset-0 -z-10 pointer-events-none\"\n style={bgStyles}\n />\n {children}\n </div>\n );\n },\n);\n\nexport default Background;\n","import { type HTMLAttributes, forwardRef, useMemo } from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Variant = \"line\" | \"point\";\ntype Orientation = \"horizontal\" | \"vertical\";\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLDivElement> {\n variant?: Variant;\n orientation?: Orientation;\n color?: string;\n thickness?: number;\n spacing?: number;\n}\n\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n function Separator(\n {\n variant = \"line\",\n orientation = \"horizontal\",\n color,\n thickness = 1,\n spacing = 16,\n className = \"\",\n style,\n ...props\n },\n ref,\n ) {\n const theme = useTheme();\n\n const resolvedColor = useMemo(() => {\n if (color) return color;\n if (theme.enabled) return theme.darkMode ? \"#2a2535\" : \"#e5e4e7\";\n return \"#e5e4e7\";\n }, [color, theme]);\n\n const isHorizontal = orientation === \"horizontal\";\n\n if (variant === \"point\") {\n const paddingStyle = isHorizontal\n ? { paddingTop: spacing, paddingBottom: spacing }\n : { paddingLeft: spacing, paddingRight: spacing };\n\n return (\n <div\n ref={ref}\n className={[\n \"flex items-center justify-center shrink-0\",\n isHorizontal ? \"w-full\" : \"h-full\",\n className,\n ].join(\" \")}\n style={{ ...paddingStyle, ...style }}\n {...props}\n >\n <span\n aria-hidden\n className=\"rounded-full shrink-0\"\n style={{\n width: thickness * 4,\n height: thickness * 4,\n backgroundColor: resolvedColor,\n }}\n />\n </div>\n );\n }\n\n const dimStyle = isHorizontal\n ? {\n height: thickness,\n backgroundColor: resolvedColor,\n marginTop: spacing,\n marginBottom: spacing,\n }\n : {\n width: thickness,\n backgroundColor: resolvedColor,\n marginLeft: spacing,\n marginRight: spacing,\n };\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={[\n \"shrink-0\",\n isHorizontal ? \"w-full\" : \"h-full\",\n className,\n ].join(\" \")}\n style={{ ...dimStyle, ...style }}\n {...props}\n />\n );\n },\n);\n\nexport default Separator;\n","import {\n type InputHTMLAttributes,\n forwardRef,\n useMemo,\n type ReactNode,\n} from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Variant = \"default\" | \"filled\" | \"underline\";\ntype Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n variant?: Variant;\n Isize?: Size;\n error?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n wrapperClassName?: string;\n}\n\nconst sizeClasses: Record<Size, string> = {\n sm: \"h-8 px-3 text-sm\",\n md: \"h-10 px-4 text-base\",\n lg: \"h-12 px-5 text-lg\",\n};\n\nconst sizePaddingWithIcon: Record<Size, string> = {\n sm: \"pl-9 pr-3\",\n md: \"pl-11 pr-4\",\n lg: \"pl-13 pr-5\",\n};\n\nconst sizePaddingWithRightIcon: Record<Size, string> = {\n sm: \"pl-3 pr-9\",\n md: \"pl-4 pr-11\",\n lg: \"pl-5 pr-13\",\n};\n\nconst sizePaddingWithBothIcons: Record<Size, string> = {\n sm: \"pl-9 pr-9\",\n md: \"pl-11 pr-11\",\n lg: \"pl-13 pr-13\",\n};\n\nconst iconSizeClasses: Record<Size, string> = {\n sm: \"w-4 h-4 left-2.5\",\n md: \"w-5 h-5 left-3\",\n lg: \"w-6 h-6 left-4\",\n};\n\nconst rightIconSizeClasses: Record<Size, string> = {\n sm: \"w-4 h-4 right-2.5\",\n md: \"w-5 h-5 right-3\",\n lg: \"w-6 h-6 right-4\",\n};\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const cleaned = hex.replace(\"#\", \"\");\n const full =\n cleaned.length === 3\n ? cleaned\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : cleaned;\n const num = parseInt(full, 16);\n const r = (num >> 16) & 0xff;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n variant = \"default\",\n Isize = \"md\",\n error = false,\n leftIcon,\n rightIcon,\n className = \"\",\n wrapperClassName = \"\",\n style,\n disabled,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n\n const baseWrapperClasses = \"relative w-full flex items-center\";\n\n const variantWrapperStyles = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const primary = theme.colors.primary;\n const border = theme.darkMode ? \"#2a2535\" : \"#e5e4e7\";\n const filledBg = theme.darkMode ? \"#14111f\" : \"#f5f5f7\";\n const errorBorder = \"#ef4444\";\n\n const base: React.CSSProperties = {\n borderRadius: variant === \"underline\" ? 0 : 8,\n };\n\n switch (variant) {\n case \"filled\":\n return {\n ...base,\n backgroundColor: filledBg,\n borderBottom: `2px solid ${error ? errorBorder : \"transparent\"}`,\n [\"--focus-border\" as any]: error ? errorBorder : primary,\n [\"--ring-color\" as any]: hexToRgba(error ? errorBorder : primary, 0.5),\n };\n case \"underline\":\n return {\n ...base,\n backgroundColor: \"transparent\",\n borderBottom: `1.5px solid ${error ? errorBorder : border}`,\n [\"--focus-border\" as any]: error ? errorBorder : primary,\n [\"--ring-color\" as any]: hexToRgba(error ? errorBorder : primary, 0.5),\n };\n case \"default\":\n default:\n return {\n ...base,\n backgroundColor: theme.darkMode ? \"#0b0912\" : \"#ffffff\",\n border: `1px solid ${error ? errorBorder : border}`,\n [\"--focus-border\" as any]: error ? errorBorder : primary,\n [\"--ring-color\" as any]: hexToRgba(error ? errorBorder : primary, 0.5),\n };\n }\n }, [theme, variant, error]);\n\n const variantWrapperClass = useMemo(() => {\n if (theme.enabled) {\n if (variant === \"underline\") {\n return \"focus-within:border-b-[2px] focus-within:border-b-[var(--focus-border)]\";\n }\n return \"focus-within:ring-2 focus-within:ring-[var(--ring-color)] focus-within:ring-offset-0 focus-within:border-[var(--focus-border)]\";\n }\n\n if (variant === \"underline\") {\n return error\n ? \"border-b-2 border-b-red-500 focus-within:border-b-accent\"\n : \"border-b border-border focus-within:border-b-2 focus-within:border-b-accent\";\n }\n\n const ringClass =\n \"focus-within:ring-2 focus-within:ring-accent/50 focus-within:ring-offset-0\";\n\n switch (variant) {\n case \"filled\":\n return error\n ? `bg-code-bg border-b-2 border-b-red-500 ${ringClass} focus-within:border-b-accent`\n : `bg-code-bg border-b-2 border-b-transparent ${ringClass} focus-within:border-b-accent`;\n case \"default\":\n default:\n return error\n ? `bg-bg border border-red-500 rounded-lg ${ringClass} focus-within:border-accent`\n : `bg-bg border border-border rounded-lg ${ringClass} focus-within:border-accent`;\n }\n }, [theme, variant, error]);\n\n const inputSizeClass =\n leftIcon && rightIcon\n ? sizePaddingWithBothIcons[Isize]\n : leftIcon\n ? sizePaddingWithIcon[Isize]\n : rightIcon\n ? sizePaddingWithRightIcon[Isize]\n : sizeClasses[Isize];\n\n const inputVariantClass =\n variant === \"underline\" ? \"bg-transparent rounded-none\" : \"rounded-lg\";\n\n const themeInputStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const textColor = theme.darkMode ? \"#e8e4f0\" : \"#08060d\";\n const placeholderColor = hexToRgba(\n theme.darkMode ? \"#908a9e\" : \"#706a7c\",\n 1,\n );\n return {\n color: textColor,\n [\"--placeholder-color\" as any]: placeholderColor,\n backgroundColor: \"transparent\",\n };\n }, [theme]);\n\n const themeInputPlaceholderClass = theme.enabled\n ? \"placeholder:text-[color:var(--placeholder-color)]\"\n : \"placeholder:text-text-muted\";\n\n return (\n <div\n className={[\n baseWrapperClasses,\n variantWrapperClass,\n disabled ? \"opacity-50 cursor-not-allowed\" : \"\",\n wrapperClassName,\n ].join(\" \")}\n style={variantWrapperStyles}\n >\n {leftIcon && (\n <span\n aria-hidden\n className={[\n \"absolute text-text-muted pointer-events-none shrink-0\",\n iconSizeClasses[Isize],\n ].join(\" \")}\n >\n {leftIcon}\n </span>\n )}\n\n <input\n ref={ref}\n disabled={disabled}\n className={[\n \"w-full h-full outline-none bg-transparent font-normal\",\n \"transition-all duration-200 ease-in-out\",\n \"disabled:cursor-not-allowed\",\n inputSizeClass,\n inputVariantClass,\n themeInputPlaceholderClass,\n className,\n ].join(\" \")}\n style={{ ...themeInputStyle, ...style }}\n {...props}\n />\n\n {rightIcon && (\n <span\n aria-hidden\n className={[\n \"absolute text-text-muted pointer-events-none shrink-0\",\n rightIconSizeClasses[Isize],\n ].join(\" \")}\n >\n {rightIcon}\n </span>\n )}\n </div>\n );\n});\n","export interface ValidationResult {\n valid: boolean;\n message: string;\n}\n\nexport type Validator = (value: unknown) => ValidationResult;\n\nconst isNumericString = (v: unknown): v is string =>\n typeof v === \"string\" && v.trim() !== \"\" && !isNaN(Number(v));\n\nconst toNumber = (v: unknown): number | null => {\n if (typeof v === \"number\") return isNaN(v) ? null : v;\n if (isNumericString(v)) return Number(v);\n return null;\n};\n\nexport const validators: Record<string, (...args: any[]) => Validator> = {\n email: () => (value: unknown): ValidationResult => {\n const str = String(value ?? \"\");\n const re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return re.test(str)\n ? { valid: true, message: \"\" }\n : { valid: false, message: \"El valor no es un correo válido\" };\n },\n\n onlyNumbers: () => (value: unknown): ValidationResult => {\n const str = String(value ?? \"\");\n return /^\\d+$/.test(str)\n ? { valid: true, message: \"\" }\n : { valid: false, message: \"El valor debe contener solo números\" };\n },\n\n min: (n: number) => (value: unknown): ValidationResult => {\n const num = toNumber(value);\n if (num !== null) {\n return num >= n\n ? { valid: true, message: \"\" }\n : { valid: false, message: `El valor debe ser mayor o igual a ${n}` };\n }\n const len = String(value ?? \"\").length;\n return len >= n\n ? { valid: true, message: \"\" }\n : { valid: false, message: `La longitud debe ser al menos ${n}` };\n },\n\n max: (n: number) => (value: unknown): ValidationResult => {\n const num = toNumber(value);\n if (num !== null) {\n return num <= n\n ? { valid: true, message: \"\" }\n : { valid: false, message: `El valor debe ser menor o igual a ${n}` };\n }\n const len = String(value ?? \"\").length;\n return len <= n\n ? { valid: true, message: \"\" }\n : { valid: false, message: `La longitud debe ser como máximo ${n}` };\n },\n};\n\nexport class Validate {\n private checks: Validator[] = [];\n\n private add(fn: Validator): this {\n this.checks.push(fn);\n return this;\n }\n\n static email(): Validate {\n return new Validate().email();\n }\n\n static onlyNumbers(): Validate {\n return new Validate().onlyNumbers();\n }\n\n static min(n: number): Validate {\n return new Validate().min(n);\n }\n\n static max(n: number): Validate {\n return new Validate().max(n);\n }\n\n email(): this {\n return this.add(validators.email());\n }\n\n onlyNumbers(): this {\n return this.add(validators.onlyNumbers());\n }\n\n min(n: number): this {\n return this.add(validators.min(n));\n }\n\n max(n: number): this {\n return this.add(validators.max(n));\n }\n\n validate(value: unknown): ValidationResult {\n for (const check of this.checks) {\n const result = check(value);\n if (!result.valid) {\n return result;\n }\n }\n return { valid: true, message: \"\" };\n }\n}\n\nexport default Validate;\n"],"mappings":"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"}
@@ -1,2 +1,7 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("react/jsx-runtime")):typeof define==`function`&&define.amd?define([`exports`,`react`,`react/jsx-runtime`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UnicornialUI={},e.React,e.react_jsx_runtime))})(this,function(e,t,n){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var r={primary:`bg-accent text-white hover:bg-accent/90 focus-visible:ring-accent/50`,secondary:`bg-code-bg text-text-h hover:bg-code-bg/80 focus-visible:ring-code-bg/50`,outline:`border border-border bg-transparent text-text-h hover:bg-accent-bg hover:border-accent-border focus-visible:ring-accent/50`,ghost:`bg-transparent text-text-h hover:bg-accent-bg focus-visible:ring-accent/50`},i={sm:`px-3 py-1.5 text-sm gap-1.5`,md:`px-5 py-2.5 text-base gap-2`,lg:`px-7 py-3 text-lg gap-2.5`};e.Button=(0,t.forwardRef)(function({variant:e=`primary`,size:t=`md`,className:a=``,...o},s){return(0,n.jsx)(`button`,{ref:s,className:[`inline-flex items-center justify-center font-medium rounded-lg`,`transition-all duration-200 ease-in-out`,`focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2`,`disabled:opacity-50 disabled:pointer-events-none`,`select-none`,r[e],i[t],a].join(` `),...o})})});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("react/jsx-runtime")):typeof define==`function`&&define.amd?define([`exports`,`react`,`react/jsx-runtime`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UnicornialUI={},e.React,e.react_jsx_runtime))})(this,function(e,t,n){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var r={colors:{primary:`#aa3bff`,secondary:`#f4f3ec`},darkMode:!1,text:{title:`text-3xl font-bold text-text-h`,subtitle:`text-xl font-semibold text-text-h`,normal:`text-base font-normal text-text`}},i=(0,t.createContext)(null),a=(e,t)=>{let n={...e};for(let r of Object.keys(t)){let i=t[r];i&&typeof i==`object`&&!Array.isArray(i)&&e[r]&&typeof e[r]==`object`&&!Array.isArray(e[r])?n[r]=a(e[r],i):i!==void 0&&(n[r]=i)}return n};function o({children:e,config:o}){let s=(0,t.useMemo)(()=>a(r,o??{}),[o]),[c,l]=(0,t.useState)(s.colors),[u,d]=(0,t.useState)(s.darkMode),[f,p]=(0,t.useState)(s.text),m=(0,t.useCallback)(e=>{l(t=>({...t,...e}))},[]),h=(0,t.useCallback)(e=>{d(e)},[]),g=(0,t.useCallback)(e=>{p(t=>({...t,...e}))},[]),_=(0,t.useCallback)(e=>{e.colors&&l(t=>({...t,...e.colors})),e.darkMode!==void 0&&d(e.darkMode),e.text&&p(t=>({...t,...e.text}))},[]);(0,t.useEffect)(()=>{if(typeof document>`u`)return;let e=document.documentElement;u?e.classList.add(`dark`):e.classList.remove(`dark`),e.style.setProperty(`--theme-primary`,c.primary),e.style.setProperty(`--theme-secondary`,c.secondary)},[c,u]);let v=(0,t.useMemo)(()=>({enabled:!0,colors:c,darkMode:u,text:f,setColors:m,setDarkMode:h,setText:g,setTheme:_}),[c,u,f,m,h,g,_]);return(0,n.jsx)(i.Provider,{value:v,children:e})}function s(){return(0,t.useContext)(i)||{enabled:!1,colors:r.colors,darkMode:r.darkMode,text:r.text,setColors:()=>{},setDarkMode:()=>{},setText:()=>{},setTheme:()=>{}}}var c={primary:`bg-accent text-white hover:bg-accent/90 focus-visible:ring-accent/50`,secondary:`bg-code-bg text-text-h hover:bg-code-bg/80 focus-visible:ring-code-bg/50`,outline:`border border-border bg-transparent text-text-h hover:bg-accent-bg hover:border-accent-border focus-visible:ring-accent/50`,ghost:`bg-transparent text-text-h hover:bg-accent-bg focus-visible:ring-accent/50`},l={sm:`px-3 py-1.5 text-sm gap-1.5`,md:`px-5 py-2.5 text-base gap-2`,lg:`px-7 py-3 text-lg gap-2.5`};function u(e,t){let n=e.replace(`#`,``),r=n.length===3?n.split(``).map(e=>e+e).join(``):n,i=parseInt(r,16);return`rgba(${i>>16&255}, ${i>>8&255}, ${i&255}, ${t})`}var d=(0,t.forwardRef)(function({variant:e=`primary`,size:r=`md`,className:i=``,style:a,...o},d){let f=s(),p=(0,t.useMemo)(()=>{if(!f.enabled)return;let t=f.colors.primary,n=f.colors.secondary,r=u(t,.1),i=u(t,.5),a=u(t,.5);switch(e){case`primary`:return{backgroundColor:t,color:`#fff`,"--tw-ring-color":a};case`secondary`:return{backgroundColor:n,color:`#08060d`};case`outline`:return{borderColor:`#e5e4e7`,backgroundColor:`transparent`,color:`#08060d`,"--hover-bg":r,"--hover-border":i,"--tw-ring-color":a};default:return{backgroundColor:`transparent`,color:`#08060d`,"--hover-bg":r,"--tw-ring-color":a}}},[f,e]),m=f.enabled&&e===`primary`?`hover:brightness-110`:f.enabled&&e===`outline`?`hover:bg-[var(--hover-bg)] hover:border-[var(--hover-border)]`:f.enabled?`hover:bg-[var(--hover-bg)]`:``;return(0,n.jsx)(`button`,{ref:d,className:[`inline-flex items-center justify-center font-medium rounded-lg`,`transition-all duration-200 ease-in-out`,`focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2`,`disabled:opacity-50 disabled:pointer-events-none`,`select-none`,c[e],l[r],m,i].join(` `),style:{...p,...a},...o})}),f={default:``,sticky:`sticky top-0 z-50`,blur:`sticky top-0 z-50 transition-all duration-300`};function p(e,t){let n=e.replace(`#`,``),r=n.length===3?n.split(``).map(e=>e+e).join(``):n,i=parseInt(r,16);return`rgba(${i>>16&255}, ${i>>8&255}, ${i&255}, ${t})`}var m=(0,t.forwardRef)(function({behaviour:e=`default`,className:r=``,style:i,children:a,...o},c){let l=s(),[u,d]=(0,t.useState)(!1);(0,t.useEffect)(()=>{if(e!==`blur`)return;let t=()=>{d(window.scrollY>0)};return t(),window.addEventListener(`scroll`,t,{passive:!0}),()=>window.removeEventListener(`scroll`,t)},[e]);let m=e===`blur`&&u?`backdrop-blur-md bg-bg/70 border-b border-border shadow`:e===`blur`?`bg-bg`:`bg-bg border-b border-border`,h=(0,t.useMemo)(()=>{if(!l.enabled)return;let t=l.darkMode?`#0b0912`:`#ffffff`,n=l.darkMode?`#2a2535`:`#e5e4e7`,r=p(l.darkMode?`#0b0912`:`#ffffff`,.7),i=u?`rgba(0, 0, 0, 0.1) 0 4px 12px -2px`:void 0;return e===`blur`&&u?{backgroundColor:r,borderBottom:`1px solid ${n}`,boxShadow:i,color:l.darkMode?`#e8e4f0`:`#08060d`}:{backgroundColor:t,borderBottom:e==="default"?void 0:`1px solid ${n}`,color:l.darkMode?`#e8e4f0`:`#08060d`}},[l,e,u]);return(0,n.jsx)(`header`,{ref:c,className:[`w-full px-6 py-4 flex items-center justify-between`,f[e],m,r].join(` `),style:{...h,...i},...o,children:a})}),h=(0,t.forwardRef)(function({className:e=``,style:t,alt:r=``,...i},a){return(0,n.jsx)(`div`,{className:`h-full flex items-center justify-center shrink-0`,children:(0,n.jsx)(`img`,{ref:a,alt:r,className:`h-full max-h-[48px] w-auto object-contain`,style:{aspectRatio:`auto`,...t},...i})})}),g=(0,t.forwardRef)(function({className:e=``,style:r,children:i,...a},o){let c=s(),l=(0,t.useMemo)(()=>{if(!c.enabled)return;let e=p(c.colors.primary,.5);return{color:c.darkMode?`#e8e4f0`:`#08060d`,"--tw-ring-color":e,"--hover-color":c.colors.primary}},[c]),u=c.enabled?`hover:text-[var(--hover-color)]`:``;return(0,n.jsx)(`a`,{ref:o,className:[`inline-flex items-center justify-center`,`px-3 py-2 text-sm font-medium`,c.enabled?``:`text-text-h hover:text-accent`,u,`transition-colors duration-200 ease-in-out`,`focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 rounded-md`,c.enabled?``:`focus-visible:ring-accent/50`,`select-none`,e].join(` `),style:{...l,...r},...a,children:i})}),_=Object.assign(m,{Logo:h,NavButton:g});function v(e,t){let n=e.replace(`#`,``),r=n.length===3?n.split(``).map(e=>e+e).join(``):n,i=parseInt(r,16);return`rgba(${i>>16&255}, ${i>>8&255}, ${i&255}, ${t})`}var y={"dots-grid":(e,t)=>({backgroundImage:`radial-gradient(${e} 1px, transparent 1px)`,backgroundSize:`${t}px ${t}px`}),"isometric-dot-paper":(e,t)=>({backgroundImage:`radial-gradient(${e} 1px, transparent 1px)`,backgroundSize:`${t}px ${t*1.732}px`,backgroundPosition:`0 0, ${t/2}px ${t*1.732/2}px`}),paper:(e,t)=>({backgroundImage:`linear-gradient(${e} 1px, transparent 1px), linear-gradient(90deg, ${e} 1px, transparent 1px)`,backgroundSize:`${t}px ${t}px`}),"diamond-grid":(e,t)=>({backgroundImage:`linear-gradient(45deg, ${e} 1px, transparent 1px), linear-gradient(-45deg, ${e} 1px, transparent 1px)`,backgroundSize:`${t}px ${t}px`}),"paper-45":(e,t)=>({backgroundImage:`linear-gradient(45deg, ${e} 1px, transparent 1px), linear-gradient(-45deg, ${e} 1px, transparent 1px)`,backgroundSize:`${t}px ${t}px`}),lines:(e,t)=>({backgroundImage:`linear-gradient(${e} 1px, transparent 1px)`,backgroundSize:`${t}px ${t}px`}),"falling-stars":(e,t)=>({backgroundImage:`
2
+ radial-gradient(${e} 1px, transparent 1px),
3
+ radial-gradient(${e} 1px, transparent 1px),
4
+ radial-gradient(${e} 1.5px, transparent 1.5px),
5
+ radial-gradient(${e} 1px, transparent 1px)
6
+ `,backgroundSize:`${t*5}px ${t*5}px, ${t*3}px ${t*3}px, ${t*7}px ${t*7}px, ${t*4}px ${t*4}px`,backgroundPosition:`0 0, ${t}px ${t*2}px, ${t*3}px ${t}px, ${t*2}px ${t*4}px`,animation:`falling-stars 20s linear infinite`})},b=(0,t.forwardRef)(function({variant:e=`dots-grid`,color:r,size:i=24,className:a=``,style:o,children:c,...l},u){let d=s(),f=(0,t.useMemo)(()=>r||(d.enabled?v(d.colors.primary,.25):`rgba(170, 59, 255, 0.25)`),[r,d]),p=(0,t.useMemo)(()=>y[e](f,i),[e,f,i]);return(0,n.jsxs)(`div`,{ref:u,className:[`w-full h-full relative overflow-hidden`,a].join(` `),style:o,...l,children:[(0,n.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 -z-10 pointer-events-none`,style:p}),c]})}),x=(0,t.forwardRef)(function({variant:e=`line`,orientation:r=`horizontal`,color:i,thickness:a=1,spacing:o=16,className:c=``,style:l,...u},d){let f=s(),p=(0,t.useMemo)(()=>i||(f.enabled&&f.darkMode?`#2a2535`:`#e5e4e7`),[i,f]),m=r===`horizontal`;if(e===`point`){let e=m?{paddingTop:o,paddingBottom:o}:{paddingLeft:o,paddingRight:o};return(0,n.jsx)(`div`,{ref:d,className:[`flex items-center justify-center shrink-0`,m?`w-full`:`h-full`,c].join(` `),style:{...e,...l},...u,children:(0,n.jsx)(`span`,{"aria-hidden":!0,className:`rounded-full shrink-0`,style:{width:a*4,height:a*4,backgroundColor:p}})})}let h=m?{height:a,backgroundColor:p,marginTop:o,marginBottom:o}:{width:a,backgroundColor:p,marginLeft:o,marginRight:o};return(0,n.jsx)(`div`,{ref:d,role:`separator`,"aria-orientation":r,className:[`shrink-0`,m?`w-full`:`h-full`,c].join(` `),style:{...h,...l},...u})}),S={sm:`h-8 px-3 text-sm`,md:`h-10 px-4 text-base`,lg:`h-12 px-5 text-lg`},C={sm:`pl-9 pr-3`,md:`pl-11 pr-4`,lg:`pl-13 pr-5`},w={sm:`pl-3 pr-9`,md:`pl-4 pr-11`,lg:`pl-5 pr-13`},T={sm:`pl-9 pr-9`,md:`pl-11 pr-11`,lg:`pl-13 pr-13`},E={sm:`w-4 h-4 left-2.5`,md:`w-5 h-5 left-3`,lg:`w-6 h-6 left-4`},D={sm:`w-4 h-4 right-2.5`,md:`w-5 h-5 right-3`,lg:`w-6 h-6 right-4`};function O(e,t){let n=e.replace(`#`,``),r=n.length===3?n.split(``).map(e=>e+e).join(``):n,i=parseInt(r,16);return`rgba(${i>>16&255}, ${i>>8&255}, ${i&255}, ${t})`}var k=(0,t.forwardRef)(function({variant:e=`default`,Isize:r=`md`,error:i=!1,leftIcon:a,rightIcon:o,className:c=``,wrapperClassName:l=``,style:u,disabled:d,...f},p){let m=s(),h=(0,t.useMemo)(()=>{if(!m.enabled)return;let t=m.colors.primary,n=m.darkMode?`#2a2535`:`#e5e4e7`,r=m.darkMode?`#14111f`:`#f5f5f7`,a=`#ef4444`,o={borderRadius:e===`underline`?0:8};switch(e){case`filled`:return{...o,backgroundColor:r,borderBottom:`2px solid ${i?a:`transparent`}`,"--focus-border":i?a:t,"--ring-color":O(i?a:t,.5)};case`underline`:return{...o,backgroundColor:`transparent`,borderBottom:`1.5px solid ${i?a:n}`,"--focus-border":i?a:t,"--ring-color":O(i?a:t,.5)};default:return{...o,backgroundColor:m.darkMode?`#0b0912`:`#ffffff`,border:`1px solid ${i?a:n}`,"--focus-border":i?a:t,"--ring-color":O(i?a:t,.5)}}},[m,e,i]),g=(0,t.useMemo)(()=>{if(m.enabled)return e===`underline`?`focus-within:border-b-[2px] focus-within:border-b-[var(--focus-border)]`:`focus-within:ring-2 focus-within:ring-[var(--ring-color)] focus-within:ring-offset-0 focus-within:border-[var(--focus-border)]`;if(e===`underline`)return i?`border-b-2 border-b-red-500 focus-within:border-b-accent`:`border-b border-border focus-within:border-b-2 focus-within:border-b-accent`;let t=`focus-within:ring-2 focus-within:ring-accent/50 focus-within:ring-offset-0`;switch(e){case`filled`:return i?`bg-code-bg border-b-2 border-b-red-500 ${t} focus-within:border-b-accent`:`bg-code-bg border-b-2 border-b-transparent ${t} focus-within:border-b-accent`;default:return i?`bg-bg border border-red-500 rounded-lg ${t} focus-within:border-accent`:`bg-bg border border-border rounded-lg ${t} focus-within:border-accent`}},[m,e,i]),_=a&&o?T[r]:a?C[r]:o?w[r]:S[r],v=e===`underline`?`bg-transparent rounded-none`:`rounded-lg`,y=(0,t.useMemo)(()=>m.enabled?{color:m.darkMode?`#e8e4f0`:`#08060d`,"--placeholder-color":O(m.darkMode?`#908a9e`:`#706a7c`,1),backgroundColor:`transparent`}:void 0,[m]),b=m.enabled?`placeholder:text-[color:var(--placeholder-color)]`:`placeholder:text-text-muted`;return(0,n.jsxs)(`div`,{className:[`relative w-full flex items-center`,g,d?`opacity-50 cursor-not-allowed`:``,l].join(` `),style:h,children:[a&&(0,n.jsx)(`span`,{"aria-hidden":!0,className:[`absolute text-text-muted pointer-events-none shrink-0`,E[r]].join(` `),children:a}),(0,n.jsx)(`input`,{ref:p,disabled:d,className:[`w-full h-full outline-none bg-transparent font-normal`,`transition-all duration-200 ease-in-out`,`disabled:cursor-not-allowed`,_,v,b,c].join(` `),style:{...y,...u},...f}),o&&(0,n.jsx)(`span`,{"aria-hidden":!0,className:[`absolute text-text-muted pointer-events-none shrink-0`,D[r]].join(` `),children:o})]})}),A=e=>typeof e==`string`&&e.trim()!==``&&!isNaN(Number(e)),j=e=>typeof e==`number`?isNaN(e)?null:e:A(e)?Number(e):null,M={email:()=>e=>{let t=String(e??``);return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?{valid:!0,message:``}:{valid:!1,message:`El valor no es un correo válido`}},onlyNumbers:()=>e=>{let t=String(e??``);return/^\d+$/.test(t)?{valid:!0,message:``}:{valid:!1,message:`El valor debe contener solo números`}},min:e=>t=>{let n=j(t);return n===null?String(t??``).length>=e?{valid:!0,message:``}:{valid:!1,message:`La longitud debe ser al menos ${e}`}:n>=e?{valid:!0,message:``}:{valid:!1,message:`El valor debe ser mayor o igual a ${e}`}},max:e=>t=>{let n=j(t);return n===null?String(t??``).length<=e?{valid:!0,message:``}:{valid:!1,message:`La longitud debe ser como máximo ${e}`}:n<=e?{valid:!0,message:``}:{valid:!1,message:`El valor debe ser menor o igual a ${e}`}}},N=class e{checks=[];add(e){return this.checks.push(e),this}static email(){return new e().email()}static onlyNumbers(){return new e().onlyNumbers()}static min(t){return new e().min(t)}static max(t){return new e().max(t)}email(){return this.add(M.email())}onlyNumbers(){return this.add(M.onlyNumbers())}min(e){return this.add(M.min(e))}max(e){return this.add(M.max(e))}validate(e){for(let t of this.checks){let n=t(e);if(!n.valid)return n}return{valid:!0,message:``}}};e.Background=b,e.Button=d,e.Header=_,e.Input=k,e.Separator=x,e.ThemeProvider=o,e.Validate=N,e.themeConfig=r,e.useTheme=s,e.validators=M});
2
7
  //# sourceMappingURL=unicornial-ui.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unicornial-ui.umd.js","names":[],"sources":["../src/components/Button.tsx"],"sourcesContent":["import { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\ntype Variant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\ntype Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: Variant;\n size?: Size;\n}\n\nconst variantClasses: Record<Variant, string> = {\n primary:\n \"bg-accent text-white hover:bg-accent/90 focus-visible:ring-accent/50\",\n secondary:\n \"bg-code-bg text-text-h hover:bg-code-bg/80 focus-visible:ring-code-bg/50\",\n outline:\n \"border border-border bg-transparent text-text-h hover:bg-accent-bg hover:border-accent-border focus-visible:ring-accent/50\",\n ghost:\n \"bg-transparent text-text-h hover:bg-accent-bg focus-visible:ring-accent/50\",\n};\n\nconst sizeClasses: Record<Size, string> = {\n sm: \"px-3 py-1.5 text-sm gap-1.5\",\n md: \"px-5 py-2.5 text-base gap-2\",\n lg: \"px-7 py-3 text-lg gap-2.5\",\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { variant = \"primary\", size = \"md\", className = \"\", ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n className={[\n \"inline-flex items-center justify-center font-medium rounded-lg\",\n \"transition-all duration-200 ease-in-out\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"select-none\",\n variantClasses[variant],\n sizeClasses[size],\n className,\n ].join(\" \")}\n {...props}\n />\n );\n});\n"],"mappings":"8XAUA,IAAM,EAA0C,CAC9C,QACE,uEACF,UACE,2EACF,QACE,6HACF,MACE,4EACJ,EAEM,EAAoC,CACxC,GAAI,8BACJ,GAAI,8BACJ,GAAI,2BACN,YAEa,EAAA,EAAA,WAAA,CAAoD,SAC/D,CAAE,UAAU,UAAW,OAAO,KAAM,YAAY,GAAI,GAAG,GACvD,EACA,CACA,OACE,EAAA,EAAA,IAAA,CAAC,SAAD,CACO,MACL,UAAW,CACT,iEACA,0CACA,sEACA,mDACA,cACA,EAAe,GACf,EAAY,GACZ,CACF,CAAC,CAAC,KAAK,GAAG,EACV,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"unicornial-ui.umd.js","names":[],"sources":["../src/theme/theme.config.json","../src/theme/ThemeProvider.tsx","../src/components/Button.tsx","../src/components/Header.tsx","../src/components/Background.tsx","../src/components/Separator.tsx","../src/components/Input.tsx","../src/utils/validation.ts"],"sourcesContent":["{\n \"colors\": {\n \"primary\": \"#aa3bff\",\n \"secondary\": \"#f4f3ec\"\n },\n \"darkMode\": false,\n \"text\": {\n \"title\": \"text-3xl font-bold text-text-h\",\n \"subtitle\": \"text-xl font-semibold text-text-h\",\n \"normal\": \"text-base font-normal text-text\"\n }\n}\n","import {\n createContext,\n useContext,\n type ReactNode,\n useMemo,\n useState,\n useCallback,\n useEffect,\n} from \"react\";\nimport defaultConfig from \"./theme.config.json\";\n\nexport interface ThemeColors {\n primary: string;\n secondary: string;\n}\n\nexport interface ThemeTextClasses {\n title: string;\n subtitle: string;\n normal: string;\n}\n\nexport interface ThemeConfig {\n colors: ThemeColors;\n darkMode: boolean;\n text: ThemeTextClasses;\n}\n\nexport interface ThemeContextValue extends ThemeConfig {\n enabled: boolean;\n setColors: (colors: Partial<ThemeColors>) => void;\n setDarkMode: (enabled: boolean) => void;\n setText: (text: Partial<ThemeTextClasses>) => void;\n setTheme: (config: Partial<ThemeConfig>) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n children: ReactNode;\n config?: Partial<ThemeConfig>;\n}\n\nconst deepMerge = <T extends object>(base: T, overrides: Partial<T>): T => {\n const result: any = { ...base };\n for (const key of Object.keys(overrides) as (keyof T)[]) {\n const value = overrides[key];\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n base[key] &&\n typeof base[key] === \"object\" &&\n !Array.isArray(base[key])\n ) {\n result[key] = deepMerge(base[key] as any, value as any);\n } else if (value !== undefined) {\n result[key] = value;\n }\n }\n return result as T;\n};\n\nexport function ThemeProvider({ children, config }: ThemeProviderProps) {\n const mergedInitial = useMemo(\n () => deepMerge(defaultConfig as ThemeConfig, config ?? {}),\n [config],\n );\n\n const [colors, setColorsState] = useState<ThemeColors>(mergedInitial.colors);\n const [darkMode, setDarkModeState] = useState<boolean>(mergedInitial.darkMode);\n const [text, setTextState] = useState<ThemeTextClasses>(mergedInitial.text);\n\n const setColors = useCallback((partial: Partial<ThemeColors>) => {\n setColorsState((prev) => ({ ...prev, ...partial }));\n }, []);\n\n const setDarkMode = useCallback((enabled: boolean) => {\n setDarkModeState(enabled);\n }, []);\n\n const setText = useCallback((partial: Partial<ThemeTextClasses>) => {\n setTextState((prev) => ({ ...prev, ...partial }));\n }, []);\n\n const setTheme = useCallback((partial: Partial<ThemeConfig>) => {\n if (partial.colors) setColorsState((prev) => ({ ...prev, ...partial.colors! }));\n if (partial.darkMode !== undefined) setDarkModeState(partial.darkMode);\n if (partial.text) setTextState((prev) => ({ ...prev, ...partial.text! }));\n }, []);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n if (darkMode) {\n root.classList.add(\"dark\");\n } else {\n root.classList.remove(\"dark\");\n }\n root.style.setProperty(\"--theme-primary\", colors.primary);\n root.style.setProperty(\"--theme-secondary\", colors.secondary);\n }, [colors, darkMode]);\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n enabled: true,\n colors,\n darkMode,\n text,\n setColors,\n setDarkMode,\n setText,\n setTheme,\n }),\n [colors, darkMode, text, setColors, setDarkMode, setText, setTheme],\n );\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n return {\n enabled: false,\n colors: defaultConfig.colors as ThemeColors,\n darkMode: defaultConfig.darkMode,\n text: defaultConfig.text as ThemeTextClasses,\n setColors: () => {},\n setDarkMode: () => {},\n setText: () => {},\n setTheme: () => {},\n };\n }\n return ctx;\n}\n\nexport { defaultConfig as themeConfig };\n","import { type ButtonHTMLAttributes, forwardRef, useMemo } from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Variant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\ntype Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: Variant;\n size?: Size;\n}\n\nconst variantClasses: Record<Variant, string> = {\n primary:\n \"bg-accent text-white hover:bg-accent/90 focus-visible:ring-accent/50\",\n secondary:\n \"bg-code-bg text-text-h hover:bg-code-bg/80 focus-visible:ring-code-bg/50\",\n outline:\n \"border border-border bg-transparent text-text-h hover:bg-accent-bg hover:border-accent-border focus-visible:ring-accent/50\",\n ghost:\n \"bg-transparent text-text-h hover:bg-accent-bg focus-visible:ring-accent/50\",\n};\n\nconst sizeClasses: Record<Size, string> = {\n sm: \"px-3 py-1.5 text-sm gap-1.5\",\n md: \"px-5 py-2.5 text-base gap-2\",\n lg: \"px-7 py-3 text-lg gap-2.5\",\n};\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const cleaned = hex.replace(\"#\", \"\");\n const full =\n cleaned.length === 3\n ? cleaned\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : cleaned;\n const num = parseInt(full, 16);\n const r = (num >> 16) & 0xff;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { variant = \"primary\", size = \"md\", className = \"\", style, ...props },\n ref,\n) {\n const theme = useTheme();\n\n const themeStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const primary = theme.colors.primary;\n const secondary = theme.colors.secondary;\n const primaryBg = hexToRgba(primary, 0.1);\n const primaryBorder = hexToRgba(primary, 0.5);\n const primaryRing = hexToRgba(primary, 0.5);\n\n switch (variant) {\n case \"primary\":\n return {\n backgroundColor: primary,\n color: \"#fff\",\n [\"--tw-ring-color\" as any]: primaryRing,\n };\n case \"secondary\":\n return {\n backgroundColor: secondary,\n color: \"#08060d\",\n };\n case \"outline\":\n return {\n borderColor: \"#e5e4e7\",\n backgroundColor: \"transparent\",\n color: \"#08060d\",\n [\"--hover-bg\" as any]: primaryBg,\n [\"--hover-border\" as any]: primaryBorder,\n [\"--tw-ring-color\" as any]: primaryRing,\n };\n case \"ghost\":\n default:\n return {\n backgroundColor: \"transparent\",\n color: \"#08060d\",\n [\"--hover-bg\" as any]: primaryBg,\n [\"--tw-ring-color\" as any]: primaryRing,\n };\n }\n }, [theme, variant]);\n\n const themeHoverClass =\n theme.enabled && variant === \"primary\"\n ? \"hover:brightness-110\"\n : theme.enabled && variant === \"outline\"\n ? \"hover:bg-[var(--hover-bg)] hover:border-[var(--hover-border)]\"\n : theme.enabled\n ? \"hover:bg-[var(--hover-bg)]\"\n : \"\";\n\n return (\n <button\n ref={ref}\n className={[\n \"inline-flex items-center justify-center font-medium rounded-lg\",\n \"transition-all duration-200 ease-in-out\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"select-none\",\n variantClasses[variant],\n sizeClasses[size],\n themeHoverClass,\n className,\n ].join(\" \")}\n style={{ ...themeStyle, ...style }}\n {...props}\n />\n );\n});\n","import {\n type AnchorHTMLAttributes,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n useEffect,\n useState,\n forwardRef,\n useMemo,\n} from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Behaviour = \"default\" | \"sticky\" | \"blur\";\n\nexport interface HeaderProps extends HTMLAttributes<HTMLElement> {\n behaviour?: Behaviour;\n}\n\nexport interface HeaderLogoProps extends ImgHTMLAttributes<HTMLImageElement> {}\n\nexport interface HeaderNavButtonProps\n extends AnchorHTMLAttributes<HTMLAnchorElement> {}\n\nconst behaviourContainerClasses: Record<Behaviour, string> = {\n default: \"\",\n sticky: \"sticky top-0 z-50\",\n blur: \"sticky top-0 z-50 transition-all duration-300\",\n};\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const cleaned = hex.replace(\"#\", \"\");\n const full =\n cleaned.length === 3\n ? cleaned\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : cleaned;\n const num = parseInt(full, 16);\n const r = (num >> 16) & 0xff;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const Header = forwardRef<HTMLElement, HeaderProps>(function Header(\n { behaviour = \"default\", className = \"\", style, children, ...props },\n ref,\n) {\n const theme = useTheme();\n const [scrolled, setScrolled] = useState(false);\n\n useEffect(() => {\n if (behaviour !== \"blur\") return;\n\n const handleScroll = () => {\n setScrolled(window.scrollY > 0);\n };\n\n handleScroll();\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n return () => window.removeEventListener(\"scroll\", handleScroll);\n }, [behaviour]);\n\n const blurClasses =\n behaviour === \"blur\" && scrolled\n ? \"backdrop-blur-md bg-bg/70 border-b border-border shadow\"\n : behaviour === \"blur\"\n ? \"bg-bg\"\n : behaviour === \"sticky\"\n ? \"bg-bg border-b border-border\"\n : \"bg-bg border-b border-border\";\n\n const themeStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const bg = theme.darkMode ? \"#0b0912\" : \"#ffffff\";\n const border = theme.darkMode ? \"#2a2535\" : \"#e5e4e7\";\n const blurBg = hexToRgba(theme.darkMode ? \"#0b0912\" : \"#ffffff\", 0.7);\n const shadow = scrolled\n ? \"rgba(0, 0, 0, 0.1) 0 4px 12px -2px\"\n : undefined;\n\n if (behaviour === \"blur\" && scrolled) {\n return {\n backgroundColor: blurBg,\n borderBottom: `1px solid ${border}`,\n boxShadow: shadow,\n color: theme.darkMode ? \"#e8e4f0\" : \"#08060d\",\n };\n }\n return {\n backgroundColor: bg,\n borderBottom:\n behaviour !== \"default\" ? `1px solid ${border}` : undefined,\n color: theme.darkMode ? \"#e8e4f0\" : \"#08060d\",\n };\n }, [theme, behaviour, scrolled]);\n\n return (\n <header\n ref={ref}\n className={[\n \"w-full px-6 py-4 flex items-center justify-between\",\n behaviourContainerClasses[behaviour],\n blurClasses,\n className,\n ].join(\" \")}\n style={{ ...themeStyle, ...style }}\n {...props}\n >\n {children}\n </header>\n );\n});\n\nexport const HeaderLogo = forwardRef<HTMLImageElement, HeaderLogoProps>(\n function HeaderLogo({ className = \"\", style, alt = \"\", ...props }, ref) {\n return (\n <div className=\"h-full flex items-center justify-center shrink-0\">\n <img\n ref={ref}\n alt={alt}\n className=\"h-full max-h-[48px] w-auto object-contain\"\n style={{ aspectRatio: \"auto\", ...style }}\n {...props}\n />\n </div>\n );\n },\n);\n\nexport const HeaderNavButton = forwardRef<\n HTMLAnchorElement,\n HeaderNavButtonProps\n>(function HeaderNavButton(\n { className = \"\", style, children, ...props },\n ref,\n) {\n const theme = useTheme();\n\n const themeStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const ringColor = hexToRgba(theme.colors.primary, 0.5);\n return {\n color: theme.darkMode ? \"#e8e4f0\" : \"#08060d\",\n [\"--tw-ring-color\" as any]: ringColor,\n [\"--hover-color\" as any]: theme.colors.primary,\n };\n }, [theme]);\n\n const themeHoverClass = theme.enabled ? \"hover:text-[var(--hover-color)]\" : \"\";\n\n const originalClass = theme.enabled ? \"\" : \"text-text-h hover:text-accent\";\n const originalRing = theme.enabled\n ? \"\"\n : \"focus-visible:ring-accent/50\";\n\n return (\n <a\n ref={ref}\n className={[\n \"inline-flex items-center justify-center\",\n \"px-3 py-2 text-sm font-medium\",\n originalClass,\n themeHoverClass,\n \"transition-colors duration-200 ease-in-out\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 rounded-md\",\n originalRing,\n \"select-none\",\n className,\n ].join(\" \")}\n style={{ ...themeStyle, ...style }}\n {...props}\n >\n {children}\n </a>\n );\n});\n\nexport const HeaderNamespace = Object.assign(Header, {\n Logo: HeaderLogo,\n NavButton: HeaderNavButton,\n});\n\nexport default HeaderNamespace;\n","import { type HTMLAttributes, forwardRef, useMemo } from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Variant =\n | \"dots-grid\"\n | \"isometric-dot-paper\"\n | \"paper\"\n | \"diamond-grid\"\n | \"paper-45\"\n | \"lines\"\n | \"falling-stars\";\n\nexport interface BackgroundProps extends HTMLAttributes<HTMLDivElement> {\n variant?: Variant;\n color?: string;\n size?: number;\n}\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const cleaned = hex.replace(\"#\", \"\");\n const full =\n cleaned.length === 3\n ? cleaned\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : cleaned;\n const num = parseInt(full, 16);\n const r = (num >> 16) & 0xff;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nconst variantStyles: Record<\n Variant,\n (color: string, size: number) => React.CSSProperties\n> = {\n \"dots-grid\": (c, s) => ({\n backgroundImage: `radial-gradient(${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n \"isometric-dot-paper\": (c, s) => ({\n backgroundImage: `radial-gradient(${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s * 1.732}px`,\n backgroundPosition: `0 0, ${s / 2}px ${(s * 1.732) / 2}px`,\n }),\n paper: (c, s) => ({\n backgroundImage: `linear-gradient(${c} 1px, transparent 1px), linear-gradient(90deg, ${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n \"diamond-grid\": (c, s) => ({\n backgroundImage: `linear-gradient(45deg, ${c} 1px, transparent 1px), linear-gradient(-45deg, ${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n \"paper-45\": (c, s) => ({\n backgroundImage: `linear-gradient(45deg, ${c} 1px, transparent 1px), linear-gradient(-45deg, ${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n lines: (c, s) => ({\n backgroundImage: `linear-gradient(${c} 1px, transparent 1px)`,\n backgroundSize: `${s}px ${s}px`,\n }),\n \"falling-stars\": (c, s) => ({\n backgroundImage: `\n radial-gradient(${c} 1px, transparent 1px),\n radial-gradient(${c} 1px, transparent 1px),\n radial-gradient(${c} 1.5px, transparent 1.5px),\n radial-gradient(${c} 1px, transparent 1px)\n `,\n backgroundSize: `${s * 5}px ${s * 5}px, ${s * 3}px ${s * 3}px, ${s * 7}px ${s * 7}px, ${s * 4}px ${s * 4}px`,\n backgroundPosition: `0 0, ${s}px ${s * 2}px, ${s * 3}px ${s}px, ${s * 2}px ${s * 4}px`,\n animation: \"falling-stars 20s linear infinite\",\n }),\n};\n\nexport const Background = forwardRef<HTMLDivElement, BackgroundProps>(\n function Background(\n {\n variant = \"dots-grid\",\n color,\n size = 24,\n className = \"\",\n style,\n children,\n ...props\n },\n ref,\n ) {\n const theme = useTheme();\n\n const resolvedColor = useMemo(() => {\n if (color) return color;\n if (theme.enabled) return hexToRgba(theme.colors.primary, 0.25);\n return \"rgba(170, 59, 255, 0.25)\";\n }, [color, theme]);\n\n const bgStyles = useMemo<React.CSSProperties>(\n () => variantStyles[variant](resolvedColor, size),\n [variant, resolvedColor, size],\n );\n\n return (\n <div\n ref={ref}\n className={[\"w-full h-full relative overflow-hidden\", className].join(\n \" \",\n )}\n style={style}\n {...props}\n >\n <div\n aria-hidden\n className=\"absolute inset-0 -z-10 pointer-events-none\"\n style={bgStyles}\n />\n {children}\n </div>\n );\n },\n);\n\nexport default Background;\n","import { type HTMLAttributes, forwardRef, useMemo } from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Variant = \"line\" | \"point\";\ntype Orientation = \"horizontal\" | \"vertical\";\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLDivElement> {\n variant?: Variant;\n orientation?: Orientation;\n color?: string;\n thickness?: number;\n spacing?: number;\n}\n\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n function Separator(\n {\n variant = \"line\",\n orientation = \"horizontal\",\n color,\n thickness = 1,\n spacing = 16,\n className = \"\",\n style,\n ...props\n },\n ref,\n ) {\n const theme = useTheme();\n\n const resolvedColor = useMemo(() => {\n if (color) return color;\n if (theme.enabled) return theme.darkMode ? \"#2a2535\" : \"#e5e4e7\";\n return \"#e5e4e7\";\n }, [color, theme]);\n\n const isHorizontal = orientation === \"horizontal\";\n\n if (variant === \"point\") {\n const paddingStyle = isHorizontal\n ? { paddingTop: spacing, paddingBottom: spacing }\n : { paddingLeft: spacing, paddingRight: spacing };\n\n return (\n <div\n ref={ref}\n className={[\n \"flex items-center justify-center shrink-0\",\n isHorizontal ? \"w-full\" : \"h-full\",\n className,\n ].join(\" \")}\n style={{ ...paddingStyle, ...style }}\n {...props}\n >\n <span\n aria-hidden\n className=\"rounded-full shrink-0\"\n style={{\n width: thickness * 4,\n height: thickness * 4,\n backgroundColor: resolvedColor,\n }}\n />\n </div>\n );\n }\n\n const dimStyle = isHorizontal\n ? {\n height: thickness,\n backgroundColor: resolvedColor,\n marginTop: spacing,\n marginBottom: spacing,\n }\n : {\n width: thickness,\n backgroundColor: resolvedColor,\n marginLeft: spacing,\n marginRight: spacing,\n };\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={[\n \"shrink-0\",\n isHorizontal ? \"w-full\" : \"h-full\",\n className,\n ].join(\" \")}\n style={{ ...dimStyle, ...style }}\n {...props}\n />\n );\n },\n);\n\nexport default Separator;\n","import {\n type InputHTMLAttributes,\n forwardRef,\n useMemo,\n type ReactNode,\n} from \"react\";\nimport { useTheme } from \"../theme/ThemeProvider\";\n\ntype Variant = \"default\" | \"filled\" | \"underline\";\ntype Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n variant?: Variant;\n Isize?: Size;\n error?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n wrapperClassName?: string;\n}\n\nconst sizeClasses: Record<Size, string> = {\n sm: \"h-8 px-3 text-sm\",\n md: \"h-10 px-4 text-base\",\n lg: \"h-12 px-5 text-lg\",\n};\n\nconst sizePaddingWithIcon: Record<Size, string> = {\n sm: \"pl-9 pr-3\",\n md: \"pl-11 pr-4\",\n lg: \"pl-13 pr-5\",\n};\n\nconst sizePaddingWithRightIcon: Record<Size, string> = {\n sm: \"pl-3 pr-9\",\n md: \"pl-4 pr-11\",\n lg: \"pl-5 pr-13\",\n};\n\nconst sizePaddingWithBothIcons: Record<Size, string> = {\n sm: \"pl-9 pr-9\",\n md: \"pl-11 pr-11\",\n lg: \"pl-13 pr-13\",\n};\n\nconst iconSizeClasses: Record<Size, string> = {\n sm: \"w-4 h-4 left-2.5\",\n md: \"w-5 h-5 left-3\",\n lg: \"w-6 h-6 left-4\",\n};\n\nconst rightIconSizeClasses: Record<Size, string> = {\n sm: \"w-4 h-4 right-2.5\",\n md: \"w-5 h-5 right-3\",\n lg: \"w-6 h-6 right-4\",\n};\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const cleaned = hex.replace(\"#\", \"\");\n const full =\n cleaned.length === 3\n ? cleaned\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : cleaned;\n const num = parseInt(full, 16);\n const r = (num >> 16) & 0xff;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n variant = \"default\",\n Isize = \"md\",\n error = false,\n leftIcon,\n rightIcon,\n className = \"\",\n wrapperClassName = \"\",\n style,\n disabled,\n ...props\n },\n ref,\n) {\n const theme = useTheme();\n\n const baseWrapperClasses = \"relative w-full flex items-center\";\n\n const variantWrapperStyles = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const primary = theme.colors.primary;\n const border = theme.darkMode ? \"#2a2535\" : \"#e5e4e7\";\n const filledBg = theme.darkMode ? \"#14111f\" : \"#f5f5f7\";\n const errorBorder = \"#ef4444\";\n\n const base: React.CSSProperties = {\n borderRadius: variant === \"underline\" ? 0 : 8,\n };\n\n switch (variant) {\n case \"filled\":\n return {\n ...base,\n backgroundColor: filledBg,\n borderBottom: `2px solid ${error ? errorBorder : \"transparent\"}`,\n [\"--focus-border\" as any]: error ? errorBorder : primary,\n [\"--ring-color\" as any]: hexToRgba(error ? errorBorder : primary, 0.5),\n };\n case \"underline\":\n return {\n ...base,\n backgroundColor: \"transparent\",\n borderBottom: `1.5px solid ${error ? errorBorder : border}`,\n [\"--focus-border\" as any]: error ? errorBorder : primary,\n [\"--ring-color\" as any]: hexToRgba(error ? errorBorder : primary, 0.5),\n };\n case \"default\":\n default:\n return {\n ...base,\n backgroundColor: theme.darkMode ? \"#0b0912\" : \"#ffffff\",\n border: `1px solid ${error ? errorBorder : border}`,\n [\"--focus-border\" as any]: error ? errorBorder : primary,\n [\"--ring-color\" as any]: hexToRgba(error ? errorBorder : primary, 0.5),\n };\n }\n }, [theme, variant, error]);\n\n const variantWrapperClass = useMemo(() => {\n if (theme.enabled) {\n if (variant === \"underline\") {\n return \"focus-within:border-b-[2px] focus-within:border-b-[var(--focus-border)]\";\n }\n return \"focus-within:ring-2 focus-within:ring-[var(--ring-color)] focus-within:ring-offset-0 focus-within:border-[var(--focus-border)]\";\n }\n\n if (variant === \"underline\") {\n return error\n ? \"border-b-2 border-b-red-500 focus-within:border-b-accent\"\n : \"border-b border-border focus-within:border-b-2 focus-within:border-b-accent\";\n }\n\n const ringClass =\n \"focus-within:ring-2 focus-within:ring-accent/50 focus-within:ring-offset-0\";\n\n switch (variant) {\n case \"filled\":\n return error\n ? `bg-code-bg border-b-2 border-b-red-500 ${ringClass} focus-within:border-b-accent`\n : `bg-code-bg border-b-2 border-b-transparent ${ringClass} focus-within:border-b-accent`;\n case \"default\":\n default:\n return error\n ? `bg-bg border border-red-500 rounded-lg ${ringClass} focus-within:border-accent`\n : `bg-bg border border-border rounded-lg ${ringClass} focus-within:border-accent`;\n }\n }, [theme, variant, error]);\n\n const inputSizeClass =\n leftIcon && rightIcon\n ? sizePaddingWithBothIcons[Isize]\n : leftIcon\n ? sizePaddingWithIcon[Isize]\n : rightIcon\n ? sizePaddingWithRightIcon[Isize]\n : sizeClasses[Isize];\n\n const inputVariantClass =\n variant === \"underline\" ? \"bg-transparent rounded-none\" : \"rounded-lg\";\n\n const themeInputStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (!theme.enabled) return undefined;\n const textColor = theme.darkMode ? \"#e8e4f0\" : \"#08060d\";\n const placeholderColor = hexToRgba(\n theme.darkMode ? \"#908a9e\" : \"#706a7c\",\n 1,\n );\n return {\n color: textColor,\n [\"--placeholder-color\" as any]: placeholderColor,\n backgroundColor: \"transparent\",\n };\n }, [theme]);\n\n const themeInputPlaceholderClass = theme.enabled\n ? \"placeholder:text-[color:var(--placeholder-color)]\"\n : \"placeholder:text-text-muted\";\n\n return (\n <div\n className={[\n baseWrapperClasses,\n variantWrapperClass,\n disabled ? \"opacity-50 cursor-not-allowed\" : \"\",\n wrapperClassName,\n ].join(\" \")}\n style={variantWrapperStyles}\n >\n {leftIcon && (\n <span\n aria-hidden\n className={[\n \"absolute text-text-muted pointer-events-none shrink-0\",\n iconSizeClasses[Isize],\n ].join(\" \")}\n >\n {leftIcon}\n </span>\n )}\n\n <input\n ref={ref}\n disabled={disabled}\n className={[\n \"w-full h-full outline-none bg-transparent font-normal\",\n \"transition-all duration-200 ease-in-out\",\n \"disabled:cursor-not-allowed\",\n inputSizeClass,\n inputVariantClass,\n themeInputPlaceholderClass,\n className,\n ].join(\" \")}\n style={{ ...themeInputStyle, ...style }}\n {...props}\n />\n\n {rightIcon && (\n <span\n aria-hidden\n className={[\n \"absolute text-text-muted pointer-events-none shrink-0\",\n rightIconSizeClasses[Isize],\n ].join(\" \")}\n >\n {rightIcon}\n </span>\n )}\n </div>\n );\n});\n","export interface ValidationResult {\n valid: boolean;\n message: string;\n}\n\nexport type Validator = (value: unknown) => ValidationResult;\n\nconst isNumericString = (v: unknown): v is string =>\n typeof v === \"string\" && v.trim() !== \"\" && !isNaN(Number(v));\n\nconst toNumber = (v: unknown): number | null => {\n if (typeof v === \"number\") return isNaN(v) ? null : v;\n if (isNumericString(v)) return Number(v);\n return null;\n};\n\nexport const validators: Record<string, (...args: any[]) => Validator> = {\n email: () => (value: unknown): ValidationResult => {\n const str = String(value ?? \"\");\n const re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return re.test(str)\n ? { valid: true, message: \"\" }\n : { valid: false, message: \"El valor no es un correo válido\" };\n },\n\n onlyNumbers: () => (value: unknown): ValidationResult => {\n const str = String(value ?? \"\");\n return /^\\d+$/.test(str)\n ? { valid: true, message: \"\" }\n : { valid: false, message: \"El valor debe contener solo números\" };\n },\n\n min: (n: number) => (value: unknown): ValidationResult => {\n const num = toNumber(value);\n if (num !== null) {\n return num >= n\n ? { valid: true, message: \"\" }\n : { valid: false, message: `El valor debe ser mayor o igual a ${n}` };\n }\n const len = String(value ?? \"\").length;\n return len >= n\n ? { valid: true, message: \"\" }\n : { valid: false, message: `La longitud debe ser al menos ${n}` };\n },\n\n max: (n: number) => (value: unknown): ValidationResult => {\n const num = toNumber(value);\n if (num !== null) {\n return num <= n\n ? { valid: true, message: \"\" }\n : { valid: false, message: `El valor debe ser menor o igual a ${n}` };\n }\n const len = String(value ?? \"\").length;\n return len <= n\n ? { valid: true, message: \"\" }\n : { valid: false, message: `La longitud debe ser como máximo ${n}` };\n },\n};\n\nexport class Validate {\n private checks: Validator[] = [];\n\n private add(fn: Validator): this {\n this.checks.push(fn);\n return this;\n }\n\n static email(): Validate {\n return new Validate().email();\n }\n\n static onlyNumbers(): Validate {\n return new Validate().onlyNumbers();\n }\n\n static min(n: number): Validate {\n return new Validate().min(n);\n }\n\n static max(n: number): Validate {\n return new Validate().max(n);\n }\n\n email(): this {\n return this.add(validators.email());\n }\n\n onlyNumbers(): this {\n return this.add(validators.onlyNumbers());\n }\n\n min(n: number): this {\n return this.add(validators.min(n));\n }\n\n max(n: number): this {\n return this.add(validators.max(n));\n }\n\n validate(value: unknown): ValidationResult {\n for (const check of this.checks) {\n const result = check(value);\n if (!result.valid) {\n return result;\n }\n }\n return { valid: true, message: \"\" };\n }\n}\n\nexport default Validate;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unicornial-ui",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "style": "./dist/unicornial-ui.css",