@classytic/fluid 0.2.4 → 0.3.3

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 (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -62
  3. package/dist/api-pagination-CJ0vR_w6.d.mts +34 -0
  4. package/dist/api-pagination-DBTE0yk4.mjs +190 -0
  5. package/dist/chunk-DQk6qfdC.mjs +18 -0
  6. package/dist/client/calendar.d.mts +105 -0
  7. package/dist/client/calendar.mjs +202 -0
  8. package/dist/client/core.d.mts +1614 -0
  9. package/dist/client/core.mjs +2779 -0
  10. package/dist/client/error.d.mts +125 -0
  11. package/dist/client/error.mjs +166 -0
  12. package/dist/client/hooks.d.mts +162 -0
  13. package/dist/client/hooks.mjs +447 -0
  14. package/dist/client/table.d.mts +84 -0
  15. package/dist/client/table.mjs +373 -0
  16. package/dist/client/theme.d.mts +6 -0
  17. package/dist/client/theme.mjs +65 -0
  18. package/dist/command.d.mts +134 -0
  19. package/dist/command.mjs +132 -0
  20. package/dist/compact.d.mts +359 -0
  21. package/dist/compact.mjs +892 -0
  22. package/dist/dashboard.d.mts +778 -0
  23. package/dist/dashboard.mjs +1617 -0
  24. package/dist/filter-utils-DqMmy_v-.mjs +72 -0
  25. package/dist/filter-utils-IZ0GtuPo.d.mts +40 -0
  26. package/dist/forms.d.mts +1549 -0
  27. package/dist/forms.mjs +3740 -0
  28. package/dist/index.d.mts +296 -0
  29. package/dist/index.mjs +432 -0
  30. package/dist/layouts.d.mts +215 -0
  31. package/dist/layouts.mjs +460 -0
  32. package/dist/search-context-DR7DBs7S.mjs +19 -0
  33. package/dist/search.d.mts +254 -0
  34. package/dist/search.mjs +523 -0
  35. package/dist/sheet-wrapper-C13Y-Q6w.mjs +211 -0
  36. package/dist/use-base-search-BGgWnWaF.d.mts +35 -0
  37. package/dist/use-debounce-xmZucz5e.mjs +53 -0
  38. package/dist/use-keyboard-shortcut-Bl6YM5Q7.mjs +82 -0
  39. package/dist/use-keyboard-shortcut-_mRCh3QO.d.mts +24 -0
  40. package/dist/use-media-query-BnVNIKT4.mjs +17 -0
  41. package/dist/use-mobile-BX3SQVo2.mjs +20 -0
  42. package/dist/use-scroll-detection-CsgsQYvy.mjs +43 -0
  43. package/dist/utils-CDue7cEt.d.mts +6 -0
  44. package/dist/utils-DQ5SCVoW.mjs +10 -0
  45. package/package.json +85 -45
  46. package/styles.css +2 -2
  47. package/dist/chunk-GUHK2DTW.js +0 -15
  48. package/dist/chunk-GUHK2DTW.js.map +0 -1
  49. package/dist/chunk-H3NFL3GJ.js +0 -57
  50. package/dist/chunk-H3NFL3GJ.js.map +0 -1
  51. package/dist/chunk-J2YRTQE4.js +0 -293
  52. package/dist/chunk-J2YRTQE4.js.map +0 -1
  53. package/dist/compact.d.ts +0 -217
  54. package/dist/compact.js +0 -986
  55. package/dist/compact.js.map +0 -1
  56. package/dist/dashboard.d.ts +0 -387
  57. package/dist/dashboard.js +0 -1032
  58. package/dist/dashboard.js.map +0 -1
  59. package/dist/index.d.ts +0 -2140
  60. package/dist/index.js +0 -6422
  61. package/dist/index.js.map +0 -1
  62. package/dist/layout.d.ts +0 -25
  63. package/dist/layout.js +0 -4
  64. package/dist/layout.js.map +0 -1
  65. package/dist/search.d.ts +0 -172
  66. package/dist/search.js +0 -341
  67. package/dist/search.js.map +0 -1
  68. package/dist/use-base-search-AS5Z3SAy.d.ts +0 -64
  69. package/dist/utils-Cbsgs0XP.d.ts +0 -5
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/compact/field.tsx","../src/components/compact/compact-input.tsx","../src/components/compact/compact-textarea.tsx","../src/components/compact/compact-select.tsx","../src/components/compact/compact-number-input.tsx","../src/components/compact/compact-tag-choice.tsx","../src/components/compact/compact-slug-field.tsx"],"names":["jsx","jsxs","InputGroup","InputGroupAddon","Controller","InputGroupInput","Input","Plus","Fragment","InputGroupButton"],"mappings":"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","file":"compact.js","sourcesContent":["\"use client\";\r\n\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useId,\r\n useMemo,\r\n memo,\r\n ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../../utils\";\r\n\r\ninterface FieldContextValue {\r\n id: string;\r\n disabled: boolean;\r\n invalid: boolean;\r\n}\r\n\r\nconst FieldContext = createContext<FieldContextValue | null>(null);\r\n\r\ninterface FieldRootProps {\r\n children: ReactNode;\r\n className?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\n/**\r\n * Field wrapper — provides context (id, disabled, invalid) and\r\n * top padding so the floating label has room above the border.\r\n */\r\nexport const Root = memo(function FieldRoot({\r\n children,\r\n className,\r\n disabled = false,\r\n invalid = false,\r\n}: FieldRootProps) {\r\n const id = useId();\r\n\r\n const value = useMemo(\r\n () => ({\r\n id,\r\n disabled,\r\n invalid,\r\n }),\r\n [id, disabled, invalid],\r\n );\r\n\r\n return (\r\n <FieldContext.Provider value={value}>\r\n <div className={cn(\"w-full pt-3\", className)}>{children}</div>\r\n </FieldContext.Provider>\r\n );\r\n});\r\n\r\ninterface FieldLabelProps {\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Floating label — sits centered on the top border of\r\n * the nearest `relative` ancestor (the input container).\r\n */\r\nexport const Label = memo(function FieldLabel({\r\n children,\r\n className,\r\n}: FieldLabelProps) {\r\n const ctx = useContext(FieldContext);\r\n return (\r\n <label\r\n htmlFor={ctx?.id}\r\n className={cn(\r\n \"absolute top-0 -translate-y-1/2 left-3 z-10\",\r\n \"bg-card px-1.5\",\r\n \"text-[11px] font-medium leading-tight text-muted-foreground\",\r\n \"pointer-events-none select-none whitespace-nowrap\",\r\n \"transition-colors\",\r\n \"group-focus-within:text-primary\",\r\n ctx?.disabled && \"opacity-60\",\r\n ctx?.invalid && \"text-destructive group-focus-within:text-destructive\",\r\n className,\r\n )}\r\n >\r\n {children}\r\n </label>\r\n );\r\n});\r\n\r\ninterface FieldErrorProps {\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const Error = memo(function FieldError({\r\n children,\r\n className,\r\n}: FieldErrorProps) {\r\n if (!children) return null;\r\n return (\r\n <p className={cn(\"text-[11px] text-destructive mt-1.5 pl-3\", className)}>\r\n {children}\r\n </p>\r\n );\r\n});\r\n\r\ninterface FieldDescriptionProps {\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Helper / description text below the input control.\r\n */\r\nexport const Description = memo(function FieldDescription({\r\n children,\r\n className,\r\n}: FieldDescriptionProps) {\r\n if (!children) return null;\r\n return (\r\n <p className={cn(\"text-[11px] text-muted-foreground mt-1.5 pl-3\", className)}>\r\n {children}\r\n </p>\r\n );\r\n});\r\n\r\ninterface FieldIconProps {\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const Icon = memo(function FieldIcon({\r\n children,\r\n className,\r\n}: FieldIconProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none z-10\",\r\n \"text-muted-foreground\",\r\n className,\r\n )}\r\n >\r\n {children}\r\n </div>\r\n );\r\n});\r\n\r\nexport const Field = {\r\n Root,\r\n Label,\r\n Error,\r\n Description,\r\n Icon,\r\n};\r\n","\"use client\";\r\n\r\nimport { type Ref, type ChangeEvent, type InputHTMLAttributes, type ReactNode } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactInputProps<T extends FieldValues = FieldValues>\r\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\"> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n type?: string;\r\n\r\n // InputGroup addons\r\n addonLeft?: ReactNode;\r\n addonRight?: ReactNode;\r\n\r\n // Styling\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactInput - Enhanced form input with InputGroup support\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - InputGroup support with icons, buttons, and text addons\r\n * - Controller integration for react-hook-form\r\n * - Direct usage without form\r\n */\r\nfunction CompactInput<T extends FieldValues = FieldValues>({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n type = \"text\",\r\n\r\n // InputGroup addons\r\n addonLeft,\r\n addonRight,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n // Valid HTML input attributes\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n max,\r\n min,\r\n pattern,\r\n readOnly,\r\n step,\r\n inputMode,\r\n enterKeyHint,\r\n ref,\r\n ...props\r\n}: CompactInputProps<T> & { ref?: Ref<HTMLInputElement> }) {\r\n // Determine if we need InputGroup\r\n const hasInputGroup = addonLeft || addonRight;\r\n\r\n const renderInput = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: ((value: string) => void) | undefined,\r\n isDisabled: boolean | undefined,\r\n fieldError?: string\r\n ) => {\r\n const inputProps = {\r\n ref,\r\n id: name,\r\n name,\r\n type,\r\n disabled: isDisabled,\r\n placeholder,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange?.(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"h-11 text-sm\",\r\n fieldError && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n max,\r\n min,\r\n pattern,\r\n readOnly,\r\n step,\r\n inputMode,\r\n enterKeyHint,\r\n ...props,\r\n };\r\n\r\n // With InputGroup\r\n if (hasInputGroup) {\r\n return (\r\n <InputGroup className=\"h-11\">\r\n {addonLeft && (\r\n <InputGroupAddon align=\"inline-start\">\r\n {addonLeft}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupInput {...inputProps} />\r\n {addonRight && (\r\n <InputGroupAddon align=\"inline-end\">\r\n {addonRight}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n );\r\n }\r\n\r\n // Simple input\r\n return <Input {...inputProps} />;\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(field.value, field.onChange, disabled, fieldState?.error?.message)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n <Field.Description>{description}</Field.Description>\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } } as ChangeEvent<HTMLInputElement>);\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(value, handleDirectChange, disabled, error)}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n <Field.Description>{description}</Field.Description>\r\n </Field.Root>\r\n );\r\n}\r\n\r\nexport { CompactInput };\r\nexport type { CompactInputProps };\r\n","\"use client\";\r\n\r\nimport { type Ref, type ChangeEvent, type TextareaHTMLAttributes, type ReactNode } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Textarea } from \"@/components/ui/textarea\";\r\nimport { InputGroup, InputGroupTextarea, InputGroupAddon } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactTextareaProps<T extends FieldValues = FieldValues>\r\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\"> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n rows?: number;\r\n\r\n // InputGroup addons\r\n addonLeft?: ReactNode;\r\n addonRight?: ReactNode;\r\n\r\n // Styling\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLTextAreaElement>) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactTextarea - Enhanced textarea with InputGroup support\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - InputGroup support with addons\r\n * - Character counter with maxLength\r\n * - Controller integration for react-hook-form\r\n * - Direct usage without form\r\n */\r\nfunction CompactTextarea<T extends FieldValues = FieldValues>({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n rows = 3,\r\n\r\n // InputGroup addons\r\n addonLeft,\r\n addonRight,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n // Valid HTML textarea attributes\r\n cols,\r\n wrap,\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n readOnly,\r\n spellCheck,\r\n ref,\r\n ...props\r\n}: CompactTextareaProps<T> & { ref?: Ref<HTMLTextAreaElement> }) {\r\n const hasInputGroup = addonLeft || addonRight;\r\n\r\n const renderTextarea = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: ((value: string) => void) | undefined,\r\n isDisabled: boolean | undefined,\r\n fieldError?: string\r\n ) => {\r\n const currentCharCount = fieldValue?.length || 0;\r\n\r\n const textareaProps = {\r\n ref,\r\n id: name,\r\n name,\r\n disabled: isDisabled,\r\n placeholder,\r\n rows,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange?.(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"resize-none pt-3 text-sm\",\r\n fieldError && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n cols,\r\n wrap,\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n readOnly,\r\n spellCheck,\r\n ...props,\r\n };\r\n\r\n // With InputGroup\r\n if (hasInputGroup) {\r\n return (\r\n <>\r\n <InputGroup>\r\n {addonLeft && (\r\n <InputGroupAddon align=\"block-start\">\r\n {addonLeft}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupTextarea {...textareaProps} />\r\n {addonRight && (\r\n <InputGroupAddon align=\"block-end\">\r\n {addonRight}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n {maxLength && currentCharCount > 0 && (\r\n <div className=\"text-xs text-muted-foreground mt-1.5 text-right\">\r\n {currentCharCount}/{maxLength}\r\n </div>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Simple textarea\r\n return (\r\n <>\r\n <Textarea {...textareaProps} />\r\n {maxLength && currentCharCount > 0 && (\r\n <div className=\"text-xs text-muted-foreground mt-1.5 text-right\">\r\n {currentCharCount}/{maxLength}\r\n </div>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderTextarea(field.value, field.onChange, disabled, fieldState?.error?.message)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n <Field.Description>{description}</Field.Description>\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } } as ChangeEvent<HTMLTextAreaElement>);\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderTextarea(value, handleDirectChange, disabled, error)}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n <Field.Description>{description}</Field.Description>\r\n </Field.Root>\r\n );\r\n}\r\n\r\nexport { CompactTextarea };\r\nexport type { CompactTextareaProps };\r\n","\"use client\";\r\n\r\nimport type { Ref } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Field } from \"./field\";\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue\r\n} from \"@/components/ui/select\";\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface CompactSelectProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n items?: SelectOption[];\r\n\r\n // Styling\r\n className?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactSelect - Simple, clean select dropdown\r\n *\r\n * @example\r\n * <CompactSelect\r\n * label=\"Status\"\r\n * items={[\r\n * { value: \"active\", label: \"Active\" },\r\n * { value: \"inactive\", label: \"Inactive\" }\r\n * ]}\r\n * />\r\n */\r\nfunction CompactSelect<T extends FieldValues = FieldValues>({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder = \"Select option\",\r\n disabled,\r\n items = [],\r\n\r\n // Styling\r\n className,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n error,\r\n\r\n ref,\r\n ...props\r\n}: CompactSelectProps<T> & { ref?: Ref<HTMLButtonElement> }) {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n <Select\r\n value={field.value}\r\n onValueChange={(val: string) => {\r\n field.onChange(val);\r\n onValueChange?.(val);\r\n }}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <SelectTrigger\r\n ref={ref}\r\n id={name}\r\n className={cn(\r\n \"w-full data-[size=default]:h-11 text-sm\",\r\n fieldState?.error && \"border-destructive focus:ring-destructive/20\",\r\n className\r\n )}\r\n >\r\n <SelectValue placeholder={placeholder} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {items.map((item) => (\r\n <SelectItem key={item.value} value={item.value}>\r\n {item.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n <Field.Description>{description}</Field.Description>\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n return (\r\n <Field.Root disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n <Select\r\n value={value}\r\n onValueChange={onValueChange}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <SelectTrigger\r\n ref={ref}\r\n className={cn(\r\n \"w-full data-[size=default]:h-11 text-sm\",\r\n error && \"border-destructive focus:ring-destructive/20\",\r\n className\r\n )}\r\n >\r\n <SelectValue placeholder={placeholder} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {items.map((item) => (\r\n <SelectItem key={item.value} value={item.value}>\r\n {item.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n}\r\n\r\nexport { CompactSelect };\r\nexport type { CompactSelectProps };\r\n","\"use client\";\r\n\r\nimport { type Ref, type ReactNode, type ChangeEvent } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { Plus, Minus } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactNumberInputProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n\r\n // Number configuration\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n\r\n // Display options\r\n prefix?: ReactNode;\r\n suffix?: ReactNode;\r\n showButtons?: boolean;\r\n buttonVariant?: \"ghost\" | \"outline\" | \"default\";\r\n\r\n // Styling\r\n className?: string;\r\n inputClassName?: string;\r\n labelClassName?: string;\r\n containerClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: number | string) => void;\r\n\r\n // Direct usage\r\n value?: number | string;\r\n defaultValue?: number | string;\r\n onChange?: (value: number | string) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactNumberInput - A space-efficient number input with optional increment/decrement buttons\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - Optional increment/decrement buttons\r\n * - Support for min/max/step values\r\n * - Prefix/suffix support\r\n * - Form integration via control prop\r\n * - Direct usage without form\r\n */\r\nfunction CompactNumberInput<T extends FieldValues = FieldValues>({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n\r\n // Number configuration\r\n min = 0,\r\n max,\r\n step = 1,\r\n\r\n // Display options\r\n prefix,\r\n suffix,\r\n showButtons = false,\r\n buttonVariant = \"ghost\",\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n labelClassName,\r\n containerClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n defaultValue,\r\n onChange,\r\n error,\r\n\r\n ref,\r\n ...props\r\n}: CompactNumberInputProps<T> & { ref?: Ref<HTMLInputElement> }) {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <CompactNumberInputInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n min={min}\r\n max={max}\r\n step={step}\r\n prefix={prefix}\r\n suffix={suffix}\r\n showButtons={showButtons}\r\n buttonVariant={buttonVariant}\r\n className={className}\r\n inputClassName={inputClassName}\r\n labelClassName={labelClassName}\r\n containerClassName={containerClassName}\r\n error={fieldState?.error?.message}\r\n value={field.value ?? \"\"}\r\n onChange={(val) => {\r\n field.onChange(val);\r\n onValueChange?.(val);\r\n }}\r\n {...props}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n return (\r\n <CompactNumberInputInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n min={min}\r\n max={max}\r\n step={step}\r\n prefix={prefix}\r\n suffix={suffix}\r\n showButtons={showButtons}\r\n buttonVariant={buttonVariant}\r\n className={className}\r\n inputClassName={inputClassName}\r\n labelClassName={labelClassName}\r\n containerClassName={containerClassName}\r\n error={error}\r\n value={value ?? \"\"}\r\n defaultValue={defaultValue}\r\n onChange={onChange}\r\n onValueChange={onValueChange}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ninterface CompactNumberInputInternalProps {\r\n label?: string;\r\n placeholder?: string;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n prefix?: ReactNode;\r\n suffix?: ReactNode;\r\n showButtons?: boolean;\r\n buttonVariant?: \"ghost\" | \"outline\" | \"default\";\r\n error?: string;\r\n className?: string;\r\n inputClassName?: string;\r\n labelClassName?: string;\r\n containerClassName?: string;\r\n disabled?: boolean;\r\n value?: number | string;\r\n defaultValue?: number | string;\r\n onChange?: (value: number | string) => void;\r\n onValueChange?: (value: number | string) => void;\r\n ref?: Ref<HTMLInputElement>;\r\n}\r\n\r\nfunction CompactNumberInputInternal({\r\n label,\r\n placeholder,\r\n min = 0,\r\n max,\r\n step = 1,\r\n prefix,\r\n suffix,\r\n showButtons,\r\n buttonVariant,\r\n error,\r\n className,\r\n inputClassName,\r\n labelClassName,\r\n containerClassName,\r\n disabled,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onValueChange,\r\n ref,\r\n ...props\r\n}: CompactNumberInputInternalProps) {\r\n const handleIncrement = () => {\r\n const currentValue = Number(value) || 0;\r\n const newValue = currentValue + step;\r\n if (max === undefined || newValue <= max) {\r\n const finalValue = Number(newValue.toFixed(10));\r\n onChange?.(finalValue);\r\n onValueChange?.(finalValue);\r\n }\r\n };\r\n\r\n const handleDecrement = () => {\r\n const currentValue = Number(value) || 0;\r\n const newValue = currentValue - step;\r\n if (newValue >= min) {\r\n const finalValue = Number(newValue.toFixed(10));\r\n onChange?.(finalValue);\r\n onValueChange?.(finalValue);\r\n }\r\n };\r\n\r\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n const val = e.target.value;\r\n if (val === \"\") {\r\n onChange?.(\"\");\r\n onValueChange?.(\"\");\r\n return;\r\n }\r\n\r\n const numVal = Number(val);\r\n if (!isNaN(numVal)) {\r\n if ((min !== undefined && numVal < min) || (max !== undefined && numVal > max)) {\r\n return;\r\n }\r\n onChange?.(numVal);\r\n onValueChange?.(numVal);\r\n }\r\n };\r\n\r\n // With increment/decrement buttons\r\n if (showButtons) {\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <InputGroup className=\"h-11\">\r\n <InputGroupAddon align=\"inline-start\">\r\n <InputGroupButton\r\n type=\"button\"\r\n variant={buttonVariant}\r\n size=\"icon-sm\"\r\n onClick={handleDecrement}\r\n disabled={disabled || Number(value) <= min}\r\n >\r\n <Minus className=\"h-4 w-4\" />\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n <InputGroupInput\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(\"text-center text-sm\", inputClassName, className)}\r\n {...props}\r\n />\r\n <InputGroupAddon align=\"inline-end\">\r\n <InputGroupButton\r\n type=\"button\"\r\n variant={buttonVariant}\r\n size=\"icon-sm\"\r\n onClick={handleIncrement}\r\n disabled={disabled || (max !== undefined && Number(value) >= max)}\r\n >\r\n <Plus className=\"h-4 w-4\" />\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n }\r\n\r\n // With prefix/suffix\r\n if (prefix || suffix) {\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <InputGroup className=\"h-11\">\r\n {prefix && (\r\n <InputGroupAddon align=\"inline-start\">\r\n {typeof prefix === \"string\" ? <span className=\"text-xs\">{prefix}</span> : prefix}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupInput\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(\"text-sm\", inputClassName, className)}\r\n {...props}\r\n />\r\n {suffix && (\r\n <InputGroupAddon align=\"inline-end\">\r\n {typeof suffix === \"string\" ? <span className=\"text-xs\">{suffix}</span> : suffix}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n }\r\n\r\n // Simple input\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <Input\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(\r\n \"h-11 text-sm\",\r\n error && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName,\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n}\r\n\r\nexport { CompactNumberInput };\r\nexport type { CompactNumberInputProps };\r\n","\"use client\";\r\n\r\nimport { useState, useRef, type Ref } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { X, Plus, Check } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { Badge } from \"@/components/ui/badge\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface Choice {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface CompactTagChoiceProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n\r\n // Display\r\n label?: string;\r\n description?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n\r\n // Data\r\n choices?: Choice[];\r\n maxSelections?: number;\r\n\r\n // Styling\r\n className?: string;\r\n containerClassName?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n\r\n // Direct usage\r\n value?: string[];\r\n onChange?: (value: string[]) => void;\r\n onValueChange?: (value: string[]) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactTagChoice - A compact tag selection input\r\n *\r\n * Features:\r\n * - Multi-select tag interface\r\n * - Maximum selection limit\r\n * - Popover for selecting options\r\n * - Form integration via control prop\r\n * - Direct usage without form\r\n */\r\nfunction CompactTagChoice<T extends FieldValues = FieldValues>({\r\n // Form integration\r\n control,\r\n name,\r\n\r\n // Display\r\n label,\r\n description,\r\n placeholder = \"Select options...\",\r\n required,\r\n disabled,\r\n\r\n // Data\r\n choices = [],\r\n maxSelections,\r\n\r\n // Styling\r\n className,\r\n containerClassName,\r\n labelClassName,\r\n inputClassName,\r\n\r\n // Direct usage\r\n value: propValue = [],\r\n onChange: propOnChange,\r\n onValueChange,\r\n error,\r\n ref,\r\n}: CompactTagChoiceProps<T> & { ref?: Ref<HTMLDivElement> }) {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <CompactTagChoiceInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n error={fieldState?.error?.message}\r\n value={field.value || []}\r\n onChange={(vals) => {\r\n field.onChange(vals);\r\n onValueChange?.(vals);\r\n }}\r\n choices={choices}\r\n maxSelections={maxSelections}\r\n containerClassName={cn(className, containerClassName)}\r\n labelClassName={labelClassName}\r\n inputClassName={inputClassName}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <CompactTagChoiceInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n value={propValue}\r\n onChange={(vals) => {\r\n propOnChange?.(vals);\r\n onValueChange?.(vals);\r\n }}\r\n choices={choices}\r\n maxSelections={maxSelections}\r\n containerClassName={containerClassName}\r\n labelClassName={labelClassName}\r\n inputClassName={inputClassName}\r\n className={className}\r\n error={error}\r\n />\r\n );\r\n}\r\n\r\ninterface CompactTagChoiceInternalProps {\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n value?: string[];\r\n onChange?: (value: string[]) => void;\r\n choices?: Choice[];\r\n maxSelections?: number;\r\n error?: string;\r\n className?: string;\r\n containerClassName?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n ref?: Ref<HTMLDivElement>;\r\n}\r\n\r\nfunction CompactTagChoiceInternal({\r\n label,\r\n placeholder,\r\n disabled,\r\n value = [],\r\n onChange,\r\n choices = [],\r\n maxSelections,\r\n error,\r\n className,\r\n containerClassName,\r\n labelClassName,\r\n inputClassName,\r\n ref,\r\n}: CompactTagChoiceInternalProps) {\r\n const [open, setOpen] = useState(false);\r\n const triggerRef = useRef<HTMLButtonElement>(null);\r\n\r\n const availableChoices = choices.filter((c) => !value.includes(c.value));\r\n\r\n const addChoice = (choiceValue: string) => {\r\n if (value.includes(choiceValue)) return;\r\n if (maxSelections && value.length >= maxSelections) return;\r\n const updated = [...value, choiceValue];\r\n onChange?.(updated);\r\n };\r\n\r\n const removeChoice = (choiceValue: string) => {\r\n const updated = value.filter((v) => v !== choiceValue);\r\n onChange?.(updated);\r\n };\r\n\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n\r\n <div\r\n className={cn(\r\n \"min-h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\",\r\n \"ring-offset-background focus-within:ring-1 focus-within:ring-primary/20\",\r\n \"hover:border-primary/50 transition-all duration-200\",\r\n error && \"border-destructive focus-within:ring-destructive/20\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n inputClassName\r\n )}\r\n ref={ref}\r\n >\r\n <div className={cn(\"flex flex-wrap gap-1\", value.length > 0 && \"mb-2\")}>\r\n {value.map((val) => {\r\n const choice = choices.find((c) => c.value === val);\r\n return (\r\n <Badge key={val} variant=\"secondary\" className=\"flex items-center gap-1 px-2 py-0.5 text-xs\">\r\n <span>{choice?.label ?? val}</span>\r\n {!disabled && (\r\n <button\r\n type=\"button\"\r\n className=\"text-muted-foreground hover:text-foreground ml-0.5\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n removeChoice(val);\r\n }}\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </button>\r\n )}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n\r\n {!disabled && availableChoices.length > 0 && (!maxSelections || value.length < maxSelections) && (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n ref={triggerRef}\r\n type=\"button\"\r\n variant=\"ghost\"\r\n className={cn(\r\n \"inline-flex items-center justify-center h-auto p-1 rounded-md text-xs font-medium transition-colors\",\r\n \"text-muted-foreground hover:text-foreground hover:bg-accent\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\r\n )}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setOpen(true);\r\n }}\r\n >\r\n <Plus className=\"h-3 w-3 mr-1\" />\r\n {value.length === 0 ? placeholder : \"Add more...\"}\r\n </Button>\r\n }\r\n />\r\n <PopoverContent className=\"w-[220px] p-0\" align=\"start\">\r\n <div className=\"p-1\">\r\n {availableChoices.length === 0 ? (\r\n <div className=\"px-2 py-3 text-sm text-muted-foreground text-center\">No options available</div>\r\n ) : (\r\n <div className=\"space-y-0.5\">\r\n {availableChoices.map((choice) => (\r\n <div\r\n key={choice.value}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n addChoice(choice.value);\r\n }}\r\n className=\"flex items-center justify-between px-2 py-1.5 text-sm rounded-sm hover:bg-accent hover:text-accent-foreground cursor-pointer\"\r\n >\r\n <span>{choice.label}</span>\r\n {value.includes(choice.value) && <Check className=\"h-4 w-4\" />}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n\r\n {maxSelections && (\r\n <div className=\"text-[11px] text-muted-foreground mt-1\">{value.length}/{maxSelections} selected</div>\r\n )}\r\n </div>\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n}\r\n\r\nexport { CompactTagChoice };\r\nexport type { CompactTagChoiceProps };\r\n","\"use client\";\r\n\r\nimport { type Ref, type ReactNode, type ChangeEvent } from \"react\";\r\nimport { Controller, Control, FieldValues, Path, FieldError } from \"react-hook-form\";\r\nimport { Wand2 } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\n/**\r\n * Generates a URL-friendly slug from a string\r\n */\r\nfunction generateSlug(text: string): string {\r\n if (!text) return \"\";\r\n return text\r\n .toLowerCase()\r\n .trim()\r\n .replace(/[^\\w\\s-]/g, \"\") // Remove special characters\r\n .replace(/\\s+/g, \"-\") // Replace spaces with hyphens\r\n .replace(/-+/g, \"-\") // Replace multiple hyphens with single hyphen\r\n .replace(/^-+|-+$/g, \"\"); // Remove leading/trailing hyphens\r\n}\r\n\r\ninterface CompactSlugFieldProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n\r\n // Icon support\r\n icon?: ReactNode;\r\n\r\n // Slug generation\r\n sourceValue?: string;\r\n onGenerate?: (source: string) => string;\r\n\r\n // Styling\r\n className?: string;\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLInputElement> | { target: { value: string } }) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactSlugField - Compact slug input with auto-generation\r\n *\r\n * Features:\r\n * - Compact design with floating label\r\n * - Auto-generate slug from source field\r\n * - Manual editing support\r\n * - InputGroup with generate button\r\n * - Form integration via control prop\r\n */\r\nfunction CompactSlugField<T extends FieldValues = FieldValues>({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder = \"my-page-slug\",\r\n disabled,\r\n\r\n // Icon support\r\n icon,\r\n\r\n // Slug generation\r\n sourceValue,\r\n onGenerate,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n ref,\r\n ...props\r\n}: CompactSlugFieldProps<T> & { ref?: Ref<HTMLInputElement> }) {\r\n\r\n const handleGenerate = (currentValue: string | undefined, fieldOnChange: (value: string) => void) => {\r\n const newSlug = onGenerate ? onGenerate(sourceValue || \"\") : generateSlug(sourceValue || \"\");\r\n fieldOnChange(newSlug);\r\n onValueChange?.(newSlug);\r\n };\r\n\r\n const renderInput = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: (value: string) => void,\r\n isDisabled: boolean | undefined,\r\n fieldState?: { error?: FieldError | { message?: string } }\r\n ) => {\r\n const inputProps = {\r\n ref,\r\n id: name,\r\n type: \"text\" as const,\r\n disabled: isDisabled,\r\n placeholder,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"h-11 text-sm\",\r\n fieldState?.error && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n ...props,\r\n };\r\n\r\n return (\r\n <>\r\n {/* Icon support (outside InputGroup) */}\r\n {icon && (\r\n <Field.Icon>\r\n {icon}\r\n </Field.Icon>\r\n )}\r\n\r\n <InputGroup className=\"h-11\">\r\n <InputGroupInput {...inputProps} className={cn(inputProps.className, icon && \"pl-9\")} />\r\n <InputGroupAddon align=\"inline-end\">\r\n <InputGroupButton\r\n type=\"button\"\r\n size=\"sm\"\r\n onClick={() => handleGenerate(fieldValue, fieldOnChange)}\r\n disabled={isDisabled || !sourceValue}\r\n title=\"Generate slug from name\"\r\n >\r\n <Wand2 className=\"h-4 w-4\" />\r\n Generate\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n </>\r\n );\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(field.value, field.onChange, disabled, fieldState)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n <Field.Description>{description}</Field.Description>\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage (without react-hook-form)\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } });\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(value, handleDirectChange, disabled, { error: error ? { message: error } : undefined })}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n <Field.Description>{description}</Field.Description>\r\n </Field.Root>\r\n );\r\n}\r\n\r\nexport { CompactSlugField, generateSlug };\r\nexport type { CompactSlugFieldProps };\r\n"]}
@@ -1,387 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { LucideIcon } from 'lucide-react';
3
- import * as React from 'react';
4
- import React__default, { ReactNode } from 'react';
5
- export { c as cn } from './utils-Cbsgs0XP.js';
6
- import 'clsx';
7
-
8
- interface HeaderAction {
9
- text: string;
10
- onClick?: () => void;
11
- disabled?: boolean;
12
- variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link";
13
- size?: "default" | "sm" | "lg" | "icon";
14
- className?: string;
15
- icon?: LucideIcon;
16
- iconPosition?: "left" | "right";
17
- loadingText?: string;
18
- loading?: boolean;
19
- }
20
- interface HeaderBadge {
21
- text: string;
22
- variant?: "default" | "secondary" | "destructive" | "outline";
23
- className?: string;
24
- }
25
- interface HeaderMetadata {
26
- text: string;
27
- icon?: LucideIcon;
28
- }
29
- interface HeaderSectionProps {
30
- title?: string;
31
- description?: string;
32
- actions?: HeaderAction[] | null;
33
- icon?: LucideIcon | null;
34
- iconClassName?: string;
35
- loading?: boolean;
36
- variant?: "default" | "compact" | "hero" | "minimal";
37
- className?: string;
38
- badge?: HeaderBadge | ReactNode;
39
- breadcrumbs?: ReactNode;
40
- metadata?: HeaderMetadata[];
41
- children?: ReactNode;
42
- }
43
- declare function HeaderSection({ title, description, actions, icon: Icon, iconClassName, loading, variant, className, badge, breadcrumbs, metadata, children, }: HeaderSectionProps): react_jsx_runtime.JSX.Element;
44
-
45
- interface BreadcrumbItemData {
46
- label: string;
47
- href?: string;
48
- current?: boolean;
49
- }
50
- interface PageHeaderProps {
51
- items: BreadcrumbItemData[];
52
- className?: string;
53
- actions?: React__default.ReactNode;
54
- }
55
- declare function PageHeader({ items, className, actions }: PageHeaderProps): react_jsx_runtime.JSX.Element;
56
-
57
- interface DashboardContentProps {
58
- /** Content to render inside the dashboard area */
59
- children: React.ReactNode;
60
- /** Additional className for the outer wrapper */
61
- className?: string;
62
- /** Enable @container queries on the content area */
63
- container?: boolean | string;
64
- /** Horizontal padding — defaults to "md" */
65
- padding?: "none" | "sm" | "md" | "lg";
66
- }
67
- /**
68
- * DashboardContent — Safe content wrapper for sidebar layouts.
69
- *
70
- * Prevents the classic flexbox overflow bug where children with
71
- * `max-w-*` or grid layouts extend beyond the available space
72
- * (behind the sidebar) by propagating `min-w-0` through the
73
- * flex chain.
74
- *
75
- * **Important**: `SidebarInset` also needs `min-w-0` for the
76
- * width constraint to propagate correctly from the flex parent.
77
- * Pass `className="min-w-0"` to `SidebarInset`.
78
- *
79
- * @example
80
- * ```tsx
81
- * <SidebarProvider>
82
- * <AppSidebar />
83
- * <SidebarInset className="min-w-0">
84
- * <DashboardContent>
85
- * <PageHeader items={breadcrumbs} />
86
- * <MyPageContent />
87
- * </DashboardContent>
88
- * </SidebarInset>
89
- * </SidebarProvider>
90
- * ```
91
- */
92
- declare function DashboardContent({ children, className, container, padding, }: DashboardContentProps): react_jsx_runtime.JSX.Element;
93
-
94
- interface SidebarBrandProps {
95
- /** Brand title text */
96
- title: string;
97
- /** Brand icon/logo element */
98
- icon: React.ReactNode;
99
- /** Link href (defaults to "/") */
100
- href?: string;
101
- /** Additional className */
102
- className?: string;
103
- /** Tooltip text when collapsed (defaults to title) */
104
- tooltip?: string;
105
- }
106
- /**
107
- * SidebarBrand - Logo and title section for dashboard sidebar.
108
- * Automatically handles collapsed state styling.
109
- */
110
- declare function SidebarBrand({ title, icon, href, className, tooltip, }: SidebarBrandProps): react_jsx_runtime.JSX.Element;
111
-
112
- interface NavSubItem {
113
- title: string;
114
- url: string;
115
- badge?: string | number;
116
- isActive?: boolean;
117
- }
118
- interface NavItem {
119
- title: string;
120
- url: string;
121
- icon?: LucideIcon;
122
- isActive?: boolean;
123
- badge?: string | number;
124
- items?: NavSubItem[];
125
- }
126
- interface NavGroup {
127
- title?: string;
128
- items: NavItem[];
129
- }
130
- interface SidebarNavProps {
131
- /** Navigation groups to render */
132
- groups: NavGroup[];
133
- /** Additional className */
134
- className?: string;
135
- /** Callback when a nav item is clicked */
136
- onItemClick?: (item: NavItem) => void;
137
- }
138
- interface SidebarNavGroupProps {
139
- /** Group title (optional) */
140
- title?: string;
141
- /** Navigation items in this group */
142
- items: NavItem[];
143
- /** Additional className */
144
- className?: string;
145
- /** Callback when an item is clicked */
146
- onItemClick?: (item: NavItem) => void;
147
- }
148
- interface SidebarNavItemProps {
149
- /** The navigation item data */
150
- item: NavItem;
151
- /** Callback when clicked */
152
- onClick?: () => void;
153
- }
154
- /**
155
- * SidebarNavItem - Single navigation item with optional sub-items.
156
- */
157
- declare function SidebarNavItem({ item, onClick }: SidebarNavItemProps): react_jsx_runtime.JSX.Element;
158
- /**
159
- * SidebarNavGroup - A group of navigation items with optional title.
160
- */
161
- declare function SidebarNavGroup({ title, items, className, onItemClick, }: SidebarNavGroupProps): react_jsx_runtime.JSX.Element;
162
- /**
163
- * SidebarNav - Complete navigation section with multiple groups.
164
- */
165
- declare function SidebarNav({ groups, className, onItemClick }: SidebarNavProps): react_jsx_runtime.JSX.Element;
166
-
167
- interface UserData {
168
- name: string;
169
- email: string;
170
- avatar?: string;
171
- }
172
- interface UserMenuItem {
173
- label: string;
174
- icon?: LucideIcon;
175
- href?: string;
176
- onClick?: () => void;
177
- separator?: boolean;
178
- }
179
- interface SidebarUserMenuProps {
180
- /** User data to display */
181
- user: UserData;
182
- /** Menu items (account, settings, etc.) */
183
- menuItems?: UserMenuItem[];
184
- /** Logout handler */
185
- onLogout?: () => void;
186
- /** Additional className */
187
- className?: string;
188
- }
189
- /**
190
- * SidebarUserMenu - User avatar and dropdown menu for sidebar footer.
191
- * Accepts handlers for logout and custom menu items.
192
- */
193
- declare function SidebarUserMenu({ user, menuItems, onLogout, className, }: SidebarUserMenuProps): react_jsx_runtime.JSX.Element;
194
-
195
- interface ProjectItem {
196
- /** Unique identifier */
197
- id: string;
198
- /** Display name */
199
- name: string;
200
- /** Short code or identifier */
201
- code?: string;
202
- /** Optional type badge */
203
- type?: string;
204
- /** Is this the default project */
205
- isDefault?: boolean;
206
- /** Is this project active */
207
- isActive?: boolean;
208
- /** Optional subtitle/description */
209
- subtitle?: string;
210
- }
211
- interface ProjectSwitcherProps {
212
- /** List of available projects */
213
- items: ProjectItem[];
214
- /** Currently selected project */
215
- selected?: ProjectItem;
216
- /** Callback when a project is selected */
217
- onSelect: (project: ProjectItem) => void;
218
- /** Whether the data is loading */
219
- isLoading?: boolean;
220
- /** Label shown in dropdown header */
221
- label?: string;
222
- /** Icon to display (defaults to Building2) */
223
- icon?: LucideIcon;
224
- /** Additional className */
225
- className?: string;
226
- /** Whether to show as disabled (single item) */
227
- disabled?: boolean;
228
- /**
229
- * Render variant:
230
- * - "sidebar": Uses SidebarMenu components, requires SidebarProvider context
231
- * - "standalone": Uses Button, works anywhere (headers, toolbars, etc.)
232
- */
233
- variant?: "sidebar" | "standalone";
234
- /** Size for standalone variant (ignored in sidebar variant) */
235
- size?: "sm" | "default";
236
- /** Render custom item content */
237
- renderItem?: (item: ProjectItem, isSelected: boolean) => React.ReactNode;
238
- }
239
- /**
240
- * ProjectSwitcher - Generic project/workspace/branch switcher.
241
- * Works for any entity that needs switching functionality.
242
- *
243
- * @example Sidebar usage (inside SidebarProvider)
244
- * ```tsx
245
- * <ProjectSwitcher
246
- * items={projects}
247
- * selected={selectedProject}
248
- * onSelect={setSelectedProject}
249
- * />
250
- * ```
251
- *
252
- * @example Header/Standalone usage (no SidebarProvider needed)
253
- * ```tsx
254
- * <ProjectSwitcher
255
- * variant="standalone"
256
- * items={projects}
257
- * selected={selectedProject}
258
- * onSelect={setSelectedProject}
259
- * size="sm"
260
- * />
261
- * ```
262
- */
263
- declare function ProjectSwitcher({ items, selected, onSelect, isLoading, label, icon: Icon, className, disabled, variant, size, renderItem, }: ProjectSwitcherProps): react_jsx_runtime.JSX.Element | null;
264
-
265
- interface BreadcrumbItem {
266
- label: string;
267
- href?: string;
268
- current?: boolean;
269
- }
270
- interface DashboardHeaderProps {
271
- /** Breadcrumb items */
272
- breadcrumbs?: BreadcrumbItem[];
273
- /** Content to show on the left (after breadcrumbs) */
274
- leftContent?: React.ReactNode;
275
- /** Content to show on the right (actions, mode toggle, etc.) */
276
- rightContent?: React.ReactNode;
277
- /** Whether to show sidebar trigger */
278
- showSidebarTrigger?: boolean;
279
- /** Additional className */
280
- className?: string;
281
- /** Custom content (replaces default breadcrumb) */
282
- children?: React.ReactNode;
283
- }
284
- /**
285
- * DashboardHeader - Top header bar for dashboard pages.
286
- * Includes sidebar trigger, breadcrumbs, and action slots.
287
- */
288
- declare function DashboardHeader({ breadcrumbs, leftContent, rightContent, showSidebarTrigger, className, children, }: DashboardHeaderProps): react_jsx_runtime.JSX.Element;
289
-
290
- interface InsetSidebarBrand {
291
- title: string;
292
- icon: React.ReactNode;
293
- href?: string;
294
- }
295
- interface InsetSidebarProject {
296
- items: ProjectItem[];
297
- selected?: ProjectItem;
298
- onSelect: (project: ProjectItem) => void;
299
- isLoading?: boolean;
300
- label?: string;
301
- icon?: LucideIcon;
302
- }
303
- interface InsetSidebarUser {
304
- data: UserData;
305
- menuItems?: UserMenuItem[];
306
- onLogout?: () => void;
307
- }
308
- interface InsetSidebarProps {
309
- /** Brand configuration */
310
- brand: InsetSidebarBrand;
311
- /** Navigation groups */
312
- navigation: NavGroup[];
313
- /** Secondary navigation (shown at bottom above user) */
314
- secondaryNavigation?: NavGroup[];
315
- /** Project/workspace switcher configuration */
316
- project?: InsetSidebarProject;
317
- /** User menu configuration */
318
- user?: InsetSidebarUser;
319
- /** Custom content to render in header (after brand/project switcher) */
320
- headerContent?: React.ReactNode;
321
- /** Accessibility label for the sidebar */
322
- ariaLabel?: string;
323
- /** Additional className */
324
- className?: string;
325
- /** Children to render in content area */
326
- children?: React.ReactNode;
327
- }
328
- /**
329
- * InsetSidebar - Complete sidebar preset with inset variant.
330
- * The standard dashboard sidebar with collapsible to icons.
331
- */
332
- declare function InsetSidebar({ brand, navigation, secondaryNavigation, project, user, headerContent, ariaLabel, className, children, }: InsetSidebarProps): react_jsx_runtime.JSX.Element;
333
-
334
- interface DualSidebarCategory {
335
- /** Unique identifier */
336
- id: string;
337
- /** Display name */
338
- name: string;
339
- /** Category icon */
340
- icon: LucideIcon;
341
- /** Sub-items in this category */
342
- items: DualSidebarItem[];
343
- }
344
- interface DualSidebarItem {
345
- title: string;
346
- url: string;
347
- icon?: LucideIcon;
348
- badge?: string | number;
349
- isActive?: boolean;
350
- }
351
- interface DualSidebarBrand {
352
- title: string;
353
- icon: React.ReactNode;
354
- href?: string;
355
- }
356
- interface DualSidebarUser {
357
- data: UserData;
358
- menuItems?: UserMenuItem[];
359
- onLogout?: () => void;
360
- }
361
- interface DualSidebarProps {
362
- /** Brand configuration */
363
- brand: DualSidebarBrand;
364
- /** Main categories with their items */
365
- categories: DualSidebarCategory[];
366
- /** User menu configuration */
367
- user?: DualSidebarUser;
368
- /** Initially active category ID */
369
- defaultCategoryId?: string;
370
- /** Callback when category changes */
371
- onCategoryChange?: (categoryId: string) => void;
372
- /** Whether the expanded panel starts collapsed */
373
- defaultCollapsed?: boolean;
374
- /** Rail color variant */
375
- railVariant?: "default" | "dark" | "primary" | "muted";
376
- /** Accessibility label */
377
- ariaLabel?: string;
378
- /** Additional className for outer container */
379
- className?: string;
380
- }
381
- /**
382
- * DualSidebar - A sidebar with icon rail and collapsible expanded panel.
383
- * Mimics the inset sidebar variant structure for consistent styling.
384
- */
385
- declare function DualSidebar({ brand, categories, user, defaultCategoryId, onCategoryChange, defaultCollapsed, railVariant, ariaLabel, className, }: DualSidebarProps): react_jsx_runtime.JSX.Element;
386
-
387
- export { type BreadcrumbItem, type BreadcrumbItemData, DashboardContent, type DashboardContentProps, DashboardHeader, type DashboardHeaderProps, DualSidebar, type DualSidebarBrand, type DualSidebarCategory, type DualSidebarItem, type DualSidebarProps, type DualSidebarUser, type HeaderAction, type HeaderBadge, type HeaderMetadata, HeaderSection, type HeaderSectionProps, InsetSidebar, type InsetSidebarBrand, type InsetSidebarProject, type InsetSidebarProps, type InsetSidebarUser, type NavGroup, type NavItem, type NavSubItem, PageHeader, type PageHeaderProps, type ProjectItem, ProjectSwitcher, type ProjectSwitcherProps, SidebarBrand, type SidebarBrandProps, SidebarNav, SidebarNavGroup, type SidebarNavGroupProps, SidebarNavItem, type SidebarNavItemProps, type SidebarNavProps, SidebarUserMenu, type SidebarUserMenuProps, type UserData, type UserMenuItem };