dgz-ui-shared 1.2.21 → 1.2.22

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 (43) hide show
  1. package/dist/chunks/MyInput-DOJNbPnV.cjs.js +2 -0
  2. package/dist/chunks/MyInput-DOJNbPnV.cjs.js.map +1 -0
  3. package/dist/chunks/MyInput-VyzguJnO.es.js +51 -0
  4. package/dist/chunks/MyInput-VyzguJnO.es.js.map +1 -0
  5. package/dist/chunks/MySelect-C7tnOKUF.cjs.js +2 -0
  6. package/dist/chunks/{MySelect-Ovb1pK5c.cjs.js.map → MySelect-C7tnOKUF.cjs.js.map} +1 -1
  7. package/dist/chunks/MySelect-DzvUAkVs.es.js +56 -0
  8. package/dist/chunks/MySelect-DzvUAkVs.es.js.map +1 -0
  9. package/dist/chunks/{PasswordConfirm-maMQqARK.cjs.js → PasswordConfirm-C8_4iAeF.cjs.js} +2 -2
  10. package/dist/chunks/{PasswordConfirm-maMQqARK.cjs.js.map → PasswordConfirm-C8_4iAeF.cjs.js.map} +1 -1
  11. package/dist/chunks/{PasswordConfirm-15FLlQ8Y.es.js → PasswordConfirm-CU25xH0G.es.js} +2 -2
  12. package/dist/chunks/{PasswordConfirm-15FLlQ8Y.es.js.map → PasswordConfirm-CU25xH0G.es.js.map} +1 -1
  13. package/dist/chunks/{Search-BDXQ3bSp.cjs.js → Search-6BG3dnM9.cjs.js} +2 -2
  14. package/dist/chunks/{Search-BDXQ3bSp.cjs.js.map → Search-6BG3dnM9.cjs.js.map} +1 -1
  15. package/dist/chunks/{Search-I3lwE0J6.es.js → Search-Y51oT-uZ.es.js} +3 -3
  16. package/dist/chunks/{Search-I3lwE0J6.es.js.map → Search-Y51oT-uZ.es.js.map} +1 -1
  17. package/dist/components/confirm/index.cjs.js +1 -1
  18. package/dist/components/confirm/index.es.js +1 -1
  19. package/dist/components/datatable/index.cjs.js +1 -1
  20. package/dist/components/datatable/index.es.js +1 -1
  21. package/dist/components/filters/index.cjs.js +1 -1
  22. package/dist/components/filters/index.es.js +1 -1
  23. package/dist/components/form/index.cjs.js +1 -1
  24. package/dist/components/form/index.cjs.js.map +1 -1
  25. package/dist/components/form/index.es.js +188 -187
  26. package/dist/components/form/index.es.js.map +1 -1
  27. package/dist/hooks/index.cjs.js +1 -1
  28. package/dist/hooks/index.cjs.js.map +1 -1
  29. package/dist/hooks/index.es.js +1 -1
  30. package/dist/hooks/index.es.js.map +1 -1
  31. package/dist/styles.css +1 -1
  32. package/dist/types/App.d.ts.map +1 -1
  33. package/dist/types/components/form/MyDatePicker.d.ts +1 -0
  34. package/dist/types/components/form/MyDatePicker.d.ts.map +1 -1
  35. package/dist/types/components/form/MyMaskInput.d.ts.map +1 -1
  36. package/package.json +7 -5
  37. package/dist/chunks/MyInput-C9PNyYby.cjs.js +0 -2
  38. package/dist/chunks/MyInput-C9PNyYby.cjs.js.map +0 -1
  39. package/dist/chunks/MyInput-Wb0DSWo_.es.js +0 -51
  40. package/dist/chunks/MyInput-Wb0DSWo_.es.js.map +0 -1
  41. package/dist/chunks/MySelect-D8ML7nhM.es.js +0 -56
  42. package/dist/chunks/MySelect-D8ML7nhM.es.js.map +0 -1
  43. package/dist/chunks/MySelect-Ovb1pK5c.cjs.js +0 -2
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("react/jsx-runtime"),i=require("dgz-ui/button"),S=require("dgz-ui/form"),h=require("dgz-ui/popover"),g=require("./lodash-BjH0kD7j.cjs.js"),x=require("lucide-react"),a=require("react"),E=require("react-i18next"),D=require("./useFilter-CsOF1_hM.cjs.js"),$=require("./MyInput-C9PNyYby.cjs.js"),A=require("./MySelect-Ovb1pK5c.cjs.js"),C=require("./index-ClQFzqcq.cjs.js"),O=require("dgz-ui/utils"),N=require("./Keyboard-kyPAAQWP.cjs.js"),W=a.memo(function({filters:n,params:c,onFilter:r,onChange:o,onCancel:y,triggerProps:l,contentProps:u,title:t,resetText:k,applyText:I,...B}){const{t:p}=E.useTranslation(),[M,P]=a.useState(!1),[R,d]=a.useState(!1),{form:b}=D.useFilter({params:c}),{watch:T,handleSubmit:z,control:v,reset:q}=b;a.useEffect(()=>{let s=!1;n.map(w=>{const m=g.lodashExports.get(c,`${w.name}`);(Array.isArray(m)?m.length>0:m)&&(s=!0),P(s)})},[n,c]);const f=T();a.useEffect(()=>{o==null||o(f)},[f,o]);const F=a.useCallback((s={})=>{r==null||r(s),d(!1)},[r]),K=a.useCallback(()=>{q(),r&&r({...Object.fromEntries(n.map(s=>[s.name,void 0]))}),d(!1)},[r,q,n]);return e.jsxs(h.Popover,{open:R,onOpenChange:d,children:[e.jsx(h.PopoverTrigger,{...l,children:e.jsx(i.Button,{asChild:!0,size:"sm",variant:"secondary",className:"ml-auto px-3",...B,children:e.jsxs("div",{className:"flex items-center",children:[M?e.jsx(x.ListFilterPlusIcon,{className:"size-5"}):e.jsx(x.ListFilterIcon,{className:"size-5"})," ",e.jsx("span",{className:"hidden lg:inline!",children:t||p("Filter")}),e.jsx(x.ChevronDown,{})]})})}),e.jsx(h.PopoverContent,{side:"bottom",align:"end",...u,children:e.jsx(S.Form,{...b,children:e.jsxs("form",{onSubmit:z(F),className:"space-y-4",children:[e.jsx("div",{className:"h-full shrink space-y-6 p-1",children:n.map(s=>s.options?e.jsx(A.MySelect,{control:v,name:s.name,isSearchable:!!s.isSearchable,placeholder:s.placeholder,isMulti:s.isMulti,options:s.options,label:s.label},s.name):e.jsx($.MyInput,{control:v,placeholder:s.placeholder,name:s.name,label:s.label},s.name))}),e.jsxs("div",{className:"flex shrink-0 justify-end gap-2",children:[e.jsx(i.Button,{variant:"destructive",type:"reset",size:"sm",onClick:K,children:k||p("Reset")}),e.jsx(i.Button,{type:"submit",size:"sm",children:I||p("Apply")})]})]})})})]})}),L=({placeholder:j,onSearchChange:n,className:c,inputProps:r,...o})=>{const{t:y}=E.useTranslation(),[l,u]=a.useState("");return e.jsxs("div",{...o,className:O.cn("relative w-full",c),children:[e.jsx(S.Input,{...r,placeholder:j||y("Type text and press Enter"),onInput:t=>u(g.lodashExports.get(t,"target.value","")),onKeyUp:t=>{t.key===N.Keyboard.ENTER&&(n(l||void 0),t.stopPropagation(),t.preventDefault())},onKeyDown:t=>{t.key===N.Keyboard.ENTER&&(t.stopPropagation(),t.preventDefault())}}),e.jsx(i.Button,{type:"button",variant:"ghost",className:"text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!",onClick:()=>n(l),children:e.jsx(C.pv,{})})]})};exports.FilterWrapper=W;exports.Search=L;
2
- //# sourceMappingURL=Search-BDXQ3bSp.cjs.js.map
1
+ "use strict";const e=require("react/jsx-runtime"),i=require("dgz-ui/button"),S=require("dgz-ui/form"),h=require("dgz-ui/popover"),g=require("./lodash-BjH0kD7j.cjs.js"),x=require("lucide-react"),a=require("react"),E=require("react-i18next"),D=require("./useFilter-CsOF1_hM.cjs.js"),$=require("./MyInput-DOJNbPnV.cjs.js"),A=require("./MySelect-C7tnOKUF.cjs.js"),C=require("./index-ClQFzqcq.cjs.js"),O=require("dgz-ui/utils"),N=require("./Keyboard-kyPAAQWP.cjs.js"),W=a.memo(function({filters:n,params:c,onFilter:r,onChange:o,onCancel:y,triggerProps:l,contentProps:u,title:t,resetText:k,applyText:I,...B}){const{t:p}=E.useTranslation(),[M,P]=a.useState(!1),[R,d]=a.useState(!1),{form:b}=D.useFilter({params:c}),{watch:T,handleSubmit:z,control:v,reset:q}=b;a.useEffect(()=>{let s=!1;n.map(w=>{const m=g.lodashExports.get(c,`${w.name}`);(Array.isArray(m)?m.length>0:m)&&(s=!0),P(s)})},[n,c]);const f=T();a.useEffect(()=>{o==null||o(f)},[f,o]);const F=a.useCallback((s={})=>{r==null||r(s),d(!1)},[r]),K=a.useCallback(()=>{q(),r&&r({...Object.fromEntries(n.map(s=>[s.name,void 0]))}),d(!1)},[r,q,n]);return e.jsxs(h.Popover,{open:R,onOpenChange:d,children:[e.jsx(h.PopoverTrigger,{...l,children:e.jsx(i.Button,{asChild:!0,size:"sm",variant:"secondary",className:"ml-auto px-3",...B,children:e.jsxs("div",{className:"flex items-center",children:[M?e.jsx(x.ListFilterPlusIcon,{className:"size-5"}):e.jsx(x.ListFilterIcon,{className:"size-5"})," ",e.jsx("span",{className:"hidden lg:inline!",children:t||p("Filter")}),e.jsx(x.ChevronDown,{})]})})}),e.jsx(h.PopoverContent,{side:"bottom",align:"end",...u,children:e.jsx(S.Form,{...b,children:e.jsxs("form",{onSubmit:z(F),className:"space-y-4",children:[e.jsx("div",{className:"h-full shrink space-y-6 p-1",children:n.map(s=>s.options?e.jsx(A.MySelect,{control:v,name:s.name,isSearchable:!!s.isSearchable,placeholder:s.placeholder,isMulti:s.isMulti,options:s.options,label:s.label},s.name):e.jsx($.MyInput,{control:v,placeholder:s.placeholder,name:s.name,label:s.label},s.name))}),e.jsxs("div",{className:"flex shrink-0 justify-end gap-2",children:[e.jsx(i.Button,{variant:"destructive",type:"reset",size:"sm",onClick:K,children:k||p("Reset")}),e.jsx(i.Button,{type:"submit",size:"sm",children:I||p("Apply")})]})]})})})]})}),L=({placeholder:j,onSearchChange:n,className:c,inputProps:r,...o})=>{const{t:y}=E.useTranslation(),[l,u]=a.useState("");return e.jsxs("div",{...o,className:O.cn("relative w-full",c),children:[e.jsx(S.Input,{...r,placeholder:j||y("Type text and press Enter"),onInput:t=>u(g.lodashExports.get(t,"target.value","")),onKeyUp:t=>{t.key===N.Keyboard.ENTER&&(n(l||void 0),t.stopPropagation(),t.preventDefault())},onKeyDown:t=>{t.key===N.Keyboard.ENTER&&(t.stopPropagation(),t.preventDefault())}}),e.jsx(i.Button,{type:"button",variant:"ghost",className:"text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!",onClick:()=>n(l),children:e.jsx(C.pv,{})})]})};exports.FilterWrapper=W;exports.Search=L;
2
+ //# sourceMappingURL=Search-6BG3dnM9.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Search-BDXQ3bSp.cjs.js","sources":["../../src/components/filters/FilterWrapper.tsx","../../src/components/filters/Search.tsx"],"sourcesContent":["import { Button, type ButtonProps } from 'dgz-ui/button';\nimport { Form, type Option } from 'dgz-ui/form';\nimport {\n Popover,\n type PopoverContainerProps,\n PopoverContent,\n PopoverTrigger,\n} from 'dgz-ui/popover';\nimport { get } from 'lodash';\nimport { ChevronDown, ListFilterIcon, ListFilterPlusIcon } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useState } from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useFilter } from '../../hooks';\nimport { MyInput, MySelect } from '../form';\n\n/**\n * Interface representing a filter configuration.\n */\nexport interface FilterInterface {\n /** Label for the filter field. */\n label?: ReactNode;\n /** Placeholder text for the input/select. */\n placeholder?: string;\n /** Default value for the filter. */\n value?: string | string[];\n /** Name of the filter field (used as key). */\n name: string;\n /** Whether the filter supports multiple values (for select inputs). */\n isMulti?: boolean;\n /** Whether the filter supports searchable inputs (for select inputs). */\n isSearchable?: boolean;\n /** Options for select inputs. */\n options?: Option[];\n}\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface FilterWrapperProps\n extends Omit<ButtonProps, 'title'>, PopoverContainerProps {\n /** Array of filter definitions to render. */\n filters: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n /** Callback fired when the filter popover is closed/cancelled. */\n onCancel?: () => void;\n /** Callback fired when filter form values change. */\n onChange?: (filters: FieldValues) => void;\n /** Title for the filter button. */\n title?: ReactNode;\n /** Text for the reset button. */\n resetText?: ReactNode;\n /** Text for the apply button. */\n applyText?: ReactNode;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const FilterWrapper = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n onChange,\n onCancel,\n triggerProps,\n contentProps,\n title,\n resetText,\n applyText,\n ...btnProps\n}: FilterWrapperProps) {\n const { t } = useTranslation();\n const [isFiltered, setIsFiltered] = useState(false);\n const [open, setOpen] = useState(false);\n const { form } = useFilter({ params });\n\n const { watch, handleSubmit, control, reset } = form;\n\n useEffect(() => {\n let hasFilter = false;\n filters.map((filter) => {\n const value = get(params, `${filter.name}`);\n if (Array.isArray(value) ? value.length > 0 : Boolean(value)) {\n hasFilter = true;\n }\n\n setIsFiltered(hasFilter);\n });\n }, [filters, params]);\n\n const values = watch();\n\n useEffect(() => {\n onChange?.(values);\n }, [values, onChange]);\n\n const handleFilter = useCallback(\n (data = {}) => {\n onFilter?.(data);\n setOpen(false);\n },\n [onFilter]\n );\n\n const handleReset = useCallback(() => {\n reset();\n if (onFilter) {\n onFilter({\n ...Object.fromEntries(\n filters.map((filter) => [filter.name, undefined])\n ),\n });\n }\n setOpen(false);\n }, [onFilter, reset, filters]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger {...triggerProps}>\n <Button\n asChild\n size={'sm'}\n variant=\"secondary\"\n className={'ml-auto px-3'}\n {...btnProps}\n >\n <div className={'flex items-center'}>\n {isFiltered ? (\n <ListFilterPlusIcon className={'size-5'} />\n ) : (\n <ListFilterIcon className={'size-5'} />\n )}{' '}\n <span className={'hidden lg:inline!'}>{title || t('Filter')}</span>\n <ChevronDown />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent side={'bottom'} align={'end'} {...contentProps}>\n <Form {...form}>\n <form onSubmit={handleSubmit(handleFilter)} className={'space-y-4'}>\n <div className={'h-full shrink space-y-6 p-1'}>\n {filters.map((filter) =>\n filter.options ? (\n <MySelect\n key={filter.name}\n control={control}\n name={filter.name}\n isSearchable={Boolean(filter.isSearchable)}\n placeholder={filter.placeholder}\n isMulti={filter.isMulti}\n options={filter.options}\n label={filter.label}\n />\n ) : (\n <MyInput\n key={filter.name}\n control={control}\n placeholder={filter.placeholder}\n name={filter.name}\n label={filter.label}\n />\n )\n )}\n </div>\n <div className={'flex shrink-0 justify-end gap-2'}>\n <Button\n variant={'destructive'}\n type=\"reset\"\n size={'sm'}\n onClick={handleReset}\n >\n {resetText || t('Reset')}\n </Button>\n <Button type=\"submit\" size={'sm'}>\n {applyText || t('Apply')}\n </Button>\n </div>\n </form>\n </Form>\n </PopoverContent>\n </Popover>\n );\n});\n","import { RiSearchLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Keyboard } from '../../enums';\n\n/**\n * Props for the Search component.\n */\nexport type SearchProps = Omit<CardProps, 'title'> & {\n /** Custom placeholder text for the input. */\n placeholder?: string;\n /** Callback fired when the search is triggered. */\n onSearchChange: (search?: string) => void;\n inputProps?: InputProps;\n};\n\n/**\n * Search input with a submit button that triggers a search action.\n *\n * This component renders a search input field and a search button. The search\n * is triggered when the user presses Enter or clicks the button. The search\n * value is then passed to the `onSearchChange` callback.\n *\n * @param {SearchProps} props - The props for the component.\n * @param {string} [props.placeholder] - Optional placeholder text for the input field.\n * @param {Function} props.onSearchChange - Callback function that is called when a search is performed.\n * @param {string} [props.className] - Optional class name for the component.\n * @param {InputProps} [props.inputProps] - Optional props to pass to the underlying Input component.\n */\nexport const Search = ({\n placeholder,\n onSearchChange,\n className,\n inputProps,\n ...props\n}: SearchProps) => {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n\n return (\n <div {...props} className={cn('relative w-full', className)}>\n <Input\n {...inputProps}\n placeholder={placeholder || t('Type text and press Enter')}\n onInput={(evt) => setSearch(get(evt, 'target.value', ''))}\n onKeyUp={(evt) => {\n if (evt.key === Keyboard.ENTER) {\n onSearchChange(search || undefined);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }}\n onKeyDown={(event) => {\n if (event.key === Keyboard.ENTER) {\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n />\n <Button\n type={'button'}\n variant={'ghost'}\n className={\n 'text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!'\n }\n onClick={() => onSearchChange(search)}\n >\n <RiSearchLine />\n </Button>\n </div>\n );\n};\n"],"names":["FilterWrapper","memo","filters","params","onFilter","onChange","onCancel","triggerProps","contentProps","title","resetText","applyText","btnProps","t","useTranslation","isFiltered","setIsFiltered","useState","open","setOpen","form","useFilter","watch","handleSubmit","control","reset","useEffect","hasFilter","filter","value","get","values","handleFilter","useCallback","data","handleReset","jsxs","Popover","jsx","PopoverTrigger","Button","ListFilterPlusIcon","ListFilterIcon","ChevronDown","PopoverContent","Form","MySelect","MyInput","Search","placeholder","onSearchChange","className","inputProps","props","search","setSearch","cn","Input","evt","Keyboard","event","RiSearchLine"],"mappings":"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"}
1
+ {"version":3,"file":"Search-6BG3dnM9.cjs.js","sources":["../../src/components/filters/FilterWrapper.tsx","../../src/components/filters/Search.tsx"],"sourcesContent":["import { Button, type ButtonProps } from 'dgz-ui/button';\nimport { Form, type Option } from 'dgz-ui/form';\nimport {\n Popover,\n type PopoverContainerProps,\n PopoverContent,\n PopoverTrigger,\n} from 'dgz-ui/popover';\nimport { get } from 'lodash';\nimport { ChevronDown, ListFilterIcon, ListFilterPlusIcon } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useState } from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useFilter } from '../../hooks';\nimport { MyInput, MySelect } from '../form';\n\n/**\n * Interface representing a filter configuration.\n */\nexport interface FilterInterface {\n /** Label for the filter field. */\n label?: ReactNode;\n /** Placeholder text for the input/select. */\n placeholder?: string;\n /** Default value for the filter. */\n value?: string | string[];\n /** Name of the filter field (used as key). */\n name: string;\n /** Whether the filter supports multiple values (for select inputs). */\n isMulti?: boolean;\n /** Whether the filter supports searchable inputs (for select inputs). */\n isSearchable?: boolean;\n /** Options for select inputs. */\n options?: Option[];\n}\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface FilterWrapperProps\n extends Omit<ButtonProps, 'title'>, PopoverContainerProps {\n /** Array of filter definitions to render. */\n filters: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n /** Callback fired when the filter popover is closed/cancelled. */\n onCancel?: () => void;\n /** Callback fired when filter form values change. */\n onChange?: (filters: FieldValues) => void;\n /** Title for the filter button. */\n title?: ReactNode;\n /** Text for the reset button. */\n resetText?: ReactNode;\n /** Text for the apply button. */\n applyText?: ReactNode;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const FilterWrapper = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n onChange,\n onCancel,\n triggerProps,\n contentProps,\n title,\n resetText,\n applyText,\n ...btnProps\n}: FilterWrapperProps) {\n const { t } = useTranslation();\n const [isFiltered, setIsFiltered] = useState(false);\n const [open, setOpen] = useState(false);\n const { form } = useFilter({ params });\n\n const { watch, handleSubmit, control, reset } = form;\n\n useEffect(() => {\n let hasFilter = false;\n filters.map((filter) => {\n const value = get(params, `${filter.name}`);\n if (Array.isArray(value) ? value.length > 0 : Boolean(value)) {\n hasFilter = true;\n }\n\n setIsFiltered(hasFilter);\n });\n }, [filters, params]);\n\n const values = watch();\n\n useEffect(() => {\n onChange?.(values);\n }, [values, onChange]);\n\n const handleFilter = useCallback(\n (data = {}) => {\n onFilter?.(data);\n setOpen(false);\n },\n [onFilter]\n );\n\n const handleReset = useCallback(() => {\n reset();\n if (onFilter) {\n onFilter({\n ...Object.fromEntries(\n filters.map((filter) => [filter.name, undefined])\n ),\n });\n }\n setOpen(false);\n }, [onFilter, reset, filters]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger {...triggerProps}>\n <Button\n asChild\n size={'sm'}\n variant=\"secondary\"\n className={'ml-auto px-3'}\n {...btnProps}\n >\n <div className={'flex items-center'}>\n {isFiltered ? (\n <ListFilterPlusIcon className={'size-5'} />\n ) : (\n <ListFilterIcon className={'size-5'} />\n )}{' '}\n <span className={'hidden lg:inline!'}>{title || t('Filter')}</span>\n <ChevronDown />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent side={'bottom'} align={'end'} {...contentProps}>\n <Form {...form}>\n <form onSubmit={handleSubmit(handleFilter)} className={'space-y-4'}>\n <div className={'h-full shrink space-y-6 p-1'}>\n {filters.map((filter) =>\n filter.options ? (\n <MySelect\n key={filter.name}\n control={control}\n name={filter.name}\n isSearchable={Boolean(filter.isSearchable)}\n placeholder={filter.placeholder}\n isMulti={filter.isMulti}\n options={filter.options}\n label={filter.label}\n />\n ) : (\n <MyInput\n key={filter.name}\n control={control}\n placeholder={filter.placeholder}\n name={filter.name}\n label={filter.label}\n />\n )\n )}\n </div>\n <div className={'flex shrink-0 justify-end gap-2'}>\n <Button\n variant={'destructive'}\n type=\"reset\"\n size={'sm'}\n onClick={handleReset}\n >\n {resetText || t('Reset')}\n </Button>\n <Button type=\"submit\" size={'sm'}>\n {applyText || t('Apply')}\n </Button>\n </div>\n </form>\n </Form>\n </PopoverContent>\n </Popover>\n );\n});\n","import { RiSearchLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Keyboard } from '../../enums';\n\n/**\n * Props for the Search component.\n */\nexport type SearchProps = Omit<CardProps, 'title'> & {\n /** Custom placeholder text for the input. */\n placeholder?: string;\n /** Callback fired when the search is triggered. */\n onSearchChange: (search?: string) => void;\n inputProps?: InputProps;\n};\n\n/**\n * Search input with a submit button that triggers a search action.\n *\n * This component renders a search input field and a search button. The search\n * is triggered when the user presses Enter or clicks the button. The search\n * value is then passed to the `onSearchChange` callback.\n *\n * @param {SearchProps} props - The props for the component.\n * @param {string} [props.placeholder] - Optional placeholder text for the input field.\n * @param {Function} props.onSearchChange - Callback function that is called when a search is performed.\n * @param {string} [props.className] - Optional class name for the component.\n * @param {InputProps} [props.inputProps] - Optional props to pass to the underlying Input component.\n */\nexport const Search = ({\n placeholder,\n onSearchChange,\n className,\n inputProps,\n ...props\n}: SearchProps) => {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n\n return (\n <div {...props} className={cn('relative w-full', className)}>\n <Input\n {...inputProps}\n placeholder={placeholder || t('Type text and press Enter')}\n onInput={(evt) => setSearch(get(evt, 'target.value', ''))}\n onKeyUp={(evt) => {\n if (evt.key === Keyboard.ENTER) {\n onSearchChange(search || undefined);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }}\n onKeyDown={(event) => {\n if (event.key === Keyboard.ENTER) {\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n />\n <Button\n type={'button'}\n variant={'ghost'}\n className={\n 'text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!'\n }\n onClick={() => onSearchChange(search)}\n >\n <RiSearchLine />\n </Button>\n </div>\n );\n};\n"],"names":["FilterWrapper","memo","filters","params","onFilter","onChange","onCancel","triggerProps","contentProps","title","resetText","applyText","btnProps","t","useTranslation","isFiltered","setIsFiltered","useState","open","setOpen","form","useFilter","watch","handleSubmit","control","reset","useEffect","hasFilter","filter","value","get","values","handleFilter","useCallback","data","handleReset","jsxs","Popover","jsx","PopoverTrigger","Button","ListFilterPlusIcon","ListFilterIcon","ChevronDown","PopoverContent","Form","MySelect","MyInput","Search","placeholder","onSearchChange","className","inputProps","props","search","setSearch","cn","Input","evt","Keyboard","event","RiSearchLine"],"mappings":"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"}
@@ -7,8 +7,8 @@ import { ListFilterPlusIcon as U, ListFilterIcon as $, ChevronDown as q } from "
7
7
  import { memo as G, useState as h, useEffect as x, useCallback as E } from "react";
