@servicetitan/anvil2-ext-atlas 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/atlas-header-Cxxvgc7g.js +40 -0
  3. package/dist/atlas-header-Cxxvgc7g.js.map +1 -0
  4. package/dist/atlas-header.js +1 -1
  5. package/dist/{chat-composer-rich-SPOcwnSS.js → chat-composer-rich-Bj1gmhec.js} +8 -8
  6. package/dist/{chat-composer-rich-SPOcwnSS.js.map → chat-composer-rich-Bj1gmhec.js.map} +1 -1
  7. package/dist/chat-composer-rich.css +32 -29
  8. package/dist/chat-composer-rich.js +1 -1
  9. package/dist/{chat-window-BU8VGO9z.js → chat-window-4hy-1xfj.js} +2 -2
  10. package/dist/{chat-window-BU8VGO9z.js.map → chat-window-4hy-1xfj.js.map} +1 -1
  11. package/dist/chat.js +1 -1
  12. package/dist/components/atlas-header/atlas-header.d.ts +11 -2
  13. package/dist/components/loader/index.d.ts +1 -0
  14. package/dist/components/loader/pulse-loader.d.ts +30 -0
  15. package/dist/components/messages/assistant-message.d.ts +2 -0
  16. package/dist/components/messages/markdown-message.d.ts +2 -0
  17. package/dist/{content-D4YSNvFG.js → content-DAPOfSv5.js} +2 -2
  18. package/dist/{content-D4YSNvFG.js.map → content-DAPOfSv5.js.map} +1 -1
  19. package/dist/content.css +10 -8
  20. package/dist/content.js +1 -1
  21. package/dist/{footer-DyQ-Fult.js → footer-Cv4yRBA1.js} +2 -2
  22. package/dist/{footer-DyQ-Fult.js.map → footer-Cv4yRBA1.js.map} +1 -1
  23. package/dist/footer.js +1 -1
  24. package/dist/{header-CWOVRD5w.js → header-ku2JmzDC.js} +3 -3
  25. package/dist/{header-CWOVRD5w.js.map → header-ku2JmzDC.js.map} +1 -1
  26. package/dist/header.css +21 -21
  27. package/dist/header.js +1 -1
  28. package/dist/index.js +14 -13
  29. package/dist/index.js.map +1 -1
  30. package/dist/{infinite-content-B4ojfnZH.js → infinite-content-BnStGJfq.js} +4 -4
  31. package/dist/{infinite-content-B4ojfnZH.js.map → infinite-content-BnStGJfq.js.map} +1 -1
  32. package/dist/infinite-content.css +12 -12
  33. package/dist/infinite-content.js +1 -1
  34. package/dist/{loader-DYmcO1Y_.js → loader-BF1xpasR.js} +2 -2
  35. package/dist/{loader-DYmcO1Y_.js.map → loader-BF1xpasR.js.map} +1 -1
  36. package/dist/loader.js +2 -1
  37. package/dist/loader.js.map +1 -1
  38. package/dist/{markdown-text-BXCCdmOl.js → markdown-text-CgCSN9q6.js} +2 -2
  39. package/dist/{markdown-text-BXCCdmOl.js.map → markdown-text-CgCSN9q6.js.map} +1 -1
  40. package/dist/markdown-text.css +19 -15
  41. package/dist/markdown-text.js +1 -1
  42. package/dist/messages.js +1 -1
  43. package/dist/{notification-card-CdQVC1kO.js → notification-card-DMnEZI0Q.js} +2 -2
  44. package/dist/{notification-card-CdQVC1kO.js.map → notification-card-DMnEZI0Q.js.map} +1 -1
  45. package/dist/notification-card.js +1 -1
  46. package/dist/{proxy-B3m3ViIw.js → proxy-BJr91CAa.js} +2 -2
  47. package/dist/{proxy-B3m3ViIw.js.map → proxy-BJr91CAa.js.map} +1 -1
  48. package/dist/pulse-loader-DUrtKYC5.js +390 -0
  49. package/dist/pulse-loader-DUrtKYC5.js.map +1 -0
  50. package/dist/recommendations.js +1 -1
  51. package/dist/screens.js +1 -1
  52. package/dist/{single-recommendation-card-DgAQbMg4.js → single-recommendation-card-CV75jkZb.js} +2 -2
  53. package/dist/{single-recommendation-card-DgAQbMg4.js.map → single-recommendation-card-CV75jkZb.js.map} +1 -1
  54. package/dist/{user-message-DKavnRRI.js → user-message-BqWF67vX.js} +44 -21
  55. package/dist/user-message-BqWF67vX.js.map +1 -0
  56. package/dist/user-message.css +35 -30
  57. package/dist/{welcome-CJMuyH8o.js → welcome-CLNfeZDg.js} +4 -4
  58. package/dist/{welcome-CJMuyH8o.js.map → welcome-CLNfeZDg.js.map} +1 -1
  59. package/dist/welcome.css +11 -12
  60. package/package.json +9 -9
  61. package/dist/atlas-header-CYHhcWuk.js +0 -23
  62. package/dist/atlas-header-CYHhcWuk.js.map +0 -1
  63. package/dist/user-message-DKavnRRI.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @servicetitan/anvil2-ext-atlas
