ng-primitives 0.120.4 → 0.121.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/example-theme/index.css +9 -0
  2. package/fesm2022/ng-primitives-a11y.mjs +5 -5
  3. package/fesm2022/ng-primitives-a11y.mjs.map +1 -1
  4. package/fesm2022/ng-primitives-accordion.mjs +34 -51
  5. package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
  6. package/fesm2022/ng-primitives-ai.mjs +39 -52
  7. package/fesm2022/ng-primitives-ai.mjs.map +1 -1
  8. package/fesm2022/ng-primitives-autofill.mjs +4 -4
  9. package/fesm2022/ng-primitives-autofill.mjs.map +1 -1
  10. package/fesm2022/ng-primitives-avatar.mjs +14 -17
  11. package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
  12. package/fesm2022/ng-primitives-breadcrumbs.mjs +21 -21
  13. package/fesm2022/ng-primitives-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/ng-primitives-button.mjs +7 -9
  15. package/fesm2022/ng-primitives-button.mjs.map +1 -1
  16. package/fesm2022/ng-primitives-checkbox.mjs +15 -30
  17. package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
  18. package/fesm2022/ng-primitives-combobox.mjs +60 -92
  19. package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
  20. package/fesm2022/ng-primitives-common.mjs +4 -4
  21. package/fesm2022/ng-primitives-common.mjs.map +1 -1
  22. package/fesm2022/ng-primitives-context-menu.mjs +68 -121
  23. package/fesm2022/ng-primitives-context-menu.mjs.map +1 -1
  24. package/fesm2022/ng-primitives-date-picker.mjs +91 -115
  25. package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
  26. package/fesm2022/ng-primitives-dialog.mjs +35 -51
  27. package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
  28. package/fesm2022/ng-primitives-file-upload.mjs +26 -53
  29. package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
  30. package/fesm2022/ng-primitives-focus-trap.mjs +5 -8
  31. package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
  32. package/fesm2022/ng-primitives-form-field.mjs +39 -44
  33. package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
  34. package/fesm2022/ng-primitives-input-otp.mjs +30 -43
  35. package/fesm2022/ng-primitives-input-otp.mjs.map +1 -1
  36. package/fesm2022/ng-primitives-input.mjs +6 -8
  37. package/fesm2022/ng-primitives-input.mjs.map +1 -1
  38. package/fesm2022/ng-primitives-interactions.mjs +31 -48
  39. package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
  40. package/fesm2022/ng-primitives-internal.mjs +39 -35
  41. package/fesm2022/ng-primitives-internal.mjs.map +1 -1
  42. package/fesm2022/ng-primitives-listbox.mjs +34 -48
  43. package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
  44. package/fesm2022/ng-primitives-menu.mjs +85 -151
  45. package/fesm2022/ng-primitives-menu.mjs.map +1 -1
  46. package/fesm2022/ng-primitives-meter.mjs +25 -36
  47. package/fesm2022/ng-primitives-meter.mjs.map +1 -1
  48. package/fesm2022/ng-primitives-navigation-menu.mjs +60 -108
  49. package/fesm2022/ng-primitives-navigation-menu.mjs.map +1 -1
  50. package/fesm2022/ng-primitives-number-field.mjs +35 -59
  51. package/fesm2022/ng-primitives-number-field.mjs.map +1 -1
  52. package/fesm2022/ng-primitives-pagination.mjs +270 -297
  53. package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
  54. package/fesm2022/ng-primitives-popover.mjs +209 -223
  55. package/fesm2022/ng-primitives-popover.mjs.map +1 -1
  56. package/fesm2022/ng-primitives-portal.mjs +88 -59
  57. package/fesm2022/ng-primitives-portal.mjs.map +1 -1
  58. package/fesm2022/ng-primitives-progress.mjs +30 -41
  59. package/fesm2022/ng-primitives-progress.mjs.map +1 -1
  60. package/fesm2022/ng-primitives-radio.mjs +20 -30
  61. package/fesm2022/ng-primitives-radio.mjs.map +1 -1
  62. package/fesm2022/ng-primitives-resize.mjs +3 -3
  63. package/fesm2022/ng-primitives-resize.mjs.map +1 -1
  64. package/fesm2022/ng-primitives-roving-focus.mjs +20 -34
  65. package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
  66. package/fesm2022/ng-primitives-search.mjs +9 -9
  67. package/fesm2022/ng-primitives-search.mjs.map +1 -1
  68. package/fesm2022/ng-primitives-select.mjs +720 -620
  69. package/fesm2022/ng-primitives-select.mjs.map +1 -1
  70. package/fesm2022/ng-primitives-separator.mjs +4 -6
  71. package/fesm2022/ng-primitives-separator.mjs.map +1 -1
  72. package/fesm2022/ng-primitives-slider.mjs +63 -100
  73. package/fesm2022/ng-primitives-slider.mjs.map +1 -1
  74. package/fesm2022/ng-primitives-state.mjs +3 -3
  75. package/fesm2022/ng-primitives-state.mjs.map +1 -1
  76. package/fesm2022/ng-primitives-switch.mjs +15 -21
  77. package/fesm2022/ng-primitives-switch.mjs.map +1 -1
  78. package/fesm2022/ng-primitives-tabs.mjs +31 -41
  79. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  80. package/fesm2022/ng-primitives-textarea.mjs +5 -7
  81. package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
  82. package/fesm2022/ng-primitives-toast.mjs +30 -23
  83. package/fesm2022/ng-primitives-toast.mjs.map +1 -1
  84. package/fesm2022/ng-primitives-toggle-group.mjs +20 -36
  85. package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
  86. package/fesm2022/ng-primitives-toggle.mjs +10 -19
  87. package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
  88. package/fesm2022/ng-primitives-toolbar.mjs +4 -6
  89. package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
  90. package/fesm2022/ng-primitives-tooltip.mjs +401 -402
  91. package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
  92. package/fesm2022/ng-primitives-utils.mjs +5 -4
  93. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  94. package/package.json +56 -55
  95. package/schematics/ng-generate/templates/select/select.__fileSuffix@dasherize__.ts.template +48 -48
  96. package/{a11y/index.d.ts → types/ng-primitives-a11y.d.ts} +18 -24
  97. package/{accordion/index.d.ts → types/ng-primitives-accordion.d.ts} +85 -98
  98. package/{autofill/index.d.ts → types/ng-primitives-autofill.d.ts} +3 -10
  99. package/{avatar/index.d.ts → types/ng-primitives-avatar.d.ts} +7 -30
  100. package/{breadcrumbs/index.d.ts → types/ng-primitives-breadcrumbs.d.ts} +15 -70
  101. package/{button/index.d.ts → types/ng-primitives-button.d.ts} +23 -29
  102. package/{checkbox/index.d.ts → types/ng-primitives-checkbox.d.ts} +68 -74
  103. package/{combobox/index.d.ts → types/ng-primitives-combobox.d.ts} +35 -35
  104. package/{context-menu/index.d.ts → types/ng-primitives-context-menu.d.ts} +2 -1
  105. package/{date-picker/index.d.ts → types/ng-primitives-date-picker.d.ts} +2 -2
  106. package/{dialog/index.d.ts → types/ng-primitives-dialog.d.ts} +7 -2
  107. package/{file-upload/index.d.ts → types/ng-primitives-file-upload.d.ts} +5 -20
  108. package/{focus-trap/index.d.ts → types/ng-primitives-focus-trap.d.ts} +3 -10
  109. package/{form-field/index.d.ts → types/ng-primitives-form-field.d.ts} +9 -40
  110. package/{input/index.d.ts → types/ng-primitives-input.d.ts} +3 -10
  111. package/{menu/index.d.ts → types/ng-primitives-menu.d.ts} +17 -63
  112. package/{navigation-menu/index.d.ts → types/ng-primitives-navigation-menu.d.ts} +15 -70
  113. package/{number-field/index.d.ts → types/ng-primitives-number-field.d.ts} +80 -110
  114. package/types/ng-primitives-pagination.d.ts +502 -0
  115. package/{popover/index.d.ts → types/ng-primitives-popover.d.ts} +244 -57
  116. package/{portal/index.d.ts → types/ng-primitives-portal.d.ts} +22 -13
  117. package/{progress/index.d.ts → types/ng-primitives-progress.d.ts} +3 -10
  118. package/{roving-focus/index.d.ts → types/ng-primitives-roving-focus.d.ts} +65 -79
  119. package/types/ng-primitives-select.d.ts +687 -0
  120. package/{separator/index.d.ts → types/ng-primitives-separator.d.ts} +3 -10
  121. package/{slider/index.d.ts → types/ng-primitives-slider.d.ts} +76 -138
  122. package/{state/index.d.ts → types/ng-primitives-state.d.ts} +26 -21
  123. package/{switch/index.d.ts → types/ng-primitives-switch.d.ts} +50 -64
  124. package/{tabs/index.d.ts → types/ng-primitives-tabs.d.ts} +9 -40
  125. package/{textarea/index.d.ts → types/ng-primitives-textarea.d.ts} +3 -10
  126. package/{toast/index.d.ts → types/ng-primitives-toast.d.ts} +13 -1
  127. package/{toggle-group/index.d.ts → types/ng-primitives-toggle-group.d.ts} +75 -89
  128. package/{toggle/index.d.ts → types/ng-primitives-toggle.d.ts} +50 -56
  129. package/{toolbar/index.d.ts → types/ng-primitives-toolbar.d.ts} +3 -10
  130. package/types/ng-primitives-tooltip.d.ts +691 -0
  131. package/pagination/index.d.ts +0 -211
  132. package/select/index.d.ts +0 -396
  133. package/tooltip/index.d.ts +0 -384
  134. /package/{ai/index.d.ts → types/ng-primitives-ai.d.ts} +0 -0
  135. /package/{common/index.d.ts → types/ng-primitives-common.d.ts} +0 -0
  136. /package/{date-time-luxon/index.d.ts → types/ng-primitives-date-time-luxon.d.ts} +0 -0
  137. /package/{date-time/index.d.ts → types/ng-primitives-date-time.d.ts} +0 -0
  138. /package/{input-otp/index.d.ts → types/ng-primitives-input-otp.d.ts} +0 -0
  139. /package/{interactions/index.d.ts → types/ng-primitives-interactions.d.ts} +0 -0
  140. /package/{internal/index.d.ts → types/ng-primitives-internal.d.ts} +0 -0
  141. /package/{listbox/index.d.ts → types/ng-primitives-listbox.d.ts} +0 -0
  142. /package/{meter/index.d.ts → types/ng-primitives-meter.d.ts} +0 -0
  143. /package/{radio/index.d.ts → types/ng-primitives-radio.d.ts} +0 -0
  144. /package/{resize/index.d.ts → types/ng-primitives-resize.d.ts} +0 -0
  145. /package/{search/index.d.ts → types/ng-primitives-search.d.ts} +0 -0
  146. /package/{utils/index.d.ts → types/ng-primitives-utils.d.ts} +0 -0
  147. /package/{index.d.ts → types/ng-primitives.d.ts} +0 -0