8
8
  import { useTranslation as I } from "react-i18next";
9
9
  import { u as H } from "./useFilter-C_K_3fQu.es.js";
10
- import { M as J } from "./MyInput-Wb0DSWo_.es.js";
11
- import { M as Q } from "./MySelect-D8ML7nhM.es.js";
10
+ import { M as J } from "./MyInput-VyzguJnO.es.js";
11
+ import { M as Q } from "./MySelect-DzvUAkVs.es.js";
12
12
  import { p as V } from "./index-E1NtSoNr.es.js";
13
13
  import { cn as X } from "dgz-ui/utils";
14
14
  import { K as S } from "./Keyboard-CJVAJWdO.es.js";
@@ -145,4 +145,4 @@ export {
145
145
  pe as F,
146
146
  de as S
147
147
  };
148
- //# sourceMappingURL=Search-I3lwE0J6.es.js.map
148
+ //# sourceMappingURL=Search-Y51oT-uZ.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Search-I3lwE0J6.es.js","sources":["../../src/components/filters/FilterWrapper.tsx","../../src/components/filters/Search.tsx"],"sourcesContent":["import { Button, type ButtonProps } from 'dgz-ui/button';\nimport { Form, type Option } from 'dgz-ui/form';\nimport {\n Popover,\n type PopoverContainerProps,\n PopoverContent,\n PopoverTrigger,\n} from 'dgz-ui/popover';\nimport { get } from 'lodash';\nimport { ChevronDown, ListFilterIcon, ListFilterPlusIcon } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useState } from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useFilter } from '../../hooks';\nimport { MyInput, MySelect } from '../form';\n\n/**\n * Interface representing a filter configuration.\n */\nexport interface FilterInterface {\n /** Label for the filter field. */\n label?: ReactNode;\n /** Placeholder text for the input/select. */\n placeholder?: string;\n /** Default value for the filter. */\n value?: string | string[];\n /** Name of the filter field (used as key). */\n name: string;\n /** Whether the filter supports multiple values (for select inputs). */\n isMulti?: boolean;\n /** Whether the filter supports searchable inputs (for select inputs). */\n isSearchable?: boolean;\n /** Options for select inputs. */\n options?: Option[];\n}\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface FilterWrapperProps\n extends Omit<ButtonProps, 'title'>, PopoverContainerProps {\n /** Array of filter definitions to render. */\n filters: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n /** Callback fired when the filter popover is closed/cancelled. */\n onCancel?: () => void;\n /** Callback fired when filter form values change. */\n onChange?: (filters: FieldValues) => void;\n /** Title for the filter button. */\n title?: ReactNode;\n /** Text for the reset button. */\n resetText?: ReactNode;\n /** Text for the apply button. */\n applyText?: ReactNode;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const FilterWrapper = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n onChange,\n onCancel,\n triggerProps,\n contentProps,\n title,\n resetText,\n applyText,\n ...btnProps\n}: FilterWrapperProps) {\n const { t } = useTranslation();\n const [isFiltered, setIsFiltered] = useState(false);\n const [open, setOpen] = useState(false);\n const { form } = useFilter({ params });\n\n const { watch, handleSubmit, control, reset } = form;\n\n useEffect(() => {\n let hasFilter = false;\n filters.map((filter) => {\n const value = get(params, `${filter.name}`);\n if (Array.isArray(value) ? value.length > 0 : Boolean(value)) {\n hasFilter = true;\n }\n\n setIsFiltered(hasFilter);\n });\n }, [filters, params]);\n\n const values = watch();\n\n useEffect(() => {\n onChange?.(values);\n }, [values, onChange]);\n\n const handleFilter = useCallback(\n (data = {}) => {\n onFilter?.(data);\n setOpen(false);\n },\n [onFilter]\n );\n\n const handleReset = useCallback(() => {\n reset();\n if (onFilter) {\n onFilter({\n ...Object.fromEntries(\n filters.map((filter) => [filter.name, undefined])\n ),\n });\n }\n setOpen(false);\n }, [onFilter, reset, filters]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger {...triggerProps}>\n <Button\n asChild\n size={'sm'}\n variant=\"secondary\"\n className={'ml-auto px-3'}\n {...btnProps}\n >\n <div className={'flex items-center'}>\n {isFiltered ? (\n <ListFilterPlusIcon className={'size-5'} />\n ) : (\n <ListFilterIcon className={'size-5'} />\n )}{' '}\n <span className={'hidden lg:inline!'}>{title || t('Filter')}</span>\n <ChevronDown />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent side={'bottom'} align={'end'} {...contentProps}>\n <Form {...form}>\n <form onSubmit={handleSubmit(handleFilter)} className={'space-y-4'}>\n <div className={'h-full shrink space-y-6 p-1'}>\n {filters.map((filter) =>\n filter.options ? (\n <MySelect\n key={filter.name}\n control={control}\n name={filter.name}\n isSearchable={Boolean(filter.isSearchable)}\n placeholder={filter.placeholder}\n isMulti={filter.isMulti}\n options={filter.options}\n label={filter.label}\n />\n ) : (\n <MyInput\n key={filter.name}\n control={control}\n placeholder={filter.placeholder}\n name={filter.name}\n label={filter.label}\n />\n )\n )}\n </div>\n <div className={'flex shrink-0 justify-end gap-2'}>\n <Button\n variant={'destructive'}\n type=\"reset\"\n size={'sm'}\n onClick={handleReset}\n >\n {resetText || t('Reset')}\n </Button>\n <Button type=\"submit\" size={'sm'}>\n {applyText || t('Apply')}\n </Button>\n </div>\n </form>\n </Form>\n </PopoverContent>\n </Popover>\n );\n});\n","import { RiSearchLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Keyboard } from '../../enums';\n\n/**\n * Props for the Search component.\n */\nexport type SearchProps = Omit<CardProps, 'title'> & {\n /** Custom placeholder text for the input. */\n placeholder?: string;\n /** Callback fired when the search is triggered. */\n onSearchChange: (search?: string) => void;\n inputProps?: InputProps;\n};\n\n/**\n * Search input with a submit button that triggers a search action.\n *\n * This component renders a search input field and a search button. The search\n * is triggered when the user presses Enter or clicks the button. The search\n * value is then passed to the `onSearchChange` callback.\n *\n * @param {SearchProps} props - The props for the component.\n * @param {string} [props.placeholder] - Optional placeholder text for the input field.\n * @param {Function} props.onSearchChange - Callback function that is called when a search is performed.\n * @param {string} [props.className] - Optional class name for the component.\n * @param {InputProps} [props.inputProps] - Optional props to pass to the underlying Input component.\n */\nexport const Search = ({\n placeholder,\n onSearchChange,\n className,\n inputProps,\n ...props\n}: SearchProps) => {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n\n return (\n <div {...props} className={cn('relative w-full', className)}>\n <Input\n {...inputProps}\n placeholder={placeholder || t('Type text and press Enter')}\n onInput={(evt) => setSearch(get(evt, 'target.value', ''))}\n onKeyUp={(evt) => {\n if (evt.key === Keyboard.ENTER) {\n onSearchChange(search || undefined);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }}\n onKeyDown={(event) => {\n if (event.key === Keyboard.ENTER) {\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n />\n <Button\n type={'button'}\n variant={'ghost'}\n className={\n 'text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!'\n }\n onClick={() => onSearchChange(search)}\n >\n <RiSearchLine />\n </Button>\n </div>\n );\n};\n"],"names":["FilterWrapper","memo","filters","params","onFilter","onChange","onCancel","triggerProps","contentProps","title","resetText","applyText","btnProps","t","useTranslation","isFiltered","setIsFiltered","useState","open","setOpen","form","useFilter","watch","handleSubmit","control","reset","useEffect","hasFilter","filter","value","get","values","handleFilter","useCallback","data","handleReset","jsxs","Popover","jsx","PopoverTrigger","Button","ListFilterPlusIcon","ListFilterIcon","ChevronDown","PopoverContent","Form","MySelect","MyInput","Search","placeholder","onSearchChange","className","inputProps","props","search","setSearch","cn","Input","evt","Keyboard","event","RiSearchLine"],"mappings":";;;;;;;;;;;;;;AAoEO,MAAMA,KAAgBC,EAAK,SAAuB;AAAA,EACvD,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,GAAuB;AACrB,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,CAACC,GAAYC,CAAa,IAAIC,EAAS,EAAK,GAC5C,CAACC,GAAMC,CAAO,IAAIF,EAAS,EAAK,GAChC,EAAE,MAAAG,EAAA,IAASC,EAAU,EAAE,QAAAlB,GAAQ,GAE/B,EAAE,OAAAmB,GAAO,cAAAC,GAAc,SAAAC,GAAS,OAAAC,MAAUL;AAEhD,EAAAM,EAAU,MAAM;AACd,QAAIC,IAAY;AAChB,IAAAzB,EAAQ,IAAI,CAAC0B,MAAW;AACtB,YAAMC,IAAQC,EAAAA,IAAI3B,GAAQ,GAAGyB,EAAO,IAAI,EAAE;AAC1C,OAAI,MAAM,QAAQC,CAAK,IAAIA,EAAM,SAAS,IAAYA,OACpDF,IAAY,KAGdX,EAAcW,CAAS;AAAA,IACzB,CAAC;AAAA,EACH,GAAG,CAACzB,GAASC,CAAM,CAAC;AAEpB,QAAM4B,IAAST,EAAA;AAEf,EAAAI,EAAU,MAAM;AACd,IAAArB,KAAA,QAAAA,EAAW0B;AAAA,EACb,GAAG,CAACA,GAAQ1B,CAAQ,CAAC;AAErB,QAAM2B,IAAeC;AAAA,IACnB,CAACC,IAAO,CAAA,MAAO;AACb,MAAA9B,KAAA,QAAAA,EAAW8B,IACXf,EAAQ,EAAK;AAAA,IACf;AAAA,IACA,CAACf,CAAQ;AAAA,EAAA,GAGL+B,IAAcF,EAAY,MAAM;AACpC,IAAAR,EAAA,GACIrB,KACFA,EAAS;AAAA,MACP,GAAG,OAAO;AAAA,QACRF,EAAQ,IAAI,CAAC0B,MAAW,CAACA,EAAO,MAAM,MAAS,CAAC;AAAA,MAAA;AAAA,IAClD,CACD,GAEHT,EAAQ,EAAK;AAAA,EACf,GAAG,CAACf,GAAUqB,GAAOvB,CAAO,CAAC;AAE7B,SACE,gBAAAkC,EAACC,GAAA,EAAQ,MAAAnB,GAAY,cAAcC,GACjC,UAAA;AAAA,IAAA,gBAAAmB,EAACC,GAAA,EAAgB,GAAGhC,GAClB,UAAA,gBAAA+B;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAQ;AAAA,QACR,WAAW;AAAA,QACV,GAAG5B;AAAA,QAEJ,UAAA,gBAAAwB,EAAC,OAAA,EAAI,WAAW,qBACb,UAAA;AAAA,UAAArB,IACC,gBAAAuB,EAACG,KAAmB,WAAW,SAAA,CAAU,IAEzC,gBAAAH,EAACI,GAAA,EAAe,WAAW,SAAA,CAAU;AAAA,UACpC;AAAA,4BACF,QAAA,EAAK,WAAW,qBAAsB,UAAAjC,KAASI,EAAE,QAAQ,GAAE;AAAA,4BAC3D8B,GAAA,CAAA,CAAY;AAAA,QAAA,EAAA,CACf;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,sBACCC,GAAA,EAAe,MAAM,UAAU,OAAO,OAAQ,GAAGpC,GAChD,UAAA,gBAAA8B,EAACO,KAAM,GAAGzB,GACR,4BAAC,QAAA,EAAK,UAAUG,EAAaS,CAAY,GAAG,WAAW,aACrD,UAAA;AAAA,MAAA,gBAAAM,EAAC,OAAA,EAAI,WAAW,+BACb,UAAApC,EAAQ;AAAA,QAAI,CAAC0B,MACZA,EAAO,UACL,gBAAAU;AAAA,UAACQ;AAAA,UAAA;AAAA,YAEC,SAAAtB;AAAA,YACA,MAAMI,EAAO;AAAA,YACb,cAAc,EAAQA,EAAO;AAAA,YAC7B,aAAaA,EAAO;AAAA,YACpB,SAASA,EAAO;AAAA,YAChB,SAASA,EAAO;AAAA,YAChB,OAAOA,EAAO;AAAA,UAAA;AAAA,UAPTA,EAAO;AAAA,QAAA,IAUd,gBAAAU;AAAA,UAACS;AAAA,UAAA;AAAA,YAEC,SAAAvB;AAAA,YACA,aAAaI,EAAO;AAAA,YACpB,MAAMA,EAAO;AAAA,YACb,OAAOA,EAAO;AAAA,UAAA;AAAA,UAJTA,EAAO;AAAA,QAAA;AAAA,MAKd,GAGN;AAAA,MACA,gBAAAQ,EAAC,OAAA,EAAI,WAAW,mCACd,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,MAAK;AAAA,YACL,MAAM;AAAA,YACN,SAASL;AAAA,YAER,UAAAzB,KAAaG,EAAE,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAEzB,gBAAAyB,EAACE,KAAO,MAAK,UAAS,MAAM,MACzB,UAAA7B,KAAaE,EAAE,OAAO,EAAA,CACzB;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF,GACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,CAAC,GC9JYmC,KAAS,CAAC;AAAA,EACrB,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,GAAGC;AACL,MAAmB;AACjB,QAAM,EAAE,GAAAxC,EAAA,IAAMC,EAAA,GACR,CAACwC,GAAQC,CAAS,IAAItC,EAAS,EAAE;AAEvC,SACE,gBAAAmB,EAAC,SAAK,GAAGiB,GAAO,WAAWG,EAAG,mBAAmBL,CAAS,GACxD,UAAA;AAAA,IAAA,gBAAAb;AAAA,MAACmB;AAAA,MAAA;AAAA,QACE,GAAGL;AAAA,QACJ,aAAaH,KAAepC,EAAE,2BAA2B;AAAA,QACzD,SAAS,CAAC6C,MAAQH,EAAUzB,EAAAA,IAAI4B,GAAK,gBAAgB,EAAE,CAAC;AAAA,QACxD,SAAS,CAACA,MAAQ;AAChB,UAAIA,EAAI,QAAQC,EAAS,UACvBT,EAAeI,KAAU,MAAS,GAClCI,EAAI,gBAAA,GACJA,EAAI,eAAA;AAAA,QAER;AAAA,QACA,WAAW,CAACE,MAAU;AACpB,UAAIA,EAAM,QAAQD,EAAS,UACzBC,EAAM,gBAAA,GACNA,EAAM,eAAA;AAAA,QAEV;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAtB;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WACE;AAAA,QAEF,SAAS,MAAMU,EAAeI,CAAM;AAAA,QAEpC,4BAACO,GAAA,CAAA,CAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EAChB,GACF;AAEJ;"}
1
+ {"version":3,"file":"Search-Y51oT-uZ.es.js","sources":["../../src/components/filters/FilterWrapper.tsx","../../src/components/filters/Search.tsx"],"sourcesContent":["import { Button, type ButtonProps } from 'dgz-ui/button';\nimport { Form, type Option } from 'dgz-ui/form';\nimport {\n Popover,\n type PopoverContainerProps,\n PopoverContent,\n PopoverTrigger,\n} from 'dgz-ui/popover';\nimport { get } from 'lodash';\nimport { ChevronDown, ListFilterIcon, ListFilterPlusIcon } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useState } from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useFilter } from '../../hooks';\nimport { MyInput, MySelect } from '../form';\n\n/**\n * Interface representing a filter configuration.\n */\nexport interface FilterInterface {\n /** Label for the filter field. */\n label?: ReactNode;\n /** Placeholder text for the input/select. */\n placeholder?: string;\n /** Default value for the filter. */\n value?: string | string[];\n /** Name of the filter field (used as key). */\n name: string;\n /** Whether the filter supports multiple values (for select inputs). */\n isMulti?: boolean;\n /** Whether the filter supports searchable inputs (for select inputs). */\n isSearchable?: boolean;\n /** Options for select inputs. */\n options?: Option[];\n}\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface FilterWrapperProps\n extends Omit<ButtonProps, 'title'>, PopoverContainerProps {\n /** Array of filter definitions to render. */\n filters: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n /** Callback fired when the filter popover is closed/cancelled. */\n onCancel?: () => void;\n /** Callback fired when filter form values change. */\n onChange?: (filters: FieldValues) => void;\n /** Title for the filter button. */\n title?: ReactNode;\n /** Text for the reset button. */\n resetText?: ReactNode;\n /** Text for the apply button. */\n applyText?: ReactNode;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const FilterWrapper = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n onChange,\n onCancel,\n triggerProps,\n contentProps,\n title,\n resetText,\n applyText,\n ...btnProps\n}: FilterWrapperProps) {\n const { t } = useTranslation();\n const [isFiltered, setIsFiltered] = useState(false);\n const [open, setOpen] = useState(false);\n const { form } = useFilter({ params });\n\n const { watch, handleSubmit, control, reset } = form;\n\n useEffect(() => {\n let hasFilter = false;\n filters.map((filter) => {\n const value = get(params, `${filter.name}`);\n if (Array.isArray(value) ? value.length > 0 : Boolean(value)) {\n hasFilter = true;\n }\n\n setIsFiltered(hasFilter);\n });\n }, [filters, params]);\n\n const values = watch();\n\n useEffect(() => {\n onChange?.(values);\n }, [values, onChange]);\n\n const handleFilter = useCallback(\n (data = {}) => {\n onFilter?.(data);\n setOpen(false);\n },\n [onFilter]\n );\n\n const handleReset = useCallback(() => {\n reset();\n if (onFilter) {\n onFilter({\n ...Object.fromEntries(\n filters.map((filter) => [filter.name, undefined])\n ),\n });\n }\n setOpen(false);\n }, [onFilter, reset, filters]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger {...triggerProps}>\n <Button\n asChild\n size={'sm'}\n variant=\"secondary\"\n className={'ml-auto px-3'}\n {...btnProps}\n >\n <div className={'flex items-center'}>\n {isFiltered ? (\n <ListFilterPlusIcon className={'size-5'} />\n ) : (\n <ListFilterIcon className={'size-5'} />\n )}{' '}\n <span className={'hidden lg:inline!'}>{title || t('Filter')}</span>\n <ChevronDown />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent side={'bottom'} align={'end'} {...contentProps}>\n <Form {...form}>\n <form onSubmit={handleSubmit(handleFilter)} className={'space-y-4'}>\n <div className={'h-full shrink space-y-6 p-1'}>\n {filters.map((filter) =>\n filter.options ? (\n <MySelect\n key={filter.name}\n control={control}\n name={filter.name}\n isSearchable={Boolean(filter.isSearchable)}\n placeholder={filter.placeholder}\n isMulti={filter.isMulti}\n options={filter.options}\n label={filter.label}\n />\n ) : (\n <MyInput\n key={filter.name}\n control={control}\n placeholder={filter.placeholder}\n name={filter.name}\n label={filter.label}\n />\n )\n )}\n </div>\n <div className={'flex shrink-0 justify-end gap-2'}>\n <Button\n variant={'destructive'}\n type=\"reset\"\n size={'sm'}\n onClick={handleReset}\n >\n {resetText || t('Reset')}\n </Button>\n <Button type=\"submit\" size={'sm'}>\n {applyText || t('Apply')}\n </Button>\n </div>\n </form>\n </Form>\n </PopoverContent>\n </Popover>\n );\n});\n","import { RiSearchLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Keyboard } from '../../enums';\n\n/**\n * Props for the Search component.\n */\nexport type SearchProps = Omit<CardProps, 'title'> & {\n /** Custom placeholder text for the input. */\n placeholder?: string;\n /** Callback fired when the search is triggered. */\n onSearchChange: (search?: string) => void;\n inputProps?: InputProps;\n};\n\n/**\n * Search input with a submit button that triggers a search action.\n *\n * This component renders a search input field and a search button. The search\n * is triggered when the user presses Enter or clicks the button. The search\n * value is then passed to the `onSearchChange` callback.\n *\n * @param {SearchProps} props - The props for the component.\n * @param {string} [props.placeholder] - Optional placeholder text for the input field.\n * @param {Function} props.onSearchChange - Callback function that is called when a search is performed.\n * @param {string} [props.className] - Optional class name for the component.\n * @param {InputProps} [props.inputProps] - Optional props to pass to the underlying Input component.\n */\nexport const Search = ({\n placeholder,\n onSearchChange,\n className,\n inputProps,\n ...props\n}: SearchProps) => {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n\n return (\n <div {...props} className={cn('relative w-full', className)}>\n <Input\n {...inputProps}\n placeholder={placeholder || t('Type text and press Enter')}\n onInput={(evt) => setSearch(get(evt, 'target.value', ''))}\n onKeyUp={(evt) => {\n if (evt.key === Keyboard.ENTER) {\n onSearchChange(search || undefined);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }}\n onKeyDown={(event) => {\n if (event.key === Keyboard.ENTER) {\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n />\n <Button\n type={'button'}\n variant={'ghost'}\n className={\n 'text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!'\n }\n onClick={() => onSearchChange(search)}\n >\n <RiSearchLine />\n </Button>\n </div>\n );\n};\n"],"names":["FilterWrapper","memo","filters","params","onFilter","onChange","onCancel","triggerProps","contentProps","title","resetText","applyText","btnProps","t","useTranslation","isFiltered","setIsFiltered","useState","open","setOpen","form","useFilter","watch","handleSubmit","control","reset","useEffect","hasFilter","filter","value","get","values","handleFilter","useCallback","data","handleReset","jsxs","Popover","jsx","PopoverTrigger","Button","ListFilterPlusIcon","ListFilterIcon","ChevronDown","PopoverContent","Form","MySelect","MyInput","Search","placeholder","onSearchChange","className","inputProps","props","search","setSearch","cn","Input","evt","Keyboard","event","RiSearchLine"],"mappings":";;;;;;;;;;;;;;AAoEO,MAAMA,KAAgBC,EAAK,SAAuB;AAAA,EACvD,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,GAAuB;AACrB,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,CAACC,GAAYC,CAAa,IAAIC,EAAS,EAAK,GAC5C,CAACC,GAAMC,CAAO,IAAIF,EAAS,EAAK,GAChC,EAAE,MAAAG,EAAA,IAASC,EAAU,EAAE,QAAAlB,GAAQ,GAE/B,EAAE,OAAAmB,GAAO,cAAAC,GAAc,SAAAC,GAAS,OAAAC,MAAUL;AAEhD,EAAAM,EAAU,MAAM;AACd,QAAIC,IAAY;AAChB,IAAAzB,EAAQ,IAAI,CAAC0B,MAAW;AACtB,YAAMC,IAAQC,EAAAA,IAAI3B,GAAQ,GAAGyB,EAAO,IAAI,EAAE;AAC1C,OAAI,MAAM,QAAQC,CAAK,IAAIA,EAAM,SAAS,IAAYA,OACpDF,IAAY,KAGdX,EAAcW,CAAS;AAAA,IACzB,CAAC;AAAA,EACH,GAAG,CAACzB,GAASC,CAAM,CAAC;AAEpB,QAAM4B,IAAST,EAAA;AAEf,EAAAI,EAAU,MAAM;AACd,IAAArB,KAAA,QAAAA,EAAW0B;AAAA,EACb,GAAG,CAACA,GAAQ1B,CAAQ,CAAC;AAErB,QAAM2B,IAAeC;AAAA,IACnB,CAACC,IAAO,CAAA,MAAO;AACb,MAAA9B,KAAA,QAAAA,EAAW8B,IACXf,EAAQ,EAAK;AAAA,IACf;AAAA,IACA,CAACf,CAAQ;AAAA,EAAA,GAGL+B,IAAcF,EAAY,MAAM;AACpC,IAAAR,EAAA,GACIrB,KACFA,EAAS;AAAA,MACP,GAAG,OAAO;AAAA,QACRF,EAAQ,IAAI,CAAC0B,MAAW,CAACA,EAAO,MAAM,MAAS,CAAC;AAAA,MAAA;AAAA,IAClD,CACD,GAEHT,EAAQ,EAAK;AAAA,EACf,GAAG,CAACf,GAAUqB,GAAOvB,CAAO,CAAC;AAE7B,SACE,gBAAAkC,EAACC,GAAA,EAAQ,MAAAnB,GAAY,cAAcC,GACjC,UAAA;AAAA,IAAA,gBAAAmB,EAACC,GAAA,EAAgB,GAAGhC,GAClB,UAAA,gBAAA+B;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAQ;AAAA,QACR,WAAW;AAAA,QACV,GAAG5B;AAAA,QAEJ,UAAA,gBAAAwB,EAAC,OAAA,EAAI,WAAW,qBACb,UAAA;AAAA,UAAArB,IACC,gBAAAuB,EAACG,KAAmB,WAAW,SAAA,CAAU,IAEzC,gBAAAH,EAACI,GAAA,EAAe,WAAW,SAAA,CAAU;AAAA,UACpC;AAAA,4BACF,QAAA,EAAK,WAAW,qBAAsB,UAAAjC,KAASI,EAAE,QAAQ,GAAE;AAAA,4BAC3D8B,GAAA,CAAA,CAAY;AAAA,QAAA,EAAA,CACf;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,sBACCC,GAAA,EAAe,MAAM,UAAU,OAAO,OAAQ,GAAGpC,GAChD,UAAA,gBAAA8B,EAACO,KAAM,GAAGzB,GACR,4BAAC,QAAA,EAAK,UAAUG,EAAaS,CAAY,GAAG,WAAW,aACrD,UAAA;AAAA,MAAA,gBAAAM,EAAC,OAAA,EAAI,WAAW,+BACb,UAAApC,EAAQ;AAAA,QAAI,CAAC0B,MACZA,EAAO,UACL,gBAAAU;AAAA,UAACQ;AAAA,UAAA;AAAA,YAEC,SAAAtB;AAAA,YACA,MAAMI,EAAO;AAAA,YACb,cAAc,EAAQA,EAAO;AAAA,YAC7B,aAAaA,EAAO;AAAA,YACpB,SAASA,EAAO;AAAA,YAChB,SAASA,EAAO;AAAA,YAChB,OAAOA,EAAO;AAAA,UAAA;AAAA,UAPTA,EAAO;AAAA,QAAA,IAUd,gBAAAU;AAAA,UAACS;AAAA,UAAA;AAAA,YAEC,SAAAvB;AAAA,YACA,aAAaI,EAAO;AAAA,YACpB,MAAMA,EAAO;AAAA,YACb,OAAOA,EAAO;AAAA,UAAA;AAAA,UAJTA,EAAO;AAAA,QAAA;AAAA,MAKd,GAGN;AAAA,MACA,gBAAAQ,EAAC,OAAA,EAAI,WAAW,mCACd,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,MAAK;AAAA,YACL,MAAM;AAAA,YACN,SAASL;AAAA,YAER,UAAAzB,KAAaG,EAAE,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAEzB,gBAAAyB,EAACE,KAAO,MAAK,UAAS,MAAM,MACzB,UAAA7B,KAAaE,EAAE,OAAO,EAAA,CACzB;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF,GACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,CAAC,GC9JYmC,KAAS,CAAC;AAAA,EACrB,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,GAAGC;AACL,MAAmB;AACjB,QAAM,EAAE,GAAAxC,EAAA,IAAMC,EAAA,GACR,CAACwC,GAAQC,CAAS,IAAItC,EAAS,EAAE;AAEvC,SACE,gBAAAmB,EAAC,SAAK,GAAGiB,GAAO,WAAWG,EAAG,mBAAmBL,CAAS,GACxD,UAAA;AAAA,IAAA,gBAAAb;AAAA,MAACmB;AAAA,MAAA;AAAA,QACE,GAAGL;AAAA,QACJ,aAAaH,KAAepC,EAAE,2BAA2B;AAAA,QACzD,SAAS,CAAC6C,MAAQH,EAAUzB,EAAAA,IAAI4B,GAAK,gBAAgB,EAAE,CAAC;AAAA,QACxD,SAAS,CAACA,MAAQ;AAChB,UAAIA,EAAI,QAAQC,EAAS,UACvBT,EAAeI,KAAU,MAAS,GAClCI,EAAI,gBAAA,GACJA,EAAI,eAAA;AAAA,QAER;AAAA,QACA,WAAW,CAACE,MAAU;AACpB,UAAIA,EAAM,QAAQD,EAAS,UACzBC,EAAM,gBAAA,GACNA,EAAM,eAAA;AAAA,QAEV;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAtB;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WACE;AAAA,QAEF,SAAS,MAAMU,EAAeI,CAAM;AAAA,QAEpC,4BAACO,GAAA,CAAA,CAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EAChB,GACF;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../chunks/PasswordConfirm-maMQqARK.cjs.js");exports.Confirm=r.Confirm;exports.ConfirmContainer=r.Lt;exports.PasswordConfirm=r.PasswordConfirm;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../chunks/PasswordConfirm-C8_4iAeF.cjs.js");exports.Confirm=r.Confirm;exports.ConfirmContainer=r.Lt;exports.PasswordConfirm=r.PasswordConfirm;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { C as a, L as n, P as s } from "../../chunks/PasswordConfirm-15FLlQ8Y.es.js";
1
+ import { C as a, L as n, P as s } from "../../chunks/PasswordConfirm-CU25xH0G.es.js";
2
2
  export {
3
3
  a as Confirm,
4
4
  n as ConfirmContainer,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),J=require("../../chunks/index-ClQFzqcq.cjs.js"),m=require("dgz-ui/button"),M=require("dgz-ui/dropdown"),b=require("dgz-ui/utils"),p=require("../../chunks/lodash-BjH0kD7j.cjs.js"),o=require("lucide-react"),y=require("react"),P=require("react-i18next"),_=require("../../chunks/useSortable-B3LF1tg8.cjs.js"),ee=require("../../chunks/Actions-DQPuVKCk.cjs.js"),le=require("../../chunks/ExportData-C1Lrr1gH.cjs.js"),G=require("../../chunks/Search-BDXQ3bSp.cjs.js"),se=require("../../chunks/Loader-D_jX_Wgx.cjs.js"),u=require("../../chunks/MyPagination-CnF3468f.cjs.js"),I=require("dgz-ui/form"),i=require("dgz-ui/table"),Q=require("../../chunks/SortOrder-81BrXp3i.cjs.js"),te=require("../../chunks/Empty-BYOOFAab.cjs.js"),X=({rows:s=[],columns:T,onRowClick:E,rowKey:N,params:c={page:1,limit:u.DEFAULT_LIMIT},hasNumbers:k=!1,hasCheckbox:w=!1,selectedItems:A,onSelectedItemsChange:v,onSortOrderChange:F,isStickyHeader:t,className:H,...O})=>{const{sortObject:r,handleSort:R}=_.useSortable({sortField:c==null?void 0:c.sortField,sortOrder:c==null?void 0:c.sortOrder,onSortOrderChange:F}),{selectedRows:g,isRowSelected:h,isAllRowsSelected:f,handleSelectAllRows:$,handleSelectRow:D}=_.useDataTable({rows:s,defaultSelectedRows:A});return y.useEffect(()=>{JSON.stringify(A)!==JSON.stringify(g)&&g&&(v==null||v(g))},[g,A,v]),e.jsxs(i.Table,{...O,className:b.cn("relative",H),children:[e.jsx(i.TableHeader,{className:b.cn("bg-bg",t&&"sticky top-0 z-1"),children:e.jsxs(i.TableRow,{children:[w&&e.jsx(i.TableHead,{className:"w-12 p-3",children:e.jsx(I.Checkbox,{className:"mt-1",checked:f(N),onCheckedChange:l=>$(N,!!l),"aria-label":"Select all"})}),k&&e.jsx(i.TableHead,{className:"w-12 p-2",children:"#"}),T.filter(l=>!l.hidden).map(l=>e.jsx(i.TableHead,{style:l.styles,className:b.cn("p-2",l.sortable&&"cursor-pointer"),onClick:()=>l.sortable&&R(l.dataIndex),children:e.jsxs("div",{className:"flex items-center gap-2",children:[l.name," ",l.sortable&&((r==null?void 0:r.sortField)===l.key?e.jsxs(e.Fragment,{children:[(r==null?void 0:r.sortOrder)===Q.SortOrder.DESC&&e.jsx(o.ArrowDownWideNarrow,{size:15}),(r==null?void 0:r.sortOrder)===Q.SortOrder.ASC&&e.jsx(o.ArrowUpWideNarrow,{size:15})]}):e.jsx(o.ArrowUpDown,{size:15}))]})},l.key))]})}),e.jsx(i.TableBody,{className:"[&>tr:nth-child(even)]:bg-bg-secondary",children:s.length?s.map((l,q)=>e.jsxs(i.TableRow,{onClick:()=>E==null?void 0:E(l),className:b.cn(E&&"cursor-pointer"),"data-state":h(l[N])&&"selected",children:[w&&e.jsx(i.TableCell,{className:"w-12 p-3",onClick:x=>x.stopPropagation(),children:e.jsx(I.Checkbox,{className:"mt-1",checked:h(l[N]),onCheckedChange:x=>D(l[N],!!x),"aria-label":"Select row"})}),k&&e.jsx(i.TableCell,{className:"w-12 p-2",children:(c.page-1)*(c.limit||u.DEFAULT_LIMIT)+q+1}),T.filter(x=>!x.hidden).map(x=>e.jsx(i.TableCell,{className:"text-body-xs-medium max-w-xs p-2",style:x.styles,children:x.render?x.render(p.lodashExports.get(l,x.dataIndex),l):p.lodashExports.get(l,x.dataIndex,"")},`${q}-${x.key}`))]},`${l[N]}`)):e.jsx(i.TableRow,{children:e.jsx(i.TableCell,{colSpan:k?w?T.length+2:T.length+1:T.length,children:e.jsx(te.Empty,{})})})})]})},de=({dataSource:s,columns:T,onRowClick:E,rowKey:N,hasNumbers:c,hasSearch:k,exportOptions:w,hasCheckbox:A,hasPagination:v,isStickyHeader:F,onParamChange:t,dataKey:H="docs",loading:O,tableKey:r,filters:R,actions:g,handleFilterChange:h,params:f,exportLoading:$=!1,onColumnsUpdate:D,hasColumnsVisibilityDropdown:l,onSelectedItemsChange:q,actionProps:x,filterWrapperProps:Y,exportOptionsProps:Z,columnsVisibilityProps:n,paginationProps:U,searchProps:j,...K})=>{var B;const{t:a}=P.useTranslation(),[z,S]=y.useState([]),{formattedColumns:L,handleColumnsChange:C,resetColumns:V}=_.useColumns({key:r,columns:T});return y.useEffect(()=>{D==null||D(L)},[L,D]),y.useEffect(()=>{q==null||q(z)},[z,q]),e.jsxs("div",{className:"border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs",children:[(k||l&&r||!p.lodashExports.isEmpty(w)||!p.lodashExports.isEmpty(R))&&e.jsxs("div",{className:"flex shrink-0 flex-col items-center justify-between gap-3 p-4 lg:flex-row",children:[e.jsx("div",{className:"w-full shrink",children:k&&e.jsx(G.Search,{...j,inputProps:{...j==null?void 0:j.inputProps,className:b.cn("h-8",(B=j==null?void 0:j.inputProps)==null?void 0:B.className)},className:b.cn("max-w-78 [&_button]:-top-1",j==null?void 0:j.className),defaultValue:p.lodashExports.get(f,"search",""),onSearchChange:d=>t==null?void 0:t({...f,search:d,page:1})})}),e.jsxs("div",{className:"flex shrink-0 items-center justify-end gap-3",children:[w&&e.jsx(le.ExportData,{...Z,options:w,loading:$}),l&&r&&e.jsxs(M.DropdownMenu,{children:[e.jsx(M.DropdownMenuTrigger,{asChild:!0,...n==null?void 0:n.triggerProps,children:e.jsx(m.Button,{variant:"secondary",size:"sm",className:"ml-auto rounded-lg px-3",children:(n==null?void 0:n.title)||e.jsxs(e.Fragment,{children:[e.jsx(J.yn,{})," ",e.jsx("span",{className:"hidden lg:inline!",children:a("Customize columns")}),e.jsx(J.f1,{})]})})}),e.jsxs(M.DropdownMenuContent,{align:"end",...n==null?void 0:n.contentProps,children:[e.jsxs(M.DropdownMenuItem,{className:"capitalize",onClick:V,children:[e.jsx(o.RefreshCw,{})," ",(n==null?void 0:n.resetText)||a("Reset columns")]}),e.jsx(M.DropdownMenuSeparator,{}),L.map(d=>e.jsx(M.DropdownMenuCheckboxItem,{className:"capitalize",checked:!d.hidden,onCheckedChange:W=>C(d,!W),children:d.name},d.key))]})]}),g&&e.jsx(ee.Actions,{...x,actions:g}),R&&e.jsx(G.FilterWrapper,{...Y,filters:R,params:f,onChange:h,onFilter:d=>{t==null||t({...d,page:1}),h==null||h(d)}})]})]}),e.jsx("div",{className:"flex flex-col overflow-auto border-y",children:O?e.jsx(se.Loader,{}):e.jsx(X,{...K,params:{page:(s==null?void 0:s.page)||1,limit:s==null?void 0:s.limit,...f},rows:p.lodashExports.get(s,H,[]),rowKey:N,selectedItems:z,isStickyHeader:F,columns:L,hasCheckbox:A,hasNumbers:c,onRowClick:E,onSelectedItemsChange:S,onSortOrderChange:({sortField:d,sortOrder:W})=>{t==null||t({...f,sortField:d,sortOrder:W})}})}),v&&e.jsxs("div",{className:"flex shrink-0 flex-col items-center justify-between gap-3 p-4 lg:flex-row",children:[e.jsx("div",{className:"text-sm",children:e.jsx(u.MyLimitSelect,{onLimitChange:d=>t==null?void 0:t({...f,limit:d,page:1}),defaultValue:s==null?void 0:s.limit})}),e.jsx("div",{className:"text-muted-foreground text-sm",children:a("{{selectedCount}} of {{total}} row(s) selected",{selectedCount:z.length,total:(s==null?void 0:s.total)||0})}),e.jsx("div",{children:e.jsx(u.MyPagination,{...U,onPageChange:d=>t==null?void 0:t({...f,page:d}),currentPage:s==null?void 0:s.page,totalPages:s==null?void 0:s.totalPages})})]})]})};exports.DataTable=de;exports.MyTable=X;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),J=require("../../chunks/index-ClQFzqcq.cjs.js"),m=require("dgz-ui/button"),M=require("dgz-ui/dropdown"),b=require("dgz-ui/utils"),p=require("../../chunks/lodash-BjH0kD7j.cjs.js"),o=require("lucide-react"),y=require("react"),P=require("react-i18next"),_=require("../../chunks/useSortable-B3LF1tg8.cjs.js"),ee=require("../../chunks/Actions-DQPuVKCk.cjs.js"),le=require("../../chunks/ExportData-C1Lrr1gH.cjs.js"),G=require("../../chunks/Search-6BG3dnM9.cjs.js"),se=require("../../chunks/Loader-D_jX_Wgx.cjs.js"),u=require("../../chunks/MyPagination-CnF3468f.cjs.js"),I=require("dgz-ui/form"),i=require("dgz-ui/table"),Q=require("../../chunks/SortOrder-81BrXp3i.cjs.js"),te=require("../../chunks/Empty-BYOOFAab.cjs.js"),X=({rows:s=[],columns:T,onRowClick:E,rowKey:N,params:c={page:1,limit:u.DEFAULT_LIMIT},hasNumbers:k=!1,hasCheckbox:w=!1,selectedItems:A,onSelectedItemsChange:v,onSortOrderChange:F,isStickyHeader:t,className:H,...O})=>{const{sortObject:r,handleSort:R}=_.useSortable({sortField:c==null?void 0:c.sortField,sortOrder:c==null?void 0:c.sortOrder,onSortOrderChange:F}),{selectedRows:g,isRowSelected:h,isAllRowsSelected:f,handleSelectAllRows:$,handleSelectRow:D}=_.useDataTable({rows:s,defaultSelectedRows:A});return y.useEffect(()=>{JSON.stringify(A)!==JSON.stringify(g)&&g&&(v==null||v(g))},[g,A,v]),e.jsxs(i.Table,{...O,className:b.cn("relative",H),children:[e.jsx(i.TableHeader,{className:b.cn("bg-bg",t&&"sticky top-0 z-1"),children:e.jsxs(i.TableRow,{children:[w&&e.jsx(i.TableHead,{className:"w-12 p-3",children:e.jsx(I.Checkbox,{className:"mt-1",checked:f(N),onCheckedChange:l=>$(N,!!l),"aria-label":"Select all"})}),k&&e.jsx(i.TableHead,{className:"w-12 p-2",children:"#"}),T.filter(l=>!l.hidden).map(l=>e.jsx(i.TableHead,{style:l.styles,className:b.cn("p-2",l.sortable&&"cursor-pointer"),onClick:()=>l.sortable&&R(l.dataIndex),children:e.jsxs("div",{className:"flex items-center gap-2",children:[l.name," ",l.sortable&&((r==null?void 0:r.sortField)===l.key?e.jsxs(e.Fragment,{children:[(r==null?void 0:r.sortOrder)===Q.SortOrder.DESC&&e.jsx(o.ArrowDownWideNarrow,{size:15}),(r==null?void 0:r.sortOrder)===Q.SortOrder.ASC&&e.jsx(o.ArrowUpWideNarrow,{size:15})]}):e.jsx(o.ArrowUpDown,{size:15}))]})},l.key))]})}),e.jsx(i.TableBody,{className:"[&>tr:nth-child(even)]:bg-bg-secondary",children:s.length?s.map((l,q)=>e.jsxs(i.TableRow,{onClick:()=>E==null?void 0:E(l),className:b.cn(E&&"cursor-pointer"),"data-state":h(l[N])&&"selected",children:[w&&e.jsx(i.TableCell,{className:"w-12 p-3",onClick:x=>x.stopPropagation(),children:e.jsx(I.Checkbox,{className:"mt-1",checked:h(l[N]),onCheckedChange:x=>D(l[N],!!x),"aria-label":"Select row"})}),k&&e.jsx(i.TableCell,{className:"w-12 p-2",children:(c.page-1)*(c.limit||u.DEFAULT_LIMIT)+q+1}),T.filter(x=>!x.hidden).map(x=>e.jsx(i.TableCell,{className:"text-body-xs-medium max-w-xs p-2",style:x.styles,children:x.render?x.render(p.lodashExports.get(l,x.dataIndex),l):p.lodashExports.get(l,x.dataIndex,"")},`${q}-${x.key}`))]},`${l[N]}`)):e.jsx(i.TableRow,{children:e.jsx(i.TableCell,{colSpan:k?w?T.length+2:T.length+1:T.length,children:e.jsx(te.Empty,{})})})})]})},de=({dataSource:s,columns:T,onRowClick:E,rowKey:N,hasNumbers:c,hasSearch:k,exportOptions:w,hasCheckbox:A,hasPagination:v,isStickyHeader:F,onParamChange:t,dataKey:H="docs",loading:O,tableKey:r,filters:R,actions:g,handleFilterChange:h,params:f,exportLoading:$=!1,onColumnsUpdate:D,hasColumnsVisibilityDropdown:l,onSelectedItemsChange:q,actionProps:x,filterWrapperProps:Y,exportOptionsProps:Z,columnsVisibilityProps:n,paginationProps:U,searchProps:j,...K})=>{var B;const{t:a}=P.useTranslation(),[z,S]=y.useState([]),{formattedColumns:L,handleColumnsChange:C,resetColumns:V}=_.useColumns({key:r,columns:T});return y.useEffect(()=>{D==null||D(L)},[L,D]),y.useEffect(()=>{q==null||q(z)},[z,q]),e.jsxs("div",{className:"border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs",children:[(k||l&&r||!p.lodashExports.isEmpty(w)||!p.lodashExports.isEmpty(R))&&e.jsxs("div",{className:"flex shrink-0 flex-col items-center justify-between gap-3 p-4 lg:flex-row",children:[e.jsx("div",{className:"w-full shrink",children:k&&e.jsx(G.Search,{...j,inputProps:{...j==null?void 0:j.inputProps,className:b.cn("h-8",(B=j==null?void 0:j.inputProps)==null?void 0:B.className)},className:b.cn("max-w-78 [&_button]:-top-1",j==null?void 0:j.className),defaultValue:p.lodashExports.get(f,"search",""),onSearchChange:d=>t==null?void 0:t({...f,search:d,page:1})})}),e.jsxs("div",{className:"flex shrink-0 items-center justify-end gap-3",children:[w&&e.jsx(le.ExportData,{...Z,options:w,loading:$}),l&&r&&e.jsxs(M.DropdownMenu,{children:[e.jsx(M.DropdownMenuTrigger,{asChild:!0,...n==null?void 0:n.triggerProps,children:e.jsx(m.Button,{variant:"secondary",size:"sm",className:"ml-auto rounded-lg px-3",children:(n==null?void 0:n.title)||e.jsxs(e.Fragment,{children:[e.jsx(J.yn,{})," ",e.jsx("span",{className:"hidden lg:inline!",children:a("Customize columns")}),e.jsx(J.f1,{})]})})}),e.jsxs(M.DropdownMenuContent,{align:"end",...n==null?void 0:n.contentProps,children:[e.jsxs(M.DropdownMenuItem,{className:"capitalize",onClick:V,children:[e.jsx(o.RefreshCw,{})," ",(n==null?void 0:n.resetText)||a("Reset columns")]}),e.jsx(M.DropdownMenuSeparator,{}),L.map(d=>e.jsx(M.DropdownMenuCheckboxItem,{className:"capitalize",checked:!d.hidden,onCheckedChange:W=>C(d,!W),children:d.name},d.key))]})]}),g&&e.jsx(ee.Actions,{...x,actions:g}),R&&e.jsx(G.FilterWrapper,{...Y,filters:R,params:f,onChange:h,onFilter:d=>{t==null||t({...d,page:1}),h==null||h(d)}})]})]}),e.jsx("div",{className:"flex flex-col overflow-auto border-y",children:O?e.jsx(se.Loader,{}):e.jsx(X,{...K,params:{page:(s==null?void 0:s.page)||1,limit:s==null?void 0:s.limit,...f},rows:p.lodashExports.get(s,H,[]),rowKey:N,selectedItems:z,isStickyHeader:F,columns:L,hasCheckbox:A,hasNumbers:c,onRowClick:E,onSelectedItemsChange:S,onSortOrderChange:({sortField:d,sortOrder:W})=>{t==null||t({...f,sortField:d,sortOrder:W})}})}),v&&e.jsxs("div",{className:"flex shrink-0 flex-col items-center justify-between gap-3 p-4 lg:flex-row",children:[e.jsx("div",{className:"text-sm",children:e.jsx(u.MyLimitSelect,{onLimitChange:d=>t==null?void 0:t({...f,limit:d,page:1}),defaultValue:s==null?void 0:s.limit})}),e.jsx("div",{className:"text-muted-foreground text-sm",children:a("{{selectedCount}} of {{total}} row(s) selected",{selectedCount:z.length,total:(s==null?void 0:s.total)||0})}),e.jsx("div",{children:e.jsx(u.MyPagination,{...U,onPageChange:d=>t==null?void 0:t({...f,page:d}),currentPage:s==null?void 0:s.page,totalPages:s==null?void 0:s.totalPages})})]})]})};exports.DataTable=de;exports.MyTable=X;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -10,7 +10,7 @@ import { useTranslation as ne } from "react-i18next";
