@algodomain/smart-forms 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/fields.js CHANGED
@@ -1,11 +1,12 @@
1
- import { Button, CommandGroup, Popover, PopoverTrigger, Badge, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandItem } from './chunk-4XK6HAJ2.js';
2
- export { SmartCheckbox, SmartCombobox, SmartDatePicker, SmartRadioGroup, SmartSelect, SmartTags } from './chunk-4XK6HAJ2.js';
3
- import { useSmartForm, useFormField, useFieldDetection, cn, Label, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, Input } from './chunk-6VKQ7EMR.js';
4
- export { SmartFormProvider, SmartInput, useFormField, useSmartForm } from './chunk-6VKQ7EMR.js';
1
+ import { Button, CommandGroup, Popover, PopoverTrigger, Badge, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandItem } from './chunk-N3SIQIJR.js';
2
+ export { SmartCheckbox, SmartCombobox, SmartDatePicker, SmartRadioGroup, SmartSelect, SmartTags } from './chunk-N3SIQIJR.js';
3
+ import { useSmartForm, useFormField, useFieldDetection, cn, Label, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, Input } from './chunk-DYTQTHGE.js';
4
+ export { SmartFormProvider, SmartInput, useFormField, useSmartForm } from './chunk-DYTQTHGE.js';
5
5
  import * as React2 from 'react';
6
6
  import { createContext, useRef, useEffect, useMemo, useState, useCallback, useContext } from 'react';
7
7
  import { InfoIcon, PlusIcon, CheckIcon, Bold, Italic, Underline, List, ListOrdered, XIcon } from 'lucide-react';
8
8
  import { jsxs, jsx } from 'react/jsx-runtime';
9
+ import { z } from 'zod';
9
10
  import * as SliderPrimitive from '@radix-ui/react-slider';
10
11
 
