@brainfish-ai/components 0.19.3 → 0.19.5

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 (32) hide show
  1. package/dist/convos.d.ts +4 -0
  2. package/dist/esm/chunks/{ChatSearch.C6nUXNy4.js → ChatSearch.DOH90EUx.js} +3 -306
  3. package/dist/esm/chunks/ChatSearch.DOH90EUx.js.map +1 -0
  4. package/dist/esm/chunks/blue.CNWYlAkf.js +17 -0
  5. package/dist/esm/chunks/blue.CNWYlAkf.js.map +1 -0
  6. package/dist/esm/chunks/{generating-star.CozjECmM.js → generating-star.BMQgTqs7.js} +13 -5
  7. package/dist/esm/chunks/{generating-star.CozjECmM.js.map → generating-star.BMQgTqs7.js.map} +1 -1
  8. package/dist/esm/chunks/hooks.B9tkXVNJ.js +309 -0
  9. package/dist/esm/chunks/hooks.B9tkXVNJ.js.map +1 -0
  10. package/dist/esm/colors.js +1 -15
  11. package/dist/esm/colors.js.map +1 -1
  12. package/dist/esm/components/chat-search.js +1 -1
  13. package/dist/esm/components/convos.js +14 -7
  14. package/dist/esm/components/convos.js.map +1 -1
  15. package/dist/esm/components/generating-star.js +1 -1
  16. package/dist/esm/components/metric-card.js +3 -1
  17. package/dist/esm/components/metric-card.js.map +1 -1
  18. package/dist/esm/components/sidebar.js +380 -0
  19. package/dist/esm/components/sidebar.js.map +1 -0
  20. package/dist/esm/components/ui/accordion.js +1 -1
  21. package/dist/esm/components/ui/accordion.js.map +1 -1
  22. package/dist/esm/convos.css +1 -1
  23. package/dist/esm/global.css +1 -1
  24. package/dist/esm/index.js +1 -1
  25. package/dist/esm/tailwind.preset.js +3 -1
  26. package/dist/esm/tailwind.preset.js.map +1 -1
  27. package/dist/generating-star.d.ts +1 -1
  28. package/dist/sidebar.d.ts +56 -0
  29. package/dist/stats.html +1 -1
  30. package/package.json +2 -1
  31. package/tailwind.preset.ts +2 -0
  32. package/dist/esm/chunks/ChatSearch.C6nUXNy4.js.map +0 -1
