@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 +37 -0
- package/README.md +107 -7
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +181 -9
- package/dist/client.js.map +1 -1
- package/dist/components.d.ts +161 -38
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +1145 -11
- package/dist/components.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
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
|
|
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` |
|
|
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`, `
|
|
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;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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) };
|
|
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 (
|
|
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
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,+FAA+F;AAC/F,4FAA4F;AAC5F,oHAAoH;AACpH,0FAA0F;AAC1F,EAAE;AACF,kHAAkH;AAClH,EAAE;AACF,yGAAyG;AACzG,yEAAyE;AACzE,mHAAmH;AACnH,+DAA+D;AAC/D,yHAAyH;AACzH,yGAAyG;AACzG,qEAAqE;AACrE,iDAAiD;AACjD,gHAAgH;AAChH,iGAAiG;AACjG,kFAAkF;AAElF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAE/E,uEAAuE;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAA;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AAExC,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAA;AACtC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA;AACnC,gEAAgE;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAClD,+HAA+H;AAC/H,MAAM,CAAC,MAAM,aAAa,GAAG,0EAA0E,CAAA;AACvG,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAkBjC,6FAA6F;AAC7F,MAAM,CAAC,MAAM,wBAAwB,GAAG,6CAA6C,CAAA;AAErF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAmC,EAAE,MAAkC;IACvG,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAC/I,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAChJ,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|