@@ -97,10 +97,10 @@ class NgpPromptComposerInput {
97
97
  }
98
98
  this.composer().submitPrompt();
99
99
  }
100
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPromptComposerInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
101
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpPromptComposerInput, isStandalone: true, selector: "input[ngpPromptComposerInput], textarea[ngpPromptComposerInput]", host: { listeners: { "keydown.enter": "onEnterKey($event)" } }, providers: [providePromptComposerInputState()], exportAs: ["ngpPromptComposerInput"], ngImport: i0 }); }
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpPromptComposerInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
101
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpPromptComposerInput, isStandalone: true, selector: "input[ngpPromptComposerInput], textarea[ngpPromptComposerInput]", host: { listeners: { "keydown.enter": "onEnterKey($event)" } }, providers: [providePromptComposerInputState()], exportAs: ["ngpPromptComposerInput"], ngImport: i0 }); }
102
102
  }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPromptComposerInput, decorators: [{
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpPromptComposerInput, decorators: [{
104
104
  type: Directive,
105
105
  args: [{
106
106
  selector: 'input[ngpPromptComposerInput], textarea[ngpPromptComposerInput]',
@@ -133,11 +133,9 @@ class NgpPromptComposerSubmit {
133
133
  constructor() {
134
134
  this.composer = injectPromptComposerState();
135
135
  /** Whether the submit button should be disabled */
136
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{
137
- transform: booleanAttribute,
138
- }]));
136
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
139
137
  /** Whether dictation is currently active */
140
- this.isDictating = computed(() => this.composer().isDictating(), ...(ngDevMode ? [{ debugName: "isDictating" }] : []));
138
+ this.isDictating = computed(() => this.composer().isDictating(), ...(ngDevMode ? [{ debugName: "isDictating" }] : /* istanbul ignore next */ []));
141
139
  /** The state of the prompt composer submit. */
142
140
  this.state = promptComposerSubmitState(this);
143
141
  ngpButton({
@@ -147,10 +145,10 @@ class NgpPromptComposerSubmit {
147
145
  onClick() {
148
146
  this.composer().submitPrompt();
149
147
  }
150
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPromptComposerSubmit, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
151
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpPromptComposerSubmit, isStandalone: true, selector: "button[ngpPromptComposerSubmit]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" }, properties: { "attr.data-prompt": "composer().hasPrompt() ? \"\" : null", "attr.data-dictating": "isDictating() ? \"\" : null", "attr.data-dictation-supported": "composer().dictationSupported ? \"\" : null" } }, providers: [providePromptComposerSubmitState()], exportAs: ["ngpPromptComposerSubmit"], ngImport: i0 }); }
148
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpPromptComposerSubmit, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
149
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpPromptComposerSubmit, isStandalone: true, selector: "button[ngpPromptComposerSubmit]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" }, properties: { "attr.data-prompt": "composer().hasPrompt() ? \"\" : null", "attr.data-dictating": "isDictating() ? \"\" : null", "attr.data-dictation-supported": "composer().dictationSupported ? \"\" : null" } }, providers: [providePromptComposerSubmitState()], exportAs: ["ngpPromptComposerSubmit"], ngImport: i0 }); }
152
150
  }
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPromptComposerSubmit, decorators: [{
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpPromptComposerSubmit, decorators: [{
154
152
  type: Directive,
155
153
  args: [{
156
154
  selector: 'button[ngpPromptComposerSubmit]',
@@ -174,11 +172,11 @@ class NgpPromptComposer {
174
172
  /** Emits whenever the user submits the prompt. */
175
173
  this.submit = output({ alias: 'ngpPromptComposerSubmit' });
176
174
  /** @internal Store the current prompt text. */
177
- this.prompt = signal('', ...(ngDevMode ? [{ debugName: "prompt" }] : []));
175
+ this.prompt = signal('', ...(ngDevMode ? [{ debugName: "prompt" }] : /* istanbul ignore next */ []));
178
176
  /** @internal Track whether the prompt is currently being dictated */
179
- this.isDictating = signal(false, ...(ngDevMode ? [{ debugName: "isDictating" }] : []));
177
+ this.isDictating = signal(false, ...(ngDevMode ? [{ debugName: "isDictating" }] : /* istanbul ignore next */ []));
180
178
  /** @internal Determine whether the prompt input has content */
181
- this.hasPrompt = computed(() => this.prompt().trim().length > 0, ...(ngDevMode ? [{ debugName: "hasPrompt" }] : []));
179
+ this.hasPrompt = computed(() => this.prompt().trim().length > 0, ...(ngDevMode ? [{ debugName: "hasPrompt" }] : /* istanbul ignore next */ []));
182
180
  /** Whether dictation is supported by the browser */
183
181
  this.dictationSupported = !!(globalThis.SpeechRecognition || globalThis.webkitSpeechRecognition);
184
182
  /** The state of the prompt composer. */
@@ -195,10 +193,10 @@ class NgpPromptComposer {
195
193
  this.thread().scrollToBottom('smooth');
196
194
  }
197
195
  }
198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPromptComposer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
199
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpPromptComposer, isStandalone: true, selector: "[ngpPromptComposer]", outputs: { submit: "ngpPromptComposerSubmit" }, host: { properties: { "attr.data-prompt": "hasPrompt() ? \"\" : null", "attr.data-dictating": "isDictating() ? \"\" : null", "attr.data-dictation-supported": "dictationSupported ? \"\" : null" } }, providers: [providePromptComposerState()], exportAs: ["ngpPromptComposer"], ngImport: i0 }); }
196
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpPromptComposer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
197
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpPromptComposer, isStandalone: true, selector: "[ngpPromptComposer]", outputs: { submit: "ngpPromptComposerSubmit" }, host: { properties: { "attr.data-prompt": "hasPrompt() ? \"\" : null", "attr.data-dictating": "isDictating() ? \"\" : null", "attr.data-dictation-supported": "dictationSupported ? \"\" : null" } }, providers: [providePromptComposerState()], exportAs: ["ngpPromptComposer"], ngImport: i0 }); }
200
198
  }
