@nanahoshi/mona-ui 0.15.2 → 0.15.3

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.
@@ -146,6 +146,7 @@ class ListService {
146
146
  enabled: false,
147
147
  firstLast: false,
148
148
  showInfo: true,
149
+ pageSize: 10,
149
150
  pageSizeValues: true,
150
151
  previousNext: false,
151
152
  type: "numeric",
@@ -1,6 +1,6 @@
1
1
  import { NgTemplateOutlet } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { Directive, inject, DestroyRef, ElementRef, computed, contentChild, TemplateRef, input, output, effect, untracked, afterRenderEffect, Optional, SkipSelf, Component, afterNextRender } from '@angular/core';
3
+ import { Directive, inject, DestroyRef, ElementRef, computed, contentChild, TemplateRef, input, output, effect, untracked, afterRenderEffect, Optional, SkipSelf, Component, model, afterNextRender } from '@angular/core';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { ListService, ListComponent, ListHeaderTemplateDirective, ListFooterTemplateDirective, ListGroupHeaderTemplateDirective, ListItemTemplateDirective, ListNoDataTemplateDirective } from '@nanahoshi/mona-ui/internal/list';
6
6
  import { PagerComponent } from '@nanahoshi/mona-ui/pager';
@@ -390,35 +390,54 @@ class ListViewPageableDirective {
390
390
  firstLast: false,
391
391
  type: "numeric",
392
392
  previousNext: true,
393
+ pageSize: 10,
393
394
  pageSizeValues: [5, 10, 20, 25, 50, 100],
394
395
  visiblePages: 5
395
396
  };
396
397
  this.#listService = inject(ListService);
397
398
  this.options = input("", { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), alias: "monaListViewPageable" });
399
+ /**
400
+ * @description The current page. Supports two-way binding via `[(page)]`; updates when the user navigates the pager and can be set to navigate programmatically.
401
+ * @default 1
402
+ */
403
+ this.page = model(1, /* @ts-ignore */
404
+ ...(ngDevMode ? [{ debugName: "page" }] : /* istanbul ignore next */ []));
398
405
  effect(() => {
399
406
  const options = this.options();
400
407
  untracked(() => {
401
- if (options === "") {
402
- this.#listService.setPageableOptions(this.#defaultOptions);
408
+ const mergedOptions = options === "" ? this.#defaultOptions : { ...this.#defaultOptions, ...options };
409
+ this.#listService.setPageableOptions(mergedOptions);
410
+ this.#listService.pageState.update(s => ({ ...s, take: mergedOptions.pageSize }));
411
+ });
412
+ });
413
+ effect(() => {
414
+ const page = this.page();
415
+ untracked(() => {
416
+ const pageState = this.#listService.pageState();
417
+ if (pageState.page === page) {
418
+ return;
403
419
  }
404
- else {
405
- this.#listService.setPageableOptions({
406
- ...this.#defaultOptions,
407
- ...options
408
- });
420
+ this.#listService.pageState.set({ page, skip: (page - 1) * pageState.take, take: pageState.take });
421
+ });
422
+ });
423
+ effect(() => {
424
+ const pageState = this.#listService.pageState();
425
+ untracked(() => {
426
+ if (this.page() !== pageState.page) {
427
+ this.page.set(pageState.page);
409
428
  }
410
429
  });
411
430
  });
412
431
  }
413
432
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ListViewPageableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
414
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.6", type: ListViewPageableDirective, isStandalone: true, selector: "mona-list-view[monaListViewPageable]", inputs: { options: { classPropertyName: "options", publicName: "monaListViewPageable", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
433
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.6", type: ListViewPageableDirective, isStandalone: true, selector: "mona-list-view[monaListViewPageable]", inputs: { options: { classPropertyName: "options", publicName: "monaListViewPageable", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { page: "pageChange" }, ngImport: i0 }); }
415
434
  }
416
435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ListViewPageableDirective, decorators: [{
417
436
  type: Directive,
418
437
  args: [{
419
438
  selector: "mona-list-view[monaListViewPageable]"
420
439
  }]
421
- }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "monaListViewPageable", required: false }] }] } });
440
+ }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "monaListViewPageable", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }] } });
422
441
 
423
442
  class ListViewSelectableDirective {
424
443
  #defaultOptions;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanahoshi/mona-ui",
3
- "version": "0.15.2",
3
+ "version": "0.15.3",
4
4
  "description": "A very light Angular UI framework",
5
5
  "author": "Nanahoshi",
6
6
  "repository": {
@@ -70,6 +70,7 @@ type NavigationDirection = "next" | "previous" | "first" | "last" | "pageup" | "
70
70
  interface PagerSettings {
71
71
  enabled: boolean;
72
72
  firstLast: boolean;
73
+ pageSize: number;
73
74
  pageSizeValues: number[] | boolean;
74
75
  previousNext: boolean;
75
76
  showInfo: boolean;
@@ -159,10 +159,15 @@ declare class ListViewNoDataTemplateDirective {
159
159
 
160
160
  declare class ListViewPageableDirective {
161
161
  #private;
162
- options: _angular_core.InputSignal<"" | Partial<PagerSettings>>;
162
+ readonly options: _angular_core.InputSignal<"" | Partial<PagerSettings>>;
163
+ /**
164
+ * @description The current page. Supports two-way binding via `[(page)]`; updates when the user navigates the pager and can be set to navigate programmatically.
165
+ * @default 1
166
+ */
167
+ readonly page: _angular_core.ModelSignal<number>;
163
168
  constructor();
164
169
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListViewPageableDirective, never>;
165
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ListViewPageableDirective, "mona-list-view[monaListViewPageable]", never, { "options": { "alias": "monaListViewPageable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
170
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ListViewPageableDirective, "mona-list-view[monaListViewPageable]", never, { "options": { "alias": "monaListViewPageable"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; }, never, never, true, never>;
166
171
  }
167
172
 
168
173
  declare class ListViewSelectableDirective<T, K = unknown> {