@@ -0,0 +1,380 @@
1
+ import * as React from 'react';
2
+ import { c as cn } from '../chunks/utils.Cwtlq8dh.js';
3
+ import { ArrowBendUpLeft, MagnifyingGlass, CaretRight, Dot, Circle, DotsThree, Plus, Article } from '@phosphor-icons/react';
4
+ import { Button } from './ui/button.js';
5
+ import { u as useDebounce } from '../chunks/hooks.B9tkXVNJ.js';
6
+ import { Input } from './ui/input.js';
7
+ import { Button as Button$1, useTreeData, useDragAndDrop, DropIndicator, Tree, TreeItem, TreeItemContent, Collection } from 'react-aria-components';
8
+ import { b as blue } from '../chunks/blue.CNWYlAkf.js';
9
+ import { d as dark } from '../chunks/dark.Cl9Z44CU.js';
10
+ import { ButtonGroup } from './ui/button-group.js';
11
+
12
+ const SidebarContext = React.createContext(null);
13
+ function SidebarProvider({
14
+ collapsed,
15
+ ItemLinkComponent: ItemLinkComponent2,
16
+ activeArticleId,
17
+ onSelectArticle,
18
+ onSearchArticles,
19
+ onAddArticle,
20
+ onMoveArticle,
21
+ children
22
+ }) {
23
+ const [isSearching, setIsSearching] = React.useState(false);
24
+ const handleSearchArticles = React.useCallback(
25
+ (value) => {
26
+ setIsSearching(value.trim() !== "");
27
+ onSearchArticles?.(value);
28
+ },
29
+ [onSearchArticles]
30
+ );
31
+ const contextValue = React.useMemo(
32
+ () => ({
33
+ collapsed,
34
+ ItemLinkComponent: ItemLinkComponent2,
35
+ activeArticleId,
36
+ onSearchArticles,
37
+ onSelectArticle,
38
+ onAddArticle,
39
+ onMoveArticle,
40
+ isSearching,
41
+ handleSearchArticles
42
+ }),
43
+ [
44
+ isSearching,
45
+ collapsed,
46
+ ItemLinkComponent2,
47
+ activeArticleId,
48
+ onSelectArticle,
49
+ onSearchArticles,
50
+ onAddArticle,
51
+ onMoveArticle,
52
+ handleSearchArticles
53
+ ]
54
+ );
55
+ return /* @__PURE__ */ React.createElement(SidebarContext.Provider, { value: contextValue }, children);
56
+ }
57
+ function useSidebar() {
58
+ const sidebarContext = React.useContext(SidebarContext);
59
+ if (!sidebarContext) throw new Error("useSidebar must be used within SidebarProvider");
60
+ return sidebarContext;
61
+ }
62
+
63
+ function AppNav({ className, items, activeId, showBack, onBack }) {
64
+ const { collapsed, ItemLinkComponent } = useSidebar();
65
+ const hasBack = !!showBack && !!onBack;
66
+ return /* @__PURE__ */ React.createElement("nav", { className: cn("flex flex-col gap-2", className), "aria-label": "App navigation" }, hasBack && /* @__PURE__ */ React.createElement(
67
+ Button,
68
+ {
69
+ variant: "link",
70
+ className: cn("py-2 text-base text-default w-full", collapsed ? "justify-center" : "justify-start"),
71
+ size: "icon",
72
+ onClick: onBack
73
+ },
74
+ /* @__PURE__ */ React.createElement(ArrowBendUpLeft, { "aria-hidden": "true" }),
75
+ /* @__PURE__ */ React.createElement("span", { className: cn(collapsed && "sr-only") }, "back to Brainfish")
76
+ ), items?.map((item) => /* @__PURE__ */ React.createElement(
77
+ ItemLinkComponent,
78
+ {
79
+ key: item.id,
80
+ className: cn(
81
+ "flex p-2 rounded-lg gap-1 text-base text-default items-center",
82
+ item.id === activeId ? "bg-primary font-bold" : "hover:bg-lime-100 focus:bg-lime-100"
83
+ ),
84
+ href: item.href,
85
+ "data-sidebar-item-id": item.id,
86
+ "data-sidebar-item-type": "app",
87
+ "data-sidebar-app-nav-item-selected": item.id === activeId
88
+ },
89
+ item.Icon ? /* @__PURE__ */ React.createElement(item.Icon, { weight: item.id === activeId ? "fill" : "regular", size: 16 }) : null,
90
+ /* @__PURE__ */ React.createElement("span", { className: cn("transition-opacity duration-200", collapsed && "opacity-0 sr-only") }, item.label)
91
+ )));
92
+ }
93
+
94
+ function ArticleSearch() {
95
+ const { handleSearchArticles } = useSidebar();
96
+ const [searchInteracted, setSearchInteracted] = React.useState(false);
97
+ const [searchValue, setSearchValue] = React.useState("");
98
+ const debouncedSearchValue = useDebounce(searchValue, 500);
99
+ React.useEffect(() => {
100
+ if (searchInteracted) handleSearchArticles?.(debouncedSearchValue);
101
+ }, [debouncedSearchValue, handleSearchArticles, searchInteracted]);
102
+ return /* @__PURE__ */ React.createElement(
103
+ Input,
104
+ {
105
+ className: "mb-2 h-auto text-subtlest border-border-subtle",
106
+ endIcon: MagnifyingGlass,
107
+ value: searchValue,
108
+ onChange: (e) => {
109
+ if (!searchInteracted) setSearchInteracted(true);
110
+ setSearchValue(e.target.value);
111
+ },
112
+ placeholder: "Find an article",
113
+ "aria-label": "Find an article"
114
+ }
115
+ );
116
+ }
117
+
118
+ function ArticleItem({
119
+ item,
120
+ hasChildItems,
121
+ isSelected,
122
+ isExpanded,
123
+ ItemLinkComponent: ItemLinkComponent2,
124
+ onAddArticle
125
+ }) {
126
+ const handleArticleClick = (e) => {
127
+ e.stopPropagation();
128
+ onAddArticle(item.value.id);
129
+ };
130
+ return /* @__PURE__ */ React.createElement(
131
+ "div",
132
+ {
133
+ className: cn(
134
+ "group relative flex items-center gap-1 rounded-md p-1 pl-[calc(var(--tree-item-level)*0.5rem)]",
135
+ isSelected ? "bg-lime-100 font-bold before:absolute before:left-0 before:top-1/2 before:h-1/2 before:w-0.5 before:-translate-y-1/2 before:bg-lime-400" : "hover:bg-accent hover:text-accent-foreground"
136
+ )
137
+ },
138
+ hasChildItems ? /* @__PURE__ */ React.createElement(Button$1, { slot: "chevron", className: "relative z-30 flex p-0 h-auto w-auto [&_svg]:size-4" }, /* @__PURE__ */ React.createElement(CaretRight, { "aria-hidden": "true", className: cn("transition-transform", isExpanded && "rotate-90") })) : /* @__PURE__ */ React.createElement(Dot, { "aria-hidden": "true", weight: "bold", className: "scale-[2.5]" }),
139
+ /* @__PURE__ */ React.createElement(
140
+ ItemLinkComponent2,
141
+ {
142
+ href: item.value.href,
143
+ "data-sidebar-item-id": item.value.id,
144
+ "data-sidebar-item-type": "article",
145
+ className: "min-w-0 text-default text-sm truncate flex-1 after:absolute after:inset-0 after:z-10"
146
+ },
147
+ item.value.label
148
+ ),
149
+ item.value.status && /* @__PURE__ */ React.createElement("div", { className: "ml-auto" }, item.value.status === "discovery" && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "sr-only" }, "Knowledge Discovery"), /* @__PURE__ */ React.createElement(Circle, { "aria-hidden": "true", fill: blue[600], weight: "fill", className: "size-2" })), item.value.status === "unpublished" && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "sr-only" }, "Unpublished Changes"), /* @__PURE__ */ React.createElement(Circle, { "aria-hidden": "true", fill: dark[600], weight: "bold", className: "size-2" }))),
150
+ /* @__PURE__ */ React.createElement(
151
+ ButtonGroup,
152
+ {
153
+ orientation: "horizontal",
154
+ className: cn(
155
+ "absolute right-0 top-0 bottom-0 z-20 hidden items-center rounded-xl",
156
+ "group-hover:flex group-focus-within:flex",
157
+ isSelected ? "bg-lime-100" : "bg-accent"
158
+ )
159
+ },
160
+ /* @__PURE__ */ React.createElement(
161
+ Button,
162
+ {
163
+ variant: "ghost",
164
+ size: "icon",
165
+ "aria-label": `More actions for ${item.value.label}`,
166
+ className: "size-4 [&_svg]:size-3.5"
167
+ },
168
+ /* @__PURE__ */ React.createElement(DotsThree, { "aria-hidden": "true", weight: "bold" })
169
+ ),
170
+ /* @__PURE__ */ React.createElement(
171
+ Button,
172
+ {
173
+ variant: "ghost",
174
+ size: "icon",
175
+ "aria-label": `Add article to ${item.value.label}`,
176
+ className: "size-4 [&_svg]:size-3.5",
177
+ onClick: handleArticleClick
178
+ },
179
+ /* @__PURE__ */ React.createElement(Plus, { "aria-hidden": "true" })
180
+ )
181
+ )
182
+ );
183
+ }
184
+
185
+ function getParentKeys(items, targetId, parents = []) {
186
+ for (const item of items) {
187
+ if (item.id === targetId) {
188
+ return parents;
189
+ }
190
+ if (item.items && item.items.length > 0) {
191
+ const result = getParentKeys(item.items, targetId, [...parents, item.id]);
192
+ if (result) return result;
193
+ }
194
+ }
195
+ return null;
196
+ }
197
+ function ArticleTree({ articles }) {
198
+ const { ItemLinkComponent, activeArticleId, onSelectArticle, onMoveArticle, onAddArticle } = useSidebar();
199
+ const articlesTree = useTreeData({
200
+ initialItems: articles,
201
+ getKey: (articleItem) => articleItem.id,
202
+ getChildren: (articleItem) => articleItem.items ?? []
203
+ });
204
+ const { dragAndDropHooks } = useDragAndDrop({
205
+ getItems: (_keys, items) => items.map((item) => ({
206
+ "text/plain": item.value.label
207
+ })),
208
+ onMove: (e) => {
209
+ const movedArticleId = Array.from(e.keys)[0];
210
+ if (!movedArticleId) return;
211
+ const targetArticleId = articlesTree.getItem(e.target.key);
212
+ if (!targetArticleId) return;
213
+ let movedToParentId;
214
+ let movedToIndex;
215
+ if (e.target.dropPosition === "on") {
216
+ movedToParentId = e.target.key.toString();
217
+ movedToIndex = targetArticleId.children?.length ?? 0;
218
+ articlesTree.move(movedArticleId, movedToParentId, movedToIndex);
219
+ } else {
220
+ movedToParentId = targetArticleId.parentKey?.toString() ?? null;
221
+ const siblings = movedToParentId ? articlesTree.getItem(movedToParentId)?.children ?? [] : articlesTree.items;
222
+ const targetIndex = siblings.findIndex((i) => i.key === e.target.key);
223
+ movedToIndex = e.target.dropPosition === "before" ? targetIndex : targetIndex + 1;
224
+ if (e.target.dropPosition === "before") {
225
+ articlesTree.moveBefore(e.target.key, e.keys);
226
+ } else {
227
+ articlesTree.moveAfter(e.target.key, e.keys);
228
+ }
229
+ }
230
+ onMoveArticle?.({
231
+ id: movedArticleId.toString(),
232
+ parentId: movedToParentId,
233
+ index: movedToIndex
234
+ });
235
+ },
236
+ renderDropIndicator: (target) => /* @__PURE__ */ React.createElement(
237
+ DropIndicator,
238
+ {
239
+ target,
240
+ className: "outline outline-1 outline-lime-200 ml-[calc(var(--tree-item-level)*0.5rem)]"
241
+ }
242
+ )
243
+ });
244
+ const initialExpandedKeys = React.useMemo(() => {
245
+ if (!activeArticleId || !articlesTree?.items) return /* @__PURE__ */ new Set();
246
+ const path = getParentKeys(
247
+ articlesTree.items.map((node) => node.value),
248
+ activeArticleId
249
+ );
250
+ return path ? new Set(path) : /* @__PURE__ */ new Set();
251
+ }, [articlesTree, activeArticleId]);
252
+ return /* @__PURE__ */ React.createElement(
253
+ Tree,
254
+ {
255
+ "aria-label": "Articles tree",
256
+ items: articlesTree.items,
257
+ dragAndDropHooks,
258
+ className: "flex flex-col gap-1",
259
+ selectionBehavior: "toggle",
260
+ selectionMode: "single",
261
+ defaultExpandedKeys: initialExpandedKeys,
262
+ defaultSelectedKeys: new Set(activeArticleId ? [activeArticleId] : []),
263
+ disallowEmptySelection: true,
264
+ onSelectionChange: (selection) => {
265
+ if (selection !== "all") {
266
+ const selected = Array.from(selection)?.[0];
267
+ selected && onSelectArticle?.(selected.toString());
268
+ }
269
+ }
270
+ },
271
+ function renderItem(item) {
272
+ return /* @__PURE__ */ React.createElement(TreeItem, { className: "list-none overflow-hidden", textValue: item.value.label, id: item.value.id }, /* @__PURE__ */ React.createElement(TreeItemContent, null, (props) => /* @__PURE__ */ React.createElement(
273
+ ArticleItem,
274
+ {
275
+ ItemLinkComponent,
276
+ item,
277
+ onAddArticle: (parentId) => onAddArticle?.(parentId),
278
+ ...props
279
+ }
280
+ )), item.children && /* @__PURE__ */ React.createElement(Collection, { items: item.children }, renderItem));
281
+ }
282
+ );
283
+ }
284
+
285
+ function ArticleNav({ articles, className }) {
286
+ const { isSearching, onAddArticle } = useSidebar();
287
+ return /* @__PURE__ */ React.createElement("div", { className: cn("flex flex-col gap-0.5 px-4", className) }, !isSearching && (!articles || articles.length === 0) ? /* @__PURE__ */ React.createElement(Button, { variant: "ghost", className: "text-subtlest", onClick: () => onAddArticle?.(null) }, /* @__PURE__ */ React.createElement(Article, { "aria-hidden": "true" }), "Create first article or folder") : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ArticleSearch, null), articles?.length ? /* @__PURE__ */ React.createElement("nav", { "aria-label": "Articles navigation", className: "max-h-[450px] overflow-y-auto" }, /* @__PURE__ */ React.createElement(ArticleTree, { articles })) : isSearching && articles?.length === 0 ? /* @__PURE__ */ React.createElement("span", null, "No articles found") : null));
288
+ }
289
+
290
+ function SectionNav({ className, items, activeId }) {
291
+ const { ItemLinkComponent } = useSidebar();
292
+ return /* @__PURE__ */ React.createElement("nav", { className: cn("flex flex-col", className), "aria-label": "App section navigation" }, items.map((item) => /* @__PURE__ */ React.createElement(
293
+ ItemLinkComponent,
294
+ {
295
+ key: item.id,
296
+ href: item.href,
297
+ "data-sidebar-item-id": item.id,
298
+ "data-sidebar-item-type": "section",
299
+ "data-sidebar-section-nav-item-selected": item.id === activeId,
300
+ className: cn(
301
+ "flex p-2 mx-4 text-base text-default relative rounded-lg",
302
+ "after:transition-opacity after:absolute after:top-0 after:bottom-0 after:-right-2 after:w-2 after:bg-primary after:rounded-l-md after:opacity-0",
303
+ "hover:bg-lime-100 focus:bg-lime-100",
304
+ item.id === activeId && "font-bold after:opacity-100"
305
+ )
306
+ },
307
+ item.label
308
+ )));
309
+ }
310
+
311
+ const Sidebar = React.forwardRef(function Sidebar2({
312
+ className,
313
+ ItemLinkComponent,
314
+ collapsed,
315
+ showAppBack,
316
+ onAppBack,
317
+ appNavItems,
318
+ appNavActiveId,
319
+ sectionNavItems,
320
+ sectionNavActiveId,
321
+ activeArticleId,
322
+ showArticles,
323
+ articles,
324
+ onSelectArticle,
325
+ onSearchArticles,
326
+ onAddArticle,
327
+ onMoveArticle,
328
+ ...props
329
+ }, ref) {
330
+ return /* @__PURE__ */ React.createElement(
331
+ SidebarProvider,
332
+ {
333
+ collapsed: !!collapsed,
334
+ ItemLinkComponent,
335
+ activeArticleId,
336
+ onSelectArticle,
337
+ onSearchArticles,
338
+ onAddArticle,
339
+ onMoveArticle
340
+ },
341
+ /* @__PURE__ */ React.createElement(
342
+ "aside",
343
+ {
344
+ ref,
345
+ ...props,
346
+ className: cn(
347
+ "py-4 transition-width duration-200 ease-in-out flex flex-col",
348
+ collapsed ? "w-[64px]" : "w-[260px]",
349
+ className
350
+ ),
351
+ "aria-label": "Application navigation"
352
+ },
353
+ /* @__PURE__ */ React.createElement(
354
+ AppNav,
355
+ {
356
+ className: cn(
357
+ "px-4",
358
+ appNavItems && appNavItems.length > 0 && "pb-6",
359
+ !collapsed && "border-b border-border-subtle"
360
+ ),
361
+ showBack: showAppBack,
362
+ items: appNavItems,
363
+ activeId: appNavActiveId,
364
+ onBack: onAppBack
365
+ }
366
+ ),
367
+ !collapsed && /* @__PURE__ */ React.createElement(React.Fragment, null, showArticles && /* @__PURE__ */ React.createElement(ArticleNav, { className: "py-4", articles }), sectionNavItems && sectionNavItems.length > 0 && /* @__PURE__ */ React.createElement(
368
+ SectionNav,
369
+ {
370
+ className: cn("py-4", !collapsed && "border-t border-subtle"),
371
+ items: sectionNavItems,
372
+ activeId: sectionNavActiveId
373
+ }
374
+ ))
375
+ )
376
+ );
377
+ });
378
+
379
+ export { Sidebar, useSidebar };
380
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","sources":["../../../src/components/sidebar/context.tsx","../../../src/components/sidebar/app-nav/app-nav.tsx","../../../src/components/sidebar/article-nav/article-search.tsx","../../../src/components/sidebar/article-nav/article-item.tsx","../../../src/components/sidebar/article-nav/article-tree.tsx","../../../src/components/sidebar/article-nav/article-nav.tsx","../../../src/components/sidebar/section-nav/section-nav.tsx","../../../src/components/sidebar/sidebar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { ItemLinkComponent } from './types';\n\nexport interface SidebarContextProps {\n collapsed: boolean;\n ItemLinkComponent: ItemLinkComponent;\n activeArticleId?: string;\n onSelectArticle?: (id: string) => void;\n onSearchArticles?: (value: string) => void;\n onAddArticle?: (parentId: string | null) => void;\n onMoveArticle?: (moved: { id: string; parentId: string | null; index: number }) => void;\n}\n\nexport interface SidebarContextValue extends SidebarContextProps {\n handleSearchArticles: (value: string) => void;\n isSearching: boolean;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\nexport function SidebarProvider({\n collapsed,\n ItemLinkComponent,\n activeArticleId,\n onSelectArticle,\n onSearchArticles,\n onAddArticle,\n onMoveArticle,\n children,\n}: React.PropsWithChildren<SidebarContextProps>) {\n const [isSearching, setIsSearching] = React.useState<boolean>(false);\n\n const handleSearchArticles = React.useCallback(\n (value: string) => {\n setIsSearching(value.trim() !== '');\n onSearchArticles?.(value);\n },\n [onSearchArticles],\n );\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({\n collapsed,\n ItemLinkComponent,\n activeArticleId,\n onSearchArticles,\n onSelectArticle,\n onAddArticle,\n onMoveArticle,\n isSearching,\n handleSearchArticles,\n }),\n [\n isSearching,\n collapsed,\n ItemLinkComponent,\n activeArticleId,\n onSelectArticle,\n onSearchArticles,\n onAddArticle,\n onMoveArticle,\n handleSearchArticles,\n ],\n );\n\n return <SidebarContext.Provider value={contextValue}>{children}</SidebarContext.Provider>;\n}\n\nexport function useSidebar() {\n const sidebarContext = React.useContext(SidebarContext);\n\n if (!sidebarContext) throw new Error('useSidebar must be used within SidebarProvider');\n\n return sidebarContext;\n}\n","import * as React from 'react';\nimport { ArrowBendUpLeft } from '@phosphor-icons/react';\n\nimport type { SidebarNavItem } from '../types';\nimport { useSidebar } from '../context';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\nexport interface AppNavProps {\n className?: string;\n items?: SidebarNavItem[];\n activeId?: string;\n showBack?: boolean;\n onBack?: () => void;\n}\n\nexport function AppNav({ className, items, activeId, showBack, onBack }: AppNavProps) {\n const { collapsed, ItemLinkComponent } = useSidebar();\n\n const hasBack = !!showBack && !!onBack;\n\n return (\n <nav className={cn('flex flex-col gap-2', className)} aria-label=\"App navigation\">\n {hasBack && (\n <Button\n variant=\"link\"\n className={cn('py-2 text-base text-default w-full', collapsed ? 'justify-center' : 'justify-start')}\n size=\"icon\"\n onClick={onBack}\n >\n <ArrowBendUpLeft aria-hidden=\"true\" />\n <span className={cn(collapsed && 'sr-only')}>back to Brainfish</span>\n </Button>\n )}\n {items?.map((item) => (\n <ItemLinkComponent\n key={item.id}\n className={cn(\n 'flex p-2 rounded-lg gap-1 text-base text-default items-center',\n item.id === activeId ? 'bg-primary font-bold' : 'hover:bg-lime-100 focus:bg-lime-100',\n )}\n href={item.href}\n data-sidebar-item-id={item.id}\n data-sidebar-item-type=\"app\"\n data-sidebar-app-nav-item-selected={item.id === activeId}\n >\n {item.Icon ? <item.Icon weight={item.id === activeId ? 'fill' : 'regular'} size={16} /> : null}\n <span className={cn('transition-opacity duration-200', collapsed && 'opacity-0 sr-only')}>{item.label}</span>\n </ItemLinkComponent>\n ))}\n </nav>\n );\n}\n","import * as React from 'react';\nimport { MagnifyingGlass } from '@phosphor-icons/react';\n\nimport { useSidebar } from '../context';\n\nimport { useDebounce } from '@/lib/hooks';\nimport { Input } from '@/components/ui/input';\n\nexport function ArticleSearch() {\n const { handleSearchArticles } = useSidebar();\n const [searchInteracted, setSearchInteracted] = React.useState(false); // [!code ++]\n const [searchValue, setSearchValue] = React.useState<string>('');\n const debouncedSearchValue = useDebounce(searchValue, 500);\n\n React.useEffect(() => {\n if (searchInteracted) handleSearchArticles?.(debouncedSearchValue);\n }, [debouncedSearchValue, handleSearchArticles, searchInteracted]);\n\n return (\n <Input\n className=\"mb-2 h-auto text-subtlest border-border-subtle\"\n endIcon={MagnifyingGlass}\n value={searchValue}\n onChange={(e) => {\n if (!searchInteracted) setSearchInteracted(true);\n setSearchValue(e.target.value);\n }}\n placeholder=\"Find an article\"\n aria-label=\"Find an article\"\n />\n );\n}\n","import * as React from 'react';\nimport { CaretRight, Circle, Dot, DotsThree, Plus } from '@phosphor-icons/react';\nimport { Key, TreeItemContentRenderProps, Button as AriaButton } from 'react-aria-components';\n\nimport { ArticleNavItem, ItemLinkComponent } from '../types';\n\nimport { cn } from '@/lib/utils';\nimport { blue } from '@/colors/blue';\nimport { dark } from '@/colors/dark';\nimport { Button } from '@/components/ui/button';\nimport { ButtonGroup } from '@/components/ui/button-group';\n\ntype ArticleItemTreeNode = {\n key: Key;\n value: ArticleNavItem;\n children: ArticleItemTreeNode[] | null;\n};\n\nexport interface ArticleItemProps extends TreeItemContentRenderProps {\n ItemLinkComponent: ItemLinkComponent;\n item: ArticleItemTreeNode;\n onAddArticle: (parentId: string) => void;\n}\n\nexport function ArticleItem({\n item,\n hasChildItems,\n isSelected,\n isExpanded,\n ItemLinkComponent,\n onAddArticle,\n}: ArticleItemProps) {\n const handleArticleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAddArticle(item.value.id);\n };\n\n return (\n <div\n className={cn(\n 'group relative flex items-center gap-1 rounded-md p-1 pl-[calc(var(--tree-item-level)*0.5rem)]',\n isSelected\n ? 'bg-lime-100 font-bold before:absolute before:left-0 before:top-1/2 before:h-1/2 before:w-0.5 before:-translate-y-1/2 before:bg-lime-400'\n : 'hover:bg-accent hover:text-accent-foreground',\n )}\n >\n {hasChildItems ? (\n <AriaButton slot=\"chevron\" className=\"relative z-30 flex p-0 h-auto w-auto [&_svg]:size-4\">\n <CaretRight aria-hidden=\"true\" className={cn('transition-transform', isExpanded && 'rotate-90')} />\n </AriaButton>\n ) : (\n <Dot aria-hidden=\"true\" weight=\"bold\" className=\"scale-[2.5]\" />\n )}\n\n <ItemLinkComponent\n href={item.value.href}\n data-sidebar-item-id={item.value.id}\n data-sidebar-item-type=\"article\"\n className=\"min-w-0 text-default text-sm truncate flex-1 after:absolute after:inset-0 after:z-10\"\n >\n {item.value.label}\n </ItemLinkComponent>\n\n {item.value.status && (\n <div className=\"ml-auto\">\n {item.value.status === 'discovery' && (\n <>\n <span className=\"sr-only\">Knowledge Discovery</span>\n <Circle aria-hidden=\"true\" fill={blue[600]} weight=\"fill\" className=\"size-2\" />\n </>\n )}\n {item.value.status === 'unpublished' && (\n <>\n <span className=\"sr-only\">Unpublished Changes</span>\n <Circle aria-hidden=\"true\" fill={dark[600]} weight=\"bold\" className=\"size-2\" />\n </>\n )}\n </div>\n )}\n\n <ButtonGroup\n orientation=\"horizontal\"\n className={cn(\n 'absolute right-0 top-0 bottom-0 z-20 hidden items-center rounded-xl',\n 'group-hover:flex group-focus-within:flex',\n isSelected ? 'bg-lime-100' : 'bg-accent',\n )}\n >\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={`More actions for ${item.value.label}`}\n className=\"size-4 [&_svg]:size-3.5\"\n >\n <DotsThree aria-hidden=\"true\" weight=\"bold\" />\n </Button>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={`Add article to ${item.value.label}`}\n className=\"size-4 [&_svg]:size-3.5\"\n onClick={handleArticleClick}\n >\n <Plus aria-hidden=\"true\" />\n </Button>\n </ButtonGroup>\n </div>\n );\n}\n","import * as React from 'react';\nimport {\n useDragAndDrop,\n useTreeData,\n Tree,\n TreeItem,\n TreeItemContent,\n Collection,\n DropIndicator,\n} from 'react-aria-components';\n\nimport { ArticleNavItem } from '../types';\nimport { ArticleItem } from './article-item';\nimport { useSidebar } from '../context';\n\ninterface ArticleTreeProps {\n articles: ArticleNavItem[];\n}\n\nfunction getParentKeys(items: ArticleNavItem[], targetId: string, parents: string[] = []): string[] | null {\n for (const item of items) {\n if (item.id === targetId) {\n return parents;\n }\n if (item.items && item.items.length > 0) {\n const result = getParentKeys(item.items, targetId, [...parents, item.id]);\n if (result) return result;\n }\n }\n\n return null;\n}\n\nexport function ArticleTree({ articles }: ArticleTreeProps) {\n const { ItemLinkComponent, activeArticleId, onSelectArticle, onMoveArticle, onAddArticle } = useSidebar();\n\n const articlesTree = useTreeData({\n initialItems: articles,\n getKey: (articleItem) => articleItem.id,\n getChildren: (articleItem) => articleItem.items ?? [],\n });\n\n const { dragAndDropHooks } = useDragAndDrop({\n getItems: (_keys, items: typeof articlesTree.items) =>\n items.map((item) => ({\n 'text/plain': item.value.label,\n })),\n onMove: (e) => {\n const movedArticleId = Array.from(e.keys)[0];\n if (!movedArticleId) return;\n\n const targetArticleId = articlesTree.getItem(e.target.key);\n if (!targetArticleId) return;\n\n let movedToParentId: string | null;\n let movedToIndex: number;\n\n if (e.target.dropPosition === 'on') {\n movedToParentId = e.target.key.toString();\n movedToIndex = targetArticleId.children?.length ?? 0;\n\n articlesTree.move(movedArticleId, movedToParentId, movedToIndex);\n } else {\n movedToParentId = targetArticleId.parentKey?.toString() ?? null;\n\n const siblings = movedToParentId ? articlesTree.getItem(movedToParentId)?.children ?? [] : articlesTree.items;\n\n const targetIndex = siblings.findIndex((i) => i.key === e.target.key);\n movedToIndex = e.target.dropPosition === 'before' ? targetIndex : targetIndex + 1;\n\n if (e.target.dropPosition === 'before') {\n articlesTree.moveBefore(e.target.key, e.keys);\n } else {\n articlesTree.moveAfter(e.target.key, e.keys);\n }\n }\n\n onMoveArticle?.({\n id: movedArticleId.toString(),\n parentId: movedToParentId,\n index: movedToIndex,\n });\n },\n renderDropIndicator: (target) => (\n <DropIndicator\n target={target}\n className=\"outline outline-1 outline-lime-200 ml-[calc(var(--tree-item-level)*0.5rem)]\"\n />\n ),\n });\n\n const initialExpandedKeys = React.useMemo(() => {\n if (!activeArticleId || !articlesTree?.items) return new Set<string>();\n\n const path = getParentKeys(\n articlesTree.items.map((node) => node.value),\n activeArticleId,\n );\n\n return path ? new Set(path) : new Set<string>();\n }, [articlesTree, activeArticleId]);\n\n return (\n <Tree\n aria-label=\"Articles tree\"\n items={articlesTree.items}\n dragAndDropHooks={dragAndDropHooks}\n className=\"flex flex-col gap-1\"\n selectionBehavior=\"toggle\"\n selectionMode=\"single\"\n defaultExpandedKeys={initialExpandedKeys}\n defaultSelectedKeys={new Set(activeArticleId ? [activeArticleId] : [])}\n disallowEmptySelection\n onSelectionChange={(selection) => {\n if (selection !== 'all') {\n const selected = Array.from(selection)?.[0];\n\n selected && onSelectArticle?.(selected.toString());\n }\n }}\n >\n {function renderItem(item) {\n return (\n <TreeItem className=\"list-none overflow-hidden\" textValue={item.value.label} id={item.value.id}>\n <TreeItemContent>\n {(props) => (\n <ArticleItem\n ItemLinkComponent={ItemLinkComponent}\n item={item}\n onAddArticle={(parentId) => onAddArticle?.(parentId)}\n {...props}\n />\n )}\n </TreeItemContent>\n\n {item.children && <Collection items={item.children}>{renderItem}</Collection>}\n </TreeItem>\n );\n }}\n </Tree>\n );\n}\n","import * as React from 'react';\nimport { Article } from '@phosphor-icons/react';\n\nimport { useSidebar } from '../context';\nimport { ArticleNavItem } from '../types';\nimport { ArticleSearch } from './article-search';\nimport { ArticleTree } from './article-tree';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\nexport interface ArticleNavProps {\n className?: string;\n articles?: ArticleNavItem[];\n}\n\nexport function ArticleNav({ articles, className }: ArticleNavProps) {\n const { isSearching, onAddArticle } = useSidebar();\n\n return (\n <div className={cn('flex flex-col gap-0.5 px-4', className)}>\n {!isSearching && (!articles || articles.length === 0) ? (\n <Button variant=\"ghost\" className=\"text-subtlest\" onClick={() => onAddArticle?.(null)}>\n <Article aria-hidden=\"true\" />\n Create first article or folder\n </Button>\n ) : (\n <>\n <ArticleSearch />\n {articles?.length ? (\n <nav aria-label=\"Articles navigation\" className=\"max-h-[450px] overflow-y-auto\">\n <ArticleTree articles={articles} />\n </nav>\n ) : isSearching && articles?.length === 0 ? (\n <span>No articles found</span>\n ) : null}\n </>\n )}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { SidebarNavItem } from '../types';\nimport { useSidebar } from '../context';\n\nimport { cn } from '@/lib/utils';\n\nexport interface SectionNavProps {\n className?: string;\n items: SidebarNavItem[];\n activeId?: string;\n}\n\nexport function SectionNav({ className, items, activeId }: SectionNavProps) {\n const { ItemLinkComponent } = useSidebar();\n\n return (\n <nav className={cn('flex flex-col', className)} aria-label=\"App section navigation\">\n {items.map((item) => (\n <ItemLinkComponent\n key={item.id}\n href={item.href}\n data-sidebar-item-id={item.id}\n data-sidebar-item-type=\"section\"\n data-sidebar-section-nav-item-selected={item.id === activeId}\n className={cn(\n 'flex p-2 mx-4 text-base text-default relative rounded-lg',\n 'after:transition-opacity after:absolute after:top-0 after:bottom-0 after:-right-2 after:w-2 after:bg-primary after:rounded-l-md after:opacity-0',\n 'hover:bg-lime-100 focus:bg-lime-100',\n item.id === activeId && 'font-bold after:opacity-100',\n )}\n >\n {item.label}\n </ItemLinkComponent>\n ))}\n </nav>\n );\n}\n","import * as React from 'react';\n\nimport { SidebarNavItem, ArticleNavItem } from './types';\nimport { SidebarContextProps, SidebarProvider } from './context';\nimport { AppNav } from './app-nav';\nimport { ArticleNav } from './article-nav';\nimport { SectionNav } from './section-nav';\n\nimport { cn } from '@/lib/utils';\n\nexport interface SidebarProps extends React.ComponentPropsWithoutRef<'aside'>, SidebarContextProps {\n showAppBack?: boolean;\n onAppBack?: () => void;\n appNavItems?: SidebarNavItem[];\n appNavActiveId?: string;\n showArticles?: boolean;\n articles?: ArticleNavItem[];\n sectionNavItems?: SidebarNavItem[];\n sectionNavActiveId?: string;\n}\n\nexport const Sidebar = React.forwardRef<HTMLElement, SidebarProps>(function Sidebar(\n {\n className,\n ItemLinkComponent,\n collapsed,\n showAppBack,\n onAppBack,\n appNavItems,\n appNavActiveId,\n sectionNavItems,\n sectionNavActiveId,\n activeArticleId,\n showArticles,\n articles,\n onSelectArticle,\n onSearchArticles,\n onAddArticle,\n onMoveArticle,\n ...props\n },\n ref,\n) {\n return (\n <SidebarProvider\n collapsed={!!collapsed}\n ItemLinkComponent={ItemLinkComponent}\n activeArticleId={activeArticleId}\n onSelectArticle={onSelectArticle}\n onSearchArticles={onSearchArticles}\n onAddArticle={onAddArticle}\n onMoveArticle={onMoveArticle}\n >\n <aside\n ref={ref}\n {...props}\n className={cn(\n 'py-4 transition-width duration-200 ease-in-out flex flex-col',\n collapsed ? 'w-[64px]' : 'w-[260px]',\n className,\n )}\n aria-label=\"Application navigation\"\n >\n <AppNav\n className={cn(\n 'px-4',\n appNavItems && appNavItems.length > 0 && 'pb-6',\n !collapsed && 'border-b border-border-subtle',\n )}\n showBack={showAppBack}\n items={appNavItems}\n activeId={appNavActiveId}\n onBack={onAppBack}\n />\n\n {!collapsed && (\n <>\n {showArticles && <ArticleNav className=\"py-4\" articles={articles} />}\n {sectionNavItems && sectionNavItems.length > 0 && (\n <SectionNav\n className={cn('py-4', !collapsed && 'border-t border-subtle')}\n items={sectionNavItems}\n activeId={sectionNavActiveId}\n />\n )}\n </>\n )}\n </aside>\n </SidebarProvider>\n );\n});\n"],"names":["ItemLinkComponent","AriaButton","Sidebar"],"mappings":"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"}
@@ -28,7 +28,7 @@ function AccordionTrigger({ className, children, ...props }) {
28
28
  ...props
29
29
  },
