@logosphere-ui/core 0.0.0-alpha.4 → 0.0.0-alpha.42

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