@oneplatformdev/ui 0.1.99-beta.304 → 0.1.99-beta.306

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 (221) hide show
  1. package/.storybook/Wrappers.js.map +1 -1
  2. package/Accordion/Accordion.js.map +1 -1
  3. package/Alert/Alert.js.map +1 -1
  4. package/Alert/alertVariants.js.map +1 -1
  5. package/AlertDialog/AlertDialog.js.map +1 -1
  6. package/AlertDialog/AlertDialog.stories.js +2 -4
  7. package/AlertDialog/AlertDialog.stories.js.map +1 -1
  8. package/AlertDialog/AlertDialogRoot.js +18 -20
  9. package/AlertDialog/AlertDialogRoot.js.map +1 -1
  10. package/AreaChart/AreaChart.js.map +1 -1
  11. package/Aside/Aside.js.map +1 -1
  12. package/Aside/AsideSidebar.js.map +1 -1
  13. package/AspectRatio/AspectRatio.js.map +1 -1
  14. package/Avatar/Avatar.js.map +1 -1
  15. package/Badge/Badge.js.map +1 -1
  16. package/Badge/badgeVariants.js.map +1 -1
  17. package/Breadcrumb/Breadcrumb.js.map +1 -1
  18. package/Button/Button.js +10 -11
  19. package/Button/Button.js.map +1 -1
  20. package/Button/Button.stories.js.map +1 -1
  21. package/Button/Button.utils.js.map +1 -1
  22. package/Button/ButtonCounterBadge.js.map +1 -1
  23. package/Button/buttonVariants.js.map +1 -1
  24. package/ButtonIcon/ButtonIcon.js +19 -22
  25. package/ButtonIcon/ButtonIcon.js.map +1 -1
  26. package/ButtonIcon/ButtonIcon.stories.js.map +1 -1
  27. package/ButtonIcon/buttonIconVariants.js.map +1 -1
  28. package/CHANGELOG.md +3487 -3487
  29. package/Calendar/Calendar.js +4 -6
  30. package/Calendar/Calendar.js.map +1 -1
  31. package/Card/Card.js.map +1 -1
  32. package/Carousel/Carousel.js +6 -7
  33. package/Carousel/Carousel.js.map +1 -1
  34. package/Chart/Chart.js.map +1 -1
  35. package/Checkbox/Checkbox.js +0 -1
  36. package/Checkbox/Checkbox.js.map +1 -1
  37. package/Checkbox/Checkbox.stories.js.map +1 -1
  38. package/Collapsible/Collapsible.js.map +1 -1
  39. package/ColorInput/ColorInput.d.ts +10 -0
  40. package/ColorInput/ColorInput.d.ts.map +1 -0
  41. package/ColorInput/ColorInput.js +103 -0
  42. package/ColorInput/ColorInput.js.map +1 -0
  43. package/ColorInput/ColorInput.stories.js +78 -0
  44. package/ColorInput/ColorInput.stories.js.map +1 -0
  45. package/ColorInput/ColorInput.types.d.ts +46 -0
  46. package/ColorInput/ColorInput.types.d.ts.map +1 -0
  47. package/ColorInput/ColorInput.types.js +2 -0
  48. package/ColorInput/ColorInput.types.js.map +1 -0
  49. package/ColorInput/ColorPicker.d.ts +28 -0
  50. package/ColorInput/ColorPicker.d.ts.map +1 -0
  51. package/ColorInput/ColorPicker.js +322 -0
  52. package/ColorInput/ColorPicker.js.map +1 -0
  53. package/ColorInput/color.utils.d.ts +42 -0
  54. package/ColorInput/color.utils.d.ts.map +1 -0
  55. package/ColorInput/color.utils.js +129 -0
  56. package/ColorInput/color.utils.js.map +1 -0
  57. package/ColorInput/index.d.ts +6 -0
  58. package/ColorInput/index.d.ts.map +1 -0
  59. package/ColorInput/index.js +25 -0
  60. package/ColorInput/index.js.map +1 -0
  61. package/ColorInput/useSavedColors.d.ts +13 -0
  62. package/ColorInput/useSavedColors.d.ts.map +1 -0
  63. package/ColorInput/useSavedColors.js +53 -0
  64. package/ColorInput/useSavedColors.js.map +1 -0
  65. package/Combobox/Combobox.js +10 -10
  66. package/Combobox/Combobox.js.map +1 -1
  67. package/Combobox/Combobox.stories.js.map +1 -1
  68. package/Combobox/Combobox.types.js.map +1 -1
  69. package/Combobox/ComboboxOptionItem.js +18 -19
  70. package/Combobox/ComboboxOptionItem.js.map +1 -1
  71. package/Combobox/ComboboxRenderContent.js +18 -19
  72. package/Combobox/ComboboxRenderContent.js.map +1 -1
  73. package/Combobox/ComboboxRenderOptions.js +5 -5
  74. package/Combobox/ComboboxRenderOptions.js.map +1 -1
  75. package/Combobox/ComboboxRenderTrigger.js +20 -22
  76. package/Combobox/ComboboxRenderTrigger.js.map +1 -1
  77. package/Command/Command.js +21 -22
  78. package/Command/Command.js.map +1 -1
  79. package/ContextPopover/ContextDropdownMenu.js.map +1 -1
  80. package/ContextPopover/ContextPopover.js.map +1 -1
  81. package/ContextPopover/useContextPopoverHandler.js.map +1 -1
  82. package/DataTable/DataTable.js +24 -26
  83. package/DataTable/DataTable.js.map +1 -1
  84. package/DataTable/DataTableColumnFilter.js +6 -7
  85. package/DataTable/DataTableColumnFilter.js.map +1 -1
  86. package/DataTable/useDataTable.js.map +1 -1
  87. package/DatePicker/DatePicker.js +1 -2
  88. package/DatePicker/DatePicker.js.map +1 -1
  89. package/Dialog/Dialog.js +20 -21
  90. package/Dialog/Dialog.js.map +1 -1
  91. package/Dialog/Dialog.stories.js +14 -15
  92. package/Dialog/Dialog.stories.js.map +1 -1
  93. package/Dialog/DialogOverlayScope.js.map +1 -1
  94. package/Dialog/useDialogClosePosition.js.map +1 -1
  95. package/Drawer/Drawer.js.map +1 -1
  96. package/DropdownMenu/DropdownMenu.js.map +1 -1
  97. package/Dropzone/Dropzone.d.ts.map +1 -1
  98. package/Dropzone/Dropzone.js +121 -122
  99. package/Dropzone/Dropzone.js.map +1 -1
  100. package/Dropzone/Dropzone.stories.js.map +1 -1
  101. package/Dropzone/Dropzone.types.js.map +1 -1
  102. package/Dropzone/DropzoneCoverPreview.js.map +1 -1
  103. package/Dropzone/DropzoneFilePreview.js.map +1 -1
  104. package/Dropzone/DropzoneSinglePickPreview.js +2 -3
  105. package/Dropzone/DropzoneSinglePickPreview.js.map +1 -1
  106. package/Dropzone/DropzoneUtils.js.map +1 -1
  107. package/Form/Form.js +14 -15
  108. package/Form/Form.js.map +1 -1
  109. package/Form/FormRenderControl.js +6 -7
  110. package/Form/FormRenderControl.js.map +1 -1
  111. package/Form/Form_old.js +4 -5
  112. package/Form/Form_old.js.map +1 -1
  113. package/FormCheckbox/FormCheckbox.js +4 -4
  114. package/FormCheckbox/FormCheckbox.js.map +1 -1
  115. package/FormColorInput/FormColorInput.d.ts +7 -0
  116. package/FormColorInput/FormColorInput.d.ts.map +1 -0
  117. package/FormColorInput/FormColorInput.js +38 -0
  118. package/FormColorInput/FormColorInput.js.map +1 -0
  119. package/FormColorInput/FormColorInput.stories.js +95 -0
  120. package/FormColorInput/FormColorInput.stories.js.map +1 -0
  121. package/FormColorInput/FormColorInput.types.d.ts +6 -0
  122. package/FormColorInput/FormColorInput.types.d.ts.map +1 -0
  123. package/FormColorInput/FormColorInput.types.js +2 -0
  124. package/FormColorInput/FormColorInput.types.js.map +1 -0
  125. package/FormColorInput/index.d.ts +3 -0
  126. package/FormColorInput/index.d.ts.map +1 -0
  127. package/FormColorInput/index.js +5 -0
  128. package/FormColorInput/index.js.map +1 -0
  129. package/FormCombobox/FormCombobox.js +4 -4
  130. package/FormCombobox/FormCombobox.js.map +1 -1
  131. package/FormCombobox/FormCombobox.stories.js +17 -19
  132. package/FormCombobox/FormCombobox.stories.js.map +1 -1
  133. package/FormDatePicker/FormDatePicker.js +4 -4
  134. package/FormDatePicker/FormDatePicker.js.map +1 -1
  135. package/FormDropzone/FormDropzone.js +3 -3
  136. package/FormDropzone/FormDropzone.js.map +1 -1
  137. package/FormInput/FormInput.js +6 -6
  138. package/FormInput/FormInput.js.map +1 -1
  139. package/FormInput/FormInput.stories.js +12 -13
  140. package/FormInput/FormInput.stories.js.map +1 -1
  141. package/FormRadio/FormRadio.js.map +1 -1
  142. package/FormSelect/FormSelect.js +12 -15
  143. package/FormSelect/FormSelect.js.map +1 -1
  144. package/FormTextarea/FormTextarea.js +4 -4
  145. package/FormTextarea/FormTextarea.js.map +1 -1
  146. package/Header/Header.js.map +1 -1
  147. package/HoverCard/HoverCard.js.map +1 -1
  148. package/InfoBlock/InfoBlock.js.map +1 -1
  149. package/InfoBlock/InfoBlock.stories.js.map +1 -1
  150. package/InfoBlock/infoBlockVariants.js.map +1 -1
  151. package/Input/Input.js.map +1 -1
  152. package/Input/Input.stories.js.map +1 -1
  153. package/Input/inputVariants.js.map +1 -1
  154. package/InputOTP/InputOTP.d.ts.map +1 -1
  155. package/InputOTP/InputOTP.js.map +1 -1
  156. package/LICENSE +21 -21
  157. package/Label/Label.js.map +1 -1
  158. package/Label/labelVariants.js.map +1 -1
  159. package/LazyLoader/LazyLoader.js +4 -5
  160. package/LazyLoader/LazyLoader.js.map +1 -1
  161. package/LoadedIcon/LoadedIcon.js.map +1 -1
  162. package/LoadingMask/LoadingMask.js.map +1 -1
  163. package/LoadingMask/RenderLoadingMask.js.map +1 -1
  164. package/LoadingProgress/LoadingProgress.js.map +1 -1
  165. package/LoadingProgress/loadingProgressVariants.js.map +1 -1
  166. package/Menubar/Menubar.js.map +1 -1
  167. package/NavigationMenu/NavigationMenu.js.map +1 -1
  168. package/NavigationMenu/navigationMenuVariants.js.map +1 -1
  169. package/Pagination/Pagination.js +0 -1
  170. package/Pagination/Pagination.js.map +1 -1
  171. package/Popover/Popover.js.map +1 -1
  172. package/Progress/Progress.js.map +1 -1
  173. package/README.md +7 -7
  174. package/Radio/Radio.js.map +1 -1
  175. package/RadioGroup/RadioGroup.js.map +1 -1
  176. package/Resizable/Resizable.js.map +1 -1
  177. package/Resizable/Resizable.stories.js.map +1 -1
  178. package/ScrollArea/ScrollArea.js.map +1 -1
  179. package/Search/Search.js +9 -9
  180. package/Search/Search.js.map +1 -1
  181. package/Search/Search.stories.js.map +1 -1
  182. package/Select/Select.js +6 -7
  183. package/Select/Select.js.map +1 -1
  184. package/Select/Select.stories.js.map +1 -1
  185. package/Select/SelectRoot.js.map +1 -1
  186. package/Separator/Separator.js.map +1 -1
  187. package/Sheet/Sheet.js.map +1 -1
  188. package/Sidebar/Sidebar.js +20 -21
  189. package/Sidebar/Sidebar.js.map +1 -1
  190. package/Skeleton/Skeleton.js.map +1 -1
  191. package/Slider/Slider.js.map +1 -1
  192. package/Sonner/Sonner.js.map +1 -1
  193. package/Switch/Switch.js.map +1 -1
  194. package/Switch/Switch.stories.js.map +1 -1
  195. package/Table/Table.js.map +1 -1
  196. package/TablePagination/TablePagination.js +21 -26
  197. package/TablePagination/TablePagination.js.map +1 -1
  198. package/Tabs/Tabs.js.map +1 -1
  199. package/Tabs/TabsRoot.js.map +1 -1
  200. package/Textarea/Textarea.js.map +1 -1
  201. package/Textarea/Textarea.stories.js.map +1 -1
  202. package/Textarea/useAutosizeTextArea.js.map +1 -1
  203. package/Theme/ThemeModeToggle.js +3 -4
  204. package/Theme/ThemeModeToggle.js.map +1 -1
  205. package/Theme/ThemeProvider.js.map +1 -1
  206. package/Toast/Toast.js.map +1 -1
  207. package/Toast/toast.constants.js.map +1 -1
  208. package/Toast/toastVariants.js.map +1 -1
  209. package/Toast/useToast.js.map +1 -1
  210. package/Toaster/Toaster.js.map +1 -1
  211. package/Toggle/Toggle.js.map +1 -1
  212. package/ToggleGroup/ToggleGroup.js.map +1 -1
  213. package/Tooltip/Tooltip.js.map +1 -1
  214. package/Tooltip/TooltipRoot.js.map +1 -1
  215. package/Tooltip/tooltipVariants.js.map +1 -1
  216. package/index.d.ts +2 -0
  217. package/index.d.ts.map +1 -1
  218. package/index.js +366 -342
  219. package/index.js.map +1 -1
  220. package/package.json +1 -1
  221. package/vite-env.d.ts +7 -7
@@ -1,13 +1,11 @@
1
- import { jsx as l, jsxs as a } from "react/jsx-runtime";
2
- import { useForm as i, FormProvider as m } from "react-hook-form";
3
- import { FormCombobox as n } from "./FormCombobox.js";
1
+ import { jsx as l, jsxs as o } from "react/jsx-runtime";
2
+ import { useForm as i, FormProvider as n } from "react-hook-form";
3
+ import { FormCombobox as m } from "./FormCombobox.js";
4
4
  import { FormInput as s } from "../FormInput/FormInput.js";
