@a.nemreen/dga-ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +400 -0
  2. package/fesm2022/a.nemreen-dga-ui.mjs +9855 -0
  3. package/index.d.ts +5 -0
  4. package/lib/content/code/dga-code.d.ts +8 -0
  5. package/lib/content/list/dga-description-list.d.ts +13 -0
  6. package/lib/content/list/dga-list.d.ts +7 -0
  7. package/lib/content/metric/dga-metric.d.ts +17 -0
  8. package/lib/content/number/dga-number.d.ts +36 -0
  9. package/lib/content/persona/dga-persona.d.ts +11 -0
  10. package/lib/content/quote/dga-quote.d.ts +7 -0
  11. package/lib/data/carousel/dga-carousel.d.ts +79 -0
  12. package/lib/data/chart/dga-chart.d.ts +153 -0
  13. package/lib/data/export/dga-export-toolbar.d.ts +19 -0
  14. package/lib/data/export/dga-export.d.ts +26 -0
  15. package/lib/data/table/dga-table.d.ts +50 -0
  16. package/lib/domain/saudi-cities/dga-saudi-cities.d.ts +16 -0
  17. package/lib/feedback/a11y/dga-skip-link.d.ts +11 -0
  18. package/lib/feedback/accessibility/dga-accessibility.d.ts +133 -0
  19. package/lib/feedback/accessibility/dga-accessibility.service.d.ts +78 -0
  20. package/lib/feedback/alert/dga-alert.d.ts +27 -0
  21. package/lib/feedback/cookies/dga-cookies.d.ts +64 -0
  22. package/lib/feedback/copy/dga-copy.d.ts +43 -0
  23. package/lib/feedback/empty/dga-empty.d.ts +11 -0
  24. package/lib/feedback/feedback/dga-feedback.d.ts +30 -0
  25. package/lib/feedback/page-feedback/dga-page-feedback.d.ts +72 -0
  26. package/lib/feedback/rating/dga-rating.d.ts +17 -0
  27. package/lib/feedback/share/dga-share.d.ts +39 -0
  28. package/lib/forms/autocomplete/dga-autocomplete.d.ts +19 -0
  29. package/lib/forms/checkbox/dga-checkbox.d.ts +9 -0
  30. package/lib/forms/chip-input/dga-chip-input.d.ts +20 -0
  31. package/lib/forms/date-picker/dga-date-calendar.d.ts +44 -0
  32. package/lib/forms/date-picker/dga-date-picker.d.ts +152 -0
  33. package/lib/forms/field/dga-field.d.ts +22 -0
  34. package/lib/forms/form/dga-form-control.d.ts +50 -0
  35. package/lib/forms/form/form-control.styles.d.ts +16 -0
  36. package/lib/forms/input/dga-input.d.ts +13 -0
  37. package/lib/forms/label/dga-label.d.ts +8 -0
  38. package/lib/forms/multiselect/dga-multiselect.d.ts +20 -0
  39. package/lib/forms/number-input/dga-number-input.d.ts +25 -0
  40. package/lib/forms/otp/dga-otp.d.ts +19 -0
  41. package/lib/forms/phone-input/dga-phone-input.d.ts +33 -0
  42. package/lib/forms/radio/dga-radio.d.ts +9 -0
  43. package/lib/forms/select/dga-native-select.d.ts +15 -0
  44. package/lib/forms/select/dga-select.d.ts +65 -0
  45. package/lib/forms/slider/dga-slider.d.ts +7 -0
  46. package/lib/forms/switch/dga-switch.d.ts +14 -0
  47. package/lib/forms/upload/dga-upload.d.ts +32 -0
  48. package/lib/layout/card/dga-card-media.d.ts +13 -0
  49. package/lib/layout/card/dga-card.d.ts +89 -0
  50. package/lib/layout/clamp/dga-clamp.d.ts +11 -0
  51. package/lib/layout/expandable/dga-expandable.d.ts +14 -0
  52. package/lib/layout/grid/dga-grid.d.ts +10 -0
  53. package/lib/layout/section/dga-section.d.ts +22 -0
  54. package/lib/navigation/accordion/dga-accordion-item.d.ts +12 -0
  55. package/lib/navigation/accordion/dga-accordion.d.ts +10 -0
  56. package/lib/navigation/breadcrumb/dga-breadcrumb.d.ts +13 -0
  57. package/lib/navigation/filter-bar/dga-filter-bar.d.ts +18 -0
  58. package/lib/navigation/pagination/dga-pagination.d.ts +14 -0
  59. package/lib/navigation/scroll-top/dga-scroll-top.d.ts +35 -0
  60. package/lib/navigation/side-nav/dga-side-nav.d.ts +21 -0
  61. package/lib/navigation/stepper/dga-stepper.d.ts +15 -0
  62. package/lib/navigation/tabs/dga-tab.d.ts +12 -0
  63. package/lib/navigation/tabs/dga-tabs.d.ts +14 -0
  64. package/lib/navigation/toc/dga-toc.d.ts +16 -0
  65. package/lib/navigation/toolbar/dga-toolbar.d.ts +7 -0
  66. package/lib/overlays/dialog/dga-dialog.d.ts +28 -0
  67. package/lib/overlays/drawer/dga-drawer.d.ts +28 -0
  68. package/lib/overlays/image-popup/dga-image-popup.d.ts +65 -0
  69. package/lib/overlays/menu/dga-menu.d.ts +50 -0
  70. package/lib/overlays/modal/dga-modal.d.ts +44 -0
  71. package/lib/overlays/toast/dga-toast-outlet.d.ts +11 -0
  72. package/lib/overlays/toast/dga-toast.d.ts +24 -0
  73. package/lib/overlays/toast/dga-toast.service.d.ts +39 -0
  74. package/lib/overlays/tooltip/dga-tooltip.d.ts +60 -0
  75. package/lib/primitives/avatar/dga-avatar.d.ts +13 -0
  76. package/lib/primitives/badge/dga-badge.d.ts +10 -0
  77. package/lib/primitives/button/dga-button.d.ts +20 -0
  78. package/lib/primitives/chip/dga-chip.d.ts +11 -0
  79. package/lib/primitives/divider/dga-divider.d.ts +10 -0
  80. package/lib/primitives/icon/dga-icon-badge.d.ts +14 -0
  81. package/lib/primitives/icon/dga-icon-font.service.d.ts +14 -0
  82. package/lib/primitives/icon/dga-icon-registry.d.ts +9 -0
  83. package/lib/primitives/icon/dga-icon.d.ts +40 -0
  84. package/lib/primitives/link/dga-link.d.ts +10 -0
  85. package/lib/primitives/progress/dga-progress.d.ts +25 -0
  86. package/lib/primitives/skeleton/dga-skeleton.d.ts +30 -0
  87. package/lib/primitives/spinner/dga-spinner.d.ts +12 -0
  88. package/lib/shell/footer/dga-footer.d.ts +60 -0
  89. package/lib/shell/header/dga-header.d.ts +343 -0
  90. package/lib/shell/hero/dga-hero.d.ts +128 -0
  91. package/lib/shell/logo-tile/dga-logo-tile.d.ts +11 -0
  92. package/lib/shell/preloader/dga-preloader.d.ts +55 -0
  93. package/lib/shell/side-info/dga-side-info.d.ts +19 -0
  94. package/lib/shell/top-bar/dga-top-bar.d.ts +63 -0
  95. package/lib/shell/top-bar/sa-flag.d.ts +2 -0
  96. package/lib/utils/cx.d.ts +2 -0
  97. package/lib/utils/locale.d.ts +2 -0
  98. package/package.json +61 -0
  99. package/public-api.d.ts +91 -0
