@tribepad/themis 1.0.15 → 1.0.17

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.
Files changed (45) hide show
  1. package/dist/elements/ColorPicker/ColorPicker.d.ts +20 -0
  2. package/dist/elements/ColorPicker/ColorPicker.d.ts.map +1 -0
  3. package/dist/elements/ColorPicker/ColorPicker.styles.d.ts +72 -0
  4. package/dist/elements/ColorPicker/ColorPicker.styles.d.ts.map +1 -0
  5. package/dist/elements/ColorPicker/ColorPicker.types.d.ts +113 -0
  6. package/dist/elements/ColorPicker/ColorPicker.types.d.ts.map +1 -0
  7. package/dist/elements/ColorPicker/index.d.ts +5 -0
  8. package/dist/elements/ColorPicker/index.d.ts.map +1 -0
  9. package/dist/elements/ColorPicker/index.js +3 -0
  10. package/dist/elements/ColorPicker/index.js.map +1 -0
  11. package/dist/elements/ColorPicker/index.mjs +3 -0
  12. package/dist/elements/ColorPicker/index.mjs.map +1 -0
  13. package/dist/elements/DatePicker/DatePicker.types.d.ts +6 -6
  14. package/dist/elements/OTPInput/OTPInput.d.ts +1 -1
  15. package/dist/elements/PasswordField/index.js +1 -1
  16. package/dist/elements/PasswordField/index.js.map +1 -1
  17. package/dist/elements/PasswordField/index.mjs +1 -1
  18. package/dist/elements/PasswordField/index.mjs.map +1 -1
  19. package/dist/elements/SearchField/index.js +1 -1
  20. package/dist/elements/SearchField/index.js.map +1 -1
  21. package/dist/elements/SearchField/index.mjs +1 -1
  22. package/dist/elements/SearchField/index.mjs.map +1 -1
  23. package/dist/elements/TextField/TextField.d.ts.map +1 -1
  24. package/dist/elements/TextField/TextField.types.d.ts +2 -0
  25. package/dist/elements/TextField/TextField.types.d.ts.map +1 -1
  26. package/dist/elements/TextField/index.js +1 -1
  27. package/dist/elements/TextField/index.js.map +1 -1
  28. package/dist/elements/TextField/index.mjs +1 -1
  29. package/dist/elements/TextField/index.mjs.map +1 -1
  30. package/dist/elements/index.d.ts +2 -0
  31. package/dist/elements/index.d.ts.map +1 -1
  32. package/dist/elements/index.js +1 -1
  33. package/dist/elements/index.js.map +1 -1
  34. package/dist/elements/index.mjs +1 -1
  35. package/dist/elements/index.mjs.map +1 -1
  36. package/dist/index.js +2 -2
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.mjs +2 -2
  39. package/dist/index.mjs.map +1 -1
  40. package/package.json +9 -7
  41. package/src/elements/ColorPicker/ColorPicker.stories.tsx +289 -0
  42. package/src/elements/Combobox/Combobox.stories.tsx +1 -1
  43. package/src/elements/MatrixGrid/MatrixGrid.stories.tsx +1 -1
  44. package/src/elements/RatingScale/RatingScale.stories.tsx +1 -1
  45. package/src/elements/SituationalJudgement/SituationalJudgement.stories.tsx +1 -1