201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPromptComposer, decorators: [{
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpPromptComposer, decorators: [{
202
200
  type: Directive,
203
201
  args: [{
204
202
  selector: '[ngpPromptComposer]',
@@ -253,10 +251,10 @@ class NgpThreadMessage {
253
251
  this.thread().registerMessage(this);
254
252
  this.destroyRef.onDestroy(() => this.thread().unregisterMessage(this));
255
253
  }
256
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpThreadMessage, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
257
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpThreadMessage, isStandalone: true, selector: "[ngpThreadMessage]", providers: [provideThreadMessageState()], exportAs: ["ngpThreadMessage"], ngImport: i0 }); }
254
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpThreadMessage, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
255
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpThreadMessage, isStandalone: true, selector: "[ngpThreadMessage]", providers: [provideThreadMessageState()], exportAs: ["ngpThreadMessage"], ngImport: i0 }); }
258
256
  }
259
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpThreadMessage, decorators: [{
257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpThreadMessage, decorators: [{
260
258
  type: Directive,
261
259
  args: [{
262
260
  selector: '[ngpThreadMessage]',
@@ -294,10 +292,10 @@ class NgpThread {
294
292
  setPrompt(value) {
295
293
  this.requestPrompt.next(value);
296
294
  }
297
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpThread, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
298
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpThread, isStandalone: true, selector: "[ngpThread]", providers: [provideThreadState()], exportAs: ["ngpThread"], ngImport: i0 }); }
295
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpThread, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
296
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpThread, isStandalone: true, selector: "[ngpThread]", providers: [provideThreadState()], exportAs: ["ngpThread"], ngImport: i0 }); }
299
297
  }
