@acorex/components 22.4.18 → 22.4.21

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 (40) hide show
  1. package/fesm2022/acorex-components-calendar.mjs +1 -1
  2. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  3. package/fesm2022/acorex-components-combo-box.mjs +44 -2
  4. package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
  5. package/fesm2022/acorex-components-comment.mjs +139 -31
  6. package/fesm2022/acorex-components-comment.mjs.map +1 -1
  7. package/fesm2022/acorex-components-data-list.mjs +1 -1
  8. package/fesm2022/acorex-components-data-list.mjs.map +1 -1
  9. package/fesm2022/acorex-components-data-table.mjs +97 -51
  10. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  11. package/fesm2022/acorex-components-decorators.mjs +2 -2
  12. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  13. package/fesm2022/acorex-components-image-editor.mjs +8 -8
  14. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  15. package/fesm2022/acorex-components-kanban.mjs +1 -1
  16. package/fesm2022/acorex-components-kanban.mjs.map +1 -1
  17. package/fesm2022/acorex-components-list.mjs +1 -1
  18. package/fesm2022/acorex-components-list.mjs.map +1 -1
  19. package/fesm2022/acorex-components-lookup.mjs +40 -2
  20. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  21. package/fesm2022/acorex-components-media-viewer.mjs +1 -1
  22. package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
  23. package/fesm2022/acorex-components-paint.mjs +1 -1
  24. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  25. package/fesm2022/acorex-components-scheduler.mjs +8 -8
  26. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  27. package/fesm2022/acorex-components-side-menu.mjs +1 -1
  28. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  29. package/fesm2022/acorex-components-sidebar.mjs +2 -2
  30. package/fesm2022/acorex-components-sidebar.mjs.map +1 -1
  31. package/fesm2022/acorex-components-tooltip.mjs +48 -4
  32. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  33. package/fesm2022/acorex-components-tree-view.mjs +1 -1
  34. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  35. package/package.json +3 -3
  36. package/types/acorex-components-combo-box.d.ts +5 -0
  37. package/types/acorex-components-comment.d.ts +59 -17
  38. package/types/acorex-components-data-table.d.ts +5 -0
  39. package/types/acorex-components-lookup.d.ts +5 -0
  40. package/types/acorex-components-tooltip.d.ts +11 -1
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "22.4.18",
3
+ "version": "22.4.21",
4
4
  "peerDependencies": {
5
- "@acorex/core": "22.4.18",
6
- "@acorex/cdk": "22.4.18",
5
+ "@acorex/core": "22.4.21",
6
+ "@acorex/cdk": "22.4.21",
7
7
  "@angular/aria": ">=22.1.0",
8
8
  "polytype": ">=0.17.0",
9
9
  "hammerjs": ">=2.0.8",
@@ -246,6 +246,11 @@ declare class AXComboBoxComponent extends NXValueComponent implements FormValueC
246
246
  protected onSheetSearchKeydown(e: AXHtmlEvent<KeyboardEvent>): void;
247
247
  /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
248
248
  protected onBeforeInput(event: Event): void;
249
+ /**
250
+ * On pointer down, select the committed label so the next keystroke replaces it
251
+ * instead of editing character-by-character (single-select searchable trigger).
252
+ */
253
+ protected onTriggerPointerDown(event: PointerEvent): void;
249
254
  /**
250
255
  * Combobox `expanded` two-way binding. On actionsheet with in-sheet search, ignore collapse
251
256
  * so focusing the search field (Aria combobox blur) does not close the popup. Dismiss is owned
@@ -140,8 +140,12 @@ declare class AXCommentItemComponent {
140
140
  /** Data item used by `ax-comment-view`. When set, the default layout is rendered internally. */
141
141
  readonly item: _angular_core.InputSignal<AXCommentItem>;
142
142
  readonly replyCount: _angular_core.InputSignal<number>;
143
- /** Two-way bindable state controlling whether nested replies are visible. */
144
- readonly repliesExpanded: _angular_core.ModelSignal<boolean>;
143
+ /** Whether nested replies are visible. A later parent value replaces a local toggle. */
144
+ readonly repliesExpanded: _angular_core.InputSignal<boolean>;
145
+ readonly repliesExpandedChange: _angular_core.OutputEmitterRef<boolean>;
146
+ protected readonly expanded: _angular_core.WritableSignal<boolean>;
147
+ private seenExpanded;
148
+ private hasSeenExpanded;
145
149
  /** Whether replies for this item are currently being loaded. */
146
150
  readonly loading: _angular_core.InputSignal<boolean>;
147
151
  /**
@@ -160,7 +164,13 @@ declare class AXCommentItemComponent {
160
164
  protected readonly itemActions: _angular_core.Signal<AXMenuItem[]>;
161
165
  protected readonly showOverflowMenu: _angular_core.Signal<boolean>;
162
166
  protected readonly overflowItems: _angular_core.Signal<AXButtonItemListItem[]>;
167
+ protected readonly templateContexts: _angular_core.Signal<AXCommentItemTemplateContext[]>;
163
168
  constructor();
169
+ /**
170
+ * Recreates the custom item template when the rendered snapshot changes.
171
+ * The outlet otherwise keeps the first context on screen.
172
+ */
173
+ protected templateContextKey(ctx: AXCommentItemTemplateContext): string;
164
174
  protected getColor(data: AXCommentItem): AXStyleColorType;
165
175
  protected showEdited(data: AXCommentItem): boolean;
166
176
  protected getInitials(data: AXCommentItem): string;
@@ -181,8 +191,9 @@ declare class AXCommentItemComponent {
181
191
  * Collapses the nested replies section.
182
192
  */
183
193
  hideReplies(): void;
194
+ private setExpanded;
184
195
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXCommentItemComponent, never>;
185
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXCommentItemComponent, "ax-comment-item", never, { "item": { "alias": "item"; "required": false; "isSignal": true; }; "replyCount": { "alias": "replyCount"; "required": false; "isSignal": true; }; "repliesExpanded": { "alias": "repliesExpanded"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "itemContext": { "alias": "itemContext"; "required": false; "isSignal": true; }; }, { "repliesExpanded": "repliesExpandedChange"; "likeChange": "likeChange"; "replyClick": "replyClick"; "actionClick": "actionClick"; }, ["projectedAvatar"], ["ax-avatar", "ax-title", "ax-subtitle", "ax-badge", "ax-comment-edited", "ax-comment-date", "ax-comment-menu-options", "ax-content", "ax-comment-like", "ax-comment-reply-text", "ax-comment-item", "ax-comment-reply-more", "*"], true, never>;
196
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXCommentItemComponent, "ax-comment-item", never, { "item": { "alias": "item"; "required": false; "isSignal": true; }; "replyCount": { "alias": "replyCount"; "required": false; "isSignal": true; }; "repliesExpanded": { "alias": "repliesExpanded"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "itemContext": { "alias": "itemContext"; "required": false; "isSignal": true; }; }, { "repliesExpandedChange": "repliesExpandedChange"; "likeChange": "likeChange"; "replyClick": "replyClick"; "actionClick": "actionClick"; }, ["projectedAvatar"], ["ax-avatar", "ax-title", "ax-subtitle", "ax-badge", "ax-comment-edited", "ax-comment-date", "ax-comment-menu-options", "ax-content", "ax-comment-like", "ax-comment-reply-text", "ax-comment-item", "ax-comment-reply-more", "*"], true, never>;
186
197
  }
187
198
 
188
199
  /**
@@ -213,10 +224,18 @@ declare class AXCommentEditedComponent {
213
224
  * @category Components
214
225
  */
215
226
  declare class AXCommentLikeComponent {
216
- like: _angular_core.ModelSignal<boolean>;
227
+ /** Current like state from the parent. Later parent values replace a local toggle. */
228
+ readonly like: _angular_core.InputSignal<boolean>;
229
+ readonly likeChange: _angular_core.OutputEmitterRef<boolean>;
230
+ private readonly optimistic;
231
+ private seenLike;
232
+ private hasSeenLike;
233
+ /** Parent value, unless the user just toggled and the parent has not caught up. */
234
+ protected readonly pressed: _angular_core.Signal<boolean>;
235
+ constructor();
217
236
  protected toggleLike(): void;
218
237
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXCommentLikeComponent, never>;
219
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXCommentLikeComponent, "ax-comment-like", never, { "like": { "alias": "like"; "required": true; "isSignal": true; }; }, { "like": "likeChange"; }, never, ["*"], true, never>;
238
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXCommentLikeComponent, "ax-comment-like", never, { "like": { "alias": "like"; "required": true; "isSignal": true; }; }, { "likeChange": "likeChange"; }, never, ["*"], true, never>;
220
239
  }
221
240
 
222
241
  /**
@@ -276,6 +295,24 @@ declare class AXCommentReplyTextComponent {
276
295
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXCommentReplyTextComponent, "ax-comment-reply-text", never, {}, {}, never, never, true, never>;
277
296
  }
278
297
 
298
+ /**
299
+ * Callbacks the recursive thread uses from `ax-comment-view`.
300
+ * Kept as a token so the thread component does not import the view class.
301
+ */
302
+ interface AXCommentThreadHost {
303
+ trackItem(item: AXCommentItem): string;
304
+ getId(item: AXCommentItem): string;
305
+ getReplies(item: AXCommentItem): AXCommentItem[];
306
+ getReplyCount(item: AXCommentItem): number;
307
+ isExpanded(item: AXCommentItem): boolean;
308
+ isItemLoading(item: AXCommentItem): boolean;
309
+ getTemplateContext(item: AXCommentItem, level: number): AXCommentItemTemplateContext;
310
+ onRepliesExpandedChange(item: AXCommentItem, expanded: boolean): Promise<void>;
311
+ toggleLike(item: AXCommentItem, liked?: boolean): void;
312
+ replyTo(item: AXCommentItem, event?: Event): void;
313
+ emitAction(item: AXCommentItem, action: AXMenuItem): void;
314
+ }
315
+
279
316
  /**
280
317
  * Renders a comment thread from a datasource (array or lazy callback).
281
318
  * Provide `itemTemplate` or `<ng-template axCommentItem>` to customize item UI;
@@ -283,7 +320,7 @@ declare class AXCommentReplyTextComponent {
283
320
  *
284
321
  * @category Components
285
322
  */
286
- declare class AXCommentViewComponent {
323
+ declare class AXCommentViewComponent implements AXCommentThreadHost {
287
324
  /** Comment data — a static array or a lazy-loading function. */
288
325
  readonly datasource: _angular_core.ModelSignal<AXCommentDataSource>;
289
326
  /**
@@ -301,7 +338,7 @@ declare class AXCommentViewComponent {
301
338
  private readonly _isLoading;
302
339
  readonly isLoading: _angular_core.Signal<boolean>;
303
340
  private loadGeneration;
304
- private syncingFromDatasource;
341
+ private readonly emptyReplies;
305
342
  private readonly isLazyDataSource;
306
343
  protected readonly hasDatasource: _angular_core.Signal<boolean>;
307
344
  protected readonly resolvedTemplate: _angular_core.Signal<TemplateRef<AXCommentItemTemplateContext>>;
@@ -357,16 +394,21 @@ declare class AXCommentViewComponent {
357
394
  * @returns Promise that resolves when expansion and any lazy load are complete.
358
395
  */
359
396
  setExpanded(id: string, expanded: boolean): Promise<void>;
360
- protected getId(item: AXCommentItem): string;
361
- protected getReplies(item: AXCommentItem): AXCommentItem[];
362
- protected getReplyCount(item: AXCommentItem): number;
363
- protected isExpanded(item: AXCommentItem): boolean;
364
- protected isItemLoading(item: AXCommentItem): boolean;
365
- protected getTemplateContext(item: AXCommentItem, level: number): AXCommentItemTemplateContext;
366
- protected onRepliesExpandedChange(item: AXCommentItem, expanded: boolean): Promise<void>;
367
- protected toggleLike(item: AXCommentItem, liked?: boolean): void;
368
- protected replyTo(item: AXCommentItem, event?: Event): void;
369
- protected emitAction(item: AXCommentItem, action: AXMenuItem): void;
397
+ getId(item: AXCommentItem): string;
398
+ /**
399
+ * Identity includes the fields the row renders. A same-id edit, like, or reply
400
+ * must refresh the row instead of leaving the previous snapshot on screen.
401
+ */
402
+ trackItem(item: AXCommentItem): string;
403
+ getReplies(item: AXCommentItem): AXCommentItem[];
404
+ getReplyCount(item: AXCommentItem): number;
405
+ isExpanded(item: AXCommentItem): boolean;
406
+ isItemLoading(item: AXCommentItem): boolean;
407
+ getTemplateContext(item: AXCommentItem, level: number): AXCommentItemTemplateContext;
408
+ onRepliesExpandedChange(item: AXCommentItem, expanded: boolean): Promise<void>;
409
+ toggleLike(item: AXCommentItem, liked?: boolean): void;
410
+ replyTo(item: AXCommentItem, event?: Event): void;
411
+ emitAction(item: AXCommentItem, action: AXMenuItem): void;
370
412
  private applyDatasource;
371
413
  private loadRootItems;
372
414
  private hydrateExpanded;
@@ -769,6 +769,7 @@ declare class AXRowSelectColumnComponent extends AXDataTableColumnComponent {
769
769
  * @defaultValue `false`
770
770
  */
771
771
  advanceSelect: i0.InputSignal<boolean>;
772
+ private readonly syncAdvanceSelectColumnWidth;
772
773
  /**
773
774
  * @ignore
774
775
  */
@@ -1440,6 +1441,10 @@ declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, Af
1440
1441
  */
1441
1442
  private measureColumnContentWidth;
1442
1443
  private isCommandColumn;
1444
+ /**
1445
+ * Select-column header chevron is absolutely positioned, so DOM auto-fit under-reports width.
1446
+ */
1447
+ private measureSelectColumnWidth;
1443
1448
  /**
1444
1449
  * Command buttons are a fixed icon size inside the table. Cloning them outside
1445
1450
  * `ax-data-table` drops that size and measures default button padding instead.
@@ -568,6 +568,11 @@ declare class AXLookupComponent<T = AXLookupItem> extends NXValueComponent imple
568
568
  protected onSelectAllHeaderMouseDown(event: Event): void;
569
569
  /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
570
570
  protected onBeforeInput(event: Event): void;
571
+ /**
572
+ * On pointer down, select the committed label so the next keystroke replaces it
573
+ * instead of editing character-by-character (single-select searchable trigger).
574
+ */
575
+ protected onTriggerPointerDown(event: PointerEvent): void;
571
576
  /**
572
577
  * Returns focus to the search field when list navigation requests it.
573
578
  */
@@ -30,6 +30,12 @@ declare class AXTooltipDirective {
30
30
  axTooltipDisabled: i0.InputSignal<boolean>;
31
31
  content: i0.InputSignal<string | TemplateRef<unknown>>;
32
32
  context: i0.InputSignal<unknown>;
33
+ /**
34
+ * When true, the tooltip opens on hover only if the host or a descendant is horizontally truncated.
35
+ *
36
+ * @defaultValue false
37
+ */
38
+ axTooltipOverflowOnly: i0.InputSignal<boolean>;
33
39
  private _placement;
34
40
  get placement(): AXPlacementType;
35
41
  set placement(v: AXPlacementType);
@@ -48,8 +54,12 @@ declare class AXTooltipDirective {
48
54
  private popoverRef;
49
55
  private ensurePopover;
50
56
  close(): void;
57
+ /** @ignore */
58
+ protected onHostMouseEnter(): void;
59
+ private isOverflowing;
60
+ private elementOverflows;
51
61
  static ɵfac: i0.ɵɵFactoryDeclaration<AXTooltipDirective, never>;
52
- static ɵdir: i0.ɵɵDirectiveDeclaration<AXTooltipDirective, "[axTooltip]", never, { "axTooltipDisabled": { "alias": "axTooltipDisabled"; "required": false; "isSignal": true; }; "content": { "alias": "axTooltip"; "required": false; "isSignal": true; }; "context": { "alias": "axTooltipContext"; "required": false; "isSignal": true; }; "placement": { "alias": "axTooltipPlacement"; "required": false; }; "offsetX": { "alias": "axTooltipOffsetX"; "required": false; }; "offsetY": { "alias": "axTooltipOffsetY"; "required": false; }; "openAfter": { "alias": "axTooltipOpenAfter"; "required": false; }; "closeAfter": { "alias": "axTooltipCloseAfter"; "required": false; }; }, {}, never, never, true, never>;
62
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AXTooltipDirective, "[axTooltip]", never, { "axTooltipDisabled": { "alias": "axTooltipDisabled"; "required": false; "isSignal": true; }; "content": { "alias": "axTooltip"; "required": false; "isSignal": true; }; "context": { "alias": "axTooltipContext"; "required": false; "isSignal": true; }; "axTooltipOverflowOnly": { "alias": "axTooltipOverflowOnly"; "required": false; "isSignal": true; }; "placement": { "alias": "axTooltipPlacement"; "required": false; }; "offsetX": { "alias": "axTooltipOffsetX"; "required": false; }; "offsetY": { "alias": "axTooltipOffsetY"; "required": false; }; "openAfter": { "alias": "axTooltipOpenAfter"; "required": false; }; "closeAfter": { "alias": "axTooltipCloseAfter"; "required": false; }; }, {}, never, never, true, never>;
53
63
  }
54
64
 
55
65
  declare class AXTooltipModule {