@devoplus/one-sdk 0.2.0-next.117 → 0.2.0-next.155

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,43 @@ Biçim: [Keep a Changelog](https://keepachangelog.com/tr/1.1.0/); sürümleme [S
10
10
  > `0.2.0-next.<n>` ön sürümleri `next` etiketiyle çıkar; kararlı 0.2.0 `main`'den `latest` etiketiyle çıkar ve tarihi o
11
11
  > zaman yazılır. Aşağıdaki maddeler 0.1.0'dan bu yana birikenlerdir; kararlı yayına kadar yeni maddeler bu başlığa eklenir.
12
12
 
13
+ ### Eklendi (D-96 — hazır arayüz bileşenleri ilk dalga ve Portal karartması, 20.10.2026)
14
+
15
+ - **`/one-ui.css` sınıfları:** rozet (`one-badge` + `-success`, `-info`, `-warn`, `-error`, `-primary`), anahtar
16
+ (`one-switch`, `role="switch"`), radyo grubu (`one-radio-group`, `-inline`), ilerleme çubuğu (`one-progress`, belirsiz kip
17
+ dahil), yükleniyor göstergesi (`one-spinner`, `one-spinner-lg`, `one-loading-inline`). Renkler tema değişkenlerinden;
18
+ hareket azaltma tercihine uyulur. Yeni değişkenler: `--one-backdrop`, `--one-shadow`.
19
+ - **Yeni bileşenler** (`/one-components.js`): `<one-select>` (aranabilir, tekli/çoklu), `<one-tag-input>`, `<one-dialog>`
20
+ (onay penceresi dahil), `<one-tooltip>`, `<one-menu>`, `<one-avatar>`, `<one-tabs>`, `<one-accordion>`. Hepsi iki dilli,
21
+ klavye ve ekran okuyucu kalıplarına (APG) uygun, düz metin; satır içi betik ya da stil gerektirmez.
22
+ - **Köprü:** `one.setModal(open)` (`one:modal { open }`) ve `one.onModalDismiss(fn)` (`one:modal-dismiss`): uygulama
23
+ içinde pencere açıkken Portal da kendi ekranını karartır; kullanıcı Portal'da vazgeçerse karartmayı Portal kaldırır ve
24
+ pencere kapanır. Köprü `one:viewport` değerini `--one-viewport-top` / `--one-viewport-height` değişkenlerine de yazar.
25
+ Açık açılır öğenin (`data-one-popup`) alt kenarı otomatik yükseklik ölçütüne katılır.
26
+ - Onay penceresi (`<one-dialog accept-label reject-label>`) Portal içindeyken Portal'ın onay penceresiyle (`one.confirm`)
27
+ sorulur; bildirim Portal içindeyken Portal'da çizilir (D-76 U4 değişmedi). Portal dışında (yerel geliştirme)
28
+ `one.toast` hazır bileşenler yüklüyse artık konsol yerine sayfada gösterilir.
29
+ - ⚠️ Portal karartması Portal'ın bu iletiyi tanıyan sürümünü ister; tanımayan Portal'da pencere yalnız iframe içinde
30
+ karartılır, başka bir şey değişmez.
31
+ - **Olay tipleri bileşen başına:** `OneComponentEvents[etiket][olay]` ve `OneComponentEvent<etiket, olay>` her bileşenin
32
+ yaydığı olayın yükünü verir (`<one-dialog>` `cancel` `{ reason }`, `close` `{ returnValue }`, `<one-tabs>` `change`
33
+ `{ tab }`, `<one-menu>` `select` `{ id }` …); `ONE_COMPONENT_EVENTS` aynı kümeyi çalışma anında taşır. Eski
34
+ `OneComponentEventMap` tek haritada aynı adlı olayların birleşimidir ve `@deprecated` işaretlidir.
35
+ - **Tek doğruluk kaynağı:** `<one-tabs>` seçimi `selected` özniteliğindedir (başlangıçta da özellikte görünür, seçili
36
+ sekmeye yeniden tıklamak `change` üretmez); `<one-dialog open>` özniteliği pencereyi açar/kapatır; `<one-accordion>`
37
+ `data-open` iki yönlüdür; `<one-select>` `multiple` kaldırılınca tek seçime iner.
38
+ - **Yeniden bağlanma:** sayfadan ayrılıp yeniden eklenen bileşen ayrıyken değişen öznitelikleri uygular (`src` değişen
39
+ tablo bir kez yeniden yüklenir, `open` alan pencere kipli açılır); eski değerine dönen öznitelik yok sayılır. Ayrılan açık
40
+ pencere içteki görünümüyle birlikte kapanır; ayrılan açık liste kapanır. Portal'a bildirilen kirli durum sayfadaki bağlı
41
+ kirli formların birleşimidir: bir formun ayrılması ötekinin korumasını kaldırmaz.
42
+ - `<one-select>`: seçimi yalnız `null` / `undefined` temizler; `''` yalnız `''` değerli bir seçenek varsa seçilir.
43
+ - **Köprü (D-96):** `one.start()`'tan önce açılmış pencere `one:ready`'nin ardından yeniden bildirilir (Portal `one:ready`'de
44
+ karartmayı sıfırlar; önceden pencere açık ama Portal karartmasız kalıyordu). Pencere açıkken iframe içindeki Escape'i
45
+ uygulama işlemezse köprü `one:modal-escape` ile Portal'a iletir; olay `stopPropagation()` ile durdurulduysa, iptal edildiyse,
46
+ pencere kapandıysa ya da sayfada kipli bir `<dialog>` varsa iletmez (Escape'i zaman uyumsuz işleyen uygulama `preventDefault()` çağırır). Kipli `<dialog>` denetimi tuş
47
+ anında (yakalama aşamasında) yapılır. Sayfa giderken açık pencere kapalı bildirilir (`pagehide`); geri/ileri önbelleğinden
48
+ dönüşte pencere hâlâ açıksa yeniden açık bildirilir (`pageshow`). ⚠️ Portal'ın bu iletiyi tanıyan sürümü gerekir; tanımayan Portal iletiyi yok sayar.
49
+
13
50
  ### Değişti (C7 — DEXA sorgusunda uygulamanın bağlam kodu göndermesi, 18.10.2026)
14
51
 
15
52
  - `queryDexa` / `buildDexaQueryRequest` artık `UserCode` · `CompanyCode` · `CostCenterCode`'u kabul eder (ad harf
package/README.md CHANGED
@@ -191,16 +191,20 @@ Tarayıcıdaki `window.one` (tip: `OneBridge`):
191
191
  | `one.onNavigate(fn)`, `one.path` | `one:navigate` | Portal sekmesine tıklandı; görünümü değiştirin. Adres geçmiş kaydı eklenmeden güncellenir; geri bildirim gönderilmez. |
192
192
  | `one.setRoute(yol)` | `one:route` | Uygulama kendi içinde görünüm değiştirdi; Portal adresi güncellenir. Yol `/` ile başlar, sorgu/`#` yok. |
193
193
  | `one.setTitle(metin \| null)` | `one:title` | Alt sayfa başlığı (en çok `TITLE_MAX_LENGTH` = 120, uzunu kesilir); `null` kaldırır. |
194
- | `one.toast({ severity, summary, detail? })` | `one:toast` | `success`, `info`, `warn`, `error`; Portal çizer. Düz metin. |
194
+ | `one.toast({ severity, summary, detail? })` | `one:toast` | `success`, `info`, `warn`, `error`; Portal içindeyken Portal çizer. Düz metin. Portal dışında hazır bileşenler yüklüyse sayfanın köşesinde gösterilir, değilse konsola yazılır. |
195
195
  | `await one.confirm({ message, title?, severity?, acceptLabel?, rejectLabel? })` | `one:confirm`, yanıt `one:confirm-result` | `true`/`false`. `severity`: `danger`, `warn`, `info`. Portal origin'i yoksa `false`. ⚠️ Portal bu iletiyi tanımıyorsa söz çözülmez. |
196
196
  | `await one.download({ name, mime, data })` | `one:download` | `data` ArrayBuffer (Uint8Array, Blob ve metin çevrilir); en çok `DOWNLOAD_MAX_BYTES` (25 MB). iframe'de indirme kapalıdır; Portal kaydeder. |
197
197
  | `one.openExternal(url)` | `one:open-external` | Yalnız `https://`; Portal kullanıcıya sorup yeni sekmede açar. |
198
198
  | `one.setDirty(bool)` | `one:dirty` | Kaydedilmemiş değişiklik; Portal ayrılmadan önce sorar. Yalnız değişince gönderilir. |
199
- | `one.viewport.current`, `one.viewport.onChange(fn)` | `one:viewport` | iframe'in ekranda görünen kısmı `{ top, height }` (iframe CSS pikseli). Kendi penceresini görünen alana yerleştirmek için kullanılır. |
199
+ | `one.viewport.current`, `one.viewport.onChange(fn)` | `one:viewport` | iframe'in ekranda görünen kısmı `{ top, height }` (iframe CSS pikseli). Kendi penceresini görünen alana yerleştirmek için kullanılır. Köprü aynı değeri `--one-viewport-top` / `--one-viewport-height` CSS değişkenlerine de yazar (`<one-dialog>` bunlarla yerleşir; betik konum yazmaz). |
200
+ | `one.setModal(bool)` | `one:modal { open }` | Uygulama içinde pencere açık mı? `true` Portal'a kendi ekranını, çerçevenin görünen kısmı DIŞINDA aynı renkle karartmasını söyler; `false` karartmayı kaldırır. Yalnız değişince gönderilir; `one.start()`'tan önce açılmış pencere `one:ready`'nin ardından yeniden bildirilir. Sayfa giderken (tam sayfa gezinme, yeniden yükleme) açık pencere Portal'a kapalı bildirilir; sayfa geri/ileri önbelleğinden dönerse ve pencere açık kalmışsa yeniden açık bildirilir. `<one-dialog>` bunu kendisi çağırır; elle yalnız kendi penceresini çizen uygulama kullanır. |
201
+ | (köprü kendisi) | `one:modal-escape` | Pencere açıkken odak iframe'de olduğu için Escape Portal'a ulaşmaz. Uygulama tuşu işlemezse köprü onu Portal'a iletir ve Portal bunu vazgeçme sayar (`one:modal-dismiss` döner). İletilmediği durumlar: tuşa basıldığı anda sayfada kipli bir `<dialog>` vardı (tarayıcı Escape'i yalnız kipli `<dialog>`'da, `showModal()` ile açılmışsa, `cancel` olarak kendisi işler; `<one-dialog>` da öyle; pencereyi `close` olayında kapatmanız yeterlidir), Escape `stopPropagation()` ya da `preventDefault()` ile işlendi ya da olay bittiğinde pencere kapanmıştı. Escape'i zaman uyumsuz işliyorsanız `preventDefault()` çağırın; yoksa Portal da vazgeçer. |
202
+ | `one.onModalDismiss(fn)` | `one:modal-dismiss` | Kullanıcı Portal'ın karartılmış alanına tıkladı ya da Portal'da Escape'e bastı: Portal karartmayı **beklemeden kendisi** kaldırmıştır; açık pencereyi "vazgeçildi" diye kapatın. Uygulama Portal'ı kilitleyemez (karartma ayrıca uygulama/kimlik değişince, Portal gezintisinde, sayfa yeniden yüklenince kalkar; açılış hız sınırlıdır). |
200
203
 
201
204
  Bütün iletiler yalnız iframe `src`'sindeki `parent` origin'lerine gönderilir (joker yok); gelen ileti origin ve üst
202
205
  pencere doğrulanarak alınır. Portal dışında (yerel geliştirme) ileti gönderilmez: `confirm` tarayıcının kendi sorusuna,
203
- `download` tarayıcı indirmesine, `openExternal` yeni pencereye, `toast` konsola düşer.
206
+ `download` tarayıcı indirmesine, `openExternal` yeni pencereye düşer; `toast` hazır bileşenler yüklüyse sayfada, değilse
207
+ konsolda görünür.
204
208
 
205
209
  **Görsel dil (`/one-ui.css`):** açık/koyu değişkenler (`--one-bg`, `--one-fg`, `--one-muted`, `--one-surface`,
206
210
  `--one-border`, `--one-primary`, `--one-primary-contrast`, `--one-font-family`, `--one-radius`, durum renkleri) ve
@@ -209,9 +213,20 @@ sınıflar: `one-btn` (`-primary`, `-danger`, `-text`), `one-field` + `one-label
209
213
  `-error`), içerik sekmeleri `one-tabs` + `one-tab` (`aria-selected`), `one-row`, `one-stack`, `one-muted`, `one-empty`,
210
214
  `one-loading`, `one-sr-only`. ⚠️ `one-tabs` içerik içi gruplama içindir; uygulama menüsünü Portal çizer.
211
215
 
216
+ **Ek sınıflar** (renkler tema değişkenlerinden; hareket azaltma tercihine uyulur):
217
+
218
+ | Sınıf | İşaretleme | Not |
219
+ |---|---|---|
220
+ | `one-badge` (+ `-success`, `-info`, `-warn`, `-error`, `-primary`) | `<span class="one-badge one-badge-success">Onaylandı</span>` | Durum rozeti. Durumu yalnız renkle anlatmayın; metin taşır. |
221
+ | `one-switch` | `<label class="one-check"><input type="checkbox" role="switch" class="one-switch"> Bildirimler</label>` | Açık/kapalı anahtarı; tarayıcının onay kutusudur (klavye ve ekran okuyucu hazır). |
222
+ | `one-radio-group` (+ `-inline`) | `<fieldset class="one-radio-group" role="radiogroup"><legend class="one-label">Öncelik</legend><label class="one-check"><input type="radio" name="p"> Düşük</label>...</fieldset>` | Ok tuşları tarayıcının kendi radyo davranışıdır. |
223
+ | `one-progress` | `<progress class="one-progress" max="100" value="60">%60</progress>` | `value` yoksa belirsiz (akan) kip. Etiketi `<label for>` ya da `aria-label` ile verin. |
224
+ | `one-spinner` (+ `-lg`), `one-loading-inline` | `<span class="one-loading-inline" role="status"><span class="one-spinner" aria-hidden="true"></span> Yükleniyor</span>` | Yalnız döner simge kullanılacaksa `role="status"` + `aria-label` verin. |
225
+
212
226
  ## Hazır arayüz bileşenleri
213
227
 
214
- Liste, form, süzgeç, kişi seçimi, dosya yükleme ve grafik için hazır bileşenler `/one-components.js`'tedir. Bileşenler
228
+ Liste, form, süzgeç, kişi seçimi, dosya yükleme ve grafik için hazır bileşenler `/one-components.js`'tedir; açılır
229
+ liste, etiket girişi, pencere, ipucu, avatar, eylem menüsü, sekmeler ve akordeon da oradadır (aşağıda). Bileşenler
215
230
  bağımlılıksızdır, uygulamanın **kendi** adresinden yüklenir (satır içi betik gerekmez), `/one-ui.css` görsel dilini
216
231
  kullanır, Portal'ın tema ve dil değişimini (`one:context`) kendiliğinden izler ve bütün metinleri Türkçe + İngilizce
217
232
  taşır. Tarih `gg.aa.yyyy`, sayı ve para `tr-TR` biçimindedir. İstekler yalnız uygulamanın kendi adresine gider ve
@@ -274,7 +289,8 @@ Süzgeç değerleri `<one-filter>`'dan parametre olarak gelir: metin için `q`,
274
289
  iletilerle; hatalı alan `aria-invalid` alır ve odak ilk hataya gider. Sunucu 4xx yanıtındaki RFC 9457 `errors` alanı
275
290
  (`{ "alan": "ileti" | ["ileti"] }` ya da `[{ "field" | "pointer": "#/alan", "detail": "..." }]`) alanlara bağlanır;
276
291
  eşleşmeyen iletiler ve `detail` formun üstünde gösterilir. Kaydedilmemiş değişiklik köprüye bildirilir
277
- (`one.setDirty`); Vazgeç değişiklik varsa Portal'da onay sorar. Başkası adına açılmış oturumda (Vekalet / Yerine
292
+ (`one.setDirty`; sayfada birden çok form varsa herhangi biri kirli olduğu sürece Portal sorar, sayfadan ayrılan form
293
+ sayılmaz, yeniden eklenen kirli form yeniden sayılır); Vazgeç değişiklik varsa Portal'da onay sorar. Başkası adına açılmış oturumda (Vekalet / Yerine
278
294
  Görüntüle) Kaydet kapalıdır; manifest `actingSessions: "write"` beyan eden uygulama forma `acting-write` yazar.
279
295
 
280
296
  **Kişi araması:** bileşen uygulamanın kendi ucuna gider; ucu SDK hazırlar:
@@ -298,10 +314,90 @@ tarayıcıda denetlenir; sunucu yine kendi sınırını uygular. Kaldır düğme
298
314
  **Grafik** SVG'dir: `role="img"` + `aria-label`, ekran okuyucu için gizli veri tablosu, renkler `--one-chart-1` ile
299
315
  `--one-chart-6` arasındaki değişkenlerden (açık/koyu).
300
316
 
317
+ ### Açılır liste, pencere ve gezinme bileşenleri
318
+
319
+ | Bileşen | Özellikler (JS) | Öznitelikler | Olaylar |
320
+ |---|---|---|---|
321
+ | `<one-select>` | `options` (`[{ value, label, description?, disabled? }]`), `value` (tekli: değer ya da `null`; `multiple`: dizi), `label` | `label`, `multiple`, `required`, `disabled`, `placeholder`, `lang` | `change` `{ value }` |
322
+ | `<one-tag-input>` | `value` (`string[]`), `suggestions` (`string[]`, isteğe bağlı), `label` | `label`, `max` (adet, varsayılan 50), `max-length` (karakter, varsayılan 50), `required`, `disabled`, `placeholder`, `lang` | `change` `{ value }` |
323
+ | `<one-dialog>` | `label`, `body` (gövde öğesi), `open` (salt okunur), `show()` (`Promise<string>` döner), `close(değer?)` | `label` (başlık), `size` (`sm`, `lg`), `accept-label` / `reject-label` (onay penceresi), `severity` (`danger`, `warn`, `info`), `alert` (`role="alertdialog"`), `open` (eklenince açılır, kaldırılınca kapanır), `lang` | `open`; `cancel` `{ reason }` (iptal edilebilir; `escape`, `close`, `backdrop`, `portal`); `close` `{ returnValue }` |
324
+ | `<one-tooltip>` | `text` (`{ tr, en }` ya da metin) | `text`, `text-en`, `placement="bottom"`, `lang` | Yok |
325
+ | `<one-menu>` | `items` (`[{ id, label, danger?, disabled? }]`, ayraç `{ separator: true }`), `label` | `label`, `compact` (yalnız `⋯` düğmesi; `label` erişilebilir ad olur), `disabled`, `lang` | `select` `{ id }` |
326
+ | `<one-avatar>` | Yok | `name`, `src` (kendi adresi, `https:`, `data:image/`, `blob:`), `size` (`sm`, `lg`), `lang` | Yok |
327
+ | `<one-tabs>` | `selected` (sekme anahtarı) | `label` (sekme şeridinin erişilebilir adı), `selected`, `lang` | `change` `{ tab }` |
328
+ | `<one-accordion>` | Yok | `multiple`, `heading-level` (2-6, varsayılan 3), `lang` | `toggle` `{ index, open, key }` |
329
+
330
+ **Açılır liste** (`<one-select>`): APG "combobox + listbox" kalıbı. Yazınca Türkçe harf duyarsız süzer (`ı`/`i`, `ş`/`s`
331
+ gibi), ok tuşları etkin seçeneği taşır (devre dışı seçenek atlanır), Enter seçer, Escape önce listeyi kapatır (olay dışarı,
332
+ ör. pencereye, taşmaz), Alt+Aşağı listeyi açar. Çoklu seçimde liste açık kalır, seçilenler etiket olarak görünür ve boş
333
+ alanda Geri son seçimi kaldırır. En çok 200 seçenek gösterilir (fazlası için "aramayı daraltın" yazar). Liste giriş alanının
334
+ altında akış içindedir (Portal iframe'i içerik boyunda çizer; akış dışındaki liste kesilirdi). Değer seçeneğin `value`'sudur
335
+ (sayı ve mantıksal değer korunur). Seçimi yalnız `null` (ya da `undefined`) atamak temizler. `''` yalnız `''` değerli bir
336
+ seçenek varsa seçilir: önce `options`, sonra `value` atayın; seçenekler değişince artık seçenek olmayan `''` seçimden düşer.
337
+
338
+ **Etiket girişi** (`<one-tag-input>`): Enter ya da virgül etiket ekler; yapıştırılan virgüllü/çok satırlı liste ayrı
339
+ etiketlere bölünür; alandan ayrılınca yazılı kalan metin etikete dönüşür; aynı etiket (büyük/küçük harf ve Türkçe harf
340
+ duyarsız) ikinci kez eklenmez. Uzunluk, adet ve yinelenme nedenini durum satırı söyler. `suggestions` verilirse kutu
341
+ combobox olur ve öneriler listelenir.
342
+
343
+ **Pencere** (`<one-dialog>`): tarayıcının kipli penceresidir (`<dialog>.showModal()`): odak pencerede kalır, sayfanın geri
344
+ kalanı etkisizdir. Alt öğeler gövdeye taşınır; `data-one-dialog-footer` taşıyan öğe alt bilgiye gider. `data-one-close="değer"`
345
+ taşıyan her düğme pencereyi o değerle kapatır (`<form method="dialog">` da çalışır). İlk odak sırası: `autofocus`, onay
346
+ penceresinde "vazgeç", gövdedeki ilk odaklanabilir öğe, kapat düğmesi; kapanınca odak açan öğeye döner. Escape, kapat
347
+ düğmesi ve karartmaya tıklama iptal edilebilir `cancel` olayıdır (`preventDefault` pencereyi açık tutar).
348
+
349
+ - Pencere iframe'in **görünen** dilimine yerleşir (uzun sayfada kullanıcının baktığı yerde açılır).
350
+ - Açılınca köprü `one.setModal(true)` ile Portal'a bildirir; Portal kendi ekranını aynı renkle karartır ve iki karartma
351
+ kenarda birleşir. Kullanıcı Portal'ın karartılmış alanına tıklarsa ya da Portal'da Escape'e basarsa Portal karartmayı
352
+ kendisi kaldırır ve pencere `cancel` (`reason: "portal"`) ile kapanır. `cancel` iptal edilirse pencere açık kalır ama
353
+ Portal yeniden karartılmaz.
354
+ - **Onay penceresi** (`accept-label` / `reject-label`): sonuç `'accept'` ya da `'reject'`. ⛔ Portal içindeyken pencere
355
+ iframe'de ÇİZİLMEZ, Portal'ın onay penceresiyle (`one.confirm`) sorulur: başlık `label`, ileti gövdenin DÜZ
356
+ METNİ (HTML ve biçim taşınmaz), düğmeler `accept-label` / `reject-label`, `severity`. Portal'ın onay penceresi
357
+ uygulamadan kapatılamaz (`close()` etkisizdir). Portal dışında (yerel geliştirme) aynı pencere sayfada çizilir.
358
+ - Zengin içerikli onay (biçimli metin, alan) gerekiyorsa onay öznitelikleri olmadan genel pencere kullanın ve düğmeleri
359
+ `data-one-close` ile kendiniz koyun; o pencere Portal içinde de iframe'de çizilir.
360
+
361
+ **Bildirim** için ayrı bileşen yoktur: `one.toast(...)` Portal içindeyken bildirimi Portal'a verir (tek görünüm); Portal
362
+ dışında hazır bileşenler yüklüyse sayfanın köşesinde gösterir (hata 8, diğerleri 5 saniye; kapatılabilir).
363
+
364
+ **İpucu** (`<one-tooltip>`): ilk alt öğe tetikleyicidir ve **odaklanabilir** olmalıdır (düğme, bağlantı). Fareyle üzerine
365
+ gelince ve klavye odağıyla görünür, Escape ile kapanır, fare ipucunun üzerine geçebilir (WCAG 1.4.13). Tetikleyiciye
366
+ `aria-describedby` bağlanır. İpucuna önemli bilgi koymayın; ipucu dokunmatik ekranda görünmeyebilir.
367
+
368
+ **Eylem menüsü** (`<one-menu>`): APG "menu button". Düğme `aria-haspopup="menu"`; açınca ilk öğe odaklanır (Yukarı ok ile
369
+ son öğe), oklar/Home/End gezinir, harf yazınca o harfle başlayan öğeye atlar, Enter/Boşluk seçer, Escape kapatıp odağı
370
+ düğmeye döndürür. Devre dışı öğe odaklanır ama seçilmez. Menü aşağıda yer yoksa yukarı açılır.
371
+
372
+ **Avatar** (`<one-avatar>`): baş harfler Türkçe büyük harfle (`şule yıldız` için `ŞY`), renk addan kararlı biçimde seçilir;
373
+ erişilebilir ad kişinin adıdır. Görsel yüklenemezse baş harflere döner.
374
+
375
+ **Sekmeler** (`<one-tabs>`): alt öğeler paneldir: `data-label` (+ `data-label-en`), isteğe bağlı `data-tab` (anahtar) ve
376
+ `data-disabled`. APG "tabs": oklar devre dışı sekmeyi atlayarak gezer ve seçer, Home/End uçlara gider. Uygulama menüsü
377
+ DEĞİLDİR (menüyü Portal çizer); içerik içi gruplama içindir. Seçimin tek kaynağı `selected` özniteliğidir: `selected`
378
+ özelliği başlangıçta da gösterilen sekmeyi döndürür, kullanıcının seçimi özniteliğe yazılır, uygulama özniteliği sonradan
379
+ da değiştirebilir. `change` yalnız seçim gerçekten değişince yayılır. Panel sonradan eklenir ya da `data-label`,
380
+ `data-tab`, `data-disabled` değişirse şerit yenilenir.
381
+
382
+ **Akordeon** (`<one-accordion>`): alt öğeler bölümdür: `data-label` (+ `data-label-en`), başlangıçta açık olan için
383
+ `data-open`. Başlık düğmesi `aria-expanded` taşır, oklar başlıklar arasında gezer; `multiple` yoksa aynı anda tek bölüm açıktır.
384
+ `data-open` iki yönlüdür: kullanıcı bölüm açınca öznitelik eklenir, kapatınca kalkar; uygulama özniteliği ekleyip
385
+ kaldırarak bölümü açıp kapatabilir.
386
+
387
+ **Sayfadan ayrılıp yeniden eklenen bileşen:** ayrıyken değişen öznitelikler yeniden eklenince uygulanır (ör. `src`
388
+ değişen tablo bir kez yeniden yüklenir, `open` alan pencere açılır, `selected` alan sekmeler o sekmeyi gösterir); ayrıyken
389
+ değişip eski değerine dönen öznitelik yok sayılır (tablo bulunduğu sayfada kalır). Ayrılan açık pencere `''` ile kapanır
390
+ ve Portal karartması kalkar; yeniden eklenince kapalı görünür, `show()` ya da `open` ile yeniden açılır (Portal'ın onay
391
+ penceresi hariç: o yanıt gelince sonuçlanır). Açık liste, menü ve ipucu kapanır.
392
+
393
+ **Açılır öğeler ve yükseklik:** menü ve ipucu kapsayıcılarına göre mutlak konumludur; açıkken alt kenarları otomatik
394
+ yükseklik ölçütüne katılır (`data-one-popup`), sayfanın altındaki menü iframe'in alt kenarında kesilmez.
395
+
301
396
  | Sabit | Değer |
302
397
  |---|---|
303
398
  | `COMPONENTS_SCRIPT_PATH` | `/one-components.js` (`ONE_COMPONENTS_SCRIPT`) |
304
- | `ONE_COMPONENT_TAGS` | altı etiket adı |
399
+ | `ONE_COMPONENT_TAGS` | on dört etiket adı |
400
+ | `ONE_COMPONENT_EVENTS` | etiket başına yayılan olay adları (`OneComponentEvents` ile aynı küme) |
305
401
  | `PEOPLE_SEARCH_PATH`, `PEOPLE_SEARCH_MIN_QUERY`, `PEOPLE_SEARCH_MAX_QUERY`, `PEOPLE_SEARCH_MAX_RESULTS` | `/api/one/people`, 2, 100, 20 |
306
402
  | `FILE_UPLOAD_DEFAULT_ACTION`, `FILE_UPLOAD_DEFAULT_MAX_BYTES` | `/api/files`, 5 MB |
307
403
  | `TABLE_DEFAULT_PAGE_SIZE`, `TABLE_MAX_PAGE_SIZE` | 20, 100 |
@@ -309,7 +405,11 @@ tarayıcıda denetlenir; sunucu yine kendi sınırını uygular. Kaldır düğme
309
405
  Tipler: `OneTableColumn`, `OneTableElement`, `OneListResponse`, `OneFormField`, `OneFormElement`, `OneFormErrors`,
310
406
  `OneFilterField`, `OneFilterElement`, `OneFilterChange`, `OnePerson`, `OnePersonPickerElement`, `OneUploadedFile`,
311
407
  `OneFileUploadElement`, `OneChartData`, `OneChartSeries`, `OneChartElement`, `OneChoiceOption`, `OneLocalizedText`,
312
- `OneFieldType`, `OneComponentEventMap`; sunucu: `peopleSearchHandler`, `searchPeople` (saf), `foldPersonText`,
408
+ `OneFieldType`, `OneSelectElement`, `OneSelectOption`, `OneSelectValue`, `OneTagInputElement`, `OneDialogElement`,
409
+ `OneDialogCancelReason`, `OneTooltipElement`, `OneMenuElement`, `OneMenuItem`, `OneTabsElement`. Olay yükleri bileşen
410
+ başına `OneComponentEvents[etiket][olay]` (ör. `OneComponentEvents['one-dialog']['cancel']` = `{ reason }`) ya da
411
+ `OneComponentEvent<etiket, olay>` (`CustomEvent`) ile yazılır; eski birleşik `OneComponentEventMap` yükü daraltamaz
412
+ ve kullanımdan kalkacaktır. Sunucu: `peopleSearchHandler`, `searchPeople` (saf), `foldPersonText`,
313
413
  `PeopleSearchItem`, `PeopleSearchEnv`, `PeopleSearchOptions`.
314
414
 
315
415
  ## Backend istemcisi
package/dist/client.d.ts CHANGED
@@ -116,6 +116,20 @@ export interface OneBridge {
116
116
  setTitle(title: string | null): void;
117
117
  setDirty(dirty: boolean): void;
118
118
  setRoute(path: string): void;
119
+ /**
120
+ * Uygulama içinde bir pencere (modal) açık mı (D-96)? `true` Portal'a arka planı karartmasını söyler, `false` karartmayı
121
+ * kaldırır; aynı değer yeniden gönderilmez. `<one-dialog>` bunu kendisi çağırır — elle yalnız kendi penceresini çizen
122
+ * uygulama kullanır. Karartma Portal'ındır: kullanıcı Portal'ın karartılmış alanına tıklarsa ya da Escape'e basarsa Portal
123
+ * karartmayı kaldırır ve `onModalDismiss` dinleyicileri çağrılır (uygulama Portal'ı kilitleyemez). Pencere açıkken odak
124
+ * iframe'de olduğundan Escape Portal'a ulaşmaz: uygulama tuşu işlemezse (tuşa basıldığı anda sayfada KİPLİ bir
125
+ * `<dialog>` yoktu, olay `stopPropagation()` ile durdurulmadı, iptal edilmedi ve olay bittiğinde pencere hâlâ açık)
126
+ * köprü onu Portal'a iletir. Tarayıcı Escape'i yalnız kipli `<dialog>`'da
127
+ * (`showModal()`) kendisi `cancel` olarak işler; `<one-dialog>` da öyle. Escape'i zaman uyumsuz işleyen uygulama
128
+ * `preventDefault()` çağırmalıdır; aksi hâlde Portal da vazgeçer.
129
+ */
130
+ setModal(open: boolean): void;
131
+ /** Portal karartmayı kullanıcı isteğiyle kaldırdı: açık pencere "vazgeçildi" diye kapatılmalı (D-96). */
132
+ onModalDismiss(fn: () => void): () => void;
119
133
  }
120
134
  /** Uygulama içi yol geçerli mi (manifest `navigation[].path` kuralı)? */
121
135
  export declare function isRoutePath(path: unknown): path is string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAsBA,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,mBAAmB,CAAA;AAClD,eAAO,MAAM,WAAW,gBAAgB,CAAA;AAExC,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,KAAK,CAAA;AACtC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,MAAM,CAAA;AACnC,gEAAgE;AAChE,eAAO,MAAM,kBAAkB,QAAmB,CAAA;AAClD,+HAA+H;AAC/H,eAAO,MAAM,aAAa,QAA6E,CAAA;AAGvG,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,sGAAsG;AACtG,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,KAAK,EAAE,OAAO,CAAA;CACf;AAED,6FAA6F;AAC7F,eAAO,MAAM,wBAAwB,QAAgD,CAAA;AAErF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,GAAG,iBAAiB,EAAE,CAI9H;AACD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AACpE,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AACD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;IACrC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AACD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,8GAA8G;IAC9G,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,MAAM,CAAA;CACpD;AACD,gHAAgH;AAChH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf;AACD,wGAAwG;AACxG,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf;AACD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;IACnB,sGAAsG;IACtG,KAAK,EAAE;QAAE,IAAI,EAAE,YAAY,GAAG,eAAe,CAAA;KAAE,GAAG,IAAI,CAAA;IACtD,MAAM,EAAE,SAAS,GAAG,IAAI,CAAA;CACzB;AAED,sGAAsG;AACtG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,mHAAmH;IACnH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzC,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;KAAE,CAAA;IAC/G;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;IACpE;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACtD,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IAChD,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IAC1D,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IAClD,uEAAuE;IACvE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3D,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC5B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9D,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAqB7E;AAID,8GAA8G;AAC9G,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAErD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAMrE;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MA4Q/B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,MAyFxB,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -13,9 +13,15 @@
13
13
  // one:title { title | null } (≤ 120) · one:toast { severity, summary, detail? } · one:confirm { id, message, title?,
14
14
  // severity?, acceptLabel?, rejectLabel? } · one:download { name, mime, data: ArrayBuffer } (≤ 25 MB)
15
15
  // one:open-external { url } (yalnız https) · one:dirty { dirty }
16
+ // one:modal { open } (D-96: uygulama penceresi açık/kapalı; Portal kendi ekranında arka planı karartır; one:ready'den
17
+ // önce açılmış pencere one:ready'nin ardından yeniden bildirilir, çünkü Portal one:ready'de karartmayı sıfırlar; belge
18
+ // giderken (pagehide) açık pencere kapalı bildirilir, geri/ileri önbelleğinden dönüşte (pageshow persisted) yeniden açık)
19
+ // one:modal-escape (D-96: pencere açıkken iframe içinde Escape'e basıldı ve uygulama işlemedi; Portal vazgeçme sayar)
16
20
  // Portal → uygulama (kaynak origin DOĞRULANIR)
17
21
  // one:token { token, expiresAt } · one:context { theme, lang, autoHeight, actor: { kind } | null, design? }
18
22
  // one:navigate { path } · one:viewport { top, height } · one:confirm-result { id, accepted }
23
+ // one:modal-dismiss (D-96: kullanıcı Portal'ın karartılmış alanına tıkladı ya da Escape'e bastı; Portal karartmayı
24
+ // KENDİSİ kaldırmıştır, uygulama penceresini "vazgeçildi" diye kapatır)
19
25
  // Bütün metinler DÜZ METİNDİR (HTML değil); Portal onları HTML olarak yorumlamaz.
20
26
  import { COMPONENTS_SCRIPT_PATH, ONE_COMPONENTS_SCRIPT } from './components.js';
21
27
  /** Köprü betiğinin ve görsel dil dosyasının uygulama içindeki yolu. */
@@ -117,11 +123,11 @@ export const ONE_BRIDGE_SCRIPT = String.raw `(function (w) {
117
123
  var parents = (q.get('parent') || '').split(',').map(function (p) { return p.trim(); })
118
124
  .filter(function (p) { return /^https?:\/\/[^\/?#\s]+$/.test(p); });
119
125
  var framed = w.parent !== w;
120
- var token = null, expiresAt = 0, context = null, viewport = null, dirty = false, title = undefined, started = false;
126
+ var token = null, expiresAt = 0, context = null, viewport = null, dirty = false, modal = false, title = undefined, started = false;
121
127
  // Sekme izni (S10): tam menü + erişim; Portal'a yalnız görülebilen sekmeler gider (izin kodu gönderilmez).
122
128
  var navAll = null, navAccess = null, navSent = null;
123
129
  var path = isPath(w.location.pathname) ? w.location.pathname : '/';
124
- var listeners = { token: [], context: [], navigate: [], viewport: [] };
130
+ var listeners = { token: [], context: [], navigate: [], viewport: [], modalDismiss: [] };
125
131
  var pending = {}, seq = 0;
126
132
 
127
133
  function isPath(p) { return typeof p === 'string' && p.length <= PATH_MAX && PATH_RE.test(p); }
@@ -173,9 +179,22 @@ export const ONE_BRIDGE_SCRIPT = String.raw `(function (w) {
173
179
  var inner = w.innerHeight, client = root.clientHeight;
174
180
  return typeof inner === 'number' && typeof client === 'number' && inner > client ? inner - client : 0;
175
181
  }
182
+ // Açık açılır öğeler (eylem menüsü, ipucu — 'data-one-popup') mutlak konumludur ve gövdenin boyuna katılmaz: sayfanın
183
+ // altındaki bir menü iframe'in alt kenarında KESİLMESİN diye alt kenarları da ölçüte katılır (D-96).
184
+ function popupBottom() {
185
+ var list = doc.querySelectorAll ? doc.querySelectorAll('[data-one-popup]') : [], max = 0;
186
+ for (var i = 0; i < list.length; i++) {
187
+ var n = list[i];
188
+ if (!n || typeof n.getBoundingClientRect !== 'function') continue;
189
+ var r = n.getBoundingClientRect();
190
+ if (r.height > 0 && r.bottom > max) max = r.bottom;
191
+ }
192
+ return max > 0 ? max + 8 : 0;
193
+ }
176
194
  function contentHeight() {
177
195
  var b = doc.body, r = b.getBoundingClientRect();
178
- return Math.ceil(r.bottom + (parseFloat(w.getComputedStyle(b).marginBottom) || 0) + (w.scrollY || 0) + horizontalBar());
196
+ var bottom = Math.max(r.bottom + (parseFloat(w.getComputedStyle(b).marginBottom) || 0), popupBottom());
197
+ return Math.ceil(bottom + (w.scrollY || 0) + horizontalBar());
179
198
  }
180
199
  function reportHeight() {
181
200
  heightPending = false;
@@ -218,6 +237,40 @@ export const ONE_BRIDGE_SCRIPT = String.raw `(function (w) {
218
237
  else root.removeAttribute('data-one-height');
219
238
  }
220
239
 
240
+ // Pencere açıkken iframe içindeki Escape Portal'a iletilir (D-96): odak iframe'de olduğundan tuş Portal'a ulaşmaz ve
241
+ // Escape'i işlemeyen bir uygulama klavye kullanıcısını kilitlerdi. Tuşa basıldığı ANDA sayfada KİPLİ bir <dialog> varsa
242
+ // iletilmez: tarayıcı Escape'i yalnız kipli <dialog>'da 'cancel' olarak işler. Bu durum YAKALAMA aşamasında kaydedilir,
243
+ // yani uygulamanın dinleyicilerinden ve tarayıcının varsayılan işleminden (pencereyi kapatma) ÖNCE: tarayıcı 'open'ı
244
+ // hemen kaldırır ama 'close' olayı sonraki görevde gelir; sonradan bakılsaydı pencereyi 'close'da kapatan uygulamanın
245
+ // işlenmiş Escape'i de iletilirdi. İletim kararı ise KABARMA aşamasındaki dinleyicidedir: uygulama olayı
246
+ // stopPropagation() ile durdurduysa (ör. iç açılır liste "üst pencere kapanmasın" diye) oraya hiç ulaşmaz. Uygulamanın
247
+ // kendi kararı olay BİTTİKTEN sonra okunur: olayı iptal ettiyse ya da penceresini kapattıysa iletilmez.
248
+ function modalDialogOpen() {
249
+ try { return doc.querySelector('dialog:modal') !== null; } catch (e) {
250
+ // ':modal' desteklenmiyor: açık <dialog> kipli sayılır; <one-dialog>'un kipsiz yedeği (data-one-modeless) sayılmaz.
251
+ return doc.querySelector('dialog[open]:not([data-one-modeless])') !== null;
252
+ }
253
+ }
254
+ var nativeAtKey = typeof WeakMap === 'function' ? new WeakMap() : null;
255
+ w.addEventListener('keydown', function (ev) {
256
+ if (ev.key === 'Escape' && modal && nativeAtKey) nativeAtKey.set(ev, modalDialogOpen());
257
+ }, true);
258
+ w.addEventListener('keydown', function (ev) {
259
+ if (ev.key !== 'Escape' || ev.isComposing || !modal) return;
260
+ var nativeHandles = nativeAtKey && nativeAtKey.has(ev) ? nativeAtKey.get(ev) : modalDialogOpen();
261
+ w.setTimeout(function () {
262
+ if (ev.defaultPrevented || !modal || nativeHandles) return;
263
+ post({ type: 'one:modal-escape' });
264
+ }, 0);
265
+ });
266
+
267
+ // Belge giderken (tam sayfa gezinme, yeniden yükleme) açık pencere Portal'a kapalı bildirilir: gidilen sayfa SDK'sızsa
268
+ // one:ready gelmez ve Portal karartmayı başka türlü kaldıramayabilir; SDK'lı sayfa zaten one:ready + yeniden bildirimle
269
+ // açar. Sayfa geri/ileri önbelleğinden dönerse (pageshow persisted) ve pencere hâlâ açıksa yeniden bildirilir. Köprünün
270
+ // kendi durumu değişmez (gidilen belge yeni bir köprü kurar; önbellekten dönen belge aynı pencereyle devam eder).
271
+ w.addEventListener('pagehide', function () { if (modal) post({ type: 'one:modal', open: false }); });
272
+ w.addEventListener('pageshow', function (ev) { if (ev.persisted && modal) post({ type: 'one:modal', open: true }); });
273
+
221
274
  w.addEventListener('message', function (ev) {
222
275
  // Kaynak DOĞRULANIR: yalnız Portal origin'i ve yalnız üst pencere.
223
276
  if (parents.indexOf(ev.origin) < 0 || (framed && ev.source !== w.parent)) return;
@@ -230,7 +283,17 @@ export const ONE_BRIDGE_SCRIPT = String.raw `(function (w) {
230
283
  } else if (d.type === 'one:navigate' && isPath(d.path)) {
231
284
  path = d.path; replaceUrl(path); emit('navigate', path);
232
285
  } else if (d.type === 'one:viewport' && isFinite(d.top) && isFinite(d.height) && d.height >= 0) {
233
- viewport = { top: Number(d.top), height: Number(d.height) }; emit('viewport', viewport);
286
+ viewport = { top: Number(d.top), height: Number(d.height) };
287
+ // Pencere ('<one-dialog>') ve sayfa içi bildirim görünen dilime CSS ile yerleşir (D-96): betik konum YAZMAZ.
288
+ if (root.style && root.style.setProperty) {
289
+ root.style.setProperty('--one-viewport-top', Math.max(0, Math.round(viewport.top)) + 'px');
290
+ root.style.setProperty('--one-viewport-height', Math.max(0, Math.round(viewport.height)) + 'px');
291
+ }
292
+ emit('viewport', viewport);
293
+ } else if (d.type === 'one:modal-dismiss') {
294
+ // Portal karartmayı zaten kaldırdı; açık pencereler kapanır. Bir pencere kapanmayı reddetse bile Portal yeniden
295
+ // KARARTILMAZ (kullanıcı bir kez vazgeçti) — bir sonraki pencere değişimi durumu yeniden bildirir.
296
+ modal = false; emit('modalDismiss');
234
297
  } else if (d.type === 'one:confirm-result' && typeof d.id === 'string' && pending[d.id]) {
235
298
  var resolve = pending[d.id]; delete pending[d.id]; resolve(d.accepted === true);
236
299
  }
@@ -276,6 +339,8 @@ export const ONE_BRIDGE_SCRIPT = String.raw `(function (w) {
276
339
  }
277
340
  started = true;
278
341
  post({ type: 'one:ready' });
342
+ // Portal one:ready'de karartmayı sıfırlar (yeni belge): başlamadan önce açılmış pencere yeniden bildirilir.
343
+ if (modal) post({ type: 'one:modal', open: true });
279
344
  if (nav) { navAll = nav; sendNav(); }
280
345
  if (canReport) {
281
346
  new w.ResizeObserver(scheduleHeight).observe(doc.body);
@@ -308,7 +373,14 @@ export const ONE_BRIDGE_SCRIPT = String.raw `(function (w) {
308
373
  if (!text(t.summary)) throw new TypeError('one.toast: summary boş olamaz');
309
374
  var msg = { type: 'one:toast', severity: t.severity, summary: String(t.summary) };
310
375
  if (text(t.detail)) msg.detail = String(t.detail);
311
- if (!post(msg) && w.console && w.console.info) w.console.info('[' + t.severity + '] ' + msg.summary + (msg.detail ? ' — ' + msg.detail : ''));
376
+ if (post(msg)) return;
377
+ // Portal dışında (yerel geliştirme) bildirimi sayfa gösterir: hazır bileşenler ('/one-components.js') yüklüyse olayı
378
+ // karşılar ('preventDefault'); yüklü değilse konsola yazılır.
379
+ var shown = false;
380
+ if (typeof w.CustomEvent === 'function' && typeof w.dispatchEvent === 'function') {
381
+ try { shown = !w.dispatchEvent(new w.CustomEvent('one:toast', { detail: msg, cancelable: true })); } catch (e) { report(e); }
382
+ }
383
+ if (!shown && w.console && w.console.info) w.console.info('[' + t.severity + '] ' + msg.summary + (msg.detail ? ' — ' + msg.detail : ''));
312
384
  },
313
385
  confirm: function (options) {
314
386
  return new Promise(function (resolve) {
@@ -365,7 +437,14 @@ export const ONE_BRIDGE_SCRIPT = String.raw `(function (w) {
365
437
  if (p === path) return;
366
438
  path = p; replaceUrl(p);
367
439
  post({ type: 'one:route', path: p });
368
- }
440
+ },
441
+ setModal: function (value) {
442
+ var next = value === true;
443
+ if (next === modal) return;
444
+ modal = next;
445
+ post({ type: 'one:modal', open: next });
446
+ },
447
+ onModalDismiss: function (fn) { return on('modalDismiss', fn); }
369
448
  };
370
449
  w.one = one;
371
450
  })(window);
@@ -376,8 +455,8 @@ export const ONE_BRIDGE_SCRIPT = String.raw `(function (w) {
376
455
  * `--one-radius` değişkenlerine yazılır. Sınıflar `one-` önekiyle: düğme · alan · tablo · kart · mesaj · içerik sekmesi.
377
456
  * ⚠️ `.one-tabs` içerik İÇİNDEKİ gruplama içindir; uygulama menüsü değildir (menüyü Portal çizer, U1).
378
457
  */
379
- export const ONE_UI_CSS = `:root{--one-primary:#B60017;--one-primary-contrast:#ffffff;--one-font-family:"Segoe UI",system-ui,-apple-system,Roboto,sans-serif;--one-radius:6px;--one-bg:#ffffff;--one-fg:#222222;--one-muted:#5f5f66;--one-surface:#f4f4f5;--one-raised:#ffffff;--one-border:#d6d6db;--one-input:#ffffff;--one-success:#1b6e2e;--one-success-bg:#e8f5ec;--one-info:#0b5cad;--one-info-bg:#e7f0fb;--one-warn:#7a4f00;--one-warn-bg:#fff4e0;--one-error:#a4161a;--one-error-bg:#fdecec;--one-scroll:rgba(34,34,34,.22);--one-scroll-hover:rgba(34,34,34,.34);--one-chart-1:#b60017;--one-chart-2:#0b5cad;--one-chart-3:#1b6e2e;--one-chart-4:#8a5a00;--one-chart-5:#6b3fa0;--one-chart-6:#00727a;color-scheme:light}
380
- [data-theme=dark]{--one-primary:#ff5a6e;--one-primary-contrast:#1b1b1f;--one-bg:#1b1b1f;--one-fg:#e8e8e8;--one-muted:#a8a8b3;--one-surface:#26262c;--one-raised:#2e2e35;--one-border:#3a3a42;--one-input:#2e2e35;--one-success:#7ad491;--one-success-bg:#16301e;--one-info:#8cc2ff;--one-info-bg:#142538;--one-warn:#ffc766;--one-warn-bg:#3a2c10;--one-error:#ff8a8a;--one-error-bg:#3d1717;--one-scroll:rgba(232,232,232,.22);--one-scroll-hover:rgba(232,232,232,.34);--one-chart-1:#ff5a6e;--one-chart-2:#8cc2ff;--one-chart-3:#7ad491;--one-chart-4:#ffc766;--one-chart-5:#c9a6ff;--one-chart-6:#5fd3db;color-scheme:dark}
458
+ export const ONE_UI_CSS = `:root{--one-primary:#B60017;--one-primary-contrast:#ffffff;--one-font-family:"Segoe UI",system-ui,-apple-system,Roboto,sans-serif;--one-radius:6px;--one-bg:#ffffff;--one-fg:#222222;--one-muted:#5f5f66;--one-surface:#f4f4f5;--one-raised:#ffffff;--one-border:#d6d6db;--one-input:#ffffff;--one-success:#1b6e2e;--one-success-bg:#e8f5ec;--one-info:#0b5cad;--one-info-bg:#e7f0fb;--one-warn:#7a4f00;--one-warn-bg:#fff4e0;--one-error:#a4161a;--one-error-bg:#fdecec;--one-scroll:rgba(34,34,34,.22);--one-scroll-hover:rgba(34,34,34,.34);--one-chart-1:#b60017;--one-chart-2:#0b5cad;--one-chart-3:#1b6e2e;--one-chart-4:#8a5a00;--one-chart-5:#6b3fa0;--one-chart-6:#00727a;--one-backdrop:rgba(0,0,0,.32);--one-shadow:0 12px 32px rgba(0,0,0,.22);color-scheme:light}
459
+ [data-theme=dark]{--one-primary:#ff5a6e;--one-primary-contrast:#1b1b1f;--one-bg:#1b1b1f;--one-fg:#e8e8e8;--one-muted:#a8a8b3;--one-surface:#26262c;--one-raised:#2e2e35;--one-border:#3a3a42;--one-input:#2e2e35;--one-success:#7ad491;--one-success-bg:#16301e;--one-info:#8cc2ff;--one-info-bg:#142538;--one-warn:#ffc766;--one-warn-bg:#3a2c10;--one-error:#ff8a8a;--one-error-bg:#3d1717;--one-scroll:rgba(232,232,232,.22);--one-scroll-hover:rgba(232,232,232,.34);--one-chart-1:#ff5a6e;--one-chart-2:#8cc2ff;--one-chart-3:#7ad491;--one-chart-4:#ffc766;--one-chart-5:#c9a6ff;--one-chart-6:#5fd3db;--one-shadow:0 12px 32px rgba(0,0,0,.5);color-scheme:dark}
381
460
  *,*::before,*::after{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--one-scroll) transparent}
382
461
  ::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--one-scroll);border-radius:8px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:var(--one-scroll-hover);background-clip:padding-box}
383
462
  html[data-one-height=auto]{overflow-x:auto;overflow-y:hidden}
@@ -417,7 +496,10 @@ a{color:var(--one-primary)}
417
496
  .one-tab[aria-selected=true]{border-bottom-color:var(--one-primary);color:var(--one-fg);font-weight:600}
418
497
  .one-empty,.one-loading{padding:16px;text-align:center;color:var(--one-muted)}
419
498
  .one-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
420
- one-table,one-form,one-filter,one-person-picker,one-file-upload,one-chart{display:block;min-width:0}
499
+ one-table,one-form,one-filter,one-person-picker,one-file-upload,one-chart,one-select,one-tag-input,one-tabs,one-accordion{display:block;min-width:0}
500
+ one-dialog{display:contents}
501
+ one-tooltip,one-menu{display:inline-block;position:relative;max-width:100%;vertical-align:middle}
502
+ one-avatar{display:inline-flex;vertical-align:middle}
421
503
  .one-table-toolbar{justify-content:space-between;margin:0 0 8px}
422
504
  .one-table-search{flex:1 1 220px;margin:0;max-width:420px}
423
505
  .one-sort{font:inherit;font-weight:600;color:inherit;background:none;border:0;padding:0;cursor:pointer;display:inline-flex;gap:4px;align-items:center;text-align:inherit}
@@ -464,6 +546,96 @@ one-table,one-form,one-filter,one-person-picker,one-file-upload,one-chart{displa
464
546
  .one-chart-legend li{display:inline-flex;align-items:center;gap:6px}
465
547
  .one-chart-swatch{display:inline-block;width:12px;height:12px;border-radius:3px}
466
548
  .one-chart-swatch.one-chart-s1{background:var(--one-chart-1)}.one-chart-swatch.one-chart-s2{background:var(--one-chart-2)}.one-chart-swatch.one-chart-s3{background:var(--one-chart-3)}.one-chart-swatch.one-chart-s4{background:var(--one-chart-4)}.one-chart-swatch.one-chart-s5{background:var(--one-chart-5)}.one-chart-swatch.one-chart-s6{background:var(--one-chart-6)}
549
+ .one-badge{display:inline-flex;align-items:center;gap:4px;max-width:100%;padding:1px 8px;border:1px solid var(--one-border);border-radius:999px;background:var(--one-surface);color:var(--one-fg);font-size:.8125rem;font-weight:600;line-height:1.5;white-space:nowrap;vertical-align:middle}
550
+ .one-badge-success{border-color:var(--one-success);background:var(--one-success-bg);color:var(--one-success)}
551
+ .one-badge-info{border-color:var(--one-info);background:var(--one-info-bg);color:var(--one-info)}
552
+ .one-badge-warn{border-color:var(--one-warn);background:var(--one-warn-bg);color:var(--one-warn)}
553
+ .one-badge-error{border-color:var(--one-error);background:var(--one-error-bg);color:var(--one-error)}
554
+ .one-badge-primary{border-color:var(--one-primary);background:var(--one-primary);color:var(--one-primary-contrast)}
555
+ .one-check input[type=checkbox]:not(.one-switch),.one-check input[type=radio]{width:18px;height:18px;margin:0;flex:none;accent-color:var(--one-primary)}
556
+ .one-switch{appearance:none;-webkit-appearance:none;flex:none;width:40px;height:22px;margin:0;border:1px solid var(--one-muted);border-radius:999px;background:var(--one-muted) radial-gradient(circle,var(--one-raised) 0 7px,transparent 7.5px) no-repeat 0 50%/20px 20px;cursor:pointer;transition:background-color .15s,background-position .15s,border-color .15s}
557
+ .one-switch:checked{border-color:var(--one-primary);background-color:var(--one-primary);background-image:radial-gradient(circle,var(--one-primary-contrast) 0 7px,transparent 7.5px);background-position:100% 50%}
558
+ .one-switch:disabled{opacity:.55;cursor:not-allowed}
559
+ .one-radio-group{display:flex;flex-direction:column;gap:6px;min-width:0;margin:0 0 12px;padding:0;border:0}
560
+ .one-radio-group>legend{padding:0;margin:0 0 4px}
561
+ .one-radio-group-inline{flex-direction:row;flex-wrap:wrap;gap:8px 16px}
562
+ .one-progress{display:block;width:100%;height:8px;margin:4px 0;border:0;border-radius:999px;overflow:hidden;background:var(--one-border);color:var(--one-primary);appearance:none;-webkit-appearance:none}
563
+ .one-progress::-webkit-progress-bar{background:var(--one-border);border-radius:999px}
564
+ .one-progress::-webkit-progress-value{background:var(--one-primary);border-radius:999px;transition:width .2s}
565
+ .one-progress::-moz-progress-bar{background:var(--one-primary);border-radius:999px}
566
+ .one-progress:indeterminate{background:var(--one-border) linear-gradient(90deg,transparent,var(--one-primary),transparent) no-repeat;background-size:40% 100%;animation:one-progress 1.2s ease-in-out infinite}
567
+ .one-progress:indeterminate::-webkit-progress-bar{background:transparent}
568
+ .one-progress:indeterminate::-moz-progress-bar{background:transparent}
569
+ .one-spinner{display:inline-block;flex:none;width:20px;height:20px;border:2px solid var(--one-border);border-top-color:var(--one-primary);border-radius:50%;vertical-align:middle;animation:one-spin .8s linear infinite}
570
+ .one-spinner-lg{width:36px;height:36px;border-width:3px}
571
+ .one-loading-inline{display:inline-flex;align-items:center;gap:8px;color:var(--one-muted)}
572
+ @keyframes one-spin{to{transform:rotate(360deg)}}
573
+ @keyframes one-progress{0%{background-position:-60% 0}100%{background-position:160% 0}}
574
+ .one-switch:focus-visible,.one-check input:focus-visible,.one-icon-btn:focus-visible,.one-tags-control:focus-within,.one-accordion-trigger:focus-visible,.one-tab-panel:focus-visible{outline:2px solid var(--one-primary);outline-offset:2px}
575
+ .one-select-control{display:flex;align-items:center;gap:2px;min-width:0;min-height:36px;padding:0 2px 0 0;border:1px solid var(--one-border);border-radius:var(--one-radius);background:var(--one-input)}
576
+ .one-select-control:focus-within{outline:2px solid var(--one-primary);outline-offset:2px}
577
+ .one-select-control .one-input{flex:1 1 auto;min-width:0;min-height:34px;border:0;background:transparent}
578
+ .one-select-control .one-input:focus-visible{outline:0}
579
+ .one-select-control:has(.one-input[aria-invalid=true]),.one-tags-control:has(.one-tags-input[aria-invalid=true]){border-color:var(--one-error)}
580
+ .one-icon-btn{font:inherit;flex:none;display:inline-flex;align-items:center;justify-content:center;min-width:32px;min-height:32px;padding:0;border:0;border-radius:var(--one-radius);background:transparent;color:var(--one-muted);cursor:pointer}
581
+ .one-icon-btn:hover{color:var(--one-fg);background:var(--one-surface)}
582
+ .one-icon-btn:disabled{opacity:.55;cursor:not-allowed}
583
+ .one-listbox-select .one-option{flex-direction:row;align-items:flex-start;gap:8px}
584
+ .one-listbox-select .one-option[aria-selected=true]{outline:0;background:transparent;font-weight:600}
585
+ .one-listbox-select .one-option.one-active{background:var(--one-surface);outline:2px solid var(--one-primary);outline-offset:-2px}
586
+ .one-listbox-select .one-option:hover{background:var(--one-surface)}
587
+ .one-listbox-select .one-option[aria-disabled=true]{opacity:.55;cursor:not-allowed}
588
+ .one-option-check{flex:none;width:1em;color:var(--one-primary)}
589
+ .one-option-text{display:flex;flex-direction:column;min-width:0}
590
+ .one-tags-control{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:36px;padding:4px 6px;border:1px solid var(--one-border);border-radius:var(--one-radius);background:var(--one-input);cursor:text}
591
+ .one-tags-control[aria-disabled=true]{opacity:.55;cursor:not-allowed}
592
+ .one-tags-control .one-chips{margin:0}
593
+ .one-tags-input{font:inherit;flex:1 1 120px;min-width:80px;min-height:28px;padding:2px 4px;border:0;outline:0;background:transparent;color:var(--one-fg)}
594
+ .one-dialog{margin:0;padding:16px;border:0;background:transparent;color:var(--one-fg);width:100%;max-width:none;max-height:none;overflow:visible}
595
+ .one-dialog:modal{top:var(--one-viewport-top,0px);bottom:auto;height:max(200px,var(--one-viewport-height,100%));display:flex;align-items:center;justify-content:center}
596
+ .one-dialog::backdrop{background:var(--one-backdrop,rgba(0,0,0,.32));-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
597
+ .one-dialog-panel{display:flex;flex-direction:column;width:100%;max-width:560px;max-height:100%;min-height:0;background:var(--one-raised);color:var(--one-fg);border:1px solid var(--one-border);border-radius:calc(var(--one-radius) + 6px);box-shadow:var(--one-shadow)}
598
+ .one-dialog-sm .one-dialog-panel{max-width:400px}
599
+ .one-dialog-lg .one-dialog-panel{max-width:800px}
600
+ .one-dialog-header{display:flex;align-items:flex-start;gap:8px;padding:16px 16px 8px}
601
+ .one-dialog-title{flex:1 1 auto;min-width:0;margin:0;font-size:1.1rem}
602
+ .one-dialog-body{flex:1 1 auto;min-height:0;overflow:auto;padding:0 16px 16px}
603
+ .one-dialog-footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--one-border)}
604
+ .one-toast-region{inset:auto 16px 16px auto;margin:0;padding:0;border:0;background:transparent;color:var(--one-fg);overflow:visible;width:min(360px,calc(100% - 32px));flex-direction:column;gap:8px}
605
+ .one-toast-region:not([popover]){display:flex;margin:12px 0 0 auto}
606
+ .one-toast-region[popover]:popover-open{display:flex}
607
+ .one-toast{display:flex;align-items:flex-start;gap:8px;margin:0;box-shadow:var(--one-shadow)}
608
+ .one-toast-text{flex:1 1 auto;min-width:0}
609
+ .one-toast-title{display:block;font-weight:600}
610
+ .one-tooltip-bubble{position:absolute;z-index:30;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%);width:max-content;max-width:min(280px,90vw);padding:4px 8px;border-radius:var(--one-radius);background:var(--one-fg);color:var(--one-bg);font-size:.8125rem;font-weight:400;line-height:1.4;text-align:start;white-space:normal;box-shadow:var(--one-shadow)}
611
+ .one-tooltip-bubble[data-placement=bottom]{bottom:auto;top:calc(100% + 6px)}
612
+ .one-tooltip-bubble[data-align=start]{left:0;transform:none}
613
+ .one-tooltip-bubble[data-align=end]{left:auto;right:0;transform:none}
614
+ .one-menu-list{position:absolute;z-index:20;top:calc(100% + 4px);left:0;min-width:180px;max-width:min(320px,90vw);margin:0;padding:4px 0;list-style:none;background:var(--one-raised);border:1px solid var(--one-border);border-radius:var(--one-radius);box-shadow:var(--one-shadow)}
615
+ .one-menu-list[data-placement=top]{top:auto;bottom:calc(100% + 4px)}
616
+ .one-menu-list[data-align=end]{left:auto;right:0}
617
+ .one-menu-item{display:flex;align-items:center;gap:8px;padding:8px 12px;color:var(--one-fg);cursor:pointer;white-space:nowrap}
618
+ .one-menu-item:hover,.one-menu-item:focus{background:var(--one-surface)}
619
+ .one-menu-item:focus-visible{outline:2px solid var(--one-primary);outline-offset:-2px}
620
+ .one-menu-item[aria-disabled=true]{opacity:.55;cursor:not-allowed}
621
+ .one-menu-item-danger{color:var(--one-error)}
622
+ .one-menu-sep{height:1px;margin:4px 0;background:var(--one-border)}
623
+ .one-avatar{display:inline-flex;align-items:center;justify-content:center;flex:none;width:36px;height:36px;border-radius:50%;overflow:hidden;font-size:.875rem;font-weight:600;line-height:1;color:var(--one-bg);background:var(--one-chart-1);user-select:none}
624
+ .one-avatar img{display:block;width:100%;height:100%;object-fit:cover}
625
+ .one-avatar-sm{width:28px;height:28px;font-size:.75rem}
626
+ .one-avatar-lg{width:48px;height:48px;font-size:1.1rem}
627
+ .one-avatar-c2{background:var(--one-chart-2)}.one-avatar-c3{background:var(--one-chart-3)}.one-avatar-c4{background:var(--one-chart-4)}.one-avatar-c5{background:var(--one-chart-5)}.one-avatar-c6{background:var(--one-chart-6)}
628
+ .one-tab-panel{min-width:0}
629
+ .one-accordion{border:1px solid var(--one-border);border-radius:calc(var(--one-radius) + 2px);overflow:hidden}
630
+ .one-accordion-heading:not(:first-child){border-top:1px solid var(--one-border)}
631
+ .one-accordion-heading{margin:0;font-size:1rem}
632
+ .one-accordion-trigger{font:inherit;font-weight:600;display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:44px;padding:10px 14px;border:0;background:var(--one-surface);color:var(--one-fg);text-align:start;cursor:pointer}
633
+ .one-accordion-trigger:hover{background:var(--one-raised)}
634
+ .one-accordion-icon{flex:none;color:var(--one-muted);transition:transform .15s}
635
+ .one-accordion-trigger[aria-expanded=true] .one-accordion-icon{transform:rotate(180deg)}
636
+ .one-accordion-panel{padding:12px 14px;min-width:0}
637
+ @media (prefers-reduced-motion:reduce){.one-spinner{animation-duration:2.4s}.one-progress:indeterminate{animation-duration:3.6s}.one-switch,.one-accordion-icon,.one-progress::-webkit-progress-value{transition:none}}
638
+ @media (forced-colors:active){.one-switch{forced-color-adjust:none}.one-badge,.one-tooltip-bubble{border:1px solid CanvasText}}
467
639
  [hidden]{display:none !important}
468
640
  `;
469
641
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}