30
30
  children,
31
- /* @__PURE__ */ React.createElement(CaretDown, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200 group-hover:bg-dark-300 group-hover:group-[&[data-state=open]]:bg-dark-200 rounded-sm group-hover:transition-colors group-hover:duration-300 group-hover:ease-in-out" })
31
+ /* @__PURE__ */ React.createElement(CaretDown, { className: "text-muted-foreground size-4 shrink-0 translate-y-0.5 transition-transform duration-200 hover:bg-dark-300 hover:group-[&[data-state=open]]:bg-dark-200 rounded-sm group-hover:transition-colors hover:duration-300 hover:ease-in-out" })
32
32
  ));
33
33
  }
34
34
  function AccordionContent({ className, children, ...props }) {
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","sources":["../../../../src/components/ui/accordion.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { CaretDown } from '@phosphor-icons/react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nfunction AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b [&>h3]:my-0', className)}\n {...props}\n />\n );\n}\n\nfunction AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:no-underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180 group',\n className,\n )}\n {...props}\n >\n {children}\n <CaretDown className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200 group-hover:bg-dark-300 group-hover:group-[&[data-state=open]]:bg-dark-200 rounded-sm group-hover:transition-colors group-hover:duration-300 group-hover:ease-in-out\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n"],"names":[],"mappings":";;;;;AAMA,SAAS,SAAA,CAAU,EAAE,GAAG,KAAA,EAAM,EAAyD;AACrF,EAAA,2CAAQ,kBAAA,CAAmB,IAAA,EAAnB,EAAwB,WAAA,EAAU,WAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AACnE;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyD;AACpG,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA;AAAA,MAC9C,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAiB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAA4D;AACpH,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,kBAAA,CAAmB,MAAA,EAAnB,EAA0B,WAAU,MAAA,EAAA,kBACnC,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qTAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA,KAAA;AAAA,IAEH,QAAA;AAAA,oBACD,KAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,kRAAA,EAAmR;AAAA,GAE5S,CAAA;AAEJ;AAEA,SAAS,iBAAiB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAA4D;AACpH,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAU,2GAAA;AAAA,MACT,GAAG;AAAA,KAAA;AAAA,wCAEH,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,WAAA,EAAa,SAAS,KAAI,QAAS;AAAA,GACxD;AAEJ;;;;"}
1
+ {"version":3,"file":"accordion.js","sources":["../../../../src/components/ui/accordion.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { CaretDown } from '@phosphor-icons/react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nfunction AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b [&>h3]:my-0', className)}\n {...props}\n />\n );\n}\n\nfunction AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:no-underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180 group',\n className,\n )}\n {...props}\n >\n {children}\n <CaretDown className=\"text-muted-foreground size-4 shrink-0 translate-y-0.5 transition-transform duration-200 hover:bg-dark-300 hover:group-[&[data-state=open]]:bg-dark-200 rounded-sm group-hover:transition-colors hover:duration-300 hover:ease-in-out\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n"],"names":[],"mappings":";;;;;AAMA,SAAS,SAAA,CAAU,EAAE,GAAG,KAAA,EAAM,EAAyD;AACrF,EAAA,2CAAQ,kBAAA,CAAmB,IAAA,EAAnB,EAAwB,WAAA,EAAU,WAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AACnE;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyD;AACpG,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA;AAAA,MAC9C,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAiB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAA4D;AACpH,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,kBAAA,CAAmB,MAAA,EAAnB,EAA0B,WAAU,MAAA,EAAA,kBACnC,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qTAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA,KAAA;AAAA,IAEH,QAAA;AAAA,oBACD,KAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,sOAAA,EAAuO;AAAA,GAEhQ,CAAA;AAEJ;AAEA,SAAS,iBAAiB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAA4D;AACpH,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAU,2GAAA;AAAA,MACT,GAAG;AAAA,KAAA;AAAA,wCAEH,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,WAAA,EAAa,SAAS,KAAI,QAAS;AAAA,GACxD;AAEJ;;;;"}
@@ -1 +1 @@
1
- .before-line:before{position:absolute;top:-1rem;left:11px;display:block;height:.75rem;width:1px;background-color:var(--bfc-v2-color-mono-300, #E5E5E5);--tw-content: "";content:var(--tw-content)}.before-line--user:before{position:absolute;top:-1rem;left:11px;bottom:calc(50% + 18px);display:block;width:1px;background-color:var(--bfc-v2-color-mono-300, #E5E5E5);--tw-content: "";content:var(--tw-content)}.after-line:after{position:absolute;left:11px;bottom:-1rem;top:2.5rem;display:block;width:1px;background-color:var(--bfc-v2-color-mono-300, #E5E5E5);--tw-content: "";content:var(--tw-content)}.after-line:last-of-type:after{content:var(--tw-content);bottom:0}.after-line--user:not(:last-of-type):after{position:absolute;left:11px;bottom:-0px;top:calc(50% + 18px);display:block;width:1px;background-color:var(--bfc-v2-color-mono-300, #E5E5E5);--tw-content: "";content:var(--tw-content)}.after-line--user:not(:last-of-type):last-of-type:after{content:var(--tw-content);bottom:0}.message-item{position:relative;display:flex;flex-direction:row;gap:.5rem;padding:0}.message-header{display:flex;justify-content:space-between}.message-meta{display:flex;align-items:center;gap:.5rem}.message-timestamp{font-size:.75rem;line-height:1.5rem;color:var(--bfc-text-subtlest)}.message-timestamp-simple{font-size:.75rem;line-height:1rem;color:var(--bfc-text-subtlest)}.message-content-wrapper{padding-left:1.5rem;padding-right:1.5rem;font-size:1rem;line-height:1.5rem}.message-ai-content{position:relative;margin-left:1.75rem;gap:1.5rem;border-radius:.5rem;border-width:1px;border-color:var(--bfc-v2-color-mono-300, #E5E5E5);background-color:var(--bfc-white);padding-left:0;padding-right:0}.message-user-content{border-radius:.5rem;border-width:1px;border-color:var(--bfc-v2-color-mono-300, #E5E5E5);background-color:var(--bfc-v2-color-mono-100, #FAFAFA);padding:1.5rem;font-size:1rem;line-height:1.5rem}.message-article-link{display:flex;align-items:center;gap:.5rem}.message-article-link:focus-visible{outline:2px solid transparent;outline-offset:2px}.message-article-title{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem}.message-article-list{list-style-type:none}.message-article-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.message-article-list{padding-left:1.5rem;padding-right:1.5rem}.message-feedback-text{font-size:.875rem;line-height:1.25rem;font-style:italic}[data-test-id=attributes-table],[data-test-id=attributes-table] thead,[data-test-id=attributes-table] tbody,[data-test-id=attributes-table] th,[data-test-id=attributes-table] tr{display:block}[data-test-id=attributes-table] td{display:flex;flex-direction:column;gap:.25rem}[data-test-id=attributes-table] thead tr{position:absolute;top:-9999px;left:-9999px}[data-test-id=attributes-table] tr:nth-child(2n){background-color:var(--bfc-v2-color-mono-200, #F5F5F5)}[data-test-id=attributes-table] td{border-bottom-width:1px;border-bottom-color:var(--bfc-v2-color-mono-300, #E5E5E5);position:relative;white-space:normal;text-align:left}[data-test-id=attributes-table] td:before{top:.5rem;left:.5rem;white-space:nowrap;padding-right:.5rem;text-align:left;font-weight:700}[data-test-id=attributes-table] td:before{content:attr(data-title)}
1
+ .before-line:before{position:absolute;top:-1rem;left:11px;display:block;height:.75rem;width:1px;background-color:var(--bfc-v2-color-mono-300, #E5E5E5);--tw-content: "";content:var(--tw-content)}.before-line--user:before{position:absolute;top:-1rem;left:11px;bottom:calc(50% + 18px);display:block;width:1px;background-color:var(--bfc-v2-color-mono-300, #E5E5E5);--tw-content: "";content:var(--tw-content)}.after-line:after{position:absolute;left:11px;bottom:-1rem;top:2.5rem;display:block;width:1px;background-color:var(--bfc-v2-color-mono-300, #E5E5E5);--tw-content: "";content:var(--tw-content)}.after-line:last-of-type:after{content:var(--tw-content);bottom:0}.after-line--user:not(:last-of-type):after{position:absolute;left:11px;bottom:-0px;top:calc(50% + 18px);display:block;width:1px;background-color:var(--bfc-v2-color-mono-300, #E5E5E5);--tw-content: "";content:var(--tw-content)}.after-line--user:not(:last-of-type):last-of-type:after{content:var(--tw-content);bottom:0}.message-item{position:relative;display:flex;flex-direction:row;gap:.5rem;padding:0}.message-header{display:flex;justify-content:space-between}.message-meta{display:flex;align-items:center;gap:.5rem}.message-timestamp{font-size:.75rem;line-height:1.5rem;color:var(--bfc-text-subtlest);font-weight:400}.message-timestamp-simple{font-size:.75rem;line-height:1rem;color:var(--bfc-text-subtlest);font-weight:400}.message-content-wrapper{padding-left:1.5rem;padding-right:1.5rem;font-size:1rem;line-height:1.5rem}.message-ai-content{position:relative;margin-left:1.75rem;gap:1.5rem;border-radius:.5rem;border-width:1px;border-color:var(--bfc-v2-color-mono-300, #E5E5E5);background-color:var(--bfc-white);padding-left:0;padding-right:0}.message-user-content{border-radius:.5rem;border-width:1px;border-color:var(--bfc-v2-color-mono-300, #E5E5E5);background-color:var(--bfc-v2-color-mono-100, #FAFAFA);padding:1.5rem;font-size:1rem;line-height:1.5rem}.message-article-link{display:flex;align-items:center;gap:.5rem}.message-article-link:focus-visible{outline:2px solid transparent;outline-offset:2px}.message-article-title{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem}.message-article-list{list-style-type:none}.message-article-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.message-article-list{padding-left:1.5rem;padding-right:1.5rem}.message-feedback-text{font-size:.875rem;line-height:1.25rem;font-style:italic}[data-test-id=attributes-table],[data-test-id=attributes-table] thead,[data-test-id=attributes-table] tbody,[data-test-id=attributes-table] th,[data-test-id=attributes-table] tr{display:block}[data-test-id=attributes-table] td{display:flex;flex-direction:column;gap:.25rem}[data-test-id=attributes-table] thead tr{position:absolute;top:-9999px;left:-9999px}[data-test-id=attributes-table] tr:nth-child(2n){background-color:var(--bfc-v2-color-mono-200, #F5F5F5)}[data-test-id=attributes-table] td{border-bottom-width:1px;border-bottom-color:var(--bfc-v2-color-mono-300, #E5E5E5);position:relative;white-space:normal;text-align:left}[data-test-id=attributes-table] td:before{top:.5rem;left:.5rem;white-space:nowrap;padding-right:.5rem;text-align:left;font-weight:700}[data-test-id=attributes-table] td:before{content:attr(data-title)}