@a.nemreen/dga-ui 0.3.15 → 0.3.17

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a.nemreen/dga-ui",
3
- "version": "0.3.15",
3
+ "version": "0.3.17",
4
4
  "description": "DGA Angular UI library — standalone forms, overlays, navigation, and portal shell with RTL-first Tailwind styling",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -1034,6 +1034,7 @@ interface DgaUploadRejection {
1034
1034
  }
1035
1035
  type DgaUploadAppearance = 'zone' | 'browse';
1036
1036
  declare class DgaUpload implements ControlValueAccessor {
1037
+ private readonly localeService;
1037
1038
  readonly filesInput: _angular_core.InputSignal<DgaUploadFile[]>;
1038
1039
  readonly files: _angular_core.WritableSignal<DgaUploadFile[]>;
1039
1040
  readonly accept: _angular_core.InputSignal<string>;
@@ -1046,9 +1047,15 @@ declare class DgaUpload implements ControlValueAccessor {
1046
1047
  readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
1047
1048
  private readonly cvaDisabled;
1048
1049
  readonly disabled: _angular_core.Signal<boolean>;
1050
+ /** Max bytes per file (`0` = unlimited). */
1049
1051
  readonly maxSize: _angular_core.InputSignal<number>;
1050
1052
  /** Max files kept when `multiple` is true (`0` = unlimited). */
1051
1053
  readonly maxFiles: _angular_core.InputSignal<number>;
1054
+ /**
1055
+ * Optional override for the constraints line under the drop zone.
1056
+ * When empty, a line is built from `accept`, `maxSize`, and `maxFiles`.
1057
+ */
1058
+ readonly constraints: _angular_core.InputSignal<string>;
1052
1059
  readonly filesChange: _angular_core.OutputEmitterRef<DgaUploadFile[]>;
1053
1060
  /** Emitted when picked/dropped files were filtered out (size, accept, or maxFiles). */
1054
1061
  readonly rejected: _angular_core.OutputEmitterRef<DgaUploadRejection[]>;
@@ -1056,11 +1063,16 @@ declare class DgaUpload implements ControlValueAccessor {
1056
1063
  private onChange;
1057
1064
  onTouched: () => void;
1058
1065
  readonly zoneClasses: _angular_core.Signal<string>;
1066
+ /** e.g. `.pdf,.doc | حجم الملف الأقصى هو : 1MB | الحد الأقصى للملفات هو : 2` */
1067
+ readonly constraintsText: _angular_core.Signal<string>;
1059
1068
  onDragOver(event: DragEvent): void;
1060
1069
  onDrop(event: DragEvent): void;
1061
1070
  onPick(event: Event): void;
1062
1071
  remove(id: string): void;
1063
1072
  formatSize(bytes: number): string;
1073
+ /** Compact label for constraints (`1MB`, `500KB`) matching legacy portal copy. */
1074
+ formatMaxSizeCompact(bytes: number): string;
1075
+ private isArabic;
1064
1076
  private addFiles;
1065
1077
  /** Enforce `accept` for both picker and drag-drop (HTML accept is advisory). */
1066
1078
  private matchesAccept;
@@ -1070,7 +1082,7 @@ declare class DgaUpload implements ControlValueAccessor {
1070
1082
  registerOnTouched(fn: () => void): void;
1071
1083
  setDisabledState(isDisabled: boolean): void;
1072
1084
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaUpload, never>;
1073
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaUpload, "dga-upload", never, { "filesInput": { "alias": "files"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "browseLabel": { "alias": "browseLabel"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "dragging": { "alias": "dragging"; "required": false; "isSignal": true; }; }, { "filesChange": "filesChange"; "rejected": "rejected"; "dragging": "draggingChange"; }, never, never, true, never>;
1085
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaUpload, "dga-upload", never, { "filesInput": { "alias": "files"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "browseLabel": { "alias": "browseLabel"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "constraints": { "alias": "constraints"; "required": false; "isSignal": true; }; "dragging": { "alias": "dragging"; "required": false; "isSignal": true; }; }, { "filesChange": "filesChange"; "rejected": "rejected"; "dragging": "draggingChange"; }, never, never, true, never>;
1074
1086
  }
1075
1087
 
1076
1088
  /** Infer UI locale from `<html lang>` (avoids importing `@a.nemreen/dga-tokens` into ng-packagr graph). */
@@ -1290,12 +1302,20 @@ declare class DgaSignaturePad implements ControlValueAccessor {
1290
1302
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaSignaturePad, "dga-signature-pad", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "penColor": { "alias": "penColor"; "required": false; "isSignal": true; }; "lineWidth": { "alias": "lineWidth"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1291
1303
  }
1292
1304
 
1293
- type DgaRichTextCmd = 'bold' | 'italic' | 'underline' | 'insertUnorderedList' | 'insertOrderedList';
1305
+ type DgaRichTool = 'bold' | 'italic' | 'underline' | 'strike' | 'h2' | 'h3' | 'ul' | 'ol' | 'quote' | 'alignStart' | 'alignCenter' | 'alignEnd' | 'link' | 'clear';
1294
1306
  /**
1295
- * Lightweight contenteditable rich-text field (bold / italic / underline / lists).
1307
+ * Contenteditable rich-text field: inline styles, headings, lists, quote,
1308
+ * alignment, and links. `value` is sanitized HTML.
1309
+ *
1310
+ * @example
1311
+ * ```html
1312
+ * <dga-rich-text [(value)]="html" label="الوصف" />
1313
+ * ```
1296
1314
  */
1297
1315
  declare class DgaRichText {
1316
+ private readonly destroyRef;
1298
1317
  private readonly editorRef;
1318
+ private readonly linkInputRef;
1299
1319
  readonly value: _angular_core.ModelSignal<string>;
1300
1320
  readonly placeholder: _angular_core.InputSignal<string>;
1301
1321
  readonly label: _angular_core.InputSignal<string>;
@@ -1303,23 +1323,65 @@ declare class DgaRichText {
1303
1323
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1304
1324
  private readonly uiLocale;
1305
1325
  private readonly ar;
1306
- private readonly syncing;
1307
- private readonly activeCmds;
1326
+ private readonly active;
1327
+ private readonly block;
1328
+ /** Last HTML this component published. External writes differ from this. */
1329
+ private owned;
1330
+ private range;
1331
+ readonly empty: _angular_core.WritableSignal<boolean>;
1332
+ readonly linkOpen: _angular_core.WritableSignal<boolean>;
1333
+ readonly linkUrl: _angular_core.WritableSignal<string>;
1334
+ readonly labelId: string;
1308
1335
  readonly toolbarLabel: _angular_core.Signal<"شريط التنسيق" | "Formatting toolbar">;
1309
1336
  readonly labels: _angular_core.Signal<{
1310
1337
  bold: string;
1311
1338
  italic: string;
1312
1339
  underline: string;
1340
+ strike: string;
1341
+ h2: string;
1342
+ h3: string;
1313
1343
  ul: string;
1314
1344
  ol: string;
1345
+ quote: string;
1346
+ alignStart: string;
1347
+ alignCenter: string;
1348
+ alignEnd: string;
1349
+ link: string;
1350
+ clear: string;
1351
+ linkUrl: string;
1352
+ apply: string;
1353
+ cancel: string;
1315
1354
  }>;
1355
+ readonly tools: _angular_core.Signal<{
1356
+ id: DgaRichTool;
1357
+ label: string;
1358
+ text: boolean;
1359
+ sep: boolean;
1360
+ }[]>;
1316
1361
  constructor();
1317
- isActive(cmd: DgaRichTextCmd): boolean;
1318
- exec(cmd: DgaRichTextCmd): void;
1362
+ pressed(id: DgaRichTool): boolean;
1363
+ keepSelection(event: Event): void;
1364
+ onTool(id: DgaRichTool): void;
1319
1365
  onInput(): void;
1320
1366
  onBlur(): void;
1321
- refreshActive(): void;
1322
- private emitFromEditor;
1367
+ onCaret(): void;
1368
+ onKeydown(event: KeyboardEvent): void;
1369
+ openLink(): void;
1370
+ closeLink(): void;
1371
+ applyLink(): void;
1372
+ private exec;
1373
+ private formatBlock;
1374
+ private clearFormat;
1375
+ private explicitAlign;
1376
+ private alignCommand;
1377
+ private refreshActive;
1378
+ private publish;
1379
+ private restoreSelection;
1380
+ private captureRange;
1381
+ private rangeIsCollapsed;
1382
+ private anchorFromSelection;
1383
+ private direction;
1384
+ private editorEl;
1323
1385
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DgaRichText, never>;
1324
1386
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DgaRichText, "dga-rich-text", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1325
1387
  }
@@ -3104,7 +3166,7 @@ declare class DgaNavRail {
3104
3166
  readonly smoothScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
3105
3167
  readonly select: _angular_core.OutputEmitterRef<DgaNavRailItem>;
3106
3168
  readonly expandChange: _angular_core.OutputEmitterRef<boolean>;
3107
- readonly edgeAttr: _angular_core.Signal<"left" | "start" | "end" | "right" | null>;
3169
+ readonly edgeAttr: _angular_core.Signal<"left" | "right" | "start" | "end" | null>;
3108
3170
  readonly offsetCss: _angular_core.Signal<string>;
3109
3171
  readonly tooltipPlacement: _angular_core.Signal<"start" | "end">;
3110
3172
  readonly iconSize: _angular_core.Signal<"sm" | "md" | "lg">;