@logosphere-ui/core 0.0.0-alpha.3 → 0.0.0-alpha.30

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.
Files changed (150) hide show
  1. package/AGENTS.md +1118 -0
  2. package/dist/AGENTS.md +1118 -0
  3. package/dist/atoms/Badge/badge.d.ts +1 -1
  4. package/dist/atoms/FormField/formfield.d.ts +10 -0
  5. package/dist/badge-BD_MRIBd.js +72 -0
  6. package/dist/badge-BV2hTvrI.cjs +13 -0
  7. package/dist/badge.cjs +1 -1
  8. package/dist/badge.js +1 -1
  9. package/dist/{breadcrumb-B-4yqoJZ.js → breadcrumb-BB61Xt0s.js} +3 -3
  10. package/dist/breadcrumb.js +1 -1
  11. package/dist/button-DRZ4sG4T.cjs +10 -0
  12. package/dist/button-Uu9oaieg.js +58 -0
  13. package/dist/button.cjs +1 -1
  14. package/dist/button.js +1 -1
  15. package/dist/calendar-CBJ4mtlE.js +652 -0
  16. package/dist/calendar-Coc9E6lD.cjs +88 -0
  17. package/dist/calendar.cjs +1 -0
  18. package/dist/calendar.js +4 -0
  19. package/dist/card-BD8FkSTi.cjs +43 -0
  20. package/dist/{card-CUhlTJyJ.js → card-CAAhjIjf.js} +26 -25
  21. package/dist/card.cjs +1 -1
  22. package/dist/card.js +1 -1
  23. package/dist/chatbot-BUYrJbTR.cjs +183 -0
  24. package/dist/chatbot-Cb2ByNkE.js +564 -0
  25. package/dist/chatbot.cjs +1 -1
  26. package/dist/chatbot.js +2 -2
  27. package/dist/{checkbox-7Rb3WKGx.js → checkbox-g6kl2jGR.js} +4 -4
  28. package/dist/checkbox.js +1 -1
  29. package/dist/combobox-G4TVTGS7.js +387 -0
  30. package/dist/combobox-kdjsT5eX.cjs +107 -0
  31. package/dist/combobox.cjs +1 -1
  32. package/dist/combobox.js +1 -1
  33. package/dist/datepicker-Cf3gLMsu.cjs +85 -0
  34. package/dist/datepicker-n5dZbuCD.js +375 -0
  35. package/dist/datepicker.cjs +1 -1
  36. package/dist/datepicker.js +2 -2
  37. package/dist/{download-manager-A4fOxGWJ.js → download-manager-BPg-6Qfg.js} +4 -4
  38. package/dist/download-manager-DDeTYRPs.cjs +97 -0
  39. package/dist/download-manager.cjs +1 -1
  40. package/dist/download-manager.js +1 -1
  41. package/dist/drawer-CViKfr6O.js +114 -0
  42. package/dist/drawer-CjM-vX41.cjs +32 -0
  43. package/dist/drawer.cjs +1 -0
  44. package/dist/drawer.js +4 -0
  45. package/dist/formfield-CRcyUMvQ.cjs +33 -0
  46. package/dist/formfield-O327HYt0.js +154 -0
  47. package/dist/formfield.cjs +1 -1
  48. package/dist/formfield.js +1 -1
  49. package/dist/index.cjs +1 -1
  50. package/dist/index.d.ts +6 -0
  51. package/dist/index.js +43 -28
  52. package/dist/index.umd.js +1029 -512
  53. package/dist/input-BJtn_iTC.js +257 -0
  54. package/dist/input-DPTTu8ZR.cjs +59 -0
  55. package/dist/input.cjs +1 -1
  56. package/dist/input.js +1 -1
  57. package/dist/left-menu.cjs +1 -0
  58. package/dist/left-menu.js +5 -0
  59. package/dist/leftmenu-DpES_nr1.js +301 -0
  60. package/dist/leftmenu-RcrjiF7g.cjs +83 -0
  61. package/dist/modal-CsEaHz0h.cjs +84 -0
  62. package/dist/modal-DHzMgFVY.js +250 -0
  63. package/dist/modal.cjs +1 -1
  64. package/dist/modal.js +1 -1
  65. package/dist/molecules/Input/input.d.ts +7 -1
  66. package/dist/molecules/Pagination/index.d.ts +1 -0
  67. package/dist/molecules/Pagination/pagination.d.ts +60 -0
  68. package/dist/molecules/Popover/popover.d.ts +1 -0
  69. package/dist/molecules/Textarea/text-area.d.ts +5 -2
  70. package/dist/molecules/TimePicker/index.d.ts +2 -0
  71. package/dist/molecules/TimePicker/timepicker.d.ts +62 -0
  72. package/dist/organisms/Calendar/calendar.d.ts +54 -0
  73. package/dist/organisms/Calendar/index.d.ts +1 -0
  74. package/dist/organisms/Calendar/shared.d.ts +9 -0
  75. package/dist/organisms/Chatbot/chatbot.d.ts +10 -1
  76. package/dist/organisms/Chatbot/index.d.ts +1 -1
  77. package/dist/organisms/Combobox/combobox.d.ts +19 -0
  78. package/dist/organisms/DatePicker/datepicker.d.ts +33 -33
  79. package/dist/organisms/Drawer/drawer.d.ts +30 -0
  80. package/dist/organisms/Drawer/index.d.ts +1 -0
  81. package/dist/organisms/LeftMenu/index.d.ts +2 -0
  82. package/dist/organisms/LeftMenu/leftmenu-item.d.ts +14 -0
  83. package/dist/organisms/LeftMenu/leftmenu.d.ts +45 -0
  84. package/dist/organisms/Modal/modal.d.ts +29 -4
  85. package/dist/organisms/Toast/index.d.ts +2 -0
  86. package/dist/organisms/Toast/toast-container.d.ts +42 -0
  87. package/dist/organisms/Toast/toast.d.ts +48 -0
  88. package/dist/organisms/TreeMenu/index.d.ts +1 -0
  89. package/dist/organisms/TreeMenu/tree-menu.d.ts +41 -0
  90. package/dist/popover-BSfKsQni.js +143 -0
  91. package/dist/popover-DhEvLuOo.cjs +30 -0
  92. package/dist/popover.cjs +1 -1
  93. package/dist/popover.js +1 -1
  94. package/dist/styles/main.css +186 -182
  95. package/dist/switch-8RGGesy5.cjs +17 -0
  96. package/dist/switch-DNqPqH-R.js +64 -0
  97. package/dist/switch.cjs +1 -1
  98. package/dist/switch.js +1 -1
  99. package/dist/tab-BmrITzOL.cjs +40 -0
  100. package/dist/{tab-BKdN4xAz.js → tab-Ca_OyNqQ.js} +5 -5
  101. package/dist/tab.cjs +1 -1
  102. package/dist/tab.js +1 -1
  103. package/dist/text-area-BztUgBL1.cjs +51 -0
  104. package/dist/text-area-DUg5BGQh.js +235 -0
  105. package/dist/textarea.cjs +1 -1
  106. package/dist/textarea.js +1 -1
  107. package/dist/timepicker-BKUTi_AU.js +316 -0
  108. package/dist/timepicker-CRtoPBMn.cjs +119 -0
  109. package/dist/timepicker.cjs +1 -0
  110. package/dist/timepicker.js +4 -0
  111. package/dist/toast-container-CHrtU7X5.js +274 -0
  112. package/dist/toast-container-T77X56AG.cjs +64 -0
  113. package/dist/toast.cjs +1 -0
  114. package/dist/toast.js +6 -0
  115. package/dist/tree-menu-5dkAPsgJ.js +154 -0
  116. package/dist/tree-menu-CdNwvOjp.cjs +47 -0
  117. package/dist/tree-menu.cjs +1 -0
  118. package/dist/tree-menu.js +4 -0
  119. package/dist/ui-icon-DKZMrOTi.cjs +22 -0
  120. package/dist/ui-icon-DrrH0WhF.js +70 -0
  121. package/package.json +56 -12
  122. package/dist/badge-BbhaO73N.cjs +0 -13
  123. package/dist/badge-DE7Tgd8Z.js +0 -71
  124. package/dist/button-C1EwOosO.js +0 -58
  125. package/dist/button-CDRccsk9.cjs +0 -10
  126. package/dist/card-n8ka8Zk-.cjs +0 -43
  127. package/dist/chatbot-Ces7Xveb.js +0 -496
  128. package/dist/chatbot-oRwt64d8.cjs +0 -160
  129. package/dist/combobox-BJbI-Tgi.js +0 -268
  130. package/dist/combobox-pmE7bgEL.cjs +0 -99
  131. package/dist/datepicker-DFJx45C-.js +0 -750
  132. package/dist/datepicker-b9JGTTMx.cjs +0 -115
  133. package/dist/directive-Z_rhNYWK.js +0 -240
  134. package/dist/directive-ekjitgzi.cjs +0 -3
  135. package/dist/download-manager-BSIMTGaK.cjs +0 -97
  136. package/dist/formfield-D_7NFFoe.cjs +0 -27
  137. package/dist/formfield-d8fp9FTV.js +0 -118
  138. package/dist/input-ByllRq9M.js +0 -192
  139. package/dist/input-DsIOQPGV.cjs +0 -46
  140. package/dist/live-BX-yBGvT.cjs +0 -1
  141. package/dist/live-WTVSYE2F.js +0 -24
  142. package/dist/modal-Bfc6WQSL.js +0 -110
  143. package/dist/modal-DQ8VFL-P.cjs +0 -39
  144. package/dist/popover-C_Ob86CJ.cjs +0 -30
  145. package/dist/popover-D-FXdEdS.js +0 -1040
  146. package/dist/switch-Cpl53nRW.js +0 -64
  147. package/dist/switch-Rnnn10bn.cjs +0 -17
  148. package/dist/tab-DcjAlXzU.cjs +0 -40
  149. package/dist/text-area-CtZY3yLA.js +0 -204
  150. package/dist/text-area-DFDF5oos.cjs +0 -44
