@smworks-cz/ui-kit 1.2.0 → 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,11 +973,22 @@ 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
936
985
  */
937
986
  showFileList?: boolean;
987
+ /**
988
+ * Text tlačítka u button varianty.
989
+ * Pokud zadáno, zobrazí se vždy tento text místo názvu souboru.
990
+ */
991
+ buttonLabel?: string;
938
992
  /** Dodatečná CSS třída. */
939
993
  className?: string;
940
994
  /** Další inline styly. */
@@ -965,6 +1019,8 @@ interface SegmentedControlItem {
965
1019
  value: string;
966
1020
  /** Zobrazovaný text. Výchozí: `value`. */
967
1021
  label?: string;
1022
+ /** Ikona zobrazená v segmentu. Může být samostatně nebo s label. */
1023
+ icon?: React.ReactNode;
968
1024
  /** Zakáže tento segment. */
969
1025
  disabled?: boolean;
970
1026
  }
@@ -1746,12 +1802,22 @@ declare const TagItem: React.FC<TagItemProps>;
1746
1802
 
1747
1803
  /** Událost zobrazená v kalendáři. */
1748
1804
  interface CalendarEvent {
1749
- /** Datum události. */
1805
+ /** Unikátní ID události. */
1806
+ id?: string;
1807
+ /** Datum události (začátek). */
1750
1808
  date: Date;
1809
+ /** Konec události (pro vícedenní). Pokud není zadáno, rovná se `date`. */
1810
+ endDate?: Date;
1751
1811
  /** Název události. */
1752
1812
  title: string;
1753
- /** Barva tečky/indikátoru. @default '#FC4F00' */
1813
+ /** Barva pozadí baru/tečky. @default '#FC4F00' */
1754
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;
1755
1821
  }
1756
1822
  interface CalendarProps {
1757
1823
  /** Aktuálně vybraný datum. */
@@ -1760,8 +1826,24 @@ interface CalendarProps {
1760
1826
  onChange?: (date: Date) => void;
1761
1827
  /** Režim zobrazení. @default 'month' */
1762
1828
  view?: 'month' | 'week';
1763
- /** Události k zobrazení (vizuální indikátory — barevné tečky). */
1829
+ /** Události k zobrazení. */
1764
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;
1765
1847
  /** Minimální povolený datum. */
1766
1848
  minDate?: Date;
1767
1849
  /** Maximální povolený datum. */
@@ -1774,15 +1856,22 @@ interface CalendarProps {
1774
1856
  /**
1775
1857
  * Kalendářní komponenta s měsíčním a týdenním zobrazením.
1776
1858
  *
1777
- * Podporuje výběr data, zobrazení událostí (barevné tečky),
1778
- * 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í.
1779
1864
  *
1780
1865
  * @example
1781
1866
  * ```tsx
1867
+ * // Kompaktní
1868
+ * <Calendar value={date} onChange={setDate} events={events} />
1869
+ *
1870
+ * // Plnohodnotný
1782
1871
  * <Calendar
1783
- * value={selectedDate}
1784
- * onChange={setSelectedDate}
1785
- * events={[{ date: new Date(), title: 'Meeting', color: '#00A205' }]}
1872
+ * fullSize
1873
+ * events={events}
1874
+ * onEventClick={(ev) => console.log(ev)}
1786
1875
  * />
1787
1876
  * ```
1788
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,11 +973,22 @@ 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
936
985
  */
937
986
  showFileList?: boolean;
987
+ /**
988
+ * Text tlačítka u button varianty.
989
+ * Pokud zadáno, zobrazí se vždy tento text místo názvu souboru.
990
+ */
991
+ buttonLabel?: string;
938
992
  /** Dodatečná CSS třída. */
939
993
  className?: string;
940
994
  /** Další inline styly. */
@@ -965,6 +1019,8 @@ interface SegmentedControlItem {
965
1019
  value: string;
966
1020
  /** Zobrazovaný text. Výchozí: `value`. */
967
1021
  label?: string;
1022
+ /** Ikona zobrazená v segmentu. Může být samostatně nebo s label. */
1023
+ icon?: React.ReactNode;
968
1024
  /** Zakáže tento segment. */
969
1025
  disabled?: boolean;
970
1026
  }
@@ -1746,12 +1802,22 @@ declare const TagItem: React.FC<TagItemProps>;
1746
1802
 
1747
1803
  /** Událost zobrazená v kalendáři. */
1748
1804
  interface CalendarEvent {
1749
- /** Datum události. */
1805
+ /** Unikátní ID události. */
1806
+ id?: string;
1807
+ /** Datum události (začátek). */
1750
1808
  date: Date;
1809
+ /** Konec události (pro vícedenní). Pokud není zadáno, rovná se `date`. */
1810
+ endDate?: Date;
1751
1811
  /** Název události. */
1752
1812
  title: string;
1753
- /** Barva tečky/indikátoru. @default '#FC4F00' */
1813
+ /** Barva pozadí baru/tečky. @default '#FC4F00' */
1754
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;
1755
1821
  }
1756
1822
  interface CalendarProps {
1757
1823
  /** Aktuálně vybraný datum. */
@@ -1760,8 +1826,24 @@ interface CalendarProps {
1760
1826
  onChange?: (date: Date) => void;
1761
1827
  /** Režim zobrazení. @default 'month' */
1762
1828
  view?: 'month' | 'week';
1763
- /** Události k zobrazení (vizuální indikátory — barevné tečky). */
1829
+ /** Události k zobrazení. */
1764
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;
1765
1847
  /** Minimální povolený datum. */
1766
1848
  minDate?: Date;
1767
1849
  /** Maximální povolený datum. */
@@ -1774,15 +1856,22 @@ interface CalendarProps {
1774
1856
  /**
1775
1857
  * Kalendářní komponenta s měsíčním a týdenním zobrazením.
1776
1858
  *
1777
- * Podporuje výběr data, zobrazení událostí (barevné tečky),
1778
- * 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í.
1779
1864
  *
1780
1865
  * @example
1781
1866
  * ```tsx
1867
+ * // Kompaktní
1868
+ * <Calendar value={date} onChange={setDate} events={events} />
1869
+ *
1870
+ * // Plnohodnotný
1782
1871
  * <Calendar
1783
- * value={selectedDate}
1784
- * onChange={setSelectedDate}
1785
- * events={[{ date: new Date(), title: 'Meeting', color: '#00A205' }]}
1872
+ * fullSize
1873
+ * events={events}
1874
+ * onEventClick={(ev) => console.log(ev)}
1786
1875
  * />
1787
1876
  * ```
1788
1877
  */