@smworks-cz/ui-kit 0.1.0 → 1.1.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
@@ -193,6 +193,63 @@ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttri
193
193
  */
194
194
  declare const InputGroup: React.FC<InputGroupProps>;
195
195
 
196
+ type NumberInputSize = 'sm' | 'md' | 'lg';
197
+ type NumberInputVariant = 'default' | 'compact';
198
+ interface NumberInputProps {
199
+ /** Aktuální numerická hodnota. */
200
+ value: number;
201
+ /** Callback volaný při změně hodnoty. */
202
+ onChange: (value: number) => void;
203
+ /** Minimální povolená hodnota. */
204
+ min?: number;
205
+ /** Maximální povolená hodnota. */
206
+ max?: number;
207
+ /** Krok inkrementace / dekrementace. @default 1 */
208
+ step?: number;
209
+ /** Popisek zobrazený nad polem. Stylizován velkými písmeny dle SM-UI design systému. */
210
+ label?: string;
211
+ /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */
212
+ error?: boolean | string;
213
+ /** Zakáže celé pole včetně tlačítek. */
214
+ disabled?: boolean;
215
+ /**
216
+ * Velikostní preset.
217
+ * - `'sm'` -- kompaktní
218
+ * - `'md'` -- výchozí
219
+ * - `'lg'` -- velký
220
+ * @default 'md'
221
+ */
222
+ size?: NumberInputSize;
223
+ /**
224
+ * Varianta rozložení.
225
+ * - `'default'` -- tlačítka −/+ po stranách
226
+ * - `'compact'` -- šipky nahoru/dolů vpravo uvnitř pole
227
+ * @default 'default'
228
+ */
229
+ variant?: NumberInputVariant;
230
+ /** Text zobrazený před hodnotou (např. měna). */
231
+ prefix?: string;
232
+ /** Text zobrazený za hodnotou (např. jednotka). */
233
+ suffix?: string;
234
+ /** Další inline styly pro obalový `<div>`. */
235
+ style?: React.CSSProperties;
236
+ /** Dodatečná CSS třída pro obalový `<div>`. */
237
+ className?: string;
238
+ }
239
+ /**
240
+ * Numerické vstupní pole s tlačítky +/− dle SM-UI design systému.
241
+ *
242
+ * Podržením tlačítka se hodnota plynule inkrementuje / dekrementuje.
243
+ * Hodnota je automaticky omezena na rozsah `min`–`max`.
244
+ *
245
+ * @example
246
+ * ```tsx
247
+ * <NumberInput value={count} onChange={setCount} min={0} max={100} step={5} />
248
+ * <NumberInput value={price} onChange={setPrice} prefix="$" suffix="USD" />
249
+ * ```
250
+ */
251
+ declare const NumberInput: React.ForwardRefExoticComponent<NumberInputProps & React.RefAttributes<HTMLInputElement>>;
252
+
196
253
  interface SelectOption {
197
254
  /** Unikátní hodnota položky. */
198
255
  value: string;
@@ -297,6 +354,74 @@ declare const Select: React.FC<SelectProps>;
297
354
  */
298
355
  declare const SelectGroup: React.FC<SelectGroupProps>;
299
356
 
357
+ type ComboboxSize = 'sm' | 'md' | 'lg';
358
+ interface ComboboxOption {
359
+ /** Unikátní hodnota položky. */
360
+ value: string;
361
+ /** Zobrazovaný popisek. Pokud chybí, použije se `value`. */
362
+ label?: string;
363
+ }
364
+ interface ComboboxProps {
365
+ /** Dostupné položky k výběru. */
366
+ options: ComboboxOption[];
367
+ /** Aktuální vybraná hodnota. */
368
+ value: string;
369
+ /** Callback volaný při výběru položky. */
370
+ onChange: (value: string) => void;
371
+ /** Callback volaný při změně textu ve vyhledávacím poli. Vhodné pro asynchronní filtrování. */
372
+ onInputChange?: (input: string) => void;
373
+ /** Zástupný text zobrazený při prázdném poli. */
374
+ placeholder?: string;
375
+ /** Popisek zobrazený nad polem. Stylizován velkými písmeny dle SM-UI design systému. */
376
+ label?: string;
377
+ /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */
378
+ error?: boolean | string;
379
+ /** Zakáže celou komponentu. */
380
+ disabled?: boolean;
381
+ /** Zobrazí spinner místo ikony vyhledávání. Vhodné při načítání položek. */
382
+ loading?: boolean;
383
+ /** Povolí uživateli zadat vlastní hodnotu, která není v seznamu. @default false */
384
+ allowCustom?: boolean;
385
+ /** Callback volaný při vytvoření vlastní hodnoty (Enter při `allowCustom`). */
386
+ onCreate?: (value: string) => void;
387
+ /** Vlastní renderování položky v seznamu. */
388
+ renderOption?: (option: {
389
+ value: string;
390
+ label?: string;
391
+ }, highlighted: boolean) => React.ReactNode;
392
+ /** Obsah zobrazený když žádné výsledky neodpovídají. @default "Žádné výsledky" */
393
+ notFoundContent?: React.ReactNode;
394
+ /** Obsah zobrazený pod seznamem položek uvnitř dropdownu. */
395
+ footer?: React.ReactNode;
396
+ /**
397
+ * Velikostní preset.
398
+ * @default 'md'
399
+ */
400
+ size?: ComboboxSize;
401
+ /** Další inline styly pro obalový `<div>`. */
402
+ style?: React.CSSProperties;
403
+ /** Dodatečná CSS třída pro obalový `<div>`. */
404
+ className?: string;
405
+ }
406
+ /**
407
+ * Kombinované vyhledávací pole se seznamem dle SM-UI design systému.
408
+ *
409
+ * Uživatel zadává text pro filtrování položek. Dropdown se vykresluje
410
+ * přes React portál. Podporuje navigaci klávesami, vlastní hodnoty
411
+ * a asynchronní filtrování přes `onInputChange`.
412
+ *
413
+ * @example
414
+ * ```tsx
415
+ * <Combobox
416
+ * options={[{ value: 'cz', label: 'Česko' }, { value: 'sk', label: 'Slovensko' }]}
417
+ * value={zeme}
418
+ * onChange={setZeme}
419
+ * placeholder="Hledat zemi…"
420
+ * />
421
+ * ```
422
+ */
423
+ declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLInputElement>>;
424
+
300
425
  type DatePickerSize = 'sm' | 'md' | 'lg';
301
426
  interface DatePickerProps {
302
427
  /**
@@ -816,6 +941,175 @@ interface FileUploadProps {
816
941
  */
817
942
  declare const FileUpload: React.FC<FileUploadProps>;
818
943
 
944
+ type SegmentedControlSize = 'sm' | 'md' | 'lg';
945
+ interface SegmentedControlItem {
946
+ /** Unikátní hodnota segmentu. */
947
+ value: string;
948
+ /** Zobrazovaný text. Výchozí: `value`. */
949
+ label?: string;
950
+ /** Zakáže tento segment. */
951
+ disabled?: boolean;
952
+ }
953
+ interface SegmentedControlProps {
954
+ /**
955
+ * Data — pole řetězců nebo objektů `{ value, label?, disabled? }`.
956
+ * Řetězce jsou automaticky převedeny na objekty s `value === label`.
957
+ */
958
+ data: (string | SegmentedControlItem)[];
959
+ /** Aktuálně vybraná hodnota (řízená komponenta). */
960
+ value: string;
961
+ /** Callback volaný při změně výběru. */
962
+ onChange: (value: string) => void;
963
+ /**
964
+ * Velikostní preset.
965
+ * @default 'md'
966
+ */
967
+ size?: SegmentedControlSize;
968
+ /**
969
+ * Roztáhne komponentu na celou šířku kontejneru.
970
+ * @default false
971
+ */
972
+ fullWidth?: boolean;
973
+ /**
974
+ * Orientace segmentů.
975
+ * @default 'horizontal'
976
+ */
977
+ orientation?: 'horizontal' | 'vertical';
978
+ /**
979
+ * Zakáže celou komponentu.
980
+ * @default false
981
+ */
982
+ disabled?: boolean;
983
+ /** Dodatečná CSS třída. */
984
+ className?: string;
985
+ /** Další inline styly. */
986
+ style?: React.CSSProperties;
987
+ }
988
+ /**
989
+ * Segmentovaný přepínač dle SM-UI design systému.
990
+ *
991
+ * Podobný záložkám, ale v kompaktnějším inline formátu
992
+ * s animovaným indikátorem posuvným mezi segmenty.
993
+ *
994
+ * @example
995
+ * ```tsx
996
+ * const [view, setView] = useState('list');
997
+ *
998
+ * <SegmentedControl
999
+ * data={['list', 'grid', 'table']}
1000
+ * value={view}
1001
+ * onChange={setView}
1002
+ * />
1003
+ * ```
1004
+ */
1005
+ declare const SegmentedControl: React.FC<SegmentedControlProps>;
1006
+
1007
+ interface ColorPickerProps {
1008
+ /** Aktuální barva v hexadecimálním formátu (např. `#FC4F00`). */
1009
+ value: string;
1010
+ /** Callback volaný při změně barvy. */
1011
+ onChange: (color: string) => void;
1012
+ /** Přednastavené barvy zobrazené v mřížce. Pokud chybí, použije se výchozí paleta. */
1013
+ presets?: string[];
1014
+ /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */
1015
+ label?: string;
1016
+ /** Zakáže celou komponentu. */
1017
+ disabled?: boolean;
1018
+ /** Další inline styly pro obalový `<div>`. */
1019
+ style?: React.CSSProperties;
1020
+ /** Dodatečná CSS třída pro obalový `<div>`. */
1021
+ className?: string;
1022
+ }
1023
+ /**
1024
+ * Výběr barvy dle SM-UI design systému.
1025
+ *
1026
+ * Zobrazuje náhled aktuální barvy, hexadecimální vstup
1027
+ * a po kliknutí popover s mřížkou přednastavených barev.
1028
+ *
1029
+ * @example
1030
+ * ```tsx
1031
+ * <ColorPicker value={color} onChange={setColor} />
1032
+ * <ColorPicker value={color} onChange={setColor} presets={['#FF0000', '#00FF00', '#0000FF']} />
1033
+ * ```
1034
+ */
1035
+ declare const ColorPicker: React.FC<ColorPickerProps>;
1036
+
1037
+ type RatingSize = 'sm' | 'md' | 'lg';
1038
+ interface RatingProps {
1039
+ /** Aktuální hodnota hodnocení (1–max). */
1040
+ value: number;
1041
+ /** Callback volaný při změně hodnocení. Pokud chybí, komponenta je v režimu pouze pro čtení. */
1042
+ onChange?: (value: number) => void;
1043
+ /** Maximální počet hvězd. @default 5 */
1044
+ max?: number;
1045
+ /**
1046
+ * Velikostní preset.
1047
+ * @default 'md'
1048
+ */
1049
+ size?: RatingSize;
1050
+ /** Přepne komponentu do režimu pouze pro zobrazení. */
1051
+ readOnly?: boolean;
1052
+ /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */
1053
+ label?: string;
1054
+ /** Další inline styly pro obalový `<div>`. */
1055
+ style?: React.CSSProperties;
1056
+ /** Dodatečná CSS třída pro obalový `<div>`. */
1057
+ className?: string;
1058
+ }
1059
+ /**
1060
+ * Hodnocení hvězdičkami dle SM-UI design systému.
1061
+ *
1062
+ * Podporuje interaktivní výběr s náhledem při najetí myší
1063
+ * a režim pouze pro čtení.
1064
+ *
1065
+ * @example
1066
+ * ```tsx
1067
+ * <Rating value={rating} onChange={setRating} />
1068
+ * <Rating value={3} max={10} readOnly />
1069
+ * <Rating value={4} size="lg" label="Hodnocení" />
1070
+ * ```
1071
+ */
1072
+ declare const Rating: React.FC<RatingProps>;
1073
+
1074
+ interface OTPInputProps {
1075
+ /** Počet polí (číslic). @default 6 */
1076
+ length?: number;
1077
+ /** Aktuální hodnota jako řetězec číslic. */
1078
+ value: string;
1079
+ /** Callback volaný při změně hodnoty. */
1080
+ onChange: (value: string) => void;
1081
+ /** Při `true` se pole zobrazí jako nevalidní. Při zadání řetězce se zobrazí chybová zpráva. */
1082
+ error?: boolean | string;
1083
+ /** Zakáže celou komponentu. */
1084
+ disabled?: boolean;
1085
+ /** Automaticky zaměří první pole při renderování. @default false */
1086
+ autoFocus?: boolean;
1087
+ /** Popisek zobrazený nad komponentou. Stylizován velkými písmeny dle SM-UI design systému. */
1088
+ label?: string;
1089
+ /** Vloží oddělovač po každých N polích. Např. `separatorAfter={3}` u 6místného kódu vytvoří skupiny 3-3. */
1090
+ separatorAfter?: number;
1091
+ /** Obsah oddělovače. @default '-' */
1092
+ separator?: React.ReactNode;
1093
+ /** Další inline styly pro obalový `<div>`. */
1094
+ style?: React.CSSProperties;
1095
+ /** Dodatečná CSS třída pro obalový `<div>`. */
1096
+ className?: string;
1097
+ }
1098
+ /**
1099
+ * Pole pro zadání jednorázového kódu (OTP) dle SM-UI design systému.
1100
+ *
1101
+ * Každá číslice má vlastní pole. Automaticky přesouvá fokus
1102
+ * na další pole při zadání a na předchozí při smazání.
1103
+ * Podporuje vložení celého kódu ze schránky.
1104
+ *
1105
+ * @example
1106
+ * ```tsx
1107
+ * <OTPInput value={otp} onChange={setOtp} autoFocus />
1108
+ * <OTPInput value={otp} onChange={setOtp} length={4} error="Neplatný kód" />
1109
+ * ```
1110
+ */
1111
+ declare const OTPInput: React.FC<OTPInputProps>;
1112
+
819
1113
  interface TableColumn {
820
1114
  /** Klíč odpovídající hodnotě v datovém objektu. */
821
1115
  key: string;
@@ -875,6 +1169,73 @@ interface TableProps {
875
1169
  */
876
1170
  declare const Table: React.FC<TableProps>;
877
1171
 
1172
+ /** Definice sloupce pro DataGrid. */
1173
+ interface DataGridColumn {
1174
+ /** Klíč odpovídající hodnotě v datovém objektu. */
1175
+ key: string;
1176
+ /** Text záhlaví sloupce. */
1177
+ header: string;
1178
+ /** Šířka sloupce (CSS hodnota). */
1179
+ width?: string | number;
1180
+ /** Minimální šířka sloupce v pixelech. */
1181
+ minWidth?: number;
1182
+ /** Zarovnání obsahu. @default 'left' */
1183
+ align?: 'left' | 'center' | 'right';
1184
+ /** Povolí řazení podle tohoto sloupce. @default false */
1185
+ sortable?: boolean;
1186
+ /** Povolí editaci buňky (placeholder pro budoucí implementaci). @default false */
1187
+ editable?: boolean;
1188
+ /** Vlastní vykreslovací funkce pro buňku. */
1189
+ render?: (value: any, row: any, index: number) => React.ReactNode;
1190
+ }
1191
+ interface DataGridProps {
1192
+ /** Definice sloupců. */
1193
+ columns: DataGridColumn[];
1194
+ /** Data k zobrazení — pole objektů. */
1195
+ data: any[];
1196
+ /** Povolí výběr řádků pomocí zaškrtávacích políček. @default false */
1197
+ selectable?: boolean;
1198
+ /** Callback při změně výběru řádků. */
1199
+ onSelectionChange?: (ids: string[]) => void;
1200
+ /** Při `true` se zobrazí skeleton řádky. @default false */
1201
+ loading?: boolean;
1202
+ /** Klíč pro identifikaci řádků. @default 'id' */
1203
+ rowKey?: string;
1204
+ /** Callback při kliknutí na řádek. */
1205
+ onRowClick?: (row: any) => void;
1206
+ /** Fixní záhlaví při scrollování. @default false */
1207
+ stickyHeader?: boolean;
1208
+ /** Text zobrazený při prázdných datech. @default 'Žádná data' */
1209
+ emptyText?: string;
1210
+ /** Další inline styly. */
1211
+ style?: React.CSSProperties;
1212
+ /** Dodatečná CSS třída. */
1213
+ className?: string;
1214
+ }
1215
+ /**
1216
+ * Pokročilá datová mřížka s výběrem řádků, sticky záhlavím a loading stavem.
1217
+ *
1218
+ * Rozšiřuje vzor Table o zaškrtávací políčka pro výběr,
1219
+ * klikání na řádky a skeleton placeholder při načítání.
1220
+ *
1221
+ * @example
1222
+ * ```tsx
1223
+ * <DataGrid
1224
+ * columns={[
1225
+ * { key: 'name', header: 'Jméno', minWidth: 200 },
1226
+ * { key: 'email', header: 'E-mail' },
1227
+ * { key: 'role', header: 'Role', align: 'center' },
1228
+ * ]}
1229
+ * data={users}
1230
+ * selectable
1231
+ * stickyHeader
1232
+ * onSelectionChange={(ids) => console.log(ids)}
1233
+ * onRowClick={(row) => console.log(row)}
1234
+ * />
1235
+ * ```
1236
+ */
1237
+ declare const DataGrid: React.FC<DataGridProps>;
1238
+
878
1239
  interface CardProps {
879
1240
  /** Titulek karty. */
880
1241
  title?: string;
@@ -1365,6 +1726,212 @@ declare const Badge: React.FC<BadgeProps>;
1365
1726
  */
1366
1727
  declare const TagItem: React.FC<TagItemProps>;
1367
1728
 
1729
+ /** Událost zobrazená v kalendáři. */
1730
+ interface CalendarEvent {
1731
+ /** Datum události. */
1732
+ date: Date;
1733
+ /** Název události. */
1734
+ title: string;
1735
+ /** Barva tečky/indikátoru. @default '#FC4F00' */
1736
+ color?: string;
1737
+ }
1738
+ interface CalendarProps {
1739
+ /** Aktuálně vybraný datum. */
1740
+ value?: Date | null;
1741
+ /** Callback při výběru data. */
1742
+ onChange?: (date: Date) => void;
1743
+ /** Režim zobrazení. @default 'month' */
1744
+ view?: 'month' | 'week';
1745
+ /** Události k zobrazení (vizuální indikátory — barevné tečky). */
1746
+ events?: CalendarEvent[];
1747
+ /** Minimální povolený datum. */
1748
+ minDate?: Date;
1749
+ /** Maximální povolený datum. */
1750
+ maxDate?: Date;
1751
+ /** Další inline styly. */
1752
+ style?: React.CSSProperties;
1753
+ /** Dodatečná CSS třída. */
1754
+ className?: string;
1755
+ }
1756
+ /**
1757
+ * Kalendářní komponenta s měsíčním a týdenním zobrazením.
1758
+ *
1759
+ * Podporuje výběr data, zobrazení událostí (barevné tečky),
1760
+ * navigaci mezi měsíci/týdny a omezení rozsahu dat.
1761
+ *
1762
+ * @example
1763
+ * ```tsx
1764
+ * <Calendar
1765
+ * value={selectedDate}
1766
+ * onChange={setSelectedDate}
1767
+ * events={[{ date: new Date(), title: 'Meeting', color: '#00A205' }]}
1768
+ * />
1769
+ * ```
1770
+ */
1771
+ declare const Calendar: React.FC<CalendarProps>;
1772
+
1773
+ /** Položka časové osy. */
1774
+ interface TimelineItem {
1775
+ /** Nadpis události. */
1776
+ title: string;
1777
+ /** Volitelný popis události. */
1778
+ description?: string;
1779
+ /** Volitelný datum / časový údaj. */
1780
+ date?: string;
1781
+ /** Vlastní ikona místo výchozí tečky. */
1782
+ icon?: React.ReactNode;
1783
+ /** Barva tečky nebo pozadí ikony. @default '#FC4F00' */
1784
+ color?: string;
1785
+ }
1786
+ interface TimelineProps {
1787
+ /** Položky časové osy. */
1788
+ items: TimelineItem[];
1789
+ /** Orientace časové osy. @default 'vertical' */
1790
+ orientation?: 'vertical' | 'horizontal';
1791
+ /** Další inline styly. */
1792
+ style?: React.CSSProperties;
1793
+ /** Dodatečná CSS třída. */
1794
+ className?: string;
1795
+ }
1796
+ /**
1797
+ * Časová osa s tečkami nebo ikonami.
1798
+ *
1799
+ * Podporuje vertikální i horizontální orientaci.
1800
+ * Každá položka zobrazuje nadpis, volitelný popis a datum.
1801
+ * Ikona nebo barevná tečka je propojená čárou.
1802
+ *
1803
+ * @example
1804
+ * ```tsx
1805
+ * <Timeline
1806
+ * items={[
1807
+ * { title: 'Odesláno', date: '10:00', description: 'Objednávka byla vytvořena.' },
1808
+ * { title: 'Doručeno', date: '14:30', color: '#00A205' },
1809
+ * ]}
1810
+ * />
1811
+ * ```
1812
+ */
1813
+ declare const Timeline: React.FC<TimelineProps>;
1814
+
1815
+ /** Položka klíč-hodnota v seznamu. */
1816
+ interface DataListItem {
1817
+ /** Popisek (klíč). */
1818
+ label: string;
1819
+ /** Hodnota — řetězec nebo libovolný React uzel. */
1820
+ value: React.ReactNode;
1821
+ }
1822
+ interface DataListProps {
1823
+ /** Položky k zobrazení. */
1824
+ items: DataListItem[];
1825
+ /** Počet sloupců. @default 1 */
1826
+ columns?: number;
1827
+ /** Střídání barvy řádků. @default false */
1828
+ striped?: boolean;
1829
+ /** Další inline styly. */
1830
+ style?: React.CSSProperties;
1831
+ /** Dodatečná CSS třída. */
1832
+ className?: string;
1833
+ }
1834
+ /**
1835
+ * Seznam klíč-hodnota pro detailní zobrazení dat.
1836
+ *
1837
+ * Zobrazuje popisek vlevo (ztlumený) a hodnotu vpravo.
1838
+ * Podporuje rozložení do libovolného počtu sloupců a střídání barvy řádků.
1839
+ *
1840
+ * @example
1841
+ * ```tsx
1842
+ * <DataList
1843
+ * items={[
1844
+ * { label: 'Jméno', value: 'Jan Novák' },
1845
+ * { label: 'E-mail', value: 'jan@example.com' },
1846
+ * { label: 'Stav', value: <Tag>Aktivní</Tag> },
1847
+ * ]}
1848
+ * columns={2}
1849
+ * striped
1850
+ * />
1851
+ * ```
1852
+ */
1853
+ declare const DataList: React.FC<DataListProps>;
1854
+
1855
+ /** Uzel stromové struktury. */
1856
+ interface TreeNode {
1857
+ /** Unikátní identifikátor uzlu. */
1858
+ id: string;
1859
+ /** Zobrazený text uzlu. */
1860
+ label: string;
1861
+ /** Volitelná ikona vedle popisku. */
1862
+ icon?: React.ReactNode;
1863
+ /** Podřízené uzly. */
1864
+ children?: TreeNode[];
1865
+ }
1866
+ interface TreeProps {
1867
+ /** Stromová data k zobrazení. */
1868
+ data: TreeNode[];
1869
+ /** Callback při výběru uzlu. */
1870
+ onSelect?: (node: TreeNode) => void;
1871
+ /** ID aktuálně vybraného uzlu. */
1872
+ selectedId?: string;
1873
+ /** ID uzlů, které jsou ve výchozím stavu rozbalené. */
1874
+ defaultExpanded?: string[];
1875
+ /** Další inline styly. */
1876
+ style?: React.CSSProperties;
1877
+ /** Dodatečná CSS třída. */
1878
+ className?: string;
1879
+ }
1880
+ /**
1881
+ * Stromový seznam s rozbalitelnými uzly.
1882
+ *
1883
+ * Podporuje ikony, výběr uzlu, animovanou šipku při rozbalení
1884
+ * a spojovací čáry mezi rodičem a potomky.
1885
+ *
1886
+ * @example
1887
+ * ```tsx
1888
+ * <Tree
1889
+ * data={[
1890
+ * { id: '1', label: 'Složka', children: [
1891
+ * { id: '1-1', label: 'Soubor A' },
1892
+ * { id: '1-2', label: 'Soubor B' },
1893
+ * ]},
1894
+ * ]}
1895
+ * selectedId="1-1"
1896
+ * onSelect={(node) => console.log(node.id)}
1897
+ * />
1898
+ * ```
1899
+ */
1900
+ declare const Tree: React.FC<TreeProps>;
1901
+
1902
+ type StatusBadgeStatus = 'online' | 'offline' | 'away' | 'busy' | (string & {});
1903
+ interface StatusBadgeProps {
1904
+ /** Stav k zobrazení. Předdefinované: online, offline, away, busy. Lze zadat i vlastní řetězec. */
1905
+ status: StatusBadgeStatus;
1906
+ /** Volitelný textový popis vedle indikátoru. */
1907
+ label?: string;
1908
+ /** Velikost indikátoru. @default 'md' */
1909
+ size?: 'sm' | 'md' | 'lg';
1910
+ /** Zapne pulzující animaci. @default false */
1911
+ pulse?: boolean;
1912
+ /** Vlastní barva indikátoru — přepíše výchozí barvu stavu. */
1913
+ color?: string;
1914
+ /** Další inline styly. */
1915
+ style?: React.CSSProperties;
1916
+ /** Dodatečná CSS třída. */
1917
+ className?: string;
1918
+ }
1919
+ /**
1920
+ * Malý barevný indikátor stavu.
1921
+ *
1922
+ * Předdefinované stavy: online, offline, away, busy.
1923
+ * Lze zadat i vlastní řetězec s vlastní barvou přes prop `color`.
1924
+ * Pulzující animace funguje na libovolném stavu.
1925
+ *
1926
+ * @example
1927
+ * ```tsx
1928
+ * <StatusBadge status="online" pulse />
1929
+ * <StatusBadge status="busy" label="Nerušit" size="lg" />
1930
+ * <StatusBadge status="streaming" color="#9C27B0" label="Živě" pulse />
1931
+ * ```
1932
+ */
1933
+ declare const StatusBadge: React.FC<StatusBadgeProps>;
1934
+
1368
1935
  interface ModalProps {
1369
1936
  /** Řídí zobrazení modálního okna. */
1370
1937
  open: boolean;
@@ -1444,6 +2011,39 @@ interface DrawerProps {
1444
2011
  */
1445
2012
  declare const Drawer: React.FC<DrawerProps>;
1446
2013
 
2014
+ interface SheetProps {
2015
+ /** Řídí zobrazení sheetu. */
2016
+ open: boolean;
2017
+ /** Voláno při zavření sheetu. */
2018
+ onClose: () => void;
2019
+ /** Obsah sheetu. */
2020
+ children: React.ReactNode;
2021
+ /** Strana, ze které se sheet vysune. @default 'bottom' */
2022
+ side?: 'bottom' | 'right' | 'left' | 'top';
2023
+ /** Titulek zobrazený v záhlaví. */
2024
+ title?: string;
2025
+ /** Zobrazí zavírací tlačítko. @default true */
2026
+ showClose?: boolean;
2027
+ /** Další inline styly. */
2028
+ style?: React.CSSProperties;
2029
+ /** Dodatečná CSS třída. */
2030
+ className?: string;
2031
+ }
2032
+ /**
2033
+ * Lehký vysuvný panel, který může přijít z libovolné strany.
2034
+ *
2035
+ * Na rozdíl od Draweru je Sheet odlehčený a výchozí pozice je zdola
2036
+ * (vhodné pro mobilní rozhraní). Používá glass efekt a portálové vykreslení.
2037
+ *
2038
+ * @example
2039
+ * ```tsx
2040
+ * <Sheet open={isOpen} onClose={() => setOpen(false)} title="Filtry">
2041
+ * <p>Obsah sheetu</p>
2042
+ * </Sheet>
2043
+ * ```
2044
+ */
2045
+ declare const Sheet: React.FC<SheetProps>;
2046
+
1447
2047
  interface BreadcrumbItem {
1448
2048
  /** Zobrazovaný text položky. */
1449
2049
  label: string;
@@ -1721,68 +2321,125 @@ interface SpotlightProps {
1721
2321
  */
1722
2322
  declare const Spotlight: React.FC<SpotlightProps>;
1723
2323
 
1724
- type SegmentedControlSize = 'sm' | 'md' | 'lg';
1725
- interface SegmentedControlItem {
1726
- /** Unikátní hodnota segmentu. */
1727
- value: string;
1728
- /** Zobrazovaný text. Výchozí: `value`. */
1729
- label?: string;
1730
- /** Zakáže tento segment. */
1731
- disabled?: boolean;
2324
+ interface CommandItem {
2325
+ /** Unikátní identifikátor příkazu. */
2326
+ id: string;
2327
+ /** Hlavní text příkazu. */
2328
+ label: string;
2329
+ /** Volitelný popis příkazu. */
2330
+ description?: string;
2331
+ /** Volitelná ikona příkazu. */
2332
+ icon?: React.ReactNode;
2333
+ /** Klávesová zkratka (zobrazena jako badge). */
2334
+ shortcut?: string;
2335
+ /** Voláno při výběru příkazu. */
2336
+ onSelect: () => void;
1732
2337
  }
1733
- interface SegmentedControlProps {
1734
- /**
1735
- * Data — pole řetězců nebo objektů `{ value, label?, disabled? }`.
1736
- * Řetězce jsou automaticky převedeny na objekty s `value === label`.
1737
- */
1738
- data: (string | SegmentedControlItem)[];
1739
- /** Aktuálně vybraná hodnota (řízená komponenta). */
1740
- value: string;
1741
- /** Callback volaný při změně výběru. */
1742
- onChange: (value: string) => void;
1743
- /**
1744
- * Velikostní preset.
1745
- * @default 'md'
1746
- */
1747
- size?: SegmentedControlSize;
1748
- /**
1749
- * Roztáhne komponentu na celou šířku kontejneru.
1750
- * @default false
1751
- */
1752
- fullWidth?: boolean;
1753
- /**
1754
- * Orientace segmentů.
1755
- * @default 'horizontal'
1756
- */
1757
- orientation?: 'horizontal' | 'vertical';
1758
- /**
1759
- * Zakáže celou komponentu.
1760
- * @default false
1761
- */
1762
- disabled?: boolean;
2338
+ interface CommandGroup {
2339
+ /** Název skupiny příkazů. */
2340
+ label: string;
2341
+ /** Položky ve skupině. */
2342
+ items: CommandItem[];
2343
+ }
2344
+ interface CommandMenuProps {
2345
+ /** Řídí zobrazení command menu. */
2346
+ open: boolean;
2347
+ /** Voláno při zavření command menu. */
2348
+ onClose: () => void;
2349
+ /** Skupiny příkazů k zobrazení. */
2350
+ groups: CommandGroup[];
2351
+ /** Placeholder text vyhledávacího pole. @default 'Zadejte příkaz...' */
2352
+ placeholder?: string;
2353
+ /** Další inline styly pro kartu. */
2354
+ style?: React.CSSProperties;
1763
2355
  /** Dodatečná CSS třída. */
1764
2356
  className?: string;
2357
+ }
2358
+ /**
2359
+ * Rozšířený command palette s podporou skupin příkazů a klávesových zkratek.
2360
+ *
2361
+ * Filtruje příkazy podle vyhledávacího řetězce, podporuje klávesovou
2362
+ * navigaci (šipky, Enter, Escape) a zobrazuje klávesové zkratky.
2363
+ *
2364
+ * @example
2365
+ * ```tsx
2366
+ * <CommandMenu
2367
+ * open={open}
2368
+ * onClose={() => setOpen(false)}
2369
+ * groups={[
2370
+ * { label: 'Akce', items: [{ id: '1', label: 'Uložit', shortcut: '⌘S', onSelect: save }] },
2371
+ * ]}
2372
+ * />
2373
+ * ```
2374
+ */
2375
+ declare const CommandMenu: React.FC<CommandMenuProps>;
2376
+
2377
+ interface AppSidebarProps {
2378
+ /** Obsah postranního panelu (navigace, menu apod.). */
2379
+ children: React.ReactNode;
2380
+ /** Zda je panel sbalený. @default false */
2381
+ collapsed?: boolean;
2382
+ /** Voláno při změně stavu sbalení. */
2383
+ onCollapse?: (collapsed: boolean) => void;
2384
+ /** Šířka rozbalené postranní lišty v px. @default 260 */
2385
+ width?: number;
2386
+ /** Šířka sbalené postranní lišty v px. @default 64 */
2387
+ collapsedWidth?: number;
1765
2388
  /** Další inline styly. */
1766
2389
  style?: React.CSSProperties;
2390
+ /** Dodatečná CSS třída. */
2391
+ className?: string;
1767
2392
  }
1768
2393
  /**
1769
- * Segmentovaný přepínač dle SM-UI design systému.
2394
+ * Sbaletelný postranní panel pro navigaci aplikace.
1770
2395
  *
1771
- * Podobný záložkám, ale v kompaktnějším inline formátu
1772
- * s animovaným indikátorem posuvným mezi segmenty.
2396
+ * Používá glass efekt a plynulou animaci šířky. Tlačítko pro sbalení/rozbalení
2397
+ * si řeší konzument sám komponenta je plně řízená přes `collapsed` a `onCollapse`.
1773
2398
  *
1774
2399
  * @example
1775
2400
  * ```tsx
1776
- * const [view, setView] = useState('list');
2401
+ * const [collapsed, setCollapsed] = useState(false);
2402
+ * <AppSidebar collapsed={collapsed} onCollapse={setCollapsed}>
2403
+ * <button onClick={() => setCollapsed(c => !c)}>Toggle</button>
2404
+ * <nav>...</nav>
2405
+ * </AppSidebar>
2406
+ * ```
2407
+ */
2408
+ declare const AppSidebar: React.FC<AppSidebarProps>;
2409
+
2410
+ interface NavbarProps {
2411
+ /** Logo nebo název aplikace (vykresleno vlevo). */
2412
+ logo?: React.ReactNode;
2413
+ /** Navigační obsah (vykresleno uprostřed). */
2414
+ children?: React.ReactNode;
2415
+ /** Akční prvky – tlačítka, avatar apod. (vykresleno vpravo). */
2416
+ actions?: React.ReactNode;
2417
+ /** Zda je navbar přilepený k hornímu okraji. @default true */
2418
+ sticky?: boolean;
2419
+ /** Zda použít glass efekt (průhledné pozadí s rozmazáním). @default true */
2420
+ glass?: boolean;
2421
+ /** Další inline styly. */
2422
+ style?: React.CSSProperties;
2423
+ /** Dodatečná CSS třída. */
2424
+ className?: string;
2425
+ }
2426
+ /**
2427
+ * Horní navigační lišta aplikace.
1777
2428
  *
1778
- * <SegmentedControl
1779
- * data={['list', 'grid', 'table']}
1780
- * value={view}
1781
- * onChange={setView}
1782
- * />
2429
+ * Obsahuje tři sloty: logo (vlevo), children (uprostřed)
2430
+ * a actions (vpravo). Podporuje glass efekt a sticky pozici.
2431
+ *
2432
+ * @example
2433
+ * ```tsx
2434
+ * <Navbar
2435
+ * logo={<span>MyApp</span>}
2436
+ * actions={<Button size="sm">Přihlásit</Button>}
2437
+ * >
2438
+ * <a href="/about">O nás</a>
2439
+ * </Navbar>
1783
2440
  * ```
1784
2441
  */
1785
- declare const SegmentedControl: React.FC<SegmentedControlProps>;
2442
+ declare const Navbar: React.FC<NavbarProps>;
1786
2443
 
1787
2444
  type ToastVariant = 'info' | 'success' | 'error';
1788
2445
  interface ToastProps {
@@ -2014,6 +2671,50 @@ interface AlertProps {
2014
2671
  */
2015
2672
  declare const Alert: React.FC<AlertProps>;
2016
2673
 
2674
+ type NotificationVariant = 'info' | 'success' | 'warning' | 'error';
2675
+ interface NotificationProps {
2676
+ /** Vizuální varianta notifikace. @default 'info' */
2677
+ variant?: NotificationVariant;
2678
+ /** Titulek notifikace. */
2679
+ title: string;
2680
+ /** Obsah / popis notifikace. */
2681
+ children?: React.ReactNode;
2682
+ /** Zobrazí tlačítko zavření. @default false */
2683
+ closable?: boolean;
2684
+ /** Voláno při zavření notifikace. */
2685
+ onClose?: () => void;
2686
+ /** Vlastní ikona (nahradí výchozí ikonu varianty). */
2687
+ icon?: React.ReactNode;
2688
+ /** Akční prvek zobrazený na pravé straně (tlačítko apod.). */
2689
+ action?: React.ReactNode;
2690
+ /** Další inline styly. */
2691
+ style?: React.CSSProperties;
2692
+ /** Dodatečná CSS třída. */
2693
+ className?: string;
2694
+ }
2695
+ /**
2696
+ * Inline notifikační banner pro trvalé zobrazení v layoutu.
2697
+ *
2698
+ * Na rozdíl od `Toast` se nejedná o plovoucí overlay, ale o součást
2699
+ * obsahu stránky. Podporuje varianty info/success/warning/error,
2700
+ * volitelný akční prvek a zavírací tlačítko.
2701
+ *
2702
+ * @example
2703
+ * ```tsx
2704
+ * <Notification variant="success" title="Uloženo" closable>
2705
+ * Změny byly úspěšně uloženy.
2706
+ * </Notification>
2707
+ * <Notification
2708
+ * variant="warning"
2709
+ * title="Nová verze"
2710
+ * action={<Button size="sm">Aktualizovat</Button>}
2711
+ * >
2712
+ * Je dostupná nová verze aplikace.
2713
+ * </Notification>
2714
+ * ```
2715
+ */
2716
+ declare const Notification: React.FC<NotificationProps>;
2717
+
2017
2718
  type ProgressBarSize = 'sm' | 'md' | 'lg';
2018
2719
  interface ProgressBarProps {
2019
2720
  /**
@@ -2160,6 +2861,85 @@ interface SpinnerProps {
2160
2861
  */
2161
2862
  declare const Spinner: React.FC<SpinnerProps>;
2162
2863
 
2864
+ interface ConfirmDialogProps {
2865
+ /** Řídí zobrazení potvrzovacího dialogu. */
2866
+ open: boolean;
2867
+ /** Voláno při potvrzení akce. */
2868
+ onConfirm: () => void;
2869
+ /** Voláno při zrušení (zavření) dialogu. */
2870
+ onCancel: () => void;
2871
+ /** Titulek dialogu. */
2872
+ title: string;
2873
+ /** Volitelný popis akce. */
2874
+ description?: string;
2875
+ /** Text potvrzovacího tlačítka. @default 'Potvrdit' */
2876
+ confirmLabel?: string;
2877
+ /** Text zrušovacího tlačítka. @default 'Zrušit' */
2878
+ cancelLabel?: string;
2879
+ /** Varianta dialogu – 'danger' zvýrazní potvrzovací tlačítko červeně. @default 'default' */
2880
+ variant?: 'default' | 'danger';
2881
+ /** Stav načítání potvrzovacího tlačítka. @default false */
2882
+ loading?: boolean;
2883
+ /** Další inline styly. */
2884
+ style?: React.CSSProperties;
2885
+ /** Dodatečná CSS třída. */
2886
+ className?: string;
2887
+ }
2888
+ /**
2889
+ * Předpřipravený modální dialog pro potvrzení akce.
2890
+ *
2891
+ * Interně používá komponentu `Modal`. Podporuje standardní a danger variantu
2892
+ * s volitelným stavem načítání.
2893
+ *
2894
+ * @example
2895
+ * ```tsx
2896
+ * <ConfirmDialog
2897
+ * open={isOpen}
2898
+ * onConfirm={handleDelete}
2899
+ * onCancel={() => setOpen(false)}
2900
+ * title="Smazat položku?"
2901
+ * description="Tato akce je nevratná."
2902
+ * variant="danger"
2903
+ * />
2904
+ * ```
2905
+ */
2906
+ declare const ConfirmDialog: React.FC<ConfirmDialogProps>;
2907
+
2908
+ interface CopyButtonProps {
2909
+ /** Text ke zkopírování do schránky. */
2910
+ text: string;
2911
+ /** Vlastní obsah tlačítka (nahrazuje výchozí ikonu/text). */
2912
+ children?: React.ReactNode;
2913
+ /** Velikost tlačítka. @default 'md' */
2914
+ size?: 'sm' | 'md' | 'lg';
2915
+ /** Varianta zobrazení. @default 'icon' */
2916
+ variant?: 'icon' | 'button';
2917
+ /** Popisek tlačítka ve variantě 'button'. @default 'Kopírovat' */
2918
+ label?: string;
2919
+ /** Popisek po úspěšném zkopírování. @default 'Zkopírováno' */
2920
+ successLabel?: string;
2921
+ /** Callback volaný po úspěšném zkopírování do schránky. */
2922
+ onCopy?: () => void;
2923
+ /** Další inline styly. */
2924
+ style?: React.CSSProperties;
2925
+ /** Dodatečná CSS třída. */
2926
+ className?: string;
2927
+ }
2928
+ /**
2929
+ * Tlačítko pro zkopírování textu do schránky.
2930
+ *
2931
+ * Podporuje dvě varianty: minimální ikonovou (jen ikona kopírování)
2932
+ * a plnou tlačítkovou (s textem). Po úspěšném zkopírování se na 2 sekundy
2933
+ * zobrazí ikona zaškrtnutí.
2934
+ *
2935
+ * @example
2936
+ * ```tsx
2937
+ * <CopyButton text="npm install sm-ui" variant="button" label="Kopírovat příkaz" />
2938
+ * <CopyButton text={code} />
2939
+ * ```
2940
+ */
2941
+ declare const CopyButton: React.FC<CopyButtonProps>;
2942
+
2163
2943
  type DividerOrientation = 'horizontal' | 'vertical';
2164
2944
  interface DividerProps {
2165
2945
  /**
@@ -2411,4 +3191,4 @@ type Theme = 'light' | 'dark';
2411
3191
  */
2412
3192
  declare const useTheme: () => Theme;
2413
3193
 
2414
- export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, Alert, type AlertProps, type AlertVariant, Avatar, type AvatarProps, type AvatarSize, Badge, type BadgeProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonAsAnchorProps, type ButtonAsButtonProps, type ButtonIconPosition, type ButtonProps, type ButtonSize, type ButtonVariant, Card, type CardProps, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, Container, type ContainerMaxWidth, type ContainerProps, DatePicker, DatePickerGroup, type DatePickerGroupProps, type DatePickerProps, type DatePickerSize, Divider, type DividerOrientation, type DividerProps, type DragHandleProps, DragList, type DragListItem, type DragListProps, Drawer, type DrawerProps, DropdownMenu, type DropdownMenuItem, type DropdownMenuProps, EmptyState, type EmptyStateProps, FileUpload, type FileUploadProps, Input, InputGroup, type InputGroupProps, type InputProps, type InputSize, Link, type LinkProps, type LinkVariant, Modal, type ModalProps, Pagination, type PaginationProps, Popover, type PopoverProps, ProgressBar, type ProgressBarProps, type ProgressBarSize, ProgressCircle, type ProgressCircleProps, Radio, RadioGroup, type RadioGroupOption, type RadioGroupProps, type RadioProps, type RadioSize, SegmentedControl, type SegmentedControlItem, type SegmentedControlProps, type SegmentedControlSize, Select, SelectGroup, type SelectGroupProps, type SelectOption, type SelectProps, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderSize, Spinner, type SpinnerProps, type SpinnerSize, Spotlight, type SpotlightItem, type SpotlightProps, Stack, type StackAlign, type StackDirection, type StackJustify, type StackProps, Stat, type StatProps, type StepItem, Stepper, type StepperProps, Switch, type SwitchProps, type SwitchSize, Tab, TabPanel, type TabPanelProps, type TabProps, Table, type TableColumn, type TableProps, Tabs, type TabsProps, Tag, TagItem, type TagItemProps, type TagProps, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type Theme, Toast, type ToastContextValue, type ToastOptions, type ToastPosition, type ToastProps, type ToastVariant, ToasterProvider, type ToasterProviderProps, Tooltip, type TooltipProps, type UploadedFile, useTheme, useToast };
3194
+ export { Accordion, AccordionItem, type AccordionItemProps, type AccordionProps, Alert, type AlertProps, type AlertVariant, AppSidebar, type AppSidebarProps, Avatar, type AvatarProps, type AvatarSize, Badge, type BadgeProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonAsAnchorProps, type ButtonAsButtonProps, type ButtonIconPosition, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarEvent, type CalendarProps, Card, type CardProps, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, ColorPicker, type ColorPickerProps, Combobox, type ComboboxOption, type ComboboxProps, type ComboboxSize, type CommandGroup, type CommandItem, CommandMenu, type CommandMenuProps, ConfirmDialog, type ConfirmDialogProps, Container, type ContainerMaxWidth, type ContainerProps, CopyButton, type CopyButtonProps, DataGrid, type DataGridColumn, type DataGridProps, DataList, type DataListItem, type DataListProps, DatePicker, DatePickerGroup, type DatePickerGroupProps, type DatePickerProps, type DatePickerSize, Divider, type DividerOrientation, type DividerProps, type DragHandleProps, DragList, type DragListItem, type DragListProps, Drawer, type DrawerProps, DropdownMenu, type DropdownMenuItem, type DropdownMenuProps, EmptyState, type EmptyStateProps, FileUpload, type FileUploadProps, Input, InputGroup, type InputGroupProps, type InputProps, type InputSize, Link, type LinkProps, type LinkVariant, Modal, type ModalProps, Navbar, type NavbarProps, Notification, type NotificationProps, type NotificationVariant, NumberInput, type NumberInputProps, type NumberInputSize, type NumberInputVariant, OTPInput, type OTPInputProps, Pagination, type PaginationProps, Popover, type PopoverProps, ProgressBar, type ProgressBarProps, type ProgressBarSize, ProgressCircle, type ProgressCircleProps, Radio, RadioGroup, type RadioGroupOption, type RadioGroupProps, type RadioProps, type RadioSize, Rating, type RatingProps, type RatingSize, SegmentedControl, type SegmentedControlItem, type SegmentedControlProps, type SegmentedControlSize, Select, SelectGroup, type SelectGroupProps, type SelectOption, type SelectProps, Sheet, type SheetProps, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderSize, Spinner, type SpinnerProps, type SpinnerSize, Spotlight, type SpotlightItem, type SpotlightProps, Stack, type StackAlign, type StackDirection, type StackJustify, type StackProps, Stat, type StatProps, StatusBadge, type StatusBadgeProps, type StatusBadgeStatus, type StepItem, Stepper, type StepperProps, Switch, type SwitchProps, type SwitchSize, Tab, TabPanel, type TabPanelProps, type TabProps, Table, type TableColumn, type TableProps, Tabs, type TabsProps, Tag, TagItem, type TagItemProps, type TagProps, Textarea, type TextareaProps, type TextareaResize, type TextareaSize, type Theme, Timeline, type TimelineItem, type TimelineProps, Toast, type ToastContextValue, type ToastOptions, type ToastPosition, type ToastProps, type ToastVariant, ToasterProvider, type ToasterProviderProps, Tooltip, type TooltipProps, Tree, type TreeNode, type TreeProps, type UploadedFile, useTheme, useToast };