300
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpThread, decorators: [{
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpThread, decorators: [{
301
299
  type: Directive,
302
300
  args: [{
303
301
  selector: '[ngpThread]',
@@ -327,13 +325,11 @@ class NgpPromptComposerDictation {
327
325
  constructor() {
328
326
  this.composer = injectPromptComposerState();
329
327
  this.recognition = null;
330
- this.basePrompt = signal('', ...(ngDevMode ? [{ debugName: "basePrompt" }] : [])); // Store the prompt before dictation started
328
+ this.basePrompt = signal('', ...(ngDevMode ? [{ debugName: "basePrompt" }] : /* istanbul ignore next */ [])); // Store the prompt before dictation started
331
329
  /** Whether the submit button should be disabled. */
332
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{
333
- transform: booleanAttribute,
334
- }]));
330
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
335
331
  /** Whether dictation is currently active */
336
- this.isDictating = computed(() => this.composer().isDictating(), ...(ngDevMode ? [{ debugName: "isDictating" }] : []));
332
+ this.isDictating = computed(() => this.composer().isDictating(), ...(ngDevMode ? [{ debugName: "isDictating" }] : /* istanbul ignore next */ []));
337
333
  /** The state of the prompt composer. */
338
334
  this.state = promptComposerDictationState(this);
339
335
  ngpButton({
@@ -416,10 +412,10 @@ class NgpPromptComposerDictation {
416
412
  this.recognition.stop();
417
413
  }
418
414
  }
419
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPromptComposerDictation, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
420
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpPromptComposerDictation, isStandalone: true, selector: "button[ngpPromptComposerDictation]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()", "document:keydown": "onKeydown($event)" }, properties: { "attr.data-dictating": "isDictating() ? \"\" : null", "attr.data-dictation-supported": "composer().dictationSupported ? \"\" : null", "attr.data-prompt": "composer().hasPrompt() ? \"\" : null" } }, providers: [providePromptComposerDictationState()], exportAs: ["ngpPromptComposerDictation"], ngImport: i0 }); }
415
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpPromptComposerDictation, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
416
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpPromptComposerDictation, isStandalone: true, selector: "button[ngpPromptComposerDictation]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()", "document:keydown": "onKeydown($event)" }, properties: { "attr.data-dictating": "isDictating() ? \"\" : null", "attr.data-dictation-supported": "composer().dictationSupported ? \"\" : null", "attr.data-prompt": "composer().hasPrompt() ? \"\" : null" } }, providers: [providePromptComposerDictationState()], exportAs: ["ngpPromptComposerDictation"], ngImport: i0 }); }
421
417
  }
