photon-grid-angular 2.0.0 → 2.0.4

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.
package/README.md CHANGED
@@ -243,7 +243,10 @@ MIT License
243
243
 
244
244
  - **GitHub** — https://github.com/abdulwahid-csit/photon-grid
245
245
  - **Issues** — https://github.com/abdulwahid-csit/photon-grid/issues
246
- - **NPM** — https://www.npmjs.com/package/photon-grid-angular
246
+ - **NPM Angular** — https://www.npmjs.com/package/photon-grid-angular
247
+ - **NPM React** — https://www.npmjs.com/package/photon-grid-react
248
+ - **NPM Vue** — https://www.npmjs.com/package/photon-grid-vue
249
+ - **NPM Core** — https://www.npmjs.com/package/photon-grid-core
247
250
 
248
251
  ---
249
252
 
@@ -5,4 +5,4 @@ export function isComponentRendererSpec(value) {
5
5
  export function isTemplateRendererSpec(value) {
6
6
  return !!value && typeof value === 'object' && value.kind === 'template';
7
7
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1yZW5kZXJlci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJyYXJ5L2FuZ3VsYXItcmVuZGVyZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0ZBLDZFQUE2RTtBQUM3RSxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLEtBQWM7SUFFZCxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFLLEtBQTRCLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQztBQUN0RyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNsQyxLQUFjO0lBRWQsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSyxLQUE0QixDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7QUFDckcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUge1xuICAgIENvbHVtbkRlZiBhcyBjb3JlQ29sdW1uRGVmLFxuICAgIERpc3BsYXlSZW5kZXJlclBhcmFtcyxcbiAgICBFZGl0b3JSZW5kZXJlclBhcmFtcyxcbiAgICBGaWx0ZXJSZW5kZXJlclBhcmFtcyxcbiAgICBHcm91cFJlbmRlcmVyUGFyYW1zLFxuICAgIEhlYWRlclJlbmRlcmVyUGFyYW1zLFxuICAgIE9wdGlvblJlbmRlcmVyUGFyYW1zLFxuICAgIFJlbmRlcmVyT3V0cHV0LFxuICAgIFN1bW1hcnlSZW5kZXJlclBhcmFtcyxcbiAgICBUb29sdGlwUmVuZGVyZXJQYXJhbXMsXG59IGZyb20gJ3Bob3Rvbi1ncmlkLWNvcmUnO1xuIFxuLyoqXG4gKiBSZW5kZXJzIGBwYXJhbXNgIHRocm91Z2ggYSBgQENvbXBvbmVudGAuXG4gKlxuICogQSAqKm5ldyoqIGNvbXBvbmVudCBpbnN0YW5jZSBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWUgdGhlIGNvcmUgaW52b2tlcyB0aGVcbiAqIHJlbmRlcmVyIChpdCBoYXMgbm8gY29uY2VwdCBvZiBcInVwZGF0ZVwiLCBvbmx5IFwicHJvZHVjZSBvdXRwdXQgZm9yIHRoZXNlXG4gKiBwYXJhbXNcIikuIGBpbnB1dHNgIGlzIHJlLWV2YWx1YXRlZCBvbiBldmVyeSBtb3VudCBhbmQgYXBwbGllZCB2aWFcbiAqIGBDb21wb25lbnRSZWYuc2V0SW5wdXRgIGJlZm9yZSB0aGUgZmlyc3QgY2hhbmdlLWRldGVjdGlvbiBwYXNzLCBzbyB0aGVcbiAqIGNvbXBvbmVudCBzZWVzIHRoZSBjdXJyZW50IHBhcmFtcyBhcyBpdHMgaW5pdGlhbCBgQElucHV0KClgcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRSZW5kZXJlclNwZWM8VFBhcmFtcywgVENvbXBvbmVudCA9IHVua25vd24+IHtcbiAgICByZWFkb25seSBraW5kOiAnY29tcG9uZW50JztcbiAgICByZWFkb25seSBjb21wb25lbnQ6IFR5cGU8VENvbXBvbmVudD47XG4gICAgLyoqIE1hcHMgcmVuZGVyZXIgcGFyYW1zIHRvIHRoZSBjb21wb25lbnQncyBgQElucHV0KClgIGJhZy4gKi9cbiAgICByZWFkb25seSBpbnB1dHM/OiAocGFyYW1zOiBUUGFyYW1zKSA9PiBQYXJ0aWFsPFRDb21wb25lbnQ+ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKiBDb250ZXh0IGhhbmRlZCB0byBhbiBgPG5nLXRlbXBsYXRlPmAgdXNlZCBhcyBhIHJlbmRlcmVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJlckNvbnRleHQ8VFBhcmFtcz4ge1xuICAgIC8qKiBFbmFibGVzIGBsZXQteGAgLyBpbXBsaWNpdCBgbGV0LXBhcmFtc2AgdGVtcGxhdGUgc3ludGF4LiAqL1xuICAgICRpbXBsaWNpdDogVFBhcmFtcztcbiAgICBwYXJhbXM6IFRQYXJhbXM7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGBwYXJhbXNgIHRocm91Z2ggYW4gYDxuZy10ZW1wbGF0ZT5gIChvYnRhaW5lZCB2aWEgYEBWaWV3Q2hpbGRgKS5cbiAqXG4gKiBQcmVmZXIgYSBzaW5nbGUgcm9vdCBlbGVtZW50IGluIHRoZSB0ZW1wbGF0ZSBmb3IgYGVkaXRvcmAgLyBgZmlsdGVyYFxuICogc2xvdHM6IHRoZSBjb3JlIHRyZWF0cyB0aGUgcmV0dXJuZWQgYEhUTUxFbGVtZW50YCBhcyB0aGUgaW50ZXJhY3RpdmVcbiAqIGNvbnRyb2wgaXRzZWxmIChlLmcuIGl0IG1heSBjYWxsIGAuZm9jdXMoKWAgb24gaXQpLCBhbmQgYSBtdWx0aS1yb290XG4gKiB0ZW1wbGF0ZSBnZXRzIHdyYXBwZWQgaW4gYSBzeW50aGV0aWMgYDxkaXY+YCBob3N0IHRoYXQgYnJlYWtzIHRoYXRcbiAqIGFzc3VtcHRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVSZW5kZXJlclNwZWM8VFBhcmFtcz4ge1xuICAgIHJlYWRvbmx5IGtpbmQ6ICd0ZW1wbGF0ZSc7XG4gICAgcmVhZG9ubHkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPFJlbmRlcmVyQ29udGV4dDxUUGFyYW1zPj47XG4gICAgcmVhZG9ubHkgY29udGV4dD86IChwYXJhbXM6IFRQYXJhbXMpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEEgcmVuZGVyZXIgc2xvdCBhY2NlcHRzIGVpdGhlcjpcbiAqIC0gYSBkZWNsYXJhdGl2ZSBzcGVjIChgeyBraW5kOiAnY29tcG9uZW50JyB8ICd0ZW1wbGF0ZScsIC4uLiB9YCksIG9yXG4gKiAtIGEgcGxhaW4gZnVuY3Rpb24sIGZvciBjb25zdW1lcnMgd2hvIHdhbnQgdG8ga2VlcCBwcm9kdWNpbmcgcmF3XG4gKiAgIGBIVE1MRWxlbWVudGAvYHN0cmluZ2Agb3V0cHV0IChpZGVudGljYWwgdG8gdGhlIGZyYW1ld29yay1hZ25vc3RpYyBjb3JlIEFQSSkuXG4gKi9cbmV4cG9ydCB0eXBlIENlbGxSZW5kZXJlcjxUUGFyYW1zLCBUT3V0cHV0PiA9XG4gICAgfCBDb21wb25lbnRSZW5kZXJlclNwZWM8VFBhcmFtcz5cbiAgICB8IFRlbXBsYXRlUmVuZGVyZXJTcGVjPFRQYXJhbXM+XG4gICAgfCBUeXBlPHVua25vd24+XG4gICAgfCBUZW1wbGF0ZVJlZjxSZW5kZXJlckNvbnRleHQ8VFBhcmFtcz4+XG4gICAgfCAoKHBhcmFtczogVFBhcmFtcykgPT4gVE91dHB1dCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uUmVuZGVyZXJNYXAge1xuICAgIGRpc3BsYXk/OiBDZWxsUmVuZGVyZXI8RGlzcGxheVJlbmRlcmVyUGFyYW1zLCBSZW5kZXJlck91dHB1dD47XG4gICAgZWRpdG9yPzogQ2VsbFJlbmRlcmVyPEVkaXRvclJlbmRlcmVyUGFyYW1zLCBIVE1MRWxlbWVudD47XG4gICAgb3B0aW9uPzogVHlwZTxhbnk+IHwgVGVtcGxhdGVSZWY8YW55PiB8ICgocGFyYW1zOiBPcHRpb25SZW5kZXJlclBhcmFtcykgPT4gSFRNTEVsZW1lbnQpO1xuICAgIGZpbHRlcj86IENlbGxSZW5kZXJlcjxGaWx0ZXJSZW5kZXJlclBhcmFtcywgSFRNTEVsZW1lbnQ+O1xuICAgIHRvb2x0aXA/OiBDZWxsUmVuZGVyZXI8VG9vbHRpcFJlbmRlcmVyUGFyYW1zLCBSZW5kZXJlck91dHB1dD47XG4gICAgZ3JvdXA/OiBDZWxsUmVuZGVyZXI8R3JvdXBSZW5kZXJlclBhcmFtcywgUmVuZGVyZXJPdXRwdXQ+O1xuICAgIGhlYWRlcj86IENlbGxSZW5kZXJlcjxIZWFkZXJSZW5kZXJlclBhcmFtcywgUmVuZGVyZXJPdXRwdXQ+O1xuICAgIHN1bW1hcnk/OiBDZWxsUmVuZGVyZXI8U3VtbWFyeVJlbmRlcmVyUGFyYW1zLCBSZW5kZXJlck91dHB1dD47XG59XG5cbi8qKlxuICogRHJvcC1pbiByZXBsYWNlbWVudCBmb3IgYENvbHVtbkRlZmA6IGlkZW50aWNhbCBzaGFwZSwgZXhjZXB0IGByZW5kZXJlcmBcbiAqIChhbmQgYHJlbmRlcmVyYCBvbiBhbnkgbmVzdGVkIGBjaGlsZHJlbmApIGFjY2VwdHMgdGhlIGRlY2xhcmF0aXZlXG4gKiBjb21wb25lbnQvdGVtcGxhdGUgc3BlY3MgYWJvdmUgaW4gYWRkaXRpb24gdG8gcGxhaW4gZnVuY3Rpb25zLlxuICovXG5leHBvcnQgdHlwZSBDb2x1bW5EZWYgPSBPbWl0PGNvcmVDb2x1bW5EZWYsICdyZW5kZXJlcicgfCAnY2hpbGRyZW4nPiAmIHtcbiAgICByZW5kZXJlcj86IENvbHVtblJlbmRlcmVyTWFwO1xuICAgIGNoaWxkcmVuPzogQ29sdW1uRGVmW107XG59O1xuXG4vKiogTmFycm93aW5nIGhlbHBlcnMgdXNlZCBieSB0aGUgYWRhcHRlciAoYW5kIHVzYWJsZSBieSBjb25zdW1lcnMvdGVzdHMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50UmVuZGVyZXJTcGVjKFxuICAgIHZhbHVlOiB1bmtub3duLFxuKTogdmFsdWUgaXMgQ29tcG9uZW50UmVuZGVyZXJTcGVjPHVua25vd24+IHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSBhcyB7IGtpbmQ/OiB1bmtub3duIH0pLmtpbmQgPT09ICdjb21wb25lbnQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZVJlbmRlcmVyU3BlYyhcbiAgICB2YWx1ZTogdW5rbm93bixcbik6IHZhbHVlIGlzIFRlbXBsYXRlUmVuZGVyZXJTcGVjPHVua25vd24+IHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSBhcyB7IGtpbmQ/OiB1bmtub3duIH0pLmtpbmQgPT09ICd0ZW1wbGF0ZSc7XG59Il19
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1yZW5kZXJlci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJyYXJ5L2FuZ3VsYXItcmVuZGVyZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEZBLDZFQUE2RTtBQUM3RSxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLEtBQWM7SUFFZCxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFLLEtBQTRCLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQztBQUN0RyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNsQyxLQUFjO0lBRWQsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSyxLQUE0QixDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7QUFDckcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUge1xuICAgIENvbHVtbkRlZklucHV0IGFzIENvcmVDb2x1bW5EZWZJbnB1dCxcbiAgICBEaXNwbGF5UmVuZGVyZXJQYXJhbXMsXG4gICAgRWRpdG9yUmVuZGVyZXJQYXJhbXMsXG4gICAgRmlsdGVyUmVuZGVyZXJQYXJhbXMsXG4gICAgR3JvdXBSZW5kZXJlclBhcmFtcyxcbiAgICBIZWFkZXJSZW5kZXJlclBhcmFtcyxcbiAgICBPcHRpb25SZW5kZXJlclBhcmFtcyxcbiAgICBSZW5kZXJlck91dHB1dCxcbiAgICBTdW1tYXJ5UmVuZGVyZXJQYXJhbXMsXG4gICAgVG9vbHRpcFJlbmRlcmVyUGFyYW1zLFxufSBmcm9tICdwaG90b24tZ3JpZC1jb3JlJztcbiBcbi8qKlxuICogUmVuZGVycyBgcGFyYW1zYCB0aHJvdWdoIGEgYEBDb21wb25lbnRgLlxuICpcbiAqIEEgKipuZXcqKiBjb21wb25lbnQgaW5zdGFuY2UgaXMgY3JlYXRlZCBldmVyeSB0aW1lIHRoZSBjb3JlIGludm9rZXMgdGhlXG4gKiByZW5kZXJlciAoaXQgaGFzIG5vIGNvbmNlcHQgb2YgXCJ1cGRhdGVcIiwgb25seSBcInByb2R1Y2Ugb3V0cHV0IGZvciB0aGVzZVxuICogcGFyYW1zXCIpLiBgaW5wdXRzYCBpcyByZS1ldmFsdWF0ZWQgb24gZXZlcnkgbW91bnQgYW5kIGFwcGxpZWQgdmlhXG4gKiBgQ29tcG9uZW50UmVmLnNldElucHV0YCBiZWZvcmUgdGhlIGZpcnN0IGNoYW5nZS1kZXRlY3Rpb24gcGFzcywgc28gdGhlXG4gKiBjb21wb25lbnQgc2VlcyB0aGUgY3VycmVudCBwYXJhbXMgYXMgaXRzIGluaXRpYWwgYEBJbnB1dCgpYHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50UmVuZGVyZXJTcGVjPFRQYXJhbXMsIFRDb21wb25lbnQgPSB1bmtub3duPiB7XG4gICAgcmVhZG9ubHkga2luZDogJ2NvbXBvbmVudCc7XG4gICAgcmVhZG9ubHkgY29tcG9uZW50OiBUeXBlPFRDb21wb25lbnQ+O1xuICAgIC8qKiBNYXBzIHJlbmRlcmVyIHBhcmFtcyB0byB0aGUgY29tcG9uZW50J3MgYEBJbnB1dCgpYCBiYWcuICovXG4gICAgcmVhZG9ubHkgaW5wdXRzPzogKHBhcmFtczogVFBhcmFtcykgPT4gUGFydGlhbDxUQ29tcG9uZW50PiAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogQ29udGV4dCBoYW5kZWQgdG8gYW4gYDxuZy10ZW1wbGF0ZT5gIHVzZWQgYXMgYSByZW5kZXJlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyZXJDb250ZXh0PFRQYXJhbXM+IHtcbiAgICAvKiogRW5hYmxlcyBgbGV0LXhgIC8gaW1wbGljaXQgYGxldC1wYXJhbXNgIHRlbXBsYXRlIHN5bnRheC4gKi9cbiAgICAkaW1wbGljaXQ6IFRQYXJhbXM7XG4gICAgcGFyYW1zOiBUUGFyYW1zO1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKlxuICogUmVuZGVycyBgcGFyYW1zYCB0aHJvdWdoIGFuIGA8bmctdGVtcGxhdGU+YCAob2J0YWluZWQgdmlhIGBAVmlld0NoaWxkYCkuXG4gKlxuICogUHJlZmVyIGEgc2luZ2xlIHJvb3QgZWxlbWVudCBpbiB0aGUgdGVtcGxhdGUgZm9yIGBlZGl0b3JgIC8gYGZpbHRlcmBcbiAqIHNsb3RzOiB0aGUgY29yZSB0cmVhdHMgdGhlIHJldHVybmVkIGBIVE1MRWxlbWVudGAgYXMgdGhlIGludGVyYWN0aXZlXG4gKiBjb250cm9sIGl0c2VsZiAoZS5nLiBpdCBtYXkgY2FsbCBgLmZvY3VzKClgIG9uIGl0KSwgYW5kIGEgbXVsdGktcm9vdFxuICogdGVtcGxhdGUgZ2V0cyB3cmFwcGVkIGluIGEgc3ludGhldGljIGA8ZGl2PmAgaG9zdCB0aGF0IGJyZWFrcyB0aGF0XG4gKiBhc3N1bXB0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlUmVuZGVyZXJTcGVjPFRQYXJhbXM+IHtcbiAgICByZWFkb25seSBraW5kOiAndGVtcGxhdGUnO1xuICAgIHJlYWRvbmx5IHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxSZW5kZXJlckNvbnRleHQ8VFBhcmFtcz4+O1xuICAgIHJlYWRvbmx5IGNvbnRleHQ/OiAocGFyYW1zOiBUUGFyYW1zKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBBIHJlbmRlcmVyIHNsb3QgYWNjZXB0cyBlaXRoZXI6XG4gKiAtIGEgZGVjbGFyYXRpdmUgc3BlYyAoYHsga2luZDogJ2NvbXBvbmVudCcgfCAndGVtcGxhdGUnLCAuLi4gfWApLCBvclxuICogLSBhIHBsYWluIGZ1bmN0aW9uLCBmb3IgY29uc3VtZXJzIHdobyB3YW50IHRvIGtlZXAgcHJvZHVjaW5nIHJhd1xuICogICBgSFRNTEVsZW1lbnRgL2BzdHJpbmdgIG91dHB1dCAoaWRlbnRpY2FsIHRvIHRoZSBmcmFtZXdvcmstYWdub3N0aWMgY29yZSBBUEkpLlxuICovXG5leHBvcnQgdHlwZSBDZWxsUmVuZGVyZXI8VFBhcmFtcywgVE91dHB1dD4gPVxuICAgIHwgQ29tcG9uZW50UmVuZGVyZXJTcGVjPFRQYXJhbXM+XG4gICAgfCBUZW1wbGF0ZVJlbmRlcmVyU3BlYzxUUGFyYW1zPlxuICAgIHwgVHlwZTx1bmtub3duPlxuICAgIHwgVGVtcGxhdGVSZWY8UmVuZGVyZXJDb250ZXh0PFRQYXJhbXM+PlxuICAgIHwgKChwYXJhbXM6IFRQYXJhbXMpID0+IFRPdXRwdXQpO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtblJlbmRlcmVyTWFwIHtcbiAgICBkaXNwbGF5PzogQ2VsbFJlbmRlcmVyPERpc3BsYXlSZW5kZXJlclBhcmFtcywgUmVuZGVyZXJPdXRwdXQ+O1xuICAgIGVkaXRvcj86IENlbGxSZW5kZXJlcjxFZGl0b3JSZW5kZXJlclBhcmFtcywgSFRNTEVsZW1lbnQ+O1xuICAgIG9wdGlvbj86IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT4gfCAoKHBhcmFtczogT3B0aW9uUmVuZGVyZXJQYXJhbXMpID0+IEhUTUxFbGVtZW50KTtcbiAgICBmaWx0ZXI/OiBDZWxsUmVuZGVyZXI8RmlsdGVyUmVuZGVyZXJQYXJhbXMsIEhUTUxFbGVtZW50PjtcbiAgICB0b29sdGlwPzogQ2VsbFJlbmRlcmVyPFRvb2x0aXBSZW5kZXJlclBhcmFtcywgUmVuZGVyZXJPdXRwdXQ+O1xuICAgIGdyb3VwPzogQ2VsbFJlbmRlcmVyPEdyb3VwUmVuZGVyZXJQYXJhbXMsIFJlbmRlcmVyT3V0cHV0PjtcbiAgICBoZWFkZXI/OiBDZWxsUmVuZGVyZXI8SGVhZGVyUmVuZGVyZXJQYXJhbXMsIFJlbmRlcmVyT3V0cHV0PjtcbiAgICBzdW1tYXJ5PzogQ2VsbFJlbmRlcmVyPFN1bW1hcnlSZW5kZXJlclBhcmFtcywgUmVuZGVyZXJPdXRwdXQ+O1xufVxuXG4vKipcbiAqIERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBjb3JlIGNvbHVtbiBkZWZpbml0aW9uLCBidWlsdCBvbiB0aGUgY29yZSdzXG4gKiB7QGxpbmsgQ29yZUNvbHVtbkRlZklucHV0fSBzbyBpdCBtaXJyb3JzIHRoZSBzYW1lIHJlbGF4ZWQgY29udHJhY3Q6ICoqb25seVxuICogYGZpZWxkYCBpcyByZXF1aXJlZCoqOyBgY29sSWRgLCBgaGVhZGVyYCBhbmQgYHR5cGVgIGFyZSBvcHRpb25hbCBhbmQgZmlsbGVkXG4gKiBpbiBieSB0aGUgY29yZSAoYXV0byBgY29sSWRgLCBoZWFkZXIgZGVmYXVsdGluZyB0byB0aGUgZmllbGQgaW4gVGl0bGUgQ2FzZSxcbiAqIGB0eXBlYCBkZWZhdWx0aW5nIHRvIGAnc3RyaW5nJ2ApLiBUaGlzIHdyYXBwZXIgYWRkaXRpb25hbGx5IGxldHMgYHJlbmRlcmVyYFxuICogKGFuZCBgcmVuZGVyZXJgIG9uIGFueSBuZXN0ZWQgYGNoaWxkcmVuYCkgYWNjZXB0IHRoZSBkZWNsYXJhdGl2ZVxuICogY29tcG9uZW50L3RlbXBsYXRlIHNwZWNzIGFib3ZlIGluIGFkZGl0aW9uIHRvIHBsYWluIGZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29sdW1uRGVmID0gT21pdDxDb3JlQ29sdW1uRGVmSW5wdXQsICdyZW5kZXJlcicgfCAnY2hpbGRyZW4nPiAmIHtcbiAgICByZW5kZXJlcj86IENvbHVtblJlbmRlcmVyTWFwO1xuICAgIGNoaWxkcmVuPzogQ29sdW1uRGVmW107XG59O1xuXG4vKiogTmFycm93aW5nIGhlbHBlcnMgdXNlZCBieSB0aGUgYWRhcHRlciAoYW5kIHVzYWJsZSBieSBjb25zdW1lcnMvdGVzdHMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50UmVuZGVyZXJTcGVjKFxuICAgIHZhbHVlOiB1bmtub3duLFxuKTogdmFsdWUgaXMgQ29tcG9uZW50UmVuZGVyZXJTcGVjPHVua25vd24+IHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSBhcyB7IGtpbmQ/OiB1bmtub3duIH0pLmtpbmQgPT09ICdjb21wb25lbnQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZVJlbmRlcmVyU3BlYyhcbiAgICB2YWx1ZTogdW5rbm93bixcbik6IHZhbHVlIGlzIFRlbXBsYXRlUmVuZGVyZXJTcGVjPHVua25vd24+IHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSBhcyB7IGtpbmQ/OiB1bmtub3duIH0pLmtpbmQgPT09ICd0ZW1wbGF0ZSc7XG59Il19
@@ -76,6 +76,25 @@ export class PhotonGridComponent {
76
76
  * `columns` and `data` are supplied by the dedicated inputs above and are
77
77
  * merged in automatically. The core has no runtime options setter, so a
78
78
  * change to this input transparently recreates the grid.
79
+ *
80
+ * Enable the natural-language AI panel — and, optionally, its Gemini
81
+ * generative back-end — through `options.photonAI`:
82
+ *
83
+ * @example Gemini-powered AI panel
84
+ * ```ts
85
+ * import { PhotonAIProviderType } from 'photon-grid-angular';
86
+ *
87
+ * options: Partial<GridOptions> = {
88
+ * photonAI: {
89
+ * enabled: true,
90
+ * provider: {
91
+ * type: PhotonAIProviderType.Gemini,
92
+ * apiKey: environment.geminiApiKey,
93
+ * model: 'gemini-2.5-flash',
94
+ * },
95
+ * },
96
+ * };
97
+ * ```
79
98
  */
80
99
  options = {};
81
100
  /** Emitted once the grid is constructed, carrying its {@link GridApi}. */
@@ -226,11 +245,11 @@ export class PhotonGridComponent {
226
245
  this.disposers.push(dispose);
227
246
  }
228
247
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotonGridComponent, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
229
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PhotonGridComponent, isStandalone: true, selector: "photon-grid", inputs: { columns: "columns", dataSet: "dataSet", options: "options" }, outputs: { gridReady: "gridReady", dataChanged: "dataChanged", rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", rowSelected: "rowSelected", cellClicked: "cellClicked", cellDoubleClicked: "cellDoubleClicked", cellValueChanged: "cellValueChanged", cellSelectionChanged: "cellSelectionChanged", columnResized: "columnResized", columnMoved: "columnMoved", sortChanged: "sortChanged", filterChanged: "filterChanged", pageChanged: "pageChanged", columnsStateChanged: "columnsStateChanged", themeChanged: "themeChanged", exportComplete: "exportComplete" }, viewQueries: [{ propertyName: "gridHost", first: true, predicate: ["gridHost"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `<div #gridHost class="photon-grid__host"></div>`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
248
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PhotonGridComponent, isStandalone: true, selector: "photon-grid-angular", inputs: { columns: "columns", dataSet: "dataSet", options: "options" }, outputs: { gridReady: "gridReady", dataChanged: "dataChanged", rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", rowSelected: "rowSelected", cellClicked: "cellClicked", cellDoubleClicked: "cellDoubleClicked", cellValueChanged: "cellValueChanged", cellSelectionChanged: "cellSelectionChanged", columnResized: "columnResized", columnMoved: "columnMoved", sortChanged: "sortChanged", filterChanged: "filterChanged", pageChanged: "pageChanged", columnsStateChanged: "columnsStateChanged", themeChanged: "themeChanged", exportComplete: "exportComplete" }, viewQueries: [{ propertyName: "gridHost", first: true, predicate: ["gridHost"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `<div #gridHost class="photon-grid__host"></div>`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
230
249
  }
231
250
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotonGridComponent, decorators: [{
232
251
  type: Component,
233
- args: [{ selector: 'photon-grid', standalone: true, template: `<div #gridHost class="photon-grid__host"></div>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"] }]
252
+ args: [{ selector: 'photon-grid-angular', standalone: true, template: `<div #gridHost class="photon-grid__host"></div>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"] }]
234
253
  }], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }, { type: i0.Injector }], propDecorators: { gridHost: [{
235
254
  type: ViewChild,
236
255
  args: ['gridHost', { static: true, read: ElementRef }]
@@ -275,4 +294,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
275
294
  }], exportComplete: [{
276
295
  type: Output
277
296
  }] } });
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG9uLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYnJhcnkvcGhvdG9uLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixZQUFZLEVBRVosS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQXNCM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUc3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxREc7QUFRSCxNQUFNLE9BQU8sbUJBQW1CO0lBRTVCLHVDQUF1QztJQUV0QixRQUFRLENBQThCO0lBRXZEOzs7OztPQUtHO0lBRUgsT0FBTyxHQUFvQixFQUFFLENBQUM7SUFFOUI7OztPQUdHO0lBRUgsT0FBTyxHQUE4QixFQUFFLENBQUM7SUFFeEM7Ozs7O09BS0c7SUFFSCxPQUFPLEdBQXlCLEVBQUUsQ0FBQztJQUVuQywwRUFBMEU7SUFDdkQsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUFFM0Qsc0NBQXNDO0lBQ25CLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztJQUV0RSx5QkFBeUI7SUFDTixVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFFcEUsZ0NBQWdDO0lBQ2IsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFFMUUsNkJBQTZCO0lBQ1YsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO0lBRXRFLDBCQUEwQjtJQUNQLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztJQUV0RSxpQ0FBaUM7SUFDZCxp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QXRDLE1BQU07Z0JBR1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFHWSxXQUFXO3NCQUE3QixNQUFNO2dCQUdZLFdBQVc7c0JBQTdCLE1BQU07Z0JBR1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFHWSxXQUFXO3NCQUE3QixNQUFNO2dCQUdZLG1CQUFtQjtzQkFBckMsTUFBTTtnQkFHWSxZQUFZO3NCQUE5QixNQUFNO2dCQUdZLGNBQWM7c0JBQWhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHcmlkQ29yZSwgR3JpZEV2ZW50VHlwZSB9IGZyb20gJ3Bob3Rvbi1ncmlkLWNvcmUnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgQ2VsbENsaWNrZWRFdmVudCxcbiAgICBDZWxsU2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIENlbGxWYWx1ZUNoYW5nZWRFdmVudCxcbiAgICBDb2x1bW5Nb3ZlZEV2ZW50LFxuICAgIENvbHVtblJlc2l6ZWRFdmVudCxcbiAgICBDb2x1bW5zU3RhdGVDaGFuZ2VkRXZlbnQsXG4gICAgQ29sdW1uU29ydGVkRXZlbnQsXG4gICAgRGF0YUNoYW5nZWRFdmVudCxcbiAgICBFeHBvcnRFdmVudCxcbiAgICBGaWx0ZXJDaGFuZ2VkRXZlbnQsXG4gICAgR3JpZEFwaSxcbiAgICBHcmlkRXZlbnRNYXAsXG4gICAgR3JpZE9wdGlvbnMsXG4gICAgUGFnZUNoYW5nZWRFdmVudCxcbiAgICBSb3dDbGlja1BheWxvYWQsXG4gICAgUm93U2VsZWN0ZWRFdmVudCxcbiAgICBUaGVtZUNoYW5nZWRFdmVudCxcbn0gZnJvbSAncGhvdG9uLWdyaWQtY29yZSc7XG5cbmltcG9ydCB7IFJlbmRlcmVyQWRhcHRlciB9IGZyb20gJy4vYW5ndWxhci1yZW5kZXJlci5hZGFwdGVyJztcbmltcG9ydCB0eXBlIHtDb2x1bW5EZWYgYXMgR3JpZENvbHVtbkRlZiB9IGZyb20gJy4vYW5ndWxhci1yZW5kZXJlci50eXBlcyc7XG5cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGFyb3VuZCB0aGUgZnJhbWV3b3JrLWFnbm9zdGljIFBob3RvbiBHcmlkIGNvcmUuXG4gKlxuICogVGhlIGNvbXBvbmVudCBvd25zIGEgc2luZ2xlIHtAbGluayBHcmlkQ29yZX0gaW5zdGFuY2UsIGtlZXBzIGl0IGluIHN5bmNcbiAqIHdpdGggdGhlIGBjb2x1bW5zYCwgYGRhdGFTZXRgIGFuZCBgb3B0aW9uc2AgaW5wdXRzLCBhbmQgcmUtZW1pdHMgdGhlXG4gKiBncmlkJ3MgaW50ZXJuYWwgZXZlbnRzIGFzIHN0cm9uZ2x5LXR5cGVkIEFuZ3VsYXIgYEBPdXRwdXRgcy5cbiAqXG4gKiBDZWxsL2hlYWRlci9lZGl0b3IvZXRjLiByZW5kZXJlcnMgbWF5IGJlIHBsYWluIGZ1bmN0aW9ucyAocmF3XG4gKiBgSFRNTEVsZW1lbnRgL2BzdHJpbmdgLCBpZGVudGljYWwgdG8gdGhlIGNvcmUncyBvd24gQVBJKSwgb3IgZGVjbGFyYXRpdmVcbiAqIEFuZ3VsYXIgc3BlY3Mg4oCUIGB7IGtpbmQ6ICdjb21wb25lbnQnLCBjb21wb25lbnQ6IE15QmFkZ2UgfWAgb3JcbiAqIGB7IGtpbmQ6ICd0ZW1wbGF0ZScsIHRlbXBsYXRlOiBteVRlbXBsYXRlUmVmIH1gIOKAlCB2aWEge0BsaW5rIEdyaWRDb2x1bW5EZWZ9LlxuICogQW4gaW50ZXJuYWwge0BsaW5rIFJlbmRlcmVyQWRhcHRlcn0gbW91bnRzL3VubW91bnRzIHRob3NlIGZvciBldmVyeVxuICogcmVuZGVyZXIgaW52b2NhdGlvbiBhbmQgZGlzcG9zZXMgdGhlbSBhcyBzb29uIGFzIHRoZSBjb3JlIGRpc2NhcmRzIHRoZWlyXG4gKiBob3N0IGVsZW1lbnQsIHNvIHZpcnR1YWxpemF0aW9uL3JlY3ljbGluZyBuZXZlciBsZWFrcyBjb21wb25lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cGhvdG9uLWdyaWRcbiAqICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gKiAgIFtkYXRhU2V0XT1cInJvd3NcIlxuICogICBbb3B0aW9uc109XCJ7IHRoZW1lOiAnbGlnaHQnLCBzaG93Q2hlY2tib3hlczogdHJ1ZSB9XCJcbiAqICAgKGdyaWRSZWFkeSk9XCJvblJlYWR5KCRldmVudClcIlxuICogICAocm93Q2xpY2tlZCk9XCJvblJvd0NsaWNrZWQoJGV2ZW50KVwiPlxuICogPC9waG90b24tZ3JpZD5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENvbXBvbmVudC1iYXNlZCBjZWxsIHJlbmRlcmVyXG4gKiBgYGB0c1xuICogY29sdW1uczogR3JpZENvbHVtbkRlZltdID0gW3tcbiAqICAgY29sSWQ6ICdzdGF0dXMnLCBmaWVsZDogJ3N0YXR1cycsIGhlYWRlcjogJ1N0YXR1cycsIHR5cGU6ICdzdHJpbmcnLFxuICogICByZW5kZXJlcjoge1xuICogICAgIGRpc3BsYXk6IHtcbiAqICAgICAgIGtpbmQ6ICdjb21wb25lbnQnLFxuICogICAgICAgY29tcG9uZW50OiBTdGF0dXNCYWRnZUNvbXBvbmVudCxcbiAqICAgICAgIGlucHV0czogKHBhcmFtcykgPT4gKHsgdmFsdWU6IHBhcmFtcy52YWx1ZSB9KSxcbiAqICAgICB9LFxuICogICB9LFxuICogfV07XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBUZW1wbGF0ZS1iYXNlZCBjZWxsIHJlbmRlcmVyXG4gKiBgYGBodG1sXG4gKiA8bmctdGVtcGxhdGUgI3N0YXR1c1RwbCBsZXQtcGFyYW1zPlxuICogICA8c3BhbiBjbGFzcz1cImJhZGdlXCI+e3sgcGFyYW1zLnZhbHVlIH19PC9zcGFuPlxuICogPC9uZy10ZW1wbGF0ZT5cbiAqIGBgYFxuICogYGBgdHNcbiAqIEBWaWV3Q2hpbGQoJ3N0YXR1c1RwbCcpIHN0YXR1c1RwbCE6IFRlbXBsYXRlUmVmPFJlbmRlcmVyQ29udGV4dDxEaXNwbGF5UmVuZGVyZXJQYXJhbXM+PjtcbiAqIGNvbHVtbnM6IEdyaWRDb2x1bW5EZWZbXSA9IFt7XG4gKiAgIGNvbElkOiAnc3RhdHVzJywgZmllbGQ6ICdzdGF0dXMnLCBoZWFkZXI6ICdTdGF0dXMnLCB0eXBlOiAnc3RyaW5nJyxcbiAqICAgcmVuZGVyZXI6IHsgZGlzcGxheTogeyBraW5kOiAndGVtcGxhdGUnLCB0ZW1wbGF0ZTogdGhpcy5zdGF0dXNUcGwgfSB9LFxuICogfV07XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwaG90b24tZ3JpZCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYDxkaXYgI2dyaWRIb3N0IGNsYXNzPVwicGhvdG9uLWdyaWRfX2hvc3RcIj48L2Rpdj5gLFxuICAgIHN0eWxlVXJsOiAnLi9waG90b24tZ3JpZC5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBob3RvbkdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgICAvKiogQ29udGFpbmVyIHRoZSBncmlkIHJlbmRlcnMgaW50by4gKi9cbiAgICBAVmlld0NoaWxkKCdncmlkSG9zdCcsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBncmlkSG9zdCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQ29sdW1uIGRlZmluaXRpb25zLiBCb3VuZCB0byB7QGxpbmsgR3JpZEFwaS5zZXRDb2x1bW5zfSBvbiBjaGFuZ2UuXG4gICAgICogUHJvdmlkZWQgYXMgYSBkZWRpY2F0ZWQgaW5wdXQgcmF0aGVyIHRoYW4gdGhyb3VnaCBgb3B0aW9ucy5jb2x1bW5zYC5cbiAgICAgKiBSZW5kZXJlciBzbG90cyBhY2NlcHQgQW5ndWxhciBjb21wb25lbnRzL3RlbXBsYXRlcyBpbiBhZGRpdGlvbiB0b1xuICAgICAqIHBsYWluIGZ1bmN0aW9ucyDigJQgc2VlIHtAbGluayBHcmlkQ29sdW1uRGVmfS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbHVtbnM6IEdyaWRDb2x1bW5EZWZbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUm93IGRhdGEuIEJvdW5kIHRvIHtAbGluayBHcmlkQXBpLnNldERhdGF9IG9uIGNoYW5nZS4gUHJvdmlkZWQgYXMgYVxuICAgICAqIGRlZGljYXRlZCBpbnB1dCByYXRoZXIgdGhhbiB0aHJvdWdoIGBvcHRpb25zLmRhdGFgLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0YVNldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUmVtYWluaW5nIGdyaWQgb3B0aW9ucyAodGhlbWUsIHNlbGVjdGlvbiwgZWRpdGluZywgcGFnaW5hdGlvbiwg4oCmKS5cbiAgICAgKiBgY29sdW1uc2AgYW5kIGBkYXRhYCBhcmUgc3VwcGxpZWQgYnkgdGhlIGRlZGljYXRlZCBpbnB1dHMgYWJvdmUgYW5kIGFyZVxuICAgICAqIG1lcmdlZCBpbiBhdXRvbWF0aWNhbGx5LiBUaGUgY29yZSBoYXMgbm8gcnVudGltZSBvcHRpb25zIHNldHRlciwgc28gYVxuICAgICAqIGNoYW5nZSB0byB0aGlzIGlucHV0IHRyYW5zcGFyZW50bHkgcmVjcmVhdGVzIHRoZSBncmlkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3B0aW9uczogUGFydGlhbDxHcmlkT3B0aW9ucz4gPSB7fTtcblxuICAgIC8qKiBFbWl0dGVkIG9uY2UgdGhlIGdyaWQgaXMgY29uc3RydWN0ZWQsIGNhcnJ5aW5nIGl0cyB7QGxpbmsgR3JpZEFwaX0uICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGdyaWRSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZEFwaT4oKTtcblxuICAgIC8qKiBSb3cgZGF0YSBjaGFuZ2VkIChjb3VudCBkZWx0YSkuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGRhdGFDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqIEEgcm93IHdhcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSByb3dDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dDbGlja1BheWxvYWQ+KCk7XG5cbiAgICAvKiogQSByb3cgd2FzIGRvdWJsZS1jbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSByb3dEb3VibGVDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dDbGlja1BheWxvYWQ+KCk7XG5cbiAgICAvKiogUm93IHNlbGVjdGlvbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSByb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93U2VsZWN0ZWRFdmVudD4oKTtcblxuICAgIC8qKiBBIGNlbGwgd2FzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNlbGxDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ2xpY2tlZEV2ZW50PigpO1xuXG4gICAgLyoqIEEgY2VsbCB3YXMgZG91YmxlLWNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNlbGxEb3VibGVDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ2xpY2tlZEV2ZW50PigpO1xuXG4gICAgLyoqIEEgY2VsbCB2YWx1ZSB3YXMgY29tbWl0dGVkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBjZWxsVmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsVmFsdWVDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogUmFuZ2UvY2VsbCBzZWxlY3Rpb24gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY2VsbFNlbGVjdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogQSBjb2x1bW4gd2FzIHJlc2l6ZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbHVtblJlc2l6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtblJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBBIGNvbHVtbiB3YXMgcmVvcmRlcmVkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBjb2x1bW5Nb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uTW92ZWRFdmVudD4oKTtcblxuICAgIC8qKiBTb3J0IHN0YXRlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5Tb3J0ZWRFdmVudD4oKTtcblxuICAgIC8qKiBGaWx0ZXIgbW9kZWwgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgZmlsdGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqIFBhZ2luYXRpb24gcGFnZSBvciBzaXplIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqIENvbHVtbiBzdGF0ZSAod2lkdGgvdmlzaWJpbGl0eS9waW4vb3JkZXIpIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbHVtbnNTdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtbnNTdGF0ZUNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKiBBY3RpdmUgdGhlbWUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGhlbWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxUaGVtZUNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKiBBbiBleHBvcnQgZmluaXNoZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGV4cG9ydENvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxFeHBvcnRFdmVudD4oKTtcblxuICAgIC8qKiBUaGUgbGl2ZSBjb3JlIGluc3RhbmNlLCBjcmVhdGVkIGluIHtAbGluayBuZ0FmdGVyVmlld0luaXR9LiAqL1xuICAgIHByaXZhdGUgZ3JpZD86IEdyaWRDb3JlO1xuXG4gICAgLyoqIFVuc3Vic2NyaWJlIGNhbGxiYWNrcyBmb3IgZXZlcnkgd2lyZWQgY29yZSBldmVudDsgZHJhaW5lZCBvbiB0ZWFyZG93bi4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpc3Bvc2VyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEJyaWRnZXMgQW5ndWxhciBjb21wb25lbnQvdGVtcGxhdGUgcmVuZGVyZXIgc3BlY3MgdG8gdGhlIGNvcmUnc1xuICAgICAqIHBsYWluLWZ1bmN0aW9uIGBDb2x1bW5SZW5kZXJlck1hcGAuIE93bmVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhpc1xuICAgICAqIGNvbXBvbmVudCAobm90IERJLXByb3ZpZGVkKSBzbyBpdHMgbW91bnRlZC12aWV3IHRyYWNraW5nIGlzIHNjb3BlZFxuICAgICAqIHRvIHRoaXMgZ3JpZCBpbnN0YW5jZSBhbG9uZS5cbiAgICAgKlxuICAgICAqIEJ1aWx0IGV4cGxpY2l0bHkgaW4gdGhlIGNvbnN0cnVjdG9yIGJvZHkgKHJhdGhlciB0aGFuIGFzIGEgZmllbGRcbiAgICAgKiBpbml0aWFsaXplciByZWZlcmVuY2luZyBjb25zdHJ1Y3Rvci1wYXJhbWV0ZXIgcHJvcGVydGllcykgc28gaXQgaXNuJ3RcbiAgICAgKiBzdWJqZWN0IHRvIGZpZWxkLWluaXRpYWxpemVyLXZzLXBhcmFtZXRlci1wcm9wZXJ0eSBvcmRlcmluZzogYXQgdGhpc1xuICAgICAqIHBvaW50IGBhcHBSZWZgL2BlbnZpcm9ubWVudEluamVjdG9yYC9gZWxlbWVudEluamVjdG9yYCBhcmUgcGxhaW4gbG9jYWxcbiAgICAgKiBjb25zdHJ1Y3RvciBhcmd1bWVudHMsIGd1YXJhbnRlZWQgdG8gYWxyZWFkeSBiZSBzZXQuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlckFkYXB0ZXI6IFJlbmRlcmVyQWRhcHRlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBlbGVtZW50SW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyQWRhcHRlciA9IG5ldyBSZW5kZXJlckFkYXB0ZXIoYXBwUmVmLCBlbnZpcm9ubWVudEluamVjdG9yLCBlbGVtZW50SW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcmVhdGVHcmlkKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICAvLyBJbml0aWFsIGlucHV0cyBhcmUgY29uc3VtZWQgYnkgY3JlYXRlR3JpZCgpIGluIG5nQWZ0ZXJWaWV3SW5pdC5cbiAgICAgICAgaWYgKCF0aGlzLmdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFuIG9wdGlvbnMgY2hhbmdlIGNhbm5vdCBiZSBhcHBsaWVkIGluY3JlbWVudGFsbHkgKG5vIGNvcmUgc2V0dGVyKSxcbiAgICAgICAgLy8gc28gcmVjcmVhdGU7IHRoaXMgYWxyZWFkeSByZS1zZWVkcyBjb2x1bW5zIGFuZCBkYXRhLlxuICAgICAgICBpZiAoY2hhbmdlc1snb3B0aW9ucyddICYmICFjaGFuZ2VzWydvcHRpb25zJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVjcmVhdGVHcmlkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddICYmICFjaGFuZ2VzWydjb2x1bW5zJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5hcGkuc2V0Q29sdW1ucyh0aGlzLnJlbmRlcmVyQWRhcHRlci5hZGFwdENvbHVtbnModGhpcy5jb2x1bW5zKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlc1snZGF0YVNldCddICYmICFjaGFuZ2VzWydkYXRhU2V0J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5hcGkuc2V0RGF0YSh0aGlzLmRhdGFTZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVhcmRvd25HcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIEJ1aWxkcyB0aGUgY29yZSBmcm9tIHRoZSBjdXJyZW50IGlucHV0cyBhbmQgd2lyZXMgaXRzIGV2ZW50cy4gKi9cbiAgICBwcml2YXRlIGNyZWF0ZUdyaWQoKTogdm9pZCB7XG4gICAgICAgIC8vIE11c3QgYmUgb2JzZXJ2aW5nICpiZWZvcmUqIHRoZSBjb3JlIG1vdW50cyBhbnl0aGluZywgc28gZXZlcnlcbiAgICAgICAgLy8gcmVuZGVyZXItcHJvZHVjZWQgZWxlbWVudCBpcyB0cmFja2VkIGZvciBjbGVhbnVwIGZyb20gdGhlIHN0YXJ0LlxuICAgICAgICB0aGlzLnJlbmRlcmVyQWRhcHRlci5vYnNlcnZlKHRoaXMuZ3JpZEhvc3QubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgbWVyZ2VkT3B0aW9uczogR3JpZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnJlbmRlcmVyQWRhcHRlci5hZGFwdENvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YVNldCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBncmlkID0gbmV3IEdyaWRDb3JlKHRoaXMuZ3JpZEhvc3QubmF0aXZlRWxlbWVudCwgbWVyZ2VkT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG5cbiAgICAgICAgdGhpcy53aXJlRXZlbnRzKGdyaWQuYXBpKTtcblxuICAgICAgICAvLyBHcmlkQ29yZSBlbWl0cyBSRUFEWSBzeW5jaHJvbm91c2x5IGR1cmluZyBjb25zdHJ1Y3Rpb24gKGJlZm9yZSB3ZSBjYW5cbiAgICAgICAgLy8gYXR0YWNoIGEgbGlzdGVuZXIpLCBzbyBzdXJmYWNlIHRoZSByZWFkeSBzaWduYWwgZXhwbGljaXRseSBoZXJlLlxuICAgICAgICB0aGlzLmdyaWRSZWFkeS5lbWl0KGdyaWQuYXBpKTtcbiAgICB9XG5cbiAgICAvKiogRGVzdHJveXMgdGhlIGN1cnJlbnQgY29yZSwgZHJvcHMgaXQsIGFuZCBidWlsZHMgYSBmcmVzaCBvbmUuICovXG4gICAgcHJpdmF0ZSByZWNyZWF0ZUdyaWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVhcmRvd25HcmlkKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3Bvc2VzIGV2ZW50IHN1YnNjcmlwdGlvbnMsIHRoZSByZW5kZXJlciBhZGFwdGVyIChzdG9wcGluZyBpdHNcbiAgICAgKiBvYnNlcnZlciBhbmQgZGVzdHJveWluZyBldmVyeSBtb3VudGVkIGNvbXBvbmVudC9lbWJlZGRlZCB2aWV3KSwgYW5kXG4gICAgICogdGhlIGNvcmUgaW5zdGFuY2UgaXRzZWxmLCBpZiBhbnkuXG4gICAgICpcbiAgICAgKiBPcmRlciBtYXR0ZXJzOiB0aGUgYWRhcHRlciBpcyBkaXNwb3NlZCAqYWZ0ZXIqIGBncmlkLmRlc3Ryb3koKWAgc29cbiAgICAgKiBhbnkgdGVhcmRvd24tdGltZSBET00gcmVtb3ZhbCBpcyBpcnJlbGV2YW50IChkaXNwb3NlKCkgdW5jb25kaXRpb25hbGx5XG4gICAgICogZGVzdHJveXMgYWxsIHJlbWFpbmluZyBtb3VudHMgcmF0aGVyIHRoYW4gZGVwZW5kaW5nIG9uIHRoZVxuICAgICAqIE11dGF0aW9uT2JzZXJ2ZXIgaGF2aW5nIGZsdXNoZWQpLlxuICAgICAqL1xuICAgIHByaXZhdGUgdGVhcmRvd25HcmlkKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGRpc3Bvc2Ugb2YgdGhpcy5kaXNwb3NlcnMpIHtcbiAgICAgICAgICAgIGRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3Bvc2Vycy5sZW5ndGggPSAwO1xuXG4gICAgICAgIHRoaXMuZ3JpZD8uZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmdyaWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlckFkYXB0ZXIuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIC8qKiBTdWJzY3JpYmVzIGV2ZXJ5IGNvcmUgZXZlbnQgdG8gaXRzIGNvcnJlc3BvbmRpbmcgYEBPdXRwdXRgIGVtaXR0ZXIuICovXG4gICAgcHJpdmF0ZSB3aXJlRXZlbnRzKGFwaTogR3JpZEFwaSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuREFUQV9DSEFOR0VELCB0aGlzLmRhdGFDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLlJPV19DTElDS0VELCB0aGlzLnJvd0NsaWNrZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuUk9XX0RPVUJMRV9DTElDS0VELCB0aGlzLnJvd0RvdWJsZUNsaWNrZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuUk9XX1NFTEVDVEVELCB0aGlzLnJvd1NlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkNFTExfQ0xJQ0tFRCwgdGhpcy5jZWxsQ2xpY2tlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5DRUxMX0RPVUJMRV9DTElDS0VELCB0aGlzLmNlbGxEb3VibGVDbGlja2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkNFTExfVkFMVUVfQ0hBTkdFRCwgdGhpcy5jZWxsVmFsdWVDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkNFTExfU0VMRUNUSU9OX0NIQU5HRUQsIHRoaXMuY2VsbFNlbGVjdGlvbkNoYW5nZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuQ09MVU1OX1JFU0laRUQsIHRoaXMuY29sdW1uUmVzaXplZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5DT0xVTU5fTU9WRUQsIHRoaXMuY29sdW1uTW92ZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuU09SVF9DSEFOR0VELCB0aGlzLnNvcnRDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkZJTFRFUl9DSEFOR0VELCB0aGlzLmZpbHRlckNoYW5nZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuUEFHRV9DSEFOR0VELCB0aGlzLnBhZ2VDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkNPTFVNTlNfU1RBVEVfQ0hBTkdFRCwgdGhpcy5jb2x1bW5zU3RhdGVDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLlRIRU1FX0NIQU5HRUQsIHRoaXMudGhlbWVDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkVYUE9SVF9DT01QTEVURSwgdGhpcy5leHBvcnRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yd2FyZHMgYSBzaW5nbGUgc3Ryb25nbHktdHlwZWQgY29yZSBldmVudCB0byBhbiBBbmd1bGFyIGVtaXR0ZXIgYW5kXG4gICAgICogcmVjb3JkcyBpdHMgdW5zdWJzY3JpYmUgY2FsbGJhY2suIFRoZSBnZW5lcmljIGNvbnN0cmFpbnQgZ3VhcmFudGVlcyB0aGVcbiAgICAgKiBlbWl0dGVyJ3MgcGF5bG9hZCB0eXBlIG1hdGNoZXMgdGhlIGV2ZW50J3MgcGF5bG9hZCBpbiB7QGxpbmsgR3JpZEV2ZW50TWFwfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN1YnNjcmliZTxFIGV4dGVuZHMga2V5b2YgR3JpZEV2ZW50TWFwPihcbiAgICAgICAgYXBpOiBHcmlkQXBpLFxuICAgICAgICBldmVudDogRSxcbiAgICAgICAgZW1pdHRlcjogRXZlbnRFbWl0dGVyPEdyaWRFdmVudE1hcFtFXT4sXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpc3Bvc2UgPSBhcGkub248R3JpZEV2ZW50TWFwW0VdPihldmVudCwgKHBheWxvYWQpID0+IGVtaXR0ZXIuZW1pdChwYXlsb2FkKSk7XG4gICAgICAgIHRoaXMuZGlzcG9zZXJzLnB1c2goZGlzcG9zZSk7XG4gICAgfVxufSJdfQ==
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG9uLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYnJhcnkvcGhvdG9uLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixZQUFZLEVBRVosS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQXNCM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUc3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxREc7QUFRSCxNQUFNLE9BQU8sbUJBQW1CO0lBRTVCLHVDQUF1QztJQUV0QixRQUFRLENBQThCO0lBRXZEOzs7OztPQUtHO0lBRUgsT0FBTyxHQUFvQixFQUFFLENBQUM7SUFFOUI7OztPQUdHO0lBRUgsT0FBTyxHQUE4QixFQUFFLENBQUM7SUFFeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXdCRztJQUVILE9BQU8sR0FBeUIsRUFBRSxDQUFDO0lBRW5DLDBFQUEwRTtJQUN2RCxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUUzRCxzQ0FBc0M7SUFDbkIsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO0lBRXRFLHlCQUF5QjtJQUNOLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUVwRSxnQ0FBZ0M7SUFDYixnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUUxRSw2QkFBNkI7SUFDVixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7SUFFdEUsMEJBQTBCO0lBQ1AsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFD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bEMsTUFBTTtnQkFHWSxvQkFBb0I7c0JBQXRDLE1BQU07Z0JBR1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFHWSxXQUFXO3NCQUE3QixNQUFNO2dCQUdZLFdBQVc7c0JBQTdCLE1BQU07Z0JBR1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFHWSxXQUFXO3NCQUE3QixNQUFNO2dCQUdZLG1CQUFtQjtzQkFBckMsTUFBTTtnQkFHWSxZQUFZO3NCQUE5QixNQUFNO2dCQUdZLGNBQWM7c0JBQWhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHcmlkQ29yZSwgR3JpZEV2ZW50VHlwZSB9IGZyb20gJ3Bob3Rvbi1ncmlkLWNvcmUnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgQ2VsbENsaWNrZWRFdmVudCxcbiAgICBDZWxsU2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIENlbGxWYWx1ZUNoYW5nZWRFdmVudCxcbiAgICBDb2x1bW5Nb3ZlZEV2ZW50LFxuICAgIENvbHVtblJlc2l6ZWRFdmVudCxcbiAgICBDb2x1bW5zU3RhdGVDaGFuZ2VkRXZlbnQsXG4gICAgQ29sdW1uU29ydGVkRXZlbnQsXG4gICAgRGF0YUNoYW5nZWRFdmVudCxcbiAgICBFeHBvcnRFdmVudCxcbiAgICBGaWx0ZXJDaGFuZ2VkRXZlbnQsXG4gICAgR3JpZEFwaSxcbiAgICBHcmlkRXZlbnRNYXAsXG4gICAgR3JpZE9wdGlvbnMsXG4gICAgUGFnZUNoYW5nZWRFdmVudCxcbiAgICBSb3dDbGlja1BheWxvYWQsXG4gICAgUm93U2VsZWN0ZWRFdmVudCxcbiAgICBUaGVtZUNoYW5nZWRFdmVudCxcbn0gZnJvbSAncGhvdG9uLWdyaWQtY29yZSc7XG5cbmltcG9ydCB7IFJlbmRlcmVyQWRhcHRlciB9IGZyb20gJy4vYW5ndWxhci1yZW5kZXJlci5hZGFwdGVyJztcbmltcG9ydCB0eXBlIHtDb2x1bW5EZWYgYXMgR3JpZENvbHVtbkRlZiB9IGZyb20gJy4vYW5ndWxhci1yZW5kZXJlci50eXBlcyc7XG5cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGFyb3VuZCB0aGUgZnJhbWV3b3JrLWFnbm9zdGljIFBob3RvbiBHcmlkIGNvcmUuXG4gKlxuICogVGhlIGNvbXBvbmVudCBvd25zIGEgc2luZ2xlIHtAbGluayBHcmlkQ29yZX0gaW5zdGFuY2UsIGtlZXBzIGl0IGluIHN5bmNcbiAqIHdpdGggdGhlIGBjb2x1bW5zYCwgYGRhdGFTZXRgIGFuZCBgb3B0aW9uc2AgaW5wdXRzLCBhbmQgcmUtZW1pdHMgdGhlXG4gKiBncmlkJ3MgaW50ZXJuYWwgZXZlbnRzIGFzIHN0cm9uZ2x5LXR5cGVkIEFuZ3VsYXIgYEBPdXRwdXRgcy5cbiAqXG4gKiBDZWxsL2hlYWRlci9lZGl0b3IvZXRjLiByZW5kZXJlcnMgbWF5IGJlIHBsYWluIGZ1bmN0aW9ucyAocmF3XG4gKiBgSFRNTEVsZW1lbnRgL2BzdHJpbmdgLCBpZGVudGljYWwgdG8gdGhlIGNvcmUncyBvd24gQVBJKSwgb3IgZGVjbGFyYXRpdmVcbiAqIEFuZ3VsYXIgc3BlY3Mg4oCUIGB7IGtpbmQ6ICdjb21wb25lbnQnLCBjb21wb25lbnQ6IE15QmFkZ2UgfWAgb3JcbiAqIGB7IGtpbmQ6ICd0ZW1wbGF0ZScsIHRlbXBsYXRlOiBteVRlbXBsYXRlUmVmIH1gIOKAlCB2aWEge0BsaW5rIEdyaWRDb2x1bW5EZWZ9LlxuICogQW4gaW50ZXJuYWwge0BsaW5rIFJlbmRlcmVyQWRhcHRlcn0gbW91bnRzL3VubW91bnRzIHRob3NlIGZvciBldmVyeVxuICogcmVuZGVyZXIgaW52b2NhdGlvbiBhbmQgZGlzcG9zZXMgdGhlbSBhcyBzb29uIGFzIHRoZSBjb3JlIGRpc2NhcmRzIHRoZWlyXG4gKiBob3N0IGVsZW1lbnQsIHNvIHZpcnR1YWxpemF0aW9uL3JlY3ljbGluZyBuZXZlciBsZWFrcyBjb21wb25lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cGhvdG9uLWdyaWRcbiAqICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gKiAgIFtkYXRhU2V0XT1cInJvd3NcIlxuICogICBbb3B0aW9uc109XCJ7IHRoZW1lOiAnbGlnaHQnLCBzaG93Q2hlY2tib3hlczogdHJ1ZSB9XCJcbiAqICAgKGdyaWRSZWFkeSk9XCJvblJlYWR5KCRldmVudClcIlxuICogICAocm93Q2xpY2tlZCk9XCJvblJvd0NsaWNrZWQoJGV2ZW50KVwiPlxuICogPC9waG90b24tZ3JpZD5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENvbXBvbmVudC1iYXNlZCBjZWxsIHJlbmRlcmVyXG4gKiBgYGB0c1xuICogY29sdW1uczogR3JpZENvbHVtbkRlZltdID0gW3tcbiAqICAgY29sSWQ6ICdzdGF0dXMnLCBmaWVsZDogJ3N0YXR1cycsIGhlYWRlcjogJ1N0YXR1cycsIHR5cGU6ICdzdHJpbmcnLFxuICogICByZW5kZXJlcjoge1xuICogICAgIGRpc3BsYXk6IHtcbiAqICAgICAgIGtpbmQ6ICdjb21wb25lbnQnLFxuICogICAgICAgY29tcG9uZW50OiBTdGF0dXNCYWRnZUNvbXBvbmVudCxcbiAqICAgICAgIGlucHV0czogKHBhcmFtcykgPT4gKHsgdmFsdWU6IHBhcmFtcy52YWx1ZSB9KSxcbiAqICAgICB9LFxuICogICB9LFxuICogfV07XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBUZW1wbGF0ZS1iYXNlZCBjZWxsIHJlbmRlcmVyXG4gKiBgYGBodG1sXG4gKiA8bmctdGVtcGxhdGUgI3N0YXR1c1RwbCBsZXQtcGFyYW1zPlxuICogICA8c3BhbiBjbGFzcz1cImJhZGdlXCI+e3sgcGFyYW1zLnZhbHVlIH19PC9zcGFuPlxuICogPC9uZy10ZW1wbGF0ZT5cbiAqIGBgYFxuICogYGBgdHNcbiAqIEBWaWV3Q2hpbGQoJ3N0YXR1c1RwbCcpIHN0YXR1c1RwbCE6IFRlbXBsYXRlUmVmPFJlbmRlcmVyQ29udGV4dDxEaXNwbGF5UmVuZGVyZXJQYXJhbXM+PjtcbiAqIGNvbHVtbnM6IEdyaWRDb2x1bW5EZWZbXSA9IFt7XG4gKiAgIGNvbElkOiAnc3RhdHVzJywgZmllbGQ6ICdzdGF0dXMnLCBoZWFkZXI6ICdTdGF0dXMnLCB0eXBlOiAnc3RyaW5nJyxcbiAqICAgcmVuZGVyZXI6IHsgZGlzcGxheTogeyBraW5kOiAndGVtcGxhdGUnLCB0ZW1wbGF0ZTogdGhpcy5zdGF0dXNUcGwgfSB9LFxuICogfV07XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwaG90b24tZ3JpZC1hbmd1bGFyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgPGRpdiAjZ3JpZEhvc3QgY2xhc3M9XCJwaG90b24tZ3JpZF9faG9zdFwiPjwvZGl2PmAsXG4gICAgc3R5bGVVcmw6ICcuL3Bob3Rvbi1ncmlkLmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGhvdG9uR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICAgIC8qKiBDb250YWluZXIgdGhlIGdyaWQgcmVuZGVycyBpbnRvLiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRIb3N0JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdyaWRIb3N0ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBDb2x1bW4gZGVmaW5pdGlvbnMuIEJvdW5kIHRvIHtAbGluayBHcmlkQXBpLnNldENvbHVtbnN9IG9uIGNoYW5nZS5cbiAgICAgKiBQcm92aWRlZCBhcyBhIGRlZGljYXRlZCBpbnB1dCByYXRoZXIgdGhhbiB0aHJvdWdoIGBvcHRpb25zLmNvbHVtbnNgLlxuICAgICAqIFJlbmRlcmVyIHNsb3RzIGFjY2VwdCBBbmd1bGFyIGNvbXBvbmVudHMvdGVtcGxhdGVzIGluIGFkZGl0aW9uIHRvXG4gICAgICogcGxhaW4gZnVuY3Rpb25zIOKAlCBzZWUge0BsaW5rIEdyaWRDb2x1bW5EZWZ9LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uczogR3JpZENvbHVtbkRlZltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSb3cgZGF0YS4gQm91bmQgdG8ge0BsaW5rIEdyaWRBcGkuc2V0RGF0YX0gb24gY2hhbmdlLiBQcm92aWRlZCBhcyBhXG4gICAgICogZGVkaWNhdGVkIGlucHV0IHJhdGhlciB0aGFuIHRocm91Z2ggYG9wdGlvbnMuZGF0YWAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkYXRhU2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSZW1haW5pbmcgZ3JpZCBvcHRpb25zICh0aGVtZSwgc2VsZWN0aW9uLCBlZGl0aW5nLCBwYWdpbmF0aW9uLCDigKYpLlxuICAgICAqIGBjb2x1bW5zYCBhbmQgYGRhdGFgIGFyZSBzdXBwbGllZCBieSB0aGUgZGVkaWNhdGVkIGlucHV0cyBhYm92ZSBhbmQgYXJlXG4gICAgICogbWVyZ2VkIGluIGF1dG9tYXRpY2FsbHkuIFRoZSBjb3JlIGhhcyBubyBydW50aW1lIG9wdGlvbnMgc2V0dGVyLCBzbyBhXG4gICAgICogY2hhbmdlIHRvIHRoaXMgaW5wdXQgdHJhbnNwYXJlbnRseSByZWNyZWF0ZXMgdGhlIGdyaWQuXG4gICAgICpcbiAgICAgKiBFbmFibGUgdGhlIG5hdHVyYWwtbGFuZ3VhZ2UgQUkgcGFuZWwg4oCUIGFuZCwgb3B0aW9uYWxseSwgaXRzIEdlbWluaVxuICAgICAqIGdlbmVyYXRpdmUgYmFjay1lbmQg4oCUIHRocm91Z2ggYG9wdGlvbnMucGhvdG9uQUlgOlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgR2VtaW5pLXBvd2VyZWQgQUkgcGFuZWxcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IFBob3RvbkFJUHJvdmlkZXJUeXBlIH0gZnJvbSAncGhvdG9uLWdyaWQtYW5ndWxhcic7XG4gICAgICpcbiAgICAgKiBvcHRpb25zOiBQYXJ0aWFsPEdyaWRPcHRpb25zPiA9IHtcbiAgICAgKiAgIHBob3RvbkFJOiB7XG4gICAgICogICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICogICAgIHByb3ZpZGVyOiB7XG4gICAgICogICAgICAgdHlwZTogUGhvdG9uQUlQcm92aWRlclR5cGUuR2VtaW5pLFxuICAgICAqICAgICAgIGFwaUtleTogZW52aXJvbm1lbnQuZ2VtaW5pQXBpS2V5LFxuICAgICAqICAgICAgIG1vZGVsOiAnZ2VtaW5pLTIuNS1mbGFzaCcsXG4gICAgICogICAgIH0sXG4gICAgICogICB9LFxuICAgICAqIH07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEdyaWRPcHRpb25zPiA9IHt9O1xuXG4gICAgLyoqIEVtaXR0ZWQgb25jZSB0aGUgZ3JpZCBpcyBjb25zdHJ1Y3RlZCwgY2FycnlpbmcgaXRzIHtAbGluayBHcmlkQXBpfS4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgZ3JpZFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQXBpPigpO1xuXG4gICAgLyoqIFJvdyBkYXRhIGNoYW5nZWQgKGNvdW50IGRlbHRhKS4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgZGF0YUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogQSByb3cgd2FzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0NsaWNrUGF5bG9hZD4oKTtcblxuICAgIC8qKiBBIHJvdyB3YXMgZG91YmxlLWNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHJvd0RvdWJsZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0NsaWNrUGF5bG9hZD4oKTtcblxuICAgIC8qKiBSb3cgc2VsZWN0aW9uIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHJvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dTZWxlY3RlZEV2ZW50PigpO1xuXG4gICAgLyoqIEEgY2VsbCB3YXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY2VsbENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDbGlja2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogQSBjZWxsIHdhcyBkb3VibGUtY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY2VsbERvdWJsZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDbGlja2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogQSBjZWxsIHZhbHVlIHdhcyBjb21taXR0ZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNlbGxWYWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxWYWx1ZUNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKiBSYW5nZS9jZWxsIHNlbGVjdGlvbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBjZWxsU2VsZWN0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbFNlbGVjdGlvbkNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKiBBIGNvbHVtbiB3YXMgcmVzaXplZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY29sdW1uUmVzaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uUmVzaXplZEV2ZW50PigpO1xuXG4gICAgLyoqIEEgY29sdW1uIHdhcyByZW9yZGVyZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbHVtbk1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5Nb3ZlZEV2ZW50PigpO1xuXG4gICAgLyoqIFNvcnQgc3RhdGUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgc29ydENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtblNvcnRlZEV2ZW50PigpO1xuXG4gICAgLyoqIEZpbHRlciBtb2RlbCBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBmaWx0ZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogUGFnaW5hdGlvbiBwYWdlIG9yIHNpemUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogQ29sdW1uIHN0YXRlICh3aWR0aC92aXNpYmlsaXR5L3Bpbi9vcmRlcikgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY29sdW1uc1N0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uc1N0YXRlQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqIEFjdGl2ZSB0aGVtZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSB0aGVtZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRoZW1lQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqIEFuIGV4cG9ydCBmaW5pc2hlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgZXhwb3J0Q29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPEV4cG9ydEV2ZW50PigpO1xuXG4gICAgLyoqIFRoZSBsaXZlIGNvcmUgaW5zdGFuY2UsIGNyZWF0ZWQgaW4ge0BsaW5rIG5nQWZ0ZXJWaWV3SW5pdH0uICovXG4gICAgcHJpdmF0ZSBncmlkPzogR3JpZENvcmU7XG5cbiAgICAvKiogVW5zdWJzY3JpYmUgY2FsbGJhY2tzIGZvciBldmVyeSB3aXJlZCBjb3JlIGV2ZW50OyBkcmFpbmVkIG9uIHRlYXJkb3duLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQnJpZGdlcyBBbmd1bGFyIGNvbXBvbmVudC90ZW1wbGF0ZSByZW5kZXJlciBzcGVjcyB0byB0aGUgY29yZSdzXG4gICAgICogcGxhaW4tZnVuY3Rpb24gYENvbHVtblJlbmRlcmVyTWFwYC4gT3duZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGlzXG4gICAgICogY29tcG9uZW50IChub3QgREktcHJvdmlkZWQpIHNvIGl0cyBtb3VudGVkLXZpZXcgdHJhY2tpbmcgaXMgc2NvcGVkXG4gICAgICogdG8gdGhpcyBncmlkIGluc3RhbmNlIGFsb25lLlxuICAgICAqXG4gICAgICogQnVpbHQgZXhwbGljaXRseSBpbiB0aGUgY29uc3RydWN0b3IgYm9keSAocmF0aGVyIHRoYW4gYXMgYSBmaWVsZFxuICAgICAqIGluaXRpYWxpemVyIHJlZmVyZW5jaW5nIGNvbnN0cnVjdG9yLXBhcmFtZXRlciBwcm9wZXJ0aWVzKSBzbyBpdCBpc24ndFxuICAgICAqIHN1YmplY3QgdG8gZmllbGQtaW5pdGlhbGl6ZXItdnMtcGFyYW1ldGVyLXByb3BlcnR5IG9yZGVyaW5nOiBhdCB0aGlzXG4gICAgICogcG9pbnQgYGFwcFJlZmAvYGVudmlyb25tZW50SW5qZWN0b3JgL2BlbGVtZW50SW5qZWN0b3JgIGFyZSBwbGFpbiBsb2NhbFxuICAgICAqIGNvbnN0cnVjdG9yIGFyZ3VtZW50cywgZ3VhcmFudGVlZCB0byBhbHJlYWR5IGJlIHNldC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyQWRhcHRlcjogUmVuZGVyZXJBZGFwdGVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIGVsZW1lbnRJbmplY3RvcjogSW5qZWN0b3IsXG4gICAgKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXJBZGFwdGVyID0gbmV3IFJlbmRlcmVyQWRhcHRlcihhcHBSZWYsIGVudmlyb25tZW50SW5qZWN0b3IsIGVsZW1lbnRJbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZUdyaWQoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIC8vIEluaXRpYWwgaW5wdXRzIGFyZSBjb25zdW1lZCBieSBjcmVhdGVHcmlkKCkgaW4gbmdBZnRlclZpZXdJbml0LlxuICAgICAgICBpZiAoIXRoaXMuZ3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW4gb3B0aW9ucyBjaGFuZ2UgY2Fubm90IGJlIGFwcGxpZWQgaW5jcmVtZW50YWxseSAobm8gY29yZSBzZXR0ZXIpLFxuICAgICAgICAvLyBzbyByZWNyZWF0ZTsgdGhpcyBhbHJlYWR5IHJlLXNlZWRzIGNvbHVtbnMgYW5kIGRhdGEuXG4gICAgICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10gJiYgIWNoYW5nZXNbJ29wdGlvbnMnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZUdyaWQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10gJiYgIWNoYW5nZXNbJ2NvbHVtbnMnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmFwaS5zZXRDb2x1bW5zKHRoaXMucmVuZGVyZXJBZGFwdGVyLmFkYXB0Q29sdW1ucyh0aGlzLmNvbHVtbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydkYXRhU2V0J10gJiYgIWNoYW5nZXNbJ2RhdGFTZXQnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmFwaS5zZXREYXRhKHRoaXMuZGF0YVNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZWFyZG93bkdyaWQoKTtcbiAgICB9XG5cbiAgICAvKiogQnVpbGRzIHRoZSBjb3JlIGZyb20gdGhlIGN1cnJlbnQgaW5wdXRzIGFuZCB3aXJlcyBpdHMgZXZlbnRzLiAqL1xuICAgIHByaXZhdGUgY3JlYXRlR3JpZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gTXVzdCBiZSBvYnNlcnZpbmcgKmJlZm9yZSogdGhlIGNvcmUgbW91bnRzIGFueXRoaW5nLCBzbyBldmVyeVxuICAgICAgICAvLyByZW5kZXJlci1wcm9kdWNlZCBlbGVtZW50IGlzIHRyYWNrZWQgZm9yIGNsZWFudXAgZnJvbSB0aGUgc3RhcnQuXG4gICAgICAgIHRoaXMucmVuZGVyZXJBZGFwdGVyLm9ic2VydmUodGhpcy5ncmlkSG9zdC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICBjb25zdCBtZXJnZWRPcHRpb25zOiBHcmlkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMucmVuZGVyZXJBZGFwdGVyLmFkYXB0Q29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhU2V0LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGdyaWQgPSBuZXcgR3JpZENvcmUodGhpcy5ncmlkSG9zdC5uYXRpdmVFbGVtZW50LCBtZXJnZWRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcblxuICAgICAgICB0aGlzLndpcmVFdmVudHMoZ3JpZC5hcGkpO1xuXG4gICAgICAgIC8vIEdyaWRDb3JlIGVtaXRzIFJFQURZIHN5bmNocm9ub3VzbHkgZHVyaW5nIGNvbnN0cnVjdGlvbiAoYmVmb3JlIHdlIGNhblxuICAgICAgICAvLyBhdHRhY2ggYSBsaXN0ZW5lciksIHNvIHN1cmZhY2UgdGhlIHJlYWR5IHNpZ25hbCBleHBsaWNpdGx5IGhlcmUuXG4gICAgICAgIHRoaXMuZ3JpZFJlYWR5LmVtaXQoZ3JpZC5hcGkpO1xuICAgIH1cblxuICAgIC8qKiBEZXN0cm95cyB0aGUgY3VycmVudCBjb3JlLCBkcm9wcyBpdCwgYW5kIGJ1aWxkcyBhIGZyZXNoIG9uZS4gKi9cbiAgICBwcml2YXRlIHJlY3JlYXRlR3JpZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZWFyZG93bkdyaWQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZXMgZXZlbnQgc3Vic2NyaXB0aW9ucywgdGhlIHJlbmRlcmVyIGFkYXB0ZXIgKHN0b3BwaW5nIGl0c1xuICAgICAqIG9ic2VydmVyIGFuZCBkZXN0cm95aW5nIGV2ZXJ5IG1vdW50ZWQgY29tcG9uZW50L2VtYmVkZGVkIHZpZXcpLCBhbmRcbiAgICAgKiB0aGUgY29yZSBpbnN0YW5jZSBpdHNlbGYsIGlmIGFueS5cbiAgICAgKlxuICAgICAqIE9yZGVyIG1hdHRlcnM6IHRoZSBhZGFwdGVyIGlzIGRpc3Bvc2VkICphZnRlciogYGdyaWQuZGVzdHJveSgpYCBzb1xuICAgICAqIGFueSB0ZWFyZG93bi10aW1lIERPTSByZW1vdmFsIGlzIGlycmVsZXZhbnQgKGRpc3Bvc2UoKSB1bmNvbmRpdGlvbmFsbHlcbiAgICAgKiBkZXN0cm95cyBhbGwgcmVtYWluaW5nIG1vdW50cyByYXRoZXIgdGhhbiBkZXBlbmRpbmcgb24gdGhlXG4gICAgICogTXV0YXRpb25PYnNlcnZlciBoYXZpbmcgZmx1c2hlZCkuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0ZWFyZG93bkdyaWQoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgZGlzcG9zZSBvZiB0aGlzLmRpc3Bvc2Vycykge1xuICAgICAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcG9zZXJzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgdGhpcy5ncmlkPy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZ3JpZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyQWRhcHRlci5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqIFN1YnNjcmliZXMgZXZlcnkgY29yZSBldmVudCB0byBpdHMgY29ycmVzcG9uZGluZyBgQE91dHB1dGAgZW1pdHRlci4gKi9cbiAgICBwcml2YXRlIHdpcmVFdmVudHMoYXBpOiBHcmlkQXBpKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5EQVRBX0NIQU5HRUQsIHRoaXMuZGF0YUNoYW5nZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuUk9XX0NMSUNLRUQsIHRoaXMucm93Q2xpY2tlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5ST1dfRE9VQkxFX0NMSUNLRUQsIHRoaXMucm93RG91YmxlQ2xpY2tlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5ST1dfU0VMRUNURUQsIHRoaXMucm93U2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuQ0VMTF9DTElDS0VELCB0aGlzLmNlbGxDbGlja2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkNFTExfRE9VQkxFX0NMSUNLRUQsIHRoaXMuY2VsbERvdWJsZUNsaWNrZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuQ0VMTF9WQUxVRV9DSEFOR0VELCB0aGlzLmNlbGxWYWx1ZUNoYW5nZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuQ0VMTF9TRUxFQ1RJT05fQ0hBTkdFRCwgdGhpcy5jZWxsU2VsZWN0aW9uQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5DT0xVTU5fUkVTSVpFRCwgdGhpcy5jb2x1bW5SZXNpemVkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkNPTFVNTl9NT1ZFRCwgdGhpcy5jb2x1bW5Nb3ZlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5TT1JUX0NIQU5HRUQsIHRoaXMuc29ydENoYW5nZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuRklMVEVSX0NIQU5HRUQsIHRoaXMuZmlsdGVyQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5QQUdFX0NIQU5HRUQsIHRoaXMucGFnZUNoYW5nZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuQ09MVU1OU19TVEFURV9DSEFOR0VELCB0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuVEhFTUVfQ0hBTkdFRCwgdGhpcy50aGVtZUNoYW5nZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuRVhQT1JUX0NPTVBMRVRFLCB0aGlzLmV4cG9ydENvbXBsZXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3J3YXJkcyBhIHNpbmdsZSBzdHJvbmdseS10eXBlZCBjb3JlIGV2ZW50IHRvIGFuIEFuZ3VsYXIgZW1pdHRlciBhbmRcbiAgICAgKiByZWNvcmRzIGl0cyB1bnN1YnNjcmliZSBjYWxsYmFjay4gVGhlIGdlbmVyaWMgY29uc3RyYWludCBndWFyYW50ZWVzIHRoZVxuICAgICAqIGVtaXR0ZXIncyBwYXlsb2FkIHR5cGUgbWF0Y2hlcyB0aGUgZXZlbnQncyBwYXlsb2FkIGluIHtAbGluayBHcmlkRXZlbnRNYXB9LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3Vic2NyaWJlPEUgZXh0ZW5kcyBrZXlvZiBHcmlkRXZlbnRNYXA+KFxuICAgICAgICBhcGk6IEdyaWRBcGksXG4gICAgICAgIGV2ZW50OiBFLFxuICAgICAgICBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8R3JpZEV2ZW50TWFwW0VdPixcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzcG9zZSA9IGFwaS5vbjxHcmlkRXZlbnRNYXBbRV0+KGV2ZW50LCAocGF5bG9hZCkgPT4gZW1pdHRlci5lbWl0KHBheWxvYWQpKTtcbiAgICAgICAgdGhpcy5kaXNwb3NlcnMucHVzaChkaXNwb3NlKTtcbiAgICB9XG59Il19
@@ -5,4 +5,11 @@ export * from './library/photon-grid.component';
5
5
  export * from './library/photon-grid.module';
6
6
  export * from './library/angular-renderer.types';
7
7
  export { GridEventType } from 'photon-grid-core';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0NBQWtDLENBQUM7QUFRakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgc3VyZmFjZSBvZiBwaG90b24tZ3JpZC1hbmd1bGFyLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGlicmFyeS9waG90b24tZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWJyYXJ5L3Bob3Rvbi1ncmlkLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYnJhcnkvYW5ndWxhci1yZW5kZXJlci50eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCB0aGUgbW9zdCBjb21tb25seSBuZWVkZWQgY29yZSB0eXBlcyBzbyBjb25zdW1lcnMgY2FuIGJpbmQgdGhlXG4vLyB3cmFwcGVyIHdpdGhvdXQgaW1wb3J0aW5nIHBob3Rvbi1ncmlkLWNvcmUgZGlyZWN0bHkuXG5leHBvcnQgdHlwZSB7XG4gICAgR3JpZEFwaSxcbiAgICBHcmlkT3B0aW9ucyxcbn0gZnJvbSAncGhvdG9uLWdyaWQtY29yZSc7XG5leHBvcnQgeyBHcmlkRXZlbnRUeXBlIH0gZnJvbSAncGhvdG9uLWdyaWQtY29yZSc7XG4iXX0=
8
+ // ── Photon AI configuration ──────────────────────────────────────────────────
9
+ // Configure the AI panel (and its optional generative provider — Gemini,
10
+ // OpenAI, Anthropic, or a fully Custom endpoint) through the `[options]`
11
+ // input's `photonAI` field — see the `options` input on PhotonGridComponent for
12
+ // an example. `PhotonAIProviderType` is an enum (a runtime value), so it is
13
+ // re-exported as a value, not just a type.
14
+ export { PhotonAIProviderType } from 'photon-grid-core';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0NBQWtDLENBQUM7QUFRakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELGdGQUFnRjtBQUNoRix5RUFBeUU7QUFDekUseUVBQXlFO0FBQ3pFLGdGQUFnRjtBQUNoRiw0RUFBNEU7QUFDNUUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgc3VyZmFjZSBvZiBwaG90b24tZ3JpZC1hbmd1bGFyLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGlicmFyeS9waG90b24tZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWJyYXJ5L3Bob3Rvbi1ncmlkLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYnJhcnkvYW5ndWxhci1yZW5kZXJlci50eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCB0aGUgbW9zdCBjb21tb25seSBuZWVkZWQgY29yZSB0eXBlcyBzbyBjb25zdW1lcnMgY2FuIGJpbmQgdGhlXG4vLyB3cmFwcGVyIHdpdGhvdXQgaW1wb3J0aW5nIHBob3Rvbi1ncmlkLWNvcmUgZGlyZWN0bHkuXG5leHBvcnQgdHlwZSB7XG4gICAgR3JpZEFwaSxcbiAgICBHcmlkT3B0aW9ucyxcbn0gZnJvbSAncGhvdG9uLWdyaWQtY29yZSc7XG5leHBvcnQgeyBHcmlkRXZlbnRUeXBlIH0gZnJvbSAncGhvdG9uLWdyaWQtY29yZSc7XG5cbi8vIOKUgOKUgCBQaG90b24gQUkgY29uZmlndXJhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIENvbmZpZ3VyZSB0aGUgQUkgcGFuZWwgKGFuZCBpdHMgb3B0aW9uYWwgZ2VuZXJhdGl2ZSBwcm92aWRlciDigJQgR2VtaW5pLFxuLy8gT3BlbkFJLCBBbnRocm9waWMsIG9yIGEgZnVsbHkgQ3VzdG9tIGVuZHBvaW50KSB0aHJvdWdoIHRoZSBgW29wdGlvbnNdYFxuLy8gaW5wdXQncyBgcGhvdG9uQUlgIGZpZWxkIOKAlCBzZWUgdGhlIGBvcHRpb25zYCBpbnB1dCBvbiBQaG90b25HcmlkQ29tcG9uZW50IGZvclxuLy8gYW4gZXhhbXBsZS4gYFBob3RvbkFJUHJvdmlkZXJUeXBlYCBpcyBhbiBlbnVtIChhIHJ1bnRpbWUgdmFsdWUpLCBzbyBpdCBpc1xuLy8gcmUtZXhwb3J0ZWQgYXMgYSB2YWx1ZSwgbm90IGp1c3QgYSB0eXBlLlxuZXhwb3J0IHsgUGhvdG9uQUlQcm92aWRlclR5cGUgfSBmcm9tICdwaG90b24tZ3JpZC1jb3JlJztcbmV4cG9ydCB0eXBlIHsgUGhvdG9uQUlDb25maWcsIFBob3RvbkFJUHJvdmlkZXJDb25maWcsIFBob3RvbkFJUmVxdWVzdCwgUGhvdG9uQUlSZXNwb25zZSB9IGZyb20gJ3Bob3Rvbi1ncmlkLWNvcmUnO1xuXG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { TemplateRef, createComponent, EventEmitter, ElementRef, Output, Input, ViewChild, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import { GridCore, GridEventType } from 'photon-grid-core';
4
- export { GridEventType } from 'photon-grid-core';
4
+ export { GridEventType, PhotonAIProviderType } from 'photon-grid-core';
5
5
 
6
6
  /** Narrowing helpers used by the adapter (and usable by consumers/tests). */
7
7
  function isComponentRendererSpec(value) {
@@ -352,6 +352,25 @@ class PhotonGridComponent {
352
352
  * `columns` and `data` are supplied by the dedicated inputs above and are
353
353
  * merged in automatically. The core has no runtime options setter, so a
354
354
  * change to this input transparently recreates the grid.
355
+ *
356
+ * Enable the natural-language AI panel — and, optionally, its Gemini
357
+ * generative back-end — through `options.photonAI`:
358
+ *
359
+ * @example Gemini-powered AI panel
360
+ * ```ts
361
+ * import { PhotonAIProviderType } from 'photon-grid-angular';
362
+ *
363
+ * options: Partial<GridOptions> = {
364
+ * photonAI: {
365
+ * enabled: true,
366
+ * provider: {
367
+ * type: PhotonAIProviderType.Gemini,
368
+ * apiKey: environment.geminiApiKey,
369
+ * model: 'gemini-2.5-flash',
370
+ * },
371
+ * },
372
+ * };
373
+ * ```
355
374
  */
356
375
  options = {};
357
376
  /** Emitted once the grid is constructed, carrying its {@link GridApi}. */
@@ -502,11 +521,11 @@ class PhotonGridComponent {
502
521
  this.disposers.push(dispose);
503
522
  }
504
523
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotonGridComponent, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
505
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PhotonGridComponent, isStandalone: true, selector: "photon-grid", inputs: { columns: "columns", dataSet: "dataSet", options: "options" }, outputs: { gridReady: "gridReady", dataChanged: "dataChanged", rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", rowSelected: "rowSelected", cellClicked: "cellClicked", cellDoubleClicked: "cellDoubleClicked", cellValueChanged: "cellValueChanged", cellSelectionChanged: "cellSelectionChanged", columnResized: "columnResized", columnMoved: "columnMoved", sortChanged: "sortChanged", filterChanged: "filterChanged", pageChanged: "pageChanged", columnsStateChanged: "columnsStateChanged", themeChanged: "themeChanged", exportComplete: "exportComplete" }, viewQueries: [{ propertyName: "gridHost", first: true, predicate: ["gridHost"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `<div #gridHost class="photon-grid__host"></div>`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
524
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PhotonGridComponent, isStandalone: true, selector: "photon-grid-angular", inputs: { columns: "columns", dataSet: "dataSet", options: "options" }, outputs: { gridReady: "gridReady", dataChanged: "dataChanged", rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", rowSelected: "rowSelected", cellClicked: "cellClicked", cellDoubleClicked: "cellDoubleClicked", cellValueChanged: "cellValueChanged", cellSelectionChanged: "cellSelectionChanged", columnResized: "columnResized", columnMoved: "columnMoved", sortChanged: "sortChanged", filterChanged: "filterChanged", pageChanged: "pageChanged", columnsStateChanged: "columnsStateChanged", themeChanged: "themeChanged", exportComplete: "exportComplete" }, viewQueries: [{ propertyName: "gridHost", first: true, predicate: ["gridHost"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `<div #gridHost class="photon-grid__host"></div>`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
506
525
  }
507
526
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotonGridComponent, decorators: [{
508
527
  type: Component,
509
- args: [{ selector: 'photon-grid', standalone: true, template: `<div #gridHost class="photon-grid__host"></div>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"] }]
528
+ args: [{ selector: 'photon-grid-angular', standalone: true, template: `<div #gridHost class="photon-grid__host"></div>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"] }]
510
529
  }], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }, { type: i0.Injector }], propDecorators: { gridHost: [{
511
530
  type: ViewChild,
512
531
  args: ['gridHost', { static: true, read: ElementRef }]
@@ -1 +1 @@
1
- {"version":3,"file":"photon-grid-angular.mjs","sources":["../../src/library/angular-renderer.types.ts","../../src/library/angular-renderer.adapter.ts","../../src/library/photon-grid.component.ts","../../src/library/photon-grid.module.ts","../../src/public-api.ts","../../src/photon-grid-angular.ts"],"sourcesContent":["import type { TemplateRef, Type } from '@angular/core';\n\nimport type {\n ColumnDef as coreColumnDef,\n DisplayRendererParams,\n EditorRendererParams,\n FilterRendererParams,\n GroupRendererParams,\n HeaderRendererParams,\n OptionRendererParams,\n RendererOutput,\n SummaryRendererParams,\n TooltipRendererParams,\n} from 'photon-grid-core';\n \n/**\n * Renders `params` through a `@Component`.\n *\n * A **new** component instance is created every time the core invokes the\n * renderer (it has no concept of \"update\", only \"produce output for these\n * params\"). `inputs` is re-evaluated on every mount and applied via\n * `ComponentRef.setInput` before the first change-detection pass, so the\n * component sees the current params as its initial `@Input()`s.\n */\nexport interface ComponentRendererSpec<TParams, TComponent = unknown> {\n readonly kind: 'component';\n readonly component: Type<TComponent>;\n /** Maps renderer params to the component's `@Input()` bag. */\n readonly inputs?: (params: TParams) => Partial<TComponent> & Record<string, unknown>;\n}\n\n/** Context handed to an `<ng-template>` used as a renderer. */\nexport interface RendererContext<TParams> {\n /** Enables `let-x` / implicit `let-params` template syntax. */\n $implicit: TParams;\n params: TParams;\n [key: string]: unknown;\n}\n\n/**\n * Renders `params` through an `<ng-template>` (obtained via `@ViewChild`).\n *\n * Prefer a single root element in the template for `editor` / `filter`\n * slots: the core treats the returned `HTMLElement` as the interactive\n * control itself (e.g. it may call `.focus()` on it), and a multi-root\n * template gets wrapped in a synthetic `<div>` host that breaks that\n * assumption.\n */\nexport interface TemplateRendererSpec<TParams> {\n readonly kind: 'template';\n readonly template: TemplateRef<RendererContext<TParams>>;\n readonly context?: (params: TParams) => Record<string, unknown>;\n}\n\n/**\n * A renderer slot accepts either:\n * - a declarative spec (`{ kind: 'component' | 'template', ... }`), or\n * - a plain function, for consumers who want to keep producing raw\n * `HTMLElement`/`string` output (identical to the framework-agnostic core API).\n */\nexport type CellRenderer<TParams, TOutput> =\n | ComponentRendererSpec<TParams>\n | TemplateRendererSpec<TParams>\n | Type<unknown>\n | TemplateRef<RendererContext<TParams>>\n | ((params: TParams) => TOutput);\n\nexport interface ColumnRendererMap {\n display?: CellRenderer<DisplayRendererParams, RendererOutput>;\n editor?: CellRenderer<EditorRendererParams, HTMLElement>;\n option?: Type<any> | TemplateRef<any> | ((params: OptionRendererParams) => HTMLElement);\n filter?: CellRenderer<FilterRendererParams, HTMLElement>;\n tooltip?: CellRenderer<TooltipRendererParams, RendererOutput>;\n group?: CellRenderer<GroupRendererParams, RendererOutput>;\n header?: CellRenderer<HeaderRendererParams, RendererOutput>;\n summary?: CellRenderer<SummaryRendererParams, RendererOutput>;\n}\n\n/**\n * Drop-in replacement for `ColumnDef`: identical shape, except `renderer`\n * (and `renderer` on any nested `children`) accepts the declarative\n * component/template specs above in addition to plain functions.\n */\nexport type ColumnDef = Omit<coreColumnDef, 'renderer' | 'children'> & {\n renderer?: ColumnRendererMap;\n children?: ColumnDef[];\n};\n\n/** Narrowing helpers used by the adapter (and usable by consumers/tests). */\nexport function isComponentRendererSpec(\n value: unknown,\n): value is ComponentRendererSpec<unknown> {\n return !!value && typeof value === 'object' && (value as { kind?: unknown }).kind === 'component';\n}\n\nexport function isTemplateRendererSpec(\n value: unknown,\n): value is TemplateRendererSpec<unknown> {\n return !!value && typeof value === 'object' && (value as { kind?: unknown }).kind === 'template';\n}","import {\n ApplicationRef,\n ComponentRef,\n EmbeddedViewRef,\n EnvironmentInjector,\n Injector,\n TemplateRef,\n createComponent,\n} from '@angular/core';\n\nimport type { ColumnDef, RendererOutput } from 'photon-grid-core';\n\nimport {\n CellRenderer,\n ColumnRendererMap,\n ColumnDef as GridColumnDef,\n RendererContext,\n isComponentRendererSpec,\n isTemplateRendererSpec,\n} from './angular-renderer.types';\n\ntype RendererMount =\n | { readonly kind: 'component'; readonly ref: ComponentRef<unknown> }\n | { readonly kind: 'template'; readonly ref: EmbeddedViewRef<unknown> };\n\ntype GridLifecycleMethod = 'pgGridInit' | 'pgGridRefresh' | 'pgGridDestroy';\n\n/**\n * Bridges the framework-agnostic `ColumnRendererMap` (plain functions\n * returning `HTMLElement | string`) to Angular components and templates.\n *\n * One instance is owned per `<photon-grid>` and lives for the component's\n * lifetime: {@link adaptColumns} is called whenever columns are (re)supplied,\n * and {@link dispose} is called once, in `ngOnDestroy`, to guarantee nothing\n * outlives the host component.\n *\n * ### Why a MutationObserver\n * The core owns cell/row virtualization and recycling; it has no lifecycle\n * hook that tells us \"this cell's DOM node is gone, destroy whatever you\n * mounted into it\". Since every renderer invocation mounts a *fresh*\n * component/embedded view (the core's contract is \"produce output for these\n * params\", not \"patch existing output\"), the only reliable place to catch\n * disposal is watching the DOM itself: when the core removes/replaces a\n * mounted host element, a MutationObserver on the grid root sees it and we\n * destroy the corresponding Angular view right then. This is what keeps\n * scrolling/virtualized grids from leaking components.\n */\nexport class RendererAdapter {\n /** Host element -> live Angular view mounted into it. */\n private readonly mounts = new Map<HTMLElement, RendererMount>();\n\n private observer?: MutationObserver;\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly environmentInjector: EnvironmentInjector,\n private readonly elementInjector: Injector,\n ) {}\n\n /**\n * Starts watching `root` for node removals so mounted views can be torn\n * down as soon as the core discards their host element. Safe to call\n * repeatedly (e.g. across grid recreation) — any previous observer is\n * disconnected first, but existing mounts are left untouched.\n */\n observe(root: HTMLElement): void {\n this.observer?.disconnect();\n\n this.observer = new MutationObserver((mutations) => {\n // Bounded by the number of *currently mounted* renderer views\n // (i.e. visible custom cells), not by row/data-set size, because\n // virtualization keeps that number small regardless of grid size.\n if (this.mounts.size === 0) {\n return;\n }\n for (const mutation of mutations) {\n mutation.removedNodes.forEach((node) => this.cleanupRemovedNode(node));\n }\n });\n\n this.observer.observe(root, { childList: true, subtree: true });\n }\n\n /** Recursively converts `GridColumnDef[]` into plain `ColumnDef[]`. */\n adaptColumns(columns: readonly GridColumnDef[]): ColumnDef[] {\n return columns.map((column) => this.adaptColumn(column));\n }\n\n /**\n * Destroys every currently-mounted component/embedded view and stops\n * observing. Call exactly once, when the owning grid is torn down.\n * Deliberately unconditional (does not wait on the MutationObserver):\n * `disconnect()` drops any in-flight mutation records, so relying on it\n * for final teardown would risk leaking whatever hadn't been flushed yet.\n */\n dispose(): void {\n this.observer?.disconnect();\n this.observer = undefined;\n\n for (const [element, mount] of this.mounts) {\n this.destroyMount(mount);\n this.mounts.delete(element);\n }\n }\n\n private adaptColumn(column: GridColumnDef): ColumnDef {\n const { renderer, children, ...rest } = column;\n const adapted = { ...rest } as ColumnDef;\n\n if (renderer) {\n // Adapted per-slot (rather than via a generic loop over the\n // slot names) so each call keeps its own TParams/TOutput pair —\n // looping over a union of keys would force `adaptRenderer` to\n // accept the union of every slot's renderer type at once, which\n // doesn't type-check (an EditorRendererParams renderer isn't\n // assignable where a TooltipRendererParams renderer is expected).\n const adaptedRenderer: Partial<ColumnRendererMap> = {\n display: this.adaptRenderer(renderer.display),\n editor: this.adaptRenderer(renderer.editor),\n option: this.adaptRenderer(renderer.option),\n filter: this.adaptRenderer(renderer.filter),\n tooltip: this.adaptRenderer(renderer.tooltip),\n group: this.adaptRenderer(renderer.group),\n header: this.adaptRenderer(renderer.header),\n summary: this.adaptRenderer(renderer.summary),\n };\n adapted.renderer = adaptedRenderer as any;\n }\n\n if (children) {\n adapted.children = children.map((child) => this.adaptColumn(child));\n }\n\n return adapted;\n }\n\n private adaptRenderer<TParams, TOutput extends RendererOutput | HTMLElement>(\n renderer: CellRenderer<TParams, TOutput> | undefined,\n ): ((params: TParams) => TOutput) | undefined {\n if (!renderer) {\n return undefined;\n }\n\n if (isComponentRendererSpec(renderer)) {\n return (params: TParams) => this.mountComponent(renderer, params) as unknown as TOutput;\n }\n\n if (isTemplateRendererSpec(renderer)) {\n return (params: TParams) => this.mountTemplate(renderer, params) as unknown as TOutput;\n }\n\n if (renderer instanceof TemplateRef) {\n return (params: TParams) => this.mountTemplate({ template: renderer }, params) as unknown as TOutput;\n }\n\n if (this.isComponentType(renderer)) {\n return (params: TParams) => this.mountComponent({ component: renderer }, params) as unknown as TOutput;\n }\n\n if (typeof renderer === 'function') {\n return renderer;\n }\n\n return undefined;\n }\n\n private isComponentType(value: unknown): value is import('@angular/core').Type<unknown> {\n return typeof value === 'function' && !!(value as { readonly ɵcmp?: unknown }).ɵcmp;\n }\n\n private mountComponent<TParams>(\n spec: { component: import('@angular/core').Type<unknown>; inputs?: (params: TParams) => Record<string, unknown> },\n params: TParams,\n ): HTMLElement {\n const componentRef = createComponent(spec.component, {\n environmentInjector: this.environmentInjector,\n elementInjector: this.elementInjector,\n });\n\n const normalizedParams = this.normalizeRendererParams(params);\n const inputs = spec.inputs ? spec.inputs(normalizedParams) : this.inferInputs(componentRef, normalizedParams);\n for (const [key, value] of Object.entries(inputs)) {\n this.setComponentInput(componentRef, key, value);\n }\n\n this.setComponentInput(componentRef, 'params', normalizedParams);\n\n // Attaching to ApplicationRef is what makes this component\n // participate in normal change detection (zone triggers, async\n // pipe, etc.) for as long as it stays mounted — required for any\n // interactivity inside the component itself (clicks, forms, ...).\n this.appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n\n this.invokeLifecycle(componentRef.instance, 'pgGridInit', normalizedParams);\n this.invokeLifecycle(componentRef.instance, 'pgGridRefresh', normalizedParams);\n\n const element = componentRef.location.nativeElement as HTMLElement;\n this.mounts.set(element, { kind: 'component', ref: componentRef });\n return element;\n }\n\n private setComponentInput<TComponent>(\n componentRef: ComponentRef<TComponent>,\n key: string,\n value: unknown,\n ): void {\n try {\n componentRef.setInput(key, value);\n return;\n } catch {\n const instance = componentRef.instance as Record<string, unknown>;\n instance[key] = value;\n }\n }\n\n private normalizeRendererParams<TParams>(params: TParams): TParams & { value?: unknown; rawValue?: unknown } {\n const normalized = { ...(params as Record<string, unknown>) };\n const option = normalized['option'];\n\n if (normalized['value'] === undefined && option && typeof option === 'object') {\n const optionValue = (option as { value?: unknown }).value;\n normalized['value'] = optionValue;\n normalized['rawValue'] = optionValue;\n }\n\n return normalized as TParams & { value?: unknown; rawValue?: unknown };\n }\n\n private inferInputs<TComponent, TParams>(\n componentRef: ComponentRef<TComponent>,\n params: TParams,\n ): Record<string, unknown> {\n const instance = componentRef.instance as Record<string, unknown>;\n const inputs: Record<string, unknown> = {};\n const paramBag = params as Record<string, unknown>;\n const row = paramBag['row'] && typeof paramBag['row'] === 'object'\n ? paramBag['row'] as Record<string, unknown>\n : undefined;\n\n for (const key of Object.keys(instance)) {\n if (key === '__ngContext__' || key === 'constructor') {\n continue;\n }\n\n if (paramBag[key] !== undefined) {\n inputs[key] = paramBag[key];\n continue;\n }\n\n if (row && row[key] !== undefined) {\n inputs[key] = row[key];\n continue;\n }\n\n if (key === 'seed' && row && row['id'] !== undefined) {\n inputs[key] = row['id'];\n continue;\n }\n\n if (key === 'value' && paramBag['value'] !== undefined) {\n inputs[key] = paramBag['value'];\n }\n }\n\n return inputs;\n }\n\n private invokeLifecycle<TParams>(\n instance: unknown,\n lifecycle: GridLifecycleMethod,\n params: TParams,\n ): void {\n const candidate = (instance as Record<string, unknown> | null)?.[lifecycle];\n if (typeof candidate === 'function') {\n (candidate as (params: TParams) => void).call(instance, params);\n }\n }\n\n private mountTemplate<TParams>(\n spec: {\n template: import('@angular/core').TemplateRef<RendererContext<TParams>>;\n context?: (params: TParams) => Record<string, unknown>;\n },\n params: TParams,\n ): HTMLElement {\n const normalizedParams = this.normalizeRendererParams(params);\n const context = {\n $implicit: normalizedParams,\n params: normalizedParams,\n ...(spec.context ? spec.context(normalizedParams) : {}),\n };\n\n const viewRef = spec.template.createEmbeddedView(context);\n this.appRef.attachView(viewRef);\n viewRef.detectChanges();\n\n const host = this.resolveTemplateHost(viewRef);\n this.mounts.set(host, { kind: 'template', ref: viewRef });\n return host;\n }\n\n /**\n * Uses the template's single root element directly when possible (so\n * `editor`/`filter` slots that expect the returned element to *be* the\n * control keep working); falls back to a wrapper `<div>` for templates\n * with multiple root nodes or text-only content.\n */\n private resolveTemplateHost(viewRef: EmbeddedViewRef<unknown>): HTMLElement {\n const [singleRoot] = viewRef.rootNodes;\n if (viewRef.rootNodes.length === 1 && singleRoot instanceof HTMLElement) {\n return singleRoot;\n }\n\n const host = document.createElement('div');\n host.classList.add('photon-grid__template-host');\n host.append(...viewRef.rootNodes);\n return host;\n }\n\n private cleanupRemovedNode(node: Node): void {\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n const directMount = this.mounts.get(node);\n if (directMount) {\n this.mounts.delete(node);\n this.destroyMount(directMount);\n }\n\n // The core may remove an ancestor (e.g. an entire recycled row)\n // rather than the mounted element itself; sweep for any tracked\n // host contained in the removed subtree.\n if (node.childElementCount === 0) {\n return;\n }\n for (const [element, mount] of this.mounts) {\n if (node.contains(element)) {\n this.mounts.delete(element);\n this.destroyMount(mount);\n }\n }\n }\n\n private destroyMount(mount: RendererMount): void {\n if (mount.kind === 'component') {\n this.invokeLifecycle(mount.ref.instance, 'pgGridDestroy', undefined);\n const viewRef = mount.ref.hostView;\n this.appRef.detachView(viewRef);\n mount.ref.destroy();\n return;\n }\n\n const viewRef = mount.ref;\n this.appRef.detachView(viewRef);\n mount.ref.destroy();\n }\n}","import {\n AfterViewInit,\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { GridCore, GridEventType } from 'photon-grid-core';\n\nimport type {\n CellClickedEvent,\n CellSelectionChangedEvent,\n CellValueChangedEvent,\n ColumnMovedEvent,\n ColumnResizedEvent,\n ColumnsStateChangedEvent,\n ColumnSortedEvent,\n DataChangedEvent,\n ExportEvent,\n FilterChangedEvent,\n GridApi,\n GridEventMap,\n GridOptions,\n PageChangedEvent,\n RowClickPayload,\n RowSelectedEvent,\n ThemeChangedEvent,\n} from 'photon-grid-core';\n\nimport { RendererAdapter } from './angular-renderer.adapter';\nimport type {ColumnDef as GridColumnDef } from './angular-renderer.types';\n\n/**\n * Angular wrapper around the framework-agnostic Photon Grid core.\n *\n * The component owns a single {@link GridCore} instance, keeps it in sync\n * with the `columns`, `dataSet` and `options` inputs, and re-emits the\n * grid's internal events as strongly-typed Angular `@Output`s.\n *\n * Cell/header/editor/etc. renderers may be plain functions (raw\n * `HTMLElement`/`string`, identical to the core's own API), or declarative\n * Angular specs — `{ kind: 'component', component: MyBadge }` or\n * `{ kind: 'template', template: myTemplateRef }` — via {@link GridColumnDef}.\n * An internal {@link RendererAdapter} mounts/unmounts those for every\n * renderer invocation and disposes them as soon as the core discards their\n * host element, so virtualization/recycling never leaks components.\n *\n * @example\n * ```html\n * <photon-grid\n * [columns]=\"columns\"\n * [dataSet]=\"rows\"\n * [options]=\"{ theme: 'light', showCheckboxes: true }\"\n * (gridReady)=\"onReady($event)\"\n * (rowClicked)=\"onRowClicked($event)\">\n * </photon-grid>\n * ```\n *\n * @example Component-based cell renderer\n * ```ts\n * columns: GridColumnDef[] = [{\n * colId: 'status', field: 'status', header: 'Status', type: 'string',\n * renderer: {\n * display: {\n * kind: 'component',\n * component: StatusBadgeComponent,\n * inputs: (params) => ({ value: params.value }),\n * },\n * },\n * }];\n * ```\n *\n * @example Template-based cell renderer\n * ```html\n * <ng-template #statusTpl let-params>\n * <span class=\"badge\">{{ params.value }}</span>\n * </ng-template>\n * ```\n * ```ts\n * @ViewChild('statusTpl') statusTpl!: TemplateRef<RendererContext<DisplayRendererParams>>;\n * columns: GridColumnDef[] = [{\n * colId: 'status', field: 'status', header: 'Status', type: 'string',\n * renderer: { display: { kind: 'template', template: this.statusTpl } },\n * }];\n * ```\n */\n@Component({\n selector: 'photon-grid',\n standalone: true,\n template: `<div #gridHost class=\"photon-grid__host\"></div>`,\n styleUrl: './photon-grid.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PhotonGridComponent implements AfterViewInit, OnChanges, OnDestroy {\n\n /** Container the grid renders into. */\n @ViewChild('gridHost', { static: true, read: ElementRef })\n private readonly gridHost!: ElementRef<HTMLDivElement>;\n\n /**\n * Column definitions. Bound to {@link GridApi.setColumns} on change.\n * Provided as a dedicated input rather than through `options.columns`.\n * Renderer slots accept Angular components/templates in addition to\n * plain functions — see {@link GridColumnDef}.\n */\n @Input()\n columns: GridColumnDef[] = [];\n\n /**\n * Row data. Bound to {@link GridApi.setData} on change. Provided as a\n * dedicated input rather than through `options.data`.\n */\n @Input()\n dataSet: Record<string, unknown>[] = [];\n\n /**\n * Remaining grid options (theme, selection, editing, pagination, …).\n * `columns` and `data` are supplied by the dedicated inputs above and are\n * merged in automatically. The core has no runtime options setter, so a\n * change to this input transparently recreates the grid.\n */\n @Input()\n options: Partial<GridOptions> = {};\n\n /** Emitted once the grid is constructed, carrying its {@link GridApi}. */\n @Output() readonly gridReady = new EventEmitter<GridApi>();\n\n /** Row data changed (count delta). */\n @Output() readonly dataChanged = new EventEmitter<DataChangedEvent>();\n\n /** A row was clicked. */\n @Output() readonly rowClicked = new EventEmitter<RowClickPayload>();\n\n /** A row was double-clicked. */\n @Output() readonly rowDoubleClicked = new EventEmitter<RowClickPayload>();\n\n /** Row selection changed. */\n @Output() readonly rowSelected = new EventEmitter<RowSelectedEvent>();\n\n /** A cell was clicked. */\n @Output() readonly cellClicked = new EventEmitter<CellClickedEvent>();\n\n /** A cell was double-clicked. */\n @Output() readonly cellDoubleClicked = new EventEmitter<CellClickedEvent>();\n\n /** A cell value was committed. */\n @Output() readonly cellValueChanged = new EventEmitter<CellValueChangedEvent>();\n\n /** Range/cell selection changed. */\n @Output() readonly cellSelectionChanged = new EventEmitter<CellSelectionChangedEvent>();\n\n /** A column was resized. */\n @Output() readonly columnResized = new EventEmitter<ColumnResizedEvent>();\n\n /** A column was reordered. */\n @Output() readonly columnMoved = new EventEmitter<ColumnMovedEvent>();\n\n /** Sort state changed. */\n @Output() readonly sortChanged = new EventEmitter<ColumnSortedEvent>();\n\n /** Filter model changed. */\n @Output() readonly filterChanged = new EventEmitter<FilterChangedEvent>();\n\n /** Pagination page or size changed. */\n @Output() readonly pageChanged = new EventEmitter<PageChangedEvent>();\n\n /** Column state (width/visibility/pin/order) changed. */\n @Output() readonly columnsStateChanged = new EventEmitter<ColumnsStateChangedEvent>();\n\n /** Active theme changed. */\n @Output() readonly themeChanged = new EventEmitter<ThemeChangedEvent>();\n\n /** An export finished. */\n @Output() readonly exportComplete = new EventEmitter<ExportEvent>();\n\n /** The live core instance, created in {@link ngAfterViewInit}. */\n private grid?: GridCore;\n\n /** Unsubscribe callbacks for every wired core event; drained on teardown. */\n private readonly disposers: Array<() => void> = [];\n\n /**\n * Bridges Angular component/template renderer specs to the core's\n * plain-function `ColumnRendererMap`. Owned for the lifetime of this\n * component (not DI-provided) so its mounted-view tracking is scoped\n * to this grid instance alone.\n *\n * Built explicitly in the constructor body (rather than as a field\n * initializer referencing constructor-parameter properties) so it isn't\n * subject to field-initializer-vs-parameter-property ordering: at this\n * point `appRef`/`environmentInjector`/`elementInjector` are plain local\n * constructor arguments, guaranteed to already be set.\n */\n private readonly rendererAdapter: RendererAdapter;\n\n constructor(\n appRef: ApplicationRef,\n environmentInjector: EnvironmentInjector,\n elementInjector: Injector,\n ) {\n this.rendererAdapter = new RendererAdapter(appRef, environmentInjector, elementInjector);\n }\n\n ngAfterViewInit(): void {\n this.createGrid();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Initial inputs are consumed by createGrid() in ngAfterViewInit.\n if (!this.grid) {\n return;\n }\n\n // An options change cannot be applied incrementally (no core setter),\n // so recreate; this already re-seeds columns and data.\n if (changes['options'] && !changes['options'].firstChange) {\n this.recreateGrid();\n return;\n }\n\n if (changes['columns'] && !changes['columns'].firstChange) {\n this.grid.api.setColumns(this.rendererAdapter.adaptColumns(this.columns));\n }\n\n if (changes['dataSet'] && !changes['dataSet'].firstChange) {\n this.grid.api.setData(this.dataSet);\n }\n }\n\n ngOnDestroy(): void {\n this.teardownGrid();\n }\n\n /** Builds the core from the current inputs and wires its events. */\n private createGrid(): void {\n // Must be observing *before* the core mounts anything, so every\n // renderer-produced element is tracked for cleanup from the start.\n this.rendererAdapter.observe(this.gridHost.nativeElement);\n\n const mergedOptions: GridOptions = {\n ...this.options,\n columns: this.rendererAdapter.adaptColumns(this.columns),\n data: this.dataSet,\n };\n\n const grid = new GridCore(this.gridHost.nativeElement, mergedOptions);\n this.grid = grid;\n\n this.wireEvents(grid.api);\n\n // GridCore emits READY synchronously during construction (before we can\n // attach a listener), so surface the ready signal explicitly here.\n this.gridReady.emit(grid.api);\n }\n\n /** Destroys the current core, drops it, and builds a fresh one. */\n private recreateGrid(): void {\n this.teardownGrid();\n this.createGrid();\n }\n\n /**\n * Disposes event subscriptions, the renderer adapter (stopping its\n * observer and destroying every mounted component/embedded view), and\n * the core instance itself, if any.\n *\n * Order matters: the adapter is disposed *after* `grid.destroy()` so\n * any teardown-time DOM removal is irrelevant (dispose() unconditionally\n * destroys all remaining mounts rather than depending on the\n * MutationObserver having flushed).\n */\n private teardownGrid(): void {\n for (const dispose of this.disposers) {\n dispose();\n }\n this.disposers.length = 0;\n\n this.grid?.destroy();\n this.grid = undefined;\n\n this.rendererAdapter.dispose();\n }\n\n /** Subscribes every core event to its corresponding `@Output` emitter. */\n private wireEvents(api: GridApi): void {\n this.subscribe(api, GridEventType.DATA_CHANGED, this.dataChanged);\n this.subscribe(api, GridEventType.ROW_CLICKED, this.rowClicked);\n this.subscribe(api, GridEventType.ROW_DOUBLE_CLICKED, this.rowDoubleClicked);\n this.subscribe(api, GridEventType.ROW_SELECTED, this.rowSelected);\n this.subscribe(api, GridEventType.CELL_CLICKED, this.cellClicked);\n this.subscribe(api, GridEventType.CELL_DOUBLE_CLICKED, this.cellDoubleClicked);\n this.subscribe(api, GridEventType.CELL_VALUE_CHANGED, this.cellValueChanged);\n this.subscribe(api, GridEventType.CELL_SELECTION_CHANGED, this.cellSelectionChanged);\n this.subscribe(api, GridEventType.COLUMN_RESIZED, this.columnResized);\n this.subscribe(api, GridEventType.COLUMN_MOVED, this.columnMoved);\n this.subscribe(api, GridEventType.SORT_CHANGED, this.sortChanged);\n this.subscribe(api, GridEventType.FILTER_CHANGED, this.filterChanged);\n this.subscribe(api, GridEventType.PAGE_CHANGED, this.pageChanged);\n this.subscribe(api, GridEventType.COLUMNS_STATE_CHANGED, this.columnsStateChanged);\n this.subscribe(api, GridEventType.THEME_CHANGED, this.themeChanged);\n this.subscribe(api, GridEventType.EXPORT_COMPLETE, this.exportComplete);\n }\n\n /**\n * Forwards a single strongly-typed core event to an Angular emitter and\n * records its unsubscribe callback. The generic constraint guarantees the\n * emitter's payload type matches the event's payload in {@link GridEventMap}.\n */\n private subscribe<E extends keyof GridEventMap>(\n api: GridApi,\n event: E,\n emitter: EventEmitter<GridEventMap[E]>,\n ): void {\n const dispose = api.on<GridEventMap[E]>(event, (payload) => emitter.emit(payload));\n this.disposers.push(dispose);\n }\n}","import { NgModule } from '@angular/core';\n\nimport { PhotonGridComponent } from './photon-grid.component';\n\n/**\n * Convenience NgModule for consumers that are not yet on standalone APIs.\n * {@link PhotonGridComponent} is itself standalone; this module simply\n * imports and re-exports it so it can be dropped into an NgModule's\n * `imports`/`exports` and used in that module's templates.\n */\n@NgModule({\n imports: [PhotonGridComponent],\n exports: [PhotonGridComponent],\n})\nexport class PhotonGridModule {}\n","/*\n * Public API surface of photon-grid-angular.\n */\n\nexport * from './library/photon-grid.component';\nexport * from './library/photon-grid.module';\nexport * from './library/angular-renderer.types';\n\n// Re-export the most commonly needed core types so consumers can bind the\n// wrapper without importing photon-grid-core directly.\nexport type {\n GridApi,\n GridOptions,\n} from 'photon-grid-core';\nexport { GridEventType } from 'photon-grid-core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"photon-grid-angular.mjs","sources":["../../src/library/angular-renderer.types.ts","../../src/library/angular-renderer.adapter.ts","../../src/library/photon-grid.component.ts","../../src/library/photon-grid.module.ts","../../src/public-api.ts","../../src/photon-grid-angular.ts"],"sourcesContent":["import type { TemplateRef, Type } from '@angular/core';\n\nimport type {\n ColumnDefInput as CoreColumnDefInput,\n DisplayRendererParams,\n EditorRendererParams,\n FilterRendererParams,\n GroupRendererParams,\n HeaderRendererParams,\n OptionRendererParams,\n RendererOutput,\n SummaryRendererParams,\n TooltipRendererParams,\n} from 'photon-grid-core';\n \n/**\n * Renders `params` through a `@Component`.\n *\n * A **new** component instance is created every time the core invokes the\n * renderer (it has no concept of \"update\", only \"produce output for these\n * params\"). `inputs` is re-evaluated on every mount and applied via\n * `ComponentRef.setInput` before the first change-detection pass, so the\n * component sees the current params as its initial `@Input()`s.\n */\nexport interface ComponentRendererSpec<TParams, TComponent = unknown> {\n readonly kind: 'component';\n readonly component: Type<TComponent>;\n /** Maps renderer params to the component's `@Input()` bag. */\n readonly inputs?: (params: TParams) => Partial<TComponent> & Record<string, unknown>;\n}\n\n/** Context handed to an `<ng-template>` used as a renderer. */\nexport interface RendererContext<TParams> {\n /** Enables `let-x` / implicit `let-params` template syntax. */\n $implicit: TParams;\n params: TParams;\n [key: string]: unknown;\n}\n\n/**\n * Renders `params` through an `<ng-template>` (obtained via `@ViewChild`).\n *\n * Prefer a single root element in the template for `editor` / `filter`\n * slots: the core treats the returned `HTMLElement` as the interactive\n * control itself (e.g. it may call `.focus()` on it), and a multi-root\n * template gets wrapped in a synthetic `<div>` host that breaks that\n * assumption.\n */\nexport interface TemplateRendererSpec<TParams> {\n readonly kind: 'template';\n readonly template: TemplateRef<RendererContext<TParams>>;\n readonly context?: (params: TParams) => Record<string, unknown>;\n}\n\n/**\n * A renderer slot accepts either:\n * - a declarative spec (`{ kind: 'component' | 'template', ... }`), or\n * - a plain function, for consumers who want to keep producing raw\n * `HTMLElement`/`string` output (identical to the framework-agnostic core API).\n */\nexport type CellRenderer<TParams, TOutput> =\n | ComponentRendererSpec<TParams>\n | TemplateRendererSpec<TParams>\n | Type<unknown>\n | TemplateRef<RendererContext<TParams>>\n | ((params: TParams) => TOutput);\n\nexport interface ColumnRendererMap {\n display?: CellRenderer<DisplayRendererParams, RendererOutput>;\n editor?: CellRenderer<EditorRendererParams, HTMLElement>;\n option?: Type<any> | TemplateRef<any> | ((params: OptionRendererParams) => HTMLElement);\n filter?: CellRenderer<FilterRendererParams, HTMLElement>;\n tooltip?: CellRenderer<TooltipRendererParams, RendererOutput>;\n group?: CellRenderer<GroupRendererParams, RendererOutput>;\n header?: CellRenderer<HeaderRendererParams, RendererOutput>;\n summary?: CellRenderer<SummaryRendererParams, RendererOutput>;\n}\n\n/**\n * Drop-in replacement for the core column definition, built on the core's\n * {@link CoreColumnDefInput} so it mirrors the same relaxed contract: **only\n * `field` is required**; `colId`, `header` and `type` are optional and filled\n * in by the core (auto `colId`, header defaulting to the field in Title Case,\n * `type` defaulting to `'string'`). This wrapper additionally lets `renderer`\n * (and `renderer` on any nested `children`) accept the declarative\n * component/template specs above in addition to plain functions.\n */\nexport type ColumnDef = Omit<CoreColumnDefInput, 'renderer' | 'children'> & {\n renderer?: ColumnRendererMap;\n children?: ColumnDef[];\n};\n\n/** Narrowing helpers used by the adapter (and usable by consumers/tests). */\nexport function isComponentRendererSpec(\n value: unknown,\n): value is ComponentRendererSpec<unknown> {\n return !!value && typeof value === 'object' && (value as { kind?: unknown }).kind === 'component';\n}\n\nexport function isTemplateRendererSpec(\n value: unknown,\n): value is TemplateRendererSpec<unknown> {\n return !!value && typeof value === 'object' && (value as { kind?: unknown }).kind === 'template';\n}","import {\n ApplicationRef,\n ComponentRef,\n EmbeddedViewRef,\n EnvironmentInjector,\n Injector,\n TemplateRef,\n createComponent,\n} from '@angular/core';\n\nimport type { ColumnDef, RendererOutput } from 'photon-grid-core';\n\nimport {\n CellRenderer,\n ColumnRendererMap,\n ColumnDef as GridColumnDef,\n RendererContext,\n isComponentRendererSpec,\n isTemplateRendererSpec,\n} from './angular-renderer.types';\n\ntype RendererMount =\n | { readonly kind: 'component'; readonly ref: ComponentRef<unknown> }\n | { readonly kind: 'template'; readonly ref: EmbeddedViewRef<unknown> };\n\ntype GridLifecycleMethod = 'pgGridInit' | 'pgGridRefresh' | 'pgGridDestroy';\n\n/**\n * Bridges the framework-agnostic `ColumnRendererMap` (plain functions\n * returning `HTMLElement | string`) to Angular components and templates.\n *\n * One instance is owned per `<photon-grid>` and lives for the component's\n * lifetime: {@link adaptColumns} is called whenever columns are (re)supplied,\n * and {@link dispose} is called once, in `ngOnDestroy`, to guarantee nothing\n * outlives the host component.\n *\n * ### Why a MutationObserver\n * The core owns cell/row virtualization and recycling; it has no lifecycle\n * hook that tells us \"this cell's DOM node is gone, destroy whatever you\n * mounted into it\". Since every renderer invocation mounts a *fresh*\n * component/embedded view (the core's contract is \"produce output for these\n * params\", not \"patch existing output\"), the only reliable place to catch\n * disposal is watching the DOM itself: when the core removes/replaces a\n * mounted host element, a MutationObserver on the grid root sees it and we\n * destroy the corresponding Angular view right then. This is what keeps\n * scrolling/virtualized grids from leaking components.\n */\nexport class RendererAdapter {\n /** Host element -> live Angular view mounted into it. */\n private readonly mounts = new Map<HTMLElement, RendererMount>();\n\n private observer?: MutationObserver;\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly environmentInjector: EnvironmentInjector,\n private readonly elementInjector: Injector,\n ) {}\n\n /**\n * Starts watching `root` for node removals so mounted views can be torn\n * down as soon as the core discards their host element. Safe to call\n * repeatedly (e.g. across grid recreation) — any previous observer is\n * disconnected first, but existing mounts are left untouched.\n */\n observe(root: HTMLElement): void {\n this.observer?.disconnect();\n\n this.observer = new MutationObserver((mutations) => {\n // Bounded by the number of *currently mounted* renderer views\n // (i.e. visible custom cells), not by row/data-set size, because\n // virtualization keeps that number small regardless of grid size.\n if (this.mounts.size === 0) {\n return;\n }\n for (const mutation of mutations) {\n mutation.removedNodes.forEach((node) => this.cleanupRemovedNode(node));\n }\n });\n\n this.observer.observe(root, { childList: true, subtree: true });\n }\n\n /** Recursively converts `GridColumnDef[]` into plain `ColumnDef[]`. */\n adaptColumns(columns: readonly GridColumnDef[]): ColumnDef[] {\n return columns.map((column) => this.adaptColumn(column));\n }\n\n /**\n * Destroys every currently-mounted component/embedded view and stops\n * observing. Call exactly once, when the owning grid is torn down.\n * Deliberately unconditional (does not wait on the MutationObserver):\n * `disconnect()` drops any in-flight mutation records, so relying on it\n * for final teardown would risk leaking whatever hadn't been flushed yet.\n */\n dispose(): void {\n this.observer?.disconnect();\n this.observer = undefined;\n\n for (const [element, mount] of this.mounts) {\n this.destroyMount(mount);\n this.mounts.delete(element);\n }\n }\n\n private adaptColumn(column: GridColumnDef): ColumnDef {\n const { renderer, children, ...rest } = column;\n const adapted = { ...rest } as ColumnDef;\n\n if (renderer) {\n // Adapted per-slot (rather than via a generic loop over the\n // slot names) so each call keeps its own TParams/TOutput pair —\n // looping over a union of keys would force `adaptRenderer` to\n // accept the union of every slot's renderer type at once, which\n // doesn't type-check (an EditorRendererParams renderer isn't\n // assignable where a TooltipRendererParams renderer is expected).\n const adaptedRenderer: Partial<ColumnRendererMap> = {\n display: this.adaptRenderer(renderer.display),\n editor: this.adaptRenderer(renderer.editor),\n option: this.adaptRenderer(renderer.option),\n filter: this.adaptRenderer(renderer.filter),\n tooltip: this.adaptRenderer(renderer.tooltip),\n group: this.adaptRenderer(renderer.group),\n header: this.adaptRenderer(renderer.header),\n summary: this.adaptRenderer(renderer.summary),\n };\n adapted.renderer = adaptedRenderer as any;\n }\n\n if (children) {\n adapted.children = children.map((child) => this.adaptColumn(child));\n }\n\n return adapted;\n }\n\n private adaptRenderer<TParams, TOutput extends RendererOutput | HTMLElement>(\n renderer: CellRenderer<TParams, TOutput> | undefined,\n ): ((params: TParams) => TOutput) | undefined {\n if (!renderer) {\n return undefined;\n }\n\n if (isComponentRendererSpec(renderer)) {\n return (params: TParams) => this.mountComponent(renderer, params) as unknown as TOutput;\n }\n\n if (isTemplateRendererSpec(renderer)) {\n return (params: TParams) => this.mountTemplate(renderer, params) as unknown as TOutput;\n }\n\n if (renderer instanceof TemplateRef) {\n return (params: TParams) => this.mountTemplate({ template: renderer }, params) as unknown as TOutput;\n }\n\n if (this.isComponentType(renderer)) {\n return (params: TParams) => this.mountComponent({ component: renderer }, params) as unknown as TOutput;\n }\n\n if (typeof renderer === 'function') {\n return renderer;\n }\n\n return undefined;\n }\n\n private isComponentType(value: unknown): value is import('@angular/core').Type<unknown> {\n return typeof value === 'function' && !!(value as { readonly ɵcmp?: unknown }).ɵcmp;\n }\n\n private mountComponent<TParams>(\n spec: { component: import('@angular/core').Type<unknown>; inputs?: (params: TParams) => Record<string, unknown> },\n params: TParams,\n ): HTMLElement {\n const componentRef = createComponent(spec.component, {\n environmentInjector: this.environmentInjector,\n elementInjector: this.elementInjector,\n });\n\n const normalizedParams = this.normalizeRendererParams(params);\n const inputs = spec.inputs ? spec.inputs(normalizedParams) : this.inferInputs(componentRef, normalizedParams);\n for (const [key, value] of Object.entries(inputs)) {\n this.setComponentInput(componentRef, key, value);\n }\n\n this.setComponentInput(componentRef, 'params', normalizedParams);\n\n // Attaching to ApplicationRef is what makes this component\n // participate in normal change detection (zone triggers, async\n // pipe, etc.) for as long as it stays mounted — required for any\n // interactivity inside the component itself (clicks, forms, ...).\n this.appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n\n this.invokeLifecycle(componentRef.instance, 'pgGridInit', normalizedParams);\n this.invokeLifecycle(componentRef.instance, 'pgGridRefresh', normalizedParams);\n\n const element = componentRef.location.nativeElement as HTMLElement;\n this.mounts.set(element, { kind: 'component', ref: componentRef });\n return element;\n }\n\n private setComponentInput<TComponent>(\n componentRef: ComponentRef<TComponent>,\n key: string,\n value: unknown,\n ): void {\n try {\n componentRef.setInput(key, value);\n return;\n } catch {\n const instance = componentRef.instance as Record<string, unknown>;\n instance[key] = value;\n }\n }\n\n private normalizeRendererParams<TParams>(params: TParams): TParams & { value?: unknown; rawValue?: unknown } {\n const normalized = { ...(params as Record<string, unknown>) };\n const option = normalized['option'];\n\n if (normalized['value'] === undefined && option && typeof option === 'object') {\n const optionValue = (option as { value?: unknown }).value;\n normalized['value'] = optionValue;\n normalized['rawValue'] = optionValue;\n }\n\n return normalized as TParams & { value?: unknown; rawValue?: unknown };\n }\n\n private inferInputs<TComponent, TParams>(\n componentRef: ComponentRef<TComponent>,\n params: TParams,\n ): Record<string, unknown> {\n const instance = componentRef.instance as Record<string, unknown>;\n const inputs: Record<string, unknown> = {};\n const paramBag = params as Record<string, unknown>;\n const row = paramBag['row'] && typeof paramBag['row'] === 'object'\n ? paramBag['row'] as Record<string, unknown>\n : undefined;\n\n for (const key of Object.keys(instance)) {\n if (key === '__ngContext__' || key === 'constructor') {\n continue;\n }\n\n if (paramBag[key] !== undefined) {\n inputs[key] = paramBag[key];\n continue;\n }\n\n if (row && row[key] !== undefined) {\n inputs[key] = row[key];\n continue;\n }\n\n if (key === 'seed' && row && row['id'] !== undefined) {\n inputs[key] = row['id'];\n continue;\n }\n\n if (key === 'value' && paramBag['value'] !== undefined) {\n inputs[key] = paramBag['value'];\n }\n }\n\n return inputs;\n }\n\n private invokeLifecycle<TParams>(\n instance: unknown,\n lifecycle: GridLifecycleMethod,\n params: TParams,\n ): void {\n const candidate = (instance as Record<string, unknown> | null)?.[lifecycle];\n if (typeof candidate === 'function') {\n (candidate as (params: TParams) => void).call(instance, params);\n }\n }\n\n private mountTemplate<TParams>(\n spec: {\n template: import('@angular/core').TemplateRef<RendererContext<TParams>>;\n context?: (params: TParams) => Record<string, unknown>;\n },\n params: TParams,\n ): HTMLElement {\n const normalizedParams = this.normalizeRendererParams(params);\n const context = {\n $implicit: normalizedParams,\n params: normalizedParams,\n ...(spec.context ? spec.context(normalizedParams) : {}),\n };\n\n const viewRef = spec.template.createEmbeddedView(context);\n this.appRef.attachView(viewRef);\n viewRef.detectChanges();\n\n const host = this.resolveTemplateHost(viewRef);\n this.mounts.set(host, { kind: 'template', ref: viewRef });\n return host;\n }\n\n /**\n * Uses the template's single root element directly when possible (so\n * `editor`/`filter` slots that expect the returned element to *be* the\n * control keep working); falls back to a wrapper `<div>` for templates\n * with multiple root nodes or text-only content.\n */\n private resolveTemplateHost(viewRef: EmbeddedViewRef<unknown>): HTMLElement {\n const [singleRoot] = viewRef.rootNodes;\n if (viewRef.rootNodes.length === 1 && singleRoot instanceof HTMLElement) {\n return singleRoot;\n }\n\n const host = document.createElement('div');\n host.classList.add('photon-grid__template-host');\n host.append(...viewRef.rootNodes);\n return host;\n }\n\n private cleanupRemovedNode(node: Node): void {\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n const directMount = this.mounts.get(node);\n if (directMount) {\n this.mounts.delete(node);\n this.destroyMount(directMount);\n }\n\n // The core may remove an ancestor (e.g. an entire recycled row)\n // rather than the mounted element itself; sweep for any tracked\n // host contained in the removed subtree.\n if (node.childElementCount === 0) {\n return;\n }\n for (const [element, mount] of this.mounts) {\n if (node.contains(element)) {\n this.mounts.delete(element);\n this.destroyMount(mount);\n }\n }\n }\n\n private destroyMount(mount: RendererMount): void {\n if (mount.kind === 'component') {\n this.invokeLifecycle(mount.ref.instance, 'pgGridDestroy', undefined);\n const viewRef = mount.ref.hostView;\n this.appRef.detachView(viewRef);\n mount.ref.destroy();\n return;\n }\n\n const viewRef = mount.ref;\n this.appRef.detachView(viewRef);\n mount.ref.destroy();\n }\n}","import {\n AfterViewInit,\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { GridCore, GridEventType } from 'photon-grid-core';\n\nimport type {\n CellClickedEvent,\n CellSelectionChangedEvent,\n CellValueChangedEvent,\n ColumnMovedEvent,\n ColumnResizedEvent,\n ColumnsStateChangedEvent,\n ColumnSortedEvent,\n DataChangedEvent,\n ExportEvent,\n FilterChangedEvent,\n GridApi,\n GridEventMap,\n GridOptions,\n PageChangedEvent,\n RowClickPayload,\n RowSelectedEvent,\n ThemeChangedEvent,\n} from 'photon-grid-core';\n\nimport { RendererAdapter } from './angular-renderer.adapter';\nimport type {ColumnDef as GridColumnDef } from './angular-renderer.types';\n\n/**\n * Angular wrapper around the framework-agnostic Photon Grid core.\n *\n * The component owns a single {@link GridCore} instance, keeps it in sync\n * with the `columns`, `dataSet` and `options` inputs, and re-emits the\n * grid's internal events as strongly-typed Angular `@Output`s.\n *\n * Cell/header/editor/etc. renderers may be plain functions (raw\n * `HTMLElement`/`string`, identical to the core's own API), or declarative\n * Angular specs — `{ kind: 'component', component: MyBadge }` or\n * `{ kind: 'template', template: myTemplateRef }` — via {@link GridColumnDef}.\n * An internal {@link RendererAdapter} mounts/unmounts those for every\n * renderer invocation and disposes them as soon as the core discards their\n * host element, so virtualization/recycling never leaks components.\n *\n * @example\n * ```html\n * <photon-grid\n * [columns]=\"columns\"\n * [dataSet]=\"rows\"\n * [options]=\"{ theme: 'light', showCheckboxes: true }\"\n * (gridReady)=\"onReady($event)\"\n * (rowClicked)=\"onRowClicked($event)\">\n * </photon-grid>\n * ```\n *\n * @example Component-based cell renderer\n * ```ts\n * columns: GridColumnDef[] = [{\n * colId: 'status', field: 'status', header: 'Status', type: 'string',\n * renderer: {\n * display: {\n * kind: 'component',\n * component: StatusBadgeComponent,\n * inputs: (params) => ({ value: params.value }),\n * },\n * },\n * }];\n * ```\n *\n * @example Template-based cell renderer\n * ```html\n * <ng-template #statusTpl let-params>\n * <span class=\"badge\">{{ params.value }}</span>\n * </ng-template>\n * ```\n * ```ts\n * @ViewChild('statusTpl') statusTpl!: TemplateRef<RendererContext<DisplayRendererParams>>;\n * columns: GridColumnDef[] = [{\n * colId: 'status', field: 'status', header: 'Status', type: 'string',\n * renderer: { display: { kind: 'template', template: this.statusTpl } },\n * }];\n * ```\n */\n@Component({\n selector: 'photon-grid-angular',\n standalone: true,\n template: `<div #gridHost class=\"photon-grid__host\"></div>`,\n styleUrl: './photon-grid.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PhotonGridComponent implements AfterViewInit, OnChanges, OnDestroy {\n\n /** Container the grid renders into. */\n @ViewChild('gridHost', { static: true, read: ElementRef })\n private readonly gridHost!: ElementRef<HTMLDivElement>;\n\n /**\n * Column definitions. Bound to {@link GridApi.setColumns} on change.\n * Provided as a dedicated input rather than through `options.columns`.\n * Renderer slots accept Angular components/templates in addition to\n * plain functions — see {@link GridColumnDef}.\n */\n @Input()\n columns: GridColumnDef[] = [];\n\n /**\n * Row data. Bound to {@link GridApi.setData} on change. Provided as a\n * dedicated input rather than through `options.data`.\n */\n @Input()\n dataSet: Record<string, unknown>[] = [];\n\n /**\n * Remaining grid options (theme, selection, editing, pagination, …).\n * `columns` and `data` are supplied by the dedicated inputs above and are\n * merged in automatically. The core has no runtime options setter, so a\n * change to this input transparently recreates the grid.\n *\n * Enable the natural-language AI panel — and, optionally, its Gemini\n * generative back-end — through `options.photonAI`:\n *\n * @example Gemini-powered AI panel\n * ```ts\n * import { PhotonAIProviderType } from 'photon-grid-angular';\n *\n * options: Partial<GridOptions> = {\n * photonAI: {\n * enabled: true,\n * provider: {\n * type: PhotonAIProviderType.Gemini,\n * apiKey: environment.geminiApiKey,\n * model: 'gemini-2.5-flash',\n * },\n * },\n * };\n * ```\n */\n @Input()\n options: Partial<GridOptions> = {};\n\n /** Emitted once the grid is constructed, carrying its {@link GridApi}. */\n @Output() readonly gridReady = new EventEmitter<GridApi>();\n\n /** Row data changed (count delta). */\n @Output() readonly dataChanged = new EventEmitter<DataChangedEvent>();\n\n /** A row was clicked. */\n @Output() readonly rowClicked = new EventEmitter<RowClickPayload>();\n\n /** A row was double-clicked. */\n @Output() readonly rowDoubleClicked = new EventEmitter<RowClickPayload>();\n\n /** Row selection changed. */\n @Output() readonly rowSelected = new EventEmitter<RowSelectedEvent>();\n\n /** A cell was clicked. */\n @Output() readonly cellClicked = new EventEmitter<CellClickedEvent>();\n\n /** A cell was double-clicked. */\n @Output() readonly cellDoubleClicked = new EventEmitter<CellClickedEvent>();\n\n /** A cell value was committed. */\n @Output() readonly cellValueChanged = new EventEmitter<CellValueChangedEvent>();\n\n /** Range/cell selection changed. */\n @Output() readonly cellSelectionChanged = new EventEmitter<CellSelectionChangedEvent>();\n\n /** A column was resized. */\n @Output() readonly columnResized = new EventEmitter<ColumnResizedEvent>();\n\n /** A column was reordered. */\n @Output() readonly columnMoved = new EventEmitter<ColumnMovedEvent>();\n\n /** Sort state changed. */\n @Output() readonly sortChanged = new EventEmitter<ColumnSortedEvent>();\n\n /** Filter model changed. */\n @Output() readonly filterChanged = new EventEmitter<FilterChangedEvent>();\n\n /** Pagination page or size changed. */\n @Output() readonly pageChanged = new EventEmitter<PageChangedEvent>();\n\n /** Column state (width/visibility/pin/order) changed. */\n @Output() readonly columnsStateChanged = new EventEmitter<ColumnsStateChangedEvent>();\n\n /** Active theme changed. */\n @Output() readonly themeChanged = new EventEmitter<ThemeChangedEvent>();\n\n /** An export finished. */\n @Output() readonly exportComplete = new EventEmitter<ExportEvent>();\n\n /** The live core instance, created in {@link ngAfterViewInit}. */\n private grid?: GridCore;\n\n /** Unsubscribe callbacks for every wired core event; drained on teardown. */\n private readonly disposers: Array<() => void> = [];\n\n /**\n * Bridges Angular component/template renderer specs to the core's\n * plain-function `ColumnRendererMap`. Owned for the lifetime of this\n * component (not DI-provided) so its mounted-view tracking is scoped\n * to this grid instance alone.\n *\n * Built explicitly in the constructor body (rather than as a field\n * initializer referencing constructor-parameter properties) so it isn't\n * subject to field-initializer-vs-parameter-property ordering: at this\n * point `appRef`/`environmentInjector`/`elementInjector` are plain local\n * constructor arguments, guaranteed to already be set.\n */\n private readonly rendererAdapter: RendererAdapter;\n\n constructor(\n appRef: ApplicationRef,\n environmentInjector: EnvironmentInjector,\n elementInjector: Injector,\n ) {\n this.rendererAdapter = new RendererAdapter(appRef, environmentInjector, elementInjector);\n }\n\n ngAfterViewInit(): void {\n this.createGrid();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Initial inputs are consumed by createGrid() in ngAfterViewInit.\n if (!this.grid) {\n return;\n }\n\n // An options change cannot be applied incrementally (no core setter),\n // so recreate; this already re-seeds columns and data.\n if (changes['options'] && !changes['options'].firstChange) {\n this.recreateGrid();\n return;\n }\n\n if (changes['columns'] && !changes['columns'].firstChange) {\n this.grid.api.setColumns(this.rendererAdapter.adaptColumns(this.columns));\n }\n\n if (changes['dataSet'] && !changes['dataSet'].firstChange) {\n this.grid.api.setData(this.dataSet);\n }\n }\n\n ngOnDestroy(): void {\n this.teardownGrid();\n }\n\n /** Builds the core from the current inputs and wires its events. */\n private createGrid(): void {\n // Must be observing *before* the core mounts anything, so every\n // renderer-produced element is tracked for cleanup from the start.\n this.rendererAdapter.observe(this.gridHost.nativeElement);\n\n const mergedOptions: GridOptions = {\n ...this.options,\n columns: this.rendererAdapter.adaptColumns(this.columns),\n data: this.dataSet,\n };\n\n const grid = new GridCore(this.gridHost.nativeElement, mergedOptions);\n this.grid = grid;\n\n this.wireEvents(grid.api);\n\n // GridCore emits READY synchronously during construction (before we can\n // attach a listener), so surface the ready signal explicitly here.\n this.gridReady.emit(grid.api);\n }\n\n /** Destroys the current core, drops it, and builds a fresh one. */\n private recreateGrid(): void {\n this.teardownGrid();\n this.createGrid();\n }\n\n /**\n * Disposes event subscriptions, the renderer adapter (stopping its\n * observer and destroying every mounted component/embedded view), and\n * the core instance itself, if any.\n *\n * Order matters: the adapter is disposed *after* `grid.destroy()` so\n * any teardown-time DOM removal is irrelevant (dispose() unconditionally\n * destroys all remaining mounts rather than depending on the\n * MutationObserver having flushed).\n */\n private teardownGrid(): void {\n for (const dispose of this.disposers) {\n dispose();\n }\n this.disposers.length = 0;\n\n this.grid?.destroy();\n this.grid = undefined;\n\n this.rendererAdapter.dispose();\n }\n\n /** Subscribes every core event to its corresponding `@Output` emitter. */\n private wireEvents(api: GridApi): void {\n this.subscribe(api, GridEventType.DATA_CHANGED, this.dataChanged);\n this.subscribe(api, GridEventType.ROW_CLICKED, this.rowClicked);\n this.subscribe(api, GridEventType.ROW_DOUBLE_CLICKED, this.rowDoubleClicked);\n this.subscribe(api, GridEventType.ROW_SELECTED, this.rowSelected);\n this.subscribe(api, GridEventType.CELL_CLICKED, this.cellClicked);\n this.subscribe(api, GridEventType.CELL_DOUBLE_CLICKED, this.cellDoubleClicked);\n this.subscribe(api, GridEventType.CELL_VALUE_CHANGED, this.cellValueChanged);\n this.subscribe(api, GridEventType.CELL_SELECTION_CHANGED, this.cellSelectionChanged);\n this.subscribe(api, GridEventType.COLUMN_RESIZED, this.columnResized);\n this.subscribe(api, GridEventType.COLUMN_MOVED, this.columnMoved);\n this.subscribe(api, GridEventType.SORT_CHANGED, this.sortChanged);\n this.subscribe(api, GridEventType.FILTER_CHANGED, this.filterChanged);\n this.subscribe(api, GridEventType.PAGE_CHANGED, this.pageChanged);\n this.subscribe(api, GridEventType.COLUMNS_STATE_CHANGED, this.columnsStateChanged);\n this.subscribe(api, GridEventType.THEME_CHANGED, this.themeChanged);\n this.subscribe(api, GridEventType.EXPORT_COMPLETE, this.exportComplete);\n }\n\n /**\n * Forwards a single strongly-typed core event to an Angular emitter and\n * records its unsubscribe callback. The generic constraint guarantees the\n * emitter's payload type matches the event's payload in {@link GridEventMap}.\n */\n private subscribe<E extends keyof GridEventMap>(\n api: GridApi,\n event: E,\n emitter: EventEmitter<GridEventMap[E]>,\n ): void {\n const dispose = api.on<GridEventMap[E]>(event, (payload) => emitter.emit(payload));\n this.disposers.push(dispose);\n }\n}","import { NgModule } from '@angular/core';\n\nimport { PhotonGridComponent } from './photon-grid.component';\n\n/**\n * Convenience NgModule for consumers that are not yet on standalone APIs.\n * {@link PhotonGridComponent} is itself standalone; this module simply\n * imports and re-exports it so it can be dropped into an NgModule's\n * `imports`/`exports` and used in that module's templates.\n */\n@NgModule({\n imports: [PhotonGridComponent],\n exports: [PhotonGridComponent],\n})\nexport class PhotonGridModule {}\n","/*\n * Public API surface of photon-grid-angular.\n */\n\nexport * from './library/photon-grid.component';\nexport * from './library/photon-grid.module';\nexport * from './library/angular-renderer.types';\n\n// Re-export the most commonly needed core types so consumers can bind the\n// wrapper without importing photon-grid-core directly.\nexport type {\n GridApi,\n GridOptions,\n} from 'photon-grid-core';\nexport { GridEventType } from 'photon-grid-core';\n\n// ── Photon AI configuration ──────────────────────────────────────────────────\n// Configure the AI panel (and its optional generative provider — Gemini,\n// OpenAI, Anthropic, or a fully Custom endpoint) through the `[options]`\n// input's `photonAI` field — see the `options` input on PhotonGridComponent for\n// an example. `PhotonAIProviderType` is an enum (a runtime value), so it is\n// re-exported as a value, not just a type.\nexport { PhotonAIProviderType } from 'photon-grid-core';\nexport type { PhotonAIConfig, PhotonAIProviderConfig, PhotonAIRequest, PhotonAIResponse } from 'photon-grid-core';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { TemplateRef, Type } from '@angular/core';
2
- import type { ColumnDef as coreColumnDef, DisplayRendererParams, EditorRendererParams, FilterRendererParams, GroupRendererParams, HeaderRendererParams, OptionRendererParams, RendererOutput, SummaryRendererParams, TooltipRendererParams } from 'photon-grid-core';
2
+ import type { ColumnDefInput as CoreColumnDefInput, DisplayRendererParams, EditorRendererParams, FilterRendererParams, GroupRendererParams, HeaderRendererParams, OptionRendererParams, RendererOutput, SummaryRendererParams, TooltipRendererParams } from 'photon-grid-core';
3
3
  /**
4
4
  * Renders `params` through a `@Component`.
5
5
  *
@@ -54,11 +54,15 @@ export interface ColumnRendererMap {
54
54
  summary?: CellRenderer<SummaryRendererParams, RendererOutput>;
55
55
  }
56
56
  /**
57
- * Drop-in replacement for `ColumnDef`: identical shape, except `renderer`
58
- * (and `renderer` on any nested `children`) accepts the declarative
57
+ * Drop-in replacement for the core column definition, built on the core's
58
+ * {@link CoreColumnDefInput} so it mirrors the same relaxed contract: **only
59
+ * `field` is required**; `colId`, `header` and `type` are optional and filled
60
+ * in by the core (auto `colId`, header defaulting to the field in Title Case,
61
+ * `type` defaulting to `'string'`). This wrapper additionally lets `renderer`
62
+ * (and `renderer` on any nested `children`) accept the declarative
59
63
  * component/template specs above in addition to plain functions.
60
64
  */
61
- export type ColumnDef = Omit<coreColumnDef, 'renderer' | 'children'> & {
65
+ export type ColumnDef = Omit<CoreColumnDefInput, 'renderer' | 'children'> & {
62
66
  renderer?: ColumnRendererMap;
63
67
  children?: ColumnDef[];
64
68
  };
@@ -1 +1 @@
1
- {"version":3,"file":"angular-renderer.types.d.ts","sourceRoot":"","sources":["../../src/library/angular-renderer.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-renderer.types.d.ts","sourceRoot":"","sources":["../../src/library/angular-renderer.types.ts"],"names":[],"mappings":"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"}
@@ -76,6 +76,25 @@ export declare class PhotonGridComponent implements AfterViewInit, OnChanges, On
76
76
  * `columns` and `data` are supplied by the dedicated inputs above and are
77
77
  * merged in automatically. The core has no runtime options setter, so a
78
78
  * change to this input transparently recreates the grid.
79
+ *
80
+ * Enable the natural-language AI panel — and, optionally, its Gemini
81
+ * generative back-end — through `options.photonAI`:
82
+ *
83
+ * @example Gemini-powered AI panel
84
+ * ```ts
85
+ * import { PhotonAIProviderType } from 'photon-grid-angular';
86
+ *
87
+ * options: Partial<GridOptions> = {
88
+ * photonAI: {
89
+ * enabled: true,
90
+ * provider: {
91
+ * type: PhotonAIProviderType.Gemini,
92
+ * apiKey: environment.geminiApiKey,
93
+ * model: 'gemini-2.5-flash',
94
+ * },
95
+ * },
96
+ * };
97
+ * ```
79
98
  */
80
99
  options: Partial<GridOptions>;
81
100
  /** Emitted once the grid is constructed, carrying its {@link GridApi}. */
@@ -157,6 +176,6 @@ export declare class PhotonGridComponent implements AfterViewInit, OnChanges, On
157
176
  */
158
177
  private subscribe;
159
178
  static ɵfac: i0.ɵɵFactoryDeclaration<PhotonGridComponent, never>;
160
- static ɵcmp: i0.ɵɵComponentDeclaration<PhotonGridComponent, "photon-grid", never, { "columns": { "alias": "columns"; "required": false; }; "dataSet": { "alias": "dataSet"; "required": false; }; "options": { "alias": "options"; "required": false; }; }, { "gridReady": "gridReady"; "dataChanged": "dataChanged"; "rowClicked": "rowClicked"; "rowDoubleClicked": "rowDoubleClicked"; "rowSelected": "rowSelected"; "cellClicked": "cellClicked"; "cellDoubleClicked": "cellDoubleClicked"; "cellValueChanged": "cellValueChanged"; "cellSelectionChanged": "cellSelectionChanged"; "columnResized": "columnResized"; "columnMoved": "columnMoved"; "sortChanged": "sortChanged"; "filterChanged": "filterChanged"; "pageChanged": "pageChanged"; "columnsStateChanged": "columnsStateChanged"; "themeChanged": "themeChanged"; "exportComplete": "exportComplete"; }, never, never, true, never>;
179
+ static ɵcmp: i0.ɵɵComponentDeclaration<PhotonGridComponent, "photon-grid-angular", never, { "columns": { "alias": "columns"; "required": false; }; "dataSet": { "alias": "dataSet"; "required": false; }; "options": { "alias": "options"; "required": false; }; }, { "gridReady": "gridReady"; "dataChanged": "dataChanged"; "rowClicked": "rowClicked"; "rowDoubleClicked": "rowDoubleClicked"; "rowSelected": "rowSelected"; "cellClicked": "cellClicked"; "cellDoubleClicked": "cellDoubleClicked"; "cellValueChanged": "cellValueChanged"; "cellSelectionChanged": "cellSelectionChanged"; "columnResized": "columnResized"; "columnMoved": "columnMoved"; "sortChanged": "sortChanged"; "filterChanged": "filterChanged"; "pageChanged": "pageChanged"; "columnsStateChanged": "columnsStateChanged"; "themeChanged": "themeChanged"; "exportComplete": "exportComplete"; }, never, never, true, never>;
161
180
  }
162
181
  //# sourceMappingURL=photon-grid.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"photon-grid.component.d.ts","sourceRoot":"","sources":["../../src/library/photon-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,cAAc,EAId,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EAER,SAAS,EACT,SAAS,EAET,aAAa,EAEhB,MAAM,eAAe,CAAC;AAIvB,OAAO,KAAK,EACR,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,OAAO,EAEP,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAC,SAAS,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBAOa,mBAAoB,YAAW,aAAa,EAAE,SAAS,EAAE,SAAS;IAE3E,uCAAuC;IAEvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAEvD;;;;;OAKG;IAEH,OAAO,EAAE,aAAa,EAAE,CAAM;IAE9B;;;OAGG;IAEH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAM;IAExC;;;;;OAKG;IAEH,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAEnC,0EAA0E;IAChE,QAAQ,CAAC,SAAS,wBAA+B;IAE3D,sCAAsC;IAC5B,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,yBAAyB;IACf,QAAQ,CAAC,UAAU,gCAAuC;IAEpE,gCAAgC;IACtB,QAAQ,CAAC,gBAAgB,gCAAuC;IAE1E,6BAA6B;IACnB,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,0BAA0B;IAChB,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,iCAAiC;IACvB,QAAQ,CAAC,iBAAiB,iCAAwC;IAE5E,kCAAkC;IACxB,QAAQ,CAAC,gBAAgB,sCAA6C;IAEhF,oCAAoC;IAC1B,QAAQ,CAAC,oBAAoB,0CAAiD;IAExF,4BAA4B;IAClB,QAAQ,CAAC,aAAa,mCAA0C;IAE1E,8BAA8B;IACpB,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,0BAA0B;IAChB,QAAQ,CAAC,WAAW,kCAAyC;IAEvE,4BAA4B;IAClB,QAAQ,CAAC,aAAa,mCAA0C;IAE1E,uCAAuC;IAC7B,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,yDAAyD;IAC/C,QAAQ,CAAC,mBAAmB,yCAAgD;IAEtF,4BAA4B;IAClB,QAAQ,CAAC,YAAY,kCAAyC;IAExE,0BAA0B;IAChB,QAAQ,CAAC,cAAc,4BAAmC;IAEpE,kEAAkE;IAClE,OAAO,CAAC,IAAI,CAAC,CAAW;IAExB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAG9C,MAAM,EAAE,cAAc,EACtB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,QAAQ;IAK7B,eAAe,IAAI,IAAI;IAIvB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAsBzC,WAAW,IAAI,IAAI;IAInB,oEAAoE;IACpE,OAAO,CAAC,UAAU;IAqBlB,mEAAmE;IACnE,OAAO,CAAC,YAAY;IAKpB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IAYpB,0EAA0E;IAC1E,OAAO,CAAC,UAAU;IAmBlB;;;;OAIG;IACH,OAAO,CAAC,SAAS;yCAvNR,mBAAmB;2CAAnB,mBAAmB;CA+N/B"}
1
+ {"version":3,"file":"photon-grid.component.d.ts","sourceRoot":"","sources":["../../src/library/photon-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,cAAc,EAId,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EAER,SAAS,EACT,SAAS,EAET,aAAa,EAEhB,MAAM,eAAe,CAAC;AAIvB,OAAO,KAAK,EACR,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,OAAO,EAEP,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAC,SAAS,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBAOa,mBAAoB,YAAW,aAAa,EAAE,SAAS,EAAE,SAAS;IAE3E,uCAAuC;IAEvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAEvD;;;;;OAKG;IAEH,OAAO,EAAE,aAAa,EAAE,CAAM;IAE9B;;;OAGG;IAEH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAM;IAExC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IAEH,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAEnC,0EAA0E;IAChE,QAAQ,CAAC,SAAS,wBAA+B;IAE3D,sCAAsC;IAC5B,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,yBAAyB;IACf,QAAQ,CAAC,UAAU,gCAAuC;IAEpE,gCAAgC;IACtB,QAAQ,CAAC,gBAAgB,gCAAuC;IAE1E,6BAA6B;IACnB,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,0BAA0B;IAChB,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,iCAAiC;IACvB,QAAQ,CAAC,iBAAiB,iCAAwC;IAE5E,kCAAkC;IACxB,QAAQ,CAAC,gBAAgB,sCAA6C;IAEhF,oCAAoC;IAC1B,QAAQ,CAAC,oBAAoB,0CAAiD;IAExF,4BAA4B;IAClB,QAAQ,CAAC,aAAa,mCAA0C;IAE1E,8BAA8B;IACpB,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,0BAA0B;IAChB,QAAQ,CAAC,WAAW,kCAAyC;IAEvE,4BAA4B;IAClB,QAAQ,CAAC,aAAa,mCAA0C;IAE1E,uCAAuC;IAC7B,QAAQ,CAAC,WAAW,iCAAwC;IAEtE,yDAAyD;IAC/C,QAAQ,CAAC,mBAAmB,yCAAgD;IAEtF,4BAA4B;IAClB,QAAQ,CAAC,YAAY,kCAAyC;IAExE,0BAA0B;IAChB,QAAQ,CAAC,cAAc,4BAAmC;IAEpE,kEAAkE;IAClE,OAAO,CAAC,IAAI,CAAC,CAAW;IAExB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAG9C,MAAM,EAAE,cAAc,EACtB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,QAAQ;IAK7B,eAAe,IAAI,IAAI;IAIvB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAsBzC,WAAW,IAAI,IAAI;IAInB,oEAAoE;IACpE,OAAO,CAAC,UAAU;IAqBlB,mEAAmE;IACnE,OAAO,CAAC,YAAY;IAKpB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IAYpB,0EAA0E;IAC1E,OAAO,CAAC,UAAU;IAmBlB;;;;OAIG;IACH,OAAO,CAAC,SAAS;yCA1OR,mBAAmB;2CAAnB,mBAAmB;CAkP/B"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "photon-grid-angular",
3
- "version": "2.0.0",
3
+ "version": "2.0.4",
4
4
  "description": "Angular wrapper for Photon Grid — an enterprise-grade, framework-agnostic TypeScript data grid.",
5
5
  "author": "Abdul Wahid",
6
6
  "license": "MIT",
7
7
  "peerDependencies": {
8
8
  "@angular/common": "^18.2.0",
9
9
  "@angular/core": "^18.2.0",
10
- "photon-grid-core": "^2.0.0"
10
+ "photon-grid-core": "^2.0.4"
11
11
  },
12
12
  "dependencies": {
13
13
  "tslib": "^2.3.0"
package/public-api.d.ts CHANGED
@@ -3,4 +3,6 @@ export * from './library/photon-grid.module';
3
3
  export * from './library/angular-renderer.types';
4
4
  export type { GridApi, GridOptions, } from 'photon-grid-core';
5
5
  export { GridEventType } from 'photon-grid-core';
6
+ export { PhotonAIProviderType } from 'photon-grid-core';
7
+ export type { PhotonAIConfig, PhotonAIProviderConfig, PhotonAIRequest, PhotonAIResponse } from 'photon-grid-core';
6
8
  //# sourceMappingURL=public-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAIA,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AAIjD,YAAY,EACR,OAAO,EACP,WAAW,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAIA,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AAIjD,YAAY,EACR,OAAO,EACP,WAAW,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAQjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}