10
10
  import { u as pe, a as we, b as ce } from "../../chunks/useSortable-BXNk8Wth.es.js";
11
11
  import { A as ge } from "../../chunks/Actions-25X7c3Kg.es.js";
12
12
  import { E as ke } from "../../chunks/ExportData-Cuy6BvoM.es.js";
13
- import { S as ve, F as me } from "../../chunks/Search-I3lwE0J6.es.js";
13
+ import { S as ve, F as me } from "../../chunks/Search-Y51oT-uZ.es.js";
14
14
  import { L as Te } from "../../chunks/Loader-zvzAi0F6.es.js";
15
15
  import { D as Q, M as De, a as he } from "../../chunks/MyPagination-B0czoGZK.es.js";
16
16
  import { Checkbox as X } from "dgz-ui/form";
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../chunks/Search-BDXQ3bSp.cjs.js"),r=require("react/jsx-runtime"),p=require("../../chunks/index-ClQFzqcq.cjs.js"),d=require("dgz-ui/button"),h=require("dgz-ui/form"),q=require("dgz-ui/utils"),x=require("../../chunks/lodash-BjH0kD7j.cjs.js"),y=require("react"),b=require("react-i18next"),g=require("../../chunks/Keyboard-kyPAAQWP.cjs.js"),S=({placeholder:n,onSearchChange:t,className:a,inputProps:i,...c})=>{const{t:u}=b.useTranslation(),[o,l]=y.useState("");return r.jsxs("div",{...c,className:q.cn("relative w-full",a),children:[r.jsx(h.Input,{...i,placeholder:n||u("Type text and press CTRL + Enter"),onInput:e=>l(x.lodashExports.get(e,"target.value","")),onKeyUp:e=>{e.key===g.Keyboard.ENTER&&(e.ctrlKey&&t(o||void 0),e.stopPropagation(),e.preventDefault())}}),r.jsx(d.Button,{type:"button",variant:"ghost",className:"text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!",onClick:()=>t(o),children:r.jsx(p.pv,{})})]})};exports.FilterWrapper=s.FilterWrapper;exports.Search=s.Search;exports.SearchWithCtrl=S;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../chunks/Search-6BG3dnM9.cjs.js"),r=require("react/jsx-runtime"),p=require("../../chunks/index-ClQFzqcq.cjs.js"),d=require("dgz-ui/button"),h=require("dgz-ui/form"),q=require("dgz-ui/utils"),x=require("../../chunks/lodash-BjH0kD7j.cjs.js"),y=require("react"),b=require("react-i18next"),g=require("../../chunks/Keyboard-kyPAAQWP.cjs.js"),S=({placeholder:n,onSearchChange:t,className:a,inputProps:i,...c})=>{const{t:u}=b.useTranslation(),[o,l]=y.useState("");return r.jsxs("div",{...c,className:q.cn("relative w-full",a),children:[r.jsx(h.Input,{...i,placeholder:n||u("Type text and press CTRL + Enter"),onInput:e=>l(x.lodashExports.get(e,"target.value","")),onKeyUp:e=>{e.key===g.Keyboard.ENTER&&(e.ctrlKey&&t(o||void 0),e.stopPropagation(),e.preventDefault())}}),r.jsx(d.Button,{type:"button",variant:"ghost",className:"text-foreground absolute top-0 right-0 cursor-pointer rounded-md bg-transparent!",onClick:()=>t(o),children:r.jsx(p.pv,{})})]})};exports.FilterWrapper=s.FilterWrapper;exports.Search=s.Search;exports.SearchWithCtrl=S;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { F as R, S as W } from "../../chunks/Search-I3lwE0J6.es.js";
1
+ import { F as R, S as W } from "../../chunks/Search-Y51oT-uZ.es.js";
2
2
  import { jsxs as l, jsx as t } from "react/jsx-runtime";
