@servicetitan/anvil2-ext-atlas 1.2.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/atlas-header-Cxxvgc7g.js +40 -0
- package/dist/atlas-header-Cxxvgc7g.js.map +1 -0
- package/dist/atlas-header.js +1 -1
- package/dist/{chat-composer-rich-Bj1gmhec.js → chat-composer-rich-BXkSuUJL.js} +8 -8
- package/dist/{chat-composer-rich-Bj1gmhec.js.map → chat-composer-rich-BXkSuUJL.js.map} +1 -1
- package/dist/chat-composer-rich.css +38 -41
- package/dist/chat-composer-rich.js +1 -1
- package/dist/{chat-window-BU8VGO9z.js → chat-window-DBUlbdg8.js} +8 -8
- package/dist/{chat-window-BU8VGO9z.js.map → chat-window-DBUlbdg8.js.map} +1 -1
- package/dist/chat-window.css +9 -9
- package/dist/chat.js +1 -1
- package/dist/components/atlas-header/atlas-header.d.ts +11 -2
- package/dist/components/loader/index.d.ts +1 -0
- package/dist/components/loader/pulse-loader.d.ts +30 -0
- package/dist/components/messages/assistant-message.d.ts +2 -0
- package/dist/components/messages/markdown-message.d.ts +2 -0
- package/dist/{content-DAPOfSv5.js → content-DGEN1Tcq.js} +3 -3
- package/dist/{content-DAPOfSv5.js.map → content-DGEN1Tcq.js.map} +1 -1
- package/dist/content.css +8 -10
- package/dist/content.js +1 -1
- package/dist/{footer-Cv4yRBA1.js → footer-B5u9oSlP.js} +6 -6
- package/dist/footer-B5u9oSlP.js.map +1 -0
- package/dist/footer.css +6 -6
- package/dist/footer.js +1 -1
- package/dist/{header-ku2JmzDC.js → header-DFb1Mw8C.js} +4 -4
- package/dist/header-DFb1Mw8C.js.map +1 -0
- package/dist/header.css +19 -21
- package/dist/header.js +1 -1
- package/dist/index.js +16 -15
- package/dist/index.js.map +1 -1
- package/dist/{infinite-content-BnStGJfq.js → infinite-content-CUXfEs3y.js} +5 -5
- package/dist/{infinite-content-BnStGJfq.js.map → infinite-content-CUXfEs3y.js.map} +1 -1
- package/dist/infinite-content.css +13 -13
- package/dist/infinite-content.js +1 -1
- package/dist/{loader-DYmcO1Y_.js → loader-CFGGtqVo.js} +5 -5
- package/dist/loader-CFGGtqVo.js.map +1 -0
- package/dist/loader.js +2 -1
- package/dist/loader.js.map +1 -1
- package/dist/{markdown-text-BXCCdmOl.js → markdown-text-DWHdZVVX.js} +2 -2
- package/dist/{markdown-text-BXCCdmOl.js.map → markdown-text-DWHdZVVX.js.map} +1 -1
- package/dist/markdown-text.css +27 -23
- package/dist/markdown-text.js +1 -1
- package/dist/messages.js +1 -1
- package/dist/{notification-card-CdQVC1kO.js → notification-card-Bhi2-mQR.js} +13 -6
- package/dist/notification-card-Bhi2-mQR.js.map +1 -0
- package/dist/notification-card.js +1 -1
- package/dist/{proxy-B3m3ViIw.js → proxy-BJr91CAa.js} +2 -2
- package/dist/{proxy-B3m3ViIw.js.map → proxy-BJr91CAa.js.map} +1 -1
- package/dist/pulse-loader-DUrtKYC5.js +390 -0
- package/dist/pulse-loader-DUrtKYC5.js.map +1 -0
- package/dist/recommendations.js +1 -1
- package/dist/screens.js +1 -1
- package/dist/{single-recommendation-card-DgAQbMg4.js → single-recommendation-card-CV75jkZb.js} +2 -2
- package/dist/{single-recommendation-card-DgAQbMg4.js.map → single-recommendation-card-CV75jkZb.js.map} +1 -1
- package/dist/{spinner-QnlThoJs.js → spinner-DV6XzVPx.js} +2 -2
- package/dist/{spinner-QnlThoJs.js.map → spinner-DV6XzVPx.js.map} +1 -1
- package/dist/spinner.css +5 -5
- package/dist/spinner.js +1 -1
- package/dist/{suggestion-pJLJZyjg.js → suggestion-BQxfnBot.js} +3 -3
- package/dist/suggestion-BQxfnBot.js.map +1 -0
- package/dist/suggestion.js +1 -1
- package/dist/{user-message-BFrCI10z.js → user-message-CNRLUNb-.js} +51 -28
- package/dist/user-message-CNRLUNb-.js.map +1 -0
- package/dist/user-message.css +101 -111
- package/dist/{welcome-CLNfeZDg.js → welcome-aZxbV1rc.js} +8 -8
- package/dist/welcome-aZxbV1rc.js.map +1 -0
- package/dist/welcome.css +10 -11
- package/package.json +11 -11
- package/dist/atlas-header-CYHhcWuk.js +0 -23
- package/dist/atlas-header-CYHhcWuk.js.map +0 -1
- package/dist/footer-Cv4yRBA1.js.map +0 -1
- package/dist/header-ku2JmzDC.js.map +0 -1
- package/dist/loader-DYmcO1Y_.js.map +0 -1
- package/dist/notification-card-CdQVC1kO.js.map +0 -1
- package/dist/suggestion-pJLJZyjg.js.map +0 -1
- package/dist/user-message-BFrCI10z.js.map +0 -1
- package/dist/welcome-CLNfeZDg.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @servicetitan/anvil2-ext-atlas
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [#1899](https://github.com/servicetitan/hammer/pull/1899) [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5) Thanks [@tounsoo](https://github.com/tounsoo)! - 3.0 Pre-release.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5), [`6ea319a`](https://github.com/servicetitan/hammer/commit/6ea319a282209312485756bfd37f1e2102f8c7e5)]:
|
|
12
|
+
- @servicetitan/anvil2@3.0.0
|
|
13
|
+
|
|
14
|
+
## 1.3.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- [#2200](https://github.com/servicetitan/hammer/pull/2200) [`df50c67`](https://github.com/servicetitan/hammer/commit/df50c67c10afb863377f638e2c305738b811f4e2) Thanks [@arnold-dad-st](https://github.com/arnold-dad-st)! - [PulseLoader] Add new `PulseLoader` component replacing the 3-dot loader with an animated Atlas logo and status text; update `AssistantMessage`, `MarkdownMessage`, and `Thinking` to use the new loader with an optional `statusMessage` prop
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [[`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`0814ff2`](https://github.com/servicetitan/hammer/commit/0814ff20e6fe13264289c13014ed3646ca08e69e), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`5cef90f`](https://github.com/servicetitan/hammer/commit/5cef90f66ffba73a29f485848312bd5f9cc67037), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`f8d56e0`](https://github.com/servicetitan/hammer/commit/f8d56e000d06d8b1725674de99e8e60dcd1e940f), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`1f3828b`](https://github.com/servicetitan/hammer/commit/1f3828bf0708c806ba03b681425eec6deae4a8b8), [`75f1cf1`](https://github.com/servicetitan/hammer/commit/75f1cf1d9a13bd95daf1d1913602898baa0df199), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`c27d4df`](https://github.com/servicetitan/hammer/commit/c27d4dfcc4088189eb3c9f7609d7656b6859936a), [`f8d56e0`](https://github.com/servicetitan/hammer/commit/f8d56e000d06d8b1725674de99e8e60dcd1e940f), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165), [`6042a60`](https://github.com/servicetitan/hammer/commit/6042a60d0b6bc2861ef92946cad8812d276b2165)]:
|
|
23
|
+
- @servicetitan/anvil2@2.8.0
|
|
24
|
+
|
|
3
25
|
## 1.2.3
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Flex, Icon, Text } from '@servicetitan/anvil2';
|
|
3
|
+
import { P as PulseLoader, S as SvgAtlasLogo } from './pulse-loader-DUrtKYC5.js';
|
|
4
|
+
|
|
5
|
+
const AtlasHeader = ({
|
|
6
|
+
svgIcon,
|
|
7
|
+
assistant = "Atlas",
|
|
8
|
+
className,
|
|
9
|
+
loading = false,
|
|
10
|
+
statusMessage = "Thinking..."
|
|
11
|
+
}) => {
|
|
12
|
+
if (loading) {
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
PulseLoader,
|
|
15
|
+
{
|
|
16
|
+
className,
|
|
17
|
+
statusMessage,
|
|
18
|
+
svgIcon
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
return /* @__PURE__ */ jsxs(Flex, { className, alignItems: "flex-start", gap: 3, children: [
|
|
23
|
+
/* @__PURE__ */ jsx(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
style: {
|
|
27
|
+
flexShrink: 0,
|
|
28
|
+
display: "flex",
|
|
29
|
+
alignItems: "center",
|
|
30
|
+
marginTop: "3px"
|
|
31
|
+
},
|
|
32
|
+
children: /* @__PURE__ */ jsx(Icon, { svg: svgIcon ?? SvgAtlasLogo, size: "medium", inherit: true })
|
|
33
|
+
}
|
|
34
|
+
),
|
|
35
|
+
/* @__PURE__ */ jsx(Text, { inline: true, children: /* @__PURE__ */ jsx("b", { children: assistant }) })
|
|
36
|
+
] });
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export { AtlasHeader as A };
|
|
40
|
+
//# sourceMappingURL=atlas-header-Cxxvgc7g.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlas-header-Cxxvgc7g.js","sources":["../src/components/atlas-header/atlas-header.tsx"],"sourcesContent":["import { FC } from \"react\";\nimport { Flex, Icon, Svg, Text } from \"@servicetitan/anvil2\";\nimport IconAtlasLogo from \"@servicetitan/anvil2/assets/icons/st/atlas_logo.svg\";\nimport { PulseLoader } from \"../loader\";\n\nexport interface AtlasHeaderProps {\n /**\n * Custom icon to display instead of the default Atlas logo\n */\n svgIcon?: Svg;\n /**\n * Custom assistant name to display instead of \"Atlas\"\n */\n assistant?: string;\n /**\n * Additional CSS class names\n */\n className?: string;\n /**\n * Whether the loading animation is active\n */\n loading?: boolean;\n /**\n * Status message shown while loading. Defaults to \"Thinking...\"\n */\n statusMessage?: string;\n}\n\n/**\n * Shared component that displays the Atlas logo and name header.\n * When loading is true, the icon pulses and shows the statusMessage with a gradient sweep animation.\n * Used across all message types and recommendation cards.\n */\nexport const AtlasHeader: FC<AtlasHeaderProps> = ({\n svgIcon,\n assistant = \"Atlas\",\n className,\n loading = false,\n statusMessage = \"Thinking...\",\n}) => {\n if (loading) {\n return (\n <PulseLoader\n className={className}\n statusMessage={statusMessage}\n svgIcon={svgIcon}\n />\n );\n }\n\n return (\n <Flex className={className} alignItems=\"flex-start\" gap={3}>\n <div\n style={{\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n marginTop: \"3px\",\n }}\n >\n <Icon svg={svgIcon ?? IconAtlasLogo} size=\"medium\" inherit />\n </div>\n <Text inline>\n <b>{assistant}</b>\n </Text>\n </Flex>\n );\n};\n"],"names":["IconAtlasLogo"],"mappings":";;;;AAiCO,MAAM,cAAoC,CAAC;AAAA,EAChD,OAAA;AAAA,EACA,SAAA,GAAY,OAAA;AAAA,EACZ,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,aAAA,GAAgB;AAClB,CAAA,KAAM;AACJ,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACE,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,4BACG,IAAA,EAAA,EAAK,SAAA,EAAsB,UAAA,EAAW,YAAA,EAAa,KAAK,CAAA,EACvD,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,CAAA;AAAA,UACZ,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,SAAA,EAAW;AAAA,SACb;AAAA,QAEA,QAAA,kBAAA,GAAA,CAAC,QAAK,GAAA,EAAK,OAAA,IAAWA,cAAe,IAAA,EAAK,QAAA,EAAS,SAAO,IAAA,EAAC;AAAA;AAAA,KAC7D;AAAA,wBACC,IAAA,EAAA,EAAK,MAAA,EAAM,MACV,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAG,qBAAU,CAAA,EAChB;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
package/dist/atlas-header.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { A as AtlasHeader } from './atlas-header-
|
|
1
|
+
export { A as AtlasHeader } from './atlas-header-Cxxvgc7g.js';
|
|
2
2
|
//# sourceMappingURL=atlas-header.js.map
|
|
@@ -12,16 +12,16 @@ const SvgSend = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "
|
|
|
12
12
|
|
|
13
13
|
const SvgAttachFile = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: 24, height: 24, viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M17.5 15.438q0 2.382-1.673 4.056t-4.056 1.673q-2.384 0-4.056-1.673-1.674-1.674-1.673-4.056v-8.48q0-1.718 1.203-2.922 1.203-1.203 2.922-1.203t2.922 1.203q1.203 1.205 1.203 2.922v8.021q0 1.055-.734 1.788a2.43 2.43 0 0 1-1.787.733 2.43 2.43 0 0 1-1.788-.733 2.43 2.43 0 0 1-.733-1.788V7.417q0-.39.264-.653a.9.9 0 0 1 .653-.264q.39 0 .653.264a.9.9 0 0 1 .263.653v7.562a.67.67 0 0 0 .688.688.67.67 0 0 0 .687-.688V6.96a2.32 2.32 0 0 0-.676-1.628q-.653-.664-1.615-.664-.963 0-1.627.664a2.2 2.2 0 0 0-.665 1.627v8.48q-.023 1.627 1.123 2.761t2.773 1.134q1.604 0 2.727-1.134t1.169-2.762v-8.02q0-.39.263-.653a.9.9 0 0 1 .653-.264q.39 0 .653.264a.9.9 0 0 1 .264.653z" }));
|
|
14
14
|
|
|
15
|
-
const placeholder = "
|
|
16
|
-
const input = "
|
|
15
|
+
const placeholder = "_placeholder_1czf4_43";
|
|
16
|
+
const input = "_input_1czf4_36";
|
|
17
17
|
const styles = {
|
|
18
|
-
"composer-wrapper": "_composer-
|
|
19
|
-
"composer-form": "_composer-
|
|
20
|
-
"icon-button": "_icon-
|
|
21
|
-
"input-wrapper": "_input-
|
|
18
|
+
"composer-wrapper": "_composer-wrapper_1czf4_1",
|
|
19
|
+
"composer-form": "_composer-form_1czf4_9",
|
|
20
|
+
"icon-button": "_icon-button_1czf4_21",
|
|
21
|
+
"input-wrapper": "_input-wrapper_1czf4_36",
|
|
22
22
|
placeholder: placeholder,
|
|
23
23
|
input: input,
|
|
24
|
-
"send-button": "_send-
|
|
24
|
+
"send-button": "_send-button_1czf4_99"};
|
|
25
25
|
|
|
26
26
|
const ChatComposerRich = ({
|
|
27
27
|
message,
|
|
@@ -153,4 +153,4 @@ const ChatComposerRich = ({
|
|
|
153
153
|
};
|
|
154
154
|
|
|
155
155
|
export { ChatComposerRich as C };
|
|
156
|
-
//# sourceMappingURL=chat-composer-rich-
|
|
156
|
+
//# sourceMappingURL=chat-composer-rich-BXkSuUJL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-composer-rich-Bj1gmhec.js","sources":["../../anvil2/dist/assets/icons/material/round/add.svg","../../anvil2/dist/assets/icons/material/round/mic.svg","../../anvil2/dist/assets/icons/material/round/send.svg","../../anvil2/dist/assets/icons/st/attach_file.svg","../src/components/chat-composer-rich/chat-composer-rich.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z\" }));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgMic = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.91-3c-.49 0-.9.36-.98.85C16.52 14.2 14.47 16 12 16s-4.52-1.8-4.93-4.15a.998.998 0 0 0-.98-.85c-.61 0-1.09.54-1 1.14.49 3 2.89 5.35 5.91 5.78V20c0 .55.45 1 1 1s1-.45 1-1v-2.08a6.993 6.993 0 0 0 5.91-5.78c.1-.6-.39-1.14-1-1.14z\" }));\nexport default SvgMic;\n","import * as React from \"react\";\nconst SvgSend = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m3.4 20.4 17.45-7.48a1 1 0 0 0 0-1.84L3.4 3.6a.993.993 0 0 0-1.39.91L2 9.12c0 .5.37.93.87.99L17 12 2.87 13.88c-.5.07-.87.5-.87 1l.01 4.61c0 .71.73 1.2 1.39.91z\" }));\nexport default SvgSend;\n","import * as React from \"react\";\nconst SvgAttachFile = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.5 15.438q0 2.382-1.673 4.056t-4.056 1.673q-2.384 0-4.056-1.673-1.674-1.674-1.673-4.056v-8.48q0-1.718 1.203-2.922 1.203-1.203 2.922-1.203t2.922 1.203q1.203 1.205 1.203 2.922v8.021q0 1.055-.734 1.788a2.43 2.43 0 0 1-1.787.733 2.43 2.43 0 0 1-1.788-.733 2.43 2.43 0 0 1-.733-1.788V7.417q0-.39.264-.653a.9.9 0 0 1 .653-.264q.39 0 .653.264a.9.9 0 0 1 .263.653v7.562a.67.67 0 0 0 .688.688.67.67 0 0 0 .687-.688V6.96a2.32 2.32 0 0 0-.676-1.628q-.653-.664-1.615-.664-.963 0-1.627.664a2.2 2.2 0 0 0-.665 1.627v8.48q-.023 1.627 1.123 2.761t2.773 1.134q1.604 0 2.727-1.134t1.169-2.762v-8.02q0-.39.263-.653a.9.9 0 0 1 .653-.264q.39 0 .653.264a.9.9 0 0 1 .264.653z\" }));\nexport default SvgAttachFile;\n","import { KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { Button, Menu } from \"@servicetitan/anvil2\";\nimport IconPlus from \"@servicetitan/anvil2/assets/icons/material/round/add.svg\";\nimport IconMic from \"@servicetitan/anvil2/assets/icons/material/round/mic.svg\";\nimport IconSend from \"@servicetitan/anvil2/assets/icons/material/round/send.svg\";\nimport IconAttachFile from \"@servicetitan/anvil2/assets/icons/st/attach_file.svg\";\n\nimport styles from \"./chat-composer-rich.module.scss\";\n\nexport interface ChatComposerRichProps {\n message?: string;\n /** Callback when user submits a message */\n onSend?: (text: string) => void;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the composer is disabled */\n disabled?: boolean;\n /** Additional CSS class name */\n className?: string;\n onChange: (text: string) => void;\n /** Callback when upload file is selected from menu */\n onUploadFile?: () => void;\n /** Callback when dictate message is selected from menu */\n onDictateMessage?: () => void;\n /** ID for the menu button */\n menuButtonId?: string;\n /** ID for the send icon button */\n sendIconId?: string;\n /** ID for the message input area */\n messageInputId?: string;\n}\n\nexport const ChatComposerRich = ({\n message,\n onSend,\n onChange,\n placeholder = \"Ask anything...\",\n disabled = false,\n className,\n onUploadFile,\n onDictateMessage,\n messageInputId,\n sendIconId,\n}: ChatComposerRichProps) => {\n const [isEmpty, setIsEmpty] = useState(true);\n const editorRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (editorRef.current && message) {\n editorRef.current.innerText = message;\n }\n }, [message]);\n\n const handleInput = () => {\n const text = editorRef.current?.innerText.trim() ?? \"\";\n setIsEmpty(text.length === 0);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const handleSubmit = () => {\n if (disabled) {\n return;\n }\n\n const text = editorRef.current?.innerText.trim() ?? \"\";\n onChange(text);\n if (!text) {\n return;\n }\n\n onSend?.(text);\n\n if (editorRef.current) {\n // Clear content while preserving the element structure\n editorRef.current.innerText = \"\";\n // Keep focus in the input for smooth conversation flow\n editorRef.current.focus();\n }\n setIsEmpty(true);\n };\n\n useEffect(() => {\n // Ensure empty placeholder is visible on mount\n setIsEmpty(!editorRef.current?.innerText.trim());\n }, []);\n\n return (\n <div className={classNames(styles[\"composer-wrapper\"], className)}>\n <form\n onSubmit={(e) => e.preventDefault()}\n className={styles[\"composer-form\"]}\n >\n {onDictateMessage || onUploadFile ? (\n <Menu\n id=\"\"\n trigger={(props) => (\n <Button\n {...props}\n type=\"button\"\n aria-label=\"Open menu\"\n disabled={disabled}\n className={styles[\"icon-button\"]}\n icon={IconPlus}\n size=\"small\"\n />\n )}\n disabled={disabled}\n >\n <Menu.Item\n label=\"Upload file\"\n icon={IconAttachFile}\n onClick={onUploadFile}\n />\n <Menu.Item\n label=\"Dictate message\"\n icon={IconMic}\n onClick={onDictateMessage}\n />\n </Menu>\n ) : (\n <div />\n )}\n\n <div className={styles[\"input-wrapper\"]}>\n <div\n id={messageInputId}\n ref={editorRef}\n contentEditable=\"plaintext-only\"\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={placeholder}\n data-placeholder={placeholder}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n className={styles[\"input\"]}\n tabIndex={0}\n />\n {isEmpty && (\n <span className={styles[\"placeholder\"]}>{placeholder}</span>\n )}\n </div>\n\n <Button\n id={sendIconId}\n size=\"small\"\n type=\"button\"\n onClick={handleSubmit}\n disabled={disabled || isEmpty}\n className={styles[\"send-button\"]}\n aria-label=\"Send message\"\n appearance=\"ghost\"\n icon={IconSend}\n />\n </form>\n </div>\n );\n};\n"],"names":["IconPlus","IconAttachFile","IconMic","IconSend"],"mappings":";;;;;;AACA,MAAM,MAAM,GAAG,CAAC,KAAK,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,qIAAqI,EAAE,CAAC,CAAC;;ACA/V,MAAM,MAAM,GAAG,CAAC,KAAK,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,kTAAkT,EAAE,CAAC,CAAC;;ACA5gB,MAAM,OAAO,GAAG,CAAC,KAAK,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,iKAAiK,EAAE,CAAC,CAAC;;ACA5X,MAAM,aAAa,GAAG,CAAC,KAAK,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,ipBAAipB,EAAE,CAAC,CAAC;;;;;;;;;;;;;ACgC32B,MAAM,mBAAmB,CAAC;AAAA,EAC/B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,iBAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,OAAuB,IAAI,CAAA;AAE7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,CAAU,WAAW,OAAA,EAAS;AAChC,MAAA,SAAA,CAAU,QAAQ,SAAA,GAAY,OAAA;AAAA,IAChC;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,EAAS,SAAA,CAAU,MAAK,IAAK,EAAA;AACpD,IAAA,UAAA,CAAW,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqC;AAC1D,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,EAAE,QAAA,EAAU;AACpC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,YAAA,EAAa;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,EAAS,SAAA,CAAU,MAAK,IAAK,EAAA;AACpD,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,GAAS,IAAI,CAAA;AAEb,IAAA,IAAI,UAAU,OAAA,EAAS;AAErB,MAAA,SAAA,CAAU,QAAQ,SAAA,GAAY,EAAA;AAE9B,MAAA,SAAA,CAAU,QAAQ,KAAA,EAAM;AAAA,IAC1B;AACA,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,UAAA,CAAW,CAAC,SAAA,CAAU,OAAA,EAAS,SAAA,CAAU,MAAM,CAAA;AAAA,EACjD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAW,UAAA,CAAW,OAAO,kBAAkB,CAAA,EAAG,SAAS,CAAA,EAC9D,QAAA,kBAAA,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,MAClC,SAAA,EAAW,OAAO,eAAe,CAAA;AAAA,MAEhC,QAAA,EAAA;AAAA,QAAA,gBAAA,IAAoB,YAAA,mBACnB,IAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,EAAA;AAAA,YACH,OAAA,EAAS,CAAC,KAAA,qBACR,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACE,GAAG,KAAA;AAAA,gBACJ,IAAA,EAAK,QAAA;AAAA,gBACL,YAAA,EAAW,WAAA;AAAA,gBACX,QAAA;AAAA,gBACA,SAAA,EAAW,OAAO,aAAa,CAAA;AAAA,gBAC/B,IAAA,EAAMA,MAAA;AAAA,gBACN,IAAA,EAAK;AAAA;AAAA,aACP;AAAA,YAEF,QAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,IAAA,CAAK,IAAA;AAAA,gBAAL;AAAA,kBACC,KAAA,EAAM,aAAA;AAAA,kBACN,IAAA,EAAMC,aAAA;AAAA,kBACN,OAAA,EAAS;AAAA;AAAA,eACX;AAAA,8BACA,GAAA;AAAA,gBAAC,IAAA,CAAK,IAAA;AAAA,gBAAL;AAAA,kBACC,KAAA,EAAM,iBAAA;AAAA,kBACN,IAAA,EAAMC,MAAA;AAAA,kBACN,OAAA,EAAS;AAAA;AAAA;AACX;AAAA;AAAA,SACF,uBAEC,KAAA,EAAA,EAAI,CAAA;AAAA,wBAGP,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eAAe,CAAA,EACpC,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,cAAA;AAAA,cACJ,GAAA,EAAK,SAAA;AAAA,cACL,eAAA,EAAgB,gBAAA;AAAA,cAChB,IAAA,EAAK,SAAA;AAAA,cACL,gBAAA,EAAe,MAAA;AAAA,cACf,YAAA,EAAY,WAAA;AAAA,cACZ,kBAAA,EAAkB,WAAA;AAAA,cAClB,OAAA,EAAS,WAAA;AAAA,cACT,SAAA,EAAW,aAAA;AAAA,cACX,SAAA,EAAW,OAAO,OAAO,CAAA;AAAA,cACzB,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,UACC,2BACC,GAAA,CAAC,MAAA,EAAA,EAAK,WAAW,MAAA,CAAO,aAAa,GAAI,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAEzD,CAAA;AAAA,wBAEA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,UAAA;AAAA,YACJ,IAAA,EAAK,OAAA;AAAA,YACL,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA;AAAA,YACT,UAAU,QAAA,IAAY,OAAA;AAAA,YACtB,SAAA,EAAW,OAAO,aAAa,CAAA;AAAA,YAC/B,YAAA,EAAW,cAAA;AAAA,YACX,UAAA,EAAW,OAAA;AAAA,YACX,IAAA,EAAMC;AAAA;AAAA;AACR;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"chat-composer-rich-BXkSuUJL.js","sources":["../../anvil2/dist/assets/icons/material/round/add.svg","../../anvil2/dist/assets/icons/material/round/mic.svg","../../anvil2/dist/assets/icons/material/round/send.svg","../../anvil2/dist/assets/icons/st/attach_file.svg","../src/components/chat-composer-rich/chat-composer-rich.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z\" }));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgMic = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.91-3c-.49 0-.9.36-.98.85C16.52 14.2 14.47 16 12 16s-4.52-1.8-4.93-4.15a.998.998 0 0 0-.98-.85c-.61 0-1.09.54-1 1.14.49 3 2.89 5.35 5.91 5.78V20c0 .55.45 1 1 1s1-.45 1-1v-2.08a6.993 6.993 0 0 0 5.91-5.78c.1-.6-.39-1.14-1-1.14z\" }));\nexport default SvgMic;\n","import * as React from \"react\";\nconst SvgSend = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"m3.4 20.4 17.45-7.48a1 1 0 0 0 0-1.84L3.4 3.6a.993.993 0 0 0-1.39.91L2 9.12c0 .5.37.93.87.99L17 12 2.87 13.88c-.5.07-.87.5-.87 1l.01 4.61c0 .71.73 1.2 1.39.91z\" }));\nexport default SvgSend;\n","import * as React from \"react\";\nconst SvgAttachFile = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.5 15.438q0 2.382-1.673 4.056t-4.056 1.673q-2.384 0-4.056-1.673-1.674-1.674-1.673-4.056v-8.48q0-1.718 1.203-2.922 1.203-1.203 2.922-1.203t2.922 1.203q1.203 1.205 1.203 2.922v8.021q0 1.055-.734 1.788a2.43 2.43 0 0 1-1.787.733 2.43 2.43 0 0 1-1.788-.733 2.43 2.43 0 0 1-.733-1.788V7.417q0-.39.264-.653a.9.9 0 0 1 .653-.264q.39 0 .653.264a.9.9 0 0 1 .263.653v7.562a.67.67 0 0 0 .688.688.67.67 0 0 0 .687-.688V6.96a2.32 2.32 0 0 0-.676-1.628q-.653-.664-1.615-.664-.963 0-1.627.664a2.2 2.2 0 0 0-.665 1.627v8.48q-.023 1.627 1.123 2.761t2.773 1.134q1.604 0 2.727-1.134t1.169-2.762v-8.02q0-.39.263-.653a.9.9 0 0 1 .653-.264q.39 0 .653.264a.9.9 0 0 1 .264.653z\" }));\nexport default SvgAttachFile;\n","import { KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { Button, Menu } from \"@servicetitan/anvil2\";\nimport IconPlus from \"@servicetitan/anvil2/assets/icons/material/round/add.svg\";\nimport IconMic from \"@servicetitan/anvil2/assets/icons/material/round/mic.svg\";\nimport IconSend from \"@servicetitan/anvil2/assets/icons/material/round/send.svg\";\nimport IconAttachFile from \"@servicetitan/anvil2/assets/icons/st/attach_file.svg\";\n\nimport styles from \"./chat-composer-rich.module.scss\";\n\nexport interface ChatComposerRichProps {\n message?: string;\n /** Callback when user submits a message */\n onSend?: (text: string) => void;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the composer is disabled */\n disabled?: boolean;\n /** Additional CSS class name */\n className?: string;\n onChange: (text: string) => void;\n /** Callback when upload file is selected from menu */\n onUploadFile?: () => void;\n /** Callback when dictate message is selected from menu */\n onDictateMessage?: () => void;\n /** ID for the menu button */\n menuButtonId?: string;\n /** ID for the send icon button */\n sendIconId?: string;\n /** ID for the message input area */\n messageInputId?: string;\n}\n\nexport const ChatComposerRich = ({\n message,\n onSend,\n onChange,\n placeholder = \"Ask anything...\",\n disabled = false,\n className,\n onUploadFile,\n onDictateMessage,\n messageInputId,\n sendIconId,\n}: ChatComposerRichProps) => {\n const [isEmpty, setIsEmpty] = useState(true);\n const editorRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (editorRef.current && message) {\n editorRef.current.innerText = message;\n }\n }, [message]);\n\n const handleInput = () => {\n const text = editorRef.current?.innerText.trim() ?? \"\";\n setIsEmpty(text.length === 0);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const handleSubmit = () => {\n if (disabled) {\n return;\n }\n\n const text = editorRef.current?.innerText.trim() ?? \"\";\n onChange(text);\n if (!text) {\n return;\n }\n\n onSend?.(text);\n\n if (editorRef.current) {\n // Clear content while preserving the element structure\n editorRef.current.innerText = \"\";\n // Keep focus in the input for smooth conversation flow\n editorRef.current.focus();\n }\n setIsEmpty(true);\n };\n\n useEffect(() => {\n // Ensure empty placeholder is visible on mount\n setIsEmpty(!editorRef.current?.innerText.trim());\n }, []);\n\n return (\n <div className={classNames(styles[\"composer-wrapper\"], className)}>\n <form\n onSubmit={(e) => e.preventDefault()}\n className={styles[\"composer-form\"]}\n >\n {onDictateMessage || onUploadFile ? (\n <Menu\n id=\"\"\n trigger={(props) => (\n <Button\n {...props}\n type=\"button\"\n aria-label=\"Open menu\"\n disabled={disabled}\n className={styles[\"icon-button\"]}\n icon={IconPlus}\n size=\"small\"\n />\n )}\n disabled={disabled}\n >\n <Menu.Item\n label=\"Upload file\"\n icon={IconAttachFile}\n onClick={onUploadFile}\n />\n <Menu.Item\n label=\"Dictate message\"\n icon={IconMic}\n onClick={onDictateMessage}\n />\n </Menu>\n ) : (\n <div />\n )}\n\n <div className={styles[\"input-wrapper\"]}>\n <div\n id={messageInputId}\n ref={editorRef}\n contentEditable=\"plaintext-only\"\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={placeholder}\n data-placeholder={placeholder}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n className={styles[\"input\"]}\n tabIndex={0}\n />\n {isEmpty && (\n <span className={styles[\"placeholder\"]}>{placeholder}</span>\n )}\n </div>\n\n <Button\n id={sendIconId}\n size=\"small\"\n type=\"button\"\n onClick={handleSubmit}\n disabled={disabled || isEmpty}\n className={styles[\"send-button\"]}\n aria-label=\"Send message\"\n appearance=\"ghost\"\n icon={IconSend}\n />\n </form>\n </div>\n );\n};\n"],"names":["IconPlus","IconAttachFile","IconMic","IconSend"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@layer starter, reset, base, state, application;
|
|
2
2
|
|
|
3
|
-
._composer-
|
|
3
|
+
._composer-wrapper_1czf4_1 {
|
|
4
4
|
width: 100%;
|
|
5
5
|
margin-inline: auto;
|
|
6
6
|
display: flex;
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
flex: 1;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
._composer-
|
|
12
|
-
background-color: var(--background-color, #ffffff);
|
|
13
|
-
border: 0.0625rem solid var(--border-color, #949596);
|
|
11
|
+
._composer-form_1czf4_9 {
|
|
12
|
+
background-color: var(--a2-background-color-default, #ffffff);
|
|
13
|
+
border: 0.0625rem solid var(--a2-border-color-default, #949596);
|
|
14
14
|
border-radius: 0.375rem;
|
|
15
15
|
padding: 0 0.5rem;
|
|
16
16
|
display: grid;
|
|
@@ -20,35 +20,34 @@
|
|
|
20
20
|
transition: border-color 0.2s ease;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
opacity: 0.5;
|
|
34
|
-
}
|
|
35
|
-
._icon-button_l82dk_22:hover:not(:disabled) {
|
|
36
|
-
background-color: var(--background-color-strong, #f7f7f7);
|
|
37
|
-
}
|
|
23
|
+
.anvil2 ._icon-button_1czf4_21 {
|
|
24
|
+
padding: 0.5rem;
|
|
25
|
+
border-radius: var(--a2-border-radius-circular);
|
|
26
|
+
background: transparent;
|
|
27
|
+
border: none;
|
|
28
|
+
margin-bottom: 6px;
|
|
29
|
+
}
|
|
30
|
+
.anvil2 ._icon-button_1czf4_21:disabled {
|
|
31
|
+
cursor: not-allowed;
|
|
32
|
+
opacity: 0.5;
|
|
38
33
|
}
|
|
39
|
-
.
|
|
34
|
+
.anvil2 ._icon-button_1czf4_21:hover:not(:disabled) {
|
|
35
|
+
background-color: var(--a2-background-color-strong, #f7f7f7);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
._input-wrapper_1czf4_36 {
|
|
40
39
|
flex: 1;
|
|
41
40
|
display: flex;
|
|
42
41
|
align-items: center;
|
|
43
42
|
position: relative;
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
.
|
|
45
|
+
._placeholder_1czf4_43 {
|
|
47
46
|
position: absolute;
|
|
48
47
|
left: 0.4rem;
|
|
49
48
|
top: 50%;
|
|
50
49
|
transform: translateY(-50%);
|
|
51
|
-
color: var(--foreground-color-subdued, #737475);
|
|
50
|
+
color: var(--a2-foreground-color-subdued, #737475);
|
|
52
51
|
pointer-events: none;
|
|
53
52
|
-webkit-user-select: none;
|
|
54
53
|
-moz-user-select: none;
|
|
@@ -56,16 +55,16 @@
|
|
|
56
55
|
font-size: 1rem;
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
.
|
|
58
|
+
._input_1czf4_36 {
|
|
60
59
|
flex: 1;
|
|
61
60
|
width: 100%;
|
|
62
61
|
max-width: 100%;
|
|
63
62
|
outline: none;
|
|
64
63
|
background: transparent;
|
|
65
|
-
color: var(--foreground-color, #141414);
|
|
66
|
-
font-family: var(--font-family-base, "Nunito Sans", sans-serif);
|
|
64
|
+
color: var(--a2-foreground-color-default, #141414);
|
|
65
|
+
font-family: var(--a2-font-family-base, "Nunito Sans", sans-serif);
|
|
67
66
|
font-size: 1rem;
|
|
68
|
-
line-height: var(--
|
|
67
|
+
line-height: var(--a2-font-line-height-base, 1.5);
|
|
69
68
|
max-height: 6.25rem;
|
|
70
69
|
overflow-y: auto;
|
|
71
70
|
overflow-x: hidden;
|
|
@@ -78,33 +77,31 @@
|
|
|
78
77
|
padding-left: 7px;
|
|
79
78
|
padding-right: 0.75rem;
|
|
80
79
|
}
|
|
81
|
-
.
|
|
80
|
+
._input_1czf4_36:empty::before {
|
|
82
81
|
content: "";
|
|
83
82
|
}
|
|
84
|
-
.
|
|
83
|
+
._input_1czf4_36::-webkit-scrollbar {
|
|
85
84
|
width: 6px;
|
|
86
85
|
}
|
|
87
|
-
.
|
|
86
|
+
._input_1czf4_36::-webkit-scrollbar-track {
|
|
88
87
|
background: transparent;
|
|
89
88
|
}
|
|
90
|
-
.
|
|
91
|
-
background: var(--border-color-subdued, #dfe0e1);
|
|
92
|
-
border-radius: var(--border-radius-medium);
|
|
89
|
+
._input_1czf4_36::-webkit-scrollbar-thumb {
|
|
90
|
+
background: var(--a2-border-color-subdued, #dfe0e1);
|
|
91
|
+
border-radius: var(--a2-border-radius-medium);
|
|
93
92
|
}
|
|
94
|
-
.
|
|
95
|
-
background: var(--border-color, #949596);
|
|
93
|
+
._input_1czf4_36::-webkit-scrollbar-thumb:hover {
|
|
94
|
+
background: var(--a2-border-color-default, #949596);
|
|
96
95
|
}
|
|
97
96
|
|
|
98
|
-
._actions-
|
|
97
|
+
._actions-wrapper_1czf4_93 {
|
|
99
98
|
display: flex;
|
|
100
99
|
align-items: center;
|
|
101
100
|
gap: 0.5rem;
|
|
102
101
|
}
|
|
103
102
|
|
|
104
|
-
|
|
105
|
-
.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
margin-bottom: 6px;
|
|
109
|
-
}
|
|
103
|
+
.anvil2 ._send-button_1czf4_99 {
|
|
104
|
+
padding: 0.5rem;
|
|
105
|
+
border-radius: var(--a2-border-radius-circular);
|
|
106
|
+
margin-bottom: 6px;
|
|
110
107
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as ChatComposerRich } from './chat-composer-rich-
|
|
1
|
+
export { C as ChatComposerRich } from './chat-composer-rich-BXkSuUJL.js';
|
|
2
2
|
//# sourceMappingURL=chat-composer-rich.js.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { c as classNames } from './index-DDXI3m_u.js';
|
|
3
|
-
import { m as motion } from './proxy-
|
|
3
|
+
import { m as motion } from './proxy-BJr91CAa.js';
|
|
4
4
|
|
|
5
|
-
import './chat-window.css';const open = "
|
|
6
|
-
const closed = "
|
|
7
|
-
const positioned = "
|
|
8
|
-
const relative = "
|
|
5
|
+
import './chat-window.css';const open = "_open_14vhm_19";
|
|
6
|
+
const closed = "_closed_14vhm_23";
|
|
7
|
+
const positioned = "_positioned_14vhm_27";
|
|
8
|
+
const relative = "_relative_14vhm_31";
|
|
9
9
|
const styles = {
|
|
10
|
-
"chat-window": "_chat-
|
|
10
|
+
"chat-window": "_chat-window_14vhm_1",
|
|
11
11
|
open: open,
|
|
12
12
|
closed: closed,
|
|
13
13
|
positioned: positioned,
|
|
14
14
|
relative: relative,
|
|
15
|
-
"chat-window-expanded": "_chat-window-
|
|
15
|
+
"chat-window-expanded": "_chat-window-expanded_14vhm_35"};
|
|
16
16
|
|
|
17
17
|
const ChatWindow = ({
|
|
18
18
|
open,
|
|
@@ -72,4 +72,4 @@ const ChatWindow = ({
|
|
|
72
72
|
};
|
|
73
73
|
|
|
74
74
|
export { ChatWindow as C };
|
|
75
|
-
//# sourceMappingURL=chat-window-
|
|
75
|
+
//# sourceMappingURL=chat-window-DBUlbdg8.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-window-
|
|
1
|
+
{"version":3,"file":"chat-window-DBUlbdg8.js","sources":["../src/components/chat/chat-window.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\nimport classNames from \"classnames\";\nimport { motion } from \"framer-motion\";\n\nimport styles from \"./styles.module.scss\";\n\ninterface ChatWindowProps {\n open: boolean;\n position?: { x: number; y: number };\n isDragging?: boolean;\n fullscreen?: boolean;\n children: ReactNode;\n}\n\nexport const ChatWindow = ({\n open,\n position,\n isDragging,\n fullscreen = false,\n children,\n}: ChatWindowProps) => {\n const isFullscreenOpen = fullscreen && open;\n\n const className = classNames({\n [styles[\"chat-window-expanded\"]]: isFullscreenOpen,\n [styles[\"chat-window\"]]: !isFullscreenOpen,\n [styles[\"open\"]]: !isFullscreenOpen && open,\n [styles[\"closed\"]]: !isFullscreenOpen && !open,\n [styles[\"positioned\"]]: !isFullscreenOpen && position,\n [styles[\"relative\"]]: !isFullscreenOpen && !position,\n });\n\n const getPositionStyles = () => {\n if (isFullscreenOpen) {\n return {};\n }\n\n return position\n ? {\n left: position.x,\n top: position.y,\n }\n : {};\n };\n\n return (\n <motion.div\n layout={!isDragging}\n initial={{\n opacity: isFullscreenOpen ? 0 : 1,\n x: !isFullscreenOpen && !open ? 0 : -25,\n }}\n animate={{\n x: isFullscreenOpen ? 0 : open ? -25 : 0,\n }}\n transition={{\n type: isFullscreenOpen ? \"tween\" : \"spring\",\n ease: isFullscreenOpen ? \"easeInOut\" : undefined,\n stiffness: 300,\n damping: 35,\n duration: 0.3,\n }}\n className={className}\n style={getPositionStyles()}\n >\n <motion.div\n layout={!isDragging ? \"position\" : undefined}\n style={{ width: \"100%\", height: \"100%\" }}\n >\n {children}\n </motion.div>\n </motion.div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAcO,MAAM,aAAa,CAAC;AAAA,EACzB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb;AACF,CAAA,KAAuB;AACrB,EAAA,MAAM,mBAAmB,UAAA,IAAc,IAAA;AAEvC,EAAA,MAAM,YAAY,UAAA,CAAW;AAAA,IAC3B,CAAC,MAAA,CAAO,sBAAsB,CAAC,GAAG,gBAAA;AAAA,IAClC,CAAC,MAAA,CAAO,aAAa,CAAC,GAAG,CAAC,gBAAA;AAAA,IAC1B,CAAC,MAAA,CAAO,MAAM,CAAC,GAAG,CAAC,gBAAA,IAAoB,IAAA;AAAA,IACvC,CAAC,MAAA,CAAO,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAA;AAAA,IAC1C,CAAC,MAAA,CAAO,YAAY,CAAC,GAAG,CAAC,gBAAA,IAAoB,QAAA;AAAA,IAC7C,CAAC,MAAA,CAAO,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAAA,GAC7C,CAAA;AAED,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAO,QAAA,GACH;AAAA,MACE,MAAM,QAAA,CAAS,CAAA;AAAA,MACf,KAAK,QAAA,CAAS;AAAA,QAEhB,EAAC;AAAA,EACP,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,QAAQ,CAAC,UAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,mBAAmB,CAAA,GAAI,CAAA;AAAA,QAChC,CAAA,EAAG,CAAC,gBAAA,IAAoB,CAAC,OAAO,CAAA,GAAI;AAAA,OACtC;AAAA,MACA,OAAA,EAAS;AAAA,QACP,CAAA,EAAG,gBAAA,GAAmB,CAAA,GAAI,IAAA,GAAO,GAAA,GAAM;AAAA,OACzC;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,mBAAmB,OAAA,GAAU,QAAA;AAAA,QACnC,IAAA,EAAM,mBAAmB,WAAA,GAAc,MAAA;AAAA,QACvC,SAAA,EAAW,GAAA;AAAA,QACX,OAAA,EAAS,EAAA;AAAA,QACT,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,SAAA;AAAA,MACA,OAAO,iBAAA,EAAkB;AAAA,MAEzB,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACC,MAAA,EAAQ,CAAC,UAAA,GAAa,UAAA,GAAa,MAAA;AAAA,UACnC,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA,EAAO;AAAA,UAEtC;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;;;;"}
|
package/dist/chat-window.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@layer starter, reset, base, state, application;
|
|
2
2
|
|
|
3
|
-
._chat-
|
|
3
|
+
._chat-window_14vhm_1 {
|
|
4
4
|
position: fixed;
|
|
5
5
|
top: 5%;
|
|
6
6
|
right: 0;
|
|
@@ -11,30 +11,30 @@
|
|
|
11
11
|
box-sizing: border-box;
|
|
12
12
|
display: flex;
|
|
13
13
|
flex-direction: column;
|
|
14
|
-
border: 1px solid var(--border-color-subdued);
|
|
14
|
+
border: 1px solid var(--a2-border-color-subdued);
|
|
15
15
|
box-shadow: 0 8px 24px 0 rgba(20, 20, 20, 0.08);
|
|
16
16
|
overflow: hidden;
|
|
17
17
|
z-index: 9999;
|
|
18
|
-
background: light-dark(var(--background-color-strong), var(--background-color));
|
|
18
|
+
background: light-dark(var(--a2-background-color-strong), var(--a2-background-color-default));
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
._chat-
|
|
21
|
+
._chat-window_14vhm_1._open_14vhm_19 {
|
|
22
22
|
visibility: visible;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
._chat-
|
|
25
|
+
._chat-window_14vhm_1._closed_14vhm_23 {
|
|
26
26
|
visibility: hidden;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
._chat-
|
|
29
|
+
._chat-window_14vhm_1._positioned_14vhm_27 {
|
|
30
30
|
position: fixed;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
._chat-
|
|
33
|
+
._chat-window_14vhm_1._relative_14vhm_31 {
|
|
34
34
|
position: relative;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
._chat-window-
|
|
37
|
+
._chat-window-expanded_14vhm_35 {
|
|
38
38
|
position: fixed;
|
|
39
39
|
top: 0;
|
|
40
40
|
left: 0;
|
|
@@ -44,6 +44,6 @@
|
|
|
44
44
|
height: 100%;
|
|
45
45
|
z-index: 10001;
|
|
46
46
|
display: flex;
|
|
47
|
-
background: var(--background-color);
|
|
47
|
+
background: var(--a2-background-color-default);
|
|
48
48
|
visibility: visible;
|
|
49
49
|
}
|
package/dist/chat.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as ChatWindow } from './chat-window-
|
|
1
|
+
export { C as ChatWindow } from './chat-window-DBUlbdg8.js';
|
|
2
2
|
//# sourceMappingURL=chat.js.map
|
|
@@ -13,9 +13,18 @@ export interface AtlasHeaderProps {
|
|
|
13
13
|
* Additional CSS class names
|
|
14
14
|
*/
|
|
15
15
|
className?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Whether the loading animation is active
|
|
18
|
+
*/
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Status message shown while loading. Defaults to "Thinking..."
|
|
22
|
+
*/
|
|
23
|
+
statusMessage?: string;
|
|
16
24
|
}
|
|
17
25
|
/**
|
|
18
|
-
* Shared component that displays the Atlas logo and name header
|
|
19
|
-
*
|
|
26
|
+
* Shared component that displays the Atlas logo and name header.
|
|
27
|
+
* When loading is true, the icon pulses and shows the statusMessage with a gradient sweep animation.
|
|
28
|
+
* Used across all message types and recommendation cards.
|
|
20
29
|
*/
|
|
21
30
|
export declare const AtlasHeader: FC<AtlasHeaderProps>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { Svg } from '@servicetitan/anvil2';
|
|
3
|
+
/**
|
|
4
|
+
* Props for the PulseLoader component
|
|
5
|
+
* @property {string} [statusMessage] - Custom status message displayed next to the animated logo. Defaults to "Thinking..."
|
|
6
|
+
* @property {Svg} [svgIcon] - Custom icon to display instead of the default Atlas logo
|
|
7
|
+
* @property {string} [className] - Additional CSS class names
|
|
8
|
+
*/
|
|
9
|
+
export interface PulseLoaderProps {
|
|
10
|
+
/** Custom status message displayed next to the animated logo. Defaults to "Thinking..." */
|
|
11
|
+
statusMessage?: string;
|
|
12
|
+
/** Custom icon to display instead of the default Atlas logo */
|
|
13
|
+
svgIcon?: Svg;
|
|
14
|
+
/** Additional CSS class names */
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* PulseLoader component for displaying an animated Atlas logo with status text.
|
|
19
|
+
*
|
|
20
|
+
* Features:
|
|
21
|
+
* - Animated Atlas logo with scale pulse effect
|
|
22
|
+
* - Gradient sweep animation on the status text
|
|
23
|
+
* - Smooth fade transition when status message changes
|
|
24
|
+
* - Accessible with role="status" and aria-live="polite"
|
|
25
|
+
* - Chromatic-stable with data-chromatic="ignore" on animated elements
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* <PulseLoader statusMessage="Thinking..." />
|
|
29
|
+
*/
|
|
30
|
+
export declare const PulseLoader: FC<PulseLoaderProps>;
|
|
@@ -8,6 +8,8 @@ export interface MarkdownMessageProps extends MessageProps {
|
|
|
8
8
|
assistant?: string;
|
|
9
9
|
onRetry?: () => void;
|
|
10
10
|
toolboxProps?: Omit<ToolboxProps, "text">;
|
|
11
|
+
loading?: boolean;
|
|
12
|
+
statusMessage?: string;
|
|
11
13
|
}
|
|
12
14
|
export declare const MarkdownMessage: FC<MarkdownMessageProps>;
|
|
13
15
|
export declare const Thinking: FC<MarkdownMessageProps>;
|
|
@@ -2,10 +2,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useRef, useState, useEffect } from 'react';
|
|
3
3
|
import { c as classNames } from './index-DDXI3m_u.js';
|
|
4
4
|
import { Grid } from '@servicetitan/anvil2';
|
|
5
|
-
import { S as Spinner } from './spinner-
|
|
5
|
+
import { S as Spinner } from './spinner-DV6XzVPx.js';
|
|
6
6
|
|
|
7
7
|
import './content.css';const styles = {
|
|
8
|
-
"chat-content": "_chat-
|
|
8
|
+
"chat-content": "_chat-content_1q7qq_1"};
|
|
9
9
|
|
|
10
10
|
const Content = ({
|
|
11
11
|
children,
|
|
@@ -51,4 +51,4 @@ const Content = ({
|
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
export { Content as C };
|
|
54
|
-
//# sourceMappingURL=content-
|
|
54
|
+
//# sourceMappingURL=content-DGEN1Tcq.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-
|
|
1
|
+
{"version":3,"file":"content-DGEN1Tcq.js","sources":["../src/components/content/content.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useEffect, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { Grid } from \"@servicetitan/anvil2\";\n\nimport { Spinner } from \"../spinner\";\n\nimport styles from \"./content.module.scss\";\n\nexport interface ContentProps {\n itemsLength: number;\n loading?: boolean;\n className?: string;\n}\n\nexport const Content: FC<PropsWithChildren<ContentProps>> = ({\n children,\n itemsLength,\n loading = false,\n className,\n}) => {\n const chatEndRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n const [previousMessageCount, setPreviousMessageCount] = useState(0);\n\n const scrollToBottom = (smooth = true) => {\n if (smooth) {\n chatEndRef.current?.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\n } else {\n chatEndRef.current?.scrollIntoView({ behavior: \"auto\", block: \"end\" });\n }\n };\n\n useEffect(() => {\n if (isInitialLoad && itemsLength > 0) {\n // Initial load: scroll to bottom without smooth animation\n scrollToBottom(false);\n setIsInitialLoad(false);\n setPreviousMessageCount(itemsLength);\n } else if (!isInitialLoad && itemsLength > previousMessageCount) {\n // New messages added: scroll to bottom with smooth animation\n scrollToBottom(true);\n setPreviousMessageCount(itemsLength);\n } else if (!isInitialLoad && itemsLength !== previousMessageCount) {\n // Message count changed but not increased (e.g., conversation switched)\n // Just update the count without scrolling\n setPreviousMessageCount(itemsLength);\n }\n }, [itemsLength, isInitialLoad, previousMessageCount]);\n\n return (\n <Grid\n className={classNames(styles[\"chat-content\"], className)}\n ref={containerRef}\n gridColumn=\"1 / 13\"\n >\n {loading ? <Spinner /> : children}\n <div ref={chatEndRef} />\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAcO,MAAM,UAA+C,CAAC;AAAA,EAC3D,QAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,IAAI,CAAA;AACvD,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAAS,CAAC,CAAA;AAElE,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,GAAS,IAAA,KAAS;AACxC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,UAAA,CAAW,SAAS,cAAA,CAAe,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,SAAS,cAAA,CAAe,EAAE,UAAU,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,IAAiB,cAAc,CAAA,EAAG;AAEpC,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAA,uBAAA,CAAwB,WAAW,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,WAAA,GAAc,oBAAA,EAAsB;AAE/D,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,uBAAA,CAAwB,WAAW,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,WAAA,KAAgB,oBAAA,EAAsB;AAGjE,MAAA,uBAAA,CAAwB,WAAW,CAAA;AAAA,IACrC;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,aAAA,EAAe,oBAAoB,CAAC,CAAA;AAErD,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,cAAc,GAAG,SAAS,CAAA;AAAA,MACvD,GAAA,EAAK,YAAA;AAAA,MACL,UAAA,EAAW,QAAA;AAAA,MAEV,QAAA,EAAA;AAAA,QAAA,OAAA,mBAAU,GAAA,CAAC,WAAQ,CAAA,GAAK,QAAA;AAAA,wBACzB,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,UAAA,EAAY;AAAA;AAAA;AAAA,GACxB;AAEJ;;;;"}
|
package/dist/content.css
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
@layer starter, reset, base, state, application;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
gap: var(--size-2);
|
|
11
|
-
}
|
|
2
|
+
.anvil2 ._chat-content_1q7qq_1 {
|
|
3
|
+
flex-grow: 1;
|
|
4
|
+
padding: var(--a2-size-4);
|
|
5
|
+
box-sizing: border-box;
|
|
6
|
+
overflow-y: auto;
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
gap: var(--a2-size-2);
|
|
12
10
|
}
|
package/dist/content.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as Content } from './content-
|
|
1
|
+
export { C as Content } from './content-DGEN1Tcq.js';
|
|
2
2
|
//# sourceMappingURL=content.js.map
|
|
@@ -2,10 +2,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { c as classNames } from './index-DDXI3m_u.js';
|
|
3
3
|
import { observer } from 'mobx-react';
|
|
4
4
|
import { Text, Link } from '@servicetitan/anvil2';
|
|
5
|
-
import { C as ChatComposerRich } from './chat-composer-rich-
|
|
5
|
+
import { C as ChatComposerRich } from './chat-composer-rich-BXkSuUJL.js';
|
|
6
6
|
|
|
7
7
|
import './footer.css';const styles = {
|
|
8
|
-
"chat-footer": "_chat-
|
|
8
|
+
"chat-footer": "_chat-footer_14xwy_1"};
|
|
9
9
|
|
|
10
10
|
const Footer = observer(
|
|
11
11
|
({
|
|
@@ -48,8 +48,8 @@ const Footer = observer(
|
|
|
48
48
|
variant: "body",
|
|
49
49
|
size: "small",
|
|
50
50
|
style: {
|
|
51
|
-
fontSize: "var(--typography-label-size-small)",
|
|
52
|
-
marginBlockStart: "var(--size-1)"
|
|
51
|
+
fontSize: "var(--a2-typography-label-size-small)",
|
|
52
|
+
marginBlockStart: "var(--a2-size-1)"
|
|
53
53
|
},
|
|
54
54
|
children: [
|
|
55
55
|
"Atlas is TI-powered, subject to our privacy policy.",
|
|
@@ -68,7 +68,7 @@ const Footer = observer(
|
|
|
68
68
|
size: "small",
|
|
69
69
|
subdued: true,
|
|
70
70
|
style: {
|
|
71
|
-
fontSize: "var(--typography-label-size-small)"
|
|
71
|
+
fontSize: "var(--a2-typography-label-size-small)"
|
|
72
72
|
},
|
|
73
73
|
children: "Learn more"
|
|
74
74
|
}
|
|
@@ -83,4 +83,4 @@ const Footer = observer(
|
|
|
83
83
|
);
|
|
84
84
|
|
|
85
85
|
export { Footer as F };
|
|
86
|
-
//# sourceMappingURL=footer-
|
|
86
|
+
//# sourceMappingURL=footer-B5u9oSlP.js.map
|