@customafk/lunas-ui 0.1.44 → 0.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/{button-CSlIniPy.d.mts → button-CsdEruoX.d.cts} +5 -5
  2. package/dist/{button-DPIxmKl6.d.cts → button-DVseUDj4.d.mts} +6 -6
  3. package/dist/data-display/empty.d.cts +2 -2
  4. package/dist/data-display/statistic.d.cts +2 -2
  5. package/dist/{dialog-CVn1weYD.d.mts → dialog-B1vJI8z1.d.mts} +12 -12
  6. package/dist/{dialog-COljUqkA.d.cts → dialog-eNVy-E39.d.cts} +12 -12
  7. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +28 -28
  8. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +26 -26
  9. package/dist/features/search-modal/index.d.cts +2 -2
  10. package/dist/features/search-modal/index.d.mts +2 -2
  11. package/dist/features/tables/index.cjs +1 -1
  12. package/dist/features/tables/index.cjs.map +1 -1
  13. package/dist/features/tables/index.d.cts +10 -4
  14. package/dist/features/tables/index.d.mts +8 -2
  15. package/dist/features/tables/index.mjs +1 -1
  16. package/dist/features/tables/index.mjs.map +1 -1
  17. package/dist/features/tanstack-form/index.cjs +1 -1
  18. package/dist/features/tanstack-form/index.cjs.map +1 -1
  19. package/dist/features/tanstack-form/index.d.cts +48 -48
  20. package/dist/features/tanstack-form/index.d.mts +48 -48
  21. package/dist/features/tanstack-form/index.mjs +1 -1
  22. package/dist/features/tanstack-form/index.mjs.map +1 -1
  23. package/dist/{input-6dw8Hn1a.d.mts → input-CRu1d87i.d.mts} +3 -3
  24. package/dist/{input-CUgZor87.d.cts → input-DmchpCKC.d.cts} +5 -5
  25. package/dist/layouts/app-layout/index.d.cts +28 -28
  26. package/dist/layouts/app-layout/index.d.mts +26 -26
  27. package/dist/layouts/flex.d.cts +6 -6
  28. package/dist/layouts/flex.d.mts +4 -4
  29. package/dist/layouts/service-layout/index.d.cts +13 -13
  30. package/dist/layouts/service-layout/index.d.mts +3 -3
  31. package/dist/pages/FeatureDeveloping.d.cts +2 -2
  32. package/dist/pages/FeatureDeveloping.d.mts +2 -2
  33. package/dist/pages/FeatureFixing.d.cts +2 -2
  34. package/dist/pages/FeatureFixing.d.mts +2 -2
  35. package/dist/pages/NotAuthorized.d.cts +2 -2
  36. package/dist/pages/NotAuthorized.d.mts +2 -2
  37. package/dist/pages/NotFound.d.cts +2 -2
  38. package/dist/pages/NotFound.d.mts +2 -2
  39. package/dist/{separator-BZcvxEyl.d.cts → separator-aPjAYbm-.d.cts} +3 -3
  40. package/dist/{separator-ImLEjGpm.d.mts → separator-qK_n36yS.d.mts} +3 -3
  41. package/dist/{tooltip-B0tCGGm9.d.cts → tooltip-CV1g0GdH.d.mts} +6 -6
  42. package/dist/{tooltip-CUgVVSrb.d.mts → tooltip-D-YS7gu3.d.cts} +6 -6
  43. package/dist/typography/paragraph.d.cts +2 -2
  44. package/dist/typography/paragraph.d.mts +2 -2
  45. package/dist/typography/title.d.cts +2 -2
  46. package/dist/typography/title.d.mts +2 -2
  47. package/dist/ui/alert-dialog.d.cts +12 -12
  48. package/dist/ui/alert-dialog.d.mts +12 -12
  49. package/dist/ui/alert.d.cts +7 -7
  50. package/dist/ui/alert.d.mts +5 -5
  51. package/dist/ui/aspect-ratio.d.cts +2 -2
  52. package/dist/ui/aspect-ratio.d.mts +2 -2
  53. package/dist/ui/avatar.d.cts +4 -4
  54. package/dist/ui/avatar.d.mts +4 -4
  55. package/dist/ui/badge.d.cts +4 -4
  56. package/dist/ui/badge.d.mts +4 -4
  57. package/dist/ui/breadcrumb.d.cts +8 -8
  58. package/dist/ui/breadcrumb.d.mts +8 -8
  59. package/dist/ui/button-group.d.cts +7 -7
  60. package/dist/ui/button-group.d.mts +7 -7
  61. package/dist/ui/button.d.cts +1 -1
  62. package/dist/ui/button.d.mts +1 -1
  63. package/dist/ui/calendar.d.cts +4 -4
  64. package/dist/ui/calendar.d.mts +4 -4
  65. package/dist/ui/card.d.cts +8 -8
  66. package/dist/ui/card.d.mts +8 -8
  67. package/dist/ui/carousel.d.cts +7 -7
  68. package/dist/ui/carousel.d.mts +7 -7
  69. package/dist/ui/collapsible.d.cts +4 -4
  70. package/dist/ui/collapsible.d.mts +4 -4
  71. package/dist/ui/command.d.cts +11 -11
  72. package/dist/ui/command.d.mts +11 -11
  73. package/dist/ui/context-menu.d.cts +16 -16
  74. package/dist/ui/context-menu.d.mts +16 -16
  75. package/dist/ui/dialog.d.cts +1 -1
  76. package/dist/ui/dialog.d.mts +1 -1
  77. package/dist/ui/drawer.d.cts +11 -11
  78. package/dist/ui/drawer.d.mts +11 -11
  79. package/dist/ui/dropdown-menu.d.cts +16 -16
  80. package/dist/ui/dropdown-menu.d.mts +16 -16
  81. package/dist/ui/empty.d.cts +9 -9
  82. package/dist/ui/empty.d.mts +9 -9
  83. package/dist/ui/field.d.cts +13 -13
  84. package/dist/ui/field.d.mts +24 -24
  85. package/dist/ui/file-uploader.d.cts +2 -2
  86. package/dist/ui/file-uploader.d.mts +2 -2
  87. package/dist/ui/form.d.cts +11 -11
  88. package/dist/ui/form.d.mts +11 -11
  89. package/dist/ui/hover-card.d.cts +4 -4
  90. package/dist/ui/hover-card.d.mts +4 -4
  91. package/dist/ui/input-otp.d.cts +5 -5
  92. package/dist/ui/input-otp.d.mts +5 -5
  93. package/dist/ui/input.d.cts +1 -1
  94. package/dist/ui/input.d.mts +1 -1
  95. package/dist/ui/inputs/search-input.d.cts +3 -3
  96. package/dist/ui/inputs/search-input.d.mts +3 -3
  97. package/dist/ui/item.d.cts +15 -15
  98. package/dist/ui/item.d.mts +15 -15
  99. package/dist/ui/label.d.cts +2 -2
  100. package/dist/ui/label.d.mts +2 -2
  101. package/dist/ui/menubar.d.cts +17 -17
  102. package/dist/ui/menubar.d.mts +17 -17
  103. package/dist/ui/multi-select.d.cts +2 -2
  104. package/dist/ui/multi-select.d.mts +3 -3
  105. package/dist/ui/navigation-menu.d.cts +11 -11
  106. package/dist/ui/navigation-menu.d.mts +9 -9
  107. package/dist/ui/pagination.d.cts +9 -9
  108. package/dist/ui/pagination.d.mts +9 -9
  109. package/dist/ui/popover.d.cts +5 -5
  110. package/dist/ui/popover.d.mts +5 -5
  111. package/dist/ui/progress.d.cts +2 -2
  112. package/dist/ui/progress.d.mts +2 -2
  113. package/dist/ui/radio-group.d.cts +3 -3
  114. package/dist/ui/radio-group.d.mts +3 -3
  115. package/dist/ui/resizable.d.cts +4 -4
  116. package/dist/ui/resizable.d.mts +4 -4
  117. package/dist/ui/scroll-area.d.cts +6 -6
  118. package/dist/ui/scroll-area.d.mts +6 -6
  119. package/dist/ui/select.d.cts +11 -11
  120. package/dist/ui/select.d.mts +11 -11
  121. package/dist/ui/separator.d.cts +1 -1
  122. package/dist/ui/separator.d.mts +1 -1
  123. package/dist/ui/sheet.d.cts +9 -9
  124. package/dist/ui/sheet.d.mts +9 -9
  125. package/dist/ui/sidebar.d.cts +28 -28
  126. package/dist/ui/sidebar.d.mts +28 -28
  127. package/dist/ui/skeleton.d.cts +2 -2
  128. package/dist/ui/skeleton.d.mts +2 -2
  129. package/dist/ui/slider.d.cts +2 -2
  130. package/dist/ui/slider.d.mts +2 -2
  131. package/dist/ui/sonner.cjs +1 -1
  132. package/dist/ui/sonner.cjs.map +1 -1
  133. package/dist/ui/sonner.d.cts +4 -3
  134. package/dist/ui/sonner.d.mts +4 -3
  135. package/dist/ui/sonner.mjs +1 -1
  136. package/dist/ui/sonner.mjs.map +1 -1
  137. package/dist/ui/spinner.d.cts +2 -2
  138. package/dist/ui/spinner.d.mts +2 -2
  139. package/dist/ui/switch.d.cts +2 -2
  140. package/dist/ui/switch.d.mts +2 -2
  141. package/dist/ui/table.d.cts +18 -18
  142. package/dist/ui/table.d.mts +18 -18
  143. package/dist/ui/tabs.d.cts +5 -5
  144. package/dist/ui/tabs.d.mts +5 -5
  145. package/dist/ui/textarea.d.cts +2 -2
  146. package/dist/ui/textarea.d.mts +2 -2
  147. package/dist/ui/toggle-group.d.cts +3 -3
  148. package/dist/ui/toggle-group.d.mts +3 -3
  149. package/dist/ui/toggle.d.cts +4 -4
  150. package/dist/ui/toggle.d.mts +4 -4
  151. package/dist/ui/tooltip.d.cts +1 -1
  152. package/dist/ui/tooltip.d.mts +1 -1
  153. package/package.json +1 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Checkbox","CheckboxPrimitive","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","Popover","PopoverPrimitive","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","RadioGroup","RadioGroupPrimitive","RadioGroupField: React.FC<Props>","isSubmitting","RadioGroup","Select","SelectPrimitive","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 }>\n>","Separator","TanStackContainerForm: React.FC<React.PropsWithChildren>","CancelButton: React.FC<React.ComponentProps<'button'>>","SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n }\n>","TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n>","open","DialogPrimitive","Separator","TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\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/checkbox.tsx","../../../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/ui/calendar.tsx","../../../packages/components/features/tanstack-form/components/ui/popover.tsx","../../../packages/components/features/tanstack-form/components/fields/date-field.tsx","../../../packages/components/features/tanstack-form/components/ui/input.tsx","../../../packages/components/features/tanstack-form/components/fields/email-field.tsx","../../../packages/components/features/tanstack-form/components/ui/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/ui/radio-group.tsx","../../../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx","../../../packages/components/features/tanstack-form/components/ui/select.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/ui/textarea.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/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":["'use client';\n\nimport { CheckIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-border',\n 'size-4 shrink-0 cursor-pointer rounded border shadow-xs outline-none transition-all',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:border-primary-strong',\n 'focus-visible:ring-3',\n 'focus-visible:ring-primary-weak',\n 'aria-invalid:border-danger aria-invalid:ring-danger-weak',\n 'aria-readonly:bg-muted-muted',\n 'aria-readonly:pointer-events-none',\n 'data-[state=checked]:aria-readonly:bg-muted-muted',\n 'data-[state=checked]:aria-readonly:border-border',\n 'data-[state=checked]:aria-readonly:text-text-positive-strong',\n 'data-[state=checked]:bg-primary',\n 'data-[state=checked]:border-primary-strong',\n 'data-[state=checked]:text-text-negative-strong',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator data-slot=\"checkbox-indicator\" className=\"flex items-center justify-center text-current transition-none\">\n <CheckIcon size={14} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","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-normal 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 [[data-variant=legend]+&]:-mt-1.5 font-normal text-sm text-text-positive-weak leading-normal last:mt-0 [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',\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(\n 'text-wrap rounded border border-primary-muted bg-linear-to-b from-primary-bg-subtle to-primary-bg-subtle/50 p-2 text-text-positive-weak text-xs',\n className\n )}\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('-my-2 group-data-[variant=outline]/field-group:-mb-2 relative h-5 text-sm', 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 { Checkbox } from '../ui/checkbox';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\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","'use client';\nimport { type HTMLAttributes, type ThHTMLAttributes, useEffect, useRef } from 'react';\n\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { buttonVariants } from '@/components/ui/button.variants';\n\nimport { type CalendarWeek, type CustomComponents, type DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nconst CalendarRoot = ({\n rootRef,\n className,\n ...props\n}: {\n rootRef?: React.Ref<HTMLDivElement>;\n} & HTMLAttributes<HTMLDivElement>) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n};\n\nconst CalendarChevron = (props: { className?: string; size?: number; disabled?: boolean; orientation?: 'up' | 'down' | 'left' | 'right' }) => {\n if (props.orientation === 'left') {\n return <ChevronLeftIcon size={16} className={props.className} {...props} />;\n }\n\n if (props.orientation === 'right') {\n return <ChevronRightIcon size={16} className={props.className} {...props} />;\n }\n\n return <ChevronDownIcon size={16} className={props.className} {...props} />;\n};\n\nconst CalendarDayButton = ({ className, day, modifiers, color: _, ...props }: React.ComponentProps<typeof DayButton>) => {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n color=\"muted\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle}\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'flex aspect-square size-9 flex-col rounded font-normal text-sm tabular-nums leading-none',\n 'data-[selected-single=true]:bg-primary',\n 'data-[selected-single=true]:text-white',\n 'data-[range-middle=true]:bg-muted-muted',\n 'data-[range-middle=true]:text-text-positive',\n 'data-[range-start=true]:bg-primary-muted',\n 'data-[range-start=true]:text-text-positive-strong',\n 'data-[range-end=true]:bg-primary',\n 'data-[range-end=true]:text-text-positive-strong',\n 'group-data-[focused=true]/day:border-primary-strong',\n 'group-data-[focused=true]/day:relative',\n 'group-data-[focused=true]/day:z-10',\n 'data-[range-end=true]:rounded',\n 'data-[range-end=true]:rounded-r',\n 'data-[range-middle=true]:rounded-none',\n 'data-[range-start=true]:rounded',\n 'data-[range-start=true]:rounded-l',\n '[&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n};\n\nconst CalendarWeekNumber = ({\n children,\n ...props\n}: {\n week: CalendarWeek;\n} & ThHTMLAttributes<HTMLTableCellElement>) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">{children}</div>\n </td>\n );\n};\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-3',\n '[--cell-size:--spacing(8)]',\n 'in-data-[slot=card-content]:bg-transparent',\n 'in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: date => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn(defaultClassNames.root),\n months: cn('flex gap-4 flex-col md:flex-row relative', defaultClassNames.months),\n month: cn('flex flex-col w-full gap-4', defaultClassNames.month),\n nav: cn('flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between', defaultClassNames.nav),\n button_previous: cn(\n buttonVariants({ variant: 'outline', color: 'muted' }),\n 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none',\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: 'outline', color: 'muted' }),\n 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none',\n defaultClassNames.button_next\n ),\n month_caption: cn('flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)', defaultClassNames.month_caption),\n dropdowns: cn('w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5', defaultClassNames.dropdowns),\n dropdown_root: cn(\n 'relative has-focus:border-primary-strong border border-border-weak shadow-xs has-focus:ring-primary-weak has-focus:ring-[3px] rounded',\n defaultClassNames.dropdown_root\n ),\n dropdown: cn('absolute inset-0 opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'select-none font-medium',\n captionLayout === 'label' && 'text-sm',\n captionLayout !== 'label' && 'rounded shadow-xs px-2 flex items-center gap-0.5 text-sm h-8 [&>svg]:text-text-positive [&>svg]:size-3.5',\n defaultClassNames.caption_label\n ),\n table: 'w-full border-collapse',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn('text-text-positive rounded flex-1 font-normal text-[0.8rem] select-none', defaultClassNames.weekday),\n week: cn('flex w-full mt-2', defaultClassNames.week),\n week_number_header: cn('select-none w-(--cell-size)', defaultClassNames.week_number_header),\n week_number: cn('text-[0.8rem] select-none text-text-positive', defaultClassNames.week_number),\n day: cn(\n 'relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l [&:last-child[data-selected=true]_button]:rounded-r group/day aspect-square select-none',\n defaultClassNames.day\n ),\n range_start: cn('rounded-l bg-muted-muted', defaultClassNames.range_start),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn('rounded-r bg-muted-muted', defaultClassNames.range_end),\n today: cn('bg-muted-muted text-text-positive rounded data-[selected=true]:rounded-none', defaultClassNames.today),\n outside: cn('[&>button]:text-text-positive-muted aria-selected:text-text-positive'),\n disabled: cn('bg-muted-muted text-text-positive opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: CalendarRoot as CustomComponents['Root'],\n Chevron: CalendarChevron as CustomComponents['Chevron'],\n DayButton: CalendarDayButton as CustomComponents['DayButton'],\n WeekNumber: CalendarWeekNumber as CustomComponents['WeekNumber'],\n ...components,\n }}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { CloseButton } from '@/components/ui/buttons/close';\n\nimport { Popover as PopoverPrimitive } from 'radix-ui';\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({ className, align = 'start', sideOffset = 4, children, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'relative bg-popover',\n 'text-text-positive',\n 'z-50',\n 'min-w-(--radix-popover-trigger-width)',\n 'max-h-(--radix-popover-content-available-height)',\n 'origin-(--radix-popover-content-transform-origin)',\n 'rounded-md p-4 shadow-dropdown outline-none',\n\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in-0',\n 'data-[state=open]:zoom-in-95',\n\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0',\n 'data-[state=closed]:zoom-out-95',\n\n 'data-[side=top]:slide-in-from-bottom-8',\n 'data-[side=right]:slide-in-from-left-8',\n 'data-[side=bottom]:slide-in-from-top-8',\n 'data-[side=left]:slide-in-from-right-8',\n className\n )}\n {...props}\n >\n {children}\n <PopoverPrimitive.Arrow className=\"fill-popover\" />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nfunction PopoverClose({ className, ...props }: React.ComponentProps<typeof PopoverPrimitive.Close>) {\n return (\n <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} asChild>\n <CloseButton className=\"absolute top-2 right-2\" />\n </PopoverPrimitive.Close>\n );\n}\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PopoverClose };\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 { Calendar } from '../ui/calendar';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\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, 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","'use client';\n\nimport { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport const Input = ({\n className,\n onChange,\n onValueChange,\n ...props\n}: Omit<React.ComponentProps<'input'>, 'size'> & {\n onValueChange?: (value: string) => void;\n}) => {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n },\n [onChange, onValueChange]\n );\n return (\n <input\n data-slot=\"input\"\n className={cn(\n 'w-full min-w-0 bg-transparent px-2.5 py-2 transition-[color,box-shadow]',\n 'rounded text-sm text-text-positive-weak tabular-nums leading-5 shadow-input placeholder:text-text-positive-muted',\n\n '-outline-offset-1 outline-1 outline-border',\n\n // Disabled state\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-transparent disabled:opacity-50',\n\n // Read-only state\n 'read-only:pointer-events-none read-only:bg-muted-muted read-only:placeholder:text-text-positive-weak',\n\n // Focus state\n 'focus:text-text-positive focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak',\n\n // Invalid state\n 'aria-invalid:bg-danger-bg-subtle aria-invalid:outline-danger aria-invalid:ring-danger-weak aria-invalid:focus:outline-danger-strong aria-invalid:focus:ring-4 aria-invalid:placeholder:text-text-positive-weak',\n className\n )}\n {...props}\n onChange={handleChange}\n />\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 '../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 end-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 './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 type { TanStackFormNumberFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { NumberInput } from '../ui/number-input';\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,\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 className=\"flex justify-end\">\n <div className=\"relative flex w-full flex-col items-end\">\n <div className=\"relative w-full max-w-120\">\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 start-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 start-2 top-2.75 text-danger-strong\">\n <BanIcon size={14} />\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 </div>\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 type { TanStackFormPasswordFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote } from '../ui/field';\nimport { Input } from '../ui/input';\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 end-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","'use client';\n\nimport { CircleIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\n\nfunction RadioGroup({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return <RadioGroupPrimitive.Root data-slot=\"radio-group\" className={cn('grid gap-3', className)} {...props} />;\n}\n\nfunction RadioGroupItem({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n 'aspect-square size-4 shrink-0 rounded-full border border-border shadow-xs outline-none transition-all',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'focus:border-border focus:ring-4 focus:ring-primary-weak',\n 'aria-invalid:border-danger-strong aria-invalid:ring-danger-weak',\n 'aria-readonly:pointer-events-none',\n 'aria-readonly:[&_div]:bg-muted',\n 'aria-readonly:[&_svg]:fill-muted-weak',\n 'aria-readonly:[&_svg]:text-muted-weak',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator data-slot=\"radio-group-indicator\" className=\"relative flex items-center justify-center bg-primary\">\n <div className=\"absolute size-4 rounded-full bg-primary\" />\n <CircleIcon className=\"-translate-1/2 absolute top-1/2 left-1/2 size-2 fill-text-negative-strong text-text-negative\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\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 '../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","'use client';\n\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Select as SelectPrimitive } from 'radix-ui';\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n className={cn(\n 'flex w-full items-center justify-between',\n '-outline-offset-1 outline-1 outline-border',\n 'gap-2 rounded bg-transparent px-3 py-2',\n 'rounded shadow-input transition-all',\n 'cursor-pointer whitespace-nowrap text-sm',\n\n // Text styles\n 'focus-visible:text-text-positive-strong',\n 'focus-visible:outline-primary-strong',\n 'focus-visible:ring-4',\n 'focus-visible:ring-primary-weak',\n\n // State styles\n 'data-[state=open]:text-text-positive-muted',\n 'data-[state=open]:outline-primary-strong',\n 'data-[state=open]:ring-4',\n 'data-[state=open]:ring-primary-weak',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n\n // Invalid state\n 'aria-invalid:bg-danger-bg-subtle',\n 'aria-invalid:outline-danger',\n 'aria-invalid:ring-danger-weak',\n 'aria-invalid:focus:outline-danger-strong',\n 'aria-invalid:focus:ring-4',\n 'aria-invalid:placeholder:text-text-positive-weak',\n 'aria-invalid:data-[state=open]:outline-danger-strong',\n 'aria-invalid:data-[state=open]:ring-danger-weak',\n\n // Placeholder styles\n 'data-placeholder:text-text-positive-muted',\n '*:data-[slot=select-value]:line-clamp-1',\n '*:data-[slot=select-value]:flex',\n '*:data-[slot=select-value]:items-center',\n '*:data-[slot=select-value]:gap-2',\n\n // Readonly state\n 'aria-readonly:bg-muted-muted',\n 'aria-readonly:cursor-default',\n 'aria-readonly:focus:outline-none',\n 'aria-readonly:ring-0',\n 'aria-readonly:pointer-events-none',\n\n // Icon styles\n '[&_svg]:shrink-0',\n '[&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon size={16} opacity={50} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({ className, children, position = 'popper', ...props }: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal data-slot=\"select-portal\">\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'relative z-50 min-w-32 overflow-y-auto overflow-x-hidden rounded shadow-dropdown duration-300',\n 'bg-white',\n 'w-(--radix-select-trigger-width)',\n 'max-h-(--radix-select-content-available-height)',\n 'origin-(--radix-select-content-transform-origin)',\n\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in',\n 'data-[state=open]:zoom-in-95',\n\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out',\n 'data-[state=closed]:zoom-out-95',\n\n 'data-[side=bottom]:slide-in-from-top-8',\n 'data-[side=left]:slide-in-from-right-8',\n 'data-[side=right]:slide-in-from-left-8',\n 'data-[side=top]:slide-in-from-bottom-8',\n\n position === 'popper' && 'data-[side=bottom]:translate-y-1',\n position === 'popper' && 'data-[side=left]:-translate-x-1',\n position === 'popper' && 'data-[side=right]:translate-x-1',\n position === 'popper' && 'data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n style={{\n maxHeight: 'var(--radix-select-content-available-height)',\n }}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn('p-1', position === 'popper' && 'h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1')}\n children={children}\n />\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return <SelectPrimitive.Label data-slot=\"select-label\" className={cn('px-2 py-1.5 text-text-positive-weak text-xs', className)} {...props} />;\n}\n\nfunction SelectItem({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n 'relative flex select-none items-center border border-transparent',\n 'gap-2 rounded py-2.5 pr-8 pl-2',\n 'w-full',\n 'cursor-pointer outline-none transition-colors',\n 'font-medium text-sm text-text-positive-weak',\n\n 'focus:border-border-weak',\n 'focus:bg-linear-to-b',\n 'focus:from-muted-bg-subtle',\n 'focus:to-muted-muted',\n\n 'data-disabled:opacity-50',\n 'data-disabled:pointer-events-none',\n\n '[&_svg]:pointer-events-none',\n '[&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-weak\",\n\n '*:[span]:last:flex',\n '*:[span]:last:items-center',\n '*:[span]:last:gap-2',\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon size={16} />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return <SelectPrimitive.Separator data-slot=\"select-separator\" className={cn('-mx-1 pointer-events-none my-1 h-px bg-border-weak', className)} {...props} />;\n}\n\nfunction SelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon size={16} />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon size={16} />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\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 '../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 type { TanStackFormTextFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Input } from '../ui/input';\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 counter = false,\n // tooltip,\n helperText,\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(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 end-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 {isSubmitting && (\n <div className=\"absolute inset-y-0 end-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 end-2 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"mt-1 flex w-full items-start justify-end *:basis-1/2\">\n {showErrorMessage && <FieldError errors={state.meta.errors} />}\n {!!counter && <p className=\"text-end text-text-positive-weak text-xs tabular-nums leading-3.5\">{_countText}</p>}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\n\nimport { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nfunction Textarea({\n className,\n onChange,\n onValueChange,\n ...props\n}: React.ComponentProps<'textarea'> & {\n onValueChange?: (value: string) => void;\n}) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n },\n [onChange, onValueChange]\n );\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n // Base styles\n 'flex min-h-24 w-full bg-transparent px-3 py-2',\n 'rounded shadow-input transition-[color,box-shadow] duration-200',\n 'resize-y text-sm text-text-positive-weak tabular-nums caret-primary',\n\n // Border and shadow styles\n '-outline-offset-1 outline-1 outline-border',\n\n // Placeholder styling\n 'placeholder:text-text-positive-muted',\n\n // State styles\n 'focus:text-text-positive focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak',\n\n // Read-only state\n 'read-only:pointer-events-none read-only:bg-muted-muted read-only:placeholder:text-text-positive-weak',\n\n // Invalid state\n 'aria-invalid:bg-danger-bg-subtle',\n 'aria-invalid:outline-danger',\n 'aria-invalid:ring-danger-weak',\n 'aria-invalid:focus:outline-danger-strong',\n 'aria-invalid:focus:ring-4',\n 'aria-invalid:placeholder:text-text-positive-weak',\n\n // Disabled state\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'disabled:pointer-events-none',\n 'disabled:border-border-weak/50 disabled:bg-secondary-muted/10',\n\n // Additional custom styling\n className\n )}\n {...props}\n onChange={handleChange}\n />\n );\n}\n\nexport { Textarea };\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 '../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 orientation = 'responsive',\n counter,\n helperText,\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 end-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 end-2 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"mt-1 flex w-full items-start justify-end *:basis-1/2\">\n {showErrorMessage && <FieldError errors={_errors} />}\n {!!counter && <p className=\"text-end text-text-positive-weak text-xs\">{_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-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 { Separator } from '../ui/separator';\n\nexport const TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n }>\n> = ({ title, description, children }) => {\n return (\n <section data-slot=\"card-form\" className=\"flex flex-col rounded-md bg-card pb-4 shadow-card ring-3 ring-border-muted\">\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 </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 style={\n {\n 'corner-shape': 'squircle',\n } as React.CSSProperties\n }\n className=\"min-w-40 cursor-pointer rounded-xl border border-border bg-linear-to-b from-white/80 to-white px-4 py-2 font-semibold text-sm text-text-positive shadow-[0_2px_4px_var(--border)] 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 Cancel\n </button>\n );\n};\n","import { Loader2 } from 'lucide-react';\n\nexport const SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n }\n> = ({ isSubmitting, ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n data-loading={isSubmitting ? 'true' : undefined}\n style={\n {\n 'corner-shape': 'squircle',\n } as React.CSSProperties\n }\n className=\"relative min-h-9.5 min-w-40 cursor-pointer rounded-xl border border-primary-strong bg-linear-to-b from-primary/60 to-primary px-4 py-2 font-semibold text-sm text-text-negative outline-none drop-shadow-[0_2px_4px_var(--primary)] 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 'Submit'\n )}\n </button>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Separator } from '@/components/ui/separator';\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 TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, 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 <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <DialogPrimitive.DialogPortal data-slot=\"dialog-portal\">\n <DialogPrimitive.DialogOverlay\n data-slot=\"dialog-overlay\"\n className=\"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=closed]:animate-out data-[state=open]:animate-in\"\n />\n <DialogPrimitive.Content className=\"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-80 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-80 fixed top-1/2 left-1/2 z-50 flex max-h-[85dvh] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col gap-0 overflow-y-auto rounded-sm bg-background p-0 shadow-dialog outline-none duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-2xl\">\n <div data-slot=\"dialog-header\" className=\"flex flex-col items-center justify-center gap-2 px-4 py-6 text-center sm:text-left\">\n <DialogPrimitive.Title data-slot=\"dialog-title\" className=\"font-medium text-lg text-text-positive-strong leading-none\">\n {title}\n </DialogPrimitive.Title>\n </div>\n <Separator />\n <div data-slot=\"dialog-content\" className=\"relative flex flex-col space-y-4 overflow-y-auto p-4 pt-6\">\n {children}\n </div>\n <Separator />\n <div data-slot=\"dialog-footer\" className=\"flex flex-col-reverse items-center justify-between gap-2 px-6 py-4 sm:flex-row sm:justify-end\">\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 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} onClick={() => form.handleSubmit()} />;\n }}\n />\n </div>\n </DialogPrimitive.Content>\n </DialogPrimitive.DialogPortal>\n </DialogPrimitive.Root>\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 onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, open, 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=\"flex-1 overflow-y-auto py-4\">{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\" />;\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-3 ring-border-muted\">\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 { TanStackPopoverForm } from './components/forms/popover-form';\nimport { TanStackSectionForm } from './components/forms/section-form';\nimport { TanStackTitleField } from './components/forms/title-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 formComponents: {\n TanStackDialogForm,\n TanStackPopoverForm,\n TanStackContainerForm,\n TanStackSectionForm,\n TanStackCardForm,\n TanStackTitleField,\n\n TanStackActionsForm,\n TanStackActionSubmit,\n },\n});\n\nexport { useTanStackForm, withTanStackForm, withTanStackFieldGroup, useTanStackFieldContext, useTanStackFormContext };\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["Checkbox","CheckboxPrimitive","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","Popover","PopoverPrimitive","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","RadioGroup","RadioGroupPrimitive","RadioGroupField: React.FC<Props>","isSubmitting","RadioGroup","Select","SelectPrimitive","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 }>\n>","Separator","TanStackContainerForm: React.FC<React.PropsWithChildren>","CancelButton: React.FC<React.ComponentProps<'button'>>","SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n }\n>","TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n>","open","DialogPrimitive","Separator","TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\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/checkbox.tsx","../../../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/ui/calendar.tsx","../../../packages/components/features/tanstack-form/components/ui/popover.tsx","../../../packages/components/features/tanstack-form/components/fields/date-field.tsx","../../../packages/components/features/tanstack-form/components/ui/input.tsx","../../../packages/components/features/tanstack-form/components/fields/email-field.tsx","../../../packages/components/features/tanstack-form/components/ui/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/ui/radio-group.tsx","../../../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx","../../../packages/components/features/tanstack-form/components/ui/select.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/ui/textarea.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/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":["'use client';\n\nimport { CheckIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-border',\n 'size-4 shrink-0 cursor-pointer rounded border shadow-xs outline-none transition-all',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:border-primary-strong',\n 'focus-visible:ring-3',\n 'focus-visible:ring-primary-weak',\n 'aria-invalid:border-danger aria-invalid:ring-danger-weak',\n 'aria-readonly:bg-muted-muted',\n 'aria-readonly:pointer-events-none',\n 'data-[state=checked]:aria-readonly:bg-muted-muted',\n 'data-[state=checked]:aria-readonly:border-border',\n 'data-[state=checked]:aria-readonly:text-text-positive-strong',\n 'data-[state=checked]:bg-primary',\n 'data-[state=checked]:border-primary-strong',\n 'data-[state=checked]:text-text-negative-strong',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator data-slot=\"checkbox-indicator\" className=\"flex items-center justify-center text-current transition-none\">\n <CheckIcon size={14} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","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 { Checkbox } from '../ui/checkbox';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\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","'use client';\nimport { type HTMLAttributes, type ThHTMLAttributes, useEffect, useRef } from 'react';\n\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { buttonVariants } from '@/components/ui/button.variants';\n\nimport { type CalendarWeek, type CustomComponents, type DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nconst CalendarRoot = ({\n rootRef,\n className,\n ...props\n}: {\n rootRef?: React.Ref<HTMLDivElement>;\n} & HTMLAttributes<HTMLDivElement>) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n};\n\nconst CalendarChevron = (props: { className?: string; size?: number; disabled?: boolean; orientation?: 'up' | 'down' | 'left' | 'right' }) => {\n if (props.orientation === 'left') {\n return <ChevronLeftIcon size={16} className={props.className} {...props} />;\n }\n\n if (props.orientation === 'right') {\n return <ChevronRightIcon size={16} className={props.className} {...props} />;\n }\n\n return <ChevronDownIcon size={16} className={props.className} {...props} />;\n};\n\nconst CalendarDayButton = ({ className, day, modifiers, color: _, ...props }: React.ComponentProps<typeof DayButton>) => {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n color=\"muted\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle}\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'flex aspect-square size-9 flex-col rounded font-normal text-sm tabular-nums leading-none',\n 'data-[selected-single=true]:bg-primary',\n 'data-[selected-single=true]:text-white',\n 'data-[range-middle=true]:bg-muted-muted',\n 'data-[range-middle=true]:text-text-positive',\n 'data-[range-start=true]:bg-primary-muted',\n 'data-[range-start=true]:text-text-positive-strong',\n 'data-[range-end=true]:bg-primary',\n 'data-[range-end=true]:text-text-positive-strong',\n 'group-data-[focused=true]/day:border-primary-strong',\n 'group-data-[focused=true]/day:relative',\n 'group-data-[focused=true]/day:z-10',\n 'data-[range-end=true]:rounded',\n 'data-[range-end=true]:rounded-r',\n 'data-[range-middle=true]:rounded-none',\n 'data-[range-start=true]:rounded',\n 'data-[range-start=true]:rounded-l',\n '[&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n};\n\nconst CalendarWeekNumber = ({\n children,\n ...props\n}: {\n week: CalendarWeek;\n} & ThHTMLAttributes<HTMLTableCellElement>) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">{children}</div>\n </td>\n );\n};\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-3',\n '[--cell-size:--spacing(8)]',\n 'in-data-[slot=card-content]:bg-transparent',\n 'in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: date => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn(defaultClassNames.root),\n months: cn('flex gap-4 flex-col md:flex-row relative', defaultClassNames.months),\n month: cn('flex flex-col w-full gap-4', defaultClassNames.month),\n nav: cn('flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between', defaultClassNames.nav),\n button_previous: cn(\n buttonVariants({ variant: 'outline', color: 'muted' }),\n 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none',\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: 'outline', color: 'muted' }),\n 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none',\n defaultClassNames.button_next\n ),\n month_caption: cn('flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)', defaultClassNames.month_caption),\n dropdowns: cn('w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5', defaultClassNames.dropdowns),\n dropdown_root: cn(\n 'relative has-focus:border-primary-strong border border-border-weak shadow-xs has-focus:ring-primary-weak has-focus:ring-[3px] rounded',\n defaultClassNames.dropdown_root\n ),\n dropdown: cn('absolute inset-0 opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'select-none font-medium',\n captionLayout === 'label' && 'text-sm',\n captionLayout !== 'label' && 'rounded shadow-xs px-2 flex items-center gap-0.5 text-sm h-8 [&>svg]:text-text-positive [&>svg]:size-3.5',\n defaultClassNames.caption_label\n ),\n table: 'w-full border-collapse',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn('text-text-positive rounded flex-1 font-normal text-[0.8rem] select-none', defaultClassNames.weekday),\n week: cn('flex w-full mt-2', defaultClassNames.week),\n week_number_header: cn('select-none w-(--cell-size)', defaultClassNames.week_number_header),\n week_number: cn('text-[0.8rem] select-none text-text-positive', defaultClassNames.week_number),\n day: cn(\n 'relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l [&:last-child[data-selected=true]_button]:rounded-r group/day aspect-square select-none',\n defaultClassNames.day\n ),\n range_start: cn('rounded-l bg-muted-muted', defaultClassNames.range_start),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn('rounded-r bg-muted-muted', defaultClassNames.range_end),\n today: cn('bg-muted-muted text-text-positive rounded data-[selected=true]:rounded-none', defaultClassNames.today),\n outside: cn('[&>button]:text-text-positive-muted aria-selected:text-text-positive'),\n disabled: cn('bg-muted-muted text-text-positive opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: CalendarRoot as CustomComponents['Root'],\n Chevron: CalendarChevron as CustomComponents['Chevron'],\n DayButton: CalendarDayButton as CustomComponents['DayButton'],\n WeekNumber: CalendarWeekNumber as CustomComponents['WeekNumber'],\n ...components,\n }}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { CloseButton } from '@/components/ui/buttons/close';\n\nimport { Popover as PopoverPrimitive } from 'radix-ui';\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({ className, align = 'start', sideOffset = 4, children, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'relative bg-popover',\n 'text-text-positive',\n 'z-50',\n 'min-w-(--radix-popover-trigger-width)',\n 'max-h-(--radix-popover-content-available-height)',\n 'origin-(--radix-popover-content-transform-origin)',\n 'rounded-md p-4 shadow-dropdown outline-none',\n\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in-0',\n 'data-[state=open]:zoom-in-95',\n\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0',\n 'data-[state=closed]:zoom-out-95',\n\n 'data-[side=top]:slide-in-from-bottom-8',\n 'data-[side=right]:slide-in-from-left-8',\n 'data-[side=bottom]:slide-in-from-top-8',\n 'data-[side=left]:slide-in-from-right-8',\n className\n )}\n {...props}\n >\n {children}\n <PopoverPrimitive.Arrow className=\"fill-popover\" />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nfunction PopoverClose({ className, ...props }: React.ComponentProps<typeof PopoverPrimitive.Close>) {\n return (\n <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} asChild>\n <CloseButton className=\"absolute top-2 right-2\" />\n </PopoverPrimitive.Close>\n );\n}\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PopoverClose };\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 { Calendar } from '../ui/calendar';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\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, 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","'use client';\n\nimport { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport const Input = ({\n className,\n onChange,\n onValueChange,\n ...props\n}: Omit<React.ComponentProps<'input'>, 'size'> & {\n onValueChange?: (value: string) => void;\n}) => {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n },\n [onChange, onValueChange]\n );\n return (\n <input\n data-slot=\"input\"\n className={cn(\n 'w-full min-w-0 bg-transparent px-2.5 py-2 transition-[color,box-shadow]',\n 'rounded text-sm text-text-positive-weak tabular-nums leading-5 shadow-input placeholder:text-text-positive-muted',\n\n '-outline-offset-1 outline-1 outline-border',\n\n // Disabled state\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-transparent disabled:opacity-50',\n\n // Read-only state\n 'read-only:pointer-events-none read-only:bg-muted-muted read-only:placeholder:text-text-positive-weak',\n\n // Focus state\n 'focus:text-text-positive focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak',\n\n // Invalid state\n 'aria-invalid:bg-danger-bg-subtle aria-invalid:outline-danger aria-invalid:ring-danger-weak aria-invalid:focus:outline-danger-strong aria-invalid:focus:ring-4 aria-invalid:placeholder:text-text-positive-weak',\n className\n )}\n {...props}\n onChange={handleChange}\n />\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 '../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 end-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 './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 type { TanStackFormNumberFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { NumberInput } from '../ui/number-input';\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 className=\"flex justify-end\">\n <div className=\"relative flex w-full flex-col items-end\">\n <div className=\"relative w-full max-w-120\">\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 start-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 start-2 top-2.75 text-danger-strong\">\n <BanIcon size={14} />\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 </div>\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 type { TanStackFormPasswordFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote } from '../ui/field';\nimport { Input } from '../ui/input';\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 end-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","'use client';\n\nimport { CircleIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\n\nfunction RadioGroup({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return <RadioGroupPrimitive.Root data-slot=\"radio-group\" className={cn('grid gap-3', className)} {...props} />;\n}\n\nfunction RadioGroupItem({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n 'aspect-square size-4 shrink-0 rounded-full border border-border shadow-xs outline-none transition-all',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'focus:border-border focus:ring-4 focus:ring-primary-weak',\n 'aria-invalid:border-danger-strong aria-invalid:ring-danger-weak',\n 'aria-readonly:pointer-events-none',\n 'aria-readonly:[&_div]:bg-muted',\n 'aria-readonly:[&_svg]:fill-muted-weak',\n 'aria-readonly:[&_svg]:text-muted-weak',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator data-slot=\"radio-group-indicator\" className=\"relative flex items-center justify-center bg-primary\">\n <div className=\"absolute size-4 rounded-full bg-primary\" />\n <CircleIcon className=\"-translate-1/2 absolute top-1/2 left-1/2 size-2 fill-text-negative-strong text-text-negative\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\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 '../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","'use client';\n\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Select as SelectPrimitive } from 'radix-ui';\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n className={cn(\n 'flex w-full items-center justify-between',\n '-outline-offset-1 outline-1 outline-border',\n 'gap-2 rounded bg-transparent px-3 py-2',\n 'rounded shadow-input transition-all',\n 'cursor-pointer whitespace-nowrap text-sm',\n\n // Text styles\n 'focus-visible:text-text-positive-strong',\n 'focus-visible:outline-primary-strong',\n 'focus-visible:ring-4',\n 'focus-visible:ring-primary-weak',\n\n // State styles\n 'data-[state=open]:text-text-positive-muted',\n 'data-[state=open]:outline-primary-strong',\n 'data-[state=open]:ring-4',\n 'data-[state=open]:ring-primary-weak',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n\n // Invalid state\n 'aria-invalid:bg-danger-bg-subtle',\n 'aria-invalid:outline-danger',\n 'aria-invalid:ring-danger-weak',\n 'aria-invalid:focus:outline-danger-strong',\n 'aria-invalid:focus:ring-4',\n 'aria-invalid:placeholder:text-text-positive-weak',\n 'aria-invalid:data-[state=open]:outline-danger-strong',\n 'aria-invalid:data-[state=open]:ring-danger-weak',\n\n // Placeholder styles\n 'data-placeholder:text-text-positive-muted',\n '*:data-[slot=select-value]:line-clamp-1',\n '*:data-[slot=select-value]:flex',\n '*:data-[slot=select-value]:items-center',\n '*:data-[slot=select-value]:gap-2',\n\n // Readonly state\n 'aria-readonly:bg-muted-muted',\n 'aria-readonly:cursor-default',\n 'aria-readonly:focus:outline-none',\n 'aria-readonly:ring-0',\n 'aria-readonly:pointer-events-none',\n\n // Icon styles\n '[&_svg]:shrink-0',\n '[&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon size={16} opacity={50} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({ className, children, position = 'popper', ...props }: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal data-slot=\"select-portal\">\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'relative z-50 min-w-32 overflow-y-auto overflow-x-hidden rounded shadow-dropdown duration-300',\n 'bg-white',\n 'w-(--radix-select-trigger-width)',\n 'max-h-(--radix-select-content-available-height)',\n 'origin-(--radix-select-content-transform-origin)',\n\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in',\n 'data-[state=open]:zoom-in-95',\n\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out',\n 'data-[state=closed]:zoom-out-95',\n\n 'data-[side=bottom]:slide-in-from-top-8',\n 'data-[side=left]:slide-in-from-right-8',\n 'data-[side=right]:slide-in-from-left-8',\n 'data-[side=top]:slide-in-from-bottom-8',\n\n position === 'popper' && 'data-[side=bottom]:translate-y-1',\n position === 'popper' && 'data-[side=left]:-translate-x-1',\n position === 'popper' && 'data-[side=right]:translate-x-1',\n position === 'popper' && 'data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n style={{\n maxHeight: 'var(--radix-select-content-available-height)',\n }}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn('p-1', position === 'popper' && 'h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1')}\n children={children}\n />\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return <SelectPrimitive.Label data-slot=\"select-label\" className={cn('px-2 py-1.5 text-text-positive-weak text-xs', className)} {...props} />;\n}\n\nfunction SelectItem({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n 'relative flex select-none items-center border border-transparent',\n 'gap-2 rounded py-2.5 pr-8 pl-2',\n 'w-full',\n 'cursor-pointer outline-none transition-colors',\n 'font-medium text-sm text-text-positive-weak',\n\n 'focus:border-border-weak',\n 'focus:bg-linear-to-b',\n 'focus:from-muted-bg-subtle',\n 'focus:to-muted-muted',\n\n 'data-disabled:opacity-50',\n 'data-disabled:pointer-events-none',\n\n '[&_svg]:pointer-events-none',\n '[&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-weak\",\n\n '*:[span]:last:flex',\n '*:[span]:last:items-center',\n '*:[span]:last:gap-2',\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon size={16} />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return <SelectPrimitive.Separator data-slot=\"select-separator\" className={cn('-mx-1 pointer-events-none my-1 h-px bg-border-weak', className)} {...props} />;\n}\n\nfunction SelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon size={16} />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon size={16} />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\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 '../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/features/tanstack-form/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 counter = false,\n // tooltip,\n helperText,\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 end-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 end-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 end-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","'use client';\n\nimport { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nfunction Textarea({\n className,\n onChange,\n onValueChange,\n ...props\n}: React.ComponentProps<'textarea'> & {\n onValueChange?: (value: string) => void;\n}) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n },\n [onChange, onValueChange]\n );\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n // Base styles\n 'flex min-h-24 w-full bg-transparent px-3 py-2',\n 'rounded shadow-input transition-[color,box-shadow] duration-200',\n 'resize-y text-sm text-text-positive-weak tabular-nums caret-primary',\n\n // Border and shadow styles\n '-outline-offset-1 outline-1 outline-border',\n\n // Placeholder styling\n 'placeholder:text-text-positive-muted',\n\n // State styles\n 'focus:text-text-positive focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak',\n\n // Read-only state\n 'read-only:pointer-events-none read-only:bg-muted-muted read-only:placeholder:text-text-positive-weak',\n\n // Invalid state\n 'aria-invalid:bg-danger-bg-subtle',\n 'aria-invalid:outline-danger',\n 'aria-invalid:ring-danger-weak',\n 'aria-invalid:focus:outline-danger-strong',\n 'aria-invalid:focus:ring-4',\n 'aria-invalid:placeholder:text-text-positive-weak',\n\n // Disabled state\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'disabled:pointer-events-none',\n 'disabled:border-border-weak/50 disabled:bg-secondary-muted/10',\n\n // Additional custom styling\n className\n )}\n {...props}\n onChange={handleChange}\n />\n );\n}\n\nexport { Textarea };\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 '../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 orientation = 'responsive',\n counter,\n helperText,\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 end-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 end-2 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"mt-1 flex w-full items-start justify-end *:basis-1/2\">\n {showErrorMessage && <FieldError errors={_errors} />}\n {!!counter && <p className=\"text-end text-text-positive-weak text-xs\">{_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-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 { Separator } from '../ui/separator';\n\nexport const TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n }>\n> = ({ title, description, children }) => {\n return (\n <section data-slot=\"card-form\" className=\"flex flex-col rounded-md bg-card pb-4 shadow-card ring-3 ring-border-muted\">\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 </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 style={\n {\n 'corner-shape': 'squircle',\n } as React.CSSProperties\n }\n className=\"min-w-40 cursor-pointer rounded-xl border border-border bg-linear-to-b from-white/80 to-white px-4 py-2 font-semibold text-sm text-text-positive shadow-[0_2px_4px_var(--border)] 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 Cancel\n </button>\n );\n};\n","import { Loader2 } from 'lucide-react';\n\nexport const SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n }\n> = ({ isSubmitting, ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n data-loading={isSubmitting ? 'true' : undefined}\n style={\n {\n 'corner-shape': 'squircle',\n } as React.CSSProperties\n }\n className=\"relative min-h-9.5 min-w-40 cursor-pointer rounded-xl border border-primary-strong bg-linear-to-b from-primary/60 to-primary px-4 py-2 font-semibold text-sm text-text-negative outline-none drop-shadow-[0_2px_4px_var(--primary)] 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 'Submit'\n )}\n </button>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Separator } from '@/components/ui/separator';\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 TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, 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 <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <DialogPrimitive.DialogPortal data-slot=\"dialog-portal\">\n <DialogPrimitive.DialogOverlay\n data-slot=\"dialog-overlay\"\n className=\"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=closed]:animate-out data-[state=open]:animate-in\"\n />\n <DialogPrimitive.Content className=\"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-80 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-80 fixed top-1/2 left-1/2 z-50 flex max-h-[85dvh] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col gap-0 overflow-y-auto rounded-sm bg-background p-0 shadow-dialog outline-none duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-2xl\">\n <div data-slot=\"dialog-header\" className=\"flex flex-col items-center justify-center gap-2 px-4 py-6 text-center sm:text-left\">\n <DialogPrimitive.Title data-slot=\"dialog-title\" className=\"font-medium text-lg text-text-positive-strong leading-none\">\n {title}\n </DialogPrimitive.Title>\n </div>\n <Separator />\n <div data-slot=\"dialog-content\" className=\"relative flex flex-col space-y-4 overflow-y-auto p-4 pt-6\">\n {children}\n </div>\n <Separator />\n <div data-slot=\"dialog-footer\" className=\"flex flex-col-reverse items-center justify-between gap-2 px-6 py-4 sm:flex-row sm:justify-end\">\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 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} onClick={() => form.handleSubmit()} />;\n }}\n />\n </div>\n </DialogPrimitive.Content>\n </DialogPrimitive.DialogPortal>\n </DialogPrimitive.Root>\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 onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, open, 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=\"flex-1 overflow-y-auto py-4\">{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\" />;\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-3 ring-border-muted\">\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 { TanStackPopoverForm } from './components/forms/popover-form';\nimport { TanStackSectionForm } from './components/forms/section-form';\nimport { TanStackTitleField } from './components/forms/title-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 formComponents: {\n TanStackDialogForm,\n TanStackPopoverForm,\n TanStackContainerForm,\n TanStackSectionForm,\n TanStackCardForm,\n TanStackTitleField,\n\n TanStackActionsForm,\n TanStackActionSubmit,\n },\n});\n\nexport { useTanStackForm, withTanStackForm, withTanStackFieldGroup, useTanStackFieldContext, useTanStackFormContext };\n"],"mappings":"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"}