@smworks-cz/ui-kit 1.2.1 → 1.3.0

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.
package/dist/index.d.mts CHANGED
@@ -370,10 +370,18 @@ interface ComboboxOption {
370
370
  interface ComboboxProps {
371
371
  /** Dostupné položky k výběru. */
372
372
  options: ComboboxOption[];
373
- /** Aktuální vybraná hodnota. */
374
- value: string;
375
- /** Callback volaný při výběru položky. */
376
- onChange: (value: string) => void;
373
+ /**
374
+ * Aktuální vybraná hodnota.
375
+ * - Jednoduchý výběr: `string`
376
+ * - Vícenásobný výběr: `string[]`
377
+ */
378
+ value: string | string[];
379
+ /**
380
+ * Callback volaný při výběru položky.
381
+ * - Jednoduchý výběr: `(value: string) => void`
382
+ * - Vícenásobný výběr: `(value: string[]) => void`
383
+ */
384
+ onChange: (value: any) => void;
377
385
  /** Callback volaný při změně textu ve vyhledávacím poli. Vhodné pro asynchronní filtrování. */
378
386
  onInputChange?: (input: string) => void;
379
387
  /** Zástupný text zobrazený při prázdném poli. */
@@ -386,6 +394,22 @@ interface ComboboxProps {
386
394
  disabled?: boolean;
387
395
  /** Zobrazí spinner místo ikony vyhledávání. Vhodné při načítání položek. */
388
396
  loading?: boolean;
397
+ /** Umožní vybrat více položek najednou. @default false */
398
+ multiple?: boolean;
399
+ /** Zobrazí tlačítko pro vymazání výběru. @default false */
400
+ clearable?: boolean;
401
+ /** Voláno při otevření/zavření dropdownu. */
402
+ onOpenChange?: (open: boolean) => void;
403
+ /** Voláno při výběru položky. */
404
+ onSelect?: (value: string, option: ComboboxOption) => void;
405
+ /** Voláno při odebrání položky (multiple). */
406
+ onDeselect?: (value: string, option: ComboboxOption) => void;
407
+ /** Voláno při vymazání výběru (clearable). */
408
+ onClear?: () => void;
409
+ /** Voláno při focus. */
410
+ onFocus?: (event: React.FocusEvent) => void;
411
+ /** Voláno při blur. */
412
+ onBlur?: (event: React.FocusEvent) => void;
389
413
  /** Povolí uživateli zadat vlastní hodnotu, která není v seznamu. @default false */
390
414
  allowCustom?: boolean;
391
415
  /** Callback volaný při vytvoření vlastní hodnoty (Enter při `allowCustom`). */
@@ -395,10 +419,19 @@ interface ComboboxProps {
395
419
  value: string;
396
420
  label?: string;
397
421
  }, highlighted: boolean) => React.ReactNode;
398
- /** Obsah zobrazený když žádné výsledky neodpovídají. @default "Žádné výsledky" */
399
- notFoundContent?: React.ReactNode;
400
- /** Obsah zobrazený pod seznamem položek uvnitř dropdownu. */
401
- footer?: React.ReactNode;
422
+ /**
423
+ * Obsah zobrazený když žádné výsledky neodpovídají.
424
+ * Může být ReactNode nebo funkce `(close: () => void) => ReactNode`
425
+ * pro přístup k zavření dropdownu.
426
+ * @default "Žádné výsledky"
427
+ */
428
+ notFoundContent?: React.ReactNode | ((close: () => void) => React.ReactNode);
429
+ /**
430
+ * Obsah zobrazený pod seznamem položek uvnitř dropdownu.
431
+ * Může být ReactNode nebo funkce `(close: () => void) => ReactNode`
432
+ * pro přístup k zavření dropdownu.
433
+ */
434
+ footer?: React.ReactNode | ((close: () => void) => React.ReactNode);
402
435
  /**
403
436
  * Velikostní preset.
404
437
  * @default 'md'
@@ -413,17 +446,27 @@ interface ComboboxProps {
413
446
  * Kombinované vyhledávací pole se seznamem dle SM-UI design systému.
414
447
  *
415
448
  * Uživatel zadává text pro filtrování položek. Dropdown se vykresluje
416
- * přes React portál. Podporuje navigaci klávesami, vlastní hodnoty
417
- * a asynchronní filtrování přes `onInputChange`.
449
+ * přes React portál. Podporuje navigaci klávesami, vlastní hodnoty,
450
+ * vícenásobný výběr a asynchronní filtrování přes `onInputChange`.
418
451
  *
419
452
  * @example
420
453
  * ```tsx
454
+ * // Jednoduchý výběr
421
455
  * <Combobox
422
456
  * options={[{ value: 'cz', label: 'Česko' }, { value: 'sk', label: 'Slovensko' }]}
423
457
  * value={zeme}
424
458
  * onChange={setZeme}
425
459
  * placeholder="Hledat zemi…"
426
460
  * />
461
+ *
462
+ * // Vícenásobný výběr
463
+ * <Combobox
464
+ * multiple
465
+ * options={options}
466
+ * value={selectedCountries}
467
+ * onChange={setSelectedCountries}
468
+ * placeholder="Vyberte země…"
469
+ * />
427
470
  * ```
428
471
  */
429
472
  declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLInputElement>>;
@@ -930,6 +973,12 @@ interface FileUploadProps {
930
973
  * @default 'default'
931
974
  */
932
975
  buttonStyle?: 'default' | 'primary';
976
+ /**
977
+ * Řízená hodnota — pole souborů. Pokud je nastaveno, komponenta je plně
978
+ * řízená a interní stav se nepoužívá. Předejte prázdné pole `[]`
979
+ * pro reset / skrytí souborů.
980
+ */
981
+ value?: File[];
933
982
  /**
934
983
  * Zda zobrazit seznam nahraných souborů pod komponentou.
935
984
  * @default true
@@ -1753,12 +1802,22 @@ declare const TagItem: React.FC<TagItemProps>;
1753
1802
 
1754
1803
  /** Událost zobrazená v kalendáři. */
1755
1804
  interface CalendarEvent {
1756
- /** Datum události. */
1805
+ /** Unikátní ID události. */
1806
+ id?: string;
1807
+ /** Datum události (začátek). */
1757
1808
  date: Date;
1809
+ /** Konec události (pro vícedenní). Pokud není zadáno, rovná se `date`. */
1810
+ endDate?: Date;
1758
1811
  /** Název události. */
1759
1812
  title: string;
1760
- /** Barva tečky/indikátoru. @default '#FC4F00' */
1813
+ /** Barva pozadí baru/tečky. @default '#FC4F00' */
1761
1814
  color?: string;
1815
+ /** Barva textu na baru. @default '#ffffff' */
1816
+ textColor?: string;
1817
+ /** Emoji zobrazené před názvem. */
1818
+ emoji?: string;
1819
+ /** Obsah tooltipu. Pokud je nastaveno, event bar se obalí tooltipem. */
1820
+ tooltip?: string | React.ReactNode;
1762
1821
  }
1763
1822
  interface CalendarProps {
1764
1823
  /** Aktuálně vybraný datum. */
@@ -1767,8 +1826,24 @@ interface CalendarProps {
1767
1826
  onChange?: (date: Date) => void;
1768
1827
  /** Režim zobrazení. @default 'month' */
1769
1828
  view?: 'month' | 'week';
1770
- /** Události k zobrazení (vizuální indikátory — barevné tečky). */
1829
+ /** Události k zobrazení. */
1771
1830
  events?: CalendarEvent[];
1831
+ /** Callback při kliknutí na událost (fullSize mode). */
1832
+ onEventClick?: (event: CalendarEvent) => void;
1833
+ /** Plnohodnotný kalendář s event bary místo teček. @default false */
1834
+ fullSize?: boolean;
1835
+ /** První den v týdnu: 0 = neděle, 1 = pondělí. @default 1 */
1836
+ firstDay?: 0 | 1;
1837
+ /** Jazyk. @default 'cs' */
1838
+ locale?: 'cs' | 'en';
1839
+ /** Max viditelných událostí v buňce (fullSize). @default 3 */
1840
+ maxEventsPerDay?: number;
1841
+ /** Zobrazit navigační hlavičku (měsíc + šipky). @default true */
1842
+ showHeader?: boolean;
1843
+ /** Callback při změně zobrazeného měsíce/týdne. Vrací první den zobrazeného období. */
1844
+ onNavigate?: (date: Date) => void;
1845
+ /** Počáteční datum pro navigaci (neřízený). @default new Date() */
1846
+ initialDate?: Date;
1772
1847
  /** Minimální povolený datum. */
1773
1848
  minDate?: Date;
1774
1849
  /** Maximální povolený datum. */
@@ -1781,15 +1856,22 @@ interface CalendarProps {
1781
1856
  /**
1782
1857
  * Kalendářní komponenta s měsíčním a týdenním zobrazením.
1783
1858
  *
1784
- * Podporuje výběr data, zobrazení událostí (barevné tečky),
1785
- * navigaci mezi měsíci/týdny a omezení rozsahu dat.
1859
+ * V kompaktním režimu (`fullSize={false}`) zobrazuje malý datepicker
1860
+ * s barevnými tečkami pro události.
1861
+ *
1862
+ * V plnohodnotném režimu (`fullSize={true}`) zobrazuje velký měsíční
1863
+ * kalendář s event bary, které mohou přesahovat přes více dní.
1786
1864
  *
1787
1865
  * @example
1788
1866
  * ```tsx
1867
+ * // Kompaktní
1868
+ * <Calendar value={date} onChange={setDate} events={events} />
1869
+ *
1870
+ * // Plnohodnotný
1789
1871
  * <Calendar
1790
- * value={selectedDate}
1791
- * onChange={setSelectedDate}
1792
- * events={[{ date: new Date(), title: 'Meeting', color: '#00A205' }]}
1872
+ * fullSize
1873
+ * events={events}
1874
+ * onEventClick={(ev) => console.log(ev)}
1793
1875
  * />
1794
1876
  * ```
1795
1877
  */
package/dist/index.d.ts CHANGED
@@ -370,10 +370,18 @@ interface ComboboxOption {
370
370
  interface ComboboxProps {
371
371
  /** Dostupné položky k výběru. */
372
372
  options: ComboboxOption[];
373
- /** Aktuální vybraná hodnota. */
374
- value: string;
375
- /** Callback volaný při výběru položky. */
376
- onChange: (value: string) => void;
373
+ /**
374
+ * Aktuální vybraná hodnota.
375
+ * - Jednoduchý výběr: `string`
376
+ * - Vícenásobný výběr: `string[]`
377
+ */
378
+ value: string | string[];
379
+ /**
380
+ * Callback volaný při výběru položky.
381
+ * - Jednoduchý výběr: `(value: string) => void`
382
+ * - Vícenásobný výběr: `(value: string[]) => void`
383
+ */
384
+ onChange: (value: any) => void;
377
385
  /** Callback volaný při změně textu ve vyhledávacím poli. Vhodné pro asynchronní filtrování. */
378
386
  onInputChange?: (input: string) => void;
379
387
  /** Zástupný text zobrazený při prázdném poli. */
@@ -386,6 +394,22 @@ interface ComboboxProps {
386
394
  disabled?: boolean;
387
395
  /** Zobrazí spinner místo ikony vyhledávání. Vhodné při načítání položek. */
388
396
  loading?: boolean;
397
+ /** Umožní vybrat více položek najednou. @default false */
398
+ multiple?: boolean;
399
+ /** Zobrazí tlačítko pro vymazání výběru. @default false */
400
+ clearable?: boolean;
401
+ /** Voláno při otevření/zavření dropdownu. */
402
+ onOpenChange?: (open: boolean) => void;
403
+ /** Voláno při výběru položky. */
404
+ onSelect?: (value: string, option: ComboboxOption) => void;
405
+ /** Voláno při odebrání položky (multiple). */
406
+ onDeselect?: (value: string, option: ComboboxOption) => void;
407
+ /** Voláno při vymazání výběru (clearable). */
408
+ onClear?: () => void;
409
+ /** Voláno při focus. */
410
+ onFocus?: (event: React.FocusEvent) => void;
411
+ /** Voláno při blur. */
412
+ onBlur?: (event: React.FocusEvent) => void;
389
413
  /** Povolí uživateli zadat vlastní hodnotu, která není v seznamu. @default false */
390
414
  allowCustom?: boolean;
391
415
  /** Callback volaný při vytvoření vlastní hodnoty (Enter při `allowCustom`). */
@@ -395,10 +419,19 @@ interface ComboboxProps {
395
419
  value: string;
396
420
  label?: string;
397
421
  }, highlighted: boolean) => React.ReactNode;
398
- /** Obsah zobrazený když žádné výsledky neodpovídají. @default "Žádné výsledky" */
399
- notFoundContent?: React.ReactNode;
400
- /** Obsah zobrazený pod seznamem položek uvnitř dropdownu. */
401
- footer?: React.ReactNode;
422
+ /**
423
+ * Obsah zobrazený když žádné výsledky neodpovídají.
424
+ * Může být ReactNode nebo funkce `(close: () => void) => ReactNode`
425
+ * pro přístup k zavření dropdownu.
426
+ * @default "Žádné výsledky"
427
+ */
428
+ notFoundContent?: React.ReactNode | ((close: () => void) => React.ReactNode);
429
+ /**
430
+ * Obsah zobrazený pod seznamem položek uvnitř dropdownu.
431
+ * Může být ReactNode nebo funkce `(close: () => void) => ReactNode`
432
+ * pro přístup k zavření dropdownu.
433
+ */
434
+ footer?: React.ReactNode | ((close: () => void) => React.ReactNode);
402
435
  /**
403
436
  * Velikostní preset.
404
437
  * @default 'md'
@@ -413,17 +446,27 @@ interface ComboboxProps {
413
446
  * Kombinované vyhledávací pole se seznamem dle SM-UI design systému.
414
447
  *
415
448
  * Uživatel zadává text pro filtrování položek. Dropdown se vykresluje
416
- * přes React portál. Podporuje navigaci klávesami, vlastní hodnoty
417
- * a asynchronní filtrování přes `onInputChange`.
449
+ * přes React portál. Podporuje navigaci klávesami, vlastní hodnoty,
450
+ * vícenásobný výběr a asynchronní filtrování přes `onInputChange`.
418
451
  *
419
452
  * @example
420
453
  * ```tsx
454
+ * // Jednoduchý výběr
421
455
  * <Combobox
422
456
  * options={[{ value: 'cz', label: 'Česko' }, { value: 'sk', label: 'Slovensko' }]}
423
457
  * value={zeme}
424
458
  * onChange={setZeme}
425
459
  * placeholder="Hledat zemi…"
426
460
  * />
461
+ *
462
+ * // Vícenásobný výběr
463
+ * <Combobox
464
+ * multiple
465
+ * options={options}
466
+ * value={selectedCountries}
467
+ * onChange={setSelectedCountries}
468
+ * placeholder="Vyberte země…"
469
+ * />
427
470
  * ```
428
471
  */
429
472
  declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLInputElement>>;
@@ -930,6 +973,12 @@ interface FileUploadProps {
930
973
  * @default 'default'
931
974
  */
932
975
  buttonStyle?: 'default' | 'primary';
976
+ /**
977
+ * Řízená hodnota — pole souborů. Pokud je nastaveno, komponenta je plně
978
+ * řízená a interní stav se nepoužívá. Předejte prázdné pole `[]`
979
+ * pro reset / skrytí souborů.
980
+ */
981
+ value?: File[];
933
982
  /**
934
983
  * Zda zobrazit seznam nahraných souborů pod komponentou.
935
984
  * @default true
@@ -1753,12 +1802,22 @@ declare const TagItem: React.FC<TagItemProps>;
1753
1802
 
1754
1803
  /** Událost zobrazená v kalendáři. */
1755
1804
  interface CalendarEvent {
1756
- /** Datum události. */
1805
+ /** Unikátní ID události. */
1806
+ id?: string;
1807
+ /** Datum události (začátek). */
1757
1808
  date: Date;
1809
+ /** Konec události (pro vícedenní). Pokud není zadáno, rovná se `date`. */
1810
+ endDate?: Date;
1758
1811
  /** Název události. */
1759
1812
  title: string;
1760
- /** Barva tečky/indikátoru. @default '#FC4F00' */
1813
+ /** Barva pozadí baru/tečky. @default '#FC4F00' */
1761
1814
  color?: string;
1815
+ /** Barva textu na baru. @default '#ffffff' */
1816
+ textColor?: string;
1817
+ /** Emoji zobrazené před názvem. */
1818
+ emoji?: string;
1819
+ /** Obsah tooltipu. Pokud je nastaveno, event bar se obalí tooltipem. */
1820
+ tooltip?: string | React.ReactNode;
1762
1821
  }
1763
1822
  interface CalendarProps {
1764
1823
  /** Aktuálně vybraný datum. */
@@ -1767,8 +1826,24 @@ interface CalendarProps {
1767
1826
  onChange?: (date: Date) => void;
1768
1827
  /** Režim zobrazení. @default 'month' */
1769
1828
  view?: 'month' | 'week';
1770
- /** Události k zobrazení (vizuální indikátory — barevné tečky). */
1829
+ /** Události k zobrazení. */
1771
1830
  events?: CalendarEvent[];
1831
+ /** Callback při kliknutí na událost (fullSize mode). */
1832
+ onEventClick?: (event: CalendarEvent) => void;
1833
+ /** Plnohodnotný kalendář s event bary místo teček. @default false */
1834
+ fullSize?: boolean;
1835
+ /** První den v týdnu: 0 = neděle, 1 = pondělí. @default 1 */
1836
+ firstDay?: 0 | 1;
1837
+ /** Jazyk. @default 'cs' */
1838
+ locale?: 'cs' | 'en';
1839
+ /** Max viditelných událostí v buňce (fullSize). @default 3 */
1840
+ maxEventsPerDay?: number;
1841
+ /** Zobrazit navigační hlavičku (měsíc + šipky). @default true */
1842
+ showHeader?: boolean;
1843
+ /** Callback při změně zobrazeného měsíce/týdne. Vrací první den zobrazeného období. */
1844
+ onNavigate?: (date: Date) => void;
1845
+ /** Počáteční datum pro navigaci (neřízený). @default new Date() */
1846
+ initialDate?: Date;
1772
1847
  /** Minimální povolený datum. */
1773
1848
  minDate?: Date;
1774
1849
  /** Maximální povolený datum. */
@@ -1781,15 +1856,22 @@ interface CalendarProps {
1781
1856
  /**
1782
1857
  * Kalendářní komponenta s měsíčním a týdenním zobrazením.
1783
1858
  *
1784
- * Podporuje výběr data, zobrazení událostí (barevné tečky),
1785
- * navigaci mezi měsíci/týdny a omezení rozsahu dat.
1859
+ * V kompaktním režimu (`fullSize={false}`) zobrazuje malý datepicker
1860
+ * s barevnými tečkami pro události.
1861
+ *
1862
+ * V plnohodnotném režimu (`fullSize={true}`) zobrazuje velký měsíční
1863
+ * kalendář s event bary, které mohou přesahovat přes více dní.
1786
1864
  *
1787
1865
  * @example
1788
1866
  * ```tsx
1867
+ * // Kompaktní
1868
+ * <Calendar value={date} onChange={setDate} events={events} />
1869
+ *
1870
+ * // Plnohodnotný
1789
1871
  * <Calendar
1790
- * value={selectedDate}
1791
- * onChange={setSelectedDate}
1792
- * events={[{ date: new Date(), title: 'Meeting', color: '#00A205' }]}
1872
+ * fullSize
1873
+ * events={events}
1874
+ * onEventClick={(ev) => console.log(ev)}
1793
1875
  * />
1794
1876
  * ```
1795
1877
  */