ng-primitives 0.90.0 → 0.91.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 (93) hide show
  1. package/a11y/index.d.ts +38 -46
  2. package/accordion/index.d.ts +252 -104
  3. package/ai/index.d.ts +1 -1
  4. package/autofill/index.d.ts +49 -9
  5. package/avatar/index.d.ts +96 -61
  6. package/breadcrumbs/index.d.ts +156 -16
  7. package/button/index.d.ts +23 -28
  8. package/checkbox/index.d.ts +93 -14
  9. package/combobox/index.d.ts +1 -1
  10. package/date-picker/index.d.ts +12 -11
  11. package/fesm2022/ng-primitives-a11y.mjs +36 -52
  12. package/fesm2022/ng-primitives-a11y.mjs.map +1 -1
  13. package/fesm2022/ng-primitives-accordion.mjs +210 -189
  14. package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
  15. package/fesm2022/ng-primitives-ai.mjs +4 -4
  16. package/fesm2022/ng-primitives-ai.mjs.map +1 -1
  17. package/fesm2022/ng-primitives-autofill.mjs +53 -36
  18. package/fesm2022/ng-primitives-autofill.mjs.map +1 -1
  19. package/fesm2022/ng-primitives-avatar.mjs +97 -138
  20. package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
  21. package/fesm2022/ng-primitives-breadcrumbs.mjs +92 -35
  22. package/fesm2022/ng-primitives-breadcrumbs.mjs.map +1 -1
  23. package/fesm2022/ng-primitives-button.mjs +14 -36
  24. package/fesm2022/ng-primitives-button.mjs.map +1 -1
  25. package/fesm2022/ng-primitives-checkbox.mjs +87 -65
  26. package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
  27. package/fesm2022/ng-primitives-combobox.mjs +9 -9
  28. package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
  29. package/fesm2022/ng-primitives-date-picker.mjs +5 -4
  30. package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
  31. package/fesm2022/ng-primitives-form-field.mjs +48 -16
  32. package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
  33. package/fesm2022/ng-primitives-input.mjs +32 -48
  34. package/fesm2022/ng-primitives-input.mjs.map +1 -1
  35. package/fesm2022/ng-primitives-interactions.mjs +4 -4
  36. package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
  37. package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
  38. package/fesm2022/ng-primitives-menu.mjs +13 -6
  39. package/fesm2022/ng-primitives-menu.mjs.map +1 -1
  40. package/fesm2022/ng-primitives-pagination.mjs +6 -6
  41. package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
  42. package/fesm2022/ng-primitives-progress.mjs +2 -2
  43. package/fesm2022/ng-primitives-progress.mjs.map +1 -1
  44. package/fesm2022/ng-primitives-radio.mjs +3 -3
  45. package/fesm2022/ng-primitives-radio.mjs.map +1 -1
  46. package/fesm2022/ng-primitives-roving-focus.mjs +259 -236
  47. package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
  48. package/fesm2022/ng-primitives-search.mjs.map +1 -1
  49. package/fesm2022/ng-primitives-select.mjs +8 -8
  50. package/fesm2022/ng-primitives-select.mjs.map +1 -1
  51. package/fesm2022/ng-primitives-slider.mjs +195 -172
  52. package/fesm2022/ng-primitives-slider.mjs.map +1 -1
  53. package/fesm2022/ng-primitives-state.mjs +172 -2
  54. package/fesm2022/ng-primitives-state.mjs.map +1 -1
  55. package/fesm2022/ng-primitives-switch.mjs +90 -88
  56. package/fesm2022/ng-primitives-switch.mjs.map +1 -1
  57. package/fesm2022/ng-primitives-tabs.mjs +4 -1
  58. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  59. package/fesm2022/ng-primitives-textarea.mjs +27 -35
  60. package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
  61. package/fesm2022/ng-primitives-toggle-group.mjs +134 -136
  62. package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
  63. package/fesm2022/ng-primitives-toggle.mjs +69 -58
  64. package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
  65. package/fesm2022/ng-primitives-toolbar.mjs +26 -35
  66. package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
  67. package/fesm2022/ng-primitives-utils.mjs +48 -35
  68. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  69. package/form-field/index.d.ts +7 -3
  70. package/input/index.d.ts +61 -24
  71. package/interactions/index.d.ts +5 -5
  72. package/listbox/index.d.ts +1 -1
  73. package/menu/index.d.ts +3 -2
  74. package/package.json +1 -1
  75. package/pagination/index.d.ts +7 -7
  76. package/roving-focus/index.d.ts +77 -101
  77. package/schematics/ng-add/schema.d.ts +0 -1
  78. package/schematics/ng-generate/templates/checkbox/checkbox.__fileSuffix@dasherize__.ts.template +2 -2
  79. package/schematics/ng-generate/templates/slider/slider.__fileSuffix@dasherize__.ts.template +6 -3
  80. package/schematics/ng-generate/templates/switch/switch.__fileSuffix@dasherize__.ts.template +2 -2
  81. package/schematics/ng-generate/templates/toggle/toggle.__fileSuffix@dasherize__.ts.template +2 -2
  82. package/schematics/ng-generate/templates/toggle-group/toggle-group.__fileSuffix@dasherize__.ts.template +2 -2
  83. package/schematics/ng-generate/templates/toolbar/toolbar.__fileSuffix@dasherize__.ts.template +1 -1
  84. package/search/index.d.ts +1 -1
  85. package/select/index.d.ts +2 -2
  86. package/slider/index.d.ts +195 -56
  87. package/state/index.d.ts +57 -3
  88. package/switch/index.d.ts +103 -28
  89. package/textarea/index.d.ts +63 -8
  90. package/toggle/index.d.ts +65 -24
  91. package/toggle-group/index.d.ts +79 -54
  92. package/toolbar/index.d.ts +27 -17
  93. package/utils/index.d.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-accordion.mjs","sources":["../../../../packages/ng-primitives/accordion/src/accordion-item/accordion-item-state.ts","../../../../packages/ng-primitives/accordion/src/accordion/accordion-state.ts","../../../../packages/ng-primitives/accordion/src/accordion-content/accordion-content.ts","../../../../packages/ng-primitives/accordion/src/accordion-item/accordion-item.ts","../../../../packages/ng-primitives/accordion/src/accordion-trigger/accordion-trigger.ts","../../../../packages/ng-primitives/accordion/src/config/accordion-config.ts","../../../../packages/ng-primitives/accordion/src/accordion/accordion.ts","../../../../packages/ng-primitives/accordion/src/ng-primitives-accordion.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpAccordionItem } from './accordion-item';\n\n/**\n * The state token for the AccordionItem primitive.\n */\nexport const NgpAccordionItemStateToken =\n createStateToken<NgpAccordionItem<unknown>>('AccordionItem');\n\n/**\n * Provides the AccordionItem state.\n */\nexport const provideAccordionItemState = createStateProvider(NgpAccordionItemStateToken);\n\n/**\n * Injects the AccordionItem state.\n */\nexport const injectAccordionItemState = createStateInjector<NgpAccordionItem<unknown>>(\n NgpAccordionItemStateToken,\n);\n\n/**\n * The AccordionItem state registration function.\n */\nexport const accordionItemState = createState(NgpAccordionItemStateToken);\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpAccordion } from './accordion';\n\n/**\n * The state token for the Accordion primitive.\n */\nexport const NgpAccordionStateToken = createStateToken<NgpAccordion<unknown>>('Accordion');\n\n/**\n * Provides the Accordion state.\n */\nexport const provideAccordionState = createStateProvider(NgpAccordionStateToken);\n\n/**\n * Injects the Accordion state.\n */\nexport const injectAccordionState =\n createStateInjector<NgpAccordion<unknown>>(NgpAccordionStateToken);\n\n/**\n * The Accordion state registration function.\n */\nexport const accordionState = createState(NgpAccordionStateToken);\n","import { afterRenderEffect, computed, Directive, input } from '@angular/core';\nimport { fromMutationObserver, injectDimensions, injectElementRef } from 'ng-primitives/internal';\nimport { safeTakeUntilDestroyed, uniqueId } from 'ng-primitives/utils';\nimport { debounceTime } from 'rxjs/operators';\nimport { injectAccordionItemState } from '../accordion-item/accordion-item-state';\nimport type { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\n/**\n * Apply the `ngpAccordionContent` directive to an element that represents the content of an accordion item.\n */\n@Directive({\n selector: '[ngpAccordionContent]',\n exportAs: 'ngpAccordionContent',\n host: {\n role: 'region',\n '[id]': 'id()',\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'accordionItem().open() ? \"\" : null',\n '[attr.data-closed]': 'accordionItem().open() ? null : \"\"',\n '[attr.aria-labelledby]': 'accordionItem().triggerId()',\n '(beforematch)': 'onBeforeMatch()',\n '[attr.hidden]': 'hidden()',\n },\n})\nexport class NgpAccordionContent<T> {\n /**\n * Access the accordion content element reference\n */\n private readonly elementRef = injectElementRef();\n\n /**\n * Access the accordion\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * Access the accordion item\n */\n protected readonly accordionItem = injectAccordionItemState();\n\n /**\n * The id of the content region\n */\n readonly id = input<string>(uniqueId('ngp-accordion-content'));\n\n /**\n * The dimensions of the content\n */\n private dimensions = injectDimensions();\n\n /**\n * The hidden until-found state of the content\n */\n protected readonly hidden = computed(() =>\n !this.accordionItem().open() && this.dimensions().height === 0 ? 'until-found' : null,\n );\n\n constructor() {\n this.accordionItem().content.set(this);\n\n // any time the open state of the accordion item changes, update the dimensions\n afterRenderEffect(() => this.updateDimensions());\n\n // update dimensions when the content changes\n fromMutationObserver(this.elementRef.nativeElement, {\n childList: true,\n subtree: true,\n disabled: computed(() => !this.accordionItem().open()),\n })\n .pipe(debounceTime(0), safeTakeUntilDestroyed())\n .subscribe(() => this.updateDimensions());\n }\n\n /**\n * Handle the beforematch event to automatically open the accordion item\n * when the browser's find-in-page functionality tries to reveal hidden content.\n */\n protected onBeforeMatch(): void {\n const isDisabled = this.accordion().disabled() || this.accordionItem().disabled();\n if (isDisabled) return;\n this.accordion().toggle(this.accordionItem().value() as T);\n }\n\n private updateDimensions(): void {\n if (this.accordionItem().open()) {\n // remove the inline styles to reset them\n this.elementRef.nativeElement.style.removeProperty('--ngp-accordion-content-width');\n this.elementRef.nativeElement.style.removeProperty('--ngp-accordion-content-height');\n // set the dimensions based on the content\n this.elementRef.nativeElement.style.setProperty(\n '--ngp-accordion-content-width',\n `${this.elementRef.nativeElement.scrollWidth}px`,\n );\n this.elementRef.nativeElement.style.setProperty(\n '--ngp-accordion-content-height',\n `${this.elementRef.nativeElement.scrollHeight}px`,\n );\n }\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, computed, input, signal } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { NgpAccordionContent } from '../accordion-content/accordion-content';\nimport { NgpAccordionTrigger } from '../accordion-trigger/accordion-trigger';\nimport { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\nimport { accordionItemState, provideAccordionItemState } from './accordion-item-state';\n\n/**\n * Apply the `ngpAccordionItem` directive to an element that represents an accordion item.\n */\n@Directive({\n selector: '[ngpAccordionItem]',\n exportAs: 'ngpAccordionItem',\n providers: [provideAccordionItemState()],\n host: {\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'state.open() ? \"\" : null',\n '[attr.data-disabled]': 'state.disabled() || accordion().disabled() ? \"\" : null',\n },\n})\nexport class NgpAccordionItem<T> {\n /**\n * Access the accordion.\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * The value of the accordion item.\n */\n readonly value = input<T>(uniqueId('ngp-accordion-item') as T, {\n alias: 'ngpAccordionItemValue',\n });\n\n /**\n * Whether the accordion item is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpAccordionItemDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Access the accordion trigger\n * @internal\n */\n readonly trigger = signal<NgpAccordionTrigger<T> | undefined>(undefined);\n\n /**\n * Access the accordion content\n * @internal\n */\n readonly content = signal<NgpAccordionContent<T> | undefined>(undefined);\n\n /**\n * Whether the accordion item is expanded.\n */\n readonly open = computed<boolean>(() => this.accordion().isOpen(this.state.value()!));\n\n /**\n * The trigger id.\n */\n readonly triggerId = computed(() => this.trigger()?.id());\n\n /**\n * The content id.\n */\n readonly contentId = computed(() => this.content()?.id());\n\n /**\n * The accordion item state.\n */\n private readonly state = accordionItemState<NgpAccordionItem<T>>(this);\n}\n","import { Directive, HOST_TAG_NAME, HostListener, inject, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { NgpAccordionItem } from '../accordion-item/accordion-item';\nimport { injectAccordionItemState } from '../accordion-item/accordion-item-state';\nimport { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\n/**\n * Apply the `ngpAccordionTrigger` directive to an element that represents the trigger for an accordion item, such as a button.\n */\n@Directive({\n selector: '[ngpAccordionTrigger]',\n exportAs: 'ngpAccordionTrigger',\n host: {\n '[id]': 'id()',\n '[attr.type]': 'tagName === \"button\" ? \"button\" : null',\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'accordionItem().open() ? \"\" : null',\n '[attr.data-disabled]': 'accordionItem().disabled() || accordion().disabled() ? \"\" : null',\n '[attr.aria-controls]': 'accordionItem().contentId()',\n '[attr.aria-expanded]': 'accordionItem().open()',\n },\n})\nexport class NgpAccordionTrigger<T> {\n /**\n * The tag name of the element.\n */\n protected readonly tagName = inject(HOST_TAG_NAME);\n\n /**\n * Access the parent accordion.\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * The item instance.\n */\n protected readonly accordionItem = injectAccordionItemState<NgpAccordionItem<T>>();\n\n /**\n * The id of the trigger.\n */\n readonly id = input<string>(uniqueId('ngp-accordion-trigger'));\n\n constructor() {\n this.accordionItem().trigger.set(this);\n }\n\n /**\n * Toggle the accordion item.\n */\n @HostListener('click')\n toggle(): void {\n if (this.accordionItem().disabled() || this.accordion().disabled()) {\n return;\n }\n\n this.accordion().toggle(this.accordionItem().value()!);\n }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpAccordionType } from '../accordion/accordion';\n\nexport interface NgpAccordionConfig {\n /**\n * The default type of the accordion\n * @default 'single'\n */\n type: NgpAccordionType;\n /**\n * Whether the accordion is collapsible\n * @default false\n */\n collapsible: boolean;\n /**\n * The default orientation of the accordion\n * @default 'vertical'\n */\n orientation: 'vertical' | 'horizontal';\n}\n\nexport const defaultAccordionConfig: NgpAccordionConfig = {\n type: 'single',\n collapsible: false,\n orientation: 'vertical',\n};\n\nexport const NgpAccordionConfigToken = new InjectionToken<NgpAccordionConfig>(\n 'NgpAccordionConfigToken',\n);\n\n/**\n * Provide the default Accordion configuration\n * @param config The Accordion configuration\n * @returns The provider\n */\nexport function provideAccordionConfig(config: Partial<NgpAccordionConfig>): Provider[] {\n return [\n {\n provide: NgpAccordionConfigToken,\n useValue: { ...defaultAccordionConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Accordion configuration\n * @returns The global Accordion configuration\n */\nexport function injectAccordionConfig(): NgpAccordionConfig {\n return inject(NgpAccordionConfigToken, { optional: true }) ?? defaultAccordionConfig;\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, output } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { injectAccordionConfig } from '../config/accordion-config';\nimport { accordionState, provideAccordionState } from './accordion-state';\n\n/**\n * Apply the `ngpAccordion` directive to an element that represents the group of accordion items.\n */\n@Directive({\n selector: '[ngpAccordion]',\n exportAs: 'ngpAccordion',\n providers: [provideAccordionState()],\n host: {\n '[attr.data-orientation]': 'state.orientation()',\n '[attr.data-disabled]': 'state.disabled() ? \"\" : null',\n },\n})\nexport class NgpAccordion<T> {\n /**\n * Access the global accordion configuration.\n */\n private readonly config = injectAccordionConfig();\n\n /**\n * The type of the accordion.\n */\n readonly type = input<NgpAccordionType>(this.config.type, {\n alias: 'ngpAccordionType',\n });\n\n /**\n * Whether the accordion is collapsible.\n */\n readonly collapsible = input<boolean, BooleanInput>(this.config.collapsible, {\n alias: 'ngpAccordionCollapsible',\n transform: booleanAttribute,\n });\n\n /**\n * The value of the accordion.\n */\n readonly value = input<T | T[] | null>(null, {\n alias: 'ngpAccordionValue',\n });\n\n /**\n * Event emitted when the accordion value changes.\n */\n readonly valueChange = output<T | T[] | null>({\n alias: 'ngpAccordionValueChange',\n });\n\n /**\n * Whether the accordion is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpAccordionDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The accordion orientation.\n */\n readonly orientation = input<NgpOrientation>(this.config.orientation, {\n alias: 'ngpAccordionOrientation',\n });\n\n /**\n * The accordion state.\n */\n private readonly state = accordionState<NgpAccordion<T>>(this);\n\n /**\n * @param value The value to check.\n * @returns Whether the value is open.\n * @internal\n */\n isOpen(value: T): boolean {\n if (this.state.type() === 'multiple') {\n return (this.state.value() as T[] | null)?.includes(value) ?? false;\n }\n\n return this.state.value() === value;\n }\n\n toggle(value: T): void {\n const isOpen = this.isOpen(value);\n\n // if we are in single mode and the value is already open and the accordion is not collapsible, do nothing\n if (this.state.type() === 'single' && isOpen && !this.state.collapsible()) {\n return;\n }\n\n // if we are in single mode then toggle the value\n if (this.state.type() === 'single') {\n const newValue = isOpen ? null : value;\n this.state.value.set(newValue);\n this.valueChange.emit(newValue);\n return;\n }\n\n // if we are in multiple mode then toggle the value\n let values = (this.state.value() as T[]) ?? [];\n\n if (isOpen) {\n values = values.filter(v => v !== value);\n } else {\n values = [...values, value];\n }\n this.state.value.set(values);\n this.valueChange.emit(values);\n }\n}\n\nexport type NgpAccordionType = 'single' | 'multiple';\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-accordion.mjs","sources":["../../../../packages/ng-primitives/accordion/src/accordion/accordion-state.ts","../../../../packages/ng-primitives/accordion/src/accordion-item/accordion-item-state.ts","../../../../packages/ng-primitives/accordion/src/accordion-content/accordion-content-state.ts","../../../../packages/ng-primitives/accordion/src/accordion-content/accordion-content.ts","../../../../packages/ng-primitives/accordion/src/accordion-item/accordion-item.ts","../../../../packages/ng-primitives/accordion/src/accordion-trigger/accordion-trigger-state.ts","../../../../packages/ng-primitives/accordion/src/accordion-trigger/accordion-trigger.ts","../../../../packages/ng-primitives/accordion/src/config/accordion-config.ts","../../../../packages/ng-primitives/accordion/src/accordion/accordion.ts","../../../../packages/ng-primitives/accordion/src/ng-primitives-accordion.ts"],"sourcesContent":["import { signal, Signal, WritableSignal } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, controlled, createPrimitive, deprecatedSetter } from 'ng-primitives/state';\n\n/**\n * The state interface for the Accordion pattern.\n */\nexport interface NgpAccordionState<T> {\n /**\n * The value of the accordion.\n */\n readonly value: WritableSignal<T | T[] | null>;\n /**\n * Whether the accordion is disabled.\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * The accordion orientation.\n */\n readonly orientation: WritableSignal<NgpOrientation>;\n /**\n * Set the value of the accordion.\n */\n setValue(value: T | T[] | null): void;\n /**\n * Set the disabled state of the accordion.\n */\n setDisabled(value: boolean): void;\n /**\n * Set the orientation of the accordion.\n */\n setOrientation(value: NgpOrientation): void;\n /**\n * Whether the specified value is open.\n */\n isOpen(value: T): boolean;\n /**\n * Toggle the specified value.\n */\n toggle(value: T): void;\n}\n\n/**\n * The props interface for the Accordion pattern.\n */\nexport interface NgpAccordionProps<T> {\n /**\n * The type of the accordion.\n */\n readonly type: Signal<NgpAccordionType>;\n\n /**\n * Whether the accordion is collapsible.\n */\n readonly collapsible: Signal<boolean>;\n\n /**\n * The value of the accordion.\n */\n readonly value: Signal<T | T[] | null>;\n\n /**\n * Whether the accordion is disabled.\n */\n readonly disabled?: Signal<boolean>;\n\n /**\n * The accordion orientation.\n */\n readonly orientation: Signal<NgpOrientation>;\n\n /**\n * Callback fired when valueChange is emitted.\n */\n readonly onValueChange?: (value: T | T[] | null) => void;\n}\n\nexport const [NgpAccordionStateToken, ngpAccordion, _injectAccordionState, provideAccordionState] =\n createPrimitive(\n 'NgpAccordion',\n <T>({\n type,\n collapsible,\n value: _value = signal(null),\n disabled: _disabled = signal(false),\n orientation: _orientation = signal('vertical'),\n onValueChange,\n }: NgpAccordionProps<T>): NgpAccordionState<T> => {\n const element = injectElementRef();\n\n // Create controlled signals\n const value = controlled(_value);\n const disabled = controlled(_disabled);\n const orientation = controlled(_orientation);\n\n // Host bindings extracted from directive\n attrBinding(element, 'data-orientation', orientation);\n attrBinding(element, 'data-disabled', disabled);\n\n // Setter methods\n function setDisabled(value: boolean): void {\n disabled.set(value);\n }\n\n function setOrientation(value: NgpOrientation): void {\n orientation.set(value);\n }\n\n function setValue(newValue: T | T[] | null): void {\n value.set(newValue);\n }\n\n // Methods extracted from directive\n /**\n * @param value The value to check. @returns Whether the value is open. @internal\n */\n function isOpen(itemValue: T): boolean {\n if (type() === 'multiple') {\n return (value() as T[] | null)?.includes(itemValue) ?? false;\n }\n\n return value() === itemValue;\n }\n\n function toggle(itemValue: T): void {\n const open = isOpen(itemValue);\n\n // if we are in single mode and the itemValue is already open and the accordion is not collapsible, do nothing\n if (type() === 'single' && open && !collapsible()) {\n return;\n }\n\n // if we are in single mode then toggle the itemValue\n if (type() === 'single') {\n const newValue = open ? null : itemValue;\n value.set(newValue);\n onValueChange?.(newValue);\n return;\n }\n\n // if we are in multiple mode then toggle the itemValue\n let values = (value() as T[]) ?? [];\n\n if (open) {\n values = values.filter(v => v !== itemValue);\n } else {\n values = [...values, itemValue];\n }\n value.set(values);\n onValueChange?.(values);\n }\n\n return {\n value: deprecatedSetter(value, 'setValue'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n orientation: deprecatedSetter(orientation, 'setOrientation'),\n setDisabled,\n setOrientation,\n setValue,\n isOpen,\n toggle,\n };\n },\n );\n\nexport type NgpAccordionType = 'single' | 'multiple';\n\nexport function injectAccordionState<T>(): Signal<NgpAccordionState<T>> {\n return _injectAccordionState() as Signal<NgpAccordionState<T>>;\n}\n","import { computed, Signal, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { controlled, createPrimitive, dataBinding, deprecatedSetter } from 'ng-primitives/state';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\nexport interface NgpAccordionItemState<T> {\n /**\n * The value of the accordion item.\n */\n readonly value: Signal<T>;\n /**\n * Whether the accordion item is disabled.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Whether the accordion item is expanded.\n */\n readonly open: Signal<boolean>;\n /**\n * The trigger id.\n */\n readonly triggerId: Signal<string | undefined>;\n /**\n * The content id.\n */\n readonly contentId: Signal<string | undefined>;\n /**\n * Set the disabled state of the accordion item.\n */\n setDisabled(value: boolean): void;\n /**\n * Set the trigger of the accordion item.\n */\n setTrigger(id: string): void;\n /**\n * Set the content of the accordion item.\n */\n setContent(id: string): void;\n}\n\nexport interface NgpAccordionItemProps<T> {\n /**\n * The value of the accordion item.\n */\n readonly value: Signal<T>;\n /**\n * Whether the accordion item is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpAccordionItemStateToken,\n ngpAccordionItem,\n _injectAccordionItemState,\n provideAccordionItemState,\n] = createPrimitive(\n 'NgpAccordionItem',\n <T>({ value, disabled: _disabled = signal(false) }: NgpAccordionItemProps<T>) => {\n const accordion = injectAccordionState<T>();\n const element = injectElementRef();\n\n const disabled = controlled(_disabled);\n\n // Whether the accordion item is expanded.\n const open = computed<boolean>(() => accordion().isOpen(value()));\n\n const trigger = signal<string | undefined>(undefined);\n const content = signal<string | undefined>(undefined);\n\n // Setup host data bindings\n dataBinding(element, 'data-orientation', accordion().orientation);\n dataBinding(element, 'data-open', open);\n dataBinding(element, 'data-disabled', () => disabled() || accordion().disabled());\n\n // Set the disabled state of the accordion item.\n function setDisabled(value: boolean) {\n disabled.set(value);\n }\n\n function setTrigger(id: string) {\n trigger.set(id);\n }\n\n function setContent(id: string) {\n content.set(id);\n }\n\n return {\n value,\n open,\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n triggerId: deprecatedSetter(trigger, 'setTrigger'),\n contentId: deprecatedSetter(content, 'setContent'),\n setDisabled,\n setTrigger,\n setContent,\n };\n },\n);\n\nexport function injectAccordionItemState<T>(): Signal<NgpAccordionItemState<T>> {\n return _injectAccordionItemState() as Signal<NgpAccordionItemState<T>>;\n}\n","import { afterRenderEffect, computed, signal, Signal } from '@angular/core';\nimport { fromMutationObserver, injectDimensions, injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { safeTakeUntilDestroyed, uniqueId } from 'ng-primitives/utils';\nimport { debounceTime } from 'rxjs/operators';\nimport { injectAccordionItemState } from '../accordion-item/accordion-item-state';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\nexport interface NgpAccordionContentState {\n /**\n * The id of the content region\n */\n readonly id: Signal<string>;\n}\n\nexport interface NgpAccordionContentProps {\n /**\n * The id of the content region\n */\n readonly id?: Signal<string>;\n}\n\nexport const [\n NgpAccordionContentStateToken,\n ngpAccordionContent,\n injectAccordionContentState,\n provideAccordionContentState,\n] = createPrimitive(\n 'NgpAccordionContent',\n <T>({ id = signal(uniqueId('ngp-accordion-content')) }: NgpAccordionContentProps) => {\n const element = injectElementRef();\n const accordion = injectAccordionState<T>();\n const accordionItem = injectAccordionItemState<T>();\n const dimensions = injectDimensions();\n\n const hidden = computed(() =>\n !accordionItem().open() && dimensions().height === 0 ? 'until-found' : null,\n );\n\n // Host bindings\n attrBinding(element, 'role', 'region');\n attrBinding(element, 'id', id);\n attrBinding(element, 'aria-labelledby', accordionItem().triggerId);\n attrBinding(element, 'hidden', hidden);\n\n dataBinding(element, 'data-orientation', accordion().orientation);\n dataBinding(element, 'data-open', accordionItem().open);\n dataBinding(element, 'data-closed', () => !accordionItem().open());\n\n listener(element, 'beforematch', onBeforeMatch);\n\n // Register the content with the accordion item state\n accordionItem().setContent(id());\n\n /**\n * Handle the beforematch event to automatically open the accordion item\n * when the browser's find-in-page functionality tries to reveal hidden content.\n */\n function onBeforeMatch(): void {\n const isDisabled = accordion().disabled() || accordionItem().disabled();\n if (isDisabled) {\n return;\n }\n accordion().toggle(accordionItem().value() as T);\n }\n\n function updateDimensions(): void {\n if (accordionItem().open()) {\n // remove the inline styles to reset them\n element.nativeElement.style.removeProperty('--ngp-accordion-content-width');\n element.nativeElement.style.removeProperty('--ngp-accordion-content-height');\n // set the dimensions based on the content\n element.nativeElement.style.setProperty(\n '--ngp-accordion-content-width',\n `${element.nativeElement.scrollWidth}px`,\n );\n element.nativeElement.style.setProperty(\n '--ngp-accordion-content-height',\n `${element.nativeElement.scrollHeight}px`,\n );\n }\n }\n\n // any time the open state of the accordion item changes, update the dimensions\n afterRenderEffect(() => updateDimensions());\n\n // update dimensions when the content changes\n fromMutationObserver(element.nativeElement, {\n childList: true,\n subtree: true,\n disabled: computed(() => !accordionItem().open()),\n })\n .pipe(debounceTime(0), safeTakeUntilDestroyed())\n .subscribe(() => updateDimensions());\n\n return {};\n },\n);\n","import { Directive, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpAccordionContent } from './accordion-content-state';\n\n/**\n * Apply the `ngpAccordionContent` directive to an element that represents the content of an accordion item.\n */\n@Directive({\n selector: '[ngpAccordionContent]',\n exportAs: 'ngpAccordionContent',\n})\nexport class NgpAccordionContent<T> {\n /**\n * The id of the content region\n */\n readonly id = input<string>(uniqueId('ngp-accordion-content'));\n\n constructor() {\n ngpAccordionContent<T>({ id: this.id });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectAccordionState } from '../accordion/accordion-state';\nimport { ngpAccordionItem, provideAccordionItemState } from './accordion-item-state';\n\n/**\n * Apply the `ngpAccordionItem` directive to an element that represents an accordion item.\n */\n@Directive({\n selector: '[ngpAccordionItem]',\n exportAs: 'ngpAccordionItem',\n providers: [provideAccordionItemState()],\n})\nexport class NgpAccordionItem<T> {\n /**\n * Access the accordion.\n */\n protected readonly accordion = injectAccordionState<T>();\n\n /**\n * The value of the accordion item.\n */\n readonly value = input<T>(uniqueId('ngp-accordion-item') as T, {\n alias: 'ngpAccordionItemValue',\n });\n\n /**\n * Whether the accordion item is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpAccordionItemDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The accordion item state.\n */\n protected readonly state = ngpAccordionItem<T>({\n value: this.value,\n disabled: this.disabled,\n });\n\n /**\n * The open state of the accordion item.\n */\n readonly open = this.state.open;\n}\n","import { HOST_TAG_NAME, inject, signal, Signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectAccordionItemState } from '../accordion-item/accordion-item-state';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\nexport interface NgpAccordionTriggerState {\n /**\n * The id of the trigger button\n */\n readonly id: Signal<string>;\n /**\n * Toggle the accordion item.\n */\n toggle(): void;\n}\n\nexport interface NgpAccordionTriggerProps {\n /**\n * The id of the trigger button\n */\n readonly id?: Signal<string>;\n}\n\nexport const [\n NgpAccordionTriggerStateToken,\n ngpAccordionTrigger,\n injectAccordionTriggerState,\n provideAccordionTriggerState,\n] = createPrimitive(\n 'NgpAccordionTrigger',\n <T>({ id = signal(uniqueId('ngp-accordion-trigger')) }: NgpAccordionTriggerProps) => {\n const element = injectElementRef();\n const tagName = inject(HOST_TAG_NAME);\n const accordion = injectAccordionState<T>();\n const accordionItem = injectAccordionItemState<T>();\n\n // Host bindings\n attrBinding(element, 'id', id);\n attrBinding(element, 'type', tagName === 'button' ? 'button' : null);\n attrBinding(element, 'aria-controls', accordionItem().contentId);\n attrBinding(element, 'aria-expanded', accordionItem().open);\n dataBinding(element, 'data-orientation', accordion().orientation);\n dataBinding(element, 'data-open', accordionItem().open);\n dataBinding(\n element,\n 'data-disabled',\n () => accordionItem().disabled() || accordion().disabled(),\n );\n\n // register the trigger with the accordion item\n accordionItem().setTrigger(id());\n\n // Methods\n function toggle(): void {\n if (accordionItem().disabled() || accordion().disabled()) {\n return;\n }\n\n accordion().toggle(accordionItem().value()!);\n }\n\n // Event listeners\n listener(element, 'click', toggle);\n\n return { id, toggle };\n },\n);\n","import { Directive, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpAccordionTrigger } from './accordion-trigger-state';\n\n/**\n * Apply the `ngpAccordionTrigger` directive to an element that represents the trigger for an accordion item, such as a button.\n */\n@Directive({\n selector: '[ngpAccordionTrigger]',\n exportAs: 'ngpAccordionTrigger',\n})\nexport class NgpAccordionTrigger<T> {\n /**\n * The id of the trigger.\n */\n readonly id = input<string>(uniqueId('ngp-accordion-trigger'));\n\n private readonly state = ngpAccordionTrigger<T>({ id: this.id });\n\n /**\n * Toggle the accordion item.\n */\n toggle(): void {\n this.state.toggle();\n }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport type { NgpAccordionType } from '../accordion/accordion-state';\n\nexport interface NgpAccordionConfig {\n /**\n * The default type of the accordion\n * @default 'single'\n */\n type: NgpAccordionType;\n /**\n * Whether the accordion is collapsible\n * @default false\n */\n collapsible: boolean;\n /**\n * The default orientation of the accordion\n * @default 'vertical'\n */\n orientation: 'vertical' | 'horizontal';\n}\n\nexport const defaultAccordionConfig: NgpAccordionConfig = {\n type: 'single',\n collapsible: false,\n orientation: 'vertical',\n};\n\nexport const NgpAccordionConfigToken = new InjectionToken<NgpAccordionConfig>(\n 'NgpAccordionConfigToken',\n);\n\n/**\n * Provide the default Accordion configuration\n * @param config The Accordion configuration\n * @returns The provider\n */\nexport function provideAccordionConfig(config: Partial<NgpAccordionConfig>): Provider[] {\n return [\n {\n provide: NgpAccordionConfigToken,\n useValue: { ...defaultAccordionConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Accordion configuration\n * @returns The global Accordion configuration\n */\nexport function injectAccordionConfig(): NgpAccordionConfig {\n return inject(NgpAccordionConfigToken, { optional: true }) ?? defaultAccordionConfig;\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, output } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { injectAccordionConfig } from '../config/accordion-config';\nimport { ngpAccordion, NgpAccordionType, provideAccordionState } from './accordion-state';\n\n/**\n * Apply the `ngpAccordion` directive to an element that represents the group of accordion items.\n */\n@Directive({\n selector: '[ngpAccordion]',\n exportAs: 'ngpAccordion',\n providers: [provideAccordionState()],\n})\nexport class NgpAccordion<T> {\n /**\n * Access the global accordion configuration.\n */\n private readonly config = injectAccordionConfig();\n\n /**\n * The type of the accordion.\n */\n readonly type = input<NgpAccordionType>(this.config.type, {\n alias: 'ngpAccordionType',\n });\n\n /**\n * Whether the accordion is collapsible.\n */\n readonly collapsible = input<boolean, BooleanInput>(this.config.collapsible, {\n alias: 'ngpAccordionCollapsible',\n transform: booleanAttribute,\n });\n\n /**\n * The value of the accordion.\n */\n readonly value = input<T | T[] | null>(null, {\n alias: 'ngpAccordionValue',\n });\n\n /**\n * Event emitted when the accordion value changes.\n */\n readonly valueChange = output<T | T[] | null>({\n alias: 'ngpAccordionValueChange',\n });\n\n /**\n * Whether the accordion is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpAccordionDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The accordion orientation.\n */\n readonly orientation = input<NgpOrientation>(this.config.orientation, {\n alias: 'ngpAccordionOrientation',\n });\n\n /**\n * The accordion state.\n */\n protected readonly state = ngpAccordion<T>({\n type: this.type,\n collapsible: this.collapsible,\n value: this.value,\n disabled: this.disabled,\n orientation: this.orientation,\n onValueChange: value => this.valueChange.emit(value),\n });\n\n /**\n * @param value The value to check.\n * @returns Whether the value is open.\n * @internal\n */\n isOpen(value: T): boolean {\n return this.state.isOpen(value);\n }\n\n toggle(value: T): void {\n this.state.toggle(value);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { injectElementRef, explicitEffect, fromMutationObserver, fromResizeEvent
4
4
  import { safeTakeUntilDestroyed } from 'ng-primitives/utils';
5
5
  import { fromEvent, Subject } from 'rxjs';
6
6
  import { createStateToken, createStateProvider, createStateInjector, createState } from 'ng-primitives/state';
7
- import { setupButton } from 'ng-primitives/button';
7
+ import { ngpButton } from 'ng-primitives/button';
8
8
 
9
9
  /**
10
10
  * The state token for the PromptComposer primitive.
@@ -87,7 +87,7 @@ class NgpPromptComposerInput {
87
87
  * This directive automatically handles that behavior.
88
88
  */
89
89
  onEnterKey(event) {
90
- if (event.shiftKey) {
90
+ if (event instanceof KeyboardEvent === false || event.shiftKey) {
91
91
  return;
92
92
  }
93
93
  event.preventDefault();
@@ -140,7 +140,7 @@ class NgpPromptComposerSubmit {
140
140
  this.isDictating = computed(() => this.composer().isDictating(), ...(ngDevMode ? [{ debugName: "isDictating" }] : []));
141
141
  /** The state of the prompt composer submit. */
142
142
  this.state = promptComposerSubmitState(this);
143
- setupButton({
143
+ ngpButton({
144
144
  disabled: computed(() => this.state.disabled() || this.composer().hasPrompt() === false),
145
145
  });
146
146
  }
@@ -336,7 +336,7 @@ class NgpPromptComposerDictation {
336
336
  this.isDictating = computed(() => this.composer().isDictating(), ...(ngDevMode ? [{ debugName: "isDictating" }] : []));
337
337
  /** The state of the prompt composer. */
338
338
  this.state = promptComposerDictationState(this);
339
- setupButton({
339
+ ngpButton({
340
340
  disabled: computed(() => this.state.disabled() || this.composer().dictationSupported === false),
341
341
  });
342
342
  this.initializeSpeechRecognition();
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-ai.mjs","sources":["../../../../packages/ng-primitives/ai/src/prompt-composer/prompt-composer-state.ts","../../../../packages/ng-primitives/ai/src/thread/thread-state.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-input/prompt-composer-input-state.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-input/prompt-composer-input.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-submit/prompt-composer-submit-state.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-submit/prompt-composer-submit.ts","../../../../packages/ng-primitives/ai/src/prompt-composer/prompt-composer.ts","../../../../packages/ng-primitives/ai/src/thread-message/thread-message-state.ts","../../../../packages/ng-primitives/ai/src/thread-message/thread-message.ts","../../../../packages/ng-primitives/ai/src/thread/thread.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-dictation/prompt-composer-dictation-state.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-dictation/prompt-composer-dictation.ts","../../../../packages/ng-primitives/ai/src/thread-viewport/thread-viewport-state.ts","../../../../packages/ng-primitives/ai/src/thread-viewport/thread-viewport.ts","../../../../packages/ng-primitives/ai/src/thread-suggestion/thread-suggestion-state.ts","../../../../packages/ng-primitives/ai/src/thread-suggestion/thread-suggestion.ts","../../../../packages/ng-primitives/ai/src/ng-primitives-ai.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpPromptComposer } from './prompt-composer';\n\n/**\n * The state token for the PromptComposer primitive.\n */\nexport const NgpPromptComposerStateToken = createStateToken<NgpPromptComposer>('PromptComposer');\n\n/**\n * Provides the PromptComposer state.\n */\nexport const providePromptComposerState = createStateProvider(NgpPromptComposerStateToken);\n\n/**\n * Injects the PromptComposer state.\n */\nexport const injectPromptComposerState = createStateInjector<NgpPromptComposer>(\n NgpPromptComposerStateToken,\n);\n\n/**\n * The PromptComposer state registration function.\n */\nexport const promptComposerState = createState(NgpPromptComposerStateToken);\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpThread } from './thread';\n\n/**\n * The state token for the Thread primitive.\n */\nexport const NgpThreadStateToken = createStateToken<NgpThread>('Thread');\n\n/**\n * Provides the Thread state.\n */\nexport const provideThreadState = createStateProvider(NgpThreadStateToken);\n\n/**\n * Injects the Thread state.\n */\nexport const injectThreadState = createStateInjector<NgpThread>(NgpThreadStateToken);\n\n/**\n * The Thread state registration function.\n */\nexport const threadState = createState(NgpThreadStateToken);\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpPromptComposerInput } from './prompt-composer-input';\n\n/**\n * The state token for the PromptComposerInput primitive.\n */\nexport const NgpPromptComposerInputStateToken =\n createStateToken<NgpPromptComposerInput>('PromptComposerInput');\n\n/**\n * Provides the PromptComposerInput state.\n */\nexport const providePromptComposerInputState = createStateProvider(\n NgpPromptComposerInputStateToken,\n);\n\n/**\n * Injects the PromptComposerInput state.\n */\nexport const injectPromptComposerInputState = createStateInjector<NgpPromptComposerInput>(\n NgpPromptComposerInputStateToken,\n);\n\n/**\n * The PromptComposerInput state registration function.\n */\nexport const promptComposerInputState = createState(NgpPromptComposerInputStateToken);\n","import { Directive, HostListener } from '@angular/core';\nimport { explicitEffect, injectElementRef } from 'ng-primitives/internal';\nimport { safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { fromEvent } from 'rxjs';\nimport { injectPromptComposerState } from '../prompt-composer/prompt-composer-state';\nimport { injectThreadState } from '../thread/thread-state';\nimport {\n promptComposerInputState,\n providePromptComposerInputState,\n} from './prompt-composer-input-state';\n\n@Directive({\n selector: 'input[ngpPromptComposerInput], textarea[ngpPromptComposerInput]',\n exportAs: 'ngpPromptComposerInput',\n providers: [providePromptComposerInputState()],\n})\nexport class NgpPromptComposerInput {\n protected readonly thread = injectThreadState();\n private readonly composer = injectPromptComposerState();\n private readonly element = injectElementRef<HTMLInputElement | HTMLTextAreaElement>();\n\n /** The state of the prompt composer input. */\n protected readonly state = promptComposerInputState<NgpPromptComposerInput>(this);\n\n constructor() {\n // set the initial state\n this.composer().prompt.set(this.element.nativeElement.value);\n\n // listen for requests to set the prompt\n this.thread()\n .requestPrompt.pipe(safeTakeUntilDestroyed())\n .subscribe(value => {\n // set the cursor to the end\n this.composer().prompt.set(value);\n this.element.nativeElement.setSelectionRange(value.length, value.length);\n this.element.nativeElement.focus();\n });\n\n // listen for changes to the text content\n fromEvent(this.element.nativeElement, 'input')\n .pipe(safeTakeUntilDestroyed())\n .subscribe(() => this.composer().prompt.set(this.element.nativeElement.value));\n\n // any time the prompt changes, update the input value if needed\n explicitEffect(\n [this.composer().prompt],\n ([prompt]) => (this.element.nativeElement.value = prompt),\n );\n }\n\n /**\n * If the user presses Enter, the form will be submitted, unless they are holding Shift.\n * This directive automatically handles that behavior.\n */\n @HostListener('keydown.enter', ['$event'])\n protected onEnterKey(event: KeyboardEvent): void {\n if (event.shiftKey) {\n return;\n }\n\n event.preventDefault();\n\n // if there is no text content, do nothing\n if (this.element.nativeElement.value.trim().length === 0) {\n return;\n }\n\n this.composer().submitPrompt();\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpPromptComposerSubmit } from './prompt-composer-submit';\n\n/**\n * The state token for the PromptComposerSubmit primitive.\n */\nexport const NgpPromptComposerSubmitStateToken =\n createStateToken<NgpPromptComposerSubmit>('PromptComposerSubmit');\n\n/**\n * Provides the PromptComposerSubmit state.\n */\nexport const providePromptComposerSubmitState = createStateProvider(\n NgpPromptComposerSubmitStateToken,\n);\n\n/**\n * Injects the PromptComposerSubmit state.\n */\nexport const injectPromptComposerSubmitState = createStateInjector<NgpPromptComposerSubmit>(\n NgpPromptComposerSubmitStateToken,\n);\n\n/**\n * The PromptComposerSubmit state registration function.\n */\nexport const promptComposerSubmitState = createState(NgpPromptComposerSubmitStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, HostListener, input } from '@angular/core';\nimport { setupButton } from 'ng-primitives/button';\nimport { injectPromptComposerState } from '../prompt-composer/prompt-composer-state';\nimport {\n promptComposerSubmitState,\n providePromptComposerSubmitState,\n} from './prompt-composer-submit-state';\n\n@Directive({\n selector: 'button[ngpPromptComposerSubmit]',\n exportAs: 'ngpPromptComposerSubmit',\n providers: [providePromptComposerSubmitState()],\n host: {\n type: 'button',\n '[attr.data-prompt]': 'composer().hasPrompt() ? \"\" : null',\n '[attr.data-dictating]': 'isDictating() ? \"\" : null',\n '[attr.data-dictation-supported]': 'composer().dictationSupported ? \"\" : null',\n },\n})\nexport class NgpPromptComposerSubmit {\n protected readonly composer = injectPromptComposerState();\n\n /** Whether the submit button should be disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Whether dictation is currently active */\n readonly isDictating = computed(() => this.composer().isDictating());\n\n /** The state of the prompt composer submit. */\n protected readonly state = promptComposerSubmitState<NgpPromptComposerSubmit>(this);\n\n constructor() {\n setupButton({\n disabled: computed(() => this.state.disabled() || this.composer().hasPrompt() === false),\n });\n }\n\n @HostListener('click')\n protected onClick(): void {\n this.composer().submitPrompt();\n }\n}\n","import { computed, Directive, output, signal } from '@angular/core';\nimport { injectThreadState } from '../thread/thread-state';\nimport { promptComposerState, providePromptComposerState } from './prompt-composer-state';\n\n@Directive({\n selector: '[ngpPromptComposer]',\n exportAs: 'ngpPromptComposer',\n providers: [providePromptComposerState()],\n host: {\n '[attr.data-prompt]': 'hasPrompt() ? \"\" : null',\n '[attr.data-dictating]': 'isDictating() ? \"\" : null',\n '[attr.data-dictation-supported]': 'dictationSupported ? \"\" : null',\n },\n})\nexport class NgpPromptComposer {\n private readonly thread = injectThreadState();\n\n /** Emits whenever the user submits the prompt. */\n readonly submit = output<string>({ alias: 'ngpPromptComposerSubmit' });\n\n /** @internal Store the current prompt text. */\n readonly prompt = signal<string>('');\n\n /** @internal Track whether the prompt is currently being dictated */\n readonly isDictating = signal<boolean>(false);\n\n /** @internal Determine whether the prompt input has content */\n readonly hasPrompt = computed(() => this.prompt().trim().length > 0);\n\n /** Whether dictation is supported by the browser */\n readonly dictationSupported = !!(\n (globalThis as any).SpeechRecognition || (globalThis as any).webkitSpeechRecognition\n );\n\n /** The state of the prompt composer. */\n protected readonly state = promptComposerState<NgpPromptComposer>(this);\n\n /**\n * @internal\n * Submits the current prompt if there is content, and clears the input.\n */\n submitPrompt(): void {\n if (this.hasPrompt()) {\n this.submit.emit(this.prompt());\n this.prompt.set('');\n this.thread().scrollToBottom('smooth');\n }\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpThreadMessage } from './thread-message';\n\n/**\n * The state token for the ThreadMessage primitive.\n */\nexport const NgpThreadMessageStateToken = createStateToken<NgpThreadMessage>('ThreadMessage');\n\n/**\n * Provides the ThreadMessage state.\n */\nexport const provideThreadMessageState = createStateProvider(NgpThreadMessageStateToken);\n\n/**\n * Injects the ThreadMessage state.\n */\nexport const injectThreadMessageState = createStateInjector<NgpThreadMessage>(\n NgpThreadMessageStateToken,\n);\n\n/**\n * The ThreadMessage state registration function.\n */\nexport const threadMessageState = createState(NgpThreadMessageStateToken);\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { fromMutationObserver } from 'ng-primitives/internal';\nimport { safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { injectThreadState } from '../thread/thread-state';\nimport { provideThreadMessageState, threadMessageState } from './thread-message-state';\n\n@Directive({\n selector: '[ngpThreadMessage]',\n exportAs: 'ngpThreadMessage',\n providers: [provideThreadMessageState()],\n})\nexport class NgpThreadMessage {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly thread = injectThreadState();\n\n /** The state of the thread message. */\n protected readonly state = threadMessageState<NgpThreadMessage>(this);\n\n constructor() {\n // Watch for content changes (like streaming text) and maintain scroll position\n fromMutationObserver(this.elementRef.nativeElement, {\n childList: true, // Watch for new/removed child nodes\n subtree: true, // Watch changes in all descendants\n characterData: true, // Watch for text content changes in text nodes\n attributes: false, // We don't care about attribute changes for content streaming\n })\n .pipe(safeTakeUntilDestroyed())\n .subscribe(() => {\n // if this is the last message, scroll to bottom\n if (this.thread().isLastMessage(this)) {\n this.thread().scrollToBottom('smooth');\n }\n });\n\n this.thread().registerMessage(this);\n this.destroyRef.onDestroy(() => this.thread().unregisterMessage(this));\n }\n}\n","import { Directive } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { NgpThreadMessage } from '../thread-message/thread-message';\nimport { provideThreadState, threadState } from './thread-state';\n\n@Directive({\n selector: '[ngpThread]',\n exportAs: 'ngpThread',\n providers: [provideThreadState()],\n})\nexport class NgpThread {\n private messages: NgpThreadMessage[] = [];\n\n /** @internal emit event to trigger scrolling to bottom */\n readonly scrollRequest = new Subject<ScrollBehavior>();\n\n /** @internal emit event to trigger setting the prompt */\n readonly requestPrompt = new Subject<string>();\n\n /** The state of the thread. */\n protected readonly state = threadState<NgpThread>(this);\n\n scrollToBottom(behavior: ScrollBehavior): void {\n this.scrollRequest.next(behavior);\n }\n\n /** @internal Register a message with the thread */\n registerMessage(message: NgpThreadMessage): void {\n this.messages.push(message);\n }\n\n /** @internal Unregister a message from the thread */\n unregisterMessage(message: NgpThreadMessage): void {\n this.messages = this.messages.filter(m => m !== message);\n }\n\n /** @internal Determine if the given message is the last message in the thread */\n isLastMessage(message: NgpThreadMessage): boolean {\n return this.messages.length > 0 && this.messages[this.messages.length - 1] === message;\n }\n\n /** @internal Set the prompt text in the associated prompt composer */\n setPrompt(value: string): void {\n this.requestPrompt.next(value);\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpPromptComposerDictation } from './prompt-composer-dictation';\n\n/**\n * The state token for the PromptComposerDictation primitive.\n */\nexport const NgpPromptComposerDictationStateToken =\n createStateToken<NgpPromptComposerDictation>('PromptComposerDictation');\n\n/**\n * Provides the PromptComposerDictation state.\n */\nexport const providePromptComposerDictationState = createStateProvider(\n NgpPromptComposerDictationStateToken,\n);\n\n/**\n * Injects the PromptComposerDictation state.\n */\nexport const injectPromptComposerDictationState = createStateInjector<NgpPromptComposerDictation>(\n NgpPromptComposerDictationStateToken,\n);\n\n/**\n * The PromptComposerDictation state registration function.\n */\nexport const promptComposerDictationState = createState(NgpPromptComposerDictationStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n HostListener,\n input,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { setupButton } from 'ng-primitives/button';\nimport { injectPromptComposerState } from '../prompt-composer/prompt-composer-state';\nimport {\n promptComposerDictationState,\n providePromptComposerDictationState,\n} from './prompt-composer-dictation-state';\n\ndeclare global {\n interface Window {\n SpeechRecognition: any;\n webkitSpeechRecognition: any;\n }\n}\n\n@Directive({\n selector: 'button[ngpPromptComposerDictation]',\n exportAs: 'ngpPromptComposerDictation',\n providers: [providePromptComposerDictationState()],\n host: {\n type: 'button',\n '[attr.data-dictating]': 'isDictating() ? \"\" : null',\n '[attr.data-dictation-supported]': 'composer().dictationSupported ? \"\" : null',\n '[attr.data-prompt]': 'composer().hasPrompt() ? \"\" : null',\n },\n})\nexport class NgpPromptComposerDictation implements OnDestroy {\n protected readonly composer = injectPromptComposerState();\n private recognition: any = null;\n private basePrompt = signal<string>(''); // Store the prompt before dictation started\n\n /** Whether the submit button should be disabled. */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Whether dictation is currently active */\n readonly isDictating = computed(() => this.composer().isDictating());\n\n /** The state of the prompt composer. */\n protected readonly state = promptComposerDictationState<NgpPromptComposerDictation>(this);\n\n constructor() {\n setupButton({\n disabled: computed(\n () => this.state.disabled() || this.composer().dictationSupported === false,\n ),\n });\n this.initializeSpeechRecognition();\n }\n\n ngOnDestroy(): void {\n if (this.recognition) {\n this.recognition.stop();\n this.recognition = null;\n }\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (!this.recognition) {\n console.warn('Speech recognition is not supported in this browser');\n return;\n }\n\n if (this.composer().isDictating()) {\n this.stopDictation();\n } else {\n this.startDictation();\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.composer().isDictating()) {\n event.preventDefault();\n this.stopDictation();\n }\n }\n\n private initializeSpeechRecognition(): void {\n const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\n\n if (!SpeechRecognition) {\n return;\n }\n\n this.recognition = new SpeechRecognition();\n this.recognition.continuous = true; // Enable continuous listening\n this.recognition.interimResults = true; // Enable interim results for live updates\n this.recognition.lang = 'en-US';\n\n this.recognition.onstart = () => {\n this.composer().isDictating.set(true);\n // Store the current prompt as the base\n this.basePrompt.set(this.composer().prompt());\n };\n\n this.recognition.onresult = (event: any) => {\n let interimTranscript = '';\n let finalTranscript = '';\n\n // Process all results\n for (let i = 0; i < event.results.length; i++) {\n const transcript = event.results[i][0].transcript;\n if (event.results[i].isFinal) {\n finalTranscript += transcript;\n } else {\n interimTranscript += transcript;\n }\n }\n\n // Combine base prompt with final transcript and interim transcript\n const baseText = this.basePrompt();\n const separator = baseText ? ' ' : '';\n const newPrompt = baseText + separator + finalTranscript + interimTranscript;\n\n this.composer().prompt.set(newPrompt.trim());\n };\n\n this.recognition.onend = () => {\n this.composer().isDictating.set(false);\n };\n\n this.recognition.onerror = (event: any) => {\n console.error('Speech recognition error:', event.error);\n this.composer().isDictating.set(false);\n };\n }\n\n private startDictation(): void {\n if (this.recognition && !this.composer().isDictating()) {\n this.recognition.start();\n }\n }\n\n private stopDictation(): void {\n if (this.recognition && this.composer().isDictating()) {\n this.recognition.stop();\n }\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpThreadViewport } from './thread-viewport';\n\n/**\n * The state token for the ThreadViewport primitive.\n */\nexport const NgpThreadViewportStateToken = createStateToken<NgpThreadViewport>('ThreadViewport');\n\n/**\n * Provides the ThreadViewport state.\n */\nexport const provideThreadViewportState = createStateProvider(NgpThreadViewportStateToken);\n\n/**\n * Injects the ThreadViewport state.\n */\nexport const injectThreadViewportState = createStateInjector<NgpThreadViewport>(\n NgpThreadViewportStateToken,\n);\n\n/**\n * The ThreadViewport state registration function.\n */\nexport const threadViewportState = createState(NgpThreadViewportStateToken);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { fromResizeEvent } from 'ng-primitives/internal';\nimport { safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { injectThreadState } from '../thread/thread-state';\nimport { provideThreadViewportState, threadViewportState } from './thread-viewport-state';\n\n@Directive({\n selector: '[ngpThreadViewport]',\n exportAs: 'ngpThreadViewport',\n providers: [provideThreadViewportState()],\n})\nexport class NgpThreadViewport {\n private readonly thread = injectThreadState();\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /**\n * The distance in pixels from the bottom of the scrollable container that is considered \"at the bottom\".\n * When the user scrolls within this threshold, the thread is treated as being at the bottom.\n * This value is used to determine whether automatic scrolling to the bottom should occur,\n * for example when new content is added or the container is resized.\n *\n * @default 70\n */\n readonly threshold = input<number, NumberInput>(70, {\n alias: 'ngpThreadViewportThreshold',\n transform: numberAttribute,\n });\n\n /**\n * Whether the thread should automatically scroll to the bottom when new content is added.\n */\n readonly autoScroll = input<boolean, BooleanInput>(true, {\n alias: 'ngpThreadViewportAutoScroll',\n transform: booleanAttribute,\n });\n\n /** Store the last known scroll position */\n private lastScrollTop = 0;\n\n /** Determine if we are at the bottom of the scrollable container (within the threshold) */\n protected isAtBottom = false;\n\n /** The state of the thread viewport. */\n protected readonly state = threadViewportState<NgpThreadViewport>(this);\n\n constructor() {\n // listen for scroll requests from the thread\n this.thread()\n .scrollRequest.pipe(safeTakeUntilDestroyed())\n .subscribe(behavior => this.scrollToBottom(behavior));\n\n fromResizeEvent(this.elementRef.nativeElement)\n .pipe(safeTakeUntilDestroyed())\n .subscribe(() => {\n if (this.isAtBottom) {\n this.scrollToBottom('instant');\n }\n this.onScroll();\n });\n }\n\n /**\n * Scroll the container to the bottom.\n * @internal\n */\n scrollToBottom(behavior: ScrollBehavior): void {\n if (!this.state.autoScroll()) {\n return;\n }\n\n this.elementRef.nativeElement.scrollTo({\n top: this.elementRef.nativeElement.scrollHeight,\n behavior,\n });\n }\n\n @HostListener('scroll')\n protected onScroll(): void {\n const element = this.elementRef.nativeElement;\n const isAtBottom = element.scrollHeight - element.scrollTop <= element.clientHeight;\n\n if (isAtBottom || this.lastScrollTop >= element.scrollTop) {\n this.isAtBottom = isAtBottom;\n }\n\n this.lastScrollTop = element.scrollTop;\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpThreadSuggestion } from './thread-suggestion';\n\n/**\n * The state token for the ThreadSuggestion primitive.\n */\nexport const NgpThreadSuggestionStateToken =\n createStateToken<NgpThreadSuggestion>('ThreadSuggestion');\n\n/**\n * Provides the ThreadSuggestion state.\n */\nexport const provideThreadSuggestionState = createStateProvider(NgpThreadSuggestionStateToken);\n\n/**\n * Injects the ThreadSuggestion state.\n */\nexport const injectThreadSuggestionState = createStateInjector<NgpThreadSuggestion>(\n NgpThreadSuggestionStateToken,\n);\n\n/**\n * The ThreadSuggestion state registration function.\n */\nexport const threadSuggestionState = createState(NgpThreadSuggestionStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, HostListener, input } from '@angular/core';\nimport { injectThreadState } from '../thread/thread-state';\nimport { provideThreadSuggestionState, threadSuggestionState } from './thread-suggestion-state';\n\n@Directive({\n selector: 'button[ngpThreadSuggestion]',\n exportAs: 'ngpThreadSuggestion',\n providers: [provideThreadSuggestionState()],\n})\nexport class NgpThreadSuggestion {\n private readonly thread = injectThreadState();\n\n /** The suggested text to display in the input field. */\n readonly suggestion = input<string>('', { alias: 'ngpThreadSuggestion' });\n\n /** Whether the suggestion should populate the prompt when clicked. */\n readonly setPromptOnClick = input<boolean, BooleanInput>(true, {\n alias: 'ngpThreadSuggestionSetPromptOnClick',\n transform: booleanAttribute,\n });\n\n /** The state of the thread suggestion. */\n protected readonly state = threadSuggestionState<NgpThreadSuggestion>(this);\n\n @HostListener('click')\n submitSuggestion(): void {\n if (this.state.setPromptOnClick() && this.state.suggestion().length > 0) {\n this.thread().setPrompt(this.state.suggestion());\n }\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-ai.mjs","sources":["../../../../packages/ng-primitives/ai/src/prompt-composer/prompt-composer-state.ts","../../../../packages/ng-primitives/ai/src/thread/thread-state.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-input/prompt-composer-input-state.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-input/prompt-composer-input.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-submit/prompt-composer-submit-state.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-submit/prompt-composer-submit.ts","../../../../packages/ng-primitives/ai/src/prompt-composer/prompt-composer.ts","../../../../packages/ng-primitives/ai/src/thread-message/thread-message-state.ts","../../../../packages/ng-primitives/ai/src/thread-message/thread-message.ts","../../../../packages/ng-primitives/ai/src/thread/thread.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-dictation/prompt-composer-dictation-state.ts","../../../../packages/ng-primitives/ai/src/prompt-composer-dictation/prompt-composer-dictation.ts","../../../../packages/ng-primitives/ai/src/thread-viewport/thread-viewport-state.ts","../../../../packages/ng-primitives/ai/src/thread-viewport/thread-viewport.ts","../../../../packages/ng-primitives/ai/src/thread-suggestion/thread-suggestion-state.ts","../../../../packages/ng-primitives/ai/src/thread-suggestion/thread-suggestion.ts","../../../../packages/ng-primitives/ai/src/ng-primitives-ai.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpPromptComposer } from './prompt-composer';\n\n/**\n * The state token for the PromptComposer primitive.\n */\nexport const NgpPromptComposerStateToken = createStateToken<NgpPromptComposer>('PromptComposer');\n\n/**\n * Provides the PromptComposer state.\n */\nexport const providePromptComposerState = createStateProvider(NgpPromptComposerStateToken);\n\n/**\n * Injects the PromptComposer state.\n */\nexport const injectPromptComposerState = createStateInjector<NgpPromptComposer>(\n NgpPromptComposerStateToken,\n);\n\n/**\n * The PromptComposer state registration function.\n */\nexport const promptComposerState = createState(NgpPromptComposerStateToken);\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpThread } from './thread';\n\n/**\n * The state token for the Thread primitive.\n */\nexport const NgpThreadStateToken = createStateToken<NgpThread>('Thread');\n\n/**\n * Provides the Thread state.\n */\nexport const provideThreadState = createStateProvider(NgpThreadStateToken);\n\n/**\n * Injects the Thread state.\n */\nexport const injectThreadState = createStateInjector<NgpThread>(NgpThreadStateToken);\n\n/**\n * The Thread state registration function.\n */\nexport const threadState = createState(NgpThreadStateToken);\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpPromptComposerInput } from './prompt-composer-input';\n\n/**\n * The state token for the PromptComposerInput primitive.\n */\nexport const NgpPromptComposerInputStateToken =\n createStateToken<NgpPromptComposerInput>('PromptComposerInput');\n\n/**\n * Provides the PromptComposerInput state.\n */\nexport const providePromptComposerInputState = createStateProvider(\n NgpPromptComposerInputStateToken,\n);\n\n/**\n * Injects the PromptComposerInput state.\n */\nexport const injectPromptComposerInputState = createStateInjector<NgpPromptComposerInput>(\n NgpPromptComposerInputStateToken,\n);\n\n/**\n * The PromptComposerInput state registration function.\n */\nexport const promptComposerInputState = createState(NgpPromptComposerInputStateToken);\n","import { Directive, HostListener } from '@angular/core';\nimport { explicitEffect, injectElementRef } from 'ng-primitives/internal';\nimport { safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { fromEvent } from 'rxjs';\nimport { injectPromptComposerState } from '../prompt-composer/prompt-composer-state';\nimport { injectThreadState } from '../thread/thread-state';\nimport {\n promptComposerInputState,\n providePromptComposerInputState,\n} from './prompt-composer-input-state';\n\n@Directive({\n selector: 'input[ngpPromptComposerInput], textarea[ngpPromptComposerInput]',\n exportAs: 'ngpPromptComposerInput',\n providers: [providePromptComposerInputState()],\n})\nexport class NgpPromptComposerInput {\n protected readonly thread = injectThreadState();\n private readonly composer = injectPromptComposerState();\n private readonly element = injectElementRef<HTMLInputElement | HTMLTextAreaElement>();\n\n /** The state of the prompt composer input. */\n protected readonly state = promptComposerInputState<NgpPromptComposerInput>(this);\n\n constructor() {\n // set the initial state\n this.composer().prompt.set(this.element.nativeElement.value);\n\n // listen for requests to set the prompt\n this.thread()\n .requestPrompt.pipe(safeTakeUntilDestroyed())\n .subscribe(value => {\n // set the cursor to the end\n this.composer().prompt.set(value);\n this.element.nativeElement.setSelectionRange(value.length, value.length);\n this.element.nativeElement.focus();\n });\n\n // listen for changes to the text content\n fromEvent(this.element.nativeElement, 'input')\n .pipe(safeTakeUntilDestroyed())\n .subscribe(() => this.composer().prompt.set(this.element.nativeElement.value));\n\n // any time the prompt changes, update the input value if needed\n explicitEffect(\n [this.composer().prompt],\n ([prompt]) => (this.element.nativeElement.value = prompt),\n );\n }\n\n /**\n * If the user presses Enter, the form will be submitted, unless they are holding Shift.\n * This directive automatically handles that behavior.\n */\n @HostListener('keydown.enter', ['$event'])\n protected onEnterKey(event: Event): void {\n if (event instanceof KeyboardEvent === false || event.shiftKey) {\n return;\n }\n\n event.preventDefault();\n\n // if there is no text content, do nothing\n if (this.element.nativeElement.value.trim().length === 0) {\n return;\n }\n\n this.composer().submitPrompt();\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpPromptComposerSubmit } from './prompt-composer-submit';\n\n/**\n * The state token for the PromptComposerSubmit primitive.\n */\nexport const NgpPromptComposerSubmitStateToken =\n createStateToken<NgpPromptComposerSubmit>('PromptComposerSubmit');\n\n/**\n * Provides the PromptComposerSubmit state.\n */\nexport const providePromptComposerSubmitState = createStateProvider(\n NgpPromptComposerSubmitStateToken,\n);\n\n/**\n * Injects the PromptComposerSubmit state.\n */\nexport const injectPromptComposerSubmitState = createStateInjector<NgpPromptComposerSubmit>(\n NgpPromptComposerSubmitStateToken,\n);\n\n/**\n * The PromptComposerSubmit state registration function.\n */\nexport const promptComposerSubmitState = createState(NgpPromptComposerSubmitStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, HostListener, input } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectPromptComposerState } from '../prompt-composer/prompt-composer-state';\nimport {\n promptComposerSubmitState,\n providePromptComposerSubmitState,\n} from './prompt-composer-submit-state';\n\n@Directive({\n selector: 'button[ngpPromptComposerSubmit]',\n exportAs: 'ngpPromptComposerSubmit',\n providers: [providePromptComposerSubmitState()],\n host: {\n type: 'button',\n '[attr.data-prompt]': 'composer().hasPrompt() ? \"\" : null',\n '[attr.data-dictating]': 'isDictating() ? \"\" : null',\n '[attr.data-dictation-supported]': 'composer().dictationSupported ? \"\" : null',\n },\n})\nexport class NgpPromptComposerSubmit {\n protected readonly composer = injectPromptComposerState();\n\n /** Whether the submit button should be disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Whether dictation is currently active */\n readonly isDictating = computed(() => this.composer().isDictating());\n\n /** The state of the prompt composer submit. */\n protected readonly state = promptComposerSubmitState<NgpPromptComposerSubmit>(this);\n\n constructor() {\n ngpButton({\n disabled: computed(() => this.state.disabled() || this.composer().hasPrompt() === false),\n });\n }\n\n @HostListener('click')\n protected onClick(): void {\n this.composer().submitPrompt();\n }\n}\n","import { computed, Directive, output, signal } from '@angular/core';\nimport { injectThreadState } from '../thread/thread-state';\nimport { promptComposerState, providePromptComposerState } from './prompt-composer-state';\n\n@Directive({\n selector: '[ngpPromptComposer]',\n exportAs: 'ngpPromptComposer',\n providers: [providePromptComposerState()],\n host: {\n '[attr.data-prompt]': 'hasPrompt() ? \"\" : null',\n '[attr.data-dictating]': 'isDictating() ? \"\" : null',\n '[attr.data-dictation-supported]': 'dictationSupported ? \"\" : null',\n },\n})\nexport class NgpPromptComposer {\n private readonly thread = injectThreadState();\n\n /** Emits whenever the user submits the prompt. */\n readonly submit = output<string>({ alias: 'ngpPromptComposerSubmit' });\n\n /** @internal Store the current prompt text. */\n readonly prompt = signal<string>('');\n\n /** @internal Track whether the prompt is currently being dictated */\n readonly isDictating = signal<boolean>(false);\n\n /** @internal Determine whether the prompt input has content */\n readonly hasPrompt = computed(() => this.prompt().trim().length > 0);\n\n /** Whether dictation is supported by the browser */\n readonly dictationSupported = !!(\n (globalThis as any).SpeechRecognition || (globalThis as any).webkitSpeechRecognition\n );\n\n /** The state of the prompt composer. */\n protected readonly state = promptComposerState<NgpPromptComposer>(this);\n\n /**\n * @internal\n * Submits the current prompt if there is content, and clears the input.\n */\n submitPrompt(): void {\n if (this.hasPrompt()) {\n this.submit.emit(this.prompt());\n this.prompt.set('');\n this.thread().scrollToBottom('smooth');\n }\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpThreadMessage } from './thread-message';\n\n/**\n * The state token for the ThreadMessage primitive.\n */\nexport const NgpThreadMessageStateToken = createStateToken<NgpThreadMessage>('ThreadMessage');\n\n/**\n * Provides the ThreadMessage state.\n */\nexport const provideThreadMessageState = createStateProvider(NgpThreadMessageStateToken);\n\n/**\n * Injects the ThreadMessage state.\n */\nexport const injectThreadMessageState = createStateInjector<NgpThreadMessage>(\n NgpThreadMessageStateToken,\n);\n\n/**\n * The ThreadMessage state registration function.\n */\nexport const threadMessageState = createState(NgpThreadMessageStateToken);\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { fromMutationObserver } from 'ng-primitives/internal';\nimport { safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { injectThreadState } from '../thread/thread-state';\nimport { provideThreadMessageState, threadMessageState } from './thread-message-state';\n\n@Directive({\n selector: '[ngpThreadMessage]',\n exportAs: 'ngpThreadMessage',\n providers: [provideThreadMessageState()],\n})\nexport class NgpThreadMessage {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly thread = injectThreadState();\n\n /** The state of the thread message. */\n protected readonly state = threadMessageState<NgpThreadMessage>(this);\n\n constructor() {\n // Watch for content changes (like streaming text) and maintain scroll position\n fromMutationObserver(this.elementRef.nativeElement, {\n childList: true, // Watch for new/removed child nodes\n subtree: true, // Watch changes in all descendants\n characterData: true, // Watch for text content changes in text nodes\n attributes: false, // We don't care about attribute changes for content streaming\n })\n .pipe(safeTakeUntilDestroyed())\n .subscribe(() => {\n // if this is the last message, scroll to bottom\n if (this.thread().isLastMessage(this)) {\n this.thread().scrollToBottom('smooth');\n }\n });\n\n this.thread().registerMessage(this);\n this.destroyRef.onDestroy(() => this.thread().unregisterMessage(this));\n }\n}\n","import { Directive } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { NgpThreadMessage } from '../thread-message/thread-message';\nimport { provideThreadState, threadState } from './thread-state';\n\n@Directive({\n selector: '[ngpThread]',\n exportAs: 'ngpThread',\n providers: [provideThreadState()],\n})\nexport class NgpThread {\n private messages: NgpThreadMessage[] = [];\n\n /** @internal emit event to trigger scrolling to bottom */\n readonly scrollRequest = new Subject<ScrollBehavior>();\n\n /** @internal emit event to trigger setting the prompt */\n readonly requestPrompt = new Subject<string>();\n\n /** The state of the thread. */\n protected readonly state = threadState<NgpThread>(this);\n\n scrollToBottom(behavior: ScrollBehavior): void {\n this.scrollRequest.next(behavior);\n }\n\n /** @internal Register a message with the thread */\n registerMessage(message: NgpThreadMessage): void {\n this.messages.push(message);\n }\n\n /** @internal Unregister a message from the thread */\n unregisterMessage(message: NgpThreadMessage): void {\n this.messages = this.messages.filter(m => m !== message);\n }\n\n /** @internal Determine if the given message is the last message in the thread */\n isLastMessage(message: NgpThreadMessage): boolean {\n return this.messages.length > 0 && this.messages[this.messages.length - 1] === message;\n }\n\n /** @internal Set the prompt text in the associated prompt composer */\n setPrompt(value: string): void {\n this.requestPrompt.next(value);\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpPromptComposerDictation } from './prompt-composer-dictation';\n\n/**\n * The state token for the PromptComposerDictation primitive.\n */\nexport const NgpPromptComposerDictationStateToken =\n createStateToken<NgpPromptComposerDictation>('PromptComposerDictation');\n\n/**\n * Provides the PromptComposerDictation state.\n */\nexport const providePromptComposerDictationState = createStateProvider(\n NgpPromptComposerDictationStateToken,\n);\n\n/**\n * Injects the PromptComposerDictation state.\n */\nexport const injectPromptComposerDictationState = createStateInjector<NgpPromptComposerDictation>(\n NgpPromptComposerDictationStateToken,\n);\n\n/**\n * The PromptComposerDictation state registration function.\n */\nexport const promptComposerDictationState = createState(NgpPromptComposerDictationStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n HostListener,\n input,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectPromptComposerState } from '../prompt-composer/prompt-composer-state';\nimport {\n promptComposerDictationState,\n providePromptComposerDictationState,\n} from './prompt-composer-dictation-state';\n\ndeclare global {\n interface Window {\n SpeechRecognition: any;\n webkitSpeechRecognition: any;\n }\n}\n\n@Directive({\n selector: 'button[ngpPromptComposerDictation]',\n exportAs: 'ngpPromptComposerDictation',\n providers: [providePromptComposerDictationState()],\n host: {\n type: 'button',\n '[attr.data-dictating]': 'isDictating() ? \"\" : null',\n '[attr.data-dictation-supported]': 'composer().dictationSupported ? \"\" : null',\n '[attr.data-prompt]': 'composer().hasPrompt() ? \"\" : null',\n },\n})\nexport class NgpPromptComposerDictation implements OnDestroy {\n protected readonly composer = injectPromptComposerState();\n private recognition: any = null;\n private basePrompt = signal<string>(''); // Store the prompt before dictation started\n\n /** Whether the submit button should be disabled. */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Whether dictation is currently active */\n readonly isDictating = computed(() => this.composer().isDictating());\n\n /** The state of the prompt composer. */\n protected readonly state = promptComposerDictationState<NgpPromptComposerDictation>(this);\n\n constructor() {\n ngpButton({\n disabled: computed(\n () => this.state.disabled() || this.composer().dictationSupported === false,\n ),\n });\n this.initializeSpeechRecognition();\n }\n\n ngOnDestroy(): void {\n if (this.recognition) {\n this.recognition.stop();\n this.recognition = null;\n }\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (!this.recognition) {\n console.warn('Speech recognition is not supported in this browser');\n return;\n }\n\n if (this.composer().isDictating()) {\n this.stopDictation();\n } else {\n this.startDictation();\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.composer().isDictating()) {\n event.preventDefault();\n this.stopDictation();\n }\n }\n\n private initializeSpeechRecognition(): void {\n const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\n\n if (!SpeechRecognition) {\n return;\n }\n\n this.recognition = new SpeechRecognition();\n this.recognition.continuous = true; // Enable continuous listening\n this.recognition.interimResults = true; // Enable interim results for live updates\n this.recognition.lang = 'en-US';\n\n this.recognition.onstart = () => {\n this.composer().isDictating.set(true);\n // Store the current prompt as the base\n this.basePrompt.set(this.composer().prompt());\n };\n\n this.recognition.onresult = (event: any) => {\n let interimTranscript = '';\n let finalTranscript = '';\n\n // Process all results\n for (let i = 0; i < event.results.length; i++) {\n const transcript = event.results[i][0].transcript;\n if (event.results[i].isFinal) {\n finalTranscript += transcript;\n } else {\n interimTranscript += transcript;\n }\n }\n\n // Combine base prompt with final transcript and interim transcript\n const baseText = this.basePrompt();\n const separator = baseText ? ' ' : '';\n const newPrompt = baseText + separator + finalTranscript + interimTranscript;\n\n this.composer().prompt.set(newPrompt.trim());\n };\n\n this.recognition.onend = () => {\n this.composer().isDictating.set(false);\n };\n\n this.recognition.onerror = (event: any) => {\n console.error('Speech recognition error:', event.error);\n this.composer().isDictating.set(false);\n };\n }\n\n private startDictation(): void {\n if (this.recognition && !this.composer().isDictating()) {\n this.recognition.start();\n }\n }\n\n private stopDictation(): void {\n if (this.recognition && this.composer().isDictating()) {\n this.recognition.stop();\n }\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpThreadViewport } from './thread-viewport';\n\n/**\n * The state token for the ThreadViewport primitive.\n */\nexport const NgpThreadViewportStateToken = createStateToken<NgpThreadViewport>('ThreadViewport');\n\n/**\n * Provides the ThreadViewport state.\n */\nexport const provideThreadViewportState = createStateProvider(NgpThreadViewportStateToken);\n\n/**\n * Injects the ThreadViewport state.\n */\nexport const injectThreadViewportState = createStateInjector<NgpThreadViewport>(\n NgpThreadViewportStateToken,\n);\n\n/**\n * The ThreadViewport state registration function.\n */\nexport const threadViewportState = createState(NgpThreadViewportStateToken);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { fromResizeEvent } from 'ng-primitives/internal';\nimport { safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { injectThreadState } from '../thread/thread-state';\nimport { provideThreadViewportState, threadViewportState } from './thread-viewport-state';\n\n@Directive({\n selector: '[ngpThreadViewport]',\n exportAs: 'ngpThreadViewport',\n providers: [provideThreadViewportState()],\n})\nexport class NgpThreadViewport {\n private readonly thread = injectThreadState();\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /**\n * The distance in pixels from the bottom of the scrollable container that is considered \"at the bottom\".\n * When the user scrolls within this threshold, the thread is treated as being at the bottom.\n * This value is used to determine whether automatic scrolling to the bottom should occur,\n * for example when new content is added or the container is resized.\n *\n * @default 70\n */\n readonly threshold = input<number, NumberInput>(70, {\n alias: 'ngpThreadViewportThreshold',\n transform: numberAttribute,\n });\n\n /**\n * Whether the thread should automatically scroll to the bottom when new content is added.\n */\n readonly autoScroll = input<boolean, BooleanInput>(true, {\n alias: 'ngpThreadViewportAutoScroll',\n transform: booleanAttribute,\n });\n\n /** Store the last known scroll position */\n private lastScrollTop = 0;\n\n /** Determine if we are at the bottom of the scrollable container (within the threshold) */\n protected isAtBottom = false;\n\n /** The state of the thread viewport. */\n protected readonly state = threadViewportState<NgpThreadViewport>(this);\n\n constructor() {\n // listen for scroll requests from the thread\n this.thread()\n .scrollRequest.pipe(safeTakeUntilDestroyed())\n .subscribe(behavior => this.scrollToBottom(behavior));\n\n fromResizeEvent(this.elementRef.nativeElement)\n .pipe(safeTakeUntilDestroyed())\n .subscribe(() => {\n if (this.isAtBottom) {\n this.scrollToBottom('instant');\n }\n this.onScroll();\n });\n }\n\n /**\n * Scroll the container to the bottom.\n * @internal\n */\n scrollToBottom(behavior: ScrollBehavior): void {\n if (!this.state.autoScroll()) {\n return;\n }\n\n this.elementRef.nativeElement.scrollTo({\n top: this.elementRef.nativeElement.scrollHeight,\n behavior,\n });\n }\n\n @HostListener('scroll')\n protected onScroll(): void {\n const element = this.elementRef.nativeElement;\n const isAtBottom = element.scrollHeight - element.scrollTop <= element.clientHeight;\n\n if (isAtBottom || this.lastScrollTop >= element.scrollTop) {\n this.isAtBottom = isAtBottom;\n }\n\n this.lastScrollTop = element.scrollTop;\n }\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpThreadSuggestion } from './thread-suggestion';\n\n/**\n * The state token for the ThreadSuggestion primitive.\n */\nexport const NgpThreadSuggestionStateToken =\n createStateToken<NgpThreadSuggestion>('ThreadSuggestion');\n\n/**\n * Provides the ThreadSuggestion state.\n */\nexport const provideThreadSuggestionState = createStateProvider(NgpThreadSuggestionStateToken);\n\n/**\n * Injects the ThreadSuggestion state.\n */\nexport const injectThreadSuggestionState = createStateInjector<NgpThreadSuggestion>(\n NgpThreadSuggestionStateToken,\n);\n\n/**\n * The ThreadSuggestion state registration function.\n */\nexport const threadSuggestionState = createState(NgpThreadSuggestionStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, HostListener, input } from '@angular/core';\nimport { injectThreadState } from '../thread/thread-state';\nimport { provideThreadSuggestionState, threadSuggestionState } from './thread-suggestion-state';\n\n@Directive({\n selector: 'button[ngpThreadSuggestion]',\n exportAs: 'ngpThreadSuggestion',\n providers: [provideThreadSuggestionState()],\n})\nexport class NgpThreadSuggestion {\n private readonly thread = injectThreadState();\n\n /** The suggested text to display in the input field. */\n readonly suggestion = input<string>('', { alias: 'ngpThreadSuggestion' });\n\n /** Whether the suggestion should populate the prompt when clicked. */\n readonly setPromptOnClick = input<boolean, BooleanInput>(true, {\n alias: 'ngpThreadSuggestionSetPromptOnClick',\n transform: booleanAttribute,\n });\n\n /** The state of the thread suggestion. */\n protected readonly state = threadSuggestionState<NgpThreadSuggestion>(this);\n\n @HostListener('click')\n submitSuggestion(): void {\n if (this.state.setPromptOnClick() && this.state.suggestion().length > 0) {\n this.thread().setPrompt(this.state.suggestion());\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,26 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, output, HostListener, Directive } from '@angular/core';
3
- import { injectStyleInjector } from 'ng-primitives/internal';
2
+ import { signal, output, Directive } from '@angular/core';
3
+ import { injectElementRef, injectStyleInjector } from 'ng-primitives/internal';
4
+ import { createPrimitive, dataBinding, listener } from 'ng-primitives/state';
4
5
 
5
- class NgpAutofill {
6
- constructor() {
7
- /**
8
- * Access the style injector.
9
- */
10
- this.styleInjector = injectStyleInjector();
11
- /**
12
- * Store the autofill state.
13
- */
14
- this.autofilled = signal(false, ...(ngDevMode ? [{ debugName: "autofilled" }] : []));
15
- /**
16
- * Emit when the autofill state changes.
17
- */
18
- this.autofillChange = output({
19
- alias: 'ngpAutofill',
20
- });
21
- // This technique is based on that used by the Angular CDK
22
- // https://github.com/angular/components/blob/main/src/cdk/text-field/_index.scss
23
- this.styleInjector.add('ngp-autofill', `
6
+ const [NgpAutofillStateToken, ngpAutofill, injectAutofillState, provideAutofillState] = createPrimitive('NgpAutofill', ({ onAutofillChange }) => {
7
+ const element = injectElementRef();
8
+ const styleInjector = injectStyleInjector();
9
+ const autofilled = signal(false, ...(ngDevMode ? [{ debugName: "autofilled" }] : []));
10
+ // Host bindings
11
+ dataBinding(element, 'data-autofill', autofilled);
12
+ // Inject the autofill detection styles
13
+ // This technique is based on that used by the Angular CDK
14
+ // https://github.com/angular/components/blob/main/src/cdk/text-field/_index.scss
15
+ styleInjector.add('ngp-autofill', `
24
16
  @keyframes ngp-autofill-start { }
25
17
  @keyframes ngp-autofill-end {}
26
18
 
@@ -32,37 +24,62 @@ class NgpAutofill {
32
24
  animation: ngp-autofill-end 0s 1ms;
33
25
  }
34
26
  `);
35
- }
36
- onAnimationStart(event) {
27
+ // Listen for animation start events
28
+ listener(element, 'animationstart', (event) => {
37
29
  if (event.animationName === 'ngp-autofill-start') {
38
- this.autofilled.set(true);
39
- this.autofillChange.emit(true);
30
+ setAutofilled(true);
31
+ onAutofillChange?.(true);
40
32
  }
41
33
  if (event.animationName === 'ngp-autofill-end') {
42
- this.autofilled.set(false);
43
- this.autofillChange.emit(false);
34
+ setAutofilled(false);
35
+ onAutofillChange?.(false);
44
36
  }
37
+ });
38
+ function setAutofilled(value) {
39
+ autofilled.set(value);
40
+ }
41
+ return {
42
+ autofilled,
43
+ };
44
+ });
45
+
46
+ /**
47
+ * Apply the `ngpAutofill` directive to an element to detect browser autofill.
48
+ */
49
+ class NgpAutofill {
50
+ constructor() {
51
+ /**
52
+ * Event emitted when the autofill state changes.
53
+ */
54
+ this.autofillChange = output({
55
+ alias: 'ngpAutofill',
56
+ });
57
+ /**
58
+ * The autofill state.
59
+ */
60
+ this.state = ngpAutofill({
61
+ onAutofillChange: value => this.autofillChange.emit(value),
62
+ });
63
+ /**
64
+ * Whether the element is autofilled.
65
+ */
66
+ this.autofilled = this.state.autofilled;
45
67
  }
46
68
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAutofill, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
47
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpAutofill, isStandalone: true, selector: "[ngpAutofill]", outputs: { autofillChange: "ngpAutofill" }, host: { listeners: { "animationstart": "onAnimationStart($event)" }, properties: { "attr.data-autofill": "autofilled() ? \"\" : null" } }, exportAs: ["ngpAutofill"], ngImport: i0 }); }
69
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpAutofill, isStandalone: true, selector: "[ngpAutofill]", outputs: { autofillChange: "ngpAutofill" }, providers: [provideAutofillState()], exportAs: ["ngpAutofill"], ngImport: i0 }); }
48
70
  }
49
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAutofill, decorators: [{
50
72
  type: Directive,
51
73
  args: [{
52
74
  selector: '[ngpAutofill]',
53
75
  exportAs: 'ngpAutofill',
54
- host: {
55
- '[attr.data-autofill]': 'autofilled() ? "" : null',
56
- },
76
+ providers: [provideAutofillState()],
57
77
  }]
58
- }], ctorParameters: () => [], propDecorators: { autofillChange: [{ type: i0.Output, args: ["ngpAutofill"] }], onAnimationStart: [{
59
- type: HostListener,
60
- args: ['animationstart', ['$event']]
61
- }] } });
78
+ }], propDecorators: { autofillChange: [{ type: i0.Output, args: ["ngpAutofill"] }] } });
62
79
 
63
80
  /**
64
81
  * Generated bundle index. Do not edit.
65
82
  */
66
83
 
67
- export { NgpAutofill };
84
+ export { NgpAutofill, NgpAutofillStateToken, injectAutofillState, ngpAutofill, provideAutofillState };
68
85
  //# sourceMappingURL=ng-primitives-autofill.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-autofill.mjs","sources":["../../../../packages/ng-primitives/autofill/src/autofill/autofill.ts","../../../../packages/ng-primitives/autofill/src/ng-primitives-autofill.ts"],"sourcesContent":["import { Directive, HostListener, output, signal } from '@angular/core';\nimport { injectStyleInjector } from 'ng-primitives/internal';\n\n@Directive({\n selector: '[ngpAutofill]',\n exportAs: 'ngpAutofill',\n host: {\n '[attr.data-autofill]': 'autofilled() ? \"\" : null',\n },\n})\nexport class NgpAutofill {\n /**\n * Access the style injector.\n */\n private readonly styleInjector = injectStyleInjector();\n\n /**\n * Store the autofill state.\n */\n protected readonly autofilled = signal(false);\n\n /**\n * Emit when the autofill state changes.\n */\n readonly autofillChange = output<boolean>({\n alias: 'ngpAutofill',\n });\n\n constructor() {\n // This technique is based on that used by the Angular CDK\n // https://github.com/angular/components/blob/main/src/cdk/text-field/_index.scss\n this.styleInjector.add(\n 'ngp-autofill',\n `\n @keyframes ngp-autofill-start { }\n @keyframes ngp-autofill-end {}\n\n [data-autofill]:-webkit-autofill {\n animation: ngp-autofill-start 0s 1ms;\n }\n\n [data-autofill]:not(:-webkit-autofill) {\n animation: ngp-autofill-end 0s 1ms;\n }\n `,\n );\n }\n\n @HostListener('animationstart', ['$event'])\n protected onAnimationStart(event: AnimationEvent): void {\n if (event.animationName === 'ngp-autofill-start') {\n this.autofilled.set(true);\n this.autofillChange.emit(true);\n }\n\n if (event.animationName === 'ngp-autofill-end') {\n this.autofilled.set(false);\n this.autofillChange.emit(false);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAUa,WAAW,CAAA;AAkBtB,IAAA,WAAA,GAAA;AAjBA;;AAEG;QACc,IAAA,CAAA,aAAa,GAAG,mBAAmB,EAAE;AAEtD;;AAEG;AACgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAE7C;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,MAAM,CAAU;AACxC,YAAA,KAAK,EAAE,aAAa;AACrB,SAAA,CAAC;;;AAKA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,cAAc,EACd;;;;;;;;;;;AAWC,MAAA,CAAA,CACF;IACH;AAGU,IAAA,gBAAgB,CAAC,KAAqB,EAAA;AAC9C,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,oBAAoB,EAAE;AAChD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;AAEA,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,kBAAkB,EAAE;AAC9C,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC;IACF;8GAjDW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,0BAA0B;AACnD,qBAAA;AACF,iBAAA;;sBAuCE,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AChD5C;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-primitives-autofill.mjs","sources":["../../../../packages/ng-primitives/autofill/src/autofill/autofill-state.ts","../../../../packages/ng-primitives/autofill/src/autofill/autofill.ts","../../../../packages/ng-primitives/autofill/src/ng-primitives-autofill.ts"],"sourcesContent":["import { Signal, signal } from '@angular/core';\nimport { injectElementRef, injectStyleInjector } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, listener } from 'ng-primitives/state';\n\nexport interface NgpAutofillState {\n /**\n * Whether the element is autofilled.\n */\n readonly autofilled: Signal<boolean>;\n}\n\nexport interface NgpAutofillProps {\n /**\n * Callback fired when the autofill state changes.\n */\n onAutofillChange?: (value: boolean) => void;\n}\n\nexport const [NgpAutofillStateToken, ngpAutofill, injectAutofillState, provideAutofillState] =\n createPrimitive('NgpAutofill', ({ onAutofillChange }: NgpAutofillProps) => {\n const element = injectElementRef();\n const styleInjector = injectStyleInjector();\n const autofilled = signal(false);\n\n // Host bindings\n dataBinding(element, 'data-autofill', autofilled);\n\n // Inject the autofill detection styles\n // This technique is based on that used by the Angular CDK\n // https://github.com/angular/components/blob/main/src/cdk/text-field/_index.scss\n styleInjector.add(\n 'ngp-autofill',\n `\n @keyframes ngp-autofill-start { }\n @keyframes ngp-autofill-end {}\n\n [data-autofill]:-webkit-autofill {\n animation: ngp-autofill-start 0s 1ms;\n }\n\n [data-autofill]:not(:-webkit-autofill) {\n animation: ngp-autofill-end 0s 1ms;\n }\n `,\n );\n\n // Listen for animation start events\n listener(element, 'animationstart', (event: AnimationEvent) => {\n if (event.animationName === 'ngp-autofill-start') {\n setAutofilled(true);\n onAutofillChange?.(true);\n }\n\n if (event.animationName === 'ngp-autofill-end') {\n setAutofilled(false);\n onAutofillChange?.(false);\n }\n });\n\n function setAutofilled(value: boolean): void {\n autofilled.set(value);\n }\n\n return {\n autofilled,\n };\n });\n","import { Directive, output } from '@angular/core';\nimport { ngpAutofill, provideAutofillState } from './autofill-state';\n\n/**\n * Apply the `ngpAutofill` directive to an element to detect browser autofill.\n */\n@Directive({\n selector: '[ngpAutofill]',\n exportAs: 'ngpAutofill',\n providers: [provideAutofillState()],\n})\nexport class NgpAutofill {\n /**\n * Event emitted when the autofill state changes.\n */\n readonly autofillChange = output<boolean>({\n alias: 'ngpAutofill',\n });\n\n /**\n * The autofill state.\n */\n private readonly state = ngpAutofill({\n onAutofillChange: value => this.autofillChange.emit(value),\n });\n\n /**\n * Whether the element is autofilled.\n */\n readonly autofilled = this.state.autofilled;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAkBa,CAAC,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,GAC1F,eAAe,CAAC,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAoB,KAAI;AACxE,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,aAAa,GAAG,mBAAmB,EAAE;AAC3C,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;;AAGhC,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC;;;;AAKjD,IAAA,aAAa,CAAC,GAAG,CACf,cAAc,EACd;;;;;;;;;;;AAWC,MAAA,CAAA,CACF;;IAGD,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,KAAqB,KAAI;AAC5D,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,oBAAoB,EAAE;YAChD,aAAa,CAAC,IAAI,CAAC;AACnB,YAAA,gBAAgB,GAAG,IAAI,CAAC;QAC1B;AAEA,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,kBAAkB,EAAE;YAC9C,aAAa,CAAC,KAAK,CAAC;AACpB,YAAA,gBAAgB,GAAG,KAAK,CAAC;QAC3B;AACF,IAAA,CAAC,CAAC;IAEF,SAAS,aAAa,CAAC,KAAc,EAAA;AACnC,QAAA,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;IAEA,OAAO;QACL,UAAU;KACX;AACH,CAAC;;AC/DH;;AAEG;MAMU,WAAW,CAAA;AALxB,IAAA,WAAA,GAAA;AAME;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,MAAM,CAAU;AACxC,YAAA,KAAK,EAAE,aAAa;AACrB,SAAA,CAAC;AAEF;;AAEG;QACc,IAAA,CAAA,KAAK,GAAG,WAAW,CAAC;AACnC,YAAA,gBAAgB,EAAE,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3D,SAAA,CAAC;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;AAC5C,IAAA;8GAnBY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAFX,CAAC,oBAAoB,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAExB,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,SAAS,EAAE,CAAC,oBAAoB,EAAE,CAAC;AACpC,iBAAA;;;ACVD;;AAEG;;;;"}