ng-primitives 0.120.4 → 0.121.0

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 (147) hide show
  1. package/example-theme/index.css +9 -0
  2. package/fesm2022/ng-primitives-a11y.mjs +5 -5
  3. package/fesm2022/ng-primitives-a11y.mjs.map +1 -1
  4. package/fesm2022/ng-primitives-accordion.mjs +34 -51
  5. package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
  6. package/fesm2022/ng-primitives-ai.mjs +39 -52
  7. package/fesm2022/ng-primitives-ai.mjs.map +1 -1
  8. package/fesm2022/ng-primitives-autofill.mjs +4 -4
  9. package/fesm2022/ng-primitives-autofill.mjs.map +1 -1
  10. package/fesm2022/ng-primitives-avatar.mjs +14 -17
  11. package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
  12. package/fesm2022/ng-primitives-breadcrumbs.mjs +21 -21
  13. package/fesm2022/ng-primitives-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/ng-primitives-button.mjs +7 -9
  15. package/fesm2022/ng-primitives-button.mjs.map +1 -1
  16. package/fesm2022/ng-primitives-checkbox.mjs +15 -30
  17. package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
  18. package/fesm2022/ng-primitives-combobox.mjs +60 -92
  19. package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
  20. package/fesm2022/ng-primitives-common.mjs +4 -4
  21. package/fesm2022/ng-primitives-common.mjs.map +1 -1
  22. package/fesm2022/ng-primitives-context-menu.mjs +68 -121
  23. package/fesm2022/ng-primitives-context-menu.mjs.map +1 -1
  24. package/fesm2022/ng-primitives-date-picker.mjs +91 -115
  25. package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
  26. package/fesm2022/ng-primitives-dialog.mjs +35 -51
  27. package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
  28. package/fesm2022/ng-primitives-file-upload.mjs +26 -53
  29. package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
  30. package/fesm2022/ng-primitives-focus-trap.mjs +5 -8
  31. package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
  32. package/fesm2022/ng-primitives-form-field.mjs +39 -44
  33. package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
  34. package/fesm2022/ng-primitives-input-otp.mjs +30 -43
  35. package/fesm2022/ng-primitives-input-otp.mjs.map +1 -1
  36. package/fesm2022/ng-primitives-input.mjs +6 -8
  37. package/fesm2022/ng-primitives-input.mjs.map +1 -1
  38. package/fesm2022/ng-primitives-interactions.mjs +31 -48
  39. package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
  40. package/fesm2022/ng-primitives-internal.mjs +39 -35
  41. package/fesm2022/ng-primitives-internal.mjs.map +1 -1
  42. package/fesm2022/ng-primitives-listbox.mjs +34 -48
  43. package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
  44. package/fesm2022/ng-primitives-menu.mjs +85 -151
  45. package/fesm2022/ng-primitives-menu.mjs.map +1 -1
  46. package/fesm2022/ng-primitives-meter.mjs +25 -36
  47. package/fesm2022/ng-primitives-meter.mjs.map +1 -1
  48. package/fesm2022/ng-primitives-navigation-menu.mjs +60 -108
  49. package/fesm2022/ng-primitives-navigation-menu.mjs.map +1 -1
  50. package/fesm2022/ng-primitives-number-field.mjs +35 -59
  51. package/fesm2022/ng-primitives-number-field.mjs.map +1 -1
  52. package/fesm2022/ng-primitives-pagination.mjs +270 -297
  53. package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
  54. package/fesm2022/ng-primitives-popover.mjs +209 -223
  55. package/fesm2022/ng-primitives-popover.mjs.map +1 -1
  56. package/fesm2022/ng-primitives-portal.mjs +88 -59
  57. package/fesm2022/ng-primitives-portal.mjs.map +1 -1
  58. package/fesm2022/ng-primitives-progress.mjs +30 -41
  59. package/fesm2022/ng-primitives-progress.mjs.map +1 -1
  60. package/fesm2022/ng-primitives-radio.mjs +20 -30
  61. package/fesm2022/ng-primitives-radio.mjs.map +1 -1
  62. package/fesm2022/ng-primitives-resize.mjs +3 -3
  63. package/fesm2022/ng-primitives-resize.mjs.map +1 -1
  64. package/fesm2022/ng-primitives-roving-focus.mjs +20 -34
  65. package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
  66. package/fesm2022/ng-primitives-search.mjs +9 -9
  67. package/fesm2022/ng-primitives-search.mjs.map +1 -1
  68. package/fesm2022/ng-primitives-select.mjs +720 -620
  69. package/fesm2022/ng-primitives-select.mjs.map +1 -1
  70. package/fesm2022/ng-primitives-separator.mjs +4 -6
  71. package/fesm2022/ng-primitives-separator.mjs.map +1 -1
  72. package/fesm2022/ng-primitives-slider.mjs +63 -100
  73. package/fesm2022/ng-primitives-slider.mjs.map +1 -1
  74. package/fesm2022/ng-primitives-state.mjs +3 -3
  75. package/fesm2022/ng-primitives-state.mjs.map +1 -1
  76. package/fesm2022/ng-primitives-switch.mjs +15 -21
  77. package/fesm2022/ng-primitives-switch.mjs.map +1 -1
  78. package/fesm2022/ng-primitives-tabs.mjs +31 -41
  79. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  80. package/fesm2022/ng-primitives-textarea.mjs +5 -7
  81. package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
  82. package/fesm2022/ng-primitives-toast.mjs +30 -23
  83. package/fesm2022/ng-primitives-toast.mjs.map +1 -1
  84. package/fesm2022/ng-primitives-toggle-group.mjs +20 -36
  85. package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
  86. package/fesm2022/ng-primitives-toggle.mjs +10 -19
  87. package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
  88. package/fesm2022/ng-primitives-toolbar.mjs +4 -6
  89. package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
  90. package/fesm2022/ng-primitives-tooltip.mjs +401 -402
  91. package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
  92. package/fesm2022/ng-primitives-utils.mjs +5 -4
  93. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  94. package/package.json +56 -55
  95. package/schematics/ng-generate/templates/select/select.__fileSuffix@dasherize__.ts.template +48 -48
  96. package/{a11y/index.d.ts → types/ng-primitives-a11y.d.ts} +18 -24
  97. package/{accordion/index.d.ts → types/ng-primitives-accordion.d.ts} +85 -98
  98. package/{autofill/index.d.ts → types/ng-primitives-autofill.d.ts} +3 -10
  99. package/{avatar/index.d.ts → types/ng-primitives-avatar.d.ts} +7 -30
  100. package/{breadcrumbs/index.d.ts → types/ng-primitives-breadcrumbs.d.ts} +15 -70
  101. package/{button/index.d.ts → types/ng-primitives-button.d.ts} +23 -29
  102. package/{checkbox/index.d.ts → types/ng-primitives-checkbox.d.ts} +68 -74
  103. package/{combobox/index.d.ts → types/ng-primitives-combobox.d.ts} +35 -35
  104. package/{context-menu/index.d.ts → types/ng-primitives-context-menu.d.ts} +2 -1
  105. package/{date-picker/index.d.ts → types/ng-primitives-date-picker.d.ts} +2 -2
  106. package/{dialog/index.d.ts → types/ng-primitives-dialog.d.ts} +7 -2
  107. package/{file-upload/index.d.ts → types/ng-primitives-file-upload.d.ts} +5 -20
  108. package/{focus-trap/index.d.ts → types/ng-primitives-focus-trap.d.ts} +3 -10
  109. package/{form-field/index.d.ts → types/ng-primitives-form-field.d.ts} +9 -40
  110. package/{input/index.d.ts → types/ng-primitives-input.d.ts} +3 -10
  111. package/{menu/index.d.ts → types/ng-primitives-menu.d.ts} +17 -63
  112. package/{navigation-menu/index.d.ts → types/ng-primitives-navigation-menu.d.ts} +15 -70
  113. package/{number-field/index.d.ts → types/ng-primitives-number-field.d.ts} +80 -110
  114. package/types/ng-primitives-pagination.d.ts +502 -0
  115. package/{popover/index.d.ts → types/ng-primitives-popover.d.ts} +244 -57
  116. package/{portal/index.d.ts → types/ng-primitives-portal.d.ts} +22 -13
  117. package/{progress/index.d.ts → types/ng-primitives-progress.d.ts} +3 -10
  118. package/{roving-focus/index.d.ts → types/ng-primitives-roving-focus.d.ts} +65 -79
  119. package/types/ng-primitives-select.d.ts +687 -0
  120. package/{separator/index.d.ts → types/ng-primitives-separator.d.ts} +3 -10
  121. package/{slider/index.d.ts → types/ng-primitives-slider.d.ts} +76 -138
  122. package/{state/index.d.ts → types/ng-primitives-state.d.ts} +26 -21
  123. package/{switch/index.d.ts → types/ng-primitives-switch.d.ts} +50 -64
  124. package/{tabs/index.d.ts → types/ng-primitives-tabs.d.ts} +9 -40
  125. package/{textarea/index.d.ts → types/ng-primitives-textarea.d.ts} +3 -10
  126. package/{toast/index.d.ts → types/ng-primitives-toast.d.ts} +13 -1
  127. package/{toggle-group/index.d.ts → types/ng-primitives-toggle-group.d.ts} +75 -89
  128. package/{toggle/index.d.ts → types/ng-primitives-toggle.d.ts} +50 -56
  129. package/{toolbar/index.d.ts → types/ng-primitives-toolbar.d.ts} +3 -10
  130. package/types/ng-primitives-tooltip.d.ts +691 -0
  131. package/pagination/index.d.ts +0 -211
  132. package/select/index.d.ts +0 -396
  133. package/tooltip/index.d.ts +0 -384
  134. /package/{ai/index.d.ts → types/ng-primitives-ai.d.ts} +0 -0
  135. /package/{common/index.d.ts → types/ng-primitives-common.d.ts} +0 -0
  136. /package/{date-time-luxon/index.d.ts → types/ng-primitives-date-time-luxon.d.ts} +0 -0
  137. /package/{date-time/index.d.ts → types/ng-primitives-date-time.d.ts} +0 -0
  138. /package/{input-otp/index.d.ts → types/ng-primitives-input-otp.d.ts} +0 -0
  139. /package/{interactions/index.d.ts → types/ng-primitives-interactions.d.ts} +0 -0
  140. /package/{internal/index.d.ts → types/ng-primitives-internal.d.ts} +0 -0
  141. /package/{listbox/index.d.ts → types/ng-primitives-listbox.d.ts} +0 -0
  142. /package/{meter/index.d.ts → types/ng-primitives-meter.d.ts} +0 -0
  143. /package/{radio/index.d.ts → types/ng-primitives-radio.d.ts} +0 -0
  144. /package/{resize/index.d.ts → types/ng-primitives-resize.d.ts} +0 -0
  145. /package/{search/index.d.ts → types/ng-primitives-search.d.ts} +0 -0
  146. /package/{utils/index.d.ts → types/ng-primitives-utils.d.ts} +0 -0
  147. /package/{index.d.ts → types/ng-primitives.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-state.mjs","sources":["../../../../packages/ng-primitives/state/src/index.ts","../../../../packages/ng-primitives/state/src/ng-primitives-state.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-uncalled-signals */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterRenderEffect,\n ChangeDetectorRef,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n FactoryProvider,\n forwardRef,\n inject,\n InjectionToken,\n InjectOptions,\n Injector,\n InputSignal,\n InputSignalWithTransform,\n isSignal,\n linkedSignal,\n NgZone,\n PLATFORM_ID,\n ProviderToken,\n runInInjectionContext,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/**\n * This converts the state object to a writable state object.\n * This means that inputs become signals which are writable.\n */\nexport type State<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof T]: T[K] extends InputSignalWithTransform<infer U, any>\n ? WritableSignal<U>\n : T[K] extends InputSignal<infer R>\n ? WritableSignal<R>\n : T[K];\n};\n\n/**\n * This is similar to the state object, but we don't expose properties that are not\n * inputs.\n */\nexport type CreatedState<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof T]: T[K] extends InputSignalWithTransform<infer U, any>\n ? WritableSignal<U>\n : T[K] extends InputSignal<infer R>\n ? WritableSignal<R>\n : never;\n};\n\nexport type InjectedState<T> = Signal<State<T>>;\n\n/**\n * Create a new injection token for the state.\n * @param description The description of the token\n */\nexport function createStateToken<T>(description: string): InjectionToken<T> {\n return new InjectionToken<Signal<State<T>>>(`Ngp${description}StateToken`);\n}\n\nexport interface CreateStateProviderOptions {\n /**\n * Whether we should check for the state in the parent injector.\n */\n inherit?: boolean;\n}\n\n/**\n * Create a new provider for the state. It first tries to inject the state from the parent injector,\n * as this allows for the state to be hoisted to a higher level in the component tree. This can\n * be useful to avoid issues where the injector can't be shared in some cases when ng-content is used.\n * @param token The token for the state\n */\nexport function createStateProvider<T>(\n token: ProviderToken<T>,\n): (options?: CreateStateProviderOptions) => FactoryProvider {\n return ({ inherit }: CreateStateProviderOptions = {}) => ({\n provide: token,\n useFactory: () => {\n if (inherit === false) {\n // if we are not checking the parent, we want to create a new state\n return signal({});\n }\n // if we are checking the parent, we want to check if the state is already defined\n return inject(token, { optional: true, skipSelf: true }) ?? signal({});\n },\n });\n}\n\ntype CreateStateInjectorOptions = {\n /**\n * Whether the state may not be immediately available. This can happen when the child is instantiated before the parent.\n */\n deferred?: boolean;\n};\n\n/**\n * Create a new state injector for the state.\n * @param token The token for the state\n */\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options: { deferred: true },\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U> | undefined>;\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options?: CreateStateInjectorOptions,\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U>>;\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options: CreateStateInjectorOptions = {},\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U> | undefined> {\n return <U = T>(injectOptions: InjectOptions = {}) => {\n const value = inject(token, injectOptions) as Signal<State<U> | undefined> | null;\n\n if (options.deferred) {\n return computed(() =>\n value && Object.keys(value() ?? {}).length === 0 ? undefined : value?.(),\n ) as Signal<State<U> | undefined>;\n }\n\n return (value as Signal<State<U>>) ?? signal(undefined);\n };\n}\n\n/**\n * Convert the original state object into a writable state object.\n * @param token The token for the state\n */\nexport function createState(token: ProviderToken<WritableSignal<State<unknown>>>) {\n return <U>(state: U): CreatedState<U> => {\n const internalState = inject(token);\n\n internalState.update(obj => {\n // Iterating over properties\n for (const key in state) {\n const value = state[key as keyof U];\n\n // We want to make this a controlled input if it is an InputSignal or InputSignalWithTransform\n if (isSignalInput(value)) {\n // @ts-ignore\n obj[key] = createControlledInput(value);\n } else {\n // @ts-ignore\n obj[key] = value;\n }\n }\n\n // Iterating over prototype methods\n const prototype = Object.getPrototypeOf(state);\n\n for (const key of Object.getOwnPropertyNames(prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, key);\n\n // if this is a getter or setter, we need to define it on the object\n if (descriptor?.get || descriptor?.set) {\n Object.defineProperty(obj, key, descriptor);\n } else if (typeof prototype[key as keyof U] === 'function') {\n (obj as Record<string, unknown>)[key] = prototype[key as keyof U].bind(state);\n } else {\n // @ts-ignore\n obj[key] = prototype[key as keyof U];\n }\n }\n\n return { ...obj };\n });\n\n return internalState() as unknown as CreatedState<U>;\n };\n}\n\n// this is a bit hacky, but we need to do it to track whether this is controlled\nfunction createControlledInput(\n property: InputSignal<unknown> | InputSignalWithTransform<unknown, unknown>,\n): WritableSignal<unknown> {\n const value = signal(property());\n let isControlled = false;\n\n const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputDefinition = symbol ? (property as any)[symbol] : undefined;\n\n if (\n !symbol ||\n !inputDefinition ||\n typeof inputDefinition.applyValueToInputSignal !== 'function'\n ) {\n console.warn(\n 'Angular has changed its internal Input implementation, report this issue to ng-primitives.',\n );\n // fallback to a linked signal which is partially controlled\n return linkedSignal(() => property());\n }\n\n const originalApply = inputDefinition.applyValueToInputSignal.bind(inputDefinition);\n const originalSet = value.set.bind(value);\n const originalUpdate = value.update.bind(value);\n\n inputDefinition.applyValueToInputSignal = (inputSignalNode: unknown, newValue: unknown) => {\n isControlled = true;\n originalSet(newValue);\n originalApply(inputSignalNode, newValue);\n };\n\n value.set = (newValue: unknown) => {\n if (!isControlled) {\n originalSet(newValue);\n }\n };\n\n value.update = (updateFn: (value: unknown) => unknown) => {\n if (!isControlled) {\n originalUpdate(updateFn);\n }\n };\n\n return value;\n}\n\nfunction isSignalInput(\n property: unknown,\n): property is InputSignal<unknown> | InputSignalWithTransform<unknown, unknown> {\n if (!isSignal(property)) {\n return false;\n }\n\n const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');\n\n if (!symbol) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputDefinition = symbol ? (property as any)[symbol] : undefined;\n\n if (!inputDefinition) {\n return false;\n }\n\n return 'transformFn' in inputDefinition || 'applyValueToInputSignal' in inputDefinition;\n}\n\nexport interface CreatePrimitiveOptions {\n injector?: Injector;\n elementRef?: ElementRef<HTMLElement>;\n}\n\ntype PrimitiveState<TFactory extends (...args: any[]) => unknown> = TFactory extends (\n props: unknown,\n) => infer R\n ? R\n : TFactory extends (...args: any[]) => infer R\n ? R\n : never;\n\ntype BasePrimitiveInjectionFn<TState> = {\n (): Signal<TState>;\n (options: { hoisted: true; optional?: boolean; skipSelf?: boolean }): Signal<TState | null>;\n (options?: {\n hoisted?: boolean;\n optional?: boolean;\n skipSelf?: boolean;\n }): Signal<TState | null> | Signal<TState>;\n};\n\ntype PrimitiveInjectionFn<TFactory extends (...args: any[]) => unknown> = TFactory extends (\n props: unknown,\n) => infer R\n ? {\n (): Signal<R>;\n (options: { hoisted: true; optional?: boolean; skipSelf?: boolean }): Signal<R | null>;\n (options?: {\n hoisted?: boolean;\n optional?: boolean;\n skipSelf?: boolean;\n }): Signal<R | null> | Signal<R>;\n }\n : BasePrimitiveInjectionFn<PrimitiveState<TFactory>>;\n\nexport function createPrimitive<TFactory extends (...args: any[]) => unknown>(\n name: string,\n fn: TFactory,\n options?: CreatePrimitiveOptions,\n): [\n InjectionToken<WritableSignal<PrimitiveState<TFactory>>>,\n TFactory,\n PrimitiveInjectionFn<TFactory>,\n (opts?: { inherit?: boolean }) => FactoryProvider,\n];\nexport function createPrimitive<TFactory extends (...args: any[]) => unknown>(\n name: string,\n fn: TFactory,\n options: CreatePrimitiveOptions = {},\n): [\n InjectionToken<WritableSignal<PrimitiveState<TFactory>>>,\n TFactory,\n PrimitiveInjectionFn<TFactory>,\n (opts?: { inherit?: boolean }) => FactoryProvider,\n] {\n // Create a unique injection token for the primitive's state signal\n const token = new InjectionToken<WritableSignal<PrimitiveState<TFactory>>>(`Primitive: ${name}`);\n\n // Create the state signal within the appropriate injection context\n const factory = ((props: Parameters<TFactory>[0]) => {\n // determine the injector to use\n let injector = options.injector ?? inject(Injector);\n\n // If an ElementRef is provided in options, create a child injector\n if (options.elementRef) {\n injector = Injector.create({\n providers: [{ provide: ElementRef, useValue: options.elementRef }],\n parent: injector,\n });\n }\n\n return runInInjectionContext(injector, () => {\n const state = inject(token, { optional: true });\n const instance = fn(props);\n state?.set(instance as PrimitiveState<TFactory>);\n return instance;\n });\n }) as TFactory;\n\n // create an injection function that provides the state signal\n function injectFn<T = PrimitiveState<TFactory>>(): Signal<T>;\n function injectFn<T = PrimitiveState<TFactory>>(\n options: { hoisted: true } & InjectOptions,\n ): Signal<T | null>;\n function injectFn<T = PrimitiveState<TFactory>>(options?: {\n hoisted?: boolean;\n optional?: boolean;\n skipSelf?: boolean;\n }): Signal<T | null> | Signal<T> {\n const hoisted = options?.hoisted ?? false;\n const optional = options?.optional ?? false;\n const skipSelf = options?.skipSelf ?? false;\n\n if (hoisted || optional) {\n return (inject(token, { optional: true, skipSelf }) ??\n signal(null)) as unknown as Signal<T | null>;\n }\n\n return inject(token, { optional, skipSelf }) as unknown as Signal<T>;\n }\n\n // create a function to provide the state\n const provideFn = (opts?: { inherit?: boolean }): FactoryProvider => {\n const inherit = opts?.inherit ?? true;\n return {\n provide: token,\n useFactory: () => {\n if (inherit === false) {\n return signal(null);\n }\n\n return inject(token, { optional: true, skipSelf: true }) ?? signal(null);\n },\n };\n };\n\n return [token, factory as TFactory, injectFn as PrimitiveInjectionFn<TFactory>, provideFn];\n}\n\nexport function controlled<T>(value: Signal<T>): WritableSignal<T>;\nexport function controlled<T>(value: Signal<T> | undefined, defaultValue: T): WritableSignal<T>;\nexport function controlled<T>(value: Signal<T> | undefined, defaultValue?: T): WritableSignal<T> {\n return value ? linkedSignal(() => value()) : signal(defaultValue as T);\n}\n\nexport interface ControlledStateOptions<T> {\n /**\n * The controlled value signal. When defined (not `undefined`), the component\n * is in controlled mode and this value always wins.\n */\n readonly value: Signal<T | undefined>;\n /**\n * The default value signal for uncontrolled mode.\n */\n readonly defaultValue?: Signal<T>;\n /**\n * Callback fired when the value changes.\n */\n readonly onChange?: (value: T) => void;\n}\n\nexport interface SetterOptions {\n /**\n * Whether to fire `onChange` and emit on the `change` observable.\n * Defaults to `true`. Set to `false` for cases like form `writeValue`\n * where the internal state should sync without notifying listeners.\n */\n readonly emit?: boolean;\n}\n\nexport type ControlledState<T> = [\n value: Signal<T>,\n set: (value: T, options?: SetterOptions) => void,\n change: Observable<T>,\n];\n\nexport function controlledState<T>({\n value,\n onChange,\n defaultValue,\n}: ControlledStateOptions<T>): ControlledState<T> {\n const change = emitter<T>();\n const UNSET = Symbol('UNSET');\n const userValue = signal<T | typeof UNSET>(UNSET);\n\n // Latching flag: once the controlled value has been defined, the component\n // is permanently controlled and set() must not update internal state.\n // This is intentionally mutated inside `resolved` — it must latch\n // synchronously during signal evaluation so that set() sees the correct\n // state. A pure computation cannot express \"once true, always true\" without\n // external state.\n let isControlled = value() !== undefined;\n\n const resolved = linkedSignal(() => {\n const v = value();\n if (v !== undefined) {\n isControlled = true;\n return v;\n }\n const uv = userValue();\n return uv !== UNSET ? (uv as T) : defaultValue?.();\n });\n\n function set(newValue: T, options?: SetterOptions) {\n if (resolved() === newValue && options?.emit !== false) {\n return;\n }\n if (!isControlled) {\n userValue.set(newValue);\n }\n if (options?.emit !== false) {\n onChange?.(newValue);\n change.emit(newValue);\n }\n }\n\n return [resolved.asReadonly() as Signal<T>, set, change.asObservable()];\n}\n\nfunction setAttribute(\n element: ElementRef<HTMLElement>,\n attr: string,\n value: string | null | undefined,\n): void {\n // if the attribute is \"disabled\" and the value is 'false', we need to remove the attribute\n if (attr === 'disabled' && value === 'false') {\n element.nativeElement.removeAttribute(attr);\n return;\n }\n\n if (value !== null && value !== undefined) {\n element.nativeElement.setAttribute(attr, value);\n } else {\n element.nativeElement.removeAttribute(attr);\n }\n}\n\nexport function attrBinding(\n element: ElementRef<HTMLElement>,\n attr: string,\n value:\n | (() => string | number | boolean | null | undefined)\n | string\n | number\n | boolean\n | null\n | undefined,\n): void {\n // If the value is static (not a function), set it immediately without an effect\n if (typeof value !== 'function') {\n setAttribute(element, attr, value?.toString() ?? null);\n return;\n }\n\n isomorphicEffect(() => {\n const valueResult = value();\n setAttribute(element, attr, valueResult?.toString() ?? null);\n });\n}\n\nfunction getStyleUnit(style: string): string {\n const parts = style.split('.');\n\n if (parts.length > 1) {\n const unit = parts[parts.length - 1];\n\n switch (unit) {\n case 'px':\n case 'em':\n case 'rem':\n case '%':\n case 'vh':\n case 'vw':\n case 'vmin':\n case 'vmax':\n case 'cm':\n case 'mm':\n case 'in':\n case 'pt':\n case 'pc':\n case 'ex':\n case 'ch':\n return unit;\n default:\n return '';\n }\n }\n\n return '';\n}\n\nexport function styleBinding(\n element: ElementRef<HTMLElement>,\n style: string,\n value: (() => string | number | null) | string | number | null,\n): void {\n isomorphicEffect(() => {\n const styleValue = typeof value === 'function' ? value() : value;\n // we should look for units in the style name, just like Angular does e.g. width.px\n const styleUnit = getStyleUnit(style);\n const styleName = styleUnit ? style.replace(`.${styleUnit}`, '') : style;\n\n if (styleValue !== null) {\n element.nativeElement.style.setProperty(styleName, styleValue + styleUnit);\n } else {\n element.nativeElement.style.removeProperty(styleName);\n }\n });\n}\n\nexport function dataBinding(\n element: ElementRef<HTMLElement>,\n attr: string,\n value: (() => string | boolean | null) | string | boolean | null,\n): void {\n if (!attr.startsWith('data-')) {\n throw new Error(`dataBinding: attribute \"${attr}\" must start with \"data-\"`);\n }\n\n isomorphicEffect(() => {\n let valueResult = typeof value === 'function' ? value() : value;\n\n if (valueResult === false) {\n valueResult = null;\n } else if (valueResult === true) {\n valueResult = '';\n } else if (valueResult !== null && typeof valueResult !== 'string') {\n valueResult = String(valueResult);\n }\n\n setAttribute(element, attr, valueResult);\n });\n}\n\nexport function listener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void;\nexport function listener(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: string,\n handler: (event: Event) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void;\nexport function listener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: K | string,\n handler: (event: HTMLElementEventMap[K] | Event) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void {\n return runInInjectionContext(options?.injector ?? inject(Injector), () => {\n const ngZone = inject(NgZone);\n const destroyRef = inject(DestroyRef);\n const nativeElement = coerceElement(element);\n\n const removeListener = () =>\n nativeElement.removeEventListener(event, handler as EventListener, options?.config);\n destroyRef.onDestroy(removeListener);\n ngZone.runOutsideAngular(() =>\n nativeElement.addEventListener(event, handler as EventListener, options?.config),\n );\n\n return removeListener;\n });\n}\n\nexport function onMount(callback: () => void): void {\n const injector = inject(Injector);\n afterRenderEffect(() => runInInjectionContext(injector, callback), { injector });\n}\n\nexport function onDestroy(callback: () => void): void {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(callback);\n}\n\n/**\n * Previously, with our state approach, we allowed signals to be written directly using their setters.\n * However, with our new approach, we want people to use the appropriate set method instead. This function takes in a writable\n * signal and returns a proxy that warns the user when set is called directly.\n */\nexport function deprecatedSetter<T>(\n signal: WritableSignal<T>,\n methodName: string,\n): WritableSignal<T>;\nexport function deprecatedSetter<T>(\n signal: Signal<T>,\n methodName: string,\n setter: (value: T) => void,\n): WritableSignal<T>;\nexport function deprecatedSetter<T>(\n signal: Signal<T>,\n methodName: string,\n setter?: (value: T) => void,\n): WritableSignal<T> {\n return new Proxy(signal as WritableSignal<T>, {\n get(target, prop) {\n if (prop === 'set') {\n return (value: T) => {\n console.warn(\n `Deprecation warning: Use ${methodName}() instead of setting the value directly.`,\n );\n if (setter) {\n setter(value);\n } else {\n (target as WritableSignal<T>).set(value);\n }\n };\n }\n if (prop === 'update') {\n return (updateFn: (value: T) => T) => {\n console.warn(\n `Deprecation warning: Use ${methodName}() instead of setting the value directly.`,\n );\n const newValue = updateFn(target());\n if (setter) {\n setter(newValue);\n } else {\n (target as WritableSignal<T>).set(newValue);\n }\n };\n }\n return target[prop as keyof WritableSignal<T>];\n },\n });\n}\n\n/**\n * A utility function to inject an inherited state from a parent injector. This is useful for cases\n * where a primitive needs to inherit state from a parent primitive, such as in roving focus groups.\n * We could use inject with a forwardRef, but forwardRef returns an any - no thanks...\n */\nexport function injectInheritedState<T>(\n token: () => InjectionToken<T>,\n injectOptions: InjectOptions = {},\n): T | null {\n return (\n inject<T>(\n forwardRef(() => token()),\n { optional: true, skipSelf: true, ...injectOptions },\n ) ?? null\n );\n}\n\nexport interface Emitter<T> {\n emit(value: T): void;\n asObservable(): Observable<T>;\n}\n\n/**\n * An emitter is a simple wrapper around a Subject that ensures\n * that change detection is run when an event is emitted and that\n * the subject is automatically completed when the component is destroyed.\n */\nexport function emitter<T>({\n injector = inject(Injector),\n}: { injector?: Injector } = {}): Emitter<T> {\n return runInInjectionContext(injector, () => {\n const eventEmitter = new Subject<T>();\n const changeDetector = inject(ChangeDetectorRef);\n\n // Complete the subject on destroy\n onDestroy(() => eventEmitter.complete());\n\n return {\n emit(value: T): void {\n eventEmitter.next(value);\n queueMicrotask(() => changeDetector.markForCheck());\n },\n asObservable(): Observable<T> {\n return eventEmitter.asObservable();\n },\n };\n });\n}\n\nfunction isomorphicEffect(callback: () => void): void {\n const injector = inject(Injector);\n const platformId = injector.get(PLATFORM_ID);\n\n if (isPlatformBrowser(platformId)) {\n afterRenderEffect(() => callback());\n } else {\n // On the server, we just run the effect immediately\n effect(() => callback());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-primitives-state.mjs","sources":["../../../../packages/ng-primitives/state/src/index.ts","../../../../packages/ng-primitives/state/src/ng-primitives-state.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-uncalled-signals */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterRenderEffect,\n ChangeDetectorRef,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n FactoryProvider,\n forwardRef,\n inject,\n InjectionToken,\n InjectOptions,\n Injector,\n InputSignal,\n InputSignalWithTransform,\n isSignal,\n linkedSignal,\n NgZone,\n PLATFORM_ID,\n ProviderToken,\n runInInjectionContext,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/**\n * This converts the state object to a writable state object.\n * This means that inputs become signals which are writable.\n */\nexport type State<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof T]: T[K] extends InputSignalWithTransform<infer U, any>\n ? WritableSignal<U>\n : T[K] extends InputSignal<infer R>\n ? WritableSignal<R>\n : T[K];\n};\n\n/**\n * This is similar to the state object, but we don't expose properties that are not\n * inputs.\n */\nexport type CreatedState<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof T]: T[K] extends InputSignalWithTransform<infer U, any>\n ? WritableSignal<U>\n : T[K] extends InputSignal<infer R>\n ? WritableSignal<R>\n : never;\n};\n\nexport type InjectedState<T> = Signal<State<T>>;\n\n/**\n * Create a new injection token for the state.\n * @param description The description of the token\n */\nexport function createStateToken<T>(description: string): InjectionToken<T> {\n return new InjectionToken<Signal<State<T>>>(`Ngp${description}StateToken`);\n}\n\nexport interface CreateStateProviderOptions {\n /**\n * Whether we should check for the state in the parent injector.\n */\n inherit?: boolean;\n}\n\nexport type StateInjectionOptions =\n | {\n hoisted?: boolean;\n optional?: boolean;\n skipSelf?: boolean;\n }\n | undefined;\n\n/**\n * Create a new provider for the state. It first tries to inject the state from the parent injector,\n * as this allows for the state to be hoisted to a higher level in the component tree. This can\n * be useful to avoid issues where the injector can't be shared in some cases when ng-content is used.\n * @param token The token for the state\n */\nexport function createStateProvider<T>(\n token: ProviderToken<T>,\n): (options?: CreateStateProviderOptions) => FactoryProvider {\n return ({ inherit }: CreateStateProviderOptions = {}) => ({\n provide: token,\n useFactory: () => {\n if (inherit === false) {\n // if we are not checking the parent, we want to create a new state\n return signal({});\n }\n // if we are checking the parent, we want to check if the state is already defined\n return inject(token, { optional: true, skipSelf: true }) ?? signal({});\n },\n });\n}\n\ntype CreateStateInjectorOptions = {\n /**\n * Whether the state may not be immediately available. This can happen when the child is instantiated before the parent.\n */\n deferred?: boolean;\n};\n\n/**\n * Create a new state injector for the state.\n * @param token The token for the state\n */\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options: { deferred: true },\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U> | undefined>;\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options?: CreateStateInjectorOptions,\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U>>;\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options: CreateStateInjectorOptions = {},\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U> | undefined> {\n return <U = T>(injectOptions: InjectOptions = {}) => {\n const value = inject(token, injectOptions) as Signal<State<U> | undefined> | null;\n\n if (options.deferred) {\n return computed(() =>\n value && Object.keys(value() ?? {}).length === 0 ? undefined : value?.(),\n ) as Signal<State<U> | undefined>;\n }\n\n return (value as Signal<State<U>>) ?? signal(undefined);\n };\n}\n\n/**\n * Convert the original state object into a writable state object.\n * @param token The token for the state\n */\nexport function createState(token: ProviderToken<WritableSignal<State<unknown>>>) {\n return <U>(state: U): CreatedState<U> => {\n const internalState = inject(token);\n\n internalState.update(obj => {\n // Iterating over properties\n for (const key in state) {\n const value = state[key as keyof U];\n\n // We want to make this a controlled input if it is an InputSignal or InputSignalWithTransform\n if (isSignalInput(value)) {\n // @ts-ignore\n obj[key] = createControlledInput(value);\n } else {\n // @ts-ignore\n obj[key] = value;\n }\n }\n\n // Iterating over prototype methods\n const prototype = Object.getPrototypeOf(state);\n\n for (const key of Object.getOwnPropertyNames(prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, key);\n\n // if this is a getter or setter, we need to define it on the object\n if (descriptor?.get || descriptor?.set) {\n Object.defineProperty(obj, key, descriptor);\n } else if (typeof prototype[key as keyof U] === 'function') {\n (obj as Record<string, unknown>)[key] = prototype[key as keyof U].bind(state);\n } else {\n // @ts-ignore\n obj[key] = prototype[key as keyof U];\n }\n }\n\n return { ...obj };\n });\n\n return internalState() as unknown as CreatedState<U>;\n };\n}\n\n// this is a bit hacky, but we need to do it to track whether this is controlled\nfunction createControlledInput(\n property: InputSignal<unknown> | InputSignalWithTransform<unknown, unknown>,\n): WritableSignal<unknown> {\n const value = signal(property());\n let isControlled = false;\n\n const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputDefinition = symbol ? (property as any)[symbol] : undefined;\n\n if (\n !symbol ||\n !inputDefinition ||\n typeof inputDefinition.applyValueToInputSignal !== 'function'\n ) {\n console.warn(\n 'Angular has changed its internal Input implementation, report this issue to ng-primitives.',\n );\n // fallback to a linked signal which is partially controlled\n return linkedSignal(() => property());\n }\n\n const originalApply = inputDefinition.applyValueToInputSignal.bind(inputDefinition);\n const originalSet = value.set.bind(value);\n const originalUpdate = value.update.bind(value);\n\n inputDefinition.applyValueToInputSignal = (inputSignalNode: unknown, newValue: unknown) => {\n isControlled = true;\n originalSet(newValue);\n originalApply(inputSignalNode, newValue);\n };\n\n value.set = (newValue: unknown) => {\n if (!isControlled) {\n originalSet(newValue);\n }\n };\n\n value.update = (updateFn: (value: unknown) => unknown) => {\n if (!isControlled) {\n originalUpdate(updateFn);\n }\n };\n\n return value;\n}\n\nfunction isSignalInput(\n property: unknown,\n): property is InputSignal<unknown> | InputSignalWithTransform<unknown, unknown> {\n if (!isSignal(property)) {\n return false;\n }\n\n const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');\n\n if (!symbol) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputDefinition = symbol ? (property as any)[symbol] : undefined;\n\n if (!inputDefinition) {\n return false;\n }\n\n return 'transformFn' in inputDefinition || 'applyValueToInputSignal' in inputDefinition;\n}\n\nexport interface CreatePrimitiveOptions {\n injector?: Injector;\n elementRef?: ElementRef<HTMLElement>;\n}\n\ntype PrimitiveState<TFactory extends (...args: any[]) => unknown> = TFactory extends (\n props: unknown,\n) => infer R\n ? R\n : TFactory extends (...args: any[]) => infer R\n ? R\n : never;\n\ntype BasePrimitiveInjectionFn<TState> = {\n (): Signal<TState>;\n (options: StateInjectionOptions): Signal<TState | null>;\n (options?: StateInjectionOptions): Signal<TState | null> | Signal<TState>;\n};\n\ntype PrimitiveInjectionFn<TFactory extends (...args: any[]) => unknown> = TFactory extends (\n props: unknown,\n) => infer R\n ? {\n (): Signal<R>;\n (options: StateInjectionOptions): Signal<R | null>;\n (options?: StateInjectionOptions): Signal<R | null> | Signal<R>;\n }\n : BasePrimitiveInjectionFn<PrimitiveState<TFactory>>;\n\nexport function createPrimitive<TFactory extends (...args: any[]) => unknown>(\n name: string,\n fn: TFactory,\n options?: CreatePrimitiveOptions,\n): [\n InjectionToken<WritableSignal<PrimitiveState<TFactory>>>,\n TFactory,\n PrimitiveInjectionFn<TFactory>,\n (opts?: { inherit?: boolean }) => FactoryProvider,\n];\nexport function createPrimitive<TFactory extends (...args: any[]) => unknown>(\n name: string,\n fn: TFactory,\n options: CreatePrimitiveOptions = {},\n): [\n InjectionToken<WritableSignal<PrimitiveState<TFactory>>>,\n TFactory,\n PrimitiveInjectionFn<TFactory>,\n (opts?: { inherit?: boolean }) => FactoryProvider,\n] {\n // Create a unique injection token for the primitive's state signal\n const token = new InjectionToken<WritableSignal<PrimitiveState<TFactory>>>(`Primitive: ${name}`);\n\n // Create the state signal within the appropriate injection context\n const factory = ((props: Parameters<TFactory>[0]) => {\n // determine the injector to use\n let injector = options.injector ?? inject(Injector);\n\n // If an ElementRef is provided in options, create a child injector\n if (options.elementRef) {\n injector = Injector.create({\n providers: [{ provide: ElementRef, useValue: options.elementRef }],\n parent: injector,\n });\n }\n\n return runInInjectionContext(injector, () => {\n const state = inject(token, { optional: true });\n const instance = fn(props);\n state?.set(instance as PrimitiveState<TFactory>);\n return instance;\n });\n }) as TFactory;\n\n // create an injection function that provides the state signal\n function injectFn<T = PrimitiveState<TFactory>>(): Signal<T>;\n function injectFn<T = PrimitiveState<TFactory>>(\n options: { hoisted: true } & InjectOptions,\n ): Signal<T | null>;\n function injectFn<T = PrimitiveState<TFactory>>(\n options?: StateInjectionOptions,\n ): Signal<T | null> | Signal<T> {\n const hoisted = options?.hoisted ?? false;\n const optional = options?.optional ?? false;\n const skipSelf = options?.skipSelf ?? false;\n\n if (hoisted || optional) {\n return (inject(token, { optional: true, skipSelf }) ??\n signal(null)) as unknown as Signal<T | null>;\n }\n\n return inject(token, { optional, skipSelf }) as unknown as Signal<T>;\n }\n\n // create a function to provide the state\n const provideFn = (opts?: { inherit?: boolean }): FactoryProvider => {\n const inherit = opts?.inherit ?? true;\n return {\n provide: token,\n useFactory: () => {\n if (inherit === false) {\n return signal(null);\n }\n\n return inject(token, { optional: true, skipSelf: true }) ?? signal(null);\n },\n };\n };\n\n return [token, factory as TFactory, injectFn as PrimitiveInjectionFn<TFactory>, provideFn];\n}\n\n/**\n * Wraps an external signal in a `linkedSignal` so it can be written to internally\n * while still re-syncing whenever the source input changes.\n *\n * Only use this when the primitive needs to mutate the value internally (e.g. a\n * setter, toggle, or other internal update) but must also remain in sync with the\n * input. If the value is read-only — passed straight through to bindings or exposed\n * to consumers without internal mutation — use the input signal directly instead.\n *\n * When `value` is `undefined`, falls back to a plain writable signal seeded with\n * `defaultValue`, supporting uncontrolled usage.\n *\n * @param value - The external signal to synchronize with\n * @param defaultValue - The default value to use when `value` is `undefined`\n * @returns A writable signal linked to the external signal\n */\nexport function controlled<T>(value: Signal<T>): WritableSignal<T>;\nexport function controlled<T>(value: Signal<T> | undefined, defaultValue: T): WritableSignal<T>;\nexport function controlled<T>(value: Signal<T> | undefined, defaultValue?: T): WritableSignal<T> {\n return value ? linkedSignal(() => value()) : signal(defaultValue as T);\n}\n\nexport interface ControlledStateOptions<T> {\n /**\n * The controlled value signal. When defined (not `undefined`), the component\n * is in controlled mode and this value always wins.\n */\n readonly value: Signal<T | undefined>;\n /**\n * The default value signal for uncontrolled mode.\n */\n readonly defaultValue?: Signal<T>;\n /**\n * Callback fired when the value changes.\n */\n readonly onChange?: (value: T) => void;\n}\n\nexport interface SetterOptions {\n /**\n * Whether to fire `onChange` and emit on the `change` observable.\n * Defaults to `true`. Set to `false` for cases like form `writeValue`\n * where the internal state should sync without notifying listeners.\n */\n readonly emit?: boolean;\n}\n\nexport type ControlledState<T> = [\n value: Signal<T>,\n set: (value: T, options?: SetterOptions) => void,\n change: Observable<T>,\n];\n\nexport function controlledState<T>({\n value,\n onChange,\n defaultValue,\n}: ControlledStateOptions<T>): ControlledState<T> {\n const change = emitter<T>();\n const UNSET = Symbol('UNSET');\n const userValue = signal<T | typeof UNSET>(UNSET);\n\n // Latching flag: once the controlled value has been defined, the component\n // is permanently controlled and set() must not update internal state.\n // This is intentionally mutated inside `resolved` — it must latch\n // synchronously during signal evaluation so that set() sees the correct\n // state. A pure computation cannot express \"once true, always true\" without\n // external state.\n let isControlled = value() !== undefined;\n\n const resolved = linkedSignal(() => {\n const v = value();\n if (v !== undefined) {\n isControlled = true;\n return v;\n }\n const uv = userValue();\n return uv !== UNSET ? (uv as T) : defaultValue?.();\n });\n\n function set(newValue: T, options?: SetterOptions) {\n if (resolved() === newValue && options?.emit !== false) {\n return;\n }\n if (!isControlled) {\n userValue.set(newValue);\n }\n if (options?.emit !== false) {\n onChange?.(newValue);\n change.emit(newValue);\n }\n }\n\n return [resolved.asReadonly() as Signal<T>, set, change.asObservable()];\n}\n\nfunction setAttribute(\n element: ElementRef<HTMLElement>,\n attr: string,\n value: string | null | undefined,\n): void {\n // if the attribute is \"disabled\" and the value is 'false', we need to remove the attribute\n if (attr === 'disabled' && value === 'false') {\n element.nativeElement.removeAttribute(attr);\n return;\n }\n\n if (value !== null && value !== undefined) {\n element.nativeElement.setAttribute(attr, value);\n } else {\n element.nativeElement.removeAttribute(attr);\n }\n}\n\nexport function attrBinding(\n element: ElementRef<HTMLElement>,\n attr: string,\n value:\n | (() => string | number | boolean | null | undefined)\n | string\n | number\n | boolean\n | null\n | undefined,\n): void {\n // If the value is static (not a function), set it immediately without an effect\n if (typeof value !== 'function') {\n setAttribute(element, attr, value?.toString() ?? null);\n return;\n }\n\n isomorphicEffect(() => {\n const valueResult = value();\n setAttribute(element, attr, valueResult?.toString() ?? null);\n });\n}\n\nfunction getStyleUnit(style: string): string {\n const parts = style.split('.');\n\n if (parts.length > 1) {\n const unit = parts[parts.length - 1];\n\n switch (unit) {\n case 'px':\n case 'em':\n case 'rem':\n case '%':\n case 'vh':\n case 'vw':\n case 'vmin':\n case 'vmax':\n case 'cm':\n case 'mm':\n case 'in':\n case 'pt':\n case 'pc':\n case 'ex':\n case 'ch':\n return unit;\n default:\n return '';\n }\n }\n\n return '';\n}\n\nexport function styleBinding(\n element: ElementRef<HTMLElement>,\n style: string,\n value: (() => string | number | null) | string | number | null,\n): void {\n isomorphicEffect(() => {\n const styleValue = typeof value === 'function' ? value() : value;\n // we should look for units in the style name, just like Angular does e.g. width.px\n const styleUnit = getStyleUnit(style);\n const styleName = styleUnit ? style.replace(`.${styleUnit}`, '') : style;\n\n if (styleValue !== null) {\n element.nativeElement.style.setProperty(styleName, styleValue + styleUnit);\n } else {\n element.nativeElement.style.removeProperty(styleName);\n }\n });\n}\n\nexport function dataBinding(\n element: ElementRef<HTMLElement>,\n attr: string,\n value: (() => string | boolean | null) | string | boolean | null,\n): void {\n if (!attr.startsWith('data-')) {\n throw new Error(`dataBinding: attribute \"${attr}\" must start with \"data-\"`);\n }\n\n isomorphicEffect(() => {\n let valueResult = typeof value === 'function' ? value() : value;\n\n if (valueResult === false) {\n valueResult = null;\n } else if (valueResult === true) {\n valueResult = '';\n } else if (valueResult !== null && typeof valueResult !== 'string') {\n valueResult = String(valueResult);\n }\n\n setAttribute(element, attr, valueResult);\n });\n}\n\nexport function listener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void;\nexport function listener(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: string,\n handler: (event: Event) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void;\nexport function listener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: K | string,\n handler: (event: HTMLElementEventMap[K] | Event) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void {\n return runInInjectionContext(options?.injector ?? inject(Injector), () => {\n const ngZone = inject(NgZone);\n const destroyRef = inject(DestroyRef);\n const nativeElement = coerceElement(element);\n\n const removeListener = () =>\n nativeElement.removeEventListener(event, handler as EventListener, options?.config);\n destroyRef.onDestroy(removeListener);\n ngZone.runOutsideAngular(() =>\n nativeElement.addEventListener(event, handler as EventListener, options?.config),\n );\n\n return removeListener;\n });\n}\n\nexport function onMount(callback: () => void): void {\n const injector = inject(Injector);\n afterRenderEffect(() => runInInjectionContext(injector, callback), { injector });\n}\n\nexport function onDestroy(callback: () => void): void {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(callback);\n}\n\n/**\n * Previously, with our state approach, we allowed signals to be written directly using their setters.\n * However, with our new approach, we want people to use the appropriate set method instead. This function takes in a writable\n * signal and returns a proxy that warns the user when set is called directly.\n */\nexport function deprecatedSetter<T>(\n signal: WritableSignal<T>,\n methodName: string,\n): WritableSignal<T>;\nexport function deprecatedSetter<T>(\n signal: Signal<T>,\n methodName: string,\n setter: (value: T) => void,\n): WritableSignal<T>;\nexport function deprecatedSetter<T>(\n signal: Signal<T>,\n methodName: string,\n setter?: (value: T) => void,\n): WritableSignal<T> {\n return new Proxy(signal as WritableSignal<T>, {\n get(target, prop) {\n if (prop === 'set') {\n return (value: T) => {\n console.warn(\n `Deprecation warning: Use ${methodName}() instead of setting the value directly.`,\n );\n if (setter) {\n setter(value);\n } else {\n (target as WritableSignal<T>).set(value);\n }\n };\n }\n if (prop === 'update') {\n return (updateFn: (value: T) => T) => {\n console.warn(\n `Deprecation warning: Use ${methodName}() instead of setting the value directly.`,\n );\n const newValue = updateFn(target());\n if (setter) {\n setter(newValue);\n } else {\n (target as WritableSignal<T>).set(newValue);\n }\n };\n }\n return target[prop as keyof WritableSignal<T>];\n },\n });\n}\n\n/**\n * A utility function to inject an inherited state from a parent injector. This is useful for cases\n * where a primitive needs to inherit state from a parent primitive, such as in roving focus groups.\n * We could use inject with a forwardRef, but forwardRef returns an any - no thanks...\n */\nexport function injectInheritedState<T>(\n token: () => InjectionToken<T>,\n injectOptions: InjectOptions = {},\n): T | null {\n return (\n inject<T>(\n forwardRef(() => token()),\n { optional: true, skipSelf: true, ...injectOptions },\n ) ?? null\n );\n}\n\nexport interface Emitter<T> {\n emit(value: T): void;\n asObservable(): Observable<T>;\n}\n\n/**\n * An emitter is a simple wrapper around a Subject that ensures\n * that change detection is run when an event is emitted and that\n * the subject is automatically completed when the component is destroyed.\n */\nexport function emitter<T>({\n injector = inject(Injector),\n}: { injector?: Injector } = {}): Emitter<T> {\n return runInInjectionContext(injector, () => {\n const eventEmitter = new Subject<T>();\n const changeDetector = inject(ChangeDetectorRef);\n\n // Complete the subject on destroy\n onDestroy(() => eventEmitter.complete());\n\n return {\n emit(value: T): void {\n eventEmitter.next(value);\n queueMicrotask(() => changeDetector.markForCheck());\n },\n asObservable(): Observable<T> {\n return eventEmitter.asObservable();\n },\n };\n });\n}\n\nfunction isomorphicEffect(callback: () => void): void {\n const injector = inject(Injector);\n const platformId = injector.get(PLATFORM_ID);\n\n if (isPlatformBrowser(platformId)) {\n afterRenderEffect(() => callback());\n } else {\n // On the server, we just run the effect immediately\n effect(() => callback());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -13,10 +13,10 @@ const [NgpSwitchStateToken, ngpSwitch, injectSwitchState, provideSwitchState] =
13
13
  const disabledInput = controlled(_disabled);
14
14
  // Form control and interactions
15
15
  const status = ngpFormControl({ id, disabled: disabledInput });
16
- const disabled = computed(() => status().disabled ?? disabledInput(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
16
+ const disabled = computed(() => status().disabled ?? disabledInput(), ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
17
17
  ngpInteractions({ hover: true, press: true, focusVisible: true, disabled });
18
18
  const checkedChange = emitter();
19
- const tabindex = computed(() => (disabled() ? -1 : 0), ...(ngDevMode ? [{ debugName: "tabindex" }] : []));
19
+ const tabindex = computed(() => (disabled() ? -1 : 0), ...(ngDevMode ? [{ debugName: "tabindex" }] : /* istanbul ignore next */ []));
20
20
  // Host bindings
21
21
  attrBinding(element, 'role', 'switch');
22
22
  attrBinding(element, 'id', id);
@@ -66,8 +66,8 @@ const [NgpSwitchStateToken, ngpSwitch, injectSwitchState, provideSwitchState] =
66
66
  const [NgpSwitchThumbStateToken, ngpSwitchThumb, injectSwitchThumbState, provideSwitchThumbState,] = createPrimitive('NgpSwitchThumb', ({}) => {
67
67
  const element = injectElementRef();
68
68
  const switchState = injectSwitchState();
69
- const checked = computed(() => switchState().checked(), ...(ngDevMode ? [{ debugName: "checked" }] : []));
70
- const disabled = computed(() => switchState().disabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
69
+ const checked = computed(() => switchState().checked(), ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
70
+ const disabled = computed(() => switchState().disabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
71
71
  // Host bindings
72
72
  dataBinding(element, 'data-checked', checked);
73
73
  dataBinding(element, 'data-disabled', disabled);
@@ -87,10 +87,10 @@ class NgpSwitchThumb {
87
87
  constructor() {
88
88
  ngpSwitchThumb({});
89
89
  }
90
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpSwitchThumb, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
91
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpSwitchThumb, isStandalone: true, selector: "[ngpSwitchThumb]", providers: [provideSwitchThumbState({ inherit: false })], ngImport: i0 }); }
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpSwitchThumb, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
91
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpSwitchThumb, isStandalone: true, selector: "[ngpSwitchThumb]", providers: [provideSwitchThumbState({ inherit: false })], ngImport: i0 }); }
92
92
  }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpSwitchThumb, decorators: [{
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpSwitchThumb, decorators: [{
94
94
  type: Directive,
95
95
  args: [{
96
96
  selector: '[ngpSwitchThumb]',
@@ -106,16 +106,13 @@ class NgpSwitch {
106
106
  /**
107
107
  * The id of the switch. If not provided, a unique id will be generated.
108
108
  */
109
- this.id = input(uniqueId('ngp-switch'), ...(ngDevMode ? [{ debugName: "id" }] : []));
109
+ this.id = input(uniqueId('ngp-switch'), ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
110
110
  /**
111
111
  * Determine if the switch is checked.
112
112
  * @default false
113
113
  */
114
- this.checked = input(false, ...(ngDevMode ? [{ debugName: "checked", alias: 'ngpSwitchChecked',
115
- transform: booleanAttribute }] : [{
116
- alias: 'ngpSwitchChecked',
117
- transform: booleanAttribute,
118
- }]));
114
+ this.checked = input(false, { ...(ngDevMode ? { debugName: "checked" } : /* istanbul ignore next */ {}), alias: 'ngpSwitchChecked',
115
+ transform: booleanAttribute });
119
116
  /**
120
117
  * Emits when the checked state changes.
121
118
  */
@@ -126,11 +123,8 @@ class NgpSwitch {
126
123
  * Determine if the switch is disabled.
127
124
  * @default false
128
125
  */
129
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", alias: 'ngpSwitchDisabled',
130
- transform: booleanAttribute }] : [{
131
- alias: 'ngpSwitchDisabled',
132
- transform: booleanAttribute,
133
- }]));
126
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), alias: 'ngpSwitchDisabled',
127
+ transform: booleanAttribute });
134
128
  /**
135
129
  * The switch state.
136
130
  * @internal
@@ -160,10 +154,10 @@ class NgpSwitch {
160
154
  setDisabled(value) {
161
155
  this.state.setDisabled(value);
162
156
  }
163
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpSwitch, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
164
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpSwitch, isStandalone: true, selector: "[ngpSwitch]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "ngpSwitchChecked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpSwitchDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "ngpSwitchCheckedChange" }, providers: [provideSwitchState({ inherit: false })], exportAs: ["ngpSwitch"], ngImport: i0 }); }
157
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpSwitch, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
158
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpSwitch, isStandalone: true, selector: "[ngpSwitch]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "ngpSwitchChecked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpSwitchDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "ngpSwitchCheckedChange" }, providers: [provideSwitchState({ inherit: false })], exportAs: ["ngpSwitch"], ngImport: i0 }); }
165
159
  }
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpSwitch, decorators: [{
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpSwitch, decorators: [{
167
161
  type: Directive,
168
162
  args: [{
169
163
  selector: '[ngpSwitch]',
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-switch.mjs","sources":["../../../../packages/ng-primitives/switch/src/switch/switch-state.ts","../../../../packages/ng-primitives/switch/src/switch-thumb/switch-thumb-state.ts","../../../../packages/ng-primitives/switch/src/switch-thumb/switch-thumb.ts","../../../../packages/ng-primitives/switch/src/switch/switch.ts","../../../../packages/ng-primitives/switch/src/ng-primitives-switch.ts"],"sourcesContent":["import { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n listener,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the Switch primitive.\n */\nexport interface NgpSwitchState {\n /**\n * The id of the switch.\n */\n readonly id: Signal<string>;\n /**\n * Whether the switch is checked.\n */\n readonly checked: WritableSignal<boolean>;\n /**\n * Whether the switch is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * Emits when the checked state changes.\n */\n readonly checkedChange: Observable<boolean>;\n /**\n * Toggle the switch state.\n */\n toggle(event?: Event): void;\n /**\n * Update the checked value.\n */\n setChecked(value: boolean): void;\n /**\n * Update the disabled value.\n */\n setDisabled(value: boolean): void;\n}\n\n/**\n * Inputs for configuring the Switch primitive.\n */\nexport interface NgpSwitchProps {\n /**\n * The id of the switch.\n */\n readonly id?: Signal<string>;\n /**\n * Whether the switch is checked.\n */\n readonly checked?: Signal<boolean>;\n /**\n * Whether the switch is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the checked state changes.\n */\n readonly onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const [NgpSwitchStateToken, ngpSwitch, injectSwitchState, provideSwitchState] =\n createPrimitive(\n 'NgpSwitch',\n ({\n id = signal(uniqueId('ngp-switch')),\n checked: _checked = signal(false),\n disabled: _disabled = signal(false),\n onCheckedChange,\n }: NgpSwitchProps): NgpSwitchState => {\n const element = injectElementRef<HTMLElement>();\n const isButton = element.nativeElement.tagName.toLowerCase() === 'button';\n const checked = controlled(_checked);\n const disabledInput = controlled(_disabled);\n\n // Form control and interactions\n const status = ngpFormControl({ id, disabled: disabledInput });\n const disabled = computed(() => status().disabled ?? disabledInput());\n ngpInteractions({ hover: true, press: true, focusVisible: true, disabled });\n\n const checkedChange = emitter<boolean>();\n const tabindex = computed(() => (disabled() ? -1 : 0));\n\n // Host bindings\n attrBinding(element, 'role', 'switch');\n attrBinding(element, 'id', id);\n attrBinding(element, 'type', () => (isButton ? 'button' : null));\n attrBinding(element, 'aria-checked', checked);\n dataBinding(element, 'data-checked', checked);\n attrBinding(element, 'aria-disabled', disabled);\n dataBinding(element, 'data-disabled', disabled);\n attrBinding(element, 'disabled', () => (isButton && disabled() ? '' : null));\n attrBinding(element, 'tabindex', tabindex);\n\n // Listeners\n listener(element, 'click', event => toggle(event));\n listener(element, 'keydown', (event: KeyboardEvent) => {\n if (event.key === ' ' || event.key === 'Space') {\n event.preventDefault();\n if (!isButton) {\n toggle(event);\n }\n }\n });\n\n function toggle(event?: Event): void {\n if (disabled()) {\n return;\n }\n\n event?.preventDefault?.();\n setChecked(!checked());\n }\n\n function setChecked(value: boolean): void {\n checked.set(value);\n onCheckedChange?.(value);\n checkedChange.emit(value);\n }\n\n function setDisabled(value: boolean): void {\n disabledInput.set(value);\n }\n\n return {\n id,\n checked: deprecatedSetter(checked, 'setChecked'),\n disabled: deprecatedSetter(disabledInput, 'setDisabled'),\n checkedChange: checkedChange.asObservable(),\n toggle,\n setChecked,\n setDisabled,\n } satisfies NgpSwitchState;\n },\n );\n","import { computed, Signal } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding } from 'ng-primitives/state';\nimport { injectSwitchState } from '../switch/switch-state';\n\n/**\n * Public state surface for the Switch Thumb primitive.\n */\nexport interface NgpSwitchThumbState {\n /**\n * Whether the switch is checked.\n */\n readonly checked: Signal<boolean>;\n /**\n * Whether the switch is disabled.\n */\n readonly disabled: Signal<boolean>;\n}\n\n/**\n * Inputs for configuring the Switch Thumb primitive.\n */\nexport interface NgpSwitchThumbProps {}\n\nexport const [\n NgpSwitchThumbStateToken,\n ngpSwitchThumb,\n injectSwitchThumbState,\n provideSwitchThumbState,\n] = createPrimitive('NgpSwitchThumb', ({}: NgpSwitchThumbProps): NgpSwitchThumbState => {\n const element = injectElementRef();\n const switchState = injectSwitchState();\n\n const checked = computed(() => switchState().checked());\n const disabled = computed(() => switchState().disabled());\n\n // Host bindings\n dataBinding(element, 'data-checked', checked);\n dataBinding(element, 'data-disabled', disabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled,\n });\n\n return { checked, disabled } satisfies NgpSwitchThumbState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpSwitchThumb, provideSwitchThumbState } from './switch-thumb-state';\n\n/**\n * Apply the `ngpSwitchThumb` directive to an element within a switch to represent the thumb.\n */\n@Directive({\n selector: '[ngpSwitchThumb]',\n providers: [provideSwitchThumbState({ inherit: false })],\n})\nexport class NgpSwitchThumb {\n constructor() {\n ngpSwitchThumb({});\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, output } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpSwitch, provideSwitchState } from './switch-state';\n\n/**\n * Apply the `ngpSwitch` directive to an element to manage the checked state.\n */\n@Directive({\n selector: '[ngpSwitch]',\n exportAs: 'ngpSwitch',\n providers: [provideSwitchState({ inherit: false })],\n})\nexport class NgpSwitch {\n /**\n * The id of the switch. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-switch'));\n\n /**\n * Determine if the switch is checked.\n * @default false\n */\n readonly checked = input<boolean, BooleanInput>(false, {\n alias: 'ngpSwitchChecked',\n transform: booleanAttribute,\n });\n\n /**\n * Emits when the checked state changes.\n */\n readonly checkedChange = output<boolean>({\n alias: 'ngpSwitchCheckedChange',\n });\n\n /**\n * Determine if the switch is disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpSwitchDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The switch state.\n * @internal\n */\n readonly state = ngpSwitch({\n id: this.id,\n checked: this.checked,\n disabled: this.disabled,\n onCheckedChange: value => this.checkedChange.emit(value),\n });\n\n /**\n * Toggle the checked state.\n */\n toggle(): void {\n this.state.toggle();\n }\n\n /**\n * Update the checked value.\n */\n setChecked(value: boolean): void {\n this.state.setChecked(value);\n }\n\n /**\n * Update the disabled value.\n */\n setDisabled(value: boolean): void {\n this.state.setDisabled(value);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-primitives-switch.mjs","sources":["../../../../packages/ng-primitives/switch/src/switch/switch-state.ts","../../../../packages/ng-primitives/switch/src/switch-thumb/switch-thumb-state.ts","../../../../packages/ng-primitives/switch/src/switch-thumb/switch-thumb.ts","../../../../packages/ng-primitives/switch/src/switch/switch.ts","../../../../packages/ng-primitives/switch/src/ng-primitives-switch.ts"],"sourcesContent":["import { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n listener,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the Switch primitive.\n */\nexport interface NgpSwitchState {\n /**\n * The id of the switch.\n */\n readonly id: Signal<string>;\n /**\n * Whether the switch is checked.\n */\n readonly checked: WritableSignal<boolean>;\n /**\n * Whether the switch is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * Emits when the checked state changes.\n */\n readonly checkedChange: Observable<boolean>;\n /**\n * Toggle the switch state.\n */\n toggle(event?: Event): void;\n /**\n * Update the checked value.\n */\n setChecked(value: boolean): void;\n /**\n * Update the disabled value.\n */\n setDisabled(value: boolean): void;\n}\n\n/**\n * Inputs for configuring the Switch primitive.\n */\nexport interface NgpSwitchProps {\n /**\n * The id of the switch.\n */\n readonly id?: Signal<string>;\n /**\n * Whether the switch is checked.\n */\n readonly checked?: Signal<boolean>;\n /**\n * Whether the switch is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the checked state changes.\n */\n readonly onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const [NgpSwitchStateToken, ngpSwitch, injectSwitchState, provideSwitchState] =\n createPrimitive(\n 'NgpSwitch',\n ({\n id = signal(uniqueId('ngp-switch')),\n checked: _checked = signal(false),\n disabled: _disabled = signal(false),\n onCheckedChange,\n }: NgpSwitchProps): NgpSwitchState => {\n const element = injectElementRef<HTMLElement>();\n const isButton = element.nativeElement.tagName.toLowerCase() === 'button';\n const checked = controlled(_checked);\n const disabledInput = controlled(_disabled);\n\n // Form control and interactions\n const status = ngpFormControl({ id, disabled: disabledInput });\n const disabled = computed(() => status().disabled ?? disabledInput());\n ngpInteractions({ hover: true, press: true, focusVisible: true, disabled });\n\n const checkedChange = emitter<boolean>();\n const tabindex = computed(() => (disabled() ? -1 : 0));\n\n // Host bindings\n attrBinding(element, 'role', 'switch');\n attrBinding(element, 'id', id);\n attrBinding(element, 'type', () => (isButton ? 'button' : null));\n attrBinding(element, 'aria-checked', checked);\n dataBinding(element, 'data-checked', checked);\n attrBinding(element, 'aria-disabled', disabled);\n dataBinding(element, 'data-disabled', disabled);\n attrBinding(element, 'disabled', () => (isButton && disabled() ? '' : null));\n attrBinding(element, 'tabindex', tabindex);\n\n // Listeners\n listener(element, 'click', event => toggle(event));\n listener(element, 'keydown', (event: KeyboardEvent) => {\n if (event.key === ' ' || event.key === 'Space') {\n event.preventDefault();\n if (!isButton) {\n toggle(event);\n }\n }\n });\n\n function toggle(event?: Event): void {\n if (disabled()) {\n return;\n }\n\n event?.preventDefault?.();\n setChecked(!checked());\n }\n\n function setChecked(value: boolean): void {\n checked.set(value);\n onCheckedChange?.(value);\n checkedChange.emit(value);\n }\n\n function setDisabled(value: boolean): void {\n disabledInput.set(value);\n }\n\n return {\n id,\n checked: deprecatedSetter(checked, 'setChecked'),\n disabled: deprecatedSetter(disabledInput, 'setDisabled'),\n checkedChange: checkedChange.asObservable(),\n toggle,\n setChecked,\n setDisabled,\n } satisfies NgpSwitchState;\n },\n );\n","import { computed, Signal } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding } from 'ng-primitives/state';\nimport { injectSwitchState } from '../switch/switch-state';\n\n/**\n * Public state surface for the Switch Thumb primitive.\n */\nexport interface NgpSwitchThumbState {\n /**\n * Whether the switch is checked.\n */\n readonly checked: Signal<boolean>;\n /**\n * Whether the switch is disabled.\n */\n readonly disabled: Signal<boolean>;\n}\n\n/**\n * Inputs for configuring the Switch Thumb primitive.\n */\nexport interface NgpSwitchThumbProps {}\n\nexport const [\n NgpSwitchThumbStateToken,\n ngpSwitchThumb,\n injectSwitchThumbState,\n provideSwitchThumbState,\n] = createPrimitive('NgpSwitchThumb', ({}: NgpSwitchThumbProps): NgpSwitchThumbState => {\n const element = injectElementRef();\n const switchState = injectSwitchState();\n\n const checked = computed(() => switchState().checked());\n const disabled = computed(() => switchState().disabled());\n\n // Host bindings\n dataBinding(element, 'data-checked', checked);\n dataBinding(element, 'data-disabled', disabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled,\n });\n\n return { checked, disabled } satisfies NgpSwitchThumbState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpSwitchThumb, provideSwitchThumbState } from './switch-thumb-state';\n\n/**\n * Apply the `ngpSwitchThumb` directive to an element within a switch to represent the thumb.\n */\n@Directive({\n selector: '[ngpSwitchThumb]',\n providers: [provideSwitchThumbState({ inherit: false })],\n})\nexport class NgpSwitchThumb {\n constructor() {\n ngpSwitchThumb({});\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, output } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpSwitch, provideSwitchState } from './switch-state';\n\n/**\n * Apply the `ngpSwitch` directive to an element to manage the checked state.\n */\n@Directive({\n selector: '[ngpSwitch]',\n exportAs: 'ngpSwitch',\n providers: [provideSwitchState({ inherit: false })],\n})\nexport class NgpSwitch {\n /**\n * The id of the switch. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-switch'));\n\n /**\n * Determine if the switch is checked.\n * @default false\n */\n readonly checked = input<boolean, BooleanInput>(false, {\n alias: 'ngpSwitchChecked',\n transform: booleanAttribute,\n });\n\n /**\n * Emits when the checked state changes.\n */\n readonly checkedChange = output<boolean>({\n alias: 'ngpSwitchCheckedChange',\n });\n\n /**\n * Determine if the switch is disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpSwitchDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The switch state.\n * @internal\n */\n readonly state = ngpSwitch({\n id: this.id,\n checked: this.checked,\n disabled: this.disabled,\n onCheckedChange: value => this.checkedChange.emit(value),\n });\n\n /**\n * Toggle the checked state.\n */\n toggle(): void {\n this.state.toggle();\n }\n\n /**\n * Update the checked value.\n */\n setChecked(value: boolean): void {\n this.state.setChecked(value);\n }\n\n /**\n * Update the disabled value.\n */\n setDisabled(value: boolean): void {\n this.state.setDisabled(value);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ function injectTabsConfig() {
35
35
 
36
36
  const [NgpTabsetStateToken, ngpTabset, injectTabsetState, provideTabsetState] = createPrimitive('NgpTabset', ({ id = signal(uniqueId('ngp-tabset')), value: _value = signal(undefined), orientation: _orientation = signal('horizontal'), activateOnFocus: _activateOnFocus = signal(false), onValueChange, }) => {
37
37
  const element = injectElementRef();
38
- const tabs = signal([], ...(ngDevMode ? [{ debugName: "tabs" }] : []));
38
+ const tabs = signal([], ...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
39
39
  // Controlled properties
40
40
  const value = controlled(_value);
41
41
  const orientation = controlled(_orientation);
@@ -57,7 +57,7 @@ const [NgpTabsetStateToken, ngpTabset, injectTabsetState, provideTabsetState] =
57
57
  }
58
58
  // otherwise return the first non-disabled tab's value
59
59
  return tabList.find(tab => !tab.disabled())?.value();
60
- }, ...(ngDevMode ? [{ debugName: "selectedTab" }] : []));
60
+ }, ...(ngDevMode ? [{ debugName: "selectedTab" }] : /* istanbul ignore next */ []));
61
61
  function select(newValue) {
62
62
  // if the value is already selected, do nothing
63
63
  if (value() === newValue) {
@@ -97,9 +97,9 @@ const [NgpTabButtonStateToken, ngpTabButton, injectTabButtonState, provideTabBut
97
97
  const tagName = inject(HOST_TAG_NAME);
98
98
  const tabset = injectTabsetState();
99
99
  // Computed properties
100
- const buttonId = computed(() => id?.() ?? `${tabset().id()}-button-${value()}`, ...(ngDevMode ? [{ debugName: "buttonId" }] : []));
101
- const ariaControls = computed(() => `${tabset().id()}-panel-${value()}`, ...(ngDevMode ? [{ debugName: "ariaControls" }] : []));
102
- const active = computed(() => tabset().selectedTab() === value(), ...(ngDevMode ? [{ debugName: "active" }] : []));
100
+ const buttonId = computed(() => id?.() ?? `${tabset().id()}-button-${value()}`, ...(ngDevMode ? [{ debugName: "buttonId" }] : /* istanbul ignore next */ []));
101
+ const ariaControls = computed(() => `${tabset().id()}-panel-${value()}`, ...(ngDevMode ? [{ debugName: "ariaControls" }] : /* istanbul ignore next */ []));
102
+ const active = computed(() => tabset().selectedTab() === value(), ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
103
103
  // Host bindings
104
104
  attrBinding(element, 'role', 'tab');
105
105
  attrBinding(element, 'id', buttonId);
@@ -157,21 +157,18 @@ class NgpTabButton {
157
157
  * The value of the tab this trigger controls
158
158
  * @required
159
159
  */
160
- this.value = input(undefined, ...(ngDevMode ? [{ debugName: "value", alias: 'ngpTabButtonValue' }] : [{ alias: 'ngpTabButtonValue' }]));
160
+ this.value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), alias: 'ngpTabButtonValue' });
161
161
  /**
162
162
  * Whether the tab is disabled
163
163
  * @default false
164
164
  */
165
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", alias: 'ngpTabButtonDisabled',
166
- transform: booleanAttribute }] : [{
167
- alias: 'ngpTabButtonDisabled',
168
- transform: booleanAttribute,
169
- }]));
165
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), alias: 'ngpTabButtonDisabled',
166
+ transform: booleanAttribute });
170
167
  /**
171
168
  * Determine the id of the tab button
172
169
  * @internal
173
170
  */
174
- this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : []));
171
+ this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
175
172
  this.state = ngpTabButton({
176
173
  value: this.value,
177
174
  disabled: this.disabled,
@@ -189,10 +186,10 @@ class NgpTabButton {
189
186
  select() {
190
187
  this.state.select();
191
188
  }
192
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTabButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
193
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpTabButton, isStandalone: true, selector: "[ngpTabButton]", inputs: { value: { classPropertyName: "value", publicName: "ngpTabButtonValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpTabButtonDisabled", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTabButtonState(), provideRovingFocusItemState()], exportAs: ["ngpTabButton"], ngImport: i0 }); }
189
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTabButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
190
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpTabButton, isStandalone: true, selector: "[ngpTabButton]", inputs: { value: { classPropertyName: "value", publicName: "ngpTabButtonValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpTabButtonDisabled", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTabButtonState(), provideRovingFocusItemState()], exportAs: ["ngpTabButton"], ngImport: i0 }); }
194
191
  }
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTabButton, decorators: [{
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTabButton, decorators: [{
196
193
  type: Directive,
197
194
  args: [{
198
195
  selector: '[ngpTabButton]',
@@ -218,10 +215,10 @@ class NgpTabList {
218
215
  constructor() {
219
216
  ngpTabList({});
220
217
  }
221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTabList, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
222
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpTabList, isStandalone: true, selector: "[ngpTabList]", providers: [provideTabListState()], exportAs: ["ngpTabList"], ngImport: i0 }); }
218
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTabList, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
219
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpTabList, isStandalone: true, selector: "[ngpTabList]", providers: [provideTabListState()], exportAs: ["ngpTabList"], ngImport: i0 }); }
223
220
  }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTabList, decorators: [{
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTabList, decorators: [{
225
222
  type: Directive,
226
223
  args: [{
227
224
  selector: '[ngpTabList]',
@@ -234,9 +231,9 @@ const [NgpTabPanelStateToken, ngpTabPanel, injectTabPanelState, provideTabPanelS
234
231
  const element = injectElementRef();
235
232
  const tabset = injectTabsetState();
236
233
  // Computed properties
237
- const panelId = computed(() => id?.() ?? `${tabset().id()}-panel-${value?.()}`, ...(ngDevMode ? [{ debugName: "panelId" }] : []));
238
- const labelledBy = computed(() => `${tabset().id()}-button-${value?.()}`, ...(ngDevMode ? [{ debugName: "labelledBy" }] : []));
239
- const active = computed(() => tabset().selectedTab() === value?.(), ...(ngDevMode ? [{ debugName: "active" }] : []));
234
+ const panelId = computed(() => id?.() ?? `${tabset().id()}-panel-${value?.()}`, ...(ngDevMode ? [{ debugName: "panelId" }] : /* istanbul ignore next */ []));
235
+ const labelledBy = computed(() => `${tabset().id()}-button-${value?.()}`, ...(ngDevMode ? [{ debugName: "labelledBy" }] : /* istanbul ignore next */ []));
236
+ const active = computed(() => tabset().selectedTab() === value?.(), ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
240
237
  // Host bindings
241
238
  attrBinding(element, 'role', 'tabpanel');
242
239
  attrBinding(element, 'tabindex', () => (active() ? '0' : null));
@@ -267,12 +264,12 @@ class NgpTabPanel {
267
264
  * The value of the tab
268
265
  * @required
269
266
  */
270
- this.value = input(undefined, ...(ngDevMode ? [{ debugName: "value", alias: 'ngpTabPanelValue' }] : [{ alias: 'ngpTabPanelValue' }]));
267
+ this.value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), alias: 'ngpTabPanelValue' });
271
268
  /**
272
269
  * Determine the id of the tab panel
273
270
  * @internal
274
271
  */
275
- this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : []));
272
+ this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
276
273
  this.state = ngpTabPanel({
277
274
  value: this.value,
278
275
  id: this.id,
@@ -282,10 +279,10 @@ class NgpTabPanel {
282
279
  */
283
280
  this.active = this.state.active;
284
281
  }
285
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTabPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
286
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpTabPanel, isStandalone: true, selector: "[ngpTabPanel]", inputs: { value: { classPropertyName: "value", publicName: "ngpTabPanelValue", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTabPanelState()], exportAs: ["ngpTabPanel"], ngImport: i0 }); }
282
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTabPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
283
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpTabPanel, isStandalone: true, selector: "[ngpTabPanel]", inputs: { value: { classPropertyName: "value", publicName: "ngpTabPanelValue", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTabPanelState()], exportAs: ["ngpTabPanel"], ngImport: i0 }); }
287
284
  }
288
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTabPanel, decorators: [{
285
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTabPanel, decorators: [{
289
286
  type: Directive,
290
287
  args: [{
291
288
  selector: '[ngpTabPanel]',
@@ -306,13 +303,11 @@ class NgpTabset {
306
303
  /**
307
304
  * Define the id for the tabset
308
305
  */
309
- this.id = input(uniqueId('ngp-tabset'), ...(ngDevMode ? [{ debugName: "id" }] : []));
306
+ this.id = input(uniqueId('ngp-tabset'), ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
310
307
  /**
311
308
  * Define the active tab
312
309
  */
313
- this.value = input(undefined, ...(ngDevMode ? [{ debugName: "value", alias: 'ngpTabsetValue' }] : [{
314
- alias: 'ngpTabsetValue',
315
- }]));
310
+ this.value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), alias: 'ngpTabsetValue' });
316
311
  /**
317
312
  * Emit the value of the selected tab when it changes
318
313
  */
@@ -323,17 +318,12 @@ class NgpTabset {
323
318
  * The orientation of the tabset
324
319
  * @default 'horizontal'
325
320
  */
326
- this.orientation = input(this.config.orientation, ...(ngDevMode ? [{ debugName: "orientation", alias: 'ngpTabsetOrientation' }] : [{
327
- alias: 'ngpTabsetOrientation',
328
- }]));
321
+ this.orientation = input(this.config.orientation, { ...(ngDevMode ? { debugName: "orientation" } : /* istanbul ignore next */ {}), alias: 'ngpTabsetOrientation' });
329
322
  /**
330
323
  * Whether tabs should activate on focus
331
324
  */
332
- this.activateOnFocus = input(this.config.activateOnFocus, ...(ngDevMode ? [{ debugName: "activateOnFocus", alias: 'ngpTabsetActivateOnFocus',
333
- transform: booleanAttribute }] : [{
334
- alias: 'ngpTabsetActivateOnFocus',
335
- transform: booleanAttribute,
336
- }]));
325
+ this.activateOnFocus = input(this.config.activateOnFocus, { ...(ngDevMode ? { debugName: "activateOnFocus" } : /* istanbul ignore next */ {}), alias: 'ngpTabsetActivateOnFocus',
326
+ transform: booleanAttribute });
337
327
  this.state = ngpTabset({
338
328
  id: this.id,
339
329
  value: this.value,
@@ -366,13 +356,13 @@ class NgpTabset {
366
356
  setOrientation(orientation) {
367
357
  this.state.setOrientation(orientation);
368
358
  }
369
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTabset, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
370
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpTabset, isStandalone: true, selector: "[ngpTabset]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "ngpTabsetValue", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "ngpTabsetOrientation", isSignal: true, isRequired: false, transformFunction: null }, activateOnFocus: { classPropertyName: "activateOnFocus", publicName: "ngpTabsetActivateOnFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "ngpTabsetValueChange" }, providers: [
359
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTabset, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
360
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpTabset, isStandalone: true, selector: "[ngpTabset]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "ngpTabsetValue", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "ngpTabsetOrientation", isSignal: true, isRequired: false, transformFunction: null }, activateOnFocus: { classPropertyName: "activateOnFocus", publicName: "ngpTabsetActivateOnFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "ngpTabsetValueChange" }, providers: [
371
361
  provideTabsetState({ inherit: false }),
372
362
  provideRovingFocusGroupState({ inherit: false }),
373
363
  ], exportAs: ["ngpTabset"], ngImport: i0 }); }
374
364
  }
375
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpTabset, decorators: [{
365
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpTabset, decorators: [{
376
366
  type: Directive,
377
367
  args: [{
378
368
  selector: '[ngpTabset]',