@turk.net/mui 3.0.7 → 3.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,659 @@
1
+ # OneHub Component Map
2
+
3
+ > **Purpose:** Definitive mapping of Figma design patterns to Material UI components with exact props (variant, size, color, severity).
4
+ >
5
+ > **Critical Rule:** AI agents MUST use ONLY the components and prop combinations listed below. Any deviation is a design violation.
6
+
7
+ ---
8
+
9
+ ## How to Use This Map
10
+
11
+ 1. Identify the UI element in Figma (e.g., a blue button with text)
12
+ 2. Find the matching pattern below
13
+ 3. Use the exact MUI component and props listed
14
+ 4. Do NOT invent new variant/size/color combinations
15
+
16
+ ---
17
+
18
+ ## Button
19
+
20
+ **MUI Component:** `Button` from `@mui/material`
21
+
22
+ | # | Figma Pattern | Variant | Size | Color | Key Visual Traits |
23
+ |---|--------------|---------|------|-------|-------------------|
24
+ | B1 | Primary / Filled Blue | `contained` | `medium` | `primary` | Blue bg (`--brand-background-1-rest`), white text, `borderRadius: 8px`, `height: 32px` |
25
+ | B2 | Primary / Filled Large | `contained` | `large` | `primary` | Same as B1 but taller |
26
+ | B3 | Primary / Filled Small | `contained` | `small` | `primary` | Same as B1 but smaller |
27
+ | B4 | Secondary / Outlined | `outlined` | `medium` | `secondary` | Gray border (`--neutral-stroke-1-rest`), transparent bg, dark text |
28
+ | B5 | Secondary / Outlined Large | `outlined` | `large` | `secondary` | Same as B4 but taller |
29
+ | B6 | Secondary / Outlined Small | `outlined` | `small` | `secondary` | Same as B4 but smaller |
30
+ | B7 | Text / Ghost | `text` | `medium` | `primary` | No bg, no border, blue text |
31
+ | B8 | Text / Ghost Small | `text` | `small` | `primary` | Same as B7 but smaller |
32
+ | B9 | Error / Danger | `contained` | `medium` | `error` | Red bg, white text |
33
+ | B10 | Error / Outlined | `outlined` | `medium` | `error` | Red border, transparent bg, red text |
34
+ | B11 | Icon Only (transparent) | `text` | `medium` | `primary` | No padding, transparent bg, `--neutral-background-subtle-rest` |
35
+ | B12 | Icon Only (gray bg) | `text` | `medium` | `secondary` | Gray bg (`--neutral-background-2-rest`), border |
36
+ | B13 | Filter Button (gray) | `text` | `medium` | `secondary` | Gray bg (`--neutral-background-2-rest`), `neutral-stroke-1` border, icon+text |
37
+ | B14 | Filter Button (clear) | `text` | `medium` | `primary` | Transparent bg, delete icon, no text or "Temizle" |
38
+
39
+ ### Button State Tokens
40
+
41
+ | State | Background | Foreground | Border |
42
+ |-------|------------|------------|--------|
43
+ | **rest** | `brand.background[1].rest` | `neutral.foreground.on.brand.rest` | none |
44
+ | **hover** | `brand.background[1].hover` | `neutral.foreground.on.brand.hover` | none |
45
+ | **pressed** | `brand.background[1].pressed` | `neutral.foreground.on.brand.pressed` | none |
46
+ | **disabled** | `neutral.background.disabled.rest` | `neutral.foreground.disabled.rest` | none |
47
+ | **focus** | `brand.background[1].rest` | `neutral.foreground.on.brand.rest` | `neutral.stroke.focus.rest` |
48
+
49
+ > Button states are auto-handled by the theme overrides. Do NOT manually apply hover/pressed styles.
50
+
51
+ ### Invalid Button Combinations
52
+
53
+ ```typescript
54
+ // ❌ WRONG — color="success" not defined in theme
55
+ <Button color="success">Save</Button>
56
+
57
+ // ❌ WRONG — variant="outlined" with color="primary" but without size
58
+ <Button variant="outlined" color="primary">Delete</Button>
59
+
60
+ // ✅ CORRECT
61
+ <Button variant="outlined" size="medium" color="error">Delete</Button>
62
+ ```
63
+
64
+ ---
65
+
66
+ ## TextField / Input
67
+
68
+ **MUI Component:** `TextField` from `@mui/material`
69
+
70
+ | # | Figma Pattern | Color | Size | Key Visual Traits |
71
+ |---|--------------|-------|------|-------------------|
72
+ | T1 | Default Input | `neutral` | `medium` | Gray border, white bg |
73
+ | T2 | Brand Input | `brand` | `medium` | Blue border/focus |
74
+ | T3 | Error Input | `danger` | `medium` | Red border, error text |
75
+ | T4 | Large Input | `neutral` | `large` | Taller input field |
76
+ | T5 | Disabled Input | `neutral` | `medium` | Gray bg, disabled border |
77
+ | T6 | Read-only Input | `neutral` | `medium` | No border, subtle bg |
78
+
79
+ ### TextField Label
80
+
81
+ **MUI Component:** `InputLabel` (auto-wrapped by TextField)
82
+
83
+ | Size | Typography |
84
+ |------|-----------|
85
+ | `small` | `text.xs.regular` (`12px`, `400`) |
86
+ | `medium` | `text.sm.regular` (`14px`, `400`) |
87
+ | `large` | `text.sm.regular` (`14px`, `400`) |
88
+
89
+ ### TextField Helper Text
90
+
91
+ **MUI Component:** `FormHelperText`
92
+
93
+ | Type | Typography | Color |
94
+ |------|-----------|-------|
95
+ | default | `text.xs.regular` | `neutral.foreground[3].rest` |
96
+ | error | `text.xs.regular` | `danger.foreground[1].rest` |
97
+
98
+ ### Invalid TextField Combinations
99
+
100
+ ```typescript
101
+ // ❌ WRONG — color="primary" not defined for TextField
102
+ <TextField color="primary" />
103
+
104
+ // ❌ WRONG — using MUI default sizes
105
+ <TextField size="small" /> // Use "small" only if defined in theme
106
+
107
+ // ✅ CORRECT
108
+ <TextField color="neutral" size="medium" />
109
+ ```
110
+
111
+ ---
112
+
113
+ ## Select / Dropdown
114
+
115
+ **MUI Component:** `Select` from `@mui/material`
116
+
117
+ Uses same color/size system as TextField.
118
+
119
+ | # | Figma Pattern | Color | Size |
120
+ |---|--------------|-------|------|
121
+ | S1 | Default Select | `neutral` | `medium` |
122
+ | S2 | Brand Select | `brand` | `medium` |
123
+ | S3 | Error Select | `danger` | `medium` |
124
+ | S4 | Large Select | `neutral` | `large` |
125
+
126
+ **MenuItem:** Standard `MenuItem` from `@mui/material`. Text uses `text.sm.regular`.
127
+
128
+ ---
129
+
130
+ ## Checkbox
131
+
132
+ **MUI Component:** `Checkbox` from `@mui/material`
133
+
134
+ | # | Figma Pattern | Color | Size |
135
+ |---|--------------|-------|------|
136
+ | C1 | Default Checkbox | `primary` | `small` (16px) |
137
+ | C2 | Error Checkbox | `error` | `small` (16px) |
138
+
139
+ ### Checkbox Visual Specs
140
+
141
+ | Property | Value |
142
+ |----------|-------|
143
+ | Size | `16px × 16px` |
144
+ | Border Radius | `4px` |
145
+ | Unchecked Border | `--neutral-stroke-accessible-rest` (`#616161`) |
146
+ | Checked Background | `--brand-background-compound-rest` (`#2970ff`) |
147
+ | Check Icon Color | White |
148
+
149
+ ### Figma Radio (Radio-style Checkbox)
150
+
151
+ Figma's "Radio" uses the same `CheckboxBase` component with `rounded-[8px]` for radio-style selection (used in filter panels):
152
+
153
+ | Figma Pattern | MUI Component | Props |
154
+ |--------------|---------------|-------|
155
+ | Radio (filter) | `Radio` or `Checkbox` | `color="primary"` — 16px, `borderRadius: 8px` |
156
+
157
+ ---
158
+
159
+ ## Radio
160
+
161
+ **MUI Component:** `Radio` from `@mui/material`
162
+
163
+ | # | Figma Pattern | Color | Size |
164
+ |---|--------------|-------|------|
165
+ | R1 | Default Radio | `primary` | `small` (16px) |
166
+ | R2 | Error Radio | `error` | `small` (16px) |
167
+
168
+ ### Radio Visual Specs
169
+
170
+ | Property | Value |
171
+ |----------|-------|
172
+ | Size | `16px × 16px` |
173
+ | Border Radius | `8px` (fully rounded) |
174
+ | Unchecked Border | `--neutral-stroke-accessible-rest` |
175
+ | Checked Fill | `--brand-background-compound-rest` |
176
+
177
+ ---
178
+
179
+ ## Switch
180
+
181
+ **MUI Component:** `Switch` from `@mui/material`
182
+
183
+ | # | Figma Pattern | Color | Size |
184
+ |---|--------------|-------|------|
185
+ | SW1 | Default Switch | `primary` | `medium` |
186
+ | SW2 | Small Switch | `primary` | `small` |
187
+
188
+ ---
189
+
190
+ ## Chip / Badge / Tag
191
+
192
+ **MUI Component:** `Chip` from `@mui/material`
193
+
194
+ ### Chip Variants
195
+
196
+ | # | Figma Pattern | Variant | Color | Size |
197
+ |---|--------------|---------|-------|------|
198
+ | CH1 | Filled (brand/blue) | `filled` | `primary` | `medium` |
199
+ | CH2 | Tint (light blue bg) | `tint` | `primary` | `medium` |
200
+ | CH3 | Outline (bordered) | `outline` | `primary` | `medium` |
201
+ | CH4 | Ghost (text only) | `ghost` | `primary` | `medium` |
202
+ | CH5 | Filled Error | `filled` | `error` | `medium` |
203
+ | CH6 | Tint Error | `tint` | `error` | `medium` |
204
+
205
+ ### Filter Tags (from Figma)
206
+
207
+ Figma shows "Badge" with `rounded-[16px]`, `brand-background-2-rest` bg, `brand-stroke-2-rest` border, `brand-foreground-2-rest` text, `text.xs.medium`:
208
+
209
+ | Figma Name | MUI Component | Variant | Color | Size |
210
+ |-----------|---------------|---------|-------|------|
211
+ | Filter Tag (active) | `Chip` | `tint` | `primary` | `small` |
212
+ | Filter Tag (with remove) | `Chip` | `tint` | `primary` | `small` + `onDelete` |
213
+
214
+ ### Chip Typography
215
+
216
+ | Size | Typography |
217
+ |------|-----------|
218
+ | `small` | `text.xs.medium` (`12px`, `500`) |
219
+ | `medium` | `text.sm.medium` (`14px`, `500`) |
220
+
221
+ ---
222
+
223
+ ## Badge (Notification Badge)
224
+
225
+ **MUI Component:** `Badge` from `@mui/material`
226
+
227
+ | # | Figma Pattern | Color | Size |
228
+ |---|--------------|-------|------|
229
+ | BD1 | Default Badge | `default` | `medium` |
230
+ | BD2 | Brand Badge | `brand` | `medium` |
231
+ | BD3 | Success Badge | `success` | `medium` |
232
+ | BD4 | Danger Badge | `danger` | `medium` |
233
+ | BD5 | Warning Badge | `warning` | `medium` |
234
+ | BD6 | Important Badge | `important` | `medium` |
235
+ | BD7 | Dot Badge (6px) | `default` | `dot` |
236
+ | BD8 | Small Badge | `default` | `small` |
237
+
238
+ ### Dot Badge (from Figma)
239
+
240
+ Figma shows a `size-[6px]` dot indicator next to task descriptions. This maps to:
241
+
242
+ ```typescript
243
+ // Use Badge with dot size
244
+ <Badge color="default" size="dot" variant="dot">
245
+ <Icon />
246
+ </Badge>
247
+ ```
248
+
249
+ ---
250
+
251
+ ## Status Badges (Customer Status)
252
+
253
+ Figma shows status labels: `Dondurulmus`, `Aktif`, `Hizmet disi`. These are not MUI Badge — they use `Chip`:
254
+
255
+ | Figma Pattern | MUI Component | Variant | Color |
256
+ |--------------|---------------|---------|-------|
257
+ | Active status | `Chip` | `tint` | `success` |
258
+ | Frozen status | `Chip` | `tint` | `warning` |
259
+ | Out of service | `Chip` | `tint` | `error` |
260
+
261
+ ---
262
+
263
+ ## Alert
264
+
265
+ **MUI Component:** `Alert` from `@mui/material`
266
+
267
+ | # | Figma Pattern | Severity | Variant |
268
+ |---|--------------|----------|---------|
269
+ | A1 | Success Alert | `success` | `standard` |
270
+ | A2 | Warning Alert | `warning` | `standard` |
271
+ | A3 | Error Alert | `error` | `standard` |
272
+ | A4 | Info Alert | `info` | `standard` |
273
+
274
+ ---
275
+
276
+ ## Snackbar / Toast
277
+
278
+ **MUI Component:** `Snackbar` from `@mui/material` + `Alert` inside
279
+
280
+ ```typescript
281
+ // Standard pattern for notifications
282
+ <Snackbar open={open} autoHideDuration={6000} onClose={handleClose}>
283
+ <Alert severity="success" variant="standard" onClose={handleClose}>
284
+ Operation completed successfully
285
+ </Alert>
286
+ </Snackbar>
287
+ ```
288
+
289
+ ---
290
+
291
+ ## Dialog / Modal
292
+
293
+ **MUI Component:** `Dialog` from `@mui/material`
294
+
295
+ | Property | Value |
296
+ |----------|-------|
297
+ | **Paper Elevation** | `theme.shadows[6]` (28px blur) |
298
+ | **Paper Border Radius** | `theme.shape.borderRadius` (8px) |
299
+ | **Backdrop** | `--neutral-background-overlay-rest` |
300
+
301
+ ```typescript
302
+ // Standard pattern
303
+ <Dialog open={open} onClose={handleClose}>
304
+ <DialogTitle>Title</DialogTitle>
305
+ <DialogContent>
306
+ <DialogContentText>Description</DialogContentText>
307
+ </DialogContent>
308
+ <DialogActions>
309
+ <Button variant="outlined" size="medium" color="secondary" onClick={handleClose}>
310
+ Cancel
311
+ </Button>
312
+ <Button variant="contained" size="medium" color="primary" onClick={handleConfirm}>
313
+ Confirm
314
+ </Button>
315
+ </DialogActions>
316
+ </Dialog>
317
+ ```
318
+
319
+ ---
320
+
321
+ ## Menu (Dropdown Menu)
322
+
323
+ **MUI Component:** `Menu` + `MenuItem` from `@mui/material`
324
+
325
+ | Property | Value |
326
+ |----------|-------|
327
+ | **Paper Elevation** | `theme.shadows[4]` (8px blur) |
328
+ | **Border Radius** | `theme.shape.borderRadius` (8px) |
329
+
330
+ ---
331
+
332
+ ## Tooltip
333
+
334
+ **MUI Component:** `Tooltip` from `@mui/material`
335
+
336
+ Tooltip styling is handled by theme overrides. Use standard MUI Tooltip API.
337
+
338
+ ---
339
+
340
+ ## Table / Data Grid
341
+
342
+ OneHub tables are **not** MUI `Table` — they use custom styled `Box` rows with flex layout.
343
+
344
+ ### Table Structure (from Figma)
345
+
346
+ | Element | Figma Height | Background | Border |
347
+ |---------|-------------|------------|--------|
348
+ | **Table Header** | `40px` | `--neutral-background-2-rest` (`#fafafa`) | Bottom: `--neutral-stroke-3-rest` |
349
+ | **Table Row** | `56px` | `--neutral-background-1-rest` (white) | Bottom: `--neutral-stroke-3-rest` |
350
+ | **Table Row Hover** | `56px` | — | Bottom: `--neutral-stroke-3-rest` |
351
+ | **Table Cell Padding** | — | — | `paddingLeft: 32px, paddingRight: 32px` |
352
+ | **Pagination Row** | `56px` | `--neutral-background-1-rest` | Top: `--neutral-stroke-3-rest` |
353
+
354
+ ### Table Typography
355
+
356
+ | Element | Typography | Color |
357
+ |---------|-----------|-------|
358
+ | Header text | `text.xs.medium` (`12px`, `500`) | `neutral.foreground[1].rest` |
359
+ | Row primary text | `text.sm.medium` (`14px`, `500`) | `neutral.foreground[1].rest` |
360
+ | Row secondary text | `text.sm.regular` (`14px`, `400`) | `neutral.foreground[4].rest` |
361
+ | Date number (large) | `text.lg.medium` (`18px`, `500`) | `neutral.foreground[2].rest` |
362
+ | Date month (small) | `text.sm.regular` (`14px`, `400`) | `neutral.foreground[4].rest` |
363
+
364
+ ### Search & Filter Bar
365
+
366
+ | Element | MUI Component(s) | Notes |
367
+ |---------|-----------------|-------|
368
+ | Search Input | `TextField` color="neutral" size="medium" + search icon | `placeholder="Ara"` |
369
+ | Filter Button | `Button` variant="text" size="medium" color="secondary" | Gray bg, border, filter icon + "Filtreler" |
370
+ | Active Filter Tags | `Chip` variant="tint" color="primary" size="small" | `onDelete` for remove |
371
+ | Clear Button | `Button` variant="text" size="medium" color="primary" | Transparent bg, delete icon |
372
+
373
+ ### Pagination
374
+
375
+ | Element | MUI Component |
376
+ |---------|---------------|
377
+ | Pagination controls | `Pagination` or `TablePagination` from `@mui/material` |
378
+
379
+ ---
380
+
381
+ ## Tabs
382
+
383
+ **MUI Component:** `Tabs` + `Tab` from `@mui/material`
384
+
385
+ Tab styling is handled by theme overrides. Use standard MUI Tabs API.
386
+
387
+ | Property | Figma Spec |
388
+ |----------|-----------|
389
+ | Tab indicator | Blue, `2px` height |
390
+ | Active tab text | `text.sm.semibold`, `brand.foreground[1].rest` |
391
+ | Inactive tab text | `text.sm.regular`, `neutral.foreground[2].rest` |
392
+
393
+ ---
394
+
395
+ ## Card / Container → Paper
396
+
397
+ **MUI Component:** `Paper` from `@mui/material`
398
+
399
+ ### Figma Detection Rule
400
+
401
+ **When you see a Figma layer named `"Card"` or `"Container"`** with these style characteristics:
402
+
403
+ - Background: `var(--Neutral-Background-2-Rest, #FAFAFA)` or white
404
+ - Box Shadow: `0 0 2px 0 rgba(0,0,0,0.12), 0 1px 2px 0 rgba(0,0,0,0.14)` (Figma `shadow2`)
405
+
406
+ → **Use `<Paper elevation={2}>`**
407
+
408
+ ```tsx
409
+ // ✅ CORRECT — Figma "Card" / "Container" layer → Paper elevation={2}
410
+ <Paper elevation={2} sx={{ /* sadece ihtiyaç varsa override */ }}>
411
+ {/* card content */}
412
+ </Paper>
413
+ ```
414
+
415
+ ### Figma Styles → MUI Mapping
416
+
417
+ | Figma Style | MUI Prop | Value |
418
+ |-------------|----------|-------|
419
+ | `shadow2` (0 0 2px + 0 1px 2px) | `elevation` | `{2}` |
420
+ | `background: #FAFAFA` / white | background | `neutral.background[1].rest` (tema default) |
421
+ | `borderRadius: 8px` | borderRadius | `theme.shape.borderRadius` (tema default) |
422
+ | `borderRadius: 0px` (köşeli tasarım) | `sx` | `sx={{ borderRadius: 0 }}` ile override |
423
+
424
+ ### Corner Radius Behavior
425
+
426
+ - Tema default olarak `borderRadius: 8px` uygular
427
+ - Figma'daki layer köşeli (0px borderRadius) ise: `<Paper elevation={2} sx={{ borderRadius: 0 }}>`
428
+ - Figma'daki layer daha yuvarlaksa: `sx={{ borderRadius: ... }}` ile override edilebilir
429
+
430
+ ### Paper Default Properties (from Theme)
431
+
432
+ | Property | Theme Value |
433
+ |----------|-------------|
434
+ | **Border Radius** | `theme.shape.borderRadius` (8px) |
435
+ | **Background** | `var(--palette-neutral-background-1-rest)` |
436
+ | **Border** | `1px solid var(--palette-neutral-stroke-3-rest)` |
437
+ | **Elevation 0** | Flat (no shadow) |
438
+ | **Elevation 2** | Very subtle shadow (Figma shadow2 equivalent) |
439
+ | **Elevation 4** | Dropdown level |
440
+ | **Elevation 8** | Dialog level |
441
+
442
+ ---
443
+
444
+ ## Cards (Alternative)
445
+
446
+ **MUI Component:** `Card` from `@mui/material`
447
+
448
+ `Card` extends `Paper` with the same styling. Use `Card` when you need `CardContent`, `CardHeader`, `CardActions`, `CardMedia` sub-components. Otherwise prefer `Paper`.
449
+
450
+ | Property | Value |
451
+ |----------|-------|
452
+ | **Border Radius** | `theme.shape.borderRadius` (8px) |
453
+ | **Background** | `--neutral-background-1-rest` |
454
+ | **Default Elevation** | `theme.shadows[0]` (none) |
455
+ | **Elevated** | Use `elevation` prop |
456
+
457
+ ---
458
+
459
+ ## Sidebar / Navigation
460
+
461
+ **Layout Component:** `WithSidebarLayout` from `@turknet/onehub/layouts/page/WithSidebar`
462
+
463
+ | Property | Figma Spec |
464
+ |----------|-----------|
465
+ | Width | `256px` (collapsed: `64px`) |
466
+ | Background | Varies (light/dark) |
467
+ | Nav items | `CollapsableListItem` |
468
+
469
+ ---
470
+
471
+ ## TabBased Layout Recognition
472
+
473
+ **When you see a Figma layer named `"Header tab navigation"`:**
474
+
475
+ This is the **TabBased layout header** — a 56px toolbar with navigation buttons (menu, plus, notifications, calendar, settings, help, bug).
476
+
477
+ **CRITICAL RULE:** AI agents MUST NOT implement this header as part of a page component. The page content MUST be designed as a **tab within the existing TabBased layout**.
478
+
479
+ ```tsx
480
+ // ❌ WRONG — Sayfa içinde Header tab navigation'ı tekrar oluşturma
481
+ function MyPage() {
482
+ return (
483
+ <Box>
484
+ {/* Header tab navigation'ı burada oluşturma! */}
485
+ <AppBar>...</AppBar>
486
+ <Box>sayfa içeriği</Box>
487
+ </Box>
488
+ );
489
+ }
490
+
491
+ // ✅ CORRECT — Sayfa içeriğini TabBased layout'ta bir sekme olarak oluştur
492
+ // Sayfa, redux tabSlice üzerinden açılır, layout otomatik sağlanır
493
+ function MyPageContent() {
494
+ return (
495
+ <Box sx={{ p: theme.spacing(4) }}>
496
+ {/* sadece sayfa içeriği — header/AppBar YOK */}
497
+ <Typography variant="display.xs.bold">Sayfa Başlığı</Typography>
498
+ ...
499
+ </Box>
500
+ );
501
+ }
502
+ ```
503
+
504
+ ### TabBased Layout Header Specs (from Figma)
505
+
506
+ | Element | Spec |
507
+ |---------|------|
508
+ | **Height** | `56px` |
509
+ | **Horizontal Padding** | `32px` |
510
+ | **Left content** | Navigation buttons (menu toggle, add tab) |
511
+ | **Right content** | Action buttons (notifications, calendar, settings, help, bug report) |
512
+ | **Background** | Theme-handled |
513
+ | **Layout** | `@turknet/onehub/layouts/app/TabBased` |
514
+
515
+ ### What This Means for Page Development
516
+
517
+ - **Header tab navigation layer varsa:** Bu sayfa bir TabBased sekmesidir. Sayfa içeriğini geliştir, header'ı layout'a bırak.
518
+ - **Header tab navigation layer yoksa:** Sayfa bağımsız bir sayfadır (örn. login, ayarlar). Kendi header/footer'ını içerebilir.
519
+
520
+ ---
521
+
522
+ ## Date Picker
523
+
524
+ **MUI Component:** `DatePicker` from `@mui/x-date-pickers`
525
+
526
+ DatePicker styling is handled by theme overrides. Uses `dayjs` adapter.
527
+
528
+ ---
529
+
530
+ ## Autocomplete
531
+
532
+ **MUI Component:** `Autocomplete` from `@mui/material`
533
+
534
+ | # | Figma Pattern | Size |
535
+ |---|--------------|------|
536
+ | AC1 | Default Autocomplete | `medium` |
537
+ | AC2 | Large Autocomplete | `large` |
538
+
539
+ Uses same color system as TextField.
540
+
541
+ ---
542
+
543
+ ## Slider
544
+
545
+ **MUI Component:** `Slider` from `@mui/material`
546
+
547
+ Slider styling is handled by theme overrides.
548
+
549
+ ---
550
+
551
+ ## Link
552
+
553
+ **MUI Component:** `Link` from `@mui/material`
554
+
555
+ | Property | Value |
556
+ |----------|-------|
557
+ | Color | `brand.foreground.compound.rest` |
558
+ | Typography | Inherits from parent |
559
+
560
+ ---
561
+
562
+ ## Icon
563
+
564
+ **Icons:** Import from `@turknet/onehub/icons` (SVG React components) or the project's Tune icon font.
565
+
566
+ ```typescript
567
+ // Preferred: SVG icon from theme package
568
+ import { CheckIcon, ChevronDownIcon, SearchIcon } from '@turknet/onehub/icons'
569
+
570
+ // Alternative: Tune icon font (if project uses it)
571
+ import { TuneIcon } from '@/components/ui/icon'
572
+ <TuneIcon name="check" />
573
+ ```
574
+
575
+ ---
576
+
577
+ ## Avatar
578
+
579
+ **MUI Component:** `Avatar` from `@mui/material`
580
+
581
+ | # | Size | Dimensions |
582
+ |---|------|-----------|
583
+ | AV1 | `dot` | `8px` |
584
+ | AV2 | `extra-small` | `24px` |
585
+ | AV3 | `small` | `32px` |
586
+ | AV4 | `medium` | `40px` |
587
+ | AV5 | `large` | `48px` |
588
+ | AV6 | `extra-large` | `64px` |
589
+
590
+ ---
591
+
592
+ ## List
593
+
594
+ **MUI Component:** `List` / `ListItem` / `ListItemButton` from `@mui/material`
595
+
596
+ List styling is handled by theme overrides.
597
+
598
+ ---
599
+
600
+ ## Typography
601
+
602
+ **MUI Component:** `Typography` from `@mui/material`
603
+
604
+ See `DESIGN_TOKENS_MAP.md#typography-token-map` for the complete variant list.
605
+
606
+ ```typescript
607
+ // ✅ CORRECT — Use defined variants
608
+ <Typography variant="text.sm.medium">Label</Typography>
609
+ <Typography variant="display.xs.bold">Page Title</Typography>
610
+
611
+ // ❌ WRONG — MUI default variants are DISABLED
612
+ <Typography variant="h1">Title</Typography>
613
+ <Typography variant="body1">Text</Typography>
614
+ ```
615
+
616
+ ---
617
+
618
+ ## Components NOT Allowed (No Theme Override)
619
+
620
+ The following MUI components do NOT have theme overrides and MUST NOT be used:
621
+
622
+ | Component | Reason | Alternative |
623
+ |-----------|--------|-------------|
624
+ | `ToggleButton` | Not overridden | Use `Chip` or `Button` group |
625
+ | `Rating` | Not overridden | Custom solution |
626
+ | `SpeedDial` | Not overridden | Custom solution |
627
+ | `BottomNavigation` | Not overridden | Custom solution |
628
+ | `MobileStepper` | Not overridden | Custom solution |
629
+ | `ImageList` | Not overridden | CSS Grid/Flex |
630
+
631
+ ---
632
+
633
+ ## Quick Reference: Figma → MUI
634
+
635
+ | If you see in Figma... | Use this MUI component |
636
+ |------------------------|----------------------|
637
+ | A filled blue button | `Button variant="contained" color="primary"` |
638
+ | An outlined gray button | `Button variant="outlined" color="secondary"` |
639
+ | A text-only button | `Button variant="text" color="primary"` |
640
+ | A text input field | `TextField color="neutral"` |
641
+ | A dropdown selector | `Select color="neutral"` |
642
+ | A checkbox | `Checkbox color="primary"` |
643
+ | A radio button | `Radio color="primary"` |
644
+ | A toggle switch | `Switch color="primary"` |
645
+ | A blue tag/chip | `Chip variant="tint" color="primary"` |
646
+ | A red error chip | `Chip variant="tint" color="error"` |
647
+ | A filter pill with X | `Chip variant="tint" color="primary" onDelete={...}` |
648
+ | A status dot (6px) | `Badge size="dot" color="..."` |
649
+ | A table header | Custom Box with `text.xs.medium` |
650
+ | A table data row | Custom Box with `text.sm.medium` / `text.sm.regular` |
651
+ | A success message | `Alert severity="success"` |
652
+ | A modal/dialog | `Dialog` |
653
+ | A tooltip on hover | `Tooltip` |
654
+ | A date picker | `DatePicker` (from `@mui/x-date-pickers`) |
655
+ | A search with dropdown | `Autocomplete` |
656
+ | Navigation tabs | `Tabs` + `Tab` |
657
+ | A card/container (layer name "Card" / "Container") | `Paper elevation={2}` |
658
+ | A card container (generic) | `Card` / `Paper` |
659
+ | "Header tab navigation" layer | DO NOT implement — use TabBased layout instead |