{"_id":"@aquera/nile-ai-elements","_rev":"5-b32431c7af691e97ae3161ce182e8432","name":"@aquera/nile-ai-elements","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"@aquera/nile-ai-elements","version":"0.0.1","author":{"name":"nile-ai-elements"},"license":"MIT","_id":"@aquera/nile-ai-elements@0.0.1","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"dist":{"shasum":"2f96bff6f84ae91ccfa56d5e92a2d3989675db97","tarball":"https://registry.npmjs.org/@aquera/nile-ai-elements/-/nile-ai-elements-0.0.1.tgz","fileCount":167,"integrity":"sha512-lbeoNYRXcImm8lOZf12fRbiZxPHMPau6Fv8tqO2dF60EgTiHKtFOxVbEcS5fjNubzOeBogIxCZ3vTtiNCkVFug==","signatures":[{"sig":"MEUCIB+dnxZiBoZUDp/GfZtiIZg0DzjCwlP7UR6yn6A0Jvk5AiEA+wAC3ZVnqNBUtkYzop6hhxtzuC5YH5PVC4ET1Is5MQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11958570},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-ai-chat-bubble":"./dist/src/nile-ai-chat-bubble/index.js","./nile-ai-token-stream":"./dist/src/nile-ai-token-stream/index.js","./nile-wibbling-spinner":"./dist/src/nile-wibbling-spinner/index.js"},"gitHead":"6d9a6fcb681a98be01e218c08150edce19fbd1fc","scripts":{"lint":"eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore","test":"tsc && wtr --coverage","build":"tsc && node scripts/replace-version.cjs && yarn analyze -- --exclude dist && yarn build:vscode-schema","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","format":"eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore","analyze":"cem analyze --litelement","package":"rollup -c","prepublish":"tsc && yarn analyze -- --exclude dist","test:watch":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"","build:vscode-schema":"wca src --format vscode --outFile vscode-html-custom-data.json"},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"prettier":{"arrowParens":"avoid","singleQuote":true},"_npmVersion":"10.8.2","description":"AI webcomponents for nile following open-wc recommendations","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0","@aquera/nile-glyph":"^1.0.6","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-node-resolve":"^15.0.1"},"eslintConfig":{"rules":{"no-unused-vars":"off","import/extensions":["error","always",{"ignorePackages":true}],"import/no-unresolved":"off","@typescript-eslint/no-unused-vars":["error"]},"parser":"@typescript-eslint/parser","extends":["@open-wc","prettier"],"plugins":["@typescript-eslint"]},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"glob":"^8.0.3","husky":"^4.3.8","tslib":"^2.3.1","eslint":"^7.32.0","rimraf":"^3.0.2","rollup":"^3.8.1","prettier":"^2.4.1","typescript":"^5.6.2","lint-staged":"^10.5.4","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.1.6","@web/test-runner":"^0.14.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-styles":"^4.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@open-wc/eslint-config":"^8.0.2","@rollup/plugin-replace":"^5.0.2","eslint-config-prettier":"^8.3.0","@rollup/plugin-typescript":"^10.0.1","@typescript-eslint/parser":"^8.7.0","@web/test-runner-puppeteer":"0.16.0","@rollup/plugin-node-resolve":"^15.0.1","@typescript-eslint/eslint-plugin":"^8.7.0","@custom-elements-manifest/analyzer":"^0.4.17"},"_npmOperationalInternal":{"tmp":"tmp/nile-ai-elements_0.0.1_1781695936828_0.6549532929361417","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aquera/nile-ai-elements","version":"0.0.2","author":{"name":"nile-ai-elements"},"license":"MIT","_id":"@aquera/nile-ai-elements@0.0.2","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"dist":{"shasum":"2b78350d26545ba6f0b5e3d0e1f65e814b0004d2","tarball":"https://registry.npmjs.org/@aquera/nile-ai-elements/-/nile-ai-elements-0.0.2.tgz","fileCount":402,"integrity":"sha512-At4sN8vLWkC2iCdYQ2LQT7uddzTEZIC1nIN53WJ+8Rd1YUbJItq/drhgBvQCeJhVMSQCuedCmEbJnI5/CRgNbw==","signatures":[{"sig":"MEUCIQDM5nsuzv8xIKru97AU+5ic/C2igx8mEfWzD/4O8gFH0AIgI5oEb0nv3R/PyOM0tTJllAQbJwoG9nzpaIVL8ibMNxw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13036436},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-ai-chat":"./dist/src/nile-ai-chat/index.js","./nile-ai-steps":"./dist/src/nile-ai-steps/index.js","./nile-ai-status":"./dist/src/nile-ai-status/index.js","./nile-ai-reasoning":"./dist/src/nile-ai-reasoning/index.js","./nile-ai-tool-call":"./dist/src/nile-ai-tool-call/index.js","./nile-ai-chat-bubble":"./dist/src/nile-ai-chat-bubble/index.js","./nile-ai-prompt-input":"./dist/src/nile-ai-prompt-input/index.js","./nile-ai-token-stream":"./dist/src/nile-ai-token-stream/index.js","./nile-wibbling-spinner":"./dist/src/nile-wibbling-spinner/index.js","./nile-ai-message-actions":"./dist/src/nile-ai-message-actions/index.js"},"gitHead":"fc143155e6eecd8050a56ce081c82cf9e1e03ccc","scripts":{"lint":"eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore","test":"tsc && wtr --coverage","build":"tsc && node scripts/replace-version.cjs && yarn analyze -- --exclude dist && yarn build:vscode-schema","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","format":"eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore","analyze":"cem analyze --litelement","package":"rollup -c","prepublish":"tsc && yarn analyze -- --exclude dist","test:watch":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"","build:vscode-schema":"wca src --format vscode --outFile vscode-html-custom-data.json"},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"prettier":{"arrowParens":"avoid","singleQuote":true},"_npmVersion":"10.8.2","description":"AI webcomponents for nile following open-wc recommendations","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0","@aquera/nile-glyph":"^1.0.6","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-node-resolve":"^15.0.1"},"eslintConfig":{"rules":{"no-unused-vars":"off","import/extensions":["error","always",{"ignorePackages":true}],"import/no-unresolved":"off","@typescript-eslint/no-unused-vars":["error"]},"parser":"@typescript-eslint/parser","extends":["@open-wc","prettier"],"plugins":["@typescript-eslint"]},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"glob":"^8.0.3","husky":"^4.3.8","tslib":"^2.3.1","eslint":"^7.32.0","rimraf":"^3.0.2","rollup":"^3.8.1","prettier":"^2.4.1","typescript":"^5.6.2","lint-staged":"^10.5.4","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.1.6","@web/test-runner":"^0.14.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-styles":"^4.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@open-wc/eslint-config":"^8.0.2","@rollup/plugin-replace":"^5.0.2","eslint-config-prettier":"^8.3.0","@rollup/plugin-typescript":"^10.0.1","@typescript-eslint/parser":"^8.7.0","@web/test-runner-puppeteer":"0.16.0","@rollup/plugin-node-resolve":"^15.0.1","@typescript-eslint/eslint-plugin":"^8.7.0","@custom-elements-manifest/analyzer":"^0.4.17"},"_npmOperationalInternal":{"tmp":"tmp/nile-ai-elements_0.0.2_1782283745891_0.5453788200928411","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@aquera/nile-ai-elements","version":"0.0.3","author":{"name":"nile-ai-elements"},"license":"MIT","_id":"@aquera/nile-ai-elements@0.0.3","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"dist":{"shasum":"29618fe29afc7e61d79a1893846f4b48632dd2c9","tarball":"https://registry.npmjs.org/@aquera/nile-ai-elements/-/nile-ai-elements-0.0.3.tgz","fileCount":627,"integrity":"sha512-FrZFvT8ebeMZCHu7XiyuYFYslrGMPX6CNVfzP3qZgwkCc3kRyMz0gR+G9Nb0ekKgHk6oxSyfhPz76u8coO3UJA==","signatures":[{"sig":"MEQCIE+OfQgc89v+zgzUSuKFw5PQ0ymGQxzUxlUWCMYjEJ4vAiBKuzOpxh0ygKj56/OSqIBQzk3KQ08Y41wWZJ+cT7+NfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14476704},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-ai-chat":"./dist/src/nile-ai-chat/index.js","./nile-ai-queue":"./dist/src/nile-ai-queue/index.js","./nile-ai-steps":"./dist/src/nile-ai-steps/index.js","./nile-ai-status":"./dist/src/nile-ai-status/index.js","./nile-ai-sources":"./dist/src/nile-ai-sources/index.js","./nile-ai-citation":"./dist/src/nile-ai-citation/index.js","./nile-ai-reasoning":"./dist/src/nile-ai-reasoning/index.js","./nile-ai-tool-call":"./dist/src/nile-ai-tool-call/index.js","./nile-ai-chat-bubble":"./dist/src/nile-ai-chat-bubble/index.js","./nile-ai-prompt-input":"./dist/src/nile-ai-prompt-input/index.js","./nile-ai-token-stream":"./dist/src/nile-ai-token-stream/index.js","./nile-wibbling-spinner":"./dist/src/nile-wibbling-spinner/index.js","./nile-ai-message-actions":"./dist/src/nile-ai-message-actions/index.js"},"gitHead":"9134f6e39bb8b2a5fef04e97ba67752edcd5f89e","scripts":{"lint":"eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore","test":"tsc && wtr --coverage","build":"tsc && node scripts/replace-version.cjs && yarn analyze -- --exclude dist && yarn build:vscode-schema","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","format":"eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore","analyze":"cem analyze --litelement","package":"rollup -c","prepublish":"tsc && yarn analyze -- --exclude dist","test:watch":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"","build:vscode-schema":"wca src --format vscode --outFile vscode-html-custom-data.json"},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"prettier":{"arrowParens":"avoid","singleQuote":true},"_npmVersion":"10.8.2","description":"AI webcomponents for nile following open-wc recommendations","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0","@aquera/nile-glyph":"^1.0.6","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-node-resolve":"^15.0.1"},"eslintConfig":{"rules":{"no-unused-vars":"off","import/extensions":["error","always",{"ignorePackages":true}],"import/no-unresolved":"off","@typescript-eslint/no-unused-vars":["error"]},"parser":"@typescript-eslint/parser","extends":["@open-wc","prettier"],"plugins":["@typescript-eslint"]},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"glob":"^8.0.3","husky":"^4.3.8","tslib":"^2.3.1","eslint":"^7.32.0","rimraf":"^3.0.2","rollup":"^3.8.1","prettier":"^2.4.1","typescript":"^5.6.2","lint-staged":"^10.5.4","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.1.6","@web/test-runner":"^0.14.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-styles":"^4.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@open-wc/eslint-config":"^8.0.2","@rollup/plugin-replace":"^5.0.2","eslint-config-prettier":"^8.3.0","@rollup/plugin-typescript":"^10.0.1","@typescript-eslint/parser":"^8.7.0","@web/test-runner-puppeteer":"0.16.0","@rollup/plugin-node-resolve":"^15.0.1","@typescript-eslint/eslint-plugin":"^8.7.0","@custom-elements-manifest/analyzer":"^0.4.17"},"_npmOperationalInternal":{"tmp":"tmp/nile-ai-elements_0.0.3_1782792469524_0.4290522446792129","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@aquera/nile-ai-elements","version":"0.0.4","author":{"name":"nile-ai-elements"},"license":"MIT","_id":"@aquera/nile-ai-elements@0.0.4","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"dist":{"shasum":"a2f4c654367b5dd9771c51b3a627c6cc94f58c9b","tarball":"https://registry.npmjs.org/@aquera/nile-ai-elements/-/nile-ai-elements-0.0.4.tgz","fileCount":727,"integrity":"sha512-WNTUZBh2viTnFyVhnZWCsilboP9IFCHqP7hNJh2i1pVqE1OoR6SIlc7MxCakmsoJjM7ed6gDM0Bx5KC2NgyBvQ==","signatures":[{"sig":"MEUCIAHgUHP/MCHBO8JUB1Kq9EASMXvPwQVKGMAItaHdcU8GAiEAoQNWkYcB6LZayF5BTu+Nxl96Noo2ga6bD+buT3q3GO4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15101192},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-ai-chat":"./dist/src/nile-ai-chat/index.js","./nile-ai-image":"./dist/src/nile-ai-image/index.js","./nile-ai-queue":"./dist/src/nile-ai-queue/index.js","./nile-ai-steps":"./dist/src/nile-ai-steps/index.js","./nile-ai-status":"./dist/src/nile-ai-status/index.js","./nile-ai-sources":"./dist/src/nile-ai-sources/index.js","./nile-ai-citation":"./dist/src/nile-ai-citation/index.js","./nile-ai-reasoning":"./dist/src/nile-ai-reasoning/index.js","./nile-ai-tool-call":"./dist/src/nile-ai-tool-call/index.js","./nile-ai-chat-bubble":"./dist/src/nile-ai-chat-bubble/index.js","./nile-ai-confirmation":"./dist/src/nile-ai-confirmation/index.js","./nile-ai-prompt-input":"./dist/src/nile-ai-prompt-input/index.js","./nile-ai-test-results":"./dist/src/nile-ai-test-results/index.js","./nile-ai-token-stream":"./dist/src/nile-ai-token-stream/index.js","./nile-wibbling-spinner":"./dist/src/nile-wibbling-spinner/index.js","./nile-ai-schema-display":"./dist/src/nile-ai-schema-display/index.js","./nile-ai-message-actions":"./dist/src/nile-ai-message-actions/index.js"},"gitHead":"58a8932e71eed85c24c832e57e17303603a3bace","scripts":{"lint":"eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore","test":"tsc && wtr --coverage","build":"tsc && node scripts/replace-version.cjs && yarn analyze -- --exclude dist && yarn build:vscode-schema","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","format":"eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore","analyze":"cem analyze --litelement","package":"rollup -c","prepublish":"tsc && yarn analyze -- --exclude dist","test:watch":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"","build:vscode-schema":"wca src --format vscode --outFile vscode-html-custom-data.json"},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"prettier":{"arrowParens":"avoid","singleQuote":true},"_npmVersion":"10.8.2","description":"AI webcomponents for nile following open-wc recommendations","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0","@aquera/nile-glyph":"^1.0.6","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-node-resolve":"^15.0.1"},"eslintConfig":{"rules":{"no-unused-vars":"off","import/extensions":["error","always",{"ignorePackages":true}],"import/no-unresolved":"off","@typescript-eslint/no-unused-vars":["error"]},"parser":"@typescript-eslint/parser","extends":["@open-wc","prettier"],"plugins":["@typescript-eslint"]},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"glob":"^8.0.3","husky":"^4.3.8","tslib":"^2.3.1","eslint":"^7.32.0","rimraf":"^3.0.2","rollup":"^3.8.1","prettier":"^2.4.1","typescript":"^5.6.2","lint-staged":"^10.5.4","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.1.6","@web/test-runner":"^0.14.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-styles":"^4.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@open-wc/eslint-config":"^8.0.2","@rollup/plugin-replace":"^5.0.2","eslint-config-prettier":"^8.3.0","@rollup/plugin-typescript":"^10.0.1","@typescript-eslint/parser":"^8.7.0","@web/test-runner-puppeteer":"0.16.0","@rollup/plugin-node-resolve":"^15.0.1","@typescript-eslint/eslint-plugin":"^8.7.0","@custom-elements-manifest/analyzer":"^0.4.17"},"_npmOperationalInternal":{"tmp":"tmp/nile-ai-elements_0.0.4_1782877975437_0.6985352691432423","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@aquera/nile-ai-elements","description":"AI webcomponents for nile following open-wc recommendations","license":"MIT","author":{"name":"nile-ai-elements"},"version":"0.0.5","main":"dist/src/index.js","type":"module","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-ai-chat-bubble":"./dist/src/nile-ai-chat-bubble/index.js","./nile-ai-token-stream":"./dist/src/nile-ai-token-stream/index.js","./nile-wibbling-spinner":"./dist/src/nile-wibbling-spinner/index.js","./nile-ai-chat":"./dist/src/nile-ai-chat/index.js","./nile-ai-prompt-input":"./dist/src/nile-ai-prompt-input/index.js","./nile-ai-message-actions":"./dist/src/nile-ai-message-actions/index.js","./nile-ai-status":"./dist/src/nile-ai-status/index.js","./nile-ai-reasoning":"./dist/src/nile-ai-reasoning/index.js","./nile-ai-tool-call":"./dist/src/nile-ai-tool-call/index.js","./nile-ai-steps":"./dist/src/nile-ai-steps/index.js","./nile-ai-queue":"./dist/src/nile-ai-queue/index.js","./nile-ai-test-results":"./dist/src/nile-ai-test-results/index.js","./nile-ai-citation":"./dist/src/nile-ai-citation/index.js","./nile-ai-sources":"./dist/src/nile-ai-sources/index.js","./nile-ai-confirmation":"./dist/src/nile-ai-confirmation/index.js","./nile-ai-schema-display":"./dist/src/nile-ai-schema-display/index.js","./nile-ai-image":"./dist/src/nile-ai-image/index.js"},"scripts":{"analyze":"cem analyze --litelement","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","build":"tsc && node scripts/replace-version.cjs && yarn analyze -- --exclude dist && yarn build:vscode-schema","package":"rollup -c","prepublish":"tsc && yarn analyze -- --exclude dist","lint":"eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore","format":"eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore","test":"tsc && wtr --coverage","test:watch":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"","build:vscode-schema":"wca src --format vscode --outFile vscode-html-custom-data.json","clean":"rimraf dist/*"},"dependencies":{"@aquera/nile-glyph":"^1.0.6","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-node-resolve":"^15.0.1","lit":"^3.0.0"},"devDependencies":{"@custom-elements-manifest/analyzer":"^0.4.17","@open-wc/eslint-config":"^8.0.2","@open-wc/testing":"^3.1.6","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-typescript":"^10.0.1","@typescript-eslint/eslint-plugin":"^8.7.0","@typescript-eslint/parser":"^8.7.0","@web/dev-server":"^0.1.34","@web/test-runner":"^0.14.0","@web/test-runner-puppeteer":"0.16.0","concurrently":"^5.3.0","eslint":"^7.32.0","eslint-config-prettier":"^8.3.0","glob":"^8.0.3","husky":"^4.3.8","lint-staged":"^10.5.4","prettier":"^2.4.1","rimraf":"^3.0.2","rollup":"^3.8.1","rollup-plugin-styles":"^4.0.0","rollup-plugin-summary":"^2.0.0","rollup-plugin-terser":"^7.0.2","tslib":"^2.3.1","typescript":"^5.6.2"},"customElements":"custom-elements.json","eslintConfig":{"parser":"@typescript-eslint/parser","extends":["@open-wc","prettier"],"plugins":["@typescript-eslint"],"rules":{"no-unused-vars":"off","@typescript-eslint/no-unused-vars":["error"],"import/no-unresolved":"off","import/extensions":["error","always",{"ignorePackages":true}]}},"prettier":{"singleQuote":true,"arrowParens":"avoid"},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"_id":"@aquera/nile-ai-elements@0.0.5","gitHead":"2f673ed73abb9d45adb7b4887a63b4c6e77c9b05","types":"./dist/src/index.d.ts","_nodeVersion":"20.17.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-32cr4csxfCHbUP2yStE6hxV5H+Q0qilpJ6rgDt4ilr0SUMBG5f5O+Kc3AwLEEIGMOz/mMSQb0LhKZf3zz9kDFg==","shasum":"94c0a840b42ee7b3236f7a5c8d48d6a66d500307","tarball":"https://registry.npmjs.org/@aquera/nile-ai-elements/-/nile-ai-elements-0.0.5.tgz","fileCount":727,"unpackedSize":15161499,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD99fiIDVGQQwMCkxb5Go4yVub6SBqc0t4YCC22abfA5AIgaaujQV2hKWriiqPAEING3vamH/TAkdaYe9VuV2u0T5A="}]},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"directories":{},"maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nile-ai-elements_0.0.5_1783400803776_0.9492414449227666"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-17T11:32:16.638Z","modified":"2026-07-07T05:06:44.240Z","0.0.1":"2026-06-17T11:32:17.159Z","0.0.2":"2026-06-24T06:49:06.123Z","0.0.3":"2026-06-30T04:07:49.774Z","0.0.4":"2026-07-01T03:52:55.707Z","0.0.5":"2026-07-07T05:06:44.068Z"},"author":{"name":"nile-ai-elements"},"license":"MIT","description":"AI webcomponents for nile following open-wc recommendations","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"readme":"# \\<nile-ai-elements>\n\nAI-focused web components for Nile, following the [open-wc](https://github.com/open-wc/open-wc) recommendation. Built with [Lit](https://lit.dev/) and styled with the Nile / NxtGen (`--ng-*`) design tokens.\n\n## Components\n\n| Tag | Description |\n| --- | --- |\n| `<nile-ai-chat-bubble>` | A chat bubble for an AI conversation (user / ai roles, agent header, reasoning pill, loader). Driven by a single `data` object. |\n| `<nile-ai-token-stream>` | Reveals text token-by-token (typewriter style) with jitter, looping, a caret, and live API streaming. |\n| `<nile-wibbling-spinner>` | A whimsical text spinner: a rotating glyph + a (re-rolling) verb + optional info. |\n| `<nile-ai-chat>` | A scrollable conversation thread — lays out bubbles, autoscrolls to the latest, with `header` / `footer` / `empty` slots. Emits `nile-scroll-state`. |\n| `<nile-ai-prompt-input>` | A chat composer: auto-growing textarea + send / stop button, Enter-to-send. Emits `nile-submit`, `nile-input`, `nile-stop`. |\n| `<nile-ai-prompt>` | A rich composer: auto-growing textarea + toolbar (add-context, model picker, mic, send). The + button can open a customizable attachment menu (default \"Add photos or files\") via `attach-menu` / `attachItems`. Speech-to-text dictation via the Web Speech API with a live mic waveform. Emits `nile-submit`, `nile-change`, `nile-model-change`, `nile-add-context`, `nile-attach`, `nile-voice*`, `nile-stop`. |\n| `<nile-ai-prompts>` | A predefined set of clickable prompt suggestions (icon / label / description), with nesting, a title, vertical / wrap layouts and fade-in. Emits `nile-item-click`. |\n| `<nile-ai-message-actions>` | A per-message toolbar (copy / regenerate / like / dislike). Emits `nile-action`. |\n| `<nile-ai-suggestion>` | A horizontal row of clickable suggestion pills — predefined prompts a user can tap to send to an LLM. Scrolls when it overflows, or wraps with `wrap`; supports plain strings or `{ label, value, icon, disabled }` items. Emits `nile-suggestion-click`. |\n| `<nile-ai-attachments>` | Displays file attachments and source documents with grid / inline / list layouts, automatic media-type detection, previews, and an optional remove affordance. Emits `nile-remove`, `nile-item-click`. |\n| `<nile-ai-image>` | Renders an AI-generated image from the AI SDK — accepts an `Experimental_GeneratedImage` (`base64` / `uint8Array` + `mediaType`) or a plain `src`, assembles the `data:` URL, and shows a loading shimmer then an error fallback. Emits `nile-load`, `nile-error`. |\n| `<nile-ai-citation>` | An inline citation pill that reveals source details on hover / click; multiple sources become a carousel. Emits `nile-toggle`, `nile-navigate`, `nile-source-click`. |\n| `<nile-ai-checkpoint>` | A marker between messages that lets the user restore the chat back to that point (bookmark icon + restore trigger + separator). Emits `nile-restore`. |\n| `<nile-ai-context>` | Visualizes an LLM context-window's usage — a circular percentage ring that reveals a token / cost breakdown (input / output / reasoning / cache) on hover or click. Emits `nile-toggle`. |\n| `<nile-ai-temperature>` | A reasoning-effort slider modeled on a coding agent's `/effort` menu — hover to preview a tier, click to commit. Emits `nile-change`. |\n| `<nile-ai-status>` | A compact status pill (`pending` / `active` / `running` / `done` / `error`). |\n| `<nile-ai-reasoning>` | A collapsible chain-of-thought panel; streaming-aware. Emits `nile-toggle`. |\n| `<nile-ai-tool-call>` | A card for an agent tool / function invocation (name, status, args, collapsible result). Emits `nile-toggle`. |\n| `<nile-ai-confirmation>` | A tool-approval card: shows an approval prompt with Approve / Reject actions while pending, then an accepted or rejected confirmation once resolved (driven by `state` + `approved`). Emits `nile-respond`, `nile-approve`, `nile-reject`. |\n| `<nile-ai-steps>` | A vertical timeline of agent steps with per-step status markers. When more steps are appended than `maxVisible` (default `3`), older steps slide out the top while new ones slide in, keeping only the trailing window on screen. |\n| `<nile-ai-plan>` | A collapsible card showing an AI-generated execution plan — titled/described content sections (headings, prose, bullet lists) with a footer call-to-action; streaming-aware. Emits `nile-toggle`, `nile-action`. |\n| `<nile-ai-queue>` | A queue of messages / todos in collapsible sections — per-item status indicator, content/description, image & file attachments, and hover-revealed actions. Emits `nile-toggle`, `nile-action`, `nile-item-click`. |\n| `<nile-ai-sources>` | A collapsible disclosure listing the grounding sources a model used (\"Used N sources\") — each a link with a leading icon, title (falling back to the hostname) and optional description, opening in a new tab. Emits `nile-toggle`, `nile-source-click`. |\n| `<nile-ai-schema-display>` | Visualizes a REST API endpoint — a color-coded HTTP method, the path (with highlighted `{path}` params), an optional description, and collapsible sections for parameters and request / response body schemas. Types and `required` render as badges; nested `object` / `array` properties expand and collapse in place. Emits `nile-toggle`. |\n| `<nile-ai-test-results>` | A test-suite run report — pass/fail/skip counts with a proportional progress bar, plus collapsible suites whose failed tests reveal an expandable error message and stack trace. Summary counts are computed from the suites when omitted. Emits `nile-toggle`, `nile-error-toggle`. |\n\n## Installation\n\n```bash\nnpm i @aquera/nile-ai-elements\n```\n\n## Usage\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-chat-bubble';\n  import '@aquera/nile-ai-elements/nile-ai-token-stream';\n  import '@aquera/nile-ai-elements/nile-wibbling-spinner';\n</script>\n```\n\n```js\n// Chat bubble — configured via a single data object\nconst bubble = document.createElement('nile-ai-chat-bubble');\nbubble.data = {\n  role: 'ai',\n  agent: 'Synthetica',\n  thinking: 'reasoning',\n  loading: true,\n  message: 'Q3 churn is bleeding from your SMB cohort.',\n};\n\n// Token stream — typewriter reveal, also drivable from a backend stream\nconst stream = document.createElement('nile-ai-token-stream');\nstream.text = 'Q3 churn is bleeding from your SMB cohort…';\nstream.loop = true;\n// stream.streamFrom((await fetch('/api/chat')).body); // live API streaming\n\n// Wibbling spinner — rotating glyph + re-rolling verb + live info\nconst spinner = document.createElement('nile-wibbling-spinner');\nspinner.verbInterval = 1500;\n```\n\n### Wiring up a chat\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-chat';\n  import '@aquera/nile-ai-elements/nile-ai-prompt-input';\n</script>\n\n<nile-ai-chat id=\"chat\" style=\"height: 480px;\">\n  <nile-ai-prompt-input slot=\"footer\" placeholder=\"Ask anything…\"></nile-ai-prompt-input>\n  <div slot=\"empty\">Start the conversation 👋</div>\n</nile-ai-chat>\n```\n\n```js\nconst chat = document.getElementById('chat');\nconst composer = chat.querySelector('nile-ai-prompt-input');\n\ncomposer.addEventListener('nile-submit', e => {\n  // append the user's message\n  const userBubble = document.createElement('nile-ai-chat-bubble');\n  userBubble.data = { role: 'user', message: e.detail.value };\n  chat.insertBefore(userBubble, null);\n  // …then stream the AI reply into a nile-ai-chat-bubble / nile-ai-token-stream\n});\n```\n\n### Rich composer (`<nile-ai-prompt>`)\n\nA fuller composer with a toolbar: an \"add context\" button, a model dropdown, a\nmic, and a send button. The mic uses the browser's Web Speech API to dictate\nstraight into the field, showing a live mic waveform while it listens.\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-prompt';\n</script>\n\n<nile-ai-prompt\n  id=\"composer\"\n  placeholder=\"Paste a tweet, get a landing page…\"\n  default-model=\"Claude Sonnet 4.6\"\n></nile-ai-prompt>\n```\n\n```js\nconst composer = document.getElementById('composer');\ncomposer.models = ['Claude Sonnet 4.6', 'Claude Opus 4.8', 'Claude Haiku 4.5'];\n\ncomposer.addEventListener('nile-submit', e => {\n  console.log('send', e.detail.value, 'with model', e.detail.model);\n});\ncomposer.addEventListener('nile-model-change', e => console.log('model →', e.detail.model));\n\n// Attachment menu: set `attach-menu` so the + opens a menu instead of emitting\n// `nile-add-context`. Defaults to a single \"Add photos or files\" option.\ncomposer.attachMenu = true;\n// Pass your own items to customize the menu (id is reported as `source`;\n// `picksFiles` opens the native file picker):\ncomposer.attachItems = [\n  { id: 'files', label: 'Add photos or files', icon: 'ng-image', picksFiles: true },\n  { id: 'screenshot', label: 'Take screenshot', icon: 'ng-monitor' },\n];\ncomposer.addEventListener('nile-attach', e => {\n  if (e.detail.source === 'files') console.log('files:', e.detail.files);\n  else console.log('custom action:', e.detail.source);\n});\n\n// Speech-to-text: spoken words are appended to the field as you talk.\ncomposer.addEventListener('nile-voice-result', e => console.log(e.detail.transcript, e.detail.isFinal));\ncomposer.addEventListener('nile-voice-end', e => console.log('dictation done:', e.detail.value));\n\n// Optional toolbar extra (e.g. a keyboard hint), rendered before the mic + send:\n// <span slot=\"toolbar-extras\">⌘↵ to send</span>\n```\n\nKey options: `value` / `defaultValue`, `placeholder`, `rows`, `models` /\n`model` / `defaultModel`, `submitOnCmdEnter` (default `true`), `speechLang`,\n`attach-menu` / `attachItems` / `accept`, and\n`hide-add-context` / `hide-model` / `hide-voice` / `hide-send`. Everything is\nalso settable at once via the `data` object.\n\n### Prompt suggestions (`<nile-ai-prompts>`)\n\nA predefined list of clickable starter prompts — handy for an empty chat state.\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-prompts';\n</script>\n\n<nile-ai-prompts id=\"suggestions\" wrap fade-in></nile-ai-prompts>\n```\n\n```js\nconst suggestions = document.getElementById('suggestions');\nsuggestions.title = '✨ How can I help you today?';\nsuggestions.items = [\n  { key: 'ignite', icon: 'ng-sparkles', label: 'Ignite an idea', description: 'Brainstorm names and angles' },\n  { key: 'write', icon: 'ng-pen-line', label: 'Draft copy', description: 'Turn a tweet into a landing page' },\n  // nested children render indented beneath their parent\n  { key: 'analytics', icon: 'ng-rocket', label: 'Analytics', children: [\n    { key: 'churn', label: 'Summarize Q3 churn by cohort' },\n  ] },\n];\n\nsuggestions.addEventListener('nile-item-click', e => {\n  // seed the composer with the chosen prompt\n  composer.value = e.detail.data.label;\n  composer.focus();\n});\n```\n\n`icon` accepts a `nile-glyph` name (e.g. `ng-sparkles`) or any other string\n(e.g. an emoji). Layout is controlled with `vertical` and `wrap`; `fade-in` /\n`fade-in-left` add a staggered entrance.\n\n### Suggestion pills (`<nile-ai-suggestion>`)\n\nA horizontal row of tappable suggestions — the follow-up chips that sit under a\nchat answer. The row scrolls when it overflows; add `wrap` to flow onto\nmultiple lines instead.\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-suggestion';\n</script>\n\n<nile-ai-suggestion id=\"followups\"></nile-ai-suggestion>\n```\n\n```js\nconst followups = document.getElementById('followups');\n\n// Plain strings — the simplest form.\nfollowups.suggestions = [\n  'Summarize Q3 churn by cohort',\n  'Which segment is bleeding the most?',\n  'Draft a recovery plan',\n];\n\n// …or richer items with an icon, a distinct emitted value, or a disabled state.\nfollowups.suggestions = [\n  { label: 'Ignite an idea', icon: 'ng-sparkles' },\n  { label: 'Explain code', icon: 'ng-code', value: 'explain:code' },\n  { label: 'Generate an image', icon: 'ng-image', disabled: true },\n];\n\nfollowups.addEventListener('nile-suggestion-click', e => {\n  // e.detail.suggestion is the item's `value` (or its label), e.detail.item the full item\n  sendMessage({ text: e.detail.suggestion });\n});\n```\n\n### Agent transparency\n\n```js\n// Tool call — name, status, args + (collapsible) result\nconst tool = document.createElement('nile-ai-tool-call');\ntool.data = { name: 'search_web', status: 'running', args: { query: 'Q3 churn' } };\n\n// Reasoning — collapsible chain-of-thought, streaming-aware\nconst reasoning = document.createElement('nile-ai-reasoning');\nreasoning.data = { loading: true, open: true };\n\n// Steps — a vertical agent timeline\nconst steps = document.createElement('nile-ai-steps');\nsteps.data = {\n  steps: [{ label: 'Plan' }, { label: 'Search the web' }, { label: 'Synthesize answer' }],\n  activeIndex: 1,\n  // Only the trailing 3 steps stay mounted; older ones slide out as new\n  // ones are appended (set 0 to disable windowing and show every step).\n  maxVisible: 3,\n};\n```\n\n### Queue (`<nile-ai-queue>`)\n\nA queue of messages / todos grouped into collapsible sections. Each item shows\na status indicator, content + optional description, image / file attachments,\nand action buttons revealed on hover.\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-queue';\n</script>\n\n<nile-ai-queue id=\"queue\"></nile-ai-queue>\n```\n\n```js\nconst queue = document.getElementById('queue');\nqueue.data = {\n  sections: [\n    {\n      id: 'queued',\n      label: 'Queued',\n      icon: 'ng-list',\n      // count defaults to items.length; defaultOpen defaults to true\n      items: [\n        {\n          id: 'q1',\n          content: 'Summarize Q3 churn by cohort',\n          description: 'Waiting to run',\n          attachments: [\n            { type: 'image', url: '/cohort.png', filename: 'cohort.png' },\n            { filename: 'report.pdf', mediaType: 'application/pdf' },\n          ],\n          actions: [\n            { id: 'run', icon: 'ng-play', label: 'Run now' },\n            { id: 'remove', icon: 'ng-x', label: 'Remove' },\n          ],\n        },\n      ],\n    },\n    {\n      id: 'completed',\n      label: 'Completed',\n      icon: 'ng-circle-check',\n      defaultOpen: false,\n      items: [{ id: 'c1', content: 'Pull subscription events', completed: true }],\n    },\n  ],\n};\n\nqueue.addEventListener('nile-toggle', e => console.log(e.detail.id, e.detail.open));\nqueue.addEventListener('nile-action', e =>\n  console.log('action', e.detail.actionId, 'on', e.detail.itemId)\n);\nqueue.addEventListener('nile-item-click', e => console.log('item', e.detail.itemId));\n```\n\n### Sources (`<nile-ai-sources>`)\n\nA collapsible disclosure listing the grounding sources a model used. The trigger\nreads \"Used N sources\"; each source is a link (title falling back to the\nhostname) that opens in a new tab.\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-sources';\n</script>\n\n<nile-ai-sources id=\"sources\"></nile-ai-sources>\n```\n\n```js\nconst sources = document.getElementById('sources');\nsources.data = {\n  open: false, // collapsed by default; omit `label` for the \"Used N sources\" default\n  sources: [\n    {\n      href: 'https://en.wikipedia.org/wiki/Revenue_retention',\n      title: 'Net revenue retention — Wikipedia',\n      description: 'Definition and benchmarks',\n    },\n    // title falls back to the hostname when omitted\n    { href: 'https://stripe.com/docs/billing' },\n  ],\n};\n\nsources.addEventListener('nile-toggle', e => console.log('open →', e.detail.open));\nsources.addEventListener('nile-source-click', e =>\n  // e.detail: { index, source, url }\n  console.log('opened source', e.detail.index, e.detail.url)\n);\n```\n\n### Schema display (`<nile-ai-schema-display>`)\n\nDocuments a single REST API endpoint: a color-coded method badge (GET / POST /\nPUT / PATCH / DELETE), the path with highlighted `{path}` parameters, an optional\ndescription, and collapsible **Parameters**, **Request Body** and **Response Body**\nsections. Body properties nest recursively — `object` types expand their\n`properties`, `array` types descend into their `items`.\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-schema-display';\n</script>\n\n<nile-ai-schema-display id=\"schema\"></nile-ai-schema-display>\n```\n\n```js\nconst schema = document.getElementById('schema');\nschema.data = {\n  method: 'GET',\n  path: '/v1/users/{id}/orders',\n  description: 'List the orders belonging to a single user.',\n  parameters: [\n    { name: 'id', type: 'string', in: 'path', required: true },\n    { name: 'limit', type: 'integer', in: 'query' },\n  ],\n  responseBody: [\n    {\n      name: 'orders',\n      type: 'array',\n      required: true,\n      // arrays descend into `items`; objects expand `properties`\n      items: {\n        name: 'order',\n        type: 'object',\n        properties: [\n          { name: 'id', type: 'string', required: true },\n          { name: 'total', type: 'number', required: true },\n        ],\n      },\n    },\n    { name: 'nextCursor', type: 'string' },\n  ],\n};\n\nschema.addEventListener('nile-toggle', e =>\n  // e.detail: { section: 'parameters' | 'request' | 'response', open }\n  console.log(e.detail.section, '→', e.detail.open)\n);\n```\n\n### Test results (`<nile-ai-test-results>`)\n\nReports a test-suite run: a header with passed / failed / skipped counts, a total\nand an optional duration, a proportional progress bar, and collapsible suites.\nEach test row shows its status icon, name and duration; a failed test with an\n`error` reveals an expandable message and stack trace. The summary is computed\nfrom the suites when not supplied, and a suite's status is derived from its tests.\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-test-results';\n</script>\n\n<nile-ai-test-results id=\"results\"></nile-ai-test-results>\n```\n\n```js\nconst results = document.getElementById('results');\nresults.data = {\n  // summary is optional — omit it and the counts are computed from `suites`\n  summary: { passed: 5, failed: 1, skipped: 1, total: 7, duration: 1840 },\n  suites: [\n    {\n      id: 'billing',\n      name: 'billing.spec.ts',\n      defaultOpen: true,\n      tests: [\n        { name: 'charges the card on renewal', status: 'passed', duration: 120 },\n        {\n          name: 'prorates a mid-cycle upgrade',\n          status: 'failed',\n          duration: 88,\n          error: {\n            message: 'Expected 41.50 but received 40.00',\n            stack: 'AssertionError: ...\\n    at proratePlan (billing.ts:212:14)',\n          },\n        },\n      ],\n    },\n  ],\n};\n\nresults.addEventListener('nile-toggle', e =>\n  // e.detail: { id, open }\n  console.log('suite', e.detail.id, '→', e.detail.open)\n);\nresults.addEventListener('nile-error-toggle', e =>\n  // e.detail: { suiteId, testIndex, open }\n  console.log('error', e.detail.suiteId, '→', e.detail.open)\n);\n```\n\n### Confirmation (`<nile-ai-confirmation>`)\n\nGates a tool / function call behind user approval. While the request is pending\n(`state: 'approval-requested'`) it shows the prompt with **Approve** / **Reject**\nbuttons; once the response resolves (`approval-responded`, `output-denied` or\n`output-available`) it renders an accepted or rejected confirmation based on\n`approved`. Use the `title` / default / `accepted` / `rejected` / `actions` slots\nto override any part.\n\n```html\n<script type=\"module\">\n  import '@aquera/nile-ai-elements/nile-ai-confirmation';\n</script>\n\n<nile-ai-confirmation id=\"confirm\"></nile-ai-confirmation>\n```\n\n```js\nconst confirm = document.getElementById('confirm');\nconfirm.data = {\n  approvalId: 'call_123',\n  state: 'approval-requested',\n  heading: 'Delete file?',\n  request: 'This tool wants to delete /tmp/example.txt. Do you approve?',\n  acceptedText: 'You approved this tool execution',\n  rejectedText: 'You rejected this tool execution',\n};\n\nconfirm.addEventListener('nile-respond', e => {\n  // e.detail: { id, approved }\n  console.log(e.detail.id, '→', e.detail.approved);\n  // reflect the decision back into the card\n  confirm.data = { ...confirm.data, state: 'output-available', approved: e.detail.approved };\n});\n```\n\n> The components consume the Nile / NxtGen design tokens (`--ng-*`). Make sure the\n> NxtGen stylesheet from `@aquera/nile` is loaded on the page so colors, spacing\n> and typography resolve correctly. `<nile-ai-chat-bubble>` also depends on\n> `@aquera/nile-glyph` for its icons.\n\n## Linting and formatting\n\nTo scan the project for linting and formatting errors, run\n\n```bash\nnpm run lint\n```\n\nTo automatically fix linting and formatting errors, run\n\n```bash\nnpm run format\n```\n\n## Testing with Web Test Runner\n\nTo execute a single test run:\n\n```bash\nnpm run test\n```\n\nTo run the tests in watch mode, run\n\n```bash\nnpm run test:watch\n```\n\n## Tooling configs\n\nFor most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.\n\nIf you customize the configuration a lot, you can consider moving them to individual files.\n\n## Local Demo with `web-dev-server`\n\n```bash\nnpm start\n```\n\nTo run a local development server that serves the basic demo located in `demo/index.html`.\n\n## Release Notes\n\nIn this section, you can find the updates for each release of `nile-ai-elements`. It's a good practice to maintain detailed release notes to help users and developers understand what changes have been made from one version to another and how these changes might affect their projects.\n\n#### Version 0.0.5 (July 06, 2026)\n- Nile AI Steps: Added a `maxVisible` property (UIF-1290)\n\n#### Version 0.0.4 (July 01, 2026)\n- Nile AI Confirmation: Added new component — a tool-approval card that shows an Approve / Reject prompt while pending and an accepted / rejected confirmation once resolved, driven by `state` + `approved`. Slots for `title` / request / `accepted` / `rejected` / `actions`. Emits `nile-respond` (`{ id, approved }`), plus `nile-approve` / `nile-reject`. (UIF-1284)\n- Nile AI Schema Display: Added new component — visualizes a REST API endpoint with a color-coded method badge, highlighted `{path}` params, and collapsible Parameters / Request Body / Response Body sections. Types and `required` render as badges, and nested `object` / `array` properties expand and collapse in place. Emits `nile-toggle`.\n- Nile AI Test Results: Added new component — a test-suite run report with passed / failed / skipped counts, a proportional progress bar, and collapsible suites whose failed tests reveal an expandable message and stack trace. Emits `nile-toggle`, `nile-error-toggle`.\n\n#### Version 0.0.3 (June 30, 2026)\n- Nile AI Queue: Added new component — a queue of messages / todos grouped into collapsible sections (`Queued` / `Completed` etc.), each item with a status indicator, content + description, image / file attachments, and hover-revealed action buttons. Data-driven via `sections`. Emits `nile-toggle`, `nile-action`, `nile-item-click`. (UIF-1282)\n- Nile AI Sources: Added new component — a collapsible \"Used N sources\" disclosure listing the grounding sources a model used; each is a link with a leading icon, a title (falling back to the hostname) and an optional description, opening in a new tab. Emits `nile-toggle`, `nile-source-click`.\n- Nile AI Suggestion: Added new component — a horizontal row of clickable suggestion pills (the follow-up chips under an answer); scrolls on overflow or wraps with `wrap`; accepts plain strings or `{ label, value, icon, disabled }` items. Emits `nile-suggestion-click` with `{ suggestion, item }`.\n- Nile AI Prompt: The + button can now open a customizable attachment menu instead of emitting `nile-add-context`. Set `attach-menu` for the default \"Add photos or files\" option, or pass `attachItems` (`{ id, label, icon?, picksFiles? }`) to define your own; `accept` filters the file picker. Emits `nile-attach` with `{ source, files? }`.\n\n#### Version 0.0.2 (June 19, 2026)\n- Nile AI Chat: Added new component — scrollable conversation thread with autoscroll, \"scroll to latest\", and `header` / `footer` / `empty` slots; optional `data.messages` rendering. Emits `nile-scroll-state`. (UIF-1279)\n- Nile AI Prompt Input: Added new composer component — auto-growing textarea, send / stop button, Enter-to-send (Shift+Enter newline), `prefix` / `suffix` / `footer` slots. Emits `nile-submit`, `nile-input`, `nile-stop`.\n- Nile AI Prompt: Added new rich composer — auto-growing textarea with a toolbar (add-context, model dropdown, mic, send), `data`-object config, controlled/uncontrolled `value` & `model`, and a `toolbar-extras` slot. Speech-to-text dictation via the Web Speech API with a live mic waveform; submit on Cmd/Ctrl+Enter. Emits `nile-submit`, `nile-change`, `nile-model-change`, `nile-add-context`, `nile-voice` / `nile-voice-start` / `nile-voice-result` / `nile-voice-end` / `nile-voice-error`, and `nile-stop`.\n- Nile AI Prompts: Added new component — a predefined set of clickable prompt suggestions (icon / label / description) with nested children, a `title`, `vertical` / `wrap` layouts and `fade-in` / `fade-in-left` entrances. Modeled on Ant Design X's Prompts. Emits `nile-item-click`.\n- Nile AI Message Actions: Added new component — per-message toolbar (copy / regenerate / like / dislike) with clipboard copy. Emits `nile-action`.\n- Nile AI Status: Added new component — compact status pill (`pending` / `active` / `running` / `done` / `error`).\n- Nile AI Reasoning: Added new component — collapsible, streaming-aware chain-of-thought panel. Emits `nile-toggle`.\n- Nile AI Tool Call: Added new component — agent tool / function invocation card (name, status, args, collapsible result). Emits `nile-toggle`.\n- Nile AI Steps: Added new component — vertical agent timeline with per-step status markers.\n\n#### Version 0.0.1 (June 17, 2026)\n- Nile AI Chat Bubble: Added new component — `user`/`ai` roles, agent header, reasoning pill with loader, and a single `data`-object API. (UIF-1269)\n- Nile AI Token Stream: Added new component — token-by-token text reveal with jitter, looping, blinking caret, and live API streaming (`append`, `finish`, `streamFrom`).(UIF-1269)\n- Nile Wibbling Spinner: Added new component — rotating glyph, re-rolling verb pool, and stateful parenthetical info.(UIF-1269)\n- Initial release of the `@aquera/nile-ai-elements` package (build tooling, dev server, and tests mirroring `@aquera/nile-elements`).(UIF-1269)\n","readmeFilename":"README.md"}