@ngneers/controls 0.0.1-pre5 → 0.0.1-pre6

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 (120) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +32 -32
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-api-ng.mjs +19 -19
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
  5. package/fesm2022/ngneers-controls-api-resize.mjs +706 -0
  6. package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
  7. package/fesm2022/ngneers-controls-avatar.mjs +13 -13
  8. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
  9. package/fesm2022/ngneers-controls-base.mjs +89 -64
  10. package/fesm2022/ngneers-controls-base.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-breadcrumb.mjs +18 -18
  12. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-button-group.mjs +8 -8
  14. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
  15. package/fesm2022/ngneers-controls-button.mjs +15 -10
  16. package/fesm2022/ngneers-controls-button.mjs.map +1 -1
  17. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs → ngneers-controls-calendar-time-Bzlv9Vkn.mjs} +9 -9
  18. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs.map → ngneers-controls-calendar-time-Bzlv9Vkn.mjs.map} +1 -1
  19. package/fesm2022/ngneers-controls-calendar.mjs +54 -54
  20. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-checkbox.mjs +9 -9
  22. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-chip.mjs +6 -6
  24. package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
  25. package/fesm2022/ngneers-controls-defer.mjs +10 -10
  26. package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
  27. package/fesm2022/ngneers-controls-dialog.mjs +37 -39
  28. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-directives.mjs +45 -39
  30. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-drawer.mjs +28 -28
  32. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-edit-inplace.mjs +15 -15
  34. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-filter.mjs +192 -44
  36. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  37. package/fesm2022/{ngneers-controls-i18n-de-CdTPeBiR.mjs → ngneers-controls-i18n-de-CF0xTWEX.mjs} +9 -5
  38. package/fesm2022/ngneers-controls-i18n-de-CF0xTWEX.mjs.map +1 -0
  39. package/fesm2022/{ngneers-controls-i18n-en-Cfp2pOLY.mjs → ngneers-controls-i18n-en-8B7xAjH2.mjs} +9 -5
  40. package/fesm2022/ngneers-controls-i18n-en-8B7xAjH2.mjs.map +1 -0
  41. package/fesm2022/ngneers-controls-i18n.mjs +5 -5
  42. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
  43. package/fesm2022/ngneers-controls-icon.mjs +10 -10
  44. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-inplace.mjs +18 -18
  46. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-input-field.mjs +14 -14
  48. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-input-mask.mjs +8 -8
  50. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
  51. package/fesm2022/ngneers-controls-input.mjs +6 -6
  52. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-item-view.mjs +33 -33
  54. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-list-box.mjs +31 -31
  56. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-menu.mjs +32 -32
  58. package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-message.mjs +4 -4
  60. package/fesm2022/ngneers-controls-message.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-paginator.mjs +12 -12
  62. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  63. package/fesm2022/ngneers-controls-popover.mjs +13 -13
  64. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  65. package/fesm2022/ngneers-controls-progress.mjs +16 -16
  66. package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-scroller.mjs +74 -39
  68. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-select-button.mjs +6 -6
  70. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  71. package/fesm2022/ngneers-controls-select.mjs +46 -46
  72. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-slider.mjs +11 -11
  74. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-spinner.mjs +7 -7
  76. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
  77. package/fesm2022/ngneers-controls-splitter.mjs +141 -328
  78. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
  79. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  80. package/fesm2022/ngneers-controls-table.mjs +1520 -80
  81. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  82. package/fesm2022/ngneers-controls-tabs.mjs +40 -39
  83. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  84. package/fesm2022/ngneers-controls-tag.mjs +4 -4
  85. package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
  86. package/fesm2022/ngneers-controls-toast.mjs +18 -18
  87. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  88. package/fesm2022/ngneers-controls-toggle-button.mjs +9 -9
  89. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  90. package/fesm2022/ngneers-controls-tooltip.mjs +36 -36
  91. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  92. package/fesm2022/ngneers-controls-utils-ng.mjs +9 -9
  93. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
  94. package/package.json +14 -10
  95. package/types/ngneers-controls-api-ng.d.ts +2 -2
  96. package/types/ngneers-controls-api-resize.d.ts +318 -0
  97. package/types/ngneers-controls-base.d.ts +8 -0
  98. package/types/ngneers-controls-breadcrumb.d.ts +1 -1
  99. package/types/ngneers-controls-button.d.ts +13 -8
  100. package/types/ngneers-controls-calendar.d.ts +5 -1
  101. package/types/ngneers-controls-checkbox.d.ts +1 -1
  102. package/types/ngneers-controls-directives.d.ts +7 -1
  103. package/types/ngneers-controls-drawer.d.ts +4 -0
  104. package/types/ngneers-controls-edit-inplace.d.ts +4 -0
  105. package/types/ngneers-controls-filter.d.ts +53 -4
  106. package/types/ngneers-controls-i18n.d.ts +4 -0
  107. package/types/ngneers-controls-icon.d.ts +1 -1
  108. package/types/ngneers-controls-input-field.d.ts +4 -0
  109. package/types/ngneers-controls-list-box.d.ts +5 -1
  110. package/types/ngneers-controls-menu.d.ts +1 -1
  111. package/types/ngneers-controls-paginator.d.ts +4 -0
  112. package/types/ngneers-controls-popover.d.ts +1 -1
  113. package/types/ngneers-controls-scroller.d.ts +12 -2
  114. package/types/ngneers-controls-select.d.ts +6 -2
  115. package/types/ngneers-controls-spinner.d.ts +1 -1
  116. package/types/ngneers-controls-splitter.d.ts +29 -59
  117. package/types/ngneers-controls-table.d.ts +392 -24
  118. package/types/ngneers-controls-toast.d.ts +1 -1
  119. package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +0 -1
  120. package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +0 -1
@@ -20,30 +20,30 @@ class NgnPaginator extends NgnBase {
20
20
  /**
21
21
  * Total number of items to paginate.
22
22
  */
23
- totalItems = input.required(...(ngDevMode ? [{ debugName: "totalItems" }] : []));
23
+ totalItems = input.required(...(ngDevMode ? [{ debugName: "totalItems" }] : /* istanbul ignore next */ []));
24
24
  /**
25
25
  * Number of items per page. If not set, the first value from `possiblePageSizes` will be used.
26
26
  */
27
- pageSize = model(...(ngDevMode ? [undefined, { debugName: "pageSize" }] : []));
27
+ pageSize = model(...(ngDevMode ? [undefined, { debugName: "pageSize" }] : /* istanbul ignore next */ []));
28
28
  /**
29
29
  * Possible page sizes to choose from.
30
30
  * @default [5, 10, 25, 50]
31
31
  */
32
- possiblePageSizes = input([5, 10, 25, 50], { ...(ngDevMode ? { debugName: "possiblePageSizes" } : {}), transform: (sizes) => sizes.sort((a, b) => a - b) });
32
+ possiblePageSizes = input([5, 10, 25, 50], { ...(ngDevMode ? { debugName: "possiblePageSizes" } : /* istanbul ignore next */ {}), transform: (sizes) => sizes.sort((a, b) => a - b) });
33
33
  /**
34
34
  * If set to `true`, the page size selector will be hidden and the page size cannot be changed by the user.
35
35
  * @default false
36
36
  */
37
- fixedPageSize = input(false, ...(ngDevMode ? [{ debugName: "fixedPageSize" }] : []));
37
+ fixedPageSize = input(false, ...(ngDevMode ? [{ debugName: "fixedPageSize" }] : /* istanbul ignore next */ []));
38
38
  appliedPageSize = computed(() => this.pageSize() ||
39
39
  this.possiblePageSizes()[0] ||
40
- throwExp('NgnPaginator', 'At least one page size must be provided'), ...(ngDevMode ? [{ debugName: "appliedPageSize" }] : []));
41
- pageCount = computed(() => Math.ceil(this.totalItems() / this.appliedPageSize()), ...(ngDevMode ? [{ debugName: "pageCount" }] : []));
42
- pages = computed(() => Array.from({ length: this.pageCount() }, (_, i) => ({ page: i })), ...(ngDevMode ? [{ debugName: "pages" }] : []));
40
+ throwExp('NgnPaginator', 'At least one page size must be provided'), ...(ngDevMode ? [{ debugName: "appliedPageSize" }] : /* istanbul ignore next */ []));
41
+ pageCount = computed(() => Math.ceil(this.totalItems() / this.appliedPageSize()), ...(ngDevMode ? [{ debugName: "pageCount" }] : /* istanbul ignore next */ []));
42
+ pages = computed(() => Array.from({ length: this.pageCount() }, (_, i) => ({ page: i })), ...(ngDevMode ? [{ debugName: "pages" }] : /* istanbul ignore next */ []));
43
43
  pageSizeOptions = computed(() => this.possiblePageSizes().map(size => ({
44
44
  label: size.toString(),
45
45
  value: size,
46
- })), ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : []));
46
+ })), ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : /* istanbul ignore next */ []));
47
47
  /**
48
48
  * Emits the current pagination state whenever the page or page size changes.
49
49
  */