@@ -0,0 +1,20 @@
1
+ import type { ColorPickerProps } from './ColorPicker.types';
2
+ /**
3
+ * ColorPicker Component
4
+ *
5
+ * Supports three modes:
6
+ * - "swatch": Preset color grid only
7
+ * - "advanced": Full picker (ColorArea + hue slider) only
8
+ * - "both": Swatch grid with expandable advanced section
9
+ *
10
+ * @example
11
+ * <ColorPicker label="Brand Color" mode="both" defaultValue="#7c3aed" />
12
+ *
13
+ * @example
14
+ * <ColorPicker mode="swatch" colors={['#ff0000', '#00ff00', '#0000ff']} />
15
+ */
16
+ export declare function ColorPicker({ mode, size, value, defaultValue, label, description, errorMessage, colors, isDisabled, isRequired, isInvalid, isReadOnly, name, onChange, onChangeEnd, className, id, 'aria-label': ariaLabel, 'data-testid': dataTestId, }: ColorPickerProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare namespace ColorPicker {
18
+ var displayName: string;
19
+ }
20
+ //# sourceMappingURL=ColorPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.d.ts","sourceRoot":"","sources":["../../../src/elements/ColorPicker/ColorPicker.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAkB5D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAa,EACb,IAAgB,EAChB,KAAK,EACL,YAAwB,EACxB,KAAK,EACL,WAAW,EACX,YAAY,EACZ,MAAM,EACN,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,UAAkB,EAClB,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,SAAS,EACT,EAAE,EACF,YAAY,EAAE,SAAS,EACvB,aAAa,EAAE,UAAU,GAC1B,EAAE,gBAAgB,2CA8LlB;yBAlNe,WAAW"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * ColorPicker CVA Variant Styles
3
+ *
4
+ * Styling for ColorPicker sub-elements using class-variance-authority.
5
+ * Matches Themis input patterns for visual consistency.
6
+ */
7
+ /**
8
+ * Container for the entire ColorPicker component
9
+ */
10
+ export declare const colorPickerContainerVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
11
+ /**
12
+ * Label styling - matches TextField label pattern
13
+ */
14
+ export declare const colorPickerLabelVariants: (props?: ({
15
+ state?: "default" | "error" | "disabled" | null | undefined;
16
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
17
+ /**
18
+ * Description/helper text styling
19
+ */
20
+ export declare const colorPickerDescriptionVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
21
+ /**
22
+ * Error message styling
23
+ */
24
+ export declare const colorPickerErrorVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
25
+ /**
26
+ * Hex input row container (field + preview swatch)
27
+ */
28
+ export declare const colorInputRowVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
29
+ /**
30
+ * Hex color input field - matches TextField input styles
31
+ */
32
+ export declare const colorInputVariants: (props?: ({
33
+ size?: "default" | "sm" | "lg" | null | undefined;
34
+ state?: "default" | "readonly" | "error" | "disabled" | null | undefined;
35
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
36
+ /**
37
+ * Color preview swatch next to the hex input
38
+ */
39
+ export declare const colorPreviewVariants: (props?: ({
40
+ size?: "default" | "sm" | "lg" | null | undefined;
41
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
42
+ /**
43
+ * ColorArea (2D saturation/brightness picker)
44
+ */
45
+ export declare const colorAreaVariants: (props?: ({
46
+ size?: "default" | "sm" | "lg" | null | undefined;
47
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
48
+ /**
49
+ * Color thumb (draggable handle on area/slider)
50
+ */
51
+ export declare const colorThumbVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
52
+ /**
53
+ * Hue slider track
54
+ */
55
+ export declare const colorSliderTrackVariants: (props?: ({
56
+ size?: "default" | "sm" | "lg" | null | undefined;
57
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
58
+ /**
59
+ * Swatch grid container
60
+ */
61
+ export declare const colorSwatchGridVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
62
+ /**
63
+ * Individual swatch item in the grid
64
+ */
65
+ export declare const colorSwatchItemVariants: (props?: ({
66
+ size?: "default" | "sm" | "lg" | null | undefined;
67
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
68
+ /**
69
+ * Disclosure toggle button for expanding advanced section
70
+ */
71
+ export declare const disclosureToggleVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
72
+ //# sourceMappingURL=ColorPicker.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.styles.d.ts","sourceRoot":"","sources":["../../../src/elements/ColorPicker/ColorPicker.styles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,eAAO,MAAM,4BAA4B,oFAExC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB;;8EAcpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,oFAE1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,oFAEpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,oFAEjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;8EAqB9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;8EAchC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;8EAc7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,oFAE9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB;;8EAcpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,oFAEnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB;;8EAcnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,oFAEpC,CAAC"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * ColorPicker Component Types
3
+ *
4
+ * Zod schemas and TypeScript types for the ColorPicker component.
5
+ * Supports three modes: swatch-only, advanced-only, and combined.
6
+ *
7
+ * @see React Aria ColorPicker: https://react-aria.adobe.com/ColorPicker
8
+ * @see React Aria ColorSwatchPicker: https://react-aria.adobe.com/ColorSwatchPicker
9
+ */
10
+ import { z } from 'zod';
11
+ import type { Color } from 'react-aria-components';
12
+ /**
13
+ * Default swatch palette when no `colors` prop is provided.
14
+ */
15
+ export declare const DEFAULT_COLORS: string[];
16
+ /**
17
+ * Operating modes for the ColorPicker.
18
+ * - 'swatch': Preset color grid only
19
+ * - 'advanced': Full picker (ColorArea + hue slider) only
20
+ * - 'both': Swatch grid with expandable advanced section
21
+ */
22
+ export type ColorPickerMode = 'swatch' | 'advanced' | 'both';
23
+ /**
24
+ * Size variants for the ColorPicker.
25
+ */
26
+ export type ColorPickerSize = 'sm' | 'default' | 'lg';
27
+ export declare const ColorPickerModeSchema: z.ZodEnum<{
28
+ both: "both";
29
+ swatch: "swatch";
30
+ advanced: "advanced";
31
+ }>;
32
+ export declare const ColorPickerSizeSchema: z.ZodEnum<{
33
+ default: "default";
34
+ sm: "sm";
35
+ lg: "lg";
36
+ }>;
37
+ /**
38
+ * Zod schema for ColorPicker props validation.
39
+ * Used for contract tests and developer guardrails, not runtime validation.
40
+ */
41
+ export declare const ColorPickerPropsSchema: z.ZodObject<{
42
+ mode: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
43
+ both: "both";
44
+ swatch: "swatch";
45
+ advanced: "advanced";
46
+ }>>>;
47
+ size: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
48
+ default: "default";
49
+ sm: "sm";
50
+ lg: "lg";
51
+ }>>>;
52
+ value: z.ZodOptional<z.ZodString>;
53
+ defaultValue: z.ZodDefault<z.ZodOptional<z.ZodString>>;
54
+ label: z.ZodOptional<z.ZodString>;
55
+ description: z.ZodOptional<z.ZodString>;
56
+ errorMessage: z.ZodOptional<z.ZodString>;
57
+ colors: z.ZodOptional<z.ZodArray<z.ZodString>>;
58
+ isDisabled: z.ZodOptional<z.ZodBoolean>;
59
+ isRequired: z.ZodOptional<z.ZodBoolean>;
60
+ isInvalid: z.ZodOptional<z.ZodBoolean>;
61
+ isReadOnly: z.ZodOptional<z.ZodBoolean>;
62
+ name: z.ZodOptional<z.ZodString>;
63
+ onChange: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
64
+ onChangeEnd: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
65
+ className: z.ZodOptional<z.ZodString>;
66
+ id: z.ZodOptional<z.ZodString>;
67
+ 'aria-label': z.ZodOptional<z.ZodString>;
68
+ 'data-testid': z.ZodOptional<z.ZodString>;
69
+ }, z.core.$strip>;
70
+ /**
71
+ * Props for the ColorPicker component.
72
+ */
73
+ export interface ColorPickerProps {
74
+ /** Which picker UI to display (default: "both") */
75
+ mode?: ColorPickerMode;
76
+ /** Size variant (default: "default") */
77
+ size?: ColorPickerSize;
78
+ /** Controlled hex color value (e.g. "#ff0000") */
79
+ value?: string;
80
+ /** Uncontrolled initial hex value (default: "#000000") */
81
+ defaultValue?: string;
82
+ /** Label text */
83
+ label?: string;
84
+ /** Helper/description text */
85
+ description?: string;
86
+ /** Error message shown when isInvalid */
87
+ errorMessage?: string;
88
+ /** Array of hex color strings for swatch grid */
89
+ colors?: string[];
90
+ /** Whether the picker is disabled */
91
+ isDisabled?: boolean;
92
+ /** Whether a value is required */
93
+ isRequired?: boolean;
94
+ /** Whether the field is in an invalid state */
95
+ isInvalid?: boolean;
96
+ /** Whether the field is read-only */
97
+ isReadOnly?: boolean;
98
+ /** Name attribute for hidden form input */
99
+ name?: string;
100
+ /** Called when color changes - receives React Aria Color object */
101
+ onChange?: (color: Color) => void;
102
+ /** Called when drag interaction ends on area/slider */
103
+ onChangeEnd?: (color: Color) => void;
104
+ /** Additional CSS classes */
105
+ className?: string;
106
+ /** Component id */
107
+ id?: string;
108
+ /** Accessible label */
109
+ 'aria-label'?: string;
110
+ /** Test id */
111
+ 'data-testid'?: string;
112
+ }
113
+ //# sourceMappingURL=ColorPicker.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.types.d.ts","sourceRoot":"","sources":["../../../src/elements/ColorPicker/ColorPicker.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAMnD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,EAIlC,CAAC;AAMF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;AAMtD,eAAO,MAAM,qBAAqB;;;;EAAyC,CAAC;AAC5E,eAAO,MAAM,qBAAqB;;;;EAAkC,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwDjC,CAAC;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,wCAAwC;IACxC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kCAAkC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,uDAAuD;IACvD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACrC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,5 @@
1
+ export { ColorPicker } from './ColorPicker';
2
+ export { ColorPickerPropsSchema, ColorPickerModeSchema, ColorPickerSizeSchema, DEFAULT_COLORS, } from './ColorPicker.types';
3
+ export type { ColorPickerProps, ColorPickerMode, ColorPickerSize, } from './ColorPicker.types';
4
+ export { colorPickerContainerVariants, colorPickerLabelVariants, colorPickerDescriptionVariants, colorPickerErrorVariants, colorInputRowVariants, colorInputVariants, colorPreviewVariants, colorAreaVariants, colorThumbVariants, colorSliderTrackVariants, colorSwatchGridVariants, colorSwatchItemVariants, disclosureToggleVariants, } from './ColorPicker.styles';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ColorPicker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var react=require('react'),reactAriaComponents=require('react-aria-components'),lucideReact=require('lucide-react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),zod=require('zod'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime');function e(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var C=["#000000","#434343","#666666","#999999","#b7b7b7","#cccccc","#d9d9d9","#efefef","#f3f3f3","#ffffff","#980000","#ff0000","#ff9900","#ffff00","#00ff00","#00ffff","#4a86e8","#0000ff","#9900ff","#ff00ff","#e6b8af","#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d0e0e3","#c9daf8","#cfe2f3","#d9d2e9","#ead1dc"],H=zod.z.enum(["swatch","advanced","both"]),U=zod.z.enum(["sm","default","lg"]),fr=zod.z.object({mode:H.optional().default("both"),size:U.optional().default("default"),value:zod.z.string().optional(),defaultValue:zod.z.string().optional().default("#000000"),label:zod.z.string().optional(),description:zod.z.string().optional(),errorMessage:zod.z.string().optional(),colors:zod.z.array(zod.z.string()).optional(),isDisabled:zod.z.boolean().optional(),isRequired:zod.z.boolean().optional(),isInvalid:zod.z.boolean().optional(),isReadOnly:zod.z.boolean().optional(),name:zod.z.string().optional(),onChange:zod.z.function().optional(),onChangeEnd:zod.z.function().optional(),className:zod.z.string().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"data-testid":zod.z.string().optional()});var x=classVarianceAuthority.cva("flex flex-col gap-2"),k=classVarianceAuthority.cva("text-sm font-medium leading-none",{variants:{state:{default:"text-[var(--content-foreground)]",error:"text-[var(--destructive-foreground)]",disabled:"opacity-50 cursor-not-allowed"}},defaultVariants:{state:"default"}}),w=classVarianceAuthority.cva("text-sm text-[var(--content-foreground)]"),P=classVarianceAuthority.cva("text-sm text-[var(--destructive-foreground)] font-medium mt-1"),V=classVarianceAuthority.cva("flex items-center gap-2"),S=classVarianceAuthority.cva("flex w-full rounded-md border bg-[var(--content-background)] shadow-xs px-3 py-2 text-sm ring-offset-[var(--content-background)] font-mono uppercase placeholder:text-[var(--menu-muted)] transition-all duration-200",{variants:{size:{sm:"h-9 text-xs px-2 py-1",default:"h-10 px-3 py-2",lg:"h-11 px-4 py-3 text-base"},state:{default:"border-[var(--input-border)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",error:"border-[var(--destructive-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive-background)] focus-visible:ring-offset-2",disabled:"cursor-not-allowed opacity-50",readonly:"cursor-default bg-[var(--content-background)] opacity-70"}},defaultVariants:{size:"default",state:"default"}}),A=classVarianceAuthority.cva("rounded-md border border-[var(--input-border)] shrink-0",{variants:{size:{sm:"h-9 w-9",default:"h-10 w-10",lg:"h-11 w-11"}},defaultVariants:{size:"default"}}),y=classVarianceAuthority.cva("w-full rounded-md border border-[var(--input-border)]",{variants:{size:{sm:"h-32",default:"h-40",lg:"h-48"}},defaultVariants:{size:"default"}}),f=classVarianceAuthority.cva("h-5 w-5 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.3),inset_0_0_0_1px_rgba(0,0,0,0.3)] data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2"),N=classVarianceAuthority.cva("w-full rounded-full border border-[var(--input-border)]",{variants:{size:{sm:"h-4",default:"h-5",lg:"h-6"}},defaultVariants:{size:"default"}}),I=classVarianceAuthority.cva("flex flex-wrap gap-1.5"),T=classVarianceAuthority.cva("relative rounded-md cursor-pointer data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2 data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed",{variants:{size:{sm:"h-6 w-6",default:"h-8 w-8",lg:"h-10 w-10"}},defaultVariants:{size:"default"}}),z=classVarianceAuthority.cva("flex items-center gap-1.5 text-sm text-[var(--primary-action)] hover:text-[var(--primary-action-hover)] cursor-pointer bg-transparent border-none p-0 font-medium transition-colors duration-150 data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2 rounded-sm");function B({mode:t="both",size:c="default",value:u,defaultValue:p="#000000",label:m,description:_,errorMessage:b,colors:E,isDisabled:i=false,isRequired:O=false,isInvalid:s=false,isReadOnly:g=false,name:R,onChange:D,onChangeEnd:J,className:K,id:Q,"aria-label":W,"data-testid":X}){let Y=react.useId(),h=Q||Y,M=`${h}-advanced`,F=`${h}-error`,[v,Z]=react.useState(false),[rr,or]=react.useState(u||p),er=react.useMemo(()=>i?"disabled":s?"error":"default",[i,s]),ar=react.useMemo(()=>i?"disabled":g?"readonly":s?"error":"default",[i,g,s]),tr=react.useMemo(()=>E||C,[E]),G=react.useMemo(()=>{try{return u?reactAriaComponents.parseColor(u):void 0}catch{return}},[u]),ir=react.useMemo(()=>{try{return reactAriaComponents.parseColor(p)}catch{return reactAriaComponents.parseColor("#000000")}},[p]),nr=react.useCallback(n=>{or(n.toString("hex")),D?.(n);},[D]),sr=t==="swatch"||t==="both",lr=t==="advanced"||t==="both",cr=t==="both";return jsxRuntime.jsxs("div",{className:e(x(),K),id:h,"data-testid":X,children:[jsxRuntime.jsxs(reactAriaComponents.ColorPicker,{value:G,defaultValue:G?void 0:ir,onChange:nr,children:[m&&jsxRuntime.jsxs(reactAriaComponents.Label,{className:e(k({state:er})),children:[m,O&&jsxRuntime.jsx("span",{className:"ml-1 text-[var(--destructive-background)]","aria-hidden":"true",children:jsxRuntime.jsx("strong",{children:"*"})})]}),_&&jsxRuntime.jsx("p",{className:e(w()),children:_}),jsxRuntime.jsxs("div",{className:e(V()),children:[jsxRuntime.jsx(reactAriaComponents.ColorField,{"aria-label":W||m||"Color value",isDisabled:i,isReadOnly:g,className:"flex-1",children:jsxRuntime.jsx(reactAriaComponents.Input,{className:e(S({size:c,state:ar})),"aria-errormessage":s&&b?F:void 0,"aria-required":O?true:void 0})}),jsxRuntime.jsx(reactAriaComponents.ColorSwatch,{className:e(A({size:c})),"aria-label":"Selected color preview"})]}),sr&&jsxRuntime.jsx(reactAriaComponents.ColorSwatchPicker,{className:e(I()),"aria-label":"Color swatches",children:tr.map(n=>jsxRuntime.jsx(reactAriaComponents.ColorSwatchPickerItem,{color:n,className:e(T({size:c})),children:jsxRuntime.jsx(reactAriaComponents.ColorSwatch,{className:"h-full w-full rounded-md data-[selected]:ring-2 data-[selected]:ring-[var(--ring)] data-[selected]:ring-offset-2"})},n))}),cr&&jsxRuntime.jsxs("button",{type:"button",className:e(z()),onClick:()=>Z(n=>!n),"aria-expanded":v,"aria-controls":M,disabled:i,children:[jsxRuntime.jsx(lucideReact.ChevronDown,{className:e("h-4 w-4 transition-transform duration-200",v&&"rotate-180")}),"Custom color"]}),lr&&(t==="advanced"||v)&&jsxRuntime.jsxs("div",{id:M,role:"group","aria-label":"Custom color picker",className:"flex flex-col gap-2",children:[jsxRuntime.jsx(reactAriaComponents.ColorArea,{colorSpace:"hsb",xChannel:"saturation",yChannel:"brightness",className:e(y({size:c})),isDisabled:i,children:jsxRuntime.jsx(reactAriaComponents.ColorThumb,{className:e(f())})}),jsxRuntime.jsx(reactAriaComponents.ColorSlider,{colorSpace:"hsb",channel:"hue",isDisabled:i,onChangeEnd:J,"aria-label":"Hue",children:jsxRuntime.jsx(reactAriaComponents.SliderTrack,{className:e(N({size:c})),children:jsxRuntime.jsx(reactAriaComponents.ColorThumb,{className:e(f())})})})]})]}),s&&b&&jsxRuntime.jsx("p",{id:F,className:e(P()),role:"alert",children:b}),R&&jsxRuntime.jsx("input",{type:"hidden",name:R,value:rr})]})}B.displayName="ColorPicker";exports.ColorPicker=B;exports.ColorPickerModeSchema=H;exports.ColorPickerPropsSchema=fr;exports.ColorPickerSizeSchema=U;exports.DEFAULT_COLORS=C;exports.colorAreaVariants=y;exports.colorInputRowVariants=V;exports.colorInputVariants=S;exports.colorPickerContainerVariants=x;exports.colorPickerDescriptionVariants=w;exports.colorPickerErrorVariants=P;exports.colorPickerLabelVariants=k;exports.colorPreviewVariants=A;exports.colorSliderTrackVariants=N;exports.colorSwatchGridVariants=I;exports.colorSwatchItemVariants=T;exports.colorThumbVariants=f;exports.disclosureToggleVariants=z;//# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/cn.ts","../../../src/elements/ColorPicker/ColorPicker.types.ts","../../../src/elements/ColorPicker/ColorPicker.styles.ts","../../../src/elements/ColorPicker/ColorPicker.tsx"],"names":["cn","inputs","twMerge","clsx","DEFAULT_COLORS","ColorPickerModeSchema","z","ColorPickerSizeSchema","ColorPickerPropsSchema","colorPickerContainerVariants","cva","colorPickerLabelVariants","colorPickerDescriptionVariants","colorPickerErrorVariants","colorInputRowVariants","colorInputVariants","colorPreviewVariants","colorAreaVariants","colorThumbVariants","colorSliderTrackVariants","colorSwatchGridVariants","colorSwatchItemVariants","disclosureToggleVariants","ColorPicker","mode","size","value","defaultValue","label","description","errorMessage","colors","isDisabled","isRequired","isInvalid","isReadOnly","name","onChange","onChangeEnd","className","id","ariaLabel","dataTestId","generatedId","useId","pickerId","advancedSectionId","errorId","isAdvancedOpen","setIsAdvancedOpen","useState","currentHex","setCurrentHex","labelState","useMemo","inputState","swatchColors","parsedValue","parseColor","parsedDefaultValue","handleChange","useCallback","color","showSwatch","showAdvanced","showDisclosure","jsxs","AriaColorPicker","AriaLabel","jsx","AriaColorField","AriaInput","AriaColorSwatch","AriaColorSwatchPicker","AriaColorSwatchPickerItem","prev","ChevronDown","AriaColorArea","AriaColorThumb","AriaColorSlider","AriaSliderTrack"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * ColorPicker Component Types\n *\n * Zod schemas and TypeScript types for the ColorPicker component.\n * Supports three modes: swatch-only, advanced-only, and combined.\n *\n * @see React Aria ColorPicker: https://react-aria.adobe.com/ColorPicker\n * @see React Aria ColorSwatchPicker: https://react-aria.adobe.com/ColorSwatchPicker\n */\n\nimport { z } from 'zod';\nimport type { Color } from 'react-aria-components';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default swatch palette when no `colors` prop is provided.\n */\nexport const DEFAULT_COLORS: string[] = [\n '#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#efefef', '#f3f3f3', '#ffffff',\n '#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff',\n '#e6b8af', '#f4cccc', '#fce5cd', '#fff2cc', '#d9ead3', '#d0e0e3', '#c9daf8', '#cfe2f3', '#d9d2e9', '#ead1dc',\n];\n\n// ============================================================================\n// Mode & Size Types\n// ============================================================================\n\n/**\n * Operating modes for the ColorPicker.\n * - 'swatch': Preset color grid only\n * - 'advanced': Full picker (ColorArea + hue slider) only\n * - 'both': Swatch grid with expandable advanced section\n */\nexport type ColorPickerMode = 'swatch' | 'advanced' | 'both';\n\n/**\n * Size variants for the ColorPicker.\n */\nexport type ColorPickerSize = 'sm' | 'default' | 'lg';\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\nexport const ColorPickerModeSchema = z.enum(['swatch', 'advanced', 'both']);\nexport const ColorPickerSizeSchema = z.enum(['sm', 'default', 'lg']);\n\n/**\n * Zod schema for ColorPicker props validation.\n * Used for contract tests and developer guardrails, not runtime validation.\n */\nexport const ColorPickerPropsSchema = z.object({\n // Mode\n /** Which picker UI to display */\n mode: ColorPickerModeSchema.optional().default('both'),\n\n // Size\n /** Size variant for inputs and swatches */\n size: ColorPickerSizeSchema.optional().default('default'),\n\n // Value\n /** Controlled hex color value (e.g. \"#ff0000\") */\n value: z.string().optional(),\n /** Uncontrolled initial hex value */\n defaultValue: z.string().optional().default('#000000'),\n\n // Display\n /** Label text */\n label: z.string().optional(),\n /** Helper/description text */\n description: z.string().optional(),\n /** Error message shown when isInvalid */\n errorMessage: z.string().optional(),\n\n // Swatch colors\n /** Array of hex color strings for swatch grid */\n colors: z.array(z.string()).optional(),\n\n // State\n /** Whether the picker is disabled */\n isDisabled: z.boolean().optional(),\n /** Whether a value is required */\n isRequired: z.boolean().optional(),\n /** Whether the field is in an invalid state */\n isInvalid: z.boolean().optional(),\n /** Whether the field is read-only */\n isReadOnly: z.boolean().optional(),\n\n // Form integration\n /** Name attribute for hidden form input */\n name: z.string().optional(),\n\n // Events (as Zod functions for schema validation)\n /** Called when color changes */\n onChange: z.function().optional(),\n /** Called when drag interaction ends on area/slider */\n onChangeEnd: z.function().optional(),\n\n // Standard props\n /** Additional CSS classes */\n className: z.string().optional(),\n /** Component id */\n id: z.string().optional(),\n /** Accessible label */\n 'aria-label': z.string().optional(),\n /** Test id */\n 'data-testid': z.string().optional(),\n});\n\n// ============================================================================\n// TypeScript Types\n// ============================================================================\n\n/**\n * Props for the ColorPicker component.\n */\nexport interface ColorPickerProps {\n /** Which picker UI to display (default: \"both\") */\n mode?: ColorPickerMode;\n /** Size variant (default: \"default\") */\n size?: ColorPickerSize;\n /** Controlled hex color value (e.g. \"#ff0000\") */\n value?: string;\n /** Uncontrolled initial hex value (default: \"#000000\") */\n defaultValue?: string;\n /** Label text */\n label?: string;\n /** Helper/description text */\n description?: string;\n /** Error message shown when isInvalid */\n errorMessage?: string;\n /** Array of hex color strings for swatch grid */\n colors?: string[];\n /** Whether the picker is disabled */\n isDisabled?: boolean;\n /** Whether a value is required */\n isRequired?: boolean;\n /** Whether the field is in an invalid state */\n isInvalid?: boolean;\n /** Whether the field is read-only */\n isReadOnly?: boolean;\n /** Name attribute for hidden form input */\n name?: string;\n /** Called when color changes - receives React Aria Color object */\n onChange?: (color: Color) => void;\n /** Called when drag interaction ends on area/slider */\n onChangeEnd?: (color: Color) => void;\n /** Additional CSS classes */\n className?: string;\n /** Component id */\n id?: string;\n /** Accessible label */\n 'aria-label'?: string;\n /** Test id */\n 'data-testid'?: string;\n}\n","/**\n * ColorPicker CVA Variant Styles\n *\n * Styling for ColorPicker sub-elements using class-variance-authority.\n * Matches Themis input patterns for visual consistency.\n */\n\nimport { cva } from 'class-variance-authority';\n\n/**\n * Container for the entire ColorPicker component\n */\nexport const colorPickerContainerVariants = cva(\n \"flex flex-col gap-2\",\n);\n\n/**\n * Label styling - matches TextField label pattern\n */\nexport const colorPickerLabelVariants = cva(\n \"text-sm font-medium leading-none\",\n {\n variants: {\n state: {\n default: \"text-[var(--content-foreground)]\",\n error: \"text-[var(--destructive-foreground)]\",\n disabled: \"opacity-50 cursor-not-allowed\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n);\n\n/**\n * Description/helper text styling\n */\nexport const colorPickerDescriptionVariants = cva(\n \"text-sm text-[var(--content-foreground)]\"\n);\n\n/**\n * Error message styling\n */\nexport const colorPickerErrorVariants = cva(\n \"text-sm text-[var(--destructive-foreground)] font-medium mt-1\"\n);\n\n/**\n * Hex input row container (field + preview swatch)\n */\nexport const colorInputRowVariants = cva(\n \"flex items-center gap-2\",\n);\n\n/**\n * Hex color input field - matches TextField input styles\n */\nexport const colorInputVariants = cva(\n \"flex w-full rounded-md border bg-[var(--content-background)] shadow-xs px-3 py-2 text-sm ring-offset-[var(--content-background)] font-mono uppercase placeholder:text-[var(--menu-muted)] transition-all duration-200\",\n {\n variants: {\n size: {\n sm: \"h-9 text-xs px-2 py-1\",\n default: \"h-10 px-3 py-2\",\n lg: \"h-11 px-4 py-3 text-base\",\n },\n state: {\n default: \"border-[var(--input-border)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2\",\n error: \"border-[var(--destructive-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive-background)] focus-visible:ring-offset-2\",\n disabled: \"cursor-not-allowed opacity-50\",\n readonly: \"cursor-default bg-[var(--content-background)] opacity-70\",\n },\n },\n defaultVariants: {\n size: \"default\",\n state: \"default\",\n },\n }\n);\n\n/**\n * Color preview swatch next to the hex input\n */\nexport const colorPreviewVariants = cva(\n \"rounded-md border border-[var(--input-border)] shrink-0\",\n {\n variants: {\n size: {\n sm: \"h-9 w-9\",\n default: \"h-10 w-10\",\n lg: \"h-11 w-11\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\n/**\n * ColorArea (2D saturation/brightness picker)\n */\nexport const colorAreaVariants = cva(\n \"w-full rounded-md border border-[var(--input-border)]\",\n {\n variants: {\n size: {\n sm: \"h-32\",\n default: \"h-40\",\n lg: \"h-48\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\n/**\n * Color thumb (draggable handle on area/slider)\n */\nexport const colorThumbVariants = cva(\n \"h-5 w-5 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.3),inset_0_0_0_1px_rgba(0,0,0,0.3)] data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2\",\n);\n\n/**\n * Hue slider track\n */\nexport const colorSliderTrackVariants = cva(\n \"w-full rounded-full border border-[var(--input-border)]\",\n {\n variants: {\n size: {\n sm: \"h-4\",\n default: \"h-5\",\n lg: \"h-6\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\n/**\n * Swatch grid container\n */\nexport const colorSwatchGridVariants = cva(\n \"flex flex-wrap gap-1.5\",\n);\n\n/**\n * Individual swatch item in the grid\n */\nexport const colorSwatchItemVariants = cva(\n \"relative rounded-md cursor-pointer data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2 data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed\",\n {\n variants: {\n size: {\n sm: \"h-6 w-6\",\n default: \"h-8 w-8\",\n lg: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\n/**\n * Disclosure toggle button for expanding advanced section\n */\nexport const disclosureToggleVariants = cva(\n \"flex items-center gap-1.5 text-sm text-[var(--primary-action)] hover:text-[var(--primary-action-hover)] cursor-pointer bg-transparent border-none p-0 font-medium transition-colors duration-150 data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2 rounded-sm\",\n);\n","'use client';\n\n/**\n * ColorPicker Component\n *\n * Accessible color selection with swatch presets, advanced picker, or both.\n * Built on React Aria ColorPicker and ColorSwatchPicker primitives.\n *\n * @see React Aria ColorPicker: https://react-aria.adobe.com/ColorPicker\n * @see React Aria ColorSwatchPicker: https://react-aria.adobe.com/ColorSwatchPicker\n */\n\nimport { useState, useId, useMemo, useCallback } from 'react';\nimport {\n ColorPicker as AriaColorPicker,\n ColorArea as AriaColorArea,\n ColorSlider as AriaColorSlider,\n ColorField as AriaColorField,\n ColorSwatch as AriaColorSwatch,\n ColorSwatchPicker as AriaColorSwatchPicker,\n ColorSwatchPickerItem as AriaColorSwatchPickerItem,\n ColorThumb as AriaColorThumb,\n SliderTrack as AriaSliderTrack,\n Input as AriaInput,\n Label as AriaLabel,\n parseColor,\n type Color,\n} from 'react-aria-components';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport type { ColorPickerProps } from './ColorPicker.types';\nimport { DEFAULT_COLORS } from './ColorPicker.types';\nimport {\n colorPickerContainerVariants,\n colorPickerLabelVariants,\n colorPickerDescriptionVariants,\n colorPickerErrorVariants,\n colorInputRowVariants,\n colorInputVariants,\n colorPreviewVariants,\n colorAreaVariants,\n colorThumbVariants,\n colorSliderTrackVariants,\n colorSwatchGridVariants,\n colorSwatchItemVariants,\n disclosureToggleVariants,\n} from './ColorPicker.styles';\n\n/**\n * ColorPicker Component\n *\n * Supports three modes:\n * - \"swatch\": Preset color grid only\n * - \"advanced\": Full picker (ColorArea + hue slider) only\n * - \"both\": Swatch grid with expandable advanced section\n *\n * @example\n * <ColorPicker label=\"Brand Color\" mode=\"both\" defaultValue=\"#7c3aed\" />\n *\n * @example\n * <ColorPicker mode=\"swatch\" colors={['#ff0000', '#00ff00', '#0000ff']} />\n */\nexport function ColorPicker({\n mode = 'both',\n size = 'default',\n value,\n defaultValue = '#000000',\n label,\n description,\n errorMessage,\n colors,\n isDisabled = false,\n isRequired = false,\n isInvalid = false,\n isReadOnly = false,\n name,\n onChange,\n onChangeEnd,\n className,\n id,\n 'aria-label': ariaLabel,\n 'data-testid': dataTestId,\n}: ColorPickerProps) {\n const generatedId = useId();\n const pickerId = id || generatedId;\n const advancedSectionId = `${pickerId}-advanced`;\n const errorId = `${pickerId}-error`;\n\n // Disclosure state for \"both\" mode\n const [isAdvancedOpen, setIsAdvancedOpen] = useState(false);\n\n // Track current color for hidden form input\n const [currentHex, setCurrentHex] = useState(value || defaultValue);\n\n // Determine label state\n const labelState = useMemo(() => {\n if (isDisabled) return 'disabled' as const;\n if (isInvalid) return 'error' as const;\n return 'default' as const;\n }, [isDisabled, isInvalid]);\n\n // Determine input state\n const inputState = useMemo(() => {\n if (isDisabled) return 'disabled' as const;\n if (isReadOnly) return 'readonly' as const;\n if (isInvalid) return 'error' as const;\n return 'default' as const;\n }, [isDisabled, isReadOnly, isInvalid]);\n\n // Swatch colors to use\n const swatchColors = useMemo(() => colors || DEFAULT_COLORS, [colors]);\n\n // Parse the initial color value\n const parsedValue = useMemo(() => {\n try {\n return value ? parseColor(value) : undefined;\n } catch {\n return undefined;\n }\n }, [value]);\n\n const parsedDefaultValue = useMemo(() => {\n try {\n return parseColor(defaultValue);\n } catch {\n return parseColor('#000000');\n }\n }, [defaultValue]);\n\n const handleChange = useCallback((color: Color) => {\n setCurrentHex(color.toString('hex'));\n onChange?.(color);\n }, [onChange]);\n\n const showSwatch = mode === 'swatch' || mode === 'both';\n const showAdvanced = mode === 'advanced' || mode === 'both';\n const showDisclosure = mode === 'both';\n\n return (\n <div\n className={cn(colorPickerContainerVariants(), className)}\n id={pickerId}\n data-testid={dataTestId}\n >\n <AriaColorPicker\n value={parsedValue}\n defaultValue={parsedValue ? undefined : parsedDefaultValue}\n onChange={handleChange}\n >\n {/* Label */}\n {label && (\n <AriaLabel className={cn(colorPickerLabelVariants({ state: labelState }))}>\n {label}\n {isRequired && (\n <span className=\"ml-1 text-[var(--destructive-background)]\" aria-hidden=\"true\">\n <strong>*</strong>\n </span>\n )}\n </AriaLabel>\n )}\n\n {/* Description */}\n {description && (\n <p className={cn(colorPickerDescriptionVariants())}>{description}</p>\n )}\n\n {/* Hex input row */}\n <div className={cn(colorInputRowVariants())}>\n <AriaColorField\n aria-label={ariaLabel || label || 'Color value'}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n className=\"flex-1\"\n >\n <AriaInput\n className={cn(colorInputVariants({ size, state: inputState }))}\n aria-errormessage={isInvalid && errorMessage ? errorId : undefined}\n aria-required={isRequired ? true : undefined}\n />\n </AriaColorField>\n <AriaColorSwatch\n className={cn(colorPreviewVariants({ size }))}\n aria-label=\"Selected color preview\"\n />\n </div>\n\n {/* Swatch picker */}\n {showSwatch && (\n <AriaColorSwatchPicker\n className={cn(colorSwatchGridVariants())}\n aria-label=\"Color swatches\"\n >\n {swatchColors.map((color) => (\n <AriaColorSwatchPickerItem\n key={color}\n color={color}\n className={cn(colorSwatchItemVariants({ size }))}\n >\n <AriaColorSwatch\n className=\"h-full w-full rounded-md data-[selected]:ring-2 data-[selected]:ring-[var(--ring)] data-[selected]:ring-offset-2\"\n />\n </AriaColorSwatchPickerItem>\n ))}\n </AriaColorSwatchPicker>\n )}\n\n {/* Disclosure toggle for \"both\" mode */}\n {showDisclosure && (\n <button\n type=\"button\"\n className={cn(disclosureToggleVariants())}\n onClick={() => setIsAdvancedOpen((prev) => !prev)}\n aria-expanded={isAdvancedOpen}\n aria-controls={advancedSectionId}\n disabled={isDisabled}\n >\n <ChevronDown\n className={cn(\n \"h-4 w-4 transition-transform duration-200\",\n isAdvancedOpen && \"rotate-180\"\n )}\n />\n Custom color\n </button>\n )}\n\n {/* Advanced section (ColorArea + hue slider) */}\n {showAdvanced && (mode === 'advanced' || isAdvancedOpen) && (\n <div\n id={advancedSectionId}\n role=\"group\"\n aria-label=\"Custom color picker\"\n className=\"flex flex-col gap-2\"\n >\n <AriaColorArea\n colorSpace=\"hsb\"\n xChannel=\"saturation\"\n yChannel=\"brightness\"\n className={cn(colorAreaVariants({ size }))}\n isDisabled={isDisabled}\n >\n <AriaColorThumb className={cn(colorThumbVariants())} />\n </AriaColorArea>\n\n <AriaColorSlider\n colorSpace=\"hsb\"\n channel=\"hue\"\n isDisabled={isDisabled}\n onChangeEnd={onChangeEnd}\n aria-label=\"Hue\"\n >\n <AriaSliderTrack className={cn(colorSliderTrackVariants({ size }))}>\n <AriaColorThumb className={cn(colorThumbVariants())} />\n </AriaSliderTrack>\n </AriaColorSlider>\n </div>\n )}\n </AriaColorPicker>\n\n {/* Error message */}\n {isInvalid && errorMessage && (\n <p id={errorId} className={cn(colorPickerErrorVariants())} role=\"alert\">\n {errorMessage}\n </p>\n )}\n\n {/* Hidden form input */}\n {name && (\n <input type=\"hidden\" name={name} value={currentHex} />\n )}\n </div>\n );\n}\n\nColorPicker.displayName = 'ColorPicker';\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {useId,useState,useMemo,useCallback}from'react';import {parseColor,ColorPicker,Label,ColorField,Input,ColorSwatch,ColorSwatchPicker,ColorSwatchPickerItem,ColorArea,ColorThumb,ColorSlider,SliderTrack}from'react-aria-components';import {ChevronDown}from'lucide-react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {z as z$1}from'zod';import {cva}from'class-variance-authority';import {jsxs,jsx}from'react/jsx-runtime';function e(...t){return twMerge(clsx(t))}var C=["#000000","#434343","#666666","#999999","#b7b7b7","#cccccc","#d9d9d9","#efefef","#f3f3f3","#ffffff","#980000","#ff0000","#ff9900","#ffff00","#00ff00","#00ffff","#4a86e8","#0000ff","#9900ff","#ff00ff","#e6b8af","#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d0e0e3","#c9daf8","#cfe2f3","#d9d2e9","#ead1dc"],H=z$1.enum(["swatch","advanced","both"]),U=z$1.enum(["sm","default","lg"]),fr=z$1.object({mode:H.optional().default("both"),size:U.optional().default("default"),value:z$1.string().optional(),defaultValue:z$1.string().optional().default("#000000"),label:z$1.string().optional(),description:z$1.string().optional(),errorMessage:z$1.string().optional(),colors:z$1.array(z$1.string()).optional(),isDisabled:z$1.boolean().optional(),isRequired:z$1.boolean().optional(),isInvalid:z$1.boolean().optional(),isReadOnly:z$1.boolean().optional(),name:z$1.string().optional(),onChange:z$1.function().optional(),onChangeEnd:z$1.function().optional(),className:z$1.string().optional(),id:z$1.string().optional(),"aria-label":z$1.string().optional(),"data-testid":z$1.string().optional()});var x=cva("flex flex-col gap-2"),k=cva("text-sm font-medium leading-none",{variants:{state:{default:"text-[var(--content-foreground)]",error:"text-[var(--destructive-foreground)]",disabled:"opacity-50 cursor-not-allowed"}},defaultVariants:{state:"default"}}),w=cva("text-sm text-[var(--content-foreground)]"),P=cva("text-sm text-[var(--destructive-foreground)] font-medium mt-1"),V=cva("flex items-center gap-2"),S=cva("flex w-full rounded-md border bg-[var(--content-background)] shadow-xs px-3 py-2 text-sm ring-offset-[var(--content-background)] font-mono uppercase placeholder:text-[var(--menu-muted)] transition-all duration-200",{variants:{size:{sm:"h-9 text-xs px-2 py-1",default:"h-10 px-3 py-2",lg:"h-11 px-4 py-3 text-base"},state:{default:"border-[var(--input-border)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",error:"border-[var(--destructive-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive-background)] focus-visible:ring-offset-2",disabled:"cursor-not-allowed opacity-50",readonly:"cursor-default bg-[var(--content-background)] opacity-70"}},defaultVariants:{size:"default",state:"default"}}),A=cva("rounded-md border border-[var(--input-border)] shrink-0",{variants:{size:{sm:"h-9 w-9",default:"h-10 w-10",lg:"h-11 w-11"}},defaultVariants:{size:"default"}}),y=cva("w-full rounded-md border border-[var(--input-border)]",{variants:{size:{sm:"h-32",default:"h-40",lg:"h-48"}},defaultVariants:{size:"default"}}),f=cva("h-5 w-5 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.3),inset_0_0_0_1px_rgba(0,0,0,0.3)] data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2"),N=cva("w-full rounded-full border border-[var(--input-border)]",{variants:{size:{sm:"h-4",default:"h-5",lg:"h-6"}},defaultVariants:{size:"default"}}),I=cva("flex flex-wrap gap-1.5"),T=cva("relative rounded-md cursor-pointer data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2 data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed",{variants:{size:{sm:"h-6 w-6",default:"h-8 w-8",lg:"h-10 w-10"}},defaultVariants:{size:"default"}}),z=cva("flex items-center gap-1.5 text-sm text-[var(--primary-action)] hover:text-[var(--primary-action-hover)] cursor-pointer bg-transparent border-none p-0 font-medium transition-colors duration-150 data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2 rounded-sm");function B({mode:t="both",size:c="default",value:u,defaultValue:p="#000000",label:m,description:_,errorMessage:b,colors:E,isDisabled:i=false,isRequired:O=false,isInvalid:s=false,isReadOnly:g=false,name:R,onChange:D,onChangeEnd:J,className:K,id:Q,"aria-label":W,"data-testid":X}){let Y=useId(),h=Q||Y,M=`${h}-advanced`,F=`${h}-error`,[v,Z]=useState(false),[rr,or]=useState(u||p),er=useMemo(()=>i?"disabled":s?"error":"default",[i,s]),ar=useMemo(()=>i?"disabled":g?"readonly":s?"error":"default",[i,g,s]),tr=useMemo(()=>E||C,[E]),G=useMemo(()=>{try{return u?parseColor(u):void 0}catch{return}},[u]),ir=useMemo(()=>{try{return parseColor(p)}catch{return parseColor("#000000")}},[p]),nr=useCallback(n=>{or(n.toString("hex")),D?.(n);},[D]),sr=t==="swatch"||t==="both",lr=t==="advanced"||t==="both",cr=t==="both";return jsxs("div",{className:e(x(),K),id:h,"data-testid":X,children:[jsxs(ColorPicker,{value:G,defaultValue:G?void 0:ir,onChange:nr,children:[m&&jsxs(Label,{className:e(k({state:er})),children:[m,O&&jsx("span",{className:"ml-1 text-[var(--destructive-background)]","aria-hidden":"true",children:jsx("strong",{children:"*"})})]}),_&&jsx("p",{className:e(w()),children:_}),jsxs("div",{className:e(V()),children:[jsx(ColorField,{"aria-label":W||m||"Color value",isDisabled:i,isReadOnly:g,className:"flex-1",children:jsx(Input,{className:e(S({size:c,state:ar})),"aria-errormessage":s&&b?F:void 0,"aria-required":O?true:void 0})}),jsx(ColorSwatch,{className:e(A({size:c})),"aria-label":"Selected color preview"})]}),sr&&jsx(ColorSwatchPicker,{className:e(I()),"aria-label":"Color swatches",children:tr.map(n=>jsx(ColorSwatchPickerItem,{color:n,className:e(T({size:c})),children:jsx(ColorSwatch,{className:"h-full w-full rounded-md data-[selected]:ring-2 data-[selected]:ring-[var(--ring)] data-[selected]:ring-offset-2"})},n))}),cr&&jsxs("button",{type:"button",className:e(z()),onClick:()=>Z(n=>!n),"aria-expanded":v,"aria-controls":M,disabled:i,children:[jsx(ChevronDown,{className:e("h-4 w-4 transition-transform duration-200",v&&"rotate-180")}),"Custom color"]}),lr&&(t==="advanced"||v)&&jsxs("div",{id:M,role:"group","aria-label":"Custom color picker",className:"flex flex-col gap-2",children:[jsx(ColorArea,{colorSpace:"hsb",xChannel:"saturation",yChannel:"brightness",className:e(y({size:c})),isDisabled:i,children:jsx(ColorThumb,{className:e(f())})}),jsx(ColorSlider,{colorSpace:"hsb",channel:"hue",isDisabled:i,onChangeEnd:J,"aria-label":"Hue",children:jsx(SliderTrack,{className:e(N({size:c})),children:jsx(ColorThumb,{className:e(f())})})})]})]}),s&&b&&jsx("p",{id:F,className:e(P()),role:"alert",children:b}),R&&jsx("input",{type:"hidden",name:R,value:rr})]})}B.displayName="ColorPicker";export{B as ColorPicker,H as ColorPickerModeSchema,fr as ColorPickerPropsSchema,U as ColorPickerSizeSchema,C as DEFAULT_COLORS,y as colorAreaVariants,V as colorInputRowVariants,S as colorInputVariants,x as colorPickerContainerVariants,w as colorPickerDescriptionVariants,P as colorPickerErrorVariants,k as colorPickerLabelVariants,A as colorPreviewVariants,N as colorSliderTrackVariants,I as colorSwatchGridVariants,T as colorSwatchItemVariants,f as colorThumbVariants,z as disclosureToggleVariants};//# sourceMappingURL=index.mjs.map
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/cn.ts","../../../src/elements/ColorPicker/ColorPicker.types.ts","../../../src/elements/ColorPicker/ColorPicker.styles.ts","../../../src/elements/ColorPicker/ColorPicker.tsx"],"names":["cn","inputs","twMerge","clsx","DEFAULT_COLORS","ColorPickerModeSchema","z","ColorPickerSizeSchema","ColorPickerPropsSchema","colorPickerContainerVariants","cva","colorPickerLabelVariants","colorPickerDescriptionVariants","colorPickerErrorVariants","colorInputRowVariants","colorInputVariants","colorPreviewVariants","colorAreaVariants","colorThumbVariants","colorSliderTrackVariants","colorSwatchGridVariants","colorSwatchItemVariants","disclosureToggleVariants","ColorPicker","mode","size","value","defaultValue","label","description","errorMessage","colors","isDisabled","isRequired","isInvalid","isReadOnly","name","onChange","onChangeEnd","className","id","ariaLabel","dataTestId","generatedId","useId","pickerId","advancedSectionId","errorId","isAdvancedOpen","setIsAdvancedOpen","useState","currentHex","setCurrentHex","labelState","useMemo","inputState","swatchColors","parsedValue","parseColor","parsedDefaultValue","handleChange","useCallback","color","showSwatch","showAdvanced","showDisclosure","jsxs","AriaColorPicker","AriaLabel","jsx","AriaColorField","AriaInput","AriaColorSwatch","AriaColorSwatchPicker","AriaColorSwatchPickerItem","prev","ChevronDown","AriaColorArea","AriaColorThumb","AriaColorSlider","AriaSliderTrack"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * ColorPicker Component Types\n *\n * Zod schemas and TypeScript types for the ColorPicker component.\n * Supports three modes: swatch-only, advanced-only, and combined.\n *\n * @see React Aria ColorPicker: https://react-aria.adobe.com/ColorPicker\n * @see React Aria ColorSwatchPicker: https://react-aria.adobe.com/ColorSwatchPicker\n */\n\nimport { z } from 'zod';\nimport type { Color } from 'react-aria-components';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default swatch palette when no `colors` prop is provided.\n */\nexport const DEFAULT_COLORS: string[] = [\n '#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#efefef', '#f3f3f3', '#ffffff',\n '#980000', '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#0000ff', '#9900ff', '#ff00ff',\n '#e6b8af', '#f4cccc', '#fce5cd', '#fff2cc', '#d9ead3', '#d0e0e3', '#c9daf8', '#cfe2f3', '#d9d2e9', '#ead1dc',\n];\n\n// ============================================================================\n// Mode & Size Types\n// ============================================================================\n\n/**\n * Operating modes for the ColorPicker.\n * - 'swatch': Preset color grid only\n * - 'advanced': Full picker (ColorArea + hue slider) only\n * - 'both': Swatch grid with expandable advanced section\n */\nexport type ColorPickerMode = 'swatch' | 'advanced' | 'both';\n\n/**\n * Size variants for the ColorPicker.\n */\nexport type ColorPickerSize = 'sm' | 'default' | 'lg';\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\nexport const ColorPickerModeSchema = z.enum(['swatch', 'advanced', 'both']);\nexport const ColorPickerSizeSchema = z.enum(['sm', 'default', 'lg']);\n\n/**\n * Zod schema for ColorPicker props validation.\n * Used for contract tests and developer guardrails, not runtime validation.\n */\nexport const ColorPickerPropsSchema = z.object({\n // Mode\n /** Which picker UI to display */\n mode: ColorPickerModeSchema.optional().default('both'),\n\n // Size\n /** Size variant for inputs and swatches */\n size: ColorPickerSizeSchema.optional().default('default'),\n\n // Value\n /** Controlled hex color value (e.g. \"#ff0000\") */\n value: z.string().optional(),\n /** Uncontrolled initial hex value */\n defaultValue: z.string().optional().default('#000000'),\n\n // Display\n /** Label text */\n label: z.string().optional(),\n /** Helper/description text */\n description: z.string().optional(),\n /** Error message shown when isInvalid */\n errorMessage: z.string().optional(),\n\n // Swatch colors\n /** Array of hex color strings for swatch grid */\n colors: z.array(z.string()).optional(),\n\n // State\n /** Whether the picker is disabled */\n isDisabled: z.boolean().optional(),\n /** Whether a value is required */\n isRequired: z.boolean().optional(),\n /** Whether the field is in an invalid state */\n isInvalid: z.boolean().optional(),\n /** Whether the field is read-only */\n isReadOnly: z.boolean().optional(),\n\n // Form integration\n /** Name attribute for hidden form input */\n name: z.string().optional(),\n\n // Events (as Zod functions for schema validation)\n /** Called when color changes */\n onChange: z.function().optional(),\n /** Called when drag interaction ends on area/slider */\n onChangeEnd: z.function().optional(),\n\n // Standard props\n /** Additional CSS classes */\n className: z.string().optional(),\n /** Component id */\n id: z.string().optional(),\n /** Accessible label */\n 'aria-label': z.string().optional(),\n /** Test id */\n 'data-testid': z.string().optional(),\n});\n\n// ============================================================================\n// TypeScript Types\n// ============================================================================\n\n/**\n * Props for the ColorPicker component.\n */\nexport interface ColorPickerProps {\n /** Which picker UI to display (default: \"both\") */\n mode?: ColorPickerMode;\n /** Size variant (default: \"default\") */\n size?: ColorPickerSize;\n /** Controlled hex color value (e.g. \"#ff0000\") */\n value?: string;\n /** Uncontrolled initial hex value (default: \"#000000\") */\n defaultValue?: string;\n /** Label text */\n label?: string;\n /** Helper/description text */\n description?: string;\n /** Error message shown when isInvalid */\n errorMessage?: string;\n /** Array of hex color strings for swatch grid */\n colors?: string[];\n /** Whether the picker is disabled */\n isDisabled?: boolean;\n /** Whether a value is required */\n isRequired?: boolean;\n /** Whether the field is in an invalid state */\n isInvalid?: boolean;\n /** Whether the field is read-only */\n isReadOnly?: boolean;\n /** Name attribute for hidden form input */\n name?: string;\n /** Called when color changes - receives React Aria Color object */\n onChange?: (color: Color) => void;\n /** Called when drag interaction ends on area/slider */\n onChangeEnd?: (color: Color) => void;\n /** Additional CSS classes */\n className?: string;\n /** Component id */\n id?: string;\n /** Accessible label */\n 'aria-label'?: string;\n /** Test id */\n 'data-testid'?: string;\n}\n","/**\n * ColorPicker CVA Variant Styles\n *\n * Styling for ColorPicker sub-elements using class-variance-authority.\n * Matches Themis input patterns for visual consistency.\n */\n\nimport { cva } from 'class-variance-authority';\n\n/**\n * Container for the entire ColorPicker component\n */\nexport const colorPickerContainerVariants = cva(\n \"flex flex-col gap-2\",\n);\n\n/**\n * Label styling - matches TextField label pattern\n */\nexport const colorPickerLabelVariants = cva(\n \"text-sm font-medium leading-none\",\n {\n variants: {\n state: {\n default: \"text-[var(--content-foreground)]\",\n error: \"text-[var(--destructive-foreground)]\",\n disabled: \"opacity-50 cursor-not-allowed\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n }\n);\n\n/**\n * Description/helper text styling\n */\nexport const colorPickerDescriptionVariants = cva(\n \"text-sm text-[var(--content-foreground)]\"\n);\n\n/**\n * Error message styling\n */\nexport const colorPickerErrorVariants = cva(\n \"text-sm text-[var(--destructive-foreground)] font-medium mt-1\"\n);\n\n/**\n * Hex input row container (field + preview swatch)\n */\nexport const colorInputRowVariants = cva(\n \"flex items-center gap-2\",\n);\n\n/**\n * Hex color input field - matches TextField input styles\n */\nexport const colorInputVariants = cva(\n \"flex w-full rounded-md border bg-[var(--content-background)] shadow-xs px-3 py-2 text-sm ring-offset-[var(--content-background)] font-mono uppercase placeholder:text-[var(--menu-muted)] transition-all duration-200\",\n {\n variants: {\n size: {\n sm: \"h-9 text-xs px-2 py-1\",\n default: \"h-10 px-3 py-2\",\n lg: \"h-11 px-4 py-3 text-base\",\n },\n state: {\n default: \"border-[var(--input-border)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2\",\n error: \"border-[var(--destructive-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive-background)] focus-visible:ring-offset-2\",\n disabled: \"cursor-not-allowed opacity-50\",\n readonly: \"cursor-default bg-[var(--content-background)] opacity-70\",\n },\n },\n defaultVariants: {\n size: \"default\",\n state: \"default\",\n },\n }\n);\n\n/**\n * Color preview swatch next to the hex input\n */\nexport const colorPreviewVariants = cva(\n \"rounded-md border border-[var(--input-border)] shrink-0\",\n {\n variants: {\n size: {\n sm: \"h-9 w-9\",\n default: \"h-10 w-10\",\n lg: \"h-11 w-11\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\n/**\n * ColorArea (2D saturation/brightness picker)\n */\nexport const colorAreaVariants = cva(\n \"w-full rounded-md border border-[var(--input-border)]\",\n {\n variants: {\n size: {\n sm: \"h-32\",\n default: \"h-40\",\n lg: \"h-48\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\n/**\n * Color thumb (draggable handle on area/slider)\n */\nexport const colorThumbVariants = cva(\n \"h-5 w-5 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.3),inset_0_0_0_1px_rgba(0,0,0,0.3)] data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2\",\n);\n\n/**\n * Hue slider track\n */\nexport const colorSliderTrackVariants = cva(\n \"w-full rounded-full border border-[var(--input-border)]\",\n {\n variants: {\n size: {\n sm: \"h-4\",\n default: \"h-5\",\n lg: \"h-6\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\n/**\n * Swatch grid container\n */\nexport const colorSwatchGridVariants = cva(\n \"flex flex-wrap gap-1.5\",\n);\n\n/**\n * Individual swatch item in the grid\n */\nexport const colorSwatchItemVariants = cva(\n \"relative rounded-md cursor-pointer data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2 data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed\",\n {\n variants: {\n size: {\n sm: \"h-6 w-6\",\n default: \"h-8 w-8\",\n lg: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\n/**\n * Disclosure toggle button for expanding advanced section\n */\nexport const disclosureToggleVariants = cva(\n \"flex items-center gap-1.5 text-sm text-[var(--primary-action)] hover:text-[var(--primary-action-hover)] cursor-pointer bg-transparent border-none p-0 font-medium transition-colors duration-150 data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--ring)] data-[focus-visible]:ring-offset-2 rounded-sm\",\n);\n","'use client';\n\n/**\n * ColorPicker Component\n *\n * Accessible color selection with swatch presets, advanced picker, or both.\n * Built on React Aria ColorPicker and ColorSwatchPicker primitives.\n *\n * @see React Aria ColorPicker: https://react-aria.adobe.com/ColorPicker\n * @see React Aria ColorSwatchPicker: https://react-aria.adobe.com/ColorSwatchPicker\n */\n\nimport { useState, useId, useMemo, useCallback } from 'react';\nimport {\n ColorPicker as AriaColorPicker,\n ColorArea as AriaColorArea,\n ColorSlider as AriaColorSlider,\n ColorField as AriaColorField,\n ColorSwatch as AriaColorSwatch,\n ColorSwatchPicker as AriaColorSwatchPicker,\n ColorSwatchPickerItem as AriaColorSwatchPickerItem,\n ColorThumb as AriaColorThumb,\n SliderTrack as AriaSliderTrack,\n Input as AriaInput,\n Label as AriaLabel,\n parseColor,\n type Color,\n} from 'react-aria-components';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport type { ColorPickerProps } from './ColorPicker.types';\nimport { DEFAULT_COLORS } from './ColorPicker.types';\nimport {\n colorPickerContainerVariants,\n colorPickerLabelVariants,\n colorPickerDescriptionVariants,\n colorPickerErrorVariants,\n colorInputRowVariants,\n colorInputVariants,\n colorPreviewVariants,\n colorAreaVariants,\n colorThumbVariants,\n colorSliderTrackVariants,\n colorSwatchGridVariants,\n colorSwatchItemVariants,\n disclosureToggleVariants,\n} from './ColorPicker.styles';\n\n/**\n * ColorPicker Component\n *\n * Supports three modes:\n * - \"swatch\": Preset color grid only\n * - \"advanced\": Full picker (ColorArea + hue slider) only\n * - \"both\": Swatch grid with expandable advanced section\n *\n * @example\n * <ColorPicker label=\"Brand Color\" mode=\"both\" defaultValue=\"#7c3aed\" />\n *\n * @example\n * <ColorPicker mode=\"swatch\" colors={['#ff0000', '#00ff00', '#0000ff']} />\n */\nexport function ColorPicker({\n mode = 'both',\n size = 'default',\n value,\n defaultValue = '#000000',\n label,\n description,\n errorMessage,\n colors,\n isDisabled = false,\n isRequired = false,\n isInvalid = false,\n isReadOnly = false,\n name,\n onChange,\n onChangeEnd,\n className,\n id,\n 'aria-label': ariaLabel,\n 'data-testid': dataTestId,\n}: ColorPickerProps) {\n const generatedId = useId();\n const pickerId = id || generatedId;\n const advancedSectionId = `${pickerId}-advanced`;\n const errorId = `${pickerId}-error`;\n\n // Disclosure state for \"both\" mode\n const [isAdvancedOpen, setIsAdvancedOpen] = useState(false);\n\n // Track current color for hidden form input\n const [currentHex, setCurrentHex] = useState(value || defaultValue);\n\n // Determine label state\n const labelState = useMemo(() => {\n if (isDisabled) return 'disabled' as const;\n if (isInvalid) return 'error' as const;\n return 'default' as const;\n }, [isDisabled, isInvalid]);\n\n // Determine input state\n const inputState = useMemo(() => {\n if (isDisabled) return 'disabled' as const;\n if (isReadOnly) return 'readonly' as const;\n if (isInvalid) return 'error' as const;\n return 'default' as const;\n }, [isDisabled, isReadOnly, isInvalid]);\n\n // Swatch colors to use\n const swatchColors = useMemo(() => colors || DEFAULT_COLORS, [colors]);\n\n // Parse the initial color value\n const parsedValue = useMemo(() => {\n try {\n return value ? parseColor(value) : undefined;\n } catch {\n return undefined;\n }\n }, [value]);\n\n const parsedDefaultValue = useMemo(() => {\n try {\n return parseColor(defaultValue);\n } catch {\n return parseColor('#000000');\n }\n }, [defaultValue]);\n\n const handleChange = useCallback((color: Color) => {\n setCurrentHex(color.toString('hex'));\n onChange?.(color);\n }, [onChange]);\n\n const showSwatch = mode === 'swatch' || mode === 'both';\n const showAdvanced = mode === 'advanced' || mode === 'both';\n const showDisclosure = mode === 'both';\n\n return (\n <div\n className={cn(colorPickerContainerVariants(), className)}\n id={pickerId}\n data-testid={dataTestId}\n >\n <AriaColorPicker\n value={parsedValue}\n defaultValue={parsedValue ? undefined : parsedDefaultValue}\n onChange={handleChange}\n >\n {/* Label */}\n {label && (\n <AriaLabel className={cn(colorPickerLabelVariants({ state: labelState }))}>\n {label}\n {isRequired && (\n <span className=\"ml-1 text-[var(--destructive-background)]\" aria-hidden=\"true\">\n <strong>*</strong>\n </span>\n )}\n </AriaLabel>\n )}\n\n {/* Description */}\n {description && (\n <p className={cn(colorPickerDescriptionVariants())}>{description}</p>\n )}\n\n {/* Hex input row */}\n <div className={cn(colorInputRowVariants())}>\n <AriaColorField\n aria-label={ariaLabel || label || 'Color value'}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n className=\"flex-1\"\n >\n <AriaInput\n className={cn(colorInputVariants({ size, state: inputState }))}\n aria-errormessage={isInvalid && errorMessage ? errorId : undefined}\n aria-required={isRequired ? true : undefined}\n />\n </AriaColorField>\n <AriaColorSwatch\n className={cn(colorPreviewVariants({ size }))}\n aria-label=\"Selected color preview\"\n />\n </div>\n\n {/* Swatch picker */}\n {showSwatch && (\n <AriaColorSwatchPicker\n className={cn(colorSwatchGridVariants())}\n aria-label=\"Color swatches\"\n >\n {swatchColors.map((color) => (\n <AriaColorSwatchPickerItem\n key={color}\n color={color}\n className={cn(colorSwatchItemVariants({ size }))}\n >\n <AriaColorSwatch\n className=\"h-full w-full rounded-md data-[selected]:ring-2 data-[selected]:ring-[var(--ring)] data-[selected]:ring-offset-2\"\n />\n </AriaColorSwatchPickerItem>\n ))}\n </AriaColorSwatchPicker>\n )}\n\n {/* Disclosure toggle for \"both\" mode */}\n {showDisclosure && (\n <button\n type=\"button\"\n className={cn(disclosureToggleVariants())}\n onClick={() => setIsAdvancedOpen((prev) => !prev)}\n aria-expanded={isAdvancedOpen}\n aria-controls={advancedSectionId}\n disabled={isDisabled}\n >\n <ChevronDown\n className={cn(\n \"h-4 w-4 transition-transform duration-200\",\n isAdvancedOpen && \"rotate-180\"\n )}\n />\n Custom color\n </button>\n )}\n\n {/* Advanced section (ColorArea + hue slider) */}\n {showAdvanced && (mode === 'advanced' || isAdvancedOpen) && (\n <div\n id={advancedSectionId}\n role=\"group\"\n aria-label=\"Custom color picker\"\n className=\"flex flex-col gap-2\"\n >\n <AriaColorArea\n colorSpace=\"hsb\"\n xChannel=\"saturation\"\n yChannel=\"brightness\"\n className={cn(colorAreaVariants({ size }))}\n isDisabled={isDisabled}\n >\n <AriaColorThumb className={cn(colorThumbVariants())} />\n </AriaColorArea>\n\n <AriaColorSlider\n colorSpace=\"hsb\"\n channel=\"hue\"\n isDisabled={isDisabled}\n onChangeEnd={onChangeEnd}\n aria-label=\"Hue\"\n >\n <AriaSliderTrack className={cn(colorSliderTrackVariants({ size }))}>\n <AriaColorThumb className={cn(colorThumbVariants())} />\n </AriaSliderTrack>\n </AriaColorSlider>\n </div>\n )}\n </AriaColorPicker>\n\n {/* Error message */}\n {isInvalid && errorMessage && (\n <p id={errorId} className={cn(colorPickerErrorVariants())} role=\"alert\">\n {errorMessage}\n </p>\n )}\n\n {/* Hidden form input */}\n {name && (\n <input type=\"hidden\" name={name} value={currentHex} />\n )}\n </div>\n );\n}\n\nColorPicker.displayName = 'ColorPicker';\n"]}
@@ -141,16 +141,18 @@ export declare const DateRangePickerPropsSchema: z.ZodObject<{
141
141
  left: "left";
142
142
  right: "right";
143
143
  }>>;
144
- isReadOnly: z.ZodOptional<z.ZodBoolean>;
145
- isInvalid: z.ZodOptional<z.ZodBoolean>;
146
- isRequired: z.ZodOptional<z.ZodBoolean>;
147
144
  description: z.ZodOptional<z.ZodString>;
145
+ errorMessage: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>]>>;
146
+ isRequired: z.ZodOptional<z.ZodBoolean>;
147
+ isInvalid: z.ZodOptional<z.ZodBoolean>;
148
+ isReadOnly: z.ZodOptional<z.ZodBoolean>;
148
149
  validationBehavior: z.ZodDefault<z.ZodEnum<{
149
150
  native: "native";
150
151
  aria: "aria";
151
152
  }>>;
152
153
  validate: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
153
- errorMessage: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>]>>;
154
+ minValue: z.ZodOptional<z.ZodCustom<DateValue, DateValue>>;
155
+ maxValue: z.ZodOptional<z.ZodCustom<DateValue, DateValue>>;
154
156
  placeholderValue: z.ZodOptional<z.ZodCustom<DateValue, DateValue>>;
155
157
  granularity: z.ZodDefault<z.ZodEnum<{
156
158
  day: "day";
@@ -161,8 +163,6 @@ export declare const DateRangePickerPropsSchema: z.ZodObject<{
161
163
  hourCycle: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<12>, z.ZodLiteral<24>]>>;
162
164
  hideTimeZone: z.ZodOptional<z.ZodBoolean>;
163
165
  shouldForceLeadingZeros: z.ZodOptional<z.ZodBoolean>;
164
- minValue: z.ZodOptional<z.ZodCustom<DateValue, DateValue>>;
165
- maxValue: z.ZodOptional<z.ZodCustom<DateValue, DateValue>>;
166
166
  isDateUnavailable: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
167
167
  firstDayOfWeek: z.ZodOptional<z.ZodEnum<{
168
168
  sun: "sun";
@@ -86,7 +86,7 @@ export declare const OTPInput: import("react").ForwardRefExoticComponent<Omit<{
86
86
  validate?: import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut> | undefined;
87
87
  onFocus?: import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut> | undefined;
88
88
  onBlur?: import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut> | undefined;
89
- }, "type" | "length" | "onFocus" | "onBlur" | "mask" | "onPaste" | "onChange" | "size" | "disabled" | "inputMode" | "validate" | "showSuccess" | "onComplete" | "readOnly"> & {
89
+ }, "type" | "length" | "onFocus" | "onBlur" | "mask" | "onPaste" | "onChange" | "size" | "disabled" | "inputMode" | "validate" | "readOnly" | "showSuccess" | "onComplete"> & {
90
90
  length?: number;
91
91
  inputMode?: "numeric" | "text" | "tel";
92
92
  type?: "numeric" | "alphanumeric" | "custom";
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- 'use strict';var react=require('react'),reactAriaComponents=require('react-aria-components'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),lucideReact=require('lucide-react'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime'),zod=require('zod');function u(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var ae="data-[pressed]:scale-[0.97]";var ne="data-[hovered]:shadow-md";var Y="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",j="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground",ie="disabled:pointer-events-none disabled:opacity-50";var le=classVarianceAuthority.cva("inline-flex justify-center min-h-[44px] min-w-[44px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",{variants:{fullWidth:{true:"w-full",false:""},inVerticalGroup:{true:"items-stretch",false:"items-center"}},defaultVariants:{fullWidth:false,inVerticalGroup:false}}),de=classVarianceAuthority.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 relative cursor-pointer",{variants:{variant:{default:"bg-[var(--primary-action)] text-[var(--primary-action-foreground)] shadow-md hover:bg-[var(--primary-action-hover)] data-[pressed]:bg-[var(--primary-action)]/80",destructive:"bg-[var(--destructive-background)] text-[var(--destructive-foreground)] shadow-md hover:bg-[var(--destructive-background)]/90 data-[pressed]:bg-[var(--destructive-background)]/80",outline:"border border-[var(--input-border)] bg-[var(--page-background)] hover:bg-[var(--input-border)] data-[pressed]:bg-[var(--input-border)]",secondary:"bg-[var(--secondary)] text-[var(--secondary-foreground)] shadow-md hover:bg-[var(--secondary)]/80 data-[pressed]:bg-[var(--secondary)]/70",ghost:"hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)] data-[pressed]:bg-[var(--accent)]",link:"text-[var(--text-link)] underline-offset-4 hover:underline data-[pressed]:text-[var(--text-link-hover)]"},fullWidth:{true:"w-full",false:""},visualSize:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3 text-xs",lg:"h-11 rounded-md px-8",icon:"h-10 w-10",dot:"h-5 w-5 rounded-full p-0 min-h-0 min-w-0"},paywall:{true:"!bg-[var(--paywall)] !text-[var(--paywall-foreground)] !shadow-md hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var Le=react.createContext(null);Le.displayName="ButtonGroupContext";function Ae(){return react.useContext(Le)}var Oe=react.createContext(null);Oe.displayName="ButtonGroupItemContext";function ke(){return react.useContext(Oe)}classVarianceAuthority.cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var ze=classVarianceAuthority.cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});classVarianceAuthority.cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var D=react.memo(react.forwardRef(({className:e,buttonVisualClassName:o,variant:r,size:a,visualSize:i,fullWidth:f,loading:n=false,loadingText:x="Loading...",shortcut:g,children:m,isDisabled:l,paywall:d=false,paywallRedirect:A,paywallDescription:ee,onPress:te,..._},S)=>{let G=react.useId(),w=Ae(),P=ke(),T=r??w?.variant??"default",H=a??w?.size,W=l??w?.isDisabled??false,h=w?.orientation==="vertical",O=f||h,k=P?ze({orientation:w?.orientation??"horizontal",position:P.position}):"",E=i??H??"default";return process.env.NODE_ENV!=="production"&&(E==="dot"||E==="icon")&&!_["aria-label"]&&!m&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsxRuntime.jsx(reactAriaComponents.Button,{ref:S,isDisabled:W||n||void 0,"aria-disabled":d?true:void 0,"aria-describedby":d?G:void 0,onPress:F=>{if(d){A&&window.open(A,"_blank","noopener,noreferrer");return}te?.(F);},className:u(le({fullWidth:O,inVerticalGroup:h}),e),..._,children:F=>jsxRuntime.jsxs("span",{className:u(de({variant:T,visualSize:E,paywall:d,fullWidth:O}),k,o,ae,ne,Y,j),"data-pressed":F.isPressed||void 0,children:[n&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsxRuntime.jsx("span",{className:"sr-only","aria-live":"polite",children:x})]}),!n&&m,d&&jsxRuntime.jsx(lucideReact.Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),d&&jsxRuntime.jsxs("span",{id:G,className:"sr-only",children:["Premium feature: ",ee||"Upgrade required to access this feature"]}),F.isFocusVisible&&g&&jsxRuntime.jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:g}),F.isPressed&&jsxRuntime.jsx("span",{className:"absolute inset-0 rounded-[inherit] bg-current opacity-10 motion-safe:animate-in motion-safe:zoom-in-95","aria-hidden":"true"})]})})}));D.displayName="Button";var Be=()=>jsxRuntime.jsxs("svg",{"data-testid":"password-toggle-icon-show",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M1 8s3-5 7-5 7 5 7 5-3 5-7 5-7-5-7-5z"}),jsxRuntime.jsx("circle",{cx:"8",cy:"8",r:"2"})]}),Re=()=>jsxRuntime.jsxs("svg",{"data-testid":"password-toggle-icon-hide",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M10.5 5.5l-5 5"}),jsxRuntime.jsx("path",{d:"M1 8s3-5 7-5c1.5 0 2.8.6 4 1.5M15 8s-1.5 2.5-4 4"}),jsxRuntime.jsx("path",{d:"M3 13l2-2m7-7l2-2"}),jsxRuntime.jsx("circle",{cx:"8",cy:"8",r:"2"})]});var ce=classVarianceAuthority.cva("flex w-full rounded-md border bg-[var(--content-background)] shadow-xs px-3 py-2 text-sm ring-offset-[var(--content-background)] file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[var(--content-foreground)] placeholder:text-[var(--menu-muted)] transition-all duration-200",{variants:{size:{sm:"h-9 text-xs px-2 py-1",default:"h-10 px-3 py-2",lg:"h-11 px-4 py-3 text-base"},state:{default:"border-[var(--input-border)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",error:"border-[var(--destructive-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive-background)] focus-visible:ring-offset-2",success:"border-[var(--success-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--success-ring)] focus-visible:ring-offset-2",disabled:"cursor-not-allowed opacity-50",readonly:"cursor-default bg-[var(--content-background)] opacity-70"}},defaultVariants:{size:"default",state:"default"}}),fe=classVarianceAuthority.cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",{variants:{state:{default:"text-[var(--content-foreground)]",error:"text-[var(--destructive-foreground)]",disabled:"opacity-50 cursor-not-allowed"}},defaultVariants:{state:"default"}}),me=classVarianceAuthority.cva("text-sm text-[var(--content-foreground)]"),Me=classVarianceAuthority.cva("text-sm text-[var(--destructive-foreground)] font-medium mt-1.5"),xe=classVarianceAuthority.cva("text-sm text-[var(--success-foreground)] font-medium mt-1.5");function Ge({expandOnFocus:e,collapsedWidth:o,value:r,defaultValue:a,userOnFocus:i,userOnBlur:f}){let[n,x]=react.useState(false),g=react.useCallback(d=>{e&&x(true),i?.(d);},[e,i]),m=react.useCallback(d=>{e&&d.target.value===""&&x(false),f?.(d);},[e,f]),l=react.useMemo(()=>e?n||(r!==void 0?r!=="":a!==void 0&&a!=="")?"100%":o:void 0,[e,n,r,a,o]);return {handleFocus:g,handleBlur:m,inputWidth:l}}function He({disableCopyPaste:e}){let[o,r]=react.useState(false),[a,i]=react.useState("");react.useEffect(()=>{e&&typeof process<"u"&&process.env.NODE_ENV==="development"&&console.warn("[TextField] Copy/paste prevention should only be used for security-critical fields like password confirmation. This feature can break assistive technology workflows and password managers.");},[e]);let f=react.useCallback(n=>{e&&(n.preventDefault(),r(true),i("Pasting is not allowed in this field. Please type your entry."),setTimeout(()=>{r(false),i("");},400));},[e]);return {isShaking:o,screenReaderMessage:a,handlePaste:f}}function We({type:e,showPasswordToggle:o}){let[r,a]=react.useState(false),i=react.useCallback(()=>{a(n=>!n);},[]),f=react.useMemo(()=>e==="password"&&o&&r?"text":e,[e,o,r]);return {showPassword:r,actualType:f,handlePasswordToggle:i}}var Nt=react.forwardRef(({className:e,state:o="default",children:r,...a},i)=>jsxRuntime.jsx(reactAriaComponents.Label,{ref:i,className:u(fe({state:o}),e),...a,children:r}));Nt.displayName="TextFieldLabel";var Vt=react.forwardRef(({className:e,size:o="default",state:r="default",...a},i)=>jsxRuntime.jsx(reactAriaComponents.Input,{ref:i,className:u(ce({size:o,state:r}),ie,e),...a}));Vt.displayName="TextFieldInput";var Ct=react.forwardRef(({className:e,children:o,...r},a)=>jsxRuntime.jsx(reactAriaComponents.Text,{ref:a,slot:"description",className:u(me(),e),...r,children:o}));Ct.displayName="TextFieldDescription";var je=react.forwardRef(({className:e,children:o,...r},a)=>jsxRuntime.jsx(reactAriaComponents.FieldError,{ref:a,...r,className:u(Me(),e),children:jsxRuntime.jsxs("span",{className:"flex items-center gap-2",role:"alert",children:[jsxRuntime.jsx(lucideReact.CircleAlert,{className:"h-4 w-4"}),o]})}));je.displayName="TextFieldError";var It=react.forwardRef(({className:e,children:o,...r},a)=>jsxRuntime.jsx(reactAriaComponents.Text,{ref:a,slot:"description",className:u(xe(),e),...r,children:o}));It.displayName="TextFieldSuccess";var be=react.forwardRef(({className:e,size:o="default",label:r,description:a,errorMessage:i,successMessage:f,type:n="text",isRequired:x=false,isReadOnly:g=false,isDisabled:m=false,isInvalid:l=false,isValid:d=false,id:A,autoComplete:ee,disableCopyPaste:te=false,pattern:_,patternDescription:S,expandOnFocus:G=false,collapsedWidth:w="200px",prefix:P,suffix:T,prefixSize:H=16,suffixSize:W=16,showPasswordToggle:h,isIconHidden:O=false,onSubmit:k,onClear:E,value:z,defaultValue:$,onFocus:F,onBlur:Xe,...B},Ke)=>{let he=react.useId(),Ze=react.useId(),Je=A||Ze,{handleFocus:Qe,handleBlur:et,inputWidth:tt}=Ge({expandOnFocus:G,collapsedWidth:w,value:z,defaultValue:$,userOnFocus:F,userOnBlur:Xe}),{isShaking:ot,screenReaderMessage:ye,handlePaste:rt}=He({disableCopyPaste:te}),{showPassword:oe,actualType:at,handlePasswordToggle:Te}=We({type:n,showPasswordToggle:h}),b=n==="search",[nt,we]=react.useState($??""),R=z!==void 0,y=R?z:nt,st=react.useCallback(p=>{R||we(p),B.onChange?.(p);},[R,B]),q=react.useCallback(()=>{R||we(""),B.onChange?.(""),E?.();},[R,B,E]),it=react.useCallback(p=>{p.key==="Enter"&&k&&k(y),p.key==="Escape"&&y&&(p.preventDefault(),q());},[y,k,q]),lt=react.useMemo(()=>m?"disabled":g?"readonly":l?"error":d?"success":"default",[m,g,l,d]),dt=react.useMemo(()=>m?"disabled":l?"error":"default",[m,l]),Pe=react.useMemo(()=>a&&S?`${a} ${S}`:a||S,[a,S]),N=react.useMemo(()=>b&&!O&&!P?jsxRuntime.jsx(lucideReact.Search,{className:o==="sm"?"h-3.5 w-3.5":o==="lg"?"h-5 w-5":"h-4 w-4"}):P,[b,O,P,o]),Fe=react.useMemo(()=>{let p={left:12,right:12};if(N){let re=typeof N=="string"?N.length*8+16:H+16;p.left=re;}if(n==="password"&&h)p.right=32;else if(b&&y)p.right=44;else if(T){let re=typeof T=="string"?T.length*8+16:W+16;p.right=re;}return p},[N,P,T,H,W,n,h,b,y]),Se=react.useMemo(()=>n==="password"&&h?jsxRuntime.jsx(D,{variant:"ghost",visualSize:"icon",onPress:Te,"aria-label":oe?"Hide password":"Show password",className:"!min-h-0 !min-w-0 h-8 w-8",children:oe?jsxRuntime.jsx(Re,{}):jsxRuntime.jsx(Be,{})}):b&&y?jsxRuntime.jsx(D,{variant:"ghost",visualSize:"icon",onPress:q,"aria-label":"Clear search",className:"!min-h-0 !min-w-0 h-8 w-8",children:jsxRuntime.jsx(lucideReact.X,{className:o==="sm"?"h-3 w-3":o==="lg"?"h-5 w-5":"h-4 w-4"})}):T,[n,h,oe,T,Te,b,y,o,q]),Ee=n==="password"&&h||b&&!!y;return jsxRuntime.jsxs(reactAriaComponents.TextField,{ref:Ke,className:u("flex flex-col gap-1.5",e),isRequired:x,isReadOnly:g,isDisabled:m,isInvalid:l,value:b?y:z,defaultValue:b?void 0:$,onChange:b?st:void 0,...B,children:[r&&jsxRuntime.jsxs(reactAriaComponents.Label,{className:u(fe({state:dt})),children:[r,x&&jsxRuntime.jsx("span",{className:"ml-1 text-[var(--destructive-background)]","aria-hidden":"true",children:jsxRuntime.jsx("strong",{children:"*"})})]}),Pe&&jsxRuntime.jsx(reactAriaComponents.Text,{slot:"description",className:u(me()),children:Pe}),jsxRuntime.jsxs("div",{className:"relative flex items-center motion-safe:transition-all motion-safe:duration-200",style:{width:tt},children:[N&&jsxRuntime.jsx("div",{"data-testid":"textfield-prefix",className:"absolute left-3 flex items-center justify-center pointer-events-none text-[var(--content-foreground)]","aria-hidden":"true",children:N}),jsxRuntime.jsx(reactAriaComponents.Input,{type:at,id:Je,className:u(ce({size:o,state:lt}),ie,ot&&"shake"),style:{width:"100%",paddingLeft:`${Fe.left}px`,paddingRight:`${Fe.right}px`},autoComplete:ee,pattern:_,onPaste:rt,onFocus:Qe,onBlur:et,onKeyDown:b?it:void 0,"aria-required":x?"true":void 0,"aria-readonly":g?"true":void 0,"aria-errormessage":l&&i?he:void 0}),Se&&jsxRuntime.jsx("div",{"data-testid":"textfield-suffix",className:u("absolute right-3 flex items-center justify-center text-[var(--content-foreground)]",Ee?"":"pointer-events-none"),"aria-hidden":Ee?void 0:"true",children:Se})]}),d&&f&&!l&&jsxRuntime.jsx(reactAriaComponents.Text,{slot:"description",className:u(xe()),children:f}),l&&i&&jsxRuntime.jsx(je,{id:he,children:i}),ye&&jsxRuntime.jsx("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:ye})]})});be.displayName="TextField";var Ue=react.forwardRef(({label:e,description:o,errorMessage:r,successMessage:a,hasToggle:i=true,autoComplete:f="current-password","aria-label":n,"aria-labelledby":x,...g},m)=>{process.env.NODE_ENV!=="production"&&!e&&!n&&!x&&console.warn("[PasswordField] Either label, aria-label, or aria-labelledby is required for accessibility (WCAG 1.1.1)");let l=!!r;return jsxRuntime.jsx(be,{ref:m,type:"password",showPasswordToggle:i,autoComplete:f,label:e,description:l?void 0:o,errorMessage:r,successMessage:l?void 0:a,isInvalid:l,isValid:!!a&&!l,"aria-label":e?void 0:n,"aria-labelledby":x,...g})});Ue.displayName="PasswordField";var J=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var ve=zod.z.enum(["off","on","name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","email","username","new-password","current-password","one-time-code","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-extension","impp","url","photo"]),Ot=[/\(\.\*\)\+/,/\(\.\+\)\+/,/\([^)]*\)\{.*,.*\}/,/\(\?!\)/,/\(\?<=\)/],kt=e=>{for(let r of Ot)if(r.test(e))return false;return !((e.match(/[*+{}]/g)||[]).length>5)};J.extend({size:zod.z.enum(["sm","default","lg"]).optional().default("default"),label:zod.z.string().optional(),description:zod.z.string().optional(),errorMessage:zod.z.string().optional(),successMessage:zod.z.string().optional(),type:zod.z.enum(["text","email","password","url","search"]).optional().default("text"),isRequired:zod.z.boolean().optional(),isReadOnly:zod.z.boolean().optional(),isDisabled:zod.z.boolean().optional(),isInvalid:zod.z.boolean().optional(),isValid:zod.z.boolean().optional(),placeholder:zod.z.string().optional(),value:zod.z.string().optional(),defaultValue:zod.z.string().optional(),name:zod.z.string().optional(),autoFocus:zod.z.boolean().optional(),autoComplete:ve.optional(),maxLength:zod.z.number().optional(),minLength:zod.z.number().optional(),pattern:zod.z.string().optional(),patternDescription:zod.z.string().optional(),disableCopyPaste:zod.z.boolean().optional().default(false),prefix:zod.z.any().optional(),suffix:zod.z.any().optional(),prefixSize:zod.z.number().optional().default(16),suffixSize:zod.z.number().optional().default(16),expandOnFocus:zod.z.boolean().optional().default(false),collapsedWidth:zod.z.string().optional().default("200px"),showPasswordToggle:zod.z.boolean().optional(),isIconHidden:zod.z.boolean().optional().default(false),onSubmit:zod.z.custom().optional(),onClear:zod.z.custom().optional()}).refine(e=>!e.pattern||e.patternDescription,{message:"patternDescription is required when pattern is provided",path:["patternDescription"]}).refine(e=>!e.pattern||kt(e.pattern),{message:"Unsafe regex pattern detected. Pattern may cause ReDoS vulnerability. Avoid patterns like (.*)+, (.+)+, or excessive quantifiers.",path:["pattern"]}).refine(e=>!(e.successMessage&&e.errorMessage),{message:"Cannot provide both successMessage and errorMessage. Use one based on validation state.",path:["successMessage"]}).refine(e=>(typeof process<"u"&&process.env.NODE_ENV==="development"&&e.isValid&&e.isInvalid&&console.error("[TextField] Both isValid and isInvalid are true. isInvalid takes precedence."),true));zod.z.object({children:zod.z.any().optional(),className:zod.z.string().optional(),htmlFor:zod.z.string().optional(),state:zod.z.enum(["default","error","disabled"]).optional().default("default")});zod.z.object({className:zod.z.string().optional(),size:zod.z.enum(["sm","default","lg"]).optional().default("default"),state:zod.z.enum(["default","error","success","disabled","readonly"]).optional().default("default")});zod.z.object({children:zod.z.any().optional(),className:zod.z.string().optional()});zod.z.object({children:zod.z.any().optional(),className:zod.z.string().optional()});zod.z.object({children:zod.z.any().optional(),className:zod.z.string().optional()});var zt=J.extend({size:zod.z.enum(["sm","default","lg"]).optional().default("default"),label:zod.z.string().optional(),description:zod.z.string().optional(),errorMessage:zod.z.string().optional(),successMessage:zod.z.string().optional(),isRequired:zod.z.boolean().optional(),isReadOnly:zod.z.boolean().optional(),isDisabled:zod.z.boolean().optional(),placeholder:zod.z.string().optional(),value:zod.z.string().optional(),defaultValue:zod.z.string().optional(),name:zod.z.string().optional(),autoComplete:ve.optional(),hasToggle:zod.z.boolean().optional().default(true),onChange:zod.z.custom().optional()});var Bt=classVarianceAuthority.cva("group flex flex-col gap-1.5 w-full",{variants:{size:{sm:"",default:"",lg:""}},defaultVariants:{size:"default"}}),Rt=classVarianceAuthority.cva("text-[var(--text-primary)] font-medium",{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),Dt=classVarianceAuthority.cva("text-[var(--muted-foreground)]",{variants:{size:{sm:"text-xs",default:"text-xs",lg:"text-sm"}},defaultVariants:{size:"default"}}),Mt=classVarianceAuthority.cva("text-[var(--destructive-background)]",{variants:{size:{sm:"text-xs",default:"text-xs",lg:"text-sm"}},defaultVariants:{size:"default"}});exports.PasswordField=Ue;exports.PasswordFieldPropsSchema=zt;exports.passwordFieldDescriptionVariants=Dt;exports.passwordFieldErrorVariants=Mt;exports.passwordFieldLabelVariants=Rt;exports.passwordFieldVariants=Bt;//# sourceMappingURL=index.js.map
2
+ 'use strict';var react=require('react'),reactAriaComponents=require('react-aria-components'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),lucideReact=require('lucide-react'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime'),zod=require('zod');function p(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var ae="data-[pressed]:scale-[0.97]";var ne="data-[hovered]:shadow-md";var q="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",j="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground",ie="disabled:pointer-events-none disabled:opacity-50";var le=classVarianceAuthority.cva("inline-flex justify-center min-h-[44px] min-w-[44px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",{variants:{fullWidth:{true:"w-full",false:""},inVerticalGroup:{true:"items-stretch",false:"items-center"}},defaultVariants:{fullWidth:false,inVerticalGroup:false}}),de=classVarianceAuthority.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 relative cursor-pointer",{variants:{variant:{default:"bg-[var(--primary-action)] text-[var(--primary-action-foreground)] shadow-md hover:bg-[var(--primary-action-hover)] data-[pressed]:bg-[var(--primary-action)]/80",destructive:"bg-[var(--destructive-background)] text-[var(--destructive-foreground)] shadow-md hover:bg-[var(--destructive-background)]/90 data-[pressed]:bg-[var(--destructive-background)]/80",outline:"border border-[var(--input-border)] bg-[var(--page-background)] hover:bg-[var(--input-border)] data-[pressed]:bg-[var(--input-border)]",secondary:"bg-[var(--secondary)] text-[var(--secondary-foreground)] shadow-md hover:bg-[var(--secondary)]/80 data-[pressed]:bg-[var(--secondary)]/70",ghost:"hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)] data-[pressed]:bg-[var(--accent)]",link:"text-[var(--text-link)] underline-offset-4 hover:underline data-[pressed]:text-[var(--text-link-hover)]"},fullWidth:{true:"w-full",false:""},visualSize:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3 text-xs",lg:"h-11 rounded-md px-8",icon:"h-10 w-10",dot:"h-5 w-5 rounded-full p-0 min-h-0 min-w-0"},paywall:{true:"!bg-[var(--paywall)] !text-[var(--paywall-foreground)] !shadow-md hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var Le=react.createContext(null);Le.displayName="ButtonGroupContext";function Ae(){return react.useContext(Le)}var Oe=react.createContext(null);Oe.displayName="ButtonGroupItemContext";function ke(){return react.useContext(Oe)}classVarianceAuthority.cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var ze=classVarianceAuthority.cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});classVarianceAuthority.cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var R=react.memo(react.forwardRef(({className:t,buttonVisualClassName:o,variant:r,size:a,visualSize:i,fullWidth:u,loading:l=false,loadingText:d="Loading...",shortcut:b,children:x,isDisabled:c,paywall:s=false,paywallRedirect:P,paywallDescription:J,onPress:Q,..._},ee)=>{let F=react.useId(),S=Ae(),G=ke(),N=r??S?.variant??"default",w=a??S?.size,H=c??S?.isDisabled??false,O=S?.orientation==="vertical",h=u||O,W=G?ze({orientation:S?.orientation??"horizontal",position:G.position}):"",E=i??w??"default";return process.env.NODE_ENV!=="production"&&(E==="dot"||E==="icon")&&!_["aria-label"]&&!x&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsxRuntime.jsx(reactAriaComponents.Button,{ref:ee,isDisabled:H||l||void 0,"aria-disabled":s?true:void 0,"aria-describedby":s?F:void 0,onPress:y=>{if(s){P&&window.open(P,"_blank","noopener,noreferrer");return}Q?.(y);},className:p(le({fullWidth:h,inVerticalGroup:O}),t),..._,children:y=>jsxRuntime.jsxs("span",{className:p(de({variant:N,visualSize:E,paywall:s,fullWidth:h}),W,o,ae,ne,q,j),"data-pressed":y.isPressed||void 0,children:[l&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsxRuntime.jsx("span",{className:"sr-only","aria-live":"polite",children:d})]}),!l&&x,s&&jsxRuntime.jsx(lucideReact.Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),s&&jsxRuntime.jsxs("span",{id:F,className:"sr-only",children:["Premium feature: ",J||"Upgrade required to access this feature"]}),y.isFocusVisible&&b&&jsxRuntime.jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:b}),y.isPressed&&jsxRuntime.jsx("span",{className:"absolute inset-0 rounded-[inherit] bg-current opacity-10 motion-safe:animate-in motion-safe:zoom-in-95","aria-hidden":"true"})]})})}));R.displayName="Button";var Be=()=>jsxRuntime.jsxs("svg",{"data-testid":"password-toggle-icon-show",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M1 8s3-5 7-5 7 5 7 5-3 5-7 5-7-5-7-5z"}),jsxRuntime.jsx("circle",{cx:"8",cy:"8",r:"2"})]}),Re=()=>jsxRuntime.jsxs("svg",{"data-testid":"password-toggle-icon-hide",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("path",{d:"M10.5 5.5l-5 5"}),jsxRuntime.jsx("path",{d:"M1 8s3-5 7-5c1.5 0 2.8.6 4 1.5M15 8s-1.5 2.5-4 4"}),jsxRuntime.jsx("path",{d:"M3 13l2-2m7-7l2-2"}),jsxRuntime.jsx("circle",{cx:"8",cy:"8",r:"2"})]});var ce=classVarianceAuthority.cva("flex w-full rounded-md border bg-[var(--content-background)] shadow-xs px-3 py-2 text-sm ring-offset-[var(--content-background)] file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[var(--content-foreground)] placeholder:text-[var(--menu-muted)] transition-all duration-200",{variants:{size:{sm:"h-9 text-xs px-2 py-1",default:"h-10 px-3 py-2",lg:"h-11 px-4 py-3 text-base"},state:{default:"border-[var(--input-border)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",error:"border-[var(--destructive-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive-background)] focus-visible:ring-offset-2",success:"border-[var(--success-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--success-ring)] focus-visible:ring-offset-2",disabled:"cursor-not-allowed opacity-50",readonly:"cursor-default bg-[var(--content-background)] opacity-70"}},defaultVariants:{size:"default",state:"default"}}),fe=classVarianceAuthority.cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",{variants:{state:{default:"text-[var(--content-foreground)]",error:"text-[var(--destructive-foreground)]",disabled:"opacity-50 cursor-not-allowed"}},defaultVariants:{state:"default"}}),me=classVarianceAuthority.cva("text-sm text-[var(--content-foreground)]"),Me=classVarianceAuthority.cva("text-sm text-[var(--destructive-foreground)] font-medium mt-1.5"),xe=classVarianceAuthority.cva("text-sm text-[var(--success-foreground)] font-medium mt-1.5");function Ge({expandOnFocus:t,collapsedWidth:o,value:r,defaultValue:a,userOnFocus:i,userOnBlur:u}){let[l,d]=react.useState(false),b=react.useCallback(s=>{t&&d(true),i?.(s);},[t,i]),x=react.useCallback(s=>{t&&s.target.value===""&&d(false),u?.(s);},[t,u]),c=react.useMemo(()=>t?l||(r!==void 0?r!=="":a!==void 0&&a!=="")?"100%":o:void 0,[t,l,r,a,o]);return {handleFocus:b,handleBlur:x,inputWidth:c}}function He({disableCopyPaste:t}){let[o,r]=react.useState(false),[a,i]=react.useState("");react.useEffect(()=>{t&&typeof process<"u"&&process.env.NODE_ENV==="development"&&console.warn("[TextField] Copy/paste prevention should only be used for security-critical fields like password confirmation. This feature can break assistive technology workflows and password managers.");},[t]);let u=react.useCallback(l=>{t&&(l.preventDefault(),r(true),i("Pasting is not allowed in this field. Please type your entry."),setTimeout(()=>{r(false),i("");},400));},[t]);return {isShaking:o,screenReaderMessage:a,handlePaste:u}}function We({type:t,showPasswordToggle:o}){let[r,a]=react.useState(false),i=react.useCallback(()=>{a(l=>!l);},[]),u=react.useMemo(()=>t==="password"&&o&&r?"text":t,[t,o,r]);return {showPassword:r,actualType:u,handlePasswordToggle:i}}var Vt=react.forwardRef(({className:t,state:o="default",children:r,...a},i)=>jsxRuntime.jsx(reactAriaComponents.Label,{ref:i,className:p(fe({state:o}),t),...a,children:r}));Vt.displayName="TextFieldLabel";var Ct=react.forwardRef(({className:t,size:o="default",state:r="default",...a},i)=>jsxRuntime.jsx(reactAriaComponents.Input,{ref:i,className:p(ce({size:o,state:r}),ie,t),...a}));Ct.displayName="TextFieldInput";var It=react.forwardRef(({className:t,children:o,...r},a)=>jsxRuntime.jsx(reactAriaComponents.Text,{ref:a,slot:"description",className:p(me(),t),...r,children:o}));It.displayName="TextFieldDescription";var Ye=react.forwardRef(({className:t,children:o,...r},a)=>jsxRuntime.jsx(reactAriaComponents.FieldError,{ref:a,...r,className:p(Me(),t),children:jsxRuntime.jsxs("span",{className:"flex items-center gap-2",role:"alert",children:[jsxRuntime.jsx(lucideReact.CircleAlert,{className:"h-4 w-4"}),o]})}));Ye.displayName="TextFieldError";var Lt=react.forwardRef(({className:t,children:o,...r},a)=>jsxRuntime.jsx(reactAriaComponents.Text,{ref:a,slot:"description",className:p(xe(),t),...r,children:o}));Lt.displayName="TextFieldSuccess";var be=react.forwardRef(({className:t,size:o="default",label:r,labelHint:a,description:i,errorMessage:u,successMessage:l,type:d="text",isRequired:b=false,isReadOnly:x=false,isDisabled:c=false,isInvalid:s=false,isValid:P=false,id:J,autoComplete:Q,disableCopyPaste:_=false,pattern:ee,patternDescription:F,expandOnFocus:S=false,collapsedWidth:G="200px",prefix:N,suffix:w,prefixSize:H=16,suffixSize:O=16,showPasswordToggle:h,isIconHidden:W=false,onSubmit:E,onClear:te,value:k,defaultValue:y,onFocus:Xe,onBlur:Ke,...z},Ze)=>{let he=react.useId(),Je=react.useId(),Qe=J||Je,{handleFocus:et,handleBlur:tt,inputWidth:ot}=Ge({expandOnFocus:S,collapsedWidth:G,value:k,defaultValue:y,userOnFocus:Xe,userOnBlur:Ke}),{isShaking:rt,screenReaderMessage:ye,handlePaste:at}=He({disableCopyPaste:_}),{showPassword:oe,actualType:nt,handlePasswordToggle:Te}=We({type:d,showPasswordToggle:h}),g=d==="search",[st,we]=react.useState(y??""),B=k!==void 0,T=B?k:st,it=react.useCallback(f=>{B||we(f),z.onChange?.(f);},[B,z]),$=react.useCallback(()=>{B||we(""),z.onChange?.(""),te?.();},[B,z,te]),lt=react.useCallback(f=>{f.key==="Enter"&&E&&E(T),f.key==="Escape"&&T&&(f.preventDefault(),$());},[T,E,$]),dt=react.useMemo(()=>c?"disabled":x?"readonly":s?"error":P?"success":"default",[c,x,s,P]),pt=react.useMemo(()=>c?"disabled":s?"error":"default",[c,s]),Pe=react.useMemo(()=>i&&F?`${i} ${F}`:i||F,[i,F]),V=react.useMemo(()=>g&&!W&&!N?jsxRuntime.jsx(lucideReact.Search,{className:o==="sm"?"h-3.5 w-3.5":o==="lg"?"h-5 w-5":"h-4 w-4"}):N,[g,W,N,o]),Fe=react.useMemo(()=>{let f={left:12,right:12};if(V){let re=typeof V=="string"?V.length*8+16:H+16;f.left=re;}if(d==="password"&&h)f.right=32;else if(g&&T)f.right=44;else if(w){let re=typeof w=="string"?w.length*8+16:O+16;f.right=re;}return f},[V,N,w,H,O,d,h,g,T]),Se=react.useMemo(()=>d==="password"&&h?jsxRuntime.jsx(R,{variant:"ghost",visualSize:"icon",onPress:Te,"aria-label":oe?"Hide password":"Show password",className:"!min-h-0 !min-w-0 h-8 w-8",children:oe?jsxRuntime.jsx(Re,{}):jsxRuntime.jsx(Be,{})}):g&&T?jsxRuntime.jsx(R,{variant:"ghost",visualSize:"icon",onPress:$,"aria-label":"Clear search",className:"!min-h-0 !min-w-0 h-8 w-8",children:jsxRuntime.jsx(lucideReact.X,{className:o==="sm"?"h-3 w-3":o==="lg"?"h-5 w-5":"h-4 w-4"})}):w,[d,h,oe,w,Te,g,T,o,$]),Ee=d==="password"&&h||g&&!!T;return jsxRuntime.jsxs(reactAriaComponents.TextField,{ref:Ze,className:p("flex flex-col gap-1.5",t),isRequired:b,isReadOnly:x,isDisabled:c,isInvalid:s,value:g?T:k,defaultValue:g?void 0:y,onChange:g?it:void 0,...z,children:[r&&jsxRuntime.jsxs(reactAriaComponents.Label,{className:p(fe({state:pt}),a&&"flex items-baseline justify-between"),children:[jsxRuntime.jsxs("span",{children:[r,b&&jsxRuntime.jsx("span",{className:"ml-1 text-[var(--destructive-background)]","aria-hidden":"true",children:jsxRuntime.jsx("strong",{children:"*"})})]}),a&&jsxRuntime.jsx("span",{className:"text-xs font-normal text-[var(--muted-foreground)]",children:a})]}),Pe&&jsxRuntime.jsx(reactAriaComponents.Text,{slot:"description",className:p(me()),children:Pe}),jsxRuntime.jsxs("div",{className:"relative flex items-center motion-safe:transition-all motion-safe:duration-200",style:{width:ot},children:[V&&jsxRuntime.jsx("div",{"data-testid":"textfield-prefix",className:"absolute left-3 flex items-center justify-center pointer-events-none text-[var(--content-foreground)]","aria-hidden":"true",children:V}),jsxRuntime.jsx(reactAriaComponents.Input,{type:nt,id:Qe,className:p(ce({size:o,state:dt}),ie,rt&&"shake"),style:{width:"100%",paddingLeft:`${Fe.left}px`,paddingRight:`${Fe.right}px`},autoComplete:Q,pattern:ee,onPaste:at,onFocus:et,onBlur:tt,onKeyDown:g?lt:void 0,"aria-required":b?"true":void 0,"aria-readonly":x?"true":void 0,"aria-errormessage":s&&u?he:void 0}),Se&&jsxRuntime.jsx("div",{"data-testid":"textfield-suffix",className:p("absolute right-3 flex items-center justify-center text-[var(--content-foreground)]",Ee?"":"pointer-events-none"),"aria-hidden":Ee?void 0:"true",children:Se})]}),P&&l&&!s&&jsxRuntime.jsx(reactAriaComponents.Text,{slot:"description",className:p(xe()),children:l}),s&&u&&jsxRuntime.jsx(Ye,{id:he,children:u}),ye&&jsxRuntime.jsx("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:ye})]})});be.displayName="TextField";var Ue=react.forwardRef(({label:t,description:o,errorMessage:r,successMessage:a,hasToggle:i=true,autoComplete:u="current-password","aria-label":l,"aria-labelledby":d,...b},x)=>{process.env.NODE_ENV!=="production"&&!t&&!l&&!d&&console.warn("[PasswordField] Either label, aria-label, or aria-labelledby is required for accessibility (WCAG 1.1.1)");let c=!!r;return jsxRuntime.jsx(be,{ref:x,type:"password",showPasswordToggle:i,autoComplete:u,label:t,description:c?void 0:o,errorMessage:r,successMessage:c?void 0:a,isInvalid:c,isValid:!!a&&!c,"aria-label":t?void 0:l,"aria-labelledby":d,...b})});Ue.displayName="PasswordField";var K=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var ve=zod.z.enum(["off","on","name","honorific-prefix","given-name","additional-name","family-name","honorific-suffix","nickname","email","username","new-password","current-password","one-time-code","organization-title","organization","street-address","address-line1","address-line2","address-line3","address-level4","address-level3","address-level2","address-level1","country","country-name","postal-code","cc-name","cc-given-name","cc-additional-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type","transaction-currency","transaction-amount","language","bday","bday-day","bday-month","bday-year","sex","tel","tel-country-code","tel-national","tel-area-code","tel-local","tel-extension","impp","url","photo"]),kt=[/\(\.\*\)\+/,/\(\.\+\)\+/,/\([^)]*\)\{.*,.*\}/,/\(\?!\)/,/\(\?<=\)/],zt=t=>{for(let r of kt)if(r.test(t))return false;return !((t.match(/[*+{}]/g)||[]).length>5)};K.extend({size:zod.z.enum(["sm","default","lg"]).optional().default("default"),label:zod.z.string().optional(),labelHint:zod.z.string().optional(),description:zod.z.string().optional(),errorMessage:zod.z.string().optional(),successMessage:zod.z.string().optional(),type:zod.z.enum(["text","email","password","url","search"]).optional().default("text"),isRequired:zod.z.boolean().optional(),isReadOnly:zod.z.boolean().optional(),isDisabled:zod.z.boolean().optional(),isInvalid:zod.z.boolean().optional(),isValid:zod.z.boolean().optional(),placeholder:zod.z.string().optional(),value:zod.z.string().optional(),defaultValue:zod.z.string().optional(),name:zod.z.string().optional(),autoFocus:zod.z.boolean().optional(),autoComplete:ve.optional(),maxLength:zod.z.number().optional(),minLength:zod.z.number().optional(),pattern:zod.z.string().optional(),patternDescription:zod.z.string().optional(),disableCopyPaste:zod.z.boolean().optional().default(false),prefix:zod.z.any().optional(),suffix:zod.z.any().optional(),prefixSize:zod.z.number().optional().default(16),suffixSize:zod.z.number().optional().default(16),expandOnFocus:zod.z.boolean().optional().default(false),collapsedWidth:zod.z.string().optional().default("200px"),showPasswordToggle:zod.z.boolean().optional(),isIconHidden:zod.z.boolean().optional().default(false),onSubmit:zod.z.custom().optional(),onClear:zod.z.custom().optional()}).refine(t=>!t.pattern||t.patternDescription,{message:"patternDescription is required when pattern is provided",path:["patternDescription"]}).refine(t=>!t.pattern||zt(t.pattern),{message:"Unsafe regex pattern detected. Pattern may cause ReDoS vulnerability. Avoid patterns like (.*)+, (.+)+, or excessive quantifiers.",path:["pattern"]}).refine(t=>!(t.successMessage&&t.errorMessage),{message:"Cannot provide both successMessage and errorMessage. Use one based on validation state.",path:["successMessage"]}).refine(t=>(typeof process<"u"&&process.env.NODE_ENV==="development"&&t.isValid&&t.isInvalid&&console.error("[TextField] Both isValid and isInvalid are true. isInvalid takes precedence."),true));zod.z.object({children:zod.z.any().optional(),className:zod.z.string().optional(),htmlFor:zod.z.string().optional(),state:zod.z.enum(["default","error","disabled"]).optional().default("default")});zod.z.object({className:zod.z.string().optional(),size:zod.z.enum(["sm","default","lg"]).optional().default("default"),state:zod.z.enum(["default","error","success","disabled","readonly"]).optional().default("default")});zod.z.object({children:zod.z.any().optional(),className:zod.z.string().optional()});zod.z.object({children:zod.z.any().optional(),className:zod.z.string().optional()});zod.z.object({children:zod.z.any().optional(),className:zod.z.string().optional()});var Bt=K.extend({size:zod.z.enum(["sm","default","lg"]).optional().default("default"),label:zod.z.string().optional(),description:zod.z.string().optional(),errorMessage:zod.z.string().optional(),successMessage:zod.z.string().optional(),isRequired:zod.z.boolean().optional(),isReadOnly:zod.z.boolean().optional(),isDisabled:zod.z.boolean().optional(),placeholder:zod.z.string().optional(),value:zod.z.string().optional(),defaultValue:zod.z.string().optional(),name:zod.z.string().optional(),autoComplete:ve.optional(),hasToggle:zod.z.boolean().optional().default(true),onChange:zod.z.custom().optional()});var Rt=classVarianceAuthority.cva("group flex flex-col gap-1.5 w-full",{variants:{size:{sm:"",default:"",lg:""}},defaultVariants:{size:"default"}}),Dt=classVarianceAuthority.cva("text-[var(--text-primary)] font-medium",{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),Mt=classVarianceAuthority.cva("text-[var(--muted-foreground)]",{variants:{size:{sm:"text-xs",default:"text-xs",lg:"text-sm"}},defaultVariants:{size:"default"}}),_t=classVarianceAuthority.cva("text-[var(--destructive-background)]",{variants:{size:{sm:"text-xs",default:"text-xs",lg:"text-sm"}},defaultVariants:{size:"default"}});exports.PasswordField=Ue;exports.PasswordFieldPropsSchema=Bt;exports.passwordFieldDescriptionVariants=Mt;exports.passwordFieldErrorVariants=_t;exports.passwordFieldLabelVariants=Dt;exports.passwordFieldVariants=Rt;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map