@edsis/ui 21.3.6 → 21.3.8
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/fesm2022/edsis-ui-avatar.mjs +1 -1
- package/fesm2022/edsis-ui-avatar.mjs.map +1 -1
- package/fesm2022/edsis-ui-card.mjs +1 -1
- package/fesm2022/edsis-ui-card.mjs.map +1 -1
- package/fesm2022/edsis-ui-chart.mjs +12 -12
- package/fesm2022/edsis-ui-chart.mjs.map +1 -1
- package/fesm2022/edsis-ui-composer.mjs +2 -2
- package/fesm2022/edsis-ui-composer.mjs.map +1 -1
- package/fesm2022/edsis-ui-editor.mjs +9 -2
- package/fesm2022/edsis-ui-editor.mjs.map +1 -1
- package/fesm2022/edsis-ui-input-group.mjs +2 -2
- package/fesm2022/edsis-ui-input-group.mjs.map +1 -1
- package/fesm2022/edsis-ui-kbd.mjs +1 -1
- package/fesm2022/edsis-ui-kbd.mjs.map +1 -1
- package/fesm2022/edsis-ui-layout.mjs +91 -43
- package/fesm2022/edsis-ui-layout.mjs.map +1 -1
- package/fesm2022/edsis-ui-nav.mjs +17 -11
- package/fesm2022/edsis-ui-nav.mjs.map +1 -1
- package/fesm2022/edsis-ui-page.mjs +42 -13
- package/fesm2022/edsis-ui-page.mjs.map +1 -1
- package/fesm2022/edsis-ui-pillbox.mjs +1 -1
- package/fesm2022/edsis-ui-pillbox.mjs.map +1 -1
- package/fesm2022/edsis-ui-scroll-area.mjs +2 -2
- package/fesm2022/edsis-ui-scroll-area.mjs.map +1 -1
- package/fesm2022/edsis-ui-theme.mjs +7 -3
- package/fesm2022/edsis-ui-theme.mjs.map +1 -1
- package/fesm2022/edsis-ui-timeline.mjs +17 -17
- package/fesm2022/edsis-ui-timeline.mjs.map +1 -1
- package/layout/README.md +53 -36
- package/package.json +1 -1
- package/page/README.md +103 -5
- package/types/edsis-ui-editor.d.ts +1 -0
- package/types/edsis-ui-layout.d.ts +29 -15
- package/types/edsis-ui-page.d.ts +26 -3
- package/types/edsis-ui-theme.d.ts +6 -2
package/layout/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @edsis/ui/layout
|
|
2
2
|
|
|
3
|
-
Primitive layout projection untuk menyusun shell UI dengan satu root `ui-layout`, satu variant layout (`vertical`, `horizontal`, atau `
|
|
3
|
+
Primitive layout projection untuk menyusun shell UI dengan satu root `ui-layout`, satu variant layout (`vertical`, `horizontal`, `empty`, atau `fluid`), slot `ui-layout-nav`, dan area `ui-layout-content` yang menjadi scroll container utama.
|
|
4
4
|
|
|
5
5
|
README ini mendokumentasikan seluruh API publik yang diekspor oleh package agar consumer bisa memahami kontrak komponen, type, service, dan perilaku layout tanpa perlu membaca source code.
|
|
6
6
|
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
UiLayoutComponent,
|
|
15
15
|
UiLayoutContentComponent,
|
|
16
16
|
UiLayoutEmptyComponent,
|
|
17
|
+
UiLayoutFluidComponent,
|
|
17
18
|
UiLayoutHorizontalComponent,
|
|
18
19
|
UiLayoutNavComponent,
|
|
19
20
|
UiLayoutVerticalComponent,
|
|
@@ -65,10 +66,10 @@ Struktur yang direkomendasikan adalah sebagai berikut.
|
|
|
65
66
|
|
|
66
67
|
```html
|
|
67
68
|
<ui-layout>
|
|
68
|
-
<ui-layout-vertical | ui-layout-horizontal | ui-layout-empty>
|
|
69
|
+
<ui-layout-vertical | ui-layout-horizontal | ui-layout-empty | ui-layout-fluid>
|
|
69
70
|
<ui-layout-nav>...</ui-layout-nav>
|
|
70
71
|
<ui-layout-content>...</ui-layout-content>
|
|
71
|
-
</ui-layout-vertical | ui-layout-horizontal | ui-layout-empty>
|
|
72
|
+
</ui-layout-vertical | ui-layout-horizontal | ui-layout-empty | ui-layout-fluid>
|
|
72
73
|
</ui-layout>
|
|
73
74
|
```
|
|
74
75
|
|
|
@@ -77,6 +78,7 @@ Aturan penggunaannya:
|
|
|
77
78
|
- Gunakan tepat satu variant layout di dalam `ui-layout`.
|
|
78
79
|
- Untuk layout `vertical` dan `horizontal`, urutan child yang umum adalah `ui-layout-nav` lalu `ui-layout-content`.
|
|
79
80
|
- Untuk layout `empty`, biasanya cukup `ui-layout-content`.
|
|
81
|
+
- Untuk layout `fluid`, child dapat berupa konten page tunggal yang ingin dipusatkan terhadap frame.
|
|
80
82
|
- `ui-layout-content` adalah area yang memiliki `overflow-auto`, jadi konten utama sebaiknya ditempatkan di sana.
|
|
81
83
|
- Pada mode `vertical`, lebar nav mengikuti kontennya sendiri (`w-max`), bukan dipaksa oleh root layout.
|
|
82
84
|
|
|
@@ -120,6 +122,16 @@ Aturan penggunaannya:
|
|
|
120
122
|
</ui-layout>
|
|
121
123
|
```
|
|
122
124
|
|
|
125
|
+
### Fluid
|
|
126
|
+
|
|
127
|
+
```html
|
|
128
|
+
<ui-layout surface="grid" appearance="border-rail" width="fluid">
|
|
129
|
+
<ui-layout-fluid>
|
|
130
|
+
<section class="w-full max-w-xl border border-border bg-card/90 p-6">Content</section>
|
|
131
|
+
</ui-layout-fluid>
|
|
132
|
+
</ui-layout>
|
|
133
|
+
```
|
|
134
|
+
|
|
123
135
|
## Pola page-level yang direkomendasikan
|
|
124
136
|
|
|
125
137
|
Untuk halaman yang memiliki default sendiri tetapi tetap harus tunduk pada nilai local storage yang sudah tersimpan, pakai `LayoutService.registerDefaults(...)` sekali di level page, lalu bind root `ui-layout` ke signal service.
|
|
@@ -184,13 +196,15 @@ Inputs:
|
|
|
184
196
|
|
|
185
197
|
Behavior:
|
|
186
198
|
|
|
187
|
-
-
|
|
188
|
-
-
|
|
199
|
+
- Jika consumer memberi input manual `surface`, `appearance`, atau `width`, nilai itu dipakai sebagai override in-memory untuk instance aktif tanpa menulis `localStorage`.
|
|
200
|
+
- Jika input manual kosong, primitive mendaftarkan default `surface`, `appearance`, dan `width` ke `LayoutService` hanya saat local storage belum memiliki nilai valid.
|
|
201
|
+
- Nilai visual final selalu dibaca kembali dari `LayoutService`, sehingga child primitive tetap membaca state yang sama selama instance aktif.
|
|
189
202
|
- Menambahkan atribut host `data-surface`, `data-layout-appearance`, `data-layout-style`, `data-layout-width`, dan `data-layout-type`.
|
|
190
|
-
- Root tidak menyediakan input `type`. Type aktif dikendalikan oleh variant layout yang dirender, atau oleh consumer melalui `LayoutService.registerDefaults({ type })` sebelum template mengevaluasi `layout.type()`.
|
|
203
|
+
- Root tidak menyediakan input `type`. Type aktif dikendalikan oleh variant layout yang dirender sebagai override in-memory, atau oleh consumer melalui `LayoutService.registerDefaults({ type })` sebelum template mengevaluasi `layout.type()`.
|
|
191
204
|
- Selalu merender frame border.
|
|
192
205
|
- Jika `appearance="border-rail"`, root menambah rail dekoratif di empat sudut frame dan memanjangkan garis sudut itu sampai tepi viewport.
|
|
193
206
|
- Jika `width="container"`, frame dipusatkan mulai breakpoint `lg` dengan container behavior.
|
|
207
|
+
- Jika `width="fluid"` dan variant aktif adalah `ui-layout-fluid`, frame akan shrink mengikuti tinggi dan lebar konten lalu dipusatkan terhadap viewport.
|
|
194
208
|
|
|
195
209
|
### `UiLayoutVerticalComponent`
|
|
196
210
|
|
|
@@ -206,7 +220,7 @@ Inputs:
|
|
|
206
220
|
|
|
207
221
|
Behavior:
|
|
208
222
|
|
|
209
|
-
- Mengatur `LayoutService.type` menjadi `'vertical'`.
|
|
223
|
+
- Mengatur `LayoutService.type` menjadi `'vertical'` hanya untuk state aktif dan tidak menulis `localStorage`.
|
|
210
224
|
- Menggunakan grid `grid-cols-[auto_minmax(0,1fr)]`.
|
|
211
225
|
- Dalam mode `border-rail`, host dibuat `overflow-visible` agar rail nav/frame dapat mengekstensi keluar area frame.
|
|
212
226
|
|
|
@@ -224,7 +238,7 @@ Inputs:
|
|
|
224
238
|
|
|
225
239
|
Behavior:
|
|
226
240
|
|
|
227
|
-
- Mengatur `LayoutService.type` menjadi `'horizontal'`.
|
|
241
|
+
- Mengatur `LayoutService.type` menjadi `'horizontal'` hanya untuk state aktif dan tidak menulis `localStorage`.
|
|
228
242
|
- Menggunakan flex column untuk menyusun nav dan content.
|
|
229
243
|
- Tidak merender rail nav vertikal khusus.
|
|
230
244
|
|
|
@@ -242,7 +256,7 @@ Inputs:
|
|
|
242
256
|
|
|
243
257
|
Behavior:
|
|
244
258
|
|
|
245
|
-
- Mengatur `LayoutService.type` menjadi `'empty'`.
|
|
259
|
+
- Mengatur `LayoutService.type` menjadi `'empty'` hanya untuk state aktif dan tidak menulis `localStorage`.
|
|
246
260
|
- Menyediakan wrapper penuh untuk satu area konten.
|
|
247
261
|
- `ui-layout-nav` akan tersembunyi jika tetap dirender di mode ini.
|
|
248
262
|
|
|
@@ -320,16 +334,18 @@ Gunakan `appearance` di template Angular. Alias `layout-style` tetap tersedia un
|
|
|
320
334
|
|
|
321
335
|
Nilai `width` yang tersedia berasal dari `UI_LAYOUT_WIDTHS`.
|
|
322
336
|
|
|
323
|
-
| Nilai | Perilaku
|
|
324
|
-
| ------------- |
|
|
325
|
-
| `'full'` | Root menggunakan padding `p-4`, frame dan content tetap full width.
|
|
326
|
-
| `'wide'` | Di bawah `lg` tampil seperti `full`, mulai `lg` memakai padding `p-12` di root.
|
|
327
|
-
| `'container'` | Di bawah `lg` tampil seperti `full`, mulai `lg` root memakai `py-16` tanpa padding horizontal, lalu frame/content dipusatkan dengan container behavior.
|
|
337
|
+
| Nilai | Perilaku |
|
|
338
|
+
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
339
|
+
| `'full'` | Root menggunakan padding `p-4`, frame dan content tetap full width. |
|
|
340
|
+
| `'wide'` | Di bawah `lg` tampil seperti `full`, mulai `lg` memakai padding `p-12` di root. |
|
|
341
|
+
| `'container'` | Di bawah `lg` tampil seperti `full`, mulai `lg` root memakai `py-16` tanpa padding horizontal, lalu frame/content dipusatkan dengan container behavior. |
|
|
342
|
+
| `'fluid'` | Dipakai untuk `ui-layout-fluid`: root dan rail menjadi kanvas centering, frame shrink mengikuti ukuran konten, lalu tetap dibatasi `max-width` dan `max-height` viewport. |
|
|
328
343
|
|
|
329
344
|
Ringkasnya:
|
|
330
345
|
|
|
331
346
|
- `wide` dan `container` sengaja collapse ke tampilan `full` di bawah breakpoint `lg`.
|
|
332
347
|
- Perbedaan utama `container` muncul mulai `lg`, saat frame dan content tidak lagi full bleed secara horizontal.
|
|
348
|
+
- `fluid` ditujukan untuk halaman tunggal seperti auth, splash, atau status page yang membutuhkan frame auto-centered di kedua sumbu.
|
|
333
349
|
|
|
334
350
|
## `LayoutService`
|
|
335
351
|
|
|
@@ -353,30 +369,31 @@ Readonly signals:
|
|
|
353
369
|
|
|
354
370
|
Methods:
|
|
355
371
|
|
|
356
|
-
| Method | Signature
|
|
357
|
-
| --------------------- |
|
|
358
|
-
| `registerSurface` | `(surface: UiLayoutSurface) => void`
|
|
359
|
-
| `registerType` | `(type: UiLayoutType) => void`
|
|
360
|
-
| `registerAppearance` | `(appearance: UiLayoutStyle) => void`
|
|
361
|
-
| `registerStyle` | `(style: UiLayoutStyle) => void`
|
|
362
|
-
| `registerWidth` | `(width: UiLayoutWidth) => void`
|
|
363
|
-
| `registerDefaults` | `(defaults: { surface?, appearance?, type?, width? }) => this`
|
|
364
|
-
| `setSurface` | `(surface: UiLayoutSurface) => void`
|
|
365
|
-
| `setType` | `(type: UiLayoutType) => void`
|
|
366
|
-
| `setAppearance` | `(appearance: UiLayoutStyle) => void`
|
|
367
|
-
| `setStyle` | `(style: UiLayoutStyle) => void`
|
|
368
|
-
| `setWidth` | `(width: UiLayoutWidth) => void`
|
|
369
|
-
| `getStoredSurface` | `() => UiLayoutSurface`
|
|
370
|
-
| `getStoredType` | `() => UiLayoutType`
|
|
371
|
-
| `getStoredAppearance` | `() => UiLayoutStyle`
|
|
372
|
-
| `getStoredStyle` | `() => UiLayoutStyle`
|
|
373
|
-
| `getStoredWidth` | `() => UiLayoutWidth`
|
|
372
|
+
| Method | Signature | Deskripsi |
|
|
373
|
+
| --------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
374
|
+
| `registerSurface` | `(surface: UiLayoutSurface) => void` | Mendaftarkan fallback `layout-surface` ke local storage hanya jika storage belum memiliki nilai valid. Jika sudah ada nilai valid, service tetap memakai nilai yang tersimpan. |
|
|
375
|
+
| `registerType` | `(type: UiLayoutType) => void` | Mendaftarkan fallback `layout-type` ke local storage hanya jika storage belum memiliki nilai valid. Jika sudah ada nilai valid, service tetap memakai nilai yang tersimpan. |
|
|
376
|
+
| `registerAppearance` | `(appearance: UiLayoutStyle) => void` | Mendaftarkan fallback `layout-appearance` ke local storage hanya jika storage belum memiliki nilai valid. Jika sudah ada nilai valid, service tetap memakai nilai yang tersimpan. |
|
|
377
|
+
| `registerStyle` | `(style: UiLayoutStyle) => void` | Alias kompatibilitas untuk `registerAppearance(...)`. |
|
|
378
|
+
| `registerWidth` | `(width: UiLayoutWidth) => void` | Mendaftarkan fallback `layout-width` ke local storage hanya jika storage belum memiliki nilai valid. Jika sudah ada nilai valid, service tetap memakai nilai yang tersimpan. |
|
|
379
|
+
| `registerDefaults` | `(defaults: { surface?, appearance?, type?, width? }) => this` | Mendaftarkan beberapa fallback sekaligus. Ini adalah API yang direkomendasikan untuk page-level default karena consumer cukup memanggil satu method dan tetap menghormati nilai storage yang sudah valid. |
|
|
380
|
+
| `setSurface` | `(surface: UiLayoutSurface, options?: { persist?: boolean }) => void` | Menulis surface ke signal. Secara default juga menulis `localStorage`, tetapi consumer dapat memakai `persist: false` untuk override sementara. |
|
|
381
|
+
| `setType` | `(type: UiLayoutType, options?: { persist?: boolean }) => void` | Menulis type ke signal. Secara default juga menulis `localStorage`, tetapi consumer dapat memakai `persist: false` untuk override sementara. |
|
|
382
|
+
| `setAppearance` | `(appearance: UiLayoutStyle, options?: { persist?: boolean }) => void` | Menulis appearance ke signal. Secara default juga menulis `layout-appearance`, tetapi consumer dapat memakai `persist: false` untuk override sementara. |
|
|
383
|
+
| `setStyle` | `(style: UiLayoutStyle, options?: { persist?: boolean }) => void` | Alias kompatibilitas untuk `setAppearance(...)`, termasuk opsi `persist`. |
|
|
384
|
+
| `setWidth` | `(width: UiLayoutWidth, options?: { persist?: boolean }) => void` | Menulis width ke signal. Secara default juga menulis `localStorage`, tetapi consumer dapat memakai `persist: false` untuk override sementara. |
|
|
385
|
+
| `getStoredSurface` | `() => UiLayoutSurface` | Membaca surface yang valid dari storage atau default. |
|
|
386
|
+
| `getStoredType` | `() => UiLayoutType` | Membaca type yang valid dari storage atau default. |
|
|
387
|
+
| `getStoredAppearance` | `() => UiLayoutStyle` | Membaca appearance yang valid dari storage atau default. |
|
|
388
|
+
| `getStoredStyle` | `() => UiLayoutStyle` | Alias kompatibilitas untuk `getStoredAppearance()`. |
|
|
389
|
+
| `getStoredWidth` | `() => UiLayoutWidth` | Membaca width yang valid dari storage atau default. |
|
|
374
390
|
|
|
375
391
|
Persistence behavior:
|
|
376
392
|
|
|
377
393
|
- Storage key: `layout-surface`, `layout-type`, `layout-appearance`, dan `layout-width`.
|
|
378
394
|
- Default value: `flat`, `vertical`, `flat`, dan `full`.
|
|
379
395
|
- `registerDefaults(...)` adalah API yang direkomendasikan untuk menetapkan default per halaman tanpa menimpa nilai valid yang sudah tersimpan sebelumnya.
|
|
396
|
+
- Manual template input pada `ui-layout` dan variant layout yang dirender consumer hanya mengubah state aktif; keduanya tidak lagi menulis `localStorage`.
|
|
380
397
|
- Method `registerSurface(...)`, `registerType(...)`, `registerAppearance(...)`, dan `registerWidth(...)` tetap tersedia bila consumer memang perlu registrasi yang lebih granular.
|
|
381
398
|
- Legacy storage key `layout-style` masih dibaca untuk kompatibilitas dan akan dibersihkan ketika appearance ditulis ulang ke `layout-appearance`.
|
|
382
399
|
- Aman untuk SSR karena hanya mengakses `localStorage` saat runtime browser tersedia.
|
|
@@ -408,20 +425,20 @@ Seluruh symbol berikut diekspor dari `@edsis/ui/layout/types`.
|
|
|
408
425
|
|
|
409
426
|
| Symbol | Nilai |
|
|
410
427
|
| ---------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
411
|
-
| `UiLayoutType` | `vertical`, `horizontal`, `empty`
|
|
428
|
+
| `UiLayoutType` | `vertical`, `horizontal`, `empty`, `fluid` |
|
|
412
429
|
| `UiLayoutSurface` | `flat`, `grid`, `honeycome`, `line-vertical`, `line-horizontal` |
|
|
413
430
|
| `UiLayoutStyle` | `flat`, `border-rail` |
|
|
414
|
-
| `UiLayoutWidth` | `full`, `wide`, `container`
|
|
431
|
+
| `UiLayoutWidth` | `full`, `wide`, `container`, `fluid` |
|
|
415
432
|
| `UiLayoutContextValue` | Objekt berbentuk `{ surface, type, appearance, style, width }` yang masing-masing berupa readonly signal. |
|
|
416
433
|
|
|
417
434
|
### Constants
|
|
418
435
|
|
|
419
436
|
| Symbol | Nilai |
|
|
420
437
|
| ---------------------------------- | ------------------------------------------------------------------- |
|
|
421
|
-
| `UI_LAYOUT_TYPES` | `['vertical', 'horizontal', 'empty']`
|
|
438
|
+
| `UI_LAYOUT_TYPES` | `['vertical', 'horizontal', 'empty', 'fluid']` |
|
|
422
439
|
| `UI_LAYOUT_SURFACES` | `['flat', 'grid', 'honeycome', 'line-vertical', 'line-horizontal']` |
|
|
423
440
|
| `UI_LAYOUT_STYLES` | `['flat', 'border-rail']` |
|
|
424
|
-
| `UI_LAYOUT_WIDTHS` | `['full', 'wide', 'container']`
|
|
441
|
+
| `UI_LAYOUT_WIDTHS` | `['full', 'wide', 'container', 'fluid']` |
|
|
425
442
|
| `UI_LAYOUT_DEFAULT_SURFACE` | `'flat'` |
|
|
426
443
|
| `UI_LAYOUT_DEFAULT_TYPE` | `'vertical'` |
|
|
427
444
|
| `UI_LAYOUT_DEFAULT_STYLE` | `'flat'` |
|
package/package.json
CHANGED
package/page/README.md
CHANGED
|
@@ -18,16 +18,96 @@ Primitive page shell untuk layout halaman dengan pendekatan nested component.
|
|
|
18
18
|
- `stacked`
|
|
19
19
|
- `side`
|
|
20
20
|
|
|
21
|
+
## Scroll Modes
|
|
22
|
+
|
|
23
|
+
- `content` (default): hanya `ui-page-content` yang menjadi area scroll. Pada variant `side`, `ui-page-side` dan `ui-page-content` sama-sama stretch ke parent dan masing-masing punya scroll sendiri.
|
|
24
|
+
- `page`: seluruh isi `ui-page` menjadi area scroll. Header, content, footer, dan pada variant `side` juga `ui-page-side` akan mengikuti tinggi content induk tanpa scroll internal.
|
|
25
|
+
|
|
26
|
+
## Height Modes
|
|
27
|
+
|
|
28
|
+
- `auto` (default): tinggi `ui-page-header` dan `ui-page-footer` mengikuti isi.
|
|
29
|
+
- `fix`: `ui-page-header` dan `ui-page-footer` dipaksa `h-12` dan `overflow-hidden`, sehingga isi yang melebihi tinggi tersebut akan terpotong.
|
|
30
|
+
|
|
31
|
+
## Behavior Summary
|
|
32
|
+
|
|
33
|
+
| Variant | `scroll="content"` | `scroll="page"` |
|
|
34
|
+
| --------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
35
|
+
| `stacked` | `ui-page-content` stretch ke tinggi yang tersedia dan menjadi area scroll | seluruh `ui-page` scroll bersama; header, content, footer ikut satu kanvas |
|
|
36
|
+
| `side` | `ui-page-side` dan `ui-page-content` sama-sama stretch ke parent dan punya scroll sendiri | `ui-page-side` dan `ui-page-content` mengikuti tinggi content induk tanpa scroll internal |
|
|
37
|
+
|
|
38
|
+
## Header And Footer Height
|
|
39
|
+
|
|
40
|
+
Saat memakai `height="fix"`, slot berikut tidak boleh melebihi tinggi tetap yang disediakan:
|
|
41
|
+
|
|
42
|
+
- `ui-page-header`: `h-12` dengan `overflow-hidden`
|
|
43
|
+
- `ui-page-footer`: `h-12` dengan `overflow-hidden`
|
|
44
|
+
|
|
21
45
|
## Side Modes
|
|
22
46
|
|
|
23
47
|
- `sticky`
|
|
24
48
|
- `drawer`
|
|
25
49
|
- `overlay`
|
|
26
50
|
|
|
27
|
-
##
|
|
51
|
+
## Examples
|
|
52
|
+
|
|
53
|
+
### Stacked with content scroll
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<ui-page variant="stacked">
|
|
57
|
+
<ui-page-header>
|
|
58
|
+
<h1>Executive summary</h1>
|
|
59
|
+
</ui-page-header>
|
|
60
|
+
|
|
61
|
+
<ui-page-content>
|
|
62
|
+
<p>Secara default, slot content yang menjadi area scroll.</p>
|
|
63
|
+
</ui-page-content>
|
|
64
|
+
|
|
65
|
+
<ui-page-footer>
|
|
66
|
+
<button type="button">Save</button>
|
|
67
|
+
</ui-page-footer>
|
|
68
|
+
</ui-page>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Stacked with fixed header and footer height
|
|
28
72
|
|
|
29
73
|
```html
|
|
30
|
-
<ui-page variant="
|
|
74
|
+
<ui-page variant="stacked" height="fix">
|
|
75
|
+
<ui-page-header>
|
|
76
|
+
<div class="h-20">Bagian ini akan terpotong ke tinggi h-12.</div>
|
|
77
|
+
</ui-page-header>
|
|
78
|
+
|
|
79
|
+
<ui-page-content>
|
|
80
|
+
<p>Content tetap mengikuti mode scroll yang aktif.</p>
|
|
81
|
+
</ui-page-content>
|
|
82
|
+
|
|
83
|
+
<ui-page-footer>
|
|
84
|
+
<div class="h-20">Footer juga tidak boleh melebihi h-12.</div>
|
|
85
|
+
</ui-page-footer>
|
|
86
|
+
</ui-page>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Stacked with page scroll
|
|
90
|
+
|
|
91
|
+
```html
|
|
92
|
+
<ui-page variant="stacked" scroll="page">
|
|
93
|
+
<ui-page-header>
|
|
94
|
+
<h1>Executive summary</h1>
|
|
95
|
+
</ui-page-header>
|
|
96
|
+
|
|
97
|
+
<ui-page-content>
|
|
98
|
+
<p>Semua area di dalam page ikut scroll bersama.</p>
|
|
99
|
+
</ui-page-content>
|
|
100
|
+
|
|
101
|
+
<ui-page-footer>
|
|
102
|
+
<button type="button">Save</button>
|
|
103
|
+
</ui-page-footer>
|
|
104
|
+
</ui-page>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Side with content scroll
|
|
108
|
+
|
|
109
|
+
```html
|
|
110
|
+
<ui-page variant="side" position="left" scroll="content">
|
|
31
111
|
<ui-page-header>
|
|
32
112
|
<ui-page-side-toggle ariaLabel="Toggle side">
|
|
33
113
|
<span>Open filters</span>
|
|
@@ -35,12 +115,30 @@ Primitive page shell untuk layout halaman dengan pendekatan nested component.
|
|
|
35
115
|
<h1>Page title</h1>
|
|
36
116
|
</ui-page-header>
|
|
37
117
|
|
|
38
|
-
<ui-page-side mode="
|
|
39
|
-
<p>
|
|
118
|
+
<ui-page-side mode="sticky">
|
|
119
|
+
<p>Side rail scroll sendiri.</p>
|
|
120
|
+
</ui-page-side>
|
|
121
|
+
|
|
122
|
+
<ui-page-content>
|
|
123
|
+
<p>Main content juga scroll sendiri.</p>
|
|
124
|
+
</ui-page-content>
|
|
125
|
+
</ui-page>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Side with page scroll
|
|
129
|
+
|
|
130
|
+
```html
|
|
131
|
+
<ui-page variant="side" position="left" scroll="page">
|
|
132
|
+
<ui-page-header>
|
|
133
|
+
<h1>Executive detail</h1>
|
|
134
|
+
</ui-page-header>
|
|
135
|
+
|
|
136
|
+
<ui-page-side mode="sticky">
|
|
137
|
+
<p>Side mengikuti tinggi content induk.</p>
|
|
40
138
|
</ui-page-side>
|
|
41
139
|
|
|
42
140
|
<ui-page-content>
|
|
43
|
-
<p>
|
|
141
|
+
<p>Root `ui-page` yang menjadi area scroll tunggal.</p>
|
|
44
142
|
</ui-page-content>
|
|
45
143
|
</ui-page>
|
|
46
144
|
```
|
|
@@ -114,6 +114,7 @@ declare class EditorContentComponent implements AfterViewInit, OnDestroy, Contro
|
|
|
114
114
|
protected handleBlur(): void;
|
|
115
115
|
protected handleKeydown(event: KeyboardEvent): void;
|
|
116
116
|
private exec;
|
|
117
|
+
private highlightColor;
|
|
117
118
|
private syncEmptyState;
|
|
118
119
|
private shortcutCommand;
|
|
119
120
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EditorContentComponent, never>;
|
|
@@ -2,10 +2,10 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
import { Signal } from '@angular/core';
|
|
3
3
|
import { UiNavComponent } from '@edsis/ui/nav';
|
|
4
4
|
|
|
5
|
-
declare const UI_LAYOUT_TYPES: readonly ["vertical", "horizontal", "empty"];
|
|
5
|
+
declare const UI_LAYOUT_TYPES: readonly ["vertical", "horizontal", "empty", "fluid"];
|
|
6
6
|
declare const UI_LAYOUT_SURFACES: readonly ["flat", "grid", "honeycome", "line-vertical", "line-horizontal"];
|
|
7
7
|
declare const UI_LAYOUT_STYLES: readonly ["flat", "border-rail"];
|
|
8
|
-
declare const UI_LAYOUT_WIDTHS: readonly ["full", "wide", "container"];
|
|
8
|
+
declare const UI_LAYOUT_WIDTHS: readonly ["full", "wide", "container", "fluid"];
|
|
9
9
|
type UiLayoutType = (typeof UI_LAYOUT_TYPES)[number];
|
|
10
10
|
type UiLayoutSurface = (typeof UI_LAYOUT_SURFACES)[number];
|
|
11
11
|
type UiLayoutStyle = (typeof UI_LAYOUT_STYLES)[number];
|
|
@@ -31,6 +31,9 @@ declare function isUiLayoutType(value: string | null): value is UiLayoutType;
|
|
|
31
31
|
declare function isUiLayoutStyle(value: string | null): value is UiLayoutStyle;
|
|
32
32
|
declare function isUiLayoutWidth(value: string | null): value is UiLayoutWidth;
|
|
33
33
|
|
|
34
|
+
interface LayoutMutationOptions {
|
|
35
|
+
persist?: boolean;
|
|
36
|
+
}
|
|
34
37
|
declare class LayoutService {
|
|
35
38
|
private readonly platformId;
|
|
36
39
|
private readonly surfaceState;
|
|
@@ -38,10 +41,10 @@ declare class LayoutService {
|
|
|
38
41
|
private readonly styleState;
|
|
39
42
|
private readonly widthState;
|
|
40
43
|
readonly surface: _angular_core.Signal<"flat" | "grid" | "honeycome" | "line-vertical" | "line-horizontal">;
|
|
41
|
-
readonly type: _angular_core.Signal<"vertical" | "horizontal" | "empty">;
|
|
44
|
+
readonly type: _angular_core.Signal<"vertical" | "horizontal" | "empty" | "fluid">;
|
|
42
45
|
readonly appearance: _angular_core.Signal<"flat" | "border-rail">;
|
|
43
46
|
readonly style: _angular_core.Signal<"flat" | "border-rail">;
|
|
44
|
-
readonly width: _angular_core.Signal<"full" | "wide" | "container">;
|
|
47
|
+
readonly width: _angular_core.Signal<"fluid" | "full" | "wide" | "container">;
|
|
45
48
|
registerDefaults(defaults: {
|
|
46
49
|
surface?: UiLayoutSurface;
|
|
47
50
|
appearance?: UiLayoutStyle;
|
|
@@ -53,11 +56,11 @@ declare class LayoutService {
|
|
|
53
56
|
registerAppearance(appearance: UiLayoutStyle): void;
|
|
54
57
|
registerStyle(style: UiLayoutStyle): void;
|
|
55
58
|
registerWidth(width: UiLayoutWidth): void;
|
|
56
|
-
setSurface(surface: UiLayoutSurface): void;
|
|
57
|
-
setType(type: UiLayoutType): void;
|
|
58
|
-
setAppearance(appearance: UiLayoutStyle): void;
|
|
59
|
-
setStyle(style: UiLayoutStyle): void;
|
|
60
|
-
setWidth(width: UiLayoutWidth): void;
|
|
59
|
+
setSurface(surface: UiLayoutSurface, options?: LayoutMutationOptions): void;
|
|
60
|
+
setType(type: UiLayoutType, options?: LayoutMutationOptions): void;
|
|
61
|
+
setAppearance(appearance: UiLayoutStyle, options?: LayoutMutationOptions): void;
|
|
62
|
+
setStyle(style: UiLayoutStyle, options?: LayoutMutationOptions): void;
|
|
63
|
+
setWidth(width: UiLayoutWidth, options?: LayoutMutationOptions): void;
|
|
61
64
|
getStoredSurface(): UiLayoutSurface;
|
|
62
65
|
getStoredType(): UiLayoutType;
|
|
63
66
|
getStoredAppearance(): UiLayoutStyle;
|
|
@@ -78,24 +81,26 @@ declare class UiLayoutComponent {
|
|
|
78
81
|
readonly surface: _angular_core.InputSignal<"flat" | "grid" | "honeycome" | "line-vertical" | "line-horizontal" | null>;
|
|
79
82
|
readonly appearance: _angular_core.InputSignal<"flat" | "border-rail" | null>;
|
|
80
83
|
readonly layoutStyleAttribute: _angular_core.InputSignal<"flat" | "border-rail" | null>;
|
|
81
|
-
readonly width: _angular_core.InputSignal<"full" | "wide" | "container" | null>;
|
|
84
|
+
readonly width: _angular_core.InputSignal<"fluid" | "full" | "wide" | "container" | null>;
|
|
82
85
|
readonly class: _angular_core.InputSignal<string>;
|
|
83
86
|
protected readonly appearanceInput: _angular_core.Signal<"flat" | "border-rail" | null>;
|
|
84
87
|
protected readonly resolvedSurface: _angular_core.Signal<"flat" | "grid" | "honeycome" | "line-vertical" | "line-horizontal">;
|
|
85
88
|
protected readonly resolvedAppearance: _angular_core.Signal<"flat" | "border-rail">;
|
|
86
89
|
protected readonly resolvedStyle: _angular_core.Signal<"flat" | "border-rail">;
|
|
87
|
-
protected readonly resolvedWidth: _angular_core.Signal<"full" | "wide" | "container">;
|
|
90
|
+
protected readonly resolvedWidth: _angular_core.Signal<"fluid" | "full" | "wide" | "container">;
|
|
88
91
|
protected readonly isBorderRail: _angular_core.Signal<boolean>;
|
|
92
|
+
protected readonly isFluidFrame: _angular_core.Signal<boolean>;
|
|
89
93
|
protected readonly showsHorizontalInsetRails: _angular_core.Signal<boolean>;
|
|
90
|
-
protected readonly
|
|
94
|
+
protected readonly frameStageClasses: _angular_core.Signal<string>;
|
|
91
95
|
protected readonly railAnchorClasses: _angular_core.Signal<string>;
|
|
92
96
|
protected readonly contentShellClasses: _angular_core.Signal<string>;
|
|
93
97
|
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
94
98
|
protected readonly frameClasses: _angular_core.Signal<string>;
|
|
99
|
+
protected readonly frameLayerClasses: _angular_core.Signal<string>;
|
|
95
100
|
constructor();
|
|
96
101
|
private surfaceClasses;
|
|
97
|
-
private
|
|
98
|
-
private
|
|
102
|
+
private widthPaddingClasses;
|
|
103
|
+
private frameSizeClasses;
|
|
99
104
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiLayoutComponent, never>;
|
|
100
105
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiLayoutComponent, "ui-layout", never, { "surface": { "alias": "surface"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "layoutStyleAttribute": { "alias": "layout-style"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
101
106
|
}
|
|
@@ -127,6 +132,15 @@ declare class UiLayoutEmptyComponent {
|
|
|
127
132
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiLayoutEmptyComponent, "ui-layout-empty", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
128
133
|
}
|
|
129
134
|
|
|
135
|
+
declare class UiLayoutFluidComponent {
|
|
136
|
+
private readonly layout;
|
|
137
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
138
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
139
|
+
constructor();
|
|
140
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiLayoutFluidComponent, never>;
|
|
141
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiLayoutFluidComponent, "ui-layout-fluid", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
142
|
+
}
|
|
143
|
+
|
|
130
144
|
declare class UiLayoutNavComponent {
|
|
131
145
|
protected readonly layout: LayoutService;
|
|
132
146
|
protected readonly projectedNav: _angular_core.Signal<UiNavComponent | undefined>;
|
|
@@ -149,5 +163,5 @@ declare class UiLayoutContentComponent {
|
|
|
149
163
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiLayoutContentComponent, "ui-layout-content", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
150
164
|
}
|
|
151
165
|
|
|
152
|
-
export { LayoutService, UI_LAYOUT_APPEARANCE_STORAGE_KEY, UI_LAYOUT_DEFAULT_STYLE, UI_LAYOUT_DEFAULT_SURFACE, UI_LAYOUT_DEFAULT_TYPE, UI_LAYOUT_DEFAULT_WIDTH, UI_LAYOUT_STYLES, UI_LAYOUT_STYLE_STORAGE_KEY, UI_LAYOUT_SURFACES, UI_LAYOUT_SURFACE_STORAGE_KEY, UI_LAYOUT_TYPES, UI_LAYOUT_TYPE_STORAGE_KEY, UI_LAYOUT_WIDTHS, UI_LAYOUT_WIDTH_STORAGE_KEY, UiLayoutComponent, UiLayoutContentComponent, UiLayoutEmptyComponent, UiLayoutHorizontalComponent, UiLayoutNavComponent, UiLayoutVerticalComponent, isUiLayoutStyle, isUiLayoutSurface, isUiLayoutType, isUiLayoutWidth };
|
|
166
|
+
export { LayoutService, UI_LAYOUT_APPEARANCE_STORAGE_KEY, UI_LAYOUT_DEFAULT_STYLE, UI_LAYOUT_DEFAULT_SURFACE, UI_LAYOUT_DEFAULT_TYPE, UI_LAYOUT_DEFAULT_WIDTH, UI_LAYOUT_STYLES, UI_LAYOUT_STYLE_STORAGE_KEY, UI_LAYOUT_SURFACES, UI_LAYOUT_SURFACE_STORAGE_KEY, UI_LAYOUT_TYPES, UI_LAYOUT_TYPE_STORAGE_KEY, UI_LAYOUT_WIDTHS, UI_LAYOUT_WIDTH_STORAGE_KEY, UiLayoutComponent, UiLayoutContentComponent, UiLayoutEmptyComponent, UiLayoutFluidComponent, UiLayoutHorizontalComponent, UiLayoutNavComponent, UiLayoutVerticalComponent, isUiLayoutStyle, isUiLayoutSurface, isUiLayoutType, isUiLayoutWidth };
|
|
153
167
|
export type { UiLayoutContextValue, UiLayoutStyle, UiLayoutSurface, UiLayoutType, UiLayoutWidth };
|
package/types/edsis-ui-page.d.ts
CHANGED
|
@@ -3,19 +3,29 @@ import * as _angular_core from '@angular/core';
|
|
|
3
3
|
declare const UI_PAGE_VARIANTS: readonly ["stacked", "side"];
|
|
4
4
|
declare const UI_PAGE_SIDE_POSITIONS: readonly ["left", "right"];
|
|
5
5
|
declare const UI_PAGE_SIDE_MODES: readonly ["sticky", "drawer", "overlay"];
|
|
6
|
+
declare const UI_PAGE_SCROLL_VALUES: readonly ["content", "page"];
|
|
7
|
+
declare const UI_PAGE_HEIGHT_VALUES: readonly ["auto", "fix"];
|
|
6
8
|
type UiPageVariant = (typeof UI_PAGE_VARIANTS)[number];
|
|
7
9
|
type UiPageSidePosition = (typeof UI_PAGE_SIDE_POSITIONS)[number];
|
|
8
10
|
type UiPageSideMode = (typeof UI_PAGE_SIDE_MODES)[number];
|
|
11
|
+
type UiPageScroll = (typeof UI_PAGE_SCROLL_VALUES)[number];
|
|
12
|
+
type UiPageHeight = (typeof UI_PAGE_HEIGHT_VALUES)[number];
|
|
9
13
|
declare const UI_PAGE_DEFAULT_VARIANT: UiPageVariant;
|
|
10
14
|
declare const UI_PAGE_DEFAULT_SIDE_POSITION: UiPageSidePosition;
|
|
11
15
|
declare const UI_PAGE_DEFAULT_SIDE_MODE: UiPageSideMode;
|
|
16
|
+
declare const UI_PAGE_DEFAULT_SCROLL: UiPageScroll;
|
|
17
|
+
declare const UI_PAGE_DEFAULT_HEIGHT: UiPageHeight;
|
|
12
18
|
declare const UI_PAGE_DEFAULT_SIDE_WIDTH = "16rem";
|
|
13
19
|
declare function isUiPageVariant(value: string | null): value is UiPageVariant;
|
|
14
20
|
declare function isUiPageSidePosition(value: string | null): value is UiPageSidePosition;
|
|
15
21
|
declare function isUiPageSideMode(value: string | null): value is UiPageSideMode;
|
|
22
|
+
declare function isUiPageScroll(value: string | null): value is UiPageScroll;
|
|
23
|
+
declare function isUiPageHeight(value: string | null): value is UiPageHeight;
|
|
16
24
|
|
|
17
25
|
declare class UiPageStateService {
|
|
18
26
|
private readonly variantState;
|
|
27
|
+
private readonly heightState;
|
|
28
|
+
private readonly scrollState;
|
|
19
29
|
private readonly positionState;
|
|
20
30
|
private readonly sideModeState;
|
|
21
31
|
private readonly internalSideOpenState;
|
|
@@ -25,6 +35,8 @@ declare class UiPageStateService {
|
|
|
25
35
|
private readonly sideOpenRequestState;
|
|
26
36
|
private readonly sideOpenRequestVersionState;
|
|
27
37
|
readonly variant: _angular_core.Signal<"stacked" | "side">;
|
|
38
|
+
readonly height: _angular_core.Signal<"auto" | "fix">;
|
|
39
|
+
readonly scroll: _angular_core.Signal<"content" | "page">;
|
|
28
40
|
readonly position: _angular_core.Signal<"left" | "right">;
|
|
29
41
|
readonly sideMode: _angular_core.Signal<"sticky" | "drawer" | "overlay">;
|
|
30
42
|
readonly sideWidth: _angular_core.Signal<string>;
|
|
@@ -36,6 +48,8 @@ declare class UiPageStateService {
|
|
|
36
48
|
readonly isSideVisible: _angular_core.Signal<boolean>;
|
|
37
49
|
registerRoot(config: {
|
|
38
50
|
variant: UiPageVariant;
|
|
51
|
+
height: UiPageHeight;
|
|
52
|
+
scroll: UiPageScroll;
|
|
39
53
|
position: UiPageSidePosition;
|
|
40
54
|
sideMode: UiPageSideMode;
|
|
41
55
|
sideWidth: string;
|
|
@@ -71,6 +85,7 @@ declare class UiPageSideComponent {
|
|
|
71
85
|
protected readonly isSticky: _angular_core.Signal<boolean>;
|
|
72
86
|
protected readonly isDrawer: _angular_core.Signal<boolean>;
|
|
73
87
|
protected readonly isOverlay: _angular_core.Signal<boolean>;
|
|
88
|
+
protected readonly resolvedScroll: _angular_core.Signal<"content" | "page">;
|
|
74
89
|
protected readonly ariaHidden: _angular_core.Signal<"true" | null>;
|
|
75
90
|
protected readonly classes: _angular_core.Signal<string>;
|
|
76
91
|
constructor();
|
|
@@ -82,6 +97,8 @@ declare class UiPageComponent {
|
|
|
82
97
|
protected readonly page: UiPageStateService;
|
|
83
98
|
protected readonly projectedSide: _angular_core.Signal<UiPageSideComponent | undefined>;
|
|
84
99
|
readonly variant: _angular_core.InputSignal<"stacked" | "side">;
|
|
100
|
+
readonly height: _angular_core.InputSignal<"auto" | "fix">;
|
|
101
|
+
readonly scroll: _angular_core.InputSignal<"content" | "page">;
|
|
85
102
|
readonly position: _angular_core.InputSignal<"left" | "right">;
|
|
86
103
|
readonly sideMode: _angular_core.InputSignal<"sticky" | "drawer" | "overlay">;
|
|
87
104
|
readonly sideOpen: _angular_core.InputSignal<boolean | null>;
|
|
@@ -99,7 +116,7 @@ declare class UiPageComponent {
|
|
|
99
116
|
constructor();
|
|
100
117
|
protected handleBackdropClick(): void;
|
|
101
118
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiPageComponent, never>;
|
|
102
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiPageComponent, "ui-page", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "sideMode": { "alias": "sideMode"; "required": false; "isSignal": true; }; "sideOpen": { "alias": "sideOpen"; "required": false; "isSignal": true; }; "sideWidth": { "alias": "sideWidth"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "sideOpenChange": "sideOpenChange"; }, ["projectedSide"], ["ui-page-header", "ui-page-side-toggle", "ui-page-side", "ui-page-content", "ui-page-footer"], true, never>;
|
|
119
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiPageComponent, "ui-page", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "scroll": { "alias": "scroll"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "sideMode": { "alias": "sideMode"; "required": false; "isSignal": true; }; "sideOpen": { "alias": "sideOpen"; "required": false; "isSignal": true; }; "sideWidth": { "alias": "sideWidth"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "sideOpenChange": "sideOpenChange"; }, ["projectedSide"], ["ui-page-header", "ui-page-side-toggle", "ui-page-side", "ui-page-content", "ui-page-footer"], true, never>;
|
|
103
120
|
}
|
|
104
121
|
|
|
105
122
|
declare class UiPageSideToggleComponent {
|
|
@@ -115,23 +132,29 @@ declare class UiPageSideToggleComponent {
|
|
|
115
132
|
}
|
|
116
133
|
|
|
117
134
|
declare class UiPageHeaderComponent {
|
|
135
|
+
private readonly page;
|
|
118
136
|
readonly class: _angular_core.InputSignal<string>;
|
|
137
|
+
protected readonly resolvedHeight: _angular_core.Signal<"auto" | "fix">;
|
|
119
138
|
protected readonly classes: _angular_core.Signal<string>;
|
|
120
139
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiPageHeaderComponent, never>;
|
|
121
140
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiPageHeaderComponent, "ui-page-header", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
122
141
|
}
|
|
123
142
|
declare class UiPageContentComponent {
|
|
143
|
+
private readonly page;
|
|
124
144
|
readonly class: _angular_core.InputSignal<string>;
|
|
145
|
+
protected readonly resolvedScroll: _angular_core.Signal<"content" | "page">;
|
|
125
146
|
protected readonly classes: _angular_core.Signal<string>;
|
|
126
147
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiPageContentComponent, never>;
|
|
127
148
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiPageContentComponent, "ui-page-content", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
128
149
|
}
|
|
129
150
|
declare class UiPageFooterComponent {
|
|
151
|
+
private readonly page;
|
|
130
152
|
readonly class: _angular_core.InputSignal<string>;
|
|
153
|
+
protected readonly resolvedHeight: _angular_core.Signal<"auto" | "fix">;
|
|
131
154
|
protected readonly classes: _angular_core.Signal<string>;
|
|
132
155
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiPageFooterComponent, never>;
|
|
133
156
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiPageFooterComponent, "ui-page-footer", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
134
157
|
}
|
|
135
158
|
|
|
136
|
-
export { UI_PAGE_DEFAULT_SIDE_MODE, UI_PAGE_DEFAULT_SIDE_POSITION, UI_PAGE_DEFAULT_SIDE_WIDTH, UI_PAGE_DEFAULT_VARIANT, UI_PAGE_SIDE_MODES, UI_PAGE_SIDE_POSITIONS, UI_PAGE_VARIANTS, UiPageComponent, UiPageContentComponent, UiPageFooterComponent, UiPageHeaderComponent, UiPageSideComponent, UiPageSideToggleComponent, isUiPageSideMode, isUiPageSidePosition, isUiPageVariant };
|
|
137
|
-
export type { UiPageSideMode, UiPageSidePosition, UiPageVariant };
|
|
159
|
+
export { UI_PAGE_DEFAULT_HEIGHT, UI_PAGE_DEFAULT_SCROLL, UI_PAGE_DEFAULT_SIDE_MODE, UI_PAGE_DEFAULT_SIDE_POSITION, UI_PAGE_DEFAULT_SIDE_WIDTH, UI_PAGE_DEFAULT_VARIANT, UI_PAGE_HEIGHT_VALUES, UI_PAGE_SCROLL_VALUES, UI_PAGE_SIDE_MODES, UI_PAGE_SIDE_POSITIONS, UI_PAGE_VARIANTS, UiPageComponent, UiPageContentComponent, UiPageFooterComponent, UiPageHeaderComponent, UiPageSideComponent, UiPageSideToggleComponent, isUiPageHeight, isUiPageScroll, isUiPageSideMode, isUiPageSidePosition, isUiPageVariant };
|
|
160
|
+
export type { UiPageHeight, UiPageScroll, UiPageSideMode, UiPageSidePosition, UiPageVariant };
|
|
@@ -4,9 +4,11 @@ import { InjectionToken, EnvironmentProviders } from '@angular/core';
|
|
|
4
4
|
declare const THEME_MODES: readonly ["light", "dark", "system"];
|
|
5
5
|
declare const RESOLVED_THEME_MODES: readonly ["light", "dark"];
|
|
6
6
|
declare const THEME_SEASONS: readonly ["base", "imlek", "ramadhan", "ied", "natal", "new-year"];
|
|
7
|
+
type ThemeBrand = string;
|
|
7
8
|
type ThemeMode = (typeof THEME_MODES)[number];
|
|
8
9
|
type ResolvedThemeMode = (typeof RESOLVED_THEME_MODES)[number];
|
|
9
10
|
type ThemeSeason = (typeof THEME_SEASONS)[number];
|
|
11
|
+
declare const DEFAULT_THEME_BRAND: ThemeBrand;
|
|
10
12
|
declare const DEFAULT_THEME_MODE: ThemeMode;
|
|
11
13
|
declare const DEFAULT_THEME_SEASON: ThemeSeason;
|
|
12
14
|
declare const THEME_MODE_STORAGE_KEY = "theme-mode";
|
|
@@ -15,9 +17,11 @@ declare function isThemeMode(value: string | null | undefined): value is ThemeMo
|
|
|
15
17
|
declare function isResolvedThemeMode(value: string | null | undefined): value is ResolvedThemeMode;
|
|
16
18
|
declare function isThemeSeason(value: string | null | undefined): value is ThemeSeason;
|
|
17
19
|
declare function normalizeThemeMode(value: string | null | undefined): ThemeMode;
|
|
20
|
+
declare function normalizeThemeBrand(value: string | null | undefined): ThemeBrand;
|
|
18
21
|
declare function normalizeThemeSeason(value: string | null | undefined): ThemeSeason;
|
|
19
22
|
|
|
20
23
|
interface UiThemeOptions {
|
|
24
|
+
readonly brand?: ThemeBrand;
|
|
21
25
|
readonly mode?: ThemeMode;
|
|
22
26
|
readonly season?: ThemeSeason;
|
|
23
27
|
}
|
|
@@ -67,5 +71,5 @@ declare class ThemeSeasonService {
|
|
|
67
71
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeSeasonService>;
|
|
68
72
|
}
|
|
69
73
|
|
|
70
|
-
export { DEFAULT_THEME_MODE, DEFAULT_THEME_SEASON, RESOLVED_THEME_MODES, THEME_MODES, THEME_MODE_STORAGE_KEY, THEME_SEASONS, THEME_SEASON_STORAGE_KEY, ThemeModeService, ThemeSeasonService, UI_THEME_OPTIONS, isResolvedThemeMode, isThemeMode, isThemeSeason, normalizeThemeMode, normalizeThemeSeason, provideUiTheme };
|
|
71
|
-
export type { ResolvedThemeMode, ThemeMode, ThemeSeason, UiThemeOptions };
|
|
74
|
+
export { DEFAULT_THEME_BRAND, DEFAULT_THEME_MODE, DEFAULT_THEME_SEASON, RESOLVED_THEME_MODES, THEME_MODES, THEME_MODE_STORAGE_KEY, THEME_SEASONS, THEME_SEASON_STORAGE_KEY, ThemeModeService, ThemeSeasonService, UI_THEME_OPTIONS, isResolvedThemeMode, isThemeMode, isThemeSeason, normalizeThemeBrand, normalizeThemeMode, normalizeThemeSeason, provideUiTheme };
|
|
75
|
+
export type { ResolvedThemeMode, ThemeBrand, ThemeMode, ThemeSeason, UiThemeOptions };
|