422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPromptComposerDictation, decorators: [{
418
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpPromptComposerDictation, decorators: [{
423
419
  type: Directive,
424
420
  args: [{
425
421
  selector: 'button[ngpPromptComposerDictation]',
@@ -469,19 +465,13 @@ class NgpThreadViewport {
469
465
  *
470
466
  * @default 70
471
467
  */
472
- this.threshold = input(70, ...(ngDevMode ? [{ debugName: "threshold", alias: 'ngpThreadViewportThreshold',
473
- transform: numberAttribute }] : [{
474
- alias: 'ngpThreadViewportThreshold',
475
- transform: numberAttribute,
476
- }]));
468
+ this.threshold = input(70, { ...(ngDevMode ? { debugName: "threshold" } : /* istanbul ignore next */ {}), alias: 'ngpThreadViewportThreshold',
469
+ transform: numberAttribute });
477
470
  /**
478
471
  * Whether the thread should automatically scroll to the bottom when new content is added.
479
472
  */
480
- this.autoScroll = input(true, ...(ngDevMode ? [{ debugName: "autoScroll", alias: 'ngpThreadViewportAutoScroll',
481
- transform: booleanAttribute }] : [{
482
- alias: 'ngpThreadViewportAutoScroll',
483
- transform: booleanAttribute,
484
- }]));
473
+ this.autoScroll = input(true, { ...(ngDevMode ? { debugName: "autoScroll" } : /* istanbul ignore next */ {}), alias: 'ngpThreadViewportAutoScroll',
474
+ transform: booleanAttribute });
485
475
  /** Store the last known scroll position */
486
476
  this.lastScrollTop = 0;
487
477
  /** Determine if we are at the bottom of the scrollable container (within the threshold) */
@@ -522,10 +512,10 @@ class NgpThreadViewport {
522
512
  }
523
513
  this.lastScrollTop = element.scrollTop;
524
514
  }
525
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpThreadViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
526
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpThreadViewport, isStandalone: true, selector: "[ngpThreadViewport]", inputs: { threshold: { classPropertyName: "threshold", publicName: "ngpThreadViewportThreshold", isSignal: true, isRequired: false, transformFunction: null }, autoScroll: { classPropertyName: "autoScroll", publicName: "ngpThreadViewportAutoScroll", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "scroll": "onScroll()" } }, providers: [provideThreadViewportState()], exportAs: ["ngpThreadViewport"], ngImport: i0 }); }
515
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpThreadViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
516
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpThreadViewport, isStandalone: true, selector: "[ngpThreadViewport]", inputs: { threshold: { classPropertyName: "threshold", publicName: "ngpThreadViewportThreshold", isSignal: true, isRequired: false, transformFunction: null }, autoScroll: { classPropertyName: "autoScroll", publicName: "ngpThreadViewportAutoScroll", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "scroll": "onScroll()" } }, providers: [provideThreadViewportState()], exportAs: ["ngpThreadViewport"], ngImport: i0 }); }
527
517
  }
