@ngneers/controls 0.0.1-pre5 → 0.0.1-pre7

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 (168) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +33 -33
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-api-ng.mjs +22 -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 +19 -19
  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-CKAqRgOP.mjs} +9 -9
  18. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs.map → ngneers-controls-calendar-time-CKAqRgOP.mjs.map} +1 -1
  19. package/fesm2022/ngneers-controls-calendar.mjs +56 -56
  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 +7 -7
  24. package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
  25. package/fesm2022/ngneers-controls-default-icons.mjs +61 -0
  26. package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
  27. package/fesm2022/ngneers-controls-defer.mjs +10 -10
  28. package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-dialog.mjs +38 -40
  30. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-directives.mjs +45 -39
  32. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-drawer.mjs +29 -29
  34. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-edit-inplace.mjs +16 -16
  36. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  37. package/fesm2022/ngneers-controls-filter.mjs +192 -44
  38. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  39. package/fesm2022/{ngneers-controls-i18n-de-CdTPeBiR.mjs → ngneers-controls-i18n-de-CF0xTWEX.mjs} +9 -5
  40. package/fesm2022/ngneers-controls-i18n-de-CF0xTWEX.mjs.map +1 -0
  41. package/fesm2022/{ngneers-controls-i18n-en-Cfp2pOLY.mjs → ngneers-controls-i18n-en-8B7xAjH2.mjs} +9 -5
  42. package/fesm2022/ngneers-controls-i18n-en-8B7xAjH2.mjs.map +1 -0
  43. package/fesm2022/ngneers-controls-i18n.mjs +5 -5
  44. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-icon.mjs +111 -47
  46. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-inplace.mjs +18 -18
  48. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-input-field.mjs +16 -16
  50. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  51. package/fesm2022/ngneers-controls-input-mask.mjs +8 -8
  52. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-input.mjs +6 -6
  54. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-item-view.mjs +33 -33
  56. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-list-box.mjs +31 -31
  58. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-menu.mjs +33 -33
  60. package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-message.mjs +4 -4
  62. package/fesm2022/ngneers-controls-message.mjs.map +1 -1
  63. package/fesm2022/ngneers-controls-paginator.mjs +13 -13
  64. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  65. package/fesm2022/ngneers-controls-popover.mjs +21 -16
  66. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-progress.mjs +16 -16
  68. package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-scroll-shadow.mjs +54 -0
  70. package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
  71. package/fesm2022/ngneers-controls-scroller.mjs +74 -39
  72. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-select-button.mjs +7 -7
  74. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-select.mjs +48 -47
  76. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  77. package/fesm2022/ngneers-controls-slider.mjs +11 -11
  78. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  79. package/fesm2022/ngneers-controls-spinner.mjs +7 -7
  80. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
  81. package/fesm2022/ngneers-controls-splitter.mjs +141 -328
  82. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
  83. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  84. package/fesm2022/ngneers-controls-switch.mjs.map +1 -1
  85. package/fesm2022/ngneers-controls-table.mjs +1456 -82
  86. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  87. package/fesm2022/ngneers-controls-tabs.mjs +41 -40
  88. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  89. package/fesm2022/ngneers-controls-tag.mjs +4 -4
  90. package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
  91. package/fesm2022/ngneers-controls-toast.mjs +19 -19
  92. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  93. package/fesm2022/ngneers-controls-toggle-button.mjs +10 -10
  94. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  95. package/fesm2022/ngneers-controls-tooltip.mjs +74 -38
  96. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  97. package/fesm2022/ngneers-controls-utils-ng.mjs +9 -9
  98. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
  99. package/fesm2022/ngneers-controls-utils.mjs +1 -1
  100. package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
  101. package/package.json +34 -12
  102. package/types/ngneers-controls-accordion.d.ts +6 -4
  103. package/types/ngneers-controls-api-ng.d.ts +7 -2
  104. package/types/ngneers-controls-api-resize.d.ts +318 -0
  105. package/types/ngneers-controls-api.d.ts +2 -2
  106. package/types/ngneers-controls-base.d.ts +8 -0
  107. package/types/ngneers-controls-breadcrumb.d.ts +6 -4
  108. package/types/ngneers-controls-button.d.ts +13 -8
  109. package/types/ngneers-controls-calendar.d.ts +5 -1
  110. package/types/ngneers-controls-checkbox.d.ts +6 -4
  111. package/types/ngneers-controls-chip.d.ts +3 -1
  112. package/types/ngneers-controls-default-icons.d.ts +5 -0
  113. package/types/ngneers-controls-directives.d.ts +7 -1
  114. package/types/ngneers-controls-drawer.d.ts +7 -1
  115. package/types/ngneers-controls-edit-inplace.d.ts +4 -0
  116. package/types/ngneers-controls-filter.d.ts +52 -3
  117. package/types/ngneers-controls-i18n.d.ts +4 -0
  118. package/types/ngneers-controls-icon.d.ts +23 -40
  119. package/types/ngneers-controls-input-field.d.ts +7 -1
  120. package/types/ngneers-controls-item-view.d.ts +4 -2
  121. package/types/ngneers-controls-list-box.d.ts +5 -1
  122. package/types/ngneers-controls-menu.d.ts +4 -2
  123. package/types/ngneers-controls-message.d.ts +3 -1
  124. package/types/ngneers-controls-paginator.d.ts +4 -0
  125. package/types/ngneers-controls-popover.d.ts +2 -1
  126. package/types/ngneers-controls-scroll-shadow.d.ts +16 -0
  127. package/types/ngneers-controls-scroller.d.ts +12 -2
  128. package/types/ngneers-controls-select.d.ts +11 -12
  129. package/types/ngneers-controls-spinner.d.ts +1 -1
  130. package/types/ngneers-controls-splitter.d.ts +29 -59
  131. package/types/ngneers-controls-table.d.ts +380 -24
  132. package/types/ngneers-controls-tabs.d.ts +4 -2
  133. package/types/ngneers-controls-tag.d.ts +3 -1
  134. package/types/ngneers-controls-toast.d.ts +5 -3
  135. package/types/ngneers-controls-toggle-button.d.ts +5 -3
  136. package/types/ngneers-controls-tooltip.d.ts +7 -1
  137. package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +0 -1
  138. package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +0 -1
  139. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +0 -4
  140. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +0 -1
  141. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +0 -4
  142. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +0 -1
  143. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +0 -4
  144. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +0 -1
  145. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +0 -4
  146. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +0 -1
  147. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +0 -4
  148. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +0 -1
  149. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +0 -4
  150. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +0 -1
  151. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +0 -4
  152. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +0 -1
  153. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +0 -4
  154. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +0 -1
  155. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +0 -4
  156. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +0 -1
  157. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +0 -4
  158. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +0 -1
  159. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +0 -4
  160. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +0 -1
  161. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +0 -4
  162. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +0 -1
  163. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +0 -4
  164. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +0 -1
  165. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +0 -4
  166. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +0 -1
  167. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +0 -4
  168. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-api-ng.mjs","sources":["../../src/api/ng/config/config.ts","../../src/api/ng/closable.ts","../../src/api/ng/components.ts","../../src/api/ng/dom.ts","../../src/api/ng/kinds.ts","../../src/api/ng/platform.ts","../../src/api/ng/positioning.ts","../../src/api/ng/theme-service.ts","../../src/api/ng/provider.ts","../../src/api/ng/template.ts","../../src/api/ng/ngneers-controls-api-ng.ts"],"sourcesContent":["import { inject, InjectionToken, provideAppInitializer, type Provider } from '@angular/core';\r\nimport { registerCustomLanguages, type Translations } from '@ngneers/controls/i18n';\r\nimport { type DeepPartial, Logger, type LogLevel } from '@ngneers/controls/utils';\r\n\r\nimport type { TooltipOptions } from './tooltip';\r\nimport type { NgnStateStorage } from '@ngneers/controls/utils-ng';\r\nimport type { StyleScope, Theme } from '@ngneers/controls-themes';\r\n\r\nexport const NGN_CONFIG = new InjectionToken<NgnConfig>('NGN_CONFIG');\r\n\r\nexport type NgnConfig = {\r\n readonly logLevel: LogLevel;\r\n readonly customTranslations?: Record<string, () => Promise<Translations>>;\r\n readonly disableAnimations: boolean;\r\n readonly theme: {\r\n readonly preset: Theme | null;\r\n readonly lazyLoaded: boolean;\r\n readonly styleScope: StyleScope | null;\r\n readonly cssLayer: string | null;\r\n readonly namePrefix: string;\r\n };\r\n readonly defaults: {\r\n readonly stateStorage: NgnStateStorage;\r\n readonly splitter: {\r\n readonly stateStorage: NgnStateStorage;\r\n };\r\n readonly tooltip: TooltipOptions;\r\n };\r\n};\r\n\r\nexport type NgnConfigInit = DeepPartial<\r\n NgnConfig,\r\n 'theme.preset.*' | 'theme.styleScope.*' | 'customTranslations.*'\r\n>;\r\n\r\nexport const defaultNgnConfig: NgnConfig = {\r\n logLevel: 'info',\r\n disableAnimations: false,\r\n theme: {\r\n preset: null,\r\n lazyLoaded: false,\r\n styleScope: null,\r\n cssLayer: 'ngn-controls',\r\n namePrefix: 'ngn-',\r\n },\r\n defaults: {\r\n stateStorage: 'session',\r\n splitter: {\r\n stateStorage: 'session',\r\n },\r\n tooltip: {\r\n placement: 'bottom',\r\n offset: 4,\r\n showDelay: '0.5s',\r\n hideDelay: '0.1s',\r\n showArrow: true,\r\n showOnHover: true,\r\n showOnFocus: true,\r\n hideOnTooltipHover: false,\r\n hideOnClick: true,\r\n },\r\n },\r\n};\r\n\r\nexport function provideNgnConfig(config?: NgnConfigInit): Provider {\r\n return [\r\n {\r\n provide: NGN_CONFIG,\r\n useValue: {\r\n logLevel: config?.logLevel ?? defaultNgnConfig.logLevel,\r\n customTranslations: config?.customTranslations,\r\n disableAnimations: config?.disableAnimations ?? defaultNgnConfig.disableAnimations,\r\n theme: {\r\n preset: config?.theme?.preset ?? defaultNgnConfig.theme.preset,\r\n lazyLoaded: config?.theme?.lazyLoaded ?? defaultNgnConfig.theme.lazyLoaded,\r\n styleScope: config?.theme?.styleScope ?? defaultNgnConfig.theme.styleScope,\r\n cssLayer:\r\n config?.theme?.cssLayer === undefined\r\n ? defaultNgnConfig.theme.cssLayer\r\n : config?.theme?.cssLayer,\r\n namePrefix: config?.theme?.namePrefix ?? defaultNgnConfig.theme.namePrefix,\r\n },\r\n defaults: {\r\n stateStorage: config?.defaults?.stateStorage ?? defaultNgnConfig.defaults.stateStorage,\r\n splitter: {\r\n stateStorage:\r\n config?.defaults?.splitter?.stateStorage ??\r\n config?.defaults?.stateStorage ??\r\n defaultNgnConfig.defaults.splitter.stateStorage,\r\n },\r\n tooltip: {\r\n placement:\r\n config?.defaults?.tooltip?.placement ?? defaultNgnConfig.defaults.tooltip.placement,\r\n offset: config?.defaults?.tooltip?.offset ?? defaultNgnConfig.defaults.tooltip.offset,\r\n showDelay:\r\n config?.defaults?.tooltip?.showDelay ?? defaultNgnConfig.defaults.tooltip.showDelay,\r\n hideDelay:\r\n config?.defaults?.tooltip?.hideDelay ?? defaultNgnConfig.defaults.tooltip.hideDelay,\r\n showArrow:\r\n config?.defaults?.tooltip?.showArrow ?? defaultNgnConfig.defaults.tooltip.showArrow,\r\n showOnHover:\r\n config?.defaults?.tooltip?.showOnHover ??\r\n defaultNgnConfig.defaults.tooltip.showOnHover,\r\n showOnFocus:\r\n config?.defaults?.tooltip?.showOnFocus ??\r\n defaultNgnConfig.defaults.tooltip.showOnFocus,\r\n hideOnTooltipHover:\r\n config?.defaults?.tooltip?.hideOnTooltipHover ??\r\n defaultNgnConfig.defaults.tooltip.hideOnTooltipHover,\r\n hideOnClick:\r\n config?.defaults?.tooltip?.hideOnClick ??\r\n defaultNgnConfig.defaults.tooltip.hideOnClick,\r\n },\r\n },\r\n } satisfies NgnConfig,\r\n },\r\n provideAppInitializer(() => {\r\n const config = inject(NGN_CONFIG);\r\n if (config?.customTranslations) {\r\n registerCustomLanguages(config.customTranslations);\r\n }\r\n Logger.logLevel = config.logLevel ?? Logger.logLevel;\r\n }),\r\n ];\r\n}\r\n","import { type ModelSignal, OutputEmitterRef } from '@angular/core';\r\n\r\nexport type PopoverCloseBy = 'any' | 'none';\r\nexport type CloseBy = PopoverCloseBy | 'escape';\r\n\r\nexport function toPopoverCloseBy(closeBy: CloseBy): 'auto' | 'manual' {\r\n switch (closeBy) {\r\n case 'any':\r\n return 'auto';\r\n case 'escape':\r\n case 'none':\r\n return 'manual';\r\n }\r\n}\r\n\r\nexport function toModalCloseBy(closeBy: CloseBy): 'any' | 'closerequest' | 'none' {\r\n switch (closeBy) {\r\n case 'any':\r\n return 'any';\r\n case 'escape':\r\n return 'closerequest';\r\n case 'none':\r\n return 'none';\r\n }\r\n}\r\n\r\nexport interface Openable {\r\n show(): void;\r\n hide(): void;\r\n toggle(): void;\r\n open: ModelSignal<boolean>;\r\n closed: OutputEmitterRef<void>;\r\n}\r\n","import { ComponentRef, type InputSignal, type InputSignalWithTransform } from '@angular/core';\r\n\r\ntype ComponentFromRef<T extends ComponentRef<any>> = T extends ComponentRef<infer C> ? C : never;\r\ntype InputsFromComponent<T> = {\r\n [K in keyof T]: T[K] extends InputSignal<infer V>\r\n ? V\r\n : T[K] extends InputSignalWithTransform<infer V, infer _>\r\n ? V\r\n : never;\r\n};\r\n\r\nexport function setComponentInput<\r\n T extends ComponentRef<C>,\r\n C,\r\n Input extends InputsFromComponent<ComponentFromRef<T>>,\r\n I extends keyof Input & string,\r\n>(componentRef: T, inputName: I, value: Input[I]): void {\r\n componentRef.setInput(inputName, value);\r\n}\r\n","import {\r\n afterRenderEffect,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n runInInjectionContext,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { deepCopy } from '@ngneers/controls/utils';\r\nimport { signalWithPrevious } from '@ngneers/controls/utils-ng';\r\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\r\n\r\nexport type Size = { width: number; height: number };\r\n\r\ntype ElementArray =\r\n | Signal<ReadonlyArray<HTMLElement | ElementRef<HTMLElement>>>\r\n | ReadonlyArray<HTMLElement | ElementRef<HTMLElement>>;\r\ntype ElementSingle =\r\n | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>\r\n | HTMLElement\r\n | Document\r\n | ElementRef<HTMLElement>;\r\n\r\nfunction getElement(el: ElementSingle): HTMLElement | Document | undefined {\r\n const rawElement = typeof el === 'function' ? el() : el;\r\n const element = rawElement instanceof ElementRef ? rawElement.nativeElement : rawElement;\r\n return element;\r\n}\r\n\r\nexport function elementSizeSignal(element: ElementSingle, active?: Signal<boolean>): Signal<Size> {\r\n const val = elementsSizesSignalInt(element, active);\r\n return computed(() => val()[0] ?? { width: 0, height: 0 });\r\n}\r\n\r\nexport function elementsSizesSignal(\r\n element: ElementArray,\r\n active?: Signal<boolean>\r\n): Signal<readonly Size[]> {\r\n return elementsSizesSignalInt(element, active);\r\n}\r\n\r\nfunction elementsSizesSignalInt(\r\n element: ElementArray | ElementSingle,\r\n active?: Signal<boolean>\r\n): Signal<readonly Size[]> {\r\n const sizeSignal = signal<readonly Size[]>([], {\r\n equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),\r\n });\r\n\r\n let elements: HTMLElement[];\r\n afterRenderEffect(() => {\r\n resizeObserver.disconnect();\r\n if (active && !active()) {\r\n return;\r\n }\r\n const rawElement = typeof element === 'function' ? element() : element;\r\n const arrayElement = Array.isArray(rawElement) ? rawElement : rawElement ? [rawElement] : [];\r\n elements = arrayElement.map(el => (el instanceof ElementRef ? el.nativeElement : el));\r\n\r\n if (!elements.length) {\r\n return;\r\n }\r\n sizeSignal.set(\r\n elements.map(el => {\r\n const rect = el.getBoundingClientRect();\r\n return {\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n })\r\n );\r\n elements.forEach(el => {\r\n resizeObserver.observe(el, { box: 'border-box' });\r\n });\r\n });\r\n const destroyRef = inject(DestroyRef);\r\n if (typeof ResizeObserver === 'undefined') {\r\n return sizeSignal; // ResizeObserver is not supported, return initial size\r\n }\r\n const resizeObserver = new ResizeObserver(entries => {\r\n entries.forEach(entry => {\r\n const index = elements.findIndex(el => el === entry.target);\r\n sizeSignal.update(s => {\r\n const copy = deepCopy(s);\r\n const borderBoxSize = entry.borderBoxSize[0];\r\n if (!borderBoxSize) {\r\n return s;\r\n }\r\n copy[index] = {\r\n width: borderBoxSize.inlineSize,\r\n height: borderBoxSize.blockSize,\r\n };\r\n return copy;\r\n });\r\n });\r\n });\r\n destroyRef.onDestroy(() => {\r\n resizeObserver.disconnect();\r\n });\r\n return sizeSignal;\r\n}\r\n\r\nconst ABORT_SIGNAL_SYMBOL = Symbol('AbortSignal');\r\nexport function abortSignalOnDestroy(options?: { injector?: Injector }): AbortSignal {\r\n const destroyRef = options?.injector?.get(DestroyRef) ?? inject(DestroyRef);\r\n if (ABORT_SIGNAL_SYMBOL in destroyRef) {\r\n return destroyRef[ABORT_SIGNAL_SYMBOL] as AbortSignal;\r\n }\r\n const abortController = new AbortController();\r\n destroyRef.onDestroy(() => {\r\n abortController.abort();\r\n });\r\n (destroyRef as any)[ABORT_SIGNAL_SYMBOL] = abortController.signal;\r\n return abortController.signal;\r\n}\r\n\r\n/**\r\n * Creates an Observable that emits the latest event of the specified type from the given DOM element.\r\n *\r\n * ⚠️ Cannot be used to cancel or call preventDefault on the event, as the event is emitted after the event handler phase.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n * @returns An Observable that emits the latest event of the specified type. Does not complete until the injector is destroyed.\r\n */\r\nexport function domEventObservable<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n injector?: Injector\r\n): Observable<GlobalEventHandlersEventMap[EventName]> {\r\n const inj = injector ?? inject(Injector);\r\n\r\n const result = new Subject<GlobalEventHandlersEventMap[EventName]>();\r\n const destroyRef = inj.get(DestroyRef);\r\n\r\n let subscription: Subscription | undefined;\r\n runInInjectionContext(inj, () => {\r\n afterRenderEffect(() => {\r\n subscription?.unsubscribe();\r\n const el = getElement(element);\r\n if (!el) {\r\n return;\r\n }\r\n subscription = fromEvent(el, eventName)\r\n .pipe(takeUntilDestroyed(destroyRef))\r\n .subscribe(e => result.next(e as GlobalEventHandlersEventMap[EventName]));\r\n });\r\n });\r\n return result.asObservable().pipe(takeUntilDestroyed(destroyRef));\r\n}\r\n\r\n/**\r\n * Creates a Signal that emits the latest event of the specified type from the given DOM element.\r\n *\r\n * ⚠️ Cannot be used to cancel or call preventDefault on the event, as the event is emitted after the event handler phase.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n * @returns A Signal that emits the latest event of the specified type or null if no event has occurred.\r\n */\r\nexport function domEventSignal<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n injector?: Injector\r\n): Signal<GlobalEventHandlersEventMap[EventName] | null> {\r\n const inj = injector ?? inject(Injector);\r\n const res = runInInjectionContext(inj, () => {\r\n const sig = signal<GlobalEventHandlersEventMap[EventName] | null>(null);\r\n domEventObservable(element, eventName, inj).subscribe(value => {\r\n sig.set(value as GlobalEventHandlersEventMap[EventName]);\r\n });\r\n return sig;\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Attaches an event handler to a DOM element that is automatically removed when the injector is destroyed.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param handler The function to handle the event.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n */\r\nexport function domEventHandler<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n handler: (event: GlobalEventHandlersEventMap[EventName]) => void,\r\n injector?: Injector\r\n): void {\r\n const inj = injector ?? inject(Injector);\r\n const destroyRef = inj.get(DestroyRef);\r\n runInInjectionContext(inj, () => {\r\n const destroyed = signal(false);\r\n destroyRef.onDestroy(() => {\r\n destroyed.set(true);\r\n });\r\n const elSig = computed(() => (destroyed() ? null : getElement(element)));\r\n const elSigWithPrev = signalWithPrevious(elSig);\r\n\r\n effect(() => {\r\n const element = elSigWithPrev();\r\n const previousElement = element.previous;\r\n if (previousElement) {\r\n previousElement.removeEventListener(\r\n eventName,\r\n handler as EventListenerOrEventListenerObject\r\n );\r\n }\r\n if (element.current) {\r\n element.current.addEventListener(eventName, handler as EventListenerOrEventListenerObject);\r\n }\r\n });\r\n });\r\n}\r\n","import { inject } from '@angular/core';\r\n\r\nimport { NGN_CONFIG } from './config';\r\n\r\nimport type { CustomColor, CustomKind } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * Retrieves the available kinds for a given control from the theme configuration.\r\n * Does **not** return custom kinds defined by the user in `NgnCustomTypes`.\r\n * @param controlName The name of the control to get kinds for.\r\n * @returns A tuple of available kinds for the specified control.\r\n * @todo make reactive (signal)\r\n */\r\nexport function injectThemeControlKinds<T extends string>(controlName: T): CustomKind<T>[] {\r\n const val = inject(NGN_CONFIG).theme.preset?.meta.kinds?.[controlName] ?? [];\r\n return val as CustomKind<T>[];\r\n}\r\n\r\n/**\r\n * Retrieves the available colors from the theme configuration.\r\n * Does **not** return custom colors defined by the user in `NgnCustomTypes`.\r\n * @returns A tuple of available colors.\r\n * @todo make reactive (signal)\r\n */\r\nexport function injectThemeColors(controlName?: string): CustomColor[] {\r\n const theme = inject(NGN_CONFIG).theme;\r\n if (controlName) {\r\n const classNames = theme.preset?.parts.find(x => x.scope === controlName)?.controlTemplate\r\n ?.classNames;\r\n const hasColor = classNames?.includes('color-*');\r\n if (!hasColor) {\r\n return [];\r\n }\r\n }\r\n const val = theme.preset?.meta.colors ?? [];\r\n return val as CustomColor[];\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n computed,\r\n DOCUMENT,\r\n inject,\r\n Injectable,\r\n PLATFORM_ID,\r\n type Signal,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport { elementSizeSignal, type Size } from './dom';\r\n\r\nexport type DeviceType = 'mobile' | 'desktop' | 'tablet';\r\n\r\n@Injectable()\r\nexport class Platform {\r\n private readonly _deviceType = signal<DeviceType>('desktop');\r\n\r\n public readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n public readonly windowSize: Signal<Size> = this.isBrowser\r\n ? elementSizeSignal(document.body)\r\n : signal({ width: 0, height: 0 });\r\n public readonly width = computed(() => this.windowSize().width);\r\n public readonly height = computed(() => this.windowSize().height);\r\n\r\n constructor() {\r\n const doc = inject(DOCUMENT);\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return;\r\n }\r\n if (typeof win.matchMedia !== 'function') {\r\n return;\r\n }\r\n const hasMouse = win.matchMedia('(any-hover: hover)').matches;\r\n if (hasMouse) {\r\n this._deviceType.set('desktop');\r\n return;\r\n }\r\n const isSmallScreen =\r\n window.matchMedia('(max-width: 768px)').matches ||\r\n window.matchMedia('(max-height: 768px)').matches;\r\n if (isSmallScreen) {\r\n this._deviceType.set('mobile');\r\n } else {\r\n this._deviceType.set('tablet');\r\n }\r\n }\r\n\r\n public readonly isTouchDevice = computed(() => {\r\n return this._deviceType() === 'mobile' || this._deviceType() === 'tablet';\r\n });\r\n}\r\n","import { DestroyRef, inject, Injector } from '@angular/core';\r\nimport {\r\n type Alignment,\r\n autoUpdate,\r\n computePosition,\r\n type ComputePositionReturn,\r\n flip,\r\n type Middleware,\r\n offset,\r\n type Placement,\r\n type ReferenceElement,\r\n shift,\r\n type Side,\r\n size,\r\n type Strategy,\r\n} from '@floating-ui/dom';\r\n\r\nexport type Point = {\r\n x: number;\r\n y: number;\r\n};\r\n\r\nexport type Anchor = HTMLElement | Point;\r\n\r\nexport type PositioningSizeConstraints = {\r\n /**\r\n * The minimum width of the floating element. When a string is provided, it is used as the CSS min-width value.\r\n */\r\n minWidth?: string;\r\n /**\r\n * The width of the floating element. When a number is provided, it is relative to the width of the reference element.\r\n * When a string is provided, it is used as the CSS width value.\r\n */\r\n width?: number | string;\r\n /**\r\n * The maximum width of the floating element. When a number is provided, it is relative to the width of the reference element.\r\n * When a string is provided, it is used as the CSS max-width value.\r\n */\r\n maxWidth?: number | string;\r\n /**\r\n * The height of the floating element. When a string is provided, it is used as the CSS height value.\r\n */\r\n height?: string;\r\n /**\r\n * The maximum height of the floating element. When a string is provided, it is used as the CSS max-height value.\r\n */\r\n maxHeight?: string;\r\n /**\r\n * The minimum height of the floating element. When a string is provided, it is used as the CSS min-height value.\r\n */\r\n minHeight?: string;\r\n};\r\n\r\nexport type PositioningOptions = {\r\n injector?: Injector;\r\n placement?: Placement;\r\n flip?: boolean;\r\n resize?: boolean;\r\n shift?: boolean;\r\n offset?: number;\r\n stopped?: boolean;\r\n sizeConstraints?: PositioningSizeConstraints;\r\n strategy?: Strategy;\r\n middleware?: Middleware[];\r\n disableSettingStyles?: boolean;\r\n hasShrinkableContent?: boolean;\r\n onPositionChange?: (position: ComputePositionReturn) => void;\r\n};\r\n\r\nexport type AutoPositioningHandle = {\r\n stop: () => void;\r\n start: () => void;\r\n isRunning: () => boolean;\r\n};\r\n\r\nfunction filterNonNullishKeys<T extends Record<string, unknown>>(obj: T): Partial<T> {\r\n return Object.fromEntries(Object.entries(obj).filter(([, value]) => value != null)) as Partial<T>;\r\n}\r\n\r\nfunction mergeWithDefaults(options: PositioningOptions): PositioningOptions {\r\n return {\r\n placement: 'bottom',\r\n flip: true,\r\n resize: true,\r\n shift: true,\r\n offset: 4,\r\n stopped: false,\r\n ...filterNonNullishKeys(options),\r\n };\r\n}\r\n\r\nexport function positionElement(\r\n anchor: Anchor,\r\n floatingEl: HTMLElement,\r\n options: PositioningOptions = {}\r\n) {\r\n options = mergeWithDefaults(options);\r\n\r\n const referenceElement = toReferenceElement(anchor);\r\n\r\n const flipMiddleware = options.flip\r\n ? flip(options.shift ? { crossAxis: 'alignment', fallbackAxisSideDirection: 'end' } : undefined)\r\n : undefined;\r\n const shiftMiddleware = options.shift ? shift() : undefined;\r\n\r\n if (options.sizeConstraints) {\r\n if (options.sizeConstraints.width || options.sizeConstraints.maxWidth) {\r\n const refWidth = referenceElement.getBoundingClientRect().width;\r\n if (options.sizeConstraints.width) {\r\n if (typeof options.sizeConstraints.width === 'string') {\r\n floatingEl.style.width = options.sizeConstraints.width;\r\n } else {\r\n const widthConstraints = options.sizeConstraints.width * refWidth;\r\n floatingEl.style.width = `min(100%, ${widthConstraints}px)`;\r\n }\r\n }\r\n if (options.sizeConstraints.maxWidth) {\r\n if (typeof options.sizeConstraints.maxWidth === 'string') {\r\n floatingEl.style.maxWidth = options.sizeConstraints.maxWidth;\r\n } else {\r\n const maxWidthConstraints = options.sizeConstraints.maxWidth * refWidth;\r\n floatingEl.style.maxWidth = `min(100%, ${maxWidthConstraints}px)`;\r\n }\r\n }\r\n }\r\n if (options.sizeConstraints.height || options.sizeConstraints.maxHeight) {\r\n if (options.sizeConstraints.height) {\r\n floatingEl.style.height = options.sizeConstraints.height;\r\n }\r\n if (options.sizeConstraints.maxHeight) {\r\n floatingEl.style.maxHeight = options.sizeConstraints.maxHeight;\r\n }\r\n }\r\n if (options.sizeConstraints.minWidth) {\r\n floatingEl.style.minWidth = options.sizeConstraints.minWidth;\r\n }\r\n }\r\n\r\n computePosition(referenceElement, floatingEl, {\r\n placement: options.placement,\r\n strategy: options.strategy,\r\n middleware: [\r\n options.offset ? offset(options.offset) : undefined,\r\n options.resize\r\n ? size({\r\n apply({ availableHeight }) {\r\n const maxHeightConstraint = options.sizeConstraints?.maxHeight;\r\n const maxHeightInPx = maxHeightConstraint?.replace(/px$/, '');\r\n const maxHeight = maxHeightInPx\r\n ? Math.min(availableHeight, parseInt(maxHeightInPx))\r\n : availableHeight;\r\n if (options.hasShrinkableContent) {\r\n Object.assign(floatingEl.style, {\r\n height: `${maxHeight - 1}px`,\r\n });\r\n }\r\n },\r\n })\r\n : undefined,\r\n ...(options.placement?.includes('-')\r\n ? [flipMiddleware, shiftMiddleware]\r\n : [shiftMiddleware, flipMiddleware]),\r\n ...(options.middleware || []),\r\n ].filter(Boolean),\r\n }).then(pos => {\r\n if (!options.disableSettingStyles) {\r\n const flipped = pos.middlewareData.flip?.index;\r\n const flippedToLREnd =\r\n flipped &&\r\n (pos.placement.startsWith('left-') || pos.placement.startsWith('right-')) &&\r\n pos.placement.endsWith('-end');\r\n const flippedToTop = flipped && pos.placement.startsWith('top');\r\n\r\n Object.assign(floatingEl.style, {\r\n left: `${pos.x}px`,\r\n top: `${pos.y}px`,\r\n justifyContent: flippedToLREnd || flippedToTop ? 'flex-end' : 'flex-start',\r\n });\r\n }\r\n options.onPositionChange?.(pos);\r\n });\r\n}\r\n\r\nfunction toReferenceElement(anchor: Anchor): ReferenceElement {\r\n const referenceElement: ReferenceElement =\r\n anchor instanceof HTMLElement\r\n ? anchor\r\n : {\r\n getBoundingClientRect: () => ({\r\n x: anchor.x,\r\n y: anchor.y,\r\n width: 1,\r\n height: 1,\r\n top: anchor.y,\r\n right: anchor.x + 1,\r\n bottom: anchor.y + 1,\r\n left: anchor.x,\r\n }),\r\n };\r\n return referenceElement;\r\n}\r\n\r\nexport function autoPositionElement(\r\n anchor: Anchor,\r\n floatingEl: HTMLElement,\r\n options: PositioningOptions = {}\r\n): AutoPositioningHandle {\r\n options = mergeWithDefaults(options);\r\n\r\n let cleanup: (() => void) | undefined;\r\n const destroyRef = options.injector?.get(DestroyRef) ?? inject(DestroyRef);\r\n\r\n function startAutoUpdate() {\r\n cleanup = autoUpdate(toReferenceElement(anchor), floatingEl, () => {\r\n positionElement(anchor, floatingEl, options);\r\n });\r\n return cleanup;\r\n }\r\n\r\n destroyRef.onDestroy(() => {\r\n cleanup?.();\r\n cleanup = undefined;\r\n });\r\n return {\r\n start: () => {\r\n cleanup?.();\r\n startAutoUpdate();\r\n },\r\n stop: () => {\r\n cleanup?.();\r\n cleanup = undefined;\r\n },\r\n isRunning: () => !!cleanup,\r\n };\r\n}\r\n\r\nexport function splitPlacement(placement: Placement): [Side, Alignment | undefined] {\r\n return placement.split('-') as [Side, Alignment | undefined];\r\n}\r\n","import {\r\n DOCUMENT,\r\n inject,\r\n Injectable,\r\n Injector,\r\n type OnDestroy,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { Logger } from '@ngneers/controls/utils';\r\nimport {\r\n applyGlobalStyles,\r\n applyTheme,\r\n type ControlName,\r\n type ControlTemplate,\r\n getClassName,\r\n type Theme,\r\n type ThemeClasses,\r\n type ThemeTemplate,\r\n} from '@ngneers/controls-themes';\r\nimport { globalStyles } from '@ngneers/controls-themes/base/global';\r\nimport { skip } from 'rxjs';\r\n\r\nimport { NGN_CONFIG, type NgnConfig } from './config';\r\n\r\nexport type AppliedThemeClassCfg<T extends ControlName> =\r\n | keyof ThemeClasses<ThemeTemplate[T]>\r\n | Partial<Record<keyof ThemeClasses<ThemeTemplate[T]>, boolean | (() => boolean)>>;\r\n\r\nexport type ControlTemplateInfo<T extends ControlTemplate<string, string[]>> = {\r\n scope: string;\r\n class: (className: T['classNames'][number]) => string;\r\n classes: (classes: {\r\n [K in T['classNames'][number]]?: boolean;\r\n }) => string;\r\n};\r\n\r\nexport function themeTemplateToTemplateInfo<T extends ControlTemplate<string, string[]>>(\r\n config: NgnConfig,\r\n template: T,\r\n options?: { unstyled?: () => boolean }\r\n): ControlTemplateInfo<T> {\r\n return {\r\n scope: template.scope,\r\n class: (className: T['classNames'][number]) =>\r\n getClassName(config.theme.namePrefix, template.scope, className, options?.unstyled?.()),\r\n classes: (classes: {\r\n [K in T['classNames'][number]]?: boolean;\r\n }): string => {\r\n let result = '';\r\n for (const className in classes) {\r\n if ((classes as any)[className]) {\r\n if (result) result += ' ';\r\n result += getClassName(\r\n config.theme.namePrefix,\r\n template.scope,\r\n className,\r\n options?.unstyled?.()\r\n );\r\n }\r\n }\r\n return result;\r\n },\r\n };\r\n}\r\n\r\nexport function injectThemeTemplate<T extends ControlTemplate<string, string[]>>(\r\n template: T,\r\n options?: { injector?: Injector; unstyled?: () => boolean }\r\n): ControlTemplateInfo<T> {\r\n const config = options?.injector?.get(NGN_CONFIG) ?? inject(NGN_CONFIG);\r\n const themeService = options?.injector?.get(ThemeService) ?? inject(ThemeService);\r\n themeService.loadScope(template.scope);\r\n return themeTemplateToTemplateInfo(config, template, { unstyled: options?.unstyled });\r\n}\r\n\r\nexport function injectTheme<T extends ControlName>(\r\n controlName: T,\r\n options?: { injector?: Injector }\r\n): ControlTemplate<T, string[]> {\r\n const themeService = options?.injector?.get(ThemeService) ?? inject(ThemeService);\r\n const theme = themeService.activeTheme();\r\n if (!theme) {\r\n throw new Error(\r\n `No active theme is set. Cannot inject theme for control \"${controlName}\". Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.`\r\n );\r\n }\r\n const template = theme.parts.find(part => part.scope === controlName)?.controlTemplate as\r\n | ControlTemplate<T, string[]>\r\n | undefined;\r\n if (!template) {\r\n throw new Error(\r\n `The active theme \"${theme.name}\" does not contain a template for control \"${controlName}\".`\r\n );\r\n }\r\n return template;\r\n}\r\n\r\nexport function getAppliedClasses<T extends ControlName>(\r\n klass: AppliedThemeClassCfg<T>,\r\n themeTemplateInfo: Omit<ControlTemplateInfo<ControlTemplate<T, string[]>>, 'class' | 'classes'>\r\n): Array<{ class: string; name: string }> {\r\n function suffixes() {\r\n if (typeof klass === 'string') {\r\n return [klass];\r\n } else if (typeof klass === 'object' && klass !== null) {\r\n return Object.entries(klass)\r\n .filter(([_, value]) => (typeof value === 'function' ? value() : value))\r\n .map(([key, _]) => key);\r\n }\r\n return [];\r\n }\r\n const classes = suffixes().map(suffix => ({\r\n class: (themeTemplateInfo as ControlTemplateInfo<ControlTemplate<T, string[]>>).class(suffix),\r\n name: suffix,\r\n }));\r\n return classes;\r\n}\r\n\r\n@Injectable()\r\nexport class ThemeService implements OnDestroy {\r\n private readonly _config = inject(NGN_CONFIG);\r\n private readonly _loadedScopes = new Set<string>();\r\n private readonly _document = inject(DOCUMENT);\r\n\r\n public readonly activeTheme = signal(this._config.theme?.preset);\r\n\r\n constructor() {\r\n if (!this._config.theme?.preset && !this._config.theme?.lazyLoaded) {\r\n console.warn(\r\n 'No active theme found. Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.'\r\n );\r\n }\r\n\r\n if (this._config.disableAnimations) {\r\n const style = this._document.createElement('style');\r\n style.setAttribute('ngn-style', '');\r\n // we set the durations instead of setting animation/transition to none,\r\n // so that the animation starts/ends are still applied & the events are still fired\r\n style.innerHTML = `.ngn-control, .ngn-control * {\r\n animation-duration: 0s !important;\r\n transition-duration: 0s !important;\r\n }`;\r\n this._document.head.appendChild(style);\r\n Logger.debug('Animations have been disabled via configuration.');\r\n }\r\n\r\n toObservable(this.activeTheme)\r\n .pipe(takeUntilDestroyed(), skip(1))\r\n .subscribe(this.onThemeChange.bind(this));\r\n }\r\n\r\n public loadScope(scope: string): void {\r\n if (this._loadedScopes.has(scope)) {\r\n Logger.debug(`Theme scope \"${scope}\" is already loaded.`);\r\n return;\r\n }\r\n\r\n const activeTheme = untracked(() => this.activeTheme());\r\n if (!activeTheme) {\r\n Logger.debug(\r\n `No active theme set. Cannot load theme scope \"${scope}\". Scope will be loaded when the theme is set.`\r\n );\r\n return;\r\n } else {\r\n Logger.debug(`Loading theme scope \"${scope}\" for active theme \"${activeTheme.name}\".`);\r\n this.applyTheme(activeTheme, [scope]);\r\n }\r\n\r\n this._loadedScopes.add(scope);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n Logger.debug('ThemeService is being destroyed. Unloading all theme scopes...');\r\n this.unloadAllScopes();\r\n this._loadedScopes.clear();\r\n }\r\n\r\n private onThemeChange(newTheme: Theme | null): void {\r\n if (!newTheme) {\r\n Logger.warn('The active theme has been set to null.');\r\n this.unloadAllScopes();\r\n return;\r\n }\r\n\r\n Logger.debug(`Active theme changed to \"${newTheme.name}\". Reloading scopes...`);\r\n this._loadedScopes.forEach(scope => {\r\n Logger.debug(`Reloading theme scope \"${scope}\" for active theme \"${newTheme.name}\".`);\r\n this.applyTheme(newTheme, [scope]);\r\n });\r\n }\r\n\r\n private unloadAllScopes(): void {\r\n Logger.warn('Unloading all theme scopes is not implemented yet. This is a placeholder method.');\r\n }\r\n\r\n private applyTheme(theme: Theme, scopes: string[]): void {\r\n applyTheme(theme, scopes, {\r\n document: this._document,\r\n layer: this._config.theme.cssLayer ?? undefined,\r\n styleScope: this._config.theme.styleScope ?? undefined,\r\n namePrefix: this._config.theme.namePrefix,\r\n });\r\n applyGlobalStyles(globalStyles, {\r\n document: this._document,\r\n layer: this._config.theme.cssLayer ?? undefined,\r\n styleScope: this._config.theme.styleScope ?? undefined,\r\n namePrefix: this._config.theme.namePrefix,\r\n });\r\n }\r\n}\r\n","import { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnGlobal } from '@ngneers/controls/utils-ng';\r\n\r\nimport { type NgnConfigInit, provideNgnConfig } from './config';\r\nimport { Platform } from './platform';\r\nimport { ThemeService } from './theme-service';\r\n\r\nimport type { Provider } from '@angular/core';\r\n\r\nexport type NgnFeature = {\r\n providers: Provider[];\r\n};\r\n\r\nexport function provideNgnControls(config?: NgnConfigInit, ...features: NgnFeature[]): Provider[] {\r\n return [\r\n NgnGlobal,\r\n ThemeService,\r\n I18n,\r\n Platform,\r\n provideNgnConfig(config),\r\n ...features.map(f => f.providers).flat(),\r\n ];\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'ng-template[ngnTemplate]',\r\n})\r\nexport class NgnTemplate<T> {\r\n public readonly ngnTemplate = input.required<T>();\r\n\r\n public static ngTemplateContextGuard<T>(dir: NgnTemplate<T>, ctx: unknown): ctx is T {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * A noop with return type T.\r\n * This function is used to define typed properties to use in a template.\r\n */\r\nexport function templateTypesFn<T extends Record<string, Record<string, any>>>() {\r\n return {} as T & { $implicit: { [K in keyof T]: Partial<T[K]> } };\r\n}\r\n\r\n/**\r\n * A noop with return type `{ $implicit: Implicit } & Named`.\r\n * This function is used to define a typed property to use in a template.\r\n */\r\nexport function templateTypeFn<Implicit, Named extends Record<string, any> = object>() {\r\n return {} as ([Implicit] extends [undefined] ? unknown : { $implicit: Implicit }) & Named;\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-api-ng.mjs","sources":["../../src/api/ng/config/config.ts","../../src/api/ng/closable.ts","../../src/api/ng/components.ts","../../src/api/ng/dom.ts","../../src/api/ng/kinds.ts","../../src/api/ng/platform.ts","../../src/api/ng/positioning.ts","../../src/api/ng/theme-service.ts","../../src/api/ng/provider.ts","../../src/api/ng/template.ts","../../src/api/ng/ngneers-controls-api-ng.ts"],"sourcesContent":["import { inject, InjectionToken, provideAppInitializer, type Provider } from '@angular/core';\r\nimport { registerCustomLanguages, type Translations } from '@ngneers/controls/i18n';\r\nimport { type DeepPartial, Logger, type LogLevel } from '@ngneers/controls/utils';\r\n\r\nimport type { TooltipOptions } from './tooltip';\r\nimport type { NgnStateStorage } from '@ngneers/controls/utils-ng';\r\nimport type { StyleScope, Theme } from '@ngneers/controls-themes';\r\n\r\nexport const NGN_CONFIG = new InjectionToken<NgnConfig>('NGN_CONFIG');\r\n\r\nexport type NgnConfig = {\r\n readonly logLevel: LogLevel;\r\n readonly customTranslations?: Record<string, () => Promise<Translations>>;\r\n readonly disableAnimations: boolean;\r\n readonly theme: {\r\n readonly preset: Theme | null;\r\n readonly lazyLoaded: boolean;\r\n readonly styleScope: StyleScope | null;\r\n readonly cssLayer: string | null;\r\n readonly namePrefix: string;\r\n };\r\n readonly defaults: {\r\n readonly stateStorage: NgnStateStorage;\r\n readonly splitter: {\r\n readonly stateStorage: NgnStateStorage;\r\n };\r\n readonly tooltip: TooltipOptions;\r\n };\r\n};\r\n\r\nexport type NgnConfigInit = DeepPartial<\r\n NgnConfig,\r\n 'theme.preset.*' | 'theme.styleScope.*' | 'customTranslations.*'\r\n>;\r\n\r\nexport const defaultNgnConfig: NgnConfig = {\r\n logLevel: 'info',\r\n disableAnimations: false,\r\n theme: {\r\n preset: null,\r\n lazyLoaded: false,\r\n styleScope: null,\r\n cssLayer: 'ngn-controls',\r\n namePrefix: 'ngn-',\r\n },\r\n defaults: {\r\n stateStorage: 'session',\r\n splitter: {\r\n stateStorage: 'session',\r\n },\r\n tooltip: {\r\n placement: 'bottom',\r\n offset: 4,\r\n showDelay: '0.5s',\r\n hideDelay: '0.1s',\r\n showArrow: true,\r\n showOnHover: true,\r\n showOnFocus: true,\r\n hideOnTooltipHover: false,\r\n hideOnClick: true,\r\n autoAriaMode: 'description',\r\n },\r\n },\r\n};\r\n\r\nexport function provideNgnConfig(config?: NgnConfigInit): Provider {\r\n return [\r\n {\r\n provide: NGN_CONFIG,\r\n useValue: {\r\n logLevel: config?.logLevel ?? defaultNgnConfig.logLevel,\r\n customTranslations: config?.customTranslations,\r\n disableAnimations: config?.disableAnimations ?? defaultNgnConfig.disableAnimations,\r\n theme: {\r\n preset: config?.theme?.preset ?? defaultNgnConfig.theme.preset,\r\n lazyLoaded: config?.theme?.lazyLoaded ?? defaultNgnConfig.theme.lazyLoaded,\r\n styleScope: config?.theme?.styleScope ?? defaultNgnConfig.theme.styleScope,\r\n cssLayer:\r\n config?.theme?.cssLayer === undefined\r\n ? defaultNgnConfig.theme.cssLayer\r\n : config?.theme?.cssLayer,\r\n namePrefix: config?.theme?.namePrefix ?? defaultNgnConfig.theme.namePrefix,\r\n },\r\n defaults: {\r\n stateStorage: config?.defaults?.stateStorage ?? defaultNgnConfig.defaults.stateStorage,\r\n splitter: {\r\n stateStorage:\r\n config?.defaults?.splitter?.stateStorage ??\r\n config?.defaults?.stateStorage ??\r\n defaultNgnConfig.defaults.splitter.stateStorage,\r\n },\r\n tooltip: {\r\n placement:\r\n config?.defaults?.tooltip?.placement ?? defaultNgnConfig.defaults.tooltip.placement,\r\n offset: config?.defaults?.tooltip?.offset ?? defaultNgnConfig.defaults.tooltip.offset,\r\n showDelay:\r\n config?.defaults?.tooltip?.showDelay ?? defaultNgnConfig.defaults.tooltip.showDelay,\r\n hideDelay:\r\n config?.defaults?.tooltip?.hideDelay ?? defaultNgnConfig.defaults.tooltip.hideDelay,\r\n showArrow:\r\n config?.defaults?.tooltip?.showArrow ?? defaultNgnConfig.defaults.tooltip.showArrow,\r\n showOnHover:\r\n config?.defaults?.tooltip?.showOnHover ??\r\n defaultNgnConfig.defaults.tooltip.showOnHover,\r\n showOnFocus:\r\n config?.defaults?.tooltip?.showOnFocus ??\r\n defaultNgnConfig.defaults.tooltip.showOnFocus,\r\n hideOnTooltipHover:\r\n config?.defaults?.tooltip?.hideOnTooltipHover ??\r\n defaultNgnConfig.defaults.tooltip.hideOnTooltipHover,\r\n hideOnClick:\r\n config?.defaults?.tooltip?.hideOnClick ??\r\n defaultNgnConfig.defaults.tooltip.hideOnClick,\r\n autoAriaMode:\r\n config?.defaults?.tooltip?.autoAriaMode ??\r\n defaultNgnConfig.defaults.tooltip.autoAriaMode,\r\n },\r\n },\r\n } satisfies NgnConfig,\r\n },\r\n provideAppInitializer(() => {\r\n const config = inject(NGN_CONFIG);\r\n if (config?.customTranslations) {\r\n registerCustomLanguages(config.customTranslations);\r\n }\r\n Logger.logLevel = config.logLevel ?? Logger.logLevel;\r\n }),\r\n ];\r\n}\r\n","import { type ModelSignal, OutputEmitterRef } from '@angular/core';\r\n\r\nexport type PopoverCloseBy = 'any' | 'none';\r\nexport type CloseBy = PopoverCloseBy | 'escape';\r\n\r\nexport function toPopoverCloseBy(closeBy: CloseBy): 'auto' | 'manual' {\r\n switch (closeBy) {\r\n case 'any':\r\n return 'auto';\r\n case 'escape':\r\n case 'none':\r\n return 'manual';\r\n }\r\n}\r\n\r\nexport function toModalCloseBy(closeBy: CloseBy): 'any' | 'closerequest' | 'none' {\r\n switch (closeBy) {\r\n case 'any':\r\n return 'any';\r\n case 'escape':\r\n return 'closerequest';\r\n case 'none':\r\n return 'none';\r\n }\r\n}\r\n\r\nexport interface Openable {\r\n show(): void;\r\n hide(): void;\r\n toggle(): void;\r\n open: ModelSignal<boolean>;\r\n closed: OutputEmitterRef<void>;\r\n}\r\n","import { ComponentRef, type InputSignal, type InputSignalWithTransform } from '@angular/core';\r\n\r\ntype ComponentFromRef<T extends ComponentRef<any>> = T extends ComponentRef<infer C> ? C : never;\r\ntype InputsFromComponent<T> = {\r\n [K in keyof T]: T[K] extends InputSignal<infer V>\r\n ? V\r\n : T[K] extends InputSignalWithTransform<infer V, infer _>\r\n ? V\r\n : never;\r\n};\r\n\r\nexport function setComponentInput<\r\n T extends ComponentRef<C>,\r\n C,\r\n Input extends InputsFromComponent<ComponentFromRef<T>>,\r\n I extends keyof Input & string,\r\n>(componentRef: T, inputName: I, value: Input[I]): void {\r\n componentRef.setInput(inputName, value);\r\n}\r\n","import {\r\n afterRenderEffect,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n runInInjectionContext,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { deepCopy } from '@ngneers/controls/utils';\r\nimport { signalWithPrevious } from '@ngneers/controls/utils-ng';\r\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\r\n\r\nexport type Size = { width: number; height: number };\r\n\r\ntype ElementArray =\r\n | Signal<ReadonlyArray<HTMLElement | ElementRef<HTMLElement>>>\r\n | ReadonlyArray<HTMLElement | ElementRef<HTMLElement>>;\r\ntype ElementSingle =\r\n | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>\r\n | HTMLElement\r\n | Document\r\n | ElementRef<HTMLElement>;\r\n\r\nfunction getElement(el: ElementSingle): HTMLElement | Document | undefined {\r\n const rawElement = typeof el === 'function' ? el() : el;\r\n const element = rawElement instanceof ElementRef ? rawElement.nativeElement : rawElement;\r\n return element;\r\n}\r\n\r\nexport function elementSizeSignal(element: ElementSingle, active?: Signal<boolean>): Signal<Size> {\r\n const val = elementsSizesSignalInt(element, active);\r\n return computed(() => val()[0] ?? { width: 0, height: 0 });\r\n}\r\n\r\nexport function elementsSizesSignal(\r\n element: ElementArray,\r\n active?: Signal<boolean>\r\n): Signal<readonly Size[]> {\r\n return elementsSizesSignalInt(element, active);\r\n}\r\n\r\nfunction elementsSizesSignalInt(\r\n element: ElementArray | ElementSingle,\r\n active?: Signal<boolean>\r\n): Signal<readonly Size[]> {\r\n const sizeSignal = signal<readonly Size[]>([], {\r\n equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),\r\n });\r\n\r\n let elements: HTMLElement[];\r\n afterRenderEffect(() => {\r\n resizeObserver.disconnect();\r\n if (active && !active()) {\r\n return;\r\n }\r\n const rawElement = typeof element === 'function' ? element() : element;\r\n const arrayElement = Array.isArray(rawElement) ? rawElement : rawElement ? [rawElement] : [];\r\n elements = arrayElement.map(el => (el instanceof ElementRef ? el.nativeElement : el));\r\n\r\n if (!elements.length) {\r\n return;\r\n }\r\n sizeSignal.set(\r\n elements.map(el => {\r\n const rect = el.getBoundingClientRect();\r\n return {\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n })\r\n );\r\n elements.forEach(el => {\r\n resizeObserver.observe(el, { box: 'border-box' });\r\n });\r\n });\r\n const destroyRef = inject(DestroyRef);\r\n if (typeof ResizeObserver === 'undefined') {\r\n return sizeSignal; // ResizeObserver is not supported, return initial size\r\n }\r\n const resizeObserver = new ResizeObserver(entries => {\r\n entries.forEach(entry => {\r\n const index = elements.findIndex(el => el === entry.target);\r\n sizeSignal.update(s => {\r\n const copy = deepCopy(s);\r\n const borderBoxSize = entry.borderBoxSize[0];\r\n if (!borderBoxSize) {\r\n return s;\r\n }\r\n copy[index] = {\r\n width: borderBoxSize.inlineSize,\r\n height: borderBoxSize.blockSize,\r\n };\r\n return copy;\r\n });\r\n });\r\n });\r\n destroyRef.onDestroy(() => {\r\n resizeObserver.disconnect();\r\n });\r\n return sizeSignal;\r\n}\r\n\r\nconst ABORT_SIGNAL_SYMBOL = Symbol('AbortSignal');\r\nexport function abortSignalOnDestroy(options?: { injector?: Injector }): AbortSignal {\r\n const destroyRef = options?.injector?.get(DestroyRef) ?? inject(DestroyRef);\r\n if (ABORT_SIGNAL_SYMBOL in destroyRef) {\r\n return destroyRef[ABORT_SIGNAL_SYMBOL] as AbortSignal;\r\n }\r\n const abortController = new AbortController();\r\n destroyRef.onDestroy(() => {\r\n abortController.abort();\r\n });\r\n (destroyRef as any)[ABORT_SIGNAL_SYMBOL] = abortController.signal;\r\n return abortController.signal;\r\n}\r\n\r\n/**\r\n * Creates an Observable that emits the latest event of the specified type from the given DOM element.\r\n *\r\n * ⚠️ Cannot be used to cancel or call preventDefault on the event, as the event is emitted after the event handler phase.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n * @returns An Observable that emits the latest event of the specified type. Does not complete until the injector is destroyed.\r\n */\r\nexport function domEventObservable<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n injector?: Injector\r\n): Observable<GlobalEventHandlersEventMap[EventName]> {\r\n const inj = injector ?? inject(Injector);\r\n\r\n const result = new Subject<GlobalEventHandlersEventMap[EventName]>();\r\n const destroyRef = inj.get(DestroyRef);\r\n\r\n let subscription: Subscription | undefined;\r\n runInInjectionContext(inj, () => {\r\n afterRenderEffect(() => {\r\n subscription?.unsubscribe();\r\n const el = getElement(element);\r\n if (!el) {\r\n return;\r\n }\r\n subscription = fromEvent(el, eventName)\r\n .pipe(takeUntilDestroyed(destroyRef))\r\n .subscribe(e => result.next(e as GlobalEventHandlersEventMap[EventName]));\r\n });\r\n });\r\n return result.asObservable().pipe(takeUntilDestroyed(destroyRef));\r\n}\r\n\r\n/**\r\n * Creates a Signal that emits the latest event of the specified type from the given DOM element.\r\n *\r\n * ⚠️ Cannot be used to cancel or call preventDefault on the event, as the event is emitted after the event handler phase.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n * @returns A Signal that emits the latest event of the specified type or null if no event has occurred.\r\n */\r\nexport function domEventSignal<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n injector?: Injector\r\n): Signal<GlobalEventHandlersEventMap[EventName] | null> {\r\n const inj = injector ?? inject(Injector);\r\n const res = runInInjectionContext(inj, () => {\r\n const sig = signal<GlobalEventHandlersEventMap[EventName] | null>(null);\r\n domEventObservable(element, eventName, inj).subscribe(value => {\r\n sig.set(value as GlobalEventHandlersEventMap[EventName]);\r\n });\r\n return sig;\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Attaches an event handler to a DOM element that is automatically removed when the injector is destroyed.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param handler The function to handle the event.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n */\r\nexport function domEventHandler<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n handler: (event: GlobalEventHandlersEventMap[EventName]) => void,\r\n injector?: Injector\r\n): void {\r\n const inj = injector ?? inject(Injector);\r\n const destroyRef = inj.get(DestroyRef);\r\n runInInjectionContext(inj, () => {\r\n const destroyed = signal(false);\r\n destroyRef.onDestroy(() => {\r\n destroyed.set(true);\r\n });\r\n const elSig = computed(() => (destroyed() ? null : getElement(element)));\r\n const elSigWithPrev = signalWithPrevious(elSig);\r\n\r\n effect(() => {\r\n const element = elSigWithPrev();\r\n const previousElement = element.previous;\r\n if (previousElement) {\r\n previousElement.removeEventListener(\r\n eventName,\r\n handler as EventListenerOrEventListenerObject\r\n );\r\n }\r\n if (element.current) {\r\n element.current.addEventListener(eventName, handler as EventListenerOrEventListenerObject);\r\n }\r\n });\r\n });\r\n}\r\n","import { inject } from '@angular/core';\r\n\r\nimport { NGN_CONFIG } from './config';\r\n\r\nimport type { CustomColor, CustomKind } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * Retrieves the available kinds for a given control from the theme configuration.\r\n * Does **not** return custom kinds defined by the user in `NgnCustomTypes`.\r\n * @param controlName The name of the control to get kinds for.\r\n * @returns A tuple of available kinds for the specified control.\r\n * @todo make reactive (signal)\r\n */\r\nexport function injectThemeControlKinds<T extends string>(controlName: T): CustomKind<T>[] {\r\n const val = inject(NGN_CONFIG).theme.preset?.meta.kinds?.[controlName] ?? [];\r\n return val as CustomKind<T>[];\r\n}\r\n\r\n/**\r\n * Retrieves the available colors from the theme configuration.\r\n * Does **not** return custom colors defined by the user in `NgnCustomTypes`.\r\n * @returns A tuple of available colors.\r\n * @todo make reactive (signal)\r\n */\r\nexport function injectThemeColors(controlName?: string): CustomColor[] {\r\n const theme = inject(NGN_CONFIG).theme;\r\n if (controlName) {\r\n const classNames = theme.preset?.parts.find(x => x.scope === controlName)?.controlTemplate\r\n ?.classNames;\r\n const hasColor = classNames?.includes('color-*');\r\n if (!hasColor) {\r\n return [];\r\n }\r\n }\r\n const val = theme.preset?.meta.colors ?? [];\r\n return val as CustomColor[];\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n computed,\r\n DOCUMENT,\r\n inject,\r\n Injectable,\r\n PLATFORM_ID,\r\n type Signal,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport { elementSizeSignal, type Size } from './dom';\r\n\r\nexport type DeviceType = 'mobile' | 'desktop' | 'tablet';\r\n\r\n@Injectable()\r\nexport class Platform {\r\n private readonly _deviceType = signal<DeviceType>('desktop');\r\n\r\n public readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n public readonly windowSize: Signal<Size> = this.isBrowser\r\n ? elementSizeSignal(document.body)\r\n : signal({ width: 0, height: 0 });\r\n public readonly width = computed(() => this.windowSize().width);\r\n public readonly height = computed(() => this.windowSize().height);\r\n\r\n constructor() {\r\n const doc = inject(DOCUMENT);\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return;\r\n }\r\n if (typeof win.matchMedia !== 'function') {\r\n return;\r\n }\r\n const hasMouse = win.matchMedia('(any-hover: hover)').matches;\r\n if (hasMouse) {\r\n this._deviceType.set('desktop');\r\n return;\r\n }\r\n const isSmallScreen =\r\n window.matchMedia('(max-width: 768px)').matches ||\r\n window.matchMedia('(max-height: 768px)').matches;\r\n if (isSmallScreen) {\r\n this._deviceType.set('mobile');\r\n } else {\r\n this._deviceType.set('tablet');\r\n }\r\n }\r\n\r\n public readonly isTouchDevice = computed(() => {\r\n return this._deviceType() === 'mobile' || this._deviceType() === 'tablet';\r\n });\r\n}\r\n","import { DestroyRef, inject, Injector } from '@angular/core';\r\nimport {\r\n type Alignment,\r\n autoUpdate,\r\n computePosition,\r\n type ComputePositionReturn,\r\n flip,\r\n type Middleware,\r\n offset,\r\n type Placement,\r\n type ReferenceElement,\r\n shift,\r\n type Side,\r\n size,\r\n type Strategy,\r\n} from '@floating-ui/dom';\r\n\r\nexport type Point = {\r\n x: number;\r\n y: number;\r\n};\r\n\r\nexport type Anchor = HTMLElement | Point;\r\n\r\nexport type PositioningSizeConstraints = {\r\n /**\r\n * The minimum width of the floating element. When a string is provided, it is used as the CSS min-width value.\r\n */\r\n minWidth?: string;\r\n /**\r\n * The width of the floating element. When a number is provided, it is relative to the width of the reference element.\r\n * When a string is provided, it is used as the CSS width value.\r\n */\r\n width?: number | string;\r\n /**\r\n * The maximum width of the floating element. When a number is provided, it is relative to the width of the reference element.\r\n * When a string is provided, it is used as the CSS max-width value.\r\n */\r\n maxWidth?: number | string;\r\n /**\r\n * The height of the floating element. When a string is provided, it is used as the CSS height value.\r\n */\r\n height?: string;\r\n /**\r\n * The maximum height of the floating element. When a string is provided, it is used as the CSS max-height value.\r\n */\r\n maxHeight?: string;\r\n /**\r\n * The minimum height of the floating element. When a string is provided, it is used as the CSS min-height value.\r\n */\r\n minHeight?: string;\r\n};\r\n\r\nexport type PositioningOptions = {\r\n injector?: Injector;\r\n placement?: Placement;\r\n flip?: boolean;\r\n resize?: boolean;\r\n shift?: boolean;\r\n offset?: number;\r\n stopped?: boolean;\r\n sizeConstraints?: PositioningSizeConstraints;\r\n strategy?: Strategy;\r\n middleware?: Middleware[];\r\n disableSettingStyles?: boolean;\r\n hasShrinkableContent?: boolean;\r\n onPositionChange?: (position: ComputePositionReturn) => void;\r\n};\r\n\r\nexport type AutoPositioningHandle = {\r\n stop: () => void;\r\n start: () => void;\r\n isRunning: () => boolean;\r\n};\r\n\r\nfunction filterNonNullishKeys<T extends Record<string, unknown>>(obj: T): Partial<T> {\r\n return Object.fromEntries(Object.entries(obj).filter(([, value]) => value != null)) as Partial<T>;\r\n}\r\n\r\nfunction mergeWithDefaults(options: PositioningOptions): PositioningOptions {\r\n return {\r\n placement: 'bottom',\r\n flip: true,\r\n resize: true,\r\n shift: true,\r\n offset: 4,\r\n stopped: false,\r\n ...filterNonNullishKeys(options),\r\n };\r\n}\r\n\r\nexport function positionElement(\r\n anchor: Anchor,\r\n floatingEl: HTMLElement,\r\n options: PositioningOptions = {}\r\n) {\r\n options = mergeWithDefaults(options);\r\n\r\n const referenceElement = toReferenceElement(anchor);\r\n\r\n const flipMiddleware = options.flip\r\n ? flip(options.shift ? { crossAxis: 'alignment', fallbackAxisSideDirection: 'end' } : undefined)\r\n : undefined;\r\n const shiftMiddleware = options.shift ? shift() : undefined;\r\n\r\n if (options.sizeConstraints) {\r\n if (options.sizeConstraints.width || options.sizeConstraints.maxWidth) {\r\n const refWidth = referenceElement.getBoundingClientRect().width;\r\n if (options.sizeConstraints.width) {\r\n if (typeof options.sizeConstraints.width === 'string') {\r\n floatingEl.style.width = options.sizeConstraints.width;\r\n } else {\r\n const widthConstraints = options.sizeConstraints.width * refWidth;\r\n floatingEl.style.width = `min(100%, ${widthConstraints}px)`;\r\n }\r\n }\r\n if (options.sizeConstraints.maxWidth) {\r\n if (typeof options.sizeConstraints.maxWidth === 'string') {\r\n floatingEl.style.maxWidth = options.sizeConstraints.maxWidth;\r\n } else {\r\n const maxWidthConstraints = options.sizeConstraints.maxWidth * refWidth;\r\n floatingEl.style.maxWidth = `min(100%, ${maxWidthConstraints}px)`;\r\n }\r\n }\r\n }\r\n if (options.sizeConstraints.height || options.sizeConstraints.maxHeight) {\r\n if (options.sizeConstraints.height) {\r\n floatingEl.style.height = options.sizeConstraints.height;\r\n }\r\n if (options.sizeConstraints.maxHeight) {\r\n floatingEl.style.maxHeight = options.sizeConstraints.maxHeight;\r\n }\r\n }\r\n if (options.sizeConstraints.minWidth) {\r\n floatingEl.style.minWidth = options.sizeConstraints.minWidth;\r\n }\r\n }\r\n\r\n computePosition(referenceElement, floatingEl, {\r\n placement: options.placement,\r\n strategy: options.strategy,\r\n middleware: [\r\n options.offset ? offset(options.offset) : undefined,\r\n options.resize\r\n ? size({\r\n apply({ availableHeight }) {\r\n const maxHeightConstraint = options.sizeConstraints?.maxHeight;\r\n const maxHeightInPx = maxHeightConstraint?.replace(/px$/, '');\r\n const maxHeight = maxHeightInPx\r\n ? Math.min(availableHeight, parseInt(maxHeightInPx))\r\n : availableHeight;\r\n if (options.hasShrinkableContent) {\r\n Object.assign(floatingEl.style, {\r\n height: `${maxHeight - 1}px`,\r\n });\r\n }\r\n },\r\n })\r\n : undefined,\r\n ...(options.placement?.includes('-')\r\n ? [flipMiddleware, shiftMiddleware]\r\n : [shiftMiddleware, flipMiddleware]),\r\n ...(options.middleware || []),\r\n ].filter(Boolean),\r\n }).then(pos => {\r\n if (!options.disableSettingStyles) {\r\n const flipped = pos.middlewareData.flip?.index;\r\n const flippedToLREnd =\r\n flipped &&\r\n (pos.placement.startsWith('left-') || pos.placement.startsWith('right-')) &&\r\n pos.placement.endsWith('-end');\r\n const flippedToTop = flipped && pos.placement.startsWith('top');\r\n\r\n Object.assign(floatingEl.style, {\r\n left: `${pos.x}px`,\r\n top: `${pos.y}px`,\r\n justifyContent: flippedToLREnd || flippedToTop ? 'flex-end' : 'flex-start',\r\n });\r\n }\r\n options.onPositionChange?.(pos);\r\n });\r\n}\r\n\r\nfunction toReferenceElement(anchor: Anchor): ReferenceElement {\r\n const referenceElement: ReferenceElement =\r\n anchor instanceof HTMLElement\r\n ? anchor\r\n : {\r\n getBoundingClientRect: () => ({\r\n x: anchor.x,\r\n y: anchor.y,\r\n width: 1,\r\n height: 1,\r\n top: anchor.y,\r\n right: anchor.x + 1,\r\n bottom: anchor.y + 1,\r\n left: anchor.x,\r\n }),\r\n };\r\n return referenceElement;\r\n}\r\n\r\nexport function autoPositionElement(\r\n anchor: Anchor,\r\n floatingEl: HTMLElement,\r\n options: PositioningOptions = {}\r\n): AutoPositioningHandle {\r\n options = mergeWithDefaults(options);\r\n\r\n let cleanup: (() => void) | undefined;\r\n const destroyRef = options.injector?.get(DestroyRef) ?? inject(DestroyRef);\r\n\r\n function startAutoUpdate() {\r\n cleanup = autoUpdate(toReferenceElement(anchor), floatingEl, () => {\r\n positionElement(anchor, floatingEl, options);\r\n });\r\n return cleanup;\r\n }\r\n\r\n destroyRef.onDestroy(() => {\r\n cleanup?.();\r\n cleanup = undefined;\r\n });\r\n return {\r\n start: () => {\r\n cleanup?.();\r\n startAutoUpdate();\r\n },\r\n stop: () => {\r\n cleanup?.();\r\n cleanup = undefined;\r\n },\r\n isRunning: () => !!cleanup,\r\n };\r\n}\r\n\r\nexport function splitPlacement(placement: Placement): [Side, Alignment | undefined] {\r\n return placement.split('-') as [Side, Alignment | undefined];\r\n}\r\n","import {\r\n DOCUMENT,\r\n inject,\r\n Injectable,\r\n Injector,\r\n type OnDestroy,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { Logger } from '@ngneers/controls/utils';\r\nimport {\r\n applyGlobalStyles,\r\n applyTheme,\r\n type ControlName,\r\n type ControlTemplate,\r\n getClassName,\r\n type Theme,\r\n type ThemeClasses,\r\n type ThemeTemplate,\r\n} from '@ngneers/controls-themes';\r\nimport { globalStyles } from '@ngneers/controls-themes/base/global';\r\nimport { skip } from 'rxjs';\r\n\r\nimport { NGN_CONFIG, type NgnConfig } from './config';\r\n\r\nexport type AppliedThemeClassCfg<T extends ControlName> =\r\n | keyof ThemeClasses<ThemeTemplate[T]>\r\n | Partial<Record<keyof ThemeClasses<ThemeTemplate[T]>, boolean | (() => boolean)>>;\r\n\r\nexport type ControlTemplateInfo<T extends ControlTemplate<string, string[]>> = {\r\n scope: string;\r\n class: (className: T['classNames'][number]) => string;\r\n classes: (classes: {\r\n [K in T['classNames'][number]]?: boolean;\r\n }) => string;\r\n};\r\n\r\nexport function themeTemplateToTemplateInfo<T extends ControlTemplate<string, string[]>>(\r\n config: NgnConfig,\r\n template: T,\r\n options?: { unstyled?: () => boolean }\r\n): ControlTemplateInfo<T> {\r\n return {\r\n scope: template.scope,\r\n class: (className: T['classNames'][number]) =>\r\n getClassName(config.theme.namePrefix, template.scope, className, options?.unstyled?.()),\r\n classes: (classes: {\r\n [K in T['classNames'][number]]?: boolean;\r\n }): string => {\r\n let result = '';\r\n for (const className in classes) {\r\n if ((classes as any)[className]) {\r\n if (result) result += ' ';\r\n result += getClassName(\r\n config.theme.namePrefix,\r\n template.scope,\r\n className,\r\n options?.unstyled?.()\r\n );\r\n }\r\n }\r\n return result;\r\n },\r\n };\r\n}\r\n\r\nexport function injectThemeTemplate<T extends ControlTemplate<string, string[]>>(\r\n template: T,\r\n options?: { injector?: Injector; unstyled?: () => boolean }\r\n): ControlTemplateInfo<T> {\r\n const config = options?.injector?.get(NGN_CONFIG) ?? inject(NGN_CONFIG);\r\n const themeService = options?.injector?.get(ThemeService) ?? inject(ThemeService);\r\n themeService.loadScope(template.scope);\r\n return themeTemplateToTemplateInfo(config, template, { unstyled: options?.unstyled });\r\n}\r\n\r\nexport function injectTheme<T extends ControlName>(\r\n controlName: T,\r\n options?: { injector?: Injector }\r\n): ControlTemplate<T, string[]> {\r\n const themeService = options?.injector?.get(ThemeService) ?? inject(ThemeService);\r\n const theme = themeService.activeTheme();\r\n if (!theme) {\r\n throw new Error(\r\n `No active theme is set. Cannot inject theme for control \"${controlName}\". Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.`\r\n );\r\n }\r\n const template = theme.parts.find(part => part.scope === controlName)?.controlTemplate as\r\n | ControlTemplate<T, string[]>\r\n | undefined;\r\n if (!template) {\r\n throw new Error(\r\n `The active theme \"${theme.name}\" does not contain a template for control \"${controlName}\".`\r\n );\r\n }\r\n return template;\r\n}\r\n\r\nexport function getAppliedClasses<T extends ControlName>(\r\n klass: AppliedThemeClassCfg<T>,\r\n themeTemplateInfo: Omit<ControlTemplateInfo<ControlTemplate<T, string[]>>, 'class' | 'classes'>\r\n): Array<{ class: string; name: string }> {\r\n function suffixes() {\r\n if (typeof klass === 'string') {\r\n return [klass];\r\n } else if (typeof klass === 'object' && klass !== null) {\r\n return Object.entries(klass)\r\n .filter(([_, value]) => (typeof value === 'function' ? value() : value))\r\n .map(([key, _]) => key);\r\n }\r\n return [];\r\n }\r\n const classes = suffixes().map(suffix => ({\r\n class: (themeTemplateInfo as ControlTemplateInfo<ControlTemplate<T, string[]>>).class(suffix),\r\n name: suffix,\r\n }));\r\n return classes;\r\n}\r\n\r\n@Injectable()\r\nexport class ThemeService implements OnDestroy {\r\n private readonly _config = inject(NGN_CONFIG);\r\n private readonly _loadedScopes = new Set<string>();\r\n private readonly _document = inject(DOCUMENT);\r\n\r\n public readonly activeTheme = signal(this._config.theme?.preset);\r\n\r\n constructor() {\r\n if (!this._config.theme?.preset && !this._config.theme?.lazyLoaded) {\r\n console.warn(\r\n 'No active theme found. Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.'\r\n );\r\n }\r\n\r\n if (this._config.disableAnimations) {\r\n const style = this._document.createElement('style');\r\n style.setAttribute('ngn-style', '');\r\n // we set the durations instead of setting animation/transition to none,\r\n // so that the animation starts/ends are still applied & the events are still fired\r\n style.innerHTML = `.ngn-control, .ngn-control * {\r\n animation-duration: 0s !important;\r\n transition-duration: 0s !important;\r\n }`;\r\n this._document.head.appendChild(style);\r\n Logger.debug('Animations have been disabled via configuration.');\r\n }\r\n\r\n toObservable(this.activeTheme)\r\n .pipe(takeUntilDestroyed(), skip(1))\r\n .subscribe(this.onThemeChange.bind(this));\r\n }\r\n\r\n public loadScope(scope: string): void {\r\n if (this._loadedScopes.has(scope)) {\r\n Logger.debug(`Theme scope \"${scope}\" is already loaded.`);\r\n return;\r\n }\r\n\r\n const activeTheme = untracked(() => this.activeTheme());\r\n if (!activeTheme) {\r\n Logger.debug(\r\n `No active theme set. Cannot load theme scope \"${scope}\". Scope will be loaded when the theme is set.`\r\n );\r\n return;\r\n } else {\r\n Logger.debug(`Loading theme scope \"${scope}\" for active theme \"${activeTheme.name}\".`);\r\n this.applyTheme(activeTheme, [scope]);\r\n }\r\n\r\n this._loadedScopes.add(scope);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n Logger.debug('ThemeService is being destroyed. Unloading all theme scopes...');\r\n this.unloadAllScopes();\r\n this._loadedScopes.clear();\r\n }\r\n\r\n private onThemeChange(newTheme: Theme | null): void {\r\n if (!newTheme) {\r\n Logger.warn('The active theme has been set to null.');\r\n this.unloadAllScopes();\r\n return;\r\n }\r\n\r\n Logger.debug(`Active theme changed to \"${newTheme.name}\". Reloading scopes...`);\r\n this._loadedScopes.forEach(scope => {\r\n Logger.debug(`Reloading theme scope \"${scope}\" for active theme \"${newTheme.name}\".`);\r\n this.applyTheme(newTheme, [scope]);\r\n });\r\n }\r\n\r\n private unloadAllScopes(): void {\r\n Logger.warn('Unloading all theme scopes is not implemented yet. This is a placeholder method.');\r\n }\r\n\r\n private applyTheme(theme: Theme, scopes: string[]): void {\r\n applyTheme(theme, scopes, {\r\n document: this._document,\r\n layer: this._config.theme.cssLayer ?? undefined,\r\n styleScope: this._config.theme.styleScope ?? undefined,\r\n namePrefix: this._config.theme.namePrefix,\r\n });\r\n applyGlobalStyles(globalStyles, {\r\n document: this._document,\r\n layer: this._config.theme.cssLayer ?? undefined,\r\n styleScope: this._config.theme.styleScope ?? undefined,\r\n namePrefix: this._config.theme.namePrefix,\r\n });\r\n }\r\n}\r\n","import { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnGlobal } from '@ngneers/controls/utils-ng';\r\n\r\nimport { type NgnConfigInit, provideNgnConfig } from './config';\r\nimport { Platform } from './platform';\r\nimport { ThemeService } from './theme-service';\r\n\r\nimport type { Provider } from '@angular/core';\r\n\r\nexport type NgnFeature = {\r\n providers: Provider[];\r\n};\r\n\r\nexport function provideNgnControls(config?: NgnConfigInit, ...features: NgnFeature[]): Provider[] {\r\n return [\r\n NgnGlobal,\r\n ThemeService,\r\n I18n,\r\n Platform,\r\n provideNgnConfig(config),\r\n ...features.map(f => f.providers).flat(),\r\n ];\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'ng-template[ngnTemplate]',\r\n})\r\nexport class NgnTemplate<T> {\r\n public readonly ngnTemplate = input.required<T>();\r\n\r\n public static ngTemplateContextGuard<T>(dir: NgnTemplate<T>, ctx: unknown): ctx is T {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * A noop with return type T.\r\n * This function is used to define typed properties to use in a template.\r\n */\r\nexport function templateTypesFn<T extends Record<string, Record<string, any>>>() {\r\n return {} as T & { $implicit: { [K in keyof T]: Partial<T[K]> } };\r\n}\r\n\r\n/**\r\n * A noop with return type `{ $implicit: Implicit } & Named`.\r\n * This function is used to define a typed property to use in a template.\r\n */\r\nexport function templateTypeFn<Implicit, Named extends Record<string, any> = object>() {\r\n return {} as ([Implicit] extends [undefined] ? unknown : { $implicit: Implicit }) & Named;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}