@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.
- package/dist/index.d.mts +2414 -0
- package/dist/index.d.ts +2414 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +13 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +55 -0
package/dist/index.d.mts
ADDED
|
@@ -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 };
|