-
{
- // Ограничиваем ввод цифрами и точками; авто-вставляем точки после dd и mm
- let v = e.target.value.replace(/[^\d.]/g, '')
- // Авто-точки: после 2-й и 5-й цифры
- const digits = v.replace(/\./g, '')
- if (digits.length >= 5) v = `${digits.slice(0, 2)}.${digits.slice(2, 4)}.${digits.slice(4, 8)}`
- else if (digits.length >= 3) v = `${digits.slice(0, 2)}.${digits.slice(2, 4)}`
- else v = digits
- setDraft(v)
- }}
- onBlur={() => commitDraft(draft)}
- onFocus={(e) => e.currentTarget.select()}
- className={inputClass}
- />
-
- {open && pos && createPortal(
-
),
- }}
- className="z-[100] w-[340px] rounded-md border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900 shadow-md p-3 text-sm"
- >
-
{
- if (!d) return
- const iso = dateToIso(d)
- onChange(iso)
- setDraft(isoToDisplay(iso))
- setOpen(false)
- }}
- footer={
-
-
-
-
- }
- classNames={{
- months: 'flex flex-col',
- month: 'relative space-y-2',
- month_caption: 'flex items-center pt-0.5 pl-1 h-8 pr-16',
- dropdowns: 'flex items-center gap-1.5 text-sm font-semibold',
- dropdown_root: 'relative inline-flex items-center',
- dropdown: 'appearance-none bg-transparent capitalize cursor-pointer focus:outline-none rounded hover:bg-slate-100 dark:hover:bg-slate-800 px-1.5 py-0.5 pr-5',
- caption_label: 'capitalize pointer-events-none absolute opacity-0',
- nav: 'absolute right-1 top-1 flex items-center gap-0.5',
- button_previous: 'h-7 w-7 inline-flex items-center justify-center rounded-md text-slate-500 hover:bg-slate-100 dark:hover:bg-slate-800',
- button_next: 'h-7 w-7 inline-flex items-center justify-center rounded-md text-slate-500 hover:bg-slate-100 dark:hover:bg-slate-800',
- chevron: 'w-4 h-4 fill-current',
- weekdays: 'flex',
- weekday: 'w-9 text-center text-[0.75rem] font-normal text-slate-500 capitalize',
- weeks: 'mt-1',
- week: 'flex w-full mt-1',
- day: 'w-9 h-9 p-0 text-center align-middle',
- day_button: 'w-9 h-9 inline-flex items-center justify-center rounded-md text-sm font-normal hover:bg-slate-100 dark:hover:bg-slate-800 disabled:hover:bg-transparent',
- today: '[&_button]:bg-[var(--color-brand)] [&_button]:text-white [&_button]:font-medium [&_button]:hover:bg-[var(--color-brand)]',
- selected: '[&_button]:ring-2 [&_button]:ring-[var(--color-brand)] [&_button]:ring-offset-1',
- outside: 'text-slate-300 dark:text-slate-600 opacity-60',
- disabled: 'text-slate-300 opacity-50',
- }}
- />
- ,
- document.body,
- )}
-
- )
-}
diff --git a/src/food-market.web/src/pages/SupplyEditPage.tsx b/src/food-market.web/src/pages/SupplyEditPage.tsx
index ee20c23..e8d6e74 100644
--- a/src/food-market.web/src/pages/SupplyEditPage.tsx
+++ b/src/food-market.web/src/pages/SupplyEditPage.tsx
@@ -4,8 +4,7 @@ import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query'
import { ArrowLeft, Plus, Trash2, Save, CheckCircle } from 'lucide-react'
import { api } from '@/lib/api'
import { Button } from '@/components/Button'
-import { Field, TextArea, Select, Checkbox, MoneyInput, NumberInput } from '@/components/Field'
-import { DateField } from '@/components/DateField'
+import { Field, TextInput, TextArea, Select, Checkbox, MoneyInput, NumberInput } from '@/components/Field'
import { ProductPicker } from '@/components/ProductPicker'
import { SupplyLineQuickAdd, type AddedProduct } from '@/components/SupplyLineQuickAdd'
import { useStores, useCurrencies, useSuppliers, usePriceTypes } from '@/lib/useLookups'
@@ -300,8 +299,9 @@ export function SupplyEditPage() {