3
3
  import { p as c } from "../../chunks/index-E1NtSoNr.es.js";
4
4
  import { Button as f } from "dgz-ui/button";
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("dgz-ui/form"),e=require("react/jsx-runtime"),F=require("react"),j=require("dgz-ui/calendar"),u=require("dgz-ui/popover"),d=require("dgz-ui/utils"),y=require("../../chunks/lodash-BjH0kD7j.cjs.js"),p=require("lucide-react"),b=require("../../chunks/DateRangePicker-CUv-qznZ.cjs.js"),C=require("../../chunks/MyInput-C9PNyYby.cjs.js"),v=require("../../chunks/MySelect-Ovb1pK5c.cjs.js"),I=({control:r,name:a,label:c,rules:o,...n})=>{const l=F.useId();return a&&r&&e.jsx(s.FormField,{control:r,name:a,rules:o,render:({field:t})=>e.jsx(s.FormLabel,{className:"block",htmlFor:n.id||l,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.Checkbox,{id:n.id||l,checked:t.value,onCheckedChange:t.onChange,...n})}),e.jsx("div",{className:"space-y-1 leading-none",children:c&&e.jsx("div",{children:c})})]})})})||null},P=({control:r,name:a,label:c,required:o,rules:n,format:l=j.DATE,floatingError:t,placeholder:i,disabled:m,register:x,className:N,inputProps:M,...g})=>a&&r&&e.jsx(s.FormField,{control:r,name:a,rules:n,render:({field:h,formState:k})=>e.jsxs(s.FormItem,{className:d.cn(t&&"space-y-0"),children:[c&&e.jsxs(s.FormLabel,{className:"block",children:[c," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs(u.Popover,{children:[e.jsx(u.PopoverTrigger,{asChild:!0,children:e.jsx(s.FormControl,{children:e.jsxs("div",{className:"relative",children:[e.jsx(s.Input,{...M,variant:y.lodashExports.get(k.errors,`${a}.message`)?"failure":"default",disabled:m,...h,readOnly:!0,placeholder:i||"Pick a date",value:d.dayjs(h.value).format(l),className:d.cn("m-0 text-start",N)}),e.jsx(p.Calendar1,{className:d.cn("text-secondary absolute top-2.5 right-2 size-5",m&&"pointer-events-none opacity-50")})]})})}),!m&&e.jsx(u.PopoverContent,{className:"w-auto p-0",align:"start",children:e.jsx(j.Calendar,{...g,mode:"single",selected:h.value,onSelect:h.onChange})})]}),e.jsx(s.FormMessage,{className:d.cn(t&&"absolute -bottom-5")})]})})||null,q=({control:r,name:a,label:c,required:o,rules:n,placeholder:l,floatingError:t,...i})=>a&&r&&e.jsx(s.FormField,{control:r,name:a,rules:n,render:({field:m,formState:x})=>e.jsxs(s.FormItem,{className:d.cn(t&&"space-y-0"),children:[c&&e.jsxs(s.FormLabel,{className:"block",children:[c," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(b.DateRangePicker,{...i,error:`${y.lodashExports.get(x.errors,a,"")}`,selected:m.value,onRangeSelected:m.onChange,placeholder:l})}),e.jsx(s.FormMessage,{className:d.cn(t&&"absolute -bottom-5")})]})})||null,S=({control:r,name:a,label:c,rules:o,required:n,floatingError:l,...t})=>a&&r?e.jsx(s.FormField,{control:r,name:a,rules:o,render:({field:i})=>e.jsxs(s.FormItem,{className:d.cn(l&&"space-y-0"),children:[c&&e.jsxs(s.FormLabel,{className:"block",children:[c," ",n&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(s.HtmlEditor,{...i,...t})}),e.jsx(s.FormMessage,{className:d.cn(l&&"absolute -bottom-5")})]})}):e.jsx(s.HtmlEditor,{...t}),R=({control:r,name:a,label:c,rules:o,required:n,floatingError:l,...t})=>a&&r&&e.jsx(s.FormField,{control:r,name:a,rules:o,render:({field:i})=>e.jsxs(s.FormItem,{className:d.cn(l&&"space-y-0"),children:[c&&e.jsxs(s.FormLabel,{className:"block",children:[c," ",n&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(s.MaskInput,{thousandsSeparator:" ",lazy:!1,placeholderChar:"_",unmask:!0,...i,...t,onAccept:m=>i.onChange(m)})}),e.jsx(s.FormMessage,{className:d.cn(l&&"absolute -bottom-5")})]})})||null,T=({control:r,name:a,label:c,rules:o,value:n,...l})=>{const t=F.useId();return a&&r&&e.jsx(s.FormField,{control:r,name:a,rules:o,render:({field:i})=>e.jsx(s.FormLabel,{className:"block",htmlFor:l.id||t,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.RadioGroupItem,{id:l.id||t,value:n,checked:i.value===n,onClick:()=>{i.value!==n&&i.onChange(n)},...l})}),e.jsx("div",{className:"space-y-1 leading-none",children:c&&e.jsx("div",{children:c})})]})})})||null},L=({control:r,name:a,label:c,rules:o,...n})=>{const l=F.useId();return a&&r&&e.jsx(s.FormField,{control:r,name:a,rules:o,render:({field:t})=>e.jsx(s.FormLabel,{className:"block",htmlFor:n.id||l,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.Switch,{id:n.id||l,className:"m-0",checked:t.value,onCheckedChange:t.onChange,...n})}),e.jsx("div",{className:"space-y-1 leading-none",children:c&&e.jsx("div",{children:c})})]})})})||null},w=({control:r,name:a,label:c,required:o,rules:n,className:l,floatingError:t,...i})=>a&&r&&e.jsx(s.FormField,{control:r,name:a,rules:n,render:({field:m,formState:x})=>e.jsxs(s.FormItem,{className:d.cn(t&&"space-y-0"),children:[c&&e.jsxs(s.FormLabel,{className:"block",children:[c," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(s.Textarea,{variant:y.lodashExports.get(x.errors,`${a}.message`)?"failure":"default",...i,...m,className:d.cn(l)})}),e.jsx(s.FormMessage,{className:d.cn(t&&"absolute -bottom-5")})]})})||null,D=({control:r,name:a,label:c,required:o,className:n,rules:l,floatingError:t,...i})=>a&&r?e.jsx(s.FormField,{control:r,name:a,rules:l,render:({field:m})=>e.jsxs(s.FormItem,{className:d.cn(t&&"space-y-0"),children:[c&&e.jsxs(s.FormLabel,{className:"block",children:[c," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(j.TimePicker,{...m,...i})}),e.jsx(s.FormMessage,{className:d.cn(t&&"absolute -bottom-5")})]})}):e.jsx(j.TimePicker,{className:"mt-2",...i});exports.MyInput=C.MyInput;exports.MySelect=v.MySelect;exports.MyCheckbox=I;exports.MyDatePicker=P;exports.MyDateRangePicker=q;exports.MyHtmlEditor=S;exports.MyMaskInput=R;exports.MyRadio=T;exports.MySwitch=L;exports.MyTextarea=w;exports.MyTimePicker=D;Object.keys(s).forEach(r=>{r!=="default"&&!Object.prototype.hasOwnProperty.call(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:()=>s[r]})});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("dgz-ui/form"),e=require("react/jsx-runtime"),g=require("react"),j=require("dgz-ui/calendar"),F=require("dgz-ui/popover"),m=require("dgz-ui/utils"),u=require("../../chunks/lodash-BjH0kD7j.cjs.js"),b=require("lucide-react"),C=require("../../chunks/DateRangePicker-CUv-qznZ.cjs.js"),p=require("../../chunks/MyInput-DOJNbPnV.cjs.js"),v=require("../../chunks/MySelect-C7tnOKUF.cjs.js"),I=({control:r,name:t,label:a,rules:n,...c})=>{const o=g.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:n,render:({field:l})=>e.jsx(s.FormLabel,{className:"block",htmlFor:c.id||o,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.Checkbox,{id:c.id||o,checked:l.value,onCheckedChange:l.onChange,...c})}),e.jsx("div",{className:"space-y-1 leading-none",children:a&&e.jsx("div",{children:a})})]})})})||null},P=({control:r,name:t,label:a,required:n,rules:c,format:o=j.DATE,floatingError:l,placeholder:i,disabled:d,register:x,className:y,inputProps:N,...M})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:h,formState:k})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",n&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs(F.Popover,{children:[e.jsx(F.PopoverTrigger,{asChild:!0,children:e.jsx(s.FormControl,{children:e.jsxs("div",{className:"relative",children:[e.jsx(s.Input,{...N,variant:u.lodashExports.get(k.errors,`${t}.message`)?"failure":"default",disabled:d,...h,readOnly:!0,placeholder:i||"Pick a date",value:m.dayjs(h.value).format(o),className:m.cn("m-0 text-start",y)}),e.jsx(b.Calendar1,{className:m.cn("text-secondary absolute top-2.5 right-2 size-5",d&&"pointer-events-none opacity-50")})]})})}),!d&&e.jsx(F.PopoverContent,{className:"w-auto p-0",align:"start",children:e.jsx(j.Calendar,{...M,mode:"single",selected:h.value,onSelect:h.onChange})})]}),e.jsx(s.FormMessage,{className:m.cn(l&&"absolute -bottom-5")})]})})||null,f=({control:r,name:t,label:a,required:n,rules:c,placeholder:o,floatingError:l,...i})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:d,formState:x})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",n&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(C.DateRangePicker,{...i,error:`${u.lodashExports.get(x.errors,t,"")}`,selected:d.value,onRangeSelected:d.onChange,placeholder:o})}),e.jsx(s.FormMessage,{className:m.cn(l&&"absolute -bottom-5")})]})})||null,q=({control:r,name:t,label:a,rules:n,required:c,floatingError:o,...l})=>t&&r?e.jsx(s.FormField,{control:r,name:t,rules:n,render:({field:i})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",c&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(s.HtmlEditor,{...i,...l})}),e.jsx(s.FormMessage,{className:m.cn(o&&"absolute -bottom-5")})]})}):e.jsx(s.HtmlEditor,{...l}),S=({control:r,name:t,label:a,rules:n,required:c,floatingError:o,...l})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:n,render:({field:i,formState:d})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",c&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(s.MaskInput,{thousandsSeparator:" ",lazy:!1,placeholderChar:"_",unmask:!0,...i,...l,variant:u.lodashExports.get(d.errors,`${t}.message`)?"failure":"default",onAccept:x=>i.onChange(x)})}),e.jsx(s.FormMessage,{className:m.cn(o&&"absolute -bottom-5")})]})})||null,E=({control:r,name:t,label:a,rules:n,value:c,...o})=>{const l=g.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:n,render:({field:i})=>e.jsx(s.FormLabel,{className:"block",htmlFor:o.id||l,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.RadioGroupItem,{id:o.id||l,value:c,checked:i.value===c,onClick:()=>{i.value!==c&&i.onChange(c)},...o})}),e.jsx("div",{className:"space-y-1 leading-none",children:a&&e.jsx("div",{children:a})})]})})})||null},R=({control:r,name:t,label:a,rules:n,...c})=>{const o=g.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:n,render:({field:l})=>e.jsx(s.FormLabel,{className:"block",htmlFor:c.id||o,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.Switch,{id:c.id||o,className:"m-0",checked:l.value,onCheckedChange:l.onChange,...c})}),e.jsx("div",{className:"space-y-1 leading-none",children:a&&e.jsx("div",{children:a})})]})})})||null},T=({control:r,name:t,label:a,required:n,rules:c,className:o,floatingError:l,...i})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:d,formState:x})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",n&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(s.Textarea,{variant:u.lodashExports.get(x.errors,`${t}.message`)?"failure":"default",...i,...d,className:m.cn(o)})}),e.jsx(s.FormMessage,{className:m.cn(l&&"absolute -bottom-5")})]})})||null,L=({control:r,name:t,label:a,required:n,className:c,rules:o,floatingError:l,...i})=>t&&r?e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:d})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",n&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsx(s.FormControl,{children:e.jsx(j.TimePicker,{...d,...i})}),e.jsx(s.FormMessage,{className:m.cn(l&&"absolute -bottom-5")})]})}):e.jsx(j.TimePicker,{className:"mt-2",...i});exports.MyInput=p.MyInput;exports.MySelect=v.MySelect;exports.MyCheckbox=I;exports.MyDatePicker=P;exports.MyDateRangePicker=f;exports.MyHtmlEditor=q;exports.MyMaskInput=S;exports.MyRadio=E;exports.MySwitch=R;exports.MyTextarea=T;exports.MyTimePicker=L;Object.keys(s).forEach(r=>{r!=="default"&&!Object.prototype.hasOwnProperty.call(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:()=>s[r]})});
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../src/components/form/MyCheckbox.tsx","../../../src/components/form/MyDatePicker.tsx","../../../src/components/form/MyDateRangePicker.tsx","../../../src/components/form/MyHtmlEditor.tsx","../../../src/components/form/MyMaskInput.tsx","../../../src/components/form/MyRadio.tsx","../../../src/components/form/MySwitch.tsx","../../../src/components/form/MyTextarea.tsx","../../../src/components/form/MyTimePicker.tsx"],"sourcesContent":["import {\n Checkbox,\n type CheckboxProps,\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n} from 'dgz-ui/form';\nimport { useId } from 'react';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyCheckbox component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyCheckboxProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> & CheckboxProps;\n\n/**\n * MyCheckbox is a checkbox component with optional react-hook-form integration.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the checkbox.\n * @param rules - The `react-hook-form` validation rules.\n * @param props - Checkbox and form item props.\n * @returns A checkbox component wrapped with form handling logic.\n */\nexport const MyCheckbox = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n ...props\n}: MyCheckboxProps<TFieldValues>) => {\n const id = useId();\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormLabel className={'block'} htmlFor={props.id || id}>\n <FormItem className=\"flex flex-row items-start gap-3\">\n <FormControl>\n <Checkbox\n id={props.id || id}\n checked={field.value}\n onCheckedChange={field.onChange}\n {...props}\n />\n </FormControl>\n <div className=\"space-y-1 leading-none\">\n {label && <div>{label}</div>}\n </div>\n </FormItem>\n </FormLabel>\n )}\n />\n )) ||\n null\n );\n};\n","import { Calendar, type CalendarProps, DATE } from 'dgz-ui/calendar';\nimport {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n Input,\n type InputProps,\n} from 'dgz-ui/form';\nimport { Popover, PopoverContent, PopoverTrigger } from 'dgz-ui/popover';\nimport { cn, dayjs } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport { Calendar1 } from 'lucide-react';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyDatePicker component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyDatePickerProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n Omit<CalendarProps, 'mode' | 'disabled'> & {\n /** Date format string for display. */\n format?: string;\n inputProps?: Omit<InputProps, 'onSelect'>;\n placeholder?: string;\n disabled?: boolean;\n };\n\n/**\n * MyDatePicker shows a calendar popover to pick a single date, integrated with react-hook-form.\n * Can also be used standalone when no control/name are provided.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the date picker.\n * @param required - Whether the field is required.\n * @param rules - The `react-hook-form` validation rules.\n * @param format - The date format for display.\n * @param placeholder - The placeholder text when no date selected.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param register - The `react-hook-form` register function.\n * @param disabled - Whether the date picker is disabled.\n * @param inputProps - Props passed to the underlying Input component.\n * @param props - Calendar, button and form item props.\n * @returns A date picker component integrated with react-hook-form.\n */\nexport const MyDatePicker = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n required,\n rules,\n format = DATE,\n floatingError,\n placeholder,\n disabled,\n register,\n className,\n inputProps,\n ...props\n}: MyDatePickerProps<TFieldValues>) => {\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field, formState }) => (\n <FormItem className={cn(floatingError && 'space-y-0')}>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <Popover>\n <PopoverTrigger asChild>\n <FormControl>\n <div className={'relative'}>\n <Input\n {...inputProps}\n variant={\n get(formState.errors, `${name}.message`)\n ? 'failure'\n : 'default'\n }\n disabled={disabled}\n {...field}\n readOnly\n placeholder={placeholder || 'Pick a date'}\n value={dayjs(field.value).format(format)}\n className={cn('m-0 text-start', className)}\n />\n <Calendar1\n className={cn(\n 'text-secondary absolute top-2.5 right-2 size-5',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n </div>\n </FormControl>\n </PopoverTrigger>\n {!disabled && (\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n {...props}\n mode=\"single\"\n selected={field.value}\n onSelect={field.onChange}\n />\n </PopoverContent>\n )}\n </Popover>\n <FormMessage\n className={cn(floatingError && 'absolute -bottom-5')}\n />\n </FormItem>\n )}\n />\n )) ||\n null\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\nimport { DateRangePicker, type DateRangePickerProps } from '../datepicker';\n\n/**\n * Props for the MyDateRangePicker component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyDateRangePickerProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n Omit<DateRangePickerProps, 'required'> & {\n required?: boolean;\n };\n\n/**\n * MyDateRangePicker renders a date range selector integrated with react-hook-form.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the date range picker.\n * @param required - Whether the field is required.\n * @param rules - The `react-hook-form` validation rules.\n * @param format - The date format for display.\n * @param placeholder - The placeholder text when no date is selected.\n * @param props - DateRangePicker props and form item props.\n * @returns A date range picker integrated with react-hook-form.\n */\nexport const MyDateRangePicker = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n required,\n rules,\n placeholder,\n floatingError,\n ...props\n}: MyDateRangePickerProps<TFieldValues>) => {\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field, formState }) => (\n <FormItem className={cn(floatingError && 'space-y-0')}>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <DateRangePicker\n {...props}\n error={`${get(formState.errors, name, '')}`}\n selected={field.value}\n onRangeSelected={field.onChange}\n placeholder={placeholder}\n />\n </FormControl>\n <FormMessage\n className={cn(floatingError && 'absolute -bottom-5')}\n />\n </FormItem>\n )}\n />\n )) ||\n null\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n HtmlEditor,\n type HtmlEditorProps,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyHtmlEditor component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyHtmlEditorProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n HtmlEditorProps & {\n /** Whether the field is required. */\n required?: boolean;\n };\n\n/**\n * MyHtmlEditor is a rich-text HTML editor with optional react-hook-form integration.\n * Works in both controlled (with control/name) and uncontrolled modes.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the HTML editor.\n * @param rules - The `react-hook-form` validation rules.\n * @param required - Whether the field is required.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param props - HtmlEditor and form item props.\n * @returns React element rendering an HtmlEditor with label, helper text, and validation message.\n */\nexport const MyHtmlEditor = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n required,\n floatingError,\n ...props\n}: MyHtmlEditorProps<TFieldValues>) => {\n return name && control ? (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormItem className={cn(floatingError && 'space-y-0')}>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <HtmlEditor {...field} {...props} />\n </FormControl>\n <FormMessage className={cn(floatingError && 'absolute -bottom-5')} />\n </FormItem>\n )}\n />\n ) : (\n <HtmlEditor {...props} />\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n MaskInput,\n type MaskInputProps,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyMaskInput component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyMaskInputProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n MaskInputProps & {\n /** Whether the field is required. */\n required?: boolean;\n };\n\n/**\n * MyMaskInput is an input component with masking support and optional react-hook-form integration.\n * Works in both controlled (with control/name) and uncontrolled modes. By default it uses a space as\n * thousands separator, underscores as placeholder characters, lazy formatting disabled, and returns\n * unmasked value on change.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the mask input.\n * @param rules - The `react-hook-form` validation rules.\n * @param required - Whether the field is required.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param props - MaskInput and form item props.\n * @returns React element rendering a masked input with label, helper text, and validation message.\n */\nexport const MyMaskInput = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n required,\n floatingError,\n ...props\n}: MyMaskInputProps<TFieldValues>) => {\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormItem className={cn(floatingError && 'space-y-0')}>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <MaskInput\n thousandsSeparator={' '}\n lazy={false}\n placeholderChar=\"_\"\n unmask\n {...field}\n {...props}\n onAccept={(value) => field.onChange(value)}\n />\n </FormControl>\n <FormMessage\n className={cn(floatingError && 'absolute -bottom-5')}\n />\n </FormItem>\n )}\n />\n )) ||\n null\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n RadioGroupItem,\n} from 'dgz-ui/form';\nimport React, { useId } from 'react';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\ntype RadioItemProps = React.ComponentPropsWithoutRef<typeof RadioGroupItem>;\n\n/**\n * Props for the MyRadio component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyRadioProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> & RadioItemProps;\n\n/**\n * MyRadio is a radio input that can integrate with react-hook-form when control and name are provided.\n * Falls back to an uncontrolled radio item when not used inside a form.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the radio input.\n * @param rules - The `react-hook-form` validation rules.\n * @param value - The value of the radio input.\n * @param props - Radio item and form item props.\n * @returns A radio button item.\n */\nconst MyRadio = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n value,\n ...props\n}: MyRadioProps<TFieldValues>) => {\n const id = useId();\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormLabel className={'block'} htmlFor={props.id || id}>\n <FormItem className=\"flex flex-row items-start gap-3\">\n <FormControl>\n <RadioGroupItem\n id={props.id || id}\n value={value}\n checked={field.value === value}\n onClick={() => {\n if (field.value !== value) {\n field.onChange(value);\n }\n }}\n {...props}\n />\n </FormControl>\n <div className=\"space-y-1 leading-none\">\n {label && <div>{label}</div>}\n </div>\n </FormItem>\n </FormLabel>\n )}\n />\n )) ||\n null\n );\n};\n\nexport { MyRadio };\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n Switch,\n type SwitchProps,\n} from 'dgz-ui/form';\nimport { useId } from 'react';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MySwitch component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MySwitchProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> & SwitchProps;\n\n/**\n * MySwitch is a toggle switch with optional react-hook-form integration.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the switch.\n * @param rules - The `react-hook-form` validation rules.\n * @param props - Switch and form item props.\n * @returns A toggle switch component, or null if name or control are missing.\n */\nexport const MySwitch = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n ...props\n}: MySwitchProps<TFieldValues>) => {\n const id = useId();\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormLabel className={'block'} htmlFor={props.id || id}>\n <FormItem className=\"flex flex-row items-start gap-3\">\n <FormControl>\n <Switch\n id={props.id || id}\n className={'m-0'}\n checked={field.value}\n onCheckedChange={field.onChange}\n {...props}\n />\n </FormControl>\n <div className=\"space-y-1 leading-none\">\n {label && <div>{label}</div>}\n </div>\n </FormItem>\n </FormLabel>\n )}\n />\n )) ||\n null\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n Textarea,\n type TextareaProps,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyTextarea component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyTextareaProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> & TextareaProps;\n\n/**\n * MyTextarea is a textarea component with optional react-hook-form integration.\n * Supports floating error message styling.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the textarea.\n * @param required - Whether the field is required.\n * @param rules - The `react-hook-form` validation rules.\n * @param className - Custom CSS class name.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param props - Textarea and form item props.\n * @returns A textarea component integrated with react-hook-form.\n */\nexport const MyTextarea = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n required,\n rules,\n className,\n floatingError,\n ...props\n}: MyTextareaProps<TFieldValues>) => {\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field, formState }) => (\n <FormItem className={cn(floatingError && 'space-y-0')}>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <Textarea\n variant={\n get(formState.errors, `${name}.message`)\n ? 'failure'\n : 'default'\n }\n {...props}\n {...field}\n className={cn(className)}\n />\n </FormControl>\n <FormMessage\n className={cn(floatingError && 'absolute -bottom-5')}\n />\n </FormItem>\n )}\n />\n )) ||\n null\n );\n};\n","import { TimePicker, type TimePickerProps } from 'dgz-ui/calendar';\nimport {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyTimePicker component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyTimePickerProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n TimePickerProps & {\n /** Whether the field is required. */\n required?: boolean;\n /** Custom CSS class name. */\n className?: string;\n };\n\n/**\n * MyTimePicker is a time selection input with optional react-hook-form integration.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the time picker.\n * @param required - Whether the field is required.\n * @param className - Custom CSS class name.\n * @param rules - The `react-hook-form` validation rules.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param props - TimePicker and form item props.\n * @returns A time picker component integrated with react-hook-form.\n */\nexport const MyTimePicker = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n required,\n className,\n rules,\n floatingError,\n ...props\n}: MyTimePickerProps<TFieldValues>) => {\n return name && control ? (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormItem className={cn(floatingError && 'space-y-0')}>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <TimePicker {...field} {...props} />\n </FormControl>\n <FormMessage className={cn(floatingError && 'absolute -bottom-5')} />\n </FormItem>\n )}\n />\n ) : (\n <TimePicker className={'mt-2'} {...props} />\n );\n};\n"],"names":["MyCheckbox","control","name","label","rules","props","id","useId","jsx","FormField","field","FormLabel","jsxs","FormItem","FormControl","Checkbox","MyDatePicker","required","format","DATE","floatingError","placeholder","disabled","register","className","inputProps","formState","cn","Popover","PopoverTrigger","Input","get","dayjs","Calendar1","PopoverContent","Calendar","FormMessage","MyDateRangePicker","DateRangePicker","MyHtmlEditor","HtmlEditor","MyMaskInput","MaskInput","value","MyRadio","RadioGroupItem","MySwitch","Switch","MyTextarea","Textarea","MyTimePicker","TimePicker"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../src/components/form/MyCheckbox.tsx","../../../src/components/form/MyDatePicker.tsx","../../../src/components/form/MyDateRangePicker.tsx","../../../src/components/form/MyHtmlEditor.tsx","../../../src/components/form/MyMaskInput.tsx","../../../src/components/form/MyRadio.tsx","../../../src/components/form/MySwitch.tsx","../../../src/components/form/MyTextarea.tsx","../../../src/components/form/MyTimePicker.tsx"],"sourcesContent":["import {\n Checkbox,\n type CheckboxProps,\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n} from 'dgz-ui/form';\nimport { useId } from 'react';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyCheckbox component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyCheckboxProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> & CheckboxProps;\n\n/**\n * MyCheckbox is a checkbox component with optional react-hook-form integration.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the checkbox.\n * @param rules - The `react-hook-form` validation rules.\n * @param props - Checkbox and form item props.\n * @returns A checkbox component wrapped with form handling logic.\n */\nexport const MyCheckbox = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n ...props\n}: MyCheckboxProps<TFieldValues>) => {\n const id = useId();\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormLabel className={'block'} htmlFor={props.id || id}>\n <FormItem className=\"flex flex-row items-start gap-3\">\n <FormControl>\n <Checkbox\n id={props.id || id}\n checked={field.value}\n onCheckedChange={field.onChange}\n {...props}\n />\n </FormControl>\n <div className=\"space-y-1 leading-none\">\n {label && <div>{label}</div>}\n </div>\n </FormItem>\n </FormLabel>\n )}\n />\n )) ||\n null\n );\n};\n","import { Calendar, type CalendarProps, DATE } from 'dgz-ui/calendar';\nimport {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n Input,\n type InputProps,\n} from 'dgz-ui/form';\nimport { Popover, PopoverContent, PopoverTrigger } from 'dgz-ui/popover';\nimport { cn, dayjs } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport { Calendar1 } from 'lucide-react';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyDatePicker component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyDatePickerProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n Omit<CalendarProps, 'mode' | 'disabled'> & {\n /** Date format string for display. */\n format?: string;\n inputProps?: Omit<InputProps, 'onSelect'>;\n placeholder?: string;\n disabled?: boolean;\n };\n\n/**\n * MyDatePicker shows a calendar popover to pick a single date, integrated with react-hook-form.\n * Can also be used standalone when no control/name are provided.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the date picker.\n * @param required - Whether the field is required.\n * @param rules - The `react-hook-form` validation rules.\n * @param format - The date format for display.\n * @param placeholder - The placeholder text when no date selected.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param register - The `react-hook-form` register function.\n * @param disabled - Whether the date picker is disabled.\n * @param className - Additional CSS classes.\n * @param inputProps - Props passed to the underlying Input component.\n * @param props - Calendar, button and form item props.\n * @returns A date picker component integrated with react-hook-form.\n */\nexport const MyDatePicker = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n required,\n rules,\n format = DATE,\n floatingError,\n placeholder,\n disabled,\n register,\n className,\n inputProps,\n ...props\n}: MyDatePickerProps<TFieldValues>) => {\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field, formState }) => (\n <FormItem>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <Popover>\n <PopoverTrigger asChild>\n <FormControl>\n <div className={'relative'}>\n <Input\n {...inputProps}\n variant={\n get(formState.errors, `${name}.message`)\n ? 'failure'\n : 'default'\n }\n disabled={disabled}\n {...field}\n readOnly\n placeholder={placeholder || 'Pick a date'}\n value={dayjs(field.value).format(format)}\n className={cn('m-0 text-start', className)}\n />\n <Calendar1\n className={cn(\n 'text-secondary absolute top-2.5 right-2 size-5',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n </div>\n </FormControl>\n </PopoverTrigger>\n {!disabled && (\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n {...props}\n mode=\"single\"\n selected={field.value}\n onSelect={field.onChange}\n />\n </PopoverContent>\n )}\n </Popover>\n <FormMessage\n className={cn(floatingError && 'absolute -bottom-5')}\n />\n </FormItem>\n )}\n />\n )) ||\n null\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\nimport { DateRangePicker, type DateRangePickerProps } from '../datepicker';\n\n/**\n * Props for the MyDateRangePicker component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyDateRangePickerProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n Omit<DateRangePickerProps, 'required'> & {\n required?: boolean;\n };\n\n/**\n * MyDateRangePicker renders a date range selector integrated with react-hook-form.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the date range picker.\n * @param required - Whether the field is required.\n * @param rules - The `react-hook-form` validation rules.\n * @param format - The date format for display.\n * @param placeholder - The placeholder text when no date is selected.\n * @param props - DateRangePicker props and form item props.\n * @returns A date range picker integrated with react-hook-form.\n */\nexport const MyDateRangePicker = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n required,\n rules,\n placeholder,\n floatingError,\n ...props\n}: MyDateRangePickerProps<TFieldValues>) => {\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field, formState }) => (\n <FormItem>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <DateRangePicker\n {...props}\n error={`${get(formState.errors, name, '')}`}\n selected={field.value}\n onRangeSelected={field.onChange}\n placeholder={placeholder}\n />\n </FormControl>\n <FormMessage\n className={cn(floatingError && 'absolute -bottom-5')}\n />\n </FormItem>\n )}\n />\n )) ||\n null\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n HtmlEditor,\n type HtmlEditorProps,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyHtmlEditor component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyHtmlEditorProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n HtmlEditorProps & {\n /** Whether the field is required. */\n required?: boolean;\n };\n\n/**\n * MyHtmlEditor is a rich-text HTML editor with optional react-hook-form integration.\n * Works in both controlled (with control/name) and uncontrolled modes.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the HTML editor.\n * @param rules - The `react-hook-form` validation rules.\n * @param required - Whether the field is required.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param props - HtmlEditor and form item props.\n * @returns React element rendering an HtmlEditor with label, helper text, and validation message.\n */\nexport const MyHtmlEditor = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n required,\n floatingError,\n ...props\n}: MyHtmlEditorProps<TFieldValues>) => {\n return name && control ? (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormItem>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <HtmlEditor {...field} {...props} />\n </FormControl>\n <FormMessage className={cn(floatingError && 'absolute -bottom-5')} />\n </FormItem>\n )}\n />\n ) : (\n <HtmlEditor {...props} />\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n MaskInput,\n type MaskInputProps,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyMaskInput component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyMaskInputProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n MaskInputProps & {\n /** Whether the field is required. */\n required?: boolean;\n };\n\n/**\n * MyMaskInput is an input component with masking support and optional react-hook-form integration.\n * Works in both controlled (with control/name) and uncontrolled modes. By default it uses a space as\n * thousands separator, underscores as placeholder characters, lazy formatting disabled, and returns\n * unmasked value on change.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the mask input.\n * @param rules - The `react-hook-form` validation rules.\n * @param required - Whether the field is required.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param props - MaskInput and form item props.\n * @returns React element rendering a masked input with label, helper text, and validation message.\n */\nexport const MyMaskInput = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n required,\n floatingError,\n ...props\n}: MyMaskInputProps<TFieldValues>) => {\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field, formState }) => (\n <FormItem>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <MaskInput\n thousandsSeparator={' '}\n lazy={false}\n placeholderChar=\"_\"\n unmask\n {...field}\n {...props}\n variant={\n get(formState.errors, `${name}.message`)\n ? 'failure'\n : 'default'\n }\n onAccept={(value) => field.onChange(value)}\n />\n </FormControl>\n <FormMessage\n className={cn(floatingError && 'absolute -bottom-5')}\n />\n </FormItem>\n )}\n />\n )) ||\n null\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n RadioGroupItem,\n} from 'dgz-ui/form';\nimport React, { useId } from 'react';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\ntype RadioItemProps = React.ComponentPropsWithoutRef<typeof RadioGroupItem>;\n\n/**\n * Props for the MyRadio component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyRadioProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> & RadioItemProps;\n\n/**\n * MyRadio is a radio input that can integrate with react-hook-form when control and name are provided.\n * Falls back to an uncontrolled radio item when not used inside a form.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the radio input.\n * @param rules - The `react-hook-form` validation rules.\n * @param value - The value of the radio input.\n * @param props - Radio item and form item props.\n * @returns A radio button item.\n */\nconst MyRadio = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n value,\n ...props\n}: MyRadioProps<TFieldValues>) => {\n const id = useId();\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormLabel className={'block'} htmlFor={props.id || id}>\n <FormItem className=\"flex flex-row items-start gap-3\">\n <FormControl>\n <RadioGroupItem\n id={props.id || id}\n value={value}\n checked={field.value === value}\n onClick={() => {\n if (field.value !== value) {\n field.onChange(value);\n }\n }}\n {...props}\n />\n </FormControl>\n <div className=\"space-y-1 leading-none\">\n {label && <div>{label}</div>}\n </div>\n </FormItem>\n </FormLabel>\n )}\n />\n )) ||\n null\n );\n};\n\nexport { MyRadio };\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n Switch,\n type SwitchProps,\n} from 'dgz-ui/form';\nimport { useId } from 'react';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MySwitch component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MySwitchProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> & SwitchProps;\n\n/**\n * MySwitch is a toggle switch with optional react-hook-form integration.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the switch.\n * @param rules - The `react-hook-form` validation rules.\n * @param props - Switch and form item props.\n * @returns A toggle switch component, or null if name or control are missing.\n */\nexport const MySwitch = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n rules,\n ...props\n}: MySwitchProps<TFieldValues>) => {\n const id = useId();\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormLabel className={'block'} htmlFor={props.id || id}>\n <FormItem className=\"flex flex-row items-start gap-3\">\n <FormControl>\n <Switch\n id={props.id || id}\n className={'m-0'}\n checked={field.value}\n onCheckedChange={field.onChange}\n {...props}\n />\n </FormControl>\n <div className=\"space-y-1 leading-none\">\n {label && <div>{label}</div>}\n </div>\n </FormItem>\n </FormLabel>\n )}\n />\n )) ||\n null\n );\n};\n","import {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n Textarea,\n type TextareaProps,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyTextarea component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyTextareaProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> & TextareaProps;\n\n/**\n * MyTextarea is a textarea component with optional react-hook-form integration.\n * Supports floating error message styling.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the textarea.\n * @param required - Whether the field is required.\n * @param rules - The `react-hook-form` validation rules.\n * @param className - Custom CSS class name.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param props - Textarea and form item props.\n * @returns A textarea component integrated with react-hook-form.\n */\nexport const MyTextarea = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n required,\n rules,\n className,\n floatingError,\n ...props\n}: MyTextareaProps<TFieldValues>) => {\n return (\n (name && control && (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field, formState }) => (\n <FormItem>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <Textarea\n variant={\n get(formState.errors, `${name}.message`)\n ? 'failure'\n : 'default'\n }\n {...props}\n {...field}\n className={cn(className)}\n />\n </FormControl>\n <FormMessage\n className={cn(floatingError && 'absolute -bottom-5')}\n />\n </FormItem>\n )}\n />\n )) ||\n null\n );\n};\n","import { TimePicker, type TimePickerProps } from 'dgz-ui/calendar';\nimport {\n FormControl,\n FormField,\n FormItem,\n type FormItemProps,\n FormLabel,\n FormMessage,\n} from 'dgz-ui/form';\nimport { cn } from 'dgz-ui/utils';\nimport type { FieldPath, FieldValues } from 'react-hook-form';\n\n/**\n * Props for the MyTimePicker component.\n * @template TFieldValues - The type of the form values.\n */\nexport type MyTimePickerProps<TFieldValues extends FieldValues> =\n FormItemProps<TFieldValues> &\n TimePickerProps & {\n /** Whether the field is required. */\n required?: boolean;\n /** Custom CSS class name. */\n className?: string;\n };\n\n/**\n * MyTimePicker is a time selection input with optional react-hook-form integration.\n *\n * @template TFieldValues - Form values type used by react-hook-form.\n * @param control - The `react-hook-form` control object.\n * @param name - The name of the field in `react-hook-form`.\n * @param label - The label to display for the time picker.\n * @param required - Whether the field is required.\n * @param className - Custom CSS class name.\n * @param rules - The `react-hook-form` validation rules.\n * @param floatingError - Whether to show the error message in a floating container.\n * @param props - TimePicker and form item props.\n * @returns A time picker component integrated with react-hook-form.\n */\nexport const MyTimePicker = <TFieldValues extends FieldValues>({\n control,\n name,\n label,\n required,\n className,\n rules,\n floatingError,\n ...props\n}: MyTimePickerProps<TFieldValues>) => {\n return name && control ? (\n <FormField<TFieldValues, FieldPath<TFieldValues>>\n control={control}\n name={name}\n rules={rules}\n render={({ field }) => (\n <FormItem>\n {label && (\n <FormLabel className={'block'}>\n {label} {required && <span className={'text-red-600'}>*</span>}\n </FormLabel>\n )}\n <FormControl>\n <TimePicker {...field} {...props} />\n </FormControl>\n <FormMessage className={cn(floatingError && 'absolute -bottom-5')} />\n </FormItem>\n )}\n />\n ) : (\n <TimePicker className={'mt-2'} {...props} />\n );\n};\n"],"names":["MyCheckbox","control","name","label","rules","props","id","useId","jsx","FormField","field","FormLabel","jsxs","FormItem","FormControl","Checkbox","MyDatePicker","required","format","DATE","floatingError","placeholder","disabled","register","className","inputProps","formState","Popover","PopoverTrigger","Input","get","dayjs","cn","Calendar1","PopoverContent","Calendar","FormMessage","MyDateRangePicker","DateRangePicker","MyHtmlEditor","HtmlEditor","MyMaskInput","MaskInput","value","MyRadio","RadioGroupItem","MySwitch","Switch","MyTextarea","Textarea","MyTimePicker","TimePicker"],"mappings":"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"}