@@ -52,7 +52,7 @@ class NgnPaginator extends NgnBase {
52
52
  * Current page index (zero-based).
53
53
  * @default 0
54
54
  */
55
- page = model(0, ...(ngDevMode ? [{ debugName: "page" }] : []));
55
+ page = model(0, ...(ngDevMode ? [{ debugName: "page" }] : /* istanbul ignore next */ []));
56
56
  constructor() {
57
57
  super();
58
58
  effect(() => {
@@ -95,10 +95,10 @@ class NgnPaginator extends NgnBase {
95
95
  lineHeight: '0',
96
96
  };
97
97
  }
98
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnPaginator, deps: [], target: i0.ɵɵFactoryTarget.Component });
99
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnPaginator, isStandalone: true, selector: "ngn-paginator", inputs: { totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, possiblePageSizes: { classPropertyName: "possiblePageSizes", publicName: "possiblePageSizes", isSignal: true, isRequired: false, transformFunction: null }, fixedPageSize: { classPropertyName: "fixedPageSize", publicName: "fixedPageSize", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageSize: "pageSizeChange", value: "value", page: "pageChange" }, providers: [provideSelf(NgnPaginator)], usesInheritance: true, ngImport: i0, template: "<button ngnButton [kind]=\"'icon'\" (click)=\"previousPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n</button>\r\n\r\n<ngn-item-view\r\n #itemView\r\n [items]=\"pages()\"\r\n [idField]=\"'page'\"\r\n [overflowStrategy]=\"'aroundIndex'\"\r\n [overflowStrategyFreezeCount]=\"1\"\r\n [overflowStrategyIndex]=\"page()\"\r\n [sameWidthItems]=\"true\"\r\n>\r\n <ng-template #item let-item [ngnTemplate]=\"itemView.templateTypes.item\">\r\n @let buttonStyles = getButtonFontStyles(item.page);\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ngStyle]=\"buttonStyles\"\r\n [style.background]=\"page() === item.page ? 'var(--ngn-color-secondary-500)' : null\"\r\n (click)=\"page.set(item.page)\"\r\n >\r\n {{ item.page + 1 }}\r\n </button>\r\n </ng-template>\r\n <ng-template #overflow let-item [ngnTemplate]=\"itemView.templateTypes.overflow\">\r\n <button ngnButton [kind]=\"'icon'\" style=\"opacity: 0.5\" disabled>...</button>\r\n </ng-template>\r\n</ngn-item-view>\r\n\r\n<button ngnButton [kind]=\"'icon'\" (click)=\"nextPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n</button>\r\n\r\n@if (!fixedPageSize()) {\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'page-size-options'\"\r\n [options]=\"pageSizeOptions()\"\r\n [value]=\"appliedPageSize()\"\r\n (valueChange)=\"pageSize.set($event)\"\r\n />\r\n}\r\n", dependencies: [{ kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "component", type: NgnItemView, selector: "ngn-item-view", inputs: ["idField", "items", "separator", "iconItemSeparator", "overflowStrategy", "overflowStrategyFreezeCount", "overflowStrategyIndex", "sameWidthItems"] }, { kind: "component", type: NgnSelect, selector: "ngn-select", inputs: ["popoverOptions", "options", "filter", "filterText", "filterIcon", "dropdownIcon", "virtual", "itemHeight", "editable", "editableAutoFilter", "multiple", "scrollToSelectedItemOnOpen", "tabindex", "checkbox"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
98
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnPaginator, deps: [], target: i0.ɵɵFactoryTarget.Component });
99
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: NgnPaginator, isStandalone: true, selector: "ngn-paginator", inputs: { totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, possiblePageSizes: { classPropertyName: "possiblePageSizes", publicName: "possiblePageSizes", isSignal: true, isRequired: false, transformFunction: null }, fixedPageSize: { classPropertyName: "fixedPageSize", publicName: "fixedPageSize", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageSize: "pageSizeChange", value: "value", page: "pageChange" }, providers: [provideSelf(NgnPaginator)], usesInheritance: true, ngImport: i0, template: "<button ngnButton [kind]=\"'icon'\" (click)=\"previousPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n</button>\r\n\r\n<ngn-item-view\r\n #itemView\r\n [items]=\"pages()\"\r\n [idField]=\"'page'\"\r\n [overflowStrategy]=\"'aroundIndex'\"\r\n [overflowStrategyFreezeCount]=\"1\"\r\n [overflowStrategyIndex]=\"page()\"\r\n [sameWidthItems]=\"true\"\r\n>\r\n <ng-template #item let-item [ngnTemplate]=\"itemView.templateTypes.item\">\r\n @let buttonStyles = getButtonFontStyles(item.page);\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ngStyle]=\"buttonStyles\"\r\n [style.background]=\"page() === item.page ? 'var(--ngn-color-secondary-500)' : null\"\r\n (click)=\"page.set(item.page)\"\r\n >\r\n {{ item.page + 1 }}\r\n </button>\r\n </ng-template>\r\n <ng-template #overflow let-item [ngnTemplate]=\"itemView.templateTypes.overflow\">\r\n <button ngnButton [kind]=\"'icon'\" style=\"opacity: 0.5\" disabled>...</button>\r\n </ng-template>\r\n</ngn-item-view>\r\n\r\n<button ngnButton [kind]=\"'icon'\" (click)=\"nextPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n</button>\r\n\r\n@if (!fixedPageSize()) {\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'page-size-options'\"\r\n [options]=\"pageSizeOptions()\"\r\n [value]=\"appliedPageSize()\"\r\n (valueChange)=\"pageSize.set($event)\"\r\n />\r\n}\r\n", dependencies: [{ kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "component", type: NgnItemView, selector: "ngn-item-view", inputs: ["idField", "items", "separator", "iconItemSeparator", "overflowStrategy", "overflowStrategyFreezeCount", "overflowStrategyIndex", "sameWidthItems"] }, { kind: "component", type: NgnSelect, selector: "ngn-select", inputs: ["popoverOptions", "options", "filter", "filterText", "filterIcon", "dropdownIcon", "virtual", "itemHeight", "editable", "editableAutoFilter", "multiple", "scrollToSelectedItemOnOpen", "tabindex", "checkbox"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
100
100
  }
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnPaginator, decorators: [{
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnPaginator, decorators: [{
102
102
  type: Component,
103
103
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-paginator', imports: [NgnButton, NgnIcon, NgnItemView, NgnSelect, NgnTemplate, NgStyle, NgnPt], providers: [provideSelf(NgnPaginator)], template: "<button ngnButton [kind]=\"'icon'\" (click)=\"previousPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n</button>\r\n\r\n<ngn-item-view\r\n #itemView\r\n [items]=\"pages()\"\r\n [idField]=\"'page'\"\r\n [overflowStrategy]=\"'aroundIndex'\"\r\n [overflowStrategyFreezeCount]=\"1\"\r\n [overflowStrategyIndex]=\"page()\"\r\n [sameWidthItems]=\"true\"\r\n>\r\n <ng-template #item let-item [ngnTemplate]=\"itemView.templateTypes.item\">\r\n @let buttonStyles = getButtonFontStyles(item.page);\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ngStyle]=\"buttonStyles\"\r\n [style.background]=\"page() === item.page ? 'var(--ngn-color-secondary-500)' : null\"\r\n (click)=\"page.set(item.page)\"\r\n >\r\n {{ item.page + 1 }}\r\n </button>\r\n </ng-template>\r\n <ng-template #overflow let-item [ngnTemplate]=\"itemView.templateTypes.overflow\">\r\n <button ngnButton [kind]=\"'icon'\" style=\"opacity: 0.5\" disabled>...</button>\r\n </ng-template>\r\n</ngn-item-view>\r\n\r\n<button ngnButton [kind]=\"'icon'\" (click)=\"nextPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n</button>\r\n\r\n@if (!fixedPageSize()) {\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'page-size-options'\"\r\n [options]=\"pageSizeOptions()\"\r\n [value]=\"appliedPageSize()\"\r\n (valueChange)=\"pageSize.set($event)\"\r\n />\r\n}\r\n" }]
104
104
  }], ctorParameters: () => [], propDecorators: { totalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalItems", required: true }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }, { type: i0.Output, args: ["pageSizeChange"] }], possiblePageSizes: [{ type: i0.Input, args: [{ isSignal: true, alias: "possiblePageSizes", required: false }] }], fixedPageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "fixedPageSize", required: false }] }], value: [{ type: i0.Output, args: ["value"] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-paginator.mjs","sources":["../../src/paginator/paginator.ts","../../src/paginator/paginator.html","../../src/paginator/ngneers-controls-paginator.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n} from '@angular/core';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { NgnBase, NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { NgnItemView } from '@ngneers/controls/item-view';\r\nimport { NgnSelect } from '@ngneers/controls/select';\r\nimport { throwExp } from '@ngneers/controls/utils';\r\nimport { paginatorControlTemplate } from '@ngneers/controls-themes/templates/paginator';\r\n\r\nimport type { PaginationState } from './types';\r\nimport type { NgnItem } from '@ngneers/controls/api';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-paginator',\r\n templateUrl: './paginator.html',\r\n imports: [NgnButton, NgnIcon, NgnItemView, NgnSelect, NgnTemplate, NgStyle, NgnPt],\r\n providers: [provideSelf(NgnPaginator)],\r\n})\r\nexport class NgnPaginator extends NgnBase<'paginator'> {\r\n protected readonly theme = this.injectThemeTemplate(paginatorControlTemplate, 'root');\r\n protected readonly i18n = inject(I18n).translations;\r\n\r\n /**\r\n * Total number of items to paginate.\r\n */\r\n public readonly totalItems = input.required<number>();\r\n /**\r\n * Number of items per page. If not set, the first value from `possiblePageSizes` will be used.\r\n */\r\n public readonly pageSize = model<number>();\r\n /**\r\n * Possible page sizes to choose from.\r\n * @default [5, 10, 25, 50]\r\n */\r\n public readonly possiblePageSizes = input([5, 10, 25, 50], {\r\n transform: (sizes: number[]) => sizes.sort((a, b) => a - b),\r\n });\r\n /**\r\n * If set to `true`, the page size selector will be hidden and the page size cannot be changed by the user.\r\n * @default false\r\n */\r\n public readonly fixedPageSize = input(false);\r\n\r\n protected readonly appliedPageSize = computed(\r\n () =>\r\n this.pageSize() ||\r\n this.possiblePageSizes()[0] ||\r\n throwExp('NgnPaginator', 'At least one page size must be provided')\r\n );\r\n protected readonly pageCount = computed(() =>\r\n Math.ceil(this.totalItems() / this.appliedPageSize())\r\n );\r\n protected readonly pages = computed(() =>\r\n Array.from({ length: this.pageCount() }, (_, i) => ({ page: i }))\r\n );\r\n protected readonly pageSizeOptions = computed<NgnItem[]>(() =>\r\n this.possiblePageSizes().map(size => ({\r\n label: size.toString(),\r\n value: size,\r\n }))\r\n );\r\n\r\n /**\r\n * Emits the current pagination state whenever the page or page size changes.\r\n */\r\n public readonly value = output<PaginationState>();\r\n /**\r\n * Current page index (zero-based).\r\n * @default 0\r\n */\r\n public readonly page = model(0);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const page = this.page();\r\n const pageSize = this.appliedPageSize();\r\n this.value.emit({\r\n page: {\r\n current: page,\r\n size: pageSize,\r\n },\r\n slice: {\r\n skip: page * pageSize,\r\n take: pageSize,\r\n },\r\n });\r\n });\r\n }\r\n\r\n protected previousPage(event: PointerEvent): void {\r\n const amount = event.shiftKey ? 10 : event.ctrlKey ? 100 : 1;\r\n const newPage = Math.max(this.page() - amount, 0);\r\n this.page.set(newPage);\r\n }\r\n\r\n protected nextPage(event: PointerEvent): void {\r\n const amount = event.shiftKey ? 10 : event.ctrlKey ? 100 : 1;\r\n const newPage = Math.min(this.page() + amount, this.pageCount() - 1);\r\n this.page.set(newPage);\r\n }\r\n\r\n protected getButtonFontStyles(page: number): {\r\n [klass: string]: string;\r\n } {\r\n function getFontSizeMultiplier() {\r\n const charCount = (page + 1).toString().length;\r\n if (charCount <= 2) {\r\n return 1;\r\n }\r\n return Math.pow(0.85, charCount - 2);\r\n }\r\n\r\n return {\r\n fontSize: `${getFontSizeMultiplier()}em`,\r\n width: 'calc(1rem + 2 * var(--padding))',\r\n height: 'calc(1rem + 2 * var(--padding))',\r\n lineHeight: '0',\r\n };\r\n }\r\n}\r\n","<button ngnButton [kind]=\"'icon'\" (click)=\"previousPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n</button>\r\n\r\n<ngn-item-view\r\n #itemView\r\n [items]=\"pages()\"\r\n [idField]=\"'page'\"\r\n [overflowStrategy]=\"'aroundIndex'\"\r\n [overflowStrategyFreezeCount]=\"1\"\r\n [overflowStrategyIndex]=\"page()\"\r\n [sameWidthItems]=\"true\"\r\n>\r\n <ng-template #item let-item [ngnTemplate]=\"itemView.templateTypes.item\">\r\n @let buttonStyles = getButtonFontStyles(item.page);\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ngStyle]=\"buttonStyles\"\r\n [style.background]=\"page() === item.page ? 'var(--ngn-color-secondary-500)' : null\"\r\n (click)=\"page.set(item.page)\"\r\n >\r\n {{ item.page + 1 }}\r\n </button>\r\n </ng-template>\r\n <ng-template #overflow let-item [ngnTemplate]=\"itemView.templateTypes.overflow\">\r\n <button ngnButton [kind]=\"'icon'\" style=\"opacity: 0.5\" disabled>...</button>\r\n </ng-template>\r\n</ngn-item-view>\r\n\r\n<button ngnButton [kind]=\"'icon'\" (click)=\"nextPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n</button>\r\n\r\n@if (!fixedPageSize()) {\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'page-size-options'\"\r\n [options]=\"pageSizeOptions()\"\r\n [value]=\"appliedPageSize()\"\r\n (valueChange)=\"pageSize.set($event)\"\r\n />\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-paginator.mjs","sources":["../../src/paginator/paginator.ts","../../src/paginator/paginator.html","../../src/paginator/ngneers-controls-paginator.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n} from '@angular/core';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { NgnBase, NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { NgnItemView } from '@ngneers/controls/item-view';\r\nimport { NgnSelect } from '@ngneers/controls/select';\r\nimport { throwExp } from '@ngneers/controls/utils';\r\nimport { paginatorControlTemplate } from '@ngneers/controls-themes/templates/paginator';\r\n\r\nimport type { PaginationState } from './types';\r\nimport type { NgnItem } from '@ngneers/controls/api';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-paginator',\r\n templateUrl: './paginator.html',\r\n imports: [NgnButton, NgnIcon, NgnItemView, NgnSelect, NgnTemplate, NgStyle, NgnPt],\r\n providers: [provideSelf(NgnPaginator)],\r\n})\r\nexport class NgnPaginator extends NgnBase<'paginator'> {\r\n protected readonly theme = this.injectThemeTemplate(paginatorControlTemplate, 'root');\r\n protected readonly i18n = inject(I18n).translations;\r\n\r\n /**\r\n * Total number of items to paginate.\r\n */\r\n public readonly totalItems = input.required<number>();\r\n /**\r\n * Number of items per page. If not set, the first value from `possiblePageSizes` will be used.\r\n */\r\n public readonly pageSize = model<number>();\r\n /**\r\n * Possible page sizes to choose from.\r\n * @default [5, 10, 25, 50]\r\n */\r\n public readonly possiblePageSizes = input([5, 10, 25, 50], {\r\n transform: (sizes: number[]) => sizes.sort((a, b) => a - b),\r\n });\r\n /**\r\n * If set to `true`, the page size selector will be hidden and the page size cannot be changed by the user.\r\n * @default false\r\n */\r\n public readonly fixedPageSize = input(false);\r\n\r\n protected readonly appliedPageSize = computed(\r\n () =>\r\n this.pageSize() ||\r\n this.possiblePageSizes()[0] ||\r\n throwExp('NgnPaginator', 'At least one page size must be provided')\r\n );\r\n protected readonly pageCount = computed(() =>\r\n Math.ceil(this.totalItems() / this.appliedPageSize())\r\n );\r\n protected readonly pages = computed(() =>\r\n Array.from({ length: this.pageCount() }, (_, i) => ({ page: i }))\r\n );\r\n protected readonly pageSizeOptions = computed<NgnItem[]>(() =>\r\n this.possiblePageSizes().map(size => ({\r\n label: size.toString(),\r\n value: size,\r\n }))\r\n );\r\n\r\n /**\r\n * Emits the current pagination state whenever the page or page size changes.\r\n */\r\n public readonly value = output<PaginationState>();\r\n /**\r\n * Current page index (zero-based).\r\n * @default 0\r\n */\r\n public readonly page = model(0);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const page = this.page();\r\n const pageSize = this.appliedPageSize();\r\n this.value.emit({\r\n page: {\r\n current: page,\r\n size: pageSize,\r\n },\r\n slice: {\r\n skip: page * pageSize,\r\n take: pageSize,\r\n },\r\n });\r\n });\r\n }\r\n\r\n protected previousPage(event: PointerEvent): void {\r\n const amount = event.shiftKey ? 10 : event.ctrlKey ? 100 : 1;\r\n const newPage = Math.max(this.page() - amount, 0);\r\n this.page.set(newPage);\r\n }\r\n\r\n protected nextPage(event: PointerEvent): void {\r\n const amount = event.shiftKey ? 10 : event.ctrlKey ? 100 : 1;\r\n const newPage = Math.min(this.page() + amount, this.pageCount() - 1);\r\n this.page.set(newPage);\r\n }\r\n\r\n protected getButtonFontStyles(page: number): {\r\n [klass: string]: string;\r\n } {\r\n function getFontSizeMultiplier() {\r\n const charCount = (page + 1).toString().length;\r\n if (charCount <= 2) {\r\n return 1;\r\n }\r\n return Math.pow(0.85, charCount - 2);\r\n }\r\n\r\n return {\r\n fontSize: `${getFontSizeMultiplier()}em`,\r\n width: 'calc(1rem + 2 * var(--padding))',\r\n height: 'calc(1rem + 2 * var(--padding))',\r\n lineHeight: '0',\r\n };\r\n }\r\n}\r\n","<button ngnButton [kind]=\"'icon'\" (click)=\"previousPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n</button>\r\n\r\n<ngn-item-view\r\n #itemView\r\n [items]=\"pages()\"\r\n [idField]=\"'page'\"\r\n [overflowStrategy]=\"'aroundIndex'\"\r\n [overflowStrategyFreezeCount]=\"1\"\r\n [overflowStrategyIndex]=\"page()\"\r\n [sameWidthItems]=\"true\"\r\n>\r\n <ng-template #item let-item [ngnTemplate]=\"itemView.templateTypes.item\">\r\n @let buttonStyles = getButtonFontStyles(item.page);\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ngStyle]=\"buttonStyles\"\r\n [style.background]=\"page() === item.page ? 'var(--ngn-color-secondary-500)' : null\"\r\n (click)=\"page.set(item.page)\"\r\n >\r\n {{ item.page + 1 }}\r\n </button>\r\n </ng-template>\r\n <ng-template #overflow let-item [ngnTemplate]=\"itemView.templateTypes.overflow\">\r\n <button ngnButton [kind]=\"'icon'\" style=\"opacity: 0.5\" disabled>...</button>\r\n </ng-template>\r\n</ngn-item-view>\r\n\r\n<button ngnButton [kind]=\"'icon'\" (click)=\"nextPage($event)\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n</button>\r\n\r\n@if (!fixedPageSize()) {\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'page-size-options'\"\r\n [options]=\"pageSizeOptions()\"\r\n [value]=\"appliedPageSize()\"\r\n (valueChange)=\"pageSize.set($event)\"\r\n />\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAwBA;;AAEG;AAQG,MAAO,YAAa,SAAQ,OAAoB,CAAA;IACjC,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,MAAM,CAAC;AAClE,IAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY;AAEnD;;AAEG;AACa,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,gFAAU;AACrD;;AAEG;IACa,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AAC1C;;;AAGG;AACa,IAAA,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,8BAAA,EAAA,CAAA,EACvD,SAAS,EAAE,CAAC,KAAe,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAC3D;AACF;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK,CAAC,KAAK,oFAAC;IAEzB,eAAe,GAAG,QAAQ,CAC3C,MACE,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AAC3B,QAAA,QAAQ,CAAC,cAAc,EAAE,yCAAyC,CAAC,sFACtE;IACkB,SAAS,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACtD;AACkB,IAAA,KAAK,GAAG,QAAQ,CAAC,MAClC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,4EAClE;AACkB,IAAA,eAAe,GAAG,QAAQ,CAAY,MACvD,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;AACpC,QAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;AACtB,QAAA,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC,sFACJ;AAED;;AAEG;IACa,KAAK,GAAG,MAAM,EAAmB;AACjD;;;AAGG;AACa,IAAA,IAAI,GAAG,KAAK,CAAC,CAAC,2EAAC;AAE/B,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA;AACD,gBAAA,KAAK,EAAE;oBACL,IAAI,EAAE,IAAI,GAAG,QAAQ;AACrB,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA;AACF,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,YAAY,CAAC,KAAmB,EAAA;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC;AAC5D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IACxB;AAEU,IAAA,QAAQ,CAAC,KAAmB,EAAA;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IACxB;AAEU,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAGxC,QAAA,SAAS,qBAAqB,GAAA;AAC5B,YAAA,MAAM,SAAS,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM;AAC9C,YAAA,IAAI,SAAS,IAAI,CAAC,EAAE;AAClB,gBAAA,OAAO,CAAC;YACV;YACA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC;QACtC;QAEA,OAAO;AACL,YAAA,QAAQ,EAAE,CAAA,EAAG,qBAAqB,EAAE,CAAA,EAAA,CAAI;AACxC,YAAA,KAAK,EAAE,iCAAiC;AACxC,YAAA,MAAM,EAAE,iCAAiC;AACzC,YAAA,UAAU,EAAE,GAAG;SAChB;IACH;uGArGW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFZ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCxC,45CA2CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDZY,SAAS,yHAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,6BAAA,EAAA,uBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,iRAAE,WAAW,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGtE,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;sCACS,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,eAAe,EAAA,OAAA,EAEhB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAA,SAAA,EACvE,CAAC,WAAW,CAAA,YAAA,CAAc,CAAC,EAAA,QAAA,EAAA,45CAAA,EAAA;;;AEhCxC;;AAEG;;;;"}
@@ -24,37 +24,37 @@ class NgnPopover extends NgnBase {
24
24
  *
25
25
  * You probably want to react to openChange events from outside to update your variable accordingly.
26
26
  */
27
- open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
27
+ open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
28
28
  /**
29
29
  * The element to which the popover is anchored.
30
30
  */
31
- anchor = input.required(...(ngDevMode ? [{ debugName: "anchor" }] : []));
31
+ anchor = input.required(...(ngDevMode ? [{ debugName: "anchor" }] : /* istanbul ignore next */ []));
32
32
  /**
33
33
  * The popover options.
34
34
  */
35
- options = input(...(ngDevMode ? [undefined, { debugName: "options" }] : []));
35
+ options = input(...(ngDevMode ? [undefined, { debugName: "options" }] : /* istanbul ignore next */ []));
36
36
  /**
37
37
  * Set to true for scrollable/shrink-able content
38
38
  */
39
- hasShrinkableContent = input(false, { ...(ngDevMode ? { debugName: "hasShrinkableContent" } : {}), transform: booleanAttribute });
39
+ hasShrinkableContent = input(false, { ...(ngDevMode ? { debugName: "hasShrinkableContent" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
40
40
  /**
41
41
  * How the drawer closes depending on user interaction.
42
42
  * @default 'any'
43
43
  */
44
- closeBy = input('any', ...(ngDevMode ? [{ debugName: "closeBy" }] : []));
45
- lazyContent = contentChild('lazy', ...(ngDevMode ? [{ debugName: "lazyContent" }] : []));
44
+ closeBy = input('any', ...(ngDevMode ? [{ debugName: "closeBy" }] : /* istanbul ignore next */ []));
45
+ lazyContent = contentChild('lazy', ...(ngDevMode ? [{ debugName: "lazyContent" }] : /* istanbul ignore next */ []));
46
46
  _content = viewChild.required('content');
47
- closeByPopover = computed(() => toPopoverCloseBy(this.closeBy()), ...(ngDevMode ? [{ debugName: "closeByPopover" }] : []));
48
- isFullyClosed = signal(true, ...(ngDevMode ? [{ debugName: "isFullyClosed" }] : []));
47
+ closeByPopover = computed(() => toPopoverCloseBy(this.closeBy()), ...(ngDevMode ? [{ debugName: "closeByPopover" }] : /* istanbul ignore next */ []));
48
+ isFullyClosed = signal(true, ...(ngDevMode ? [{ debugName: "isFullyClosed" }] : /* istanbul ignore next */ []));
49
49
  _skipEmitCloseEvent = false;
50
50
  _triggeredByInput = false;
51
51
  appliedOptions = computed(() => ({
52
52
  cache: false,
53
53
  ...this.options(),
54
- }), ...(ngDevMode ? [{ debugName: "appliedOptions" }] : []));
54
+ }), ...(ngDevMode ? [{ debugName: "appliedOptions" }] : /* istanbul ignore next */ []));
55
55
  _injector = inject(Injector);
56
56
  _popoverRef = viewChild.required('popover');
57
- _popover = computed(() => this._popoverRef().nativeElement, ...(ngDevMode ? [{ debugName: "_popover" }] : []));
57
+ _popover = computed(() => this._popoverRef().nativeElement, ...(ngDevMode ? [{ debugName: "_popover" }] : /* istanbul ignore next */ []));
58
58
  _autoPos = computedWithPrevious(prev => {
59
59
  prev?.stop();
60
60
  const popoverEl = this._popover();
@@ -151,10 +151,10 @@ class NgnPopover extends NgnBase {
151
151
  this.isFullyClosed.set(false);
152
152
  }
153
153
  }
154
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnPopover, deps: [], target: i0.ɵɵFactoryTarget.Component });
155
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.0", type: NgnPopover, isStandalone: true, selector: "ngn-popover", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, hasShrinkableContent: { classPropertyName: "hasShrinkableContent", publicName: "hasShrinkableContent", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", closing: "closing", open: "openChange" }, host: { listeners: { "click": "$event.stopPropagation()" } }, providers: [provideSelf(NgnPopover)], queries: [{ propertyName: "lazyContent", first: true, predicate: ["lazy"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_content", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "_popoverRef", first: true, predicate: ["popover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'root'\"\r\n #popover\r\n [attr.popover]=\"closeByPopover()\"\r\n (toggle)=\"onToggle($event)\"\r\n [style.min-height]=\"\r\n hasShrinkableContent()\r\n ? (this.appliedOptions().sizeConstraints?.minHeight ?? null)\r\n : 'fit-content'\r\n \"\r\n>\r\n <div\r\n #content\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n content: true,\r\n 'content-closing': !this.open() && !this.isFullyClosed(),\r\n }\"\r\n [style.min-height]=\"hasShrinkableContent() ? null : 'fit-content'\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"lazyContent()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"appliedOptions().cache\"\r\n >\r\n <ng-content></ng-content>\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
154
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnPopover, deps: [], target: i0.ɵɵFactoryTarget.Component });
155
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.2", type: NgnPopover, isStandalone: true, selector: "ngn-popover", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, hasShrinkableContent: { classPropertyName: "hasShrinkableContent", publicName: "hasShrinkableContent", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", closing: "closing", open: "openChange" }, host: { listeners: { "click": "$event.stopPropagation()" } }, providers: [provideSelf(NgnPopover)], queries: [{ propertyName: "lazyContent", first: true, predicate: ["lazy"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_content", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "_popoverRef", first: true, predicate: ["popover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'root'\"\r\n #popover\r\n [attr.popover]=\"closeByPopover()\"\r\n (toggle)=\"onToggle($event)\"\r\n [style.min-height]=\"\r\n hasShrinkableContent()\r\n ? (this.appliedOptions().sizeConstraints?.minHeight ?? null)\r\n : 'fit-content'\r\n \"\r\n>\r\n <div\r\n #content\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n content: true,\r\n 'content-closing': !this.open() && !this.isFullyClosed(),\r\n }\"\r\n [style.min-height]=\"hasShrinkableContent() ? null : 'fit-content'\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"lazyContent()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"appliedOptions().cache\"\r\n >\r\n <ng-content></ng-content>\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
156
156
  }
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnPopover, decorators: [{
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnPopover, decorators: [{
158
158
  type: Component,
159
159
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-popover', imports: [NgnPt, NgnDefer], providers: [provideSelf(NgnPopover)], host: {
160
160
  '(click)': '$event.stopPropagation()',
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-popover.mjs","sources":["../../src/popover/popover.ts","../../src/popover/popover.html","../../src/popover/ngneers-controls-popover.ts"],"sourcesContent":["import {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n contentChild,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n untracked,\r\n viewChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {\r\n type PopoverCloseBy,\r\n toPopoverCloseBy,\r\n autoPositionElement,\r\n type AutoPositioningHandle,\r\n type Openable,\r\n type Anchor,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { computedWithPrevious, explicitAfterRenderEffect } from '@ngneers/controls/utils-ng';\r\nimport { popoverControlTemplate } from '@ngneers/controls-themes/templates/popover';\r\n\r\nimport type { PopoverOptions } from './types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-popover',\r\n templateUrl: './popover.html',\r\n imports: [NgnPt, NgnDefer],\r\n providers: [provideSelf(NgnPopover)],\r\n host: {\r\n '(click)': '$event.stopPropagation()',\r\n },\r\n})\r\nexport class NgnPopover extends NgnBase<'popover'> implements Openable {\r\n protected readonly theme = this.injectThemeTemplate(popoverControlTemplate);\r\n\r\n /**\r\n * Emits when the popover has fully closed.\r\n */\r\n public readonly closed = output();\r\n /**\r\n * Emits when the popover is closed.\r\n */\r\n public readonly closing = output();\r\n /**\r\n * Shows or hides the popover.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model<boolean>(false);\r\n /**\r\n * The element to which the popover is anchored.\r\n */\r\n public readonly anchor = input.required<Anchor>();\r\n /**\r\n * The popover options.\r\n */\r\n public readonly options = input<PopoverOptions>();\r\n /**\r\n * Set to true for scrollable/shrink-able content\r\n */\r\n public readonly hasShrinkableContent = input(false, { transform: booleanAttribute });\r\n /**\r\n * How the drawer closes depending on user interaction.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<PopoverCloseBy>('any');\r\n\r\n protected readonly lazyContent = contentChild<TemplateRef<unknown>>('lazy');\r\n protected readonly _content = viewChild.required<ElementRef<HTMLElement>>('content');\r\n protected readonly closeByPopover = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly isFullyClosed = signal(true);\r\n\r\n private _skipEmitCloseEvent = false;\r\n private _triggeredByInput = false;\r\n\r\n protected readonly appliedOptions = computed(() => ({\r\n cache: false,\r\n ...this.options(),\r\n }));\r\n\r\n private readonly _injector = inject(Injector);\r\n private readonly _popoverRef = viewChild.required<ElementRef<HTMLElement>>('popover');\r\n private readonly _popover = computed(() => this._popoverRef().nativeElement);\r\n private readonly _autoPos = computedWithPrevious<AutoPositioningHandle | undefined>(prev => {\r\n prev?.stop();\r\n const popoverEl = this._popover();\r\n if (!popoverEl) {\r\n return undefined;\r\n }\r\n return autoPositionElement(this.anchor(), popoverEl, {\r\n injector: this._injector,\r\n stopped: true,\r\n sizeConstraints: this.appliedOptions()?.sizeConstraints,\r\n placement: this.appliedOptions()?.placement,\r\n offset: this.appliedOptions()?.padding,\r\n hasShrinkableContent: this.hasShrinkableContent(),\r\n });\r\n });\r\n\r\n constructor() {\r\n super();\r\n\r\n explicitAfterRenderEffect([this.open], ([open]) => {\r\n if (!open) {\r\n this._triggeredByInput = true;\r\n this.hide();\r\n }\r\n if (open) {\r\n this._triggeredByInput = true;\r\n this.show();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Opens the drawer. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show() {\r\n untracked(() => {\r\n if (this.open() && !this._triggeredByInput) {\r\n return;\r\n }\r\n this._triggeredByInput = false;\r\n this._autoPos()?.start();\r\n this._popover().togglePopover(true);\r\n });\r\n }\r\n\r\n /**\r\n * Closes the drawer. Alternatively, you can also set the `open` input to `false`.\r\n */\r\n public hide(emitCloseEvent = true) {\r\n untracked(() => {\r\n if (!this.open() && !this._triggeredByInput) {\r\n return;\r\n }\r\n this._triggeredByInput = false;\r\n this._skipEmitCloseEvent = !emitCloseEvent;\r\n this._autoPos()?.stop();\r\n this._popover().togglePopover(false);\r\n });\r\n }\r\n\r\n /**\r\n * Toggles the drawer open or closed. Alternatively, you can also set the `open` input accordingly.\r\n */\r\n public toggle() {\r\n if (untracked(this.open)) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onToggle(event: Event) {\r\n const evt = event as ToggleEvent;\r\n if (evt.newState === 'closed') {\r\n this.open.set(false);\r\n\r\n if (this._skipEmitCloseEvent) {\r\n this._skipEmitCloseEvent = false;\r\n } else {\r\n this.closing.emit();\r\n }\r\n this._autoPos()?.stop();\r\n\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this._content()\r\n .nativeElement.getAnimations()\r\n .map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n } else {\r\n this.open.set(true);\r\n this.isFullyClosed.set(false);\r\n }\r\n }\r\n}\r\n","<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'root'\"\r\n #popover\r\n [attr.popover]=\"closeByPopover()\"\r\n (toggle)=\"onToggle($event)\"\r\n [style.min-height]=\"\r\n hasShrinkableContent()\r\n ? (this.appliedOptions().sizeConstraints?.minHeight ?? null)\r\n : 'fit-content'\r\n \"\r\n>\r\n <div\r\n #content\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n content: true,\r\n 'content-closing': !this.open() && !this.isFullyClosed(),\r\n }\"\r\n [style.min-height]=\"hasShrinkableContent() ? null : 'fit-content'\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"lazyContent()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"appliedOptions().cache\"\r\n >\r\n <ng-content></ng-content>\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-popover.mjs","sources":["../../src/popover/popover.ts","../../src/popover/popover.html","../../src/popover/ngneers-controls-popover.ts"],"sourcesContent":["import {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n contentChild,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n untracked,\r\n viewChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {\r\n type PopoverCloseBy,\r\n toPopoverCloseBy,\r\n autoPositionElement,\r\n type AutoPositioningHandle,\r\n type Openable,\r\n type Anchor,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { computedWithPrevious, explicitAfterRenderEffect } from '@ngneers/controls/utils-ng';\r\nimport { popoverControlTemplate } from '@ngneers/controls-themes/templates/popover';\r\n\r\nimport type { PopoverOptions } from './types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-popover',\r\n templateUrl: './popover.html',\r\n imports: [NgnPt, NgnDefer],\r\n providers: [provideSelf(NgnPopover)],\r\n host: {\r\n '(click)': '$event.stopPropagation()',\r\n },\r\n})\r\nexport class NgnPopover extends NgnBase<'popover'> implements Openable {\r\n protected readonly theme = this.injectThemeTemplate(popoverControlTemplate);\r\n\r\n /**\r\n * Emits when the popover has fully closed.\r\n */\r\n public readonly closed = output();\r\n /**\r\n * Emits when the popover is closed.\r\n */\r\n public readonly closing = output();\r\n /**\r\n * Shows or hides the popover.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model<boolean>(false);\r\n /**\r\n * The element to which the popover is anchored.\r\n */\r\n public readonly anchor = input.required<Anchor>();\r\n /**\r\n * The popover options.\r\n */\r\n public readonly options = input<PopoverOptions>();\r\n /**\r\n * Set to true for scrollable/shrink-able content\r\n */\r\n public readonly hasShrinkableContent = input(false, { transform: booleanAttribute });\r\n /**\r\n * How the drawer closes depending on user interaction.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<PopoverCloseBy>('any');\r\n\r\n protected readonly lazyContent = contentChild<TemplateRef<unknown>>('lazy');\r\n protected readonly _content = viewChild.required<ElementRef<HTMLElement>>('content');\r\n protected readonly closeByPopover = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly isFullyClosed = signal(true);\r\n\r\n private _skipEmitCloseEvent = false;\r\n private _triggeredByInput = false;\r\n\r\n protected readonly appliedOptions = computed(() => ({\r\n cache: false,\r\n ...this.options(),\r\n }));\r\n\r\n private readonly _injector = inject(Injector);\r\n private readonly _popoverRef = viewChild.required<ElementRef<HTMLElement>>('popover');\r\n private readonly _popover = computed(() => this._popoverRef().nativeElement);\r\n private readonly _autoPos = computedWithPrevious<AutoPositioningHandle | undefined>(prev => {\r\n prev?.stop();\r\n const popoverEl = this._popover();\r\n if (!popoverEl) {\r\n return undefined;\r\n }\r\n return autoPositionElement(this.anchor(), popoverEl, {\r\n injector: this._injector,\r\n stopped: true,\r\n sizeConstraints: this.appliedOptions()?.sizeConstraints,\r\n placement: this.appliedOptions()?.placement,\r\n offset: this.appliedOptions()?.padding,\r\n hasShrinkableContent: this.hasShrinkableContent(),\r\n });\r\n });\r\n\r\n constructor() {\r\n super();\r\n\r\n explicitAfterRenderEffect([this.open], ([open]) => {\r\n if (!open) {\r\n this._triggeredByInput = true;\r\n this.hide();\r\n }\r\n if (open) {\r\n this._triggeredByInput = true;\r\n this.show();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Opens the drawer. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show() {\r\n untracked(() => {\r\n if (this.open() && !this._triggeredByInput) {\r\n return;\r\n }\r\n this._triggeredByInput = false;\r\n this._autoPos()?.start();\r\n this._popover().togglePopover(true);\r\n });\r\n }\r\n\r\n /**\r\n * Closes the drawer. Alternatively, you can also set the `open` input to `false`.\r\n */\r\n public hide(emitCloseEvent = true) {\r\n untracked(() => {\r\n if (!this.open() && !this._triggeredByInput) {\r\n return;\r\n }\r\n this._triggeredByInput = false;\r\n this._skipEmitCloseEvent = !emitCloseEvent;\r\n this._autoPos()?.stop();\r\n this._popover().togglePopover(false);\r\n });\r\n }\r\n\r\n /**\r\n * Toggles the drawer open or closed. Alternatively, you can also set the `open` input accordingly.\r\n */\r\n public toggle() {\r\n if (untracked(this.open)) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onToggle(event: Event) {\r\n const evt = event as ToggleEvent;\r\n if (evt.newState === 'closed') {\r\n this.open.set(false);\r\n\r\n if (this._skipEmitCloseEvent) {\r\n this._skipEmitCloseEvent = false;\r\n } else {\r\n this.closing.emit();\r\n }\r\n this._autoPos()?.stop();\r\n\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this._content()\r\n .nativeElement.getAnimations()\r\n .map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n } else {\r\n this.open.set(true);\r\n this.isFullyClosed.set(false);\r\n }\r\n }\r\n}\r\n","<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'root'\"\r\n #popover\r\n [attr.popover]=\"closeByPopover()\"\r\n (toggle)=\"onToggle($event)\"\r\n [style.min-height]=\"\r\n hasShrinkableContent()\r\n ? (this.appliedOptions().sizeConstraints?.minHeight ?? null)\r\n : 'fit-content'\r\n \"\r\n>\r\n <div\r\n #content\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n content: true,\r\n 'content-closing': !this.open() && !this.isFullyClosed(),\r\n }\"\r\n [style.min-height]=\"hasShrinkableContent() ? null : 'fit-content'\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"lazyContent()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"appliedOptions().cache\"\r\n >\r\n <ng-content></ng-content>\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -16,32 +16,32 @@ class NgnProgress extends NgnBase {
16
16
  /**
17
17
  * The current progress value (0-100).
18
18
  */
19
- value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : []));
19
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
20
20
  /**
21
21
  * Whether the progress indicator is indeterminate.
22
22
  */
23
- indeterminate = input(false, { ...(ngDevMode ? { debugName: "indeterminate" } : {}), transform: booleanAttribute });
23
+ indeterminate = input(false, { ...(ngDevMode ? { debugName: "indeterminate" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
24
24
  /**
25
25
  * Whether the progress indicator is circular.
26
26
  */
27
- circular = input(false, { ...(ngDevMode ? { debugName: "circular" } : {}), transform: booleanAttribute });
27
+ circular = input(false, { ...(ngDevMode ? { debugName: "circular" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
28
28
  /**
29
29
  * Radius of the circular progress indicator (in px).
30
30
  */
31
- radius = input(40, ...(ngDevMode ? [{ debugName: "radius" }] : []));
31
+ radius = input(40, ...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
32
32
  /**
33
33
  * Thickness of the circular progress indicator stroke (in px).
34
34
  */
35
- thickness = input(8, ...(ngDevMode ? [{ debugName: "thickness" }] : []));
36
- safeValue = computed(() => Math.min(Math.max(this.value(), 0), 100), ...(ngDevMode ? [{ debugName: "safeValue" }] : []));
37
- safeRadius = computed(() => Math.max(this.radius(), 0), ...(ngDevMode ? [{ debugName: "safeRadius" }] : []));
38
- safeThickness = computed(() => Math.max(this.thickness(), 1), ...(ngDevMode ? [{ debugName: "safeThickness" }] : []));
35
+ thickness = input(8, ...(ngDevMode ? [{ debugName: "thickness" }] : /* istanbul ignore next */ []));
36
+ safeValue = computed(() => Math.min(Math.max(this.value(), 0), 100), ...(ngDevMode ? [{ debugName: "safeValue" }] : /* istanbul ignore next */ []));
37
+ safeRadius = computed(() => Math.max(this.radius(), 0), ...(ngDevMode ? [{ debugName: "safeRadius" }] : /* istanbul ignore next */ []));
38
+ safeThickness = computed(() => Math.max(this.thickness(), 1), ...(ngDevMode ? [{ debugName: "safeThickness" }] : /* istanbul ignore next */ []));
39
39
  svgSize = computed(() => {
40
40
  // Full size of the SVG in px.
41
41
  return this.safeRadius() * 2 + this.safeThickness();
42
- }, ...(ngDevMode ? [{ debugName: "svgSize" }] : []));
43
- svgCenter = computed(() => this.svgSize() / 2, ...(ngDevMode ? [{ debugName: "svgCenter" }] : []));
44
- circumference = computed(() => TAU * this.safeRadius(), ...(ngDevMode ? [{ debugName: "circumference" }] : []));
42
+ }, ...(ngDevMode ? [{ debugName: "svgSize" }] : /* istanbul ignore next */ []));
43
+ svgCenter = computed(() => this.svgSize() / 2, ...(ngDevMode ? [{ debugName: "svgCenter" }] : /* istanbul ignore next */ []));
44
+ circumference = computed(() => TAU * this.safeRadius(), ...(ngDevMode ? [{ debugName: "circumference" }] : /* istanbul ignore next */ []));
45
45
  strokeDasharray = computed(() => {
46
46
  const circumference = this.circumference();
47
47
  // Arc length for indeterminate mode.
@@ -49,21 +49,21 @@ class NgnProgress extends NgnBase {
49
49
  return `${circumference * 0.28} ${circumference}`;
50
50
  }
51
51
  return `${circumference}`;
52
- }, ...(ngDevMode ? [{ debugName: "strokeDasharray" }] : []));
52
+ }, ...(ngDevMode ? [{ debugName: "strokeDasharray" }] : /* istanbul ignore next */ []));
53
53
  strokeDashoffset = computed(() => {
54
54
  const circumference = this.circumference();
55
55
  if (this.indeterminate()) {
56
56
  return `${circumference * 0.72}`;
57
57
  }
58
58
  return `${circumference * (1 - this.safeValue() / 100)}`;
59
- }, ...(ngDevMode ? [{ debugName: "strokeDashoffset" }] : []));
59
+ }, ...(ngDevMode ? [{ debugName: "strokeDashoffset" }] : /* istanbul ignore next */ []));
60
60
  constructor() {
61
61
  super();
62
62
  }
63
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
64
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnProgress, isStandalone: true, selector: "ngn-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, circular: { classPropertyName: "circular", publicName: "circular", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, thickness: { classPropertyName: "thickness", publicName: "thickness", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar" }, properties: { "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.aria-valuenow": "indeterminate() ? null : safeValue()", "style.--progress.%": "indeterminate() ? null : safeValue()" } }, providers: [provideSelf(NgnProgress)], usesInheritance: true, ngImport: i0, template: "@if (circular()) {\r\n <svg\r\n [attr.width]=\"svgSize()\"\r\n [attr.height]=\"svgSize()\"\r\n [attr.viewBox]=\"'0 0 ' + svgSize() + ' ' + svgSize()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'svg'\"\r\n >\r\n <circle\r\n [attr.cx]=\"svgCenter()\"\r\n [attr.cy]=\"svgCenter()\"\r\n [attr.r]=\"safeRadius()\"\r\n [attr.stroke-width]=\"safeThickness()\"\r\n fill=\"none\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'track'\"\r\n />\r\n <circle\r\n [attr.cx]=\"svgCenter()\"\r\n [attr.cy]=\"svgCenter()\"\r\n [attr.r]=\"safeRadius()\"\r\n [attr.stroke-width]=\"safeThickness()\"\r\n fill=\"none\"\r\n [attr.stroke-dasharray]=\"strokeDasharray()\"\r\n [attr.stroke-dashoffset]=\"strokeDashoffset()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'fill'\"\r\n />\r\n </svg>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'track'\" [style.height.px]=\"safeThickness()\">\r\n <div [ptInt]=\"this\" [ptClass]=\"'fill'\"></div>\r\n @if (indeterminate()) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'fill2'\"></div>\r\n }\r\n </div>\r\n}\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: NgnProgress, isStandalone: true, selector: "ngn-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, circular: { classPropertyName: "circular", publicName: "circular", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, thickness: { classPropertyName: "thickness", publicName: "thickness", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar" }, properties: { "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.aria-valuenow": "indeterminate() ? null : safeValue()", "style.--progress.%": "indeterminate() ? null : safeValue()" } }, providers: [provideSelf(NgnProgress)], usesInheritance: true, ngImport: i0, template: "@if (circular()) {\r\n <svg\r\n [attr.width]=\"svgSize()\"\r\n [attr.height]=\"svgSize()\"\r\n [attr.viewBox]=\"'0 0 ' + svgSize() + ' ' + svgSize()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'svg'\"\r\n >\r\n <circle\r\n [attr.cx]=\"svgCenter()\"\r\n [attr.cy]=\"svgCenter()\"\r\n [attr.r]=\"safeRadius()\"\r\n [attr.stroke-width]=\"safeThickness()\"\r\n fill=\"none\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'track'\"\r\n />\r\n <circle\r\n [attr.cx]=\"svgCenter()\"\r\n [attr.cy]=\"svgCenter()\"\r\n [attr.r]=\"safeRadius()\"\r\n [attr.stroke-width]=\"safeThickness()\"\r\n fill=\"none\"\r\n [attr.stroke-dasharray]=\"strokeDasharray()\"\r\n [attr.stroke-dashoffset]=\"strokeDashoffset()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'fill'\"\r\n />\r\n </svg>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'track'\" [style.height.px]=\"safeThickness()\">\r\n <div [ptInt]=\"this\" [ptClass]=\"'fill'\"></div>\r\n @if (indeterminate()) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'fill2'\"></div>\r\n }\r\n </div>\r\n}\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
65
  }
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnProgress, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnProgress, decorators: [{
67
67
  type: Component,
68
68
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-progress', imports: [NgnPt], providers: [provideSelf(NgnProgress)], host: {
69
69
  role: 'progressbar',
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-progress.mjs","sources":["../../src/progress/progress.ts","../../src/progress/progress.html","../../src/progress/ngneers-controls-progress.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n ChangeDetectionStrategy,\r\n computed,\r\n booleanAttribute,\r\n} from '@angular/core';\r\nimport { NgnBase, NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { progressControlTemplate } from '@ngneers/controls-themes/templates/progress';\r\n\r\nconst TAU = Math.PI * 2;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-progress',\r\n templateUrl: './progress.html',\r\n imports: [NgnPt],\r\n providers: [provideSelf(NgnProgress)],\r\n host: {\r\n role: 'progressbar',\r\n '[attr.aria-valuemin]': '0',\r\n '[attr.aria-valuemax]': '100',\r\n '[attr.aria-valuenow]': 'indeterminate() ? null : safeValue()',\r\n '[style.--progress.%]': 'indeterminate() ? null : safeValue()',\r\n },\r\n})\r\nexport class NgnProgress extends NgnBase<'progress'> {\r\n protected readonly theme = this.injectThemeTemplate(progressControlTemplate, {\r\n root: true,\r\n indeterminate: () => this.indeterminate(),\r\n circular: () => this.circular(),\r\n });\r\n\r\n /**\r\n * The current progress value (0-100).\r\n */\r\n public readonly value = input<number>(0);\r\n /**\r\n * Whether the progress indicator is indeterminate.\r\n */\r\n public readonly indeterminate = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether the progress indicator is circular.\r\n */\r\n public readonly circular = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Radius of the circular progress indicator (in px).\r\n */\r\n public readonly radius = input<number>(40);\r\n\r\n /**\r\n * Thickness of the circular progress indicator stroke (in px).\r\n */\r\n public readonly thickness = input<number>(8);\r\n\r\n protected readonly safeValue = computed(() => Math.min(Math.max(this.value(), 0), 100));\r\n\r\n protected readonly safeRadius = computed(() => Math.max(this.radius(), 0));\r\n protected readonly safeThickness = computed(() => Math.max(this.thickness(), 1));\r\n\r\n protected readonly svgSize = computed(() => {\r\n // Full size of the SVG in px.\r\n return this.safeRadius() * 2 + this.safeThickness();\r\n });\r\n\r\n protected readonly svgCenter = computed(() => this.svgSize() / 2);\r\n\r\n protected readonly circumference = computed(() => TAU * this.safeRadius());\r\n\r\n protected readonly strokeDasharray = computed(() => {\r\n const circumference = this.circumference();\r\n // Arc length for indeterminate mode.\r\n if (this.indeterminate()) {\r\n return `${circumference * 0.28} ${circumference}`;\r\n }\r\n return `${circumference}`;\r\n });\r\n\r\n protected readonly strokeDashoffset = computed(() => {\r\n const circumference = this.circumference();\r\n if (this.indeterminate()) {\r\n return `${circumference * 0.72}`;\r\n }\r\n return `${circumference * (1 - this.safeValue() / 100)}`;\r\n });\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","@if (circular()) {\r\n <svg\r\n [attr.width]=\"svgSize()\"\r\n [attr.height]=\"svgSize()\"\r\n [attr.viewBox]=\"'0 0 ' + svgSize() + ' ' + svgSize()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'svg'\"\r\n >\r\n <circle\r\n [attr.cx]=\"svgCenter()\"\r\n [attr.cy]=\"svgCenter()\"\r\n [attr.r]=\"safeRadius()\"\r\n [attr.stroke-width]=\"safeThickness()\"\r\n fill=\"none\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'track'\"\r\n />\r\n <circle\r\n [attr.cx]=\"svgCenter()\"\r\n [attr.cy]=\"svgCenter()\"\r\n [attr.r]=\"safeRadius()\"\r\n [attr.stroke-width]=\"safeThickness()\"\r\n fill=\"none\"\r\n [attr.stroke-dasharray]=\"strokeDasharray()\"\r\n [attr.stroke-dashoffset]=\"strokeDashoffset()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'fill'\"\r\n />\r\n </svg>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'track'\" [style.height.px]=\"safeThickness()\">\r\n <div [ptInt]=\"this\" [ptClass]=\"'fill'\"></div>\r\n @if (indeterminate()) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'fill2'\"></div>\r\n }\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-progress.mjs","sources":["../../src/progress/progress.ts","../../src/progress/progress.html","../../src/progress/ngneers-controls-progress.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n ChangeDetectionStrategy,\r\n computed,\r\n booleanAttribute,\r\n} from '@angular/core';\r\nimport { NgnBase, NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { progressControlTemplate } from '@ngneers/controls-themes/templates/progress';\r\n\r\nconst TAU = Math.PI * 2;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-progress',\r\n templateUrl: './progress.html',\r\n imports: [NgnPt],\r\n providers: [provideSelf(NgnProgress)],\r\n host: {\r\n role: 'progressbar',\r\n '[attr.aria-valuemin]': '0',\r\n '[attr.aria-valuemax]': '100',\r\n '[attr.aria-valuenow]': 'indeterminate() ? null : safeValue()',\r\n '[style.--progress.%]': 'indeterminate() ? null : safeValue()',\r\n },\r\n})\r\nexport class NgnProgress extends NgnBase<'progress'> {\r\n protected readonly theme = this.injectThemeTemplate(progressControlTemplate, {\r\n root: true,\r\n indeterminate: () => this.indeterminate(),\r\n circular: () => this.circular(),\r\n });\r\n\r\n /**\r\n * The current progress value (0-100).\r\n */\r\n public readonly value = input<number>(0);\r\n /**\r\n * Whether the progress indicator is indeterminate.\r\n */\r\n public readonly indeterminate = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether the progress indicator is circular.\r\n */\r\n public readonly circular = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Radius of the circular progress indicator (in px).\r\n */\r\n public readonly radius = input<number>(40);\r\n\r\n /**\r\n * Thickness of the circular progress indicator stroke (in px).\r\n */\r\n public readonly thickness = input<number>(8);\r\n\r\n protected readonly safeValue = computed(() => Math.min(Math.max(this.value(), 0), 100));\r\n\r\n protected readonly safeRadius = computed(() => Math.max(this.radius(), 0));\r\n protected readonly safeThickness = computed(() => Math.max(this.thickness(), 1));\r\n\r\n protected readonly svgSize = computed(() => {\r\n // Full size of the SVG in px.\r\n return this.safeRadius() * 2 + this.safeThickness();\r\n });\r\n\r\n protected readonly svgCenter = computed(() => this.svgSize() / 2);\r\n\r\n protected readonly circumference = computed(() => TAU * this.safeRadius());\r\n\r\n protected readonly strokeDasharray = computed(() => {\r\n const circumference = this.circumference();\r\n // Arc length for indeterminate mode.\r\n if (this.indeterminate()) {\r\n return `${circumference * 0.28} ${circumference}`;\r\n }\r\n return `${circumference}`;\r\n });\r\n\r\n protected readonly strokeDashoffset = computed(() => {\r\n const circumference = this.circumference();\r\n if (this.indeterminate()) {\r\n return `${circumference * 0.72}`;\r\n }\r\n return `${circumference * (1 - this.safeValue() / 100)}`;\r\n });\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","@if (circular()) {\r\n <svg\r\n [attr.width]=\"svgSize()\"\r\n [attr.height]=\"svgSize()\"\r\n [attr.viewBox]=\"'0 0 ' + svgSize() + ' ' + svgSize()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'svg'\"\r\n >\r\n <circle\r\n [attr.cx]=\"svgCenter()\"\r\n [attr.cy]=\"svgCenter()\"\r\n [attr.r]=\"safeRadius()\"\r\n [attr.stroke-width]=\"safeThickness()\"\r\n fill=\"none\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'track'\"\r\n />\r\n <circle\r\n [attr.cx]=\"svgCenter()\"\r\n [attr.cy]=\"svgCenter()\"\r\n [attr.r]=\"safeRadius()\"\r\n [attr.stroke-width]=\"safeThickness()\"\r\n fill=\"none\"\r\n [attr.stroke-dasharray]=\"strokeDasharray()\"\r\n [attr.stroke-dashoffset]=\"strokeDashoffset()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'fill'\"\r\n />\r\n </svg>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'track'\" [style.height.px]=\"safeThickness()\">\r\n <div [ptInt]=\"this\" [ptClass]=\"'fill'\"></div>\r\n @if (indeterminate()) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'fill2'\"></div>\r\n }\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}