528
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpThreadViewport, decorators: [{
518
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpThreadViewport, decorators: [{
529
519
  type: Directive,
530
520
  args: [{
531
521
  selector: '[ngpThreadViewport]',
@@ -558,13 +548,10 @@ class NgpThreadSuggestion {
558
548
  constructor() {
559
549
  this.thread = injectThreadState();
560
550
  /** The suggested text to display in the input field. */
561
- this.suggestion = input('', ...(ngDevMode ? [{ debugName: "suggestion", alias: 'ngpThreadSuggestion' }] : [{ alias: 'ngpThreadSuggestion' }]));
551
+ this.suggestion = input('', { ...(ngDevMode ? { debugName: "suggestion" } : /* istanbul ignore next */ {}), alias: 'ngpThreadSuggestion' });
562
552
  /** Whether the suggestion should populate the prompt when clicked. */
563
- this.setPromptOnClick = input(true, ...(ngDevMode ? [{ debugName: "setPromptOnClick", alias: 'ngpThreadSuggestionSetPromptOnClick',
564
- transform: booleanAttribute }] : [{
565
- alias: 'ngpThreadSuggestionSetPromptOnClick',
566
- transform: booleanAttribute,
567
- }]));
553
+ this.setPromptOnClick = input(true, { ...(ngDevMode ? { debugName: "setPromptOnClick" } : /* istanbul ignore next */ {}), alias: 'ngpThreadSuggestionSetPromptOnClick',
554
+ transform: booleanAttribute });
568
555
  /** The state of the thread suggestion. */
569
556
  this.state = threadSuggestionState(this);
570
557
  }
@@ -573,10 +560,10 @@ class NgpThreadSuggestion {
573
560
  this.thread().setPrompt(this.state.suggestion());
574
561
  }
575
562
  }
576
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpThreadSuggestion, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
577
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpThreadSuggestion, isStandalone: true, selector: "button[ngpThreadSuggestion]", inputs: { suggestion: { classPropertyName: "suggestion", publicName: "ngpThreadSuggestion", isSignal: true, isRequired: false, transformFunction: null }, setPromptOnClick: { classPropertyName: "setPromptOnClick", publicName: "ngpThreadSuggestionSetPromptOnClick", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "submitSuggestion()" } }, providers: [provideThreadSuggestionState()], exportAs: ["ngpThreadSuggestion"], ngImport: i0 }); }
563
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpThreadSuggestion, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
564
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpThreadSuggestion, isStandalone: true, selector: "button[ngpThreadSuggestion]", inputs: { suggestion: { classPropertyName: "suggestion", publicName: "ngpThreadSuggestion", isSignal: true, isRequired: false, transformFunction: null }, setPromptOnClick: { classPropertyName: "setPromptOnClick", publicName: "ngpThreadSuggestionSetPromptOnClick", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "submitSuggestion()" } }, providers: [provideThreadSuggestionState()], exportAs: ["ngpThreadSuggestion"], ngImport: i0 }); }
578
565
  }
