@servicetitan/anvil2-ext-atlas 0.0.14 → 0.1.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 +11 -0
- package/dist/_commonjsHelpers-B85MJLTf.js +6 -0
- package/dist/_commonjsHelpers-B85MJLTf.js.map +1 -0
- package/dist/atlas-header-jdAIcEpa.js +23 -0
- package/dist/atlas-header-jdAIcEpa.js.map +1 -0
- package/dist/atlas-header.d.ts +2 -0
- package/dist/atlas-header.js +2 -0
- package/dist/atlas-header.js.map +1 -0
- package/dist/chat-composer-rich-BM5hoC1f.js +162 -0
- package/dist/chat-composer-rich-BM5hoC1f.js.map +1 -0
- package/dist/chat-composer-rich.css +119 -0
- package/dist/chat-composer-rich.d.ts +2 -0
- package/dist/chat-composer-rich.js +2 -0
- package/dist/chat-composer-rich.js.map +1 -0
- package/dist/chat-window-BEkLTYNg.js +76 -0
- package/dist/chat-window-BEkLTYNg.js.map +1 -0
- package/dist/chat-window.css +49 -0
- package/dist/chat.d.ts +2 -0
- package/dist/chat.js +2 -0
- package/dist/chat.js.map +1 -0
- package/dist/components/atlas-header/atlas-header.d.ts +21 -0
- package/dist/components/atlas-header/index.d.ts +2 -0
- package/dist/components/chat/chat-window.d.ts +13 -0
- package/dist/components/chat/index.d.ts +1 -0
- package/dist/components/chat-composer-rich/chat-composer-rich.d.ts +23 -0
- package/dist/components/chat-composer-rich/index.d.ts +2 -0
- package/dist/components/content/content.d.ts +7 -0
- package/dist/components/content/index.d.ts +1 -0
- package/dist/components/footer/footer.d.ts +16 -0
- package/dist/components/footer/index.d.ts +2 -0
- package/dist/components/header/header.d.ts +23 -0
- package/dist/components/header/index.d.ts +2 -0
- package/dist/components/index.d.ts +16 -1
- package/dist/components/infinite-content/hooks/use-infinite-scroll.d.ts +11 -0
- package/dist/components/infinite-content/hooks/use-scroll-callback.d.ts +11 -0
- package/dist/components/infinite-content/index.d.ts +2 -0
- package/dist/components/infinite-content/infinite-content.d.ts +17 -0
- package/dist/components/loader/index.d.ts +1 -0
- package/dist/components/loader/loader.d.ts +2 -0
- package/dist/components/markdown-text/index.d.ts +2 -0
- package/dist/components/markdown-text/markdown-text.d.ts +5 -0
- package/dist/components/messages/assistant-message.d.ts +10 -0
- package/dist/components/messages/error-message.d.ts +8 -0
- package/dist/components/messages/index.d.ts +6 -0
- package/dist/components/messages/markdown-message.d.ts +13 -0
- package/dist/components/messages/message-interface.d.ts +4 -0
- package/dist/components/messages/small-action.d.ts +13 -0
- package/dist/components/messages/system-message.d.ts +18 -0
- package/dist/components/messages/user-message.d.ts +13 -0
- package/dist/components/notification-card/index.d.ts +1 -0
- package/dist/components/notification-card/notification-card.d.ts +10 -0
- package/dist/components/recommendations/confirmation-card/confirmation-card.d.ts +10 -0
- package/dist/components/recommendations/confirmation-card/index.d.ts +1 -0
- package/dist/components/recommendations/index.d.ts +4 -0
- package/dist/components/recommendations/multiple-recommendation-card/index.d.ts +1 -0
- package/dist/components/recommendations/multiple-recommendation-card/multiple-recommendation-card.d.ts +7 -0
- package/dist/components/recommendations/shared-interfaces.d.ts +26 -0
- package/dist/components/recommendations/single-recommendation-card/index.d.ts +1 -0
- package/dist/components/recommendations/single-recommendation-card/single-recommendation-card.d.ts +7 -0
- package/dist/components/screens/index.d.ts +1 -0
- package/dist/components/screens/system-error.d.ts +10 -0
- package/dist/components/screens/welcome.d.ts +8 -0
- package/dist/components/spinner/index.d.ts +1 -0
- package/dist/components/spinner/spinner.d.ts +1 -0
- package/dist/components/suggestion/index.d.ts +1 -0
- package/dist/components/suggestion/suggestion.d.ts +11 -0
- package/dist/components/toolbox/index.d.ts +2 -0
- package/dist/components/toolbox/toolbox.d.ts +12 -0
- package/dist/components/toolbox/toolbox.enums.d.ts +5 -0
- package/dist/content-acT_RzNQ.js +55 -0
- package/dist/content-acT_RzNQ.js.map +1 -0
- package/dist/content.css +10 -0
- package/dist/content.d.ts +2 -0
- package/dist/content.js +2 -0
- package/dist/content.js.map +1 -0
- package/dist/footer-DezXey1O.js +86 -0
- package/dist/footer-DezXey1O.js.map +1 -0
- package/dist/footer.css +12 -0
- package/dist/footer.d.ts +2 -0
- package/dist/footer.js +2 -0
- package/dist/footer.js.map +1 -0
- package/dist/header-DgkrbsFN.js +171 -0
- package/dist/header-DgkrbsFN.js.map +1 -0
- package/dist/header.css +23 -0
- package/dist/header.d.ts +2 -0
- package/dist/header.js +2 -0
- package/dist/header.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/use-draggable.d.ts +18 -0
- package/dist/index-DDXI3m_u.js +73 -0
- package/dist/index-DDXI3m_u.js.map +1 -0
- package/dist/index-DFEn2XpE.js +24643 -0
- package/dist/index-DFEn2XpE.js.map +1 -0
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/infinite-content-B4ojfnZH.js +144 -0
- package/dist/infinite-content-B4ojfnZH.js.map +1 -0
- package/dist/infinite-content.css +25 -0
- package/dist/infinite-content.d.ts +2 -0
- package/dist/infinite-content.js +2 -0
- package/dist/infinite-content.js.map +1 -0
- package/dist/loader-DYmcO1Y_.js +48 -0
- package/dist/loader-DYmcO1Y_.js.map +1 -0
- package/dist/loader.d.ts +2 -0
- package/dist/loader.js +2 -0
- package/dist/loader.js.map +1 -0
- package/dist/markdown-text-CKN0oo8R.js +13 -0
- package/dist/markdown-text-CKN0oo8R.js.map +1 -0
- package/dist/markdown-text.css +45 -0
- package/dist/markdown-text.d.ts +2 -0
- package/dist/markdown-text.js +2 -0
- package/dist/markdown-text.js.map +1 -0
- package/dist/messages.d.ts +2 -0
- package/dist/messages.js +2 -0
- package/dist/messages.js.map +1 -0
- package/dist/notification-card-B38ZC7k4.js +59 -0
- package/dist/notification-card-B38ZC7k4.js.map +1 -0
- package/dist/notification-card.d.ts +2 -0
- package/dist/notification-card.js +2 -0
- package/dist/notification-card.js.map +1 -0
- package/dist/proxy-B3m3ViIw.js +9928 -0
- package/dist/proxy-B3m3ViIw.js.map +1 -0
- package/dist/recommendations.d.ts +2 -0
- package/dist/recommendations.js +2 -0
- package/dist/recommendations.js.map +1 -0
- package/dist/screens.d.ts +2 -0
- package/dist/screens.js +2 -0
- package/dist/screens.js.map +1 -0
- package/dist/single-recommendation-card-G78KiWnb.js +199 -0
- package/dist/single-recommendation-card-G78KiWnb.js.map +1 -0
- package/dist/spinner-QnlThoJs.js +23 -0
- package/dist/spinner-QnlThoJs.js.map +1 -0
- package/dist/spinner.css +21 -0
- package/dist/spinner.d.ts +2 -0
- package/dist/spinner.js +2 -0
- package/dist/spinner.js.map +1 -0
- package/dist/suggestion-pJLJZyjg.js +33 -0
- package/dist/suggestion-pJLJZyjg.js.map +1 -0
- package/dist/suggestion.d.ts +2 -0
- package/dist/suggestion.js +2 -0
- package/dist/suggestion.js.map +1 -0
- package/dist/toolbox-B-mWIaVL.js +272 -0
- package/dist/toolbox-B-mWIaVL.js.map +1 -0
- package/dist/toolbox.d.ts +2 -0
- package/dist/toolbox.js +2 -0
- package/dist/toolbox.js.map +1 -0
- package/dist/user-message-DCOP95qA.js +247 -0
- package/dist/user-message-DCOP95qA.js.map +1 -0
- package/dist/user-message.css +170 -0
- package/dist/welcome-BY6k2z0K.js +57 -0
- package/dist/welcome-BY6k2z0K.js.map +1 -0
- package/dist/welcome.css +23 -0
- package/package.json +19 -7
- package/dist/DummyComponent-ac_BQfhC.js +0 -8
- package/dist/DummyComponent-ac_BQfhC.js.map +0 -1
- package/dist/DummyComponent.d.ts +0 -2
- package/dist/DummyComponent.js +0 -2
- package/dist/DummyComponent.js.map +0 -1
- package/dist/components/DummyComponent/DummyComponent.d.ts +0 -1
- package/dist/components/DummyComponent/index.d.ts +0 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,17 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { A as AtlasHeader } from './atlas-header-jdAIcEpa.js';
|
|
2
|
+
export { C as ChatWindow } from './chat-window-BEkLTYNg.js';
|
|
3
|
+
export { C as ChatComposerRich } from './chat-composer-rich-BM5hoC1f.js';
|
|
4
|
+
export { C as Content } from './content-acT_RzNQ.js';
|
|
5
|
+
export { F as Footer } from './footer-DezXey1O.js';
|
|
6
|
+
export { H as Header } from './header-DgkrbsFN.js';
|
|
7
|
+
export { I as InfiniteContent } from './infinite-content-B4ojfnZH.js';
|
|
8
|
+
export { L as Loader } from './loader-DYmcO1Y_.js';
|
|
9
|
+
export { M as MarkdownText } from './markdown-text-CKN0oo8R.js';
|
|
10
|
+
export { A as AssistantMessage, M as MarkdownMessage, S as SmallAction, a as SystemMessage, T as Thinking, U as UserMessage } from './user-message-DCOP95qA.js';
|
|
11
|
+
export { N as NotificationCard } from './notification-card-B38ZC7k4.js';
|
|
12
|
+
export { C as ConfirmationCard, M as MultipleRecommendationCard, S as SingleRecommendationCard } from './single-recommendation-card-G78KiWnb.js';
|
|
13
|
+
export { W as Welcome } from './welcome-BY6k2z0K.js';
|
|
14
|
+
export { S as Spinner } from './spinner-QnlThoJs.js';
|
|
15
|
+
export { S as Suggestion, a as SuggestionList } from './suggestion-pJLJZyjg.js';
|
|
16
|
+
export { T as Toolbox, U as UserFeedback } from './toolbox-B-mWIaVL.js';
|
|
2
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useCallback, useEffect, Fragment } from 'react';
|
|
3
|
+
import { c as classNames } from './index-DDXI3m_u.js';
|
|
4
|
+
import { Flex } from '@servicetitan/anvil2';
|
|
5
|
+
import { S as Spinner } from './spinner-QnlThoJs.js';
|
|
6
|
+
|
|
7
|
+
import './infinite-content.css';const useInfiniteScroll = ({
|
|
8
|
+
hasMore,
|
|
9
|
+
isLoading,
|
|
10
|
+
onLoadMore,
|
|
11
|
+
rootMargin = "100px",
|
|
12
|
+
threshold = 0.1
|
|
13
|
+
}) => {
|
|
14
|
+
const sentinelRef = useRef(null);
|
|
15
|
+
const handleIntersection = useCallback(
|
|
16
|
+
(entries) => {
|
|
17
|
+
const [entry] = entries;
|
|
18
|
+
if (entry.isIntersecting && hasMore && !isLoading) {
|
|
19
|
+
onLoadMore();
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
[hasMore, isLoading, onLoadMore]
|
|
23
|
+
);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
const sentinel = sentinelRef.current;
|
|
26
|
+
if (!sentinel) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const observer = new IntersectionObserver(handleIntersection, {
|
|
30
|
+
rootMargin,
|
|
31
|
+
threshold
|
|
32
|
+
});
|
|
33
|
+
observer.observe(sentinel);
|
|
34
|
+
return () => {
|
|
35
|
+
observer.unobserve(sentinel);
|
|
36
|
+
observer.disconnect();
|
|
37
|
+
};
|
|
38
|
+
}, [handleIntersection, rootMargin, threshold]);
|
|
39
|
+
return {
|
|
40
|
+
sentinelRef
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const useScrollCallback = ({
|
|
45
|
+
onScrollDown,
|
|
46
|
+
onScrollTop,
|
|
47
|
+
threshold = 50,
|
|
48
|
+
element
|
|
49
|
+
} = {}) => {
|
|
50
|
+
const lastScrollTop = useRef(0);
|
|
51
|
+
const hasTriggeredScrollDown = useRef(false);
|
|
52
|
+
const handleScroll = useCallback(() => {
|
|
53
|
+
const scrollTop = element ? element.scrollTop : window.scrollY || document.documentElement.scrollTop;
|
|
54
|
+
if (scrollTop >= threshold && !hasTriggeredScrollDown.current) {
|
|
55
|
+
hasTriggeredScrollDown.current = true;
|
|
56
|
+
onScrollDown?.();
|
|
57
|
+
}
|
|
58
|
+
if (scrollTop === 0 && hasTriggeredScrollDown.current) {
|
|
59
|
+
hasTriggeredScrollDown.current = false;
|
|
60
|
+
onScrollTop?.();
|
|
61
|
+
}
|
|
62
|
+
lastScrollTop.current = scrollTop;
|
|
63
|
+
}, [onScrollDown, onScrollTop, threshold, element]);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (!element) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const targetElement = element;
|
|
69
|
+
targetElement.addEventListener("scroll", handleScroll, { passive: true });
|
|
70
|
+
return () => {
|
|
71
|
+
targetElement.removeEventListener("scroll", handleScroll);
|
|
72
|
+
};
|
|
73
|
+
}, [handleScroll, element]);
|
|
74
|
+
return {
|
|
75
|
+
lastScrollTop: lastScrollTop.current,
|
|
76
|
+
hasTriggeredScrollDown: hasTriggeredScrollDown.current
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const sentinel = "_sentinel_10sf8_19";
|
|
81
|
+
const styles = {
|
|
82
|
+
"infinite-content": "_infinite-content_10sf8_1",
|
|
83
|
+
"loading-more": "_loading-more_10sf8_11",
|
|
84
|
+
sentinel: sentinel
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const InfiniteContent = ({
|
|
88
|
+
children,
|
|
89
|
+
loading = false,
|
|
90
|
+
className,
|
|
91
|
+
hasMore = false,
|
|
92
|
+
onLoadMore = () => {
|
|
93
|
+
},
|
|
94
|
+
loadingMore = false,
|
|
95
|
+
rootMargin = "200px",
|
|
96
|
+
threshold = 0.1,
|
|
97
|
+
renderLoadingMore,
|
|
98
|
+
renderEndMessage,
|
|
99
|
+
onScrollDown,
|
|
100
|
+
onScrollTop,
|
|
101
|
+
scrollThreshold = 50,
|
|
102
|
+
scrollContainerRef
|
|
103
|
+
}) => {
|
|
104
|
+
const containerRef = useRef(null);
|
|
105
|
+
const { sentinelRef } = useInfiniteScroll({
|
|
106
|
+
hasMore,
|
|
107
|
+
isLoading: loadingMore,
|
|
108
|
+
onLoadMore: () => {
|
|
109
|
+
onLoadMore();
|
|
110
|
+
},
|
|
111
|
+
rootMargin,
|
|
112
|
+
threshold
|
|
113
|
+
});
|
|
114
|
+
useScrollCallback({
|
|
115
|
+
onScrollDown,
|
|
116
|
+
onScrollTop,
|
|
117
|
+
threshold: scrollThreshold,
|
|
118
|
+
element: scrollContainerRef?.current ?? containerRef.current
|
|
119
|
+
});
|
|
120
|
+
const showInitialLoading = loading && (!children || Array.isArray(children) && children.length === 0);
|
|
121
|
+
return /* @__PURE__ */ jsx(
|
|
122
|
+
Flex,
|
|
123
|
+
{
|
|
124
|
+
ref: containerRef,
|
|
125
|
+
className: classNames(styles["infinite-content"], className),
|
|
126
|
+
children: showInitialLoading ? /* @__PURE__ */ jsx(Spinner, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
127
|
+
children,
|
|
128
|
+
loadingMore && hasMore && /* @__PURE__ */ jsx("div", { className: styles["loading-more"], children: renderLoadingMore ? renderLoadingMore() : /* @__PURE__ */ jsx(Spinner, {}) }),
|
|
129
|
+
hasMore && /* @__PURE__ */ jsx(
|
|
130
|
+
"div",
|
|
131
|
+
{
|
|
132
|
+
ref: sentinelRef,
|
|
133
|
+
className: styles["sentinel"],
|
|
134
|
+
"aria-hidden": "true"
|
|
135
|
+
}
|
|
136
|
+
),
|
|
137
|
+
!hasMore && children && /* @__PURE__ */ jsx("div", { children: renderEndMessage ? renderEndMessage() : null })
|
|
138
|
+
] })
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export { InfiniteContent as I };
|
|
144
|
+
//# sourceMappingURL=infinite-content-B4ojfnZH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infinite-content-B4ojfnZH.js","sources":["../src/components/infinite-content/hooks/use-infinite-scroll.ts","../src/components/infinite-content/hooks/use-scroll-callback.ts","../src/components/infinite-content/infinite-content.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef } from \"react\";\n\ninterface UseInfiniteScrollOptions {\n hasMore: boolean;\n isLoading: boolean;\n onLoadMore: () => void;\n rootMargin?: string;\n threshold?: number;\n}\n\nexport const useInfiniteScroll = ({\n hasMore,\n isLoading,\n onLoadMore,\n rootMargin = \"100px\",\n threshold = 0.1,\n}: UseInfiniteScrollOptions) => {\n const sentinelRef = useRef<HTMLDivElement>(null);\n\n const handleIntersection = useCallback(\n (entries: IntersectionObserverEntry[]) => {\n const [entry] = entries;\n\n if (entry.isIntersecting && hasMore && !isLoading) {\n onLoadMore();\n }\n },\n [hasMore, isLoading, onLoadMore],\n );\n\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel) {\n return;\n }\n\n const observer = new IntersectionObserver(handleIntersection, {\n rootMargin,\n threshold,\n });\n\n observer.observe(sentinel);\n\n return () => {\n observer.unobserve(sentinel);\n observer.disconnect();\n };\n }, [handleIntersection, rootMargin, threshold]);\n\n return {\n sentinelRef,\n };\n};\n","import { useCallback, useEffect, useRef } from \"react\";\n\ninterface UseScrollCallbackOptions {\n onScrollDown?: () => void;\n onScrollTop?: () => void;\n threshold?: number;\n element?: HTMLElement | null;\n}\n\nexport const useScrollCallback = ({\n onScrollDown,\n onScrollTop,\n threshold = 50,\n element,\n}: UseScrollCallbackOptions = {}) => {\n const lastScrollTop = useRef(0);\n const hasTriggeredScrollDown = useRef(false);\n\n const handleScroll = useCallback(() => {\n const scrollTop = element\n ? element.scrollTop\n : window.scrollY || document.documentElement.scrollTop;\n\n // Check if scrolled down past threshold\n if (scrollTop >= threshold && !hasTriggeredScrollDown.current) {\n hasTriggeredScrollDown.current = true;\n onScrollDown?.();\n }\n\n // Check if scrolled back to top\n if (scrollTop === 0 && hasTriggeredScrollDown.current) {\n hasTriggeredScrollDown.current = false;\n onScrollTop?.();\n }\n\n lastScrollTop.current = scrollTop;\n }, [onScrollDown, onScrollTop, threshold, element]);\n\n useEffect(() => {\n if (!element) {\n return;\n }\n\n const targetElement = element;\n\n targetElement.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n return () => {\n targetElement.removeEventListener(\"scroll\", handleScroll);\n };\n }, [handleScroll, element]);\n\n return {\n lastScrollTop: lastScrollTop.current,\n hasTriggeredScrollDown: hasTriggeredScrollDown.current,\n };\n};\n","import {\n FC,\n Fragment,\n PropsWithChildren,\n ReactNode,\n RefObject,\n useRef,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { Flex } from \"@servicetitan/anvil2\";\n\nimport { Spinner } from \"../spinner\";\n\nimport { useInfiniteScroll } from \"./hooks/use-infinite-scroll\";\nimport { useScrollCallback } from \"./hooks/use-scroll-callback\";\n\nimport styles from \"./infinite-content.module.scss\";\n\nexport interface InfiniteContentProps {\n loading?: boolean;\n className?: string;\n hasMore?: boolean;\n onLoadMore?: () => void;\n loadingMore?: boolean;\n rootMargin?: string;\n threshold?: number;\n renderLoadingMore?: () => ReactNode;\n renderEndMessage?: () => ReactNode;\n onScrollDown?: () => void;\n onScrollTop?: () => void;\n scrollThreshold?: number;\n scrollContainerRef?: RefObject<HTMLElement>;\n}\n\nexport const InfiniteContent: FC<PropsWithChildren<InfiniteContentProps>> = ({\n children,\n loading = false,\n className,\n hasMore = false,\n onLoadMore = () => {},\n loadingMore = false,\n rootMargin = \"200px\",\n threshold = 0.1,\n renderLoadingMore,\n renderEndMessage,\n onScrollDown,\n onScrollTop,\n scrollThreshold = 50,\n scrollContainerRef,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const { sentinelRef } = useInfiniteScroll({\n hasMore,\n isLoading: loadingMore,\n onLoadMore: () => {\n onLoadMore();\n },\n rootMargin,\n threshold,\n });\n\n useScrollCallback({\n onScrollDown,\n onScrollTop,\n threshold: scrollThreshold,\n element: scrollContainerRef?.current ?? containerRef.current,\n });\n\n // Show initial loading state only when there are no messages yet\n const showInitialLoading =\n loading &&\n (!children || (Array.isArray(children) && children.length === 0));\n\n return (\n <Flex\n ref={containerRef}\n className={classNames(styles[\"infinite-content\"], className)}\n >\n {showInitialLoading ? (\n <Spinner />\n ) : (\n <Fragment>\n {children}\n\n {/* Loading more indicator */}\n {loadingMore && hasMore && (\n <div className={styles[\"loading-more\"]}>\n {renderLoadingMore ? renderLoadingMore() : <Spinner />}\n </div>\n )}\n\n {/* Infinite scroll sentinel - invisible trigger element */}\n {hasMore && (\n <div\n ref={sentinelRef}\n className={styles[\"sentinel\"]}\n aria-hidden=\"true\"\n />\n )}\n\n {/* End of list indicator */}\n {!hasMore && children && (\n <div>{renderEndMessage ? renderEndMessage() : null}</div>\n )}\n </Fragment>\n )}\n </Flex>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
@layer starter, reset, base, state, application;
|
|
2
|
+
|
|
3
|
+
._infinite-content_10sf8_1 {
|
|
4
|
+
flex-grow: 1;
|
|
5
|
+
padding: var(--size-2);
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
overflow-y: auto;
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
gap: 8px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
._loading-more_10sf8_11 {
|
|
14
|
+
display: flex;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
align-items: center;
|
|
17
|
+
padding: var(--size-2);
|
|
18
|
+
min-height: 60px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
._sentinel_10sf8_19 {
|
|
22
|
+
height: 1px;
|
|
23
|
+
margin: 10px 0;
|
|
24
|
+
visibility: hidden;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infinite-content.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Flex } from '@servicetitan/anvil2';
|
|
3
|
+
import { m as motion, e as easeInOut } from './proxy-B3m3ViIw.js';
|
|
4
|
+
|
|
5
|
+
const dotVariants = {
|
|
6
|
+
bounce: (i) => ({
|
|
7
|
+
y: [0, -15, 0],
|
|
8
|
+
transition: {
|
|
9
|
+
duration: 1.2,
|
|
10
|
+
ease: easeInOut,
|
|
11
|
+
repeat: Infinity,
|
|
12
|
+
delay: i * 0.15
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
};
|
|
16
|
+
const Loader = () => {
|
|
17
|
+
return /* @__PURE__ */ jsx(
|
|
18
|
+
Flex,
|
|
19
|
+
{
|
|
20
|
+
role: "status",
|
|
21
|
+
"aria-label": "Loading message",
|
|
22
|
+
style: {
|
|
23
|
+
paddingBlockStart: "var(--size-2)",
|
|
24
|
+
marginBlockStart: "var(--size-3)"
|
|
25
|
+
},
|
|
26
|
+
"data-chromatic": "ignore",
|
|
27
|
+
children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx(
|
|
28
|
+
motion.div,
|
|
29
|
+
{
|
|
30
|
+
custom: i,
|
|
31
|
+
variants: dotVariants,
|
|
32
|
+
animate: "bounce",
|
|
33
|
+
"data-chromatic": "ignore",
|
|
34
|
+
style: {
|
|
35
|
+
width: "8px",
|
|
36
|
+
height: "8px",
|
|
37
|
+
borderRadius: "50%",
|
|
38
|
+
background: "var(--foreground-color-primary)"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
i
|
|
42
|
+
))
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { Loader as L };
|
|
48
|
+
//# sourceMappingURL=loader-DYmcO1Y_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-DYmcO1Y_.js","sources":["../src/components/loader/loader.tsx"],"sourcesContent":["import { FC } from \"react\";\nimport { easeInOut, motion } from \"framer-motion\";\nimport { Flex } from \"@servicetitan/anvil2\";\n\nconst dotVariants = {\n bounce: (i: number) => ({\n y: [0, -15, 0],\n transition: {\n duration: 1.2,\n ease: easeInOut,\n repeat: Infinity,\n delay: i * 0.15,\n },\n }),\n};\n\nexport const Loader: FC = () => {\n return (\n <Flex\n role=\"status\"\n aria-label=\"Loading message\"\n style={{\n paddingBlockStart: \"var(--size-2)\",\n marginBlockStart: \"var(--size-3)\",\n }}\n data-chromatic=\"ignore\"\n >\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n custom={i}\n variants={dotVariants}\n animate=\"bounce\"\n data-chromatic=\"ignore\"\n style={{\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n background: \"var(--foreground-color-primary)\",\n }}\n />\n ))}\n </Flex>\n );\n};\n"],"names":[],"mappings":";;;;AAIA,MAAM,WAAA,GAAc;AAAA,EAClB,MAAA,EAAQ,CAAC,CAAA,MAAe;AAAA,IACtB,CAAA,EAAG,CAAC,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA;AAAA,IACb,UAAA,EAAY;AAAA,MACV,QAAA,EAAU,GAAA;AAAA,MACV,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,OAAO,CAAA,GAAI;AAAA;AACb,GACF;AACF,CAAA;AAEO,MAAM,SAAa,MAAM;AAC9B,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,iBAAA;AAAA,MACX,KAAA,EAAO;AAAA,QACL,iBAAA,EAAmB,eAAA;AAAA,QACnB,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,gBAAA,EAAe,QAAA;AAAA,MAEd,WAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,qBACd,GAAA;AAAA,QAAC,MAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,MAAA,EAAQ,CAAA;AAAA,UACR,QAAA,EAAU,WAAA;AAAA,UACV,OAAA,EAAQ,QAAA;AAAA,UACR,gBAAA,EAAe,QAAA;AAAA,UACf,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ,KAAA;AAAA,YACR,YAAA,EAAc,KAAA;AAAA,YACd,UAAA,EAAY;AAAA;AACd,SAAA;AAAA,QAVK;AAAA,OAYR;AAAA;AAAA,GACH;AAEJ;;;;"}
|
package/dist/loader.d.ts
ADDED
package/dist/loader.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { M as Markdown, r as remarkGfm } from './index-DFEn2XpE.js';
|
|
3
|
+
|
|
4
|
+
import './markdown-text.css';const styles = {
|
|
5
|
+
"markdown-content": "_markdown-content_14gyi_1"
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const MarkdownText = ({ text = "" }) => {
|
|
9
|
+
return /* @__PURE__ */ jsx("div", { className: styles["markdown-content"], children: /* @__PURE__ */ jsx(Markdown, { remarkPlugins: [remarkGfm], children: text }) });
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { MarkdownText as M };
|
|
13
|
+
//# sourceMappingURL=markdown-text-CKN0oo8R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-text-CKN0oo8R.js","sources":["../src/components/markdown-text/markdown-text.tsx"],"sourcesContent":["import { FC } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\nimport styles from \"./markdown-text.module.scss\";\n\nexport interface MarkdownTextProps {\n text: string;\n}\n\nexport const MarkdownText: FC<MarkdownTextProps> = ({ text = \"\" }) => {\n return (\n <div className={styles[\"markdown-content\"]}>\n <ReactMarkdown remarkPlugins={[remarkGfm]}>{text}</ReactMarkdown>\n </div>\n );\n};\n"],"names":["ReactMarkdown"],"mappings":";;;;;;;AAUO,MAAM,YAAA,GAAsC,CAAC,EAAE,IAAA,GAAO,IAAG,KAAM;AACpE,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,kBAAkB,CAAA,EACvC,QAAA,kBAAA,GAAA,CAACA,QAAA,EAAA,EAAc,aAAA,EAAe,CAAC,SAAS,CAAA,EAAI,gBAAK,CAAA,EACnD,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
@layer starter, reset, base, state, application;
|
|
2
|
+
._markdown-content_14gyi_1 h1,
|
|
3
|
+
._markdown-content_14gyi_1 h2,
|
|
4
|
+
._markdown-content_14gyi_1 h3,
|
|
5
|
+
._markdown-content_14gyi_1 h4 {
|
|
6
|
+
font-size: 1rem;
|
|
7
|
+
margin-top: 0;
|
|
8
|
+
}
|
|
9
|
+
._markdown-content_14gyi_1 p {
|
|
10
|
+
margin: 0 0 var(--size-2);
|
|
11
|
+
}
|
|
12
|
+
._markdown-content_14gyi_1 pre {
|
|
13
|
+
background-color: #f6f8fa;
|
|
14
|
+
border-radius: var(--border-radius-large);
|
|
15
|
+
padding: var(--size-4);
|
|
16
|
+
overflow: auto;
|
|
17
|
+
}
|
|
18
|
+
._markdown-content_14gyi_1 code {
|
|
19
|
+
background-color: rgba(175, 184, 193, 0.2);
|
|
20
|
+
border-radius: var(--border-radius-large);
|
|
21
|
+
padding: 0.2em 0.4em;
|
|
22
|
+
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
|
|
23
|
+
}
|
|
24
|
+
._markdown-content_14gyi_1 pre code {
|
|
25
|
+
background-color: transparent;
|
|
26
|
+
padding: 0;
|
|
27
|
+
}
|
|
28
|
+
._markdown-content_14gyi_1 ul,
|
|
29
|
+
._markdown-content_14gyi_1 ol {
|
|
30
|
+
padding-left: 2em;
|
|
31
|
+
margin: 0 0 1em;
|
|
32
|
+
}
|
|
33
|
+
._markdown-content_14gyi_1 table {
|
|
34
|
+
border-collapse: collapse;
|
|
35
|
+
width: 100%;
|
|
36
|
+
margin: 1em 0;
|
|
37
|
+
}
|
|
38
|
+
._markdown-content_14gyi_1 th,
|
|
39
|
+
._markdown-content_14gyi_1 td {
|
|
40
|
+
border: 1px solid #d0d7de;
|
|
41
|
+
padding: 6px 13px;
|
|
42
|
+
}
|
|
43
|
+
._markdown-content_14gyi_1 th {
|
|
44
|
+
background-color: #f6f8fa;
|
|
45
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-text.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/messages.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Card, Flex, Text } from '@servicetitan/anvil2';
|
|
3
|
+
import { M as MarkdownText } from './markdown-text-CKN0oo8R.js';
|
|
4
|
+
|
|
5
|
+
const NotificationCard = ({
|
|
6
|
+
title,
|
|
7
|
+
message,
|
|
8
|
+
timestamp,
|
|
9
|
+
onClick,
|
|
10
|
+
unread = false
|
|
11
|
+
}) => {
|
|
12
|
+
return /* @__PURE__ */ jsx(
|
|
13
|
+
Card,
|
|
14
|
+
{
|
|
15
|
+
onClick,
|
|
16
|
+
style: {
|
|
17
|
+
cursor: "pointer"
|
|
18
|
+
},
|
|
19
|
+
children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, style: { width: "100%" }, children: [
|
|
20
|
+
/* @__PURE__ */ jsxs(Flex, { alignItems: "center", justifyContent: "space-between", children: [
|
|
21
|
+
/* @__PURE__ */ jsx(
|
|
22
|
+
Text,
|
|
23
|
+
{
|
|
24
|
+
size: "medium",
|
|
25
|
+
style: {
|
|
26
|
+
color: "#0067E4",
|
|
27
|
+
whiteSpace: "nowrap",
|
|
28
|
+
overflow: "hidden",
|
|
29
|
+
textOverflow: "ellipsis",
|
|
30
|
+
width: "75%"
|
|
31
|
+
},
|
|
32
|
+
children: unread ? /* @__PURE__ */ jsx("b", { children: title }) : title
|
|
33
|
+
}
|
|
34
|
+
),
|
|
35
|
+
/* @__PURE__ */ jsx(Flex, { alignItems: "center", gap: 1, children: /* @__PURE__ */ jsxs(Text, { size: "small", style: { color: "#6B6B6B" }, children: [
|
|
36
|
+
timestamp,
|
|
37
|
+
unread && /* @__PURE__ */ jsx(
|
|
38
|
+
"span",
|
|
39
|
+
{
|
|
40
|
+
style: {
|
|
41
|
+
display: "inline-block",
|
|
42
|
+
width: 12,
|
|
43
|
+
height: 12,
|
|
44
|
+
borderRadius: "50%",
|
|
45
|
+
background: "#E23D18",
|
|
46
|
+
marginLeft: 8
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
] }) })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ jsx(Text, { size: "small", style: { color: "#6B6B6B" }, children: unread ? /* @__PURE__ */ jsx("b", { children: /* @__PURE__ */ jsx(MarkdownText, { text: message }) }) : /* @__PURE__ */ jsx(MarkdownText, { text: message }) })
|
|
53
|
+
] })
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export { NotificationCard as N };
|
|
59
|
+
//# sourceMappingURL=notification-card-B38ZC7k4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-card-B38ZC7k4.js","sources":["../src/components/notification-card/notification-card.tsx"],"sourcesContent":["import { FC } from \"react\";\nimport { Card, Flex, Text } from \"@servicetitan/anvil2\";\n\nimport { MarkdownText } from \"../markdown-text\";\n\ninterface NotificationCardProps {\n title: string;\n message: string;\n timestamp: string;\n unread?: boolean;\n onClick?: () => void;\n}\n\nexport const NotificationCard: FC<NotificationCardProps> = ({\n title,\n message,\n timestamp,\n onClick,\n unread = false,\n}) => {\n return (\n <Card\n onClick={onClick}\n style={{\n cursor: \"pointer\",\n }}\n >\n <Flex direction=\"column\" gap={2} style={{ width: \"100%\" }}>\n <Flex alignItems=\"center\" justifyContent=\"space-between\">\n <Text\n size=\"medium\"\n style={{\n color: \"#0067E4\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n width: \"75%\",\n }}\n >\n {unread ? <b>{title}</b> : title}\n </Text>\n <Flex alignItems=\"center\" gap={1}>\n <Text size=\"small\" style={{ color: \"#6B6B6B\" }}>\n {timestamp}\n {unread && (\n <span\n style={{\n display: \"inline-block\",\n width: 12,\n height: 12,\n borderRadius: \"50%\",\n background: \"#E23D18\",\n marginLeft: 8,\n }}\n />\n )}\n </Text>\n </Flex>\n </Flex>\n\n <Text size=\"small\" style={{ color: \"#6B6B6B\" }}>\n {unread ? (\n <b>\n <MarkdownText text={message} />\n </b>\n ) : (\n <MarkdownText text={message} />\n )}\n </Text>\n </Flex>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;AAaO,MAAM,mBAA8C,CAAC;AAAA,EAC1D,KAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,KAAM;AACJ,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ;AAAA,OACV;AAAA,MAEA,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAK,GAAG,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO,EACtD,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,UAAA,EAAW,QAAA,EAAS,cAAA,EAAe,eAAA,EACvC,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,SAAA;AAAA,gBACP,UAAA,EAAY,QAAA;AAAA,gBACZ,QAAA,EAAU,QAAA;AAAA,gBACV,YAAA,EAAc,UAAA;AAAA,gBACd,KAAA,EAAO;AAAA,eACT;AAAA,cAEC,QAAA,EAAA,MAAA,mBAAS,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,KAAA,EAAM,CAAA,GAAO;AAAA;AAAA,WAC7B;AAAA,0BACA,GAAA,CAAC,IAAA,EAAA,EAAK,UAAA,EAAW,QAAA,EAAS,KAAK,CAAA,EAC7B,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,EAAE,KAAA,EAAO,WAAU,EAC1C,QAAA,EAAA;AAAA,YAAA,SAAA;AAAA,YACA,MAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,OAAA,EAAS,cAAA;AAAA,kBACT,KAAA,EAAO,EAAA;AAAA,kBACP,MAAA,EAAQ,EAAA;AAAA,kBACR,YAAA,EAAc,KAAA;AAAA,kBACd,UAAA,EAAY,SAAA;AAAA,kBACZ,UAAA,EAAY;AAAA;AACd;AAAA;AACF,WAAA,EAEJ,CAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAEA,GAAA,CAAC,QAAK,IAAA,EAAK,OAAA,EAAQ,OAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAC1C,QAAA,EAAA,MAAA,mBACC,GAAA,CAAC,OACC,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,MAAM,OAAA,EAAS,CAAA,EAC/B,oBAEA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,OAAA,EAAS,CAAA,EAEjC;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-card.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|