11
12
  var SmartFileUpload = ({
@@ -37,12 +38,13 @@ var SmartFileUpload = ({
37
38
  const isDisabled = typeof disabled === "function" ? disabled(formData) : disabled || false;
38
39
  const isHidden = typeof hidden === "function" ? hidden(formData) : hidden || false;
39
40
  if (isHidden) return null;
41
+ const displayName = label || field;
40
42
  useEffect(() => {
41
43
  if (validation && !hasRegistered.current) {
42
44
  hasRegistered.current = true;
43
- registerValidation(field, validation);
45
+ registerValidation(field, validation, { label: displayName });
44
46
  }
45
- }, [validation, field, registerValidation]);
47
+ }, [validation, field, registerValidation, displayName]);
46
48
  useEffect(() => {
47
49
  if (fieldDetection?.registerField) {
48
50
  fieldDetection.registerField(field);
@@ -320,12 +322,18 @@ var SmartSlider = ({
320
322
  const isDisabled = typeof disabled === "function" ? disabled(formData) : disabled || false;
321
323
  const isHidden = typeof hidden === "function" ? hidden(formData) : hidden || false;
322
324
  if (isHidden) return null;
325
+ const displayName = label || field;
326
+ const builtinValidation = useMemo(() => {
327
+ if (validation || !required) return void 0;
328
+ return z.number({ message: `${displayName} is required` });
329
+ }, [validation, required, displayName]);
330
+ const schemaToRegister = validation ?? builtinValidation;
323
331
  useEffect(() => {
324
- if (validation && !hasRegistered.current) {
332
+ if (schemaToRegister && !hasRegistered.current) {
325
333
  hasRegistered.current = true;
326
- registerValidation(field, validation);
334
+ registerValidation(field, schemaToRegister, { label: displayName });
327
335
  }
328
- }, [validation, field, registerValidation]);
336
+ }, [schemaToRegister, field, registerValidation, displayName]);
329
337
  useEffect(() => {
330
338
  if (fieldDetection?.registerField) {
331
339
  fieldDetection.registerField(field);
@@ -421,15 +429,15 @@ var SmartDualRangeSlider = ({
421
429
  useEffect(() => {
422
430
  if (minValidation && !hasRegisteredMin.current) {
423
431
  hasRegisteredMin.current = true;
424
- minFormField.registerValidation(minField, minValidation);
432
+ minFormField.registerValidation(minField, minValidation, { label: minLabel });
425
433
  }
426
- }, [minValidation, minField, minFormField]);
434
+ }, [minValidation, minField, minFormField, minLabel]);
427
435
  useEffect(() => {
428
436
  if (maxValidation && !hasRegisteredMax.current) {
429
437
  hasRegisteredMax.current = true;
430
- maxFormField.registerValidation(maxField, maxValidation);
438
+ maxFormField.registerValidation(maxField, maxValidation, { label: maxLabel });
431
439
  }
432
- }, [maxValidation, maxField, maxFormField]);
440
+ }, [maxValidation, maxField, maxFormField, maxLabel]);
433
441
  useEffect(() => {
434
442
  if (fieldDetection?.registerField) {
435
443
  fieldDetection.registerField(minField);
@@ -653,12 +661,13 @@ var SmartAutoSuggestTags = ({
653
661
  const [tags, setTags] = useState(initialOptions);
654
662
  const [newTag, setNewTag] = useState("");
655
663
  const selected = Array.isArray(value) ? value : [];
664
+ const displayName = label || field;
656
665
  useEffect(() => {
657
666
  if (validation && !hasRegistered.current) {
658
667
  hasRegistered.current = true;
659
- registerValidation(field, validation);
668
+ registerValidation(field, validation, { label: displayName });
660
669
  }
661
- }, [validation, field, registerValidation]);
670
+ }, [validation, field, registerValidation, displayName]);
662
671
  useEffect(() => {
663
672
  if (fieldDetection?.registerField) {
664
673
  fieldDetection.registerField(field);
@@ -865,12 +874,13 @@ var SmartBasicRichTextbox = ({
865
874
  const isDisabled = typeof disabled === "function" ? disabled(formData) : disabled || false;
866
875
  const isHidden = typeof hidden === "function" ? hidden(formData) : hidden || false;
867
876
  if (isHidden) return null;
877
+ const displayName = label || field;
868
878
  useEffect(() => {
869
879
  if (validation && !hasRegistered.current) {
870
880
  hasRegistered.current = true;
871
- registerValidation(field, validation);
881
+ registerValidation(field, validation, { label: displayName });
872
882
  }
873
- }, [validation, field, registerValidation]);
883
+ }, [validation, field, registerValidation, displayName]);
874
884
  useEffect(() => {
875
885
  if (fieldDetection?.registerField) {
876
886
  fieldDetection.registerField(field);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/smart-fields/SmartFileUpload.tsx","../src/components/ui/slider.tsx","../src/smart-fields/SmartSlider.tsx","../src/smart-fields/SmartDualRangeSlider.tsx","../src/components/ui/shadcn-io/tags/index.tsx","../src/smart-fields/SmartAutoSuggestTags.tsx","../src/smart-fields/SmartBasicRichTextbox.tsx"],"names":["jsxs","jsx","useRef","useEffect","InfoIcon","useState","value"],"mappings":"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","file":"fields.js","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Label } from '../components/ui/label';\nimport { Button } from '../components/ui/button';\nimport { Input } from '../components/ui/input';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { InfoIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nexport interface SmartFileUploadProps {\n field: string;\n label?: string;\n className?: string;\n validation?: any;\n required?: boolean;\n multiple?: boolean;\n accept?: string;\n maxFiles?: number;\n maxSizeBytes?: number;\n uploadApi?: string; // optional endpoint to upload files separately as multipart\n uploadOnSelect?: boolean; // if true, upload immediately after selection\n onSuccess?: (result: any) => void;\n onError?: (error: any) => void;\n defaultValue?: File | File[]; // Default value for the file upload (File or File[])\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\nexport const SmartFileUpload: React.FC<SmartFileUploadProps> = ({\n field,\n label,\n className = '',\n validation,\n required = false,\n multiple = false,\n accept,\n maxFiles,\n maxSizeBytes,\n uploadApi,\n uploadOnSelect = false,\n onSuccess,\n onError,\n defaultValue,\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData, registerSubmitHook, unregisterSubmitHook } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n useEffect(() => {\n if (validation && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, validation);\n }\n }, [validation, field, registerValidation]);\n\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n const normalizedFiles: File[] = useMemo(() => {\n const filesAny: any[] = Array.isArray(value)\n ? value\n : value\n ? [value]\n : [];\n return filesAny.filter((f) => f instanceof File);\n }, [value]);\n\n // Store preview URLs with cleanup\n const [previewUrls, setPreviewUrls] = useState<Map<string, string>>(new Map());\n\n // Create preview URLs for images\n useEffect(() => {\n const newUrls = new Map<string, string>();\n \n normalizedFiles.forEach((file) => {\n if (file.type.startsWith('image/')) {\n const key = `${file.name}-${file.size}-${file.lastModified}`;\n if (!previewUrls.has(key)) {\n newUrls.set(key, URL.createObjectURL(file));\n } else {\n newUrls.set(key, previewUrls.get(key)!);\n }\n }\n });\n\n // Cleanup old URLs\n previewUrls.forEach((url: string, key: string) => {\n if (!newUrls.has(key)) {\n URL.revokeObjectURL(url);\n }\n });\n\n setPreviewUrls(newUrls);\n }, [normalizedFiles]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n previewUrls.forEach((url: string) => URL.revokeObjectURL(url));\n };\n }, []);\n\n const removeFileAt = (index: number) => {\n if (!multiple) {\n onChange(null);\n if (inputRef.current) inputRef.current.value = '';\n return;\n }\n const next = normalizedFiles.filter((_, i) => i !== index);\n onChange(next);\n if (next.length === 0 && inputRef.current) inputRef.current.value = '';\n };\n\n const handleFiles = (filesList: FileList | null) => {\n if (!filesList) return;\n let files = Array.from(filesList);\n\n if (maxFiles && files.length > maxFiles) {\n files = files.slice(0, maxFiles);\n }\n if (maxSizeBytes) {\n files = files.filter((f) => f.size <= maxSizeBytes);\n }\n\n if (multiple) {\n onChange(files);\n } else {\n onChange(files[0] || null);\n }\n };\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files);\n };\n\n const clearSelection = () => {\n onChange(multiple ? [] : null);\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n };\n\n const performUpload = async () => {\n if (!uploadApi) return;\n const filesAny: any[] = Array.isArray(value)\n ? value\n : value\n ? [value]\n : [];\n const files: File[] = filesAny.filter((f) => f instanceof File);\n if (files.length === 0) return;\n\n const fd = new FormData();\n if (multiple) {\n for (const f of files) fd.append(`${field}[]`, f);\n } else if (files[0]) {\n fd.append(field, files[0]);\n }\n\n try {\n const response = await fetch(uploadApi, {\n method: 'POST',\n body: fd\n });\n const maybeJson = (() => {\n try { return response.headers.get('content-type')?.includes('application/json') ? true : false; } catch { return false; }\n })();\n const result = maybeJson ? await response.json() : await response.text();\n if (!response.ok) {\n if (onError) onError(result);\n return;\n }\n if (onSuccess) onSuccess(result);\n } catch (err) {\n if (onError) onError(err);\n }\n };\n\n // Upload immediately upon selection when enabled\n useEffect(() => {\n if (!uploadOnSelect || !uploadApi) return;\n const filesAny: any[] = Array.isArray(value)\n ? value\n : value\n ? [value]\n : [];\n const files: File[] = filesAny.filter((f) => f instanceof File);\n if (files.length > 0) {\n void performUpload();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, uploadOnSelect, uploadApi]);\n\n // Register a submit hook if deferred upload is desired\n useEffect(() => {\n const key = `smart-file-upload:${field}`;\n if (uploadApi && !uploadOnSelect) {\n registerSubmitHook(key, performUpload);\n return () => unregisterSubmitHook(key);\n }\n return () => unregisterSubmitHook(key);\n }, [field, uploadApi, uploadOnSelect, registerSubmitHook, unregisterSubmitHook, value, multiple]);\n\n return (\n <div className={cn('flex-1 min-w-0', className)}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n <div className={cn('flex items-center gap-2', error && 'text-destructive')}>\n <Input\n ref={(el) => {\n inputRef.current = el as any;\n if (typeof fieldRef === 'function') fieldRef(el);\n }}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={onInputChange}\n className={cn(error && 'border-destructive')}\n data-field={field}\n disabled={isDisabled}\n />\n {(Array.isArray(value) ? value.length > 0 : !!value) && (\n <Button type=\"button\" variant=\"secondary\" onClick={clearSelection} disabled={isDisabled}>\n Clear\n </Button>\n )}\n </div>\n\n {normalizedFiles.length === 0 ? (\n <div className=\"mt-2 text-sm text-muted-foreground\">No file selected</div>\n ) : (\n <ul className=\"mt-2 space-y-1\">\n {normalizedFiles.map((f, idx) => {\n const isImage = f.type.startsWith('image/');\n const key = `${f.name}-${f.size}-${f.lastModified}`;\n const previewUrl = isImage ? previewUrls.get(key) : null;\n \n return (\n <li key={`${f.name}-${idx}`} className=\"flex items-center justify-between rounded border px-2 py-1\">\n <div className=\"flex items-center min-w-0 mr-2\">\n {isImage && previewUrl ? (\n <div className=\"relative group mr-2\">\n <img\n src={previewUrl}\n alt={`Preview of ${f.name}`}\n className=\"w-8 h-8 object-cover rounded border\"\n />\n </div>\n ) : (\n <div className=\"w-8 h-8 mr-2 flex items-center justify-center bg-gray-100 rounded border\">\n 📄\n </div>\n )}\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium\">{f.name}</div>\n <div className=\"text-xs text-muted-foreground\">{(f.size / 1024).toFixed(1)} KB</div>\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeFileAt(idx)}\n aria-label={`Remove ${f.name}`}\n disabled={isDisabled}\n >\n ✕\n </Button>\n </li>\n );\n })}\n </ul>\n )}\n\n\n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n\nexport default SmartFileUpload;\n\n\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"border-primary bg-background ring-ring/50 block size-4 shrink-0 rounded-full border shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n","import React, { useEffect, useRef } from 'react';\nimport { Slider } from '../components/ui/slider';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { InfoIcon } from 'lucide-react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\n\n// =============================================================================\n// SMART SLIDER TYPES\n// =============================================================================\n\nexport interface SmartSliderProps {\n field: string;\n label?: string;\n min?: number;\n max?: number;\n step?: number;\n className?: string;\n validation?: any; // Zod schema\n required?: boolean;\n showValue?: boolean;\n valueFormatter?: (value: number) => string;\n defaultValue?: number; // Default value for the slider\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\n// =============================================================================\n// SMART SLIDER COMPONENT\n// =============================================================================\n\nexport const SmartSlider: React.FC<SmartSliderProps> = ({\n field,\n label,\n min = 0,\n max = 100,\n step = 1,\n className = '',\n validation,\n required = false,\n showValue = true,\n valueFormatter = (value) => value.toString(),\n defaultValue,\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n // Register validation for this field\n useEffect(() => {\n if (validation && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, validation);\n }\n }, [validation, field, registerValidation]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Handle slider value change\n const handleValueChange = (values: number[]) => {\n const newValue = values[0];\n onChange(newValue);\n };\n\n // Get current value or default to min\n const currentValue = value !== undefined ? value : min;\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n {showValue && (\n <span className=\"ml-2 text-muted-foreground\">\n ({valueFormatter(currentValue)})\n </span>\n )}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n \n <div className=\"space-y-2\">\n <Slider\n ref={fieldRef}\n value={[currentValue]}\n onValueChange={handleValueChange}\n min={min}\n max={max}\n step={step}\n className={`w-full ${error ? 'border-destructive' : ''}`}\n data-field={field}\n disabled={isDisabled}\n />\n \n <div className=\"flex justify-between text-sm text-muted-foreground\">\n <span>{valueFormatter(min)}</span>\n <span>{valueFormatter(max)}</span>\n </div>\n </div>\n \n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Slider } from '../components/ui/slider';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { InfoIcon } from 'lucide-react';\n\n// =============================================================================\n// SMART DUAL RANGE SLIDER TYPES\n// =============================================================================\n\nexport interface SmartDualRangeSliderProps {\n minField: string;\n maxField: string;\n label?: string;\n min?: number;\n max?: number;\n step?: number;\n className?: string;\n minValidation?: any; // Zod schema for min field\n maxValidation?: any; // Zod schema for max field\n required?: boolean;\n showValues?: boolean;\n valueFormatter?: (value: number) => string;\n minLabel?: string;\n maxLabel?: string;\n defaultMinValue?: number; // Default value for the min field\n defaultMaxValue?: number; // Default value for the max field\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\n// =============================================================================\n// SMART DUAL RANGE SLIDER COMPONENT\n// =============================================================================\n\nexport const SmartDualRangeSlider: React.FC<SmartDualRangeSliderProps> = ({\n minField,\n maxField,\n label,\n min = 0,\n max = 100,\n step = 1,\n className = '',\n minValidation,\n maxValidation,\n required = false,\n showValues = true,\n valueFormatter = (value) => value.toString(),\n minLabel = 'Min',\n maxLabel = 'Max',\n defaultMinValue,\n defaultMaxValue,\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData } = useSmartForm();\n // Use separate form fields for min and max values\n const minFormField = useFormField(minField);\n const maxFormField = useFormField(maxField);\n const fieldDetection = useFieldDetection();\n const hasRegisteredMin = useRef(false);\n const hasRegisteredMax = useRef(false);\n const hasSetDefaultMin = useRef(false);\n const hasSetDefaultMax = useRef(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n // Register validation for min field\n useEffect(() => {\n if (minValidation && !hasRegisteredMin.current) {\n hasRegisteredMin.current = true;\n minFormField.registerValidation(minField, minValidation);\n }\n }, [minValidation, minField, minFormField]);\n\n // Register validation for max field\n useEffect(() => {\n if (maxValidation && !hasRegisteredMax.current) {\n hasRegisteredMax.current = true;\n maxFormField.registerValidation(maxField, maxValidation);\n }\n }, [maxValidation, maxField, maxFormField]);\n\n // Auto-register fields if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(minField);\n fieldDetection.registerField(maxField);\n }\n }, [minField, maxField, fieldDetection]);\n\n // Set default value for min field if provided and field is empty\n useEffect(() => {\n if (defaultMinValue !== undefined && !hasSetDefaultMin.current && (minFormField.value === undefined || minFormField.value === null || minFormField.value === '')) {\n minFormField.onChange(defaultMinValue);\n hasSetDefaultMin.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultMinValue, minFormField.value]);\n\n // Set default value for max field if provided and field is empty\n useEffect(() => {\n if (defaultMaxValue !== undefined && !hasSetDefaultMax.current && (maxFormField.value === undefined || maxFormField.value === null || maxFormField.value === '')) {\n maxFormField.onChange(defaultMaxValue);\n hasSetDefaultMax.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultMaxValue, maxFormField.value]);\n\n // Handle slider value change\n const handleValueChange = (values: number[]) => {\n const [minValue, maxValue] = values;\n minFormField.onChange(minValue);\n maxFormField.onChange(maxValue);\n };\n\n // Get current values or defaults\n const currentMin = minFormField.value !== undefined ? minFormField.value : min;\n const currentMax = maxFormField.value !== undefined ? maxFormField.value : max;\n \n // Combine errors from both fields\n const combinedError = minFormField.error || maxFormField.error;\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n \n <div className=\"space-y-4\">\n <Slider\n ref={minFormField.fieldRef}\n value={[currentMin, currentMax]}\n onValueChange={handleValueChange}\n min={min}\n max={max}\n step={step}\n className={`w-full ${combinedError ? 'border-destructive' : ''}`}\n data-min-field={minField}\n data-max-field={maxField}\n disabled={isDisabled}\n />\n \n {showValues && (\n <div className=\"flex justify-between items-center text-sm\">\n <div className=\"flex flex-col items-center\">\n <span className=\"text-muted-foreground\">{minLabel}: {valueFormatter(currentMin)}</span>\n </div>\n <div className=\"flex flex-col items-center\">\n <span className=\"text-muted-foreground\">{maxLabel}: {valueFormatter(currentMax)}</span>\n </div>\n </div>\n )}\n </div>\n \n {combinedError && (\n <p className=\"text-destructive text-sm mt-1\">{combinedError}</p>\n )}\n </div>\n );\n};\n","'use client';\n\nimport { XIcon } from 'lucide-react';\nimport {\n type ComponentProps,\n createContext,\n type MouseEventHandler,\n type ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Badge } from '../../badge';\nimport { Button } from '../../button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../command';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../../popover';\nimport { cn } from '../../../../lib/utils';\n\ntype TagsContextType = {\n value?: string;\n setValue?: (value: string) => void;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n width?: number;\n setWidth?: (width: number) => void;\n};\n\nconst TagsContext = createContext<TagsContextType>({\n value: undefined,\n setValue: undefined,\n open: false,\n onOpenChange: () => { },\n width: undefined,\n setWidth: undefined,\n});\n\nconst useTagsContext = () => {\n const context = useContext(TagsContext);\n\n if (!context) {\n throw new Error('useTagsContext must be used within a TagsProvider');\n }\n\n return context;\n};\n\nexport type TagsProps = {\n value?: string;\n setValue?: (value: string) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n className?: string;\n};\n\nexport const Tags = ({\n value,\n setValue,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n children,\n className,\n}: TagsProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const [width, setWidth] = useState<number>();\n const ref = useRef<HTMLDivElement>(null);\n\n const open = controlledOpen ?? uncontrolledOpen;\n const onOpenChange = controlledOnOpenChange ?? setUncontrolledOpen;\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n setWidth(entries[0].contentRect.width);\n });\n\n resizeObserver.observe(ref.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n return (\n <TagsContext.Provider\n value={{ value, setValue, open, onOpenChange, width, setWidth }}\n >\n <Popover onOpenChange={onOpenChange} open={open}>\n <div className={cn('relative w-full', className)} ref={ref}>\n {children}\n </div>\n </Popover>\n </TagsContext.Provider>\n );\n};\n\nexport type TagsTriggerProps = ComponentProps<typeof Button>;\n\nexport const TagsTrigger = ({\n className,\n children,\n ...props\n}: TagsTriggerProps) => (\n <PopoverTrigger asChild>\n <Button\n className={cn('h-auto w-full justify-between p-2', className)}\n // biome-ignore lint/a11y/useSemanticElements: \"Required\"\n role=\"combobox\"\n variant=\"outline\"\n {...props}\n >\n <div className=\"flex flex-wrap items-center gap-1\">\n {children}\n <span className=\"px-2 py-px text-muted-foreground\">\n </span>\n </div>\n </Button>\n </PopoverTrigger>\n);\n\nexport type TagsValueProps = ComponentProps<typeof Badge>;\n\nexport const TagsValue = ({\n className,\n children,\n onRemove,\n ...props\n}: TagsValueProps & { onRemove?: () => void }) => {\n const handleRemove: MouseEventHandler<HTMLDivElement> = (event) => {\n event.preventDefault();\n event.stopPropagation();\n onRemove?.();\n };\n\n return (\n <Badge className={cn('flex items-center gap-2', className)} {...props}>\n {children}\n {onRemove && (\n // biome-ignore lint/a11y/noStaticElementInteractions: \"This is a clickable badge\"\n // biome-ignore lint/a11y/useKeyWithClickEvents: \"This is a clickable badge\"\n <div\n className=\"size-auto cursor-pointer hover:text-muted-foreground\"\n onClick={handleRemove}\n >\n <XIcon size={12} />\n </div>\n )}\n </Badge>\n );\n};\n\nexport type TagsContentProps = ComponentProps<typeof PopoverContent>;\n\nexport const TagsContent = ({\n className,\n children,\n ...props\n}: TagsContentProps) => {\n const { width } = useTagsContext();\n\n return (\n <PopoverContent\n className={cn('p-0', className)}\n style={{ width }}\n {...props}\n >\n <Command>{children}</Command>\n </PopoverContent>\n );\n};\n\nexport type TagsInputProps = ComponentProps<typeof CommandInput>;\n\nexport const TagsInput = ({ className, ...props }: TagsInputProps) => (\n <CommandInput className={cn('h-9', className)} {...props} />\n);\n\nexport type TagsListProps = ComponentProps<typeof CommandList>;\n\nexport const TagsList = ({ className, ...props }: TagsListProps) => (\n <CommandList className={cn('max-h-[200px]', className)} {...props} />\n);\n\nexport type TagsEmptyProps = ComponentProps<typeof CommandEmpty>;\n\nexport const TagsEmpty = ({\n children,\n className,\n ...props\n}: TagsEmptyProps) => (\n <CommandEmpty {...props}>{children ?? 'No tags found.'}</CommandEmpty>\n);\n\nexport type TagsGroupProps = ComponentProps<typeof CommandGroup>;\n\nexport const TagsGroup = CommandGroup;\n\nexport type TagsItemProps = ComponentProps<typeof CommandItem>;\n\nexport const TagsItem = ({ className, ...props }: TagsItemProps) => (\n <CommandItem\n className={cn('cursor-pointer items-center justify-between', className)}\n {...props}\n />\n);\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { cn } from '../lib/utils';\nimport {\n Tags,\n TagsContent,\n TagsEmpty,\n TagsGroup,\n TagsInput,\n TagsItem,\n TagsList,\n TagsTrigger,\n TagsValue,\n} from '../components/ui/shadcn-io/tags';\nimport { CheckIcon, PlusIcon, InfoIcon } from 'lucide-react';\n\n// =============================================================================\n// SMART AUTO SUGGEST TAGS TYPES\n// =============================================================================\n\nexport interface TagOption {\n id: string;\n label: string;\n}\n\nexport interface SmartAutoSuggestTagsProps {\n field: string;\n label?: string;\n options: TagOption[]; // Available tags to choose from\n className?: string;\n placeholder?: string;\n validation?: any;\n required?: boolean;\n allowCreate?: boolean; // Allow creating new tags\n maxTags?: number; // Maximum number of tags allowed\n defaultValue?: string[]; // Default selected tag IDs\n onTagCreate?: (tag: TagOption) => void; // Callback when a new tag is created\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\n// =============================================================================\n// SMART AUTO SUGGEST TAGS COMPONENT\n// =============================================================================\n\nexport const SmartAutoSuggestTags: React.FC<SmartAutoSuggestTagsProps> = ({\n field,\n label,\n options: initialOptions,\n className = '',\n placeholder = 'Select tags...',\n validation,\n required = false,\n allowCreate = true,\n maxTags,\n defaultValue,\n onTagCreate,\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n // Local state for available tags and search input\n const [tags, setTags] = useState<TagOption[]>(initialOptions);\n const [newTag, setNewTag] = useState<string>('');\n \n // Normalize value to array of strings\n const selected: string[] = Array.isArray(value) ? value : [];\n\n // Register validation for this field\n useEffect(() => {\n if (validation && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, validation);\n }\n }, [validation, field, registerValidation]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (!value || (Array.isArray(value) && value.length === 0))) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Update tags when options change\n useEffect(() => {\n setTags(initialOptions);\n }, [initialOptions]);\n\n const handleRemove = (tagId: string) => {\n if (!selected.includes(tagId)) {\n return;\n }\n const newSelected = selected.filter((v) => v !== tagId);\n onChange(newSelected);\n };\n\n const handleSelect = (tagId: string) => {\n // Check if already selected\n if (selected.includes(tagId)) {\n handleRemove(tagId);\n return;\n }\n\n // Check max tags limit\n if (maxTags && selected.length >= maxTags) {\n return;\n }\n\n const newSelected = [...selected, tagId];\n onChange(newSelected);\n };\n\n const handleCreateTag = () => {\n if (!newTag.trim()) return;\n if (!allowCreate) return;\n\n const tagId = newTag.toLowerCase().replace(/\\s+/g, '-');\n const newTagOption: TagOption = {\n id: tagId,\n label: newTag,\n };\n\n // Add to available tags\n setTags((prev) => [...prev, newTagOption]);\n \n // Add to selected tags\n const newSelected = [...selected, tagId];\n onChange(newSelected);\n\n // Call callback if provided\n if (onTagCreate) {\n onTagCreate(newTagOption);\n }\n\n setNewTag('');\n };\n\n // Filter tags based on search input\n const filteredTags = tags.filter((tag) =>\n tag.label.toLowerCase().includes(newTag.toLowerCase())\n );\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n {maxTags && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n ({selected.length}/{maxTags})\n </span>\n )}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n \n <div ref={fieldRef as any} data-field={field}>\n <div className={cn(\n \"w-full rounded-md border border-input bg-background text-sm ring-offset-background\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n error && \"border-destructive focus-within:ring-destructive\",\n isDisabled && \"cursor-not-allowed opacity-50\"\n )}>\n <Tags className=\"w-full\">\n <TagsTrigger className=\"w-full px-3 py-2 border-0 bg-transparent\" disabled={isDisabled}>\n {selected.length === 0 && placeholder && (\n <span className=\"text-muted-foreground text-sm\">{placeholder}</span>\n )}\n {selected.map((tagId) => {\n const tag = tags.find((t) => t.id === tagId);\n return tag ? (\n <TagsValue \n key={tagId} \n onRemove={() => handleRemove(tagId)}\n className=\"px-2 py-1 text-sm gap-1\"\n >\n {tag.label}\n </TagsValue>\n ) : null;\n })}\n </TagsTrigger>\n <TagsContent>\n <TagsInput \n onValueChange={setNewTag} \n placeholder={`Search ${placeholder.toLowerCase()}...`}\n value={newTag}\n disabled={isDisabled}\n />\n <TagsList>\n {filteredTags.length === 0 && allowCreate && newTag.trim() && (\n <TagsEmpty>\n <button\n className=\"mx-auto flex cursor-pointer items-center gap-2 text-sm\"\n onClick={handleCreateTag}\n type=\"button\"\n >\n <PlusIcon className=\"text-muted-foreground\" size={14} />\n Create new tag: {newTag}\n </button>\n </TagsEmpty>\n )}\n {filteredTags.length === 0 && (!allowCreate || !newTag.trim()) && (\n <TagsEmpty>\n <span className=\"text-sm text-muted-foreground\">No tags found</span>\n </TagsEmpty>\n )}\n <TagsGroup>\n {filteredTags.map((tag) => (\n <TagsItem \n key={tag.id} \n onSelect={handleSelect} \n value={tag.id}\n disabled={maxTags ? selected.length >= maxTags && !selected.includes(tag.id) : false}\n >\n {tag.label}\n {selected.includes(tag.id) && (\n <CheckIcon className=\"text-muted-foreground\" size={14} />\n )}\n </TagsItem>\n ))}\n </TagsGroup>\n </TagsList>\n </TagsContent>\n </Tags>\n </div>\n </div>\n \n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n\nexport default SmartAutoSuggestTags;\n\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Label } from '../components/ui/label';\nimport { Button } from '../components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { Bold, Italic, Underline, List, ListOrdered, InfoIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\n// =============================================================================\n// SMART BASIC RICH TEXTBOX TYPES\n// =============================================================================\n\nexport interface SmartBasicRichTextboxProps {\n field: string;\n label?: string;\n placeholder?: string;\n validation?: any;\n className?: string;\n required?: boolean;\n defaultValue?: string; // Default HTML content\n minHeight?: string; // Minimum height of the editor (e.g., '200px')\n maxHeight?: string; // Maximum height of the editor (e.g., '400px')\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\n// =============================================================================\n// HTML SANITIZATION\n// =============================================================================\n\n/**\n * Sanitizes HTML to only allow specific tags: p, strong, b, em, i, u, ul, ol, li, br\n * Removes all other tags and attributes\n */\nconst sanitizeHtml = (html: string): string => {\n // Create a temporary div to parse HTML\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n\n // Allowed tags\n const allowedTags = ['P', 'STRONG', 'B', 'EM', 'I', 'U', 'UL', 'OL', 'LI', 'BR', 'DIV'];\n\n // Recursively clean nodes\n const cleanNode = (node: Node): Node | null => {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.cloneNode(false);\n }\n\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n const tagName = element.tagName.toUpperCase();\n\n // Convert DIV to P\n if (tagName === 'DIV') {\n const p = document.createElement('p');\n Array.from(element.childNodes).forEach(child => {\n const cleanedChild = cleanNode(child);\n if (cleanedChild) p.appendChild(cleanedChild);\n });\n return p;\n }\n\n // If tag is not allowed, return its children\n if (!allowedTags.includes(tagName)) {\n const fragment = document.createDocumentFragment();\n Array.from(element.childNodes).forEach(child => {\n const cleanedChild = cleanNode(child);\n if (cleanedChild) fragment.appendChild(cleanedChild);\n });\n return fragment;\n }\n\n // Create clean element without attributes\n const cleanElement = document.createElement(tagName.toLowerCase());\n Array.from(element.childNodes).forEach(child => {\n const cleanedChild = cleanNode(child);\n if (cleanedChild) cleanElement.appendChild(cleanedChild);\n });\n\n return cleanElement;\n }\n\n return null;\n };\n\n const cleanedDiv = document.createElement('div');\n Array.from(tempDiv.childNodes).forEach(child => {\n const cleanedChild = cleanNode(child);\n if (cleanedChild) cleanedDiv.appendChild(cleanedChild);\n });\n\n return cleanedDiv.innerHTML;\n};\n\n// =============================================================================\n// SMART BASIC RICH TEXTBOX COMPONENT\n// =============================================================================\n\nexport const SmartBasicRichTextbox: React.FC<SmartBasicRichTextboxProps> = ({\n field,\n label,\n placeholder = 'Enter text...',\n validation,\n className = '',\n required = false,\n defaultValue,\n minHeight = '150px',\n maxHeight = '400px',\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n const editorRef = useRef<HTMLDivElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n // Register validation for this field\n useEffect(() => {\n if (validation && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, validation);\n }\n }, [validation, field, registerValidation]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Sync editor content with form value\n useEffect(() => {\n if (editorRef.current && value !== undefined) {\n const sanitized = sanitizeHtml(value || '');\n if (editorRef.current.innerHTML !== sanitized) {\n editorRef.current.innerHTML = sanitized;\n }\n }\n }, [value]);\n\n // Handle content change\n const handleInput = useCallback(() => {\n if (editorRef.current) {\n const html = editorRef.current.innerHTML;\n const sanitized = sanitizeHtml(html);\n onChange(sanitized);\n }\n }, [onChange]);\n\n // Handle keyboard events\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n // Handle Enter key to create new paragraph\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n document.execCommand('insertParagraph', false);\n return;\n }\n }, []);\n\n // Format commands\n const execCommand = useCallback((command: string, value?: string) => {\n document.execCommand(command, false, value);\n editorRef.current?.focus();\n handleInput();\n }, [handleInput]);\n\n const toggleBold = () => execCommand('bold');\n const toggleItalic = () => execCommand('italic');\n const toggleUnderline = () => execCommand('underline');\n const toggleBulletList = () => execCommand('insertUnorderedList');\n const toggleNumberedList = () => execCommand('insertOrderedList');\n\n // Check if a format is currently active\n const isFormatActive = useCallback((format: string): boolean => {\n return document.queryCommandState(format);\n }, []);\n\n const [activeFormats, setActiveFormats] = useState({\n bold: false,\n italic: false,\n underline: false,\n bulletList: false,\n numberedList: false\n });\n\n // Update active formats on selection change\n const updateActiveFormats = useCallback(() => {\n if (isFocused) {\n setActiveFormats({\n bold: isFormatActive('bold'),\n italic: isFormatActive('italic'),\n underline: isFormatActive('underline'),\n bulletList: isFormatActive('insertUnorderedList'),\n numberedList: isFormatActive('insertOrderedList')\n });\n }\n }, [isFocused, isFormatActive]);\n\n // Update formats on selection change\n useEffect(() => {\n if (isFocused) {\n document.addEventListener('selectionchange', updateActiveFormats);\n return () => document.removeEventListener('selectionchange', updateActiveFormats);\n }\n }, [isFocused, updateActiveFormats]);\n\n const handleFocus = () => {\n setIsFocused(true);\n updateActiveFormats();\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n };\n\n return (\n <div className={cn('flex-1 min-w-0', className)}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n\n <div\n ref={fieldRef as any}\n data-field={field}\n className={cn(\n 'w-full rounded-md border border-input bg-background',\n 'focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2',\n error && 'border-destructive focus-within:ring-destructive',\n isDisabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {/* Toolbar */}\n <div className={cn(\"flex items-center gap-0.5 p-1.5 border-b border-border bg-muted/30\", isDisabled && \"pointer-events-none\")}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.bold && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleBold}\n disabled={isDisabled}\n >\n <Bold className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Bold (Ctrl+B)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.italic && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleItalic}\n disabled={isDisabled}\n >\n <Italic className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Italic (Ctrl+I)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.underline && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleUnderline}\n disabled={isDisabled}\n >\n <Underline className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Underline (Ctrl+U)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <div className=\"w-px h-5 bg-border mx-1\" />\n\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.bulletList && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleBulletList}\n disabled={isDisabled}\n >\n <List className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Bullet List</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.numberedList && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleNumberedList}\n disabled={isDisabled}\n >\n <ListOrdered className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Numbered List</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n {/* Editor */}\n <div\n ref={editorRef}\n contentEditable={!isDisabled}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={cn(\n 'w-full px-3 py-2 text-sm text-foreground',\n 'bg-background',\n 'focus:outline-none',\n 'overflow-y-auto',\n '[&>p]:my-2 [&>p]:leading-relaxed',\n '[&>ul]:my-2 [&>ul]:ml-6 [&>ul]:list-disc [&>ul]:list-inside',\n '[&_ul]:my-2 [&_ul]:ml-6 [&_ul]:list-disc [&_ul]:list-inside',\n '[&>ol]:my-2 [&>ol]:ml-6 [&>ol]:list-decimal [&>ol]:list-inside',\n '[&_ol]:my-2 [&_ol]:ml-6 [&_ol]:list-decimal [&_ol]:list-inside',\n '[&>li]:my-1 [&_li]:my-1',\n '[&_strong]:font-semibold [&_b]:font-semibold',\n '[&_em]:italic [&_i]:italic',\n '[&_u]:underline',\n !value && 'empty:before:content-[attr(data-placeholder)] empty:before:text-muted-foreground empty:before:pointer-events-none'\n )}\n style={{\n minHeight,\n maxHeight\n }}\n data-placeholder={placeholder}\n />\n </div>\n\n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n\nexport default SmartBasicRichTextbox;\n"]}
1
+ {"version":3,"sources":["../src/smart-fields/SmartFileUpload.tsx","../src/components/ui/slider.tsx","../src/smart-fields/SmartSlider.tsx","../src/smart-fields/SmartDualRangeSlider.tsx","../src/components/ui/shadcn-io/tags/index.tsx","../src/smart-fields/SmartAutoSuggestTags.tsx","../src/smart-fields/SmartBasicRichTextbox.tsx"],"names":["jsxs","jsx","useRef","useMemo","useEffect","InfoIcon","useState","value"],"mappings":"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","file":"fields.js","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Label } from '../components/ui/label';\nimport { Button } from '../components/ui/button';\nimport { Input } from '../components/ui/input';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { InfoIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nexport interface SmartFileUploadProps {\n field: string;\n label?: string;\n className?: string;\n validation?: any;\n required?: boolean;\n multiple?: boolean;\n accept?: string;\n maxFiles?: number;\n maxSizeBytes?: number;\n uploadApi?: string; // optional endpoint to upload files separately as multipart\n uploadOnSelect?: boolean; // if true, upload immediately after selection\n onSuccess?: (result: any) => void;\n onError?: (error: any) => void;\n defaultValue?: File | File[]; // Default value for the file upload (File or File[])\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\nexport const SmartFileUpload: React.FC<SmartFileUploadProps> = ({\n field,\n label,\n className = '',\n validation,\n required = false,\n multiple = false,\n accept,\n maxFiles,\n maxSizeBytes,\n uploadApi,\n uploadOnSelect = false,\n onSuccess,\n onError,\n defaultValue,\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData, registerSubmitHook, unregisterSubmitHook } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n const displayName = label || field;\n\n useEffect(() => {\n if (validation && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, validation, { label: displayName });\n }\n }, [validation, field, registerValidation, displayName]);\n\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n const normalizedFiles: File[] = useMemo(() => {\n const filesAny: any[] = Array.isArray(value)\n ? value\n : value\n ? [value]\n : [];\n return filesAny.filter((f) => f instanceof File);\n }, [value]);\n\n // Store preview URLs with cleanup\n const [previewUrls, setPreviewUrls] = useState<Map<string, string>>(new Map());\n\n // Create preview URLs for images\n useEffect(() => {\n const newUrls = new Map<string, string>();\n \n normalizedFiles.forEach((file) => {\n if (file.type.startsWith('image/')) {\n const key = `${file.name}-${file.size}-${file.lastModified}`;\n if (!previewUrls.has(key)) {\n newUrls.set(key, URL.createObjectURL(file));\n } else {\n newUrls.set(key, previewUrls.get(key)!);\n }\n }\n });\n\n // Cleanup old URLs\n previewUrls.forEach((url: string, key: string) => {\n if (!newUrls.has(key)) {\n URL.revokeObjectURL(url);\n }\n });\n\n setPreviewUrls(newUrls);\n }, [normalizedFiles]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n previewUrls.forEach((url: string) => URL.revokeObjectURL(url));\n };\n }, []);\n\n const removeFileAt = (index: number) => {\n if (!multiple) {\n onChange(null);\n if (inputRef.current) inputRef.current.value = '';\n return;\n }\n const next = normalizedFiles.filter((_, i) => i !== index);\n onChange(next);\n if (next.length === 0 && inputRef.current) inputRef.current.value = '';\n };\n\n const handleFiles = (filesList: FileList | null) => {\n if (!filesList) return;\n let files = Array.from(filesList);\n\n if (maxFiles && files.length > maxFiles) {\n files = files.slice(0, maxFiles);\n }\n if (maxSizeBytes) {\n files = files.filter((f) => f.size <= maxSizeBytes);\n }\n\n if (multiple) {\n onChange(files);\n } else {\n onChange(files[0] || null);\n }\n };\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files);\n };\n\n const clearSelection = () => {\n onChange(multiple ? [] : null);\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n };\n\n const performUpload = async () => {\n if (!uploadApi) return;\n const filesAny: any[] = Array.isArray(value)\n ? value\n : value\n ? [value]\n : [];\n const files: File[] = filesAny.filter((f) => f instanceof File);\n if (files.length === 0) return;\n\n const fd = new FormData();\n if (multiple) {\n for (const f of files) fd.append(`${field}[]`, f);\n } else if (files[0]) {\n fd.append(field, files[0]);\n }\n\n try {\n const response = await fetch(uploadApi, {\n method: 'POST',\n body: fd\n });\n const maybeJson = (() => {\n try { return response.headers.get('content-type')?.includes('application/json') ? true : false; } catch { return false; }\n })();\n const result = maybeJson ? await response.json() : await response.text();\n if (!response.ok) {\n if (onError) onError(result);\n return;\n }\n if (onSuccess) onSuccess(result);\n } catch (err) {\n if (onError) onError(err);\n }\n };\n\n // Upload immediately upon selection when enabled\n useEffect(() => {\n if (!uploadOnSelect || !uploadApi) return;\n const filesAny: any[] = Array.isArray(value)\n ? value\n : value\n ? [value]\n : [];\n const files: File[] = filesAny.filter((f) => f instanceof File);\n if (files.length > 0) {\n void performUpload();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, uploadOnSelect, uploadApi]);\n\n // Register a submit hook if deferred upload is desired\n useEffect(() => {\n const key = `smart-file-upload:${field}`;\n if (uploadApi && !uploadOnSelect) {\n registerSubmitHook(key, performUpload);\n return () => unregisterSubmitHook(key);\n }\n return () => unregisterSubmitHook(key);\n }, [field, uploadApi, uploadOnSelect, registerSubmitHook, unregisterSubmitHook, value, multiple]);\n\n return (\n <div className={cn('flex-1 min-w-0', className)}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n <div className={cn('flex items-center gap-2', error && 'text-destructive')}>\n <Input\n ref={(el) => {\n inputRef.current = el as any;\n if (typeof fieldRef === 'function') fieldRef(el);\n }}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={onInputChange}\n className={cn(error && 'border-destructive')}\n data-field={field}\n disabled={isDisabled}\n />\n {(Array.isArray(value) ? value.length > 0 : !!value) && (\n <Button type=\"button\" variant=\"secondary\" onClick={clearSelection} disabled={isDisabled}>\n Clear\n </Button>\n )}\n </div>\n\n {normalizedFiles.length === 0 ? (\n <div className=\"mt-2 text-sm text-muted-foreground\">No file selected</div>\n ) : (\n <ul className=\"mt-2 space-y-1\">\n {normalizedFiles.map((f, idx) => {\n const isImage = f.type.startsWith('image/');\n const key = `${f.name}-${f.size}-${f.lastModified}`;\n const previewUrl = isImage ? previewUrls.get(key) : null;\n \n return (\n <li key={`${f.name}-${idx}`} className=\"flex items-center justify-between rounded border px-2 py-1\">\n <div className=\"flex items-center min-w-0 mr-2\">\n {isImage && previewUrl ? (\n <div className=\"relative group mr-2\">\n <img\n src={previewUrl}\n alt={`Preview of ${f.name}`}\n className=\"w-8 h-8 object-cover rounded border\"\n />\n </div>\n ) : (\n <div className=\"w-8 h-8 mr-2 flex items-center justify-center bg-gray-100 rounded border\">\n 📄\n </div>\n )}\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium\">{f.name}</div>\n <div className=\"text-xs text-muted-foreground\">{(f.size / 1024).toFixed(1)} KB</div>\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeFileAt(idx)}\n aria-label={`Remove ${f.name}`}\n disabled={isDisabled}\n >\n ✕\n </Button>\n </li>\n );\n })}\n </ul>\n )}\n\n\n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n\nexport default SmartFileUpload;\n\n\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"border-primary bg-background ring-ring/50 block size-4 shrink-0 rounded-full border shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { z } from 'zod';\nimport { Slider } from '../components/ui/slider';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { InfoIcon } from 'lucide-react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\n\n// =============================================================================\n// SMART SLIDER TYPES\n// =============================================================================\n\nexport interface SmartSliderProps {\n field: string;\n label?: string;\n min?: number;\n max?: number;\n step?: number;\n className?: string;\n validation?: any; // Zod schema\n required?: boolean;\n showValue?: boolean;\n valueFormatter?: (value: number) => string;\n defaultValue?: number; // Default value for the slider\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\n// =============================================================================\n// SMART SLIDER COMPONENT\n// =============================================================================\n\nexport const SmartSlider: React.FC<SmartSliderProps> = ({\n field,\n label,\n min = 0,\n max = 100,\n step = 1,\n className = '',\n validation,\n required = false,\n showValue = true,\n valueFormatter = (value) => value.toString(),\n defaultValue,\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n const displayName = label || field;\n\n const builtinValidation = useMemo(() => {\n if (validation || !required) return undefined;\n return z.number({ message: `${displayName} is required` });\n }, [validation, required, displayName]);\n\n const schemaToRegister = validation ?? builtinValidation;\n\n useEffect(() => {\n if (schemaToRegister && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, schemaToRegister, { label: displayName });\n }\n }, [schemaToRegister, field, registerValidation, displayName]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Handle slider value change\n const handleValueChange = (values: number[]) => {\n const newValue = values[0];\n onChange(newValue);\n };\n\n // Get current value or default to min\n const currentValue = value !== undefined ? value : min;\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n {showValue && (\n <span className=\"ml-2 text-muted-foreground\">\n ({valueFormatter(currentValue)})\n </span>\n )}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n \n <div className=\"space-y-2\">\n <Slider\n ref={fieldRef}\n value={[currentValue]}\n onValueChange={handleValueChange}\n min={min}\n max={max}\n step={step}\n className={`w-full ${error ? 'border-destructive' : ''}`}\n data-field={field}\n disabled={isDisabled}\n />\n \n <div className=\"flex justify-between text-sm text-muted-foreground\">\n <span>{valueFormatter(min)}</span>\n <span>{valueFormatter(max)}</span>\n </div>\n </div>\n \n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Slider } from '../components/ui/slider';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { InfoIcon } from 'lucide-react';\n\n// =============================================================================\n// SMART DUAL RANGE SLIDER TYPES\n// =============================================================================\n\nexport interface SmartDualRangeSliderProps {\n minField: string;\n maxField: string;\n label?: string;\n min?: number;\n max?: number;\n step?: number;\n className?: string;\n minValidation?: any; // Zod schema for min field\n maxValidation?: any; // Zod schema for max field\n required?: boolean;\n showValues?: boolean;\n valueFormatter?: (value: number) => string;\n minLabel?: string;\n maxLabel?: string;\n defaultMinValue?: number; // Default value for the min field\n defaultMaxValue?: number; // Default value for the max field\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\n// =============================================================================\n// SMART DUAL RANGE SLIDER COMPONENT\n// =============================================================================\n\nexport const SmartDualRangeSlider: React.FC<SmartDualRangeSliderProps> = ({\n minField,\n maxField,\n label,\n min = 0,\n max = 100,\n step = 1,\n className = '',\n minValidation,\n maxValidation,\n required = false,\n showValues = true,\n valueFormatter = (value) => value.toString(),\n minLabel = 'Min',\n maxLabel = 'Max',\n defaultMinValue,\n defaultMaxValue,\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData } = useSmartForm();\n // Use separate form fields for min and max values\n const minFormField = useFormField(minField);\n const maxFormField = useFormField(maxField);\n const fieldDetection = useFieldDetection();\n const hasRegisteredMin = useRef(false);\n const hasRegisteredMax = useRef(false);\n const hasSetDefaultMin = useRef(false);\n const hasSetDefaultMax = useRef(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n useEffect(() => {\n if (minValidation && !hasRegisteredMin.current) {\n hasRegisteredMin.current = true;\n minFormField.registerValidation(minField, minValidation, { label: minLabel });\n }\n }, [minValidation, minField, minFormField, minLabel]);\n\n useEffect(() => {\n if (maxValidation && !hasRegisteredMax.current) {\n hasRegisteredMax.current = true;\n maxFormField.registerValidation(maxField, maxValidation, { label: maxLabel });\n }\n }, [maxValidation, maxField, maxFormField, maxLabel]);\n\n // Auto-register fields if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(minField);\n fieldDetection.registerField(maxField);\n }\n }, [minField, maxField, fieldDetection]);\n\n // Set default value for min field if provided and field is empty\n useEffect(() => {\n if (defaultMinValue !== undefined && !hasSetDefaultMin.current && (minFormField.value === undefined || minFormField.value === null || minFormField.value === '')) {\n minFormField.onChange(defaultMinValue);\n hasSetDefaultMin.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultMinValue, minFormField.value]);\n\n // Set default value for max field if provided and field is empty\n useEffect(() => {\n if (defaultMaxValue !== undefined && !hasSetDefaultMax.current && (maxFormField.value === undefined || maxFormField.value === null || maxFormField.value === '')) {\n maxFormField.onChange(defaultMaxValue);\n hasSetDefaultMax.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultMaxValue, maxFormField.value]);\n\n // Handle slider value change\n const handleValueChange = (values: number[]) => {\n const [minValue, maxValue] = values;\n minFormField.onChange(minValue);\n maxFormField.onChange(maxValue);\n };\n\n // Get current values or defaults\n const currentMin = minFormField.value !== undefined ? minFormField.value : min;\n const currentMax = maxFormField.value !== undefined ? maxFormField.value : max;\n \n // Combine errors from both fields\n const combinedError = minFormField.error || maxFormField.error;\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n \n <div className=\"space-y-4\">\n <Slider\n ref={minFormField.fieldRef}\n value={[currentMin, currentMax]}\n onValueChange={handleValueChange}\n min={min}\n max={max}\n step={step}\n className={`w-full ${combinedError ? 'border-destructive' : ''}`}\n data-min-field={minField}\n data-max-field={maxField}\n disabled={isDisabled}\n />\n \n {showValues && (\n <div className=\"flex justify-between items-center text-sm\">\n <div className=\"flex flex-col items-center\">\n <span className=\"text-muted-foreground\">{minLabel}: {valueFormatter(currentMin)}</span>\n </div>\n <div className=\"flex flex-col items-center\">\n <span className=\"text-muted-foreground\">{maxLabel}: {valueFormatter(currentMax)}</span>\n </div>\n </div>\n )}\n </div>\n \n {combinedError && (\n <p className=\"text-destructive text-sm mt-1\">{combinedError}</p>\n )}\n </div>\n );\n};\n","'use client';\n\nimport { XIcon } from 'lucide-react';\nimport {\n type ComponentProps,\n createContext,\n type MouseEventHandler,\n type ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Badge } from '../../badge';\nimport { Button } from '../../button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../command';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../../popover';\nimport { cn } from '../../../../lib/utils';\n\ntype TagsContextType = {\n value?: string;\n setValue?: (value: string) => void;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n width?: number;\n setWidth?: (width: number) => void;\n};\n\nconst TagsContext = createContext<TagsContextType>({\n value: undefined,\n setValue: undefined,\n open: false,\n onOpenChange: () => { },\n width: undefined,\n setWidth: undefined,\n});\n\nconst useTagsContext = () => {\n const context = useContext(TagsContext);\n\n if (!context) {\n throw new Error('useTagsContext must be used within a TagsProvider');\n }\n\n return context;\n};\n\nexport type TagsProps = {\n value?: string;\n setValue?: (value: string) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n className?: string;\n};\n\nexport const Tags = ({\n value,\n setValue,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n children,\n className,\n}: TagsProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const [width, setWidth] = useState<number>();\n const ref = useRef<HTMLDivElement>(null);\n\n const open = controlledOpen ?? uncontrolledOpen;\n const onOpenChange = controlledOnOpenChange ?? setUncontrolledOpen;\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n setWidth(entries[0].contentRect.width);\n });\n\n resizeObserver.observe(ref.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n return (\n <TagsContext.Provider\n value={{ value, setValue, open, onOpenChange, width, setWidth }}\n >\n <Popover onOpenChange={onOpenChange} open={open}>\n <div className={cn('relative w-full', className)} ref={ref}>\n {children}\n </div>\n </Popover>\n </TagsContext.Provider>\n );\n};\n\nexport type TagsTriggerProps = ComponentProps<typeof Button>;\n\nexport const TagsTrigger = ({\n className,\n children,\n ...props\n}: TagsTriggerProps) => (\n <PopoverTrigger asChild>\n <Button\n className={cn('h-auto w-full justify-between p-2', className)}\n // biome-ignore lint/a11y/useSemanticElements: \"Required\"\n role=\"combobox\"\n variant=\"outline\"\n {...props}\n >\n <div className=\"flex flex-wrap items-center gap-1\">\n {children}\n <span className=\"px-2 py-px text-muted-foreground\">\n </span>\n </div>\n </Button>\n </PopoverTrigger>\n);\n\nexport type TagsValueProps = ComponentProps<typeof Badge>;\n\nexport const TagsValue = ({\n className,\n children,\n onRemove,\n ...props\n}: TagsValueProps & { onRemove?: () => void }) => {\n const handleRemove: MouseEventHandler<HTMLDivElement> = (event) => {\n event.preventDefault();\n event.stopPropagation();\n onRemove?.();\n };\n\n return (\n <Badge className={cn('flex items-center gap-2', className)} {...props}>\n {children}\n {onRemove && (\n // biome-ignore lint/a11y/noStaticElementInteractions: \"This is a clickable badge\"\n // biome-ignore lint/a11y/useKeyWithClickEvents: \"This is a clickable badge\"\n <div\n className=\"size-auto cursor-pointer hover:text-muted-foreground\"\n onClick={handleRemove}\n >\n <XIcon size={12} />\n </div>\n )}\n </Badge>\n );\n};\n\nexport type TagsContentProps = ComponentProps<typeof PopoverContent>;\n\nexport const TagsContent = ({\n className,\n children,\n ...props\n}: TagsContentProps) => {\n const { width } = useTagsContext();\n\n return (\n <PopoverContent\n className={cn('p-0', className)}\n style={{ width }}\n {...props}\n >\n <Command>{children}</Command>\n </PopoverContent>\n );\n};\n\nexport type TagsInputProps = ComponentProps<typeof CommandInput>;\n\nexport const TagsInput = ({ className, ...props }: TagsInputProps) => (\n <CommandInput className={cn('h-9', className)} {...props} />\n);\n\nexport type TagsListProps = ComponentProps<typeof CommandList>;\n\nexport const TagsList = ({ className, ...props }: TagsListProps) => (\n <CommandList className={cn('max-h-[200px]', className)} {...props} />\n);\n\nexport type TagsEmptyProps = ComponentProps<typeof CommandEmpty>;\n\nexport const TagsEmpty = ({\n children,\n className,\n ...props\n}: TagsEmptyProps) => (\n <CommandEmpty {...props}>{children ?? 'No tags found.'}</CommandEmpty>\n);\n\nexport type TagsGroupProps = ComponentProps<typeof CommandGroup>;\n\nexport const TagsGroup = CommandGroup;\n\nexport type TagsItemProps = ComponentProps<typeof CommandItem>;\n\nexport const TagsItem = ({ className, ...props }: TagsItemProps) => (\n <CommandItem\n className={cn('cursor-pointer items-center justify-between', className)}\n {...props}\n />\n);\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { cn } from '../lib/utils';\nimport {\n Tags,\n TagsContent,\n TagsEmpty,\n TagsGroup,\n TagsInput,\n TagsItem,\n TagsList,\n TagsTrigger,\n TagsValue,\n} from '../components/ui/shadcn-io/tags';\nimport { CheckIcon, PlusIcon, InfoIcon } from 'lucide-react';\n\n// =============================================================================\n// SMART AUTO SUGGEST TAGS TYPES\n// =============================================================================\n\nexport interface TagOption {\n id: string;\n label: string;\n}\n\nexport interface SmartAutoSuggestTagsProps {\n field: string;\n label?: string;\n options: TagOption[]; // Available tags to choose from\n className?: string;\n placeholder?: string;\n validation?: any;\n required?: boolean;\n allowCreate?: boolean; // Allow creating new tags\n maxTags?: number; // Maximum number of tags allowed\n defaultValue?: string[]; // Default selected tag IDs\n onTagCreate?: (tag: TagOption) => void; // Callback when a new tag is created\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\n// =============================================================================\n// SMART AUTO SUGGEST TAGS COMPONENT\n// =============================================================================\n\nexport const SmartAutoSuggestTags: React.FC<SmartAutoSuggestTagsProps> = ({\n field,\n label,\n options: initialOptions,\n className = '',\n placeholder = 'Select tags...',\n validation,\n required = false,\n allowCreate = true,\n maxTags,\n defaultValue,\n onTagCreate,\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n // Local state for available tags and search input\n const [tags, setTags] = useState<TagOption[]>(initialOptions);\n const [newTag, setNewTag] = useState<string>('');\n \n // Normalize value to array of strings\n const selected: string[] = Array.isArray(value) ? value : [];\n\n const displayName = label || field;\n\n useEffect(() => {\n if (validation && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, validation, { label: displayName });\n }\n }, [validation, field, registerValidation, displayName]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (!value || (Array.isArray(value) && value.length === 0))) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Update tags when options change\n useEffect(() => {\n setTags(initialOptions);\n }, [initialOptions]);\n\n const handleRemove = (tagId: string) => {\n if (!selected.includes(tagId)) {\n return;\n }\n const newSelected = selected.filter((v) => v !== tagId);\n onChange(newSelected);\n };\n\n const handleSelect = (tagId: string) => {\n // Check if already selected\n if (selected.includes(tagId)) {\n handleRemove(tagId);\n return;\n }\n\n // Check max tags limit\n if (maxTags && selected.length >= maxTags) {\n return;\n }\n\n const newSelected = [...selected, tagId];\n onChange(newSelected);\n };\n\n const handleCreateTag = () => {\n if (!newTag.trim()) return;\n if (!allowCreate) return;\n\n const tagId = newTag.toLowerCase().replace(/\\s+/g, '-');\n const newTagOption: TagOption = {\n id: tagId,\n label: newTag,\n };\n\n // Add to available tags\n setTags((prev) => [...prev, newTagOption]);\n \n // Add to selected tags\n const newSelected = [...selected, tagId];\n onChange(newSelected);\n\n // Call callback if provided\n if (onTagCreate) {\n onTagCreate(newTagOption);\n }\n\n setNewTag('');\n };\n\n // Filter tags based on search input\n const filteredTags = tags.filter((tag) =>\n tag.label.toLowerCase().includes(newTag.toLowerCase())\n );\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n {maxTags && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n ({selected.length}/{maxTags})\n </span>\n )}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n \n <div ref={fieldRef as any} data-field={field}>\n <div className={cn(\n \"w-full rounded-md border border-input bg-background text-sm ring-offset-background\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n error && \"border-destructive focus-within:ring-destructive\",\n isDisabled && \"cursor-not-allowed opacity-50\"\n )}>\n <Tags className=\"w-full\">\n <TagsTrigger className=\"w-full px-3 py-2 border-0 bg-transparent\" disabled={isDisabled}>\n {selected.length === 0 && placeholder && (\n <span className=\"text-muted-foreground text-sm\">{placeholder}</span>\n )}\n {selected.map((tagId) => {\n const tag = tags.find((t) => t.id === tagId);\n return tag ? (\n <TagsValue \n key={tagId} \n onRemove={() => handleRemove(tagId)}\n className=\"px-2 py-1 text-sm gap-1\"\n >\n {tag.label}\n </TagsValue>\n ) : null;\n })}\n </TagsTrigger>\n <TagsContent>\n <TagsInput \n onValueChange={setNewTag} \n placeholder={`Search ${placeholder.toLowerCase()}...`}\n value={newTag}\n disabled={isDisabled}\n />\n <TagsList>\n {filteredTags.length === 0 && allowCreate && newTag.trim() && (\n <TagsEmpty>\n <button\n className=\"mx-auto flex cursor-pointer items-center gap-2 text-sm\"\n onClick={handleCreateTag}\n type=\"button\"\n >\n <PlusIcon className=\"text-muted-foreground\" size={14} />\n Create new tag: {newTag}\n </button>\n </TagsEmpty>\n )}\n {filteredTags.length === 0 && (!allowCreate || !newTag.trim()) && (\n <TagsEmpty>\n <span className=\"text-sm text-muted-foreground\">No tags found</span>\n </TagsEmpty>\n )}\n <TagsGroup>\n {filteredTags.map((tag) => (\n <TagsItem \n key={tag.id} \n onSelect={handleSelect} \n value={tag.id}\n disabled={maxTags ? selected.length >= maxTags && !selected.includes(tag.id) : false}\n >\n {tag.label}\n {selected.includes(tag.id) && (\n <CheckIcon className=\"text-muted-foreground\" size={14} />\n )}\n </TagsItem>\n ))}\n </TagsGroup>\n </TagsList>\n </TagsContent>\n </Tags>\n </div>\n </div>\n \n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n\nexport default SmartAutoSuggestTags;\n\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Label } from '../components/ui/label';\nimport { Button } from '../components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { Bold, Italic, Underline, List, ListOrdered, InfoIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\n// =============================================================================\n// SMART BASIC RICH TEXTBOX TYPES\n// =============================================================================\n\nexport interface SmartBasicRichTextboxProps {\n field: string;\n label?: string;\n placeholder?: string;\n validation?: any;\n className?: string;\n required?: boolean;\n defaultValue?: string; // Default HTML content\n minHeight?: string; // Minimum height of the editor (e.g., '200px')\n maxHeight?: string; // Maximum height of the editor (e.g., '400px')\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n}\n\n// =============================================================================\n// HTML SANITIZATION\n// =============================================================================\n\n/**\n * Sanitizes HTML to only allow specific tags: p, strong, b, em, i, u, ul, ol, li, br\n * Removes all other tags and attributes\n */\nconst sanitizeHtml = (html: string): string => {\n // Create a temporary div to parse HTML\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n\n // Allowed tags\n const allowedTags = ['P', 'STRONG', 'B', 'EM', 'I', 'U', 'UL', 'OL', 'LI', 'BR', 'DIV'];\n\n // Recursively clean nodes\n const cleanNode = (node: Node): Node | null => {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.cloneNode(false);\n }\n\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n const tagName = element.tagName.toUpperCase();\n\n // Convert DIV to P\n if (tagName === 'DIV') {\n const p = document.createElement('p');\n Array.from(element.childNodes).forEach(child => {\n const cleanedChild = cleanNode(child);\n if (cleanedChild) p.appendChild(cleanedChild);\n });\n return p;\n }\n\n // If tag is not allowed, return its children\n if (!allowedTags.includes(tagName)) {\n const fragment = document.createDocumentFragment();\n Array.from(element.childNodes).forEach(child => {\n const cleanedChild = cleanNode(child);\n if (cleanedChild) fragment.appendChild(cleanedChild);\n });\n return fragment;\n }\n\n // Create clean element without attributes\n const cleanElement = document.createElement(tagName.toLowerCase());\n Array.from(element.childNodes).forEach(child => {\n const cleanedChild = cleanNode(child);\n if (cleanedChild) cleanElement.appendChild(cleanedChild);\n });\n\n return cleanElement;\n }\n\n return null;\n };\n\n const cleanedDiv = document.createElement('div');\n Array.from(tempDiv.childNodes).forEach(child => {\n const cleanedChild = cleanNode(child);\n if (cleanedChild) cleanedDiv.appendChild(cleanedChild);\n });\n\n return cleanedDiv.innerHTML;\n};\n\n// =============================================================================\n// SMART BASIC RICH TEXTBOX COMPONENT\n// =============================================================================\n\nexport const SmartBasicRichTextbox: React.FC<SmartBasicRichTextboxProps> = ({\n field,\n label,\n placeholder = 'Enter text...',\n validation,\n className = '',\n required = false,\n defaultValue,\n minHeight = '150px',\n maxHeight = '400px',\n info,\n subLabel,\n disabled,\n hidden\n}) => {\n const { formData } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n const editorRef = useRef<HTMLDivElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n const displayName = label || field;\n\n useEffect(() => {\n if (validation && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, validation, { label: displayName });\n }\n }, [validation, field, registerValidation, displayName]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Sync editor content with form value\n useEffect(() => {\n if (editorRef.current && value !== undefined) {\n const sanitized = sanitizeHtml(value || '');\n if (editorRef.current.innerHTML !== sanitized) {\n editorRef.current.innerHTML = sanitized;\n }\n }\n }, [value]);\n\n // Handle content change\n const handleInput = useCallback(() => {\n if (editorRef.current) {\n const html = editorRef.current.innerHTML;\n const sanitized = sanitizeHtml(html);\n onChange(sanitized);\n }\n }, [onChange]);\n\n // Handle keyboard events\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n // Handle Enter key to create new paragraph\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n document.execCommand('insertParagraph', false);\n return;\n }\n }, []);\n\n // Format commands\n const execCommand = useCallback((command: string, value?: string) => {\n document.execCommand(command, false, value);\n editorRef.current?.focus();\n handleInput();\n }, [handleInput]);\n\n const toggleBold = () => execCommand('bold');\n const toggleItalic = () => execCommand('italic');\n const toggleUnderline = () => execCommand('underline');\n const toggleBulletList = () => execCommand('insertUnorderedList');\n const toggleNumberedList = () => execCommand('insertOrderedList');\n\n // Check if a format is currently active\n const isFormatActive = useCallback((format: string): boolean => {\n return document.queryCommandState(format);\n }, []);\n\n const [activeFormats, setActiveFormats] = useState({\n bold: false,\n italic: false,\n underline: false,\n bulletList: false,\n numberedList: false\n });\n\n // Update active formats on selection change\n const updateActiveFormats = useCallback(() => {\n if (isFocused) {\n setActiveFormats({\n bold: isFormatActive('bold'),\n italic: isFormatActive('italic'),\n underline: isFormatActive('underline'),\n bulletList: isFormatActive('insertUnorderedList'),\n numberedList: isFormatActive('insertOrderedList')\n });\n }\n }, [isFocused, isFormatActive]);\n\n // Update formats on selection change\n useEffect(() => {\n if (isFocused) {\n document.addEventListener('selectionchange', updateActiveFormats);\n return () => document.removeEventListener('selectionchange', updateActiveFormats);\n }\n }, [isFocused, updateActiveFormats]);\n\n const handleFocus = () => {\n setIsFocused(true);\n updateActiveFormats();\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n };\n\n return (\n <div className={cn('flex-1 min-w-0', className)}>\n {label && (\n <div className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n\n <div\n ref={fieldRef as any}\n data-field={field}\n className={cn(\n 'w-full rounded-md border border-input bg-background',\n 'focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2',\n error && 'border-destructive focus-within:ring-destructive',\n isDisabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {/* Toolbar */}\n <div className={cn(\"flex items-center gap-0.5 p-1.5 border-b border-border bg-muted/30\", isDisabled && \"pointer-events-none\")}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.bold && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleBold}\n disabled={isDisabled}\n >\n <Bold className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Bold (Ctrl+B)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.italic && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleItalic}\n disabled={isDisabled}\n >\n <Italic className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Italic (Ctrl+I)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.underline && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleUnderline}\n disabled={isDisabled}\n >\n <Underline className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Underline (Ctrl+U)</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <div className=\"w-px h-5 bg-border mx-1\" />\n\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.bulletList && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleBulletList}\n disabled={isDisabled}\n >\n <List className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Bullet List</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 w-8 p-0 hover:bg-accent hover:text-accent-foreground',\n activeFormats.numberedList && 'bg-primary text-primary-foreground hover:bg-primary/90'\n )}\n onClick={toggleNumberedList}\n disabled={isDisabled}\n >\n <ListOrdered className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Numbered List</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n {/* Editor */}\n <div\n ref={editorRef}\n contentEditable={!isDisabled}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={cn(\n 'w-full px-3 py-2 text-sm text-foreground',\n 'bg-background',\n 'focus:outline-none',\n 'overflow-y-auto',\n '[&>p]:my-2 [&>p]:leading-relaxed',\n '[&>ul]:my-2 [&>ul]:ml-6 [&>ul]:list-disc [&>ul]:list-inside',\n '[&_ul]:my-2 [&_ul]:ml-6 [&_ul]:list-disc [&_ul]:list-inside',\n '[&>ol]:my-2 [&>ol]:ml-6 [&>ol]:list-decimal [&>ol]:list-inside',\n '[&_ol]:my-2 [&_ol]:ml-6 [&_ol]:list-decimal [&_ol]:list-inside',\n '[&>li]:my-1 [&_li]:my-1',\n '[&_strong]:font-semibold [&_b]:font-semibold',\n '[&_em]:italic [&_i]:italic',\n '[&_u]:underline',\n !value && 'empty:before:content-[attr(data-placeholder)] empty:before:text-muted-foreground empty:before:pointer-events-none'\n )}\n style={{\n minHeight,\n maxHeight\n }}\n data-placeholder={placeholder}\n />\n </div>\n\n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n\nexport default SmartBasicRichTextbox;\n"]}