package/README.md ADDED
@@ -0,0 +1,400 @@
1
+ # `@a.nemreen/dga-ui`
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@a.nemreen/dga-ui.svg)](https://www.npmjs.com/package/@a.nemreen/dga-ui)
4
+ [![license](https://img.shields.io/npm/l/@a.nemreen/dga-ui.svg)](https://github.com/nemreen/dga-angular/blob/main/LICENSE)
5
+ [![Angular](https://img.shields.io/badge/Angular-19-DD0031?logo=angular&logoColor=white)](https://angular.dev)
6
+ [![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-v4-38B2AC?logo=tailwindcss&logoColor=white)](https://tailwindcss.com)
7
+
8
+ Standalone Angular UI components for the DGA design system — forms, overlays, navigation, portal shell, and layout. Styled with Tailwind utilities mapped to [`@a.nemreen/dga-tokens`](https://www.npmjs.com/package/@a.nemreen/dga-tokens).
9
+
10
+ > Version **0.1.x** until public API freeze.
11
+
12
+ ## Features
13
+
14
+ - Standalone Angular 19 components (no NgModules)
15
+ - RTL-first / Arabic-ready (logical CSS + locale-aware chrome)
16
+ - Forms: input, select, checkbox, radio, switch, OTP, upload, date picker, …
17
+ - Overlays: dialog, modal, drawer, toast, menu, tooltip
18
+ - Shell: header, top bar, hero, footer, preloader
19
+ - Feedback & a11y: alert, cookies, accessibility panel, skip link
20
+ - Layout: card, section, grid, clamp, expandable
21
+
22
+ ## Install
23
+
24
+ ```bash
25
+ npm install @a.nemreen/dga-ui @a.nemreen/dga-tokens @platformscode/icons
26
+ ```
27
+
28
+ **Peers:** `@angular/core` / `@angular/common` / `@angular/platform-browser` ^19, `@a.nemreen/dga-tokens` ^0.1, `@platformscode/icons` ^0.0.11.
29
+
30
+ ## Library layout
31
+
32
+ Sources live under `src/lib/<domain>/<component>/`. Place new work in the matching domain — do not add new top-level peers under `lib/`.
33
+
34
+ | Domain | Use for |
35
+ |--------|---------|
36
+ | `primitives/` | Visual atoms (button, icon, badge, …) |
37
+ | `forms/` | Inputs, selects, field chrome |
38
+ | `overlays/` | Floating UI (dialog, toast, menu, …) |
39
+ | `feedback/` | Status and user-response UI (alert, cookies, a11y, …) |
40
+ | `navigation/` | Wayfinding (tabs, breadcrumb, side-nav, …) |
41
+ | `layout/` | Structure wrappers (card, section, grid, …) |
42
+ | `shell/` | Page chrome (header, footer, hero, …) |
43
+ | `content/` | Content presentation (list, quote, metric, …) |
44
+ | `data/` | Tables, charts, export |
45
+ | `domain/` | Locale/region data helpers (not UI) |
46
+ | `utils/` | Internal helpers only (not exported) |
47
+
48
+ Consumers always import from `@a.nemreen/dga-ui` — do not deep-import library paths.
49
+
50
+ ## Setup
51
+
52
+ ```css
53
+ @import 'tailwindcss';
54
+ @import '@a.nemreen/dga-tokens/styles.css';
55
+ ```
56
+
57
+ Load Arabic Google Fonts (IBM Plex default; see `@a.nemreen/dga-tokens` README / `DgaFontService`).
58
+
59
+ Scan library sources so Tailwind keeps component utilities (path may vary):
60
+
61
+ ```css
62
+ @source "../node_modules/@a.nemreen/dga-ui/**/*.{mjs,js}";
63
+ ```
64
+
65
+ ```ts
66
+ import {
67
+ DgaButton,
68
+ DgaInput,
69
+ DgaLabel,
70
+ DgaBadge,
71
+ DgaAlert,
72
+ DgaCheckbox,
73
+ DgaRadio,
74
+ DgaSelect,
75
+ DgaNativeSelect,
76
+ DgaField,
77
+ DgaSpinner,
78
+ DgaDialog,
79
+ DgaToast,
80
+ DgaCard,
81
+ DgaDivider,
82
+ DgaIcon,
83
+ } from '@a.nemreen/dga-ui';
84
+ ```
85
+
86
+ ## Components
87
+
88
+ ### Icon
89
+
90
+ Two layers:
91
+
92
+ 1. **Chrome** — curated inline SVG via `name` (paints with the first frame; use in buttons, fields, menus).
93
+ 2. **Content** — HugeIcons Stroke Rounded font via `glyph` (opt into `@a.nemreen/dga-tokens/styles/icon-font.css`).
94
+
95
+ ```html
96
+ <!-- Chrome (always available) -->
97
+ <dga-icon name="search" size="sm" />
98
+ <dga-icon name="arrowNext" size="sm" label="التالي" />
99
+
100
+ <!-- Content (requires icon-font.css) -->
101
+ <dga-icon glyph="search-01" size="xl" />
102
+ <dga-icon glyph="notification-02" size="xl" tone="primary" />
103
+ ```
104
+
105
+ Use `arrowNext` / `arrowPrev` for forward/back — they mirror under `dir="rtl"`. Prefer literal `arrowLeft` / `arrowRight` only when you mean that physical direction.
106
+
107
+ Sizes (px): `2xs` 10 · `xs` 14 · `sm` 16 · `md` 18 · `lg` 20 · `xl` 24 · `2xl` 28 · `3xl` 32.
108
+
109
+ Full SVG catalog remains available from [@platformscode/icons](https://www.npmjs.com/package/@platformscode/icons) when you need a glyph outside the curated `name` list.
110
+
111
+ ### Scroll to top
112
+
113
+ Floating control that appears after the page scrolls past a threshold. Mount once at the app root; it stacks above `dga-accessibility` by default.
114
+
115
+ ```html
116
+ <dga-scroll-top position="end" [threshold]="320" />
117
+ ```
118
+
119
+ ### Button
120
+
121
+ ```html
122
+ <button dgaButton type="button">حفظ</button>
123
+ <button dgaButton variant="outline" size="sm">إلغاء</button>
124
+ <button dgaButton variant="danger" disabled>حذف</button>
125
+ ```
126
+
127
+ ### Input + Label + Field
128
+
129
+ ```html
130
+ <label dgaLabel dgaRequired for="email">البريد</label>
131
+ <input dgaInput id="email" type="email" />
132
+ <textarea dgaInput rows="3"></textarea>
133
+
134
+ <dga-field label="البريد" controlId="email" required hint="لن نشارك بريدك.">
135
+ <input dgaInput id="email" type="email" />
136
+ </dga-field>
137
+ ```
138
+
139
+ ### Select
140
+
141
+ Configurable select (search, multi, always-open):
142
+
143
+ ```html
144
+ <dga-select [options]="cities" [(value)]="city" />
145
+ <dga-select searchable [options]="cities" [(value)]="city" />
146
+ <dga-select multiple [options]="cities" [(value)]="cities" />
147
+ <dga-select multiple searchable [options]="cities" [(value)]="cities" />
148
+ <dga-select openMode="always" [options]="cities" [(value)]="city" />
149
+ ```
150
+
151
+ Native `<select>` styling for simple forms:
152
+
153
+ ```html
154
+ <select dgaSelect>
155
+ <option value="riyadh">الرياض</option>
156
+ </select>
157
+ ```
158
+
159
+ ### Checkbox + Radio
160
+
161
+ ```html
162
+ <label>
163
+ <input dgaCheckbox type="checkbox" />
164
+ أوافق
165
+ </label>
166
+
167
+ <label>
168
+ <input dgaRadio type="radio" name="plan" value="basic" />
169
+ أساسية
170
+ </label>
171
+ ```
172
+
173
+ ### Badge
174
+
175
+ ```html
176
+ <dga-badge variant="success">مكتمل</dga-badge>
177
+ ```
178
+
179
+ ### Alert
180
+
181
+ ```html
182
+ <dga-alert variant="warning" title="تنبيه">تحقق من البيانات.</dga-alert>
183
+ <dga-alert dismissible (dismissed)="onDismiss()">يمكن إغلاقه</dga-alert>
184
+ ```
185
+
186
+ ### Spinner
187
+
188
+ ```html
189
+ <dga-spinner />
190
+ <dga-spinner size="lg" tone="neutral" />
191
+ ```
192
+
193
+ ### Preloader (optional first-load)
194
+
195
+ Full-screen brand overlay; auto-hides when the document is ready and `minDuration` elapses. Omit the tag if you do not want it.
196
+
197
+ ```html
198
+ <dga-preloader
199
+ brand="بوابة الخدمات"
200
+ label="جاري التحميل"
201
+ [minDuration]="1000"
202
+ [once]="true"
203
+ persist="local"
204
+ />
205
+ ```
206
+
207
+ - `once` + `persist="local"` - show only on the visitor’s first visit
208
+ - `persist="session"` - once per tab session
209
+ - `persist="none"` or `[once]="false"` - every load
210
+ - Optional `logoSrc` replaces the default geometric mark
211
+ - `(closed)` fires after the exit animation
212
+
213
+ ```ts
214
+ import { DgaPreloader } from '@a.nemreen/dga-ui';
215
+ ```
216
+
217
+ ### Dialog
218
+
219
+ ```html
220
+ <dga-dialog [(open)]="open" title="تأكيد">
221
+ <p>هل أنت متأكد؟</p>
222
+ <div dgaDialogActions>
223
+ <button dgaButton variant="ghost" (click)="open = false">إلغاء</button>
224
+ <button dgaButton (click)="confirm()">تأكيد</button>
225
+ </div>
226
+ </dga-dialog>
227
+ ```
228
+
229
+ ### Modal
230
+
231
+ ```html
232
+ <dga-modal
233
+ [(open)]="open"
234
+ title="تفاصيل الطلب"
235
+ description="راجع البيانات قبل المتابعة"
236
+ size="lg"
237
+ animation="scale"
238
+ >
239
+ <p>محتوى النافذة المنبثقة.</p>
240
+ <div dgaModalActions>
241
+ <button dgaButton variant="ghost" (click)="open = false">إلغاء</button>
242
+ <button dgaButton (click)="confirm()">تأكيد</button>
243
+ </div>
244
+ </dga-modal>
245
+ ```
246
+
247
+ ### Toast
248
+
249
+ ```html
250
+ <dga-toast [(open)]="show" variant="success" title="تم">حُفظ السجل.</dga-toast>
251
+ ```
252
+
253
+ ### Tooltip / Switch / Progress / Nav (Wave I)
254
+
255
+ ```html
256
+ <dga-switch [(checked)]="on" label="الإشعارات" />
257
+ <a dgaLink href="#">رابط</a>
258
+ <dga-progress [value]="60" />
259
+ <dga-skeleton />
260
+ <dga-skeleton [lines]="3" animation="shimmer" />
261
+ <dga-skeleton shape="circle" size="lg" />
262
+ <dga-tooltip title="مساعدة" text="وصف مختصر">
263
+ <button dgaButton size="sm">؟</button>
264
+ </dga-tooltip>
265
+
266
+ <dga-breadcrumb [items]="[{ label: 'الرئيسية', href: '#' }, { label: 'الحالي' }]" />
267
+ <dga-tabs [(selected)]="tab">
268
+ <dga-tab value="a" label="أ">...</dga-tab>
269
+ </dga-tabs>
270
+ <dga-accordion>
271
+ <dga-accordion-item title="سؤال">جواب</dga-accordion-item>
272
+ </dga-accordion>
273
+ <dga-pagination [(page)]="page" [totalPages]="10" />
274
+ ```
275
+
276
+ ## Layout recipes
277
+
278
+ Prefer DGA spacing tokens (`gap-md`, `p-xl`, `py-3xl`) over raw pixel values. For page width, use `max-w-(--container-*)` - plain `max-w-5xl` binds to the spacing scale in Tailwind v4.
279
+
280
+ ### Stack (column)
281
+
282
+ ```html
283
+ <div class="flex flex-col gap-md">
284
+ <p>صف واحد</p>
285
+ <p>صف آخر</p>
286
+ </div>
287
+ ```
288
+
289
+ ### Inline row
290
+
291
+ ```html
292
+ <div class="flex flex-wrap items-center gap-md">
293
+ <button dgaButton>حفظ</button>
294
+ <button dgaButton variant="ghost">إلغاء</button>
295
+ </div>
296
+ ```
297
+
298
+ ### Split (space between)
299
+
300
+ ```html
301
+ <div class="flex items-center justify-between gap-xl">
302
+ <h2 class="text-display-sm">العنوان</h2>
303
+ <div class="flex gap-sm">…</div>
304
+ </div>
305
+ ```
306
+
307
+ ### Responsive grid
308
+
309
+ ```html
310
+ <div class="grid grid-cols-1 gap-lg md:grid-cols-2 lg:grid-cols-3">
311
+ <dga-card title="أ">…</dga-card>
312
+ <dga-card title="ب">…</dga-card>
313
+ <dga-card title="ج">…</dga-card>
314
+ </div>
315
+ ```
316
+
317
+ Or use the thin wrapper:
318
+
319
+ ```html
320
+ <dga-grid [cols]="3" gap="lg">
321
+ <dga-card title="أ">…</dga-card>
322
+ <dga-card title="ب">…</dga-card>
323
+ <dga-card title="ج">…</dga-card>
324
+ </dga-grid>
325
+ ```
326
+
327
+ ### Contained section
328
+
329
+ ```html
330
+ <dga-section title="القسم" subtitle="وصف قصير" contained>
331
+ محتوى القسم
332
+ </dga-section>
333
+ ```
334
+
335
+ ### Portal home shell (consumable across apps)
336
+
337
+ Compose the official home template with library primitives only - no page-local CSS required:
338
+
339
+ ```html
340
+ <dga-top-bar registrationId="00000000000" />
341
+
342
+ <dga-header
343
+ appearance="portal"
344
+ mobileNav="sheet"
345
+ brand="شعار المنصة"
346
+ brandSlogan="بوابة الجهة"
347
+ brandHref="/"
348
+ [items]="navItems"
349
+ [actions]="headerActions"
350
+ (actionClick)="onAction($event)"
351
+ />
352
+ <!-- mobileNav: sheet | fullscreen | push -->
353
+
354
+ <dga-hero appearance="portal" [slides]="heroSlides" [(activeIndex)]="i" />
355
+
356
+ <dga-section
357
+ width="wide"
358
+ tone="surface"
359
+ title="قسم من نحن"
360
+ subtitle="…"
361
+ >
362
+ <button dgaSectionActions dgaButton variant="outline">إجراء ثانوي</button>
363
+ <dga-grid [cols]="4" gap="xl">
364
+ <dga-metric appearance="stat" value="1.5M" label="شخص">
365
+ <dga-icon-badge dgaMetricIcon>
366
+ <dga-icon name="user" tone="primary" />
367
+ </dga-icon-badge>
368
+ </dga-metric>
369
+ </dga-grid>
370
+ </dga-section>
371
+
372
+ <dga-card title="عنوان البطاقة" description="نص إضافي">
373
+ <dga-icon-badge dgaCardLead>
374
+ <dga-icon name="home" tone="primary" />
375
+ </dga-icon-badge>
376
+ <div dgaCardActions>
377
+ <button dgaButton variant="outline" size="sm">اجراء ثانوي</button>
378
+ <button dgaButton size="sm">اجراء</button>
379
+ </div>
380
+ </dga-card>
381
+
382
+ <dga-card>
383
+ <dga-card-media dgaCardMedia alt="خبر" />
384
+
385
+ </dga-card>
386
+
387
+ <dga-logo-tile label="شريك" />
388
+ <dga-footer [columns]="footerColumns" copyright="…" />
389
+ ```
390
+
391
+ Portal tokens (layout sizes): `--size-hero-portal` (491px), `--size-header-portal` (72px), `--size-icon-badge` (40px), `--size-dot` (16px).
392
+
393
+ ### Content + sticky aside
394
+
395
+ ```html
396
+ <div class="mx-auto grid max-w-(--container-7xl) gap-3xl px-xl md:grid-cols-[1fr_auto]">
397
+ <main class="min-w-0">…</main>
398
+ <dga-side-info title="في هذه الصفحة" [items]="tocItems" />
399
+ </div>
400
+ ```