@sinequa/assistant 3.10.5 → 3.10.11
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/chat/index.d.ts +2155 -3
- package/fesm2022/sinequa-assistant-chat.mjs +770 -595
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
- package/index.d.ts +3 -5
- package/node_modules/zod/LICENSE +21 -0
- package/node_modules/zod/README.md +208 -0
- package/node_modules/zod/index.cjs +33 -0
- package/node_modules/zod/index.d.cts +4 -0
- package/node_modules/zod/index.d.ts +4 -0
- package/node_modules/zod/index.js +4 -0
- package/node_modules/zod/locales/index.cjs +17 -0
- package/node_modules/zod/locales/index.d.cts +1 -0
- package/node_modules/zod/locales/index.d.ts +1 -0
- package/node_modules/zod/locales/index.js +1 -0
- package/node_modules/zod/locales/package.json +6 -0
- package/node_modules/zod/mini/index.cjs +32 -0
- package/node_modules/zod/mini/index.d.cts +3 -0
- package/node_modules/zod/mini/index.d.ts +3 -0
- package/node_modules/zod/mini/index.js +3 -0
- package/node_modules/zod/mini/package.json +6 -0
- package/node_modules/zod/package.json +135 -0
- package/node_modules/zod/src/index.ts +4 -0
- package/node_modules/zod/src/locales/index.ts +1 -0
- package/node_modules/zod/src/mini/index.ts +3 -0
- package/node_modules/zod/src/v3/ZodError.ts +330 -0
- package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
- package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
- package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
- package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
- package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
- package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
- package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
- package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
- package/node_modules/zod/src/v3/errors.ts +13 -0
- package/node_modules/zod/src/v3/external.ts +6 -0
- package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
- package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
- package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
- package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
- package/node_modules/zod/src/v3/helpers/util.ts +224 -0
- package/node_modules/zod/src/v3/index.ts +4 -0
- package/node_modules/zod/src/v3/locales/en.ts +124 -0
- package/node_modules/zod/src/v3/standard-schema.ts +113 -0
- package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
- package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
- package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
- package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
- package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
- package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
- package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
- package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
- package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
- package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
- package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
- package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
- package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
- package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
- package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
- package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
- package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
- package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
- package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
- package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
- package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
- package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
- package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
- package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
- package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
- package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
- package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
- package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
- package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
- package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
- package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
- package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
- package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
- package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
- package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
- package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
- package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
- package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
- package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
- package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
- package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
- package/node_modules/zod/src/v3/types.ts +5138 -0
- package/node_modules/zod/src/v4/classic/checks.ts +32 -0
- package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
- package/node_modules/zod/src/v4/classic/compat.ts +70 -0
- package/node_modules/zod/src/v4/classic/errors.ts +82 -0
- package/node_modules/zod/src/v4/classic/external.ts +51 -0
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
- package/node_modules/zod/src/v4/classic/index.ts +5 -0
- package/node_modules/zod/src/v4/classic/iso.ts +90 -0
- package/node_modules/zod/src/v4/classic/parse.ts +82 -0
- package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
- package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
- package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
- package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
- package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
- package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
- package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
- package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
- package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
- package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
- package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
- package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
- package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
- package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
- package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
- package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
- package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
- package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
- package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
- package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
- package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
- package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
- package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
- package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
- package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
- package/node_modules/zod/src/v4/core/api.ts +1798 -0
- package/node_modules/zod/src/v4/core/checks.ts +1293 -0
- package/node_modules/zod/src/v4/core/config.ts +15 -0
- package/node_modules/zod/src/v4/core/core.ts +138 -0
- package/node_modules/zod/src/v4/core/doc.ts +44 -0
- package/node_modules/zod/src/v4/core/errors.ts +448 -0
- package/node_modules/zod/src/v4/core/index.ts +16 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
- package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
- package/node_modules/zod/src/v4/core/parse.ts +195 -0
- package/node_modules/zod/src/v4/core/regexes.ts +183 -0
- package/node_modules/zod/src/v4/core/registries.ts +105 -0
- package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
- package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
- package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
- package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
- package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
- package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
- package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
- package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
- package/node_modules/zod/src/v4/core/util.ts +966 -0
- package/node_modules/zod/src/v4/core/versions.ts +5 -0
- package/node_modules/zod/src/v4/core/zsf.ts +323 -0
- package/node_modules/zod/src/v4/index.ts +4 -0
- package/node_modules/zod/src/v4/locales/ar.ts +115 -0
- package/node_modules/zod/src/v4/locales/az.ts +111 -0
- package/node_modules/zod/src/v4/locales/be.ts +176 -0
- package/node_modules/zod/src/v4/locales/bg.ts +128 -0
- package/node_modules/zod/src/v4/locales/ca.ts +116 -0
- package/node_modules/zod/src/v4/locales/cs.ts +118 -0
- package/node_modules/zod/src/v4/locales/da.ts +123 -0
- package/node_modules/zod/src/v4/locales/de.ts +116 -0
- package/node_modules/zod/src/v4/locales/en.ts +119 -0
- package/node_modules/zod/src/v4/locales/eo.ts +118 -0
- package/node_modules/zod/src/v4/locales/es.ts +141 -0
- package/node_modules/zod/src/v4/locales/fa.ts +126 -0
- package/node_modules/zod/src/v4/locales/fi.ts +121 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
- package/node_modules/zod/src/v4/locales/fr.ts +116 -0
- package/node_modules/zod/src/v4/locales/he.ts +246 -0
- package/node_modules/zod/src/v4/locales/hu.ts +117 -0
- package/node_modules/zod/src/v4/locales/hy.ts +164 -0
- package/node_modules/zod/src/v4/locales/id.ts +115 -0
- package/node_modules/zod/src/v4/locales/index.ts +49 -0
- package/node_modules/zod/src/v4/locales/is.ts +119 -0
- package/node_modules/zod/src/v4/locales/it.ts +116 -0
- package/node_modules/zod/src/v4/locales/ja.ts +114 -0
- package/node_modules/zod/src/v4/locales/ka.ts +123 -0
- package/node_modules/zod/src/v4/locales/kh.ts +7 -0
- package/node_modules/zod/src/v4/locales/km.ts +119 -0
- package/node_modules/zod/src/v4/locales/ko.ts +121 -0
- package/node_modules/zod/src/v4/locales/lt.ts +239 -0
- package/node_modules/zod/src/v4/locales/mk.ts +118 -0
- package/node_modules/zod/src/v4/locales/ms.ts +115 -0
- package/node_modules/zod/src/v4/locales/nl.ts +121 -0
- package/node_modules/zod/src/v4/locales/no.ts +116 -0
- package/node_modules/zod/src/v4/locales/ota.ts +117 -0
- package/node_modules/zod/src/v4/locales/pl.ts +118 -0
- package/node_modules/zod/src/v4/locales/ps.ts +126 -0
- package/node_modules/zod/src/v4/locales/pt.ts +116 -0
- package/node_modules/zod/src/v4/locales/ru.ts +176 -0
- package/node_modules/zod/src/v4/locales/sl.ts +118 -0
- package/node_modules/zod/src/v4/locales/sv.ts +119 -0
- package/node_modules/zod/src/v4/locales/ta.ts +118 -0
- package/node_modules/zod/src/v4/locales/th.ts +119 -0
- package/node_modules/zod/src/v4/locales/tr.ts +111 -0
- package/node_modules/zod/src/v4/locales/ua.ts +7 -0
- package/node_modules/zod/src/v4/locales/uk.ts +117 -0
- package/node_modules/zod/src/v4/locales/ur.ts +119 -0
- package/node_modules/zod/src/v4/locales/uz.ts +116 -0
- package/node_modules/zod/src/v4/locales/vi.ts +117 -0
- package/node_modules/zod/src/v4/locales/yo.ts +124 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
- package/node_modules/zod/src/v4/mini/checks.ts +32 -0
- package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
- package/node_modules/zod/src/v4/mini/external.ts +40 -0
- package/node_modules/zod/src/v4/mini/index.ts +3 -0
- package/node_modules/zod/src/v4/mini/iso.ts +66 -0
- package/node_modules/zod/src/v4/mini/parse.ts +14 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
- package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
- package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
- package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
- package/node_modules/zod/src/v4-mini/index.ts +3 -0
- package/node_modules/zod/v3/ZodError.cjs +138 -0
- package/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/node_modules/zod/v3/ZodError.d.ts +164 -0
- package/node_modules/zod/v3/ZodError.js +133 -0
- package/node_modules/zod/v3/errors.cjs +17 -0
- package/node_modules/zod/v3/errors.d.cts +5 -0
- package/node_modules/zod/v3/errors.d.ts +5 -0
- package/node_modules/zod/v3/errors.js +9 -0
- package/node_modules/zod/v3/external.cjs +22 -0
- package/node_modules/zod/v3/external.d.cts +6 -0
- package/node_modules/zod/v3/external.d.ts +6 -0
- package/node_modules/zod/v3/external.js +6 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/node_modules/zod/v3/helpers/util.cjs +137 -0
- package/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/node_modules/zod/v3/helpers/util.d.ts +85 -0
- package/node_modules/zod/v3/helpers/util.js +133 -0
- package/node_modules/zod/v3/index.cjs +33 -0
- package/node_modules/zod/v3/index.d.cts +4 -0
- package/node_modules/zod/v3/index.d.ts +4 -0
- package/node_modules/zod/v3/index.js +4 -0
- package/node_modules/zod/v3/locales/en.cjs +112 -0
- package/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/node_modules/zod/v3/locales/en.d.ts +3 -0
- package/node_modules/zod/v3/locales/en.js +109 -0
- package/node_modules/zod/v3/package.json +6 -0
- package/node_modules/zod/v3/standard-schema.cjs +2 -0
- package/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/node_modules/zod/v3/standard-schema.d.ts +102 -0
- package/node_modules/zod/v3/standard-schema.js +1 -0
- package/node_modules/zod/v3/types.cjs +3777 -0
- package/node_modules/zod/v3/types.d.cts +1034 -0
- package/node_modules/zod/v3/types.d.ts +1034 -0
- package/node_modules/zod/v3/types.js +3695 -0
- package/node_modules/zod/v4/classic/checks.cjs +33 -0
- package/node_modules/zod/v4/classic/checks.d.cts +1 -0
- package/node_modules/zod/v4/classic/checks.d.ts +1 -0
- package/node_modules/zod/v4/classic/checks.js +1 -0
- package/node_modules/zod/v4/classic/coerce.cjs +47 -0
- package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
- package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
- package/node_modules/zod/v4/classic/coerce.js +17 -0
- package/node_modules/zod/v4/classic/compat.cjs +61 -0
- package/node_modules/zod/v4/classic/compat.d.cts +50 -0
- package/node_modules/zod/v4/classic/compat.d.ts +50 -0
- package/node_modules/zod/v4/classic/compat.js +31 -0
- package/node_modules/zod/v4/classic/errors.cjs +74 -0
- package/node_modules/zod/v4/classic/errors.d.cts +30 -0
- package/node_modules/zod/v4/classic/errors.d.ts +30 -0
- package/node_modules/zod/v4/classic/errors.js +48 -0
- package/node_modules/zod/v4/classic/external.cjs +73 -0
- package/node_modules/zod/v4/classic/external.d.cts +15 -0
- package/node_modules/zod/v4/classic/external.d.ts +15 -0
- package/node_modules/zod/v4/classic/external.js +20 -0
- package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
- package/node_modules/zod/v4/classic/index.cjs +33 -0
- package/node_modules/zod/v4/classic/index.d.cts +4 -0
- package/node_modules/zod/v4/classic/index.d.ts +4 -0
- package/node_modules/zod/v4/classic/index.js +4 -0
- package/node_modules/zod/v4/classic/iso.cjs +60 -0
- package/node_modules/zod/v4/classic/iso.d.cts +22 -0
- package/node_modules/zod/v4/classic/iso.d.ts +22 -0
- package/node_modules/zod/v4/classic/iso.js +30 -0
- package/node_modules/zod/v4/classic/package.json +6 -0
- package/node_modules/zod/v4/classic/parse.cjs +41 -0
- package/node_modules/zod/v4/classic/parse.d.cts +31 -0
- package/node_modules/zod/v4/classic/parse.d.ts +31 -0
- package/node_modules/zod/v4/classic/parse.js +15 -0
- package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
- package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
- package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
- package/node_modules/zod/v4/classic/schemas.js +1157 -0
- package/node_modules/zod/v4/core/api.cjs +1222 -0
- package/node_modules/zod/v4/core/api.d.cts +304 -0
- package/node_modules/zod/v4/core/api.d.ts +304 -0
- package/node_modules/zod/v4/core/api.js +1082 -0
- package/node_modules/zod/v4/core/checks.cjs +601 -0
- package/node_modules/zod/v4/core/checks.d.cts +278 -0
- package/node_modules/zod/v4/core/checks.d.ts +278 -0
- package/node_modules/zod/v4/core/checks.js +575 -0
- package/node_modules/zod/v4/core/core.cjs +83 -0
- package/node_modules/zod/v4/core/core.d.cts +70 -0
- package/node_modules/zod/v4/core/core.d.ts +70 -0
- package/node_modules/zod/v4/core/core.js +76 -0
- package/node_modules/zod/v4/core/doc.cjs +39 -0
- package/node_modules/zod/v4/core/doc.d.cts +14 -0
- package/node_modules/zod/v4/core/doc.d.ts +14 -0
- package/node_modules/zod/v4/core/doc.js +35 -0
- package/node_modules/zod/v4/core/errors.cjs +213 -0
- package/node_modules/zod/v4/core/errors.d.cts +220 -0
- package/node_modules/zod/v4/core/errors.d.ts +220 -0
- package/node_modules/zod/v4/core/errors.js +182 -0
- package/node_modules/zod/v4/core/index.cjs +47 -0
- package/node_modules/zod/v4/core/index.d.cts +16 -0
- package/node_modules/zod/v4/core/index.d.ts +16 -0
- package/node_modules/zod/v4/core/index.js +16 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
- package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
- package/node_modules/zod/v4/core/json-schema.cjs +2 -0
- package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
- package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
- package/node_modules/zod/v4/core/json-schema.js +1 -0
- package/node_modules/zod/v4/core/package.json +6 -0
- package/node_modules/zod/v4/core/parse.cjs +131 -0
- package/node_modules/zod/v4/core/parse.d.cts +49 -0
- package/node_modules/zod/v4/core/parse.d.ts +49 -0
- package/node_modules/zod/v4/core/parse.js +93 -0
- package/node_modules/zod/v4/core/regexes.cjs +166 -0
- package/node_modules/zod/v4/core/regexes.d.cts +79 -0
- package/node_modules/zod/v4/core/regexes.d.ts +79 -0
- package/node_modules/zod/v4/core/regexes.js +133 -0
- package/node_modules/zod/v4/core/registries.cjs +56 -0
- package/node_modules/zod/v4/core/registries.d.cts +35 -0
- package/node_modules/zod/v4/core/registries.d.ts +35 -0
- package/node_modules/zod/v4/core/registries.js +51 -0
- package/node_modules/zod/v4/core/schemas.cjs +2124 -0
- package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
- package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
- package/node_modules/zod/v4/core/schemas.js +2093 -0
- package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
- package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
- package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
- package/node_modules/zod/v4/core/standard-schema.js +1 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
- package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.js +437 -0
- package/node_modules/zod/v4/core/util.cjs +710 -0
- package/node_modules/zod/v4/core/util.d.cts +199 -0
- package/node_modules/zod/v4/core/util.d.ts +199 -0
- package/node_modules/zod/v4/core/util.js +651 -0
- package/node_modules/zod/v4/core/versions.cjs +8 -0
- package/node_modules/zod/v4/core/versions.d.cts +5 -0
- package/node_modules/zod/v4/core/versions.d.ts +5 -0
- package/node_modules/zod/v4/core/versions.js +5 -0
- package/node_modules/zod/v4/index.cjs +22 -0
- package/node_modules/zod/v4/index.d.cts +3 -0
- package/node_modules/zod/v4/index.d.ts +3 -0
- package/node_modules/zod/v4/index.js +3 -0
- package/node_modules/zod/v4/locales/ar.cjs +133 -0
- package/node_modules/zod/v4/locales/ar.d.cts +5 -0
- package/node_modules/zod/v4/locales/ar.d.ts +4 -0
- package/node_modules/zod/v4/locales/ar.js +106 -0
- package/node_modules/zod/v4/locales/az.cjs +132 -0
- package/node_modules/zod/v4/locales/az.d.cts +5 -0
- package/node_modules/zod/v4/locales/az.d.ts +4 -0
- package/node_modules/zod/v4/locales/az.js +105 -0
- package/node_modules/zod/v4/locales/be.cjs +183 -0
- package/node_modules/zod/v4/locales/be.d.cts +5 -0
- package/node_modules/zod/v4/locales/be.d.ts +4 -0
- package/node_modules/zod/v4/locales/be.js +156 -0
- package/node_modules/zod/v4/locales/bg.cjs +147 -0
- package/node_modules/zod/v4/locales/bg.d.cts +5 -0
- package/node_modules/zod/v4/locales/bg.d.ts +4 -0
- package/node_modules/zod/v4/locales/bg.js +120 -0
- package/node_modules/zod/v4/locales/ca.cjs +134 -0
- package/node_modules/zod/v4/locales/ca.d.cts +5 -0
- package/node_modules/zod/v4/locales/ca.d.ts +4 -0
- package/node_modules/zod/v4/locales/ca.js +107 -0
- package/node_modules/zod/v4/locales/cs.cjs +138 -0
- package/node_modules/zod/v4/locales/cs.d.cts +5 -0
- package/node_modules/zod/v4/locales/cs.d.ts +4 -0
- package/node_modules/zod/v4/locales/cs.js +111 -0
- package/node_modules/zod/v4/locales/da.cjs +142 -0
- package/node_modules/zod/v4/locales/da.d.cts +5 -0
- package/node_modules/zod/v4/locales/da.d.ts +4 -0
- package/node_modules/zod/v4/locales/da.js +115 -0
- package/node_modules/zod/v4/locales/de.cjs +135 -0
- package/node_modules/zod/v4/locales/de.d.cts +5 -0
- package/node_modules/zod/v4/locales/de.d.ts +4 -0
- package/node_modules/zod/v4/locales/de.js +108 -0
- package/node_modules/zod/v4/locales/en.cjs +136 -0
- package/node_modules/zod/v4/locales/en.d.cts +5 -0
- package/node_modules/zod/v4/locales/en.d.ts +4 -0
- package/node_modules/zod/v4/locales/en.js +109 -0
- package/node_modules/zod/v4/locales/eo.cjs +136 -0
- package/node_modules/zod/v4/locales/eo.d.cts +5 -0
- package/node_modules/zod/v4/locales/eo.d.ts +4 -0
- package/node_modules/zod/v4/locales/eo.js +109 -0
- package/node_modules/zod/v4/locales/es.cjs +159 -0
- package/node_modules/zod/v4/locales/es.d.cts +5 -0
- package/node_modules/zod/v4/locales/es.d.ts +4 -0
- package/node_modules/zod/v4/locales/es.js +132 -0
- package/node_modules/zod/v4/locales/fa.cjs +141 -0
- package/node_modules/zod/v4/locales/fa.d.cts +5 -0
- package/node_modules/zod/v4/locales/fa.d.ts +4 -0
- package/node_modules/zod/v4/locales/fa.js +114 -0
- package/node_modules/zod/v4/locales/fi.cjs +139 -0
- package/node_modules/zod/v4/locales/fi.d.cts +5 -0
- package/node_modules/zod/v4/locales/fi.d.ts +4 -0
- package/node_modules/zod/v4/locales/fi.js +112 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
- package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr-CA.js +107 -0
- package/node_modules/zod/v4/locales/fr.cjs +135 -0
- package/node_modules/zod/v4/locales/fr.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr.js +108 -0
- package/node_modules/zod/v4/locales/he.cjs +241 -0
- package/node_modules/zod/v4/locales/he.d.cts +5 -0
- package/node_modules/zod/v4/locales/he.d.ts +4 -0
- package/node_modules/zod/v4/locales/he.js +214 -0
- package/node_modules/zod/v4/locales/hu.cjs +135 -0
- package/node_modules/zod/v4/locales/hu.d.cts +5 -0
- package/node_modules/zod/v4/locales/hu.d.ts +4 -0
- package/node_modules/zod/v4/locales/hu.js +108 -0
- package/node_modules/zod/v4/locales/hy.cjs +174 -0
- package/node_modules/zod/v4/locales/hy.d.cts +5 -0
- package/node_modules/zod/v4/locales/hy.d.ts +4 -0
- package/node_modules/zod/v4/locales/hy.js +147 -0
- package/node_modules/zod/v4/locales/id.cjs +133 -0
- package/node_modules/zod/v4/locales/id.d.cts +5 -0
- package/node_modules/zod/v4/locales/id.d.ts +4 -0
- package/node_modules/zod/v4/locales/id.js +106 -0
- package/node_modules/zod/v4/locales/index.cjs +104 -0
- package/node_modules/zod/v4/locales/index.d.cts +49 -0
- package/node_modules/zod/v4/locales/index.d.ts +49 -0
- package/node_modules/zod/v4/locales/index.js +49 -0
- package/node_modules/zod/v4/locales/is.cjs +136 -0
- package/node_modules/zod/v4/locales/is.d.cts +5 -0
- package/node_modules/zod/v4/locales/is.d.ts +4 -0
- package/node_modules/zod/v4/locales/is.js +109 -0
- package/node_modules/zod/v4/locales/it.cjs +135 -0
- package/node_modules/zod/v4/locales/it.d.cts +5 -0
- package/node_modules/zod/v4/locales/it.d.ts +4 -0
- package/node_modules/zod/v4/locales/it.js +108 -0
- package/node_modules/zod/v4/locales/ja.cjs +134 -0
- package/node_modules/zod/v4/locales/ja.d.cts +5 -0
- package/node_modules/zod/v4/locales/ja.d.ts +4 -0
- package/node_modules/zod/v4/locales/ja.js +107 -0
- package/node_modules/zod/v4/locales/ka.cjs +139 -0
- package/node_modules/zod/v4/locales/ka.d.cts +5 -0
- package/node_modules/zod/v4/locales/ka.d.ts +4 -0
- package/node_modules/zod/v4/locales/ka.js +112 -0
- package/node_modules/zod/v4/locales/kh.cjs +12 -0
- package/node_modules/zod/v4/locales/kh.d.cts +5 -0
- package/node_modules/zod/v4/locales/kh.d.ts +5 -0
- package/node_modules/zod/v4/locales/kh.js +5 -0
- package/node_modules/zod/v4/locales/km.cjs +137 -0
- package/node_modules/zod/v4/locales/km.d.cts +5 -0
- package/node_modules/zod/v4/locales/km.d.ts +4 -0
- package/node_modules/zod/v4/locales/km.js +110 -0
- package/node_modules/zod/v4/locales/ko.cjs +138 -0
- package/node_modules/zod/v4/locales/ko.d.cts +5 -0
- package/node_modules/zod/v4/locales/ko.d.ts +4 -0
- package/node_modules/zod/v4/locales/ko.js +111 -0
- package/node_modules/zod/v4/locales/lt.cjs +230 -0
- package/node_modules/zod/v4/locales/lt.d.cts +5 -0
- package/node_modules/zod/v4/locales/lt.d.ts +4 -0
- package/node_modules/zod/v4/locales/lt.js +203 -0
- package/node_modules/zod/v4/locales/mk.cjs +136 -0
- package/node_modules/zod/v4/locales/mk.d.cts +5 -0
- package/node_modules/zod/v4/locales/mk.d.ts +4 -0
- package/node_modules/zod/v4/locales/mk.js +109 -0
- package/node_modules/zod/v4/locales/ms.cjs +134 -0
- package/node_modules/zod/v4/locales/ms.d.cts +5 -0
- package/node_modules/zod/v4/locales/ms.d.ts +4 -0
- package/node_modules/zod/v4/locales/ms.js +107 -0
- package/node_modules/zod/v4/locales/nl.cjs +137 -0
- package/node_modules/zod/v4/locales/nl.d.cts +5 -0
- package/node_modules/zod/v4/locales/nl.d.ts +4 -0
- package/node_modules/zod/v4/locales/nl.js +110 -0
- package/node_modules/zod/v4/locales/no.cjs +135 -0
- package/node_modules/zod/v4/locales/no.d.cts +5 -0
- package/node_modules/zod/v4/locales/no.d.ts +4 -0
- package/node_modules/zod/v4/locales/no.js +108 -0
- package/node_modules/zod/v4/locales/ota.cjs +136 -0
- package/node_modules/zod/v4/locales/ota.d.cts +5 -0
- package/node_modules/zod/v4/locales/ota.d.ts +4 -0
- package/node_modules/zod/v4/locales/ota.js +109 -0
- package/node_modules/zod/v4/locales/package.json +6 -0
- package/node_modules/zod/v4/locales/pl.cjs +136 -0
- package/node_modules/zod/v4/locales/pl.d.cts +5 -0
- package/node_modules/zod/v4/locales/pl.d.ts +4 -0
- package/node_modules/zod/v4/locales/pl.js +109 -0
- package/node_modules/zod/v4/locales/ps.cjs +141 -0
- package/node_modules/zod/v4/locales/ps.d.cts +5 -0
- package/node_modules/zod/v4/locales/ps.d.ts +4 -0
- package/node_modules/zod/v4/locales/ps.js +114 -0
- package/node_modules/zod/v4/locales/pt.cjs +135 -0
- package/node_modules/zod/v4/locales/pt.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt.js +108 -0
- package/node_modules/zod/v4/locales/ru.cjs +183 -0
- package/node_modules/zod/v4/locales/ru.d.cts +5 -0
- package/node_modules/zod/v4/locales/ru.d.ts +4 -0
- package/node_modules/zod/v4/locales/ru.js +156 -0
- package/node_modules/zod/v4/locales/sl.cjs +136 -0
- package/node_modules/zod/v4/locales/sl.d.cts +5 -0
- package/node_modules/zod/v4/locales/sl.d.ts +4 -0
- package/node_modules/zod/v4/locales/sl.js +109 -0
- package/node_modules/zod/v4/locales/sv.cjs +137 -0
- package/node_modules/zod/v4/locales/sv.d.cts +5 -0
- package/node_modules/zod/v4/locales/sv.d.ts +4 -0
- package/node_modules/zod/v4/locales/sv.js +110 -0
- package/node_modules/zod/v4/locales/ta.cjs +137 -0
- package/node_modules/zod/v4/locales/ta.d.cts +5 -0
- package/node_modules/zod/v4/locales/ta.d.ts +4 -0
- package/node_modules/zod/v4/locales/ta.js +110 -0
- package/node_modules/zod/v4/locales/th.cjs +137 -0
- package/node_modules/zod/v4/locales/th.d.cts +5 -0
- package/node_modules/zod/v4/locales/th.d.ts +4 -0
- package/node_modules/zod/v4/locales/th.js +110 -0
- package/node_modules/zod/v4/locales/tr.cjs +132 -0
- package/node_modules/zod/v4/locales/tr.d.cts +5 -0
- package/node_modules/zod/v4/locales/tr.d.ts +4 -0
- package/node_modules/zod/v4/locales/tr.js +105 -0
- package/node_modules/zod/v4/locales/ua.cjs +12 -0
- package/node_modules/zod/v4/locales/ua.d.cts +5 -0
- package/node_modules/zod/v4/locales/ua.d.ts +5 -0
- package/node_modules/zod/v4/locales/ua.js +5 -0
- package/node_modules/zod/v4/locales/uk.cjs +135 -0
- package/node_modules/zod/v4/locales/uk.d.cts +5 -0
- package/node_modules/zod/v4/locales/uk.d.ts +4 -0
- package/node_modules/zod/v4/locales/uk.js +108 -0
- package/node_modules/zod/v4/locales/ur.cjs +137 -0
- package/node_modules/zod/v4/locales/ur.d.cts +5 -0
- package/node_modules/zod/v4/locales/ur.d.ts +4 -0
- package/node_modules/zod/v4/locales/ur.js +110 -0
- package/node_modules/zod/v4/locales/uz.cjs +136 -0
- package/node_modules/zod/v4/locales/uz.d.cts +5 -0
- package/node_modules/zod/v4/locales/uz.d.ts +4 -0
- package/node_modules/zod/v4/locales/uz.js +109 -0
- package/node_modules/zod/v4/locales/vi.cjs +135 -0
- package/node_modules/zod/v4/locales/vi.d.cts +5 -0
- package/node_modules/zod/v4/locales/vi.d.ts +4 -0
- package/node_modules/zod/v4/locales/vi.js +108 -0
- package/node_modules/zod/v4/locales/yo.cjs +134 -0
- package/node_modules/zod/v4/locales/yo.d.cts +5 -0
- package/node_modules/zod/v4/locales/yo.d.ts +4 -0
- package/node_modules/zod/v4/locales/yo.js +107 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
- package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-CN.js +109 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
- package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-TW.js +107 -0
- package/node_modules/zod/v4/mini/checks.cjs +34 -0
- package/node_modules/zod/v4/mini/checks.d.cts +1 -0
- package/node_modules/zod/v4/mini/checks.d.ts +1 -0
- package/node_modules/zod/v4/mini/checks.js +1 -0
- package/node_modules/zod/v4/mini/coerce.cjs +52 -0
- package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
- package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
- package/node_modules/zod/v4/mini/coerce.js +22 -0
- package/node_modules/zod/v4/mini/external.cjs +63 -0
- package/node_modules/zod/v4/mini/external.d.cts +12 -0
- package/node_modules/zod/v4/mini/external.d.ts +12 -0
- package/node_modules/zod/v4/mini/external.js +14 -0
- package/node_modules/zod/v4/mini/index.cjs +32 -0
- package/node_modules/zod/v4/mini/index.d.cts +3 -0
- package/node_modules/zod/v4/mini/index.d.ts +3 -0
- package/node_modules/zod/v4/mini/index.js +3 -0
- package/node_modules/zod/v4/mini/iso.cjs +64 -0
- package/node_modules/zod/v4/mini/iso.d.cts +22 -0
- package/node_modules/zod/v4/mini/iso.d.ts +22 -0
- package/node_modules/zod/v4/mini/iso.js +34 -0
- package/node_modules/zod/v4/mini/package.json +6 -0
- package/node_modules/zod/v4/mini/parse.cjs +16 -0
- package/node_modules/zod/v4/mini/parse.d.cts +1 -0
- package/node_modules/zod/v4/mini/parse.d.ts +1 -0
- package/node_modules/zod/v4/mini/parse.js +1 -0
- package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
- package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
- package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
- package/node_modules/zod/v4/mini/schemas.js +925 -0
- package/node_modules/zod/v4/package.json +6 -0
- package/node_modules/zod/v4-mini/index.cjs +32 -0
- package/node_modules/zod/v4-mini/index.d.cts +3 -0
- package/node_modules/zod/v4-mini/index.d.ts +3 -0
- package/node_modules/zod/v4-mini/index.js +3 -0
- package/node_modules/zod/v4-mini/package.json +6 -0
- package/package.json +11 -10
- package/chat/charts/chart/chart.component.d.ts +0 -13
- package/chat/chat-message/chat-message.component.d.ts +0 -75
- package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +0 -48
- package/chat/chat.component.d.ts +0 -387
- package/chat/chat.service.d.ts +0 -370
- package/chat/custom-elements/components/code-block.component.d.ts +0 -11
- package/chat/custom-elements/components/document-reference.component.d.ts +0 -13
- package/chat/custom-elements/components/image-reference.component.d.ts +0 -14
- package/chat/custom-elements/components/page-reference.component.d.ts +0 -14
- package/chat/custom-elements/components/table-tools.component.d.ts +0 -11
- package/chat/custom-elements/custom-elements.config.d.ts +0 -2
- package/chat/custom-elements/custom-elements.service.d.ts +0 -14
- package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +0 -18
- package/chat/debug-message/debug-message.component.d.ts +0 -14
- package/chat/debug-message/debug-message.service.d.ts +0 -15
- package/chat/dialogs/delete-saved-chat.component.d.ts +0 -22
- package/chat/dialogs/rename-saved-chat.component.d.ts +0 -21
- package/chat/dialogs/updates.component.d.ts +0 -15
- package/chat/documents-upload/document-list/document-list.component.d.ts +0 -64
- package/chat/documents-upload/document-overview/document-overview.component.d.ts +0 -17
- package/chat/documents-upload/document-upload/document-upload.component.d.ts +0 -91
- package/chat/documents-upload/documents-upload.model.d.ts +0 -66
- package/chat/documents-upload/documents-upload.service.d.ts +0 -161
- package/chat/fetch-patcher/app-injector.d.ts +0 -9
- package/chat/fetch-patcher/fetch-patcher.d.ts +0 -31
- package/chat/fetch-patcher/global-error-handler.service.d.ts +0 -36
- package/chat/fetch-patcher/handle-unauthorized-logic.d.ts +0 -13
- package/chat/format-icon/format-icon.component.d.ts +0 -10
- package/chat/format-icon/icons.d.ts +0 -5
- package/chat/initials-avatar/initials-avatar.component.d.ts +0 -35
- package/chat/instance-manager.service.d.ts +0 -28
- package/chat/markdown-it/markdown-it.config.d.ts +0 -4
- package/chat/markdown-it/plugins/code-block.plugin.d.ts +0 -2
- package/chat/markdown-it/plugins/document-reference.plugin.d.ts +0 -8
- package/chat/markdown-it/plugins/image-reference.plugin.d.ts +0 -9
- package/chat/markdown-it/plugins/link.plugin.d.ts +0 -5
- package/chat/markdown-it/plugins/page-reference.plugin.d.ts +0 -9
- package/chat/markdown-it/plugins/table-tools.plugin.d.ts +0 -2
- package/chat/pipes/message-content.pipe.d.ts +0 -16
- package/chat/public-api.d.ts +0 -35
- package/chat/references/chat-reference/chat-reference.component.d.ts +0 -24
- package/chat/references/chat-reference-image/chat-reference-image.component.d.ts +0 -20
- package/chat/references/chat-reference-page/chat-reference-page.component.d.ts +0 -20
- package/chat/saved-chats/saved-chats.component.d.ts +0 -37
- package/chat/saved-chats/saved-chats.service.d.ts +0 -29
- package/chat/services/app.service.d.ts +0 -9
- package/chat/services/assistant-configuration.service.d.ts +0 -34
- package/chat/services/assistant-metadata.service.d.ts +0 -20
- package/chat/services/assistant-tokens-tracking.service.d.ts +0 -23
- package/chat/services/assistant-ws-frames.service.d.ts +0 -50
- package/chat/services/dialog.service.d.ts +0 -12
- package/chat/services/notification.service.d.ts +0 -10
- package/chat/services/principal.service.d.ts +0 -7
- package/chat/services/search.service.d.ts +0 -7
- package/chat/services/signalR-connection.service.d.ts +0 -25
- package/chat/services/signalR.web.service.d.ts +0 -35
- package/chat/services/ui.service.d.ts +0 -13
- package/chat/services/user-settings.service.d.ts +0 -7
- package/chat/smart-renderer/smart-renderer.d.ts +0 -25
- package/chat/token-progress-bar/token-progress-bar.component.d.ts +0 -24
- package/chat/tooltip/tooltip.component.d.ts +0 -12
- package/chat/tooltip/tooltip.directive.d.ts +0 -81
- package/chat/types/message-content.types.d.ts +0 -54
- package/chat/types/message-reference.types.d.ts +0 -14
- package/chat/types.d.ts +0 -920
- package/chat/utils/assistant-json.d.ts +0 -2
- package/chat/utils/utils.service.d.ts +0 -67
- package/chat/version.d.ts +0 -1
- package/esm2022/chat/charts/chart/chart.component.mjs +0 -40
- package/esm2022/chat/chat-message/chat-message.component.mjs +0 -252
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -121
- package/esm2022/chat/chat.component.mjs +0 -1115
- package/esm2022/chat/chat.service.mjs +0 -636
- package/esm2022/chat/custom-elements/components/code-block.component.mjs +0 -97
- package/esm2022/chat/custom-elements/components/document-reference.component.mjs +0 -85
- package/esm2022/chat/custom-elements/components/image-reference.component.mjs +0 -79
- package/esm2022/chat/custom-elements/components/page-reference.component.mjs +0 -79
- package/esm2022/chat/custom-elements/components/table-tools.component.mjs +0 -111
- package/esm2022/chat/custom-elements/custom-elements.config.mjs +0 -6
- package/esm2022/chat/custom-elements/custom-elements.service.mjs +0 -35
- package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +0 -43
- package/esm2022/chat/debug-message/debug-message.component.mjs +0 -40
- package/esm2022/chat/debug-message/debug-message.service.mjs +0 -49
- package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +0 -81
- package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +0 -85
- package/esm2022/chat/dialogs/updates.component.mjs +0 -61
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +0 -141
- package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +0 -42
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +0 -254
- package/esm2022/chat/documents-upload/documents-upload.model.mjs +0 -2
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +0 -274
- package/esm2022/chat/fetch-patcher/app-injector.mjs +0 -19
- package/esm2022/chat/fetch-patcher/fetch-patcher.mjs +0 -62
- package/esm2022/chat/fetch-patcher/global-error-handler.service.mjs +0 -92
- package/esm2022/chat/fetch-patcher/handle-unauthorized-logic.mjs +0 -19
- package/esm2022/chat/format-icon/format-icon.component.mjs +0 -23
- package/esm2022/chat/format-icon/icons.mjs +0 -138
- package/esm2022/chat/initials-avatar/initials-avatar.component.mjs +0 -60
- package/esm2022/chat/instance-manager.service.mjs +0 -46
- package/esm2022/chat/markdown-it/markdown-it.config.mjs +0 -6
- package/esm2022/chat/markdown-it/plugins/code-block.plugin.mjs +0 -14
- package/esm2022/chat/markdown-it/plugins/document-reference.plugin.mjs +0 -66
- package/esm2022/chat/markdown-it/plugins/image-reference.plugin.mjs +0 -67
- package/esm2022/chat/markdown-it/plugins/link.plugin.mjs +0 -15
- package/esm2022/chat/markdown-it/plugins/page-reference.plugin.mjs +0 -67
- package/esm2022/chat/markdown-it/plugins/table-tools.plugin.mjs +0 -12
- package/esm2022/chat/pipes/message-content.pipe.mjs +0 -37
- package/esm2022/chat/public-api.mjs +0 -37
- package/esm2022/chat/references/chat-reference/chat-reference.component.mjs +0 -72
- package/esm2022/chat/references/chat-reference-image/chat-reference-image.component.mjs +0 -42
- package/esm2022/chat/references/chat-reference-page/chat-reference-page.component.mjs +0 -42
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +0 -115
- package/esm2022/chat/saved-chats/saved-chats.service.mjs +0 -170
- package/esm2022/chat/services/app.service.mjs +0 -30
- package/esm2022/chat/services/assistant-configuration.service.mjs +0 -158
- package/esm2022/chat/services/assistant-metadata.service.mjs +0 -85
- package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +0 -50
- package/esm2022/chat/services/assistant-ws-frames.service.mjs +0 -391
- package/esm2022/chat/services/dialog.service.mjs +0 -40
- package/esm2022/chat/services/notification.service.mjs +0 -25
- package/esm2022/chat/services/principal.service.mjs +0 -16
- package/esm2022/chat/services/search.service.mjs +0 -13
- package/esm2022/chat/services/signalR-connection.service.mjs +0 -102
- package/esm2022/chat/services/signalR.web.service.mjs +0 -69
- package/esm2022/chat/services/ui.service.mjs +0 -61
- package/esm2022/chat/services/user-settings.service.mjs +0 -25
- package/esm2022/chat/sinequa-assistant-chat.mjs +0 -5
- package/esm2022/chat/smart-renderer/smart-renderer.mjs +0 -104
- package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +0 -52
- package/esm2022/chat/tooltip/tooltip.component.mjs +0 -44
- package/esm2022/chat/tooltip/tooltip.directive.mjs +0 -203
- package/esm2022/chat/types/message-content.types.mjs +0 -2
- package/esm2022/chat/types/message-reference.types.mjs +0 -2
- package/esm2022/chat/types.mjs +0 -130
- package/esm2022/chat/utils/assistant-json.mjs +0 -12
- package/esm2022/chat/utils/utils.service.mjs +0 -170
- package/esm2022/chat/version.mjs +0 -3
- package/esm2022/public-api.mjs +0 -3
- package/esm2022/sinequa-assistant.mjs +0 -5
- package/public-api.d.ts +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as i1 from '@angular/common';
|
|
2
2
|
import { CommonModule, NgTemplateOutlet } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Injectable, EventEmitter, inject,
|
|
4
|
+
import { Injectable, EventEmitter, inject, Output, Input, Component, Pipe, InjectionToken, input, signal, effect, ChangeDetectionStrategy, HostListener, Directive, ViewEncapsulation, output, viewChild, computed, LOCALE_ID, ElementRef, createComponent, ChangeDetectorRef, DestroyRef, ContentChild, ViewChild, Injector } from '@angular/core';
|
|
5
5
|
import * as i2 from '@angular/forms';
|
|
6
6
|
import { FormsModule } from '@angular/forms';
|
|
7
7
|
import { Subscription, of, tap, switchMap, filter, delay, from, throwError, Subject, fromEvent, merge, Observable, BehaviorSubject, defer, take as take$1, forkJoin, map as map$1, catchError as catchError$1, finalize as finalize$1, combineLatest, debounceTime, distinctUntilChanged, EMPTY, interval, startWith, takeWhile } from 'rxjs';
|
|
8
|
-
import {
|
|
8
|
+
import { TranslocoPipe, provideTranslocoScope, TranslocoService } from '@jsverse/transloco';
|
|
9
9
|
import { fetchApp, isAuthenticated, sha512, patchUserSettings, get, post, globalConfig, getToken, fetchUserSettings, fetchPrincipal, guid, Audit, setGlobalConfig, fetchQuery } from '@sinequa/atomic';
|
|
10
|
-
import {
|
|
10
|
+
import { LogLevel, HubConnectionBuilder, HttpTransportType, HubConnectionState } from '@microsoft/signalr';
|
|
11
11
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
12
12
|
import { Chart, registerables } from 'chart.js';
|
|
13
13
|
import SafeColor from 'safecolor';
|
|
@@ -33,9 +33,7 @@ import { createCustomElement } from '@angular/elements';
|
|
|
33
33
|
* All chat-related components should share the same instance of this InstanceManagerService, which in turn provides the appropriate instance of ChatService
|
|
34
34
|
*/
|
|
35
35
|
class InstanceManagerService {
|
|
36
|
-
|
|
37
|
-
this._serviceInstances = new Map();
|
|
38
|
-
}
|
|
36
|
+
_serviceInstances = new Map();
|
|
39
37
|
/**
|
|
40
38
|
* Store the instance of ChatService in the map
|
|
41
39
|
* @param key key differentiator between components used to store their corresponding ChatService instance
|
|
@@ -62,10 +60,10 @@ class InstanceManagerService {
|
|
|
62
60
|
checkInstance(key) {
|
|
63
61
|
return this._serviceInstances.has(key);
|
|
64
62
|
}
|
|
65
|
-
static
|
|
66
|
-
static
|
|
63
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InstanceManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
64
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InstanceManagerService, providedIn: 'root' });
|
|
67
65
|
}
|
|
68
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InstanceManagerService, decorators: [{
|
|
69
67
|
type: Injectable,
|
|
70
68
|
args: [{
|
|
71
69
|
providedIn: 'root',
|
|
@@ -73,9 +71,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
73
71
|
}] });
|
|
74
72
|
|
|
75
73
|
class AppService {
|
|
76
|
-
|
|
77
|
-
this.app = undefined;
|
|
78
|
-
}
|
|
74
|
+
app = undefined;
|
|
79
75
|
async init() {
|
|
80
76
|
if (!this.app) {
|
|
81
77
|
try {
|
|
@@ -89,10 +85,10 @@ class AppService {
|
|
|
89
85
|
get appName() {
|
|
90
86
|
return this?.app?.name || "";
|
|
91
87
|
}
|
|
92
|
-
static
|
|
93
|
-
static
|
|
88
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
89
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, providedIn: 'root' });
|
|
94
90
|
}
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, decorators: [{
|
|
96
92
|
type: Injectable,
|
|
97
93
|
args: [{
|
|
98
94
|
providedIn: 'root'
|
|
@@ -100,13 +96,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
100
96
|
}] });
|
|
101
97
|
|
|
102
98
|
class PrincipalService {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PrincipalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
107
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PrincipalService, providedIn: "root" }); }
|
|
99
|
+
principal = {};
|
|
100
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
101
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, providedIn: "root" });
|
|
108
102
|
}
|
|
109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, decorators: [{
|
|
110
104
|
type: Injectable,
|
|
111
105
|
args: [{
|
|
112
106
|
providedIn: "root"
|
|
@@ -126,17 +120,20 @@ function getAssistantJsonFromCCApp(ccApp, configId) {
|
|
|
126
120
|
}
|
|
127
121
|
|
|
128
122
|
class ChatSettingsV3Component {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
123
|
+
/** Define the key based on it, the appropriate chatService instance will be returned from instanceManagerService */
|
|
124
|
+
instanceId;
|
|
125
|
+
_update = new EventEmitter();
|
|
126
|
+
_cancel = new EventEmitter();
|
|
127
|
+
chatService;
|
|
128
|
+
config;
|
|
129
|
+
subscription = new Subscription();
|
|
130
|
+
selectedModel;
|
|
131
|
+
functions = [];
|
|
132
|
+
isAdmin = false;
|
|
133
|
+
showDebugToggle = false;
|
|
134
|
+
instanceManagerService = inject(InstanceManagerService);
|
|
135
|
+
principalService = inject(PrincipalService);
|
|
136
|
+
appService = inject(AppService);
|
|
140
137
|
ngOnInit() {
|
|
141
138
|
this.subscription.add(of(isAuthenticated()).pipe(tap(_ => this.instantiateChatService()), switchMap(() => this.chatService.initProcess$.pipe(filter(Boolean)))).subscribe(_ => {
|
|
142
139
|
this.isAdmin = this.principalService.principal.isAdministrator;
|
|
@@ -217,10 +214,10 @@ class ChatSettingsV3Component {
|
|
|
217
214
|
cancel() {
|
|
218
215
|
this._cancel.emit(this.chatService.assistantConfig$.value);
|
|
219
216
|
}
|
|
220
|
-
static
|
|
221
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChatSettingsV3Component, isStandalone: true, selector: "sq-chat-settings-v3", inputs: { instanceId: "instanceId" }, outputs: { _update: "update", _cancel: "cancel" }, providers: [provideTranslocoScope('chat-settings')], ngImport: i0, template: "<div class=\"sq-chat-settings\" *ngIf=\"isAdmin || config?.uiSettings.display\">\n <div class=\"settings-panel p-2 small\" *ngIf=\"config\">\n\n <h5 *ngIf=\"hasModel\">{{ 'chatSettings.model' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.servicesModels\">\n <label for=\"gllmModel\" class=\"form-label\">{{ 'chatSettings.model' | transloco }}</label>\n <select class=\"form-select\" id=\"gllmModel\" [(ngModel)]=\"selectedModel\" (ngModelChange)=\"onChatModelChange($event)\">\n <option *ngFor=\"let model of chatService.models\" [ngValue]=\"model\">{{model.name}}</option>\n </select>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"isAdmin || config?.uiSettings.functions\">\n <label for=\"gllmFunctions\" class=\"form-label\">{{ 'chatSettings.functions' | transloco }}</label>\n <div id=\"gllmFunctions\" *ngFor=\"let func of functions\" class=\"multi-option form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [id]=\"func.name\" [(ngModel)]=\"func.enabled\"\n (ngModelChange)=\"toggleFunctionsSelection(func.name)\">\n <label class=\"form-label\" [for]=\"func.name\" [title]=\"getFunctionDescription(func.name)\">{{ func.name }}</label>\n </div>\n </div>\n\n <div class=\"form-check form-switch mb-2\" *ngIf=\"showDebugToggle\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"debug\" [(ngModel)]=\"config.defaultValues.debug\">\n <label class=\"form-check-label\" for=\"debug\">{{ 'chatSettings.debug' | transloco }}</label>\n </div>\n\n <details *ngIf=\"hasAdvancedParameters\">\n <summary>{{ 'chatSettings.advancedParameters' | transloco }}</summary>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.temperature) && config?.defaultValues.temperature !== undefined\">\n <label for=\"temperature\" class=\"form-label\">{{ 'chatSettings.temperature' | transloco }}: {{config?.defaultValues.temperature}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"2\" step=\"0.1\" id=\"temperature\"\n [(ngModel)]=\"config.defaultValues.temperature\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.top_p) && config?.defaultValues.top_p !== undefined\">\n <label for=\"top-p\" class=\"form-label\">{{ 'chatSettings.topP' | transloco }}: {{config?.defaultValues.top_p}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"1\" step=\"0.05\" id=\"top-p\"\n [(ngModel)]=\"config.defaultValues.top_p\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.max_tokens) && config?.defaultValues.max_tokens !== undefined\">\n <label for=\"max-tokens\" class=\"form-label\">{{ 'chatSettings.MaxGeneratedTokens' | transloco }}:\n {{config?.defaultValues.max_tokens}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"1\" max=\"2048\" step=\"1\" id=\"max-tokens\"\n [(ngModel)]=\"config.defaultValues.max_tokens\">\n </div>\n </details>\n\n <hr>\n\n <h5 *ngIf=\"hasPrompts\">{{ 'chatSettings.Prompts' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displaySystemPrompt\">\n <label for=\"initialSystemPrompt\" class=\"form-label\">{{ 'chatSettings.systemPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialSystemPrompt\" [(ngModel)]=\"config.defaultValues.systemPrompt\"></textarea>\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displayUserPrompt\">\n <label for=\"initialUserPrompt\" class=\"form-label\">{{ 'chatSettings.initialUserPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialUserPrompt\" [(ngModel)]=\"config.defaultValues.userPrompt\"></textarea>\n </div>\n\n </div>\n\n <div class=\"buttons-panel d-flex justify-content-end\">\n <button class=\"btn btn-light me-1\" (click)=\"cancel()\">{{ 'chatSettings.cancel' | transloco }}</button>\n <button class=\"btn btn-primary\" *ngIf=\"config\" (click)=\"save()\">{{ 'chatSettings.save' | transloco }}</button>\n </div>\n\n</div>\n", styles: [":host{display:block;width:var(--ast-chat-settings-width, 100%);max-width:100%;height:100%;margin-left:auto;margin-right:auto;padding-top:var(--ast-chat-settings-padding-top, 0);padding-bottom:var(--ast-chat-settings-padding-bottom, 0)}.sq-chat-settings{display:flex;flex-direction:column;max-height:100%}.sq-chat-settings .settings-panel{flex-grow:1;overflow:auto}.sq-chat-settings .buttons-panel{padding-top:.5rem}.d-flex{display:flex}.justify-content-end{justify-content:flex-end}.small{font-size:.875em}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-label{margin-bottom:.5rem}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-switch{padding-left:2.5em}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);--bs-form-check-checked-bg-color: #ff854a;--bs-form-check-checked-border-color: #ff854a;--bs-form-check-checked-bg-color-hover: #e6540b;--bs-form-check-checked-border-color-hover: #e6540b;flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]:checked{background-color:var(--bs-form-check-checked-bg-color);border-color:var(--bs-form-check-checked-border-color)}.form-check-input[type=checkbox]:checked:hover{background-color:var(--bs-form-check-checked-bg-color-hover);border-color:var(--bs-form-check-checked-border-color-hover)}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
|
|
217
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatSettingsV3Component, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
218
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ChatSettingsV3Component, isStandalone: true, selector: "sq-chat-settings-v3", inputs: { instanceId: "instanceId" }, outputs: { _update: "update", _cancel: "cancel" }, providers: [provideTranslocoScope('chat-settings')], ngImport: i0, template: "<div class=\"sq-chat-settings\" *ngIf=\"isAdmin || config?.uiSettings.display\">\n <div class=\"settings-panel p-2 small\" *ngIf=\"config\">\n\n <h5 *ngIf=\"hasModel\">{{ 'chatSettings.model' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.servicesModels\">\n <label for=\"gllmModel\" class=\"form-label\">{{ 'chatSettings.model' | transloco }}</label>\n <select class=\"form-select\" id=\"gllmModel\" [(ngModel)]=\"selectedModel\" (ngModelChange)=\"onChatModelChange($event)\">\n <option *ngFor=\"let model of chatService.models\" [ngValue]=\"model\">{{model.name}}</option>\n </select>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"isAdmin || config?.uiSettings.functions\">\n <label for=\"gllmFunctions\" class=\"form-label\">{{ 'chatSettings.functions' | transloco }}</label>\n <div id=\"gllmFunctions\" *ngFor=\"let func of functions\" class=\"multi-option form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [id]=\"func.name\" [(ngModel)]=\"func.enabled\"\n (ngModelChange)=\"toggleFunctionsSelection(func.name)\">\n <label class=\"form-label\" [for]=\"func.name\" [title]=\"getFunctionDescription(func.name)\">{{ func.name }}</label>\n </div>\n </div>\n\n <div class=\"form-check form-switch mb-2\" *ngIf=\"showDebugToggle\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"debug\" [(ngModel)]=\"config.defaultValues.debug\">\n <label class=\"form-check-label\" for=\"debug\">{{ 'chatSettings.debug' | transloco }}</label>\n </div>\n\n <details *ngIf=\"hasAdvancedParameters\">\n <summary>{{ 'chatSettings.advancedParameters' | transloco }}</summary>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.temperature) && config?.defaultValues.temperature !== undefined\">\n <label for=\"temperature\" class=\"form-label\">{{ 'chatSettings.temperature' | transloco }}: {{config?.defaultValues.temperature}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"2\" step=\"0.1\" id=\"temperature\"\n [(ngModel)]=\"config.defaultValues.temperature\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.top_p) && config?.defaultValues.top_p !== undefined\">\n <label for=\"top-p\" class=\"form-label\">{{ 'chatSettings.topP' | transloco }}: {{config?.defaultValues.top_p}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"1\" step=\"0.05\" id=\"top-p\"\n [(ngModel)]=\"config.defaultValues.top_p\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.max_tokens) && config?.defaultValues.max_tokens !== undefined\">\n <label for=\"max-tokens\" class=\"form-label\">{{ 'chatSettings.MaxGeneratedTokens' | transloco }}:\n {{config?.defaultValues.max_tokens}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"1\" max=\"2048\" step=\"1\" id=\"max-tokens\"\n [(ngModel)]=\"config.defaultValues.max_tokens\">\n </div>\n </details>\n\n <hr>\n\n <h5 *ngIf=\"hasPrompts\">{{ 'chatSettings.Prompts' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displaySystemPrompt\">\n <label for=\"initialSystemPrompt\" class=\"form-label\">{{ 'chatSettings.systemPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialSystemPrompt\" [(ngModel)]=\"config.defaultValues.systemPrompt\"></textarea>\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displayUserPrompt\">\n <label for=\"initialUserPrompt\" class=\"form-label\">{{ 'chatSettings.initialUserPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialUserPrompt\" [(ngModel)]=\"config.defaultValues.userPrompt\"></textarea>\n </div>\n\n </div>\n\n <div class=\"buttons-panel d-flex justify-content-end\">\n <button class=\"btn btn-light me-1\" (click)=\"cancel()\">{{ 'chatSettings.cancel' | transloco }}</button>\n <button class=\"btn btn-primary\" *ngIf=\"config\" (click)=\"save()\">{{ 'chatSettings.save' | transloco }}</button>\n </div>\n\n</div>\n", styles: [":host{display:block;width:var(--ast-chat-settings-width, 100%);max-width:100%;height:100%;margin-left:auto;margin-right:auto;padding-top:var(--ast-chat-settings-padding-top, 0);padding-bottom:var(--ast-chat-settings-padding-bottom, 0)}.sq-chat-settings{display:flex;flex-direction:column;max-height:100%}.sq-chat-settings .settings-panel{flex-grow:1;overflow:auto}.sq-chat-settings .buttons-panel{padding-top:.5rem}.d-flex{display:flex}.justify-content-end{justify-content:flex-end}.small{font-size:.875em}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-label{margin-bottom:.5rem}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-switch{padding-left:2.5em}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);--bs-form-check-checked-bg-color: #ff854a;--bs-form-check-checked-border-color: #ff854a;--bs-form-check-checked-bg-color-hover: #e6540b;--bs-form-check-checked-border-color-hover: #e6540b;flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]:checked{background-color:var(--bs-form-check-checked-bg-color);border-color:var(--bs-form-check-checked-border-color)}.form-check-input[type=checkbox]:checked:hover{background-color:var(--bs-form-check-checked-bg-color-hover);border-color:var(--bs-form-check-checked-border-color-hover)}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
222
219
|
}
|
|
223
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
220
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatSettingsV3Component, decorators: [{
|
|
224
221
|
type: Component,
|
|
225
222
|
args: [{ selector: 'sq-chat-settings-v3', standalone: true, imports: [CommonModule, FormsModule, TranslocoPipe], providers: [provideTranslocoScope('chat-settings')], template: "<div class=\"sq-chat-settings\" *ngIf=\"isAdmin || config?.uiSettings.display\">\n <div class=\"settings-panel p-2 small\" *ngIf=\"config\">\n\n <h5 *ngIf=\"hasModel\">{{ 'chatSettings.model' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.servicesModels\">\n <label for=\"gllmModel\" class=\"form-label\">{{ 'chatSettings.model' | transloco }}</label>\n <select class=\"form-select\" id=\"gllmModel\" [(ngModel)]=\"selectedModel\" (ngModelChange)=\"onChatModelChange($event)\">\n <option *ngFor=\"let model of chatService.models\" [ngValue]=\"model\">{{model.name}}</option>\n </select>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"isAdmin || config?.uiSettings.functions\">\n <label for=\"gllmFunctions\" class=\"form-label\">{{ 'chatSettings.functions' | transloco }}</label>\n <div id=\"gllmFunctions\" *ngFor=\"let func of functions\" class=\"multi-option form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [id]=\"func.name\" [(ngModel)]=\"func.enabled\"\n (ngModelChange)=\"toggleFunctionsSelection(func.name)\">\n <label class=\"form-label\" [for]=\"func.name\" [title]=\"getFunctionDescription(func.name)\">{{ func.name }}</label>\n </div>\n </div>\n\n <div class=\"form-check form-switch mb-2\" *ngIf=\"showDebugToggle\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"debug\" [(ngModel)]=\"config.defaultValues.debug\">\n <label class=\"form-check-label\" for=\"debug\">{{ 'chatSettings.debug' | transloco }}</label>\n </div>\n\n <details *ngIf=\"hasAdvancedParameters\">\n <summary>{{ 'chatSettings.advancedParameters' | transloco }}</summary>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.temperature) && config?.defaultValues.temperature !== undefined\">\n <label for=\"temperature\" class=\"form-label\">{{ 'chatSettings.temperature' | transloco }}: {{config?.defaultValues.temperature}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"2\" step=\"0.1\" id=\"temperature\"\n [(ngModel)]=\"config.defaultValues.temperature\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.top_p) && config?.defaultValues.top_p !== undefined\">\n <label for=\"top-p\" class=\"form-label\">{{ 'chatSettings.topP' | transloco }}: {{config?.defaultValues.top_p}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"1\" step=\"0.05\" id=\"top-p\"\n [(ngModel)]=\"config.defaultValues.top_p\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.max_tokens) && config?.defaultValues.max_tokens !== undefined\">\n <label for=\"max-tokens\" class=\"form-label\">{{ 'chatSettings.MaxGeneratedTokens' | transloco }}:\n {{config?.defaultValues.max_tokens}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"1\" max=\"2048\" step=\"1\" id=\"max-tokens\"\n [(ngModel)]=\"config.defaultValues.max_tokens\">\n </div>\n </details>\n\n <hr>\n\n <h5 *ngIf=\"hasPrompts\">{{ 'chatSettings.Prompts' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displaySystemPrompt\">\n <label for=\"initialSystemPrompt\" class=\"form-label\">{{ 'chatSettings.systemPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialSystemPrompt\" [(ngModel)]=\"config.defaultValues.systemPrompt\"></textarea>\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displayUserPrompt\">\n <label for=\"initialUserPrompt\" class=\"form-label\">{{ 'chatSettings.initialUserPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialUserPrompt\" [(ngModel)]=\"config.defaultValues.userPrompt\"></textarea>\n </div>\n\n </div>\n\n <div class=\"buttons-panel d-flex justify-content-end\">\n <button class=\"btn btn-light me-1\" (click)=\"cancel()\">{{ 'chatSettings.cancel' | transloco }}</button>\n <button class=\"btn btn-primary\" *ngIf=\"config\" (click)=\"save()\">{{ 'chatSettings.save' | transloco }}</button>\n </div>\n\n</div>\n", styles: [":host{display:block;width:var(--ast-chat-settings-width, 100%);max-width:100%;height:100%;margin-left:auto;margin-right:auto;padding-top:var(--ast-chat-settings-padding-top, 0);padding-bottom:var(--ast-chat-settings-padding-bottom, 0)}.sq-chat-settings{display:flex;flex-direction:column;max-height:100%}.sq-chat-settings .settings-panel{flex-grow:1;overflow:auto}.sq-chat-settings .buttons-panel{padding-top:.5rem}.d-flex{display:flex}.justify-content-end{justify-content:flex-end}.small{font-size:.875em}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-label{margin-bottom:.5rem}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-switch{padding-left:2.5em}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);--bs-form-check-checked-bg-color: #ff854a;--bs-form-check-checked-border-color: #ff854a;--bs-form-check-checked-bg-color-hover: #e6540b;--bs-form-check-checked-border-color-hover: #e6540b;flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]:checked{background-color:var(--bs-form-check-checked-bg-color);border-color:var(--bs-form-check-checked-border-color)}.form-check-input[type=checkbox]:checked:hover{background-color:var(--bs-form-check-checked-bg-color-hover);border-color:var(--bs-form-check-checked-border-color-hover)}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}\n"] }]
|
|
226
223
|
}], propDecorators: { instanceId: [{
|
|
@@ -235,6 +232,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
235
232
|
|
|
236
233
|
Chart.register(...registerables);
|
|
237
234
|
class ChartComponent {
|
|
235
|
+
rawChartData;
|
|
236
|
+
chart;
|
|
237
|
+
debounceTimer;
|
|
238
238
|
constructor() { }
|
|
239
239
|
ngOnChanges(changes) {
|
|
240
240
|
if (changes['rawChartData']) {
|
|
@@ -259,10 +259,10 @@ class ChartComponent {
|
|
|
259
259
|
console.error('Chart Canvas is not found');
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
|
-
static
|
|
263
|
-
static
|
|
262
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
263
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ChartComponent, isStandalone: true, selector: "sq-assistant-chart", inputs: { rawChartData: "rawChartData" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <canvas id=\"chart-canvas\">{{ chart }}</canvas>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
264
264
|
}
|
|
265
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
265
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartComponent, decorators: [{
|
|
266
266
|
type: Component,
|
|
267
267
|
args: [{ selector: 'sq-assistant-chart', standalone: true, imports: [CommonModule], template: "<div class=\"chart-container\">\n <canvas id=\"chart-canvas\">{{ chart }}</canvas>\n</div>\n" }]
|
|
268
268
|
}], ctorParameters: () => [], propDecorators: { rawChartData: [{
|
|
@@ -270,10 +270,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
270
270
|
}] } });
|
|
271
271
|
|
|
272
272
|
class InitialsAvatarComponent {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
this.size = 1.5; // in rem
|
|
276
|
-
}
|
|
273
|
+
fullName = '';
|
|
274
|
+
size = 1.5; // in rem
|
|
277
275
|
/**
|
|
278
276
|
* Gives initials of a name and a safe color background to use,
|
|
279
277
|
* assuming text color will be white
|
|
@@ -312,10 +310,10 @@ class InitialsAvatarComponent {
|
|
|
312
310
|
});
|
|
313
311
|
return safeColor.random(text);
|
|
314
312
|
}
|
|
315
|
-
static
|
|
316
|
-
static
|
|
313
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InitialsAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
314
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: InitialsAvatarComponent, isStandalone: true, selector: "sq-initials-avatar", inputs: { fullName: "fullName", size: "size" }, ngImport: i0, template: "<span class=\"sq-initials-avatar\" *ngIf=\"getInitialsAndColorFromFullName(fullName) as meta\"\n [ngStyle]=\"{ 'background-color': meta.color }\" [style.height.rem]=\"size\" [style.width.rem]=\"size\"\n [style.line-height.rem]=\"size\" [style.font-size.rem]=\"size/2\">\n {{ meta.initials | uppercase }}\n</span>", styles: [".sq-initials-avatar{display:block;border-radius:50%;text-align:center;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }] });
|
|
317
315
|
}
|
|
318
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
316
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InitialsAvatarComponent, decorators: [{
|
|
319
317
|
type: Component,
|
|
320
318
|
args: [{ selector: 'sq-initials-avatar', standalone: true, imports: [CommonModule], template: "<span class=\"sq-initials-avatar\" *ngIf=\"getInitialsAndColorFromFullName(fullName) as meta\"\n [ngStyle]=\"{ 'background-color': meta.color }\" [style.height.rem]=\"size\" [style.width.rem]=\"size\"\n [style.line-height.rem]=\"size\" [style.font-size.rem]=\"size/2\">\n {{ meta.initials | uppercase }}\n</span>", styles: [".sq-initials-avatar{display:block;border-radius:50%;text-align:center;color:#fff}\n"] }]
|
|
321
319
|
}], propDecorators: { fullName: [{
|
|
@@ -348,10 +346,10 @@ class MessageContentPipe {
|
|
|
348
346
|
console.error("Invalid message format, type of message not supported" + typeof content.type);
|
|
349
347
|
return '';
|
|
350
348
|
}
|
|
351
|
-
static
|
|
352
|
-
static
|
|
349
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MessageContentPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
350
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: MessageContentPipe, isStandalone: true, name: "messageContent" });
|
|
353
351
|
}
|
|
354
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
352
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MessageContentPipe, decorators: [{
|
|
355
353
|
type: Pipe,
|
|
356
354
|
args: [{
|
|
357
355
|
name: "messageContent",
|
|
@@ -366,16 +364,17 @@ const ASSISTANT_MARKDOWN_IT_PLUGINS = new InjectionToken('ASSISTANT_MARKDOWN_IT_
|
|
|
366
364
|
|
|
367
365
|
const GROUPING_REGEX = /^<!--[\s\S]*?-->|^<[a-z0-9][\w-]*(?:\s+[^>]*)?\/>|^<([a-z0-9][\w-]*)(?:\s+[^>]*)?>[\s\S]*?<\/\1>/gim;
|
|
368
366
|
class SafeHtmlPipe {
|
|
367
|
+
sanitizer;
|
|
369
368
|
constructor(sanitizer) {
|
|
370
369
|
this.sanitizer = sanitizer;
|
|
371
370
|
}
|
|
372
371
|
transform(html) {
|
|
373
372
|
return this.sanitizer.bypassSecurityTrustHtml(html);
|
|
374
373
|
}
|
|
375
|
-
static
|
|
376
|
-
static
|
|
374
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
375
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, isStandalone: true, name: "safeHtml" });
|
|
377
376
|
}
|
|
378
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
377
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, decorators: [{
|
|
379
378
|
type: Pipe,
|
|
380
379
|
args: [{
|
|
381
380
|
name: "safeHtml",
|
|
@@ -383,19 +382,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
383
382
|
}]
|
|
384
383
|
}], ctorParameters: () => [{ type: i1$1.DomSanitizer }] });
|
|
385
384
|
class SmartRendererComponent {
|
|
385
|
+
// Entire message content with the delta
|
|
386
|
+
message = input("", ...(ngDevMode ? [{ debugName: "message" }] : []));
|
|
387
|
+
context = input(null, ...(ngDevMode ? [{ debugName: "context" }] : []));
|
|
388
|
+
safe = signal("", ...(ngDevMode ? [{ debugName: "safe" }] : []));
|
|
389
|
+
processing = signal("", ...(ngDevMode ? [{ debugName: "processing" }] : []));
|
|
390
|
+
// High order last slice index, ie. where next message() should be truncated
|
|
391
|
+
// to avoid re-rendering the same content.
|
|
392
|
+
lastSliceIndex = 0;
|
|
393
|
+
// Local slice index to keep track of the current message's content
|
|
394
|
+
localSliceIndex = 0;
|
|
395
|
+
// Injected markdown-it plugins
|
|
396
|
+
_markdownItPlugins = inject(ASSISTANT_MARKDOWN_IT_PLUGINS);
|
|
386
397
|
constructor() {
|
|
387
|
-
// Entire message content with the delta
|
|
388
|
-
this.message = input("");
|
|
389
|
-
this.context = input(null);
|
|
390
|
-
this.safe = signal("");
|
|
391
|
-
this.processing = signal("");
|
|
392
|
-
// High order last slice index, ie. where next message() should be truncated
|
|
393
|
-
// to avoid re-rendering the same content.
|
|
394
|
-
this.lastSliceIndex = 0;
|
|
395
|
-
// Local slice index to keep track of the current message's content
|
|
396
|
-
this.localSliceIndex = 0;
|
|
397
|
-
// Injected markdown-it plugins
|
|
398
|
-
this._markdownItPlugins = inject(ASSISTANT_MARKDOWN_IT_PLUGINS);
|
|
399
398
|
effect(() => this.messageUpdated(), { allowSignalWrites: true });
|
|
400
399
|
}
|
|
401
400
|
createMarkdownItInstance() {
|
|
@@ -441,13 +440,13 @@ class SmartRendererComponent {
|
|
|
441
440
|
this.processing.set(blocks.slice(0, 2).join(""));
|
|
442
441
|
}
|
|
443
442
|
}
|
|
444
|
-
static
|
|
445
|
-
static
|
|
443
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SmartRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
444
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: SmartRendererComponent, isStandalone: true, selector: "SmartRenderer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
446
445
|
<div [innerHTML]="safe() | safeHtml"></div>
|
|
447
446
|
<div [innerHTML]="processing() | safeHtml"></div>
|
|
448
|
-
`, isInline: true, dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] });
|
|
447
|
+
`, isInline: true, dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] });
|
|
449
448
|
}
|
|
450
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SmartRendererComponent, decorators: [{
|
|
451
450
|
type: Component,
|
|
452
451
|
args: [{
|
|
453
452
|
selector: "SmartRenderer",
|
|
@@ -458,14 +457,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
458
457
|
imports: [SafeHtmlPipe],
|
|
459
458
|
standalone: true,
|
|
460
459
|
}]
|
|
461
|
-
}], ctorParameters: () => [] });
|
|
460
|
+
}], ctorParameters: () => [], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }] } });
|
|
462
461
|
|
|
463
462
|
/**
|
|
464
463
|
* Internal component that wraps the tooltip's content
|
|
465
464
|
*/
|
|
466
465
|
class TooltipComponent {
|
|
467
|
-
|
|
468
|
-
|
|
466
|
+
data;
|
|
467
|
+
template;
|
|
468
|
+
tooltipClass;
|
|
469
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
470
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: TooltipComponent, isStandalone: true, selector: "sqx-tooltip", ngImport: i0, template: `
|
|
469
471
|
<ng-container *ngTemplateOutlet="template || defaultTpl; context: {$implicit: data}"></ng-container>
|
|
470
472
|
<ng-template #defaultTpl let-data>
|
|
471
473
|
<div class="sq-tooltip {{tooltipClass}}" @tooltip [innerHTML]="data"></div>
|
|
@@ -479,9 +481,9 @@ class TooltipComponent {
|
|
|
479
481
|
animate(300, style({ opacity: 0 })),
|
|
480
482
|
]),
|
|
481
483
|
]),
|
|
482
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
484
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
483
485
|
}
|
|
484
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
486
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipComponent, decorators: [{
|
|
485
487
|
type: Component,
|
|
486
488
|
args: [{ selector: 'sqx-tooltip', standalone: true, imports: [NgTemplateOutlet], template: `
|
|
487
489
|
<ng-container *ngTemplateOutlet="template || defaultTpl; context: {$implicit: data}"></ng-container>
|
|
@@ -521,32 +523,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
521
523
|
* <div sqTooltip="<h1>Title</h1><br><p>This is a comment</p>"></div>
|
|
522
524
|
*/
|
|
523
525
|
class TooltipDirective {
|
|
526
|
+
overlay;
|
|
527
|
+
overlayPositionBuilder;
|
|
528
|
+
elementRef;
|
|
529
|
+
/**
|
|
530
|
+
* Defining a property called textOrTemplate that can be a string, a function that
|
|
531
|
+
* returns an Observable of a string or undefined, or a TemplateRef.
|
|
532
|
+
*/
|
|
533
|
+
value;
|
|
534
|
+
data;
|
|
535
|
+
template;
|
|
536
|
+
/**
|
|
537
|
+
* Setting the default value of the placement property to `bottom`
|
|
538
|
+
*/
|
|
539
|
+
placement = "bottom";
|
|
540
|
+
/**
|
|
541
|
+
* List of fallback placement if *Placement* defined can't be applyied
|
|
542
|
+
*/
|
|
543
|
+
fallbackPlacements = [];
|
|
544
|
+
/**
|
|
545
|
+
* Delay in millisecond before showing/hiding the tooltip.
|
|
546
|
+
*
|
|
547
|
+
* Default value is 300ms
|
|
548
|
+
*/
|
|
549
|
+
delay = 300;
|
|
550
|
+
/**
|
|
551
|
+
* If the tooltip should stay opened on hover
|
|
552
|
+
*/
|
|
553
|
+
hoverableTooltip = false;
|
|
554
|
+
/**
|
|
555
|
+
* Custom class for the tooltip
|
|
556
|
+
*/
|
|
557
|
+
tooltipClass;
|
|
558
|
+
/**
|
|
559
|
+
* Applies the "has-tooltip" class to its host when displayed (Angular 20 host directive syntax)
|
|
560
|
+
*/
|
|
561
|
+
hasTooltip = false;
|
|
562
|
+
overlayRef;
|
|
563
|
+
subscription;
|
|
564
|
+
clearTimeout;
|
|
565
|
+
static activeTooltip;
|
|
524
566
|
constructor(overlay, overlayPositionBuilder, elementRef) {
|
|
525
567
|
this.overlay = overlay;
|
|
526
568
|
this.overlayPositionBuilder = overlayPositionBuilder;
|
|
527
569
|
this.elementRef = elementRef;
|
|
528
|
-
/**
|
|
529
|
-
* Setting the default value of the placement property to `bottom`
|
|
530
|
-
*/
|
|
531
|
-
this.placement = "bottom";
|
|
532
|
-
/**
|
|
533
|
-
* List of fallback placement if *Placement* defined can't be applyied
|
|
534
|
-
*/
|
|
535
|
-
this.fallbackPlacements = [];
|
|
536
|
-
/**
|
|
537
|
-
* Delay in millisecond before showing/hiding the tooltip.
|
|
538
|
-
*
|
|
539
|
-
* Default value is 300ms
|
|
540
|
-
*/
|
|
541
|
-
this.delay = 300;
|
|
542
|
-
/**
|
|
543
|
-
* If the tooltip should stay opened on hover
|
|
544
|
-
*/
|
|
545
|
-
this.hoverableTooltip = false;
|
|
546
|
-
/**
|
|
547
|
-
* Applies the "has-tooltip" class to its host when displayed (Angular 20 host directive syntax)
|
|
548
|
-
*/
|
|
549
|
-
this.hasTooltip = false;
|
|
550
570
|
}
|
|
551
571
|
ngOnDestroy() {
|
|
552
572
|
// do not forget to clear timeout function
|
|
@@ -655,10 +675,10 @@ class TooltipDirective {
|
|
|
655
675
|
fallbackPositions() {
|
|
656
676
|
return Array.from(this.fallbackPlacements).map(p => this.position(p));
|
|
657
677
|
}
|
|
658
|
-
static
|
|
659
|
-
static
|
|
678
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipDirective, deps: [{ token: i1$2.Overlay }, { token: i1$2.OverlayPositionBuilder }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
679
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: TooltipDirective, isStandalone: true, selector: "[sqTooltip]", inputs: { value: ["sqTooltip", "value"], data: ["sqTooltipData", "data"], template: ["sqTooltipTemplate", "template"], placement: "placement", fallbackPlacements: "fallbackPlacements", delay: "delay", hoverableTooltip: "hoverableTooltip", tooltipClass: "tooltipClass" }, host: { attributes: { "class.has-tooltip": "hasTooltip" }, listeners: { "mouseenter": "show()", "mousedown": "mouseClick()", "mouseleave": "hide()" } }, ngImport: i0 });
|
|
660
680
|
}
|
|
661
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
681
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipDirective, decorators: [{
|
|
662
682
|
type: Directive,
|
|
663
683
|
args: [{
|
|
664
684
|
selector: "[sqTooltip]",
|
|
@@ -836,17 +856,17 @@ const defaultFormatIcons = {
|
|
|
836
856
|
};
|
|
837
857
|
|
|
838
858
|
class FormatIconComponent {
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
859
|
+
extension;
|
|
860
|
+
_formatIcons = defaultFormatIcons;
|
|
861
|
+
icon;
|
|
842
862
|
ngOnChanges() {
|
|
843
863
|
const icon = this.extension ? this._formatIcons[this.extension] : undefined;
|
|
844
864
|
this.icon = icon?.icon || this._formatIcons.file.icon;
|
|
845
865
|
}
|
|
846
|
-
static
|
|
847
|
-
static
|
|
866
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormatIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
867
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: FormatIconComponent, isStandalone: true, selector: "sq-format-icon", inputs: { extension: "extension" }, usesOnChanges: true, ngImport: i0, template: "<span *ngIf=\"icon\" class=\"{{icon}}\"></span>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
848
868
|
}
|
|
849
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
869
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormatIconComponent, decorators: [{
|
|
850
870
|
type: Component,
|
|
851
871
|
args: [{ selector: 'sq-format-icon', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], template: "<span *ngIf=\"icon\" class=\"{{icon}}\"></span>" }]
|
|
852
872
|
}], propDecorators: { extension: [{
|
|
@@ -854,51 +874,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
854
874
|
}] } });
|
|
855
875
|
|
|
856
876
|
class ChatReferenceComponent {
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
});
|
|
894
|
-
this.findImage = (arr, number) => arr.find((p) => p.imageNumber === number);
|
|
895
|
-
this.findPage = (arr, number) => arr.find((p) => p.pageNumber === number);
|
|
896
|
-
}
|
|
877
|
+
reference = input.required(...(ngDevMode ? [{ debugName: "reference" }] : []));
|
|
878
|
+
attachment = input.required(...(ngDevMode ? [{ debugName: "attachment" }] : []));
|
|
879
|
+
partId = input(undefined, ...(ngDevMode ? [{ debugName: "partId" }] : []));
|
|
880
|
+
referenceMap = input(undefined, ...(ngDevMode ? [{ debugName: "referenceMap" }] : []));
|
|
881
|
+
images = input([], ...(ngDevMode ? [{ debugName: "images" }] : []));
|
|
882
|
+
pages = input([], ...(ngDevMode ? [{ debugName: "pages" }] : []));
|
|
883
|
+
openDocument = output();
|
|
884
|
+
openPreview = output();
|
|
885
|
+
modalTpl = viewChild("modal", ...(ngDevMode ? [{ debugName: "modalTpl" }] : []));
|
|
886
|
+
modalRef = signal({}, ...(ngDevMode ? [{ debugName: "modalRef" }] : []));
|
|
887
|
+
groupedImagesIds = computed(() => {
|
|
888
|
+
// Suppose images() returns an array like ['1.1.1', '1.1.2', '1.1.3']
|
|
889
|
+
const groups = {};
|
|
890
|
+
for (const id of this.images()) {
|
|
891
|
+
const parts = id.split(".").map(Number);
|
|
892
|
+
if (parts.length < 3)
|
|
893
|
+
continue;
|
|
894
|
+
const groupKey = parts[1].toString();
|
|
895
|
+
if (!groups[groupKey])
|
|
896
|
+
groups[groupKey] = [];
|
|
897
|
+
groups[groupKey].push(parts[2]);
|
|
898
|
+
}
|
|
899
|
+
return groups;
|
|
900
|
+
}, ...(ngDevMode ? [{ debugName: "groupedImagesIds" }] : []));
|
|
901
|
+
groupedPagesIds = computed(() => {
|
|
902
|
+
// Suppose images() returns an array like ['1.1', '1.2', '1.3']
|
|
903
|
+
const groups = {};
|
|
904
|
+
for (const id of this.pages()) {
|
|
905
|
+
const parts = id.split(".").map(Number);
|
|
906
|
+
const groupKey = parts[0].toString();
|
|
907
|
+
if (!groups[groupKey])
|
|
908
|
+
groups[groupKey] = [];
|
|
909
|
+
groups[groupKey].push(parts[1]);
|
|
910
|
+
}
|
|
911
|
+
return groups;
|
|
912
|
+
}, ...(ngDevMode ? [{ debugName: "groupedPagesIds" }] : []));
|
|
897
913
|
get parts() {
|
|
898
914
|
if (!this.attachment())
|
|
899
915
|
return [];
|
|
900
916
|
return this.attachment().parts.filter((part) => (!this.partId() || part.partId === this.partId()) && !!part.text);
|
|
901
917
|
}
|
|
918
|
+
findImage = (arr, number) => arr.find((p) => p.imageNumber === number);
|
|
919
|
+
findPage = (arr, number) => arr.find((p) => p.pageNumber === number);
|
|
902
920
|
expandAttachment() {
|
|
903
921
|
if (this.partId())
|
|
904
922
|
return;
|
|
@@ -908,17 +926,17 @@ class ChatReferenceComponent {
|
|
|
908
926
|
this.modalRef.set(ref);
|
|
909
927
|
this.modalTpl()?.nativeElement?.showModal();
|
|
910
928
|
}
|
|
911
|
-
static
|
|
912
|
-
static
|
|
929
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
930
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatReferenceComponent, isStandalone: true, selector: "sq-chat-reference", inputs: { reference: { classPropertyName: "reference", publicName: "reference", isSignal: true, isRequired: true, transformFunction: null }, attachment: { classPropertyName: "attachment", publicName: "attachment", isSignal: true, isRequired: true, transformFunction: null }, partId: { classPropertyName: "partId", publicName: "partId", isSignal: true, isRequired: false, transformFunction: null }, referenceMap: { classPropertyName: "referenceMap", publicName: "referenceMap", isSignal: true, isRequired: false, transformFunction: null }, images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: false, transformFunction: null }, pages: { classPropertyName: "pages", publicName: "pages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openDocument: "openDocument", openPreview: "openPreview" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [title]=\"'chatReference.previewDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [title]=\"'chatReference.openDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId!]; track $index) {\n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n\n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:block}:host.expanded,:host:hover{background-color:var(--ast-reference-expanded-hover-bg, white)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
913
931
|
}
|
|
914
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
932
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferenceComponent, decorators: [{
|
|
915
933
|
type: Component,
|
|
916
934
|
args: [{ selector: "sq-chat-reference", standalone: true, imports: [
|
|
917
935
|
CommonModule,
|
|
918
936
|
FormatIconComponent,
|
|
919
937
|
TranslocoPipe,
|
|
920
|
-
], providers: [provideTranslocoScope('chat-reference')], template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [title]=\"'chatReference.previewDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [title]=\"'chatReference.openDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId!]; track $index) {\n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n\n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:block
|
|
921
|
-
}] });
|
|
938
|
+
], providers: [provideTranslocoScope('chat-reference')], template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [title]=\"'chatReference.previewDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [title]=\"'chatReference.openDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId!]; track $index) {\n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n\n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:block}:host.expanded,:host:hover{background-color:var(--ast-reference-expanded-hover-bg, white)}\n"] }]
|
|
939
|
+
}], propDecorators: { reference: [{ type: i0.Input, args: [{ isSignal: true, alias: "reference", required: true }] }], attachment: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachment", required: true }] }], partId: [{ type: i0.Input, args: [{ isSignal: true, alias: "partId", required: false }] }], referenceMap: [{ type: i0.Input, args: [{ isSignal: true, alias: "referenceMap", required: false }] }], images: [{ type: i0.Input, args: [{ isSignal: true, alias: "images", required: false }] }], pages: [{ type: i0.Input, args: [{ isSignal: true, alias: "pages", required: false }] }], openDocument: [{ type: i0.Output, args: ["openDocument"] }], openPreview: [{ type: i0.Output, args: ["openPreview"] }], modalTpl: [{ type: i0.ViewChild, args: ["modal", { isSignal: true }] }] } });
|
|
922
940
|
|
|
923
941
|
class NotificationsService {
|
|
924
942
|
success(message, title) {
|
|
@@ -933,10 +951,10 @@ class NotificationsService {
|
|
|
933
951
|
dispatchEvent(type, message, title) {
|
|
934
952
|
dispatchEvent(new CustomEvent("notification", { detail: { type, title, message } }));
|
|
935
953
|
}
|
|
936
|
-
static
|
|
937
|
-
static
|
|
954
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
955
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationsService, providedIn: "root" });
|
|
938
956
|
}
|
|
939
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
957
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationsService, decorators: [{
|
|
940
958
|
type: Injectable,
|
|
941
959
|
args: [{
|
|
942
960
|
providedIn: "root"
|
|
@@ -944,11 +962,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
944
962
|
}] });
|
|
945
963
|
|
|
946
964
|
class UIService {
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
this.transloco = inject(TranslocoService);
|
|
951
|
-
}
|
|
965
|
+
notificationsService = inject(NotificationsService);
|
|
966
|
+
clipboard = inject(Clipboard);
|
|
967
|
+
transloco = inject(TranslocoService);
|
|
952
968
|
copyToClipboard(data, maxLength = 30) {
|
|
953
969
|
if (!navigator?.clipboard) {
|
|
954
970
|
// Note: CDK seems to struggle with large chunks of text
|
|
@@ -989,10 +1005,10 @@ class UIService {
|
|
|
989
1005
|
const translated = this.transloco.translate("chat.clipboard.success", { value });
|
|
990
1006
|
this.notificationsService.success(translated);
|
|
991
1007
|
}
|
|
992
|
-
static
|
|
993
|
-
static
|
|
1008
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1009
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UIService, providedIn: "root" });
|
|
994
1010
|
}
|
|
995
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1011
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UIService, decorators: [{
|
|
996
1012
|
type: Injectable,
|
|
997
1013
|
args: [{
|
|
998
1014
|
providedIn: "root",
|
|
@@ -1000,38 +1016,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1000
1016
|
}] });
|
|
1001
1017
|
|
|
1002
1018
|
class ChatMessageComponent {
|
|
1019
|
+
ui;
|
|
1020
|
+
principalService;
|
|
1021
|
+
cdr;
|
|
1022
|
+
el;
|
|
1023
|
+
id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : []));
|
|
1024
|
+
message;
|
|
1025
|
+
conversation;
|
|
1026
|
+
suggestedActions;
|
|
1027
|
+
assistantMessageIcon;
|
|
1028
|
+
userMessageIcon;
|
|
1029
|
+
connectionErrorMessageIcon;
|
|
1030
|
+
searchWarningMessageIcon;
|
|
1031
|
+
streaming;
|
|
1032
|
+
canEdit = false;
|
|
1033
|
+
canRegenerate = false;
|
|
1034
|
+
canCopy = false;
|
|
1035
|
+
canDebug = false;
|
|
1036
|
+
canLike = false;
|
|
1037
|
+
canDislike = false;
|
|
1038
|
+
collapseReferences = true;
|
|
1039
|
+
openDocument = new EventEmitter();
|
|
1040
|
+
openPreview = new EventEmitter();
|
|
1041
|
+
suggestAction = new EventEmitter();
|
|
1042
|
+
edit = new EventEmitter();
|
|
1043
|
+
copy = new EventEmitter();
|
|
1044
|
+
regenerate = new EventEmitter();
|
|
1045
|
+
like = new EventEmitter();
|
|
1046
|
+
dislike = new EventEmitter();
|
|
1047
|
+
debug = new EventEmitter();
|
|
1048
|
+
// signal based set of references to avoid duplicates
|
|
1049
|
+
refs = signal([], ...(ngDevMode ? [{ debugName: "refs" }] : []));
|
|
1050
|
+
references = computed(() => this.refs().slice().sort((a, b) => a - b).map((r) => "" + r), ...(ngDevMode ? [{ debugName: "references" }] : []));
|
|
1051
|
+
referenceMap = new Map();
|
|
1052
|
+
imageReferencesMap = new Map();
|
|
1053
|
+
pageReferencesMap = new Map();
|
|
1054
|
+
collapseProgress;
|
|
1055
|
+
iconSize = 24;
|
|
1056
|
+
hiddenTooltip = false;
|
|
1057
|
+
// used by the template
|
|
1058
|
+
Array = Array;
|
|
1003
1059
|
constructor(ui, principalService, cdr, el) {
|
|
1004
1060
|
this.ui = ui;
|
|
1005
1061
|
this.principalService = principalService;
|
|
1006
1062
|
this.cdr = cdr;
|
|
1007
1063
|
this.el = el;
|
|
1008
|
-
this.id = input();
|
|
1009
|
-
this.canEdit = false;
|
|
1010
|
-
this.canRegenerate = false;
|
|
1011
|
-
this.canCopy = false;
|
|
1012
|
-
this.canDebug = false;
|
|
1013
|
-
this.canLike = false;
|
|
1014
|
-
this.canDislike = false;
|
|
1015
|
-
this.collapseReferences = true;
|
|
1016
|
-
this.openDocument = new EventEmitter();
|
|
1017
|
-
this.openPreview = new EventEmitter();
|
|
1018
|
-
this.suggestAction = new EventEmitter();
|
|
1019
|
-
this.edit = new EventEmitter();
|
|
1020
|
-
this.copy = new EventEmitter();
|
|
1021
|
-
this.regenerate = new EventEmitter();
|
|
1022
|
-
this.like = new EventEmitter();
|
|
1023
|
-
this.dislike = new EventEmitter();
|
|
1024
|
-
this.debug = new EventEmitter();
|
|
1025
|
-
// signal based set of references to avoid duplicates
|
|
1026
|
-
this.refs = signal([]);
|
|
1027
|
-
this.references = computed(() => this.refs().slice().sort((a, b) => a - b).map((r) => "" + r));
|
|
1028
|
-
this.referenceMap = new Map();
|
|
1029
|
-
this.imageReferencesMap = new Map();
|
|
1030
|
-
this.pageReferencesMap = new Map();
|
|
1031
|
-
this.iconSize = 24;
|
|
1032
|
-
this.hiddenTooltip = false;
|
|
1033
|
-
// used by the template
|
|
1034
|
-
this.Array = Array;
|
|
1035
1064
|
}
|
|
1036
1065
|
ngOnChanges(changes) {
|
|
1037
1066
|
if (changes.streaming) {
|
|
@@ -1173,10 +1202,10 @@ class ChatMessageComponent {
|
|
|
1173
1202
|
this.hiddenTooltip = false;
|
|
1174
1203
|
});
|
|
1175
1204
|
}
|
|
1176
|
-
static
|
|
1177
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ChatMessageComponent, isStandalone: true, selector: "sq-chat-message", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, conversation: { classPropertyName: "conversation", publicName: "conversation", isSignal: false, isRequired: false, transformFunction: null }, suggestedActions: { classPropertyName: "suggestedActions", publicName: "suggestedActions", isSignal: false, isRequired: false, transformFunction: null }, assistantMessageIcon: { classPropertyName: "assistantMessageIcon", publicName: "assistantMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, userMessageIcon: { classPropertyName: "userMessageIcon", publicName: "userMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, connectionErrorMessageIcon: { classPropertyName: "connectionErrorMessageIcon", publicName: "connectionErrorMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, searchWarningMessageIcon: { classPropertyName: "searchWarningMessageIcon", publicName: "searchWarningMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, streaming: { classPropertyName: "streaming", publicName: "streaming", isSignal: false, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: false, isRequired: false, transformFunction: null }, canRegenerate: { classPropertyName: "canRegenerate", publicName: "canRegenerate", isSignal: false, isRequired: false, transformFunction: null }, canCopy: { classPropertyName: "canCopy", publicName: "canCopy", isSignal: false, isRequired: false, transformFunction: null }, canDebug: { classPropertyName: "canDebug", publicName: "canDebug", isSignal: false, isRequired: false, transformFunction: null }, canLike: { classPropertyName: "canLike", publicName: "canLike", isSignal: false, isRequired: false, transformFunction: null }, canDislike: { classPropertyName: "canDislike", publicName: "canDislike", isSignal: false, isRequired: false, transformFunction: null }, collapseReferences: { classPropertyName: "collapseReferences", publicName: "collapseReferences", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { openDocument: "openDocument", openPreview: "openPreview", suggestAction: "suggestAction", edit: "edit", copy: "copy", regenerate: "regenerate", like: "like", dislike: "dislike", debug: "debug" }, providers: [provideTranslocoScope('chat-message')], usesOnChanges: true, ngImport: i0, template: "<!-- Message icon -->\n<span class=\"message-icon\" [title]=\"message?.role\">\n <i class=\"d-block\" [style.width.px]=\"iconSize\" *ngIf=\"!message\"></i>\n <ng-container [ngSwitch]=\"message?.role\">\n <!-- For 'assistant' -->\n <i *ngSwitchCase=\"'assistant'\" [ngClass]=\"assistantMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n\n <!-- For 'user' -->\n <ng-container *ngSwitchCase=\"'user'\">\n <i *ngIf=\"!!userMessageIcon; else initialsAvatar\" [ngClass]=\"userMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #initialsAvatar>\n <sq-initials-avatar [fullName]=\"name\"></sq-initials-avatar>\n </ng-template>\n </ng-container>\n\n <!-- For 'connection-error' -->\n <ng-container *ngSwitchCase=\"'connection-error'\">\n <i *ngIf=\"!!connectionErrorMessageIcon; else defaultErrorIcon\" [ngClass]=\"connectionErrorMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultErrorIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"connection-error\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zM256 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n\n <!-- For 'search-warning' -->\n <ng-container *ngSwitchCase=\"'search-warning'\">\n <i *ngIf=\"!!searchWarningMessageIcon; else defaultWarningIcon\" [ngClass]=\"searchWarningMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultWarningIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"search-warning\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path fill=\"currentColor\" d=\"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zm0-448c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM160 288a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n </ng-container>\n</span>\n\n<!-- Message body -->\n<div class=\"flex-grow-1 position-relative relative\" style=\"min-width: 0;\" [ngClass]=\"'message-'+message.role\">\n\n <!-- Progress steps -->\n <div *ngIf=\"message.additionalProperties.$progress as progress\" class=\"small ms-3 mb-2\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseProgress\">\n <summary class=\"text-muted\">\n {{ 'chatMessage.viewProgress' | transloco }}\n </summary>\n <ul class=\"list-unstyled\">\n <li *ngFor=\"let step of progress\">\n <i class=\"fas fa-fw fa-check text-success\" *ngIf=\"step.done\"></i>\n <i class=\"fas fa-spinner fa-pulse step-ongoing\" *ngIf=\"!step.done && streaming\"></i>\n <i class=\"fa-solid fa-ban step-error\" *ngIf=\"!step.done && !streaming\"></i>\n <span class=\"ms-2 fw-bold\">{{step.title}}</span>\n <span *ngIf=\"step.content\" [innerHTML]=\"': ' + step.content\"></span>\n </li>\n </ul>\n </details>\n </div>\n\n <!-- Message content -->\n <div class=\"message-content\" *ngIf=\"message.content\">\n\n <!-- Custom rendering for WPS, to be remove with https://sinequa.atlassian.net/browse/ES-23710 -->\n <div *ngIf=\"message?.role === 'assistant' && message.messageType === 'CHART'\">\n <sq-assistant-chart [rawChartData]=\"message.content\"></sq-assistant-chart>\n </div>\n\n <!-- This section is responsible for customizing the template nodes used in the application.\n Template nodes are predefined structures that serve as blueprints for creating/customizing dynamic content -->\n\n\n @if(message?.role === 'assistant' && message.messageType !== 'CHART') {\n <SmartRenderer\n [message]=\"message.content | messageContent\"\n [context]=\"{\n getEmbeddedPageReference: getEmbeddedPageReference.bind(this),\n getEmbeddedImageReference: getEmbeddedImageReference.bind(this),\n referencesMap: referenceMap,\n references: processReferences.bind(this),\n rank: id()\n }\">\n </SmartRenderer>\n }\n\n <p *ngIf=\"message?.role === 'user' || message?.role === 'search-warning' || message?.role === 'connection-error'\">{{ message.content | messageContent }}</p>\n\n <!-- List of reference, if any -->\n @let referencesArray = references();\n @if (referencesArray?.length > 0 || imageReferencesMap?.size > 0 || pageReferencesMap?.size > 0) {\n <div class=\"references\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseReferences\">\n <summary class=\"references-title\">{{ 'chatMessage.references' | transloco }}</summary>\n <ul>\n @for (reference of referencesArray; track $index) {\n @let attachment = referenceMap.get(reference);\n <!-- Only display the reference when the key is a integer not a decimal -->\n @if(attachment) {\n <li class=\"text-truncate\">\n <sq-chat-reference\n [class.expanded]=\"attachment?.$expanded\"\n [attachment]=\"attachment\"\n [reference]=\"reference\"\n [referenceMap]=\"referenceMap\"\n [images]=\"Array.from(imageReferencesMap.keys())\"\n [pages]=\"Array.from(pageReferencesMap.keys())\"\n (openPreview)=\"openAttachmentPreview($event)\"\n (openDocument)=\"openOriginalAttachment($event)\">\n </sq-chat-reference>\n </li>\n }\n }\n </ul>\n </details>\n </div>\n }\n </div>\n\n <!-- Edit / Regenerate floating actions -->\n <div class=\"sq-chat-message-actions\" *ngIf=\"message\">\n <!-- Common action buttons for \"user\" & \"assistant\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canCopy\" [sqTooltip]=\"'chatMessage.copyText' | transloco\" (click)=\"copyMessage(message)\">\n <i class=\"far fa-clipboard\"></i>\n </button>\n <!-- Action buttons for \"user\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canEdit\" [sqTooltip]=\"'chatMessage.editMessage' | transloco\" (click)=\"edit.emit(message)\">\n <i class=\"fas fa-edit\"></i>\n </button>\n <!-- Action buttons for \"assistant\" message -->\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$liked\" *ngIf=\"canLike\" [sqTooltip]=\"'chatMessage.likeAnswer' | transloco\" (click)=\"like.emit()\">\n <i *ngIf=\"!message.additionalProperties.$liked\" class=\"far fa-thumbs-up \"></i>\n <i *ngIf=\"message.additionalProperties.$liked\" class=\"fas fa-thumbs-up\"></i>\n </button>\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$disliked\" *ngIf=\"canDislike\" [sqTooltip]=\"'chatMessage.reportIssue' | transloco\" (click)=\"dislike.emit()\">\n <i *ngIf=\"!message.additionalProperties.$disliked\" class=\"far fa-thumbs-down \"></i>\n <i *ngIf=\"message.additionalProperties.$disliked\" class=\"fas fa-thumbs-down\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canRegenerate\" [sqTooltip]=\"'chatMessage.regenerateResponse' | transloco\" (click)=\"regenerate.emit(message)\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canDebug\" [sqTooltip]=\"'chatMessage.showLogInformation' | transloco\" (click)=\"debug.emit(message);\">\n <i class=\"far fa-list-alt\"></i>\n </button>\n </div>\n\n <!-- List of suggested actions, if any -->\n <div *ngIf=\"suggestedActions\" class=\"mt-2 message-suggestion\">\n <div class=\"suggested-action\" *ngFor=\"let suggestedAction of suggestedActions\" (click)=\"suggestAction.emit(suggestedAction)\">\n <div class=\"message-icon\" [style.width.px]=\"iconSize\"></div>\n <div class=\"message-content\">\n <p><i class=\"fas {{suggestedAction.type === 'Submit' ? 'fa-paper-plane' : 'fa-comment-medical'}} me-1\"></i> {{suggestedAction.content}}</p>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host{display:flex}:host:not(:hover):not(.last-message) .sq-chat-message-actions{visibility:hidden}.message-content{padding:var(--ast-message-padding, var(--ast-size-3, .75rem));border-radius:var(--ast-message-border-radius, var(--ast-size-4, 1rem));display:inline-block;max-width:100%;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.message-content .references{margin-top:var(--ast-size-5, 1.25rem)}.message-content .references ul{border-left:.2rem solid var(--ast-secondary-color, #FF732E);padding-left:var(--ast-size-5, 1.25rem);margin-top:var(--ast-size-2, .5rem)}.message-content .references .references-title{font-weight:var(--font-weight-bold, 500)}.message-content ::ng-deep p:last-child{margin-bottom:0}.message-content ::ng-deep .placeholder-glow .placeholder{animation-duration:.4s;width:12px;height:var(--ast-size-4, 1rem);vertical-align:text-bottom}.message-content ::ng-deep img{max-width:100%}.message-content ::ng-deep table{display:table;border:1px solid;border-color:var(--ast-message-table-border-color, #ccc);border-collapse:collapse;margin:0;padding:0;min-width:100%;overflow-x:auto;table-layout:fixed}.message-content ::ng-deep table tr{background-color:var(--ast-message-table-tr-bg, #f8f8f8);border:1px solid;border-color:var(--ast-message-table-tr-border-color, #ddd);padding:.35em}.message-content ::ng-deep table th,.message-content ::ng-deep table td{padding:.625em;text-align:center}.message-content ::ng-deep table th{font-size:.85em;letter-spacing:.1em;text-transform:uppercase}.message-content ::ng-deep .reference{color:var(--ast-message-reference-color, black)!important}.message-content ::ng-deep ul,.message-content ::ng-deep ol{display:flex;flex-direction:column;gap:.5rem;padding-right:2rem;margin-left:0;margin-right:0;padding-left:40px;unicode-bidi:isolate;list-style:disc}.message-content ::ng-deep p:not(:first-child){margin-top:.5rem}.message-assistant .message-content{background:var(--ast-secondary-bg, #FFF8F1)}.message-connection-error .message-content{background:var(--ast-error-bg, rgba(249, 58, 55, .2))}.message-search-warning .message-content{background:var(--ast-warning-bg, #fff1b8);color:var(--ast-message-reference-color, inherit)}.message-user .message-content{background:var(--ast-primary-bg, #f2f8fe);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500))}.message-user .message-content p{white-space:pre-line}.message-suggestion .message-content{background:var(--ast-input-bg, #F8F8F8);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500));transition:background-color .5s ease,color .5s ease}.message-suggestion .message-content:hover{background:var(--ast-primary-bg, #f2f8fe);color:var(--ast-primary-color, #005DA7)}.message-suggestion .message-content p{white-space:pre-line}.message-suggestion .suggested-action{cursor:pointer}.message-suggestion .suggested-action+.suggested-action{margin-top:var(--ast-size-2, .5rem)}.sq-chat-message-actions{position:absolute;bottom:calc(0rem - var(--ast-size-5, 1.25rem));display:flex;z-index:999}.sq-chat-message-actions button{font-size:.75rem;color:var(--ast-action-buttons-color, #212529)}.sq-chat-message-actions button:hover{color:var(--ast-action-buttons-hover-color, var(--ast-primary-color, #005DA7))}.message-icon{margin-top:var(--ast-size-3, .75rem);margin-right:var(--ast-size-4, 1rem)}.connection-error{height:var(--sq-size);width:var(--sq-size);color:var(--ast-error-color, rgba(249, 58, 55, .7))}.search-warning{height:var(--sq-size);width:var(--sq-size);color:var(--ast-warning-color, #fed86f)}.step-success{color:var(--ast-primary-color, #005DA7)}.step-ongoing{color:var(--ast-secondary-color, #FF732E)}.step-error{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.bounce{animation:bounce 2s ease}@keyframes bounce{10%{transform:translateY(0)}20%{transform:translateY(-15%)}30%{transform:translateY(0)}35%{transform:translateY(-7%)}37%{transform:translateY(0)}39%{transform:translateY(-3%)}40%{transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: InitialsAvatarComponent, selector: "sq-initials-avatar", inputs: ["fullName", "size"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }, { kind: "component", type: ChartComponent, selector: "sq-assistant-chart", inputs: ["rawChartData"] }, { kind: "pipe", type: MessageContentPipe, name: "messageContent" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "component", type: SmartRendererComponent, selector: "SmartRenderer", inputs: ["message", "context"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1205
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatMessageComponent, deps: [{ token: UIService }, { token: PrincipalService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1206
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatMessageComponent, isStandalone: true, selector: "sq-chat-message", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, conversation: { classPropertyName: "conversation", publicName: "conversation", isSignal: false, isRequired: false, transformFunction: null }, suggestedActions: { classPropertyName: "suggestedActions", publicName: "suggestedActions", isSignal: false, isRequired: false, transformFunction: null }, assistantMessageIcon: { classPropertyName: "assistantMessageIcon", publicName: "assistantMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, userMessageIcon: { classPropertyName: "userMessageIcon", publicName: "userMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, connectionErrorMessageIcon: { classPropertyName: "connectionErrorMessageIcon", publicName: "connectionErrorMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, searchWarningMessageIcon: { classPropertyName: "searchWarningMessageIcon", publicName: "searchWarningMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, streaming: { classPropertyName: "streaming", publicName: "streaming", isSignal: false, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: false, isRequired: false, transformFunction: null }, canRegenerate: { classPropertyName: "canRegenerate", publicName: "canRegenerate", isSignal: false, isRequired: false, transformFunction: null }, canCopy: { classPropertyName: "canCopy", publicName: "canCopy", isSignal: false, isRequired: false, transformFunction: null }, canDebug: { classPropertyName: "canDebug", publicName: "canDebug", isSignal: false, isRequired: false, transformFunction: null }, canLike: { classPropertyName: "canLike", publicName: "canLike", isSignal: false, isRequired: false, transformFunction: null }, canDislike: { classPropertyName: "canDislike", publicName: "canDislike", isSignal: false, isRequired: false, transformFunction: null }, collapseReferences: { classPropertyName: "collapseReferences", publicName: "collapseReferences", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { openDocument: "openDocument", openPreview: "openPreview", suggestAction: "suggestAction", edit: "edit", copy: "copy", regenerate: "regenerate", like: "like", dislike: "dislike", debug: "debug" }, providers: [provideTranslocoScope('chat-message')], usesOnChanges: true, ngImport: i0, template: "<!-- Message icon -->\n<span class=\"message-icon\" [title]=\"message?.role\">\n <i class=\"d-block\" [style.width.px]=\"iconSize\" *ngIf=\"!message\"></i>\n <ng-container [ngSwitch]=\"message?.role\">\n <!-- For 'assistant' -->\n <i *ngSwitchCase=\"'assistant'\" [ngClass]=\"assistantMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n\n <!-- For 'user' -->\n <ng-container *ngSwitchCase=\"'user'\">\n <i *ngIf=\"!!userMessageIcon; else initialsAvatar\" [ngClass]=\"userMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #initialsAvatar>\n <sq-initials-avatar [fullName]=\"name\"></sq-initials-avatar>\n </ng-template>\n </ng-container>\n\n <!-- For 'connection-error' -->\n <ng-container *ngSwitchCase=\"'connection-error'\">\n <i *ngIf=\"!!connectionErrorMessageIcon; else defaultErrorIcon\" [ngClass]=\"connectionErrorMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultErrorIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"connection-error\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zM256 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n\n <!-- For 'search-warning' -->\n <ng-container *ngSwitchCase=\"'search-warning'\">\n <i *ngIf=\"!!searchWarningMessageIcon; else defaultWarningIcon\" [ngClass]=\"searchWarningMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultWarningIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"search-warning\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path fill=\"currentColor\" d=\"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zm0-448c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM160 288a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n </ng-container>\n</span>\n\n<!-- Message body -->\n<div class=\"flex-grow-1 position-relative relative\" style=\"min-width: 0;\" [ngClass]=\"'message-'+message.role\">\n\n <!-- Progress steps -->\n <div *ngIf=\"message.additionalProperties.$progress as progress\" class=\"small ms-3 mb-2\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseProgress\">\n <summary class=\"text-muted\">\n {{ 'chatMessage.viewProgress' | transloco }}\n </summary>\n <ul class=\"list-unstyled\">\n <li *ngFor=\"let step of progress\">\n <i class=\"fas fa-fw fa-check text-success\" *ngIf=\"step.done\"></i>\n <i class=\"fas fa-spinner fa-pulse step-ongoing\" *ngIf=\"!step.done && streaming\"></i>\n <i class=\"fa-solid fa-ban step-error\" *ngIf=\"!step.done && !streaming\"></i>\n <span class=\"ms-2 fw-bold\">{{step.title}}</span>\n <span *ngIf=\"step.content\" [innerHTML]=\"': ' + step.content\"></span>\n </li>\n </ul>\n </details>\n </div>\n\n <!-- Message content -->\n <div class=\"message-content\" *ngIf=\"message.content\">\n\n <!-- Custom rendering for WPS, to be remove with https://sinequa.atlassian.net/browse/ES-23710 -->\n <div *ngIf=\"message?.role === 'assistant' && message.messageType === 'CHART'\">\n <sq-assistant-chart [rawChartData]=\"message.content\"></sq-assistant-chart>\n </div>\n\n <!-- This section is responsible for customizing the template nodes used in the application.\n Template nodes are predefined structures that serve as blueprints for creating/customizing dynamic content -->\n\n\n @if(message?.role === 'assistant' && message.messageType !== 'CHART') {\n <SmartRenderer\n [message]=\"message.content | messageContent\"\n [context]=\"{\n getEmbeddedPageReference: getEmbeddedPageReference.bind(this),\n getEmbeddedImageReference: getEmbeddedImageReference.bind(this),\n referencesMap: referenceMap,\n references: processReferences.bind(this),\n rank: id()\n }\">\n </SmartRenderer>\n }\n\n <p *ngIf=\"message?.role === 'user' || message?.role === 'search-warning' || message?.role === 'connection-error'\">{{ message.content | messageContent }}</p>\n\n <!-- List of reference, if any -->\n @let referencesArray = references();\n @if (referencesArray?.length > 0 || imageReferencesMap?.size > 0 || pageReferencesMap?.size > 0) {\n <div class=\"references\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseReferences\">\n <summary class=\"references-title\">{{ 'chatMessage.references' | transloco }}</summary>\n <ul>\n @for (reference of referencesArray; track $index) {\n @let attachment = referenceMap.get(reference);\n <!-- Only display the reference when the key is a integer not a decimal -->\n @if(attachment) {\n <li class=\"text-truncate\">\n <sq-chat-reference\n [class.expanded]=\"attachment?.$expanded\"\n [attachment]=\"attachment\"\n [reference]=\"reference\"\n [referenceMap]=\"referenceMap\"\n [images]=\"Array.from(imageReferencesMap.keys())\"\n [pages]=\"Array.from(pageReferencesMap.keys())\"\n (openPreview)=\"openAttachmentPreview($event)\"\n (openDocument)=\"openOriginalAttachment($event)\">\n </sq-chat-reference>\n </li>\n }\n }\n </ul>\n </details>\n </div>\n }\n </div>\n\n <!-- Edit / Regenerate floating actions -->\n <div class=\"sq-chat-message-actions\" *ngIf=\"message\">\n <!-- Common action buttons for \"user\" & \"assistant\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canCopy\" [sqTooltip]=\"'chatMessage.copyText' | transloco\" (click)=\"copyMessage(message)\">\n <i class=\"far fa-clipboard\"></i>\n </button>\n <!-- Action buttons for \"user\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canEdit\" [sqTooltip]=\"'chatMessage.editMessage' | transloco\" (click)=\"edit.emit(message)\">\n <i class=\"fas fa-edit\"></i>\n </button>\n <!-- Action buttons for \"assistant\" message -->\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$liked\" *ngIf=\"canLike\" [sqTooltip]=\"'chatMessage.likeAnswer' | transloco\" (click)=\"like.emit()\">\n <i *ngIf=\"!message.additionalProperties.$liked\" class=\"far fa-thumbs-up \"></i>\n <i *ngIf=\"message.additionalProperties.$liked\" class=\"fas fa-thumbs-up\"></i>\n </button>\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$disliked\" *ngIf=\"canDislike\" [sqTooltip]=\"'chatMessage.reportIssue' | transloco\" (click)=\"dislike.emit()\">\n <i *ngIf=\"!message.additionalProperties.$disliked\" class=\"far fa-thumbs-down \"></i>\n <i *ngIf=\"message.additionalProperties.$disliked\" class=\"fas fa-thumbs-down\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canRegenerate\" [sqTooltip]=\"'chatMessage.regenerateResponse' | transloco\" (click)=\"regenerate.emit(message)\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canDebug\" [sqTooltip]=\"'chatMessage.showLogInformation' | transloco\" (click)=\"debug.emit(message);\">\n <i class=\"far fa-list-alt\"></i>\n </button>\n </div>\n\n <!-- List of suggested actions, if any -->\n <div *ngIf=\"suggestedActions\" class=\"mt-2 message-suggestion\">\n <div class=\"suggested-action\" *ngFor=\"let suggestedAction of suggestedActions\" (click)=\"suggestAction.emit(suggestedAction)\">\n <div class=\"message-icon\" [style.width.px]=\"iconSize\"></div>\n <div class=\"message-content\">\n <p><i class=\"fas {{suggestedAction.type === 'Submit' ? 'fa-paper-plane' : 'fa-comment-medical'}} me-1\"></i> {{suggestedAction.content}}</p>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host{display:flex}:host:not(:hover):not(.last-message) .sq-chat-message-actions{visibility:hidden}.message-content{padding:var(--ast-message-padding, var(--ast-size-3, .75rem));border-radius:var(--ast-message-border-radius, var(--ast-size-4, 1rem));display:inline-block;max-width:100%;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.message-content .references{margin-top:var(--ast-size-5, 1.25rem)}.message-content .references ul{border-left:.2rem solid var(--ast-secondary-color, #FF732E);padding-left:var(--ast-size-5, 1.25rem);margin-top:var(--ast-size-2, .5rem)}.message-content .references .references-title{font-weight:var(--font-weight-bold, 500)}.message-content ::ng-deep p:last-child{margin-bottom:0}.message-content ::ng-deep .placeholder-glow .placeholder{animation-duration:.4s;width:12px;height:var(--ast-size-4, 1rem);vertical-align:text-bottom}.message-content ::ng-deep img{max-width:100%}.message-content ::ng-deep table{display:table;border:1px solid;border-color:var(--ast-message-table-border-color, #ccc);border-collapse:collapse;margin:0;padding:0;min-width:100%;overflow-x:auto;table-layout:fixed}.message-content ::ng-deep table tr{background-color:var(--ast-message-table-tr-bg, #f8f8f8);border:1px solid;border-color:var(--ast-message-table-tr-border-color, #ddd);padding:.35em}.message-content ::ng-deep table th,.message-content ::ng-deep table td{padding:.625em;text-align:center}.message-content ::ng-deep table th{font-size:.85em;letter-spacing:.1em;text-transform:uppercase}.message-content ::ng-deep .reference{color:var(--ast-message-reference-color, black)!important}.message-content ::ng-deep ul,.message-content ::ng-deep ol{display:flex;flex-direction:column;gap:.5rem;padding-right:2rem;margin-left:0;margin-right:0;padding-left:40px;unicode-bidi:isolate;list-style:disc}.message-content ::ng-deep p:not(:first-child){margin-top:.5rem}.message-assistant .message-content{background:var(--ast-secondary-bg, #FFF8F1)}.message-connection-error .message-content{background:var(--ast-error-bg, rgba(249, 58, 55, .2))}.message-search-warning .message-content{background:var(--ast-warning-bg, #fff1b8);color:var(--ast-message-reference-color, inherit)}.message-user .message-content{background:var(--ast-primary-bg, #f2f8fe);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500))}.message-user .message-content p{white-space:pre-line}.message-suggestion .message-content{background:var(--ast-input-bg, #F8F8F8);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500));transition:background-color .5s ease,color .5s ease}.message-suggestion .message-content:hover{background:var(--ast-primary-bg, #f2f8fe);color:var(--ast-primary-color, #005DA7)}.message-suggestion .message-content p{white-space:pre-line}.message-suggestion .suggested-action{cursor:pointer}.message-suggestion .suggested-action+.suggested-action{margin-top:var(--ast-size-2, .5rem)}.sq-chat-message-actions{position:absolute;bottom:calc(0rem - var(--ast-size-5, 1.25rem));display:flex;z-index:999}.sq-chat-message-actions button{font-size:.75rem;color:var(--ast-action-buttons-color, #212529)}.sq-chat-message-actions button:hover{color:var(--ast-action-buttons-hover-color, var(--ast-primary-color, #005DA7))}.message-icon{margin-top:var(--ast-size-3, .75rem);margin-right:var(--ast-size-4, 1rem)}.connection-error{height:var(--sq-size);width:var(--sq-size);color:var(--ast-error-color, rgba(249, 58, 55, .7))}.search-warning{height:var(--sq-size);width:var(--sq-size);color:var(--ast-warning-color, #fed86f)}.step-success{color:var(--ast-primary-color, #005DA7)}.step-ongoing{color:var(--ast-secondary-color, #FF732E)}.step-error{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.bounce{animation:bounce 2s ease}@keyframes bounce{10%{transform:translateY(0)}20%{transform:translateY(-15%)}30%{transform:translateY(0)}35%{transform:translateY(-7%)}37%{transform:translateY(0)}39%{transform:translateY(-3%)}40%{transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: InitialsAvatarComponent, selector: "sq-initials-avatar", inputs: ["fullName", "size"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }, { kind: "component", type: ChartComponent, selector: "sq-assistant-chart", inputs: ["rawChartData"] }, { kind: "component", type: SmartRendererComponent, selector: "SmartRenderer", inputs: ["message", "context"] }, { kind: "pipe", type: MessageContentPipe, name: "messageContent" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1178
1207
|
}
|
|
1179
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1208
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatMessageComponent, decorators: [{
|
|
1180
1209
|
type: Component,
|
|
1181
1210
|
args: [{ selector: "sq-chat-message", changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
1182
1211
|
CommonModule,
|
|
@@ -1188,7 +1217,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1188
1217
|
TranslocoPipe,
|
|
1189
1218
|
SmartRendererComponent
|
|
1190
1219
|
], providers: [provideTranslocoScope('chat-message')], template: "<!-- Message icon -->\n<span class=\"message-icon\" [title]=\"message?.role\">\n <i class=\"d-block\" [style.width.px]=\"iconSize\" *ngIf=\"!message\"></i>\n <ng-container [ngSwitch]=\"message?.role\">\n <!-- For 'assistant' -->\n <i *ngSwitchCase=\"'assistant'\" [ngClass]=\"assistantMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n\n <!-- For 'user' -->\n <ng-container *ngSwitchCase=\"'user'\">\n <i *ngIf=\"!!userMessageIcon; else initialsAvatar\" [ngClass]=\"userMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #initialsAvatar>\n <sq-initials-avatar [fullName]=\"name\"></sq-initials-avatar>\n </ng-template>\n </ng-container>\n\n <!-- For 'connection-error' -->\n <ng-container *ngSwitchCase=\"'connection-error'\">\n <i *ngIf=\"!!connectionErrorMessageIcon; else defaultErrorIcon\" [ngClass]=\"connectionErrorMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultErrorIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"connection-error\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zM256 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n\n <!-- For 'search-warning' -->\n <ng-container *ngSwitchCase=\"'search-warning'\">\n <i *ngIf=\"!!searchWarningMessageIcon; else defaultWarningIcon\" [ngClass]=\"searchWarningMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultWarningIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"search-warning\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path fill=\"currentColor\" d=\"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zm0-448c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM160 288a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n </ng-container>\n</span>\n\n<!-- Message body -->\n<div class=\"flex-grow-1 position-relative relative\" style=\"min-width: 0;\" [ngClass]=\"'message-'+message.role\">\n\n <!-- Progress steps -->\n <div *ngIf=\"message.additionalProperties.$progress as progress\" class=\"small ms-3 mb-2\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseProgress\">\n <summary class=\"text-muted\">\n {{ 'chatMessage.viewProgress' | transloco }}\n </summary>\n <ul class=\"list-unstyled\">\n <li *ngFor=\"let step of progress\">\n <i class=\"fas fa-fw fa-check text-success\" *ngIf=\"step.done\"></i>\n <i class=\"fas fa-spinner fa-pulse step-ongoing\" *ngIf=\"!step.done && streaming\"></i>\n <i class=\"fa-solid fa-ban step-error\" *ngIf=\"!step.done && !streaming\"></i>\n <span class=\"ms-2 fw-bold\">{{step.title}}</span>\n <span *ngIf=\"step.content\" [innerHTML]=\"': ' + step.content\"></span>\n </li>\n </ul>\n </details>\n </div>\n\n <!-- Message content -->\n <div class=\"message-content\" *ngIf=\"message.content\">\n\n <!-- Custom rendering for WPS, to be remove with https://sinequa.atlassian.net/browse/ES-23710 -->\n <div *ngIf=\"message?.role === 'assistant' && message.messageType === 'CHART'\">\n <sq-assistant-chart [rawChartData]=\"message.content\"></sq-assistant-chart>\n </div>\n\n <!-- This section is responsible for customizing the template nodes used in the application.\n Template nodes are predefined structures that serve as blueprints for creating/customizing dynamic content -->\n\n\n @if(message?.role === 'assistant' && message.messageType !== 'CHART') {\n <SmartRenderer\n [message]=\"message.content | messageContent\"\n [context]=\"{\n getEmbeddedPageReference: getEmbeddedPageReference.bind(this),\n getEmbeddedImageReference: getEmbeddedImageReference.bind(this),\n referencesMap: referenceMap,\n references: processReferences.bind(this),\n rank: id()\n }\">\n </SmartRenderer>\n }\n\n <p *ngIf=\"message?.role === 'user' || message?.role === 'search-warning' || message?.role === 'connection-error'\">{{ message.content | messageContent }}</p>\n\n <!-- List of reference, if any -->\n @let referencesArray = references();\n @if (referencesArray?.length > 0 || imageReferencesMap?.size > 0 || pageReferencesMap?.size > 0) {\n <div class=\"references\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseReferences\">\n <summary class=\"references-title\">{{ 'chatMessage.references' | transloco }}</summary>\n <ul>\n @for (reference of referencesArray; track $index) {\n @let attachment = referenceMap.get(reference);\n <!-- Only display the reference when the key is a integer not a decimal -->\n @if(attachment) {\n <li class=\"text-truncate\">\n <sq-chat-reference\n [class.expanded]=\"attachment?.$expanded\"\n [attachment]=\"attachment\"\n [reference]=\"reference\"\n [referenceMap]=\"referenceMap\"\n [images]=\"Array.from(imageReferencesMap.keys())\"\n [pages]=\"Array.from(pageReferencesMap.keys())\"\n (openPreview)=\"openAttachmentPreview($event)\"\n (openDocument)=\"openOriginalAttachment($event)\">\n </sq-chat-reference>\n </li>\n }\n }\n </ul>\n </details>\n </div>\n }\n </div>\n\n <!-- Edit / Regenerate floating actions -->\n <div class=\"sq-chat-message-actions\" *ngIf=\"message\">\n <!-- Common action buttons for \"user\" & \"assistant\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canCopy\" [sqTooltip]=\"'chatMessage.copyText' | transloco\" (click)=\"copyMessage(message)\">\n <i class=\"far fa-clipboard\"></i>\n </button>\n <!-- Action buttons for \"user\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canEdit\" [sqTooltip]=\"'chatMessage.editMessage' | transloco\" (click)=\"edit.emit(message)\">\n <i class=\"fas fa-edit\"></i>\n </button>\n <!-- Action buttons for \"assistant\" message -->\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$liked\" *ngIf=\"canLike\" [sqTooltip]=\"'chatMessage.likeAnswer' | transloco\" (click)=\"like.emit()\">\n <i *ngIf=\"!message.additionalProperties.$liked\" class=\"far fa-thumbs-up \"></i>\n <i *ngIf=\"message.additionalProperties.$liked\" class=\"fas fa-thumbs-up\"></i>\n </button>\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$disliked\" *ngIf=\"canDislike\" [sqTooltip]=\"'chatMessage.reportIssue' | transloco\" (click)=\"dislike.emit()\">\n <i *ngIf=\"!message.additionalProperties.$disliked\" class=\"far fa-thumbs-down \"></i>\n <i *ngIf=\"message.additionalProperties.$disliked\" class=\"fas fa-thumbs-down\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canRegenerate\" [sqTooltip]=\"'chatMessage.regenerateResponse' | transloco\" (click)=\"regenerate.emit(message)\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canDebug\" [sqTooltip]=\"'chatMessage.showLogInformation' | transloco\" (click)=\"debug.emit(message);\">\n <i class=\"far fa-list-alt\"></i>\n </button>\n </div>\n\n <!-- List of suggested actions, if any -->\n <div *ngIf=\"suggestedActions\" class=\"mt-2 message-suggestion\">\n <div class=\"suggested-action\" *ngFor=\"let suggestedAction of suggestedActions\" (click)=\"suggestAction.emit(suggestedAction)\">\n <div class=\"message-icon\" [style.width.px]=\"iconSize\"></div>\n <div class=\"message-content\">\n <p><i class=\"fas {{suggestedAction.type === 'Submit' ? 'fa-paper-plane' : 'fa-comment-medical'}} me-1\"></i> {{suggestedAction.content}}</p>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host{display:flex}:host:not(:hover):not(.last-message) .sq-chat-message-actions{visibility:hidden}.message-content{padding:var(--ast-message-padding, var(--ast-size-3, .75rem));border-radius:var(--ast-message-border-radius, var(--ast-size-4, 1rem));display:inline-block;max-width:100%;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.message-content .references{margin-top:var(--ast-size-5, 1.25rem)}.message-content .references ul{border-left:.2rem solid var(--ast-secondary-color, #FF732E);padding-left:var(--ast-size-5, 1.25rem);margin-top:var(--ast-size-2, .5rem)}.message-content .references .references-title{font-weight:var(--font-weight-bold, 500)}.message-content ::ng-deep p:last-child{margin-bottom:0}.message-content ::ng-deep .placeholder-glow .placeholder{animation-duration:.4s;width:12px;height:var(--ast-size-4, 1rem);vertical-align:text-bottom}.message-content ::ng-deep img{max-width:100%}.message-content ::ng-deep table{display:table;border:1px solid;border-color:var(--ast-message-table-border-color, #ccc);border-collapse:collapse;margin:0;padding:0;min-width:100%;overflow-x:auto;table-layout:fixed}.message-content ::ng-deep table tr{background-color:var(--ast-message-table-tr-bg, #f8f8f8);border:1px solid;border-color:var(--ast-message-table-tr-border-color, #ddd);padding:.35em}.message-content ::ng-deep table th,.message-content ::ng-deep table td{padding:.625em;text-align:center}.message-content ::ng-deep table th{font-size:.85em;letter-spacing:.1em;text-transform:uppercase}.message-content ::ng-deep .reference{color:var(--ast-message-reference-color, black)!important}.message-content ::ng-deep ul,.message-content ::ng-deep ol{display:flex;flex-direction:column;gap:.5rem;padding-right:2rem;margin-left:0;margin-right:0;padding-left:40px;unicode-bidi:isolate;list-style:disc}.message-content ::ng-deep p:not(:first-child){margin-top:.5rem}.message-assistant .message-content{background:var(--ast-secondary-bg, #FFF8F1)}.message-connection-error .message-content{background:var(--ast-error-bg, rgba(249, 58, 55, .2))}.message-search-warning .message-content{background:var(--ast-warning-bg, #fff1b8);color:var(--ast-message-reference-color, inherit)}.message-user .message-content{background:var(--ast-primary-bg, #f2f8fe);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500))}.message-user .message-content p{white-space:pre-line}.message-suggestion .message-content{background:var(--ast-input-bg, #F8F8F8);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500));transition:background-color .5s ease,color .5s ease}.message-suggestion .message-content:hover{background:var(--ast-primary-bg, #f2f8fe);color:var(--ast-primary-color, #005DA7)}.message-suggestion .message-content p{white-space:pre-line}.message-suggestion .suggested-action{cursor:pointer}.message-suggestion .suggested-action+.suggested-action{margin-top:var(--ast-size-2, .5rem)}.sq-chat-message-actions{position:absolute;bottom:calc(0rem - var(--ast-size-5, 1.25rem));display:flex;z-index:999}.sq-chat-message-actions button{font-size:.75rem;color:var(--ast-action-buttons-color, #212529)}.sq-chat-message-actions button:hover{color:var(--ast-action-buttons-hover-color, var(--ast-primary-color, #005DA7))}.message-icon{margin-top:var(--ast-size-3, .75rem);margin-right:var(--ast-size-4, 1rem)}.connection-error{height:var(--sq-size);width:var(--sq-size);color:var(--ast-error-color, rgba(249, 58, 55, .7))}.search-warning{height:var(--sq-size);width:var(--sq-size);color:var(--ast-warning-color, #fed86f)}.step-success{color:var(--ast-primary-color, #005DA7)}.step-ongoing{color:var(--ast-secondary-color, #FF732E)}.step-error{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.bounce{animation:bounce 2s ease}@keyframes bounce{10%{transform:translateY(0)}20%{transform:translateY(-15%)}30%{transform:translateY(0)}35%{transform:translateY(-7%)}37%{transform:translateY(0)}39%{transform:translateY(-3%)}40%{transform:translateY(0)}}\n"] }]
|
|
1191
|
-
}], ctorParameters: () => [{ type: UIService }, { type: PrincipalService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { message: [{
|
|
1220
|
+
}], ctorParameters: () => [{ type: UIService }, { type: PrincipalService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], message: [{
|
|
1192
1221
|
type: Input
|
|
1193
1222
|
}], conversation: [{
|
|
1194
1223
|
type: Input
|
|
@@ -1239,9 +1268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1239
1268
|
}] } });
|
|
1240
1269
|
|
|
1241
1270
|
class UserSettingsWebService {
|
|
1242
|
-
|
|
1243
|
-
this.userSettings = {};
|
|
1244
|
-
}
|
|
1271
|
+
userSettings = {};
|
|
1245
1272
|
patch(data) {
|
|
1246
1273
|
this.userSettings = { ...this.userSettings, ...data };
|
|
1247
1274
|
return from(patchUserSettings(data).catch((error) => {
|
|
@@ -1249,10 +1276,10 @@ class UserSettingsWebService {
|
|
|
1249
1276
|
throw error;
|
|
1250
1277
|
}));
|
|
1251
1278
|
}
|
|
1252
|
-
static
|
|
1253
|
-
static
|
|
1279
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserSettingsWebService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1280
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserSettingsWebService, providedIn: "root" });
|
|
1254
1281
|
}
|
|
1255
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserSettingsWebService, decorators: [{
|
|
1256
1283
|
type: Injectable,
|
|
1257
1284
|
args: [{
|
|
1258
1285
|
providedIn: "root"
|
|
@@ -1260,10 +1287,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1260
1287
|
}] });
|
|
1261
1288
|
|
|
1262
1289
|
class AssistantUtils {
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
this.transloco = inject(TranslocoService);
|
|
1266
|
-
}
|
|
1290
|
+
localID = inject(LOCALE_ID, { optional: true });
|
|
1291
|
+
transloco = inject(TranslocoService);
|
|
1267
1292
|
/**
|
|
1268
1293
|
* Retrieves the rank (1-based index) of a message within a chat history array based on its message ID.
|
|
1269
1294
|
* If the message is not found, returns -1.
|
|
@@ -1415,10 +1440,10 @@ class AssistantUtils {
|
|
|
1415
1440
|
getCurrentLocaleName() {
|
|
1416
1441
|
return this.localID || '';
|
|
1417
1442
|
}
|
|
1418
|
-
static
|
|
1419
|
-
static
|
|
1443
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantUtils, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1444
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantUtils, providedIn: 'root' });
|
|
1420
1445
|
}
|
|
1421
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1446
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantUtils, decorators: [{
|
|
1422
1447
|
type: Injectable,
|
|
1423
1448
|
args: [{
|
|
1424
1449
|
providedIn: 'root'
|
|
@@ -1426,10 +1451,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1426
1451
|
}] });
|
|
1427
1452
|
|
|
1428
1453
|
class SavedChatsService {
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
}
|
|
1454
|
+
operationConfig;
|
|
1455
|
+
notificationsService = inject(NotificationsService);
|
|
1456
|
+
transloco = inject(TranslocoService);
|
|
1457
|
+
constructor() { }
|
|
1433
1458
|
init(config) {
|
|
1434
1459
|
this.operationConfig = config;
|
|
1435
1460
|
}
|
|
@@ -1581,10 +1606,10 @@ class SavedChatsService {
|
|
|
1581
1606
|
throw error;
|
|
1582
1607
|
}));
|
|
1583
1608
|
}
|
|
1584
|
-
static
|
|
1585
|
-
static
|
|
1609
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1610
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsService });
|
|
1586
1611
|
}
|
|
1587
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1612
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsService, decorators: [{
|
|
1588
1613
|
type: Injectable
|
|
1589
1614
|
}], ctorParameters: () => [] });
|
|
1590
1615
|
|
|
@@ -1643,10 +1668,10 @@ class SignalRWebService {
|
|
|
1643
1668
|
throw error;
|
|
1644
1669
|
}
|
|
1645
1670
|
}
|
|
1646
|
-
static
|
|
1647
|
-
static
|
|
1671
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRWebService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1672
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRWebService, providedIn: "root" });
|
|
1648
1673
|
}
|
|
1649
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1674
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRWebService, decorators: [{
|
|
1650
1675
|
type: Injectable,
|
|
1651
1676
|
args: [{
|
|
1652
1677
|
providedIn: "root"
|
|
@@ -1654,10 +1679,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1654
1679
|
}] });
|
|
1655
1680
|
|
|
1656
1681
|
class SignalRConnectionService {
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
}
|
|
1682
|
+
operationConfig;
|
|
1683
|
+
signalRWebService = inject(SignalRWebService);
|
|
1684
|
+
assistantUtils = inject(AssistantUtils);
|
|
1661
1685
|
init(config) {
|
|
1662
1686
|
this.operationConfig = config;
|
|
1663
1687
|
}
|
|
@@ -1742,19 +1766,17 @@ class SignalRConnectionService {
|
|
|
1742
1766
|
const connection = this.operationConfig.getHubConnection();
|
|
1743
1767
|
return this.signalRWebService.stopConnection(connection);
|
|
1744
1768
|
}
|
|
1745
|
-
static
|
|
1746
|
-
static
|
|
1769
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRConnectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1770
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRConnectionService });
|
|
1747
1771
|
}
|
|
1748
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1772
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRConnectionService, decorators: [{
|
|
1749
1773
|
type: Injectable
|
|
1750
1774
|
}] });
|
|
1751
1775
|
|
|
1752
1776
|
class DialogUpdatesComponent {
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
this.closed = output();
|
|
1757
|
-
}
|
|
1777
|
+
dialogRef = viewChild('dialog', ...(ngDevMode ? [{ debugName: "dialogRef", read: (ElementRef) }] : [{ read: (ElementRef) }]));
|
|
1778
|
+
dialog = computed(() => this.dialogRef()?.nativeElement, ...(ngDevMode ? [{ debugName: "dialog" }] : []));
|
|
1779
|
+
closed = output();
|
|
1758
1780
|
open() {
|
|
1759
1781
|
this.dialog().showModal();
|
|
1760
1782
|
}
|
|
@@ -1773,8 +1795,8 @@ class DialogUpdatesComponent {
|
|
|
1773
1795
|
update() {
|
|
1774
1796
|
this.close("dialog-confirm");
|
|
1775
1797
|
}
|
|
1776
|
-
static
|
|
1777
|
-
static
|
|
1798
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogUpdatesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1799
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: DialogUpdatesComponent, isStandalone: true, selector: "sq-dialog-updates", outputs: { closed: "closed" }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "dialogRef", first: true, predicate: ["dialog"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
|
|
1778
1800
|
<dialog popover #dialog class="z-backdrop w-full max-w-md p-4 rounded-lg border border-neutral-200 shadow-2xl">
|
|
1779
1801
|
<div class="flex flex-col gap-4">
|
|
1780
1802
|
<h1 class="text-xl font-bold">{{ 'chatDialogs.availableUpdates' | transloco }}</h1>
|
|
@@ -1787,9 +1809,9 @@ class DialogUpdatesComponent {
|
|
|
1787
1809
|
</div>
|
|
1788
1810
|
</div>
|
|
1789
1811
|
</dialog>
|
|
1790
|
-
`, isInline: true, styles: [".flex{display:flex}.flex-col{flex-direction:column}.justify-end{justify-content:end}\n"], dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
1812
|
+
`, isInline: true, styles: [".flex{display:flex}.flex-col{flex-direction:column}.justify-end{justify-content:end}\n"], dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
1791
1813
|
}
|
|
1792
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1814
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogUpdatesComponent, decorators: [{
|
|
1793
1815
|
type: Component,
|
|
1794
1816
|
args: [{ selector: 'sq-dialog-updates', standalone: true, imports: [TranslocoPipe], providers: [provideTranslocoScope('chat-dialogs')], template: `
|
|
1795
1817
|
<dialog popover #dialog class="z-backdrop w-full max-w-md p-4 rounded-lg border border-neutral-200 shadow-2xl">
|
|
@@ -1805,9 +1827,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1805
1827
|
</div>
|
|
1806
1828
|
</dialog>
|
|
1807
1829
|
`, styles: [".flex{display:flex}.flex-col{flex-direction:column}.justify-end{justify-content:end}\n"] }]
|
|
1808
|
-
}] });
|
|
1830
|
+
}], propDecorators: { dialogRef: [{ type: i0.ViewChild, args: ['dialog', { ...{ read: (ElementRef) }, isSignal: true }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
1809
1831
|
|
|
1810
1832
|
class DialogService {
|
|
1833
|
+
appRef;
|
|
1834
|
+
dialogRef;
|
|
1811
1835
|
constructor(appRef) {
|
|
1812
1836
|
this.appRef = appRef;
|
|
1813
1837
|
}
|
|
@@ -1835,10 +1859,10 @@ class DialogService {
|
|
|
1835
1859
|
this.dialogRef.changeDetectorRef.detectChanges();
|
|
1836
1860
|
}
|
|
1837
1861
|
}
|
|
1838
|
-
static
|
|
1839
|
-
static
|
|
1862
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogService, deps: [{ token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1863
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogService, providedIn: 'root' });
|
|
1840
1864
|
}
|
|
1841
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1865
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogService, decorators: [{
|
|
1842
1866
|
type: Injectable,
|
|
1843
1867
|
args: [{
|
|
1844
1868
|
providedIn: 'root',
|
|
@@ -1910,7 +1934,7 @@ const defaultValuesSchema = z.object({
|
|
|
1910
1934
|
// Define the Zod representation for the action object
|
|
1911
1935
|
const actionSchema = z.object({
|
|
1912
1936
|
forcedWorkflow: z.string(), // forcedWorkflow must be a string
|
|
1913
|
-
forcedWorkflowProperties: z.record(z.unknown()).optional(), // forcedWorkflowProperties must be an object (Map equivalent)
|
|
1937
|
+
forcedWorkflowProperties: z.record(z.string(), z.unknown()).optional(), // forcedWorkflowProperties must be an object (Map equivalent)
|
|
1914
1938
|
});
|
|
1915
1939
|
// Define the Zod representation for the modeSettings object
|
|
1916
1940
|
const initializationSchema = z
|
|
@@ -1938,7 +1962,7 @@ const modeSettingsSchema = z.object({
|
|
|
1938
1962
|
displayUserPrompt: z.boolean(),
|
|
1939
1963
|
sendUserPrompt: z.boolean(),
|
|
1940
1964
|
initialization: initializationSchema,
|
|
1941
|
-
actions: z.record(actionSchema).optional(),
|
|
1965
|
+
actions: z.record(z.string(), actionSchema).optional(),
|
|
1942
1966
|
});
|
|
1943
1967
|
// Define the Zod representation for the savedChatSettings object
|
|
1944
1968
|
const savedChatSettingsSchema = z.object({
|
|
@@ -1975,14 +1999,14 @@ const chatConfigSchema = z.object({
|
|
|
1975
1999
|
});
|
|
1976
2000
|
|
|
1977
2001
|
class AssistantConfigurationService {
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
}
|
|
2002
|
+
context;
|
|
2003
|
+
appService = inject(AppService);
|
|
2004
|
+
userSettingsService = inject(UserSettingsWebService);
|
|
2005
|
+
principalService = inject(PrincipalService);
|
|
2006
|
+
modalService = inject(DialogService);
|
|
2007
|
+
notificationsService = inject(NotificationsService);
|
|
2008
|
+
transloco = inject(TranslocoService);
|
|
2009
|
+
constructor() { }
|
|
1986
2010
|
init(context) {
|
|
1987
2011
|
this.context = context;
|
|
1988
2012
|
}
|
|
@@ -2113,14 +2137,15 @@ class AssistantConfigurationService {
|
|
|
2113
2137
|
const url = "SinequaAssistantREST";
|
|
2114
2138
|
context.setRESTRequestsUrl(url);
|
|
2115
2139
|
}
|
|
2116
|
-
static
|
|
2117
|
-
static
|
|
2140
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2141
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantConfigurationService });
|
|
2118
2142
|
}
|
|
2119
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2143
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantConfigurationService, decorators: [{
|
|
2120
2144
|
type: Injectable
|
|
2121
2145
|
}], ctorParameters: () => [] });
|
|
2122
2146
|
|
|
2123
2147
|
class AssistantMetadataService {
|
|
2148
|
+
context;
|
|
2124
2149
|
init(context) {
|
|
2125
2150
|
this.context = context;
|
|
2126
2151
|
}
|
|
@@ -2193,18 +2218,18 @@ class AssistantMetadataService {
|
|
|
2193
2218
|
return throwError(() => error);
|
|
2194
2219
|
}));
|
|
2195
2220
|
}
|
|
2196
|
-
static
|
|
2197
|
-
static
|
|
2221
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantMetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2222
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantMetadataService });
|
|
2198
2223
|
}
|
|
2199
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantMetadataService, decorators: [{
|
|
2200
2225
|
type: Injectable
|
|
2201
2226
|
}] });
|
|
2202
2227
|
|
|
2203
2228
|
class AssistantTokensTrackingService {
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
}
|
|
2229
|
+
context;
|
|
2230
|
+
assistantUtils = inject(AssistantUtils);
|
|
2231
|
+
notificationsService = inject(NotificationsService);
|
|
2232
|
+
constructor() { }
|
|
2208
2233
|
init(context) {
|
|
2209
2234
|
this.context = context;
|
|
2210
2235
|
}
|
|
@@ -2239,25 +2264,27 @@ class AssistantTokensTrackingService {
|
|
|
2239
2264
|
context.setChatTokenConsumption({ percentage: consumptionPercentage });
|
|
2240
2265
|
}
|
|
2241
2266
|
}
|
|
2242
|
-
static
|
|
2243
|
-
static
|
|
2267
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantTokensTrackingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2268
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantTokensTrackingService });
|
|
2244
2269
|
}
|
|
2245
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantTokensTrackingService, decorators: [{
|
|
2246
2271
|
type: Injectable
|
|
2247
2272
|
}], ctorParameters: () => [] });
|
|
2248
2273
|
|
|
2249
2274
|
class AssistantWsFramesService {
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2275
|
+
context;
|
|
2276
|
+
appService = inject(AppService);
|
|
2277
|
+
transloco = inject(TranslocoService);
|
|
2278
|
+
assistantUtils = inject(AssistantUtils);
|
|
2279
|
+
notificationsService = inject(NotificationsService);
|
|
2280
|
+
_messageHandlers = new Map();
|
|
2281
|
+
_response;
|
|
2282
|
+
_actionMap = new Map();
|
|
2283
|
+
_progress = undefined;
|
|
2284
|
+
_executionTime;
|
|
2285
|
+
_executionTimeMilliseconds;
|
|
2286
|
+
_attachments = [];
|
|
2287
|
+
_debugMessages = [];
|
|
2261
2288
|
init(context) {
|
|
2262
2289
|
this.context = context;
|
|
2263
2290
|
}
|
|
@@ -2586,7 +2613,9 @@ class AssistantWsFramesService {
|
|
|
2586
2613
|
context.setStoppingGenerationStatus(true);
|
|
2587
2614
|
// Create a Subject to hold the result of the CancelTasks method
|
|
2588
2615
|
const stopGenerationSubject$ = new Subject();
|
|
2589
|
-
|
|
2616
|
+
// Use a named handler so it can be removed after firing, preventing listener accumulation across multiple stop operations
|
|
2617
|
+
const cancelHandler = (res) => {
|
|
2618
|
+
connection.off('CancelTasks', cancelHandler);
|
|
2590
2619
|
// When the generation is stopped before streaming any VISIBLE assistant message, this means that $progress, $attachment and $debug properties will be lost.
|
|
2591
2620
|
// However, the "ContextMessage" frames will be persisted in the chatHistory and the assistant may reference them in the next generation.
|
|
2592
2621
|
// This leads to the problem of referencing undisplayed attachments in the next generation.
|
|
@@ -2610,25 +2639,28 @@ class AssistantWsFramesService {
|
|
|
2610
2639
|
stopGenerationSubject$.complete();
|
|
2611
2640
|
// Complete stopping generation
|
|
2612
2641
|
context.setStoppingGenerationStatus(false);
|
|
2613
|
-
}
|
|
2642
|
+
};
|
|
2643
|
+
connection.on('CancelTasks', cancelHandler);
|
|
2614
2644
|
// Invoke the CancelTasks method and handle errors
|
|
2615
2645
|
connection.invoke('CancelTasks')
|
|
2616
2646
|
.catch(error => {
|
|
2617
2647
|
console.error('Error invoking CancelTasks:', error);
|
|
2648
|
+
connection.off('CancelTasks', cancelHandler);
|
|
2618
2649
|
stopGenerationSubject$.error(new Error(error));
|
|
2619
2650
|
context.setStoppingGenerationStatus(false);
|
|
2620
2651
|
return Promise.resolve();
|
|
2621
2652
|
});
|
|
2622
2653
|
return stopGenerationSubject$.asObservable();
|
|
2623
2654
|
}
|
|
2624
|
-
static
|
|
2625
|
-
static
|
|
2655
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantWsFramesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2656
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantWsFramesService });
|
|
2626
2657
|
}
|
|
2627
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2658
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantWsFramesService, decorators: [{
|
|
2628
2659
|
type: Injectable
|
|
2629
2660
|
}] });
|
|
2630
2661
|
|
|
2631
2662
|
class DebugMessageService {
|
|
2663
|
+
operationConfig;
|
|
2632
2664
|
constructor() { }
|
|
2633
2665
|
init(config) {
|
|
2634
2666
|
if (this.operationConfig) {
|
|
@@ -2665,64 +2697,78 @@ class DebugMessageService {
|
|
|
2665
2697
|
throw error;
|
|
2666
2698
|
}));
|
|
2667
2699
|
}
|
|
2668
|
-
static
|
|
2669
|
-
static
|
|
2700
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2701
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageService });
|
|
2670
2702
|
}
|
|
2671
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2703
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageService, decorators: [{
|
|
2672
2704
|
type: Injectable
|
|
2673
2705
|
}], ctorParameters: () => [] });
|
|
2674
2706
|
|
|
2675
2707
|
// Auto-generated
|
|
2676
|
-
const LIB_VERSION = '3.10.
|
|
2708
|
+
const LIB_VERSION = '3.10.11';
|
|
2677
2709
|
|
|
2678
2710
|
class ChatService {
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2711
|
+
/** Name of the assistant websocket endpoint. */
|
|
2712
|
+
WS_REQUEST_URL;
|
|
2713
|
+
/** Name of the assistant REST endpoint. */
|
|
2714
|
+
REST_REQUEST_URL;
|
|
2715
|
+
/** SignalR connection instance */
|
|
2716
|
+
connection;
|
|
2717
|
+
/** Emit true once the initialization of the assistant process is done. */
|
|
2718
|
+
initProcess$ = new BehaviorSubject(false);
|
|
2719
|
+
/** Emit true once the initialization of the assistant config is done. */
|
|
2720
|
+
initConfig$ = new BehaviorSubject(false);
|
|
2721
|
+
/** Emit the global configuration of the assistant. */
|
|
2722
|
+
assistantConfig$ = new BehaviorSubject(undefined);
|
|
2723
|
+
/** Emit true if the user has been overridden, false otherwise. */
|
|
2724
|
+
userOverride$ = new BehaviorSubject(undefined);
|
|
2725
|
+
/**
|
|
2726
|
+
* Emit true if the fetch of an assistant's response is ongoing (it includes Streaming status of the assistant endpoint AND saving the discussion if save Chat is enabled).
|
|
2727
|
+
* This is used to prevent multiple fetches at the same time.
|
|
2728
|
+
* Typically, there is no problem chaining fetches, but when forcing a reload after query changes cases, it can't be allowed because it breaks the whole business logic.
|
|
2729
|
+
*/
|
|
2730
|
+
streaming$ = new BehaviorSubject(false);
|
|
2731
|
+
/** Store the messages history of the current chat. */
|
|
2732
|
+
chatHistory;
|
|
2733
|
+
/** List of models available on the server. */
|
|
2734
|
+
models;
|
|
2735
|
+
/** List of functions available on the server. */
|
|
2736
|
+
functions;
|
|
2737
|
+
/** List of saved chats. */
|
|
2738
|
+
savedChats$ = new BehaviorSubject([]);
|
|
2739
|
+
/** Whether there is an error with saved chats. */
|
|
2740
|
+
savedChatsError$ = new BehaviorSubject(false);
|
|
2741
|
+
/** Emit the saved chat to load. */
|
|
2742
|
+
loadSavedChat$ = new BehaviorSubject(undefined);
|
|
2743
|
+
/** Emit the quota each time the chat is invoked. */
|
|
2744
|
+
quota$ = new BehaviorSubject(undefined);
|
|
2745
|
+
/** Emit the calculated user's token consumption based on the quota. */
|
|
2746
|
+
userTokenConsumption$ = new BehaviorSubject(undefined);
|
|
2747
|
+
/** Emit the chat usage metrics each time the generation of the assistant response is completed. */
|
|
2748
|
+
chatUsageMetrics$ = new BehaviorSubject(undefined);
|
|
2749
|
+
/** Emit the calculated chat's token consumption based on the chat usage metrics. */
|
|
2750
|
+
chatTokenConsumption$ = new BehaviorSubject(undefined);
|
|
2751
|
+
/** Emit true if "CancelTasks" is ongoing. */
|
|
2752
|
+
stoppingGeneration$ = new BehaviorSubject(false);
|
|
2753
|
+
/** Instance ID of the chat service defining the assistant instance. */
|
|
2754
|
+
_chatInstanceId;
|
|
2755
|
+
/** Generated GUID for the current chat discussion used to save/get/delete it and identify audit events. */
|
|
2756
|
+
_chatId;
|
|
2757
|
+
userSettingsService = inject(UserSettingsWebService);
|
|
2758
|
+
notificationsService = inject(NotificationsService);
|
|
2759
|
+
appService = inject(AppService);
|
|
2760
|
+
principalService = inject(PrincipalService);
|
|
2761
|
+
assistantUtils = inject(AssistantUtils);
|
|
2762
|
+
savedChatsService = inject(SavedChatsService);
|
|
2763
|
+
// Inject the SignalRConnectionService using 'new' to ensure a separate local instance for each ChatService instance
|
|
2764
|
+
signalRConnectionService = new SignalRConnectionService();
|
|
2765
|
+
assistantConfigurationService = inject(AssistantConfigurationService);
|
|
2766
|
+
assistantMetadataService = new AssistantMetadataService();
|
|
2767
|
+
assistantTokensTrackingService = inject(AssistantTokensTrackingService);
|
|
2768
|
+
debugMessageService = inject(DebugMessageService);
|
|
2769
|
+
// Inject the AssistantWsFramesService using 'new' to ensure a separate local instance for each ChatService instance
|
|
2770
|
+
assistantWsFramesService = new (AssistantWsFramesService);
|
|
2771
|
+
transloco = inject(TranslocoService);
|
|
2726
2772
|
/**
|
|
2727
2773
|
* Initialize the assistant process.
|
|
2728
2774
|
* It includes building and starting a connection, executing parallel requests for models and functions, and handling errors during the process.
|
|
@@ -3286,19 +3332,22 @@ class ChatService {
|
|
|
3286
3332
|
};
|
|
3287
3333
|
await Audit.notify(audit);
|
|
3288
3334
|
}
|
|
3289
|
-
static
|
|
3290
|
-
static
|
|
3335
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3336
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatService });
|
|
3291
3337
|
}
|
|
3292
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3338
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatService, decorators: [{
|
|
3293
3339
|
type: Injectable
|
|
3294
3340
|
}] });
|
|
3295
3341
|
|
|
3296
3342
|
class DebugMessageDetailsComponent {
|
|
3343
|
+
ui;
|
|
3344
|
+
debugMessageService;
|
|
3345
|
+
data;
|
|
3346
|
+
level = 0; // Track the nesting level
|
|
3347
|
+
parentColor = ''; // Track the parent row color
|
|
3297
3348
|
constructor(ui, debugMessageService) {
|
|
3298
3349
|
this.ui = ui;
|
|
3299
3350
|
this.debugMessageService = debugMessageService;
|
|
3300
|
-
this.level = 0; // Track the nesting level
|
|
3301
|
-
this.parentColor = ''; // Track the parent row color
|
|
3302
3351
|
}
|
|
3303
3352
|
ngAfterViewInit() {
|
|
3304
3353
|
Prism.highlightAll();
|
|
@@ -3314,10 +3363,10 @@ class DebugMessageDetailsComponent {
|
|
|
3314
3363
|
copyToClipboard(code) {
|
|
3315
3364
|
this.ui.copyToClipboard(JSON.stringify(code, null, 2));
|
|
3316
3365
|
}
|
|
3317
|
-
static
|
|
3318
|
-
static
|
|
3366
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageDetailsComponent, deps: [{ token: UIService }, { token: DebugMessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3367
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DebugMessageDetailsComponent, isStandalone: true, selector: "sq-debug-message-details", inputs: { data: "data", level: "level", parentColor: "parentColor" }, providers: [provideTranslocoScope('chat-debug-message')], ngImport: i0, template: "<ng-container *ngFor=\"let item of data; let i = index\">\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 kv-object\">\n <div class=\"kv-key\">{{ item.data.key }}</div>\n <div class=\"kv-value\">\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\n <div class=\"card mb-2\">\n <div class=\"card-header\">\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> {{ 'chatDebugMessage.copyCode' | transloco }}</button>\n </div>\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\n </div>\n </ng-container>\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\n </div>\n </div>\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100\" (click)=\"item.expanded=!item.expanded\" *ngIf=\"level > 0\"> <!--remove first level toggle since always it is a LIST object that matches the name of the parent, otherwise, 2 similar title's div duplicated-->\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\n {{ item.name }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\n <sq-debug-message-details [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item)\"></sq-debug-message-details>\n </div>\n </div>\n</ng-container>\n", styles: [".list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"], dependencies: [{ kind: "component", type: DebugMessageDetailsComponent, selector: "sq-debug-message-details", inputs: ["data", "level", "parentColor"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
3319
3368
|
}
|
|
3320
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3369
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageDetailsComponent, decorators: [{
|
|
3321
3370
|
type: Component,
|
|
3322
3371
|
args: [{ selector: "sq-debug-message-details", standalone: true, imports: [CommonModule, TranslocoPipe], providers: [provideTranslocoScope('chat-debug-message')], template: "<ng-container *ngFor=\"let item of data; let i = index\">\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 kv-object\">\n <div class=\"kv-key\">{{ item.data.key }}</div>\n <div class=\"kv-value\">\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\n <div class=\"card mb-2\">\n <div class=\"card-header\">\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> {{ 'chatDebugMessage.copyCode' | transloco }}</button>\n </div>\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\n </div>\n </ng-container>\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\n </div>\n </div>\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100\" (click)=\"item.expanded=!item.expanded\" *ngIf=\"level > 0\"> <!--remove first level toggle since always it is a LIST object that matches the name of the parent, otherwise, 2 similar title's div duplicated-->\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\n {{ item.name }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\n <sq-debug-message-details [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item)\"></sq-debug-message-details>\n </div>\n </div>\n</ng-container>\n", styles: [".list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"] }]
|
|
3323
3372
|
}], ctorParameters: () => [{ type: UIService }, { type: DebugMessageService }], propDecorators: { data: [{
|
|
@@ -3329,6 +3378,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3329
3378
|
}] } });
|
|
3330
3379
|
|
|
3331
3380
|
class DebugMessageComponent {
|
|
3381
|
+
debugMessageService;
|
|
3382
|
+
cdr;
|
|
3383
|
+
data;
|
|
3332
3384
|
constructor(debugMessageService, cdr) {
|
|
3333
3385
|
this.debugMessageService = debugMessageService;
|
|
3334
3386
|
this.cdr = cdr;
|
|
@@ -3351,10 +3403,10 @@ class DebugMessageComponent {
|
|
|
3351
3403
|
})).subscribe();
|
|
3352
3404
|
}
|
|
3353
3405
|
}
|
|
3354
|
-
static
|
|
3355
|
-
static
|
|
3406
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageComponent, deps: [{ token: DebugMessageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
3407
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DebugMessageComponent, isStandalone: true, selector: "sq-debug-message", inputs: { data: "data" }, ngImport: i0, template: "<div *ngIf=\"data\" class=\"table-root\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <div [ngClass]=\"getRowClass(i)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100 fw-bold\" (click)=\"toggleExpand(item)\">\n <i class=\"fas\" [class.fa-chevron-up]=\"item.$expanded\" [class.fa-chevron-down]=\"!item.$expanded\"></i>\n {{ item.title }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.$expanded\">\n <div *ngIf=\"item.$loading\">Loading...</div>\n <sq-debug-message-details *ngIf=\"item.$details\" [data]=\"item.$details\" [parentColor]=\"getRowClass(i)\"></sq-debug-message-details>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.list-object{flex-direction:column;display:flex;flex:1}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.table-row:not(:last-child){border-bottom:1px solid #ccc}.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DebugMessageDetailsComponent, selector: "sq-debug-message-details", inputs: ["data", "level", "parentColor"] }] });
|
|
3356
3408
|
}
|
|
3357
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3409
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageComponent, decorators: [{
|
|
3358
3410
|
type: Component,
|
|
3359
3411
|
args: [{ selector: "sq-debug-message", standalone: true, imports: [CommonModule, DebugMessageDetailsComponent], template: "<div *ngIf=\"data\" class=\"table-root\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <div [ngClass]=\"getRowClass(i)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100 fw-bold\" (click)=\"toggleExpand(item)\">\n <i class=\"fas\" [class.fa-chevron-up]=\"item.$expanded\" [class.fa-chevron-down]=\"!item.$expanded\"></i>\n {{ item.title }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.$expanded\">\n <div *ngIf=\"item.$loading\">Loading...</div>\n <sq-debug-message-details *ngIf=\"item.$details\" [data]=\"item.$details\" [parentColor]=\"getRowClass(i)\"></sq-debug-message-details>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.list-object{flex-direction:column;display:flex;flex:1}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.table-row:not(:last-child){border-bottom:1px solid #ccc}.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"] }]
|
|
3360
3412
|
}], ctorParameters: () => [{ type: DebugMessageService }, { type: i0.ChangeDetectorRef }], propDecorators: { data: [{
|
|
@@ -3362,10 +3414,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3362
3414
|
}] } });
|
|
3363
3415
|
|
|
3364
3416
|
class SearchService {
|
|
3365
|
-
|
|
3366
|
-
static
|
|
3417
|
+
query;
|
|
3418
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3419
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, providedIn: 'root' });
|
|
3367
3420
|
}
|
|
3368
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3421
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, decorators: [{
|
|
3369
3422
|
type: Injectable,
|
|
3370
3423
|
args: [{
|
|
3371
3424
|
providedIn: 'root'
|
|
@@ -3373,10 +3426,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3373
3426
|
}] });
|
|
3374
3427
|
|
|
3375
3428
|
class TokenProgressBarComponent {
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3429
|
+
/** Define the key based on it, the appropriate chatService instance will be returned from instanceManagerService */
|
|
3430
|
+
instanceId;
|
|
3431
|
+
chatService;
|
|
3432
|
+
config;
|
|
3433
|
+
subscription = new Subscription();
|
|
3434
|
+
// User token consumption progress bar
|
|
3435
|
+
userPercentage;
|
|
3436
|
+
userTokensResetDate;
|
|
3437
|
+
// Current chat token consumption progress bar
|
|
3438
|
+
chatPercentage;
|
|
3439
|
+
instanceManagerService = inject(InstanceManagerService);
|
|
3380
3440
|
ngOnInit() {
|
|
3381
3441
|
this.subscription.add(of(isAuthenticated()).pipe(tap(_ => this.instantiateChatService()), switchMap(_ => this.chatService.initProcess$), filter(success => !!success), tap(_ => {
|
|
3382
3442
|
this.config = this.chatService.assistantConfig$.value;
|
|
@@ -3405,10 +3465,10 @@ class TokenProgressBarComponent {
|
|
|
3405
3465
|
}
|
|
3406
3466
|
}));
|
|
3407
3467
|
}
|
|
3408
|
-
static
|
|
3409
|
-
static
|
|
3468
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TokenProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3469
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: TokenProgressBarComponent, isStandalone: true, selector: "sq-token-progress-bar", inputs: { instanceId: "instanceId" }, providers: [provideTranslocoScope('token-consumption')], ngImport: i0, template: "<div class=\"bars-container d-flex flex-row gap-2 p-2 me-4\" *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined) || (config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\">\n <div *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.userConsumptionTitle' | transloco : { percentage: userPercentage, time: userTokensResetDate }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + userPercentage + '%, #0040BF 0)'\">\n </div>\n <div *ngIf=\"(config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.chatConsumptionTitle' | transloco : { percentage: chatPercentage }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + chatPercentage + '%, #0040BF 0)'\">\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.bars-container{background-color:var(--ast-primary-bg, #f2f8fe);border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}.token-progress-bar{width:1.5rem;height:1.5rem;border-radius:50%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
3410
3470
|
}
|
|
3411
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TokenProgressBarComponent, decorators: [{
|
|
3412
3472
|
type: Component,
|
|
3413
3473
|
args: [{ selector: 'sq-token-progress-bar', standalone: true, providers: [provideTranslocoScope('token-consumption')], imports: [CommonModule, TooltipDirective, TranslocoPipe], template: "<div class=\"bars-container d-flex flex-row gap-2 p-2 me-4\" *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined) || (config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\">\n <div *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.userConsumptionTitle' | transloco : { percentage: userPercentage, time: userTokensResetDate }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + userPercentage + '%, #0040BF 0)'\">\n </div>\n <div *ngIf=\"(config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.chatConsumptionTitle' | transloco : { percentage: chatPercentage }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + chatPercentage + '%, #0040BF 0)'\">\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.bars-container{background-color:var(--ast-primary-bg, #f2f8fe);border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}.token-progress-bar{width:1.5rem;height:1.5rem;border-radius:50%}\n"] }]
|
|
3414
3474
|
}], propDecorators: { instanceId: [{
|
|
@@ -3416,66 +3476,110 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3416
3476
|
}] } });
|
|
3417
3477
|
|
|
3418
3478
|
class ChatComponent {
|
|
3479
|
+
chatService = inject(ChatService);
|
|
3480
|
+
instanceManagerService = inject(InstanceManagerService);
|
|
3481
|
+
searchService = inject(SearchService);
|
|
3482
|
+
principalService = inject(PrincipalService);
|
|
3483
|
+
cdr = inject(ChangeDetectorRef);
|
|
3484
|
+
notificationsService = inject(NotificationsService);
|
|
3485
|
+
transloco = inject(TranslocoService);
|
|
3486
|
+
assistantUtils = inject(AssistantUtils);
|
|
3487
|
+
destroyRef = inject(DestroyRef);
|
|
3488
|
+
/** Define the key based on it, the chat service instance will be stored */
|
|
3489
|
+
instanceId;
|
|
3490
|
+
/** Define the query to use to fetch answers */
|
|
3491
|
+
query = this.searchService.query;
|
|
3492
|
+
/** Function that determines whether the chat should be reloaded after the query changes
|
|
3493
|
+
* If not provided, the chat will be reloaded by default
|
|
3494
|
+
* @param prevQuery The previous query
|
|
3495
|
+
* @param newQuery The new query
|
|
3496
|
+
* @returns true if the chat should be reloaded, false otherwise
|
|
3497
|
+
*/
|
|
3498
|
+
queryChangeShouldTriggerReload;
|
|
3499
|
+
/** Map of listeners overriding default registered ones*/
|
|
3500
|
+
messageHandlers = new Map();
|
|
3501
|
+
/** When the assistant answer a user question, automatically scroll down to the bottom of the discussion */
|
|
3502
|
+
automaticScrollToLastResponse = false;
|
|
3503
|
+
/** When the assistant answer a user question, automatically focus to the chat input */
|
|
3504
|
+
focusAfterResponse = false;
|
|
3505
|
+
/** A chat discussion that the component should get initialized with it */
|
|
3506
|
+
chat;
|
|
3507
|
+
/** Icon to use for the assistant messages */
|
|
3508
|
+
assistantMessageIcon = 'sq-sinequa';
|
|
3509
|
+
/** Icon to use for the user messages */
|
|
3510
|
+
userMessageIcon;
|
|
3511
|
+
/** Icon to use for the connection error messages */
|
|
3512
|
+
connectionErrorMessageIcon;
|
|
3513
|
+
/** Icon to use for the search warning messages */
|
|
3514
|
+
searchWarningMessageIcon;
|
|
3515
|
+
// Add custom additionalWorkflowProperties to the user query message
|
|
3516
|
+
additionalWorkflowProperties = {};
|
|
3517
|
+
/** Used by assistant web component to pass properly init the global config */
|
|
3518
|
+
appConfig;
|
|
3519
|
+
/** Whether the chat component is displayed in a collapsed state */
|
|
3520
|
+
collapsed = false;
|
|
3521
|
+
/** Event emitter triggered once the signalR connection is established */
|
|
3522
|
+
connection = new EventEmitter();
|
|
3523
|
+
/** Event emitter triggered each time the assistant updates the current chat */
|
|
3524
|
+
/** Event emitter triggered when the chat is loading new content */
|
|
3525
|
+
loading$ = new EventEmitter(false);
|
|
3526
|
+
/** Emits the assistant configuration used when instantiating the component */
|
|
3527
|
+
_config = new EventEmitter();
|
|
3528
|
+
data = new EventEmitter();
|
|
3529
|
+
/** Event emitter triggered when the user clicks to open the original document representing the context attachment*/
|
|
3530
|
+
openDocument = new EventEmitter();
|
|
3531
|
+
/** Event emitter triggered when the user clicks to open the preview of a document representing the context attachment */
|
|
3532
|
+
openPreview = new EventEmitter();
|
|
3533
|
+
/** Event emitter triggered when the user clicks on a suggested action */
|
|
3534
|
+
suggestAction = new EventEmitter();
|
|
3535
|
+
/** ViewChild decorators to access the template elements */
|
|
3536
|
+
questionInput;
|
|
3537
|
+
/** ContentChild decorators allowing the override of the default templates from the parent component */
|
|
3538
|
+
loadingTpl;
|
|
3539
|
+
reportTpl;
|
|
3540
|
+
tokenConsumptionTpl;
|
|
3541
|
+
debugMessagesTpl;
|
|
3542
|
+
config;
|
|
3543
|
+
messages$ = new BehaviorSubject(undefined);
|
|
3544
|
+
isAdminOrDeletedAdmin = false;
|
|
3545
|
+
question = '';
|
|
3546
|
+
_dataSubscription;
|
|
3547
|
+
/** Variables that depend on the type of model in use */
|
|
3548
|
+
modelDescription;
|
|
3549
|
+
indexMessageToEdit;
|
|
3550
|
+
rankMessageToEdit;
|
|
3551
|
+
changes$ = new BehaviorSubject(undefined);
|
|
3552
|
+
currentMessageIndex;
|
|
3553
|
+
firstChangesHandled = false;
|
|
3554
|
+
isAtBottom = true;
|
|
3555
|
+
initializationError = false;
|
|
3556
|
+
enabledUserInput = false;
|
|
3557
|
+
isConnected = true; // By default, the chat is considered connected
|
|
3558
|
+
retrialAttempts;
|
|
3559
|
+
// Flag to track whether the 'reconnected' listener is already registered
|
|
3560
|
+
_isReconnectedListenerRegistered = false;
|
|
3561
|
+
// Issue reporting
|
|
3562
|
+
issueTypes;
|
|
3563
|
+
defaultIssueTypes = [
|
|
3564
|
+
'chat.userInterfaceBug',
|
|
3565
|
+
'chat.incorrectResponse',
|
|
3566
|
+
'chat.incompleteResponse',
|
|
3567
|
+
'chat.technicalIssue',
|
|
3568
|
+
'chat.privacyDataSecurityIssue',
|
|
3569
|
+
'chat.otherIssue'
|
|
3570
|
+
];
|
|
3571
|
+
issueType = '';
|
|
3572
|
+
reportComment;
|
|
3573
|
+
messageToReport;
|
|
3574
|
+
reportRank;
|
|
3575
|
+
reportType = 'dislike';
|
|
3576
|
+
showReport = false;
|
|
3577
|
+
// Debug messages
|
|
3578
|
+
debugMessages;
|
|
3579
|
+
showDebugMessages = false;
|
|
3580
|
+
_previousQuery;
|
|
3581
|
+
_reloadSubscription = undefined;
|
|
3419
3582
|
constructor() {
|
|
3420
|
-
this.chatService = inject(ChatService);
|
|
3421
|
-
this.instanceManagerService = inject(InstanceManagerService);
|
|
3422
|
-
this.searchService = inject(SearchService);
|
|
3423
|
-
this.principalService = inject(PrincipalService);
|
|
3424
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
3425
|
-
this.notificationsService = inject(NotificationsService);
|
|
3426
|
-
this.transloco = inject(TranslocoService);
|
|
3427
|
-
this.assistantUtils = inject(AssistantUtils);
|
|
3428
|
-
this.destroyRef = inject(DestroyRef);
|
|
3429
|
-
/** Define the query to use to fetch answers */
|
|
3430
|
-
this.query = this.searchService.query;
|
|
3431
|
-
/** Map of listeners overriding default registered ones*/
|
|
3432
|
-
this.messageHandlers = new Map();
|
|
3433
|
-
/** When the assistant answer a user question, automatically scroll down to the bottom of the discussion */
|
|
3434
|
-
this.automaticScrollToLastResponse = false;
|
|
3435
|
-
/** When the assistant answer a user question, automatically focus to the chat input */
|
|
3436
|
-
this.focusAfterResponse = false;
|
|
3437
|
-
/** Icon to use for the assistant messages */
|
|
3438
|
-
this.assistantMessageIcon = 'sq-sinequa';
|
|
3439
|
-
// Add custom additionalWorkflowProperties to the user query message
|
|
3440
|
-
this.additionalWorkflowProperties = {};
|
|
3441
|
-
/** Event emitter triggered once the signalR connection is established */
|
|
3442
|
-
this.connection = new EventEmitter();
|
|
3443
|
-
/** Event emitter triggered each time the assistant updates the current chat */
|
|
3444
|
-
/** Event emitter triggered when the chat is loading new content */
|
|
3445
|
-
this.loading$ = new EventEmitter(false);
|
|
3446
|
-
/** Emits the assistant configuration used when instantiating the component */
|
|
3447
|
-
this._config = new EventEmitter();
|
|
3448
|
-
this.data = new EventEmitter();
|
|
3449
|
-
/** Event emitter triggered when the user clicks to open the original document representing the context attachment*/
|
|
3450
|
-
this.openDocument = new EventEmitter();
|
|
3451
|
-
/** Event emitter triggered when the user clicks to open the preview of a document representing the context attachment */
|
|
3452
|
-
this.openPreview = new EventEmitter();
|
|
3453
|
-
/** Event emitter triggered when the user clicks on a suggested action */
|
|
3454
|
-
this.suggestAction = new EventEmitter();
|
|
3455
|
-
this.messages$ = new BehaviorSubject(undefined);
|
|
3456
|
-
this.isAdminOrDeletedAdmin = false;
|
|
3457
|
-
this.question = '';
|
|
3458
|
-
this.changes$ = new BehaviorSubject(undefined);
|
|
3459
|
-
this.firstChangesHandled = false;
|
|
3460
|
-
this.isAtBottom = true;
|
|
3461
|
-
this.initializationError = false;
|
|
3462
|
-
this.enabledUserInput = false;
|
|
3463
|
-
this.isConnected = true; // By default, the chat is considered connected
|
|
3464
|
-
// Flag to track whether the 'reconnected' listener is already registered
|
|
3465
|
-
this._isReconnectedListenerRegistered = false;
|
|
3466
|
-
this.defaultIssueTypes = [
|
|
3467
|
-
'chat.userInterfaceBug',
|
|
3468
|
-
'chat.incorrectResponse',
|
|
3469
|
-
'chat.incompleteResponse',
|
|
3470
|
-
'chat.technicalIssue',
|
|
3471
|
-
'chat.privacyDataSecurityIssue',
|
|
3472
|
-
'chat.otherIssue'
|
|
3473
|
-
];
|
|
3474
|
-
this.issueType = '';
|
|
3475
|
-
this.reportType = 'dislike';
|
|
3476
|
-
this.showReport = false;
|
|
3477
|
-
this.showDebugMessages = false;
|
|
3478
|
-
this._reloadSubscription = undefined;
|
|
3479
3583
|
this.destroyRef.onDestroy(async () => {
|
|
3480
3584
|
console.log(`Destroying ChatComponent: ${this.instanceId} \n along with ChatService: ${this.chatService.chatInstanceId} \n and stopping connection: ${this.chatService.connection?.connectionId}`);
|
|
3481
3585
|
if (this.chatService.connection && this.chatService.connection.state !== HubConnectionState.Disconnected && this.chatService.connection.state !== HubConnectionState.Disconnecting) {
|
|
@@ -3525,6 +3629,11 @@ class ChatComponent {
|
|
|
3525
3629
|
}
|
|
3526
3630
|
ngOnChanges(changes) {
|
|
3527
3631
|
this.changes$.next(changes);
|
|
3632
|
+
if (changes.collapsed) {
|
|
3633
|
+
setTimeout(() => {
|
|
3634
|
+
this._addScrollListener();
|
|
3635
|
+
});
|
|
3636
|
+
}
|
|
3528
3637
|
if (this.config) {
|
|
3529
3638
|
this._handleChanges();
|
|
3530
3639
|
}
|
|
@@ -3673,6 +3782,9 @@ class ChatComponent {
|
|
|
3673
3782
|
*/
|
|
3674
3783
|
_addScrollListener() {
|
|
3675
3784
|
const messageList = document.getElementById(`messageList-${this.instanceId}`);
|
|
3785
|
+
if (!messageList) {
|
|
3786
|
+
return;
|
|
3787
|
+
}
|
|
3676
3788
|
merge(this.loading$, this.messages$, this.chatService.streaming$, fromEvent(messageList, 'scroll'))
|
|
3677
3789
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
3678
3790
|
.subscribe(() => {
|
|
@@ -4426,17 +4538,17 @@ class ChatComponent {
|
|
|
4426
4538
|
}
|
|
4427
4539
|
return false;
|
|
4428
4540
|
}
|
|
4429
|
-
static
|
|
4430
|
-
static
|
|
4541
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4542
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatComponent, isStandalone: true, selector: "sq-chat-v3", inputs: { instanceId: "instanceId", query: "query", queryChangeShouldTriggerReload: "queryChangeShouldTriggerReload", messageHandlers: "messageHandlers", automaticScrollToLastResponse: "automaticScrollToLastResponse", focusAfterResponse: "focusAfterResponse", chat: "chat", assistantMessageIcon: "assistantMessageIcon", userMessageIcon: "userMessageIcon", connectionErrorMessageIcon: "connectionErrorMessageIcon", searchWarningMessageIcon: "searchWarningMessageIcon", additionalWorkflowProperties: "additionalWorkflowProperties", appConfig: "appConfig", collapsed: "collapsed" }, outputs: { connection: "connection", loading$: "loading", _config: "config", data: "data", openDocument: "openDocument", openPreview: "openPreview", suggestAction: "suggestAction" }, providers: [
|
|
4431
4543
|
ChatService,
|
|
4432
4544
|
AssistantConfigurationService,
|
|
4433
4545
|
AssistantTokensTrackingService,
|
|
4434
4546
|
SavedChatsService,
|
|
4435
4547
|
DebugMessageService,
|
|
4436
4548
|
provideTranslocoScope('chat')
|
|
4437
|
-
], queries: [{ propertyName: "loadingTpl", first: true, predicate: ["loadingTpl"], descendants: true }, { propertyName: "reportTpl", first: true, predicate: ["reportTpl"], descendants: true }, { propertyName: "tokenConsumptionTpl", first: true, predicate: ["tokenConsumptionTpl"], descendants: true }, { propertyName: "debugMessagesTpl", first: true, predicate: ["debugMessagesTpl"], descendants: true }], viewQueries: [{ propertyName: "questionInput", first: true, predicate: ["questionInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n <!-- Token consumption -->\n <div class=\"ms-1\" *ngIf=\"config?.globalSettings?.displayUserQuotaConsumption || config?.globalSettings?.displayChatTokensConsumption\">\n <ng-container *ngTemplateOutlet=\"tokenConsumptionTpl || defaultTokenConsumptionTpl; context: { $implicit: instanceId }\"></ng-container>\n </div>\n\n <!-- Chat Messages -->\n <ul class=\"d-flex flex-column list-unstyled gap-3 overflow-auto flex-grow-1 pe-2 pb-2\" #messageList [id]=\"'messageList-' + instanceId\">\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\"\n *ngIf=\"message.additionalProperties.display && !isEmptyAssistantMessage(message)\"\n [style.--bs-list-group-item-padding-y.rem]=\"'0.6'\"\n [class.opacity-50]=\"indexMessageToEdit && (indexMessageToEdit < (index + 1))\">\n <sq-chat-message\n [id]=\"message.additionalProperties.messageId\"\n [class.sq-user-message]=\"message.role === 'user'\"\n [class.last-message]=\"last\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [suggestedActions]=\"last ? message.additionalProperties.$suggestedAction : undefined\"\n [assistantMessageIcon]=\"assistantMessageIcon\"\n [userMessageIcon]=\"userMessageIcon\"\n [connectionErrorMessageIcon]=\"connectionErrorMessageIcon\"\n [searchWarningMessageIcon]=\"searchWarningMessageIcon\"\n [streaming]=\"(chatService.streaming$ | async) && (last || isAssistantLastMessages(messages, index))\"\n [canEdit]=\"(chatService.streaming$ | async) === false && indexMessageToEdit === undefined && message.role === 'user'\"\n [canCopy]=\"((chatService.streaming$ | async) === false || !last) && indexMessageToEdit === undefined && message.role !== 'connection-error' && message.role !== 'search-warning'\"\n [canLike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDislike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDebug]=\"(((chatService.streaming$ | async) === false && last) || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && (getDebugMessages(message, index).length > 0) && ((isAdminOrDeletedAdmin || (chatService.userOverride$ | async)) && config?.defaultValues.debug)\"\n [canRegenerate]=\"(chatService.streaming$ | async) === false && (last || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && indexMessageToEdit === undefined\"\n [collapseReferences]=\"!!config?.globalSettings.collapseReferences\"\n (edit)=\"editMessage(message, index)\"\n (copy)=\"copyMessage(message, index)\"\n (regenerate)=\"regenerateMessage(message, index)\"\n (openDocument)=\"openOriginalAttachment($event, message, index)\"\n (openPreview)=\"openAttachmentPreview($event, message, index)\"\n (suggestAction)=\"suggestActionClick($event, index)\"\n (like)=\"onLike(message, index)\"\n (dislike)=\"onDislike(message, index)\"\n (debug)=\"showDebug(message, index)\">\n </sq-chat-message>\n </li>\n </ng-container>\n <!-- Loading spinner -->\n <li *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <!-- Reporting a feedback form -->\n <div class=\"issue-report p-3 rounded-lg\" *ngIf=\"showReport\">\n <ng-container *ngTemplateOutlet=\"reportTpl || reportTplDefault; context: { $implicit: messageToReport, rank: reportRank, type: reportType }\"></ng-container>\n </div>\n\n <!-- User text input -->\n @if (!showReport) {\n <div class=\"user-input mt-auto\">\n <div class=\"py-2\">\n <div [hidden]=\"!isConnected\">\n <ng-container *ngIf=\"enabledUserInput\" [ngTemplateOutlet]=\"inputTpl\"></ng-container>\n </div>\n <!-- Retry button -->\n <!-- hidden attribute is in conflict with a css rule display: flex -->\n @if(!isConnected){\n <button class=\"btn mb-4 ast-error ast-btn sq-retry\" (click)=\"retryFetch()\">\n <span>{{ 'chat.tryAgain' | transloco }}</span>\n <span *ngIf=\"retrialAttempts\" class=\"ms-2 attempts\">{{ retrialAttempts }}</span>\n </button>\n }\n <div class=\"text-end small text-muted px-3\" *ngIf=\"!!config?.globalSettings?.disclaimer\">\n {{ config?.globalSettings?.disclaimer | transloco }}\n </div>\n </div>\n </div>\n }\n\n <!-- Floating scroll button -->\n <div *ngIf=\"!isAtBottom && !showReport\" class=\"sq-floating-scroll\" [ngClass]=\"enabledUserInput ? 'sq-floating-scroll--when-user-input' : 'sq-floating-scroll--without-user-input'\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\" aria-label=\"Scroll down\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-primary d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'chat.loading' | transloco }}</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <button disabled class=\"btn btn-light\" aria-label=\"search\">\n <i class=\"fas fa-search\"></i>\n </button>\n <textarea #questionInput rows=\"1\"\n type=\"text\" class=\"form-control\"\n [placeholder]=\"'chat.askSomething' | transloco\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n (keydown)=\"calculateHeight($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\">\n </textarea>\n <div id=\"chat-actions\" class=\"d-flex gap-2\">\n <button\n *ngIf=\"(chatService.streaming$ | async) === false && (loading$ | async) !== true && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Send message\"\n [sqTooltip]=\"'chat.sendMessage' | transloco\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <button\n *ngIf=\"indexMessageToEdit\"\n aria-label=\"Cancel edition\"\n type=\"button\"\n class=\"btn btn-light\"\n [sqTooltip]=\"'chat.cancelEdition' | transloco\"\n (click)=\"indexMessageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <span *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\" class=\"processing\">\n {{ 'chat.generating' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <span *ngIf=\"(chatService.stoppingGeneration$ | async)\" class=\"processing\">\n {{ 'chat.stopping' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <button\n *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Stop generating\"\n [sqTooltip]=\"'chat.stopGeneration' | transloco\"\n (click)=\"stopGeneration()\">\n <i class=\"fas fa-stop\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reportTplDefault let-message let-rank=\"rank\" let-type=\"type\">\n <div class=\"px-3\">\n <ng-container *ngIf=\"type === 'dislike'\">\n <h5>{{ 'chat.issueType' | transloco }}</h5>\n <select class=\"form-select mb-4\" [(ngModel)]=\"issueType\">\n <option [value]=\"''\">{{ 'chat.chooseIssueType' | transloco }}</option>\n <option *ngFor=\"let type of (issueTypes ?? defaultIssueTypes)\" [value]=\"type\">{{ type | transloco }}</option>\n </select>\n <h5>{{ 'chat.askUnlikeReasons' | transloco }}</h5>\n </ng-container>\n <ng-container *ngIf=\"type === 'like'\">\n <h5>{{ 'chat.askLikeReasons' | transloco }}</h5>\n </ng-container>\n <textarea class=\"form-control border border-neutral-200\" [(ngModel)]=\"reportComment\" [placeholder]=\"'chat.writeComment' | transloco\"></textarea>\n <div class=\"d-flex flex-row-reverse gap-1 mt-2\">\n <button class=\"btn btn-primary\" [disabled]=\"type === 'dislike' && !issueType\" (click)=\"sendReport()\">{{ 'chat.send' | transloco }}</button>\n <button class=\"btn btn-light\" (click)=\"ignoreReport()\">{{ 'chat.doNotSend' | transloco }}</button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultTokenConsumptionTpl let-instanceId>\n <sq-token-progress-bar\n [instanceId]=\"instanceId\">\n </sq-token-progress-bar>\n</ng-template>\n\n<div class=\"debug-messages\" [class.displayed]=\"showDebugMessages\">\n <button *ngIf=\"showDebugMessages\" class=\"btn btn-light shadow back-btn\" (click)=\"showDebugMessages=false\" aria-label=\"Hide debug messages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <ng-container *ngTemplateOutlet=\"debugMessagesTpl || defaultDebugMessagesTpl; context: { $implicit: debugMessages }\">\n </ng-container>\n</div>\n\n<ng-template #defaultDebugMessagesTpl let-debugMessages>\n <sq-debug-message [data]=\"debugMessages\"></sq-debug-message>\n</ng-template>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{font-size:.875rem}:host>div>.user-input>div:not(.progress),:host>div>.issue-report>div,:host>div>ul>li{width:var(--ast-chat-container-width, 100%);max-width:100%;margin-left:auto;margin-right:auto}:host>div>ul{padding-top:var(--ast-chat-padding-top, 0);padding-bottom:var(--ast-chat-padding-bottom, 0)}li.attachment>p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:3}li.attachment.expanded>p{display:block}.progress{--bs-progress-height: 3px}.progress.disabled{--bs-progress-height: 20px;--bs-progress-bar-bg: var(--bs-danger)}.user-input{z-index:1}.user-input ul.list-group{max-height:30vh}.form-control:disabled{background-color:#ededed}a.disabled{cursor:default;opacity:.5}.no-max-height{max-height:initial!important}.sq-floating-scroll{position:absolute;right:50%;text-align:center}.sq-floating-scroll--when-user-input{bottom:75px}.sq-floating-scroll--without-user-input{bottom:15px}.sq-floating-scroll .btn{background-color:#fff}.sq-floating-scroll .btn:hover{background-color:#fff;opacity:.9}.ast-input-container{display:flex;align-items:center;background-color:var(--ast-input-bg, #F8F8F8);border-radius:var(--ast-size-3, .75rem)}.ast-input-container>i{padding-left:var(--ast-size-3, .75rem);color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container textarea{padding-left:var(--ast-size-3, .75rem);padding-right:var(--ast-size-3, .75rem);resize:none}.ast-input-container textarea,.ast-input-container button,.ast-input-container button:hover{background-color:transparent;border:0}.ast-input-container button:hover{color:var(--ast-primary-color, #005DA7)}.ast-input-container button:not(:hover){color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container .processing{display:flex;align-items:center;color:var(--ast-secondary-color, #FF732E);gap:.5rem}sq-chat-message.sq-user-message{float:var(--ast-user-message-float, none)}sq-token-progress-bar{z-index:10;position:absolute;top:0;right:0}.debug-messages{position:fixed;z-index:999999;right:-60%;top:0;width:60%;height:100%;transition:all .5s ease;background-color:var(--bs-body-bg);overflow:auto}.debug-messages .back-btn{position:fixed;right:0%;transition:all .5s ease}.debug-messages.displayed{right:0}.debug-messages.displayed .back-btn{right:60%}.debug-messages sq-debug-message:first-of-type{display:block;width:100%}.btn.sq-retry{display:flex;margin:auto;background:var(--ast-error-bg, rgba(249, 58, 55, .2));font-weight:var(--font-weight-bold, 500)}.btn.sq-retry .attempts{display:flex;border-radius:100%;background:#fff;height:20px;width:20px;place-content:center;align-items:center}.issue-report{background-color:var(--ast-report-bg, white)}.text-end{text-align:right}.small{font-size:.875em}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.d-flex{display:flex}.flex-row-reverse{flex-direction:row-reverse}.flex-grow-1{flex-grow:1}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.d-block{display:block}.btn{--bs-border-radius: .25rem;--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:disabled{background-color:var(--bs-body-bg)}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width, 1px) solid var(--bs-border-color, oklch(92.2% 0 0));border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChatMessageComponent, selector: "sq-chat-message", inputs: ["id", "message", "conversation", "suggestedActions", "assistantMessageIcon", "userMessageIcon", "connectionErrorMessageIcon", "searchWarningMessageIcon", "streaming", "canEdit", "canRegenerate", "canCopy", "canDebug", "canLike", "canDislike", "collapseReferences"], outputs: ["openDocument", "openPreview", "suggestAction", "edit", "copy", "regenerate", "like", "dislike", "debug"] }, { kind: "component", type: TokenProgressBarComponent, selector: "sq-token-progress-bar", inputs: ["instanceId"] }, { kind: "component", type: DebugMessageComponent, selector: "sq-debug-message", inputs: ["data"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4549
|
+
], queries: [{ propertyName: "loadingTpl", first: true, predicate: ["loadingTpl"], descendants: true }, { propertyName: "reportTpl", first: true, predicate: ["reportTpl"], descendants: true }, { propertyName: "tokenConsumptionTpl", first: true, predicate: ["tokenConsumptionTpl"], descendants: true }, { propertyName: "debugMessagesTpl", first: true, predicate: ["debugMessagesTpl"], descendants: true }], viewQueries: [{ propertyName: "questionInput", first: true, predicate: ["questionInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n <!-- Token consumption -->\n <div class=\"ms-1\" *ngIf=\"config?.globalSettings?.displayUserQuotaConsumption || config?.globalSettings?.displayChatTokensConsumption\">\n <ng-container *ngTemplateOutlet=\"tokenConsumptionTpl || defaultTokenConsumptionTpl; context: { $implicit: instanceId }\"></ng-container>\n </div>\n\n <!-- Chat Messages -->\n <ul class=\"d-flex flex-column list-unstyled gap-3 overflow-auto flex-grow-1 pe-2 pb-2\" #messageList [id]=\"'messageList-' + instanceId\">\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\"\n *ngIf=\"message.additionalProperties.display && !isEmptyAssistantMessage(message)\"\n [style.--bs-list-group-item-padding-y.rem]=\"'0.6'\"\n [class.opacity-50]=\"indexMessageToEdit && (indexMessageToEdit < (index + 1))\">\n <sq-chat-message\n [id]=\"message.additionalProperties.messageId\"\n [class.sq-user-message]=\"message.role === 'user'\"\n [class.last-message]=\"last\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [suggestedActions]=\"last ? message.additionalProperties.$suggestedAction : undefined\"\n [assistantMessageIcon]=\"assistantMessageIcon\"\n [userMessageIcon]=\"userMessageIcon\"\n [connectionErrorMessageIcon]=\"connectionErrorMessageIcon\"\n [searchWarningMessageIcon]=\"searchWarningMessageIcon\"\n [streaming]=\"(chatService.streaming$ | async) && (last || isAssistantLastMessages(messages, index))\"\n [canEdit]=\"(chatService.streaming$ | async) === false && indexMessageToEdit === undefined && message.role === 'user'\"\n [canCopy]=\"((chatService.streaming$ | async) === false || !last) && indexMessageToEdit === undefined && message.role !== 'connection-error' && message.role !== 'search-warning'\"\n [canLike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDislike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDebug]=\"(((chatService.streaming$ | async) === false && last) || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && (getDebugMessages(message, index).length > 0) && ((isAdminOrDeletedAdmin || (chatService.userOverride$ | async)) && config?.defaultValues.debug)\"\n [canRegenerate]=\"(chatService.streaming$ | async) === false && (last || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && indexMessageToEdit === undefined\"\n [collapseReferences]=\"!!config?.globalSettings.collapseReferences\"\n (edit)=\"editMessage(message, index)\"\n (copy)=\"copyMessage(message, index)\"\n (regenerate)=\"regenerateMessage(message, index)\"\n (openDocument)=\"openOriginalAttachment($event, message, index)\"\n (openPreview)=\"openAttachmentPreview($event, message, index)\"\n (suggestAction)=\"suggestActionClick($event, index)\"\n (like)=\"onLike(message, index)\"\n (dislike)=\"onDislike(message, index)\"\n (debug)=\"showDebug(message, index)\">\n </sq-chat-message>\n </li>\n </ng-container>\n <!-- Loading spinner -->\n <li *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <!-- Reporting a feedback form -->\n <div class=\"issue-report p-3 rounded-lg\" *ngIf=\"showReport\">\n <ng-container *ngTemplateOutlet=\"reportTpl || reportTplDefault; context: { $implicit: messageToReport, rank: reportRank, type: reportType }\"></ng-container>\n </div>\n\n <!-- User text input -->\n @if (!showReport) {\n <div class=\"user-input mt-auto\">\n <div class=\"py-2\">\n <div [hidden]=\"!isConnected\">\n <ng-container *ngIf=\"enabledUserInput\" [ngTemplateOutlet]=\"inputTpl\"></ng-container>\n </div>\n <!-- Retry button -->\n <!-- hidden attribute is in conflict with a css rule display: flex -->\n @if(!isConnected){\n <button class=\"btn mb-4 ast-error ast-btn sq-retry\" (click)=\"retryFetch()\">\n <span>{{ 'chat.tryAgain' | transloco }}</span>\n <span *ngIf=\"retrialAttempts\" class=\"ms-2 attempts\">{{ retrialAttempts }}</span>\n </button>\n }\n <div class=\"text-end small text-muted px-3\" *ngIf=\"!!config?.globalSettings?.disclaimer\">\n {{ config?.globalSettings?.disclaimer | transloco }}\n </div>\n </div>\n </div>\n }\n\n <!-- Floating scroll button -->\n <div *ngIf=\"!isAtBottom && !showReport\" class=\"sq-floating-scroll\" [ngClass]=\"enabledUserInput ? 'sq-floating-scroll--when-user-input' : 'sq-floating-scroll--without-user-input'\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\" aria-label=\"Scroll down\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-primary d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'chat.loading' | transloco }}</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <button disabled class=\"btn btn-light\" aria-label=\"search\">\n <i class=\"fas fa-search\"></i>\n </button>\n <textarea #questionInput rows=\"1\"\n type=\"text\" class=\"form-control\"\n [placeholder]=\"'chat.askSomething' | transloco\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n (keydown)=\"calculateHeight($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\">\n </textarea>\n <div id=\"chat-actions\" class=\"d-flex gap-2\">\n <button\n *ngIf=\"(chatService.streaming$ | async) === false && (loading$ | async) !== true && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Send message\"\n [sqTooltip]=\"'chat.sendMessage' | transloco\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <button\n *ngIf=\"indexMessageToEdit\"\n aria-label=\"Cancel edition\"\n type=\"button\"\n class=\"btn btn-light\"\n [sqTooltip]=\"'chat.cancelEdition' | transloco\"\n (click)=\"indexMessageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <span *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\" class=\"processing\">\n {{ 'chat.generating' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <span *ngIf=\"(chatService.stoppingGeneration$ | async)\" class=\"processing\">\n {{ 'chat.stopping' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <button\n *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Stop generating\"\n [sqTooltip]=\"'chat.stopGeneration' | transloco\"\n (click)=\"stopGeneration()\">\n <i class=\"fas fa-stop\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reportTplDefault let-message let-rank=\"rank\" let-type=\"type\">\n <div class=\"px-3\">\n <ng-container *ngIf=\"type === 'dislike'\">\n <h5>{{ 'chat.issueType' | transloco }}</h5>\n <select class=\"form-select mb-4\" [(ngModel)]=\"issueType\">\n <option [value]=\"''\">{{ 'chat.chooseIssueType' | transloco }}</option>\n <option *ngFor=\"let type of (issueTypes ?? defaultIssueTypes)\" [value]=\"type\">{{ type | transloco }}</option>\n </select>\n <h5>{{ 'chat.askUnlikeReasons' | transloco }}</h5>\n </ng-container>\n <ng-container *ngIf=\"type === 'like'\">\n <h5>{{ 'chat.askLikeReasons' | transloco }}</h5>\n </ng-container>\n <textarea class=\"form-control border border-neutral-200\" [(ngModel)]=\"reportComment\" [placeholder]=\"'chat.writeComment' | transloco\"></textarea>\n <div class=\"d-flex flex-row-reverse gap-1 mt-2\">\n <button class=\"btn btn-primary\" [disabled]=\"type === 'dislike' && !issueType\" (click)=\"sendReport()\">{{ 'chat.send' | transloco }}</button>\n <button class=\"btn btn-light\" (click)=\"ignoreReport()\">{{ 'chat.doNotSend' | transloco }}</button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultTokenConsumptionTpl let-instanceId>\n <sq-token-progress-bar\n [instanceId]=\"instanceId\">\n </sq-token-progress-bar>\n</ng-template>\n\n<div class=\"debug-messages\" [class.displayed]=\"showDebugMessages\">\n <button *ngIf=\"showDebugMessages\" class=\"btn btn-light shadow back-btn\" (click)=\"showDebugMessages=false\" aria-label=\"Hide debug messages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <ng-container *ngTemplateOutlet=\"debugMessagesTpl || defaultDebugMessagesTpl; context: { $implicit: debugMessages }\">\n </ng-container>\n</div>\n\n<ng-template #defaultDebugMessagesTpl let-debugMessages>\n <sq-debug-message [data]=\"debugMessages\"></sq-debug-message>\n</ng-template>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{font-size:.875rem}:host>div>.user-input>div:not(.progress),:host>div>.issue-report>div,:host>div>ul>li{width:var(--ast-chat-container-width, 100%);max-width:100%;margin-left:auto;margin-right:auto}:host>div>ul{padding-top:var(--ast-chat-padding-top, 0);padding-bottom:var(--ast-chat-padding-bottom, 0)}li.attachment>p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:3}li.attachment.expanded>p{display:block}.progress{--bs-progress-height: 3px}.progress.disabled{--bs-progress-height: 20px;--bs-progress-bar-bg: var(--bs-danger)}.user-input{z-index:1}.user-input ul.list-group{max-height:30vh}.form-control:disabled{background-color:#ededed}a.disabled{cursor:default;opacity:.5}.no-max-height{max-height:initial!important}.sq-floating-scroll{position:absolute;right:50%;text-align:center}.sq-floating-scroll--when-user-input{bottom:75px}.sq-floating-scroll--without-user-input{bottom:15px}.sq-floating-scroll .btn{background-color:#fff}.sq-floating-scroll .btn:hover{background-color:#fff;opacity:.9}.ast-input-container{display:flex;align-items:center;background-color:var(--ast-input-bg, #F8F8F8);border-radius:var(--ast-size-3, .75rem)}.ast-input-container>i{padding-left:var(--ast-size-3, .75rem);color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container textarea{padding-left:var(--ast-size-3, .75rem);padding-right:var(--ast-size-3, .75rem);resize:none}.ast-input-container textarea,.ast-input-container button,.ast-input-container button:hover{background-color:transparent;border:0}.ast-input-container button:hover{color:var(--ast-primary-color, #005DA7)}.ast-input-container button:not(:hover){color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container .processing{display:flex;align-items:center;color:var(--ast-secondary-color, #FF732E);gap:.5rem}sq-chat-message.sq-user-message{float:var(--ast-user-message-float, none)}sq-token-progress-bar{z-index:10;position:absolute;top:0;right:0}.debug-messages{position:fixed;z-index:999999;right:-60%;top:0;width:60%;height:100%;transition:all .5s ease;background-color:var(--bs-body-bg);overflow:auto}.debug-messages .back-btn{position:fixed;right:0%;transition:all .5s ease}.debug-messages.displayed{right:0}.debug-messages.displayed .back-btn{right:60%}.debug-messages sq-debug-message:first-of-type{display:block;width:100%}.btn.sq-retry{display:flex;margin:auto;background:var(--ast-error-bg, rgba(249, 58, 55, .2));font-weight:var(--font-weight-bold, 500)}.btn.sq-retry .attempts{display:flex;border-radius:100%;background:#fff;height:20px;width:20px;place-content:center;align-items:center}.issue-report{background-color:var(--ast-report-bg, white)}.text-end{text-align:right}.small{font-size:.875em}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.d-flex{display:flex}.flex-row-reverse{flex-direction:row-reverse}.flex-grow-1{flex-grow:1}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.d-block{display:block}.btn{--bs-border-radius: .25rem;--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:disabled{background-color:var(--bs-body-bg)}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width, 1px) solid var(--bs-border-color, oklch(92.2% 0 0deg));border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChatMessageComponent, selector: "sq-chat-message", inputs: ["id", "message", "conversation", "suggestedActions", "assistantMessageIcon", "userMessageIcon", "connectionErrorMessageIcon", "searchWarningMessageIcon", "streaming", "canEdit", "canRegenerate", "canCopy", "canDebug", "canLike", "canDislike", "collapseReferences"], outputs: ["openDocument", "openPreview", "suggestAction", "edit", "copy", "regenerate", "like", "dislike", "debug"] }, { kind: "component", type: TokenProgressBarComponent, selector: "sq-token-progress-bar", inputs: ["instanceId"] }, { kind: "component", type: DebugMessageComponent, selector: "sq-debug-message", inputs: ["data"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4438
4550
|
}
|
|
4439
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatComponent, decorators: [{
|
|
4440
4552
|
type: Component,
|
|
4441
4553
|
args: [{ selector: 'sq-chat-v3', providers: [
|
|
4442
4554
|
ChatService,
|
|
@@ -4445,7 +4557,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
4445
4557
|
SavedChatsService,
|
|
4446
4558
|
DebugMessageService,
|
|
4447
4559
|
provideTranslocoScope('chat')
|
|
4448
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormsModule, ChatMessageComponent, TokenProgressBarComponent, DebugMessageComponent, TooltipDirective, TranslocoPipe], template: "<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n <!-- Token consumption -->\n <div class=\"ms-1\" *ngIf=\"config?.globalSettings?.displayUserQuotaConsumption || config?.globalSettings?.displayChatTokensConsumption\">\n <ng-container *ngTemplateOutlet=\"tokenConsumptionTpl || defaultTokenConsumptionTpl; context: { $implicit: instanceId }\"></ng-container>\n </div>\n\n <!-- Chat Messages -->\n <ul class=\"d-flex flex-column list-unstyled gap-3 overflow-auto flex-grow-1 pe-2 pb-2\" #messageList [id]=\"'messageList-' + instanceId\">\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\"\n *ngIf=\"message.additionalProperties.display && !isEmptyAssistantMessage(message)\"\n [style.--bs-list-group-item-padding-y.rem]=\"'0.6'\"\n [class.opacity-50]=\"indexMessageToEdit && (indexMessageToEdit < (index + 1))\">\n <sq-chat-message\n [id]=\"message.additionalProperties.messageId\"\n [class.sq-user-message]=\"message.role === 'user'\"\n [class.last-message]=\"last\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [suggestedActions]=\"last ? message.additionalProperties.$suggestedAction : undefined\"\n [assistantMessageIcon]=\"assistantMessageIcon\"\n [userMessageIcon]=\"userMessageIcon\"\n [connectionErrorMessageIcon]=\"connectionErrorMessageIcon\"\n [searchWarningMessageIcon]=\"searchWarningMessageIcon\"\n [streaming]=\"(chatService.streaming$ | async) && (last || isAssistantLastMessages(messages, index))\"\n [canEdit]=\"(chatService.streaming$ | async) === false && indexMessageToEdit === undefined && message.role === 'user'\"\n [canCopy]=\"((chatService.streaming$ | async) === false || !last) && indexMessageToEdit === undefined && message.role !== 'connection-error' && message.role !== 'search-warning'\"\n [canLike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDislike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDebug]=\"(((chatService.streaming$ | async) === false && last) || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && (getDebugMessages(message, index).length > 0) && ((isAdminOrDeletedAdmin || (chatService.userOverride$ | async)) && config?.defaultValues.debug)\"\n [canRegenerate]=\"(chatService.streaming$ | async) === false && (last || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && indexMessageToEdit === undefined\"\n [collapseReferences]=\"!!config?.globalSettings.collapseReferences\"\n (edit)=\"editMessage(message, index)\"\n (copy)=\"copyMessage(message, index)\"\n (regenerate)=\"regenerateMessage(message, index)\"\n (openDocument)=\"openOriginalAttachment($event, message, index)\"\n (openPreview)=\"openAttachmentPreview($event, message, index)\"\n (suggestAction)=\"suggestActionClick($event, index)\"\n (like)=\"onLike(message, index)\"\n (dislike)=\"onDislike(message, index)\"\n (debug)=\"showDebug(message, index)\">\n </sq-chat-message>\n </li>\n </ng-container>\n <!-- Loading spinner -->\n <li *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <!-- Reporting a feedback form -->\n <div class=\"issue-report p-3 rounded-lg\" *ngIf=\"showReport\">\n <ng-container *ngTemplateOutlet=\"reportTpl || reportTplDefault; context: { $implicit: messageToReport, rank: reportRank, type: reportType }\"></ng-container>\n </div>\n\n <!-- User text input -->\n @if (!showReport) {\n <div class=\"user-input mt-auto\">\n <div class=\"py-2\">\n <div [hidden]=\"!isConnected\">\n <ng-container *ngIf=\"enabledUserInput\" [ngTemplateOutlet]=\"inputTpl\"></ng-container>\n </div>\n <!-- Retry button -->\n <!-- hidden attribute is in conflict with a css rule display: flex -->\n @if(!isConnected){\n <button class=\"btn mb-4 ast-error ast-btn sq-retry\" (click)=\"retryFetch()\">\n <span>{{ 'chat.tryAgain' | transloco }}</span>\n <span *ngIf=\"retrialAttempts\" class=\"ms-2 attempts\">{{ retrialAttempts }}</span>\n </button>\n }\n <div class=\"text-end small text-muted px-3\" *ngIf=\"!!config?.globalSettings?.disclaimer\">\n {{ config?.globalSettings?.disclaimer | transloco }}\n </div>\n </div>\n </div>\n }\n\n <!-- Floating scroll button -->\n <div *ngIf=\"!isAtBottom && !showReport\" class=\"sq-floating-scroll\" [ngClass]=\"enabledUserInput ? 'sq-floating-scroll--when-user-input' : 'sq-floating-scroll--without-user-input'\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\" aria-label=\"Scroll down\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-primary d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'chat.loading' | transloco }}</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <button disabled class=\"btn btn-light\" aria-label=\"search\">\n <i class=\"fas fa-search\"></i>\n </button>\n <textarea #questionInput rows=\"1\"\n type=\"text\" class=\"form-control\"\n [placeholder]=\"'chat.askSomething' | transloco\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n (keydown)=\"calculateHeight($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\">\n </textarea>\n <div id=\"chat-actions\" class=\"d-flex gap-2\">\n <button\n *ngIf=\"(chatService.streaming$ | async) === false && (loading$ | async) !== true && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Send message\"\n [sqTooltip]=\"'chat.sendMessage' | transloco\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <button\n *ngIf=\"indexMessageToEdit\"\n aria-label=\"Cancel edition\"\n type=\"button\"\n class=\"btn btn-light\"\n [sqTooltip]=\"'chat.cancelEdition' | transloco\"\n (click)=\"indexMessageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <span *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\" class=\"processing\">\n {{ 'chat.generating' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <span *ngIf=\"(chatService.stoppingGeneration$ | async)\" class=\"processing\">\n {{ 'chat.stopping' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <button\n *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Stop generating\"\n [sqTooltip]=\"'chat.stopGeneration' | transloco\"\n (click)=\"stopGeneration()\">\n <i class=\"fas fa-stop\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reportTplDefault let-message let-rank=\"rank\" let-type=\"type\">\n <div class=\"px-3\">\n <ng-container *ngIf=\"type === 'dislike'\">\n <h5>{{ 'chat.issueType' | transloco }}</h5>\n <select class=\"form-select mb-4\" [(ngModel)]=\"issueType\">\n <option [value]=\"''\">{{ 'chat.chooseIssueType' | transloco }}</option>\n <option *ngFor=\"let type of (issueTypes ?? defaultIssueTypes)\" [value]=\"type\">{{ type | transloco }}</option>\n </select>\n <h5>{{ 'chat.askUnlikeReasons' | transloco }}</h5>\n </ng-container>\n <ng-container *ngIf=\"type === 'like'\">\n <h5>{{ 'chat.askLikeReasons' | transloco }}</h5>\n </ng-container>\n <textarea class=\"form-control border border-neutral-200\" [(ngModel)]=\"reportComment\" [placeholder]=\"'chat.writeComment' | transloco\"></textarea>\n <div class=\"d-flex flex-row-reverse gap-1 mt-2\">\n <button class=\"btn btn-primary\" [disabled]=\"type === 'dislike' && !issueType\" (click)=\"sendReport()\">{{ 'chat.send' | transloco }}</button>\n <button class=\"btn btn-light\" (click)=\"ignoreReport()\">{{ 'chat.doNotSend' | transloco }}</button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultTokenConsumptionTpl let-instanceId>\n <sq-token-progress-bar\n [instanceId]=\"instanceId\">\n </sq-token-progress-bar>\n</ng-template>\n\n<div class=\"debug-messages\" [class.displayed]=\"showDebugMessages\">\n <button *ngIf=\"showDebugMessages\" class=\"btn btn-light shadow back-btn\" (click)=\"showDebugMessages=false\" aria-label=\"Hide debug messages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <ng-container *ngTemplateOutlet=\"debugMessagesTpl || defaultDebugMessagesTpl; context: { $implicit: debugMessages }\">\n </ng-container>\n</div>\n\n<ng-template #defaultDebugMessagesTpl let-debugMessages>\n <sq-debug-message [data]=\"debugMessages\"></sq-debug-message>\n</ng-template>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{font-size:.875rem}:host>div>.user-input>div:not(.progress),:host>div>.issue-report>div,:host>div>ul>li{width:var(--ast-chat-container-width, 100%);max-width:100%;margin-left:auto;margin-right:auto}:host>div>ul{padding-top:var(--ast-chat-padding-top, 0);padding-bottom:var(--ast-chat-padding-bottom, 0)}li.attachment>p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:3}li.attachment.expanded>p{display:block}.progress{--bs-progress-height: 3px}.progress.disabled{--bs-progress-height: 20px;--bs-progress-bar-bg: var(--bs-danger)}.user-input{z-index:1}.user-input ul.list-group{max-height:30vh}.form-control:disabled{background-color:#ededed}a.disabled{cursor:default;opacity:.5}.no-max-height{max-height:initial!important}.sq-floating-scroll{position:absolute;right:50%;text-align:center}.sq-floating-scroll--when-user-input{bottom:75px}.sq-floating-scroll--without-user-input{bottom:15px}.sq-floating-scroll .btn{background-color:#fff}.sq-floating-scroll .btn:hover{background-color:#fff;opacity:.9}.ast-input-container{display:flex;align-items:center;background-color:var(--ast-input-bg, #F8F8F8);border-radius:var(--ast-size-3, .75rem)}.ast-input-container>i{padding-left:var(--ast-size-3, .75rem);color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container textarea{padding-left:var(--ast-size-3, .75rem);padding-right:var(--ast-size-3, .75rem);resize:none}.ast-input-container textarea,.ast-input-container button,.ast-input-container button:hover{background-color:transparent;border:0}.ast-input-container button:hover{color:var(--ast-primary-color, #005DA7)}.ast-input-container button:not(:hover){color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container .processing{display:flex;align-items:center;color:var(--ast-secondary-color, #FF732E);gap:.5rem}sq-chat-message.sq-user-message{float:var(--ast-user-message-float, none)}sq-token-progress-bar{z-index:10;position:absolute;top:0;right:0}.debug-messages{position:fixed;z-index:999999;right:-60%;top:0;width:60%;height:100%;transition:all .5s ease;background-color:var(--bs-body-bg);overflow:auto}.debug-messages .back-btn{position:fixed;right:0%;transition:all .5s ease}.debug-messages.displayed{right:0}.debug-messages.displayed .back-btn{right:60%}.debug-messages sq-debug-message:first-of-type{display:block;width:100%}.btn.sq-retry{display:flex;margin:auto;background:var(--ast-error-bg, rgba(249, 58, 55, .2));font-weight:var(--font-weight-bold, 500)}.btn.sq-retry .attempts{display:flex;border-radius:100%;background:#fff;height:20px;width:20px;place-content:center;align-items:center}.issue-report{background-color:var(--ast-report-bg, white)}.text-end{text-align:right}.small{font-size:.875em}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.d-flex{display:flex}.flex-row-reverse{flex-direction:row-reverse}.flex-grow-1{flex-grow:1}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.d-block{display:block}.btn{--bs-border-radius: .25rem;--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:disabled{background-color:var(--bs-body-bg)}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width, 1px) solid var(--bs-border-color, oklch(92.2% 0 0));border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
|
|
4560
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormsModule, ChatMessageComponent, TokenProgressBarComponent, DebugMessageComponent, TooltipDirective, TranslocoPipe], template: "<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n <!-- Token consumption -->\n <div class=\"ms-1\" *ngIf=\"config?.globalSettings?.displayUserQuotaConsumption || config?.globalSettings?.displayChatTokensConsumption\">\n <ng-container *ngTemplateOutlet=\"tokenConsumptionTpl || defaultTokenConsumptionTpl; context: { $implicit: instanceId }\"></ng-container>\n </div>\n\n <!-- Chat Messages -->\n <ul class=\"d-flex flex-column list-unstyled gap-3 overflow-auto flex-grow-1 pe-2 pb-2\" #messageList [id]=\"'messageList-' + instanceId\">\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\"\n *ngIf=\"message.additionalProperties.display && !isEmptyAssistantMessage(message)\"\n [style.--bs-list-group-item-padding-y.rem]=\"'0.6'\"\n [class.opacity-50]=\"indexMessageToEdit && (indexMessageToEdit < (index + 1))\">\n <sq-chat-message\n [id]=\"message.additionalProperties.messageId\"\n [class.sq-user-message]=\"message.role === 'user'\"\n [class.last-message]=\"last\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [suggestedActions]=\"last ? message.additionalProperties.$suggestedAction : undefined\"\n [assistantMessageIcon]=\"assistantMessageIcon\"\n [userMessageIcon]=\"userMessageIcon\"\n [connectionErrorMessageIcon]=\"connectionErrorMessageIcon\"\n [searchWarningMessageIcon]=\"searchWarningMessageIcon\"\n [streaming]=\"(chatService.streaming$ | async) && (last || isAssistantLastMessages(messages, index))\"\n [canEdit]=\"(chatService.streaming$ | async) === false && indexMessageToEdit === undefined && message.role === 'user'\"\n [canCopy]=\"((chatService.streaming$ | async) === false || !last) && indexMessageToEdit === undefined && message.role !== 'connection-error' && message.role !== 'search-warning'\"\n [canLike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDislike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDebug]=\"(((chatService.streaming$ | async) === false && last) || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && (getDebugMessages(message, index).length > 0) && ((isAdminOrDeletedAdmin || (chatService.userOverride$ | async)) && config?.defaultValues.debug)\"\n [canRegenerate]=\"(chatService.streaming$ | async) === false && (last || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && indexMessageToEdit === undefined\"\n [collapseReferences]=\"!!config?.globalSettings.collapseReferences\"\n (edit)=\"editMessage(message, index)\"\n (copy)=\"copyMessage(message, index)\"\n (regenerate)=\"regenerateMessage(message, index)\"\n (openDocument)=\"openOriginalAttachment($event, message, index)\"\n (openPreview)=\"openAttachmentPreview($event, message, index)\"\n (suggestAction)=\"suggestActionClick($event, index)\"\n (like)=\"onLike(message, index)\"\n (dislike)=\"onDislike(message, index)\"\n (debug)=\"showDebug(message, index)\">\n </sq-chat-message>\n </li>\n </ng-container>\n <!-- Loading spinner -->\n <li *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <!-- Reporting a feedback form -->\n <div class=\"issue-report p-3 rounded-lg\" *ngIf=\"showReport\">\n <ng-container *ngTemplateOutlet=\"reportTpl || reportTplDefault; context: { $implicit: messageToReport, rank: reportRank, type: reportType }\"></ng-container>\n </div>\n\n <!-- User text input -->\n @if (!showReport) {\n <div class=\"user-input mt-auto\">\n <div class=\"py-2\">\n <div [hidden]=\"!isConnected\">\n <ng-container *ngIf=\"enabledUserInput\" [ngTemplateOutlet]=\"inputTpl\"></ng-container>\n </div>\n <!-- Retry button -->\n <!-- hidden attribute is in conflict with a css rule display: flex -->\n @if(!isConnected){\n <button class=\"btn mb-4 ast-error ast-btn sq-retry\" (click)=\"retryFetch()\">\n <span>{{ 'chat.tryAgain' | transloco }}</span>\n <span *ngIf=\"retrialAttempts\" class=\"ms-2 attempts\">{{ retrialAttempts }}</span>\n </button>\n }\n <div class=\"text-end small text-muted px-3\" *ngIf=\"!!config?.globalSettings?.disclaimer\">\n {{ config?.globalSettings?.disclaimer | transloco }}\n </div>\n </div>\n </div>\n }\n\n <!-- Floating scroll button -->\n <div *ngIf=\"!isAtBottom && !showReport\" class=\"sq-floating-scroll\" [ngClass]=\"enabledUserInput ? 'sq-floating-scroll--when-user-input' : 'sq-floating-scroll--without-user-input'\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\" aria-label=\"Scroll down\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-primary d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'chat.loading' | transloco }}</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <button disabled class=\"btn btn-light\" aria-label=\"search\">\n <i class=\"fas fa-search\"></i>\n </button>\n <textarea #questionInput rows=\"1\"\n type=\"text\" class=\"form-control\"\n [placeholder]=\"'chat.askSomething' | transloco\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n (keydown)=\"calculateHeight($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\">\n </textarea>\n <div id=\"chat-actions\" class=\"d-flex gap-2\">\n <button\n *ngIf=\"(chatService.streaming$ | async) === false && (loading$ | async) !== true && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Send message\"\n [sqTooltip]=\"'chat.sendMessage' | transloco\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <button\n *ngIf=\"indexMessageToEdit\"\n aria-label=\"Cancel edition\"\n type=\"button\"\n class=\"btn btn-light\"\n [sqTooltip]=\"'chat.cancelEdition' | transloco\"\n (click)=\"indexMessageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <span *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\" class=\"processing\">\n {{ 'chat.generating' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <span *ngIf=\"(chatService.stoppingGeneration$ | async)\" class=\"processing\">\n {{ 'chat.stopping' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <button\n *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Stop generating\"\n [sqTooltip]=\"'chat.stopGeneration' | transloco\"\n (click)=\"stopGeneration()\">\n <i class=\"fas fa-stop\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reportTplDefault let-message let-rank=\"rank\" let-type=\"type\">\n <div class=\"px-3\">\n <ng-container *ngIf=\"type === 'dislike'\">\n <h5>{{ 'chat.issueType' | transloco }}</h5>\n <select class=\"form-select mb-4\" [(ngModel)]=\"issueType\">\n <option [value]=\"''\">{{ 'chat.chooseIssueType' | transloco }}</option>\n <option *ngFor=\"let type of (issueTypes ?? defaultIssueTypes)\" [value]=\"type\">{{ type | transloco }}</option>\n </select>\n <h5>{{ 'chat.askUnlikeReasons' | transloco }}</h5>\n </ng-container>\n <ng-container *ngIf=\"type === 'like'\">\n <h5>{{ 'chat.askLikeReasons' | transloco }}</h5>\n </ng-container>\n <textarea class=\"form-control border border-neutral-200\" [(ngModel)]=\"reportComment\" [placeholder]=\"'chat.writeComment' | transloco\"></textarea>\n <div class=\"d-flex flex-row-reverse gap-1 mt-2\">\n <button class=\"btn btn-primary\" [disabled]=\"type === 'dislike' && !issueType\" (click)=\"sendReport()\">{{ 'chat.send' | transloco }}</button>\n <button class=\"btn btn-light\" (click)=\"ignoreReport()\">{{ 'chat.doNotSend' | transloco }}</button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultTokenConsumptionTpl let-instanceId>\n <sq-token-progress-bar\n [instanceId]=\"instanceId\">\n </sq-token-progress-bar>\n</ng-template>\n\n<div class=\"debug-messages\" [class.displayed]=\"showDebugMessages\">\n <button *ngIf=\"showDebugMessages\" class=\"btn btn-light shadow back-btn\" (click)=\"showDebugMessages=false\" aria-label=\"Hide debug messages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <ng-container *ngTemplateOutlet=\"debugMessagesTpl || defaultDebugMessagesTpl; context: { $implicit: debugMessages }\">\n </ng-container>\n</div>\n\n<ng-template #defaultDebugMessagesTpl let-debugMessages>\n <sq-debug-message [data]=\"debugMessages\"></sq-debug-message>\n</ng-template>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{font-size:.875rem}:host>div>.user-input>div:not(.progress),:host>div>.issue-report>div,:host>div>ul>li{width:var(--ast-chat-container-width, 100%);max-width:100%;margin-left:auto;margin-right:auto}:host>div>ul{padding-top:var(--ast-chat-padding-top, 0);padding-bottom:var(--ast-chat-padding-bottom, 0)}li.attachment>p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:3}li.attachment.expanded>p{display:block}.progress{--bs-progress-height: 3px}.progress.disabled{--bs-progress-height: 20px;--bs-progress-bar-bg: var(--bs-danger)}.user-input{z-index:1}.user-input ul.list-group{max-height:30vh}.form-control:disabled{background-color:#ededed}a.disabled{cursor:default;opacity:.5}.no-max-height{max-height:initial!important}.sq-floating-scroll{position:absolute;right:50%;text-align:center}.sq-floating-scroll--when-user-input{bottom:75px}.sq-floating-scroll--without-user-input{bottom:15px}.sq-floating-scroll .btn{background-color:#fff}.sq-floating-scroll .btn:hover{background-color:#fff;opacity:.9}.ast-input-container{display:flex;align-items:center;background-color:var(--ast-input-bg, #F8F8F8);border-radius:var(--ast-size-3, .75rem)}.ast-input-container>i{padding-left:var(--ast-size-3, .75rem);color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container textarea{padding-left:var(--ast-size-3, .75rem);padding-right:var(--ast-size-3, .75rem);resize:none}.ast-input-container textarea,.ast-input-container button,.ast-input-container button:hover{background-color:transparent;border:0}.ast-input-container button:hover{color:var(--ast-primary-color, #005DA7)}.ast-input-container button:not(:hover){color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container .processing{display:flex;align-items:center;color:var(--ast-secondary-color, #FF732E);gap:.5rem}sq-chat-message.sq-user-message{float:var(--ast-user-message-float, none)}sq-token-progress-bar{z-index:10;position:absolute;top:0;right:0}.debug-messages{position:fixed;z-index:999999;right:-60%;top:0;width:60%;height:100%;transition:all .5s ease;background-color:var(--bs-body-bg);overflow:auto}.debug-messages .back-btn{position:fixed;right:0%;transition:all .5s ease}.debug-messages.displayed{right:0}.debug-messages.displayed .back-btn{right:60%}.debug-messages sq-debug-message:first-of-type{display:block;width:100%}.btn.sq-retry{display:flex;margin:auto;background:var(--ast-error-bg, rgba(249, 58, 55, .2));font-weight:var(--font-weight-bold, 500)}.btn.sq-retry .attempts{display:flex;border-radius:100%;background:#fff;height:20px;width:20px;place-content:center;align-items:center}.issue-report{background-color:var(--ast-report-bg, white)}.text-end{text-align:right}.small{font-size:.875em}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.d-flex{display:flex}.flex-row-reverse{flex-direction:row-reverse}.flex-grow-1{flex-grow:1}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.d-block{display:block}.btn{--bs-border-radius: .25rem;--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:disabled{background-color:var(--bs-body-bg)}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width, 1px) solid var(--bs-border-color, oklch(92.2% 0 0deg));border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
|
|
4449
4561
|
}], ctorParameters: () => [], propDecorators: { instanceId: [{
|
|
4450
4562
|
type: Input
|
|
4451
4563
|
}], query: [{
|
|
@@ -4472,6 +4584,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
4472
4584
|
type: Input
|
|
4473
4585
|
}], appConfig: [{
|
|
4474
4586
|
type: Input
|
|
4587
|
+
}], collapsed: [{
|
|
4588
|
+
type: Input
|
|
4475
4589
|
}], connection: [{
|
|
4476
4590
|
type: Output
|
|
4477
4591
|
}], loading$: [{
|
|
@@ -4506,15 +4620,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
4506
4620
|
}] } });
|
|
4507
4621
|
|
|
4508
4622
|
class DialogDeleteSavedChatComponent {
|
|
4509
|
-
|
|
4510
|
-
|
|
4511
|
-
|
|
4512
|
-
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
this.subscription = new Subscription();
|
|
4517
|
-
}
|
|
4623
|
+
deleteDialog = viewChild('deleteDialog', ...(ngDevMode ? [{ debugName: "deleteDialog" }] : []));
|
|
4624
|
+
notificationsService = inject(NotificationsService);
|
|
4625
|
+
transloco = inject(TranslocoService);
|
|
4626
|
+
chatService = input.required(...(ngDevMode ? [{ debugName: "chatService" }] : []));
|
|
4627
|
+
delete = output();
|
|
4628
|
+
savedChat = signal({ currentTitle: '', title: '' }, ...(ngDevMode ? [{ debugName: "savedChat" }] : []));
|
|
4629
|
+
subscription = new Subscription();
|
|
4518
4630
|
showModal(event, savedChat) {
|
|
4519
4631
|
event.stopPropagation();
|
|
4520
4632
|
this.savedChat.set({ ...savedChat, currentTitle: savedChat.title });
|
|
@@ -4538,8 +4650,8 @@ class DialogDeleteSavedChatComponent {
|
|
|
4538
4650
|
})).subscribe());
|
|
4539
4651
|
this.deleteDialog()?.nativeElement.close();
|
|
4540
4652
|
}
|
|
4541
|
-
static
|
|
4542
|
-
static
|
|
4653
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogDeleteSavedChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4654
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: DialogDeleteSavedChatComponent, isStandalone: true, selector: "sq-dialog-delete-saved-chat", inputs: { chatService: { classPropertyName: "chatService", publicName: "chatService", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { delete: "delete" }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "deleteDialog", first: true, predicate: ["deleteDialog"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
4543
4655
|
<dialog popover #deleteDialog class="rounded-3 z-backdrop w-full max-w-md p-4 rounded-lg border border-neutral-200 shadow-2xl">
|
|
4544
4656
|
<div class="flex flex-col gap-4">
|
|
4545
4657
|
<h1 class="text-xl font-bold">{{ 'chatDialogs.deleteSavedDiscussion' | transloco }}</h1>
|
|
@@ -4553,9 +4665,9 @@ class DialogDeleteSavedChatComponent {
|
|
|
4553
4665
|
</div>
|
|
4554
4666
|
</div>
|
|
4555
4667
|
</dialog>
|
|
4556
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
4668
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
4557
4669
|
}
|
|
4558
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4670
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogDeleteSavedChatComponent, decorators: [{
|
|
4559
4671
|
type: Component,
|
|
4560
4672
|
args: [{
|
|
4561
4673
|
selector: 'sq-dialog-delete-saved-chat',
|
|
@@ -4578,17 +4690,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
4578
4690
|
</dialog>
|
|
4579
4691
|
`
|
|
4580
4692
|
}]
|
|
4581
|
-
}] });
|
|
4693
|
+
}], propDecorators: { deleteDialog: [{ type: i0.ViewChild, args: ['deleteDialog', { isSignal: true }] }], chatService: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatService", required: true }] }], delete: [{ type: i0.Output, args: ["delete"] }] } });
|
|
4582
4694
|
|
|
4583
4695
|
class DialogRenameSavedChatComponent {
|
|
4584
|
-
|
|
4585
|
-
|
|
4586
|
-
|
|
4587
|
-
|
|
4588
|
-
|
|
4589
|
-
|
|
4590
|
-
this.subscription = new Subscription();
|
|
4591
|
-
}
|
|
4696
|
+
renameDialog = viewChild('renameDialog', ...(ngDevMode ? [{ debugName: "renameDialog" }] : []));
|
|
4697
|
+
notificationsService = inject(NotificationsService);
|
|
4698
|
+
transloco = inject(TranslocoService);
|
|
4699
|
+
chatService = input.required(...(ngDevMode ? [{ debugName: "chatService" }] : []));
|
|
4700
|
+
savedChat = signal({ currentTitle: '', title: '' }, ...(ngDevMode ? [{ debugName: "savedChat" }] : []));
|
|
4701
|
+
subscription = new Subscription();
|
|
4592
4702
|
showModal(event, savedChat) {
|
|
4593
4703
|
event.stopPropagation();
|
|
4594
4704
|
this.savedChat.set({ ...savedChat, currentTitle: savedChat.title });
|
|
@@ -4612,8 +4722,8 @@ class DialogRenameSavedChatComponent {
|
|
|
4612
4722
|
})).subscribe());
|
|
4613
4723
|
this.renameDialog()?.nativeElement.close();
|
|
4614
4724
|
}
|
|
4615
|
-
static
|
|
4616
|
-
static
|
|
4725
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogRenameSavedChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4726
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: DialogRenameSavedChatComponent, isStandalone: true, selector: "sq-dialog-rename-saved-chat", inputs: { chatService: { classPropertyName: "chatService", publicName: "chatService", isSignal: true, isRequired: true, transformFunction: null } }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "renameDialog", first: true, predicate: ["renameDialog"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
4617
4727
|
<dialog popover #renameDialog class="rounded-3 z-backdrop w-full max-w-md p-4 rounded-lg border border-neutral-200 shadow-2xl">
|
|
4618
4728
|
<div class="flex flex-col gap-4">
|
|
4619
4729
|
<h1 class="text-xl font-bold">{{ 'chatDialogs.renameSavedDiscussion' | transloco }}</h1>
|
|
@@ -4629,9 +4739,9 @@ class DialogRenameSavedChatComponent {
|
|
|
4629
4739
|
</div>
|
|
4630
4740
|
</div>
|
|
4631
4741
|
</dialog>
|
|
4632
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
4742
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
4633
4743
|
}
|
|
4634
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4744
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogRenameSavedChatComponent, decorators: [{
|
|
4635
4745
|
type: Component,
|
|
4636
4746
|
args: [{
|
|
4637
4747
|
selector: 'sq-dialog-rename-saved-chat',
|
|
@@ -4656,20 +4766,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
4656
4766
|
</dialog>
|
|
4657
4767
|
`
|
|
4658
4768
|
}]
|
|
4659
|
-
}] });
|
|
4769
|
+
}], propDecorators: { renameDialog: [{ type: i0.ViewChild, args: ['renameDialog', { isSignal: true }] }], chatService: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatService", required: true }] }] } });
|
|
4660
4770
|
|
|
4661
4771
|
class SavedChatsComponent {
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
|
|
4672
|
-
|
|
4772
|
+
/** Define the key based on it, the appropriate chatService instance will be returned from instanceManagerService */
|
|
4773
|
+
instanceId;
|
|
4774
|
+
load = new EventEmitter();
|
|
4775
|
+
delete = new EventEmitter();
|
|
4776
|
+
chatService;
|
|
4777
|
+
subscription = new Subscription();
|
|
4778
|
+
groupedSavedChats$ = new BehaviorSubject([]);
|
|
4779
|
+
queryWebserviceForSearch;
|
|
4780
|
+
searchQuery;
|
|
4781
|
+
searchText;
|
|
4782
|
+
searchText$ = new Subject();
|
|
4783
|
+
instanceManagerService = inject(InstanceManagerService);
|
|
4784
|
+
notificationsService = inject(NotificationsService);
|
|
4785
|
+
transloco = inject(TranslocoService);
|
|
4786
|
+
assistantUtils = inject(AssistantUtils);
|
|
4673
4787
|
ngOnInit() {
|
|
4674
4788
|
this.subscription.add(of(isAuthenticated()).pipe(tap(_ => this.instantiateChatService()), switchMap(_ => this.chatService.userOverride$), switchMap(_ => this.chatService.initProcess$), filter(success => !!success), tap(_ => {
|
|
4675
4789
|
this.onListSavedChat();
|
|
@@ -4743,10 +4857,10 @@ class SavedChatsComponent {
|
|
|
4743
4857
|
modifiedUTC: a.modified
|
|
4744
4858
|
}))), catchError$1(() => of(this.chatService.savedChats$.value || [])));
|
|
4745
4859
|
}
|
|
4746
|
-
static
|
|
4747
|
-
static
|
|
4860
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4861
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SavedChatsComponent, isStandalone: true, selector: "sq-saved-chats-v3", inputs: { instanceId: "instanceId" }, outputs: { load: "load", delete: "delete" }, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], ngImport: i0, template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"!!queryWebserviceForSearch\" class=\"sticky-top\">\n <input type=\"search\" class=\"form-control\" [placeholder]=\"'savedChats.searchPlaceholder' | transloco\" (keyup)=\"onSearch($event)\" (search)=\"onSearch($event)\" />\n </div>\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key | transloco}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: DialogRenameSavedChatComponent, selector: "sq-dialog-rename-saved-chat", inputs: ["chatService"] }, { kind: "component", type: DialogDeleteSavedChatComponent, selector: "sq-dialog-delete-saved-chat", inputs: ["chatService"], outputs: ["delete"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
4748
4862
|
}
|
|
4749
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4863
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsComponent, decorators: [{
|
|
4750
4864
|
type: Component,
|
|
4751
4865
|
args: [{ selector: 'sq-saved-chats-v3', standalone: true, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], imports: [CommonModule, FormsModule, TooltipDirective, DialogRenameSavedChatComponent, DialogDeleteSavedChatComponent, TranslocoPipe], template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"!!queryWebserviceForSearch\" class=\"sticky-top\">\n <input type=\"search\" class=\"form-control\" [placeholder]=\"'savedChats.searchPlaceholder' | transloco\" (keyup)=\"onSearch($event)\" (search)=\"onSearch($event)\" />\n </div>\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key | transloco}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
4752
4866
|
}], propDecorators: { instanceId: [{
|
|
@@ -4758,15 +4872,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
4758
4872
|
}] } });
|
|
4759
4873
|
|
|
4760
4874
|
class DocumentsUploadService {
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
4767
|
-
|
|
4768
|
-
this.http = inject(HttpClient);
|
|
4769
|
-
}
|
|
4875
|
+
REQUEST_URL = "api/v1/plugin/SinequaAssistantREST";
|
|
4876
|
+
/** Documents upload configuration. */
|
|
4877
|
+
uploadConfig$ = new BehaviorSubject(undefined);
|
|
4878
|
+
/** Emit the list of indexed documents */
|
|
4879
|
+
uploadedDocuments$ = new BehaviorSubject([]);
|
|
4880
|
+
appService = inject(AppService);
|
|
4881
|
+
http = inject(HttpClient);
|
|
4770
4882
|
/**
|
|
4771
4883
|
* Initializes the file upload service.
|
|
4772
4884
|
*/
|
|
@@ -5015,10 +5127,10 @@ class DocumentsUploadService {
|
|
|
5015
5127
|
convertBytesToMB(bytes) {
|
|
5016
5128
|
return bytes / (1024 * 1024);
|
|
5017
5129
|
}
|
|
5018
|
-
static
|
|
5019
|
-
static
|
|
5130
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentsUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5131
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentsUploadService, providedIn: 'root' });
|
|
5020
5132
|
}
|
|
5021
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentsUploadService, decorators: [{
|
|
5022
5134
|
type: Injectable,
|
|
5023
5135
|
args: [{
|
|
5024
5136
|
providedIn: 'root'
|
|
@@ -5026,33 +5138,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5026
5138
|
}] });
|
|
5027
5139
|
|
|
5028
5140
|
class DocumentUploadComponent {
|
|
5029
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
}
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5055
|
-
|
|
5141
|
+
/** Polling interval in milliseconds to update the indexing status of the uploaded documents */
|
|
5142
|
+
pollingInterval = 1000;
|
|
5143
|
+
// Reference to the flow directive
|
|
5144
|
+
flow;
|
|
5145
|
+
flowConfig = {
|
|
5146
|
+
// Disables chunk testing before uploading actual file data. Thus, avoids unnecessary requests and speeds up uploads
|
|
5147
|
+
testChunks: false,
|
|
5148
|
+
// Allows multiple file uploads simultaneously
|
|
5149
|
+
singleFile: false,
|
|
5150
|
+
// Allows the same file to be uploaded multiple times
|
|
5151
|
+
allowDuplicateUploads: true,
|
|
5152
|
+
query: () => {
|
|
5153
|
+
return {}; // Empty object to prevent query parameters
|
|
5154
|
+
},
|
|
5155
|
+
preprocess: (chunk) => chunk.abort() // Prevents the default flow upload of chunks
|
|
5156
|
+
};
|
|
5157
|
+
errorAlerts = [];
|
|
5158
|
+
dragging$ = new BehaviorSubject(false);
|
|
5159
|
+
indexing$ = new BehaviorSubject(false);
|
|
5160
|
+
indexingInfos$ = new BehaviorSubject(undefined);
|
|
5161
|
+
uploading$ = new BehaviorSubject(false);
|
|
5162
|
+
uploadingInfos$ = new BehaviorSubject(undefined);
|
|
5163
|
+
_subscription = new Subscription();
|
|
5164
|
+
documentsUploadService = inject(DocumentsUploadService);
|
|
5165
|
+
notificationsService = inject(NotificationsService);
|
|
5166
|
+
appService = inject(AppService);
|
|
5167
|
+
transloco = inject(TranslocoService);
|
|
5056
5168
|
ngOnInit() {
|
|
5057
5169
|
this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => this.documentsUploadService.init()), catchError$1((error) => {
|
|
5058
5170
|
console.error(error);
|
|
@@ -5253,10 +5365,10 @@ class DocumentUploadComponent {
|
|
|
5253
5365
|
const total = infos.docs.length;
|
|
5254
5366
|
return completed / total;
|
|
5255
5367
|
}
|
|
5256
|
-
static
|
|
5257
|
-
static
|
|
5368
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5369
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DocumentUploadComponent, isStandalone: true, selector: "sq-document-upload", inputs: { pollingInterval: "pollingInterval" }, providers: [provideTranslocoScope('chat-documents-upload')], viewQueries: [{ propertyName: "flow", first: true, predicate: ["flow"], descendants: true, static: true }], ngImport: i0, template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span class=\"me-1\" [title]=\"transfer.name\">{{ transfer.name }}</span>\n <button\n type=\"button\"\n (click)=\"flow.cancelFile(transfer)\"\n [title]=\"'chatDocumentsUpload.cancel' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash\"></i>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color:var(--ast-primary-bg, #f2f8fe)}.file-upload-container .dropzone{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100px;border:2px dashed var(--ast-primary-color, #005DA7);border-color:var(--ast-secondary-color, #FF732E) var(--ast-primary-color, #005DA7) var(--ast-primary-color, #005DA7) var(--ast-secondary-color, #FF732E);border-radius:5px;padding:10px;cursor:pointer;background-color:var(--ast-primary-bg, #f2f8fe);transition:background-color .3s ease;color:var(--ast-primary-color, #005DA7)}.file-upload-container .dropzone--active{background-color:var(--ast-secondary-bg, #FFF8F1);color:var(--ast-secondary-color, #FF732E);border-color:var(--ast-secondary-color, #FF732E)}.file-upload-container .dropzone i{font-size:x-large}.file-upload-container .dropzone span{margin:0;font-size:small}.file-upload-container .dropzone span.text-orange{color:var(--ast-secondary-color, #FF732E)}.file-upload-container .file-list h6{color:#a9a9a9}.file-upload-container .file-list ul{list-style-type:none;padding:0}.file-upload-container .file-list ul li{display:flex;align-items:center;padding:10px;background-color:var(--ast-primary-bg, #f2f8fe);margin-bottom:5px;border-radius:5px;font-size:small}.file-upload-container .file-list ul li span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.file-upload-container .file-list ul li i{cursor:pointer}.file-upload-container .file-list ul li i:hover{color:var(--ast-primary-color, #005DA7)}.file-upload-container .error-list{display:flex;flex-direction:column;list-style:disc;background:var(--ast-error-color, rgba(249, 58, 55, .7));color:#fff;border-radius:5px}.file-upload-container .error-list li{padding:3px}.file-upload-container .upload-btn{background:linear-gradient(to right,#1d4ed8,#ec4899,#f97316);color:#fff;border:none;padding:8px 16px;border-radius:5px;cursor:pointer;width:100%}.file-upload-container .upload-btn:hover{background:linear-gradient(to right,#1d4ed8cc,#ec4899cc,#f97316cc)}.file-upload-container .upload-btn[disabled]{opacity:.3;cursor:not-allowed}.file-upload-container .cancel-btn{cursor:pointer;pointer-events:unset;width:100%}.file-upload-container .cancel-btn[disabled]{opacity:.3;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NgxFlowModule }, { kind: "directive", type: i2$1.ButtonDirective, selector: "[flowButton]", inputs: ["flowDirectoryOnly", "flowAttributes", "flow"] }, { kind: "directive", type: i2$1.DropDirective, selector: "[flowDrop]", inputs: ["flow"], exportAs: ["flowDrop"] }, { kind: "directive", type: i2$1.FlowDirective, selector: "[flowConfig]", inputs: ["flowConfig"], exportAs: ["flow"] }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5258
5370
|
}
|
|
5259
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5371
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentUploadComponent, decorators: [{
|
|
5260
5372
|
type: Component,
|
|
5261
5373
|
args: [{ selector: "sq-document-upload", standalone: true, providers: [provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, NgxFlowModule, FormatIconComponent, TranslocoPipe], template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span class=\"me-1\" [title]=\"transfer.name\">{{ transfer.name }}</span>\n <button\n type=\"button\"\n (click)=\"flow.cancelFile(transfer)\"\n [title]=\"'chatDocumentsUpload.cancel' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash\"></i>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color:var(--ast-primary-bg, #f2f8fe)}.file-upload-container .dropzone{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100px;border:2px dashed var(--ast-primary-color, #005DA7);border-color:var(--ast-secondary-color, #FF732E) var(--ast-primary-color, #005DA7) var(--ast-primary-color, #005DA7) var(--ast-secondary-color, #FF732E);border-radius:5px;padding:10px;cursor:pointer;background-color:var(--ast-primary-bg, #f2f8fe);transition:background-color .3s ease;color:var(--ast-primary-color, #005DA7)}.file-upload-container .dropzone--active{background-color:var(--ast-secondary-bg, #FFF8F1);color:var(--ast-secondary-color, #FF732E);border-color:var(--ast-secondary-color, #FF732E)}.file-upload-container .dropzone i{font-size:x-large}.file-upload-container .dropzone span{margin:0;font-size:small}.file-upload-container .dropzone span.text-orange{color:var(--ast-secondary-color, #FF732E)}.file-upload-container .file-list h6{color:#a9a9a9}.file-upload-container .file-list ul{list-style-type:none;padding:0}.file-upload-container .file-list ul li{display:flex;align-items:center;padding:10px;background-color:var(--ast-primary-bg, #f2f8fe);margin-bottom:5px;border-radius:5px;font-size:small}.file-upload-container .file-list ul li span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.file-upload-container .file-list ul li i{cursor:pointer}.file-upload-container .file-list ul li i:hover{color:var(--ast-primary-color, #005DA7)}.file-upload-container .error-list{display:flex;flex-direction:column;list-style:disc;background:var(--ast-error-color, rgba(249, 58, 55, .7));color:#fff;border-radius:5px}.file-upload-container .error-list li{padding:3px}.file-upload-container .upload-btn{background:linear-gradient(to right,#1d4ed8,#ec4899,#f97316);color:#fff;border:none;padding:8px 16px;border-radius:5px;cursor:pointer;width:100%}.file-upload-container .upload-btn:hover{background:linear-gradient(to right,#1d4ed8cc,#ec4899cc,#f97316cc)}.file-upload-container .upload-btn[disabled]{opacity:.3;cursor:not-allowed}.file-upload-container .cancel-btn{cursor:pointer;pointer-events:unset;width:100%}.file-upload-container .cancel-btn[disabled]{opacity:.3;cursor:not-allowed}\n"] }]
|
|
5262
5374
|
}], propDecorators: { pollingInterval: [{
|
|
@@ -5267,16 +5379,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5267
5379
|
}] } });
|
|
5268
5380
|
|
|
5269
5381
|
class DocumentListComponent {
|
|
5270
|
-
|
|
5271
|
-
|
|
5272
|
-
|
|
5273
|
-
|
|
5274
|
-
|
|
5275
|
-
|
|
5276
|
-
|
|
5277
|
-
|
|
5278
|
-
|
|
5279
|
-
}
|
|
5382
|
+
groupedUploadedDocuments$ = new BehaviorSubject([]);
|
|
5383
|
+
documentToDelete;
|
|
5384
|
+
deletingAll = false;
|
|
5385
|
+
_subscription = new Subscription();
|
|
5386
|
+
documentsUploadService = inject(DocumentsUploadService);
|
|
5387
|
+
notificationsService = inject(NotificationsService);
|
|
5388
|
+
appService = inject(AppService);
|
|
5389
|
+
transloco = inject(TranslocoService);
|
|
5390
|
+
assistantUtils = inject(AssistantUtils);
|
|
5280
5391
|
ngOnInit() {
|
|
5281
5392
|
this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => {
|
|
5282
5393
|
this.onUpdateUploadedDocumentsList();
|
|
@@ -5386,23 +5497,21 @@ class DocumentListComponent {
|
|
|
5386
5497
|
return Array.from(groupedUploadedDocuments, ([key, value]) => ({ key, value }));
|
|
5387
5498
|
;
|
|
5388
5499
|
}
|
|
5389
|
-
static
|
|
5390
|
-
static
|
|
5500
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5501
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DocumentListComponent, isStandalone: true, selector: "sq-document-list", providers: [provideTranslocoScope('chat-documents-upload')], ngImport: i0, template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>{{ 'chatDocumentsUpload.deleteAllDocumentsText' | transloco }}</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key | transloco}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [title]=\"doc.fileName\">{{doc.fileName}}</span>\n <button\n type=\"button\"\n (click)=\"deleteDocument($event, doc)\"\n [title]=\"'chatDocumentsUpload.delete' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\"></i>\n </button>\n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>\n {{ 'chatDocumentsUpload.deleteDocumentText' | transloco: { title: documentToDelete!.fileName } }}\n </span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5391
5502
|
}
|
|
5392
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5503
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentListComponent, decorators: [{
|
|
5393
5504
|
type: Component,
|
|
5394
5505
|
args: [{ selector: "sq-document-list", standalone: true, providers: [provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, FormatIconComponent, TranslocoPipe], template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>{{ 'chatDocumentsUpload.deleteAllDocumentsText' | transloco }}</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key | transloco}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [title]=\"doc.fileName\">{{doc.fileName}}</span>\n <button\n type=\"button\"\n (click)=\"deleteDocument($event, doc)\"\n [title]=\"'chatDocumentsUpload.delete' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\"></i>\n </button>\n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>\n {{ 'chatDocumentsUpload.deleteDocumentText' | transloco: { title: documentToDelete!.fileName } }}\n </span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
5395
5506
|
}] });
|
|
5396
5507
|
|
|
5397
5508
|
class DocumentOverviewComponent {
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
this.appService = inject(AppService);
|
|
5405
|
-
}
|
|
5509
|
+
disabledUpload = true;
|
|
5510
|
+
onUpload = new EventEmitter();
|
|
5511
|
+
_subscription = new Subscription();
|
|
5512
|
+
documentsUploadService = inject(DocumentsUploadService);
|
|
5513
|
+
notificationsService = inject(NotificationsService);
|
|
5514
|
+
appService = inject(AppService);
|
|
5406
5515
|
ngOnInit() {
|
|
5407
5516
|
this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => this.documentsUploadService.init()), switchMap((_) => this.documentsUploadService.getDocumentsList()), catchError$1((error) => {
|
|
5408
5517
|
console.error(error);
|
|
@@ -5414,10 +5523,10 @@ class DocumentOverviewComponent {
|
|
|
5414
5523
|
ngOnDestroy() {
|
|
5415
5524
|
this._subscription.unsubscribe();
|
|
5416
5525
|
}
|
|
5417
|
-
static
|
|
5418
|
-
static
|
|
5526
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5527
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DocumentOverviewComponent, isStandalone: true, selector: "sq-document-overview", inputs: { disabledUpload: "disabledUpload" }, outputs: { onUpload: "onUpload" }, providers: [provideTranslocoScope('chat-documents-upload')], ngImport: i0, template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">\n {{ 'chatDocumentsUpload.uploadedDocuments' | transloco: { count: (documentsUploadService.uploadedDocuments$ | async)?.length || 0 } }}\n </span>\n <button class=\"btn btn-light\" [title]=\"'chatDocumentsUpload.uploadToSources' | transloco\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>\n", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5419
5528
|
}
|
|
5420
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5529
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentOverviewComponent, decorators: [{
|
|
5421
5530
|
type: Component,
|
|
5422
5531
|
args: [{ selector: "sq-document-overview", standalone: true, providers: [provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, TranslocoPipe], template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">\n {{ 'chatDocumentsUpload.uploadedDocuments' | transloco: { count: (documentsUploadService.uploadedDocuments$ | async)?.length || 0 } }}\n </span>\n <button class=\"btn btn-light\" [title]=\"'chatDocumentsUpload.uploadToSources' | transloco\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>\n", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"] }]
|
|
5423
5532
|
}], propDecorators: { disabledUpload: [{
|
|
@@ -5427,14 +5536,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5427
5536
|
}] } });
|
|
5428
5537
|
|
|
5429
5538
|
class ChatReferenceImageComponent {
|
|
5430
|
-
|
|
5431
|
-
|
|
5432
|
-
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
this.modalTpl = viewChild("modal");
|
|
5437
|
-
}
|
|
5539
|
+
id = input.required(...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
5540
|
+
ref = input.required(...(ngDevMode ? [{ debugName: "ref" }] : []));
|
|
5541
|
+
openPreview = output();
|
|
5542
|
+
openDocument = output();
|
|
5543
|
+
openModal = output();
|
|
5544
|
+
modalTpl = viewChild("modal", ...(ngDevMode ? [{ debugName: "modalTpl" }] : []));
|
|
5438
5545
|
previewClicked() {
|
|
5439
5546
|
if (!this.ref() || !this.ref().article || !this.ref().articleId)
|
|
5440
5547
|
return;
|
|
@@ -5456,23 +5563,21 @@ class ChatReferenceImageComponent {
|
|
|
5456
5563
|
modalClicked() {
|
|
5457
5564
|
this.modalTpl()?.nativeElement?.showModal();
|
|
5458
5565
|
}
|
|
5459
|
-
static
|
|
5460
|
-
static
|
|
5566
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferenceImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5567
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatReferenceImageComponent, isStandalone: true, selector: "ChatReferenceImage", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, ref: { classPropertyName: "ref", publicName: "ref", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openPreview: "openPreview", openDocument: "openDocument", openModal: "openModal" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n <span class=\"reference\">{{ id().split('.')[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Img-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\"/>\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"], dependencies: [{ kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5461
5568
|
}
|
|
5462
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5569
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferenceImageComponent, decorators: [{
|
|
5463
5570
|
type: Component,
|
|
5464
5571
|
args: [{ selector: "ChatReferenceImage", standalone: true, providers: [provideTranslocoScope('chat-reference')], imports: [FormatIconComponent, TranslocoPipe], template: "<header>\n <span class=\"reference\">{{ id().split('.')[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Img-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\"/>\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"] }]
|
|
5465
|
-
}] });
|
|
5572
|
+
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], ref: [{ type: i0.Input, args: [{ isSignal: true, alias: "ref", required: true }] }], openPreview: [{ type: i0.Output, args: ["openPreview"] }], openDocument: [{ type: i0.Output, args: ["openDocument"] }], openModal: [{ type: i0.Output, args: ["openModal"] }], modalTpl: [{ type: i0.ViewChild, args: ["modal", { isSignal: true }] }] } });
|
|
5466
5573
|
|
|
5467
5574
|
class ChatReferencePageComponent {
|
|
5468
|
-
|
|
5469
|
-
|
|
5470
|
-
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
this.modalTpl = viewChild("modal");
|
|
5475
|
-
}
|
|
5575
|
+
id = input.required(...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
5576
|
+
ref = input.required(...(ngDevMode ? [{ debugName: "ref" }] : []));
|
|
5577
|
+
openPreview = output();
|
|
5578
|
+
openDocument = output();
|
|
5579
|
+
openModal = output();
|
|
5580
|
+
modalTpl = viewChild("modal", ...(ngDevMode ? [{ debugName: "modalTpl" }] : []));
|
|
5476
5581
|
previewClicked() {
|
|
5477
5582
|
if (!this.ref() || !this.ref().article || !this.ref().articleId)
|
|
5478
5583
|
return;
|
|
@@ -5494,13 +5599,13 @@ class ChatReferencePageComponent {
|
|
|
5494
5599
|
modalClicked() {
|
|
5495
5600
|
this.modalTpl()?.nativeElement?.showModal();
|
|
5496
5601
|
}
|
|
5497
|
-
static
|
|
5498
|
-
static
|
|
5602
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferencePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5603
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatReferencePageComponent, isStandalone: true, selector: "ChatReferencePage", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, ref: { classPropertyName: "ref", publicName: "ref", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openPreview: "openPreview", openDocument: "openDocument", openModal: "openModal" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n <span class=\"reference\">{{ id().split(\".\")[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Page-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"], dependencies: [{ kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5499
5604
|
}
|
|
5500
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5605
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferencePageComponent, decorators: [{
|
|
5501
5606
|
type: Component,
|
|
5502
5607
|
args: [{ selector: "ChatReferencePage", standalone: true, providers: [provideTranslocoScope('chat-reference')], imports: [FormatIconComponent, TranslocoPipe], template: "<header>\n <span class=\"reference\">{{ id().split(\".\")[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Page-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"] }]
|
|
5503
|
-
}] });
|
|
5608
|
+
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], ref: [{ type: i0.Input, args: [{ isSignal: true, alias: "ref", required: true }] }], openPreview: [{ type: i0.Output, args: ["openPreview"] }], openDocument: [{ type: i0.Output, args: ["openDocument"] }], openModal: [{ type: i0.Output, args: ["openModal"] }], modalTpl: [{ type: i0.ViewChild, args: ["modal", { isSignal: true }] }] } });
|
|
5504
5609
|
|
|
5505
5610
|
const ASSISTANT_CUSTOM_ELEMENTS = new InjectionToken('ASSISTANT_CUSTOM_ELEMENTS', {
|
|
5506
5611
|
providedIn: 'root',
|
|
@@ -5513,10 +5618,8 @@ const ASSISTANT_CUSTOM_ELEMENTS = new InjectionToken('ASSISTANT_CUSTOM_ELEMENTS'
|
|
|
5513
5618
|
* It is called through APP_INITIALIZER to ensure that custom elements are registered before the application starts.
|
|
5514
5619
|
*/
|
|
5515
5620
|
class CustomElementsService {
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
this._customElements = inject(ASSISTANT_CUSTOM_ELEMENTS);
|
|
5519
|
-
}
|
|
5621
|
+
_injector = inject(Injector);
|
|
5622
|
+
_customElements = inject(ASSISTANT_CUSTOM_ELEMENTS);
|
|
5520
5623
|
setupCustomElements() {
|
|
5521
5624
|
Object.entries(this._customElements).forEach(([tagName, component]) => {
|
|
5522
5625
|
if (!customElements.get(tagName)) {
|
|
@@ -5527,10 +5630,10 @@ class CustomElementsService {
|
|
|
5527
5630
|
}
|
|
5528
5631
|
});
|
|
5529
5632
|
}
|
|
5530
|
-
static
|
|
5531
|
-
static
|
|
5633
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomElementsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5634
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomElementsService, providedIn: "root" });
|
|
5532
5635
|
}
|
|
5533
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5636
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomElementsService, decorators: [{
|
|
5534
5637
|
type: Injectable,
|
|
5535
5638
|
args: [{ providedIn: "root" }]
|
|
5536
5639
|
}] });
|
|
@@ -5539,9 +5642,10 @@ function initializeCustomElements(customElementsService) {
|
|
|
5539
5642
|
}
|
|
5540
5643
|
|
|
5541
5644
|
class DocumentReferenceComponent {
|
|
5542
|
-
|
|
5543
|
-
|
|
5544
|
-
|
|
5645
|
+
// je suis obligé d'utiliser les décorateurs @Input() car Angular ne supporte pas les inputs (signal) dans les web elements en Angular v18
|
|
5646
|
+
id;
|
|
5647
|
+
attachment;
|
|
5648
|
+
ref = {};
|
|
5545
5649
|
ngOnChanges() {
|
|
5546
5650
|
if (!this.attachment)
|
|
5547
5651
|
return;
|
|
@@ -5565,8 +5669,8 @@ class DocumentReferenceComponent {
|
|
|
5565
5669
|
detail: { reference: attachment }
|
|
5566
5670
|
}));
|
|
5567
5671
|
}
|
|
5568
|
-
static
|
|
5569
|
-
static
|
|
5672
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5673
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DocumentReferenceComponent, isStandalone: true, selector: "document-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
|
|
5570
5674
|
<a
|
|
5571
5675
|
class="reference"
|
|
5572
5676
|
role="button"
|
|
@@ -5587,9 +5691,9 @@ class DocumentReferenceComponent {
|
|
|
5587
5691
|
(openDocument)="onOpenDocument($event)"
|
|
5588
5692
|
></sq-chat-reference>
|
|
5589
5693
|
</ng-template>
|
|
5590
|
-
`, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }] });
|
|
5694
|
+
`, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }] });
|
|
5591
5695
|
}
|
|
5592
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5696
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentReferenceComponent, decorators: [{
|
|
5593
5697
|
type: Component,
|
|
5594
5698
|
args: [{ selector: "document-reference", imports: [TooltipDirective, ChatReferenceComponent], template: `
|
|
5595
5699
|
<a
|
|
@@ -5620,9 +5724,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5620
5724
|
}] } });
|
|
5621
5725
|
|
|
5622
5726
|
class PageReferenceComponent {
|
|
5623
|
-
|
|
5624
|
-
|
|
5625
|
-
|
|
5727
|
+
// je suis obligé d'utiliser les décorateurs @Input() car Angular ne supporte pas les inputs (signal) dans les web elements en Angular v18
|
|
5728
|
+
id;
|
|
5729
|
+
attachment;
|
|
5730
|
+
ref = {};
|
|
5626
5731
|
ngOnChanges() {
|
|
5627
5732
|
if (!this.attachment)
|
|
5628
5733
|
return;
|
|
@@ -5646,8 +5751,8 @@ class PageReferenceComponent {
|
|
|
5646
5751
|
detail: { reference: attachment }
|
|
5647
5752
|
}));
|
|
5648
5753
|
}
|
|
5649
|
-
static
|
|
5650
|
-
static
|
|
5754
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5755
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: PageReferenceComponent, isStandalone: true, selector: "page-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
|
|
5651
5756
|
<span
|
|
5652
5757
|
class="reference"
|
|
5653
5758
|
[sqTooltip]="{ obj: ref, id }"
|
|
@@ -5665,9 +5770,9 @@ class PageReferenceComponent {
|
|
|
5665
5770
|
(openDocument)="onOpenDocument($event)"
|
|
5666
5771
|
/>
|
|
5667
5772
|
</ng-template>
|
|
5668
|
-
`, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferencePageComponent, selector: "ChatReferencePage", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] });
|
|
5773
|
+
`, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferencePageComponent, selector: "ChatReferencePage", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] });
|
|
5669
5774
|
}
|
|
5670
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5775
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PageReferenceComponent, decorators: [{
|
|
5671
5776
|
type: Component,
|
|
5672
5777
|
args: [{ selector: "page-reference", imports: [TooltipDirective, ChatReferencePageComponent], template: `
|
|
5673
5778
|
<span
|
|
@@ -5695,9 +5800,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5695
5800
|
}] } });
|
|
5696
5801
|
|
|
5697
5802
|
class ImageReferenceComponent {
|
|
5698
|
-
|
|
5699
|
-
|
|
5700
|
-
|
|
5803
|
+
// je suis obligé d'utiliser les décorateurs @Input() car Angular ne supporte pas les inputs (signal) dans les web elements en Angular v18
|
|
5804
|
+
id;
|
|
5805
|
+
attachment;
|
|
5806
|
+
ref = {};
|
|
5701
5807
|
ngOnChanges() {
|
|
5702
5808
|
if (!this.attachment)
|
|
5703
5809
|
return;
|
|
@@ -5721,8 +5827,8 @@ class ImageReferenceComponent {
|
|
|
5721
5827
|
detail: { reference: attachment }
|
|
5722
5828
|
}));
|
|
5723
5829
|
}
|
|
5724
|
-
static
|
|
5725
|
-
static
|
|
5830
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5831
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ImageReferenceComponent, isStandalone: true, selector: "image-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
|
|
5726
5832
|
<span
|
|
5727
5833
|
class="reference"
|
|
5728
5834
|
[sqTooltip]="{ obj: ref, id }"
|
|
@@ -5740,9 +5846,9 @@ class ImageReferenceComponent {
|
|
|
5740
5846
|
(openDocument)="onOpenDocument($event)"
|
|
5741
5847
|
/>
|
|
5742
5848
|
</ng-template>
|
|
5743
|
-
`, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceImageComponent, selector: "ChatReferenceImage", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] });
|
|
5849
|
+
`, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceImageComponent, selector: "ChatReferenceImage", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] });
|
|
5744
5850
|
}
|
|
5745
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5851
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageReferenceComponent, decorators: [{
|
|
5746
5852
|
type: Component,
|
|
5747
5853
|
args: [{ selector: "image-reference", imports: [TooltipDirective, ChatReferenceImageComponent], template: `
|
|
5748
5854
|
<span
|
|
@@ -5770,11 +5876,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5770
5876
|
}] } });
|
|
5771
5877
|
|
|
5772
5878
|
class CodeBlockComponent {
|
|
5773
|
-
|
|
5774
|
-
|
|
5775
|
-
|
|
5776
|
-
this.copying = signal(false);
|
|
5777
|
-
}
|
|
5879
|
+
langname = "";
|
|
5880
|
+
el = inject(ElementRef);
|
|
5881
|
+
copying = signal(false, ...(ngDevMode ? [{ debugName: "copying" }] : []));
|
|
5778
5882
|
handleClick(event) {
|
|
5779
5883
|
event.stopPropagation();
|
|
5780
5884
|
// get the code content
|
|
@@ -5821,8 +5925,8 @@ class CodeBlockComponent {
|
|
|
5821
5925
|
document.body.removeChild(textarea);
|
|
5822
5926
|
}
|
|
5823
5927
|
}
|
|
5824
|
-
static
|
|
5825
|
-
static
|
|
5928
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CodeBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5929
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: CodeBlockComponent, isStandalone: true, selector: "code-block", inputs: { langname: "langname" }, ngImport: i0, template: `
|
|
5826
5930
|
<div class="card mb-2">
|
|
5827
5931
|
<div class="card-header d-flex justify-content-end align-items-center">
|
|
5828
5932
|
<span class="me-auto">{{ langname || 'code'}}</span>
|
|
@@ -5836,13 +5940,12 @@ class CodeBlockComponent {
|
|
|
5836
5940
|
</div>
|
|
5837
5941
|
<ng-content></ng-content>
|
|
5838
5942
|
</div>
|
|
5839
|
-
`, isInline: true });
|
|
5943
|
+
`, isInline: true });
|
|
5840
5944
|
}
|
|
5841
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
5945
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CodeBlockComponent, decorators: [{
|
|
5842
5946
|
type: Component,
|
|
5843
5947
|
args: [{
|
|
5844
5948
|
selector: "code-block",
|
|
5845
|
-
imports: [],
|
|
5846
5949
|
template: `
|
|
5847
5950
|
<div class="card mb-2">
|
|
5848
5951
|
<div class="card-header d-flex justify-content-end align-items-center">
|
|
@@ -5865,10 +5968,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5865
5968
|
}] } });
|
|
5866
5969
|
|
|
5867
5970
|
class TableToolsComponent {
|
|
5868
|
-
|
|
5869
|
-
|
|
5870
|
-
this.copied = signal(false);
|
|
5871
|
-
}
|
|
5971
|
+
host = inject((ElementRef));
|
|
5972
|
+
copied = signal(false, ...(ngDevMode ? [{ debugName: "copied" }] : []));
|
|
5872
5973
|
get table() {
|
|
5873
5974
|
return this.host.nativeElement.querySelector('table');
|
|
5874
5975
|
}
|
|
@@ -5925,8 +6026,8 @@ class TableToolsComponent {
|
|
|
5925
6026
|
.join(','));
|
|
5926
6027
|
return rows.join('\n');
|
|
5927
6028
|
}
|
|
5928
|
-
static
|
|
5929
|
-
static
|
|
6029
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TableToolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6030
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: TableToolsComponent, isStandalone: true, selector: "table-tools", providers: [provideTranslocoScope('custom-elements')], ngImport: i0, template: `
|
|
5930
6031
|
<div class="card mb-2">
|
|
5931
6032
|
<div class="card-header d-flex justify-content-end align-items-center">
|
|
5932
6033
|
<button class="btn btn-light btn-sm" (click)="copyAsCSV()" [sqTooltip]="copied() ? ('customElements.copied' | transloco) : ('customElements.copyAsCSV' | transloco)">
|
|
@@ -5942,9 +6043,9 @@ class TableToolsComponent {
|
|
|
5942
6043
|
</div>
|
|
5943
6044
|
<ng-content></ng-content>
|
|
5944
6045
|
</div>
|
|
5945
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6046
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5946
6047
|
}
|
|
5947
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
6048
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TableToolsComponent, decorators: [{
|
|
5948
6049
|
type: Component,
|
|
5949
6050
|
args: [{
|
|
5950
6051
|
selector: 'table-tools',
|
|
@@ -5971,6 +6072,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5971
6072
|
}]
|
|
5972
6073
|
}] });
|
|
5973
6074
|
|
|
6075
|
+
class ChartPlotComponent {
|
|
6076
|
+
chartPlotRef;
|
|
6077
|
+
destroyRef = inject(DestroyRef);
|
|
6078
|
+
chart;
|
|
6079
|
+
constructor() {
|
|
6080
|
+
// Cleanup on destroy
|
|
6081
|
+
this.destroyRef.onDestroy(() => {
|
|
6082
|
+
this.chart?.destroy();
|
|
6083
|
+
});
|
|
6084
|
+
}
|
|
6085
|
+
ngAfterViewInit() {
|
|
6086
|
+
const config = this.parseChartJsConfig();
|
|
6087
|
+
if (!config)
|
|
6088
|
+
return;
|
|
6089
|
+
// ✅ Render chart directly into canvas
|
|
6090
|
+
this.chart = new Chart(this.chartPlotRef.nativeElement, config);
|
|
6091
|
+
}
|
|
6092
|
+
parseChartJsConfig() {
|
|
6093
|
+
const rawConfig = this.getChartJsConfig();
|
|
6094
|
+
if (!rawConfig)
|
|
6095
|
+
return null;
|
|
6096
|
+
try {
|
|
6097
|
+
return JSON.parse(rawConfig);
|
|
6098
|
+
}
|
|
6099
|
+
catch (e) {
|
|
6100
|
+
return null;
|
|
6101
|
+
}
|
|
6102
|
+
}
|
|
6103
|
+
getChartJsConfig() {
|
|
6104
|
+
return this.chartPlotRef.nativeElement.parentElement?.textContent?.trim() ?? '';
|
|
6105
|
+
}
|
|
6106
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartPlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6107
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ChartPlotComponent, isStandalone: true, selector: "chart-plot", viewQueries: [{ propertyName: "chartPlotRef", first: true, predicate: ["chartPlot"], descendants: true, static: true }], ngImport: i0, template: `
|
|
6108
|
+
<canvas #chartPlot></canvas>
|
|
6109
|
+
<div style="display:none">
|
|
6110
|
+
<ng-content></ng-content>
|
|
6111
|
+
</div>
|
|
6112
|
+
`, isInline: true });
|
|
6113
|
+
}
|
|
6114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartPlotComponent, decorators: [{
|
|
6115
|
+
type: Component,
|
|
6116
|
+
args: [{
|
|
6117
|
+
selector: 'chart-plot',
|
|
6118
|
+
standalone: true,
|
|
6119
|
+
template: `
|
|
6120
|
+
<canvas #chartPlot></canvas>
|
|
6121
|
+
<div style="display:none">
|
|
6122
|
+
<ng-content></ng-content>
|
|
6123
|
+
</div>
|
|
6124
|
+
`
|
|
6125
|
+
}]
|
|
6126
|
+
}], ctorParameters: () => [], propDecorators: { chartPlotRef: [{
|
|
6127
|
+
type: ViewChild,
|
|
6128
|
+
args: ['chartPlot', { static: true }]
|
|
6129
|
+
}] } });
|
|
6130
|
+
|
|
5974
6131
|
function markdownItCodeBlockPlugin(md) {
|
|
5975
6132
|
const defaultFenceRenderer = md.renderer.rules.fence;
|
|
5976
6133
|
md.renderer.rules.fence = (tokens, idx, options, env, self) => {
|
|
@@ -6212,6 +6369,24 @@ function markdownItTableToolsPlugin(md) {
|
|
|
6212
6369
|
};
|
|
6213
6370
|
}
|
|
6214
6371
|
|
|
6372
|
+
/**
|
|
6373
|
+
* Markdown-it plugin to replace ```chartjs fenced blocks
|
|
6374
|
+
* with <chart-plot> custom elements.
|
|
6375
|
+
*/
|
|
6376
|
+
function markdownItChartJsPlugin(md) {
|
|
6377
|
+
const defaultFence = md.renderer.rules.fence;
|
|
6378
|
+
md.renderer.rules.fence = (tokens, idx, options, env, self) => {
|
|
6379
|
+
const token = tokens[idx];
|
|
6380
|
+
// Only process fenced blocks labeled 'chartjs'
|
|
6381
|
+
if (token.info.trim() !== 'chartjs') {
|
|
6382
|
+
return defaultFence(tokens, idx, options, env, self);
|
|
6383
|
+
}
|
|
6384
|
+
const content = token.content.trim();
|
|
6385
|
+
console.log('chartjs content:', content);
|
|
6386
|
+
return `<chart-plot>${content}</chart-plot>`;
|
|
6387
|
+
};
|
|
6388
|
+
}
|
|
6389
|
+
|
|
6215
6390
|
// src/app/core/app-injector.ts
|
|
6216
6391
|
/**
|
|
6217
6392
|
* Static variable to hold the root Angular Injector.
|
|
@@ -6236,13 +6411,13 @@ function getAppInjector() {
|
|
|
6236
6411
|
*/
|
|
6237
6412
|
const ASSISTANT_UNAUTHORIZED_ACTION_TOKEN = new InjectionToken('Function to execute on 401 unauthorized');
|
|
6238
6413
|
class GlobalErrorHandlerService {
|
|
6414
|
+
unauthorizedAction = inject(ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, { optional: true });
|
|
6415
|
+
/** Prevents infinite unauthorized attempts */
|
|
6416
|
+
_authAttempted = false;
|
|
6417
|
+
/** Tracks if a re-authentication process is currently in progress */
|
|
6418
|
+
_reauthInProgress = false;
|
|
6419
|
+
authEventListener = null;
|
|
6239
6420
|
constructor() {
|
|
6240
|
-
this.unauthorizedAction = inject(ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, { optional: true });
|
|
6241
|
-
/** Prevents infinite unauthorized attempts */
|
|
6242
|
-
this._authAttempted = false;
|
|
6243
|
-
/** Tracks if a re-authentication process is currently in progress */
|
|
6244
|
-
this._reauthInProgress = false;
|
|
6245
|
-
this.authEventListener = null;
|
|
6246
6421
|
this.setupAuthEventListener();
|
|
6247
6422
|
}
|
|
6248
6423
|
/**
|
|
@@ -6311,10 +6486,10 @@ class GlobalErrorHandlerService {
|
|
|
6311
6486
|
this.authEventListener = null;
|
|
6312
6487
|
}
|
|
6313
6488
|
}
|
|
6314
|
-
static
|
|
6315
|
-
static
|
|
6489
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GlobalErrorHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6490
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GlobalErrorHandlerService, providedIn: 'root' });
|
|
6316
6491
|
}
|
|
6317
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
6492
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GlobalErrorHandlerService, decorators: [{
|
|
6318
6493
|
type: Injectable,
|
|
6319
6494
|
args: [{
|
|
6320
6495
|
providedIn: 'root',
|
|
@@ -6404,5 +6579,5 @@ const handleUnauthorizedLogic = () => {
|
|
|
6404
6579
|
* Generated bundle index. Do not edit.
|
|
6405
6580
|
*/
|
|
6406
6581
|
|
|
6407
|
-
export { ASSISTANT_CUSTOM_ELEMENTS, ASSISTANT_MARKDOWN_IT_PLUGINS, ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, ChatComponent, ChatReferenceComponent, ChatReferenceImageComponent, ChatReferencePageComponent, ChatService, ChatSettingsV3Component, CodeBlockComponent, CustomElementsService, DocumentListComponent, DocumentOverviewComponent, DocumentReferenceComponent, DocumentUploadComponent, DocumentsUploadService, EMBEDDED_IMAGE_NAME, EMBEDDED_PAGE_NAME, FormatIconComponent, GlobalErrorHandlerService, ImageReferenceComponent, InitialsAvatarComponent, InstanceManagerService, NotificationsService, PageReferenceComponent, SavedChatsComponent, TableToolsComponent, chatConfigSchema, connectionSettingsSchema, getAppInjector, handleUnauthorizedLogic, initializeCustomElements, initializeFetchInterceptor, markdownItCodeBlockPlugin, markdownItDocumentReferencePlugin, markdownItImageReferencePlugin, markdownItLinkPlugin, markdownItPageReferencePlugin, markdownItTableToolsPlugin, setAppInjector };
|
|
6582
|
+
export { ASSISTANT_CUSTOM_ELEMENTS, ASSISTANT_MARKDOWN_IT_PLUGINS, ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, ChartPlotComponent, ChatComponent, ChatReferenceComponent, ChatReferenceImageComponent, ChatReferencePageComponent, ChatService, ChatSettingsV3Component, CodeBlockComponent, CustomElementsService, DocumentListComponent, DocumentOverviewComponent, DocumentReferenceComponent, DocumentUploadComponent, DocumentsUploadService, EMBEDDED_IMAGE_NAME, EMBEDDED_PAGE_NAME, FormatIconComponent, GlobalErrorHandlerService, ImageReferenceComponent, InitialsAvatarComponent, InstanceManagerService, NotificationsService, PageReferenceComponent, SavedChatsComponent, TableToolsComponent, chatConfigSchema, connectionSettingsSchema, getAppInjector, handleUnauthorizedLogic, initializeCustomElements, initializeFetchInterceptor, markdownItChartJsPlugin, markdownItCodeBlockPlugin, markdownItDocumentReferencePlugin, markdownItImageReferencePlugin, markdownItLinkPlugin, markdownItPageReferencePlugin, markdownItTableToolsPlugin, setAppInjector };
|
|
6408
6583
|
//# sourceMappingURL=sinequa-assistant-chat.mjs.map
|