package/AGENTS.md ADDED
@@ -0,0 +1,1118 @@
1
+ # Logosphere UI — Agent Reference
2
+
3
+ > **Bu dosya AI agent'lar için yazılmıştır.**
4
+ > Bir kullanıcı sana ekran görüntüsü/Figma/wireframe verip "bu sayfayı logosphere kullanarak yap" dediğinde, bu dosyadaki bileşenleri, property'leri ve örnekleri kullanarak layout'u oluştur.
5
+
6
+ ---
7
+
8
+ ## Kurulum ve İçe Aktarım
9
+
10
+ ```html
11
+ <!-- CDN (tek dosya, tüm bileşenler) -->
12
+ <script type="module" src="node_modules/@logosphere-ui/core/dist/index.js"></script>
13
+
14
+ <!-- Veya yalnızca ihtiyaç duyulan bileşenler -->
15
+ <script type="module" src="node_modules/@logosphere-ui/core/dist/button.js"></script>
16
+ <script type="module" src="node_modules/@logosphere-ui/core/dist/input.js"></script>
17
+ ```
18
+
19
+ ```ts
20
+ // ES modül import
21
+ import "@logosphere-ui/core";
22
+ // Ya da tekil:
23
+ import "@logosphere-ui/core/button";
24
+ import "@logosphere-ui/core/input";
25
+ ```
26
+
27
+ ---
28
+
29
+ ## Genel Kurallar
30
+
31
+ | Kural | Açıklama |
32
+ |-------|----------|
33
+ | **Property bağlama** | Nesne/dizi/boolean prop'ları `.propName=${value}` ile bağla (Lit); HTML attribute için `propname="value"` |
34
+ | **Boyut değerleri** | `size="default"` veya `size="large"` (bileşene göre `"sm"/"md"/"lg"` de olabilir) |
35
+ | **Variant değerleri** | `variant="default"` veya `variant="subtle"` |
36
+ | **Hata/yardım** | `error="..."` ve `helper="..."` prop'ları tüm form bileşenlerinde mevcuttur |
37
+ | **Disabled/Readonly** | Tüm form bileşenlerinde `disabled` ve `readonly` boolean prop'ları bulunur |
38
+ | **Event dinleme** | `element.addEventListener("change", handler)` veya inline `@change=${handler}` (Lit) |
39
+
40
+ ---
41
+
42
+ ## Bileşen Kataloğu
43
+
44
+ ### ATOMS
45
+
46
+ ---
47
+
48
+ ### `<logosphere-button>`
49
+
50
+ Varyant, boyut ve tema destekli buton.
51
+
52
+ **Properties**
53
+
54
+ | Property | Tip | Varsayılan | Açıklama |
55
+ |----------|-----|-----------|---------|
56
+ | `variant` | `"solid" \| "outline" \| "text"` | `"solid"` | Görsel stil |
57
+ | `size` | `"sm" \| "md" \| "lg"` | `"md"` | Boyut |
58
+ | `theme` | `"primary" \| "success" \| "danger" \| "info" \| "warning" \| "light" \| "dark"` | `"primary"` | Renk teması |
59
+ | `iconOnly` | `boolean` | `false` | Yalnızca ikon göster (metin gizlenir) |
60
+ | `disabled` | `boolean` | `false` | Devre dışı bırak |
61
+
62
+ **Slots:** varsayılan (etiket metni), `prefix` (sol ikon), `suffix` (sağ ikon)
63
+
64
+ ```html
65
+ <!-- Temel kullanım -->
66
+ <logosphere-button>Kaydet</logosphere-button>
67
+
68
+ <!-- Varyantlar -->
69
+ <logosphere-button variant="outline" theme="danger">Sil</logosphere-button>
70
+ <logosphere-button variant="text" theme="primary">İptal</logosphere-button>
71
+
72
+ <!-- İkon ile -->
73
+ <logosphere-button size="sm">
74
+ <ui-icon slot="prefix" name="uil-check" size="16"></ui-icon>
75
+ Onayla
76
+ </logosphere-button>
77
+
78
+ <!-- Yalnızca ikon -->
79
+ <logosphere-button iconOnly variant="outline">
80
+ <ui-icon name="uil-trash" size="16"></ui-icon>
81
+ </logosphere-button>
82
+ ```
83
+
84
+ ---
85
+
86
+ ### `<logosphere-badge>`
87
+
88
+ Etiket/chip bileşeni; kapatılabilir veya yuvarlak.
89
+
90
+ **Properties**
91
+
92
+ | Property | Tip | Varsayılan | Açıklama |
93
+ |----------|-----|-----------|---------|
94
+ | `text` | `string` | `""` | Badge metni |
95
+ | `variant` | `BadgeVariant` | `"default"` | Renk varyantı |
96
+ | `size` | `BadgeSize` | `"default"` | Boyut |
97
+ | `closeable` | `boolean` | `false` | Kapatma (×) butonu göster |
98
+ | `isRound` | `boolean` | `false` | Tam yuvarlak şekil |
99
+ | `onClose` | `() => void` | — | Kapatma callback'i (attribute değil) |
100
+
101
+ **Events:** `close`
102
+
103
+ **Slots:** varsayılan (isteğe bağlı içerik)
104
+
105
+ ```html
106
+ <logosphere-badge text="Yeni"></logosphere-badge>
107
+ <logosphere-badge text="Aktif" variant="success" isRound></logosphere-badge>
108
+ <logosphere-badge text="Hata" variant="danger" closeable></logosphere-badge>
109
+ ```
110
+
111
+ ---
112
+
113
+ ### `<logosphere-checkbox>`
114
+
115
+ Onay kutusu veya toggle switch.
116
+
117
+ **Properties**
118
+
119
+ | Property | Tip | Varsayılan | Açıklama |
120
+ |----------|-----|-----------|---------|
121
+ | `label` | `string` | `""` | Etiket metni |
122
+ | `value` | `string` | `""` | Form değeri |
123
+ | `checked` | `boolean` | `false` | İşaretli mi |
124
+ | `type` | `"checkbox" \| "switch"` | `"checkbox"` | Görünüm tipi |
125
+ | `disabled` | `boolean` | `false` | Devre dışı |
126
+ | `indeterminate` | `boolean` | `false` | Belirsiz durum |
127
+
128
+ **Events:** `lgsChange` → `detail: { checked, indeterminate, value }`
129
+
130
+ ```html
131
+ <logosphere-checkbox label="Beni hatırla" value="remember"></logosphere-checkbox>
132
+
133
+ <!-- Switch görünümü -->
134
+ <logosphere-checkbox type="switch" label="Bildirimleri etkinleştir" checked></logosphere-checkbox>
135
+
136
+ <!-- Event dinleme -->
137
+ <script>
138
+ document.querySelector("logosphere-checkbox")
139
+ .addEventListener("lgsChange", e => console.log(e.detail.checked));
140
+ </script>
141
+ ```
142
+
143
+ ---
144
+
145
+ ### `<logosphere-switch>`
146
+
147
+ Bağımsız toggle switch.
148
+
149
+ **Properties**
150
+
151
+ | Property | Tip | Varsayılan | Açıklama |
152
+ |----------|-----|-----------|---------|
153
+ | `checked` | `boolean` | `false` | Açık mı |
154
+ | `disabled` | `boolean` | `false` | Devre dışı |
155
+ | `size` | `"sm" \| "md"` | `"md"` | Boyut |
156
+
157
+ **Events:** `change` → `detail: { checked }`
158
+
159
+ ```html
160
+ <logosphere-switch></logosphere-switch>
161
+ <logosphere-switch checked size="sm"></logosphere-switch>
162
+ ```
163
+
164
+ ---
165
+
166
+ ### `<logosphere-formfield>`
167
+
168
+ Tüm form kontrolleri için temel sarmalayıcı; etiket, hata/yardım, kenarlıklı konteyner.
169
+
170
+ > Genellikle doğrudan kullanılmaz; `logosphere-input`, `logosphere-textarea` gibi bileşenler içinde otomatik kullanılır. Özel kontrol oluştururken işe yarar.
171
+
172
+ **Properties**
173
+
174
+ | Property | Tip | Varsayılan | Açıklama |
175
+ |----------|-----|-----------|---------|
176
+ | `label` | `string` | `""` | Alan etiketi |
177
+ | `helper` | `string` | `""` | Yardım metni (altında gösterilir) |
178
+ | `error` | `string` | `""` | Hata mesajı (kırmızı, helper'ın yerini alır) |
179
+ | `required` | `boolean` | `false` | Zorunlu alan işareti (*) |
180
+ | `disabled` | `boolean` | `false` | Soluklaştır |
181
+ | `readonly` | `boolean` | `false` | Salt okunur stili |
182
+ | `size` | `"default" \| "large"` | `"default"` | Boyut |
183
+ | `variant` | `"default" \| "subtle"` | `"default"` | Stil varyantı |
184
+ | `cursor` | `"text" \| "pointer"` | `"text"` | İmleç tipi |
185
+ | `multiline` | `boolean` | `false` | Textarea modu (daha yüksek) |
186
+ | `forceFocused` | `boolean` | `false` | Odak stilini zorla (TimePicker/DatePicker için) |
187
+
188
+ **Slots:** varsayılan (kontrol), `prefix` (sol), `clear` (temizle butonu), `suffix` (sağ)
189
+
190
+ **Events:** `field-focus`, `field-blur` → `detail: { originalEvent }`
191
+
192
+ ---
193
+
194
+ ### MOLECULES
195
+
196
+ ---
197
+
198
+ ### `<logosphere-input>`
199
+
200
+ Metin girişi; maske, parola, temizle ve tüm formfield özellikleri.
201
+
202
+ **Properties**
203
+
204
+ | Property | Tip | Varsayılan | Açıklama |
205
+ |----------|-----|-----------|---------|
206
+ | `value` | `string` | `""` | Geçerli değer |
207
+ | `type` | `"text" \| "password" \| "email" \| "number" \| "tel" \| "url" \| "search" \| "date" \| "time"` | `"text"` | Input tipi |
208
+ | `placeholder` | `string` | `""` | Yer tutucu |
209
+ | `name` | `string` | `""` | Form adı |
210
+ | `mask` | `string` | `""` | Giriş maskesi: `0`=rakam, `a`=harf, `*`=rakam/harf, diğerleri literal. Örn: `"(000) 000-0000"`, `"00/00/0000"`, `"00:00"` |
211
+ | `label` | `string` | `""` | Etiket |
212
+ | `helper` | `string` | `""` | Yardım metni |
213
+ | `error` | `string` | `""` | Hata mesajı |
214
+ | `required` | `boolean` | `false` | Zorunlu |
215
+ | `disabled` | `boolean` | `false` | Devre dışı |
216
+ | `readonly` | `boolean` | `false` | Salt okunur |
217
+ | `size` | `"default" \| "large"` | `"default"` | Boyut |
218
+ | `variant` | `"default" \| "subtle"` | `"default"` | Stil |
219
+ | `minlength` | `number` | — | Min karakter |
220
+ | `maxlength` | `number` | — | Maks karakter |
221
+ | `min` / `max` | `number` | — | Sayısal sınırlar |
222
+ | `pattern` | `string` | `""` | Regex doğrulama |
223
+ | `autocomplete` | `string` | `""` | Tarayıcı otomatik doldurma |
224
+
225
+ **Public Metotlar:** `focus()`, `blur()`, `select()`, `setSelectionRange(start, end)`, `checkValidity()`, `reportValidity()`, `setCustomValidity(msg)`
226
+
227
+ **Events:**
228
+ - `input` → `detail: { value, rawValue, originalEvent }`
229
+ - `change` → `detail: { value, originalEvent }`
230
+ - `clear` (temizle butonuna tıklanınca)
231
+ - `keydown` / `keyup` → `detail: { key, originalEvent }`
232
+
233
+ **Slots:** `prefix` (sol ikon/metin), `suffix` (sağ ikon/buton)
234
+
235
+ ```html
236
+ <!-- Temel kullanım -->
237
+ <logosphere-input label="Ad Soyad" placeholder="Adınızı girin"></logosphere-input>
238
+
239
+ <!-- Email, zorunlu, hata -->
240
+ <logosphere-input
241
+ type="email"
242
+ label="E-posta"
243
+ required
244
+ error="Geçersiz e-posta adresi"
245
+ ></logosphere-input>
246
+
247
+ <!-- Telefon maskesi -->
248
+ <logosphere-input
249
+ label="Telefon"
250
+ mask="(000) 000-0000"
251
+ placeholder="(555) 000-0000"
252
+ ></logosphere-input>
253
+
254
+ <!-- Tarih maskesi -->
255
+ <logosphere-input label="Doğum Tarihi" mask="00/00/0000" placeholder="GG/AA/YYYY"></logosphere-input>
256
+
257
+ <!-- Parola -->
258
+ <logosphere-input type="password" label="Şifre"></logosphere-input>
259
+
260
+ <!-- Prefix/suffix ikon ile -->
261
+ <logosphere-input label="Arama" placeholder="Ara...">
262
+ <ui-icon slot="prefix" name="uil-search" size="16"></ui-icon>
263
+ </logosphere-input>
264
+
265
+ <!-- Subtle varyant (kenarsız, arka plan yok) -->
266
+ <logosphere-input variant="subtle" placeholder="Hızlı arama..."></logosphere-input>
267
+
268
+ <!-- Büyük boyut -->
269
+ <logosphere-input size="large" label="Başlık" placeholder="Başlık girin"></logosphere-input>
270
+ ```
271
+
272
+ ---
273
+
274
+ ### `<logosphere-textarea>`
275
+
276
+ Çok satırlı metin girişi; otomatik boyutlandırma, karakter sayacı.
277
+
278
+ **Properties**
279
+
280
+ | Property | Tip | Varsayılan | Açıklama |
281
+ |----------|-----|-----------|---------|
282
+ | `value` | `string` | `""` | Metin değeri |
283
+ | `placeholder` | `string` | `""` | Yer tutucu |
284
+ | `rows` | `number` | `3` | Başlangıç satır sayısı |
285
+ | `maxRows` | `number` | `8` | autoResize için max satır (sonra scroll) |
286
+ | `maxlength` | `number` | — | Maks karakter (sayaç gösterir) |
287
+ | `autoResize` | `boolean` | `true` | İçeriğe göre otomatik yükseklik |
288
+ | `resize` | `"none" \| "vertical" \| "horizontal" \| "both"` | `"vertical"` | Manuel yeniden boyutlandırma (autoResize=false iken) |
289
+ | `label` | `string` | `""` | Etiket |
290
+ | `helper` | `string` | `""` | Yardım metni |
291
+ | `error` | `string` | `""` | Hata mesajı |
292
+ | `required` | `boolean` | `false` | Zorunlu |
293
+ | `disabled` | `boolean` | `false` | Devre dışı |
294
+ | `readonly` | `boolean` | `false` | Salt okunur |
295
+ | `size` | `"default" \| "large"` | `"default"` | Boyut |
296
+ | `variant` | `"default" \| "subtle"` | `"default"` | Stil |
297
+
298
+ **Events:** `input`, `change`, `clear`, `keydown`, `keyup`
299
+
300
+ ```html
301
+ <!-- Temel kullanım -->
302
+ <logosphere-textarea label="Açıklama" placeholder="Açıklama girin..."></logosphere-textarea>
303
+
304
+ <!-- Karakter sayacı ile -->
305
+ <logosphere-textarea label="Yorum" maxlength="500" rows="4"></logosphere-textarea>
306
+
307
+ <!-- Manuel resize, auto kapalı -->
308
+ <logosphere-textarea .autoResize=${false} resize="vertical" rows="6"></logosphere-textarea>
309
+
310
+ <!-- Max satır sınırı -->
311
+ <logosphere-textarea label="Not" maxRows="5"></logosphere-textarea>
312
+ ```
313
+
314
+ ---
315
+
316
+ ### `<logosphere-breadcrumb>`
317
+
318
+ Navigasyon izleri.
319
+
320
+ **Properties**
321
+
322
+ | Property | Tip | Varsayılan | Açıklama |
323
+ |----------|-----|-----------|---------|
324
+ | `items` | `{ label: string; href?: string; active?: boolean }[]` | `[]` | Navigasyon öğeleri |
325
+
326
+ ```html
327
+ <logosphere-breadcrumb
328
+ .items=${[
329
+ { label: "Ana Sayfa", href: "/" },
330
+ { label: "Ürünler", href: "/products" },
331
+ { label: "Laptop", active: true }
332
+ ]}
333
+ ></logosphere-breadcrumb>
334
+ ```
335
+
336
+ ---
337
+
338
+ ### `<logosphere-card>`
339
+
340
+ Başlık, içerik ve ayak bölümü olan kart.
341
+
342
+ **Properties**
343
+
344
+ | Property | Tip | Varsayılan | Açıklama |
345
+ |----------|-----|-----------|---------|
346
+ | `title` | `string` | `""` | Kart başlığı |
347
+ | `description` | `string` | `""` | Başlık altı açıklama |
348
+ | `header` | `boolean` | `true` | Başlık bölümünü göster |
349
+ | `footer` | `boolean` | `true` | Ayak bölümünü göster |
350
+ | `okLabel` | `string` | `"Tamam"` | Onay butonu etiketi |
351
+ | `cancelLabel` | `string` | `"İptal"` | İptal butonu etiketi |
352
+ | `onOk` | `() => void` | — | Onay callback'i |
353
+ | `onCancel` | `() => void` | — | İptal callback'i |
354
+
355
+ **Events:** `ok`, `cancel`
356
+
357
+ **Slots:** `header` (özel başlık), varsayılan (gövde), `footer` (özel ayak)
358
+
359
+ ```html
360
+ <!-- Temel kart -->
361
+ <logosphere-card title="Kullanıcı Bilgileri" description="Profil bilgilerinizi güncelleyin">
362
+ <logosphere-input label="Ad" placeholder="Adınızı girin"></logosphere-input>
363
+ <logosphere-input label="E-posta" type="email"></logosphere-input>
364
+ </logosphere-card>
365
+
366
+ <!-- Onay diyaloğu gibi -->
367
+ <logosphere-card title="Emin misiniz?" okLabel="Evet, Sil" cancelLabel="Hayır">
368
+ Bu işlem geri alınamaz.
369
+ </logosphere-card>
370
+
371
+ <!-- Sadece gövde -->
372
+ <logosphere-card .header=${false} .footer=${false}>
373
+ İçerik buraya
374
+ </logosphere-card>
375
+ ```
376
+
377
+ ---
378
+
379
+ ### `<logosphere-popover>`
380
+
381
+ Tetikleyici elemana konumlanmış açılır panel.
382
+
383
+ **Properties**
384
+
385
+ | Property | Tip | Varsayılan | Açıklama |
386
+ |----------|-----|-----------|---------|
387
+ | `title` | `string` | `""` | Popover başlığı |
388
+ | `trigger` | `"click" \| "hover"` | `"click"` | Açılma tetikleyicisi |
389
+ | `placement` | Popper Placement | `"bottom"` | Konum (`"top"`, `"bottom"`, `"left"`, `"right"`, `"bottom-start"` vb.) |
390
+ | `offset` | `number` | `8` | Tetikleyiciden mesafe (px) |
391
+ | `open` | `boolean` | `false` | Açık mı (reflect) |
392
+ | `closeOnOutsideClick` | `boolean` | `true` | Dışarı tıklayınca kapat |
393
+
394
+ **Events:** `popover-open`, `popover-close`
395
+
396
+ **Slots:** `trigger` (tetikleyici element), varsayılan (panel içeriği)
397
+
398
+ ```html
399
+ <logosphere-popover title="Yardım">
400
+ <logosphere-button slot="trigger" variant="outline">?</logosphere-button>
401
+ Bu alan, kullanıcının tam adını içermelidir.
402
+ </logosphere-popover>
403
+ ```
404
+
405
+ ---
406
+
407
+ ### `<logosphere-timepicker>`
408
+
409
+ `HH:MM` formatında saat seçici; hem yazarak hem spinner ile kullanım.
410
+
411
+ **Properties**
412
+
413
+ | Property | Tip | Varsayılan | Açıklama |
414
+ |----------|-----|-----------|---------|
415
+ | `value` | `string` | `""` | `"HH:MM"` formatında değer |
416
+ | `label` | `string` | `""` | Etiket |
417
+ | `helper` | `string` | `""` | Yardım metni |
418
+ | `error` | `string` | `""` | Hata mesajı |
419
+ | `placeholder` | `string` | `"__:__"` | Yer tutucu |
420
+ | `required` | `boolean` | `false` | Zorunlu |
421
+ | `disabled` | `boolean` | `false` | Devre dışı |
422
+ | `readonly` | `boolean` | `false` | Salt okunur |
423
+ | `size` | `"default" \| "large"` | `"default"` | Boyut |
424
+ | `variant` | `"default" \| "subtle"` | `"default"` | Stil |
425
+ | `onChange` | `(value: string) => void` | — | Değişim callback'i (attribute değil) |
426
+
427
+ **Events:** `change` → `detail: { value }`, `clear`
428
+
429
+ ```html
430
+ <!-- Temel kullanım -->
431
+ <logosphere-timepicker label="Başlangıç Saati"></logosphere-timepicker>
432
+
433
+ <!-- Değer ile -->
434
+ <logosphere-timepicker label="Bitiş Saati" value="17:30"></logosphere-timepicker>
435
+
436
+ <!-- Zorunlu, hata ile -->
437
+ <logosphere-timepicker
438
+ label="Toplantı Saati"
439
+ required
440
+ error="Saat seçimi zorunludur"
441
+ ></logosphere-timepicker>
442
+
443
+ <!-- Event -->
444
+ <script>
445
+ document.querySelector("logosphere-timepicker")
446
+ .addEventListener("change", e => console.log(e.detail.value)); // "14:30"
447
+ </script>
448
+ ```
449
+
450
+ ---
451
+
452
+ ### ORGANISMS
453
+
454
+ ---
455
+
456
+ ### `<logosphere-combobox>`
457
+
458
+ Seçim kutusu: tekli/çoklu seçim, filtreleme, tag desteği.
459
+
460
+ **Properties**
461
+
462
+ | Property | Tip | Varsayılan | Açıklama |
463
+ |----------|-----|-----------|---------|
464
+ | `items` | `Record<string, unknown>[]` | `[]` | Seçenek listesi |
465
+ | `label` | `string` | `""` | Etiket |
466
+ | `helper` | `string` | `""` | Yardım metni |
467
+ | `error` | `string` | `""` | Hata mesajı |
468
+ | `placeholder` | `string` | `"Seçim yapınız"` | Yer tutucu |
469
+ | `multiple` | `boolean` | `false` | Çoklu seçim |
470
+ | `filterable` | `boolean` | `false` | Arama/filtreleme |
471
+ | `required` | `boolean` | `false` | Zorunlu |
472
+ | `disabled` | `boolean` | `false` | Devre dışı |
473
+ | `readOnly` | `boolean` | `false` | Salt okunur |
474
+ | `size` | `"default" \| "large"` | `"default"` | Boyut |
475
+ | `variant` | `"default" \| "subtle"` | `"default"` | Stil |
476
+ | `optionLabel` | `string` | `"label"` | Seçenek nesnesindeki etiket alanı |
477
+ | `optionValue` | `string` | `"value"` | Seçenek nesnesindeki değer alanı |
478
+ | `emptyMessage` | `string` | `"Sonuç yok"` | Sonuç yokken gösterilecek mesaj |
479
+
480
+ **Public Metotlar:** `selectedItems()` → seçili öğe dizisi, `isSelected(item)`, `setSelected(items[])`
481
+
482
+ **Events:** `selected` → `detail: { selected }`, `change` → `detail: { value }`
483
+
484
+ ```html
485
+ <logosphere-combobox
486
+ label="Şehir"
487
+ placeholder="Şehir seçin"
488
+ .items=${[
489
+ { label: "İstanbul", value: "ist" },
490
+ { label: "Ankara", value: "ank" },
491
+ { label: "İzmir", value: "izm" }
492
+ ]}
493
+ ></logosphere-combobox>
494
+
495
+ <!-- Çoklu, filtrelenebilir -->
496
+ <logosphere-combobox
497
+ label="Etiketler"
498
+ multiple
499
+ filterable
500
+ .items=${tags}
501
+ ></logosphere-combobox>
502
+
503
+ <!-- Özel alan adları -->
504
+ <logosphere-combobox
505
+ optionLabel="name"
506
+ optionValue="id"
507
+ .items=${users}
508
+ ></logosphere-combobox>
509
+ ```
510
+
511
+ ---
512
+
513
+ ### `<logosphere-datepicker>`
514
+
515
+ Tarih seçici; manuel yazma ve takvim popup'ı. `dayjs` tabanlı.
516
+
517
+ **Properties**
518
+
519
+ | Property | Tip | Varsayılan | Açıklama |
520
+ |----------|-----|-----------|---------|
521
+ | `value` | `string \| null` | `null` | `"YYYY-MM-DD"` formatında değer |
522
+ | `min` | `string \| null` | `null` | En erken tarih (`"YYYY-MM-DD"`) |
523
+ | `max` | `string \| null` | `null` | En geç tarih |
524
+ | `label` | `string` | `""` | Etiket |
525
+ | `helper` | `string` | `""` | Yardım |
526
+ | `error` | `string` | `""` | Hata |
527
+ | `placeholder` | `string` | `"GG/AA/YYYY"` | Yer tutucu |
528
+ | `required` | `boolean` | `false` | Zorunlu |
529
+ | `disabled` | `boolean` | `false` | Devre dışı |
530
+ | `readonly` | `boolean` | `false` | Salt okunur |
531
+ | `rangeMode` | `boolean` | `false` | Aralık seçimi modu |
532
+ | `rangeStart` | `string \| null` | `null` | Aralık başlangıcı |
533
+ | `rangeEnd` | `string \| null` | `null` | Aralık bitişi |
534
+ | `disabledDays` | `number[]` | `[]` | Devre dışı haftanın günleri (0=Pazar…6=Cumartesi) |
535
+ | `expandFactor` | `number` | `1.05` | Popup genişlik çarpanı |
536
+ | `onChange` | `(value: string) => void` | — | Değişim callback'i |
537
+ | `onRangeChange` | `(range) => void` | — | Aralık callback'i |
538
+
539
+ **Events:** `change` → `detail: { value }`, `rangeChange` → `detail: { start, end }`
540
+
541
+ ```html
542
+ <!-- Temel kullanım -->
543
+ <logosphere-datepicker label="Tarih"></logosphere-datepicker>
544
+
545
+ <!-- Min/max sınırları -->
546
+ <logosphere-datepicker
547
+ label="Başlangıç Tarihi"
548
+ min="2024-01-01"
549
+ max="2026-12-31"
550
+ value="2025-06-15"
551
+ ></logosphere-datepicker>
552
+
553
+ <!-- Aralık modu -->
554
+ <logosphere-datepicker
555
+ label="Tarih Aralığı"
556
+ .rangeMode=${true}
557
+ ></logosphere-datepicker>
558
+
559
+ <!-- Hafta sonu kapalı -->
560
+ <logosphere-datepicker
561
+ label="İş Günü"
562
+ .disabledDays=${[0, 6]}
563
+ ></logosphere-datepicker>
564
+ ```
565
+
566
+ ---
567
+
568
+ ### `<logosphere-calendar>`
569
+
570
+ Bağımsız takvim bileşeni; ay/yıl görünümü, aralık seçimi.
571
+
572
+ **Properties**
573
+
574
+ | Property | Tip | Varsayılan | Açıklama |
575
+ |----------|-----|-----------|---------|
576
+ | `value` | `string \| null` | `null` | Seçili tarih (`"YYYY-MM-DD"`) |
577
+ | `min` / `max` | `string \| null` | `null` | Sınır tarihleri |
578
+ | `disabled` | `boolean` | `false` | Tüm takvim devre dışı |
579
+ | `rangeMode` | `boolean` | `false` | Aralık seçimi |
580
+ | `rangeStart` / `rangeEnd` | `string \| null` | `null` | Aralık uçları |
581
+ | `disabledDays` | `number[]` | `[]` | Devre dışı günler |
582
+ | `closable` | `boolean` | `false` | Kapat butonu göster |
583
+
584
+ **Events:** `change`, `rangeChange`, `calendar-state-change`, `close-request`
585
+
586
+ **Public Metotlar:** `focusGrid()`
587
+
588
+ ```html
589
+ <logosphere-calendar value="2025-06-15"></logosphere-calendar>
590
+ ```
591
+
592
+ ---
593
+
594
+ ### `<logosphere-modal>`
595
+
596
+ Tam ekran arka planlı modal diyalog.
597
+
598
+ **Properties**
599
+
600
+ | Property | Tip | Varsayılan | Açıklama |
601
+ |----------|-----|-----------|---------|
602
+ | `open` | `boolean` | `false` | Açık mı (reflect) |
603
+ | `title` | `string` | `""` | Modal başlığı |
604
+ | `closeOnEsc` | `boolean` | `true` | Esc ile kapat |
605
+ | `closeOnBackdrop` | `boolean` | `true` | Arka plana tıklayınca kapat |
606
+ | `showBack` | `boolean` | `false` | Geri butonu göster |
607
+ | `showClose` | `boolean` | `false` | Kapat (×) butonu göster |
608
+
609
+ **Public Metotlar:** `openModal()`, `closeModal()`
610
+
611
+ **Events:** `modal-open`, `modal-close`
612
+
613
+ **Slots:** `header`, varsayılan (gövde), `footer`
614
+
615
+ ```html
616
+ <logosphere-modal id="my-modal" title="Düzenle" showClose>
617
+ <logosphere-input label="Ad"></logosphere-input>
618
+ <div slot="footer">
619
+ <logosphere-button variant="outline" id="cancel-btn">İptal</logosphere-button>
620
+ <logosphere-button>Kaydet</logosphere-button>
621
+ </div>
622
+ </logosphere-modal>
623
+
624
+ <logosphere-button onclick="document.getElementById('my-modal').openModal()">
625
+ Modal Aç
626
+ </logosphere-button>
627
+ ```
628
+
629
+ ---
630
+
631
+ ### `<logosphere-drawer>`
632
+
633
+ Yan panel; sağdan veya soldan açılır.
634
+
635
+ **Properties**
636
+
637
+ | Property | Tip | Varsayılan | Açıklama |
638
+ |----------|-----|-----------|---------|
639
+ | `open` | `boolean` | `false` | Açık mı (reflect) |
640
+ | `title` | `string` | `""` | Panel başlığı |
641
+ | `position` | `"left" \| "right"` | `"right"` | Hangi taraftan açılsın |
642
+ | `width` | `number` | `360` | Genişlik (px) |
643
+ | `closeOnEsc` | `boolean` | `true` | Esc ile kapat |
644
+ | `containerSelector` | `string` | `""` | CSS selector; panel bu eleman içinde konumlanır |
645
+
646
+ **Public Metotlar:** `openDrawer()`, `closeDrawer()`
647
+
648
+ **Events:** `drawer-open`, `drawer-close`
649
+
650
+ **Slots:** `trigger` (açma butonu), varsayılan (panel gövdesi)
651
+
652
+ ```html
653
+ <logosphere-drawer title="Filtreler" position="right" width="400">
654
+ <logosphere-button slot="trigger" variant="outline">
655
+ Filtreleri Aç
656
+ </logosphere-button>
657
+
658
+ <logosphere-combobox label="Durum" .items=${statusOptions}></logosphere-combobox>
659
+ <logosphere-datepicker label="Tarih"></logosphere-datepicker>
660
+ <logosphere-button style="width:100%; margin-top:16px">Uygula</logosphere-button>
661
+ </logosphere-drawer>
662
+ ```
663
+
664
+ ---
665
+
666
+ ### `<logosphere-toast>` ve `ToastService`
667
+
668
+ Bildirim mesajı. Genellikle doğrudan kullanmak yerine `ToastService` kullanılır.
669
+
670
+ **`logosphere-toast` Properties**
671
+
672
+ | Property | Tip | Varsayılan | Açıklama |
673
+ |----------|-----|-----------|---------|
674
+ | `type` | `"info" \| "success" \| "warning" \| "danger"` | `"info"` | Ikon/renk tipi |
675
+ | `title` | `string` | `""` | Başlık |
676
+ | `text` | `string` | `""` | Açıklama metni |
677
+ | `icon` | `string` | `""` | Özel ikon adı |
678
+ | `closeable` | `boolean` | `true` | Manuel kapatma butonu |
679
+ | `duration` | `number` | `6000` | Otomatik kapanma süresi (ms) |
680
+ | `autoDismiss` | `boolean` | `true` | Otomatik kapat |
681
+ | `action` | `ToastActionConfig` | — | Aksiyon butonu konfigürasyonu |
682
+
683
+ **Events:** `toast-close` → `detail: { reason: "manual" | "auto" }`
684
+
685
+ **`logosphere-toast-container`** — HTML'e ekle, sonra `ToastService` ile kullan:
686
+
687
+ ```html
688
+ <!-- Sayfa başına bir kere ekle -->
689
+ <logosphere-toast-container></logosphere-toast-container>
690
+ ```
691
+
692
+ ```ts
693
+ import { ToastService } from "@logosphere-ui/core";
694
+
695
+ // Kullanım
696
+ ToastService.success("Başarılı", "Kayıt oluşturuldu.");
697
+ ToastService.danger("Hata", "Bir sorun oluştu.");
698
+ ToastService.warning("Uyarı", "Dikkat ediniz.");
699
+ ToastService.info("Bilgi", "Güncelleme mevcut.");
700
+
701
+ // Özel seçenekler
702
+ ToastService.show({
703
+ type: "success",
704
+ title: "Dosya yüklendi",
705
+ text: "belge.pdf başarıyla yüklendi.",
706
+ duration: 4000,
707
+ autoDismiss: true,
708
+ });
709
+ ```
710
+
711
+ ---
712
+
713
+ ### `<logosphere-tab>`
714
+
715
+ Sekme gezinmesi; lazy yükleme desteği.
716
+
717
+ **Properties**
718
+
719
+ | Property | Tip | Varsayılan | Açıklama |
720
+ |----------|-----|-----------|---------|
721
+ | `tabs` | `TabItem[]` | `[]` | Sekme konfigürasyonu |
722
+ | `activeTab` | `string` | `""` | Aktif sekme id'si |
723
+ | `lazy` | `boolean` | `true` | İçerikleri lazy yükle |
724
+ | `variant` | `"default" \| "card"` | `"default"` | Görünüm |
725
+
726
+ **`TabItem` yapısı:**
727
+
728
+ ```ts
729
+ interface TabItem {
730
+ id: string;
731
+ label: string;
732
+ disabled?: boolean;
733
+ icon?: string; // ui-icon adı
734
+ }
735
+ ```
736
+
737
+ **Events:** `tab-change` → `detail: { oldTab, newTab }`
738
+
739
+ **Slots:** Her sekme için `panel-${tab.id}` adlı slot
740
+
741
+ ```html
742
+ <logosphere-tab
743
+ .tabs=${[
744
+ { id: "genel", label: "Genel", icon: "uil-info-circle" },
745
+ { id: "guvenlik", label: "Güvenlik", icon: "uil-check-circle" },
746
+ { id: "fatura", label: "Fatura", disabled: true }
747
+ ]}
748
+ activeTab="genel"
749
+ >
750
+ <div slot="panel-genel">
751
+ <logosphere-input label="Ad Soyad"></logosphere-input>
752
+ </div>
753
+ <div slot="panel-guvenlik">
754
+ <logosphere-input type="password" label="Mevcut Şifre"></logosphere-input>
755
+ </div>
756
+ </logosphere-tab>
757
+ ```
758
+
759
+ ---
760
+
761
+ ### `<logosphere-leftmenu>` ve `<leftmenu-item>`
762
+
763
+ Daraltılabilir kenar çubuğu; menü ağacı, arama, logo slotları.
764
+
765
+ **`logosphere-leftmenu` Properties**
766
+
767
+ | Property | Tip | Varsayılan | Açıklama |
768
+ |----------|-----|-----------|---------|
769
+ | `open` | `boolean` | `false` | Genişletilmiş mi (reflect) |
770
+ | `pinned` | `boolean` | `false` | Sabitlenmiş mi (reflect) |
771
+ | `closedWidth` | `number` | `64` | Kapalı genişlik (px) |
772
+ | `openWidth` | `number` | `248` | Açık genişlik (px) |
773
+ | `storageKey` | `string` | `"logosphere-leftmenu-state"` | localStorage anahtarı |
774
+
775
+ **Events:** `pin-change` → `detail: { pinned }`, `item-click` → `detail: { item }`
776
+
777
+ **Slots:** varsayılan (`leftmenu-item` elementler), `logo-open`, `logo-closed`, `custom-open`, `custom-closed`
778
+
779
+ **`leftmenu-item` Properties**
780
+
781
+ | Property | Tip | Varsayılan |
782
+ |----------|-----|-----------|
783
+ | `itemId` | `string` | `""` |
784
+ | `label` | `string` | `""` |
785
+ | `disabled` | `boolean` | `false` |
786
+ | `active` | `boolean` | `false` |
787
+
788
+ **Slots:** varsayılan (etiket), `icon` (ikon), `children` (alt öğeler)
789
+
790
+ ```html
791
+ <logosphere-leftmenu open>
792
+ <img slot="logo-open" src="/logo-full.svg" alt="Logo" />
793
+ <img slot="logo-closed" src="/logo-icon.svg" alt="L" />
794
+
795
+ <leftmenu-item itemId="dashboard" label="Ana Sayfa" active>
796
+ <ui-icon slot="icon" name="uil-home" size="20"></ui-icon>
797
+ </leftmenu-item>
798
+
799
+ <leftmenu-item itemId="users" label="Kullanıcılar">
800
+ <ui-icon slot="icon" name="uil-users-alt" size="20"></ui-icon>
801
+ <div slot="children">
802
+ <leftmenu-item itemId="users-list" label="Liste"></leftmenu-item>
803
+ <leftmenu-item itemId="users-create" label="Yeni Ekle"></leftmenu-item>
804
+ </div>
805
+ </leftmenu-item>
806
+ </logosphere-leftmenu>
807
+ ```
808
+
809
+ ---
810
+
811
+ ### `<logosphere-tree-menu>`
812
+
813
+ Özyinelemeli ağaç menü (veri tabanlı).
814
+
815
+ **Properties**
816
+
817
+ | Property | Tip | Varsayılan | Açıklama |
818
+ |----------|-----|-----------|---------|
819
+ | `items` | `TreeMenuItem[]` | — | Ağaç verisi (attribute değil, `.items=${...}`) |
820
+ | `expandedIds` | `string[]` | `[]` | Açık düğüm id'leri |
821
+ | `expandOnLabelClick` | `boolean` | `true` | Etikete tıklayınca aç/kapa |
822
+ | `chevronPosition` | `"left" \| "right"` | `"left"` | Ok konumu |
823
+ | `showLabels` | `boolean` | `true` | Etiketleri göster |
824
+ | `iconSize` | `number` | `16` | İkon boyutu |
825
+
826
+ **`TreeMenuItem` yapısı:**
827
+
828
+ ```ts
829
+ interface TreeMenuItem {
830
+ id: string;
831
+ label: string;
832
+ icon?: string;
833
+ children?: TreeMenuItem[];
834
+ disabled?: boolean;
835
+ data?: unknown; // isteğe bağlı ek veri
836
+ }
837
+ ```
838
+
839
+ **Events:** `toggle`, `item-click`, `node-click` — her biri `detail: { item, ... }`
840
+
841
+ ```html
842
+ <logosphere-tree-menu
843
+ .items=${[
844
+ {
845
+ id: "1", label: "Belgeler",
846
+ children: [
847
+ { id: "1-1", label: "Raporlar" },
848
+ { id: "1-2", label: "Sözleşmeler" }
849
+ ]
850
+ },
851
+ { id: "2", label: "Resimler" }
852
+ ]}
853
+ ></logosphere-tree-menu>
854
+ ```
855
+
856
+ ---
857
+
858
+ ### `<ui-icon>`
859
+
860
+ SVG ikon bileşeni. `icon-map.ts`'deki kayıtlı ikonları isimle render eder.
861
+
862
+ **Properties**
863
+
864
+ | Property | Tip | Açıklama |
865
+ |----------|-----|---------|
866
+ | `name` | `string` | İkon adı (aşağıdaki tabloya bak) |
867
+ | `size` | `number \| string` | Piksel boyutu (varsayılan: `16`) |
868
+
869
+ **Mevcut İkon İsimleri**
870
+
871
+ | İkon Adı | Kullanım Yeri |
872
+ |----------|--------------|
873
+ | `uil-times` | Kapatma/temizle |
874
+ | `uil-clock` | Saat/zaman |
875
+ | `uil-check` | Onay |
876
+ | `uil-check-circle` | Başarı |
877
+ | `uil-calendar` | Takvim |
878
+ | `uil-calendar-alt` | Takvim (alternatif) |
879
+ | `uil-arrow-left` | Sol ok |
880
+ | `uil-arrow-right` | Sağ ok |
881
+ | `uil-arrow-up` | Yukarı ok |
882
+ | `uil-arrow-down` | Aşağı ok |
883
+ | `uil-trash` | Silme |
884
+ | `uil-compress-alt` | Küçült |
885
+ | `uil-expand-alt` | Büyüt |
886
+ | `uil-copy` | Kopyala |
887
+ | `uil-thumbs-up` | Beğeni |
888
+ | `uil-thumbs-down` | Beğenmeme |
889
+ | `uil-arrow-circle-right` | Gönder |
890
+ | `uil-eye` | Göster |
891
+ | `uil-eye-slash` | Gizle |
892
+ | `uil-search` | Arama |
893
+ | `uil-left-arrow-to-left` | Sola sabitle |
894
+ | `uil-right-arrow-to-right` | Sağa sabitle |
895
+ | `uil-pin` | Sabitle |
896
+ | `uil-exclamation-triangle` | Uyarı |
897
+ | `uil-exclamation-octagon` | Hata |
898
+ | `uil-info-circle` | Bilgi |
899
+ | `uil-angle-up` | Yukarı köşeli |
900
+ | `uil-angle-down` | Aşağı köşeli |
901
+
902
+ ```html
903
+ <ui-icon name="uil-check" size="20"></ui-icon>
904
+ <ui-icon name="uil-trash" size="16"></ui-icon>
905
+ ```
906
+
907
+ ---
908
+
909
+ ## Sayfa Katmanları: Örnek Kompozisyonlar
910
+
911
+ ### Giriş Sayfası (Login Form)
912
+
913
+ ```html
914
+ <div style="min-height:100vh; display:flex; align-items:center; justify-content:center; background:var(--color-body-bg)">
915
+ <logosphere-card title="Giriş Yap" description="Hesabınıza erişin" style="width:400px">
916
+ <div style="display:flex; flex-direction:column; gap:16px">
917
+ <logosphere-input
918
+ type="email"
919
+ label="E-posta"
920
+ placeholder="ornek@sirket.com"
921
+ required
922
+ ></logosphere-input>
923
+
924
+ <logosphere-input
925
+ type="password"
926
+ label="Şifre"
927
+ required
928
+ ></logosphere-input>
929
+
930
+ <logosphere-checkbox label="Beni hatırla" value="remember"></logosphere-checkbox>
931
+
932
+ <logosphere-button style="width:100%">Giriş Yap</logosphere-button>
933
+ </div>
934
+ </logosphere-card>
935
+ </div>
936
+ ```
937
+
938
+ ---
939
+
940
+ ### Filtreli Liste Sayfası (Drawer filtreli)
941
+
942
+ ```html
943
+ <!-- Üst çubuk -->
944
+ <div style="display:flex; gap:12px; align-items:center; padding:16px">
945
+ <logosphere-input placeholder="Ara..." style="flex:1">
946
+ <ui-icon slot="prefix" name="uil-search" size="16"></ui-icon>
947
+ </logosphere-input>
948
+
949
+ <logosphere-drawer title="Filtreler" position="right">
950
+ <logosphere-button slot="trigger" variant="outline">Filtre</logosphere-button>
951
+
952
+ <div style="display:flex; flex-direction:column; gap:12px; padding:16px">
953
+ <logosphere-combobox label="Durum" .items=${statusItems}></logosphere-combobox>
954
+ <logosphere-combobox label="Kategori" .items=${categoryItems} multiple filterable></logosphere-combobox>
955
+ <logosphere-datepicker label="Tarih Aralığı" .rangeMode=${true}></logosphere-datepicker>
956
+ <logosphere-button style="width:100%">Uygula</logosphere-button>
957
+ </div>
958
+ </logosphere-drawer>
959
+ </div>
960
+ ```
961
+
962
+ ---
963
+
964
+ ### Ayarlar Sayfası (Tab'lı form)
965
+
966
+ ```html
967
+ <logosphere-tab
968
+ .tabs=${[
969
+ { id: "profil", label: "Profil" },
970
+ { id: "hesap", label: "Hesap" },
971
+ { id: "bildirim", label: "Bildirimler" }
972
+ ]}
973
+ activeTab="profil"
974
+ >
975
+ <div slot="panel-profil" style="display:flex; flex-direction:column; gap:16px; padding:16px">
976
+ <logosphere-input label="Ad" placeholder="Adınız"></logosphere-input>
977
+ <logosphere-input label="Soyad" placeholder="Soyadınız"></logosphere-input>
978
+ <logosphere-input type="email" label="E-posta"></logosphere-input>
979
+ <logosphere-textarea label="Biyografi" maxlength="300"></logosphere-textarea>
980
+ <logosphere-button>Kaydet</logosphere-button>
981
+ </div>
982
+
983
+ <div slot="panel-hesap" style="display:flex; flex-direction:column; gap:16px; padding:16px">
984
+ <logosphere-input type="password" label="Mevcut Şifre"></logosphere-input>
985
+ <logosphere-input type="password" label="Yeni Şifre"></logosphere-input>
986
+ <logosphere-input type="password" label="Şifreyi Onayla"></logosphere-input>
987
+ <logosphere-button theme="danger">Şifreyi Değiştir</logosphere-button>
988
+ </div>
989
+
990
+ <div slot="panel-bildirim" style="display:flex; flex-direction:column; gap:12px; padding:16px">
991
+ <logosphere-checkbox type="switch" label="E-posta bildirimleri" checked></logosphere-checkbox>
992
+ <logosphere-checkbox type="switch" label="SMS bildirimleri"></logosphere-checkbox>
993
+ <logosphere-checkbox type="switch" label="Tarayıcı bildirimleri"></logosphere-checkbox>
994
+ </div>
995
+ </logosphere-tab>
996
+ ```
997
+
998
+ ---
999
+
1000
+ ### Admin Paneli Layout (Sol menü + içerik)
1001
+
1002
+ ```html
1003
+ <div style="display:flex; height:100vh; overflow:hidden">
1004
+ <!-- Kenar çubuğu -->
1005
+ <logosphere-leftmenu open pinned style="flex-shrink:0">
1006
+ <img slot="logo-open" src="/logo.svg" alt="Logo" style="height:32px"/>
1007
+ <img slot="logo-closed" src="/icon.svg" alt="L" style="height:32px"/>
1008
+
1009
+ <leftmenu-item itemId="dashboard" label="Panel" active>
1010
+ <ui-icon slot="icon" name="uil-info-circle" size="20"></ui-icon>
1011
+ </leftmenu-item>
1012
+ <leftmenu-item itemId="users" label="Kullanıcılar">
1013
+ <ui-icon slot="icon" name="uil-check-circle" size="20"></ui-icon>
1014
+ </leftmenu-item>
1015
+ <leftmenu-item itemId="reports" label="Raporlar">
1016
+ <ui-icon slot="icon" name="uil-calendar" size="20"></ui-icon>
1017
+ </leftmenu-item>
1018
+ </logosphere-leftmenu>
1019
+
1020
+ <!-- Ana içerik -->
1021
+ <main style="flex:1; overflow:auto; padding:24px">
1022
+ <logosphere-breadcrumb
1023
+ .items=${[{ label: "Panel", href: "/" }, { label: "Kullanıcılar", active: true }]}
1024
+ ></logosphere-breadcrumb>
1025
+
1026
+ <!-- İçerik buraya -->
1027
+ </main>
1028
+ </div>
1029
+
1030
+ <!-- Toast container (sayfa başında bir kere) -->
1031
+ <logosphere-toast-container></logosphere-toast-container>
1032
+ ```
1033
+
1034
+ ---
1035
+
1036
+ ### Silme Onay Modalı
1037
+
1038
+ ```html
1039
+ <logosphere-modal id="delete-modal" title="Kaydı Sil" showClose closeOnEsc>
1040
+ <p>Bu kaydı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.</p>
1041
+
1042
+ <div slot="footer" style="display:flex; gap:8px; justify-content:flex-end">
1043
+ <logosphere-button
1044
+ variant="outline"
1045
+ onclick="document.getElementById('delete-modal').closeModal()"
1046
+ >İptal</logosphere-button>
1047
+ <logosphere-button theme="danger" id="confirm-delete">Evet, Sil</logosphere-button>
1048
+ </div>
1049
+ </logosphere-modal>
1050
+
1051
+ <script>
1052
+ document.getElementById("confirm-delete").addEventListener("click", () => {
1053
+ // silme işlemi
1054
+ ToastService.success("Silindi", "Kayıt başarıyla silindi.");
1055
+ document.getElementById("delete-modal").closeModal();
1056
+ });
1057
+ </script>
1058
+ ```
1059
+
1060
+ ---
1061
+
1062
+ ## Design Tokens (CSS Değişkenleri)
1063
+
1064
+ Bileşenler bu token'ları kullanır; tema özelleştirmek için `:root` üzerinde override et.
1065
+
1066
+ ```css
1067
+ :root {
1068
+ /* Renkler */
1069
+ --color-primary: #your-brand;
1070
+ --color-body-bg: #ffffff;
1071
+ --color-body-bg-hover: #f5f5f5;
1072
+ --color-body-text: #1a1a1a;
1073
+ --color-secondary: #6b7280;
1074
+ --color-tertiary: #9ca3af;
1075
+ --color-border: #e5e7eb;
1076
+
1077
+ /* Durum renkleri */
1078
+ --color-success: #22c55e;
1079
+ --color-warning: #f59e0b;
1080
+ --color-danger: #ef4444;
1081
+ --color-info: #3b82f6;
1082
+
1083
+ /* Tipografi */
1084
+ --font-family-base: "Inter", sans-serif;
1085
+ --font-size-sm: 0.875rem; /* 14px */
1086
+ --font-size-base: 1rem; /* 16px */
1087
+ --font-weight-regular: 400;
1088
+ --font-weight-medium: 500;
1089
+ --font-weight-semibold: 600;
1090
+
1091
+ /* Spacing */
1092
+ --spacing-1: 0.25rem; /* 4px */
1093
+ --spacing-2: 0.5rem; /* 8px */
1094
+ --spacing-3: 0.75rem; /* 12px */
1095
+ --spacing-4: 1rem; /* 16px */
1096
+ --spacing-5: 1.25rem; /* 20px */
1097
+ --spacing-6: 1.5rem; /* 24px */
1098
+
1099
+ /* Border radius */
1100
+ --radius-sm: 0.25rem; /* 4px */
1101
+ --radius-base: 0.5rem; /* 8px */
1102
+ --radius-md: 0.75rem; /* 12px */
1103
+ --radius-full: 9999px;
1104
+
1105
+ /* Gölge */
1106
+ --shadow-sm: 0 1px 3px rgba(0,0,0,0.1);
1107
+ --shadow-md: 0px 4px 8px -2px rgba(0,0,0,0.1);
1108
+
1109
+ /* Geçiş */
1110
+ --transition-speed-fast: 150ms;
1111
+ --transition-timing: ease;
1112
+
1113
+ /* Z-index */
1114
+ --z-index-dropdown: 1000;
1115
+ --z-index-modal: 1050;
1116
+ --z-index-toast: 1100;
1117
+ }
1118
+ ```