@customafk/lunas-ui 0.1.94 → 0.1.95
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/{button-CHTjm4n8.d.cts → button-BRHW1rSO.d.cts} +7 -7
- package/dist/{button-c61Vw1Ns.d.mts → button-DgVnlWul.d.mts} +7 -7
- package/dist/cards/simple-card.d.mts +2 -2
- package/dist/data-display/empty.d.cts +2 -2
- package/dist/data-display/empty.d.mts +2 -2
- package/dist/data-display/statistic.d.cts +2 -2
- package/dist/data-display/statistic.d.mts +2 -2
- package/dist/{dialog-CyLgmqny.d.cts → dialog-B4h77Z-1.d.mts} +12 -12
- package/dist/{dialog-DdkuhWsq.d.mts → dialog-zsQVCZzj.d.cts} +12 -12
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +25 -25
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +27 -27
- package/dist/features/descriptions/index.d.cts +4 -4
- package/dist/features/search-modal/index.d.cts +2 -2
- package/dist/features/search-modal/index.d.mts +2 -2
- package/dist/features/tables/index.d.cts +23 -23
- package/dist/features/tables/index.d.mts +1 -1
- package/dist/features/tanstack-form/index.cjs +1 -1
- package/dist/features/tanstack-form/index.cjs.map +1 -1
- package/dist/features/tanstack-form/index.d.cts +224 -224
- package/dist/features/tanstack-form/index.mjs +1 -1
- package/dist/features/tanstack-form/index.mjs.map +1 -1
- package/dist/{input-BMz2evzs.d.mts → input-Dv7UKl6Z.d.mts} +4 -4
- package/dist/{input-mGRGirZ_.d.cts → input-VtO0d8O-.d.cts} +6 -6
- package/dist/layouts/flex.d.cts +5 -5
- package/dist/layouts/flex.d.mts +5 -5
- package/dist/pages/FeatureDeveloping.d.cts +2 -2
- package/dist/pages/FeatureDeveloping.d.mts +2 -2
- package/dist/pages/FeatureFixing.d.cts +2 -2
- package/dist/pages/FeatureFixing.d.mts +2 -2
- package/dist/pages/NotAuthorized.d.cts +2 -2
- package/dist/pages/NotAuthorized.d.mts +2 -2
- package/dist/pages/NotFound.d.cts +2 -2
- package/dist/pages/NotFound.d.mts +2 -2
- package/dist/typography/paragraph.d.cts +3 -3
- package/dist/typography/paragraph.d.mts +5 -5
- package/dist/typography/title.d.cts +2 -2
- package/dist/typography/title.d.mts +2 -2
- package/dist/ui/alert-dialog.d.cts +12 -12
- package/dist/ui/alert-dialog.d.mts +12 -12
- package/dist/ui/alert.d.cts +5 -5
- package/dist/ui/alert.d.mts +7 -7
- package/dist/ui/aspect-ratio.d.cts +2 -2
- package/dist/ui/aspect-ratio.d.mts +2 -2
- package/dist/ui/avatar.d.cts +4 -4
- package/dist/ui/avatar.d.mts +4 -4
- package/dist/ui/badge.d.cts +5 -5
- package/dist/ui/badge.d.mts +5 -5
- package/dist/ui/breadcrumb.d.cts +8 -8
- package/dist/ui/breadcrumb.d.mts +8 -8
- package/dist/ui/button-group.d.cts +6 -6
- package/dist/ui/button-group.d.mts +6 -6
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/calendar.d.cts +4 -4
- package/dist/ui/calendar.d.mts +4 -4
- package/dist/ui/card.d.cts +8 -8
- package/dist/ui/card.d.mts +8 -8
- package/dist/ui/carousel.d.cts +7 -7
- package/dist/ui/carousel.d.mts +7 -7
- package/dist/ui/checkbox.d.cts +2 -2
- package/dist/ui/checkbox.d.mts +2 -2
- package/dist/ui/collapsible.d.cts +4 -4
- package/dist/ui/collapsible.d.mts +4 -4
- package/dist/ui/command.d.cts +11 -11
- package/dist/ui/command.d.mts +11 -11
- package/dist/ui/context-menu.d.cts +16 -16
- package/dist/ui/context-menu.d.mts +16 -16
- package/dist/ui/dialog.d.cts +1 -1
- package/dist/ui/dialog.d.mts +1 -1
- package/dist/ui/drawer.d.cts +11 -11
- package/dist/ui/drawer.d.mts +11 -11
- package/dist/ui/dropdown-menu.d.cts +16 -16
- package/dist/ui/dropdown-menu.d.mts +16 -16
- package/dist/ui/empty.d.cts +9 -9
- package/dist/ui/empty.d.mts +9 -9
- package/dist/ui/field.d.cts +13 -13
- package/dist/ui/field.d.mts +24 -24
- package/dist/ui/file-uploader.d.cts +2 -2
- package/dist/ui/file-uploader.d.mts +2 -2
- package/dist/ui/form.d.cts +11 -11
- package/dist/ui/form.d.mts +7 -7
- package/dist/ui/hover-card.d.cts +4 -4
- package/dist/ui/hover-card.d.mts +4 -4
- package/dist/ui/input-otp.d.cts +5 -5
- package/dist/ui/input-otp.d.mts +5 -5
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/inputs/search-input.d.cts +3 -3
- package/dist/ui/inputs/search-input.d.mts +3 -3
- package/dist/ui/item.d.cts +15 -15
- package/dist/ui/item.d.mts +15 -15
- package/dist/ui/label.d.cts +2 -2
- package/dist/ui/label.d.mts +2 -2
- package/dist/ui/menubar.d.cts +17 -17
- package/dist/ui/menubar.d.mts +17 -17
- package/dist/ui/multi-select.d.cts +2 -2
- package/dist/ui/multi-select.d.mts +3 -3
- package/dist/ui/navigation-menu.d.cts +11 -11
- package/dist/ui/navigation-menu.d.mts +11 -11
- package/dist/ui/pagination.d.cts +9 -9
- package/dist/ui/pagination.d.mts +9 -9
- package/dist/ui/popover.d.cts +6 -6
- package/dist/ui/popover.d.mts +6 -6
- package/dist/ui/progress.d.cts +2 -2
- package/dist/ui/progress.d.mts +2 -2
- package/dist/ui/radio-group.d.cts +3 -3
- package/dist/ui/radio-group.d.mts +3 -3
- package/dist/ui/resizable.d.cts +9 -9
- package/dist/ui/resizable.d.mts +9 -9
- package/dist/ui/scroll-area.d.cts +6 -6
- package/dist/ui/scroll-area.d.mts +6 -6
- package/dist/ui/select.d.cts +9 -9
- package/dist/ui/select.d.mts +9 -9
- package/dist/ui/separator.d.cts +2 -2
- package/dist/ui/separator.d.mts +2 -2
- package/dist/ui/sheet.d.cts +9 -9
- package/dist/ui/sheet.d.mts +9 -9
- package/dist/ui/sidebar.d.cts +27 -27
- package/dist/ui/sidebar.d.mts +29 -29
- package/dist/ui/skeleton.d.cts +2 -2
- package/dist/ui/skeleton.d.mts +2 -2
- package/dist/ui/slider.d.cts +2 -2
- package/dist/ui/slider.d.mts +2 -2
- package/dist/ui/sonner.d.cts +2 -2
- package/dist/ui/sonner.d.mts +2 -2
- package/dist/ui/spinner.d.cts +2 -2
- package/dist/ui/spinner.d.mts +2 -2
- package/dist/ui/switch.d.cts +2 -2
- package/dist/ui/switch.d.mts +2 -2
- package/dist/ui/table.d.cts +9 -9
- package/dist/ui/table.d.mts +9 -9
- package/dist/ui/tabs.d.cts +5 -5
- package/dist/ui/tabs.d.mts +5 -5
- package/dist/ui/textarea.d.cts +2 -2
- package/dist/ui/textarea.d.mts +2 -2
- package/dist/ui/toggle-group.d.cts +3 -3
- package/dist/ui/toggle-group.d.mts +3 -3
- package/dist/ui/toggle.d.cts +5 -5
- package/dist/ui/toggle.d.mts +5 -5
- package/dist/ui/tooltip.d.cts +5 -5
- package/dist/ui/tooltip.d.mts +5 -5
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["Badge: React.FC<\n React.PropsWithChildren<{\n label: string;\n color?: VariantProps<typeof badgeVariants>['color'];\n size?: VariantProps<typeof badgeVariants>['size'];\n className?: string;\n }>\n>","Label","LabelPrimitive","Label","Separator","CheckboxField: React.FC<Props>","isSubmitting","Checkbox","DateField: React.FC<Props>","Popover","EmailField: React.FC<Props>","isSubmitting","NumberInput: React.FC<TProps>","value","NumberField: React.FC<NumberFieldProps>","isSubmitting","PasswordField: React.FC<Props>","isSubmitting","RadioGroupField: React.FC<Props>","isSubmitting","RadioGroup","SelectField: React.FC<Props>","Select","Switch","SwitchPrimitive","SwitchField: React.FC<Props>","Switch","TextField: React.FC<Props>","isSubmitting","TextareaField: React.FC<Props>","isSubmitting","TanStackActionSubmit: React.FC<{\n label?: string;\n className?: string;\n}>","TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n type?: 'create' | 'update';\n }>\n>","Separator","SeparatorPrimitive","TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n onDelete?: () => void | Promise<void>;\n }>\n>","Separator","TanStackContainerForm: React.FC<React.PropsWithChildren>","CancelButton: React.FC<React.ComponentProps<'button'>>","SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n submitText?: string;\n }\n>","TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n submitText?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n>","open","Dialog","Separator","TanStackFieldGroup: React.FC<\n React.PropsWithChildren<{\n label: string;\n description?: string;\n helperText?: string;\n\n orientation?: 'horizontal' | 'vertical' | 'responsive';\n }>\n>","TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n }>\n>","DialogPrimitive","SectionHeader: React.FC<React.PropsWithChildren>","SectionMain: React.FC<React.PropsWithChildren>","TanStackSectionForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n }>\n>","Separator","TanStackTitleField: React.FC<{\n title: string;\n description?: string;\n helperText?: string;\n}>"],"sources":["../../../packages/components/features/tanstack-form/components/ui/badge.tsx","../../../packages/components/features/tanstack-form/components/ui/label.tsx","../../../packages/components/features/tanstack-form/components/ui/field.tsx","../../../packages/components/features/tanstack-form/components/fields/checkbox-field.tsx","../../../packages/components/features/tanstack-form/components/fields/date-field.tsx","../../../packages/components/features/tanstack-form/components/fields/email-field.tsx","../../../packages/components/ui/inputs/number-input.tsx","../../../packages/components/features/tanstack-form/components/fields/number-field.tsx","../../../packages/components/features/tanstack-form/components/fields/password-field.tsx","../../../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx","../../../packages/components/features/tanstack-form/components/fields/select-field.tsx","../../../packages/components/features/tanstack-form/components/ui/switch.tsx","../../../packages/components/features/tanstack-form/components/fields/switch-field.tsx","../../../packages/components/features/tanstack-form/components/fields/text-field.tsx","../../../packages/components/features/tanstack-form/components/fields/textarea-field.tsx","../../../packages/components/features/tanstack-form/components/forms/action-submit.tsx","../../../packages/components/features/tanstack-form/components/forms/actions-form.tsx","../../../packages/components/features/tanstack-form/components/ui/separator.tsx","../../../packages/components/features/tanstack-form/components/forms/card-form.tsx","../../../packages/components/features/tanstack-form/components/forms/container-form.tsx","../../../packages/components/features/tanstack-form/components/ui/cancel-button.tsx","../../../packages/components/features/tanstack-form/components/ui/submit-button.tsx","../../../packages/components/features/tanstack-form/components/forms/dialog-form.tsx","../../../packages/components/features/tanstack-form/components/forms/group-field.tsx","../../../packages/components/features/tanstack-form/components/forms/popover-form.tsx","../../../packages/components/features/tanstack-form/components/forms/section-form.tsx","../../../packages/components/features/tanstack-form/components/forms/title-field.tsx","../../../packages/components/features/tanstack-form/tanstack-form.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nconst badgeVariants = cva(['flex w-fit items-center justify-center rounded-full font-bold text-text-negative-strong'], {\n variants: {\n color: {\n default: 'bg-primary-strong',\n secondary: 'bg-secondary-strong',\n success: 'bg-success-strong',\n info: 'bg-info-strong',\n warning: 'bg-warning-strong',\n danger: 'border border-danger-strong bg-linear-to-b from-danger-strong/90 via-danger-strong to-danger-strong/90',\n },\n size: {\n xs: 'px-1.5 py-0.5 text-xs',\n sm: 'px-2 py-0.75 text-xs',\n md: 'px-2.5 py-0.75 text-sm',\n lg: 'px-3 py-1 text-sm',\n },\n },\n defaultVariants: {\n color: 'default',\n size: 'sm',\n },\n});\n\nexport const Badge: React.FC<\n React.PropsWithChildren<{\n label: string;\n color?: VariantProps<typeof badgeVariants>['color'];\n size?: VariantProps<typeof badgeVariants>['size'];\n className?: string;\n }>\n> = ({ label, color, size, className, children }) => {\n return (\n <div data-slot=\"required-indicator\" className={badgeVariants({ color, size, className })}>\n {label || children}\n </div>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Label as LabelPrimitive } from 'radix-ui';\nimport { Badge } from './badge';\n\nfunction Label({ className, children, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'text-text-positive',\n 'flex w-full items-center justify-between',\n 'select-none font-medium text-sm/6 leading-none',\n 'group-data-[disabled=true]:pointer-events-none',\n 'group-data-[disabled=true]:opacity-50',\n 'peer-disabled:cursor-not-allowed',\n 'peer-disabled:opacity-50',\n 'aria-required:*:data-[slot=required-indicator]:inline-block',\n className\n )}\n {...props}\n >\n {children}\n <Badge label=\"Required\" color=\"danger\" size=\"sm\" className=\"hidden\" />\n </LabelPrimitive.Root>\n );\n}\n\nexport { Label };\n","import { memo, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator } from '@/components/ui/separator';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Label } from './label';\n\nconst fieldVariants = cva(\n 'group/field flex w-full gap-2 data-[invalid=true]:text-danger *:data-[slot=field-content]:gap-0 @md/field-group:*:data-[slot=field-content]:gap-2',\n {\n variants: {\n orientation: {\n vertical: ['flex-col *:w-full [&>.sr-only]:w-auto'],\n horizontal: [\n 'flex-row items-center',\n '*:data-[slot=field-label]:flex-auto',\n 'has-[>[data-slot=field-content]]:items-start',\n 'has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n responsive: [\n 'flex-col *:w-full [&>.sr-only]:w-auto',\n '@md/field-group:flex-row',\n '@md/field-group:items-center',\n '@md/field-group:gap-4',\n '@md/field-group:*:w-auto',\n '@md/field-group:*:data-[slot=field-content]:basis-1/2',\n '@md/field-group:*:data-[slot=field-content-main]:basis-1/2',\n '@md/field-group:*:data-[slot=field-label]:flex-auto',\n '@md/field-group:has-[>[data-slot=field-content]]:items-start',\n '@md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n }\n);\n\nconst FieldSet = memo(({ className, ...props }: React.ComponentProps<'fieldset'>) => {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn('flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3', className)}\n {...props}\n />\n );\n});\nFieldSet.displayName = 'FieldSet';\n\nconst FieldLegend = memo(\n ({\n className,\n variant = 'legend',\n ...props\n }: React.ComponentProps<'legend'> & {\n variant?: 'legend' | 'label';\n }) => {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn('mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base', className)}\n {...props}\n />\n );\n }\n);\nFieldLegend.displayName = 'FieldLegend';\n\nconst FieldGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n 'group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4',\n className\n )}\n {...props}\n />\n );\n});\nFieldGroup.displayName = 'FieldGroup';\n\nconst Field = memo(({ className, orientation = 'vertical', ...props }: React.ComponentProps<'div'> & VariantProps<typeof fieldVariants>) => {\n return <div data-slot=\"field\" data-orientation={orientation} className={cn(fieldVariants({ orientation }), className)} {...props} />;\n});\nField.displayName = 'Field';\n\nconst FieldContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"field-content\" className={cn('group/field-content flex flex-col gap-1.5 leading-snug', className)} {...props} />;\n});\nFieldContent.displayName = 'FieldContent';\n\nconst FieldContentMain = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"field-content-main\" className={cn('relative', className)} {...props} />;\n});\n\nconst FieldLabel = memo(({ className, ...props }: React.ComponentProps<typeof Label>) => {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n 'group/field-label peer/field-label flex h-6 gap-1 font-medium leading-snug',\n 'has-[>[data-slot=field]]:w-full',\n 'has-[>[data-slot=field]]:flex-col',\n 'has-[>[data-slot=field]]:rounded-md',\n 'has-[>[data-slot=field]]:border',\n 'has-[>[data-slot=field]]:border-border',\n 'has-data-[state=checked]:border-primary',\n '*:data-[slot=field]:p-4 group-data-[disabled=true]/field:opacity-50',\n className\n )}\n {...props}\n />\n );\n});\nFieldLabel.displayName = 'FieldLabel';\n\nconst FieldTitle = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"field-label\"\n className={cn('flex w-fit items-center gap-2 font-medium text-sm leading-snug group-data-[disabled=true]/field:opacity-50', className)}\n {...props}\n />\n );\n});\nFieldTitle.displayName = 'FieldTitle';\n\nconst FieldDescription = memo(({ className, ...props }: React.ComponentProps<'p'>) => {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n // biome-ignore lint/security/noSecrets: true\n 'nth-last-2:-mt-1 font-normal text-sm text-text-positive-weak leading-normal last:mt-0 [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4 [[data-variant=legend]+&]:-mt-1.5',\n className\n )}\n {...props}\n />\n );\n});\nFieldDescription.displayName = 'FieldDescription';\n\nconst FieldNote = memo(({ isShow = true, className, ...props }: React.ComponentProps<'div'> & { isShow?: boolean }) => {\n if (isShow === false) return null;\n return (\n <div\n data-slot=\"field-note\"\n className={cn('text-wrap rounded border border-primary-muted bg-primary-bg-subtle p-2 text-text-positive-weak text-xs', className)}\n {...props}\n />\n );\n});\nFieldNote.displayName = 'FieldNote';\n\nconst FieldSeparator = memo(({ children, className, ...props }: React.PropsWithChildren<React.ComponentProps<'div'>>) => {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn('relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2', className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span className=\"relative mx-auto block w-fit bg-background px-2 text-text-positive-weak\" data-slot=\"field-separator-content\">\n {children}\n </span>\n )}\n </div>\n );\n});\nFieldSeparator.displayName = 'FieldSeparator';\n\nconst FieldError = memo(\n ({\n className,\n children,\n errors,\n ...props\n }: React.ComponentProps<'div'> & {\n errors?: Array<{ message?: string } | undefined>;\n }) => {\n const content = useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors) {\n return null;\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return (\n <div className=\"flex flex-row items-center justify-start gap-x-0.5\">\n <p>{errors[0].message}</p>\n </div>\n );\n }\n\n return (\n <ul className=\"flex list-none flex-col\">\n {errors.map(error => {\n if (typeof error === 'string') return <li key={error}>{error}</li>;\n if (!error?.message) return null;\n return <li key={error.message}>{error.message}</li>;\n })}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div role=\"alert\" data-slot=\"field-error\" className={cn('w-full font-semibold text-danger-strong text-xs', className)} {...props}>\n {content}\n </div>\n );\n }\n);\nFieldError.displayName = 'FieldError';\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldNote,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldContentMain,\n FieldTitle,\n};\n","import { useStore } from '@tanstack/react-form';\n\nimport type z from 'zod';\n\nimport type { TanStackFormCheckboxGroupFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Checkbox } from '@/components/ui/checkbox';\n\ntype Props = Pick<z.input<typeof TanStackFormCheckboxGroupFieldSchema>, 'label' | 'description' | 'orientation' | 'options' | 'helperText'>;\n\nexport const CheckboxField: React.FC<Props> = ({ label, description, options, helperText, orientation }) => {\n const field = useTanStackFieldContext<string[] | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation}>\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n <FieldContentMain>\n <FieldGroup className=\"flex flex-col gap-y-2\">\n {options.map(option => {\n return (\n <Field key={option.value} orientation=\"horizontal\">\n <Checkbox\n id={`${field.name}-${option.value}`}\n name={field.name}\n checked={field.state.value?.includes(option.value) ?? false}\n disabled={isSubmitting}\n onCheckedChange={checked => {\n // Update the field value based on the checkbox state\n\n // If checked and field value is not null, push the option value\n if (checked && field.state.value !== null) {\n field.pushValue(option.value);\n // If the field value is null, initialize it with the selected option\n } else if (checked && field.state.value === null) {\n field.setValue([option.value]);\n // If unchecked and field value is not null, remove the option value\n } else if (!checked && field.state.value !== null) {\n const index = field.state.value.indexOf(option.value);\n if (index > -1) field.removeValue(index);\n // If unchecked and field value is null, do nothing\n } else if (!checked && field.state.value === null) {\n field.setValue(null);\n }\n }}\n />\n <FieldLabel htmlFor={`${field.name}-${option.value}`} className=\"text-text-positive\">\n {option.label}\n </FieldLabel>\n </Field>\n );\n })}\n </FieldGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useMemo } from 'react';\n\nimport { CalendarDaysIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { endOfToday, endOfTomorrow, endOfYesterday, format, lastDayOfMonth, startOfMonth, subDays } from '@customafk/react-toolkit/date-fns';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport type { TanStackFormDateFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { Calendar } from '@/components/ui/calendar';\n\ntype Props = Pick<\n z.input<typeof TanStackFormDateFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'tooltip' | 'helperText' | 'orientation' | 'showErrorMessage'\n> & {\n required?: boolean;\n minDate?: Date;\n maxDate?: Date;\n};\n\nexport const DateField: React.FC<Props> = ({ label, description, placeholder, orientation = 'responsive', helperText, minDate, maxDate, required }) => {\n const field = useTanStackFieldContext<Date | null>();\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const _isInvalid = useMemo(() => {\n return field.state.meta.isTouched && !field.state.meta.isValid;\n }, [field.state.meta.isTouched, field.state.meta.isValid]);\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} data-invalid={_isInvalid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain className=\"flex flex-col space-y-1\">\n <div className=\"flex w-full flex-col\">\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"lg\"\n className={cn(\n 'flex items-center justify-between rounded font-normal outline-border',\n 'hover:bg-transparent',\n 'focus:outline-1 focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak',\n 'data-[state=open]:text-text-positive-muted',\n 'data-[state=open]:outline-1',\n 'data-[state=open]:outline-primary-strong',\n 'data-[state=open]:ring-4',\n 'data-[state=open]:ring-primary-weak',\n field.state.value === null && 'text-text-positive-muted'\n )}\n >\n <p>{field.state.value === null ? placeholder || 'Select date' : format(field.state.value, 'PPPP')}</p>\n <CalendarDaysIcon strokeWidth={1} />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent align=\"start\" side=\"bottom\" className=\"flex w-fit min-w-0 overflow-y-auto rounded p-0\" onBlur={field.handleBlur}>\n <div className=\"flex h-full flex-col space-y-2 border-r border-r-border p-2 [&>button]:justify-start [&>button]:text-sm\">\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfToday());\n }}\n >\n Today\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfTomorrow());\n }}\n >\n Tomorrow\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfYesterday());\n }}\n >\n Yesterday\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 3));\n }}\n >\n Last 3 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 7));\n }}\n >\n Last 7 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 30));\n }}\n >\n Last 30 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(startOfMonth(endOfToday()));\n }}\n >\n This Month\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(lastDayOfMonth(endOfToday()));\n }}\n >\n Last Month\n </Button>\n </div>\n <div className=\"flex flex-1 flex-col\">\n <div className=\"min-w-73 border-b border-b-border p-2\">\n <Calendar\n mode=\"single\"\n selected={field.state.value ?? undefined}\n hidden={{\n before: minDate ?? new Date(1900, 0, 1),\n after: maxDate ?? new Date(2100, 11, 31),\n }}\n onSelect={date => {\n if (!date) return;\n field.handleChange(date);\n }}\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { AtSignIcon, XIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { TanStackFormEmailFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Input } from '@/components/ui/input';\n\ntype Props = Pick<\n z.input<typeof TanStackFormEmailFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'showErrorMessage'\n> & {\n maxLength?: number;\n};\nexport const EmailField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n orientation = 'responsive',\n helperText,\n showErrorMessage = true,\n maxLength,\n}) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _invalid = useMemo(() => {\n return state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isTouched, state.meta.isValid]);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n if (isSubmitting) return;\n handleChange(null);\n }, [isSubmitting, handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={name}>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoComplete=\"email\"\n placeholder={placeholder}\n className={cn('pl-9', isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n />\n <div className=\"absolute top-0 left-0 flex size-9 items-center justify-center text-muted\">\n <AtSignIcon size={14} />\n </div>\n\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className=\"absolute inset-y-0 inset-e-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-strong\"\n onClick={onClear}\n >\n <XIcon size={14} aria-hidden=\"true\" />\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">{showErrorMessage && <FieldError errors={state.meta.errors} />}</div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\n\nconst createValidationRegex = (allowNegative: boolean): RegExp => {\n return allowNegative ? /^-?\\d*\\.?\\d*$/ : /^\\d*\\.?\\d*$/;\n};\n\nconst formatNumberWithCommas = (num: number | string): string => {\n return Number(num).toLocaleString();\n};\n\nconst customRoundedValue = (value: number, precision: number, roundingRule: 'up' | 'down' | 'nearest' | 'none') => {\n if (roundingRule === 'none') return value;\n\n const factor = 10 ** precision;\n const scaledValue = value * factor;\n\n switch (roundingRule) {\n case 'up':\n return Math.ceil(scaledValue) / factor;\n case 'down':\n return Math.floor(scaledValue) / factor;\n case 'nearest': {\n if (scaledValue % 1 < 0.1) return Math.floor(scaledValue) / factor;\n if (scaledValue % 1 >= 0.59) return Math.ceil(scaledValue) / factor;\n return (Math.floor(scaledValue) + 0.5) / factor;\n }\n default: {\n return value;\n }\n }\n};\n\ntype TProps = React.HTMLAttributes<HTMLInputElement> & {\n /**\n * Description: Value for the text field\n *\n * Default: ''\n *\n * Usage: Value for the text field\n */\n value?: number | null | undefined;\n /**\n * Description: Disabled state of the text field\n *\n * Default: `false`\n *\n * Usage: Disabled state of the text field\n *\n * Note: If true, the text field will be disabled\n */\n disabled?: boolean;\n /**\n * Description: Readonly state of the text field\n *\n * Default: `false`\n *\n * Usage: Readonly state of the text field\n */\n readOnly?: boolean;\n /**\n * Description: Allow negative value for the text field\n *\n * Default: `false`\n *\n * Usage: Allow negative value for the text field\n */\n allowNegative?: boolean;\n /**\n * Description: Decimal point for the text field\n *\n * Default: `undefined`\n *\n * Usage: Ex: [12,3] => console.log(2323.23) // True\n *\n * Note: IF use this prop, `numberAfterDecimalPoint` will be ignored\n */\n decimal?: [number, number];\n /**\n * Description: Rounding rule for the text field\n *\n * Default: `nearest`\n *\n * Usage: Rounding rule for the text field\n * - 'up': Round up\n * - 'down': Round down\n * - 'nearest': Round to nearest\n * - 'none': No rounding\n *\n * E.g.\n * - Value: 2.135, precision: 2\n * - 'up' => 2.14\n * - 'down' => 2.13\n * - 'nearest' => 2.13\n * - 'none' => 2.135\n */\n roundingRule?: 'up' | 'down' | 'nearest' | 'none';\n /**\n * Description: Number of digits after the decimal point\n *\n * Default: `2`\n *\n * Usage: Number of digits after the decimal point\n */\n numberAfterDecimalPoint?: number;\n /**\n * Description: Placeholder for the text field\n *\n * Default: ''\n *\n * Usage: Placeholder for the text field\n */\n placeholder?: string;\n /**\n * Description: Unit text for the text field\n *\n * Default: ''\n *\n * E.g. 'kg', 'm', 'USD'...\n */\n unitText?: string;\n /**\n * Description: Invalid state of the text field\n *\n * Default: `false`\n *\n * Usage: Invalid state of the text field\n */\n invalid?: boolean;\n /**\n * Description: Precision for the text field\n *\n * Default: `undefined`\n * E.g.\n * - 2.13 => 2.1 when precision is 1\n * - 2.134 => 2.13 when precision is 2\n */\n precision?: number;\n /**\n * Description: Callback function for the value change\n * Usage: Callback function for the value change\n */\n wrapperClassName?: string;\n /**\n * Description: Callback function for the value change\n * Usage: Callback function for the value change\n */\n onValueChange?: (value: number | null) => void;\n /**\n * Description: Callback function for the blur event\n * Usage: Callback function for the blur event\n */\n onBlur?: () => void;\n};\n/**\n * ## Unit Text Field Component\n *\n * **Description**: This component is to display common text field with unit\n *\n * **Usage**: Text field with unit example: 1000 (kg), 100 (m), 1000 (USD)...\n */\nexport const NumberInput: React.FC<TProps> = ({\n disabled = false,\n readOnly = false,\n allowNegative = false,\n numberAfterDecimalPoint = 2,\n roundingRule = 'none',\n value = null,\n unitText,\n decimal,\n placeholder,\n precision,\n wrapperClassName,\n className,\n onChange,\n onValueChange,\n onFocus,\n onBlur,\n ...props\n}) => {\n const _unitRef = useRef<HTMLSpanElement>(null);\n const _inputRef = useRef<HTMLInputElement>(null);\n\n const [_value, _setValue] = useState<string | null>(value?.toString() ?? null);\n\n // Memoized values for validation and formatting\n const maxDecimalPlaces = useMemo(() => decimal?.[1] ?? numberAfterDecimalPoint, [decimal, numberAfterDecimalPoint]);\n const maxIntegerLength = useMemo(() => decimal && decimal[0] - decimal[1], [decimal]);\n const validationRegex = useMemo(() => createValidationRegex(allowNegative), [allowNegative]);\n\n // Validate decimal point is less than or equal to the limit\n const validateDecimalPoint = useCallback(\n (value: string) => {\n if (!maxDecimalPlaces || value === '-') return true;\n\n const [integerPart, decimalPart = ''] = value.split('.') as [string, string];\n const integerPartLength = integerPart.startsWith('-') ? integerPart.length - 1 : integerPart.length;\n const decimalPartLength = decimalPart.length;\n\n return decimalPartLength <= maxDecimalPlaces && integerPartLength <= (maxIntegerLength ?? Infinity);\n },\n [maxDecimalPlaces, maxIntegerLength]\n );\n const formattedValue = useCallback(\n (val: string) => {\n if (val === '0') return '0';\n if (!Number(val)) return null;\n\n const numValue = parseFloat(val);\n const effectivePrecision = Math.min(maxDecimalPlaces - 1, precision || 0);\n const roundedValue = customRoundedValue(numValue, effectivePrecision, roundingRule).toString();\n const [integerPart, decimalPart = ''] = roundedValue.split('.');\n const formattedInteger = formatNumberWithCommas(integerPart);\n return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger;\n },\n [maxDecimalPlaces, precision, roundingRule]\n );\n\n const handleZeroCase = useCallback(\n (value: string) => {\n // Check for zero\n const isZero = value === '0';\n // Check for negative zero patterns. E.g., '-0', '-0.0', '-0.000', '-0.'\n const isNegativeZero = value === '-' || /^-0+(\\.0+)?$/.test(value) || /^-0*\\.$/.test(value);\n if (isZero) {\n onValueChange?.(0);\n _setValue(value);\n return;\n }\n if (isNegativeZero) {\n _setValue(() => {\n onValueChange?.(0);\n return value;\n });\n return;\n }\n },\n [onValueChange]\n );\n const handleChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n e => {\n // Don't prevent default behavior of input change\n onChange?.(e);\n\n // Custom event handler for value change\n const { value: inputValue } = e.target;\n\n // Handle empty input\n if (inputValue === '' || inputValue === undefined) {\n onValueChange?.(null);\n _setValue(null);\n return;\n }\n\n // Handle zero and negative zero\n handleZeroCase(inputValue);\n\n // Validate input format\n if (!validationRegex.test(inputValue) || !validateDecimalPoint(inputValue)) return;\n\n const numericValue = parseFloat(inputValue) || 0;\n onValueChange?.(numericValue);\n _setValue(inputValue);\n },\n [validateDecimalPoint, onChange, onValueChange, handleZeroCase, validationRegex]\n );\n\n const handleFocus = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n e => {\n if (readOnly) return;\n onFocus?.(e);\n _setValue(prev => (typeof prev === 'string' ? prev.replace(/,/g, '') : null)); // Remove commas for easier editing\n },\n [readOnly, onFocus]\n );\n\n const handleBlur = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n e => {\n if (readOnly) return;\n onBlur?.(e);\n _setValue(prev => {\n if (prev === null) return null;\n const isZero = prev === '0' || prev === '-' || /^-0+(\\.0+)?$/.test(prev) || /^-0*\\.$/.test(prev);\n if (isZero) return '0';\n return typeof prev === 'string' ? formattedValue(prev) : null;\n });\n },\n [readOnly, formattedValue, onBlur]\n );\n\n // Set initial value\n useEffect(() => {\n const isFocused = document.activeElement === _inputRef.current;\n\n if (value === undefined || value === null || !validationRegex.test(value.toString()) || !validateDecimalPoint(value.toString())) {\n _setValue(null);\n return;\n }\n\n _setValue(prev => (isFocused ? prev : formattedValue(value.toString())));\n }, [formattedValue, value, validateDecimalPoint, validationRegex]);\n\n // Set padding right for the input field\n useEffect(() => {\n if (!_unitRef.current || !_inputRef.current || !unitText) return;\n const unitWidth = _unitRef.current.offsetWidth;\n _inputRef.current.style.setProperty('padding-right', `${(unitWidth + 10) / 16}rem`);\n }, [unitText]);\n\n return (\n <div className={cn('relative', wrapperClassName)}>\n <Input\n {...props}\n ref={_inputRef}\n value={_value || (readOnly ? '0' : '')}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n className={cn('text-end font-number text-sm slashed-zero lining-nums tabular-nums', readOnly && 'bg-muted text-muted-foreground', className)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n {unitText && (\n <span ref={_unitRef} className=\"-translate-y-1/2 pointer-events-none absolute top-1/2 right-2 text-muted-foreground text-sm\">\n {unitText}\n </span>\n )}\n </div>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { NumberInput } from '@/components/ui/inputs/number-input';\n\nimport type { TanStackFormNumberFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\n\ntype NumberFieldProps = Pick<\n z.input<typeof TanStackFormNumberFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'rounding' | 'decimalPlaces' | 'percision' | 'unit' | 'showErrorMessage'\n> & {\n required?: boolean;\n allowNegative?: boolean;\n};\n\nexport const NumberField: React.FC<NumberFieldProps> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n orientation = 'responsive',\n showErrorMessage = true,\n rounding,\n decimalPlaces,\n percision,\n unit,\n\n required,\n allowNegative,\n}) => {\n const field = useTanStackFieldContext<number | null>();\n\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n\n const _errors = useMemo(() => {\n return field.state.meta.errors;\n }, [field.state.meta.errors]);\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const onValueChange = useCallback(\n (value: number | null) => {\n if (isSubmitting) return;\n field.handleChange(value);\n },\n [isSubmitting, field.handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={field.state.meta.isTouched && !field.state.meta.isValid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain>\n <div className=\"relative w-full\">\n <NumberInput\n id={field.name}\n value={field.state.value}\n aria-invalid={field.state.meta.isTouched && !field.state.meta.isValid}\n placeholder={placeholder}\n roundingRule={rounding}\n numberAfterDecimalPoint={decimalPlaces}\n precision={percision}\n unitText={unit}\n allowNegative={allowNegative}\n className={cn(isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={field.handleBlur}\n onValueChange={onValueChange}\n />\n {isSubmitting && (\n <div className=\"absolute inset-y-0 inset-s-2 top-2.5 text-muted-weak [&>svg]:size-3.5\">\n <Loader2Icon className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {showErrorMessage && !!_errors.length && (\n <div className=\"absolute inset-y-0 inset-s-2 top-2.75 text-danger-strong [&>svg]:size-3.5\">\n <BanIcon />\n </div>\n )}\n <div className=\"mt-1 flex w-full flex-col items-end justify-end\">{showErrorMessage && <FieldError errors={_errors} />}</div>\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { Input } from '@/components/ui/input';\n\nimport type { TanStackFormPasswordFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote } from '../ui/field';\n\ntype Props = Pick<\n z.input<typeof TanStackFormPasswordFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'showErrorMessage'\n>;\nexport const PasswordField: React.FC<Props> = ({ label, description, placeholder, orientation = 'responsive', helperText, showErrorMessage = true }) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const [isVisible, setIsVisible] = useState<boolean>(false);\n\n const _invalid = useMemo(() => {\n return state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isTouched, state.meta.isValid]);\n\n const toggleVisibility = useCallback(() => setIsVisible(prevState => !prevState), []);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n handleChange(value || null);\n },\n [isSubmitting, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={name}>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n type={isVisible ? 'text' : 'password'}\n placeholder={placeholder}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n autoComplete=\"new-password\"\n onBlur={handleBlur}\n onChange={onChange}\n />\n\n <button\n className=\"absolute inset-y-0 inset-e-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n type=\"button\"\n onClick={toggleVisibility}\n aria-label={isVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isVisible}\n aria-controls=\"password\"\n >\n {isVisible ? <EyeOffIcon size={16} aria-hidden=\"true\" /> : <EyeIcon size={16} aria-hidden=\"true\" />}\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">{showErrorMessage && <FieldError errors={state.meta.errors} />}</div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n </FieldGroup>\n );\n};\n","import { useStore } from '@tanstack/react-form';\n\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { TanStackFormRadioGroupFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator, FieldTitle } from '../ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\n\ntype Props = Pick<z.input<typeof TanStackFormRadioGroupFieldSchema>, 'label' | 'description' | 'options' | 'orientation' | 'helperText'>;\n\nexport const RadioGroupField: React.FC<Props> = ({ label, description, orientation, options, helperText }) => {\n const field = useTanStackFieldContext<string | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} className=\"flex-col gap-2\">\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n\n <FieldContentMain>\n <RadioGroup defaultValue={field.state.value ?? undefined} className=\"w-full\" onValueChange={field.handleChange}>\n {options.map(option => (\n <FieldLabel\n key={option.value}\n className={cn(\n 'h-fit',\n field.state.value === option.value && 'border-primary-weak! bg-primary-bg-subtle',\n isSubmitting && 'pointer-events-none bg-muted-muted opacity-60',\n field.state.value === option.value && isSubmitting && 'border-border-strong!'\n )}\n >\n <Field orientation=\"horizontal\" className=\"justify-between rounded p-2!\">\n <FieldContent className=\"gap-1!\">\n <FieldTitle>{option.label}</FieldTitle>\n <FieldDescription className=\"text-xs\">{option.description}</FieldDescription>\n </FieldContent>\n <RadioGroupItem value={option.value} />\n </Field>\n </FieldLabel>\n ))}\n </RadioGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useMemo } from 'react';\n\nimport { PackagePlusIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport type { TanStackFormSelectFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\n\ntype Props = Pick<\n z.input<typeof TanStackFormSelectFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'defaultValue' | 'options' | 'tooltip' | 'helperText' | 'orientation' | 'clearable'\n> & {\n required?: boolean;\n};\n\nexport const SelectField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n orientation = 'responsive',\n\n options,\n helperText,\n required = false,\n}) => {\n const field = useTanStackFieldContext<string | null>();\n\n const _isInvalid = useMemo(() => {\n return field.state.meta.isTouched && !field.state.meta.isValid;\n }, [field.state.meta.isTouched, field.state.meta.isValid]);\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const _errors = useMemo(() => {\n return field.state.meta.errors;\n }, [field.state.meta.errors]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={field.state.meta.isTouched && !field.state.meta.isValid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain className=\"flex flex-col\">\n <Select defaultValue={field.state.value || undefined} onValueChange={field.handleChange}>\n <SelectTrigger aria-invalid={_isInvalid ? 'true' : undefined} onBlur={field.handleBlur}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {!!options.length &&\n options.map(option => {\n return (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n );\n })}\n {!options.length && (\n <div className=\"flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak\">\n <PackagePlusIcon strokeWidth={1} />\n No options available\n </div>\n )}\n </SelectContent>\n </Select>\n\n <div className=\"mt-1 flex w-full flex-col items-end justify-end\">\n <FieldError errors={_errors} />\n </div>\n\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Switch as SwitchPrimitive } from 'radix-ui';\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer',\n 'w-8 shrink-0 cursor-pointer items-center rounded-full shadow-xs transition-all',\n 'inline-flex h-5',\n 'focus-visible:border-primary-strong',\n 'focus-visible:ring-primary-weak',\n 'focus-visible:ring-4',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n\n '-outline-offset-1 inset-shadow-2xs outline-1',\n\n 'data-[state=checked]:bg-primary',\n 'data-[state=checked]:outline-primary-strong',\n\n 'data-[state=unchecked]:bg-muted-weak',\n 'data-[state=unchecked]:outline-border',\n\n 'data-[state=unchecked]:[&_span]:size-4',\n 'data-[state=unchecked]:[&_span]:translate-x-0.5',\n 'data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'block size-4 bg-card shadow-xs',\n 'pointer-events-none rounded-full ring-0 transition-transform',\n 'data-[state=checked]:translate-x-[calc(100%-3px)]',\n 'data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type z from 'zod';\n\nimport type { TanStackFormSwitchFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldDescription, FieldGroup, FieldNote, FieldSeparator, FieldTitle } from '../ui/field';\nimport { Switch } from '../ui/switch';\n\ntype Props = Pick<z.input<typeof TanStackFormSwitchFieldSchema>, 'label' | 'description' | 'helperText'>;\n\nexport const SwitchField: React.FC<Props> = ({ label, description, helperText }) => {\n const field = useTanStackFieldContext<boolean | null>();\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation=\"vertical\" className=\"relative justify-between gap-y-1\">\n <FieldContent>\n <FieldTitle className=\"cursor-pointer\">\n <label htmlFor={field.name}>{label}</label>\n </FieldTitle>\n <FieldDescription>{description}</FieldDescription>\n <Switch\n id={field.name}\n checked={field.state.value ?? false}\n className=\"absolute top-1 right-1\"\n onBlur={field.handleBlur}\n onCheckedChange={field.handleChange}\n />\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon, XIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\nimport { Input } from '@/components/ui/input';\nimport { useTanStackFieldContext } from '@/components/features/tanstack-form/tanstack-form';\n\nimport type { TanStackFormTextFieldSchema } from '../../schema';\n\ntype Props = Pick<\n z.input<typeof TanStackFormTextFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'counter' | 'tooltip' | 'helperText' | 'showClearButton' | 'showErrorMessage'\n> & {\n required?: boolean;\n maxLength?: number;\n};\n\nexport const TextField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showClearButton = false,\n showErrorMessage = true,\n\n required = false,\n maxLength,\n}) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _showClearButton = useMemo(() => {\n return showClearButton && !isSubmitting;\n }, [showClearButton, isSubmitting]);\n\n const _count = useMemo(() => {\n return state.value ? state.value.length : 0;\n }, [state.value]);\n\n const _countText = useMemo(() => {\n if (!counter) return '';\n const unit = `character${[0, 1].includes(_count) ? '' : 's'}`;\n if (counter && maxLength) return `${_count} / ${maxLength} ${unit}`;\n return `${_count} ${unit}`;\n }, [_count, counter, maxLength]);\n\n const _invalid = useMemo(() => {\n return state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isTouched, state.meta.isValid]);\n\n const _isEmpty = useMemo(() => {\n if (required) return state.value === null;\n return false;\n }, [required, state.value]);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, counter, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n if (isSubmitting) return;\n handleChange('');\n }, [isSubmitting, handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={name}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoComplete=\"off\"\n placeholder={placeholder}\n className={cn('pr-6', isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n />\n {_showClearButton && !state.meta.errors.length && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className=\"absolute inset-y-0 inset-e-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-intense [&>svg]:size-3.5\"\n onClick={onClear}\n >\n <XIcon aria-hidden=\"true\" />\n </button>\n )}\n {isSubmitting && (\n <div className=\"absolute inset-y-0 inset-e-2 top-2.5 text-muted-weak\">\n <Loader2Icon size={14} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {showErrorMessage && !!state.meta.errors.length && (\n <div className=\"absolute inset-y-0 inset-e-2 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"mt-1 flex w-full items-start gap-x-2\">\n {showErrorMessage && <FieldError className=\"flex-1\" errors={state.meta.errors} />}\n {!!counter && <p className=\"h-4 flex-0 text-nowrap text-end text-text-positive-weak text-xs tabular-nums\">{_countText}</p>}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { TanStackFormTextAreaFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Textarea } from '@/components/ui/textarea';\n\ntype Props = Pick<\n z.input<typeof TanStackFormTextAreaFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'counter' | 'tooltip' | 'helperText' | 'orientation' | 'showErrorMessage'\n> & {\n required?: boolean;\n maxLength?: number;\n};\n\nexport const TextareaField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showErrorMessage = true,\n\n required = false,\n maxLength,\n}) => {\n const { form, state, name, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _count = useMemo(() => {\n return state.value ? state.value.length : 0;\n }, [state.value]);\n\n const _countText = useMemo(() => {\n if (!counter) return '';\n const unit = `character${[0, 1].includes(_count) ? '' : 's'}`;\n if (counter && maxLength) return `${_count} / ${maxLength} ${unit}`;\n return `${_count} ${unit}`;\n }, [_count, counter, maxLength]);\n\n const _invalid = useMemo(() => {\n return state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isTouched, state.meta.isValid]);\n\n const _errors = useMemo(() => {\n return state.meta.errors;\n }, [state.meta.errors]);\n\n const _isEmpty = useMemo(() => {\n if (required) return state.value === null;\n return false;\n }, [required, state.value]);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLTextAreaElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, counter, maxLength, handleChange]\n );\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={name}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Textarea\n id={name}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoComplete=\"off\"\n placeholder={placeholder}\n className={cn(isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onChange={onChange}\n onBlur={handleBlur}\n />\n {isSubmitting && (\n <div className=\"absolute inset-y-0 inset-e-2 top-2.5 text-muted-weak\">\n <Loader2Icon size={14} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {showErrorMessage && !!_errors.length && (\n <div className=\"absolute inset-y-0 inset-e-2 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"mt-1 flex w-full items-start gap-x-2\">\n {showErrorMessage && <FieldError className=\"flex-1\" errors={_errors} />}\n {!!counter && <p className=\"h-4 flex-0 text-nowrap text-end text-text-positive-weak text-xs tabular-nums\">{_countText}</p>}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\n\nexport const TanStackActionSubmit: React.FC<{\n label?: string;\n className?: string;\n}> = ({ label, className }) => {\n const form = useTanStackFormContext();\n\n const onSubmit = useCallback(async () => {\n await form.handleSubmit({ submitAction: 'submit' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }, [form]);\n return (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button type=\"button\" size=\"md\" disabled={disabled} isLoading={isSubmitting} className={cn('min-h-8 min-w-32', className)} onClick={onSubmit}>\n {label ?? 'Submit'}\n </Button>\n );\n }}\n />\n );\n};\n","import { ArrowDownToLine, PlusIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\n\nexport const TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n type?: 'create' | 'update';\n }>\n> = ({ type = 'create' }) => {\n const form = useTanStackFormContext();\n return (\n <div className=\"flex h-8 items-center justify-between\">\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || state.isSubmitting,\n })}\n children={({ disabled }) => {\n return (\n <Button color=\"muted\" variant=\"outline\" type=\"button\" size=\"md\" disabled={disabled} className=\"h-full min-w-32\" onClick={() => form.reset()}>\n Cancel\n </Button>\n );\n }}\n />\n {type === 'create' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'create' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <PlusIcon />\n Add New\n </Button>\n );\n }}\n />\n )}\n {type === 'update' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'update' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <ArrowDownToLine />\n Update\n </Button>\n );\n }}\n />\n )}\n </div>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\nfunction Separator({ className, orientation = 'horizontal', decorative = true, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border-weak',\n 'data-[orientation=horizontal]:h-px',\n 'data-[orientation=horizontal]:w-full',\n 'data-[orientation=vertical]:h-full',\n 'data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { Separator } from '../ui/separator';\n\nexport const TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n onDelete?: () => void | Promise<void>;\n }>\n> = ({ title, description, onDelete, children }) => {\n return (\n <section data-slot=\"card-form\" className=\"relative flex flex-col rounded-md bg-card pb-4 shadow-card ring-4 ring-border-weak\">\n <div data-slot=\"card-form-header\" className=\"flex flex-col space-y-1 p-4\">\n <p className=\"font-semibold text-lg\">{title}</p>\n {!!description && <p className=\"text-muted text-sm\">{description}</p>}\n </div>\n <Separator />\n <div data-slot=\"card-form-main\" className=\"flex flex-col space-y-4 py-4\">\n {children}\n </div>\n {!!onDelete && (\n <Button\n color=\"danger\"\n variant=\"outline\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={e => {\n onDelete?.();\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Trash2Icon />\n Remove\n </Button>\n )}\n </section>\n );\n};\n","export const TanStackContainerForm: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <div data-slot=\"section-form\" className=\"flex flex-col space-y-4\">\n {children}\n </div>\n );\n};\n","export const CancelButton: React.FC<React.ComponentProps<'button'>> = ({ ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n className=\"min-w-40 cursor-pointer rounded-sm border border-border bg-card px-4 py-2 font-semibold text-sm text-text-positive shadow-xs outline-none transition-all hover:opacity-90 focus:border-border focus:ring-3 focus:ring-border/80 focus:ring-offset-2 focus:drop-shadow-none disabled:pointer-events-none disabled:opacity-60 disabled:drop-shadow-none\"\n >\n Hủy\n </button>\n );\n};\n","import { Loader2 } from 'lucide-react';\n\nexport const SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n submitText?: string;\n }\n> = ({ isSubmitting, submitText = 'Submit', ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n data-loading={isSubmitting ? 'true' : undefined}\n className=\"relative min-h-9.5 min-w-40 cursor-pointer rounded-sm border border-primary-strong bg-primary px-4 py-2 font-semibold text-sm text-text-negative shadow-card outline-none transition-all hover:opacity-90 focus:border-transparent focus:ring-3 focus:ring-primary/80 focus:ring-offset-2 focus:drop-shadow-none disabled:pointer-events-none disabled:opacity-60 disabled:drop-shadow-none data-[loading=true]:pointer-events-none data-[loading=true]:opacity-80\"\n >\n {isSubmitting ? (\n <Loader2 size={16} strokeWidth={3} className=\"absolute top-1/2 left-1/2 z-10 -translate-x-1/2 -translate-y-1/2 animate-spin\" />\n ) : (\n submitText\n )}\n </button>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Separator } from '@/components/ui/separator';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\nimport { CancelButton } from '../ui/cancel-button';\nimport { SubmitButton } from '../ui/submit-button';\nimport { Dialog, DialogContent, DialogOverlay, DialogPortal, DialogTitle } from '@/components/ui/dialog';\n\nexport const TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n submitText?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, submitText, open, onOpenChange, children }) => {\n const form = useTanStackFormContext();\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!open) form.reset();\n onOpenChange?.(open);\n },\n [form.reset, onOpenChange]\n );\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogContent className=\"flex size-full max-h-dvh max-w-dvw flex-col gap-0 overflow-y-auto p-0 shadow-dialog sm:h-auto sm:max-h-[85dvh] sm:max-w-2xl sm:rounded-sm\">\n <div data-slot=\"dialog-header\" className=\"flex flex-col items-center justify-center gap-2 px-4 py-6 text-center shadow-sm sm:text-left\">\n <DialogTitle data-slot=\"dialog-title\">{title}</DialogTitle>\n </div>\n <Separator />\n <div data-slot=\"dialog-content\" className=\"relative flex flex-col space-y-4 overflow-y-auto p-0 pt-6 max-sm:flex-1 sm:p-4\">\n {children}\n </div>\n <Separator />\n <div\n data-slot=\"dialog-footer\"\n className=\"flex flex-col-reverse items-center justify-between gap-2 px-6 py-4 shadow-sm sm:flex-row sm:justify-end max-sm:[&>button]:w-full\"\n >\n <form.Subscribe\n selector={state => {\n return {\n disabled: state.isSubmitting,\n };\n }}\n children={({ disabled }) => {\n return (\n <CancelButton\n disabled={disabled}\n onClick={() => {\n form.reset();\n handleOpenChange(false);\n }}\n />\n );\n }}\n />\n <form.Subscribe\n selector={state => ({\n isSubmitting: state.isSubmitting,\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit,\n })}\n children={({ isSubmitting, disabled }) => {\n return <SubmitButton isSubmitting={isSubmitting} disabled={disabled} submitText={submitText} onClick={() => form.handleSubmit()} />;\n }}\n />\n </div>\n </DialogContent>\n </DialogPortal>\n </Dialog>\n );\n};\n","import {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\n\nexport const TanStackFieldGroup: React.FC<\n React.PropsWithChildren<{\n label: string;\n description?: string;\n helperText?: string;\n\n orientation?: 'horizontal' | 'vertical' | 'responsive';\n }>\n> = ({\n label,\n description,\n helperText,\n\n orientation = 'responsive',\n children,\n}) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation}>\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n {children}\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { cn } from '@customafk/react-toolkit/utils';\n\nimport { CloseButton } from '@/components/ui/buttons/close';\n\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { useTanStackFormContext } from '../../tanstack-form';\nimport { CancelButton } from '../ui/cancel-button';\nimport { SubmitButton } from '../ui/submit-button';\n\nexport const TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, open, contentClassName, onOpenChange, children }) => {\n const form = useTanStackFormContext();\n return (\n <DialogPrimitive.Root data-slot=\"dialog\" open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal data-slot=\"dialog-portal\">\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-40 bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in',\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out'\n )}\n />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'fixed top-4 right-4 z-50 h-[calc(100dvh-2rem)] min-w-sm max-w-xl rounded-md bg-background drop-shadow-lg',\n 'duration-300',\n\n 'data-[state=open]:animate-in',\n 'data-[state=open]:slide-in-from-right',\n 'data-[state=open]:fade-in',\n\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:slide-out-to-right',\n 'data-[state=closed]:fade-out'\n )}\n >\n <section className=\"relative flex size-full flex-col\">\n <header className=\"flex h-14 items-center border-border border-b px-4\">\n <h2 className=\"font-semibold text-lg text-primary-strong\">{title}</h2>\n </header>\n\n <div className={cn('flex flex-1 flex-col overflow-y-auto py-4', contentClassName)}>{children}</div>\n\n <div className=\"flex flex-col space-y-4 border-border border-t px-4 py-2\">\n <form.Subscribe\n selector={state => ({\n isSubmitting: state.isSubmitting,\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit,\n })}\n children={({ isSubmitting, disabled }) => {\n return <SubmitButton isSubmitting={isSubmitting} disabled={disabled} className=\"w-full\" onClick={() => form.handleSubmit()} />;\n }}\n />\n <form.Subscribe\n selector={state => {\n return {\n disabled: state.isPristine || state.isSubmitting,\n };\n }}\n children={({ disabled }) => {\n return (\n <CancelButton\n disabled={disabled}\n className=\"w-full\"\n onClick={() => {\n form.reset();\n onOpenChange?.(false);\n }}\n />\n );\n }}\n />\n </div>\n\n <DialogPrimitive.Close asChild>\n <CloseButton className=\"absolute top-2 right-2\" />\n </DialogPrimitive.Close>\n </section>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n};\n","import { Separator } from '../ui/separator';\n\nconst SectionHeader: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <header data-slot=\"section-header\" className=\"px-4 pt-2.5 pb-2 font-medium text-base text-primary-strong\">\n {children}\n </header>\n );\n};\n\nconst SectionMain: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <main data-slot=\"section-main\" className=\"relative flex flex-col space-y-4 py-4\">\n {children}\n </main>\n );\n};\n\nexport const TanStackSectionForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n }>\n> = ({ title, children }) => {\n return (\n <section data-slot=\"section-form\" className=\"flex flex-col rounded-md bg-background shadow-card ring-4 ring-border-weak\">\n <SectionHeader>{title}</SectionHeader>\n <Separator />\n <SectionMain>{children}</SectionMain>\n </section>\n );\n};\n","import { Field, FieldContent, FieldDescription, FieldGroup, FieldLegend, FieldNote, FieldSeparator } from '../ui/field';\n\nexport const TanStackTitleField: React.FC<{\n title: string;\n description?: string;\n helperText?: string;\n}> = ({ title, description, helperText }) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field className=\"gap-0\">\n <FieldContent>\n <FieldLegend className=\"mb-1\">{title}</FieldLegend>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { createFormHook, createFormHookContexts } from '@tanstack/react-form';\n\nimport { CheckboxField } from './components/fields/checkbox-field';\nimport { DateField } from './components/fields/date-field';\nimport { EmailField } from './components/fields/email-field';\nimport { NumberField } from './components/fields/number-field';\nimport { PasswordField } from './components/fields/password-field';\nimport { RadioGroupField } from './components/fields/radio-group-field';\nimport { SelectField } from './components/fields/select-field';\nimport { SwitchField } from './components/fields/switch-field';\nimport { TextField } from './components/fields/text-field';\nimport { TextareaField } from './components/fields/textarea-field';\nimport { TanStackActionSubmit } from './components/forms/action-submit';\nimport { TanStackActionsForm } from './components/forms/actions-form';\nimport { TanStackCardForm } from './components/forms/card-form';\nimport { TanStackContainerForm } from './components/forms/container-form';\nimport { TanStackDialogForm } from './components/forms/dialog-form';\nimport { TanStackFieldGroup } from './components/forms/group-field';\nimport { TanStackPopoverForm } from './components/forms/popover-form';\nimport { TanStackSectionForm } from './components/forms/section-form';\nimport { TanStackTitleField } from './components/forms/title-field';\nimport { Field, FieldContent, FieldContentMain, FieldError, FieldGroup, FieldLabel, FieldSeparator } from './components/ui/field';\n\nconst { fieldContext, formContext, useFieldContext: useTanStackFieldContext, useFormContext: useTanStackFormContext } = createFormHookContexts();\n\nconst {\n useAppForm: useTanStackForm,\n withForm: withTanStackForm,\n withFieldGroup: withTanStackFieldGroup,\n} = createFormHook({\n fieldContext,\n formContext,\n\n fieldComponents: {\n TextField,\n TextareaField,\n NumberField,\n EmailField,\n PasswordField,\n\n SelectField,\n DateField,\n SwitchField,\n RadioGroupField,\n CheckboxField,\n\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n },\n formComponents: {\n TanStackDialogForm,\n TanStackPopoverForm,\n TanStackContainerForm,\n TanStackSectionForm,\n TanStackCardForm,\n TanStackFieldGroup,\n TanStackTitleField,\n\n TanStackActionsForm,\n TanStackActionSubmit,\n },\n});\n\nexport {\n useTanStackForm,\n withTanStackForm,\n withTanStackFieldGroup,\n useTanStackFieldContext,\n useTanStackFormContext,\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["Badge: React.FC<\n React.PropsWithChildren<{\n label: string;\n color?: VariantProps<typeof badgeVariants>['color'];\n size?: VariantProps<typeof badgeVariants>['size'];\n className?: string;\n }>\n>","Label","LabelPrimitive","Label","Separator","CheckboxField: React.FC<Props>","isSubmitting","Checkbox","DateField: React.FC<Props>","Popover","EmailField: React.FC<Props>","isSubmitting","NumberInput: React.FC<TProps>","value","NumberField: React.FC<NumberFieldProps>","isSubmitting","PasswordField: React.FC<Props>","isSubmitting","RadioGroupField: React.FC<Props>","isSubmitting","RadioGroup","SelectField: React.FC<Props>","Select","Switch","SwitchPrimitive","SwitchField: React.FC<Props>","Switch","TextField: React.FC<Props>","isSubmitting","TextareaField: React.FC<Props>","isSubmitting","TanStackActionSubmit: React.FC<{\n label?: string;\n className?: string;\n}>","TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n type?: 'create' | 'update';\n }>\n>","Separator","SeparatorPrimitive","TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n onDelete?: () => void | Promise<void>;\n }>\n>","Separator","TanStackContainerForm: React.FC<React.PropsWithChildren>","CancelButton: React.FC<React.ComponentProps<'button'>>","SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n submitText?: string;\n }\n>","TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n submitText?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n>","open","Dialog","Separator","TanStackFieldGroup: React.FC<\n React.PropsWithChildren<{\n label: string;\n description?: string;\n helperText?: string;\n\n orientation?: 'horizontal' | 'vertical' | 'responsive';\n }>\n>","TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n }>\n>","DialogPrimitive","SectionHeader: React.FC<React.PropsWithChildren>","SectionMain: React.FC<React.PropsWithChildren>","TanStackSectionForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n }>\n>","Separator","TanStackTitleField: React.FC<{\n title: string;\n description?: string;\n helperText?: string;\n}>"],"sources":["../../../packages/components/features/tanstack-form/components/ui/badge.tsx","../../../packages/components/features/tanstack-form/components/ui/label.tsx","../../../packages/components/features/tanstack-form/components/ui/field.tsx","../../../packages/components/features/tanstack-form/components/fields/checkbox-field.tsx","../../../packages/components/features/tanstack-form/components/fields/date-field.tsx","../../../packages/components/features/tanstack-form/components/fields/email-field.tsx","../../../packages/components/ui/inputs/number-input.tsx","../../../packages/components/features/tanstack-form/components/fields/number-field.tsx","../../../packages/components/features/tanstack-form/components/fields/password-field.tsx","../../../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx","../../../packages/components/features/tanstack-form/components/fields/select-field.tsx","../../../packages/components/features/tanstack-form/components/ui/switch.tsx","../../../packages/components/features/tanstack-form/components/fields/switch-field.tsx","../../../packages/components/features/tanstack-form/components/fields/text-field.tsx","../../../packages/components/features/tanstack-form/components/fields/textarea-field.tsx","../../../packages/components/features/tanstack-form/components/forms/action-submit.tsx","../../../packages/components/features/tanstack-form/components/forms/actions-form.tsx","../../../packages/components/features/tanstack-form/components/ui/separator.tsx","../../../packages/components/features/tanstack-form/components/forms/card-form.tsx","../../../packages/components/features/tanstack-form/components/forms/container-form.tsx","../../../packages/components/features/tanstack-form/components/ui/cancel-button.tsx","../../../packages/components/features/tanstack-form/components/ui/submit-button.tsx","../../../packages/components/features/tanstack-form/components/forms/dialog-form.tsx","../../../packages/components/features/tanstack-form/components/forms/group-field.tsx","../../../packages/components/features/tanstack-form/components/forms/popover-form.tsx","../../../packages/components/features/tanstack-form/components/forms/section-form.tsx","../../../packages/components/features/tanstack-form/components/forms/title-field.tsx","../../../packages/components/features/tanstack-form/tanstack-form.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nconst badgeVariants = cva(['flex w-fit items-center justify-center rounded-full font-bold text-text-negative-strong'], {\n variants: {\n color: {\n default: 'bg-primary-strong',\n secondary: 'bg-secondary-strong',\n success: 'bg-success-strong',\n info: 'bg-info-strong',\n warning: 'bg-warning-strong',\n danger: 'border border-danger-strong bg-linear-to-b from-danger-strong/90 via-danger-strong to-danger-strong/90',\n },\n size: {\n xs: 'px-1.5 py-0.5 text-xs',\n sm: 'px-2 py-0.75 text-xs',\n md: 'px-2.5 py-0.75 text-sm',\n lg: 'px-3 py-1 text-sm',\n },\n },\n defaultVariants: {\n color: 'default',\n size: 'sm',\n },\n});\n\nexport const Badge: React.FC<\n React.PropsWithChildren<{\n label: string;\n color?: VariantProps<typeof badgeVariants>['color'];\n size?: VariantProps<typeof badgeVariants>['size'];\n className?: string;\n }>\n> = ({ label, color, size, className, children }) => {\n return (\n <div data-slot=\"required-indicator\" className={badgeVariants({ color, size, className })}>\n {label || children}\n </div>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Label as LabelPrimitive } from 'radix-ui';\nimport { Badge } from './badge';\n\nfunction Label({ className, children, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'text-text-positive',\n 'flex w-full items-center justify-between',\n 'select-none font-medium text-sm/6 leading-none',\n 'group-data-[disabled=true]:pointer-events-none',\n 'group-data-[disabled=true]:opacity-50',\n 'peer-disabled:cursor-not-allowed',\n 'peer-disabled:opacity-50',\n 'aria-required:*:data-[slot=required-indicator]:inline-block',\n className\n )}\n {...props}\n >\n {children}\n <Badge label=\"Required\" color=\"danger\" size=\"sm\" className=\"hidden\" />\n </LabelPrimitive.Root>\n );\n}\n\nexport { Label };\n","import { memo, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator } from '@/components/ui/separator';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Label } from './label';\n\nconst fieldVariants = cva(\n 'group/field flex w-full gap-2 data-[invalid=true]:text-danger *:data-[slot=field-content]:gap-0 @md/field-group:*:data-[slot=field-content]:gap-2',\n {\n variants: {\n orientation: {\n vertical: ['flex-col *:w-full [&>.sr-only]:w-auto'],\n horizontal: [\n 'flex-row items-center',\n '*:data-[slot=field-label]:flex-auto',\n 'has-[>[data-slot=field-content]]:items-start',\n 'has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n responsive: [\n 'flex-col *:w-full [&>.sr-only]:w-auto',\n '@md/field-group:flex-row',\n '@md/field-group:items-center',\n '@md/field-group:gap-4',\n '@md/field-group:*:w-auto',\n '@md/field-group:*:data-[slot=field-content]:basis-1/2',\n '@md/field-group:*:data-[slot=field-content-main]:basis-1/2',\n '@md/field-group:*:data-[slot=field-label]:flex-auto',\n '@md/field-group:has-[>[data-slot=field-content]]:items-start',\n '@md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n }\n);\n\nconst FieldSet = memo(({ className, ...props }: React.ComponentProps<'fieldset'>) => {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn('flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3', className)}\n {...props}\n />\n );\n});\nFieldSet.displayName = 'FieldSet';\n\nconst FieldLegend = memo(\n ({\n className,\n variant = 'legend',\n ...props\n }: React.ComponentProps<'legend'> & {\n variant?: 'legend' | 'label';\n }) => {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn('mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base', className)}\n {...props}\n />\n );\n }\n);\nFieldLegend.displayName = 'FieldLegend';\n\nconst FieldGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n 'group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4',\n className\n )}\n {...props}\n />\n );\n});\nFieldGroup.displayName = 'FieldGroup';\n\nconst Field = memo(({ className, orientation = 'vertical', ...props }: React.ComponentProps<'div'> & VariantProps<typeof fieldVariants>) => {\n return <div data-slot=\"field\" data-orientation={orientation} className={cn(fieldVariants({ orientation }), className)} {...props} />;\n});\nField.displayName = 'Field';\n\nconst FieldContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"field-content\" className={cn('group/field-content flex flex-col gap-1.5 leading-snug', className)} {...props} />;\n});\nFieldContent.displayName = 'FieldContent';\n\nconst FieldContentMain = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"field-content-main\" className={cn('relative', className)} {...props} />;\n});\n\nconst FieldLabel = memo(({ className, ...props }: React.ComponentProps<typeof Label>) => {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n 'group/field-label peer/field-label flex h-6 gap-1 font-medium leading-snug',\n 'has-[>[data-slot=field]]:w-full',\n 'has-[>[data-slot=field]]:flex-col',\n 'has-[>[data-slot=field]]:rounded-md',\n 'has-[>[data-slot=field]]:border',\n 'has-[>[data-slot=field]]:border-border',\n 'has-data-[state=checked]:border-primary',\n '*:data-[slot=field]:p-4 group-data-[disabled=true]/field:opacity-50',\n className\n )}\n {...props}\n />\n );\n});\nFieldLabel.displayName = 'FieldLabel';\n\nconst FieldTitle = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"field-label\"\n className={cn('flex w-fit items-center gap-2 font-medium text-sm leading-snug group-data-[disabled=true]/field:opacity-50', className)}\n {...props}\n />\n );\n});\nFieldTitle.displayName = 'FieldTitle';\n\nconst FieldDescription = memo(({ className, ...props }: React.ComponentProps<'p'>) => {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n // biome-ignore lint/security/noSecrets: true\n 'nth-last-2:-mt-1 font-normal text-sm text-text-positive-weak leading-normal last:mt-0 [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4 [[data-variant=legend]+&]:-mt-1.5',\n className\n )}\n {...props}\n />\n );\n});\nFieldDescription.displayName = 'FieldDescription';\n\nconst FieldNote = memo(({ isShow = true, className, ...props }: React.ComponentProps<'div'> & { isShow?: boolean }) => {\n if (isShow === false) return null;\n return (\n <div\n data-slot=\"field-note\"\n className={cn('text-wrap rounded border border-primary-muted bg-primary-bg-subtle p-2 text-text-positive-weak text-xs', className)}\n {...props}\n />\n );\n});\nFieldNote.displayName = 'FieldNote';\n\nconst FieldSeparator = memo(({ children, className, ...props }: React.PropsWithChildren<React.ComponentProps<'div'>>) => {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn('relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2', className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span className=\"relative mx-auto block w-fit bg-background px-2 text-text-positive-weak\" data-slot=\"field-separator-content\">\n {children}\n </span>\n )}\n </div>\n );\n});\nFieldSeparator.displayName = 'FieldSeparator';\n\nconst FieldError = memo(\n ({\n className,\n children,\n errors,\n ...props\n }: React.ComponentProps<'div'> & {\n errors?: Array<{ message?: string } | undefined>;\n }) => {\n const content = useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors) {\n return null;\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return (\n <div className=\"flex flex-row items-center justify-start gap-x-0.5\">\n <p>{errors[0].message}</p>\n </div>\n );\n }\n\n return (\n <ul className=\"flex list-none flex-col\">\n {errors.map(error => {\n if (typeof error === 'string') return <li key={error}>{error}</li>;\n if (!error?.message) return null;\n return <li key={error.message}>{error.message}</li>;\n })}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div role=\"alert\" data-slot=\"field-error\" className={cn('w-full font-semibold text-danger-strong text-xs', className)} {...props}>\n {content}\n </div>\n );\n }\n);\nFieldError.displayName = 'FieldError';\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldNote,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldContentMain,\n FieldTitle,\n};\n","import { useStore } from '@tanstack/react-form';\n\nimport type z from 'zod';\n\nimport type { TanStackFormCheckboxGroupFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Checkbox } from '@/components/ui/checkbox';\n\ntype Props = Pick<z.input<typeof TanStackFormCheckboxGroupFieldSchema>, 'label' | 'description' | 'orientation' | 'options' | 'helperText'>;\n\nexport const CheckboxField: React.FC<Props> = ({ label, description, options, helperText, orientation }) => {\n const field = useTanStackFieldContext<string[] | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation}>\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n <FieldContentMain>\n <FieldGroup className=\"flex flex-col gap-y-2\">\n {options.map(option => {\n return (\n <Field key={option.value} orientation=\"horizontal\">\n <Checkbox\n id={`${field.name}-${option.value}`}\n name={field.name}\n checked={field.state.value?.includes(option.value) ?? false}\n disabled={isSubmitting}\n onCheckedChange={checked => {\n // Update the field value based on the checkbox state\n\n // If checked and field value is not null, push the option value\n if (checked && field.state.value !== null) {\n field.pushValue(option.value);\n // If the field value is null, initialize it with the selected option\n } else if (checked && field.state.value === null) {\n field.setValue([option.value]);\n // If unchecked and field value is not null, remove the option value\n } else if (!checked && field.state.value !== null) {\n const index = field.state.value.indexOf(option.value);\n if (index > -1) field.removeValue(index);\n // If unchecked and field value is null, do nothing\n } else if (!checked && field.state.value === null) {\n field.setValue(null);\n }\n }}\n />\n <FieldLabel htmlFor={`${field.name}-${option.value}`} className=\"text-text-positive\">\n {option.label}\n </FieldLabel>\n </Field>\n );\n })}\n </FieldGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useMemo } from 'react';\n\nimport { CalendarDaysIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { endOfToday, endOfTomorrow, endOfYesterday, format, lastDayOfMonth, startOfMonth, subDays } from '@customafk/react-toolkit/date-fns';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport type { TanStackFormDateFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { Calendar } from '@/components/ui/calendar';\n\ntype Props = Pick<\n z.input<typeof TanStackFormDateFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'tooltip' | 'helperText' | 'orientation' | 'showErrorMessage'\n> & {\n required?: boolean;\n minDate?: Date;\n maxDate?: Date;\n};\n\nexport const DateField: React.FC<Props> = ({ label, description, placeholder, orientation = 'responsive', helperText, minDate, maxDate, required }) => {\n const field = useTanStackFieldContext<Date | null>();\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const _isInvalid = useMemo(() => {\n return field.state.meta.isTouched && !field.state.meta.isValid;\n }, [field.state.meta.isTouched, field.state.meta.isValid]);\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} data-invalid={_isInvalid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain className=\"flex flex-col space-y-1\">\n <div className=\"flex w-full flex-col\">\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"lg\"\n className={cn(\n 'flex items-center justify-between rounded font-normal outline-border',\n 'hover:bg-transparent',\n 'focus:outline-1 focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak',\n 'data-[state=open]:text-text-positive-muted',\n 'data-[state=open]:outline-1',\n 'data-[state=open]:outline-primary-strong',\n 'data-[state=open]:ring-4',\n 'data-[state=open]:ring-primary-weak',\n field.state.value === null && 'text-text-positive-muted'\n )}\n >\n <p>{field.state.value === null ? placeholder || 'Select date' : format(field.state.value, 'PPPP')}</p>\n <CalendarDaysIcon strokeWidth={1} />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent align=\"start\" side=\"bottom\" className=\"flex w-fit min-w-0 overflow-y-auto rounded p-0\" onBlur={field.handleBlur}>\n <div className=\"flex h-full flex-col space-y-2 border-r border-r-border p-2 [&>button]:justify-start [&>button]:text-sm\">\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfToday());\n }}\n >\n Today\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfTomorrow());\n }}\n >\n Tomorrow\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfYesterday());\n }}\n >\n Yesterday\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 3));\n }}\n >\n Last 3 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 7));\n }}\n >\n Last 7 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 30));\n }}\n >\n Last 30 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(startOfMonth(endOfToday()));\n }}\n >\n This Month\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(lastDayOfMonth(endOfToday()));\n }}\n >\n Last Month\n </Button>\n </div>\n <div className=\"flex flex-1 flex-col\">\n <div className=\"min-w-73 border-b border-b-border p-2\">\n <Calendar\n mode=\"single\"\n selected={field.state.value ?? undefined}\n hidden={{\n before: minDate ?? new Date(1900, 0, 1),\n after: maxDate ?? new Date(2100, 11, 31),\n }}\n onSelect={date => {\n if (!date) return;\n field.handleChange(date);\n }}\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { AtSignIcon, XIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { TanStackFormEmailFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Input } from '@/components/ui/input';\n\ntype Props = Pick<\n z.input<typeof TanStackFormEmailFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'showErrorMessage'\n> & {\n maxLength?: number;\n};\nexport const EmailField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n orientation = 'responsive',\n helperText,\n showErrorMessage = true,\n maxLength,\n}) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _invalid = useMemo(() => {\n return state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isTouched, state.meta.isValid]);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n if (isSubmitting) return;\n handleChange(null);\n }, [isSubmitting, handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={name}>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoComplete=\"email\"\n placeholder={placeholder}\n className={cn('pl-9', isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n />\n <div className=\"absolute top-0 left-0 flex size-9 items-center justify-center text-muted\">\n <AtSignIcon size={14} />\n </div>\n\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className=\"absolute inset-y-0 inset-e-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-strong\"\n onClick={onClear}\n >\n <XIcon size={14} aria-hidden=\"true\" />\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">{showErrorMessage && <FieldError errors={state.meta.errors} />}</div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\n\nconst createValidationRegex = (allowNegative: boolean): RegExp => {\n return allowNegative ? /^-?\\d*\\.?\\d*$/ : /^\\d*\\.?\\d*$/;\n};\n\nconst formatNumberWithCommas = (num: number | string): string => {\n return Number(num).toLocaleString();\n};\n\nconst customRoundedValue = (value: number, precision: number, roundingRule: 'up' | 'down' | 'nearest' | 'none') => {\n if (roundingRule === 'none') return value;\n\n const factor = 10 ** precision;\n const scaledValue = value * factor;\n\n switch (roundingRule) {\n case 'up':\n return Math.ceil(scaledValue) / factor;\n case 'down':\n return Math.floor(scaledValue) / factor;\n case 'nearest': {\n if (scaledValue % 1 < 0.1) return Math.floor(scaledValue) / factor;\n if (scaledValue % 1 >= 0.59) return Math.ceil(scaledValue) / factor;\n return (Math.floor(scaledValue) + 0.5) / factor;\n }\n default: {\n return value;\n }\n }\n};\n\ntype TProps = React.HTMLAttributes<HTMLInputElement> & {\n /**\n * Description: Value for the text field\n *\n * Default: ''\n *\n * Usage: Value for the text field\n */\n value?: number | null | undefined;\n /**\n * Description: Disabled state of the text field\n *\n * Default: `false`\n *\n * Usage: Disabled state of the text field\n *\n * Note: If true, the text field will be disabled\n */\n disabled?: boolean;\n /**\n * Description: Readonly state of the text field\n *\n * Default: `false`\n *\n * Usage: Readonly state of the text field\n */\n readOnly?: boolean;\n /**\n * Description: Allow negative value for the text field\n *\n * Default: `false`\n *\n * Usage: Allow negative value for the text field\n */\n allowNegative?: boolean;\n /**\n * Description: Decimal point for the text field\n *\n * Default: `undefined`\n *\n * Usage: Ex: [12,3] => console.log(2323.23) // True\n *\n * Note: IF use this prop, `numberAfterDecimalPoint` will be ignored\n */\n decimal?: [number, number];\n /**\n * Description: Rounding rule for the text field\n *\n * Default: `nearest`\n *\n * Usage: Rounding rule for the text field\n * - 'up': Round up\n * - 'down': Round down\n * - 'nearest': Round to nearest\n * - 'none': No rounding\n *\n * E.g.\n * - Value: 2.135, precision: 2\n * - 'up' => 2.14\n * - 'down' => 2.13\n * - 'nearest' => 2.13\n * - 'none' => 2.135\n */\n roundingRule?: 'up' | 'down' | 'nearest' | 'none';\n /**\n * Description: Number of digits after the decimal point\n *\n * Default: `2`\n *\n * Usage: Number of digits after the decimal point\n */\n numberAfterDecimalPoint?: number;\n /**\n * Description: Placeholder for the text field\n *\n * Default: ''\n *\n * Usage: Placeholder for the text field\n */\n placeholder?: string;\n /**\n * Description: Unit text for the text field\n *\n * Default: ''\n *\n * E.g. 'kg', 'm', 'USD'...\n */\n unitText?: string;\n /**\n * Description: Invalid state of the text field\n *\n * Default: `false`\n *\n * Usage: Invalid state of the text field\n */\n invalid?: boolean;\n /**\n * Description: Precision for the text field\n *\n * Default: `undefined`\n * E.g.\n * - 2.13 => 2.1 when precision is 1\n * - 2.134 => 2.13 when precision is 2\n */\n precision?: number;\n /**\n * Description: Callback function for the value change\n * Usage: Callback function for the value change\n */\n wrapperClassName?: string;\n /**\n * Description: Callback function for the value change\n * Usage: Callback function for the value change\n */\n onValueChange?: (value: number | null) => void;\n /**\n * Description: Callback function for the blur event\n * Usage: Callback function for the blur event\n */\n onBlur?: () => void;\n};\n/**\n * ## Unit Text Field Component\n *\n * **Description**: This component is to display common text field with unit\n *\n * **Usage**: Text field with unit example: 1000 (kg), 100 (m), 1000 (USD)...\n */\nexport const NumberInput: React.FC<TProps> = ({\n disabled = false,\n readOnly = false,\n allowNegative = false,\n numberAfterDecimalPoint = 2,\n roundingRule = 'none',\n value = null,\n unitText,\n decimal,\n placeholder,\n precision,\n wrapperClassName,\n className,\n onChange,\n onValueChange,\n onFocus,\n onBlur,\n ...props\n}) => {\n const _unitRef = useRef<HTMLSpanElement>(null);\n const _inputRef = useRef<HTMLInputElement>(null);\n\n const [_value, _setValue] = useState<string | null>(value?.toString() ?? null);\n\n // Memoized values for validation and formatting\n const maxDecimalPlaces = useMemo(() => decimal?.[1] ?? numberAfterDecimalPoint, [decimal, numberAfterDecimalPoint]);\n const maxIntegerLength = useMemo(() => decimal && decimal[0] - decimal[1], [decimal]);\n const validationRegex = useMemo(() => createValidationRegex(allowNegative), [allowNegative]);\n\n // Validate decimal point is less than or equal to the limit\n const validateDecimalPoint = useCallback(\n (value: string) => {\n if (!maxDecimalPlaces || value === '-') return true;\n\n const [integerPart, decimalPart = ''] = value.split('.') as [string, string];\n const integerPartLength = integerPart.startsWith('-') ? integerPart.length - 1 : integerPart.length;\n const decimalPartLength = decimalPart.length;\n\n return decimalPartLength <= maxDecimalPlaces && integerPartLength <= (maxIntegerLength ?? Infinity);\n },\n [maxDecimalPlaces, maxIntegerLength]\n );\n const formattedValue = useCallback(\n (val: string) => {\n if (val === '0') return '0';\n if (!Number(val)) return null;\n\n const numValue = parseFloat(val);\n const effectivePrecision = Math.min(maxDecimalPlaces - 1, precision || 0);\n const roundedValue = customRoundedValue(numValue, effectivePrecision, roundingRule).toString();\n const [integerPart, decimalPart = ''] = roundedValue.split('.');\n const formattedInteger = formatNumberWithCommas(integerPart);\n return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger;\n },\n [maxDecimalPlaces, precision, roundingRule]\n );\n\n const handleZeroCase = useCallback(\n (value: string) => {\n // Check for zero\n const isZero = value === '0';\n // Check for negative zero patterns. E.g., '-0', '-0.0', '-0.000', '-0.'\n const isNegativeZero = value === '-' || /^-0+(\\.0+)?$/.test(value) || /^-0*\\.$/.test(value);\n if (isZero) {\n onValueChange?.(0);\n _setValue(value);\n return;\n }\n if (isNegativeZero) {\n _setValue(() => {\n onValueChange?.(0);\n return value;\n });\n return;\n }\n },\n [onValueChange]\n );\n const handleChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n e => {\n // Don't prevent default behavior of input change\n onChange?.(e);\n\n // Custom event handler for value change\n const { value: inputValue } = e.target;\n\n // Handle empty input\n if (inputValue === '' || inputValue === undefined) {\n onValueChange?.(null);\n _setValue(null);\n return;\n }\n\n // Handle zero and negative zero\n handleZeroCase(inputValue);\n\n // Validate input format\n if (!validationRegex.test(inputValue) || !validateDecimalPoint(inputValue)) return;\n\n const numericValue = parseFloat(inputValue) || 0;\n onValueChange?.(numericValue);\n _setValue(inputValue);\n },\n [validateDecimalPoint, onChange, onValueChange, handleZeroCase, validationRegex]\n );\n\n const handleFocus = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n e => {\n if (readOnly) return;\n onFocus?.(e);\n _setValue(prev => (typeof prev === 'string' ? prev.replace(/,/g, '') : null)); // Remove commas for easier editing\n },\n [readOnly, onFocus]\n );\n\n const handleBlur = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n e => {\n if (readOnly) return;\n onBlur?.(e);\n _setValue(prev => {\n if (prev === null) return null;\n const isZero = prev === '0' || prev === '-' || /^-0+(\\.0+)?$/.test(prev) || /^-0*\\.$/.test(prev);\n if (isZero) return '0';\n return typeof prev === 'string' ? formattedValue(prev) : null;\n });\n },\n [readOnly, formattedValue, onBlur]\n );\n\n // Set initial value\n useEffect(() => {\n const isFocused = document.activeElement === _inputRef.current;\n\n if (value === undefined || value === null || !validationRegex.test(value.toString()) || !validateDecimalPoint(value.toString())) {\n _setValue(null);\n return;\n }\n\n _setValue(prev => (isFocused ? prev : formattedValue(value.toString())));\n }, [formattedValue, value, validateDecimalPoint, validationRegex]);\n\n // Set padding right for the input field\n useEffect(() => {\n if (!_unitRef.current || !_inputRef.current || !unitText) return;\n const unitWidth = _unitRef.current.offsetWidth;\n _inputRef.current.style.setProperty('padding-right', `${(unitWidth + 10) / 16}rem`);\n }, [unitText]);\n\n return (\n <div className={cn('relative', wrapperClassName)}>\n <Input\n {...props}\n ref={_inputRef}\n value={_value || (readOnly ? '0' : '')}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n className={cn('text-end font-number text-sm slashed-zero lining-nums tabular-nums', readOnly && 'bg-muted text-muted-foreground', className)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n {unitText && (\n <span ref={_unitRef} className=\"-translate-y-1/2 pointer-events-none absolute top-1/2 right-2 text-muted-foreground text-sm\">\n {unitText}\n </span>\n )}\n </div>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { NumberInput } from '@/components/ui/inputs/number-input';\n\nimport type { TanStackFormNumberFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\n\ntype NumberFieldProps = Pick<\n z.input<typeof TanStackFormNumberFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'rounding' | 'decimalPlaces' | 'percision' | 'unit' | 'showErrorMessage'\n> & {\n required?: boolean;\n allowNegative?: boolean;\n};\n\nexport const NumberField: React.FC<NumberFieldProps> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n orientation = 'responsive',\n showErrorMessage = true,\n rounding,\n decimalPlaces,\n percision,\n unit,\n\n required,\n allowNegative,\n}) => {\n const field = useTanStackFieldContext<number | null>();\n\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n\n const _errors = useMemo(() => {\n return field.state.meta.errors;\n }, [field.state.meta.errors]);\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const onValueChange = useCallback(\n (value: number | null) => {\n if (isSubmitting) return;\n field.handleChange(value);\n },\n [isSubmitting, field.handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={field.state.meta.isTouched && !field.state.meta.isValid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain>\n <div className=\"relative w-full\">\n <NumberInput\n id={field.name}\n value={field.state.value}\n aria-invalid={field.state.meta.isTouched && !field.state.meta.isValid && field.state.meta.isDirty}\n placeholder={placeholder}\n roundingRule={rounding}\n numberAfterDecimalPoint={decimalPlaces}\n precision={percision}\n unitText={unit}\n allowNegative={allowNegative}\n className={cn(isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={field.handleBlur}\n onValueChange={onValueChange}\n />\n {isSubmitting && (\n <div className=\"absolute inset-s-2 inset-y-0 top-2.5 text-muted-weak [&>svg]:size-3.5\">\n <Loader2Icon className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {field.state.meta.isDirty && showErrorMessage && !!_errors.length && (\n <div className=\"absolute inset-s-2 inset-y-0 top-2.75 text-danger-strong [&>svg]:size-3.5\">\n <BanIcon />\n </div>\n )}\n <div className=\"mt-1 flex w-full flex-col items-end justify-end\">\n {field.state.meta.isDirty && showErrorMessage && <FieldError errors={_errors} />}\n </div>\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { Input } from '@/components/ui/input';\n\nimport type { TanStackFormPasswordFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote } from '../ui/field';\n\ntype Props = Pick<\n z.input<typeof TanStackFormPasswordFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'showErrorMessage'\n>;\nexport const PasswordField: React.FC<Props> = ({ label, description, placeholder, orientation = 'responsive', helperText, showErrorMessage = true }) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const [isVisible, setIsVisible] = useState<boolean>(false);\n\n const _invalid = useMemo(() => {\n return state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isTouched, state.meta.isValid]);\n\n const toggleVisibility = useCallback(() => setIsVisible(prevState => !prevState), []);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n handleChange(value || null);\n },\n [isSubmitting, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={name}>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n type={isVisible ? 'text' : 'password'}\n placeholder={placeholder}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n autoComplete=\"new-password\"\n onBlur={handleBlur}\n onChange={onChange}\n />\n\n <button\n className=\"absolute inset-y-0 inset-e-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n type=\"button\"\n onClick={toggleVisibility}\n aria-label={isVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isVisible}\n aria-controls=\"password\"\n >\n {isVisible ? <EyeOffIcon size={16} aria-hidden=\"true\" /> : <EyeIcon size={16} aria-hidden=\"true\" />}\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">{showErrorMessage && <FieldError errors={state.meta.errors} />}</div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n </FieldGroup>\n );\n};\n","import { useStore } from '@tanstack/react-form';\n\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { TanStackFormRadioGroupFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator, FieldTitle } from '../ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\n\ntype Props = Pick<z.input<typeof TanStackFormRadioGroupFieldSchema>, 'label' | 'description' | 'options' | 'orientation' | 'helperText'>;\n\nexport const RadioGroupField: React.FC<Props> = ({ label, description, orientation, options, helperText }) => {\n const field = useTanStackFieldContext<string | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} className=\"flex-col gap-2\">\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n\n <FieldContentMain>\n <RadioGroup defaultValue={field.state.value ?? undefined} className=\"w-full\" onValueChange={field.handleChange}>\n {options.map(option => (\n <FieldLabel\n key={option.value}\n className={cn(\n 'h-fit',\n field.state.value === option.value && 'border-primary-weak! bg-primary-bg-subtle',\n isSubmitting && 'pointer-events-none bg-muted-muted opacity-60',\n field.state.value === option.value && isSubmitting && 'border-border-strong!'\n )}\n >\n <Field orientation=\"horizontal\" className=\"justify-between rounded p-2!\">\n <FieldContent className=\"gap-1!\">\n <FieldTitle>{option.label}</FieldTitle>\n <FieldDescription className=\"text-xs\">{option.description}</FieldDescription>\n </FieldContent>\n <RadioGroupItem value={option.value} />\n </Field>\n </FieldLabel>\n ))}\n </RadioGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useMemo } from 'react';\n\nimport { PackagePlusIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport type { TanStackFormSelectFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\n\ntype Props = Pick<\n z.input<typeof TanStackFormSelectFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'defaultValue' | 'options' | 'tooltip' | 'helperText' | 'orientation' | 'clearable'\n> & {\n required?: boolean;\n};\n\nexport const SelectField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n orientation = 'responsive',\n\n options,\n helperText,\n required = false,\n}) => {\n const field = useTanStackFieldContext<string | null>();\n\n const _isInvalid = useMemo(() => {\n return field.state.meta.isTouched && !field.state.meta.isValid;\n }, [field.state.meta.isTouched, field.state.meta.isValid]);\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const _errors = useMemo(() => {\n return field.state.meta.errors;\n }, [field.state.meta.errors]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={field.state.meta.isTouched && !field.state.meta.isValid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain className=\"flex flex-col\">\n <Select defaultValue={field.state.value || undefined} onValueChange={field.handleChange}>\n <SelectTrigger aria-invalid={_isInvalid ? 'true' : undefined} onBlur={field.handleBlur}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {!!options.length &&\n options.map(option => {\n return (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n );\n })}\n {!options.length && (\n <div className=\"flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak\">\n <PackagePlusIcon strokeWidth={1} />\n No options available\n </div>\n )}\n </SelectContent>\n </Select>\n\n <div className=\"mt-1 flex w-full flex-col items-end justify-end\">\n <FieldError errors={_errors} />\n </div>\n\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Switch as SwitchPrimitive } from 'radix-ui';\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer',\n 'w-8 shrink-0 cursor-pointer items-center rounded-full shadow-xs transition-all',\n 'inline-flex h-5',\n 'focus-visible:border-primary-strong',\n 'focus-visible:ring-primary-weak',\n 'focus-visible:ring-4',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n\n '-outline-offset-1 inset-shadow-2xs outline-1',\n\n 'data-[state=checked]:bg-primary',\n 'data-[state=checked]:outline-primary-strong',\n\n 'data-[state=unchecked]:bg-muted-weak',\n 'data-[state=unchecked]:outline-border',\n\n 'data-[state=unchecked]:[&_span]:size-4',\n 'data-[state=unchecked]:[&_span]:translate-x-0.5',\n 'data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'block size-4 bg-card shadow-xs',\n 'pointer-events-none rounded-full ring-0 transition-transform',\n 'data-[state=checked]:translate-x-[calc(100%-3px)]',\n 'data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type z from 'zod';\n\nimport type { TanStackFormSwitchFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldDescription, FieldGroup, FieldNote, FieldSeparator, FieldTitle } from '../ui/field';\nimport { Switch } from '../ui/switch';\n\ntype Props = Pick<z.input<typeof TanStackFormSwitchFieldSchema>, 'label' | 'description' | 'helperText'>;\n\nexport const SwitchField: React.FC<Props> = ({ label, description, helperText }) => {\n const field = useTanStackFieldContext<boolean | null>();\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation=\"vertical\" className=\"relative justify-between gap-y-1\">\n <FieldContent>\n <FieldTitle className=\"cursor-pointer\">\n <label htmlFor={field.name}>{label}</label>\n </FieldTitle>\n <FieldDescription>{description}</FieldDescription>\n <Switch\n id={field.name}\n checked={field.state.value ?? false}\n className=\"absolute top-1 right-1\"\n onBlur={field.handleBlur}\n onCheckedChange={field.handleChange}\n />\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon, XIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\nimport { useTanStackFieldContext } from '@/components/features/tanstack-form/tanstack-form';\n\nimport type { TanStackFormTextFieldSchema } from '../../schema';\n\ntype Props = Pick<\n z.input<typeof TanStackFormTextFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'counter' | 'tooltip' | 'helperText' | 'showClearButton' | 'showErrorMessage'\n> & {\n required?: boolean;\n maxLength?: number;\n};\n\nexport const TextField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showClearButton = false,\n showErrorMessage = true,\n\n required = false,\n maxLength,\n}) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _showClearButton = useMemo(() => {\n return showClearButton && !isSubmitting;\n }, [showClearButton, isSubmitting]);\n\n const _count = useMemo(() => {\n return state.value ? state.value.length : 0;\n }, [state.value]);\n\n const _countText = useMemo(() => {\n if (!counter) return '';\n const unit = `character${[0, 1].includes(_count) ? '' : 's'}`;\n if (counter && maxLength) return `${_count} / ${maxLength} ${unit}`;\n return `${_count} ${unit}`;\n }, [_count, counter, maxLength]);\n\n const _invalid = useMemo(() => {\n return state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isDirty, state.meta.isTouched, state.meta.isValid]);\n\n const _isEmpty = useMemo(() => {\n if (required) return state.value === null;\n return false;\n }, [required, state.value]);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, counter, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n if (isSubmitting) return;\n handleChange('');\n }, [isSubmitting, handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={name}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoComplete=\"off\"\n placeholder={placeholder}\n className={cn('pr-6', isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n />\n {_showClearButton && !state.meta.errors.length && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className=\"absolute inset-e-0 inset-y-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-intense [&>svg]:size-3.5\"\n onClick={onClear}\n >\n <XIcon aria-hidden=\"true\" />\n </button>\n )}\n {isSubmitting && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak\">\n <Loader2Icon size={14} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {state.meta.isDirty && showErrorMessage && !!state.meta.errors.length && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"mt-1 flex w-full items-start gap-x-2\">\n {state.meta.isDirty && showErrorMessage && <FieldError className=\"flex-1\" errors={state.meta.errors} />}\n {!!counter && <p className=\"h-4 flex-0 text-nowrap text-end text-text-positive-weak text-xs tabular-nums\">{_countText}</p>}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Textarea } from '@/components/ui/textarea';\n\nimport type { TanStackFormTextAreaFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\n\ntype Props = Pick<\n z.input<typeof TanStackFormTextAreaFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'counter' | 'tooltip' | 'helperText' | 'orientation' | 'showErrorMessage'\n> & {\n required?: boolean;\n maxLength?: number;\n};\n\nexport const TextareaField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showErrorMessage = true,\n\n required = false,\n maxLength,\n}) => {\n const { form, state, name, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _count = useMemo(() => {\n return state.value ? state.value.length : 0;\n }, [state.value]);\n\n const _countText = useMemo(() => {\n if (!counter) return '';\n const unit = `character${[0, 1].includes(_count) ? '' : 's'}`;\n if (counter && maxLength) return `${_count} / ${maxLength} ${unit}`;\n return `${_count} ${unit}`;\n }, [_count, counter, maxLength]);\n\n const _invalid = useMemo(() => {\n return state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isDirty, state.meta.isTouched, state.meta.isValid]);\n\n const _errors = useMemo(() => {\n return state.meta.errors;\n }, [state.meta.errors]);\n\n const _isEmpty = useMemo(() => {\n if (required) return state.value === null;\n return false;\n }, [required, state.value]);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLTextAreaElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, counter, maxLength, handleChange]\n );\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={name}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Textarea\n id={name}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoComplete=\"off\"\n placeholder={placeholder}\n className={cn(isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onChange={onChange}\n onBlur={handleBlur}\n />\n {isSubmitting && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak\">\n <Loader2Icon size={14} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {state.meta.isDirty && showErrorMessage && !!_errors.length && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"mt-1 flex w-full items-start gap-x-2\">\n {state.meta.isDirty && showErrorMessage && <FieldError className=\"flex-1\" errors={_errors} />}\n {!!counter && <p className=\"h-4 flex-0 text-nowrap text-end text-text-positive-weak text-xs tabular-nums\">{_countText}</p>}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\n\nexport const TanStackActionSubmit: React.FC<{\n label?: string;\n className?: string;\n}> = ({ label, className }) => {\n const form = useTanStackFormContext();\n\n const onSubmit = useCallback(async () => {\n await form.handleSubmit({ submitAction: 'submit' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }, [form]);\n return (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button type=\"button\" size=\"md\" disabled={disabled} isLoading={isSubmitting} className={cn('min-h-8 min-w-32', className)} onClick={onSubmit}>\n {label ?? 'Submit'}\n </Button>\n );\n }}\n />\n );\n};\n","import { ArrowDownToLine, PlusIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\n\nexport const TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n type?: 'create' | 'update';\n }>\n> = ({ type = 'create' }) => {\n const form = useTanStackFormContext();\n return (\n <div className=\"flex h-8 items-center justify-between\">\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || state.isSubmitting,\n })}\n children={({ disabled }) => {\n return (\n <Button color=\"muted\" variant=\"outline\" type=\"button\" size=\"md\" disabled={disabled} className=\"h-full min-w-32\" onClick={() => form.reset()}>\n Cancel\n </Button>\n );\n }}\n />\n {type === 'create' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'create' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <PlusIcon />\n Add New\n </Button>\n );\n }}\n />\n )}\n {type === 'update' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'update' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <ArrowDownToLine />\n Update\n </Button>\n );\n }}\n />\n )}\n </div>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\nfunction Separator({ className, orientation = 'horizontal', decorative = true, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border-weak',\n 'data-[orientation=horizontal]:h-px',\n 'data-[orientation=horizontal]:w-full',\n 'data-[orientation=vertical]:h-full',\n 'data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { Separator } from '../ui/separator';\n\nexport const TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n onDelete?: () => void | Promise<void>;\n }>\n> = ({ title, description, onDelete, children }) => {\n return (\n <section data-slot=\"card-form\" className=\"relative flex flex-col rounded-md bg-card pb-4 shadow-card ring-4 ring-border-weak\">\n <div data-slot=\"card-form-header\" className=\"flex flex-col space-y-1 p-4\">\n <p className=\"font-semibold text-lg\">{title}</p>\n {!!description && <p className=\"text-muted text-sm\">{description}</p>}\n </div>\n <Separator />\n <div data-slot=\"card-form-main\" className=\"flex flex-col space-y-4 py-4\">\n {children}\n </div>\n {!!onDelete && (\n <Button\n color=\"danger\"\n variant=\"outline\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={e => {\n onDelete?.();\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Trash2Icon />\n Remove\n </Button>\n )}\n </section>\n );\n};\n","export const TanStackContainerForm: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <div data-slot=\"section-form\" className=\"flex flex-col space-y-4\">\n {children}\n </div>\n );\n};\n","export const CancelButton: React.FC<React.ComponentProps<'button'>> = ({ ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n className=\"min-w-40 cursor-pointer rounded-sm border border-border bg-card px-4 py-2 font-semibold text-sm text-text-positive shadow-xs outline-none transition-all hover:opacity-90 focus:border-border focus:ring-3 focus:ring-border/80 focus:ring-offset-2 focus:drop-shadow-none disabled:pointer-events-none disabled:opacity-60 disabled:drop-shadow-none\"\n >\n Hủy\n </button>\n );\n};\n","import { Loader2 } from 'lucide-react';\n\nexport const SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n submitText?: string;\n }\n> = ({ isSubmitting, submitText = 'Submit', ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n data-loading={isSubmitting ? 'true' : undefined}\n className=\"relative min-h-9.5 min-w-40 cursor-pointer rounded-sm border border-primary-strong bg-primary px-4 py-2 font-semibold text-sm text-text-negative shadow-card outline-none transition-all hover:opacity-90 focus:border-transparent focus:ring-3 focus:ring-primary/80 focus:ring-offset-2 focus:drop-shadow-none disabled:pointer-events-none disabled:opacity-60 disabled:drop-shadow-none data-[loading=true]:pointer-events-none data-[loading=true]:opacity-80\"\n >\n {isSubmitting ? (\n <Loader2 size={16} strokeWidth={3} className=\"absolute top-1/2 left-1/2 z-10 -translate-x-1/2 -translate-y-1/2 animate-spin\" />\n ) : (\n submitText\n )}\n </button>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Separator } from '@/components/ui/separator';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\nimport { CancelButton } from '../ui/cancel-button';\nimport { SubmitButton } from '../ui/submit-button';\nimport { Dialog, DialogContent, DialogOverlay, DialogPortal, DialogTitle } from '@/components/ui/dialog';\n\nexport const TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n submitText?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, submitText, open, onOpenChange, children }) => {\n const form = useTanStackFormContext();\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!open) form.reset();\n onOpenChange?.(open);\n },\n [form.reset, onOpenChange]\n );\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogContent className=\"flex size-full max-h-dvh max-w-dvw flex-col gap-0 overflow-y-auto p-0 shadow-dialog sm:h-auto sm:max-h-[85dvh] sm:max-w-2xl sm:rounded-sm\">\n <div data-slot=\"dialog-header\" className=\"flex flex-col items-center justify-center gap-2 px-4 py-6 text-center shadow-sm sm:text-left\">\n <DialogTitle data-slot=\"dialog-title\">{title}</DialogTitle>\n </div>\n <Separator />\n <div data-slot=\"dialog-content\" className=\"relative flex flex-col space-y-4 overflow-y-auto p-0 pt-6 max-sm:flex-1 sm:p-4\">\n {children}\n </div>\n <Separator />\n <div\n data-slot=\"dialog-footer\"\n className=\"flex flex-col-reverse items-center justify-between gap-2 px-6 py-4 shadow-sm sm:flex-row sm:justify-end max-sm:[&>button]:w-full\"\n >\n <form.Subscribe\n selector={state => {\n return {\n disabled: state.isSubmitting,\n };\n }}\n children={({ disabled }) => {\n return (\n <CancelButton\n disabled={disabled}\n onClick={() => {\n form.reset();\n handleOpenChange(false);\n }}\n />\n );\n }}\n />\n <form.Subscribe\n selector={state => ({\n isSubmitting: state.isSubmitting,\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit,\n })}\n children={({ isSubmitting, disabled }) => {\n return <SubmitButton isSubmitting={isSubmitting} disabled={disabled} submitText={submitText} onClick={() => form.handleSubmit()} />;\n }}\n />\n </div>\n </DialogContent>\n </DialogPortal>\n </Dialog>\n );\n};\n","import {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\n\nexport const TanStackFieldGroup: React.FC<\n React.PropsWithChildren<{\n label: string;\n description?: string;\n helperText?: string;\n\n orientation?: 'horizontal' | 'vertical' | 'responsive';\n }>\n> = ({\n label,\n description,\n helperText,\n\n orientation = 'responsive',\n children,\n}) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation}>\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n {children}\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { cn } from '@customafk/react-toolkit/utils';\n\nimport { CloseButton } from '@/components/ui/buttons/close';\n\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { useTanStackFormContext } from '../../tanstack-form';\nimport { CancelButton } from '../ui/cancel-button';\nimport { SubmitButton } from '../ui/submit-button';\n\nexport const TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, open, contentClassName, onOpenChange, children }) => {\n const form = useTanStackFormContext();\n return (\n <DialogPrimitive.Root data-slot=\"dialog\" open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal data-slot=\"dialog-portal\">\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-40 bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in',\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out'\n )}\n />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'fixed top-4 right-4 z-50 h-[calc(100dvh-2rem)] min-w-sm max-w-xl rounded-md bg-background drop-shadow-lg',\n 'duration-300',\n\n 'data-[state=open]:animate-in',\n 'data-[state=open]:slide-in-from-right',\n 'data-[state=open]:fade-in',\n\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:slide-out-to-right',\n 'data-[state=closed]:fade-out'\n )}\n >\n <section className=\"relative flex size-full flex-col\">\n <header className=\"flex h-14 items-center border-border border-b px-4\">\n <h2 className=\"font-semibold text-lg text-primary-strong\">{title}</h2>\n </header>\n\n <div className={cn('flex flex-1 flex-col overflow-y-auto py-4', contentClassName)}>{children}</div>\n\n <div className=\"flex flex-col space-y-4 border-border border-t px-4 py-2\">\n <form.Subscribe\n selector={state => ({\n isSubmitting: state.isSubmitting,\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit,\n })}\n children={({ isSubmitting, disabled }) => {\n return <SubmitButton isSubmitting={isSubmitting} disabled={disabled} className=\"w-full\" onClick={() => form.handleSubmit()} />;\n }}\n />\n <form.Subscribe\n selector={state => {\n return {\n disabled: state.isPristine || state.isSubmitting,\n };\n }}\n children={({ disabled }) => {\n return (\n <CancelButton\n disabled={disabled}\n className=\"w-full\"\n onClick={() => {\n form.reset();\n onOpenChange?.(false);\n }}\n />\n );\n }}\n />\n </div>\n\n <DialogPrimitive.Close asChild>\n <CloseButton className=\"absolute top-2 right-2\" />\n </DialogPrimitive.Close>\n </section>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n};\n","import { Separator } from '../ui/separator';\n\nconst SectionHeader: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <header data-slot=\"section-header\" className=\"px-4 pt-2.5 pb-2 font-medium text-base text-primary-strong\">\n {children}\n </header>\n );\n};\n\nconst SectionMain: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <main data-slot=\"section-main\" className=\"relative flex flex-col space-y-4 py-4\">\n {children}\n </main>\n );\n};\n\nexport const TanStackSectionForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n }>\n> = ({ title, children }) => {\n return (\n <section data-slot=\"section-form\" className=\"flex flex-col rounded-md bg-background shadow-card ring-4 ring-border-weak\">\n <SectionHeader>{title}</SectionHeader>\n <Separator />\n <SectionMain>{children}</SectionMain>\n </section>\n );\n};\n","import { Field, FieldContent, FieldDescription, FieldGroup, FieldLegend, FieldNote, FieldSeparator } from '../ui/field';\n\nexport const TanStackTitleField: React.FC<{\n title: string;\n description?: string;\n helperText?: string;\n}> = ({ title, description, helperText }) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field className=\"gap-0\">\n <FieldContent>\n <FieldLegend className=\"mb-1\">{title}</FieldLegend>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { createFormHook, createFormHookContexts } from '@tanstack/react-form';\n\nimport { CheckboxField } from './components/fields/checkbox-field';\nimport { DateField } from './components/fields/date-field';\nimport { EmailField } from './components/fields/email-field';\nimport { NumberField } from './components/fields/number-field';\nimport { PasswordField } from './components/fields/password-field';\nimport { RadioGroupField } from './components/fields/radio-group-field';\nimport { SelectField } from './components/fields/select-field';\nimport { SwitchField } from './components/fields/switch-field';\nimport { TextField } from './components/fields/text-field';\nimport { TextareaField } from './components/fields/textarea-field';\nimport { TanStackActionSubmit } from './components/forms/action-submit';\nimport { TanStackActionsForm } from './components/forms/actions-form';\nimport { TanStackCardForm } from './components/forms/card-form';\nimport { TanStackContainerForm } from './components/forms/container-form';\nimport { TanStackDialogForm } from './components/forms/dialog-form';\nimport { TanStackFieldGroup } from './components/forms/group-field';\nimport { TanStackPopoverForm } from './components/forms/popover-form';\nimport { TanStackSectionForm } from './components/forms/section-form';\nimport { TanStackTitleField } from './components/forms/title-field';\nimport { Field, FieldContent, FieldContentMain, FieldError, FieldGroup, FieldLabel, FieldSeparator } from './components/ui/field';\n\nconst { fieldContext, formContext, useFieldContext: useTanStackFieldContext, useFormContext: useTanStackFormContext } = createFormHookContexts();\n\nconst {\n useAppForm: useTanStackForm,\n withForm: withTanStackForm,\n withFieldGroup: withTanStackFieldGroup,\n} = createFormHook({\n fieldContext,\n formContext,\n\n fieldComponents: {\n TextField,\n TextareaField,\n NumberField,\n EmailField,\n PasswordField,\n\n SelectField,\n DateField,\n SwitchField,\n RadioGroupField,\n CheckboxField,\n\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n },\n formComponents: {\n TanStackDialogForm,\n TanStackPopoverForm,\n TanStackContainerForm,\n TanStackSectionForm,\n TanStackCardForm,\n TanStackFieldGroup,\n TanStackTitleField,\n\n TanStackActionsForm,\n TanStackActionSubmit,\n },\n});\n\nexport {\n useTanStackForm,\n withTanStackForm,\n withTanStackFieldGroup,\n useTanStackFieldContext,\n useTanStackFormContext,\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n};\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { VariantProps } from "class-variance-authority";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime87 from "react/jsx-runtime";
|
|
3
3
|
import * as class_variance_authority_types2 from "class-variance-authority/types";
|
|
4
4
|
|
|
5
5
|
//#region packages/components/ui/input.d.ts
|
|
6
6
|
declare const inputVariants: (props?: ({
|
|
7
7
|
variant?: "none" | "outline" | "ghost" | "soft" | "subtle" | null | undefined;
|
|
8
|
-
size?: "
|
|
8
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
9
9
|
} & class_variance_authority_types2.ClassProp) | undefined) => string;
|
|
10
10
|
type InputVariantProps = VariantProps<typeof inputVariants>;
|
|
11
11
|
declare function Input({
|
|
@@ -19,7 +19,7 @@ declare function Input({
|
|
|
19
19
|
variant?: InputVariantProps['variant'];
|
|
20
20
|
size?: InputVariantProps['size'];
|
|
21
21
|
onValueChange?: (value: string) => void;
|
|
22
|
-
}):
|
|
22
|
+
}): react_jsx_runtime87.JSX.Element;
|
|
23
23
|
//#endregion
|
|
24
24
|
export { InputVariantProps as n, inputVariants as r, Input as t };
|
|
25
|
-
//# sourceMappingURL=input-
|
|
25
|
+
//# sourceMappingURL=input-Dv7UKl6Z.d.mts.map
|