@smworks-cz/ui-kit 0.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.
@@ -0,0 +1,2414 @@
1
+ import React from 'react';
2
+
3
+ type ButtonVariant = 'primary' | 'secondary' | 'outline';
4
+ type ButtonSize = 'sm' | 'md' | 'lg';
5
+ type ButtonIconPosition = 'left' | 'right';
6
+ /** Sdílené props pro režim `<button>` i `<a>`. */
7
+ interface ButtonBaseProps {
8
+ /**
9
+ * Vizuální varianta tlačítka.
10
+ * - `primary` — oranžové vyplnění (#FC4F00)
11
+ * - `secondary` — průhledné, bez okraje
12
+ * - `outline` — průhledné s bílým okrajem
13
+ * @default 'primary'
14
+ */
15
+ variant?: ButtonVariant;
16
+ /**
17
+ * Velikostní preset.
18
+ * @default 'md'
19
+ */
20
+ size?: ButtonSize;
21
+ /**
22
+ * Volitelná ikona — libovolný React uzel (SVG, komponenta…).
23
+ * Při použití bez `children` se tlačítko vykreslí jako čtverec.
24
+ */
25
+ icon?: React.ReactNode;
26
+ /**
27
+ * Na které straně se ikona zobrazí vzhledem k textu.
28
+ * @default 'left'
29
+ */
30
+ iconPosition?: ButtonIconPosition;
31
+ /**
32
+ * Při `true` je tlačítko neaktivní a místo ikony se zobrazí spinner
33
+ * (nebo samotný spinner, pokud ikona chybí).
34
+ * Ukazatel myši je blokován; `onClick` se nevyvolá.
35
+ */
36
+ loading?: boolean;
37
+ /**
38
+ * Roztáhne tlačítko na celou šířku kontejneru.
39
+ */
40
+ fullWidth?: boolean;
41
+ /**
42
+ * Další inline styly aplikované na kořenový element (`<button>` nebo `<a>`).
43
+ * Sloučeny za všechny variantní / velikostní styly — pro jednorázové přepsání.
44
+ */
45
+ style?: React.CSSProperties;
46
+ /**
47
+ * Dodatečná CSS třída pro kořenový element.
48
+ */
49
+ className?: string;
50
+ /**
51
+ * Textový obsah tlačítka.
52
+ * Při vynechání (pokud je zadána `icon`) se tlačítko vykreslí jako čtverec.
53
+ */
54
+ children?: React.ReactNode;
55
+ }
56
+ /** Vykreslení jako nativní `<button>` (výchozí). Dědí všechny standardní atributy — včetně `onClick`, `type`, `form`, `name`, `value`, `aria-*` apod. */
57
+ interface ButtonAsButtonProps extends ButtonBaseProps, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, keyof ButtonBaseProps> {
58
+ /** Při vynechání se komponenta vykreslí jako `<button>`. */
59
+ href?: undefined;
60
+ }
61
+ /** Vykreslení jako `<a>` odkaz, pokud je zadáno `href`. Vhodné pro navigační tlačítka. */
62
+ interface ButtonAsAnchorProps extends ButtonBaseProps, Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof ButtonBaseProps> {
63
+ href: string;
64
+ }
65
+ type ButtonProps = ButtonAsButtonProps | ButtonAsAnchorProps;
66
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement | HTMLAnchorElement>>;
67
+
68
+ type InputSize = 'sm' | 'md' | 'lg';
69
+ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {
70
+ /**
71
+ * Popisek zobrazený nad vstupním polem.
72
+ * Stylizován velkými písmeny dle SM-UI design systému.
73
+ * Pokud je `required`, zobrazí se hvězdička.
74
+ */
75
+ label?: string;
76
+ /**
77
+ * Ikona vykreslená uvnitř vstupního pole.
78
+ * Typicky SVG nebo komponenta ikony.
79
+ */
80
+ icon?: React.ReactNode;
81
+ /**
82
+ * Na které straně se ikona zobrazí.
83
+ * @default 'left'
84
+ */
85
+ iconPosition?: 'left' | 'right';
86
+ /**
87
+ * Při `true` se pole zobrazí jako nevalidní (červený okraj).
88
+ * Při zadání řetězce se pod polem zobrazí chybová zpráva.
89
+ */
90
+ error?: boolean | string;
91
+ /**
92
+ * Nápovědný text zobrazený pod vstupním polem.
93
+ * Nezobrazí se pokud je aktivní chybová zpráva.
94
+ */
95
+ helperText?: string;
96
+ /**
97
+ * Při `true` se zobrazí spinner a pole přejde do režimu pouze pro čtení.
98
+ * Vhodné pro asynchronní validaci nebo načítání dat.
99
+ */
100
+ loading?: boolean;
101
+ /**
102
+ * Zobrazí tlačítko pro vymazání obsahu pole (✕).
103
+ * Funguje pouze pokud pole obsahuje hodnotu.
104
+ * @default false
105
+ */
106
+ clearable?: boolean;
107
+ /**
108
+ * Zobrazí tlačítko pro přepínání viditelnosti hesla (oko).
109
+ * Při `type="password"` se aktivuje automaticky.
110
+ * Nastavte na `false` pro vypnutí.
111
+ */
112
+ passwordToggle?: boolean;
113
+ /**
114
+ * Velikostní preset.
115
+ * - `'sm'` — kompaktní (padding 6px, font 14px)
116
+ * - `'md'` — výchozí (padding 8px, font 16px)
117
+ * - `'lg'` — velký (padding 10px, font 18px)
118
+ * @default 'md'
119
+ */
120
+ size?: InputSize;
121
+ /**
122
+ * Roztáhne pole na celou šířku kontejneru.
123
+ * @default false
124
+ */
125
+ fullWidth?: boolean;
126
+ /**
127
+ * Další inline styly pro **obalový** `<div>` (ne pro nativní input).
128
+ * Pro stylování nativního `<input>` použijte `inputStyle`.
129
+ */
130
+ style?: React.CSSProperties;
131
+ /**
132
+ * Dodatečná CSS třída pro **obalový** `<div>`.
133
+ */
134
+ className?: string;
135
+ /**
136
+ * Další inline styly aplikované přímo na nativní `<input>` element.
137
+ */
138
+ inputStyle?: React.CSSProperties;
139
+ }
140
+ interface InputGroupProps {
141
+ /**
142
+ * Text popisku vykreslený nad vstupním polem.
143
+ * Zobrazuje se velkými písmeny dle SM-UI design systému.
144
+ */
145
+ label: string;
146
+ /**
147
+ * Hodnota `htmlFor` propojující `<label>` s potomkem `<input>`.
148
+ * Automaticky generováno, pokud není zadáno.
149
+ */
150
+ htmlFor?: string;
151
+ /**
152
+ * Vstupní element(y) vykreslené uvnitř skupiny.
153
+ * Při vynechání se vykreslí výchozí `<Input />`.
154
+ */
155
+ children?: React.ReactNode;
156
+ /** Další inline styly pro obalový `<div>`. */
157
+ style?: React.CSSProperties;
158
+ /** Dodatečná CSS třída pro obalový `<div>`. */
159
+ className?: string;
160
+ }
161
+ /**
162
+ * Řízené / neřízené textové pole dle SM-UI design systému.
163
+ *
164
+ * Podporuje popisek, ikonu, chybový stav, nápovědný text,
165
+ * vymazání hodnoty, velikostní presety a tmavý / světlý režim.
166
+ *
167
+ * Všechny nativní atributy `<input>` (`value`, `onChange`, `onBlur`, `placeholder`,
168
+ * `type`, `autoComplete`, `maxLength`, `readOnly`, `disabled`, …) jsou přesměrovány.
169
+ *
170
+ * @example
171
+ * ```tsx
172
+ * <Input label="E-mail" placeholder="jmeno@priklad.cz" required />
173
+ * <Input icon={<SearchIcon />} placeholder="Hledat…" clearable />
174
+ * <Input error="Toto pole je povinné" value="" />
175
+ * <Input label="Heslo" type="password" helperText="Min. 8 znaků" />
176
+ * ```
177
+ */
178
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
179
+ /**
180
+ * Obalí `<Input>` (nebo jiný formulářový prvek) skupinou s popiskem.
181
+ * Popisek je stylizován velkými písmeny dle SM-UI design systému.
182
+ *
183
+ * Pro jednoduché případy lze použít přímo `<Input label="..." />`.
184
+ * `InputGroup` je vhodný pro kompozici více prvků pod jedním popiskem.
185
+ *
186
+ * @example
187
+ * ```tsx
188
+ * <InputGroup label="Adresa">
189
+ * <Input placeholder="Ulice" />
190
+ * <Input placeholder="Město" />
191
+ * </InputGroup>
192
+ * ```
193
+ */
194
+ declare const InputGroup: React.FC<InputGroupProps>;
195
+
196
+ interface SelectOption {
197
+ /** Unikátní hodnota položky. */
198
+ value: string;
199
+ /** Zobrazovaný popisek. Pokud chybí, použije se `value`. */
200
+ label?: string;
201
+ /** Při `true` nelze položku vybrat. */
202
+ disabled?: boolean;
203
+ }
204
+ interface SelectProps {
205
+ /** Dostupné položky k výběru. */
206
+ options: SelectOption[];
207
+ /**
208
+ * Aktuální hodnota.
209
+ * - Jednoduchý výběr: `string | null`
210
+ * - Vícenásobný výběr: `string[]`
211
+ */
212
+ value?: string | string[] | null;
213
+ /**
214
+ * Voláno při změně výběru.
215
+ * - Jednoduchý výběr: `(value: string | null) => void`
216
+ * - Vícenásobný výběr: `(value: string[]) => void`
217
+ */
218
+ onChange?: (value: any) => void;
219
+ /** Umožní vybrat více položek najednou. @default false */
220
+ multiple?: boolean;
221
+ /** Zobrazí textové pole pro filtrování položek. @default false */
222
+ searchable?: boolean;
223
+ /** Zobrazí tlačítko pro vymazání výběru. @default false */
224
+ clearable?: boolean;
225
+ /** Zakáže celý select. @default false */
226
+ disabled?: boolean;
227
+ /**
228
+ * Při `true` je select neinteraktivní a místo šipky se zobrazí spinner.
229
+ * Vhodné při asynchronním načítání položek.
230
+ * @default false
231
+ */
232
+ loading?: boolean;
233
+ /** Označí select jako nevalidní — přijímá `true` nebo textovou chybovou zprávu. */
234
+ error?: boolean | string;
235
+ /** Zástupný text zobrazený při prázdném výběru. */
236
+ placeholder?: string;
237
+ /** Maximální výška (px) rozbalovacího seznamu před scrollováním. @default 240 */
238
+ maxDropdownHeight?: number;
239
+ /** Další inline styly pro kořenový obal. */
240
+ style?: React.CSSProperties;
241
+ /** Dodatečná CSS třída pro kořenový obal. */
242
+ className?: string;
243
+ }
244
+ interface SelectGroupProps {
245
+ /** Text popisku nad selectem, velkými písmeny dle SM-UI design systému. */
246
+ label: string;
247
+ /** `htmlFor` propojující `<label>` se selectem. Automaticky generováno, pokud chybí. */
248
+ htmlFor?: string;
249
+ /** Select element(y) vykreslené uvnitř skupiny. */
250
+ children?: React.ReactNode;
251
+ /** Další inline styly pro obal. */
252
+ style?: React.CSSProperties;
253
+ /** Dodatečná CSS třída pro obal. */
254
+ className?: string;
255
+ }
256
+ /**
257
+ * Vlastní rozbalovací výběr dle SM-UI design systému.
258
+ *
259
+ * Podporuje jednoduchý / vícenásobný výběr, fulltextové vyhledávání,
260
+ * vymazání hodnoty, chybový stav a tmavý / světlý režim přes `useTheme`.
261
+ *
262
+ * Dropdown se vykresluje přes React portál, takže ho neořízne
263
+ * rodičovský kontejner s `overflow: hidden`.
264
+ *
265
+ * @example
266
+ * ```tsx
267
+ * // Jednoduchý výběr
268
+ * <Select
269
+ * options={[{ value: 'cz', label: 'Česko' }, { value: 'sk', label: 'Slovensko' }]}
270
+ * value={zeme}
271
+ * onChange={setZeme}
272
+ * placeholder="Vyberte zemi"
273
+ * clearable
274
+ * />
275
+ *
276
+ * // Vícenásobný výběr s vyhledáváním
277
+ * <Select
278
+ * options={tagy}
279
+ * value={vybraneTaxy}
280
+ * onChange={setVybraneTaxy}
281
+ * multiple
282
+ * searchable
283
+ * placeholder="Vyberte tagy…"
284
+ * />
285
+ * ```
286
+ */
287
+ declare const Select: React.FC<SelectProps>;
288
+ /**
289
+ * Obalí `<Select>` skupinou s popiskem, vizuálně odpovídá `InputGroup`.
290
+ *
291
+ * @example
292
+ * ```tsx
293
+ * <SelectGroup label="Země">
294
+ * <Select options={zeme} value={zeme} onChange={setZeme} />
295
+ * </SelectGroup>
296
+ * ```
297
+ */
298
+ declare const SelectGroup: React.FC<SelectGroupProps>;
299
+
300
+ type DatePickerSize = 'sm' | 'md' | 'lg';
301
+ interface DatePickerProps {
302
+ /**
303
+ * Režim výběru data.
304
+ * - `'single'` — výběr jednoho data
305
+ * - `'range'` — výběr rozsahu (od–do)
306
+ * @default 'single'
307
+ */
308
+ mode?: 'single' | 'range';
309
+ /**
310
+ * Zobrazí výběr času (hodiny a minuty) pod kalendářem.
311
+ * @default false
312
+ */
313
+ showTime?: boolean;
314
+ /**
315
+ * Aktuální hodnota.
316
+ * - `single` režim: `Date | null`
317
+ * - `range` režim: `[Date | null, Date | null]`
318
+ */
319
+ value?: Date | null | [Date | null, Date | null];
320
+ /**
321
+ * Voláno při změně výběru.
322
+ * - `single` režim: `(value: Date | null) => void`
323
+ * - `range` režim: `(value: [Date | null, Date | null]) => void`
324
+ */
325
+ onChange?: (value: any) => void;
326
+ /**
327
+ * Popisek zobrazený nad vstupním polem.
328
+ * Stylizován velkými písmeny dle SM-UI design systému.
329
+ */
330
+ label?: string;
331
+ /** Zástupný text zobrazený při prázdné hodnotě. */
332
+ placeholder?: string;
333
+ /**
334
+ * Při `true` se pole zobrazí jako nevalidní (červený okraj).
335
+ * Při zadání řetězce se pod polem zobrazí chybová zpráva.
336
+ */
337
+ error?: boolean | string;
338
+ /** Nápovědný text zobrazený pod vstupním polem. */
339
+ helperText?: string;
340
+ /** Zakáže celý DatePicker. @default false */
341
+ disabled?: boolean;
342
+ /**
343
+ * Při `true` je DatePicker neinteraktivní a zobrazí spinner.
344
+ * @default false
345
+ */
346
+ loading?: boolean;
347
+ /** Zobrazí tlačítko pro vymazání výběru. @default false */
348
+ clearable?: boolean;
349
+ /**
350
+ * Velikostní preset.
351
+ * @default 'md'
352
+ */
353
+ size?: DatePickerSize;
354
+ /** Roztáhne pole na celou šířku kontejneru. @default false */
355
+ fullWidth?: boolean;
356
+ /** Označí pole jako povinné (hvězdička u popisku). */
357
+ required?: boolean;
358
+ /** Minimální datum, které lze vybrat. */
359
+ minDate?: Date;
360
+ /** Maximální datum, které lze vybrat. */
361
+ maxDate?: Date;
362
+ /**
363
+ * První den v týdnu (ISO: 1=pondělí).
364
+ * @default 1
365
+ */
366
+ firstDayOfWeek?: number;
367
+ /** Další inline styly pro kořenový obal. */
368
+ style?: React.CSSProperties;
369
+ /** Dodatečná CSS třída pro kořenový obal. */
370
+ className?: string;
371
+ }
372
+ interface DatePickerGroupProps {
373
+ /** Text popisku nad DatePickerem, velkými písmeny dle SM-UI design systému. */
374
+ label: string;
375
+ /** `htmlFor` propojující `<label>` s DatePickerem. Automaticky generováno, pokud chybí. */
376
+ htmlFor?: string;
377
+ /** DatePicker element(y) vykreslené uvnitř skupiny. */
378
+ children?: React.ReactNode;
379
+ /** Další inline styly pro obal. */
380
+ style?: React.CSSProperties;
381
+ /** Dodatečná CSS třída pro obal. */
382
+ className?: string;
383
+ }
384
+ /**
385
+ * Výběr data (a volitelně času) dle SM-UI design systému.
386
+ *
387
+ * Podporuje jednoduchý výběr / rozsah, volitelný výběr času,
388
+ * omezení min/max datem, chybový stav a tmavý / světlý režim.
389
+ *
390
+ * Dropdown se vykresluje přes React portál, takže ho neořízne
391
+ * rodičovský kontejner s `overflow: hidden`.
392
+ *
393
+ * @example
394
+ * ```tsx
395
+ * // Jednoduchý výběr
396
+ * <DatePicker
397
+ * label="Datum narození"
398
+ * value={datum}
399
+ * onChange={setDatum}
400
+ * clearable
401
+ * />
402
+ *
403
+ * // Rozsah s časem
404
+ * <DatePicker
405
+ * mode="range"
406
+ * showTime
407
+ * value={rozsah}
408
+ * onChange={setRozsah}
409
+ * placeholder="Vyberte rozsah…"
410
+ * />
411
+ * ```
412
+ */
413
+ declare const DatePicker: React.FC<DatePickerProps>;
414
+ /**
415
+ * Obalí `<DatePicker>` skupinou s popiskem, vizuálně odpovídá `InputGroup`.
416
+ *
417
+ * @example
418
+ * ```tsx
419
+ * <DatePickerGroup label="Datum akce">
420
+ * <DatePicker value={datum} onChange={setDatum} />
421
+ * </DatePickerGroup>
422
+ * ```
423
+ */
424
+ declare const DatePickerGroup: React.FC<DatePickerGroupProps>;
425
+
426
+ type CheckboxSize = 'sm' | 'md' | 'lg';
427
+ interface CheckboxProps {
428
+ /** Stav zaškrtnutí. */
429
+ checked?: boolean;
430
+ /** Callback volaný při změně stavu. */
431
+ onChange?: (checked: boolean) => void;
432
+ /** Textový popisek zobrazený vedle zaškrtávacího pole. */
433
+ label?: string;
434
+ /** Deaktivuje zaškrtávací pole. */
435
+ disabled?: boolean;
436
+ /**
437
+ * Chybový stav. Při `true` se zobrazí červený okraj.
438
+ * Při zadání řetězce se pod polem zobrazí chybová zpráva.
439
+ */
440
+ error?: boolean | string;
441
+ /**
442
+ * Velikostní preset.
443
+ * @default 'md'
444
+ */
445
+ size?: CheckboxSize;
446
+ /** Neurčitý stav — zobrazí pomlčku místo zaškrtnutí. */
447
+ indeterminate?: boolean;
448
+ /** Dodatečná CSS třída pro obalový element. */
449
+ className?: string;
450
+ /** Další inline styly pro obalový element. */
451
+ style?: React.CSSProperties;
452
+ }
453
+ interface CheckboxGroupProps {
454
+ /** Popisek skupiny. */
455
+ label?: string;
456
+ /** Potomci — typicky komponenty `<Checkbox>`. */
457
+ children: React.ReactNode;
458
+ /** Chybový stav skupiny. Při řetězci se zobrazí chybová zpráva. */
459
+ error?: boolean | string;
460
+ /** Dodatečná CSS třída. */
461
+ className?: string;
462
+ /** Další inline styly. */
463
+ style?: React.CSSProperties;
464
+ }
465
+ /**
466
+ * Zaškrtávací pole dle SM-UI design systému.
467
+ *
468
+ * Podporuje vlastní SVG zaškrtnutí, neurčitý stav,
469
+ * chybový stav, velikostní presety a tmavý / světlý režim.
470
+ *
471
+ * @example
472
+ * ```tsx
473
+ * <Checkbox label="Souhlasím s podmínkami" checked={agreed} onChange={setAgreed} />
474
+ * <Checkbox indeterminate label="Vybrat vše" />
475
+ * ```
476
+ */
477
+ declare const Checkbox: React.FC<CheckboxProps>;
478
+ /**
479
+ * Skupina zaškrtávacích polí s volitelným popiskem.
480
+ *
481
+ * @example
482
+ * ```tsx
483
+ * <CheckboxGroup label="Zájmy">
484
+ * <Checkbox label="Sport" checked={...} onChange={...} />
485
+ * <Checkbox label="Hudba" checked={...} onChange={...} />
486
+ * </CheckboxGroup>
487
+ * ```
488
+ */
489
+ declare const CheckboxGroup: React.FC<CheckboxGroupProps>;
490
+
491
+ type RadioSize = 'sm' | 'md' | 'lg';
492
+ interface RadioProps {
493
+ /** Hodnota tohoto přepínače. */
494
+ value: string;
495
+ /** Zda je tento přepínač vybrán. */
496
+ checked?: boolean;
497
+ /** Callback volaný při výběru. */
498
+ onChange?: (value: string) => void;
499
+ /** Textový popisek. */
500
+ label?: string;
501
+ /** Deaktivuje přepínač. */
502
+ disabled?: boolean;
503
+ /**
504
+ * Velikostní preset.
505
+ * @default 'md'
506
+ */
507
+ size?: RadioSize;
508
+ /** Dodatečná CSS třída. */
509
+ className?: string;
510
+ /** Další inline styly. */
511
+ style?: React.CSSProperties;
512
+ }
513
+ interface RadioGroupOption {
514
+ /** Hodnota volby. */
515
+ value: string;
516
+ /** Zobrazený popisek. */
517
+ label: string;
518
+ /** Deaktivuje tuto volbu. */
519
+ disabled?: boolean;
520
+ }
521
+ interface RadioGroupProps {
522
+ /** Aktuálně vybraná hodnota. */
523
+ value?: string;
524
+ /** Callback volaný při změně výběru. */
525
+ onChange?: (value: string) => void;
526
+ /** Popisek skupiny. */
527
+ label?: string;
528
+ /** Seznam voleb. */
529
+ options: RadioGroupOption[];
530
+ /**
531
+ * Směr rozložení voleb.
532
+ * @default 'vertical'
533
+ */
534
+ direction?: 'vertical' | 'horizontal';
535
+ /**
536
+ * Chybový stav. Při řetězci se zobrazí chybová zpráva.
537
+ */
538
+ error?: boolean | string;
539
+ /** Nápovědný text pod skupinou. */
540
+ helperText?: string;
541
+ /**
542
+ * Velikostní preset pro všechny přepínače ve skupině.
543
+ * @default 'md'
544
+ */
545
+ size?: RadioSize;
546
+ /** Dodatečná CSS třída. */
547
+ className?: string;
548
+ /** Další inline styly. */
549
+ style?: React.CSSProperties;
550
+ }
551
+ /**
552
+ * Přepínací tlačítko (radio) dle SM-UI design systému.
553
+ *
554
+ * Používá vlastní SVG kruh s oranžovou tečkou při výběru.
555
+ * Podporuje velikostní presety a tmavý / světlý režim.
556
+ *
557
+ * @example
558
+ * ```tsx
559
+ * <Radio value="a" label="Volba A" checked={selected === 'a'} onChange={setSelected} />
560
+ * ```
561
+ */
562
+ declare const Radio: React.FC<RadioProps>;
563
+ /**
564
+ * Skupina přepínačů s popiskem, chybovým stavem a nápovědným textem.
565
+ *
566
+ * @example
567
+ * ```tsx
568
+ * <RadioGroup
569
+ * label="Pohlaví"
570
+ * value={gender}
571
+ * onChange={setGender}
572
+ * options={[
573
+ * { value: 'male', label: 'Muž' },
574
+ * { value: 'female', label: 'Žena' },
575
+ * ]}
576
+ * />
577
+ * ```
578
+ */
579
+ declare const RadioGroup: React.FC<RadioGroupProps>;
580
+
581
+ type SwitchSize = 'sm' | 'md' | 'lg';
582
+ interface SwitchProps {
583
+ /** Stav přepínače. */
584
+ checked?: boolean;
585
+ /** Callback volaný při změně stavu. */
586
+ onChange?: (checked: boolean) => void;
587
+ /** Textový popisek zobrazený napravo od přepínače. */
588
+ label?: string;
589
+ /** Deaktivuje přepínač. */
590
+ disabled?: boolean;
591
+ /**
592
+ * Velikostní preset.
593
+ * @default 'md'
594
+ */
595
+ size?: SwitchSize;
596
+ /** Dodatečná CSS třída. */
597
+ className?: string;
598
+ /** Další inline styly. */
599
+ style?: React.CSSProperties;
600
+ }
601
+ /**
602
+ * Přepínač (switch/toggle) dle SM-UI design systému.
603
+ *
604
+ * Pilulkový tvar s plynulou animací posunu.
605
+ * Oranžový ve stavu zapnuto, jemný okraj ve stavu vypnuto.
606
+ *
607
+ * @example
608
+ * ```tsx
609
+ * <Switch label="Noční režim" checked={dark} onChange={setDark} />
610
+ * ```
611
+ */
612
+ declare const Switch: React.FC<SwitchProps>;
613
+
614
+ type TextareaSize = 'sm' | 'md' | 'lg';
615
+ type TextareaResize = 'none' | 'vertical' | 'both';
616
+ interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
617
+ /**
618
+ * Popisek zobrazený nad textovým polem.
619
+ * Stylizován velkými písmeny dle SM-UI design systému.
620
+ */
621
+ label?: string;
622
+ /**
623
+ * Při `true` se pole zobrazí jako nevalidní (červený okraj).
624
+ * Při zadání řetězce se pod polem zobrazí chybová zpráva.
625
+ */
626
+ error?: boolean | string;
627
+ /** Nápovědný text zobrazený pod polem. */
628
+ helperText?: string;
629
+ /** Při `true` se pole zobrazí jako neaktivní. */
630
+ disabled?: boolean;
631
+ /**
632
+ * Při `true` se pole zobrazí pouze pro čtení se sníženou opacitou.
633
+ */
634
+ loading?: boolean;
635
+ /**
636
+ * Velikostní preset.
637
+ * @default 'md'
638
+ */
639
+ size?: TextareaSize;
640
+ /**
641
+ * Roztáhne pole na celou šířku kontejneru.
642
+ * @default false
643
+ */
644
+ fullWidth?: boolean;
645
+ /** Povinné pole — zobrazí hvězdičku u popisku. */
646
+ required?: boolean;
647
+ /**
648
+ * Počet řádků.
649
+ * @default 4
650
+ */
651
+ rows?: number;
652
+ /**
653
+ * Maximální počet znaků. Při zadání se zobrazí počítadlo.
654
+ */
655
+ maxLength?: number;
656
+ /**
657
+ * Režim změny velikosti textového pole.
658
+ * Ignorováno, pokud je `autoHeight` zapnuto.
659
+ * @default 'vertical'
660
+ */
661
+ resize?: TextareaResize;
662
+ /**
663
+ * Automatická výška — pole se přizpůsobí obsahu.
664
+ * Při zapnutí je `resize` automaticky nastaven na `'none'`.
665
+ * @default false
666
+ */
667
+ autoHeight?: boolean;
668
+ /**
669
+ * Minimální počet řádků (použito společně s `autoHeight`).
670
+ * Pokud `autoHeight` není zapnuto, funguje jako `rows`.
671
+ * @default 1
672
+ */
673
+ minRows?: number;
674
+ /**
675
+ * Maximální počet řádků (použito společně s `autoHeight`).
676
+ * Po dosažení se zobrazí scrollbar.
677
+ */
678
+ maxRows?: number;
679
+ /** Dodatečná CSS třída pro obalový element. */
680
+ className?: string;
681
+ /**
682
+ * Další inline styly pro **obalový** element.
683
+ */
684
+ style?: React.CSSProperties;
685
+ }
686
+ /**
687
+ * Víceřádkové textové pole dle SM-UI design systému.
688
+ *
689
+ * Sdílí API s komponentou `Input` — podporuje popisek, chybový stav,
690
+ * nápovědný text, počítadlo znaků a velikostní presety.
691
+ *
692
+ * @example
693
+ * ```tsx
694
+ * <Textarea label="Poznámka" placeholder="Napište poznámku…" rows={5} />
695
+ * <Textarea label="Bio" maxLength={200} helperText="Krátký popis" />
696
+ * ```
697
+ */
698
+ declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
699
+
700
+ type SliderSize = 'sm' | 'md' | 'lg';
701
+ interface SliderProps {
702
+ /** Aktuální hodnota. Při `range` je to `[number, number]`. */
703
+ value: number | [number, number];
704
+ /** Callback volaný při změně hodnoty. */
705
+ onChange?: (value: number | [number, number]) => void;
706
+ /**
707
+ * Minimální hodnota.
708
+ * @default 0
709
+ */
710
+ min?: number;
711
+ /**
712
+ * Maximální hodnota.
713
+ * @default 100
714
+ */
715
+ max?: number;
716
+ /**
717
+ * Krok posunu.
718
+ * @default 1
719
+ */
720
+ step?: number;
721
+ /** Popisek nad sliderem. */
722
+ label?: string;
723
+ /** Deaktivuje slider. */
724
+ disabled?: boolean;
725
+ /**
726
+ * Zobrazí aktuální hodnotu vedle slideru.
727
+ * @default false
728
+ */
729
+ showValue?: boolean;
730
+ /**
731
+ * Režim rozsahu — value musí být `[number, number]`.
732
+ * @default false
733
+ */
734
+ range?: boolean;
735
+ /**
736
+ * Velikostní preset.
737
+ * @default 'md'
738
+ */
739
+ size?: SliderSize;
740
+ /** Dodatečná CSS třída. */
741
+ className?: string;
742
+ /** Další inline styly. */
743
+ style?: React.CSSProperties;
744
+ }
745
+ /**
746
+ * Posuvník dle SM-UI design systému.
747
+ *
748
+ * Podporuje jednoduchý i rozsahový režim, zobrazení hodnoty,
749
+ * velikostní presety a tmavý / světlý režim.
750
+ *
751
+ * @example
752
+ * ```tsx
753
+ * <Slider label="Hlasitost" value={volume} onChange={setVolume} showValue />
754
+ * <Slider range value={[20, 80]} onChange={setRange} label="Cenový rozsah" />
755
+ * ```
756
+ */
757
+ declare const Slider: React.FC<SliderProps>;
758
+
759
+ interface UploadedFile {
760
+ /** Objekt nativního souboru. */
761
+ file: File;
762
+ /** Unikátní ID pro klíč. */
763
+ id: string;
764
+ }
765
+ type FileUploadVariant = 'dropzone' | 'button';
766
+ interface FileUploadProps {
767
+ /**
768
+ * Vizuální varianta.
769
+ * - `'dropzone'` — velká zóna s drag & drop (výchozí)
770
+ * - `'button'` — kompaktní vstup ve stylu tlačítka/inputu
771
+ * @default 'dropzone'
772
+ */
773
+ variant?: FileUploadVariant;
774
+ /** Callback volaný při přidání souborů. Vrací pole nativních `File` objektů. */
775
+ onFiles?: (files: File[]) => void;
776
+ /**
777
+ * Povolené typy souborů (atribut `accept`).
778
+ * @example 'image/*,.pdf'
779
+ */
780
+ accept?: string;
781
+ /** Povolit výběr více souborů najednou. */
782
+ multiple?: boolean;
783
+ /** Maximální velikost souboru v bajtech. */
784
+ maxSize?: number;
785
+ /** Deaktivuje zónu pro nahrávání. */
786
+ disabled?: boolean;
787
+ /** Popisek nad zónou. */
788
+ label?: string;
789
+ /** Nápovědný text pod zónou. */
790
+ helperText?: string;
791
+ /**
792
+ * Chybový stav. Při řetězci se zobrazí chybová zpráva.
793
+ */
794
+ error?: boolean | string;
795
+ /** Dodatečná CSS třída. */
796
+ className?: string;
797
+ /** Další inline styly. */
798
+ style?: React.CSSProperties;
799
+ }
800
+ /**
801
+ * Zóna pro nahrávání souborů dle SM-UI design systému.
802
+ *
803
+ * Podporuje přetažení (drag & drop), výběr kliknutím,
804
+ * seznam nahraných souborů s možností odebrání a validaci velikosti.
805
+ *
806
+ * @example
807
+ * ```tsx
808
+ * <FileUpload
809
+ * label="Přílohy"
810
+ * accept="image/*,.pdf"
811
+ * multiple
812
+ * maxSize={5 * 1024 * 1024}
813
+ * onFiles={(files) => console.log(files)}
814
+ * />
815
+ * ```
816
+ */
817
+ declare const FileUpload: React.FC<FileUploadProps>;
818
+
819
+ interface TableColumn {
820
+ /** Klíč odpovídající hodnotě v datovém objektu. */
821
+ key: string;
822
+ /** Text záhlaví sloupce. */
823
+ header: string;
824
+ /** Povolí řazení podle tohoto sloupce. @default false */
825
+ sortable?: boolean;
826
+ /** Šířka sloupce (CSS hodnota). */
827
+ width?: string | number;
828
+ /** Vlastní vykreslovací funkce pro buňku. */
829
+ render?: (value: any, row: any, index: number) => React.ReactNode;
830
+ }
831
+ interface TableProps {
832
+ /** Definice sloupců tabulky. */
833
+ columns: TableColumn[];
834
+ /** Data k zobrazení — pole objektů. */
835
+ data: any[];
836
+ /** Při `true` se místo dat zobrazí skeleton řádky. @default false */
837
+ loading?: boolean;
838
+ /** Text zobrazený při prázdných datech. @default 'Žádná data' */
839
+ emptyText?: string;
840
+ /** Voláno při kliknutí na řaditelný sloupec. Řazení dat je na straně uživatele — komponenta pouze informuje o zvoleném klíči a směru. */
841
+ onSort?: (key: string, direction: 'asc' | 'desc') => void;
842
+ /** Aktuální klíč řazení (pouze vizuální indikátor, samotné řazení provádí uživatel). */
843
+ sortKey?: string;
844
+ /** Aktuální směr řazení (pouze vizuální indikátor). */
845
+ sortDirection?: 'asc' | 'desc';
846
+ /** Střídání barvy řádků. @default false */
847
+ striped?: boolean;
848
+ /** Zvýraznění řádku při najetí myší. @default true */
849
+ hoverable?: boolean;
850
+ /** Dodatečná CSS třída. */
851
+ className?: string;
852
+ /** Další inline styly. */
853
+ style?: React.CSSProperties;
854
+ }
855
+ /**
856
+ * Datová tabulka dle SM-UI design systému.
857
+ *
858
+ * Podporuje řazení, loading stav se Skeleton řádky,
859
+ * prázdný stav, střídání barev řádků a tmavý / světlý režim.
860
+ *
861
+ * @example
862
+ * ```tsx
863
+ * <Table
864
+ * columns={[
865
+ * { key: 'name', header: 'Jméno', sortable: true },
866
+ * { key: 'email', header: 'E-mail' },
867
+ * ]}
868
+ * data={users}
869
+ * onSort={handleSort}
870
+ * sortKey="name"
871
+ * sortDirection="asc"
872
+ * striped
873
+ * />
874
+ * ```
875
+ */
876
+ declare const Table: React.FC<TableProps>;
877
+
878
+ interface CardProps {
879
+ /** Titulek karty. */
880
+ title?: string;
881
+ /** Podtitulek karty. */
882
+ subtitle?: string;
883
+ /** Vlastní obsah záhlaví — přepíše `title` a `subtitle`. */
884
+ header?: React.ReactNode;
885
+ /** Obsah patičky karty. */
886
+ footer?: React.ReactNode;
887
+ /** Obsah karty. */
888
+ children?: React.ReactNode;
889
+ /** Při `true` se karta jemně zvedne při najetí myší. @default false */
890
+ hoverable?: boolean;
891
+ /** Zobrazí rámeček kolem karty. @default true */
892
+ bordered?: boolean;
893
+ /**
894
+ * Velikost vnitřního odsazení.
895
+ * @default 'md'
896
+ */
897
+ padding?: 'none' | 'sm' | 'md' | 'lg';
898
+ /** Dodatečná CSS třída. */
899
+ className?: string;
900
+ /** Další inline styly. */
901
+ style?: React.CSSProperties;
902
+ }
903
+ /**
904
+ * Karta dle SM-UI design systému.
905
+ *
906
+ * Podporuje titulek, záhlaví, patičku, hoverable efekt
907
+ * a tmavý / světlý režim přes `useTheme`.
908
+ *
909
+ * @example
910
+ * ```tsx
911
+ * <Card title="Statistiky" subtitle="Přehled za poslední měsíc">
912
+ * <p>Obsah karty…</p>
913
+ * </Card>
914
+ * ```
915
+ */
916
+ declare const Card: React.FC<CardProps>;
917
+
918
+ interface AccordionItemProps {
919
+ /** Titulek položky. */
920
+ title: string;
921
+ /** Obsah zobrazený po rozbalení. */
922
+ children: React.ReactNode;
923
+ /** Při `true` bude položka výchozně rozbalena. @default false */
924
+ defaultOpen?: boolean;
925
+ /** Zakáže interakci s položkou. @default false */
926
+ disabled?: boolean;
927
+ }
928
+ interface AccordionProps {
929
+ /**
930
+ * Potomci — typicky komponenty `<AccordionItem>`.
931
+ */
932
+ children: React.ReactNode;
933
+ /** Povolí více současně otevřených položek. @default false */
934
+ multiple?: boolean;
935
+ /** Dodatečná CSS třída. */
936
+ className?: string;
937
+ /** Další inline styly. */
938
+ style?: React.CSSProperties;
939
+ }
940
+ /**
941
+ * Položka akordéonu. Používejte uvnitř `<Accordion>`.
942
+ *
943
+ * @example
944
+ * ```tsx
945
+ * <AccordionItem title="Sekce 1">
946
+ * Obsah první sekce.
947
+ * </AccordionItem>
948
+ * ```
949
+ */
950
+ declare const AccordionItem: React.FC<AccordionItemProps & {
951
+ /** @internal Řízeno rodičem Accordion. */
952
+ _controlled?: boolean;
953
+ /** @internal */
954
+ _open?: boolean;
955
+ /** @internal */
956
+ _onToggle?: () => void;
957
+ }>;
958
+ /**
959
+ * Akordéon dle SM-UI design systému.
960
+ *
961
+ * Obalí skupinu `<AccordionItem>` a řídí jejich otevírání.
962
+ * Ve výchozím stavu se otevře vždy pouze jedna položka najednou.
963
+ * Pro více současně otevřených položek nastavte `multiple`.
964
+ *
965
+ * @example
966
+ * ```tsx
967
+ * <Accordion>
968
+ * <AccordionItem title="Sekce 1">Obsah 1</AccordionItem>
969
+ * <AccordionItem title="Sekce 2">Obsah 2</AccordionItem>
970
+ * </Accordion>
971
+ * ```
972
+ */
973
+ declare const Accordion: React.FC<AccordionProps>;
974
+
975
+ interface TabsProps {
976
+ /** Aktuální aktivní hodnota. */
977
+ value: string;
978
+ /** Voláno při změně aktivní záložky. */
979
+ onChange: (value: string) => void;
980
+ /** Potomci — komponenty `<Tab>` a `<TabPanel>`. */
981
+ children: React.ReactNode;
982
+ /**
983
+ * Vizuální varianta.
984
+ * - `'underline'` — spodní linka na aktivní záložce
985
+ * - `'pills'` — oranžová pilulka na aktivní záložce
986
+ * @default 'underline'
987
+ */
988
+ variant?: 'underline' | 'pills';
989
+ /** Roztáhne záložky na celou šířku. @default false */
990
+ fullWidth?: boolean;
991
+ /**
992
+ * Velikostní preset.
993
+ * @default 'md'
994
+ */
995
+ size?: 'sm' | 'md' | 'lg';
996
+ /** Dodatečná CSS třída. */
997
+ className?: string;
998
+ /** Další inline styly. */
999
+ style?: React.CSSProperties;
1000
+ }
1001
+ interface TabProps {
1002
+ /** Unikátní hodnota záložky. */
1003
+ value: string;
1004
+ /** Text záložky. */
1005
+ label: string;
1006
+ /** Zakáže záložku. @default false */
1007
+ disabled?: boolean;
1008
+ /** Ikona zobrazená před textem. */
1009
+ icon?: React.ReactNode;
1010
+ }
1011
+ interface TabPanelProps {
1012
+ /** Hodnota odpovídající záložce — panel se zobrazí, když je aktivní. */
1013
+ value: string;
1014
+ /** Obsah panelu. */
1015
+ children: React.ReactNode;
1016
+ }
1017
+ /**
1018
+ * Záložka uvnitř `<Tabs>`. Definuje jednu záložku v navigaci.
1019
+ *
1020
+ * @example
1021
+ * ```tsx
1022
+ * <Tab value="general" label="Obecné" />
1023
+ * ```
1024
+ */
1025
+ declare const Tab: React.FC<TabProps>;
1026
+ /**
1027
+ * Panel obsahu spojený s konkrétní záložkou.
1028
+ *
1029
+ * @example
1030
+ * ```tsx
1031
+ * <TabPanel value="general">
1032
+ * Obsah záložky „Obecné".
1033
+ * </TabPanel>
1034
+ * ```
1035
+ */
1036
+ declare const TabPanel: React.FC<TabPanelProps>;
1037
+ /**
1038
+ * Záložkový komponent dle SM-UI design systému.
1039
+ *
1040
+ * Podporuje varianty `underline` a `pills`, velikostní presety
1041
+ * a tmavý / světlý režim přes `useTheme`.
1042
+ *
1043
+ * @example
1044
+ * ```tsx
1045
+ * <Tabs value={active} onChange={setActive} variant="underline">
1046
+ * <Tab value="general" label="Obecné" />
1047
+ * <Tab value="advanced" label="Pokročilé" />
1048
+ * <TabPanel value="general">Obsah 1</TabPanel>
1049
+ * <TabPanel value="advanced">Obsah 2</TabPanel>
1050
+ * </Tabs>
1051
+ * ```
1052
+ */
1053
+ declare const Tabs: React.FC<TabsProps>;
1054
+
1055
+ interface TooltipProps {
1056
+ /** Obsah tooltipu — text nebo ReactNode. */
1057
+ content: string | React.ReactNode;
1058
+ /** Trigger element obalený tooltipem. */
1059
+ children: React.ReactElement;
1060
+ /**
1061
+ * Pozice tooltipu vůči triggeru.
1062
+ * @default 'top'
1063
+ */
1064
+ position?: 'top' | 'bottom' | 'left' | 'right';
1065
+ /**
1066
+ * Prodleva před zobrazením (ms).
1067
+ * @default 200
1068
+ */
1069
+ delay?: number;
1070
+ /** Dodatečná CSS třída pro tooltip. */
1071
+ className?: string;
1072
+ /** Další inline styly pro tooltip. */
1073
+ style?: React.CSSProperties;
1074
+ }
1075
+ /**
1076
+ * Tooltip dle SM-UI design systému.
1077
+ *
1078
+ * Zobrazí se po najetí myší na trigger element s volitelnou prodlevou.
1079
+ * Vykresluje se přes React portál, takže ho neořízne rodičovský kontejner.
1080
+ *
1081
+ * @example
1082
+ * ```tsx
1083
+ * <Tooltip content="Uložit změny">
1084
+ * <button>Uložit</button>
1085
+ * </Tooltip>
1086
+ * ```
1087
+ */
1088
+ declare const Tooltip: React.FC<TooltipProps>;
1089
+
1090
+ interface PopoverProps {
1091
+ /** Obsah popoveru. */
1092
+ content: React.ReactNode;
1093
+ /** Trigger element. */
1094
+ children: React.ReactElement;
1095
+ /**
1096
+ * Pozice popoveru vůči triggeru.
1097
+ * @default 'bottom'
1098
+ */
1099
+ position?: 'top' | 'bottom' | 'left' | 'right';
1100
+ /**
1101
+ * Způsob otevření.
1102
+ * @default 'click'
1103
+ */
1104
+ trigger?: 'click' | 'hover';
1105
+ /** Dodatečná CSS třída pro popover. */
1106
+ className?: string;
1107
+ /** Další inline styly pro popover. */
1108
+ style?: React.CSSProperties;
1109
+ }
1110
+ /**
1111
+ * Popover dle SM-UI design systému.
1112
+ *
1113
+ * Podobný Tooltipu, ale větší, s kartovým stylem.
1114
+ * Otevírá se kliknutím nebo hoverem, zavírá kliknutím mimo nebo Escape.
1115
+ * Vykresluje se přes React portál.
1116
+ *
1117
+ * @example
1118
+ * ```tsx
1119
+ * <Popover content={<div>Obsah popoveru</div>} trigger="click">
1120
+ * <button>Klikni</button>
1121
+ * </Popover>
1122
+ * ```
1123
+ */
1124
+ declare const Popover: React.FC<PopoverProps>;
1125
+
1126
+ interface SkeletonProps {
1127
+ /**
1128
+ * Tvar skeletonu.
1129
+ * - `'text'` — obdélník s malou výškou, může vykreslovat více řádků
1130
+ * - `'circle'` — kruh
1131
+ * - `'rect'` — obdélník
1132
+ * @default 'text'
1133
+ */
1134
+ variant?: 'text' | 'circle' | 'rect';
1135
+ /** Šířka skeletonu. Přijímá číslo (px) nebo CSS řetězec. @default '100%' */
1136
+ width?: number | string;
1137
+ /** Výška skeletonu. Přijímá číslo (px) nebo CSS řetězec. */
1138
+ height?: number | string;
1139
+ /** Počet řádků pro variantu `'text'`. @default 1 */
1140
+ lines?: number;
1141
+ /** Zapne/vypne shimmer animaci. @default true */
1142
+ animate?: boolean;
1143
+ /** Dodatečná CSS třída. */
1144
+ className?: string;
1145
+ /** Další inline styly. */
1146
+ style?: React.CSSProperties;
1147
+ }
1148
+ /**
1149
+ * Zástupný prvek zobrazený při načítání obsahu.
1150
+ *
1151
+ * Podporuje tři varianty (`text`, `circle`, `rect`), shimmer animaci
1152
+ * a tmavý / světlý režim přes `useTheme`.
1153
+ *
1154
+ * @example
1155
+ * ```tsx
1156
+ * <Skeleton variant="text" lines={3} />
1157
+ * <Skeleton variant="circle" width={48} height={48} />
1158
+ * <Skeleton variant="rect" width="100%" height={200} />
1159
+ * ```
1160
+ */
1161
+ declare const Skeleton: React.FC<SkeletonProps>;
1162
+
1163
+ interface EmptyStateProps {
1164
+ /** Ikona zobrazená nad titulkem. */
1165
+ icon?: React.ReactNode;
1166
+ /** Hlavní titulek prázdného stavu. */
1167
+ title: string;
1168
+ /** Doplňkový popis. */
1169
+ description?: string;
1170
+ /** Akční prvek — typicky tlačítko. */
1171
+ action?: React.ReactNode;
1172
+ /** Dodatečná CSS třída. */
1173
+ className?: string;
1174
+ /** Další inline styly. */
1175
+ style?: React.CSSProperties;
1176
+ }
1177
+ /**
1178
+ * Prázdný stav dle SM-UI design systému.
1179
+ *
1180
+ * Centrovaný layout s volitelnou ikonou, titulkem,
1181
+ * popisem a akčním tlačítkem.
1182
+ *
1183
+ * @example
1184
+ * ```tsx
1185
+ * <EmptyState
1186
+ * icon={<InboxIcon />}
1187
+ * title="Žádné výsledky"
1188
+ * description="Zkuste upravit filtr nebo vytvořit nový záznam."
1189
+ * action={<Button>Vytvořit záznam</Button>}
1190
+ * />
1191
+ * ```
1192
+ */
1193
+ declare const EmptyState: React.FC<EmptyStateProps>;
1194
+
1195
+ interface StatProps {
1196
+ /** Popisek statistiky. */
1197
+ label: string;
1198
+ /** Hodnota statistiky. */
1199
+ value: string | number;
1200
+ /** Procentuální změna (zobrazí se se znaménkem). */
1201
+ change?: number;
1202
+ /** Doplňkový text k procentuální změně. */
1203
+ changeLabel?: string;
1204
+ /** Ikona zobrazená vedle hodnoty. */
1205
+ icon?: React.ReactNode;
1206
+ /**
1207
+ * Směr trendu — ovlivňuje barvu a ikonu šipky.
1208
+ * @default 'neutral'
1209
+ */
1210
+ trend?: 'up' | 'down' | 'neutral';
1211
+ /** Dodatečná CSS třída. */
1212
+ className?: string;
1213
+ /** Další inline styly. */
1214
+ style?: React.CSSProperties;
1215
+ }
1216
+ /**
1217
+ * Statistický ukazatel dle SM-UI design systému.
1218
+ *
1219
+ * Kompaktní kartička s popiskem, hodnotou, procentuální změnou
1220
+ * a volitelnou ikonou. Barva trendu se řídí hodnotou `trend`.
1221
+ *
1222
+ * @example
1223
+ * ```tsx
1224
+ * <Stat label="Objednávky" value={1284} change={12.5} trend="up" />
1225
+ * <Stat label="Náklady" value="€ 45 320" change={-3.2} trend="down" />
1226
+ * ```
1227
+ */
1228
+ declare const Stat: React.FC<StatProps>;
1229
+
1230
+ type AvatarSize = 'sm' | 'md' | 'lg' | number;
1231
+ interface AvatarProps {
1232
+ /**
1233
+ * Iniciály zobrazené uvnitř avataru (např. `"DC"`, `"JN"`).
1234
+ * Automaticky převedeny na velká písmena.
1235
+ */
1236
+ initials: string;
1237
+ /**
1238
+ * Velikost avataru.
1239
+ * - `'sm'` — 40 px
1240
+ * - `'md'` — 70 px *(výchozí)*
1241
+ * - `'lg'` — 96 px
1242
+ * - `number` — přesná hodnota v pixelech
1243
+ * @default 'md'
1244
+ */
1245
+ size?: AvatarSize;
1246
+ /**
1247
+ * Zaoblení rohů kontejneru avataru.
1248
+ * @default '8px'
1249
+ */
1250
+ borderRadius?: React.CSSProperties['borderRadius'];
1251
+ /**
1252
+ * Přístupný popisek čtený čtečkami obrazovky.
1253
+ * Pokud není zadán, použije se `"Avatar {initials}"`.
1254
+ */
1255
+ 'aria-label'?: string;
1256
+ /** Další inline styly pro kořenový element. */
1257
+ style?: React.CSSProperties;
1258
+ /** Dodatečná CSS třída pro kořenový element. */
1259
+ className?: string;
1260
+ }
1261
+ /**
1262
+ * Kruhový / čtvercový avatar zobrazující iniciály uživatele
1263
+ * na oranžovém gradientním pozadí.
1264
+ *
1265
+ * @example
1266
+ * ```tsx
1267
+ * <Avatar initials="DC" />
1268
+ * <Avatar initials="JN" size="lg" />
1269
+ * <Avatar initials="AB" size={56} borderRadius="50%" />
1270
+ * ```
1271
+ */
1272
+ declare const Avatar: React.FC<AvatarProps>;
1273
+
1274
+ interface TagProps {
1275
+ /**
1276
+ * Textový popisek zobrazený uvnitř tagu.
1277
+ */
1278
+ label: string;
1279
+ /**
1280
+ * Callback volaný při kliknutí na tlačítko odebrání (✕).
1281
+ * Pokud není zadán, tlačítko se nezobrazí.
1282
+ */
1283
+ onRemove?: () => void;
1284
+ /** Další inline styly pro kořenový element. */
1285
+ style?: React.CSSProperties;
1286
+ /** Dodatečná CSS třída pro kořenový element. */
1287
+ className?: string;
1288
+ }
1289
+ interface BadgeProps {
1290
+ /**
1291
+ * Text zobrazený uvnitř badge.
1292
+ * Automaticky převeden na velká písmena dle SM-UI design systému.
1293
+ */
1294
+ label: string;
1295
+ /** Další inline styly pro kořenový element. */
1296
+ style?: React.CSSProperties;
1297
+ /** Dodatečná CSS třída pro kořenový element. */
1298
+ className?: string;
1299
+ }
1300
+ interface TagItemProps {
1301
+ /**
1302
+ * Hlavní popisek / název zobrazený v řádku seznamu.
1303
+ */
1304
+ label: string;
1305
+ /**
1306
+ * Callback volaný při kliknutí na tlačítko **filtrování**.
1307
+ * Pokud není zadán, tlačítko se nezobrazí.
1308
+ */
1309
+ onFilter?: () => void;
1310
+ /**
1311
+ * Callback volaný při kliknutí na tlačítko **úpravy** (tužka).
1312
+ * Pokud není zadán, tlačítko se nezobrazí.
1313
+ */
1314
+ onEdit?: () => void;
1315
+ /**
1316
+ * Callback volaný při kliknutí na tlačítko **smazání** (koš).
1317
+ * Pokud není zadán, tlačítko se nezobrazí.
1318
+ */
1319
+ onDelete?: () => void;
1320
+ /**
1321
+ * Zda zobrazit sloupec s akcemi.
1322
+ * Nastavte na `false` pro řádek pouze ke čtení.
1323
+ * @default true
1324
+ */
1325
+ showActions?: boolean;
1326
+ /** Další inline styly pro kořenový element. */
1327
+ style?: React.CSSProperties;
1328
+ /** Dodatečná CSS třída pro kořenový element. */
1329
+ className?: string;
1330
+ }
1331
+ /**
1332
+ * Malý odebíratelný štítek pro kategorizaci nebo označení položek.
1333
+ * Tlačítko odebrání (✕) se zobrazí pouze pokud je zadáno `onRemove`.
1334
+ *
1335
+ * @example
1336
+ * ```tsx
1337
+ * <Tag label="React" />
1338
+ * <Tag label="TypeScript" onRemove={() => removeTag('ts')} />
1339
+ * ```
1340
+ */
1341
+ declare const Tag: React.FC<TagProps>;
1342
+ /**
1343
+ * Malý stavový badge vykreslený jako oranžová pilulka.
1344
+ * Text je automaticky převeden na velká písmena.
1345
+ *
1346
+ * @example
1347
+ * ```tsx
1348
+ * <Badge label="Novinka" />
1349
+ * <Badge label="Beta" />
1350
+ * ```
1351
+ */
1352
+ declare const Badge: React.FC<BadgeProps>;
1353
+ /**
1354
+ * Řádek seznamu zobrazující pojmenovaný tag s volitelnými akčními tlačítky
1355
+ * (filtrování, úprava, smazání).
1356
+ *
1357
+ * Tlačítka se jednotlivě skryjí, pokud nejsou zadány příslušné callbacky.
1358
+ * Nastavte `showActions={false}` pro skrytí celého sloupce akcí.
1359
+ *
1360
+ * @example
1361
+ * ```tsx
1362
+ * <TagItem label="Domovská stránka" onEdit={editTag} onDelete={deleteTag} />
1363
+ * <TagItem label="Blog" showActions={false} />
1364
+ * ```
1365
+ */
1366
+ declare const TagItem: React.FC<TagItemProps>;
1367
+
1368
+ interface ModalProps {
1369
+ /** Řídí zobrazení modálního okna. */
1370
+ open: boolean;
1371
+ /** Voláno při zavření modálu. */
1372
+ onClose: () => void;
1373
+ /** Titulek zobrazený v záhlaví modálu. */
1374
+ title?: string;
1375
+ /** Obsah těla modálu. */
1376
+ children: React.ReactNode;
1377
+ /** Obsah patičky modálu (tlačítka apod.). */
1378
+ footer?: React.ReactNode;
1379
+ /** Velikostní preset modálu. @default 'md' */
1380
+ size?: 'sm' | 'md' | 'lg' | 'fullscreen';
1381
+ /** Zavře modál kliknutím na překryvnou vrstvu. @default true */
1382
+ closeOnOverlay?: boolean;
1383
+ /** Zavře modál stisknutím klávesy Escape. @default true */
1384
+ closeOnEscape?: boolean;
1385
+ /** Zobrazí zavírací tlačítko (×) v záhlaví. @default true */
1386
+ showClose?: boolean;
1387
+ /** Dodatečná CSS třída pro kartu modálu. */
1388
+ className?: string;
1389
+ /** Další inline styly pro kartu modálu. */
1390
+ style?: React.CSSProperties;
1391
+ }
1392
+ /**
1393
+ * Modální dialog dle SM-UI design systému.
1394
+ *
1395
+ * Vykresluje se přes React portál s překryvnou vrstvou,
1396
+ * podporuje animace otevření / zavření, focus trap
1397
+ * a zamezení scrollu pozadí.
1398
+ *
1399
+ * @example
1400
+ * ```tsx
1401
+ * <Modal open={isOpen} onClose={() => setOpen(false)} title="Potvrzení">
1402
+ * <p>Opravdu chcete pokračovat?</p>
1403
+ * </Modal>
1404
+ * ```
1405
+ */
1406
+ declare const Modal: React.FC<ModalProps>;
1407
+
1408
+ interface DrawerProps {
1409
+ /** Řídí zobrazení šuplíku. */
1410
+ open: boolean;
1411
+ /** Voláno při zavření šuplíku. */
1412
+ onClose: () => void;
1413
+ /** Strana, ze které se šuplík vysune. @default 'right' */
1414
+ position?: 'left' | 'right';
1415
+ /** Titulek zobrazený v záhlaví šuplíku. */
1416
+ title?: string;
1417
+ /** Obsah těla šuplíku. */
1418
+ children: React.ReactNode;
1419
+ /** Obsah patičky šuplíku. */
1420
+ footer?: React.ReactNode;
1421
+ /** Šířka panelu (px nebo CSS řetězec). @default 400 */
1422
+ width?: string | number;
1423
+ /** Zobrazí zavírací tlačítko (×). @default true */
1424
+ showClose?: boolean;
1425
+ /** Zavře šuplík kliknutím na překryvnou vrstvu. @default true */
1426
+ closeOnOverlay?: boolean;
1427
+ /** Dodatečná CSS třída pro panel šuplíku. */
1428
+ className?: string;
1429
+ /** Další inline styly pro panel šuplíku. */
1430
+ style?: React.CSSProperties;
1431
+ }
1432
+ /**
1433
+ * Vysuvný panel (Drawer) dle SM-UI design systému.
1434
+ *
1435
+ * Vykresluje se přes React portál, vysune se z levé nebo pravé strany
1436
+ * s překryvnou vrstvou a plynulou animací.
1437
+ *
1438
+ * @example
1439
+ * ```tsx
1440
+ * <Drawer open={isOpen} onClose={() => setOpen(false)} title="Nastavení">
1441
+ * <p>Obsah šuplíku</p>
1442
+ * </Drawer>
1443
+ * ```
1444
+ */
1445
+ declare const Drawer: React.FC<DrawerProps>;
1446
+
1447
+ interface BreadcrumbItem {
1448
+ /** Zobrazovaný text položky. */
1449
+ label: string;
1450
+ /** URL odkazu. Pokud chybí, položka se vykreslí jako prostý text. */
1451
+ href?: string;
1452
+ /** Voláno při kliknutí na položku. */
1453
+ onClick?: (e: React.MouseEvent) => void;
1454
+ /** Volitelná ikona vykreslená před textem. */
1455
+ icon?: React.ReactNode;
1456
+ }
1457
+ interface BreadcrumbProps {
1458
+ /** Seznam položek drobečkové navigace. */
1459
+ items: BreadcrumbItem[];
1460
+ /** Oddělovací znak mezi položkami. @default '/' */
1461
+ separator?: React.ReactNode;
1462
+ /** Dodatečná CSS třída pro obalový element. */
1463
+ className?: string;
1464
+ /** Další inline styly pro obalový element. */
1465
+ style?: React.CSSProperties;
1466
+ }
1467
+ /**
1468
+ * Drobečková navigace dle SM-UI design systému.
1469
+ *
1470
+ * Poslední položka je vždy zobrazena jako aktuální stránka
1471
+ * (tučnější písmo, bez odkazu).
1472
+ *
1473
+ * @example
1474
+ * ```tsx
1475
+ * <Breadcrumb
1476
+ * items={[
1477
+ * { label: 'Domů', href: '/' },
1478
+ * { label: 'Projekty', href: '/projekty' },
1479
+ * { label: 'Detail' },
1480
+ * ]}
1481
+ * />
1482
+ * ```
1483
+ */
1484
+ declare const Breadcrumb: React.FC<BreadcrumbProps>;
1485
+
1486
+ interface PaginationProps {
1487
+ /** Aktuální číslo stránky (1-indexed). */
1488
+ page: number;
1489
+ /** Celkový počet stránek. */
1490
+ totalPages: number;
1491
+ /** Voláno při změně stránky. */
1492
+ onChange: (page: number) => void;
1493
+ /** Počet stránek zobrazených kolem aktuální. @default 1 */
1494
+ siblings?: number;
1495
+ /** Zobrazí tlačítko pro první stránku. @default true */
1496
+ showFirst?: boolean;
1497
+ /** Zobrazí tlačítko pro poslední stránku. @default true */
1498
+ showLast?: boolean;
1499
+ /** Velikostní preset. @default 'md' */
1500
+ size?: 'sm' | 'md' | 'lg';
1501
+ /** Dodatečná CSS třída pro obalový element. */
1502
+ className?: string;
1503
+ /** Další inline styly pro obalový element. */
1504
+ style?: React.CSSProperties;
1505
+ }
1506
+ /**
1507
+ * Stránkovací komponenta dle SM-UI design systému.
1508
+ *
1509
+ * Zobrazuje číselné tlačítka stránek s trojtečkami pro velké rozsahy,
1510
+ * tlačítka Předchozí / Další a volitelně první / poslední stránku.
1511
+ *
1512
+ * @example
1513
+ * ```tsx
1514
+ * <Pagination page={3} totalPages={20} onChange={setPage} />
1515
+ * ```
1516
+ */
1517
+ declare const Pagination: React.FC<PaginationProps>;
1518
+
1519
+ interface StepItem {
1520
+ /** Popisek kroku. */
1521
+ label: string;
1522
+ /** Volitelný popis kroku. */
1523
+ description?: string;
1524
+ }
1525
+ interface StepperProps {
1526
+ /** Definice kroků. */
1527
+ steps: StepItem[];
1528
+ /** Index aktivního kroku (0-indexed). */
1529
+ activeStep: number;
1530
+ /** Orientace stepperu. @default 'horizontal' */
1531
+ orientation?: 'horizontal' | 'vertical';
1532
+ /**
1533
+ * Umožní klikání na kroky pro přechod mezi nimi.
1534
+ * Lze nastavit na `true` (klikatelné všechny kroky),
1535
+ * `'completed'` (pouze dokončené a aktivní krok),
1536
+ * nebo `false` (vypnuto).
1537
+ * @default false
1538
+ */
1539
+ clickable?: boolean | 'completed';
1540
+ /** Voláno při kliknutí na krok. Vrací index zvoleného kroku. */
1541
+ onStepClick?: (stepIndex: number) => void;
1542
+ /** Dodatečná CSS třída pro obalový element. */
1543
+ className?: string;
1544
+ /** Další inline styly pro obalový element. */
1545
+ style?: React.CSSProperties;
1546
+ }
1547
+ /**
1548
+ * Kroková komponenta (Stepper) dle SM-UI design systému.
1549
+ *
1550
+ * Zobrazuje číslované kroky s propojovacími čarami.
1551
+ * Dokončené kroky mají oranžové pozadí se zaškrtnutím,
1552
+ * aktivní krok má oranžový obrys, budoucí kroky jsou ztlumené.
1553
+ *
1554
+ * Lze zapnout klikatelnost kroků pomocí `clickable` a `onStepClick`,
1555
+ * což uživateli umožní přecházet mezi kroky kliknutím.
1556
+ *
1557
+ * @example
1558
+ * ```tsx
1559
+ * <Stepper
1560
+ * steps={[
1561
+ * { label: 'Kontaktní údaje' },
1562
+ * { label: 'Adresa', description: 'Doručovací adresa' },
1563
+ * { label: 'Platba' },
1564
+ * { label: 'Souhrn' },
1565
+ * ]}
1566
+ * activeStep={1}
1567
+ * clickable
1568
+ * onStepClick={(idx) => setStep(idx)}
1569
+ * />
1570
+ * ```
1571
+ */
1572
+ declare const Stepper: React.FC<StepperProps>;
1573
+
1574
+ interface DropdownMenuItem {
1575
+ /** Zobrazovaný popisek položky. */
1576
+ label: string;
1577
+ /** Volitelná ikona vykreslená před textem. */
1578
+ icon?: React.ReactNode;
1579
+ /** Voláno při kliknutí na položku. */
1580
+ onClick?: () => void;
1581
+ /** Při `true` nelze položku vybrat. @default false */
1582
+ disabled?: boolean;
1583
+ /** Při `true` se položka zobrazí červeně (nebezpečná akce). @default false */
1584
+ danger?: boolean;
1585
+ /** Při `true` se místo položky vykreslí oddělovací čára. @default false */
1586
+ divider?: boolean;
1587
+ }
1588
+ interface DropdownMenuProps {
1589
+ /** Spouštěcí element (tlačítko apod.). */
1590
+ trigger: React.ReactNode;
1591
+ /** Seznam položek nabídky. */
1592
+ items: DropdownMenuItem[];
1593
+ /** Pozice rozbalovací nabídky vůči triggeru. @default 'bottom-left' */
1594
+ position?: 'bottom-left' | 'bottom-right';
1595
+ /** Dodatečná CSS třída pro obalový element. */
1596
+ className?: string;
1597
+ /** Další inline styly pro obalový element. */
1598
+ style?: React.CSSProperties;
1599
+ }
1600
+ /**
1601
+ * Rozbalovací nabídka dle SM-UI design systému.
1602
+ *
1603
+ * Otevírá se kliknutím na trigger element, zavírá se kliknutím
1604
+ * mimo nebo klávesou Escape. Používá React portál
1605
+ * s chytrým pozicováním (otevře se nad triggerem, pokud pod ním není místo).
1606
+ *
1607
+ * @example
1608
+ * ```tsx
1609
+ * <DropdownMenu
1610
+ * trigger={<Button>Akce</Button>}
1611
+ * items={[
1612
+ * { label: 'Upravit', onClick: () => {} },
1613
+ * { label: 'Duplikovat', onClick: () => {} },
1614
+ * { divider: true, label: '' },
1615
+ * { label: 'Smazat', danger: true, onClick: () => {} },
1616
+ * ]}
1617
+ * />
1618
+ * ```
1619
+ */
1620
+ declare const DropdownMenu: React.FC<DropdownMenuProps>;
1621
+
1622
+ type LinkVariant = 'default' | 'danger';
1623
+ interface LinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'color'> {
1624
+ /**
1625
+ * Barevná varianta.
1626
+ * - `'default'` — bílá (tmavý režim) / tmavá (světlý režim)
1627
+ * - `'danger'` — červená `#EF3838` v obou režimech
1628
+ * @default 'default'
1629
+ */
1630
+ variant?: LinkVariant;
1631
+ /**
1632
+ * Ikona vykreslená vedle textu odkazu.
1633
+ * Typicky 14×14 SVG nebo komponenta ikony.
1634
+ */
1635
+ icon?: React.ReactNode;
1636
+ /**
1637
+ * Na které straně se ikona zobrazí vzhledem k textu.
1638
+ * @default 'left'
1639
+ */
1640
+ iconPosition?: 'left' | 'right';
1641
+ /**
1642
+ * Zda zobrazit ikonu.
1643
+ * Umožňuje podmíněně skrýt ikonu bez odebrání prop.
1644
+ * @default true
1645
+ */
1646
+ showIcon?: boolean;
1647
+ /** Další inline styly pro `<a>` element. */
1648
+ style?: React.CSSProperties;
1649
+ /** Dodatečná CSS třída pro `<a>` element. */
1650
+ className?: string;
1651
+ }
1652
+ /**
1653
+ * Inline odkaz / akční trigger dle SM-UI design systému.
1654
+ * Vykresluje se jako nativní `<a>` element a dědí všechny anchor atributy
1655
+ * (`href`, `target`, `rel`, `onClick`, `aria-*`, …).
1656
+ *
1657
+ * Ve variantě `danger` používá červenou (#EF3838) pro destruktivní akce.
1658
+ * Při hoveru se přidá jemné tmavé pozadí.
1659
+ *
1660
+ * @example
1661
+ * ```tsx
1662
+ * <Link href="/nastaveni">Nastavení</Link>
1663
+ * <Link variant="danger" onClick={onDelete} icon={<TrashIcon />}>Smazat</Link>
1664
+ * <Link icon={<ArrowIcon />} iconPosition="right" href="/dalsi">Další krok</Link>
1665
+ * ```
1666
+ */
1667
+ declare const Link: React.FC<LinkProps>;
1668
+
1669
+ interface SpotlightItem {
1670
+ /** Unikátní identifikátor položky. */
1671
+ id: string;
1672
+ /** Hlavní zobrazovaný text. */
1673
+ label: string;
1674
+ /** Volitelný sekundární popis. */
1675
+ description?: string;
1676
+ /** Kategorie pro vizuální seskupení (např. "Komponenty", "Hooky"). */
1677
+ category: string;
1678
+ /** Volitelná ikona vedle textu. */
1679
+ icon?: React.ReactNode;
1680
+ /** Voláno při výběru položky (klik nebo Enter). */
1681
+ onSelect: () => void;
1682
+ }
1683
+ interface SpotlightProps {
1684
+ /** Řídí zobrazení spotlightu. */
1685
+ open: boolean;
1686
+ /** Voláno při zavření spotlightu. */
1687
+ onClose: () => void;
1688
+ /** Aktuální hodnota vyhledávacího vstupu (řízená komponenta). */
1689
+ value: string;
1690
+ /** Voláno při změně vyhledávacího vstupu. */
1691
+ onChange: (value: string) => void;
1692
+ /** Již filtrované výsledky k zobrazení, seskupené dle `category`. */
1693
+ results: SpotlightItem[];
1694
+ /** Placeholder text pro vyhledávací vstup. @default 'Hledat...' */
1695
+ placeholder?: string;
1696
+ /** Dodatečná CSS třída pro kartu spotlightu. */
1697
+ className?: string;
1698
+ /** Další inline styly pro kartu spotlightu. */
1699
+ style?: React.CSSProperties;
1700
+ }
1701
+ /**
1702
+ * Command-palette / spotlight overlay dle SM-UI design systému.
1703
+ *
1704
+ * Řízená komponenta – přijímá `value`, `onChange` a předfiltrované `results`.
1705
+ * Logika filtrování zůstává na konzumentovi.
1706
+ *
1707
+ * @example
1708
+ * ```tsx
1709
+ * const [open, setOpen] = useState(false);
1710
+ * const [query, setQuery] = useState('');
1711
+ * const filtered = items.filter(i => i.label.toLowerCase().includes(query.toLowerCase()));
1712
+ *
1713
+ * <Spotlight
1714
+ * open={open}
1715
+ * onClose={() => setOpen(false)}
1716
+ * value={query}
1717
+ * onChange={setQuery}
1718
+ * results={filtered}
1719
+ * />
1720
+ * ```
1721
+ */
1722
+ declare const Spotlight: React.FC<SpotlightProps>;
1723
+
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;
1732
+ }
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;
1763
+ /** Dodatečná CSS třída. */
1764
+ className?: string;
1765
+ /** Další inline styly. */
1766
+ style?: React.CSSProperties;
1767
+ }
1768
+ /**
1769
+ * Segmentovaný přepínač dle SM-UI design systému.
1770
+ *
1771
+ * Podobný záložkám, ale v kompaktnějším inline formátu
1772
+ * s animovaným indikátorem posuvným mezi segmenty.
1773
+ *
1774
+ * @example
1775
+ * ```tsx
1776
+ * const [view, setView] = useState('list');
1777
+ *
1778
+ * <SegmentedControl
1779
+ * data={['list', 'grid', 'table']}
1780
+ * value={view}
1781
+ * onChange={setView}
1782
+ * />
1783
+ * ```
1784
+ */
1785
+ declare const SegmentedControl: React.FC<SegmentedControlProps>;
1786
+
1787
+ type ToastVariant = 'info' | 'success' | 'error';
1788
+ interface ToastProps {
1789
+ /**
1790
+ * Vizuální varianta určující barvu okraje a tón pozadí.
1791
+ * - `'info'` — bílý / neutrální okraj, tmavé pozadí
1792
+ * - `'success'` — zelený okraj (#00A205), tmavé nazelenalé pozadí
1793
+ * - `'error'` — červený okraj (#DE0000), tmavé načervenalé pozadí
1794
+ * @default 'info'
1795
+ */
1796
+ variant?: ToastVariant;
1797
+ /**
1798
+ * Tučný nadpis notifikace.
1799
+ */
1800
+ title: string;
1801
+ /**
1802
+ * Volitelný sekundární popis vykreslený pod nadpisem menším písmem.
1803
+ */
1804
+ content?: string;
1805
+ /**
1806
+ * Vlastní ikona vykreslená na levé straně.
1807
+ * Pokud chybí, použije se vestavěná SVG ikona odpovídající variantě.
1808
+ */
1809
+ icon?: React.ReactNode;
1810
+ /**
1811
+ * Callback volaný při kliknutí na tlačítko zavření (✕).
1812
+ * Pokud není zadán, tlačítko zavření se nezobrazí.
1813
+ */
1814
+ onClose?: () => void;
1815
+ /**
1816
+ * ARIA role pro přístupnost.
1817
+ * Použijte `'alert'` pro naléhavé zprávy, `'status'` pro běžné.
1818
+ * @default 'alert'
1819
+ */
1820
+ role?: 'alert' | 'status' | 'log';
1821
+ /** Další inline styly pro kořenový element. */
1822
+ style?: React.CSSProperties;
1823
+ /** Dodatečná CSS třída pro kořenový element. */
1824
+ className?: string;
1825
+ }
1826
+ /**
1827
+ * Notifikace se třemi úrovněmi závažnosti.
1828
+ * Vykresluje se s efektem rozmazaného skla, vždy v tmavém režimu.
1829
+ *
1830
+ * Tlačítko zavření se zobrazí pouze pokud je zadáno `onClose`.
1831
+ * Vlastní ikona může nahradit výchozí variantní ikonu přes prop `icon`.
1832
+ *
1833
+ * @example
1834
+ * ```tsx
1835
+ * <Toast variant="success" title="Uloženo" content="Změny byly uloženy." onClose={dismiss} />
1836
+ * <Toast variant="error" title="Chyba" content="Něco se pokazilo." onClose={dismiss} />
1837
+ * <Toast variant="info" title="Upozornění" onClose={dismiss} />
1838
+ * ```
1839
+ */
1840
+ declare const Toast: React.FC<ToastProps>;
1841
+
1842
+ type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
1843
+ /** Nastavení předávaná do `toast()` při vyvolání notifikace. */
1844
+ interface ToastOptions {
1845
+ /**
1846
+ * Úroveň závažnosti — ovládá barvu okraje a výchozí ikonu.
1847
+ * @default 'info'
1848
+ */
1849
+ variant?: ToastVariant;
1850
+ /** Tučný nadpis notifikace. */
1851
+ title: string;
1852
+ /** Volitelný popis vykreslený pod nadpisem. */
1853
+ content?: string;
1854
+ /**
1855
+ * Vlastní ikona nahrazující vestavěnou variantní ikonu.
1856
+ * Libovolný React uzel — SVG, obrázek, komponenta…
1857
+ */
1858
+ icon?: React.ReactNode;
1859
+ /**
1860
+ * Časový limit automatického zavření v ms.
1861
+ * Nastavte na `0` pro trvalou notifikaci, kterou je nutné zavřít ručně.
1862
+ * @default 4000
1863
+ */
1864
+ duration?: number;
1865
+ }
1866
+ /** Hodnota vrácená hookem `useToast()`. */
1867
+ interface ToastContextValue {
1868
+ /**
1869
+ * Vyvolá novou notifikaci.
1870
+ * Vrací vygenerované `id` pro případné ruční zavření.
1871
+ *
1872
+ * @example
1873
+ * ```tsx
1874
+ * const { toast } = useToast();
1875
+ * toast({ variant: 'success', title: 'Uloženo', content: 'Změny byly uloženy.' });
1876
+ * ```
1877
+ */
1878
+ toast: (options: ToastOptions) => string;
1879
+ /**
1880
+ * Ručně zavře notifikaci podle jejího `id`.
1881
+ * Toast se nejprve animovaně vysune a poté se odebere z DOM.
1882
+ *
1883
+ * @example
1884
+ * ```tsx
1885
+ * const id = toast({ variant: 'info', title: 'Načítání…', duration: 0 });
1886
+ * await work();
1887
+ * dismiss(id);
1888
+ * ```
1889
+ */
1890
+ dismiss: (id: string) => void;
1891
+ }
1892
+ /** Props pro `<ToasterProvider>`. */
1893
+ interface ToasterProviderProps {
1894
+ children: React.ReactNode;
1895
+ /**
1896
+ * Pozice notifikací na obrazovce.
1897
+ * @default 'bottom-right'
1898
+ */
1899
+ position?: ToastPosition;
1900
+ /**
1901
+ * Šířka jednotlivé notifikace v px.
1902
+ * @default 380
1903
+ */
1904
+ toastWidth?: number;
1905
+ /**
1906
+ * Vertikální mezera mezi notifikacemi v **rozbalené** (hovered) podobě, v px.
1907
+ * @default 8
1908
+ */
1909
+ gap?: number;
1910
+ /**
1911
+ * Vzdálenost od okraje obrazovky v px.
1912
+ * @default 16
1913
+ */
1914
+ offset?: number;
1915
+ /**
1916
+ * Maximální počet notifikací v DOM najednou.
1917
+ * Nejstarší se odebírají při překročení limitu.
1918
+ * @default 5
1919
+ */
1920
+ maxToasts?: number;
1921
+ /**
1922
+ * Globální výchozí doba trvání notifikace v ms.
1923
+ * Přepíše se hodnotou `duration` v `toast()`, pokud je zadána.
1924
+ * Nastavte na `0` pro trvalé notifikace.
1925
+ * @default 4000
1926
+ */
1927
+ duration?: number;
1928
+ }
1929
+ /**
1930
+ * Poskytuje toast kontext a vykresluje overlay s notifikacemi.
1931
+ * Umístěte **jednou** blízko kořene vaší aplikace.
1932
+ *
1933
+ * @example
1934
+ * ```tsx
1935
+ * // main.tsx / App.tsx
1936
+ * <ToasterProvider position="bottom-right">
1937
+ * <App />
1938
+ * </ToasterProvider>
1939
+ * ```
1940
+ */
1941
+ declare const ToasterProvider: React.FC<ToasterProviderProps>;
1942
+ /**
1943
+ * Vrací `{ toast, dismiss }` pro vyvolání a zavření notifikací.
1944
+ * Musí být volán uvnitř stromu `<ToasterProvider>`.
1945
+ *
1946
+ * @throws Při volání mimo `<ToasterProvider>`.
1947
+ *
1948
+ * @example
1949
+ * ```tsx
1950
+ * function UlozitTlacitko() {
1951
+ * const { toast } = useToast();
1952
+ * return (
1953
+ * <Button onClick={() => toast({ variant: 'success', title: 'Uloženo!' })}>
1954
+ * Uložit
1955
+ * </Button>
1956
+ * );
1957
+ * }
1958
+ * ```
1959
+ */
1960
+ declare const useToast: () => ToastContextValue;
1961
+
1962
+ type AlertVariant = 'info' | 'success' | 'warning' | 'error';
1963
+ interface AlertProps {
1964
+ /**
1965
+ * Vizuální varianta určující barvu levého okraje a tón pozadí.
1966
+ * - `'info'` — neutrální / informační
1967
+ * - `'success'` — úspěch (zelená)
1968
+ * - `'warning'` — varování (oranžovo-žlutá)
1969
+ * - `'error'` — chyba (červená)
1970
+ * @default 'info'
1971
+ */
1972
+ variant?: AlertVariant;
1973
+ /**
1974
+ * Tučný nadpis upozornění.
1975
+ */
1976
+ title: string;
1977
+ /**
1978
+ * Volitelný popis vykreslený pod nadpisem menším písmem.
1979
+ */
1980
+ children?: React.ReactNode;
1981
+ /**
1982
+ * Vlastní ikona vykreslená na levé straně.
1983
+ * Pokud chybí, použije se vestavěná SVG ikona odpovídající variantě.
1984
+ */
1985
+ icon?: React.ReactNode;
1986
+ /**
1987
+ * Zobrazí tlačítko zavření (✕).
1988
+ * @default false
1989
+ */
1990
+ closable?: boolean;
1991
+ /**
1992
+ * Callback volaný při kliknutí na tlačítko zavření.
1993
+ */
1994
+ onClose?: () => void;
1995
+ /** Dodatečná CSS třída pro kořenový element. */
1996
+ className?: string;
1997
+ /** Další inline styly pro kořenový element. */
1998
+ style?: React.CSSProperties;
1999
+ }
2000
+ /**
2001
+ * Statický banner pro zobrazení důležitých informací, varování nebo chyb.
2002
+ * Na rozdíl od `Toast` se jedná o inline prvek, nikoliv plovoucí notifikaci.
2003
+ *
2004
+ * Zobrazuje barevný levý okraj (4 px) a jemně tónované pozadí
2005
+ * odpovídající zvolené variantě. Obsahuje vestavěné ikony pro každou
2006
+ * variantu, které lze nahradit vlastní ikonou přes prop `icon`.
2007
+ *
2008
+ * @example
2009
+ * ```tsx
2010
+ * <Alert variant="success" title="Uloženo">Změny byly úspěšně uloženy.</Alert>
2011
+ * <Alert variant="error" title="Chyba" closable onClose={handleClose}>Něco se pokazilo.</Alert>
2012
+ * <Alert variant="warning" title="Pozor">Tato akce je nevratná.</Alert>
2013
+ * ```
2014
+ */
2015
+ declare const Alert: React.FC<AlertProps>;
2016
+
2017
+ type ProgressBarSize = 'sm' | 'md' | 'lg';
2018
+ interface ProgressBarProps {
2019
+ /**
2020
+ * Aktuální hodnota průběhu v rozsahu 0–100.
2021
+ */
2022
+ value: number;
2023
+ /**
2024
+ * Velikostní preset určující výšku lišty.
2025
+ * - `'sm'` — 6 px
2026
+ * - `'md'` — 10 px
2027
+ * - `'lg'` — 16 px
2028
+ * @default 'md'
2029
+ */
2030
+ size?: ProgressBarSize;
2031
+ /**
2032
+ * Barva vyplněné části lišty.
2033
+ * @default '#E8612D'
2034
+ */
2035
+ color?: string;
2036
+ /**
2037
+ * Zobrazí procentuální hodnotu vedle lišty.
2038
+ * @default false
2039
+ */
2040
+ showValue?: boolean;
2041
+ /**
2042
+ * Volitelný popisek zobrazený nad lištou.
2043
+ */
2044
+ label?: string;
2045
+ /**
2046
+ * Zobrazí pruhovaný vzor na vyplněné části.
2047
+ * @default false
2048
+ */
2049
+ striped?: boolean;
2050
+ /**
2051
+ * Animuje pruhovaný vzor (vyžaduje `striped`).
2052
+ * @default false
2053
+ */
2054
+ animated?: boolean;
2055
+ /** Dodatečná CSS třída pro kořenový element. */
2056
+ className?: string;
2057
+ /** Další inline styly pro kořenový element. */
2058
+ style?: React.CSSProperties;
2059
+ }
2060
+ interface ProgressCircleProps {
2061
+ /**
2062
+ * Aktuální hodnota průběhu v rozsahu 0–100.
2063
+ */
2064
+ value: number;
2065
+ /**
2066
+ * Velikost SVG v pixelech (šířka i výška).
2067
+ * @default 64
2068
+ */
2069
+ size?: number;
2070
+ /**
2071
+ * Šířka tahu (stroke) kruhu.
2072
+ * @default 4
2073
+ */
2074
+ strokeWidth?: number;
2075
+ /**
2076
+ * Barva vyplněné části kruhu.
2077
+ * @default '#E8612D'
2078
+ */
2079
+ color?: string;
2080
+ /**
2081
+ * Zobrazí procentuální hodnotu uprostřed kruhu.
2082
+ * @default false
2083
+ */
2084
+ showValue?: boolean;
2085
+ /**
2086
+ * Volitelný popisek zobrazený pod kruhem.
2087
+ */
2088
+ label?: string;
2089
+ /** Dodatečná CSS třída pro kořenový element. */
2090
+ className?: string;
2091
+ /** Další inline styly pro kořenový element. */
2092
+ style?: React.CSSProperties;
2093
+ }
2094
+ /**
2095
+ * Horizontální lišta zobrazující průběh operace.
2096
+ *
2097
+ * Podporuje tři velikosti, volitelné pruhy (s animací),
2098
+ * zobrazení procentuální hodnoty a popisek.
2099
+ *
2100
+ * @example
2101
+ * ```tsx
2102
+ * <ProgressBar value={45} showValue />
2103
+ * <ProgressBar value={70} size="lg" striped animated label="Nahrávání" />
2104
+ * ```
2105
+ */
2106
+ declare const ProgressBar: React.FC<ProgressBarProps>;
2107
+ /**
2108
+ * Kruhový indikátor průběhu pomocí SVG.
2109
+ *
2110
+ * Hodnota 0–100 se vykresluje jako oblouk kolem kruhu pomocí
2111
+ * `stroke-dasharray` / `stroke-dashoffset`. Volitelně zobrazí
2112
+ * procentuální hodnotu uprostřed a popisek pod kruhem.
2113
+ *
2114
+ * @example
2115
+ * ```tsx
2116
+ * <ProgressCircle value={75} showValue />
2117
+ * <ProgressCircle value={50} size={80} strokeWidth={6} color="#00A205" label="Stahování" />
2118
+ * ```
2119
+ */
2120
+ declare const ProgressCircle: React.FC<ProgressCircleProps>;
2121
+
2122
+ type SpinnerSize = 'sm' | 'md' | 'lg';
2123
+ interface SpinnerProps {
2124
+ /**
2125
+ * Velikost spinneru.
2126
+ * - `'sm'` — 16 px
2127
+ * - `'md'` — 24 px
2128
+ * - `'lg'` — 40 px
2129
+ * - `number` — vlastní velikost v pixelech
2130
+ * @default 'md'
2131
+ */
2132
+ size?: SpinnerSize | number;
2133
+ /**
2134
+ * Barva spinneru. Pokud není zadána, dědí `currentColor`.
2135
+ */
2136
+ color?: string;
2137
+ /**
2138
+ * Text pro přístupnost (screen reader). Vykreslí se jako `aria-label`.
2139
+ * @default 'Načítání'
2140
+ */
2141
+ label?: string;
2142
+ /** Dodatečná CSS třída pro kořenový element. */
2143
+ className?: string;
2144
+ /** Další inline styly pro kořenový element. */
2145
+ style?: React.CSSProperties;
2146
+ }
2147
+ /**
2148
+ * Animovaný spinner (indikátor načítání) využívající requestAnimationFrame.
2149
+ *
2150
+ * Jedná se o samostatnou verzi interního spinneru používaného
2151
+ * v komponentách Input, Select a Button. Rotace je řízena pomocí
2152
+ * rAF pro plynulou animaci bez CSS keyframes.
2153
+ *
2154
+ * @example
2155
+ * ```tsx
2156
+ * <Spinner />
2157
+ * <Spinner size="lg" color="#E8612D" />
2158
+ * <Spinner size={32} label="Ukládání dat" />
2159
+ * ```
2160
+ */
2161
+ declare const Spinner: React.FC<SpinnerProps>;
2162
+
2163
+ type DividerOrientation = 'horizontal' | 'vertical';
2164
+ interface DividerProps {
2165
+ /**
2166
+ * Orientace oddělovače.
2167
+ * - `'horizontal'` — plná šířka, horizontální čára
2168
+ * - `'vertical'` — plná výška, vertikální čára
2169
+ * @default 'horizontal'
2170
+ */
2171
+ orientation?: DividerOrientation;
2172
+ /**
2173
+ * Volitelný text zobrazený uprostřed oddělovače.
2174
+ * Podporováno pouze pro horizontální orientaci.
2175
+ */
2176
+ label?: string;
2177
+ /** Dodatečná CSS třída pro kořenový element. */
2178
+ className?: string;
2179
+ /** Další inline styly pro kořenový element. */
2180
+ style?: React.CSSProperties;
2181
+ }
2182
+ /**
2183
+ * Vizuální oddělovač obsahu — horizontální nebo vertikální čára.
2184
+ *
2185
+ * V horizontálním režimu zabírá celou šířku kontejneru a volitelně
2186
+ * zobrazí text uprostřed. Ve vertikálním režimu zabírá celou výšku.
2187
+ *
2188
+ * @example
2189
+ * ```tsx
2190
+ * <Divider />
2191
+ * <Divider label="nebo" />
2192
+ * <Divider orientation="vertical" />
2193
+ * ```
2194
+ */
2195
+ declare const Divider: React.FC<DividerProps>;
2196
+
2197
+ type StackDirection = 'row' | 'column';
2198
+ type StackAlign = 'start' | 'center' | 'end' | 'stretch';
2199
+ type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around';
2200
+ interface StackProps {
2201
+ /**
2202
+ * Směr rozložení potomků.
2203
+ * @default 'column'
2204
+ */
2205
+ direction?: StackDirection;
2206
+ /**
2207
+ * Mezera mezi potomky v pixelech nebo jako CSS hodnota.
2208
+ * @default 8
2209
+ */
2210
+ gap?: number | string;
2211
+ /**
2212
+ * Zarovnání na příčné ose (align-items).
2213
+ * @default 'stretch'
2214
+ */
2215
+ align?: StackAlign;
2216
+ /**
2217
+ * Rozložení na hlavní ose (justify-content).
2218
+ * @default 'start'
2219
+ */
2220
+ justify?: StackJustify;
2221
+ /**
2222
+ * Povolí zalamování prvků do dalších řádků / sloupců.
2223
+ * @default false
2224
+ */
2225
+ wrap?: boolean;
2226
+ /**
2227
+ * Roztáhne komponentu na celou šířku kontejneru.
2228
+ * @default false
2229
+ */
2230
+ fullWidth?: boolean;
2231
+ /**
2232
+ * Potomci rozmístění uvnitř stacku.
2233
+ */
2234
+ children?: React.ReactNode;
2235
+ /** Dodatečná CSS třída pro kořenový element. */
2236
+ className?: string;
2237
+ /** Další inline styly pro kořenový element. */
2238
+ style?: React.CSSProperties;
2239
+ }
2240
+ /**
2241
+ * Jednoduchý layout helper využívající CSS flexbox.
2242
+ *
2243
+ * Usnadňuje běžné rozložení prvků ve sloupcích nebo řádcích
2244
+ * s konzistentními mezerami, zarovnáním a zalamováním.
2245
+ *
2246
+ * @example
2247
+ * ```tsx
2248
+ * <Stack gap={16}>
2249
+ * <Input label="Jméno" />
2250
+ * <Input label="Příjmení" />
2251
+ * </Stack>
2252
+ *
2253
+ * <Stack direction="row" gap={12} align="center">
2254
+ * <Button>Uložit</Button>
2255
+ * <Button variant="outline">Zrušit</Button>
2256
+ * </Stack>
2257
+ * ```
2258
+ */
2259
+ declare const Stack: React.FC<StackProps>;
2260
+
2261
+ type ContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl';
2262
+ interface ContainerProps {
2263
+ /**
2264
+ * Maximální šířka kontejneru.
2265
+ * - `'sm'` — 640 px
2266
+ * - `'md'` — 768 px
2267
+ * - `'lg'` — 1024 px
2268
+ * - `'xl'` — 1280 px
2269
+ * - `number` — vlastní hodnota v pixelech
2270
+ * @default 'lg'
2271
+ */
2272
+ maxWidth?: ContainerMaxWidth | number;
2273
+ /**
2274
+ * Vnitřní odsazení (padding). Číslo v pixelech nebo CSS hodnota.
2275
+ * @default 16
2276
+ */
2277
+ padding?: number | string;
2278
+ /**
2279
+ * Vycentruje kontejner pomocí automatických okrajů.
2280
+ * @default true
2281
+ */
2282
+ centered?: boolean;
2283
+ /**
2284
+ * Potomci vykreslení uvnitř kontejneru.
2285
+ */
2286
+ children?: React.ReactNode;
2287
+ /** Dodatečná CSS třída pro kořenový element. */
2288
+ className?: string;
2289
+ /** Další inline styly pro kořenový element. */
2290
+ style?: React.CSSProperties;
2291
+ }
2292
+ /**
2293
+ * Layout kontejner s maximální šířkou a volitelným centrováním.
2294
+ *
2295
+ * Usnadňuje tvorbu stránek s konzistentní šířkou obsahu
2296
+ * a odsazením. Ve výchozím nastavení centruje obsah pomocí
2297
+ * automatických okrajů a aplikuje vnitřní padding.
2298
+ *
2299
+ * @example
2300
+ * ```tsx
2301
+ * <Container>
2302
+ * <h1>Obsah stránky</h1>
2303
+ * <p>Tento obsah bude omezený na 1024 px a vycentrovaný.</p>
2304
+ * </Container>
2305
+ *
2306
+ * <Container maxWidth="sm" padding={24}>
2307
+ * <LoginForm />
2308
+ * </Container>
2309
+ * ```
2310
+ */
2311
+ declare const Container: React.FC<ContainerProps>;
2312
+
2313
+ interface DragListItem {
2314
+ /** Unikátní identifikátor položky. */
2315
+ id: string;
2316
+ /** Textový popisek položky. */
2317
+ label: string;
2318
+ /** Volitelná ikona zobrazená před popiskem. */
2319
+ icon?: React.ReactNode;
2320
+ /** Potomci položky (pro stromový režim). */
2321
+ children?: DragListItem[];
2322
+ /** Zda je položka rozbalena (pro stromový režim). @default false */
2323
+ expanded?: boolean;
2324
+ /** Libovolná uživatelská data. */
2325
+ data?: any;
2326
+ }
2327
+ /** Props předané do `renderItem` funkce pro ovládání drag handlu. */
2328
+ interface DragHandleProps {
2329
+ /** Spread na element, který má sloužit jako drag handle. */
2330
+ handleProps: {
2331
+ onMouseDown: (e: React.MouseEvent) => void;
2332
+ style: React.CSSProperties;
2333
+ 'aria-label': string;
2334
+ };
2335
+ /** Zda je položka právě přetahována. */
2336
+ isDragging: boolean;
2337
+ /** Hloubka vnoření (0 = root). */
2338
+ depth: number;
2339
+ /** Zda je položka rozbalena (stromový režim). */
2340
+ isExpanded: boolean;
2341
+ /** Přepne rozbalení/sbalení potomků. */
2342
+ toggleExpand: () => void;
2343
+ /** Zda má položka potomky. */
2344
+ hasChildren: boolean;
2345
+ }
2346
+ interface DragListProps {
2347
+ /** Seznam položek k zobrazení. */
2348
+ items: DragListItem[];
2349
+ /** Callback volaný při změně pořadí položek. */
2350
+ onReorder: (items: DragListItem[]) => void;
2351
+ /**
2352
+ * Vlastní vykreslovací funkce pro položku.
2353
+ * Přijímá `item`, `dragHandleProps` a další metadata.
2354
+ * Pokud není zadána, použije se výchozí vykreslení s gripem a textem.
2355
+ *
2356
+ * @example
2357
+ * ```tsx
2358
+ * renderItem={(item, { handleProps, isDragging }) => (
2359
+ * <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
2360
+ * <span {...handleProps}>⠿</span>
2361
+ * <span>{item.label}</span>
2362
+ * </div>
2363
+ * )}
2364
+ * ```
2365
+ */
2366
+ renderItem?: (item: DragListItem, props: DragHandleProps) => React.ReactNode;
2367
+ /** Povolí vnořování položek (stromový režim). @default false */
2368
+ allowNesting?: boolean;
2369
+ /** Maximální hloubka vnoření. @default 3 */
2370
+ maxDepth?: number;
2371
+ /**
2372
+ * Zda je celá karta přetahovatelná, nebo jen grip handle.
2373
+ * Při `'handle'` je karta přetahovatelná jen za grip/handle element.
2374
+ * @default 'full'
2375
+ */
2376
+ dragMode?: 'full' | 'handle';
2377
+ /** Dodatečná CSS třída. */
2378
+ className?: string;
2379
+ /** Další inline styly. */
2380
+ style?: React.CSSProperties;
2381
+ }
2382
+ /**
2383
+ * Přetahovací seznam dle SM-UI design systému.
2384
+ *
2385
+ * Umožňuje řazení položek přetažením (drag & drop).
2386
+ * Volitelně podporuje stromovou strukturu s vnořováním.
2387
+ * Využívá nativní HTML5 Drag and Drop API bez externích závislostí.
2388
+ *
2389
+ * Při přetahování na střed karty se položka vnoří jako potomek.
2390
+ * Při podržení nad sbaleným uzlem se uzel automaticky rozbalí.
2391
+ *
2392
+ * @example
2393
+ * ```tsx
2394
+ * <DragList
2395
+ * items={[
2396
+ * { id: '1', label: 'Položka 1' },
2397
+ * { id: '2', label: 'Položka 2' },
2398
+ * { id: '3', label: 'Položka 3' },
2399
+ * ]}
2400
+ * onReorder={setItems}
2401
+ * />
2402
+ * ```
2403
+ */
2404
+ declare const DragList: React.FC<DragListProps>;
2405
+
2406
+ type Theme = 'light' | 'dark';
2407
+ /**
2408
+ * Zjistí aktuální téma aplikace.
2409
+ * Výchozí je 'light'. Pokud je na html/body nastaven `data-theme`, použije se.
2410
+ * Jinak funguje fallback na systémové preference (prefers-color-scheme).
2411
+ */
2412
+ declare const useTheme: () => Theme;
2413
+
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 };