@oneplatformdev/ui 0.1.99-beta.4 → 0.1.99-beta.40

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 (98) hide show
  1. package/Accordion/Accordion.d.ts +1 -1
  2. package/Accordion/Accordion.d.ts.map +1 -1
  3. package/Accordion/Accordion.js +48 -26
  4. package/Accordion/Accordion.js.map +1 -1
  5. package/Badge/badgeVariants.d.ts +1 -1
  6. package/Button/Button.d.ts +6 -6
  7. package/Button/Button.d.ts.map +1 -1
  8. package/Button/Button.js +44 -42
  9. package/Button/Button.js.map +1 -1
  10. package/Button/Button.stories.js +45 -53
  11. package/Button/Button.stories.js.map +1 -1
  12. package/Button/Button.types.d.ts +24 -1
  13. package/Button/Button.types.d.ts.map +1 -1
  14. package/Button/ButtonCounterBadge.d.ts +7 -0
  15. package/Button/ButtonCounterBadge.d.ts.map +1 -0
  16. package/Button/ButtonCounterBadge.js +20 -0
  17. package/Button/ButtonCounterBadge.js.map +1 -0
  18. package/Button/buttonVariants.d.ts +11 -20
  19. package/Button/buttonVariants.d.ts.map +1 -1
  20. package/Button/buttonVariants.js +76 -12
  21. package/Button/buttonVariants.js.map +1 -1
  22. package/Button/index.js +6 -5
  23. package/ButtonIcon/ButtonIcon.d.ts +30 -19
  24. package/ButtonIcon/ButtonIcon.d.ts.map +1 -1
  25. package/ButtonIcon/ButtonIcon.js +70 -46
  26. package/ButtonIcon/ButtonIcon.js.map +1 -1
  27. package/ButtonIcon/ButtonIcon.stories.js +121 -78
  28. package/ButtonIcon/ButtonIcon.stories.js.map +1 -1
  29. package/ButtonIcon/ButtonIcon.types.d.ts +2 -1
  30. package/ButtonIcon/ButtonIcon.types.d.ts.map +1 -1
  31. package/ButtonIcon/buttonIconVariants.d.ts +1 -1
  32. package/ButtonIcon/buttonIconVariants.d.ts.map +1 -1
  33. package/ButtonIcon/buttonIconVariants.js +7 -6
  34. package/ButtonIcon/buttonIconVariants.js.map +1 -1
  35. package/CHANGELOG.md +466 -0
  36. package/Combobox/Combobox.d.ts.map +1 -1
  37. package/Combobox/Combobox.js +25 -26
  38. package/Combobox/Combobox.js.map +1 -1
  39. package/Combobox/Combobox.stories.js +192 -0
  40. package/Combobox/Combobox.stories.js.map +1 -0
  41. package/Combobox/ComboboxOptions.d.ts.map +1 -1
  42. package/Combobox/ComboboxOptions.js +42 -42
  43. package/Combobox/ComboboxOptions.js.map +1 -1
  44. package/Dialog/Dialog.js +13 -13
  45. package/Dialog/Dialog.js.map +1 -1
  46. package/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  47. package/DropdownMenu/DropdownMenu.js +33 -20
  48. package/DropdownMenu/DropdownMenu.js.map +1 -1
  49. package/Form/Form.d.ts.map +1 -1
  50. package/Form/Form.js.map +1 -1
  51. package/Form/FormRenderControl.d.ts.map +1 -1
  52. package/Form/FormRenderControl.js +26 -13
  53. package/Form/FormRenderControl.js.map +1 -1
  54. package/Form/FormRenderControl.types.d.ts +2 -1
  55. package/Form/FormRenderControl.types.d.ts.map +1 -1
  56. package/Form/FormTooltipButton.d.ts +6 -0
  57. package/Form/FormTooltipButton.d.ts.map +1 -0
  58. package/Form/FormTooltipButton.js +34 -0
  59. package/Form/FormTooltipButton.js.map +1 -0
  60. package/FormInput/FormInput.d.ts.map +1 -1
  61. package/FormInput/FormInput.js +22 -21
  62. package/FormInput/FormInput.js.map +1 -1
  63. package/Input/Input.js +1 -1
  64. package/Input/Input.js.map +1 -1
  65. package/Input/inputVariants.d.ts.map +1 -1
  66. package/Input/inputVariants.js +5 -4
  67. package/Input/inputVariants.js.map +1 -1
  68. package/LoadedIcon/LoadedIcon.d.ts.map +1 -1
  69. package/LoadedIcon/LoadedIcon.js +3 -1
  70. package/LoadedIcon/LoadedIcon.js.map +1 -1
  71. package/Resizable/Resizable.d.ts +5 -20
  72. package/Resizable/Resizable.d.ts.map +1 -1
  73. package/Resizable/Resizable.js +48 -31
  74. package/Resizable/Resizable.js.map +1 -1
  75. package/Resizable/Resizable.stories.js +140 -0
  76. package/Resizable/Resizable.stories.js.map +1 -0
  77. package/Search/Search.js +12 -12
  78. package/Search/Search.js.map +1 -1
  79. package/Search/Search.stories.js +17 -0
  80. package/Search/Search.stories.js.map +1 -0
  81. package/Textarea/Textarea.d.ts.map +1 -1
  82. package/Textarea/Textarea.js +50 -45
  83. package/Textarea/Textarea.js.map +1 -1
  84. package/Textarea/Textarea.stories.js +12 -0
  85. package/Textarea/Textarea.stories.js.map +1 -0
  86. package/Textarea/Textarea.types.d.ts +3 -1
  87. package/Textarea/Textarea.types.d.ts.map +1 -1
  88. package/Textarea/useAutosizeTextArea.d.ts +1 -1
  89. package/Textarea/useAutosizeTextArea.d.ts.map +1 -1
  90. package/Textarea/useAutosizeTextArea.js.map +1 -1
  91. package/Tooltip/Tooltip.d.ts.map +1 -1
  92. package/Tooltip/Tooltip.js.map +1 -1
  93. package/index.js +326 -325
  94. package/package.json +7 -4
  95. package/Button/Button.s.d.ts +0 -83
  96. package/Button/Button.s.d.ts.map +0 -1
  97. package/Button/Button.s.js +0 -163
  98. package/Button/Button.s.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"LoadedIcon.js","sources":["../../src/LoadedIcon/LoadedIcon.tsx"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority';\nimport { LoaderCircleIcon } from 'lucide-react';\nimport { FC, HTMLAttributes, PropsWithChildren } from 'react';\n\nimport { cn } from '@oneplatformdev/utils';\n\nconst loadedIconVariants = cva([], {\n variants: {\n size: {\n inherit: '[&_svg]:size-inherit',\n xs: '[&_svg]:size-3',\n sm: '[&_svg]:size-4',\n md: '[&_svg]:size-5',\n lg: '[&_svg]:size-6',\n },\n },\n defaultVariants: { size: 'inherit' },\n});\n\ninterface ILoadedIconProps\n\textends HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof loadedIconVariants> {\n\tloading?: boolean;\n}\n\nexport const LoadedIcon: FC<PropsWithChildren<ILoadedIconProps>> = (props) => {\n\tconst { loading, children, size = 'md', className, ...rest } = props;\n\treturn (\n\t\t<div\n\t\t\t{...rest}\n\t\t\tclassName={cn(loadedIconVariants({size , className}))}\n\t\t>\n\t\t\t{loading\n\t\t\t\t? <LoaderCircleIcon className=\"animate-spin\"/>\n\t\t\t\t: children}\n\t\t</div>\n\t);\n};\n"],"names":["loadedIconVariants","cva","LoadedIcon","props","loading","children","size","className","rest","jsx","cn","LoaderCircleIcon"],"mappings":";;;;AAMA,MAAMA,IAAqBC,EAAI,IAAI;AAAA,EACjC,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB,EAAE,MAAM,UAAA;AAC3B,CAAC,GAQYC,IAAsD,CAACC,MAAU;AAC7E,QAAM,EAAE,SAAAC,GAAS,UAAAC,GAAU,MAAAC,IAAO,MAAM,WAAAC,GAAW,GAAGC,MAASL;AAC/D,SACC,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAGD;AAAA,MACJ,WAAWE,EAAGV,EAAmB,EAAC,MAAAM,GAAO,WAAAC,EAAA,CAAU,CAAC;AAAA,MAEnD,UAAAH,IACE,gBAAAK,EAACE,GAAA,EAAiB,WAAU,gBAAc,IAC1CN;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"LoadedIcon.js","sources":["../../src/LoadedIcon/LoadedIcon.tsx"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority';\nimport { LoaderCircleIcon } from 'lucide-react';\nimport { FC, HTMLAttributes, PropsWithChildren } from 'react';\n\nimport { cn } from '@oneplatformdev/utils';\n\nconst loadedIconVariants = cva([\n 'relative',\n], {\n variants: {\n size: {\n inherit: '[&_svg]:size-inherit',\n xs: '[&_svg]:size-3',\n sm: '[&_svg]:size-4',\n md: '[&_svg]:size-5',\n lg: '[&_svg]:size-6',\n },\n },\n defaultVariants: { size: 'inherit' },\n});\n\ninterface ILoadedIconProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof loadedIconVariants> {\n loading?: boolean;\n}\n\nexport const LoadedIcon: FC<PropsWithChildren<ILoadedIconProps>> = (props) => {\n const { loading, children, size = 'md', className, ...rest } = props;\n return (\n <div\n {...rest}\n className={cn(loadedIconVariants({ size, className }))}\n >\n {loading\n ? <LoaderCircleIcon className=\"animate-spin\"/>\n : children}\n </div>\n );\n};\n"],"names":["loadedIconVariants","cva","LoadedIcon","props","loading","children","size","className","rest","jsx","cn","LoaderCircleIcon"],"mappings":";;;;AAMA,MAAMA,IAAqBC,EAAI;AAAA,EAC7B;AACF,GAAG;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB,EAAE,MAAM,UAAA;AAC3B,CAAC,GAQYC,IAAsD,CAACC,MAAU;AAC5E,QAAM,EAAE,SAAAC,GAAS,UAAAC,GAAU,MAAAC,IAAO,MAAM,WAAAC,GAAW,GAAGC,MAASL;AAC/D,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGD;AAAA,MACJ,WAAWE,EAAGV,EAAmB,EAAE,MAAAM,GAAM,WAAAC,EAAA,CAAW,CAAC;AAAA,MAEpD,UAAAH,IACG,gBAAAK,EAACE,GAAA,EAAiB,WAAU,gBAAc,IAC1CN;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1,24 +1,9 @@
1
+ import * as React from "react";
1
2
  import * as ResizablePrimitive from "react-resizable-panels";
2
- declare const ResizablePanelGroup: ({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => import("react/jsx-runtime").JSX.Element;
3
- declare const ResizablePanel: import('react').ForwardRefExoticComponent<Omit<import('react').HTMLAttributes<any>, "id" | "onResize"> & {
4
- className?: string;
5
- collapsedSize?: number | undefined;
6
- collapsible?: boolean | undefined;
7
- defaultSize?: number | undefined;
8
- id?: string;
9
- maxSize?: number | undefined;
10
- minSize?: number | undefined;
11
- onCollapse?: ResizablePrimitive.PanelOnCollapse;
12
- onExpand?: ResizablePrimitive.PanelOnExpand;
13
- onResize?: ResizablePrimitive.PanelOnResize;
14
- order?: number;
15
- style?: object;
16
- tagName?: keyof HTMLElementTagNameMap | undefined;
17
- } & {
18
- children?: import('react').ReactNode | undefined;
19
- } & import('react').RefAttributes<ResizablePrimitive.ImperativePanelHandle>>;
20
- declare const ResizableHandle: ({ withHandle, className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
3
+ declare function ResizablePanelGroup({ className, ...props }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>): import("react/jsx-runtime").JSX.Element;
4
+ declare function ResizablePanel({ ...props }: React.ComponentProps<typeof ResizablePrimitive.Panel>): import("react/jsx-runtime").JSX.Element;
5
+ declare function ResizableHandle(props: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
21
6
  withHandle?: boolean;
22
- }) => import("react/jsx-runtime").JSX.Element;
7
+ }): import("react/jsx-runtime").JSX.Element;
23
8
  export { ResizablePanelGroup, ResizablePanel, ResizableHandle };
24
9
  //# sourceMappingURL=Resizable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Resizable.d.ts","sourceRoot":"","sources":["../../src/Resizable/Resizable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,CAAA;AAI5D,QAAA,MAAM,mBAAmB,GAAI,yBAG1B,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,UAAU,CAAC,4CAQ5D,CAAA;AAED,QAAA,MAAM,cAAc;;;;;;;;;;;;;oBAyB47D,qBAAsB;;;4EAzBv7D,CAAA;AAE/C,QAAA,MAAM,eAAe,GAAI,qCAItB,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,GAAG;IACrE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,4CAcA,CAAA;AAED,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"Resizable.d.ts","sourceRoot":"","sources":["../../src/Resizable/Resizable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,CAAA;AAI5D,iBAAS,mBAAmB,CAAC,EACE,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,UAAU,CAAC,2CAWzF;AAED,iBAAS,cAAc,CAAC,EACE,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,KAAK,CAAC,2CAE/E;AAED,iBAAS,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,GAAG;IAClG,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,2CAwBA;AAED,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}
@@ -1,37 +1,54 @@
1
- import { jsx as e } from "react/jsx-runtime";
2
- import { GripVertical as n } from "lucide-react";
1
+ import { jsx as a, jsxs as s } from "react/jsx-runtime";
2
+ import { GripVerticalIcon as c } from "lucide-react";
3
3
  import * as t from "react-resizable-panels";
4
4
  import { cn as i } from "@oneplatformdev/utils";
5
- const f = ({
6
- className: a,
5
+ function u({
6
+ className: e,
7
7
  ...r
8
- }) => /* @__PURE__ */ e(
9
- t.PanelGroup,
10
- {
11
- className: i(
12
- "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
13
- a
14
- ),
15
- ...r
16
- }
17
- ), d = t.Panel, p = ({
18
- withHandle: a,
19
- className: r,
20
- ...l
21
- }) => /* @__PURE__ */ e(
22
- t.PanelResizeHandle,
23
- {
24
- className: i(
25
- "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
26
- r
27
- ),
28
- ...l,
29
- children: a && /* @__PURE__ */ e("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border", children: /* @__PURE__ */ e(n, { className: "h-2.5 w-2.5" }) })
30
- }
31
- );
8
+ }) {
9
+ return /* @__PURE__ */ a(
10
+ t.PanelGroup,
11
+ {
12
+ "data-slot": "resizable-panel-group",
13
+ className: i(
14
+ "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
15
+ e
16
+ ),
17
+ ...r
18
+ }
19
+ );
20
+ }
21
+ function b({
22
+ ...e
23
+ }) {
24
+ return /* @__PURE__ */ a(t.Panel, { "data-slot": "resizable-panel", ...e });
25
+ }
26
+ function v(e) {
27
+ const {
28
+ withHandle: r,
29
+ className: l,
30
+ children: n,
31
+ ...o
32
+ } = e;
33
+ return /* @__PURE__ */ s(
34
+ t.PanelResizeHandle,
35
+ {
36
+ "data-slot": "resizable-handle",
37
+ className: i(
38
+ "bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90",
39
+ l
40
+ ),
41
+ ...o,
42
+ children: [
43
+ n,
44
+ r && /* @__PURE__ */ a("div", { className: "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border", children: /* @__PURE__ */ a(c, { className: "size-2.5" }) })
45
+ ]
46
+ }
47
+ );
48
+ }
32
49
  export {
33
- p as ResizableHandle,
34
- d as ResizablePanel,
35
- f as ResizablePanelGroup
50
+ v as ResizableHandle,
51
+ b as ResizablePanel,
52
+ u as ResizablePanelGroup
36
53
  };
37
54
  //# sourceMappingURL=Resizable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Resizable.js","sources":["../../src/Resizable/Resizable.tsx"],"sourcesContent":["\"use client\"\n\nimport { GripVertical } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"@oneplatformdev/utils\";\n\nconst ResizablePanelGroup = ({\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => (\n <ResizablePrimitive.PanelGroup\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n)\n\nconst ResizablePanel = ResizablePrimitive.Panel\n\nconst ResizableHandle = ({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) => (\n <ResizablePrimitive.PanelResizeHandle\n className={cn(\n \"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border\">\n <GripVertical className=\"h-2.5 w-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n)\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n"],"names":["ResizablePanelGroup","className","props","jsx","ResizablePrimitive","cn","ResizablePanel","ResizableHandle","withHandle","GripVertical"],"mappings":";;;;AAOA,MAAMA,IAAsB,CAAC;AAAA,EAC3B,WAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC;AAAA,EAACC,EAAmB;AAAA,EAAnB;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN,GAGII,IAAiBF,EAAmB,OAEpCG,IAAkB,CAAC;AAAA,EACvB,YAAAC;AAAA,EACA,WAAAP;AAAA,EACA,GAAGC;AACL,MAGE,gBAAAC;AAAA,EAACC,EAAmB;AAAA,EAAnB;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,IAEH,UAAAM,uBACE,OAAA,EAAI,WAAU,6EACb,UAAA,gBAAAL,EAACM,GAAA,EAAa,WAAU,cAAA,CAAc,EAAA,CACxC;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"Resizable.js","sources":["../../src/Resizable/Resizable.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"@oneplatformdev/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {\n return (\n <ResizablePrimitive.PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({\n ...props\n }: React.ComponentProps<typeof ResizablePrimitive.Panel>) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle(props: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) {\n const {\n withHandle,\n className,\n children,\n ...rest\n } = props;\n return (\n <ResizablePrimitive.PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...rest}\n >\n {children}\n {withHandle && (\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n )\n}\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n"],"names":["ResizablePanelGroup","className","props","jsx","ResizablePrimitive","cn","ResizablePanel","ResizableHandle","withHandle","children","rest","jsxs","GripVerticalIcon"],"mappings":";;;;AAQA,SAASA,EAAoB;AAAA,EACE,WAAAC;AAAA,EACA,GAAGC;AACL,GAA+D;AAC1F,SACE,gBAAAC;AAAA,IAACC,EAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASI,EAAe;AAAA,EACE,GAAGJ;AACL,GAA0D;AAChF,2BAAQE,EAAmB,OAAnB,EAAyB,aAAU,mBAAmB,GAAGF,GAAO;AAC1E;AAEA,SAASK,EAAgBL,GAEtB;AACD,QAAM;AAAA,IACJ,YAAAM;AAAA,IACA,WAAAP;AAAA,IACA,UAAAQ;AAAA,IACA,GAAGC;AAAA,EAAA,IACDR;AACJ,SACE,gBAAAS;AAAA,IAACP,EAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGS;AAAA,MAEH,UAAA;AAAA,QAAAD;AAAA,QACAD,uBACE,OAAA,EAAI,WAAU,6EACb,UAAA,gBAAAL,EAACS,GAAA,EAAiB,WAAU,WAAA,CAAW,EAAA,CACzC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -0,0 +1,140 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ import * as c from "react";
3
+ import { ResizablePanelGroup as r, ResizablePanel as l, ResizableHandle as n } from "./Resizable.js";
4
+ const b = {
5
+ title: "ui/Resizable",
6
+ component: r,
7
+ parameters: {
8
+ layout: "fullscreen"
9
+ },
10
+ decorators: [
11
+ (a) => /* @__PURE__ */ e("div", { className: "p-6", children: /* @__PURE__ */ e("div", { className: "h-[420px] w-[920px] overflow-hidden rounded-xl border bg-background shadow-sm", children: /* @__PURE__ */ e(a, {}) }) })
12
+ ]
13
+ };
14
+ function i({
15
+ label: a,
16
+ subtle: d
17
+ }) {
18
+ return /* @__PURE__ */ e(
19
+ "div",
20
+ {
21
+ className: [
22
+ "h-full w-full",
23
+ "flex items-center justify-center",
24
+ "text-sm font-medium",
25
+ "select-none",
26
+ d ? "bg-muted/30" : "bg-muted/50"
27
+ ].join(" "),
28
+ children: a
29
+ }
30
+ );
31
+ }
32
+ const z = {
33
+ render: () => /* @__PURE__ */ t(r, { direction: "horizontal", children: [
34
+ /* @__PURE__ */ e(l, { defaultSize: 50, children: /* @__PURE__ */ e(i, { label: "Left (50%)" }) }),
35
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
36
+ /* @__PURE__ */ e(l, { defaultSize: 50, children: /* @__PURE__ */ e(i, { label: "Right (50%)", subtle: !0 }) })
37
+ ] })
38
+ }, f = {
39
+ render: () => /* @__PURE__ */ t(r, { direction: "vertical", children: [
40
+ /* @__PURE__ */ e(l, { defaultSize: 60, children: /* @__PURE__ */ e(i, { label: "Top (60%)" }) }),
41
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
42
+ /* @__PURE__ */ e(l, { defaultSize: 40, children: /* @__PURE__ */ e(i, { label: "Bottom (40%)", subtle: !0 }) })
43
+ ] })
44
+ }, S = {
45
+ render: () => /* @__PURE__ */ t(r, { direction: "horizontal", children: [
46
+ /* @__PURE__ */ e(l, { defaultSize: 35, children: /* @__PURE__ */ e(i, { label: "Sidebar (35%)" }) }),
47
+ /* @__PURE__ */ e(n, {}),
48
+ /* @__PURE__ */ e(l, { defaultSize: 65, children: /* @__PURE__ */ e(i, { label: "Content (65%)", subtle: !0 }) })
49
+ ] })
50
+ }, m = {
51
+ render: () => /* @__PURE__ */ t(r, { direction: "horizontal", children: [
52
+ /* @__PURE__ */ e(l, { defaultSize: 33, children: /* @__PURE__ */ e(i, { label: "A (33%)" }) }),
53
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
54
+ /* @__PURE__ */ e(l, { defaultSize: 34, children: /* @__PURE__ */ e(i, { label: "B (34%)", subtle: !0 }) }),
55
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
56
+ /* @__PURE__ */ e(l, { defaultSize: 33, children: /* @__PURE__ */ e(i, { label: "C (33%)" }) })
57
+ ] })
58
+ }, p = {
59
+ render: () => /* @__PURE__ */ t(r, { direction: "horizontal", children: [
60
+ /* @__PURE__ */ e(l, { defaultSize: 20, minSize: 12, children: /* @__PURE__ */ e(i, { label: "Nav (20%)" }) }),
61
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
62
+ /* @__PURE__ */ e(l, { defaultSize: 55, minSize: 30, children: /* @__PURE__ */ e(i, { label: "Main (55%)", subtle: !0 }) }),
63
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
64
+ /* @__PURE__ */ e(l, { defaultSize: 25, minSize: 12, children: /* @__PURE__ */ e(i, { label: "Details (25%)" }) })
65
+ ] })
66
+ }, x = {
67
+ render: () => /* @__PURE__ */ t(r, { direction: "horizontal", children: [
68
+ /* @__PURE__ */ e(l, { defaultSize: 30, minSize: 20, maxSize: 40, children: /* @__PURE__ */ e(i, { label: "Left (min 20 / max 40)" }) }),
69
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
70
+ /* @__PURE__ */ e(l, { defaultSize: 70, minSize: 60, maxSize: 80, children: /* @__PURE__ */ e(i, { label: "Right (min 60 / max 80)", subtle: !0 }) })
71
+ ] })
72
+ }, w = {
73
+ render: () => /* @__PURE__ */ t(r, { direction: "horizontal", children: [
74
+ /* @__PURE__ */ e(
75
+ l,
76
+ {
77
+ defaultSize: 22,
78
+ minSize: 12,
79
+ collapsible: !0,
80
+ collapsedSize: 4,
81
+ children: /* @__PURE__ */ e(i, { label: "Sidebar (collapsible)" })
82
+ }
83
+ ),
84
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
85
+ /* @__PURE__ */ e(l, { defaultSize: 78, minSize: 50, children: /* @__PURE__ */ e(i, { label: "Main content", subtle: !0 }) })
86
+ ] })
87
+ }, H = {
88
+ render: () => /* @__PURE__ */ t(r, { direction: "horizontal", children: [
89
+ /* @__PURE__ */ e(l, { defaultSize: 50, children: /* @__PURE__ */ e(i, { label: "Left (fixed)" }) }),
90
+ /* @__PURE__ */ e(n, { withHandle: !0, disabled: !0 }),
91
+ /* @__PURE__ */ e(l, { defaultSize: 50, children: /* @__PURE__ */ e(i, { label: "Right (fixed)", subtle: !0 }) })
92
+ ] })
93
+ }, g = {
94
+ render: () => /* @__PURE__ */ t(r, { direction: "horizontal", children: [
95
+ /* @__PURE__ */ e(l, { defaultSize: 45, minSize: 25, children: /* @__PURE__ */ t(r, { direction: "vertical", children: [
96
+ /* @__PURE__ */ e(l, { defaultSize: 55, minSize: 20, children: /* @__PURE__ */ e(i, { label: "Left / Top" }) }),
97
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
98
+ /* @__PURE__ */ e(l, { defaultSize: 45, minSize: 20, children: /* @__PURE__ */ e(i, { label: "Left / Bottom", subtle: !0 }) })
99
+ ] }) }),
100
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
101
+ /* @__PURE__ */ e(l, { defaultSize: 55, minSize: 30, children: /* @__PURE__ */ e(i, { label: "Right (single)", subtle: !0 }) })
102
+ ] })
103
+ }, y = {
104
+ render: () => /* @__PURE__ */ e(() => {
105
+ const [d, u] = c.useState([]);
106
+ return /* @__PURE__ */ t("div", { className: "h-full w-full", children: [
107
+ /* @__PURE__ */ t("div", { className: "border-b px-3 py-2 text-xs text-muted-foreground", children: [
108
+ "Layout:",
109
+ " ",
110
+ d.length ? d.map((o) => Math.round(o)).join(" / ") : "— (move handle)"
111
+ ] }),
112
+ /* @__PURE__ */ e("div", { className: "h-[calc(100%-33px)]", children: /* @__PURE__ */ t(
113
+ r,
114
+ {
115
+ direction: "horizontal",
116
+ onLayout: (o) => u(o),
117
+ children: [
118
+ /* @__PURE__ */ e(l, { defaultSize: 40, minSize: 20, children: /* @__PURE__ */ e(i, { label: "Left" }) }),
119
+ /* @__PURE__ */ e(n, { withHandle: !0 }),
120
+ /* @__PURE__ */ e(l, { defaultSize: 60, minSize: 20, children: /* @__PURE__ */ e(i, { label: "Right", subtle: !0 }) })
121
+ ]
122
+ }
123
+ ) })
124
+ ] });
125
+ }, {})
126
+ };
127
+ export {
128
+ w as CollapsibleSidebar,
129
+ H as DisabledHandle,
130
+ S as HandleWithoutGrip,
131
+ z as HorizontalTwoPanels,
132
+ y as LayoutDebug,
133
+ x as MinMaxConstraints,
134
+ g as NestedResizable,
135
+ m as ThreePanelsEqual,
136
+ p as ThreePanelsSidebarLayout,
137
+ f as VerticalTwoPanels,
138
+ b as default
139
+ };
140
+ //# sourceMappingURL=Resizable.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Resizable.stories.js","sources":["../../src/Resizable/Resizable.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react\"\nimport * as React from \"react\"\n\nimport {\n ResizablePanelGroup,\n ResizablePanel,\n ResizableHandle,\n} from \"./Resizable\"\n\nconst meta: Meta<typeof ResizablePanelGroup> = {\n title: \"ui/Resizable\",\n component: ResizablePanelGroup,\n parameters: {\n layout: \"fullscreen\",\n },\n decorators: [\n (Story) => (\n <div className=\"p-6\">\n <div className=\"h-[420px] w-[920px] overflow-hidden rounded-xl border bg-background shadow-sm\">\n <Story />\n </div>\n </div>\n ),\n ],\n}\nexport default meta\ntype Story = StoryObj<typeof ResizablePanelGroup>\n\nfunction PanelBox({\n label,\n subtle,\n }: {\n label: string\n subtle?: boolean\n}) {\n return (\n <div\n className={[\n \"h-full w-full\",\n \"flex items-center justify-center\",\n \"text-sm font-medium\",\n \"select-none\",\n subtle ? \"bg-muted/30\" : \"bg-muted/50\",\n ].join(\" \")}\n >\n {label}\n </div>\n )\n}\n\n/** 1) Базовий горизонтальний спліт 50/50 */\nexport const HorizontalTwoPanels: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"horizontal\">\n <ResizablePanel defaultSize={50}>\n <PanelBox label=\"Left (50%)\" />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={50}>\n <PanelBox label=\"Right (50%)\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 2) Вертикальний спліт 60/40 */\nexport const VerticalTwoPanels: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"vertical\">\n <ResizablePanel defaultSize={60}>\n <PanelBox label=\"Top (60%)\" />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={40}>\n <PanelBox label=\"Bottom (40%)\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 3) Без “grip” (withHandle=false) — тонкий роздільник */\nexport const HandleWithoutGrip: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"horizontal\">\n <ResizablePanel defaultSize={35}>\n <PanelBox label=\"Sidebar (35%)\" />\n </ResizablePanel>\n <ResizableHandle />\n <ResizablePanel defaultSize={65}>\n <PanelBox label=\"Content (65%)\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 4) Три панелі рівномірно (33/34/33) */\nexport const ThreePanelsEqual: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"horizontal\">\n <ResizablePanel defaultSize={33}>\n <PanelBox label=\"A (33%)\" />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={34}>\n <PanelBox label=\"B (34%)\" subtle />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={33}>\n <PanelBox label=\"C (33%)\" />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 5) Три панелі з “sidebar layout” (20/55/25) */\nexport const ThreePanelsSidebarLayout: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"horizontal\">\n <ResizablePanel defaultSize={20} minSize={12}>\n <PanelBox label=\"Nav (20%)\" />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={55} minSize={30}>\n <PanelBox label=\"Main (55%)\" subtle />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={25} minSize={12}>\n <PanelBox label=\"Details (25%)\" />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 6) Обмеження min/max size (наочно “впирається” при ресайзі) */\nexport const MinMaxConstraints: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"horizontal\">\n <ResizablePanel defaultSize={30} minSize={20} maxSize={40}>\n <PanelBox label=\"Left (min 20 / max 40)\" />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={70} minSize={60} maxSize={80}>\n <PanelBox label=\"Right (min 60 / max 80)\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 7) Collapsible sidebar (якщо ваш Panel підтримує collapsible/collapsedSize) */\nexport const CollapsibleSidebar: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"horizontal\">\n <ResizablePanel\n defaultSize={22}\n minSize={12}\n collapsible\n collapsedSize={4}\n >\n <PanelBox label=\"Sidebar (collapsible)\" />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={78} minSize={50}>\n <PanelBox label=\"Main content\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 8) Disabled handle (якщо Separator/Handle підтримує disabled) */\nexport const DisabledHandle: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"horizontal\">\n <ResizablePanel defaultSize={50}>\n <PanelBox label=\"Left (fixed)\" />\n </ResizablePanel>\n <ResizableHandle withHandle disabled />\n <ResizablePanel defaultSize={50}>\n <PanelBox label=\"Right (fixed)\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 9) Nested split: зліва — вертикальний, справа — суцільний */\nexport const NestedResizable: Story = {\n render: () => (\n <ResizablePanelGroup direction=\"horizontal\">\n <ResizablePanel defaultSize={45} minSize={25}>\n <ResizablePanelGroup direction=\"vertical\">\n <ResizablePanel defaultSize={55} minSize={20}>\n <PanelBox label=\"Left / Top\" />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={45} minSize={20}>\n <PanelBox label=\"Left / Bottom\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={55} minSize={30}>\n <PanelBox label=\"Right (single)\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n ),\n}\n\n/** 10) Debug layout: показує поточні розміри (onLayout) */\nexport const LayoutDebug: Story = {\n render: () => {\n const LayoutStory = () => {\n const [layout, setLayout] = React.useState<number[]>([])\n\n return (\n <div className=\"h-full w-full\">\n <div className=\"border-b px-3 py-2 text-xs text-muted-foreground\">\n Layout:{\" \"}\n {layout.length\n ? layout.map((v) => Math.round(v)).join(\" / \")\n : \"— (move handle)\"}\n </div>\n\n <div className=\"h-[calc(100%-33px)]\">\n <ResizablePanelGroup\n direction=\"horizontal\"\n onLayout={(sizes) => setLayout(sizes)}\n >\n <ResizablePanel defaultSize={40} minSize={20}>\n <PanelBox label=\"Left\" />\n </ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={60} minSize={20}>\n <PanelBox label=\"Right\" subtle />\n </ResizablePanel>\n </ResizablePanelGroup>\n </div>\n </div>\n )\n }\n\n return <LayoutStory />\n },\n}\n"],"names":["meta","ResizablePanelGroup","Story","jsx","PanelBox","label","subtle","HorizontalTwoPanels","jsxs","ResizablePanel","ResizableHandle","VerticalTwoPanels","HandleWithoutGrip","ThreePanelsEqual","ThreePanelsSidebarLayout","MinMaxConstraints","CollapsibleSidebar","DisabledHandle","NestedResizable","LayoutDebug","layout","setLayout","React","v","sizes"],"mappings":"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"}
package/Search/Search.js CHANGED
@@ -5,37 +5,37 @@ import { useDebounceCallback as b } from "@oneplatformdev/hooks";
5
5
  import { cn as x } from "@oneplatformdev/utils";
6
6
  import { SearchIcon as I } from "lucide-react";
7
7
  import { LoadedIcon as N } from "../LoadedIcon/LoadedIcon.js";
8
- const E = (n) => {
8
+ const L = (n) => {
9
9
  const {
10
10
  search: e,
11
- onChange: s,
12
- onSearch: c,
11
+ onChange: c,
12
+ onSearch: s,
13
13
  placeholder: m = "Search",
14
- className: i,
15
- loading: l = !1,
14
+ className: l,
15
+ loading: h = !1,
16
16
  slotProps: o,
17
- name: h = "search",
17
+ name: i = "search",
18
18
  ...p
19
- } = n, [u, a] = g(e), f = b(c, 1e3), d = (r) => {
19
+ } = n, [u, a] = g(e), f = b(s, 1e3), d = (r) => {
20
20
  const S = r.target.value;
21
- a(S), s?.(r), f(r.target.value);
21
+ a(S), c?.(r), f(r.target.value);
22
22
  };
23
23
  return v(() => {
24
24
  a(e ?? "");
25
25
  }, [e]), /* @__PURE__ */ t(
26
26
  C,
27
27
  {
28
- name: h,
28
+ name: i,
29
29
  placeholder: m,
30
30
  value: u,
31
- className: x("min-w-[340px]", i),
31
+ className: x("min-w-[340px]", l),
32
32
  onChange: d,
33
33
  ...p,
34
34
  ...o || {},
35
35
  slotProps: {
36
36
  ...o || {},
37
37
  input: {
38
- startAdornment: /* @__PURE__ */ t(N, { loading: l, size: "sm", children: /* @__PURE__ */ t(I, {}) }),
38
+ startAdornment: /* @__PURE__ */ t(N, { loading: h, children: /* @__PURE__ */ t(I, {}) }),
39
39
  ...o?.input || {}
40
40
  }
41
41
  }
@@ -43,6 +43,6 @@ const E = (n) => {
43
43
  );
44
44
  };
45
45
  export {
46
- E as Search
46
+ L as Search
47
47
  };
48
48
  //# sourceMappingURL=Search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Search.js","sources":["../../src/Search/Search.tsx"],"sourcesContent":["'use client';\n\nimport { ChangeEvent, useEffect, useState } from 'react';\n\nimport { Input } from '../Input';\nimport { SearchProps } from './Search.types';\n\nimport { useDebounceCallback } from '@oneplatformdev/hooks';\nimport { cn } from '@oneplatformdev/utils';\nimport { SearchIcon } from 'lucide-react';\nimport { LoadedIcon } from '../LoadedIcon';\n\nexport const Search = (props: SearchProps) => {\n const {\n search: initialSearch,\n onChange: handleChange,\n onSearch,\n placeholder = 'Search',\n className,\n loading = false,\n slotProps,\n name = 'search',\n ...rest\n } = props;\n const [search, setSearch] = useState(initialSearch);\n const debounced = useDebounceCallback(onSearch, 1000);\n\n const onChange = (e: ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n setSearch(v);\n handleChange?.(e);\n debounced(e.target.value);\n };\n\n useEffect(() => {\n setSearch(initialSearch ?? '');\n }, [initialSearch]);\n\n return (\n <Input\n name={name}\n placeholder={placeholder}\n value={search}\n className={cn('min-w-[340px]', className)}\n onChange={onChange}\n {...rest}\n {...(slotProps || {})}\n slotProps={{\n ...(slotProps || {}),\n input: {\n startAdornment: (\n <LoadedIcon loading={loading} size=\"sm\">\n <SearchIcon />\n </LoadedIcon>\n ),\n ...(slotProps?.input || {}),\n },\n }}\n />\n );\n};\n"],"names":["Search","props","initialSearch","handleChange","onSearch","placeholder","className","loading","slotProps","name","rest","search","setSearch","useState","debounced","useDebounceCallback","onChange","e","v","useEffect","jsx","Input","cn","LoadedIcon","SearchIcon"],"mappings":";;;;;;;AAYO,MAAMA,IAAS,CAACC,MAAuB;AAC5C,QAAM;AAAA,IACJ,QAAQC;AAAA,IACR,UAAUC;AAAA,IACV,UAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,WAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,WAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,GAAGC;AAAA,EAAA,IACDT,GACE,CAACU,GAAQC,CAAS,IAAIC,EAASX,CAAa,GAC5CY,IAAYC,EAAoBX,GAAU,GAAI,GAE9CY,IAAW,CAACC,MAAqC;AACrD,UAAMC,IAAID,EAAE,OAAO;AACnB,IAAAL,EAAUM,CAAC,GACXf,IAAec,CAAC,GAChBH,EAAUG,EAAE,OAAO,KAAK;AAAA,EAC1B;AAEA,SAAAE,EAAU,MAAM;AACd,IAAAP,EAAUV,KAAiB,EAAE;AAAA,EAC/B,GAAG,CAACA,CAAa,CAAC,GAGhB,gBAAAkB;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAZ;AAAA,MACA,aAAAJ;AAAA,MACA,OAAOM;AAAA,MACP,WAAWW,EAAG,iBAAiBhB,CAAS;AAAA,MACxC,UAAAU;AAAA,MACC,GAAGN;AAAA,MACH,GAAIF,KAAa,CAAA;AAAA,MAClB,WAAW;AAAA,QACT,GAAIA,KAAa,CAAA;AAAA,QACjB,OAAO;AAAA,UACL,kCACGe,GAAA,EAAW,SAAAhB,GAAkB,MAAK,MACjC,UAAA,gBAAAa,EAACI,KAAW,EAAA,CACd;AAAA,UAEF,GAAIhB,GAAW,SAAS,CAAA;AAAA,QAAC;AAAA,MAC3B;AAAA,IACF;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"Search.js","sources":["../../src/Search/Search.tsx"],"sourcesContent":["'use client';\n\nimport { ChangeEvent, useEffect, useState } from 'react';\n\nimport { Input } from '../Input';\nimport { SearchProps } from './Search.types';\n\nimport { useDebounceCallback } from '@oneplatformdev/hooks';\nimport { cn } from '@oneplatformdev/utils';\nimport { SearchIcon } from 'lucide-react';\nimport { LoadedIcon } from '../LoadedIcon';\n\nexport const Search = (props: SearchProps) => {\n const {\n search: initialSearch,\n onChange: handleChange,\n onSearch,\n placeholder = 'Search',\n className,\n loading = false,\n slotProps,\n name = 'search',\n ...rest\n } = props;\n const [search, setSearch] = useState(initialSearch);\n const debounced = useDebounceCallback(onSearch, 1000);\n\n const onChange = (e: ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n setSearch(v);\n handleChange?.(e);\n debounced(e.target.value);\n };\n\n useEffect(() => {\n setSearch(initialSearch ?? '');\n }, [initialSearch]);\n\n return (\n <Input\n name={name}\n placeholder={placeholder}\n value={search}\n className={cn('min-w-[340px]', className)}\n onChange={onChange}\n {...rest}\n {...(slotProps || {})}\n slotProps={{\n ...(slotProps || {}),\n input: {\n startAdornment: (\n <LoadedIcon loading={loading}>\n <SearchIcon />\n </LoadedIcon>\n ),\n ...(slotProps?.input || {}),\n },\n }}\n />\n );\n};\n"],"names":["Search","props","initialSearch","handleChange","onSearch","placeholder","className","loading","slotProps","name","rest","search","setSearch","useState","debounced","useDebounceCallback","onChange","e","v","useEffect","jsx","Input","cn","LoadedIcon","SearchIcon"],"mappings":";;;;;;;AAYO,MAAMA,IAAS,CAACC,MAAuB;AAC5C,QAAM;AAAA,IACJ,QAAQC;AAAA,IACR,UAAUC;AAAA,IACV,UAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,WAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,WAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,GAAGC;AAAA,EAAA,IACDT,GACE,CAACU,GAAQC,CAAS,IAAIC,EAASX,CAAa,GAC5CY,IAAYC,EAAoBX,GAAU,GAAI,GAE9CY,IAAW,CAACC,MAAqC;AACrD,UAAMC,IAAID,EAAE,OAAO;AACnB,IAAAL,EAAUM,CAAC,GACXf,IAAec,CAAC,GAChBH,EAAUG,EAAE,OAAO,KAAK;AAAA,EAC1B;AAEA,SAAAE,EAAU,MAAM;AACd,IAAAP,EAAUV,KAAiB,EAAE;AAAA,EAC/B,GAAG,CAACA,CAAa,CAAC,GAGhB,gBAAAkB;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAZ;AAAA,MACA,aAAAJ;AAAA,MACA,OAAOM;AAAA,MACP,WAAWW,EAAG,iBAAiBhB,CAAS;AAAA,MACxC,UAAAU;AAAA,MACC,GAAGN;AAAA,MACH,GAAIF,KAAa,CAAA;AAAA,MAClB,WAAW;AAAA,QACT,GAAIA,KAAa,CAAA;AAAA,QACjB,OAAO;AAAA,UACL,gBACE,gBAAAY,EAACG,GAAA,EAAW,SAAAhB,GACV,UAAA,gBAAAa,EAACI,KAAW,GACd;AAAA,UAEF,GAAIhB,GAAW,SAAS,CAAA;AAAA,QAAC;AAAA,MAC3B;AAAA,IACF;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,17 @@
1
+ import { Search as t } from "./Search.js";
2
+ const a = {
3
+ title: "Input/Search",
4
+ component: t
5
+ }, o = {
6
+ args: {
7
+ slotProps: {},
8
+ search: "search",
9
+ onSearch: () => {
10
+ }
11
+ }
12
+ };
13
+ export {
14
+ o as Default,
15
+ a as default
16
+ };
17
+ //# sourceMappingURL=Search.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.stories.js","sources":["../../src/Search/Search.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite';\n\nimport { Search } from './Search';\n\nconst meta = {\n title: 'Input/Search',\n component: Search,\n} satisfies Meta<typeof Search>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Default: Story = {\n args: {\n slotProps: {},\n search: \"search\",\n onSearch: () => {}\n }\n};\n"],"names":["meta","Search","Default"],"mappings":";AAIA,MAAMA,IAAO;AAAA,EACX,OAAO;AAAA,EACP,WAAWC;AACb,GAMaC,IAAiB;AAAA,EAC5B,MAAM;AAAA,IACJ,WAAW,CAAA;AAAA,IACX,QAAQ;AAAA,IACR,UAAU,MAAM;AAAA,IAAC;AAAA,EAAA;AAErB;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,QAAA,MAAM,QAAQ,wGAmEb,CAAC;AAGF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,QAAA,MAAM,QAAQ,wGA2Eb,CAAC;AAGF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1,73 +1,78 @@
1
- import { jsxs as l, Fragment as g, jsx as b } from "react/jsx-runtime";
2
- import * as h from "react";
3
- import { useId as A, useRef as v, useState as w, useImperativeHandle as z, useEffect as F } from "react";
4
- import { cn as d } from "@oneplatformdev/utils";
5
- import { useAutosizeTextArea as N } from "./useAutosizeTextArea.js";
6
- const y = h.forwardRef(
7
- (u, m) => {
1
+ import { jsxs as d, Fragment as v, jsx as A } from "react/jsx-runtime";
2
+ import * as w from "react";
3
+ import { useId as y, useRef as z, useState as F, useImperativeHandle as N, useEffect as T } from "react";
4
+ import { cn as f } from "@oneplatformdev/utils";
5
+ import { useAutosizeTextArea as C } from "./useAutosizeTextArea.js";
6
+ const R = w.forwardRef(
7
+ (m, c) => {
8
8
  const {
9
- className: c,
10
- value: t = "",
11
- maxHeight: o = Number.MAX_SAFE_INTEGER,
12
- minHeight: i = 0,
13
- resizeble: f = !0,
9
+ className: g,
10
+ value: r = "",
11
+ maxHeight: a = Number.MAX_SAFE_INTEGER,
12
+ minHeight: i = 40,
13
+ resizeble: x = !1,
14
14
  counter: s = !1,
15
15
  id: n = "",
16
- ...r
17
- } = u, a = A(), e = v(null), [x, p] = w("");
18
- return N({
19
- textAreaRef: e,
20
- triggerAutoSize: x,
21
- maxHeight: o,
16
+ onChange: p,
17
+ onTransform: l,
18
+ ...o
19
+ } = m, u = y(), t = z(null), [b, h] = F("");
20
+ return C({
21
+ textAreaRef: t,
22
+ triggerAutoSize: b,
23
+ maxHeight: a,
22
24
  minHeight: i
23
- }), z(m, () => ({
24
- ...e.current ?? {},
25
- textArea: e.current,
26
- focus: () => e?.current?.focus(),
27
- maxHeight: o,
25
+ }), N(c, () => ({
26
+ ...t.current ?? {},
27
+ textArea: t.current,
28
+ focus: () => t?.current?.focus(),
29
+ maxHeight: a,
28
30
  minHeight: i
29
- })), F(() => {
30
- p(t);
31
- }, [r?.defaultValue, t]), /* @__PURE__ */ l(g, { children: [
32
- /* @__PURE__ */ b(
31
+ })), T(() => {
32
+ h(r);
33
+ }, [o?.defaultValue, r]), /* @__PURE__ */ d(v, { children: [
34
+ /* @__PURE__ */ A(
33
35
  "textarea",
34
36
  {
35
- id: n || a,
36
- ...r,
37
- ref: e,
38
- value: t,
39
- className: d(
37
+ id: n || u,
38
+ ...o,
39
+ ref: t,
40
+ value: r,
41
+ onChange: (e) => {
42
+ typeof l?.(e.target.value, e) == "string" && (e.target.value = l(e.target.value, e)), p?.(e);
43
+ },
44
+ className: f(
40
45
  "flex min-h-10 w-full px-3 py-2 text-base relative md:text-sm",
41
- "rounded-[12px] border border-input bg-[#FCFCFC] shadow-none",
46
+ "rounded-lg border border-input bg-[#FCFCFC] shadow-none",
42
47
  "placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
43
48
  "focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring",
44
- f ? "resize" : "resize-none overflow-hidden!",
45
- s && "pb-2",
46
- c
49
+ x ? "resize" : "resize-none overflow-hidden!",
50
+ s && "pb-1",
51
+ g
47
52
  )
48
53
  }
49
54
  ),
50
- s && /* @__PURE__ */ l(
55
+ s && /* @__PURE__ */ d(
51
56
  "label",
52
57
  {
53
- htmlFor: n || a,
54
- className: d(
58
+ htmlFor: n || u,
59
+ className: f(
55
60
  "w-full text-right inline-flex items-center justify-end",
56
- "text-sm font-normal text-muted-foreground",
57
- "leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
61
+ "text-xs font-medium leading-[1.2] text-muted-foreground",
62
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
58
63
  ),
59
64
  children: [
60
- String(t || "").length,
65
+ String(r || "").length,
61
66
  " / ",
62
- r?.maxLength
67
+ o?.maxLength
63
68
  ]
64
69
  }
65
70
  )
66
71
  ] });
67
72
  }
68
73
  );
69
- y.displayName = "Textarea";
74
+ R.displayName = "Textarea";
70
75
  export {
71
- y as Textarea
76
+ R as Textarea
72
77
  };
73
78
  //# sourceMappingURL=Textarea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","sources":["../../src/Textarea/Textarea.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useEffect, useId, useImperativeHandle, useRef, useState } from 'react';\nimport { cn } from '@oneplatformdev/utils';\n\nimport { TextareaProps } from './Textarea.types';\nimport { useAutosizeTextArea } from './useAutosizeTextArea';\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (textareaProps, ref) => {\n const {\n className,\n value = '',\n maxHeight = Number.MAX_SAFE_INTEGER,\n minHeight = 0,\n resizeble = true,\n counter = false,\n id: customId = '',\n ...props\n } = textareaProps;\n const id = useId();\n const textAreaRef = useRef<HTMLTextAreaElement | null>(null);\n const [triggerAutoSize, setTriggerAutoSize] = useState('');\n\n useAutosizeTextArea({\n textAreaRef,\n triggerAutoSize: triggerAutoSize,\n maxHeight,\n minHeight,\n });\n\n useImperativeHandle(ref, () => ({\n ...((textAreaRef.current ?? {}) as HTMLTextAreaElement),\n textArea: textAreaRef.current as HTMLTextAreaElement,\n focus: () => textAreaRef?.current?.focus(),\n maxHeight,\n minHeight,\n }));\n\n useEffect(() => {\n setTriggerAutoSize(value as string);\n }, [props?.defaultValue, value]);\n\n return (\n <>\n <textarea\n id={customId || id}\n {...props}\n ref={textAreaRef}\n value={value}\n className={cn(\n 'flex min-h-10 w-full px-3 py-2 text-base relative md:text-sm',\n 'rounded-[12px] border border-input bg-[#FCFCFC] shadow-none',\n 'placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring',\n resizeble ? 'resize' : 'resize-none overflow-hidden!',\n counter && 'pb-2',\n className\n )}\n />\n {counter && (\n <label\n htmlFor={customId || id}\n className={cn(\n 'w-full text-right inline-flex items-center justify-end',\n 'text-sm font-normal text-muted-foreground',\n 'leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\n )}\n >\n {String(value || '').length} / {props?.maxLength}\n </label>\n )}\n </>\n );\n }\n);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n"],"names":["Textarea","React","textareaProps","ref","className","value","maxHeight","minHeight","resizeble","counter","customId","props","id","useId","textAreaRef","useRef","triggerAutoSize","setTriggerAutoSize","useState","useAutosizeTextArea","useImperativeHandle","useEffect","jsxs","Fragment","jsx","cn"],"mappings":";;;;;AAOA,MAAMA,IAAWC,EAAM;AAAA,EACrB,CAACC,GAAeC,MAAQ;AACtB,UAAM;AAAA,MACJ,WAAAC;AAAA,MACA,OAAAC,IAAQ;AAAA,MACR,WAAAC,IAAY,OAAO;AAAA,MACnB,WAAAC,IAAY;AAAA,MACZ,WAAAC,IAAY;AAAA,MACZ,SAAAC,IAAU;AAAA,MACV,IAAIC,IAAW;AAAA,MACf,GAAGC;AAAA,IAAA,IACDT,GACEU,IAAKC,EAAA,GACLC,IAAcC,EAAmC,IAAI,GACrD,CAACC,GAAiBC,CAAkB,IAAIC,EAAS,EAAE;AAEzD,WAAAC,EAAoB;AAAA,MAClB,aAAAL;AAAA,MACA,iBAAAE;AAAA,MACA,WAAAV;AAAA,MACA,WAAAC;AAAA,IAAA,CACD,GAEDa,EAAoBjB,GAAK,OAAO;AAAA,MAC9B,GAAKW,EAAY,WAAW,CAAA;AAAA,MAC5B,UAAUA,EAAY;AAAA,MACtB,OAAO,MAAMA,GAAa,SAAS,MAAA;AAAA,MACnC,WAAAR;AAAA,MACA,WAAAC;AAAA,IAAA,EACA,GAEFc,EAAU,MAAM;AACd,MAAAJ,EAAmBZ,CAAe;AAAA,IACpC,GAAG,CAACM,GAAO,cAAcN,CAAK,CAAC,GAG7B,gBAAAiB,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAId,KAAYE;AAAA,UACf,GAAGD;AAAA,UACJ,KAAKG;AAAA,UACL,OAAAT;AAAA,UACA,WAAWoB;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAjB,IAAY,WAAW;AAAA,YACvBC,KAAW;AAAA,YACXL;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,MAEDK,KACC,gBAAAa;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASZ,KAAYE;AAAA,UACrB,WAAWa;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAA,OAAOpB,KAAS,EAAE,EAAE;AAAA,YAAO;AAAA,YAAIM,GAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACzC,GAEJ;AAAA,EAEJ;AACF;AACAX,EAAS,cAAc;"}
1
+ {"version":3,"file":"Textarea.js","sources":["../../src/Textarea/Textarea.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useEffect, useId, useImperativeHandle, useRef, useState } from 'react';\nimport { cn } from '@oneplatformdev/utils';\n\nimport { TextareaProps } from './Textarea.types';\nimport { useAutosizeTextArea } from './useAutosizeTextArea';\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (textareaProps, ref) => {\n const {\n className,\n value = '',\n maxHeight = Number.MAX_SAFE_INTEGER,\n minHeight = 40,\n resizeble = false,\n counter = false,\n id: customId = '',\n onChange,\n onTransform,\n ...props\n } = textareaProps;\n const id = useId();\n const textAreaRef = useRef<HTMLTextAreaElement | null>(null);\n const [triggerAutoSize, setTriggerAutoSize] = useState('');\n\n useAutosizeTextArea({\n textAreaRef,\n triggerAutoSize: triggerAutoSize,\n maxHeight,\n minHeight,\n });\n\n useImperativeHandle(ref, () => ({\n ...((textAreaRef.current ?? {}) as HTMLTextAreaElement),\n textArea: textAreaRef.current as HTMLTextAreaElement,\n focus: () => textAreaRef?.current?.focus(),\n maxHeight,\n minHeight,\n }));\n\n useEffect(() => {\n setTriggerAutoSize(value as string);\n }, [props?.defaultValue, value]);\n\n return (\n <>\n <textarea\n id={customId || id}\n {...props}\n ref={textAreaRef}\n value={value}\n onChange={(e) => {\n if (typeof onTransform?.(e.target.value, e) === 'string') {\n e.target.value = onTransform(e.target.value, e);\n }\n onChange?.(e);\n }}\n className={cn(\n 'flex min-h-10 w-full px-3 py-2 text-base relative md:text-sm',\n 'rounded-lg border border-input bg-[#FCFCFC] shadow-none',\n 'placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring',\n resizeble ? 'resize' : 'resize-none overflow-hidden!',\n counter && 'pb-1',\n className\n )}\n />\n {counter && (\n <label\n htmlFor={customId || id}\n className={cn(\n 'w-full text-right inline-flex items-center justify-end',\n 'text-xs font-medium leading-[1.2] text-muted-foreground',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\n )}\n >\n {String(value || '').length} / {props?.maxLength}\n </label>\n )}\n </>\n );\n }\n);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n"],"names":["Textarea","React","textareaProps","ref","className","value","maxHeight","minHeight","resizeble","counter","customId","onChange","onTransform","props","id","useId","textAreaRef","useRef","triggerAutoSize","setTriggerAutoSize","useState","useAutosizeTextArea","useImperativeHandle","useEffect","jsxs","Fragment","jsx","cn"],"mappings":";;;;;AAOA,MAAMA,IAAWC,EAAM;AAAA,EACrB,CAACC,GAAeC,MAAQ;AACtB,UAAM;AAAA,MACJ,WAAAC;AAAA,MACA,OAAAC,IAAQ;AAAA,MACR,WAAAC,IAAY,OAAO;AAAA,MACnB,WAAAC,IAAY;AAAA,MACZ,WAAAC,IAAY;AAAA,MACZ,SAAAC,IAAU;AAAA,MACV,IAAIC,IAAW;AAAA,MACf,UAAAC;AAAA,MACA,aAAAC;AAAA,MACA,GAAGC;AAAA,IAAA,IACDX,GACEY,IAAKC,EAAA,GACLC,IAAcC,EAAmC,IAAI,GACrD,CAACC,GAAiBC,CAAkB,IAAIC,EAAS,EAAE;AAEzD,WAAAC,EAAoB;AAAA,MAClB,aAAAL;AAAA,MACA,iBAAAE;AAAA,MACA,WAAAZ;AAAA,MACA,WAAAC;AAAA,IAAA,CACD,GAEDe,EAAoBnB,GAAK,OAAO;AAAA,MAC9B,GAAKa,EAAY,WAAW,CAAA;AAAA,MAC5B,UAAUA,EAAY;AAAA,MACtB,OAAO,MAAMA,GAAa,SAAS,MAAA;AAAA,MACnC,WAAAV;AAAA,MACA,WAAAC;AAAA,IAAA,EACA,GAEFgB,EAAU,MAAM;AACd,MAAAJ,EAAmBd,CAAe;AAAA,IACpC,GAAG,CAACQ,GAAO,cAAcR,CAAK,CAAC,GAG7B,gBAAAmB,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIhB,KAAYI;AAAA,UACf,GAAGD;AAAA,UACJ,KAAKG;AAAA,UACL,OAAAX;AAAA,UACA,UAAU,CAAC,MAAM;AACf,YAAI,OAAOO,IAAc,EAAE,OAAO,OAAO,CAAC,KAAM,aAC9C,EAAE,OAAO,QAAQA,EAAY,EAAE,OAAO,OAAO,CAAC,IAEhDD,IAAW,CAAC;AAAA,UACd;AAAA,UACA,WAAWgB;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAnB,IAAY,WAAW;AAAA,YACvBC,KAAW;AAAA,YACXL;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,MAEDK,KACC,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASd,KAAYI;AAAA,UACrB,WAAWa;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAA,OAAOtB,KAAS,EAAE,EAAE;AAAA,YAAO;AAAA,YAAIQ,GAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACzC,GAEJ;AAAA,EAEJ;AACF;AACAb,EAAS,cAAc;"}
@@ -0,0 +1,12 @@
1
+ import { Textarea as t } from "./Textarea.js";
2
+ const a = {
3
+ title: "Input/Textarea",
4
+ component: t
5
+ }, o = {
6
+ args: {}
7
+ };
8
+ export {
9
+ o as Default,
10
+ a as default
11
+ };
12
+ //# sourceMappingURL=Textarea.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.stories.js","sources":["../../src/Textarea/Textarea.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite';\n\nimport { Textarea } from './Textarea';\n\nconst meta = {\n title: 'Input/Textarea',\n component: Textarea,\n} satisfies Meta<typeof Textarea>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Default: Story = {\n args: {}\n};\n"],"names":["meta","Textarea","Default"],"mappings":";AAIA,MAAMA,IAAO;AAAA,EACX,OAAO;AAAA,EACP,WAAWC;AACb,GAMaC,IAAiB;AAAA,EAC5B,MAAM,CAAA;AACR;"}
@@ -1,4 +1,4 @@
1
- import { ComponentProps, RefObject } from 'react';
1
+ import { ChangeEvent, ComponentProps, RefObject } from 'react';
2
2
  export interface IUseAutosizeTextAreaProps {
3
3
  textAreaRef: RefObject<HTMLTextAreaElement | null>;
4
4
  triggerAutoSize: string;
@@ -14,5 +14,7 @@ export interface IUseAutosizeTextAreaProps {
14
14
  export interface TextareaProps extends ComponentProps<'textarea'>, Pick<IUseAutosizeTextAreaProps, 'minHeight' | 'maxHeight'> {
15
15
  resizeble?: boolean;
16
16
  counter?: boolean;
17
+ /** func transform event.target.value before onChange event call*/
18
+ onTransform?: (value: string, event: ChangeEvent<HTMLInputElement>) => string;
17
19
  }
18
20
  //# sourceMappingURL=Textarea.types.d.ts.map