5
- import { FormTextarea as c } from "../FormTextarea/FormTextarea.js";
6
- import { FormSelect as d } from "../FormSelect/FormSelect.js";
7
- import { Button as u } from "../Button/Button.js";
8
- import "../Button/buttonVariants.js";
9
- import "react";
10
- const p = (e) => new Promise((r) => setTimeout(r, e)), o = [
5
+ import { FormSelect as c } from "../FormSelect/FormSelect.js";
6
+ import { Button as d } from "../Button/Button.js";
7
+ import { FormTextarea as u } from "../FormTextarea/FormTextarea.js";
8
+ const p = (e) => new Promise((r) => setTimeout(r, e)), a = [
11
9
  { value: "ua", label: "Ukraine" },
12
10
  { value: "pl", label: "Poland" },
13
11
  { value: "de", label: "Germany" },
@@ -17,12 +15,12 @@ const p = (e) => new Promise((r) => setTimeout(r, e)), o = [
17
15
  ], b = async ({ search: e }) => {
18
16
  await p(200);
19
17
  const r = (e ?? "").trim().toLowerCase();
20
- return r ? o.filter((t) => String(t.label).toLowerCase().includes(r)) : o;
18
+ return r ? a.filter((t) => String(t.label).toLowerCase().includes(r)) : a;
21
19
  }, f = [
22
20
  { value: "admin", label: "Адміністратор" },
23
21
  { value: "manager", label: "Менеджер" },
24
22
  { value: "user", label: "Користувач" }
25
- ], C = {
23
+ ], L = {
26
24
  title: "Forms/HybridValidation",
27
25
  parameters: {
28
26
  layout: "centered"
@@ -43,7 +41,7 @@ function h() {
43
41
  resolver: y,
44
42
  defaultValues: { fullName: "", role: "", country: "", description: "" }
45
43
  }), { isValid: r, isSubmitting: t } = e.formState;
46
- return /* @__PURE__ */ l(m, { ...e, children: /* @__PURE__ */ a(
44
+ return /* @__PURE__ */ l(n, { ...e, children: /* @__PURE__ */ o(
47
45
  "form",
48
46
  {
49
47
  className: "space-y-4",
@@ -61,7 +59,7 @@ function h() {
61
59
  }
62
60
  ),
63
61
  /* @__PURE__ */ l(
64
- d,
62
+ c,
65
63
  {
66
64
  form: e,
67
65
  name: "role",
@@ -71,7 +69,7 @@ function h() {
71
69
  }
72
70
  ),
73
71
  /* @__PURE__ */ l(
74
- n,
72
+ m,
75
73
  {
76
74
  form: e,
77
75
  name: "country",
@@ -83,7 +81,7 @@ function h() {
83
81
  }
84
82
  ),
85
83
  /* @__PURE__ */ l(
86
- c,
84
+ u,
87
85
  {
88
86
  form: e,
89
87
  name: "description",
@@ -91,16 +89,16 @@ function h() {
91
89
  placeholder: "Мінімум 10 символів"
92
90
  }
93
91
  ),
94
- /* @__PURE__ */ l(u, { type: "submit", disabled: !r || t, className: "w-full", children: "Зберегти" })
92
+ /* @__PURE__ */ l(d, { type: "submit", disabled: !r || t, className: "w-full", children: "Зберегти" })
95
93
  ]
96
94
  }
97
95
  ) });
98
96
  }
99
- const O = {
97
+ const q = {
100
98
  render: () => /* @__PURE__ */ l(h, {})
101
99
  };
102
100
  export {
103
- O as AllFields,
104
- C as default
101
+ q as AllFields,
102
+ L as default
105
103
  };
106
104
  //# sourceMappingURL=FormCombobox.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormCombobox.stories.js","sources":["../../src/FormCombobox/FormCombobox.stories.tsx"],"sourcesContent":["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react';\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { FormCombobox } from './FormCombobox';\nimport { FormInput } from '../FormInput';\nimport { FormTextarea } from '../FormTextarea';\nimport { FormSelect } from '../FormSelect';\nimport { Button } from '../Button';\nimport { ComboboxOption, ComboboxProps } from '../Combobox';\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\nconst COUNTRIES: ComboboxOption[] = [\n { value: 'ua', label: 'Ukraine' },\n { value: 'pl', label: 'Poland' },\n { value: 'de', label: 'Germany' },\n { value: 'fr', label: 'France' },\n { value: 'es', label: 'Spain' },\n { value: 'it', label: 'Italy' },\n];\n\nconst loadCountries: ComboboxProps['loadData'] = async ({ search }) => {\n await sleep(200);\n const q = (search ?? '').trim().toLowerCase();\n if (!q) return COUNTRIES;\n return COUNTRIES.filter((o) => String(o.label).toLowerCase().includes(q));\n};\n\nconst ROLE_OPTIONS = [\n { value: 'admin', label: 'Адміністратор' },\n { value: 'manager', label: 'Менеджер' },\n { value: 'user', label: 'Користувач' },\n];\n\nconst meta = {\n title: 'Forms/HybridValidation',\n parameters: {\n layout: 'centered',\n },\n decorators: [\n (Story) => (\n <div className=\"p-6 w-[420px]\">\n <Story />\n </div>\n ),\n ],\n} satisfies Meta;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\n// Гібридна модель валідації (feat/1856 + feat/3677):\n// - mode: \"onTouched\" — помилка зʼявляється після blur поля\n// - для Combobox: blur спрацьовує на закриття дропдауна (відкрив → закрив без вибору → помилка)\n// - помилка зникає миттєво при виправленні (on change), щойно значення валідне\n// - кнопка submit disabled, поки форма невалідна\ntype FormValues = {\n fullName: string;\n role: string;\n country: string;\n description: string;\n};\n\nconst resolver = (values: FormValues) => {\n const errors: Record<string, { type: string; message: string }> = {};\n\n if (!values.fullName?.trim()) {\n errors.fullName = { type: 'required', message: 'Обовʼязкове поле' };\n }\n if (!values.role) {\n errors.role = { type: 'required', message: 'Оберіть роль' };\n }\n if (!values.country) {\n errors.country = { type: 'required', message: 'Оберіть країну' };\n }\n if (!values.description?.trim()) {\n errors.description = { type: 'required', message: 'Обовʼязкове поле' };\n } else if (values.description.trim().length < 10) {\n errors.description = { type: 'minLength', message: 'Мінімум 10 символів' };\n }\n\n return {\n values: Object.keys(errors).length ? {} : values,\n errors,\n };\n};\n\nfunction HybridForm() {\n const form = useForm<FormValues>({\n mode: 'onTouched',\n resolver,\n defaultValues: { fullName: '', role: '', country: '', description: '' },\n });\n\n const { isValid, isSubmitting } = form.formState;\n\n return (\n <FormProvider {...form}>\n <form\n className=\"space-y-4\"\n onSubmit={form.handleSubmit(() => {\n alert('Форму надіслано ✅');\n })}\n >\n <FormInput<FormValues>\n form={form}\n name=\"fullName\"\n label=\"Імʼя\"\n placeholder=\"Іван Петренко\"\n />\n\n <FormSelect<FormValues, unknown>\n form={form}\n name=\"role\"\n label=\"Роль\"\n placeholder=\"Оберіть роль\"\n options={ROLE_OPTIONS}\n />\n\n <FormCombobox<FormValues>\n form={form}\n name=\"country\"\n label=\"Країна\"\n placeholder=\"Оберіть країну\"\n searchLabel=\"Пошук...\"\n emptyLabel=\"Нічого не знайдено\"\n loadData={loadCountries}\n />\n\n <FormTextarea<FormValues>\n form={form}\n name=\"description\"\n label=\"Опис\"\n placeholder=\"Мінімум 10 символів\"\n />\n\n <Button type=\"submit\" disabled={!isValid || isSubmitting} className=\"w-full\">\n Зберегти\n </Button>\n </form>\n </FormProvider>\n );\n}\n\nexport const AllFields: Story = {\n render: () => <HybridForm />,\n};\n"],"names":["sleep","ms","COUNTRIES","loadCountries","search","q","o","ROLE_OPTIONS","meta","Story","jsx","resolver","values","errors","HybridForm","form","useForm","isValid","isSubmitting","FormProvider","jsxs","FormInput","FormSelect","FormCombobox","FormTextarea","Button","AllFields"],"mappings":";;;;;;;;;AAWA,MAAMA,IAAQ,CAACC,MAAe,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAGA,CAAE,CAAC,GAE5DC,IAA8B;AAAA,EAClC,EAAE,OAAO,MAAM,OAAO,UAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,SAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,UAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,SAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,QAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,QAAA;AACxB,GAEMC,IAA2C,OAAO,EAAE,QAAAC,QAAa;AACrE,QAAMJ,EAAM,GAAG;AACf,QAAMK,KAAKD,KAAU,IAAI,KAAA,EAAO,YAAA;AAChC,SAAKC,IACEH,EAAU,OAAO,CAACI,MAAM,OAAOA,EAAE,KAAK,EAAE,YAAA,EAAc,SAASD,CAAC,CAAC,IADzDH;AAEjB,GAEMK,IAAe;AAAA,EACnB,EAAE,OAAO,SAAS,OAAO,gBAAA;AAAA,EACzB,EAAE,OAAO,WAAW,OAAO,WAAA;AAAA,EAC3B,EAAE,OAAO,QAAQ,OAAO,aAAA;AAC1B,GAEMC,IAAO;AAAA,EACX,OAAO;AAAA,EACP,YAAY;AAAA,IACV,QAAQ;AAAA,EAAA;AAAA,EAEV,YAAY;AAAA,IACV,CAACC,MACC,gBAAAC,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA,gBAAAA,EAACD,KAAM,EAAA,CACT;AAAA,EAAA;AAGN,GAkBME,IAAW,CAACC,MAAuB;AACvC,QAAMC,IAA4D,CAAA;AAElE,SAAKD,EAAO,UAAU,WACpBC,EAAO,WAAW,EAAE,MAAM,YAAY,SAAS,mBAAA,IAE5CD,EAAO,SACVC,EAAO,OAAO,EAAE,MAAM,YAAY,SAAS,eAAA,IAExCD,EAAO,YACVC,EAAO,UAAU,EAAE,MAAM,YAAY,SAAS,iBAAA,IAE3CD,EAAO,aAAa,SAEdA,EAAO,YAAY,KAAA,EAAO,SAAS,OAC5CC,EAAO,cAAc,EAAE,MAAM,aAAa,SAAS,sBAAA,KAFnDA,EAAO,cAAc,EAAE,MAAM,YAAY,SAAS,mBAAA,GAK7C;AAAA,IACL,QAAQ,OAAO,KAAKA,CAAM,EAAE,SAAS,CAAA,IAAKD;AAAA,IAC1C,QAAAC;AAAA,EAAA;AAEJ;AAEA,SAASC,IAAa;AACpB,QAAMC,IAAOC,EAAoB;AAAA,IAC/B,MAAM;AAAA,IACN,UAAAL;AAAA,IACA,eAAe,EAAE,UAAU,IAAI,MAAM,IAAI,SAAS,IAAI,aAAa,GAAA;AAAA,EAAG,CACvE,GAEK,EAAE,SAAAM,GAAS,cAAAC,EAAA,IAAiBH,EAAK;AAEvC,SACE,gBAAAL,EAACS,GAAA,EAAc,GAAGJ,GAChB,UAAA,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAUL,EAAK,aAAa,MAAM;AAChC,cAAM,mBAAmB;AAAA,MAC3B,CAAC;AAAA,MAED,UAAA;AAAA,QAAA,gBAAAL;AAAA,UAACW;AAAA,UAAA;AAAA,YACC,MAAAN;AAAA,YACA,MAAK;AAAA,YACL,OAAM;AAAA,YACN,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAGd,gBAAAL;AAAA,UAACY;AAAA,UAAA;AAAA,YACC,MAAAP;AAAA,YACA,MAAK;AAAA,YACL,OAAM;AAAA,YACN,aAAY;AAAA,YACZ,SAASR;AAAA,UAAA;AAAA,QAAA;AAAA,QAGX,gBAAAG;AAAA,UAACa;AAAA,UAAA;AAAA,YACC,MAAAR;AAAA,YACA,MAAK;AAAA,YACL,OAAM;AAAA,YACN,aAAY;AAAA,YACZ,aAAY;AAAA,YACZ,YAAW;AAAA,YACX,UAAUZ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGZ,gBAAAO;AAAA,UAACc;AAAA,UAAA;AAAA,YACC,MAAAT;AAAA,YACA,MAAK;AAAA,YACL,OAAM;AAAA,YACN,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAGd,gBAAAL,EAACe,GAAA,EAAO,MAAK,UAAS,UAAU,CAACR,KAAWC,GAAc,WAAU,UAAS,UAAA,WAAA,CAE7E;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEO,MAAMQ,IAAmB;AAAA,EAC9B,QAAQ,MAAM,gBAAAhB,EAACI,GAAA,CAAA,CAAW;AAC5B;"}
1
+ {"version":3,"file":"FormCombobox.stories.js","sources":["../../src/FormCombobox/FormCombobox.stories.tsx"],"sourcesContent":["import React from 'react';\r\nimport type { Meta, StoryObj } from '@storybook/react';\r\nimport { FormProvider, useForm } from 'react-hook-form';\r\n\r\nimport { FormCombobox } from './FormCombobox';\r\nimport { FormInput } from '../FormInput';\r\nimport { FormTextarea } from '../FormTextarea';\r\nimport { FormSelect } from '../FormSelect';\r\nimport { Button } from '../Button';\r\nimport { ComboboxOption, ComboboxProps } from '../Combobox';\r\n\r\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\r\n\r\nconst COUNTRIES: ComboboxOption[] = [\r\n { value: 'ua', label: 'Ukraine' },\r\n { value: 'pl', label: 'Poland' },\r\n { value: 'de', label: 'Germany' },\r\n { value: 'fr', label: 'France' },\r\n { value: 'es', label: 'Spain' },\r\n { value: 'it', label: 'Italy' },\r\n];\r\n\r\nconst loadCountries: ComboboxProps['loadData'] = async ({ search }) => {\r\n await sleep(200);\r\n const q = (search ?? '').trim().toLowerCase();\r\n if (!q) return COUNTRIES;\r\n return COUNTRIES.filter((o) => String(o.label).toLowerCase().includes(q));\r\n};\r\n\r\nconst ROLE_OPTIONS = [\r\n { value: 'admin', label: 'Адміністратор' },\r\n { value: 'manager', label: 'Менеджер' },\r\n { value: 'user', label: 'Користувач' },\r\n];\r\n\r\nconst meta = {\r\n title: 'Forms/HybridValidation',\r\n parameters: {\r\n layout: 'centered',\r\n },\r\n decorators: [\r\n (Story) => (\r\n <div className=\"p-6 w-[420px]\">\r\n <Story />\r\n </div>\r\n ),\r\n ],\r\n} satisfies Meta;\r\n\r\nexport default meta;\r\n\r\ntype Story = StoryObj<typeof meta>;\r\n\r\n// Гібридна модель валідації (feat/1856 + feat/3677):\r\n// - mode: \"onTouched\" — помилка зʼявляється після blur поля\r\n// - для Combobox: blur спрацьовує на закриття дропдауна (відкрив → закрив без вибору → помилка)\r\n// - помилка зникає миттєво при виправленні (on change), щойно значення валідне\r\n// - кнопка submit disabled, поки форма невалідна\r\ntype FormValues = {\r\n fullName: string;\r\n role: string;\r\n country: string;\r\n description: string;\r\n};\r\n\r\nconst resolver = (values: FormValues) => {\r\n const errors: Record<string, { type: string; message: string }> = {};\r\n\r\n if (!values.fullName?.trim()) {\r\n errors.fullName = { type: 'required', message: 'Обовʼязкове поле' };\r\n }\r\n if (!values.role) {\r\n errors.role = { type: 'required', message: 'Оберіть роль' };\r\n }\r\n if (!values.country) {\r\n errors.country = { type: 'required', message: 'Оберіть країну' };\r\n }\r\n if (!values.description?.trim()) {\r\n errors.description = { type: 'required', message: 'Обовʼязкове поле' };\r\n } else if (values.description.trim().length < 10) {\r\n errors.description = { type: 'minLength', message: 'Мінімум 10 символів' };\r\n }\r\n\r\n return {\r\n values: Object.keys(errors).length ? {} : values,\r\n errors,\r\n };\r\n};\r\n\r\nfunction HybridForm() {\r\n const form = useForm<FormValues>({\r\n mode: 'onTouched',\r\n resolver,\r\n defaultValues: { fullName: '', role: '', country: '', description: '' },\r\n });\r\n\r\n const { isValid, isSubmitting } = form.formState;\r\n\r\n return (\r\n <FormProvider {...form}>\r\n <form\r\n className=\"space-y-4\"\r\n onSubmit={form.handleSubmit(() => {\r\n alert('Форму надіслано ✅');\r\n })}\r\n >\r\n <FormInput<FormValues>\r\n form={form}\r\n name=\"fullName\"\r\n label=\"Імʼя\"\r\n placeholder=\"Іван Петренко\"\r\n />\r\n\r\n <FormSelect<FormValues, unknown>\r\n form={form}\r\n name=\"role\"\r\n label=\"Роль\"\r\n placeholder=\"Оберіть роль\"\r\n options={ROLE_OPTIONS}\r\n />\r\n\r\n <FormCombobox<FormValues>\r\n form={form}\r\n name=\"country\"\r\n label=\"Країна\"\r\n placeholder=\"Оберіть країну\"\r\n searchLabel=\"Пошук...\"\r\n emptyLabel=\"Нічого не знайдено\"\r\n loadData={loadCountries}\r\n />\r\n\r\n <FormTextarea<FormValues>\r\n form={form}\r\n name=\"description\"\r\n label=\"Опис\"\r\n placeholder=\"Мінімум 10 символів\"\r\n />\r\n\r\n <Button type=\"submit\" disabled={!isValid || isSubmitting} className=\"w-full\">\r\n Зберегти\r\n </Button>\r\n </form>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nexport const AllFields: Story = {\r\n render: () => <HybridForm />,\r\n};\r\n"],"names":["sleep","ms","COUNTRIES","loadCountries","search","q","o","ROLE_OPTIONS","meta","Story","jsx","resolver","values","errors","HybridForm","form","useForm","isValid","isSubmitting","FormProvider","jsxs","FormInput","FormSelect","FormCombobox","FormTextarea","Button","AllFields"],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  import { jsx as r } from "react/jsx-runtime";
2
2
  import { DatePicker as s } from "../DatePicker/DatePicker.js";
3
- import { FormControl as C } from "../Form/Form.js";
4
- import { FormRenderControl as D } from "../Form/FormRenderControl.js";
3
+ import { FormRenderControl as C } from "../Form/FormRenderControl.js";
4
+ import { FormControl as D } from "../Form/Form.js";
5
5
  const P = (t) => {
6
6
  const { form: n, name: m, tooltip: a, tooltipProps: p, label: i, onDateChange: l, ...c } = t;
7
7
  return /* @__PURE__ */ r(
8
- D,
8
+ C,
9
9
  {
10
10
  form: n,
11
11
  name: m,
12
12
  tooltip: a,
13
13
  tooltipProps: p,
14
14
  label: i,
15
- render: ({ field: o }) => /* @__PURE__ */ r(C, { children: /* @__PURE__ */ r(
15
+ render: ({ field: o }) => /* @__PURE__ */ r(D, { children: /* @__PURE__ */ r(
16
16
  s,
17
17
  {
18
18
  ...o,
@@ -1 +1 @@
1
- {"version":3,"file":"FormDatePicker.js","sources":["../../src/FormDatePicker/FormDatePicker.tsx"],"sourcesContent":["'use client';\n\nimport { DatePicker } from '../DatePicker';\nimport { FormControl, FormRenderControl } from '../Form';\nimport { FieldValues } from 'react-hook-form';\nimport { FormDatePickerProps } from './FormDatePicker.types';\n\n// TODO: add description\nexport const FormDatePicker = <Data extends FieldValues>(\n props: FormDatePickerProps<Data>\n) => {\n const { form, name, tooltip, tooltipProps, label, onDateChange, ...rest } = props;\n return (\n <FormRenderControl\n form={form}\n name={name}\n tooltip={tooltip}\n tooltipProps={tooltipProps}\n label={label}\n render={({ field }) => (\n <FormControl>\n <DatePicker\n { ...field }\n { ...rest }\n selectedDate={field.value}\n onDateChange={(date: Date | undefined) => {\n field.onChange(date);\n onDateChange?.(date);\n }}\n />\n </FormControl>\n )}\n />\n );\n};\n"],"names":["FormDatePicker","props","form","name","tooltip","tooltipProps","label","onDateChange","rest","jsx","FormRenderControl","field","FormControl","DatePicker","date"],"mappings":";;;;AAQO,MAAMA,IAAiB,CAC5BC,MACG;AACH,QAAM,EAAE,MAAAC,GAAM,MAAAC,GAAM,SAAAC,GAAS,cAAAC,GAAc,OAAAC,GAAO,cAAAC,GAAc,GAAGC,EAAA,IAASP;AAC5E,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAR;AAAA,MACA,MAAAC;AAAA,MACA,SAAAC;AAAA,MACA,cAAAC;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAK,EAAA,wBACRC,GAAA,EACC,UAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACG,GAAGF;AAAA,UACH,GAAGH;AAAA,UACL,cAAcG,EAAM;AAAA,UACpB,cAAc,CAACG,MAA2B;AACxC,YAAAH,EAAM,SAASG,CAAI,GACnBP,IAAeO,CAAI;AAAA,UACrB;AAAA,QAAA;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"FormDatePicker.js","sources":["../../src/FormDatePicker/FormDatePicker.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { DatePicker } from '../DatePicker';\r\nimport { FormControl, FormRenderControl } from '../Form';\r\nimport { FieldValues } from 'react-hook-form';\r\nimport { FormDatePickerProps } from './FormDatePicker.types';\r\n\r\n// TODO: add description\r\nexport const FormDatePicker = <Data extends FieldValues>(\r\n props: FormDatePickerProps<Data>\r\n) => {\r\n const { form, name, tooltip, tooltipProps, label, onDateChange, ...rest } = props;\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n name={name}\r\n tooltip={tooltip}\r\n tooltipProps={tooltipProps}\r\n label={label}\r\n render={({ field }) => (\r\n <FormControl>\r\n <DatePicker\r\n { ...field }\r\n { ...rest }\r\n selectedDate={field.value}\r\n onDateChange={(date: Date | undefined) => {\r\n field.onChange(date);\r\n onDateChange?.(date);\r\n }}\r\n />\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n"],"names":["FormDatePicker","props","form","name","tooltip","tooltipProps","label","onDateChange","rest","jsx","FormRenderControl","field","FormControl","DatePicker","date"],"mappings":";;;;AAQO,MAAMA,IAAiB,CAC5BC,MACG;AACH,QAAM,EAAE,MAAAC,GAAM,MAAAC,GAAM,SAAAC,GAAS,cAAAC,GAAc,OAAAC,GAAO,cAAAC,GAAc,GAAGC,EAAA,IAASP;AAC5E,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAR;AAAA,MACA,MAAAC;AAAA,MACA,SAAAC;AAAA,MACA,cAAAC;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAK,EAAA,wBACRC,GAAA,EACC,UAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACG,GAAGF;AAAA,UACH,GAAGH;AAAA,UACL,cAAcG,EAAM;AAAA,UACpB,cAAc,CAACG,MAA2B;AACxC,YAAAH,EAAM,SAASG,CAAI,GACnBP,IAAeO,CAAI;AAAA,UACrB;AAAA,QAAA;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as o } from "react/jsx-runtime";
2
- import { FormControl as a } from "../Form/Form.js";
2
+ import { Dropzone as a } from "../Dropzone/Dropzone.js";
3
3
  import { FormRenderControl as s } from "../Form/FormRenderControl.js";
4
- import { Dropzone as f } from "../Dropzone/Dropzone.js";
4
+ import { FormControl as f } from "../Form/Form.js";
5
5
  const d = (n) => {
6
6
  const { form: t, label: e, tooltip: m, tooltipProps: p, name: l, ...i } = n;
7
7
  return /* @__PURE__ */ o(
@@ -12,7 +12,7 @@ const d = (n) => {
12
12
  tooltip: m,
13
13
  tooltipProps: p,
14
14
  name: l,
15
- render: ({ field: r }) => /* @__PURE__ */ o(a, { children: /* @__PURE__ */ o(f, { ...i, ...r, onChangeValue: r.onChange }) })
15
+ render: ({ field: r }) => /* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(a, { ...i, ...r, onChangeValue: r.onChange }) })
16
16
  }
17
17
  );
18
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"FormDropzone.js","sources":["../../src/FormDropzone/FormDropzone.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\nimport { Dropzone } from '../Dropzone';\nimport { FieldValues } from 'react-hook-form';\nimport { FormDropzoneProps } from './FormDropzone.types';\n\nexport const FormDropzone = <Data extends FieldValues>(\n props: FormDropzoneProps<Data>\n) => {\n const { form, label, tooltip, tooltipProps, name, ...rest } = props;\n\n return (\n <FormRenderControl\n form={form}\n label={label}\n tooltip={tooltip}\n tooltipProps={tooltipProps}\n name={name}\n render={({ field }) => (\n <FormControl>\n <Dropzone {...rest} {...field} onChangeValue={field.onChange} />\n </FormControl>\n )}\n />\n );\n};\n"],"names":["FormDropzone","props","form","label","tooltip","tooltipProps","name","rest","jsx","FormRenderControl","field","FormControl","Dropzone"],"mappings":";;;;AAKO,MAAMA,IAAe,CAC1BC,MACG;AACH,QAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,SAAAC,GAAS,cAAAC,GAAc,MAAAC,GAAM,GAAGC,MAASN;AAE9D,SACE,gBAAAO;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAP;AAAA,MACA,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,cAAAC;AAAA,MACA,MAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAI,EAAA,wBACRC,GAAA,EACC,UAAA,gBAAAH,EAACI,GAAA,EAAU,GAAGL,GAAO,GAAGG,GAAO,eAAeA,EAAM,UAAU,EAAA,CAChE;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"FormDropzone.js","sources":["../../src/FormDropzone/FormDropzone.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\r\nimport { Dropzone } from '../Dropzone';\r\nimport { FieldValues } from 'react-hook-form';\r\nimport { FormDropzoneProps } from './FormDropzone.types';\r\n\r\nexport const FormDropzone = <Data extends FieldValues>(\r\n props: FormDropzoneProps<Data>\r\n) => {\r\n const { form, label, tooltip, tooltipProps, name, ...rest } = props;\r\n\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n label={label}\r\n tooltip={tooltip}\r\n tooltipProps={tooltipProps}\r\n name={name}\r\n render={({ field }) => (\r\n <FormControl>\r\n <Dropzone {...rest} {...field} onChangeValue={field.onChange} />\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n"],"names":["FormDropzone","props","form","label","tooltip","tooltipProps","name","rest","jsx","FormRenderControl","field","FormControl","Dropzone"],"mappings":";;;;AAKO,MAAMA,IAAe,CAC1BC,MACG;AACH,QAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,SAAAC,GAAS,cAAAC,GAAc,MAAAC,GAAM,GAAGC,MAASN;AAE9D,SACE,gBAAAO;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAP;AAAA,MACA,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,cAAAC;AAAA,MACA,MAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAI,EAAA,wBACRC,GAAA,EACC,UAAA,gBAAAH,EAACI,GAAA,EAAU,GAAGL,GAAO,GAAGG,GAAO,eAAeA,EAAM,UAAU,EAAA,CAChE;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,8 +1,8 @@
1
1
  import { jsx as m } from "react/jsx-runtime";
2
- import { FormControl as S } from "../Form/Form.js";
2
+ import { forwardRef as S } from "react";
3
3
  import { FormRenderControl as V } from "../Form/FormRenderControl.js";
4
- import { Input as j } from "../Input/Input.js";
5
- import { forwardRef as q } from "react";
4
+ import { FormControl as j } from "../Form/Form.js";
5
+ import { Input as q } from "../Input/Input.js";
6
6
  function w(D, o) {
7
7
  const { form: a, tooltip: x, tooltipProps: P, label: b, name: u, maxLength: s, counter: y, onChange: C, onBlur: F, onPaste: A, style: I, onPastePrepare: p, ...B } = D;
8
8
  return /* @__PURE__ */ m(
@@ -13,8 +13,8 @@ function w(D, o) {
13
13
  tooltip: x,
14
14
  tooltipProps: P,
15
15
  label: b,
16
- render: ({ field: n, fieldState: R }) => /* @__PURE__ */ m(S, { children: /* @__PURE__ */ m(
17
- j,
16
+ render: ({ field: n, fieldState: R }) => /* @__PURE__ */ m(j, { children: /* @__PURE__ */ m(
17
+ q,
18
18
  {
19
19
  ...n,
20
20
  ...B,
@@ -62,7 +62,7 @@ function w(D, o) {
62
62
  }
63
63
  );
64
64
  }
65
- const G = q(w);
65
+ const G = S(w);
66
66
  export {
67
67
  G as FormInput
68
68
  };
@@ -1 +1 @@
1
- {"version":3,"file":"FormInput.js","sources":["../../src/FormInput/FormInput.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\nimport { Input } from '../Input';\nimport { FormInputProps } from './FormInput.types';\nimport { FieldValues, Path, PathValue } from 'react-hook-form';\nimport { forwardRef, ReactElement, Ref, RefObject } from 'react';\n\n// TODO: add description\n// export const FormInput = <Data extends FieldValues>(\n// props: FormInputProps<Data> & { inputRef?: Ref<HTMLInputElement> }\n// ) => {\n// const { inputRef, form, label, name, onChange, onBlur, style, ...rest } =\n// props;\n// return (\n// <FormRenderControl\n// form={form}\n// name={name}\n// label={label}\n// render={({ field }) => (\n// <FormControl>\n// <Input\n// {...field}\n// {...rest}\n// ref={(el) => {\n// field.ref(el);\n// if (typeof inputRef === 'function') {\n// inputRef(el);\n// } else if (inputRef) {\n// (inputRef as RefObject<HTMLInputElement | null>).current = el;\n// }\n// }}\n// style={style}\n// value={field.value || ''}\n// onChange={(...rest) => {\n// field.onChange?.(...rest);\n// onChange?.(...rest);\n// }}\n// onBlur={(...rest) => {\n// field.onBlur?.();\n// onBlur?.(...rest);\n// }}\n// />\n// </FormControl>\n// )}\n// />\n// );\n// };\n\nfunction FormInputInner<Data extends FieldValues>(\n props: FormInputProps<Data>,\n ref: Ref<HTMLInputElement>\n) {\n const { form, tooltip, tooltipProps, label, name, maxLength, counter, onChange, onBlur, onPaste, style, onPastePrepare, ...rest } = props;\n return (\n <FormRenderControl\n form={form}\n name={name}\n tooltip={tooltip}\n tooltipProps={tooltipProps}\n label={label}\n render={({ field, fieldState }) => (\n <FormControl>\n <Input\n {...field}\n {...rest}\n counter={!!fieldState.error ? false : counter}\n maxLength={maxLength}\n ref={(el) => {\n field.ref(el);\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n (ref as RefObject<HTMLInputElement | null>).current = el;\n }\n }}\n style={style}\n value={field.value || ''}\n onChange={(...rest) => {\n field.onChange?.(...rest);\n onChange?.(...rest);\n }}\n onPaste={(e) => {\n const pasted = e.clipboardData.getData('text');\n const input = e.currentTarget;\n\n const start = input.selectionStart ?? input.value.length;\n const end = input.selectionEnd ?? input.value.length;\n\n const current = input.value;\n\n let next = current.slice(0, start) + pasted + current.slice(end);\n\n if (onPastePrepare) {\n next = onPastePrepare(next, e);\n }\n\n if (typeof maxLength !== 'number') {\n e.preventDefault();\n\n form.setValue(name, next as PathValue<Data, Path<Data>>, {\n shouldDirty: true,\n shouldTouch: true,\n });\n\n return;\n }\n\n const before = current.slice(0, start);\n const after = current.slice(end);\n\n const available = maxLength - (before.length + after.length);\n\n if (available <= 0) {\n e.preventDefault();\n return;\n }\n\n const limitedPaste = pasted.slice(0, available);\n const limitedNext = before + limitedPaste + after;\n\n e.preventDefault();\n\n form.setValue(name, limitedNext as PathValue<Data, Path<Data>>, {\n shouldDirty: true,\n shouldTouch: true,\n });\n\n requestAnimationFrame(() => {\n input.setSelectionRange(\n before.length + limitedPaste.length,\n before.length + limitedPaste.length\n );\n });\n }}\n onBlur={(...rest) => {\n field.onBlur?.();\n onBlur?.(...rest);\n }}\n />\n </FormControl>\n )}\n />\n );\n}\n\nexport const FormInput = forwardRef(FormInputInner) as <Data extends FieldValues>(\n props: FormInputProps<Data> & { ref?: Ref<HTMLInputElement> }\n) => ReactElement;\n"],"names":["FormInputInner","props","ref","form","tooltip","tooltipProps","label","name","maxLength","counter","onChange","onBlur","onPaste","style","onPastePrepare","rest","jsx","FormRenderControl","field","fieldState","FormControl","Input","el","e","pasted","input","start","end","current","next","before","after","available","limitedPaste","limitedNext","FormInput","forwardRef"],"mappings":";;;;;AA+CA,SAASA,EACPC,GACAC,GACA;AACA,QAAM,EAAE,MAAAC,GAAM,SAAAC,GAAS,cAAAC,GAAc,OAAAC,GAAO,MAAAC,GAAM,WAAAC,GAAW,SAAAC,GAAS,UAAAC,GAAU,QAAAC,GAAQ,SAAAC,GAAS,OAAAC,GAAO,gBAAAC,GAAgB,GAAGC,MAASd;AACpI,SACE,gBAAAe;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAd;AAAA,MACA,MAAAI;AAAA,MACA,SAAAH;AAAA,MACA,cAAAC;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAY,GAAO,YAAAC,EAAA,wBACfC,GAAA,EACC,UAAA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACE,GAAGH;AAAA,UACH,GAAGH;AAAA,UACJ,SAAWI,EAAW,QAAQ,KAAQV;AAAA,UACtC,WAAAD;AAAA,UACA,KAAK,CAACc,MAAO;AACX,YAAAJ,EAAM,IAAII,CAAE,GACR,OAAOpB,KAAQ,aACjBA,EAAIoB,CAAE,IACGpB,MACRA,EAA2C,UAAUoB;AAAA,UAE1D;AAAA,UACA,OAAAT;AAAA,UACA,OAAOK,EAAM,SAAS;AAAA,UACtB,UAAU,IAAIH,MAAS;AACrB,YAAAG,EAAM,WAAW,GAAGH,CAAI,GACxBL,IAAW,GAAGK,CAAI;AAAA,UACpB;AAAA,UACA,SAAS,CAACQ,MAAM;AACd,kBAAMC,IAASD,EAAE,cAAc,QAAQ,MAAM,GACvCE,IAAQF,EAAE,eAEVG,IAAQD,EAAM,kBAAkBA,EAAM,MAAM,QAC5CE,IAAMF,EAAM,gBAAgBA,EAAM,MAAM,QAExCG,IAAUH,EAAM;AAEtB,gBAAII,IAAOD,EAAQ,MAAM,GAAGF,CAAK,IAAIF,IAASI,EAAQ,MAAMD,CAAG;AAM/D,gBAJIb,MACFe,IAAOf,EAAee,GAAMN,CAAC,IAG3B,OAAOf,KAAc,UAAU;AACjC,cAAAe,EAAE,eAAA,GAEFpB,EAAK,SAASI,GAAMsB,GAAqC;AAAA,gBACvD,aAAa;AAAA,gBACb,aAAa;AAAA,cAAA,CACd;AAED;AAAA,YACF;AAEA,kBAAMC,IAASF,EAAQ,MAAM,GAAGF,CAAK,GAC/BK,IAAQH,EAAQ,MAAMD,CAAG,GAEzBK,IAAYxB,KAAasB,EAAO,SAASC,EAAM;AAErD,gBAAIC,KAAa,GAAG;AAClB,cAAAT,EAAE,eAAA;AACF;AAAA,YACF;AAEA,kBAAMU,IAAeT,EAAO,MAAM,GAAGQ,CAAS,GACxCE,IAAcJ,IAASG,IAAeF;AAE5C,YAAAR,EAAE,eAAA,GAEFpB,EAAK,SAASI,GAAM2B,GAA4C;AAAA,cAC9D,aAAa;AAAA,cACb,aAAa;AAAA,YAAA,CACd,GAED,sBAAsB,MAAM;AAC1B,cAAAT,EAAM;AAAA,gBACJK,EAAO,SAASG,EAAa;AAAA,gBAC7BH,EAAO,SAASG,EAAa;AAAA,cAAA;AAAA,YAEjC,CAAC;AAAA,UACH;AAAA,UACA,QAAQ,IAAIlB,MAAS;AACnB,YAAAG,EAAM,SAAA,GACNP,IAAS,GAAGI,CAAI;AAAA,UAClB;AAAA,QAAA;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;AAEO,MAAMoB,IAAYC,EAAWpC,CAAc;"}
1
+ {"version":3,"file":"FormInput.js","sources":["../../src/FormInput/FormInput.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\r\nimport { Input } from '../Input';\r\nimport { FormInputProps } from './FormInput.types';\r\nimport { FieldValues, Path, PathValue } from 'react-hook-form';\r\nimport { forwardRef, ReactElement, Ref, RefObject } from 'react';\r\n\r\n// TODO: add description\r\n// export const FormInput = <Data extends FieldValues>(\r\n// props: FormInputProps<Data> & { inputRef?: Ref<HTMLInputElement> }\r\n// ) => {\r\n// const { inputRef, form, label, name, onChange, onBlur, style, ...rest } =\r\n// props;\r\n// return (\r\n// <FormRenderControl\r\n// form={form}\r\n// name={name}\r\n// label={label}\r\n// render={({ field }) => (\r\n// <FormControl>\r\n// <Input\r\n// {...field}\r\n// {...rest}\r\n// ref={(el) => {\r\n// field.ref(el);\r\n// if (typeof inputRef === 'function') {\r\n// inputRef(el);\r\n// } else if (inputRef) {\r\n// (inputRef as RefObject<HTMLInputElement | null>).current = el;\r\n// }\r\n// }}\r\n// style={style}\r\n// value={field.value || ''}\r\n// onChange={(...rest) => {\r\n// field.onChange?.(...rest);\r\n// onChange?.(...rest);\r\n// }}\r\n// onBlur={(...rest) => {\r\n// field.onBlur?.();\r\n// onBlur?.(...rest);\r\n// }}\r\n// />\r\n// </FormControl>\r\n// )}\r\n// />\r\n// );\r\n// };\r\n\r\nfunction FormInputInner<Data extends FieldValues>(\r\n props: FormInputProps<Data>,\r\n ref: Ref<HTMLInputElement>\r\n) {\r\n const { form, tooltip, tooltipProps, label, name, maxLength, counter, onChange, onBlur, onPaste, style, onPastePrepare, ...rest } = props;\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n name={name}\r\n tooltip={tooltip}\r\n tooltipProps={tooltipProps}\r\n label={label}\r\n render={({ field, fieldState }) => (\r\n <FormControl>\r\n <Input\r\n {...field}\r\n {...rest}\r\n counter={!!fieldState.error ? false : counter}\r\n maxLength={maxLength}\r\n ref={(el) => {\r\n field.ref(el);\r\n if (typeof ref === 'function') {\r\n ref(el);\r\n } else if (ref) {\r\n (ref as RefObject<HTMLInputElement | null>).current = el;\r\n }\r\n }}\r\n style={style}\r\n value={field.value || ''}\r\n onChange={(...rest) => {\r\n field.onChange?.(...rest);\r\n onChange?.(...rest);\r\n }}\r\n onPaste={(e) => {\r\n const pasted = e.clipboardData.getData('text');\r\n const input = e.currentTarget;\r\n\r\n const start = input.selectionStart ?? input.value.length;\r\n const end = input.selectionEnd ?? input.value.length;\r\n\r\n const current = input.value;\r\n\r\n let next = current.slice(0, start) + pasted + current.slice(end);\r\n\r\n if (onPastePrepare) {\r\n next = onPastePrepare(next, e);\r\n }\r\n\r\n if (typeof maxLength !== 'number') {\r\n e.preventDefault();\r\n\r\n form.setValue(name, next as PathValue<Data, Path<Data>>, {\r\n shouldDirty: true,\r\n shouldTouch: true,\r\n });\r\n\r\n return;\r\n }\r\n\r\n const before = current.slice(0, start);\r\n const after = current.slice(end);\r\n\r\n const available = maxLength - (before.length + after.length);\r\n\r\n if (available <= 0) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n const limitedPaste = pasted.slice(0, available);\r\n const limitedNext = before + limitedPaste + after;\r\n\r\n e.preventDefault();\r\n\r\n form.setValue(name, limitedNext as PathValue<Data, Path<Data>>, {\r\n shouldDirty: true,\r\n shouldTouch: true,\r\n });\r\n\r\n requestAnimationFrame(() => {\r\n input.setSelectionRange(\r\n before.length + limitedPaste.length,\r\n before.length + limitedPaste.length\r\n );\r\n });\r\n }}\r\n onBlur={(...rest) => {\r\n field.onBlur?.();\r\n onBlur?.(...rest);\r\n }}\r\n />\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n}\r\n\r\nexport const FormInput = forwardRef(FormInputInner) as <Data extends FieldValues>(\r\n props: FormInputProps<Data> & { ref?: Ref<HTMLInputElement> }\r\n) => ReactElement;\r\n"],"names":["FormInputInner","props","ref","form","tooltip","tooltipProps","label","name","maxLength","counter","onChange","onBlur","onPaste","style","onPastePrepare","rest","jsx","FormRenderControl","field","fieldState","FormControl","Input","el","e","pasted","input","start","end","current","next","before","after","available","limitedPaste","limitedNext","FormInput","forwardRef"],"mappings":";;;;;AA+CA,SAASA,EACPC,GACAC,GACA;AACA,QAAM,EAAE,MAAAC,GAAM,SAAAC,GAAS,cAAAC,GAAc,OAAAC,GAAO,MAAAC,GAAM,WAAAC,GAAW,SAAAC,GAAS,UAAAC,GAAU,QAAAC,GAAQ,SAAAC,GAAS,OAAAC,GAAO,gBAAAC,GAAgB,GAAGC,MAASd;AACpI,SACE,gBAAAe;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAd;AAAA,MACA,MAAAI;AAAA,MACA,SAAAH;AAAA,MACA,cAAAC;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAY,GAAO,YAAAC,EAAA,wBACfC,GAAA,EACC,UAAA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACE,GAAGH;AAAA,UACH,GAAGH;AAAA,UACJ,SAAWI,EAAW,QAAQ,KAAQV;AAAA,UACtC,WAAAD;AAAA,UACA,KAAK,CAACc,MAAO;AACX,YAAAJ,EAAM,IAAII,CAAE,GACR,OAAOpB,KAAQ,aACjBA,EAAIoB,CAAE,IACGpB,MACRA,EAA2C,UAAUoB;AAAA,UAE1D;AAAA,UACA,OAAAT;AAAA,UACA,OAAOK,EAAM,SAAS;AAAA,UACtB,UAAU,IAAIH,MAAS;AACrB,YAAAG,EAAM,WAAW,GAAGH,CAAI,GACxBL,IAAW,GAAGK,CAAI;AAAA,UACpB;AAAA,UACA,SAAS,CAACQ,MAAM;AACd,kBAAMC,IAASD,EAAE,cAAc,QAAQ,MAAM,GACvCE,IAAQF,EAAE,eAEVG,IAAQD,EAAM,kBAAkBA,EAAM,MAAM,QAC5CE,IAAMF,EAAM,gBAAgBA,EAAM,MAAM,QAExCG,IAAUH,EAAM;AAEtB,gBAAII,IAAOD,EAAQ,MAAM,GAAGF,CAAK,IAAIF,IAASI,EAAQ,MAAMD,CAAG;AAM/D,gBAJIb,MACFe,IAAOf,EAAee,GAAMN,CAAC,IAG3B,OAAOf,KAAc,UAAU;AACjC,cAAAe,EAAE,eAAA,GAEFpB,EAAK,SAASI,GAAMsB,GAAqC;AAAA,gBACvD,aAAa;AAAA,gBACb,aAAa;AAAA,cAAA,CACd;AAED;AAAA,YACF;AAEA,kBAAMC,IAASF,EAAQ,MAAM,GAAGF,CAAK,GAC/BK,IAAQH,EAAQ,MAAMD,CAAG,GAEzBK,IAAYxB,KAAasB,EAAO,SAASC,EAAM;AAErD,gBAAIC,KAAa,GAAG;AAClB,cAAAT,EAAE,eAAA;AACF;AAAA,YACF;AAEA,kBAAMU,IAAeT,EAAO,MAAM,GAAGQ,CAAS,GACxCE,IAAcJ,IAASG,IAAeF;AAE5C,YAAAR,EAAE,eAAA,GAEFpB,EAAK,SAASI,GAAM2B,GAA4C;AAAA,cAC9D,aAAa;AAAA,cACb,aAAa;AAAA,YAAA,CACd,GAED,sBAAsB,MAAM;AAC1B,cAAAT,EAAM;AAAA,gBACJK,EAAO,SAASG,EAAa;AAAA,gBAC7BH,EAAO,SAASG,EAAa;AAAA,cAAA;AAAA,YAEjC,CAAC;AAAA,UACH;AAAA,UACA,QAAQ,IAAIlB,MAAS;AACnB,YAAAG,EAAM,SAAA,GACNP,IAAS,GAAGI,CAAI;AAAA,UAClB;AAAA,QAAA;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;AAEO,MAAMoB,IAAYC,EAAWpC,CAAc;"}
@@ -4,8 +4,7 @@ import { useForm as n, FormProvider as m } from "react-hook-form";
4
4
  import { FormInput as o } from "./FormInput.js";
5
5
  import { FormTextarea as c } from "../FormTextarea/FormTextarea.js";
6
6
  import { Button as d } from "../Button/Button.js";
7
- import "../Button/buttonVariants.js";
8
- function p({ initialValue: e = "", ...t }) {
7
+ function f({ initialValue: e = "", ...t }) {
9
8
  const a = n({
10
9
  defaultValues: {
11
10
  name: e
@@ -33,7 +32,7 @@ function p({ initialValue: e = "", ...t }) {
33
32
  ] })
34
33
  ] }) });
35
34
  }
36
- const I = {
35
+ const w = {
37
36
  title: "FormInput",
38
37
  component: o,
39
38
  parameters: {
@@ -55,10 +54,10 @@ const I = {
55
54
  decorators: [
56
55
  (e) => /* @__PURE__ */ r("div", { className: "p-6 w-[420px]", children: /* @__PURE__ */ r(e, {}) })
57
56
  ]
58
- }, V = {
59
- render: (e) => /* @__PURE__ */ r(p, { ...e })
57
+ }, I = {
58
+ render: (e) => /* @__PURE__ */ r(f, { ...e })
60
59
  };
61
- function f(e) {
60
+ function p(e) {
62
61
  const t = n({ defaultValues: { name: "" } });
63
62
  return i(() => {
64
63
  t.setError("name", { message: "Це поле обовʼязкове" });
@@ -72,8 +71,8 @@ function f(e) {
72
71
  }
73
72
  ) }) });
74
73
  }
75
- const E = {
76
- render: (e) => /* @__PURE__ */ r(f, { ...e })
74
+ const V = {
75
+ render: (e) => /* @__PURE__ */ r(p, { ...e })
77
76
  }, u = (e) => {
78
77
  const t = {};
79
78
  return e.email?.trim() ? /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.email.trim()) || (t.email = { type: "pattern", message: "Невірний формат пошти" }) : t.email = { type: "required", message: "Обовʼязкове поле" }, e.fullName?.trim() || (t.fullName = { type: "required", message: "Обовʼязкове поле" }), e.description?.trim() ? e.description.trim().length < 10 && (t.description = { type: "minLength", message: "Мінімум 10 символів" }) : t.description = { type: "required", message: "Обовʼязкове поле" }, {
@@ -127,13 +126,13 @@ function h() {
127
126
  }
128
127
  ) });
129
128
  }
130
- const L = {
129
+ const E = {
131
130
  render: () => /* @__PURE__ */ r(h, {})
132
131
  };
133
132
  export {
134
- V as Default,
135
- L as HybridValidation,
136
- E as WithError,
137
- I as default
133
+ I as Default,
134
+ E as HybridValidation,
135
+ V as WithError,
136
+ w as default
138
137
  };
139
138
  //# sourceMappingURL=FormInput.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormInput.stories.js","sources":["../../src/FormInput/FormInput.stories.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react';\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { FormInput } from './FormInput';\nimport { FormTextarea } from '../FormTextarea';\nimport { Button } from '../Button';\n\ntype FormValues = {\n name: string;\n};\n\ntype ControlledProps = Omit<\n React.ComponentProps<typeof FormInput<FormValues>>,\n 'form' | 'name'\n> & {\n initialValue?: string;\n};\n\nfunction ControlledFormInput({ initialValue = '', ...args }: ControlledProps) {\n const form = useForm<FormValues>({\n defaultValues: {\n name: initialValue,\n },\n });\n\n const value = form.watch('name');\n const tooltip = \"UX/UI принципи, композиція, типографіка, колір, дизайн-системи та робота з інтерфейсами\"\n return (\n <FormProvider {...form}>\n <div className=\"max-w-sm space-y-3\">\n <FormInput<FormValues>\n form={form}\n name=\"name\"\n counter\n maxLength={255}\n tooltip={tooltip}\n label={\"Label\"}\n />\n\n <div className=\"text-xs text-muted-foreground\">\n value: <span className=\"font-mono\">{value}</span>\n </div>\n\n <div className=\"text-xs text-muted-foreground\">\n length: <span className=\"font-mono\">\n {value?.length ?? 0}\n </span>\n </div>\n </div>\n </FormProvider>\n );\n}\n\nconst meta = {\n title: 'FormInput',\n component: FormInput,\n parameters: {\n layout: 'centered',\n },\n args: {\n label: 'Input label',\n placeholder: 'Type something...',\n disabled: false,\n },\n argTypes: {\n form: { control: false },\n name: { control: false },\n onChange: { control: false },\n onBlur: { control: false },\n onPaste: { control: false },\n onPastePrepare: { control: false },\n },\n decorators: [\n (Story) => (\n <div className=\"p-6 w-[420px]\">\n <Story />\n </div>\n ),\n ],\n} satisfies Meta<typeof FormInput>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Default: Story = {\n render: (args) => <ControlledFormInput {...args} />,\n};\n\nfunction FormInputWithError(args: ControlledProps) {\n const form = useForm<FormValues>({ defaultValues: { name: '' } });\n\n useEffect(() => {\n form.setError('name', { message: 'Це поле обовʼязкове' });\n }, []);\n\n return (\n <FormProvider {...form}>\n <div className=\"max-w-sm\">\n <FormInput<FormValues>\n form={form}\n name=\"name\"\n label=\"Label\"\n {...args}\n />\n </div>\n </FormProvider>\n );\n}\n\nexport const WithError: Story = {\n render: (args) => <FormInputWithError {...args} />,\n};\n\n// Демонстрація гібридної моделі валідації (feat/1856):\n// - помилка з'являється на blur (mode: \"onTouched\")\n// - зникає миттєво при виправленні (on change), щойно значення стає валідним\n// - червона рамка + текст помилки під полем\n// - кнопка submit disabled, поки форма невалідна\ntype HybridValues = {\n email: string;\n fullName: string;\n description: string;\n};\n\nconst hybridResolver = (values: HybridValues) => {\n const errors: Record<string, { type: string; message: string }> = {};\n\n if (!values.email?.trim()) {\n errors.email = { type: 'required', message: \"Обовʼязкове поле\" };\n } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(values.email.trim())) {\n errors.email = { type: 'pattern', message: 'Невірний формат пошти' };\n }\n\n if (!values.fullName?.trim()) {\n errors.fullName = { type: 'required', message: \"Обовʼязкове поле\" };\n }\n\n if (!values.description?.trim()) {\n errors.description = { type: 'required', message: \"Обовʼязкове поле\" };\n } else if (values.description.trim().length < 10) {\n errors.description = { type: 'minLength', message: 'Мінімум 10 символів' };\n }\n\n return {\n values: Object.keys(errors).length ? {} : values,\n errors,\n };\n};\n\nfunction HybridValidationForm() {\n const form = useForm<HybridValues>({\n mode: 'onTouched',\n resolver: hybridResolver,\n defaultValues: { email: '', fullName: '', description: '' },\n });\n\n const { isValid, isSubmitting } = form.formState;\n\n return (\n <FormProvider {...form}>\n <form\n className=\"max-w-sm space-y-4\"\n onSubmit={form.handleSubmit(() => {\n alert('Форму надіслано ✅');\n })}\n >\n <FormInput<HybridValues>\n form={form}\n name=\"email\"\n label=\"Email\"\n placeholder=\"name@example.com\"\n />\n <FormInput<HybridValues>\n form={form}\n name=\"fullName\"\n label=\"Імʼя\"\n placeholder=\"Іван Петренко\"\n />\n <FormTextarea<HybridValues>\n form={form}\n name=\"description\"\n label=\"Опис\"\n placeholder=\"Мінімум 10 символів\"\n />\n <Button type=\"submit\" disabled={!isValid || isSubmitting} className=\"w-full\">\n Зберегти\n </Button>\n </form>\n </FormProvider>\n );\n}\n\nexport const HybridValidation: Story = {\n render: () => <HybridValidationForm />,\n};\n"],"names":["ControlledFormInput","initialValue","args","form","useForm","value","FormProvider","jsxs","jsx","FormInput","meta","Story","Default","FormInputWithError","useEffect","WithError","hybridResolver","values","errors","HybridValidationForm","isValid","isSubmitting","FormTextarea","Button","HybridValidation"],"mappings":"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"}
1
+ {"version":3,"file":"FormInput.stories.js","sources":["../../src/FormInput/FormInput.stories.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\r\nimport type { Meta, StoryObj } from '@storybook/react';\r\nimport { FormProvider, useForm } from 'react-hook-form';\r\n\r\nimport { FormInput } from './FormInput';\r\nimport { FormTextarea } from '../FormTextarea';\r\nimport { Button } from '../Button';\r\n\r\ntype FormValues = {\r\n name: string;\r\n};\r\n\r\ntype ControlledProps = Omit<\r\n React.ComponentProps<typeof FormInput<FormValues>>,\r\n 'form' | 'name'\r\n> & {\r\n initialValue?: string;\r\n};\r\n\r\nfunction ControlledFormInput({ initialValue = '', ...args }: ControlledProps) {\r\n const form = useForm<FormValues>({\r\n defaultValues: {\r\n name: initialValue,\r\n },\r\n });\r\n\r\n const value = form.watch('name');\r\n const tooltip = \"UX/UI принципи, композиція, типографіка, колір, дизайн-системи та робота з інтерфейсами\"\r\n return (\r\n <FormProvider {...form}>\r\n <div className=\"max-w-sm space-y-3\">\r\n <FormInput<FormValues>\r\n form={form}\r\n name=\"name\"\r\n counter\r\n maxLength={255}\r\n tooltip={tooltip}\r\n label={\"Label\"}\r\n />\r\n\r\n <div className=\"text-xs text-muted-foreground\">\r\n value: <span className=\"font-mono\">{value}</span>\r\n </div>\r\n\r\n <div className=\"text-xs text-muted-foreground\">\r\n length: <span className=\"font-mono\">\r\n {value?.length ?? 0}\r\n </span>\r\n </div>\r\n </div>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nconst meta = {\r\n title: 'FormInput',\r\n component: FormInput,\r\n parameters: {\r\n layout: 'centered',\r\n },\r\n args: {\r\n label: 'Input label',\r\n placeholder: 'Type something...',\r\n disabled: false,\r\n },\r\n argTypes: {\r\n form: { control: false },\r\n name: { control: false },\r\n onChange: { control: false },\r\n onBlur: { control: false },\r\n onPaste: { control: false },\r\n onPastePrepare: { control: false },\r\n },\r\n decorators: [\r\n (Story) => (\r\n <div className=\"p-6 w-[420px]\">\r\n <Story />\r\n </div>\r\n ),\r\n ],\r\n} satisfies Meta<typeof FormInput>;\r\n\r\nexport default meta;\r\n\r\ntype Story = StoryObj<typeof meta>;\r\n\r\nexport const Default: Story = {\r\n render: (args) => <ControlledFormInput {...args} />,\r\n};\r\n\r\nfunction FormInputWithError(args: ControlledProps) {\r\n const form = useForm<FormValues>({ defaultValues: { name: '' } });\r\n\r\n useEffect(() => {\r\n form.setError('name', { message: 'Це поле обовʼязкове' });\r\n }, []);\r\n\r\n return (\r\n <FormProvider {...form}>\r\n <div className=\"max-w-sm\">\r\n <FormInput<FormValues>\r\n form={form}\r\n name=\"name\"\r\n label=\"Label\"\r\n {...args}\r\n />\r\n </div>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nexport const WithError: Story = {\r\n render: (args) => <FormInputWithError {...args} />,\r\n};\r\n\r\n// Демонстрація гібридної моделі валідації (feat/1856):\r\n// - помилка з'являється на blur (mode: \"onTouched\")\r\n// - зникає миттєво при виправленні (on change), щойно значення стає валідним\r\n// - червона рамка + текст помилки під полем\r\n// - кнопка submit disabled, поки форма невалідна\r\ntype HybridValues = {\r\n email: string;\r\n fullName: string;\r\n description: string;\r\n};\r\n\r\nconst hybridResolver = (values: HybridValues) => {\r\n const errors: Record<string, { type: string; message: string }> = {};\r\n\r\n if (!values.email?.trim()) {\r\n errors.email = { type: 'required', message: \"Обовʼязкове поле\" };\r\n } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(values.email.trim())) {\r\n errors.email = { type: 'pattern', message: 'Невірний формат пошти' };\r\n }\r\n\r\n if (!values.fullName?.trim()) {\r\n errors.fullName = { type: 'required', message: \"Обовʼязкове поле\" };\r\n }\r\n\r\n if (!values.description?.trim()) {\r\n errors.description = { type: 'required', message: \"Обовʼязкове поле\" };\r\n } else if (values.description.trim().length < 10) {\r\n errors.description = { type: 'minLength', message: 'Мінімум 10 символів' };\r\n }\r\n\r\n return {\r\n values: Object.keys(errors).length ? {} : values,\r\n errors,\r\n };\r\n};\r\n\r\nfunction HybridValidationForm() {\r\n const form = useForm<HybridValues>({\r\n mode: 'onTouched',\r\n resolver: hybridResolver,\r\n defaultValues: { email: '', fullName: '', description: '' },\r\n });\r\n\r\n const { isValid, isSubmitting } = form.formState;\r\n\r\n return (\r\n <FormProvider {...form}>\r\n <form\r\n className=\"max-w-sm space-y-4\"\r\n onSubmit={form.handleSubmit(() => {\r\n alert('Форму надіслано ✅');\r\n })}\r\n >\r\n <FormInput<HybridValues>\r\n form={form}\r\n name=\"email\"\r\n label=\"Email\"\r\n placeholder=\"name@example.com\"\r\n />\r\n <FormInput<HybridValues>\r\n form={form}\r\n name=\"fullName\"\r\n label=\"Імʼя\"\r\n placeholder=\"Іван Петренко\"\r\n />\r\n <FormTextarea<HybridValues>\r\n form={form}\r\n name=\"description\"\r\n label=\"Опис\"\r\n placeholder=\"Мінімум 10 символів\"\r\n />\r\n <Button type=\"submit\" disabled={!isValid || isSubmitting} className=\"w-full\">\r\n Зберегти\r\n </Button>\r\n </form>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nexport const HybridValidation: Story = {\r\n render: () => <HybridValidationForm />,\r\n};\r\n"],"names":["ControlledFormInput","initialValue","args","form","useForm","value","FormProvider","jsxs","jsx","FormInput","meta","Story","Default","FormInputWithError","useEffect","WithError","hybridResolver","values","errors","HybridValidationForm","isValid","isSubmitting","FormTextarea","Button","HybridValidation"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormRadio.js","sources":["../../src/FormRadio/FormRadio.tsx"],"sourcesContent":["import { FieldValues } from 'react-hook-form';\n\nimport { FormControl, FormItem } from '../Form/Form';\nimport { FormRenderControl } from '../Form/FormRenderControl';\nimport { Radio } from '../Radio';\n\nimport type { FormRadioGroupProps } from './FormRadio.types.ts';\n\nexport const FormRadio = <Data extends FieldValues>(\n props: FormRadioGroupProps<Data>\n) => {\n const {\n form,\n name,\n label,\n onValueChange,\n value,\n defaultValue,\n renderOption,\n ...rest\n } = props;\n return (\n <FormRenderControl\n form={form}\n name={name}\n label={label}\n render={({ field }) => (\n <FormControl>\n <Radio\n {...field}\n {...rest}\n defaultValue={defaultValue || field.value}\n value={value || field.value}\n onValueChange={(value) => {\n field.onChange(value);\n onValueChange?.(value);\n }}\n renderOption={(option, DefaultOptionComponent) => {\n return (\n <FormItem key={option.value}>\n <FormControl>\n {renderOption?.(option, DefaultOptionComponent) || (\n <DefaultOptionComponent {...option} />\n )}\n </FormControl>\n </FormItem>\n );\n }}\n />\n </FormControl>\n )}\n />\n );\n};\n"],"names":["FormRadio","props","form","name","label","onValueChange","value","defaultValue","renderOption","rest","jsx","FormRenderControl","field","FormControl","Radio","option","DefaultOptionComponent","FormItem"],"mappings":";;;;AAQO,MAAMA,IAAY,CACvBC,MACG;AACH,QAAM;AAAA,IACJ,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,eAAAC;AAAA,IACA,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDR;AACJ,SACE,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,MAAAC;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAQ,EAAA,wBACRC,GAAA,EACC,UAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACE,GAAGF;AAAA,UACH,GAAGH;AAAA,UACJ,cAAcF,KAAgBK,EAAM;AAAA,UACpC,OAAON,KAASM,EAAM;AAAA,UACtB,eAAe,CAACN,MAAU;AACxB,YAAAM,EAAM,SAASN,CAAK,GACpBD,IAAgBC,CAAK;AAAA,UACvB;AAAA,UACA,cAAc,CAACS,GAAQC,MAEnB,gBAAAN,EAACO,GAAA,EACC,UAAA,gBAAAP,EAACG,GAAA,EACE,cAAeE,GAAQC,CAAsB,KAC5C,gBAAAN,EAACM,KAAwB,GAAGD,EAAA,CAAQ,GAExC,EAAA,GALaA,EAAO,KAMtB;AAAA,QAEJ;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"FormRadio.js","sources":["../../src/FormRadio/FormRadio.tsx"],"sourcesContent":["import { FieldValues } from 'react-hook-form';\r\n\r\nimport { FormControl, FormItem } from '../Form/Form';\r\nimport { FormRenderControl } from '../Form/FormRenderControl';\r\nimport { Radio } from '../Radio';\r\n\r\nimport type { FormRadioGroupProps } from './FormRadio.types.ts';\r\n\r\nexport const FormRadio = <Data extends FieldValues>(\r\n props: FormRadioGroupProps<Data>\r\n) => {\r\n const {\r\n form,\r\n name,\r\n label,\r\n onValueChange,\r\n value,\r\n defaultValue,\r\n renderOption,\r\n ...rest\r\n } = props;\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n name={name}\r\n label={label}\r\n render={({ field }) => (\r\n <FormControl>\r\n <Radio\r\n {...field}\r\n {...rest}\r\n defaultValue={defaultValue || field.value}\r\n value={value || field.value}\r\n onValueChange={(value) => {\r\n field.onChange(value);\r\n onValueChange?.(value);\r\n }}\r\n renderOption={(option, DefaultOptionComponent) => {\r\n return (\r\n <FormItem key={option.value}>\r\n <FormControl>\r\n {renderOption?.(option, DefaultOptionComponent) || (\r\n <DefaultOptionComponent {...option} />\r\n )}\r\n </FormControl>\r\n </FormItem>\r\n );\r\n }}\r\n />\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n};\r\n"],"names":["FormRadio","props","form","name","label","onValueChange","value","defaultValue","renderOption","rest","jsx","FormRenderControl","field","FormControl","Radio","option","DefaultOptionComponent","FormItem"],"mappings":";;;;AAQO,MAAMA,IAAY,CACvBC,MACG;AACH,QAAM;AAAA,IACJ,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,eAAAC;AAAA,IACA,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDR;AACJ,SACE,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,MAAAC;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAQ,EAAA,wBACRC,GAAA,EACC,UAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACE,GAAGF;AAAA,UACH,GAAGH;AAAA,UACJ,cAAcF,KAAgBK,EAAM;AAAA,UACpC,OAAON,KAASM,EAAM;AAAA,UACtB,eAAe,CAACN,MAAU;AACxB,YAAAM,EAAM,SAASN,CAAK,GACpBD,IAAgBC,CAAK;AAAA,UACvB;AAAA,UACA,cAAc,CAACS,GAAQC,MAEnB,gBAAAN,EAACO,GAAA,EACC,UAAA,gBAAAP,EAACG,GAAA,EACE,cAAeE,GAAQC,CAAsB,KAC5C,gBAAAN,EAACM,KAAwB,GAAGD,EAAA,CAAQ,GAExC,EAAA,GALaA,EAAO,KAMtB;AAAA,QAEJ;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,15 +1,12 @@
1
1
  import { jsx as n } from "react/jsx-runtime";
2
- import { FormControl as B } from "../Form/Form.js";
2
+ import { Select as B } from "../Select/Select.js";
3
3
  import { FormRenderControl as F } from "../Form/FormRenderControl.js";
4
- import "@radix-ui/react-select";
5
- import "lucide-react";
6
- import "@oneplatformdev/utils";
7
- import { Select as P } from "../Select/Select.js";
8
- const V = (m) => {
4
+ import { FormControl as P } from "../Form/Form.js";
5
+ const b = (m) => {
9
6
  const {
10
- value: i = void 0,
11
- form: p,
12
- label: l,
7
+ value: l = void 0,
8
+ form: i,
9
+ label: p,
13
10
  tooltip: a,
14
11
  tooltipProps: g,
15
12
  name: s,
@@ -24,16 +21,16 @@ const V = (m) => {
24
21
  return /* @__PURE__ */ n(
25
22
  F,
26
23
  {
27
- form: p,
24
+ form: i,
28
25
  name: s,
29
26
  tooltip: a,
30
27
  tooltipProps: g,
31
- label: l,
28
+ label: p,
32
29
  containerProps: h,
33
30
  render: ({ field: e }) => /* @__PURE__ */ n(
34
- P,
31
+ B,
35
32
  {
36
- value: e.value ?? (i || ""),
33
+ value: e.value ?? (l || ""),
37
34
  options: c,
38
35
  onBlur: () => {
39
36
  e.onBlur(), d?.();
@@ -42,7 +39,7 @@ const V = (m) => {
42
39
  const o = t ? t(r) : r;
43
40
  e.onChange(o), u?.(r, o);
44
41
  },
45
- renderTrigger: (r, o) => /* @__PURE__ */ n(B, { children: C?.(r, o) || o }),
42
+ renderTrigger: (r, o) => /* @__PURE__ */ n(P, { children: C?.(r, o) || o }),
46
43
  ...x
47
44
  }
48
45
  )
@@ -50,6 +47,6 @@ const V = (m) => {
50
47
  );
51
48
  };
52
49
  export {
53
- V as FormSelect
50
+ b as FormSelect
54
51
  };
55
52
  //# sourceMappingURL=FormSelect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormSelect.js","sources":["../../src/FormSelect/FormSelect.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\nimport { Select } from '../Select';\nimport { FormSelectProps } from './FormSelect.types';\nimport { FieldValues } from 'react-hook-form';\n\n// TODO: add description\nexport const FormSelect = <Data extends FieldValues, ExtendOptionData>(\n props: FormSelectProps<Data, ExtendOptionData>\n) => {\n const {\n value = undefined,\n form,\n label,\n tooltip,\n tooltipProps,\n name,\n options = [],\n onChange,\n containerProps,\n renderTrigger,\n onChangePrepare,\n onBlur,\n ...rest\n } = props;\n\n return (\n <FormRenderControl\n form={form}\n name={name}\n tooltip={tooltip}\n tooltipProps={tooltipProps}\n label={label}\n containerProps={containerProps}\n render={({ field }) => (\n <Select<ExtendOptionData>\n value={field.value ?? (value || '')}\n options={options}\n onBlur={() => {\n field.onBlur();\n onBlur?.();\n }}\n onChange={(value) => {\n const nextValue = onChangePrepare ? onChangePrepare(value) : value;\n field.onChange(nextValue);\n onChange?.(value, nextValue);\n }}\n renderTrigger={(p, defaultComponent) => {\n return (\n <FormControl>\n {renderTrigger?.(p, defaultComponent) || defaultComponent}\n </FormControl>\n )\n }}\n {...rest}\n />\n )}\n />\n );\n};\n"],"names":["FormSelect","props","value","form","label","tooltip","tooltipProps","name","options","onChange","containerProps","renderTrigger","onChangePrepare","onBlur","rest","jsx","FormRenderControl","field","Select","nextValue","p","defaultComponent","FormControl"],"mappings":";;;;;;;AAMO,MAAMA,IAAa,CACxBC,MACG;AACH,QAAM;AAAA,IACJ,OAAAC,IAAQ;AAAA,IACR,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC,IAAU,CAAA;AAAA,IACV,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,QAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDb;AAEJ,SACE,gBAAAc;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAb;AAAA,MACA,MAAAI;AAAA,MACA,SAAAF;AAAA,MACA,cAAAC;AAAA,MACA,OAAAF;AAAA,MACA,gBAAAM;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAO,EAAA,MACT,gBAAAF;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,OAAOD,EAAM,UAAUf,KAAS;AAAA,UAChC,SAAAM;AAAA,UACA,QAAQ,MAAM;AACZ,YAAAS,EAAM,OAAA,GACNJ,IAAA;AAAA,UACF;AAAA,UACA,UAAU,CAACX,MAAU;AACnB,kBAAMiB,IAAYP,IAAkBA,EAAgBV,CAAK,IAAIA;AAC7D,YAAAe,EAAM,SAASE,CAAS,GACxBV,IAAWP,GAAOiB,CAAS;AAAA,UAC7B;AAAA,UACA,eAAe,CAACC,GAAGC,wBAEdC,GAAA,EACE,UAAAX,IAAgBS,GAAGC,CAAgB,KAAKA,GAC3C;AAAA,UAGH,GAAGP;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"FormSelect.js","sources":["../../src/FormSelect/FormSelect.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\r\nimport { Select } from '../Select';\r\nimport { FormSelectProps } from './FormSelect.types';\r\nimport { FieldValues } from 'react-hook-form';\r\n\r\n// TODO: add description\r\nexport const FormSelect = <Data extends FieldValues, ExtendOptionData>(\r\n props: FormSelectProps<Data, ExtendOptionData>\r\n) => {\r\n const {\r\n value = undefined,\r\n form,\r\n label,\r\n tooltip,\r\n tooltipProps,\r\n name,\r\n options = [],\r\n onChange,\r\n containerProps,\r\n renderTrigger,\r\n onChangePrepare,\r\n onBlur,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n name={name}\r\n tooltip={tooltip}\r\n tooltipProps={tooltipProps}\r\n label={label}\r\n containerProps={containerProps}\r\n render={({ field }) => (\r\n <Select<ExtendOptionData>\r\n value={field.value ?? (value || '')}\r\n options={options}\r\n onBlur={() => {\r\n field.onBlur();\r\n onBlur?.();\r\n }}\r\n onChange={(value) => {\r\n const nextValue = onChangePrepare ? onChangePrepare(value) : value;\r\n field.onChange(nextValue);\r\n onChange?.(value, nextValue);\r\n }}\r\n renderTrigger={(p, defaultComponent) => {\r\n return (\r\n <FormControl>\r\n {renderTrigger?.(p, defaultComponent) || defaultComponent}\r\n </FormControl>\r\n )\r\n }}\r\n {...rest}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n"],"names":["FormSelect","props","value","form","label","tooltip","tooltipProps","name","options","onChange","containerProps","renderTrigger","onChangePrepare","onBlur","rest","jsx","FormRenderControl","field","Select","nextValue","p","defaultComponent","FormControl"],"mappings":";;;;AAMO,MAAMA,IAAa,CACxBC,MACG;AACH,QAAM;AAAA,IACJ,OAAAC,IAAQ;AAAA,IACR,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC,IAAU,CAAA;AAAA,IACV,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,QAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDb;AAEJ,SACE,gBAAAc;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAb;AAAA,MACA,MAAAI;AAAA,MACA,SAAAF;AAAA,MACA,cAAAC;AAAA,MACA,OAAAF;AAAA,MACA,gBAAAM;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAO,EAAA,MACT,gBAAAF;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,OAAOD,EAAM,UAAUf,KAAS;AAAA,UAChC,SAAAM;AAAA,UACA,QAAQ,MAAM;AACZ,YAAAS,EAAM,OAAA,GACNJ,IAAA;AAAA,UACF;AAAA,UACA,UAAU,CAACX,MAAU;AACnB,kBAAMiB,IAAYP,IAAkBA,EAAgBV,CAAK,IAAIA;AAC7D,YAAAe,EAAM,SAASE,CAAS,GACxBV,IAAWP,GAAOiB,CAAS;AAAA,UAC7B;AAAA,UACA,eAAe,CAACC,GAAGC,wBAEdC,GAAA,EACE,UAAAX,IAAgBS,GAAGC,CAAgB,KAAKA,GAC3C;AAAA,UAGH,GAAGP;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAIR;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as r } from "react/jsx-runtime";
2
- import { FormControl as f } from "../Form/Form.js";
2
+ import { Textarea as f } from "../Textarea/Textarea.js";
3
3
  import { FormRenderControl as u } from "../Form/FormRenderControl.js";
4
- import { Textarea as x } from "../Textarea/Textarea.js";
4
+ import { FormControl as x } from "../Form/Form.js";
5
5
  const P = (e) => {
6
6
  const { form: t, label: m, tooltip: n, tooltipProps: a, name: l, containerProps: p, counter: i, ...s } = e;
7
7
  return /* @__PURE__ */ r(
@@ -13,8 +13,8 @@ const P = (e) => {
13
13
  name: l,
14
14
  label: m,
15
15
  containerProps: p,
16
- render: ({ field: o, fieldState: c }) => /* @__PURE__ */ r(f, { children: /* @__PURE__ */ r(
17
- x,
16
+ render: ({ field: o, fieldState: c }) => /* @__PURE__ */ r(x, { children: /* @__PURE__ */ r(
17
+ f,
18
18
  {
19
19
  ...o,
20
20
  value: o.value || "",
@@ -1 +1 @@
1
- {"version":3,"file":"FormTextarea.js","sources":["../../src/FormTextarea/FormTextarea.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\nimport { FormTextareaProps } from './FormTextarea.types';\nimport { FieldValues } from 'react-hook-form';\nimport { Textarea } from '../Textarea';\n\n// TODO: add description\nexport const FormTextarea = <Data extends FieldValues>(\n props: FormTextareaProps<Data>\n) => {\n const { form, label, tooltip, tooltipProps, name, containerProps, counter, ...rest } = props;\n return (\n <FormRenderControl\n form={form}\n tooltip={tooltip}\n tooltipProps={tooltipProps}\n name={name}\n label={label}\n containerProps={containerProps}\n render={({ field, fieldState }) => (\n <FormControl>\n <Textarea\n {...field}\n value={field.value || ''}\n {...rest}\n counter={!!fieldState.error ? false : counter}\n />\n </FormControl>\n )}\n />\n )\n};\n"],"names":["FormTextarea","props","form","label","tooltip","tooltipProps","name","containerProps","counter","rest","jsx","FormRenderControl","field","fieldState","FormControl","Textarea"],"mappings":";;;;AAMO,MAAMA,IAAe,CAC1BC,MACG;AACH,QAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,SAAAC,GAAS,cAAAC,GAAc,MAAAC,GAAM,gBAAAC,GAAgB,SAAAC,GAAS,GAAGC,EAAA,IAASR;AACvF,SACE,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,SAAAE;AAAA,MACA,cAAAC;AAAA,MACA,MAAAC;AAAA,MACA,OAAAH;AAAA,MACA,gBAAAI;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAK,GAAO,YAAAC,EAAA,wBACfC,GAAA,EACC,UAAA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACE,GAAGH;AAAA,UACJ,OAAOA,EAAM,SAAS;AAAA,UACrB,GAAGH;AAAA,UACJ,SAAWI,EAAW,QAAQ,KAAQL;AAAA,QAAA;AAAA,MAAA,EACxC,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"FormTextarea.js","sources":["../../src/FormTextarea/FormTextarea.tsx"],"sourcesContent":["import { FormControl, FormRenderControl } from '../Form';\r\nimport { FormTextareaProps } from './FormTextarea.types';\r\nimport { FieldValues } from 'react-hook-form';\r\nimport { Textarea } from '../Textarea';\r\n\r\n// TODO: add description\r\nexport const FormTextarea = <Data extends FieldValues>(\r\n props: FormTextareaProps<Data>\r\n) => {\r\n const { form, label, tooltip, tooltipProps, name, containerProps, counter, ...rest } = props;\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n tooltip={tooltip}\r\n tooltipProps={tooltipProps}\r\n name={name}\r\n label={label}\r\n containerProps={containerProps}\r\n render={({ field, fieldState }) => (\r\n <FormControl>\r\n <Textarea\r\n {...field}\r\n value={field.value || ''}\r\n {...rest}\r\n counter={!!fieldState.error ? false : counter}\r\n />\r\n </FormControl>\r\n )}\r\n />\r\n )\r\n};\r\n"],"names":["FormTextarea","props","form","label","tooltip","tooltipProps","name","containerProps","counter","rest","jsx","FormRenderControl","field","fieldState","FormControl","Textarea"],"mappings":";;;;AAMO,MAAMA,IAAe,CAC1BC,MACG;AACH,QAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,SAAAC,GAAS,cAAAC,GAAc,MAAAC,GAAM,gBAAAC,GAAgB,SAAAC,GAAS,GAAGC,EAAA,IAASR;AACvF,SACE,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,SAAAE;AAAA,MACA,cAAAC;AAAA,MACA,MAAAC;AAAA,MACA,OAAAH;AAAA,MACA,gBAAAI;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAK,GAAO,YAAAC,EAAA,wBACfC,GAAA,EACC,UAAA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACE,GAAGH;AAAA,UACJ,OAAOA,EAAM,SAAS;AAAA,UACrB,GAAGH;AAAA,UACJ,SAAWI,EAAW,QAAQ,KAAQL;AAAA,QAAA;AAAA,MAAA,EACxC,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sources":["../../src/Header/Header.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { SidebarTrigger } from \"../Sidebar\";\nimport { Separator } from \"../Separator\";\nimport { HeaderProps } from \"./Header.types\";\n\nexport const Header: React.FC<React.PropsWithChildren<HeaderProps>> = (props) => {\n const {\n children,\n hideTrigger = false,\n } = props;\n return (\n <header\n className=\"flex h-16 shrink-0 items-center justify-between gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\"\n >\n {!hideTrigger && (\n <div className=\"flex items-center gap-2\">\n <SidebarTrigger className=\"ml-1\"/>\n <Separator orientation=\"vertical\" className=\"mr-2 h-4\"/>\n </div>\n )}\n {Boolean(hideTrigger)\n ? children\n : (\n <div className=\"flex-1 text-right pr-6\">\n {children}\n </div>\n )\n }\n </header>\n )\n}\n\nexport default Header;\n"],"names":["Header","props","children","hideTrigger","jsxs","jsx","SidebarTrigger","Separator"],"mappings":";;;AAMO,MAAMA,IAAyD,CAACC,MAAU;AAC/E,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,EAAA,IACZF;AACJ,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MAET,UAAA;AAAA,QAAA,CAACD,KACA,gBAAAC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAA,gBAAAC,EAACC,GAAA,EAAe,WAAU,OAAA,CAAM;AAAA,UAChC,gBAAAD,EAACE,GAAA,EAAU,aAAY,YAAW,WAAU,WAAA,CAAU;AAAA,QAAA,GACxD;AAAA,QAEOJ,IACLD,sBAEC,OAAA,EAAI,WAAU,0BACZ,UAAAA,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAKV;"}
1
+ {"version":3,"file":"Header.js","sources":["../../src/Header/Header.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\nimport { SidebarTrigger } from \"../Sidebar\";\r\nimport { Separator } from \"../Separator\";\r\nimport { HeaderProps } from \"./Header.types\";\r\n\r\nexport const Header: React.FC<React.PropsWithChildren<HeaderProps>> = (props) => {\r\n const {\r\n children,\r\n hideTrigger = false,\r\n } = props;\r\n return (\r\n <header\r\n className=\"flex h-16 shrink-0 items-center justify-between gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\"\r\n >\r\n {!hideTrigger && (\r\n <div className=\"flex items-center gap-2\">\r\n <SidebarTrigger className=\"ml-1\"/>\r\n <Separator orientation=\"vertical\" className=\"mr-2 h-4\"/>\r\n </div>\r\n )}\r\n {Boolean(hideTrigger)\r\n ? children\r\n : (\r\n <div className=\"flex-1 text-right pr-6\">\r\n {children}\r\n </div>\r\n )\r\n }\r\n </header>\r\n )\r\n}\r\n\r\nexport default Header;\r\n"],"names":["Header","props","children","hideTrigger","jsxs","jsx","SidebarTrigger","Separator"],"mappings":";;;AAMO,MAAMA,IAAyD,CAACC,MAAU;AAC/E,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,EAAA,IACZF;AACJ,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MAET,UAAA;AAAA,QAAA,CAACD,KACA,gBAAAC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAA,gBAAAC,EAACC,GAAA,EAAe,WAAU,OAAA,CAAM;AAAA,UAChC,gBAAAD,EAACE,GAAA,EAAU,aAAY,YAAW,WAAU,WAAA,CAAU;AAAA,QAAA,GACxD;AAAA,QAEOJ,IACLD,sBAEC,OAAA,EAAI,WAAU,0BACZ,UAAAA,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAKV;"}
@@ -1 +1 @@
1
- {"version":3,"file":"HoverCard.js","sources":["../../src/HoverCard/HoverCard.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"@oneplatformdev/utils\"\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n"],"names":["HoverCard","HoverCardPrimitive","HoverCardTrigger","HoverCardContent","React","className","align","sideOffset","props","ref","jsx","cn"],"mappings":";;;;AAOA,MAAMA,IAAYC,EAAmB,MAE/BC,IAAmBD,EAAmB,SAEtCE,IAAmBC,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,OAAAC,IAAQ,UAAU,YAAAC,IAAa,GAAG,GAAGC,EAAA,GAASC,MAC5D,gBAAAC;AAAA,EAACT,EAAmB;AAAA,EAAnB;AAAA,IACC,KAAAQ;AAAA,IACA,OAAAH;AAAA,IACA,YAAAC;AAAA,IACA,WAAWI;AAAA,MACT;AAAA,MACAN;AAAA,IAAA;AAAA,IAED,GAAGG;AAAA,EAAA;AACN,CACD;AACDL,EAAiB,cAAcF,EAAmB,QAAQ;"}
1
+ {"version":3,"file":"HoverCard.js","sources":["../../src/HoverCard/HoverCard.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\r\n\r\nimport { cn } from \"@oneplatformdev/utils\"\r\n\r\nconst HoverCard = HoverCardPrimitive.Root\r\n\r\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\r\n\r\nconst HoverCardContent = React.forwardRef<\r\n React.ElementRef<typeof HoverCardPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\r\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\r\n <HoverCardPrimitive.Content\r\n ref={ref}\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\r\n\r\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\r\n"],"names":["HoverCard","HoverCardPrimitive","HoverCardTrigger","HoverCardContent","React","className","align","sideOffset","props","ref","jsx","cn"],"mappings":";;;;AAOA,MAAMA,IAAYC,EAAmB,MAE/BC,IAAmBD,EAAmB,SAEtCE,IAAmBC,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,OAAAC,IAAQ,UAAU,YAAAC,IAAa,GAAG,GAAGC,EAAA,GAASC,MAC5D,gBAAAC;AAAA,EAACT,EAAmB;AAAA,EAAnB;AAAA,IACC,KAAAQ;AAAA,IACA,OAAAH;AAAA,IACA,YAAAC;AAAA,IACA,WAAWI;AAAA,MACT;AAAA,MACAN;AAAA,IAAA;AAAA,IAED,GAAGG;AAAA,EAAA;AACN,CACD;AACDL,EAAiB,cAAcF,EAAmB,QAAQ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"InfoBlock.js","sources":["../../src/InfoBlock/InfoBlock.tsx"],"sourcesContent":["import { InfoBlockIconType, InfoBlockProps } from \"./InfoBlock.types\";\nimport { cn } from \"@oneplatformdev/utils\";\nimport { infoBlockVariants } from \"./infoBlockVariants\";\nimport { createElement, isValidElement } from \"react\";\nimport { TriangleAlertIcon, InfoIcon } from \"lucide-react\";\n\nconst renderInnerIcon = (Icon?: InfoBlockIconType) => {\n if (!Icon) return null;\n if (isValidElement(Icon)) return Icon;\n return createElement(Icon);\n};\n\nconst iconByVariant: Record<NonNullable<InfoBlockProps['variant']>, InfoBlockIconType> = {\n error: <TriangleAlertIcon className='fill-[#DC2626] text-white!'/>,\n info: <InfoIcon className='fill-[#9368FF] text-white!'/>\n}\n\nexport const InfoBlock = (props: InfoBlockProps) => {\n const { className, variant = 'error', content, icon, children, node, ...rest } = props;\n return (\n <div\n {...rest}\n className={cn(infoBlockVariants({ className, variant }))}\n >\n {children ?? (\n <>\n {renderInnerIcon(icon ?? iconByVariant[variant!])}\n {node ?? (\n <span className='whitespace-pre-wrap wrap-break-word line-clamp-10'>\n {content}\n </span>\n )}\n </>\n )}\n </div>\n )\n}\nInfoBlock.displayName = 'InfoBlock';\nexport default InfoBlock;\n\n"],"names":["renderInnerIcon","Icon","isValidElement","createElement","iconByVariant","jsx","TriangleAlertIcon","InfoIcon","InfoBlock","props","className","variant","content","icon","children","node","rest","cn","infoBlockVariants","jsxs","Fragment"],"mappings":";;;;;AAMA,MAAMA,IAAkB,CAACC,MAClBA,IACDC,EAAeD,CAAI,IAAUA,IAC1BE,EAAcF,CAAI,IAFP,MAKdG,IAAmF;AAAA,EACvF,OAAO,gBAAAC,EAACC,GAAA,EAAkB,WAAU,6BAAA,CAA4B;AAAA,EAChE,MAAM,gBAAAD,EAACE,GAAA,EAAS,WAAU,6BAAA,CAA4B;AACxD,GAEaC,IAAY,CAACC,MAA0B;AAClD,QAAM,EAAE,WAAAC,GAAW,SAAAC,IAAU,SAAS,SAAAC,GAAS,MAAAC,GAAM,UAAAC,GAAU,MAAAC,GAAM,GAAGC,EAAA,IAASP;AACjF,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGW;AAAA,MACJ,WAAWC,EAAGC,EAAkB,EAAE,WAAAR,GAAW,SAAAC,EAAA,CAAS,CAAC;AAAA,MAEtD,eACC,gBAAAQ,EAAAC,GAAA,EACG,UAAA;AAAA,QAAApB,EAAgBa,KAAQT,EAAcO,CAAQ,CAAC;AAAA,QAC/CI,KACC,gBAAAV,EAAC,QAAA,EAAK,WAAU,qDACf,UAAAO,EAAA,CACH;AAAA,MAAA,EAAA,CAEF;AAAA,IAAA;AAAA,EAAA;AAIR;AACAJ,EAAU,cAAc;"}
1
+ {"version":3,"file":"InfoBlock.js","sources":["../../src/InfoBlock/InfoBlock.tsx"],"sourcesContent":["import { InfoBlockIconType, InfoBlockProps } from \"./InfoBlock.types\";\r\nimport { cn } from \"@oneplatformdev/utils\";\r\nimport { infoBlockVariants } from \"./infoBlockVariants\";\r\nimport { createElement, isValidElement } from \"react\";\r\nimport { TriangleAlertIcon, InfoIcon } from \"lucide-react\";\r\n\r\nconst renderInnerIcon = (Icon?: InfoBlockIconType) => {\r\n if (!Icon) return null;\r\n if (isValidElement(Icon)) return Icon;\r\n return createElement(Icon);\r\n};\r\n\r\nconst iconByVariant: Record<NonNullable<InfoBlockProps['variant']>, InfoBlockIconType> = {\r\n error: <TriangleAlertIcon className='fill-[#DC2626] text-white!'/>,\r\n info: <InfoIcon className='fill-[#9368FF] text-white!'/>\r\n}\r\n\r\nexport const InfoBlock = (props: InfoBlockProps) => {\r\n const { className, variant = 'error', content, icon, children, node, ...rest } = props;\r\n return (\r\n <div\r\n {...rest}\r\n className={cn(infoBlockVariants({ className, variant }))}\r\n >\r\n {children ?? (\r\n <>\r\n {renderInnerIcon(icon ?? iconByVariant[variant!])}\r\n {node ?? (\r\n <span className='whitespace-pre-wrap wrap-break-word line-clamp-10'>\r\n {content}\r\n </span>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n )\r\n}\r\nInfoBlock.displayName = 'InfoBlock';\r\nexport default InfoBlock;\r\n\r\n"],"names":["renderInnerIcon","Icon","isValidElement","createElement","iconByVariant","jsx","TriangleAlertIcon","InfoIcon","InfoBlock","props","className","variant","content","icon","children","node","rest","cn","infoBlockVariants","jsxs","Fragment"],"mappings":";;;;;AAMA,MAAMA,IAAkB,CAACC,MAClBA,IACDC,EAAeD,CAAI,IAAUA,IAC1BE,EAAcF,CAAI,IAFP,MAKdG,IAAmF;AAAA,EACvF,OAAO,gBAAAC,EAACC,GAAA,EAAkB,WAAU,6BAAA,CAA4B;AAAA,EAChE,MAAM,gBAAAD,EAACE,GAAA,EAAS,WAAU,6BAAA,CAA4B;AACxD,GAEaC,IAAY,CAACC,MAA0B;AAClD,QAAM,EAAE,WAAAC,GAAW,SAAAC,IAAU,SAAS,SAAAC,GAAS,MAAAC,GAAM,UAAAC,GAAU,MAAAC,GAAM,GAAGC,EAAA,IAASP;AACjF,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGW;AAAA,MACJ,WAAWC,EAAGC,EAAkB,EAAE,WAAAR,GAAW,SAAAC,EAAA,CAAS,CAAC;AAAA,MAEtD,eACC,gBAAAQ,EAAAC,GAAA,EACG,UAAA;AAAA,QAAApB,EAAgBa,KAAQT,EAAcO,CAAQ,CAAC;AAAA,QAC/CI,KACC,gBAAAV,EAAC,QAAA,EAAK,WAAU,qDACf,UAAAO,EAAA,CACH;AAAA,MAAA,EAAA,CAEF;AAAA,IAAA;AAAA,EAAA;AAIR;AACAJ,EAAU,cAAc;"}
@@ -1 +1 @@
1
- {"version":3,"file":"InfoBlock.stories.js","sources":["../../src/InfoBlock/InfoBlock.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite';\nimport { InfoBlock } from './InfoBlock';\nimport { CircleAlert } from 'lucide-react';\n\nconst meta = {\n title: 'UI/InfoBlock',\n component: InfoBlock,\n argTypes: {\n variant: {\n control: 'select',\n options: ['error', 'info'],\n description: 'Defines the color scheme and default icon',\n },\n content: {\n control: 'text',\n description: 'Text or content inside the block',\n },\n },\n parameters: {\n layout: 'centered',\n },\n} satisfies Meta<typeof InfoBlock>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Error: Story = {\n args: {\n variant: 'error',\n content: 'Увага! Перш ніж архівувати підрозділ “Підрозділ дизайну”, переведіть співробітників до іншого — інакше вони будуть автоматично звільнені.',\n },\n};\n\nexport const Info: Story = {\n args: {\n variant: 'info',\n content: 'Зміни вступлять в силу після збереження налаштувань профілю.',\n },\n};\n\nexport const CustomIcon: Story = {\n args: {\n variant: 'info',\n icon: <CircleAlert className=\"text-blue-500\" />,\n content: 'Цей блок використовує передану вручну іконку замість стандартної.',\n },\n};\n\nexport const LongContent: Story = {\n args: {\n variant: 'error',\n content: 'Дуже довгий текст: '.repeat(20),\n },\n};\n"],"names":["meta","InfoBlock","Error","Info","CustomIcon","jsx","CircleAlert","LongContent"],"mappings":";;;AAIA,MAAMA,IAAO;AAAA,EACX,OAAO;AAAA,EACP,WAAWC;AAAA,EACX,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS,CAAC,SAAS,MAAM;AAAA,MACzB,aAAa;AAAA,IAAA;AAAA,IAEf,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,EACf;AAAA,EAEF,YAAY;AAAA,IACV,QAAQ;AAAA,EAAA;AAEZ,GAMaC,IAAe;AAAA,EAC1B,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEb,GAEaC,IAAc;AAAA,EACzB,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEb,GAEaC,IAAoB;AAAA,EAC/B,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,MAAM,gBAAAC,EAACC,GAAA,EAAY,WAAU,gBAAA,CAAgB;AAAA,IAC7C,SAAS;AAAA,EAAA;AAEb,GAEaC,IAAqB;AAAA,EAChC,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS,sBAAsB,OAAO,EAAE;AAAA,EAAA;AAE5C;"}
1
+ {"version":3,"file":"InfoBlock.stories.js","sources":["../../src/InfoBlock/InfoBlock.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite';\r\nimport { InfoBlock } from './InfoBlock';\r\nimport { CircleAlert } from 'lucide-react';\r\n\r\nconst meta = {\r\n title: 'UI/InfoBlock',\r\n component: InfoBlock,\r\n argTypes: {\r\n variant: {\r\n control: 'select',\r\n options: ['error', 'info'],\r\n description: 'Defines the color scheme and default icon',\r\n },\r\n content: {\r\n control: 'text',\r\n description: 'Text or content inside the block',\r\n },\r\n },\r\n parameters: {\r\n layout: 'centered',\r\n },\r\n} satisfies Meta<typeof InfoBlock>;\r\n\r\nexport default meta;\r\n\r\ntype Story = StoryObj<typeof meta>;\r\n\r\nexport const Error: Story = {\r\n args: {\r\n variant: 'error',\r\n content: 'Увага! Перш ніж архівувати підрозділ “Підрозділ дизайну”, переведіть співробітників до іншого — інакше вони будуть автоматично звільнені.',\r\n },\r\n};\r\n\r\nexport const Info: Story = {\r\n args: {\r\n variant: 'info',\r\n content: 'Зміни вступлять в силу після збереження налаштувань профілю.',\r\n },\r\n};\r\n\r\nexport const CustomIcon: Story = {\r\n args: {\r\n variant: 'info',\r\n icon: <CircleAlert className=\"text-blue-500\" />,\r\n content: 'Цей блок використовує передану вручну іконку замість стандартної.',\r\n },\r\n};\r\n\r\nexport const LongContent: Story = {\r\n args: {\r\n variant: 'error',\r\n content: 'Дуже довгий текст: '.repeat(20),\r\n },\r\n};\r\n"],"names":["meta","InfoBlock","Error","Info","CustomIcon","jsx","CircleAlert","LongContent"],"mappings":";;;AAIA,MAAMA,IAAO;AAAA,EACX,OAAO;AAAA,EACP,WAAWC;AAAA,EACX,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS,CAAC,SAAS,MAAM;AAAA,MACzB,aAAa;AAAA,IAAA;AAAA,IAEf,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,EACf;AAAA,EAEF,YAAY;AAAA,IACV,QAAQ;AAAA,EAAA;AAEZ,GAMaC,IAAe;AAAA,EAC1B,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEb,GAEaC,IAAc;AAAA,EACzB,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEb,GAEaC,IAAoB;AAAA,EAC/B,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,MAAM,gBAAAC,EAACC,GAAA,EAAY,WAAU,gBAAA,CAAgB;AAAA,IAC7C,SAAS;AAAA,EAAA;AAEb,GAEaC,IAAqB;AAAA,EAChC,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS,sBAAsB,OAAO,EAAE;AAAA,EAAA;AAE5C;"}
@@ -1 +1 @@
1
- {"version":3,"file":"infoBlockVariants.js","sources":["../../src/InfoBlock/infoBlockVariants.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const infoBlockVariants = cva(\n [\n 'flex items-start gap-2',\n 'p-2.5 rounded-lg',\n 'font-medium text-base leading-normal text-[#06080D]',\n 'whitespace-pre-wrap break-words',\n '[&>p]:m-0 [&>p]:p-0',\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-6\",\n 'transition-transform duration-200 [&_svg]:transition-transform [&_svg]:duration-200',\n ],\n {\n variants: {\n variant: {\n error: 'bg-[#DC26260F] [&>svg]:text-[#DC2626]',\n info: 'bg-[#9368FF0F] [&>svg]:text-[#9368FF]',\n },\n },\n defaultVariants: {\n variant: 'error',\n },\n }\n)\n\nexport type InfoBlockVariantsProps = VariantProps<typeof infoBlockVariants>;\n"],"names":["infoBlockVariants","cva"],"mappings":";AAEO,MAAMA,IAAoBC;AAAA,EAC/B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;"}
1
+ {"version":3,"file":"infoBlockVariants.js","sources":["../../src/InfoBlock/infoBlockVariants.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const infoBlockVariants = cva(\r\n [\r\n 'flex items-start gap-2',\r\n 'p-2.5 rounded-lg',\r\n 'font-medium text-base leading-normal text-[#06080D]',\r\n 'whitespace-pre-wrap break-words',\r\n '[&>p]:m-0 [&>p]:p-0',\r\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-6\",\r\n 'transition-transform duration-200 [&_svg]:transition-transform [&_svg]:duration-200',\r\n ],\r\n {\r\n variants: {\r\n variant: {\r\n error: 'bg-[#DC26260F] [&>svg]:text-[#DC2626]',\r\n info: 'bg-[#9368FF0F] [&>svg]:text-[#9368FF]',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'error',\r\n },\r\n }\r\n)\r\n\r\nexport type InfoBlockVariantsProps = VariantProps<typeof infoBlockVariants>;\r\n"],"names":["infoBlockVariants","cva"],"mappings":";AAEO,MAAMA,IAAoBC;AAAA,EAC/B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;"}