2
2
 
3
+ ## 1.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#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
8
+
9
+ ### Patch Changes
10
+
11
+ - 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)]:
12
+ - @servicetitan/anvil2@2.8.0
13
+
14
+ ## 1.2.3
15
+
16
+ ### Patch Changes
17
+
18
+ - [#2100](https://github.com/servicetitan/hammer/pull/2100) [`09a205c`](https://github.com/servicetitan/hammer/commit/09a205ca62a2f945e2d3cd126da8dc6bf4138711) Thanks [@w-a-t-s-o-n](https://github.com/w-a-t-s-o-n)! - [ChatWindow] Fix Anvil2 CSS overrides by wrapping styles in `@layer application` and remove legacy Less files
19
+
20
+ - Updated dependencies [[`623398f`](https://github.com/servicetitan/hammer/commit/623398f22d6c390a049c0968c4340dc82729331e), [`9736150`](https://github.com/servicetitan/hammer/commit/9736150539b2ed46a08808b19f9974b7f6bbf667), [`0a7d8c7`](https://github.com/servicetitan/hammer/commit/0a7d8c75028384f1ced3cc1051b68b4badc30163), [`edae603`](https://github.com/servicetitan/hammer/commit/edae60309b49c18e87ea2b3d3c02c915124a21d5), [`9736150`](https://github.com/servicetitan/hammer/commit/9736150539b2ed46a08808b19f9974b7f6bbf667), [`623398f`](https://github.com/servicetitan/hammer/commit/623398f22d6c390a049c0968c4340dc82729331e)]:
21
+ - @servicetitan/anvil2@2.4.0
22
+
3
23
  ## 1.2.2
4
24
 
5
25
  ### 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;;;;"}
@@ -1,2 +1,2 @@
1
- export { A as AtlasHeader } from './atlas-header-CYHhcWuk.js';
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 = "_placeholder_eb8wi_43";
16
- const input = "_input_eb8wi_36";
15
+ const placeholder = "_placeholder_l82dk_44";
16
+ const input = "_input_l82dk_37";
17
17
  const styles = {
18
- "composer-wrapper": "_composer-wrapper_eb8wi_1",
19
- "composer-form": "_composer-form_eb8wi_9",
20
- "icon-button": "_icon-button_eb8wi_21",
21
- "input-wrapper": "_input-wrapper_eb8wi_36",
18
+ "composer-wrapper": "_composer-wrapper_l82dk_1",
19
+ "composer-form": "_composer-form_l82dk_9",
20
+ "icon-button": "_icon-button_l82dk_22",
21
+ "input-wrapper": "_input-wrapper_l82dk_37",
22
22
  placeholder: placeholder,
23
23
  input: input,
24
- "send-button": "_send-button_eb8wi_99"};
24
+ "send-button": "_send-button_l82dk_101"};
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-SPOcwnSS.js.map
156
+ //# sourceMappingURL=chat-composer-rich-Bj1gmhec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-composer-rich-SPOcwnSS.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
+ {"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":"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"}
@@ -1,6 +1,6 @@
1
1
  @layer starter, reset, base, state, application;
2
2
 
3
- ._composer-wrapper_eb8wi_1 {
3
+ ._composer-wrapper_l82dk_1 {
4
4
  width: 100%;
5
5
  margin-inline: auto;
6
6
  display: flex;
@@ -8,7 +8,7 @@
8
8
  flex: 1;
9
9
  }
10
10
 
11
- ._composer-form_eb8wi_9 {
11
+ ._composer-form_l82dk_9 {
12
12
  background-color: var(--background-color, #ffffff);
13
13
  border: 0.0625rem solid var(--border-color, #949596);
14
14
  border-radius: 0.375rem;
@@ -20,29 +20,30 @@
20
20
  transition: border-color 0.2s ease;
21
21
  }
22
22
 
23
- ._icon-button_eb8wi_21 {
24
- padding: 0.5rem;
25
- border-radius: var(--border-radius-circular);
26
- background: transparent;
27
- border: none;
28
- margin-bottom: 6px;
29
- }
30
- ._icon-button_eb8wi_21:disabled {
31
- cursor: not-allowed;
32
- opacity: 0.5;
23
+ @layer application {
24
+ ._icon-button_l82dk_22 {
25
+ padding: 0.5rem;
26
+ border-radius: var(--border-radius-circular);
27
+ background: transparent;
28
+ border: none;
29
+ margin-bottom: 6px;
30
+ }
31
+ ._icon-button_l82dk_22:disabled {
32
+ cursor: not-allowed;
33
+ opacity: 0.5;
34
+ }
35
+ ._icon-button_l82dk_22:hover:not(:disabled) {
36
+ background-color: var(--background-color-strong, #f7f7f7);
37
+ }
33
38
  }
34
- ._icon-button_eb8wi_21:hover:not(:disabled) {
35
- background-color: var(--background-color-strong, #f7f7f7);
36
- }
37
-
38
- ._input-wrapper_eb8wi_36 {
39
+ ._input-wrapper_l82dk_37 {
39
40
  flex: 1;
40
41
  display: flex;
41
42
  align-items: center;
42
43
  position: relative;
43
44
  }
44
45
 
45
- ._placeholder_eb8wi_43 {
46
+ ._placeholder_l82dk_44 {
46
47
  position: absolute;
47
48
  left: 0.4rem;
48
49
  top: 50%;
@@ -55,7 +56,7 @@
55
56
  font-size: 1rem;
56
57
  }
57
58
 
58
- ._input_eb8wi_36 {
59
+ ._input_l82dk_37 {
59
60
  flex: 1;
60
61
  width: 100%;
61
62
  max-width: 100%;
@@ -77,31 +78,33 @@
77
78
  padding-left: 7px;
78
79
  padding-right: 0.75rem;
79
80
  }
80
- ._input_eb8wi_36:empty::before {
81
+ ._input_l82dk_37:empty::before {
81
82
  content: "";
82
83
  }
83
- ._input_eb8wi_36::-webkit-scrollbar {
84
+ ._input_l82dk_37::-webkit-scrollbar {
84
85
  width: 6px;
85
86
  }
86
- ._input_eb8wi_36::-webkit-scrollbar-track {
87
+ ._input_l82dk_37::-webkit-scrollbar-track {
87
88
  background: transparent;
88
89
  }
89
- ._input_eb8wi_36::-webkit-scrollbar-thumb {
90
+ ._input_l82dk_37::-webkit-scrollbar-thumb {
90
91
  background: var(--border-color-subdued, #dfe0e1);
91
92
  border-radius: var(--border-radius-medium);
92
93
  }
93
- ._input_eb8wi_36::-webkit-scrollbar-thumb:hover {
94
+ ._input_l82dk_37::-webkit-scrollbar-thumb:hover {
94
95
  background: var(--border-color, #949596);
95
96
  }
96
97
 
97
- ._actions-wrapper_eb8wi_93 {
98
+ ._actions-wrapper_l82dk_94 {
98
99
  display: flex;
99
100
  align-items: center;
100
101
  gap: 0.5rem;
101
102
  }
102
103
 
103
- ._send-button_eb8wi_99 {
104
- padding: 0.5rem;
105
- border-radius: var(--border-radius-circular);
106
- margin-bottom: 6px;
104
+ @layer application {
105
+ ._send-button_l82dk_101 {
106
+ padding: 0.5rem;
107
+ border-radius: var(--border-radius-circular);
108
+ margin-bottom: 6px;
109
+ }
107
110
  }
@@ -1,2 +1,2 @@
1
- export { C as ChatComposerRich } from './chat-composer-rich-SPOcwnSS.js';
1
+ export { C as ChatComposerRich } from './chat-composer-rich-Bj1gmhec.js';
2
2
  //# sourceMappingURL=chat-composer-rich.js.map
@@ -1,6 +1,6 @@
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-B3m3ViIw.js';
3
+ import { m as motion } from './proxy-BJr91CAa.js';
4
4
 
5
5
  import './chat-window.css';const open = "_open_1qo7q_19";
6
6
  const closed = "_closed_1qo7q_23";
@@ -72,4 +72,4 @@ const ChatWindow = ({
72
72
  };
73
73
 
74
74
  export { ChatWindow as C };
75
- //# sourceMappingURL=chat-window-BU8VGO9z.js.map
75
+ //# sourceMappingURL=chat-window-4hy-1xfj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-window-BU8VGO9z.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;;;;"}
1
+ {"version":3,"file":"chat-window-4hy-1xfj.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.js CHANGED
@@ -1,2 +1,2 @@
1
- export { C as ChatWindow } from './chat-window-BU8VGO9z.js';
1
+ export { C as ChatWindow } from './chat-window-4hy-1xfj.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
- * Used across all message types and recommendation cards
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>;
@@ -1 +1,2 @@
1
1
  export * from './loader';
2
+ export * from './pulse-loader';
@@ -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>;
@@ -6,5 +6,7 @@ export interface AssistantMessageProps extends MessageProps {
6
6
  svgIcon?: Svg;
7
7
  assistant?: string;
8
8
  onRetry?: () => void;
9
+ statusMessage?: string;
10
+ loading?: boolean;
9
11
  }
10
12
  export declare const AssistantMessage: FC<AssistantMessageProps>;
@@ -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>;
@@ -5,7 +5,7 @@ import { Grid } from '@servicetitan/anvil2';
5
5
  import { S as Spinner } from './spinner-QnlThoJs.js';
6
6
 
7
7
  import './content.css';const styles = {
8
- "chat-content": "_chat-content_1r285_1"};
8
+ "chat-content": "_chat-content_12zq8_2"};
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-D4YSNvFG.js.map
54
+ //# sourceMappingURL=content-DAPOfSv5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-D4YSNvFG.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;;;;"}
1
+ {"version":3,"file":"content-DAPOfSv5.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,10 +1,12 @@
1
1
  @layer starter, reset, base, state, application;
2
- ._chat-content_1r285_1 {
3
- flex-grow: 1;
4
- padding: var(--size-4);
5
- box-sizing: border-box;
6
- overflow-y: auto;
7
- display: flex;
8
- flex-direction: column;
9
- gap: var(--size-2);
2
+ @layer application {
3
+ ._chat-content_12zq8_2 {
4
+ flex-grow: 1;
5
+ padding: var(--size-4);
6
+ box-sizing: border-box;
7
+ overflow-y: auto;
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: var(--size-2);
11
+ }
10
12
  }
package/dist/content.js CHANGED
@@ -1,2 +1,2 @@
1
- export { C as Content } from './content-D4YSNvFG.js';
1
+ export { C as Content } from './content-DAPOfSv5.js';
2
2
  //# sourceMappingURL=content.js.map
@@ -2,7 +2,7 @@ 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-SPOcwnSS.js';
5
+ import { C as ChatComposerRich } from './chat-composer-rich-Bj1gmhec.js';
6
6
 
7
7
  import './footer.css';const styles = {
8
8
  "chat-footer": "_chat-footer_1kkwo_1"};
@@ -83,4 +83,4 @@ const Footer = observer(
83
83
  );
84
84
 
85
85
  export { Footer as F };
86
- //# sourceMappingURL=footer-DyQ-Fult.js.map
86
+ //# sourceMappingURL=footer-Cv4yRBA1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"footer-DyQ-Fult.js","sources":["../src/components/footer/footer.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { observer } from \"mobx-react\";\nimport { Link, Text } from \"@servicetitan/anvil2\";\n\nimport { ChatComposerRich } from \"../chat-composer-rich\";\n\nimport styles from \"./footer.module.scss\";\n\nexport interface FooterProps {\n isLoading?: boolean;\n message: string;\n placeholder?: string;\n onMessageChange: (value: string) => void;\n onSubmit: () => void;\n className?: string;\n messageInputId?: string;\n sendIconId?: string;\n learnMoreLinkId?: string;\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}\n\nexport const Footer = observer(\n ({\n isLoading = false,\n placeholder = \"Ask Atlas\",\n message,\n onMessageChange,\n onSubmit,\n className,\n messageInputId,\n sendIconId,\n learnMoreLinkId,\n onUploadFile,\n onDictateMessage,\n }: FooterProps) => {\n const handleSubmit = () => {\n if (!isLoading) {\n onSubmit();\n }\n };\n\n return (\n <div className={classNames(styles[\"chat-footer\"], className)}>\n <ChatComposerRich\n messageInputId={messageInputId}\n sendIconId={sendIconId}\n placeholder={placeholder}\n onSend={handleSubmit}\n onChange={onMessageChange}\n message={message}\n disabled={isLoading}\n onUploadFile={onUploadFile}\n onDictateMessage={onDictateMessage}\n />\n <Text\n subdued\n variant=\"body\"\n size=\"small\"\n style={{\n fontSize: \"var(--typography-label-size-small)\",\n marginBlockStart: \"var(--size-1)\",\n }}\n >\n Atlas is TI-powered, subject to our privacy policy.{\" \"}\n <Link\n id={learnMoreLinkId}\n target=\"_blank\"\n href=\"#\"\n appearance=\"secondary\"\n >\n <Text\n inline\n size=\"small\"\n subdued\n style={{\n fontSize: \"var(--typography-label-size-small)\",\n }}\n >\n Learn more\n </Text>\n </Link>\n </Text>\n </div>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;;AAwBO,MAAM,MAAA,GAAS,QAAA;AAAA,EACpB,CAAC;AAAA,IACC,SAAA,GAAY,KAAA;AAAA,IACZ,WAAA,GAAc,WAAA;AAAA,IACd,OAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,KAAmB;AACjB,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,CAAA;AAEA,IAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,UAAA,CAAW,OAAO,aAAa,CAAA,EAAG,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,cAAA;AAAA,UACA,UAAA;AAAA,UACA,WAAA;AAAA,UACA,MAAA,EAAQ,YAAA;AAAA,UACR,QAAA,EAAU,eAAA;AAAA,UACV,OAAA;AAAA,UACA,QAAA,EAAU,SAAA;AAAA,UACV,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,sBACA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,oCAAA;AAAA,YACV,gBAAA,EAAkB;AAAA,WACpB;AAAA,UACD,QAAA,EAAA;AAAA,YAAA,qDAAA;AAAA,YACqD,GAAA;AAAA,4BACpD,GAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,eAAA;AAAA,gBACJ,MAAA,EAAO,QAAA;AAAA,gBACP,IAAA,EAAK,GAAA;AAAA,gBACL,UAAA,EAAW,WAAA;AAAA,gBAEX,QAAA,kBAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,MAAA,EAAM,IAAA;AAAA,oBACN,IAAA,EAAK,OAAA;AAAA,oBACL,OAAA,EAAO,IAAA;AAAA,oBACP,KAAA,EAAO;AAAA,sBACL,QAAA,EAAU;AAAA,qBACZ;AAAA,oBACD,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AACF;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
1
+ {"version":3,"file":"footer-Cv4yRBA1.js","sources":["../src/components/footer/footer.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { observer } from \"mobx-react\";\nimport { Link, Text } from \"@servicetitan/anvil2\";\n\nimport { ChatComposerRich } from \"../chat-composer-rich\";\n\nimport styles from \"./footer.module.scss\";\n\nexport interface FooterProps {\n isLoading?: boolean;\n message: string;\n placeholder?: string;\n onMessageChange: (value: string) => void;\n onSubmit: () => void;\n className?: string;\n messageInputId?: string;\n sendIconId?: string;\n learnMoreLinkId?: string;\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}\n\nexport const Footer = observer(\n ({\n isLoading = false,\n placeholder = \"Ask Atlas\",\n message,\n onMessageChange,\n onSubmit,\n className,\n messageInputId,\n sendIconId,\n learnMoreLinkId,\n onUploadFile,\n onDictateMessage,\n }: FooterProps) => {\n const handleSubmit = () => {\n if (!isLoading) {\n onSubmit();\n }\n };\n\n return (\n <div className={classNames(styles[\"chat-footer\"], className)}>\n <ChatComposerRich\n messageInputId={messageInputId}\n sendIconId={sendIconId}\n placeholder={placeholder}\n onSend={handleSubmit}\n onChange={onMessageChange}\n message={message}\n disabled={isLoading}\n onUploadFile={onUploadFile}\n onDictateMessage={onDictateMessage}\n />\n <Text\n subdued\n variant=\"body\"\n size=\"small\"\n style={{\n fontSize: \"var(--typography-label-size-small)\",\n marginBlockStart: \"var(--size-1)\",\n }}\n >\n Atlas is TI-powered, subject to our privacy policy.{\" \"}\n <Link\n id={learnMoreLinkId}\n target=\"_blank\"\n href=\"#\"\n appearance=\"secondary\"\n >\n <Text\n inline\n size=\"small\"\n subdued\n style={{\n fontSize: \"var(--typography-label-size-small)\",\n }}\n >\n Learn more\n </Text>\n </Link>\n </Text>\n </div>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;;AAwBO,MAAM,MAAA,GAAS,QAAA;AAAA,EACpB,CAAC;AAAA,IACC,SAAA,GAAY,KAAA;AAAA,IACZ,WAAA,GAAc,WAAA;AAAA,IACd,OAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,KAAmB;AACjB,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,CAAA;AAEA,IAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,UAAA,CAAW,OAAO,aAAa,CAAA,EAAG,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,cAAA;AAAA,UACA,UAAA;AAAA,UACA,WAAA;AAAA,UACA,MAAA,EAAQ,YAAA;AAAA,UACR,QAAA,EAAU,eAAA;AAAA,UACV,OAAA;AAAA,UACA,QAAA,EAAU,SAAA;AAAA,UACV,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,sBACA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,oCAAA;AAAA,YACV,gBAAA,EAAkB;AAAA,WACpB;AAAA,UACD,QAAA,EAAA;AAAA,YAAA,qDAAA;AAAA,YACqD,GAAA;AAAA,4BACpD,GAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,eAAA;AAAA,gBACJ,MAAA,EAAO,QAAA;AAAA,gBACP,IAAA,EAAK,GAAA;AAAA,gBACL,UAAA,EAAW,WAAA;AAAA,gBAEX,QAAA,kBAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,MAAA,EAAM,IAAA;AAAA,oBACN,IAAA,EAAK,OAAA;AAAA,oBACL,OAAA,EAAO,IAAA;AAAA,oBACP,KAAA,EAAO;AAAA,sBACL,QAAA,EAAU;AAAA,qBACZ;AAAA,oBACD,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AACF;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
package/dist/footer.js CHANGED
@@ -1,2 +1,2 @@
1
- export { F as Footer } from './footer-DyQ-Fult.js';
1
+ export { F as Footer } from './footer-Cv4yRBA1.js';
2
2
  //# sourceMappingURL=footer.js.map
@@ -18,8 +18,8 @@ const SvgModeEdit = (props) => /* @__PURE__ */ React.createElement("svg", { xmln
18
18
  const SvgOpenInFull = (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: "M21 8.59V4c0-.55-.45-1-1-1h-4.59c-.89 0-1.34 1.08-.71 1.71l1.59 1.59-10 10-1.59-1.59c-.62-.63-1.7-.19-1.7.7V20c0 .55.45 1 1 1h4.59c.89 0 1.34-1.08.71-1.71L7.71 17.7l10-10 1.59 1.59c.62.63 1.7.19 1.7-.7z" }));
19
19
 
20
20
  const styles = {
21
- "chat-header": "_chat-header_158xe_1",
22
- "chat-header-title": "_chat-header-title_158xe_15"};
21
+ "chat-header": "_chat-header_1txn0_2",
22
+ "chat-header-title": "_chat-header-title_1txn0_15"};
23
23
 
24
24
  const Header = observer(
25
25
  ({
@@ -167,4 +167,4 @@ const Header = observer(
167
167
  );
168
168
 
169
169
  export { Header as H };
170
- //# sourceMappingURL=header-CWOVRD5w.js.map
170
+ //# sourceMappingURL=header-ku2JmzDC.js.map