579
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpThreadSuggestion, decorators: [{
566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpThreadSuggestion, decorators: [{
580
567
  type: Directive,
581
568
  args: [{
582
569
  selector: 'button[ngpThreadSuggestion]',
@@ -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: 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
+ {"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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"}
@@ -6,7 +6,7 @@ import { createPrimitive, dataBinding, listener } from 'ng-primitives/state';
6
6
  const [NgpAutofillStateToken, ngpAutofill, injectAutofillState, provideAutofillState] = createPrimitive('NgpAutofill', ({ onAutofillChange }) => {
7
7
  const element = injectElementRef();
8
8
  const styleInjector = injectStyleInjector();
9
- const autofilled = signal(false, ...(ngDevMode ? [{ debugName: "autofilled" }] : []));
9
+ const autofilled = signal(false, ...(ngDevMode ? [{ debugName: "autofilled" }] : /* istanbul ignore next */ []));
10
10
  // Host bindings
11
11
  dataBinding(element, 'data-autofill', autofilled);
12
12
  // Inject the autofill detection styles
@@ -65,10 +65,10 @@ class NgpAutofill {
65
65
  */
66
66
  this.autofilled = this.state.autofilled;
67
67
  }
68
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAutofill, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
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 }); }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpAutofill, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
69
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpAutofill, isStandalone: true, selector: "[ngpAutofill]", outputs: { autofillChange: "ngpAutofill" }, providers: [provideAutofillState()], exportAs: ["ngpAutofill"], ngImport: i0 }); }
70
70
  }
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAutofill, decorators: [{
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpAutofill, decorators: [{
72
72
  type: Directive,
73
73
  args: [{
74
74
  selector: '[ngpAutofill]',
@@ -1 +1 @@
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 } satisfies NgpAutofillState;\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;KACgB;AAC9B,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;;;;"}
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 } satisfies NgpAutofillState;\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,iFAAC;;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;KACgB;AAC9B,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;+GAnBY,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,SAAA,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;;4FAExB,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;;;;"}
@@ -32,7 +32,7 @@ function injectAvatarConfig() {
32
32
 
33
33
  const [NgpAvatarStateToken, ngpAvatar, injectAvatarState, provideAvatarState] = createPrimitive('NgpAvatar', ({}) => {
34
34
  const element = injectElementRef();
35
- const status = signal(NgpAvatarStatus.Idle, ...(ngDevMode ? [{ debugName: "status" }] : []));
35
+ const status = signal(NgpAvatarStatus.Idle, ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
36
36
  // Host bindings
37
37
  dataBinding(element, 'data-status', status);
38
38
  function setStatus(newStatus) {
@@ -55,8 +55,8 @@ const [NgpAvatarFallbackStateToken, ngpAvatarFallback, injectAvatarFallbackState
55
55
  const avatar = injectAvatarState();
56
56
  const element = injectElementRef();
57
57
  const disposables = injectDisposables();
58
- const delayElapsed = signal(false, ...(ngDevMode ? [{ debugName: "delayElapsed" }] : []));
59
- const visible = computed(() => delayElapsed() && avatar().status() !== NgpAvatarStatus.Loaded, ...(ngDevMode ? [{ debugName: "visible" }] : []));
58
+ const delayElapsed = signal(false, ...(ngDevMode ? [{ debugName: "delayElapsed" }] : /* istanbul ignore next */ []));
59
+ const visible = computed(() => delayElapsed() && avatar().status() !== NgpAvatarStatus.Loaded, ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
60
60
  disposables.setTimeout(() => delayElapsed.set(true), delay());
61
61
  styleBinding(element, 'display', () => (visible() ? null : 'none'));
62
62
  return {};
@@ -75,17 +75,14 @@ class NgpAvatarFallback {
75
75
  * Define a delay before the fallback is shown. This is useful to only show the fallback for those with slower connections.
76
76
  * @default 0
77
77
  */
78
- this.delay = input(this.config.delay, ...(ngDevMode ? [{ debugName: "delay", alias: 'ngpAvatarFallbackDelay',
79
- transform: numberAttribute }] : [{
80
- alias: 'ngpAvatarFallbackDelay',
81
- transform: numberAttribute,
82
- }]));
78
+ this.delay = input(this.config.delay, { ...(ngDevMode ? { debugName: "delay" } : /* istanbul ignore next */ {}), alias: 'ngpAvatarFallbackDelay',
79
+ transform: numberAttribute });
83
80
  ngpAvatarFallback({ delay: this.delay });
84
81
  }
85
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAvatarFallback, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
86
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpAvatarFallback, isStandalone: true, selector: "[ngpAvatarFallback]", inputs: { delay: { classPropertyName: "delay", publicName: "ngpAvatarFallbackDelay", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ngpAvatarFallback"], ngImport: i0 }); }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpAvatarFallback, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
83
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpAvatarFallback, isStandalone: true, selector: "[ngpAvatarFallback]", inputs: { delay: { classPropertyName: "delay", publicName: "ngpAvatarFallbackDelay", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ngpAvatarFallback"], ngImport: i0 }); }
87
84
  }
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAvatarFallback, decorators: [{
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpAvatarFallback, decorators: [{
89
86
  type: Directive,
90
87
  args: [{
91
88
  selector: '[ngpAvatarFallback]',
@@ -124,10 +121,10 @@ class NgpAvatarImage {
124
121
  constructor() {
125
122
  ngpAvatarImage({});
126
123
  }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAvatarImage, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
128
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpAvatarImage, isStandalone: true, selector: "img[ngpAvatarImage]", exportAs: ["ngpAvatarImage"], ngImport: i0 }); }
124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpAvatarImage, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
125
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpAvatarImage, isStandalone: true, selector: "img[ngpAvatarImage]", exportAs: ["ngpAvatarImage"], ngImport: i0 }); }
129
126
  }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAvatarImage, decorators: [{
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpAvatarImage, decorators: [{
131
128
  type: Directive,
132
129
  args: [{
133
130
  selector: 'img[ngpAvatarImage]',
@@ -153,10 +150,10 @@ class NgpAvatar {
153
150
  setStatus(status) {
154
151
  this.state.setStatus(status);
155
152
  }
156
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAvatar, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
157
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpAvatar, isStandalone: true, selector: "[ngpAvatar]", providers: [provideAvatarState()], exportAs: ["ngpAvatar"], ngImport: i0 }); }
153
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpAvatar, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
154
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpAvatar, isStandalone: true, selector: "[ngpAvatar]", providers: [provideAvatarState()], exportAs: ["ngpAvatar"], ngImport: i0 }); }
158
155
  }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpAvatar, decorators: [{
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpAvatar, decorators: [{
160
157
  type: Directive,
161
158
  args: [{
162
159
  selector: '[ngpAvatar]',