@brainfish-ai/components 0.23.1 → 0.23.3

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 (51) hide show
  1. package/dist/chat-search.d.ts +1 -1
  2. package/dist/discoveries-created.d.ts +49 -0
  3. package/dist/esm/chunks/{ChatSearch.DO8oQOlu.js → ChatSearch.DVi90w5m.js} +12 -15
  4. package/dist/esm/chunks/ChatSearch.DVi90w5m.js.map +1 -0
  5. package/dist/esm/chunks/{FormattedMessage.DFWDPJoI.js → FormattedMessage.Br7XTLD2.js} +5 -50
  6. package/dist/esm/chunks/FormattedMessage.Br7XTLD2.js.map +1 -0
  7. package/dist/esm/chunks/MermaidDiagram.xQ0CVFOI.js +50 -0
  8. package/dist/esm/chunks/MermaidDiagram.xQ0CVFOI.js.map +1 -0
  9. package/dist/esm/chunks/{chart.CTzWtshH.js → chart.BmBO7tNe.js} +3 -2
  10. package/dist/esm/chunks/{chart.CTzWtshH.js.map → chart.BmBO7tNe.js.map} +1 -1
  11. package/dist/esm/chunks/{status-badge.MOegXsYs.js → formatDate.CuWGpZ_T.js} +10 -18
  12. package/dist/esm/chunks/formatDate.CuWGpZ_T.js.map +1 -0
  13. package/dist/esm/chunks/{hooks.DI5ftshU.js → hooks.Dii4V-O3.js} +11 -18
  14. package/dist/esm/chunks/hooks.Dii4V-O3.js.map +1 -0
  15. package/dist/esm/chunks/{layout.Cw9KlzMD.js → layout.B4f3-2zh.js} +2 -2
  16. package/dist/esm/chunks/{layout.Cw9KlzMD.js.map → layout.B4f3-2zh.js.map} +1 -1
  17. package/dist/esm/chunks/{review-list.CVJB3TFg.js → review-list.Dhuy7ITv.js} +3 -2
  18. package/dist/esm/chunks/{review-list.CVJB3TFg.js.map → review-list.Dhuy7ITv.js.map} +1 -1
  19. package/dist/esm/chunks/{sidebar.BejmvpB3.js → sidebar.kcxBRKYA.js} +12 -3
  20. package/dist/esm/chunks/sidebar.kcxBRKYA.js.map +1 -0
  21. package/dist/esm/chunks/status-badge.eFJ1PYeb.js +18 -0
  22. package/dist/esm/chunks/status-badge.eFJ1PYeb.js.map +1 -0
  23. package/dist/esm/chunks/useChartDateFormatters.DG-OZUxq.js +11 -0
  24. package/dist/esm/chunks/useChartDateFormatters.DG-OZUxq.js.map +1 -0
  25. package/dist/esm/components/chart-area-linear.js +3 -23
  26. package/dist/esm/components/chart-area-linear.js.map +1 -1
  27. package/dist/esm/components/chart-radial-stacked.js +1 -1
  28. package/dist/esm/components/chat-search.js +1 -1
  29. package/dist/esm/components/convos.js +3 -2
  30. package/dist/esm/components/convos.js.map +1 -1
  31. package/dist/esm/components/discoveries-created.js +65 -0
  32. package/dist/esm/components/discoveries-created.js.map +1 -0
  33. package/dist/esm/components/markdown.js +2 -1
  34. package/dist/esm/components/markdown.js.map +1 -1
  35. package/dist/esm/components/ui/icon.js +17 -7
  36. package/dist/esm/components/ui/icon.js.map +1 -1
  37. package/dist/esm/global.css +1 -1
  38. package/dist/esm/index.js +6 -5
  39. package/dist/esm/index.js.map +1 -1
  40. package/dist/esm/layouts/full-layout.js +1 -1
  41. package/dist/esm/layouts/sidebar.js +1 -1
  42. package/dist/esm/scenes/knowledge-review.js +2 -2
  43. package/dist/icon.d.ts +0 -14
  44. package/dist/index.d.ts +1 -15
  45. package/dist/stats.html +1 -1
  46. package/package.json +1 -1
  47. package/dist/esm/chunks/ChatSearch.DO8oQOlu.js.map +0 -1
  48. package/dist/esm/chunks/FormattedMessage.DFWDPJoI.js.map +0 -1
  49. package/dist/esm/chunks/hooks.DI5ftshU.js.map +0 -1
  50. package/dist/esm/chunks/sidebar.BejmvpB3.js.map +0 -1
  51. package/dist/esm/chunks/status-badge.MOegXsYs.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ import React__default, { useState, useRef, useEffect } from 'react';
2
+ import mermaid from 'mermaid';
3
+
4
+ const config = {
5
+ startOnLoad: false,
6
+ theme: "default",
7
+ securityLevel: "loose",
8
+ fontFamily: "inherit",
9
+ secure: ["secure", "securityLevel", "startOnLoad", "maxTextSize"]
10
+ };
11
+ const MermaidDiagram = ({ content }) => {
12
+ const [svg, setSvg] = useState("");
13
+ const [error, setError] = useState(null);
14
+ const containerRef = useRef(null);
15
+ const [isInitialized, setIsInitialized] = useState(false);
16
+ useEffect(() => {
17
+ const initializeMermaid = () => {
18
+ try {
19
+ mermaid.initialize(config);
20
+ setIsInitialized(true);
21
+ } catch (err) {
22
+ console.error("Error initializing mermaid:", err);
23
+ setError("Failed to initialize diagram renderer");
24
+ }
25
+ };
26
+ initializeMermaid();
27
+ }, []);
28
+ useEffect(() => {
29
+ if (!isInitialized) return;
30
+ const renderDiagram = async () => {
31
+ try {
32
+ const id = `mermaid-${Math.random().toString(36).substr(2, 9)}`;
33
+ const { svg: svg2 } = await mermaid.render(id, content);
34
+ setSvg(svg2);
35
+ setError(null);
36
+ } catch (err) {
37
+ console.error("Error rendering mermaid diagram:", err);
38
+ setError("Failed to render diagram");
39
+ }
40
+ };
41
+ void renderDiagram();
42
+ }, [content, isInitialized]);
43
+ if (error) {
44
+ return /* @__PURE__ */ React__default.createElement("div", { className: "text-red-500 bg-red-50 p-4 rounded-md" }, error, /* @__PURE__ */ React__default.createElement("pre", { className: "mt-2 text-sm" }, content));
45
+ }
46
+ return /* @__PURE__ */ React__default.createElement("div", { ref: containerRef, className: "my-4 overflow-auto", dangerouslySetInnerHTML: { __html: svg } });
47
+ };
48
+
49
+ export { MermaidDiagram };
50
+ //# sourceMappingURL=MermaidDiagram.xQ0CVFOI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MermaidDiagram.xQ0CVFOI.js","sources":["../../../src/components/markdown/MermaidDiagram.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport mermaid, { MermaidConfig } from 'mermaid';\n\ninterface MermaidDiagramProps {\n content: string;\n}\n\nconst config: MermaidConfig = {\n startOnLoad: false,\n theme: 'default',\n securityLevel: 'loose',\n fontFamily: 'inherit',\n secure: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize'] as string[],\n};\n\nexport const MermaidDiagram: React.FC<MermaidDiagramProps> = ({ content }) => {\n const [svg, setSvg] = useState<string>('');\n const [error, setError] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n\n useEffect(() => {\n const initializeMermaid = () => {\n try {\n mermaid.initialize(config);\n setIsInitialized(true);\n } catch (err) {\n console.error('Error initializing mermaid:', err);\n setError('Failed to initialize diagram renderer');\n }\n };\n\n initializeMermaid();\n }, []);\n\n useEffect(() => {\n if (!isInitialized) return;\n\n const renderDiagram = async () => {\n try {\n const id = `mermaid-${Math.random().toString(36).substr(2, 9)}`;\n const { svg } = await mermaid.render(id, content);\n setSvg(svg);\n setError(null);\n } catch (err) {\n console.error('Error rendering mermaid diagram:', err);\n setError('Failed to render diagram');\n }\n };\n\n void renderDiagram();\n }, [content, isInitialized]);\n\n if (error) {\n return (\n <div className=\"text-red-500 bg-red-50 p-4 rounded-md\">\n {error}\n <pre className=\"mt-2 text-sm\">{content}</pre>\n </div>\n );\n }\n\n return <div ref={containerRef} className=\"my-4 overflow-auto\" dangerouslySetInnerHTML={{ __html: svg }} />;\n};\n\nexport default MermaidDiagram;\n"],"names":["svg","React"],"mappings":";;;AAOA,MAAM,MAAA,GAAwB;AAAA,EAC5B,WAAA,EAAa,KAAA;AAAA,EACb,KAAA,EAAO,SAAA;AAAA,EACP,aAAA,EAAe,OAAA;AAAA,EACf,UAAA,EAAY,SAAA;AAAA,EACZ,MAAA,EAAQ,CAAC,QAAA,EAAU,eAAA,EAAiB,eAAe,aAAa;AAClE,CAAA;AAEO,MAAM,cAAA,GAAgD,CAAC,EAAE,OAAA,EAAQ,KAAM;AAC5E,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAiB,EAAE,CAAA;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AAExD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,WAAW,MAAM,CAAA;AACzB,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,MACvB,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,+BAA+B,GAAG,CAAA;AAChD,QAAA,QAAA,CAAS,uCAAuC,CAAA;AAAA,MAClD;AAAA,IACF,CAAA;AAEA,IAAA,iBAAA,EAAkB;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,MAAM,gBAAgB,YAAY;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,CAAA,QAAA,EAAW,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAC7D,QAAA,MAAM,EAAE,KAAAA,IAAAA,EAAI,GAAI,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,OAAO,CAAA;AAChD,QAAA,MAAA,CAAOA,IAAG,CAAA;AACV,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACf,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,GAAG,CAAA;AACrD,QAAA,QAAA,CAAS,0BAA0B,CAAA;AAAA,MACrC;AAAA,IACF,CAAA;AAEA,IAAA,KAAK,aAAA,EAAc;AAAA,EACrB,CAAA,EAAG,CAAC,OAAA,EAAS,aAAa,CAAC,CAAA;AAE3B,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACEC,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EAAA,EACZ,KAAA,+CACA,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAA,EAAgB,OAAQ,CACzC,CAAA;AAAA,EAEJ;AAEA,EAAA,uBAAOA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,SAAA,EAAU,sBAAqB,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,EAAI,EAAG,CAAA;AAC1G;;;;"}
@@ -145,6 +145,7 @@ const ChartTooltipContent = React.forwardRef(
145
145
  }
146
146
  );
147
147
  ChartTooltipContent.displayName = "ChartTooltip";
148
+ const ChartLegend = RechartsPrimitive.Legend;
148
149
  const ChartLegendContent = React.forwardRef(({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }, ref) => {
149
150
  const { config } = useChart();
150
151
  if (!payload?.length) {
@@ -194,5 +195,5 @@ function getPayloadConfigFromPayload(config, payload, key) {
194
195
  return configLabelKey in config ? config[configLabelKey] : config[key];
195
196
  }
196
197
 
197
- export { ChartContainer as C, ChartTooltip as a, ChartTooltipContent as b };
198
- //# sourceMappingURL=chart.CTzWtshH.js.map
198
+ export { ChartContainer as C, ChartTooltip as a, ChartTooltipContent as b, ChartLegend as c, ChartLegendContent as d };
199
+ //# sourceMappingURL=chart.BmBO7tNe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart.CTzWtshH.js","sources":["../../../src/components/ui/chart.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport { cn } from '@/lib/utils';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & ({ color?: string; theme?: never } | { color?: never; theme: Record<keyof typeof THEMES, string> });\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\nconst ChartContainer = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n config: ChartConfig;\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n }\n>(({ id, className, children, config, ...props }, ref) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>{children}</RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n});\nChartContainer.displayName = 'Chart';\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, config]) => config.theme || config.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.theme?.[theme as keyof typeof itemConfig.theme] || itemConfig.color;\n\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join('\\n')}\n}\n`,\n )\n .join('\\n'),\n }}\n />\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nconst ChartTooltipContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<'div'> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: 'line' | 'dot' | 'dashed';\n nameKey?: string;\n labelKey?: string;\n }\n>(\n (\n {\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n },\n ref,\n ) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === 'string'\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter) {\n return <div className={cn('font-medium', labelClassName)}>{labelFormatter(value, payload)}</div>;\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl',\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== 'none')\n .map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color || item.payload.fill || item.color;\n\n return (\n <div\n key={item.dataKey}\n className={cn(\n 'flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn('shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]', {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n })}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">{itemConfig?.label || item.name}</span>\n </div>\n {item.value && (\n <span className=\"font-mono font-medium tabular-nums text-foreground\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\nChartTooltipContent.displayName = 'ChartTooltip';\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nconst ChartLegendContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> &\n Pick<RechartsPrimitive.LegendProps, 'payload' | 'verticalAlign'> & {\n hideIcon?: boolean;\n nameKey?: string;\n }\n>(({ className, hideIcon = false, payload, verticalAlign = 'bottom', nameKey }, ref) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center justify-center gap-4', verticalAlign === 'top' ? 'pb-3' : 'pt-3', className)}\n >\n {payload\n .filter((item) => item.type !== 'none')\n .map((item) => {\n const key = `${nameKey || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn('flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground')}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n});\nChartLegendContent.displayName = 'ChartLegend';\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (key in payload && typeof payload[key as keyof typeof payload] === 'string') {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n ) {\n configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\nexport { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, ChartStyle };\n"],"names":["config"],"mappings":";;;;AAMA,MAAM,MAAA,GAAS,EAAE,KAAA,EAAO,EAAA,EAAI,MAAM,OAAA,EAAQ;AAa1C,MAAM,YAAA,GAAe,KAAA,CAAM,aAAA,CAAwC,IAAI,CAAA;AAEvE,SAAS,QAAA,GAAW;AAClB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,UAAA,CAAW,YAAY,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,MAAM,cAAA,GAAiB,KAAA,CAAM,UAAA,CAM3B,CAAC,EAAE,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACxD,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,EAAM;AAC7B,EAAA,MAAM,UAAU,CAAA,MAAA,EAAS,EAAA,IAAM,SAAS,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,CAAA;AAEzD,EAAA,2CACG,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,QAAO,EAAA,kBACrC,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,OAAA;AAAA,MACZ,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,upBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA,KAAA;AAAA,oBAEJ,KAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,EAAA,EAAI,OAAA,EAAS,MAAA,EAAgB,CAAA;AAAA,oBACzC,KAAA,CAAA,aAAA,CAAC,iBAAA,CAAkB,mBAAA,EAAlB,IAAA,EAAuC,QAAS;AAAA,GAErD,CAAA;AAEJ,CAAC;AACD,cAAA,CAAe,WAAA,GAAc,OAAA;AAE7B,MAAM,UAAA,GAAa,CAAC,EAAE,EAAA,EAAI,QAAO,KAA2C;AAC1E,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,EAAE,MAAA,CAAO,CAAC,GAAGA,OAAM,CAAA,KAAMA,OAAAA,CAAO,KAAA,IAASA,QAAO,KAAK,CAAA;AAE9F,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,uBAAA,EAAyB;AAAA,QACvB,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAC1B,GAAA;AAAA,UACC,CAAC,CAAC,KAAA,EAAO,MAAM,CAAA,KAAM;AAAA,EAC/B,MAAM,gBAAgB,EAAE,CAAA;AAAA,EACxB,YACC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,UAAU,CAAA,KAAM;AAC1B,YAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,GAAQ,KAAsC,KAAK,UAAA,CAAW,KAAA;AAEvF,YAAA,OAAO,KAAA,GAAQ,CAAA,UAAA,EAAa,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAA,GAAM,IAAA;AAAA,UACjD,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA;AAAA,SAGH,CACC,KAAK,IAAI;AAAA;AACd;AAAA,GACF;AAEJ,CAAA;AAEA,MAAM,eAAe,iBAAA,CAAkB;AAEvC,MAAM,sBAAsB,KAAA,CAAM,UAAA;AAAA,EAWhC,CACE;AAAA,IACE,MAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,SAAA,GAAY,KAAA;AAAA,IACZ,aAAA,GAAgB,KAAA;AAAA,IAChB,KAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,QAAA,EAAS;AAE5B,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,MAAM;AACvC,MAAA,IAAI,SAAA,IAAa,CAAC,OAAA,EAAS,MAAA,EAAQ;AACjC,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,CAAC,IAAI,CAAA,GAAI,OAAA;AACf,MAAA,MAAM,MAAM,CAAA,EAAG,QAAA,IAAY,MAAM,OAAA,IAAW,IAAA,EAAM,QAAQ,OAAO,CAAA,CAAA;AACjE,MAAA,MAAM,UAAA,GAAa,2BAAA,CAA4B,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA;AAChE,MAAA,MAAM,KAAA,GACJ,CAAC,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,GAC1B,MAAA,CAAO,KAA4B,CAAA,EAAG,KAAA,IAAS,KAAA,GAC/C,UAAA,EAAY,KAAA;AAElB,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,cAAc,CAAA,EAAA,EAAI,cAAA,CAAe,KAAA,EAAO,OAAO,CAAE,CAAA;AAAA,MAC5F;AAEA,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,2CAAQ,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,aAAA,EAAe,cAAc,KAAI,KAAM,CAAA;AAAA,IACnE,CAAA,EAAG,CAAC,KAAA,EAAO,cAAA,EAAgB,SAAS,SAAA,EAAW,cAAA,EAAgB,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAEhF,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,EAAS,MAAA,EAAQ;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,SAAA,KAAc,KAAA;AAExD,IAAA,uBACE,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,wHAAA;AAAA,UACA;AAAA;AACF,OAAA;AAAA,MAEC,CAAC,YAAY,YAAA,GAAe,IAAA;AAAA,sBAC7B,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAA,EACZ,QACE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,MAAM,CAAA,CACrC,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AACpB,QAAA,MAAM,MAAM,CAAA,EAAG,OAAA,IAAW,KAAK,IAAA,IAAQ,IAAA,CAAK,WAAW,OAAO,CAAA,CAAA;AAC9D,QAAA,MAAM,UAAA,GAAa,2BAAA,CAA4B,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA;AAChE,QAAA,MAAM,cAAA,GAAiB,KAAA,IAAS,IAAA,CAAK,OAAA,CAAQ,QAAQ,IAAA,CAAK,KAAA;AAE1D,QAAA,uBACE,KAAA,CAAA,aAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAK,IAAA,CAAK,OAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,qGAAA;AAAA,cACA,cAAc,KAAA,IAAS;AAAA;AACzB,WAAA;AAAA,UAEC,SAAA,IAAa,IAAA,EAAM,KAAA,KAAU,MAAA,IAAa,IAAA,CAAK,OAC9C,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,OAAO,IAAA,CAAK,OAAO,CAAA,mBAE1D,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EACG,UAAA,EAAY,IAAA,mBACX,KAAA,CAAA,aAAA,CAAC,UAAA,CAAW,IAAA,EAAX,IAAgB,CAAA,GAEjB,CAAC,aAAA,oBACC,KAAA,CAAA,aAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,gEAAA,EAAkE;AAAA,gBAC9E,eAAe,SAAA,KAAc,KAAA;AAAA,gBAC7B,OAAO,SAAA,KAAc,MAAA;AAAA,gBACrB,mDAAmD,SAAA,KAAc,QAAA;AAAA,gBACjE,QAAA,EAAU,aAAa,SAAA,KAAc;AAAA,eACtC,CAAA;AAAA,cACD,KAAA,EACE;AAAA,gBACE,YAAA,EAAc,cAAA;AAAA,gBACd,gBAAA,EAAkB;AAAA;AACpB;AAAA,WAEJ,kBAGJ,KAAA,CAAA,aAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,0CAAA;AAAA,gBACA,YAAY,WAAA,GAAc;AAAA;AAC5B,aAAA;AAAA,4BAEA,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAA,EACZ,YAAY,YAAA,GAAe,IAAA,kBAC5B,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uBAAA,EAAA,EAAyB,UAAA,EAAY,KAAA,IAAS,IAAA,CAAK,IAAK,CAC1E,CAAA;AAAA,YACC,IAAA,CAAK,yBACJ,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,oDAAA,EAAA,EACb,IAAA,CAAK,KAAA,CAAM,cAAA,EACd;AAAA,WAGN;AAAA,SAEJ;AAAA,MAEJ,CAAC,CACL;AAAA,KACF;AAAA,EAEJ;AACF;AACA,mBAAA,CAAoB,WAAA,GAAc,cAAA;AAIlC,MAAM,kBAAA,GAAqB,KAAA,CAAM,UAAA,CAO/B,CAAC,EAAE,SAAA,EAAW,QAAA,GAAW,KAAA,EAAO,OAAA,EAAS,aAAA,GAAgB,QAAA,EAAU,OAAA,IAAW,GAAA,KAAQ;AACtF,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,QAAA,EAAS;AAE5B,EAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAW,EAAA,CAAG,wCAAA,EAA0C,kBAAkB,KAAA,GAAQ,MAAA,GAAS,QAAQ,SAAS;AAAA,KAAA;AAAA,IAE3G,OAAA,CACE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,MAAM,CAAA,CACrC,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAA,IAAW,IAAA,CAAK,WAAW,OAAO,CAAA,CAAA;AACjD,MAAA,MAAM,UAAA,GAAa,2BAAA,CAA4B,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA;AAEhE,MAAA,uBACE,KAAA,CAAA,aAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAK,IAAA,CAAK,KAAA;AAAA,UACV,SAAA,EAAW,GAAG,iFAAiF;AAAA,SAAA;AAAA,QAE9F,UAAA,EAAY,QAAQ,CAAC,QAAA,uCACnB,UAAA,CAAW,IAAA,EAAX,IAAgB,CAAA,mBAEjB,KAAA,CAAA,aAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,gCAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,iBAAiB,IAAA,CAAK;AAAA;AACxB;AAAA,SACF;AAAA,QAED,UAAA,EAAY;AAAA,OACf;AAAA,IAEJ,CAAC;AAAA,GACL;AAEJ,CAAC,CAAA;AACD,kBAAA,CAAmB,WAAA,GAAc,aAAA;AAGjC,SAAS,2BAAA,CAA4B,MAAA,EAAqB,OAAA,EAAkB,GAAA,EAAa;AACvF,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,IAAA,EAAM;AACnD,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GACJ,SAAA,IAAa,OAAA,IAAW,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,OAAA,KAAY,IAAA,GAC/E,OAAA,CAAQ,OAAA,GACR,MAAA;AAEN,EAAA,IAAI,cAAA,GAAyB,GAAA;AAE7B,EAAA,IAAI,OAAO,OAAA,IAAW,OAAO,OAAA,CAAQ,GAA2B,MAAM,QAAA,EAAU;AAC9E,IAAA,cAAA,GAAiB,QAAQ,GAA2B,CAAA;AAAA,EACtD,CAAA,MAAA,IACE,kBACA,GAAA,IAAO,cAAA,IACP,OAAO,cAAA,CAAe,GAAkC,MAAM,QAAA,EAC9D;AACA,IAAA,cAAA,GAAiB,eAAe,GAAkC,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,kBAAkB,MAAA,GAAS,MAAA,CAAO,cAAc,CAAA,GAAI,OAAO,GAA0B,CAAA;AAC9F;;;;"}
1
+ {"version":3,"file":"chart.BmBO7tNe.js","sources":["../../../src/components/ui/chart.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport { cn } from '@/lib/utils';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & ({ color?: string; theme?: never } | { color?: never; theme: Record<keyof typeof THEMES, string> });\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\nconst ChartContainer = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n config: ChartConfig;\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n }\n>(({ id, className, children, config, ...props }, ref) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>{children}</RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n});\nChartContainer.displayName = 'Chart';\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, config]) => config.theme || config.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.theme?.[theme as keyof typeof itemConfig.theme] || itemConfig.color;\n\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join('\\n')}\n}\n`,\n )\n .join('\\n'),\n }}\n />\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nconst ChartTooltipContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<'div'> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: 'line' | 'dot' | 'dashed';\n nameKey?: string;\n labelKey?: string;\n }\n>(\n (\n {\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n },\n ref,\n ) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === 'string'\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter) {\n return <div className={cn('font-medium', labelClassName)}>{labelFormatter(value, payload)}</div>;\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl',\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== 'none')\n .map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color || item.payload.fill || item.color;\n\n return (\n <div\n key={item.dataKey}\n className={cn(\n 'flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn('shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]', {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n })}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">{itemConfig?.label || item.name}</span>\n </div>\n {item.value && (\n <span className=\"font-mono font-medium tabular-nums text-foreground\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\nChartTooltipContent.displayName = 'ChartTooltip';\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nconst ChartLegendContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> &\n Pick<RechartsPrimitive.LegendProps, 'payload' | 'verticalAlign'> & {\n hideIcon?: boolean;\n nameKey?: string;\n }\n>(({ className, hideIcon = false, payload, verticalAlign = 'bottom', nameKey }, ref) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center justify-center gap-4', verticalAlign === 'top' ? 'pb-3' : 'pt-3', className)}\n >\n {payload\n .filter((item) => item.type !== 'none')\n .map((item) => {\n const key = `${nameKey || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn('flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground')}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n});\nChartLegendContent.displayName = 'ChartLegend';\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (key in payload && typeof payload[key as keyof typeof payload] === 'string') {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n ) {\n configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\nexport { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, ChartStyle };\n"],"names":["config"],"mappings":"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"}
@@ -1,8 +1,3 @@
1
- import React__default from 'react';
2
- import { Check, Circle } from '@phosphor-icons/react';
3
- import { Badge } from '../components/ui/badge.js';
4
- import { c as cn } from './utils.Cwtlq8dh.js';
5
-
6
1
  /**
7
2
  * @module constants
8
3
  * @summary Useful constants
@@ -942,17 +937,14 @@ function formatDate(date, localeParam) {
942
937
  hour12: true
943
938
  });
944
939
  }
940
+ function formatChartTick(value, locale = "en-US") {
941
+ if (typeof value === "string") return value;
942
+ return value.toLocaleDateString(locale, { month: "short", day: "numeric" });
943
+ }
944
+ function formatChartLabel(value, locale = "en-US") {
945
+ if (typeof value === "string") return value;
946
+ return value.toLocaleDateString(locale, { month: "long", day: "numeric", year: "numeric" });
947
+ }
945
948
 
946
- const StatusBadge = React__default.forwardRef(
947
- ({ className, suffix, variant, children, ...props }, ref) => {
948
- const Icon = variant === "accepted" ? Check : Circle;
949
- const badgeVariant = variant === "accepted" ? "success" : variant;
950
- const weight = variant === "accepted" ? "bold" : "fill";
951
- const size = variant === "accepted" ? `!size-3` : `!size-2`;
952
- return /* @__PURE__ */ React__default.createElement("span", { ref, className: cn("flex items-center gap-1 rounded-md p-1", suffix && "bg-dark-300", className) }, /* @__PURE__ */ React__default.createElement(Badge, { ...props, variant: badgeVariant }, /* @__PURE__ */ React__default.createElement("span", { className: "flex items-center gap-1" }, /* @__PURE__ */ React__default.createElement(Icon, { weight, size: 8, className: size }), children)), suffix && /* @__PURE__ */ React__default.createElement("span", { className: "text-xs text-default" }, suffix));
953
- }
954
- );
955
- StatusBadge.displayName = "StatusBadge";
956
-
957
- export { StatusBadge as S, formatDate as a, formatDistance as f };
958
- //# sourceMappingURL=status-badge.MOegXsYs.js.map
949
+ export { formatChartLabel as a, formatDistance as b, formatDate as c, formatChartTick as f };
950
+ //# sourceMappingURL=formatDate.CuWGpZ_T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatDate.CuWGpZ_T.js","sources":["../../../node_modules/date-fns/constants.js","../../../node_modules/date-fns/constructFrom.js","../../../node_modules/date-fns/_lib/normalizeDates.js","../../../node_modules/date-fns/toDate.js","../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../../../node_modules/date-fns/startOfDay.js","../../../node_modules/date-fns/differenceInCalendarDays.js","../../../node_modules/date-fns/differenceInCalendarMonths.js","../../../node_modules/date-fns/getQuarter.js","../../../node_modules/date-fns/differenceInCalendarQuarters.js","../../../node_modules/date-fns/_lib/defaultOptions.js","../../../node_modules/date-fns/startOfWeek.js","../../../node_modules/date-fns/differenceInCalendarWeeks.js","../../../node_modules/date-fns/differenceInCalendarYears.js","../../../node_modules/date-fns/_lib/getRoundingMethod.js","../../../node_modules/date-fns/differenceInHours.js","../../../node_modules/date-fns/differenceInMilliseconds.js","../../../node_modules/date-fns/differenceInMinutes.js","../../../node_modules/date-fns/differenceInSeconds.js","../../../node_modules/date-fns/intlFormatDistance.js","../../../src/lib/formatDate.ts"],"sourcesContent":["/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n\n return yearsDiff * 12 + monthsDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getQuarter} function options.\n */\n\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The quarter\n *\n * @example\n * // Which quarter is 2 July 2014?\n * const result = getQuarter(new Date(2014, 6, 2));\n * //=> 3\n */\nexport function getQuarter(date, options) {\n const _date = toDate(date, options?.in);\n const quarter = Math.trunc(_date.getMonth() / 3) + 1;\n return quarter;\n}\n\n// Fallback for modularized imports:\nexport default getQuarter;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { getQuarter } from \"./getQuarter.js\";\n\n/**\n * The {@link differenceInCalendarQuarters} function options.\n */\n\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar quarters\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInCalendarQuarters(\n * new Date(2014, 6, 2),\n * new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport function differenceInCalendarQuarters(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n const quartersDiff = getQuarter(laterDate_) - getQuarter(earlierDate_);\n\n return yearsDiff * 4 + quartersDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarQuarters;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link differenceInCalendarWeeks} function options.\n */\n\n/**\n * @name differenceInCalendarWeeks\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of calendar weeks\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInCalendarWeeks(\n * new Date(2014, 6, 20),\n * new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInCalendarWeeks(\n * new Date(2014, 6, 20),\n * new Date(2014, 6, 5),\n * { weekStartsOn: 1 }\n * )\n * //=> 2\n */\nexport function differenceInCalendarWeeks(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfWeek = startOfWeek(laterDate_, options);\n const earlierStartOfWeek = startOfWeek(earlierDate_, options);\n\n const laterTimestamp =\n +laterStartOfWeek - getTimezoneOffsetInMilliseconds(laterStartOfWeek);\n const earlierTimestamp =\n +earlierStartOfWeek - getTimezoneOffsetInMilliseconds(earlierStartOfWeek);\n\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInWeek);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarWeeks;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarYears} function options.\n */\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n\n * @returns The number of calendar years\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * );\n * //=> 2\n */\nexport function differenceInCalendarYears(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return laterDate_.getFullYear() - earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarYears;\n","export function getRoundingMethod(method) {\n return (number) => {\n const round = method ? Math[method] : Math.trunc;\n const result = round(number);\n // Prevent negative zero\n return result === 0 ? 0 : result;\n };\n}\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link differenceInHours} function options.\n */\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of hours\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport function differenceInHours(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n const diff = (+laterDate_ - +earlierDate_) / millisecondsInHour;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInHours;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(laterDate, earlierDate) {\n return +toDate(laterDate) - +toDate(earlierDate);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { millisecondsInMinute } from \"./constants.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n\n/**\n * The {@link differenceInMinutes} function options.\n */\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of minutes\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\nexport function differenceInMinutes(dateLeft, dateRight, options) {\n const diff =\n differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMinutes;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n\n/**\n * The {@link differenceInSeconds} function options.\n */\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of seconds\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport function differenceInSeconds(laterDate, earlierDate, options) {\n const diff = differenceInMilliseconds(laterDate, earlierDate) / 1000;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInSeconds;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport {\n secondsInDay,\n secondsInHour,\n secondsInMinute,\n secondsInMonth,\n secondsInQuarter,\n secondsInWeek,\n secondsInYear,\n} from \"./constants.js\";\nimport { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { differenceInCalendarMonths } from \"./differenceInCalendarMonths.js\";\nimport { differenceInCalendarQuarters } from \"./differenceInCalendarQuarters.js\";\nimport { differenceInCalendarWeeks } from \"./differenceInCalendarWeeks.js\";\nimport { differenceInCalendarYears } from \"./differenceInCalendarYears.js\";\nimport { differenceInHours } from \"./differenceInHours.js\";\nimport { differenceInMinutes } from \"./differenceInMinutes.js\";\nimport { differenceInSeconds } from \"./differenceInSeconds.js\";\n\n/**\n * The {@link intlFormatDistance} function options.\n */\n\n/**\n * The unit used to format the distance in {@link intlFormatDistance}.\n */\n\n/**\n * @name intlFormatDistance\n * @category Common Helpers\n * @summary Formats distance between two dates in a human-readable format\n * @description\n * The function calculates the difference between two dates and formats it as a human-readable string.\n *\n * The function will pick the most appropriate unit depending on the distance between dates. For example, if the distance is a few hours, it might return `x hours`. If the distance is a few months, it might return `x months`.\n *\n * You can also specify a unit to force using it regardless of the distance to get a result like `123456 hours`.\n *\n * See the table below for the unit picking logic:\n *\n * | Distance between dates | Result (past) | Result (future) |\n * | ---------------------- | -------------- | --------------- |\n * | 0 seconds | now | now |\n * | 1-59 seconds | X seconds ago | in X seconds |\n * | 1-59 minutes | X minutes ago | in X minutes |\n * | 1-23 hours | X hours ago | in X hours |\n * | 1 day | yesterday | tomorrow |\n * | 2-6 days | X days ago | in X days |\n * | 7 days | last week | next week |\n * | 8 days-1 month | X weeks ago | in X weeks |\n * | 1 month | last month | next month |\n * | 2-3 months | X months ago | in X months |\n * | 1 quarter | last quarter | next quarter |\n * | 2-3 quarters | X quarters ago | in X quarters |\n * | 1 year | last year | next year |\n * | 2+ years | X years ago | in X years |\n *\n * @param laterDate - The date\n * @param earlierDate - The date to compare with.\n * @param options - An object with options.\n * See MDN for details [Locale identification and negotiation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation)\n * The narrow one could be similar to the short one for some locales.\n *\n * @returns The distance in words according to language-sensitive relative time formatting.\n *\n * @throws `date` must not be Invalid Date\n * @throws `baseDate` must not be Invalid Date\n * @throws `options.unit` must not be invalid Unit\n * @throws `options.locale` must not be invalid locale\n * @throws `options.localeMatcher` must not be invalid localeMatcher\n * @throws `options.numeric` must not be invalid numeric\n * @throws `options.style` must not be invalid style\n *\n * @example\n * // What is the distance between the dates when the fist date is after the second?\n * intlFormatDistance(\n * new Date(1986, 3, 4, 11, 30, 0),\n * new Date(1986, 3, 4, 10, 30, 0)\n * )\n * //=> 'in 1 hour'\n *\n * // What is the distance between the dates when the fist date is before the second?\n * intlFormatDistance(\n * new Date(1986, 3, 4, 10, 30, 0),\n * new Date(1986, 3, 4, 11, 30, 0)\n * )\n * //=> '1 hour ago'\n *\n * @example\n * // Use the unit option to force the function to output the result in quarters. Without setting it, the example would return \"next year\"\n * intlFormatDistance(\n * new Date(1987, 6, 4, 10, 30, 0),\n * new Date(1986, 3, 4, 10, 30, 0),\n * { unit: 'quarter' }\n * )\n * //=> 'in 5 quarters'\n *\n * @example\n * // Use the locale option to get the result in Spanish. Without setting it, the example would return \"in 1 hour\".\n * intlFormatDistance(\n * new Date(1986, 3, 4, 11, 30, 0),\n * new Date(1986, 3, 4, 10, 30, 0),\n * { locale: 'es' }\n * )\n * //=> 'dentro de 1 hora'\n *\n * @example\n * // Use the numeric option to force the function to use numeric values. Without setting it, the example would return \"tomorrow\".\n * intlFormatDistance(\n * new Date(1986, 3, 5, 11, 30, 0),\n * new Date(1986, 3, 4, 11, 30, 0),\n * { numeric: 'always' }\n * )\n * //=> 'in 1 day'\n *\n * @example\n * // Use the style option to force the function to use short values. Without setting it, the example would return \"in 2 years\".\n * intlFormatDistance(\n * new Date(1988, 3, 4, 11, 30, 0),\n * new Date(1986, 3, 4, 11, 30, 0),\n * { style: 'short' }\n * )\n * //=> 'in 2 yr'\n */\nexport function intlFormatDistance(laterDate, earlierDate, options) {\n let value = 0;\n let unit;\n\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n if (!options?.unit) {\n // Get the unit based on diffInSeconds calculations if no unit is specified\n const diffInSeconds = differenceInSeconds(laterDate_, earlierDate_); // The smallest unit\n\n if (Math.abs(diffInSeconds) < secondsInMinute) {\n value = differenceInSeconds(laterDate_, earlierDate_);\n unit = \"second\";\n } else if (Math.abs(diffInSeconds) < secondsInHour) {\n value = differenceInMinutes(laterDate_, earlierDate_);\n unit = \"minute\";\n } else if (\n Math.abs(diffInSeconds) < secondsInDay &&\n Math.abs(differenceInCalendarDays(laterDate_, earlierDate_)) < 1\n ) {\n value = differenceInHours(laterDate_, earlierDate_);\n unit = \"hour\";\n } else if (\n Math.abs(diffInSeconds) < secondsInWeek &&\n (value = differenceInCalendarDays(laterDate_, earlierDate_)) &&\n Math.abs(value) < 7\n ) {\n unit = \"day\";\n } else if (Math.abs(diffInSeconds) < secondsInMonth) {\n value = differenceInCalendarWeeks(laterDate_, earlierDate_);\n unit = \"week\";\n } else if (Math.abs(diffInSeconds) < secondsInQuarter) {\n value = differenceInCalendarMonths(laterDate_, earlierDate_);\n unit = \"month\";\n } else if (Math.abs(diffInSeconds) < secondsInYear) {\n if (differenceInCalendarQuarters(laterDate_, earlierDate_) < 4) {\n // To filter out cases that are less than a year but match 4 quarters\n value = differenceInCalendarQuarters(laterDate_, earlierDate_);\n unit = \"quarter\";\n } else {\n value = differenceInCalendarYears(laterDate_, earlierDate_);\n unit = \"year\";\n }\n } else {\n value = differenceInCalendarYears(laterDate_, earlierDate_);\n unit = \"year\";\n }\n } else {\n // Get the value if unit is specified\n unit = options?.unit;\n if (unit === \"second\") {\n value = differenceInSeconds(laterDate_, earlierDate_);\n } else if (unit === \"minute\") {\n value = differenceInMinutes(laterDate_, earlierDate_);\n } else if (unit === \"hour\") {\n value = differenceInHours(laterDate_, earlierDate_);\n } else if (unit === \"day\") {\n value = differenceInCalendarDays(laterDate_, earlierDate_);\n } else if (unit === \"week\") {\n value = differenceInCalendarWeeks(laterDate_, earlierDate_);\n } else if (unit === \"month\") {\n value = differenceInCalendarMonths(laterDate_, earlierDate_);\n } else if (unit === \"quarter\") {\n value = differenceInCalendarQuarters(laterDate_, earlierDate_);\n } else if (unit === \"year\") {\n value = differenceInCalendarYears(laterDate_, earlierDate_);\n }\n }\n\n const rtf = new Intl.RelativeTimeFormat(options?.locale, {\n numeric: \"auto\",\n ...options,\n });\n\n return rtf.format(value, unit);\n}\n\n// Fallback for modularized imports:\nexport default intlFormatDistance;\n","import { intlFormatDistance } from 'date-fns/intlFormatDistance';\n\nfunction getLocale(locale?: string) {\n const defaultLocale = 'en-US';\n if (!locale) {\n if (typeof navigator !== 'undefined') {\n locale = navigator.language;\n } else {\n locale = defaultLocale;\n }\n }\n\n return locale;\n}\nexport function formatDistance(timestamp: Date, localeParam?: string) {\n const locale = getLocale(localeParam);\n\n return intlFormatDistance(timestamp, new Date(), { locale, style: 'short' });\n}\n\nexport function formatDate(date: Date, localeParam?: string) {\n const locale = getLocale(localeParam);\n\n return date.toLocaleDateString(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n}\n\nexport function formatChartTick(value: Date | string, locale = 'en-US'): string {\n if (typeof value === 'string') return value;\n\n return value.toLocaleDateString(locale, { month: 'short', day: 'numeric' });\n}\n\nexport function formatChartLabel(value: Date | string, locale = 'en-US'): string {\n if (typeof value === 'string') return value;\n\n return value.toLocaleDateString(locale, { month: 'long', day: 'numeric', year: 'numeric' });\n}\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,GAAG,QAAQ;;AAkClC;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG,SAAS;;AAE3C;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,GAAG,QAAQ;;AAEzC;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,GAAG,KAAK;;AAEzC;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG,OAAO;;AA0DzC;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,IAAI;;AAEjC;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,GAAG,EAAE;;AAEjC;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,GAAG,aAAa,GAAG,EAAE;;AAE9C;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,YAAY,GAAG,UAAU;;AAEtD;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,aAAa,GAAG,EAAE;;AAEhD;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,cAAc,GAAG,CAAC;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;;ACrNlE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE;AAC3C,EAAE,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC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YAAY,IAAI,kBAAkB;AACjE,EAAE,OAAO,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC;AACzD;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,wBAAwB,CAAC,SAAS,EAAE,WAAW,EAAE;AACjE,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD;;ACtBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE;AAClE,EAAE,MAAM,IAAI;AACZ,IAAI,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,oBAAoB;AACxE,EAAE,OAAO,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC;AACzD;;ACvCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE;AACrE,EAAE,MAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;AACtE,EAAE,OAAO,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC;AACzD;;ACdA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
@@ -153,32 +153,25 @@ async function fetchAnswerStream({
153
153
  function createConversationId() {
154
154
  return createId();
155
155
  }
156
- async function requestPresignedUrl({
156
+ async function uploadFileToApi({
157
157
  endpoint,
158
158
  conversationId,
159
- filename,
160
- contentType,
161
- size,
159
+ file,
162
160
  headers
163
161
  }) {
164
- const response = await makeRequest(endpoint, {
162
+ const formData = new FormData();
163
+ formData.append("file", file);
164
+ formData.append("conversationId", conversationId);
165
+ const response = await fetch(endpoint, {
165
166
  method: "POST",
166
167
  headers,
167
- body: { conversationId, filename, contentType, size }
168
- });
169
- return { uploadUrl: response.data.uploadUrl, publicUrl: response.data.publicUrl };
170
- }
171
- async function uploadFileToS3(presignedUrl, file) {
172
- const response = await fetch(presignedUrl, {
173
- method: "PUT",
174
- headers: {
175
- "Content-Type": file.type
176
- },
177
- body: file
168
+ body: formData
178
169
  });
179
170
  if (!response.ok) {
180
171
  throw new Error(`Upload failed with status ${response.status}`);
181
172
  }
173
+ const json = await response.json();
174
+ return { publicUrl: json.data.publicUrl };
182
175
  }
183
176
  async function sendFeedback({
184
177
  endpoint,
@@ -332,5 +325,5 @@ function useAutocomplete({
332
325
  return { suggestions, isLoading, error };
333
326
  }
334
327
 
335
- export { uploadFileToS3 as a, useAutocomplete as b, createConversationId as c, sendFeedback as d, searchApi as e, fetchAnswerStream as f, fetchFollowUpQuestions as g, loadConversation as l, requestPresignedUrl as r, sendFeedbackReason as s, useDebounce as u };
336
- //# sourceMappingURL=hooks.DI5ftshU.js.map
328
+ export { uploadFileToApi as a, useAutocomplete as b, createConversationId as c, sendFeedback as d, searchApi as e, fetchAnswerStream as f, fetchFollowUpQuestions as g, loadConversation as l, sendFeedbackReason as s, useDebounce as u };
329
+ //# sourceMappingURL=hooks.Dii4V-O3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.Dii4V-O3.js","sources":["../../../src/lib/fetchClient.ts","../../../src/lib/api.ts","../../../src/lib/hooks.ts"],"sourcesContent":["interface RetryOptions {\n maxRetries?: number;\n baseDelay?: number;\n shouldRetry?: (error: Error, attempt: number) => boolean | Promise<boolean>;\n}\n\ninterface FallbackConfig {\n emptyResponse?: string;\n errorResponse?: string;\n}\n\ninterface RequestConfig<T> extends Omit<RequestInit, 'body'> {\n retry?: RetryOptions;\n body?: T;\n isStream?: boolean;\n fallback?: FallbackConfig;\n}\n\ninterface APIError extends Error {\n status?: number;\n data?: unknown;\n}\n\nconst defaultRetryOptions: Required<RetryOptions> = {\n maxRetries: 3,\n baseDelay: 1000,\n shouldRetry: (error: Error) => {\n // By default, retry on network errors and 5xx server errors\n if (error instanceof TypeError) {\n return true; // Network errors\n }\n\n const apiError = error as APIError;\n\n return apiError.status ? apiError.status >= 500 : false;\n },\n};\n\nconst defaultFallbackConfig: Required<FallbackConfig> = {\n emptyResponse: \"I apologize, but I couldn't generate an answer at this time. Please try again.\",\n errorResponse: 'I encountered an error while processing your request. Please try again.',\n};\n\nlet globalRetryOptions: Required<RetryOptions> = { ...defaultRetryOptions };\nlet globalFallbackConfig: Required<FallbackConfig> = { ...defaultFallbackConfig };\n\nexport function configureRetry(options: RetryOptions): void {\n globalRetryOptions = {\n ...defaultRetryOptions,\n ...options,\n };\n}\n\nexport function configureFallback(config: FallbackConfig): void {\n globalFallbackConfig = {\n ...defaultFallbackConfig,\n ...config,\n };\n}\n\nasync function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function makeRequest<TResponse, TBody = unknown>(url: string | URL, config: RequestConfig<TBody> = {}): Promise<TResponse> {\n const { retry = {}, headers = {}, body, isStream = false, fallback = {}, ...fetchConfig } = config;\n const retryOptions = {\n ...globalRetryOptions,\n ...retry,\n };\n const fallbackOptions = {\n ...globalFallbackConfig,\n ...fallback,\n };\n\n let attempt = 1;\n\n while (true) {\n try {\n const response = await fetch(url, {\n ...fetchConfig,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (response.ok) {\n // For streaming responses, return the response object directly\n if (isStream) {\n if (!response.ok) {\n throw new Error('Failed to fetch answer');\n }\n\n return response as unknown as TResponse;\n }\n\n const data = await response.json();\n // Check for empty response in JSON\n if (!data || (typeof data === 'object' && Object.keys(data).length === 0)) {\n const emptyError = new Error(fallbackOptions.emptyResponse);\n emptyError.name = 'EmptyResponseError';\n throw emptyError;\n }\n\n return data as TResponse;\n }\n\n const error = new Error(fallbackOptions.errorResponse) as APIError;\n error.status = response.status;\n error.data = await response.json().catch(() => undefined);\n throw error;\n } catch (error) {\n const shouldAttemptRetry = await Promise.resolve(retryOptions.shouldRetry(error as Error, attempt));\n\n if (attempt >= retryOptions.maxRetries || !shouldAttemptRetry) {\n if (error instanceof Error && error.name === 'EmptyResponseError') {\n return { message: error.message } as TResponse;\n }\n throw error;\n }\n\n console.warn(`Request failed, attempt ${attempt} of ${retryOptions.maxRetries}. Retrying...`);\n\n // Exponential backoff with jitter to prevent thundering herd\n const jitter = Math.random() * 0.3 + 0.85; // Random between 0.85-1.15\n await delay(retryOptions.baseDelay * Math.pow(2, attempt - 1) * jitter);\n attempt++;\n }\n }\n}\n","import { createId } from '@paralleldrive/cuid2';\n\nimport { makeRequest } from './fetchClient';\n\nimport {\n SearchResponse,\n FeedbackResponse,\n APIFeedbackResponse,\n SearchResult,\n ActionInputs,\n ClientExecutionResult,\n SearchQueryAttributes,\n} from '@/components/chat-search/types';\n\n// Retry configurations for different endpoints\nconst searchRetryConfig = {\n maxRetries: 3,\n baseDelay: 300, // Start with 300ms delay\n shouldRetry: (error: Error) => {\n if (error instanceof TypeError) {\n return true; // Network errors\n }\n const apiError = error as { status?: number };\n // Retry on server errors (5xx) and rate limits (429)\n\n return apiError.status ? apiError.status >= 500 || apiError.status === 429 : false;\n },\n};\n\nconst answerRetryConfig = {\n maxRetries: 3,\n baseDelay: 500, // Start with 500ms delay for streaming responses\n shouldRetry: (error: Error) => {\n if (error instanceof TypeError) {\n return true; // Network errors\n }\n const apiError = error as { status?: number };\n // Only retry on server errors, not on client errors\n\n return apiError.status ? apiError.status >= 500 : false;\n },\n};\n\ninterface APISearchResponse {\n data: Array<{\n id: string;\n title: string;\n url: string;\n }>;\n searchQuery: {\n id: string;\n };\n isAgenticResponse?: boolean;\n}\n\nexport async function searchApi({\n endpoint,\n query,\n collectionId,\n headers,\n conversationId,\n attributes,\n secretAttributes,\n allowedRegions,\n source,\n}: {\n endpoint: string;\n query: string;\n collectionId?: string;\n headers?: Record<string, string>;\n conversationId?: string;\n attributes?: SearchQueryAttributes;\n secretAttributes?: string;\n allowedRegions?: string[];\n source?: string;\n}): Promise<SearchResponse> {\n const payload = await makeRequest<\n APISearchResponse,\n {\n query: string;\n limit: number;\n collectionId?: string;\n conversationId?: string;\n source?: string;\n }\n >(endpoint, {\n method: 'POST',\n headers,\n retry: searchRetryConfig,\n body: {\n query,\n limit: 5,\n ...(collectionId && collectionId !== 'all' && { collectionId }),\n ...(conversationId && { conversationId }),\n ...(attributes && { attributes }),\n ...(secretAttributes && { secretAttributes }),\n ...(allowedRegions && { allowedRegions }),\n ...(source && { source }),\n },\n });\n\n return {\n results: payload?.data,\n searchQueryId: payload?.searchQuery?.id,\n isAgenticResponse: payload?.isAgenticResponse,\n };\n}\n\nexport async function fetchAnswer({\n endpoint,\n searchQueryId,\n headers,\n conversationId,\n}: {\n endpoint: string;\n searchQueryId: string;\n headers?: Record<string, string>;\n conversationId?: string;\n}): Promise<Response> {\n return makeRequest<\n Response,\n {\n searchQueryId: string;\n conversationId?: string;\n }\n >(endpoint, {\n method: 'POST',\n headers,\n retry: answerRetryConfig,\n isStream: true,\n fallback: {\n emptyResponse: \"I apologize, but I couldn't generate an answer for your query. Please try rephrasing your question.\",\n errorResponse: 'I encountered an issue while generating the answer. Please try again in a moment.',\n },\n body: {\n searchQueryId,\n ...(conversationId && { conversationId }),\n },\n });\n}\n\nexport async function fetchAnswerStream({\n endpoint,\n headers,\n body,\n}: {\n endpoint: string;\n headers?: Record<string, string>;\n body:\n | {\n type: 'generate-for-query';\n conversationId?: string;\n searchQueryId: string;\n profileId?: string;\n context?: { type: 'text'; text: string }[];\n attachments?: { type: string; url: string; filename?: string }[];\n }\n | {\n type: 'invoke-action';\n conversationId?: string;\n searchQueryId: string;\n searchIntentId: string;\n actionId: string;\n parameters: ActionInputs;\n profileId?: string;\n }\n | {\n type: 'client-execution-result';\n conversationId?: string;\n searchQueryId: string;\n searchIntentId: string;\n actionId: string;\n results: ClientExecutionResult;\n profileId?: string;\n };\n}): Promise<Response> {\n return makeRequest<Response, typeof body>(endpoint, {\n method: 'POST',\n headers,\n retry: answerRetryConfig,\n isStream: true,\n fallback: {\n emptyResponse: \"I apologize, but I couldn't generate an answer for your query. Please try rephrasing your question.\",\n errorResponse: 'I encountered an issue while generating the answer. Please try again in a moment.',\n },\n body,\n });\n}\n\n// Helper function to generate a unique conversation ID\nexport function createConversationId(): string {\n return createId();\n}\n\nexport async function uploadFileToApi({\n endpoint,\n conversationId,\n file,\n headers,\n}: {\n endpoint: string;\n conversationId: string;\n file: File;\n headers?: Record<string, string>;\n}): Promise<{ publicUrl: string }> {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('conversationId', conversationId);\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers,\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed with status ${response.status}`);\n }\n\n const json = (await response.json()) as { data: { publicUrl: string } };\n\n return { publicUrl: json.data.publicUrl };\n}\n\nexport async function sendFeedback({\n endpoint,\n searchQueryId,\n response,\n headers,\n conversationId,\n}: {\n endpoint: string;\n searchQueryId: string;\n response: FeedbackResponse;\n headers?: Record<string, string>;\n conversationId?: string;\n}): Promise<void> {\n await makeRequest<\n void,\n {\n searchQueryId: string;\n response: FeedbackResponse;\n conversationId?: string;\n }\n >(endpoint, {\n method: 'POST',\n headers,\n body: {\n searchQueryId,\n response,\n ...(conversationId && { conversationId }),\n },\n });\n}\n\nexport async function sendFeedbackReason({\n endpoint,\n searchQueryId,\n reason,\n headers,\n}: {\n endpoint: string;\n searchQueryId: string;\n reason: string;\n headers?: Record<string, string>;\n conversationId?: string;\n}): Promise<void> {\n await makeRequest<\n void,\n {\n searchQueryId: string;\n reason: string;\n conversationId?: string;\n }\n >(endpoint, {\n method: 'POST',\n headers,\n body: {\n searchQueryId,\n reason,\n },\n });\n}\n\nexport interface ConversationResponse {\n data: Array<{\n question: string;\n answer: string;\n searchQueryId: string;\n searchResults?: SearchResult[];\n searchIntentId?: string;\n feedback?: APIFeedbackResponse;\n }>;\n}\n\nexport async function loadConversation({\n endpoint,\n conversationId,\n headers,\n signal,\n}: {\n endpoint: string;\n conversationId: string;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}): Promise<{ data: ConversationResponse['data'] }> {\n const payload = await makeRequest<\n ConversationResponse,\n {\n conversationId: string;\n }\n >(endpoint, {\n method: 'POST',\n headers,\n body: { conversationId },\n signal,\n });\n\n return { data: payload.data };\n}\n\ninterface FollowUpQuestionsResponse {\n questions: string[];\n}\n\nexport async function fetchFollowUpQuestions({\n endpoint,\n searchQueryId,\n headers,\n conversationId,\n}: {\n endpoint: string;\n searchQueryId: string;\n headers?: Record<string, string>;\n conversationId?: string;\n}): Promise<string[]> {\n const data = await makeRequest<\n FollowUpQuestionsResponse,\n {\n searchQueryId: string;\n conversationId?: string;\n }\n >(endpoint, {\n method: 'POST',\n headers,\n body: {\n searchQueryId,\n ...(conversationId && { conversationId }),\n },\n });\n\n return data.questions;\n}\n\ninterface AutocompleteResponse {\n response: {\n results: Array<{\n id: string;\n question: string;\n }>;\n };\n}\n\nexport async function fetchAutocomplete({\n endpoint,\n query,\n collectionId,\n headers,\n conversationId,\n allowedRegions,\n}: {\n endpoint: string;\n query: string;\n collectionId?: string;\n headers?: Record<string, string>;\n conversationId?: string;\n allowedRegions?: string[];\n}): Promise<AutocompleteResponse> {\n const data = await makeRequest<\n AutocompleteResponse,\n {\n query: string;\n collectionId?: string;\n conversationId?: string;\n allowedRegions?: string[];\n }\n >(endpoint, {\n method: 'POST',\n headers,\n retry: searchRetryConfig,\n body: {\n query,\n ...(collectionId && collectionId !== 'all' && { collectionId }),\n ...(conversationId && { conversationId }),\n ...(allowedRegions && { allowedRegions }),\n },\n });\n\n return data;\n}\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { fetchAutocomplete } from './api';\n\nimport type { Suggestion } from '@/components/chat-search/types';\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nexport function useAutocomplete({\n query,\n endpoint,\n allowedRegions,\n collectionId,\n headers,\n conversationId,\n delay = 300,\n}: {\n query: string;\n endpoint: string;\n allowedRegions?: string[];\n collectionId?: string;\n headers?: Record<string, string>;\n conversationId?: string;\n delay?: number;\n}) {\n const [suggestions, setSuggestions] = useState<Suggestion[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string>();\n\n const debouncedQuery = useDebounce(query, delay);\n\n const fetchSuggestions = useCallback(async () => {\n if (!debouncedQuery.trim()) {\n setSuggestions([]);\n\n return;\n }\n\n setIsLoading(true);\n setError(undefined);\n\n try {\n const payload = await fetchAutocomplete({\n endpoint,\n query: debouncedQuery,\n collectionId,\n headers,\n conversationId,\n allowedRegions,\n });\n if (payload?.response?.results) {\n // move suggestions that don't prefix with the debounced question to the bottom\n const lowerCaseQuery = debouncedQuery.toLowerCase();\n const sortedSuggestions = payload.response.results.sort((a: { question: string }, b: { question: string }) => {\n const aStartsWithQuery = a.question.toLowerCase().startsWith(lowerCaseQuery);\n const bStartsWithQuery = b.question.toLowerCase().startsWith(lowerCaseQuery);\n\n if (aStartsWithQuery && !bStartsWithQuery) return -1;\n if (!aStartsWithQuery && bStartsWithQuery) return 1;\n\n return 0; // preserve original order for items in same category\n });\n\n setSuggestions(sortedSuggestions);\n } else {\n setSuggestions([]);\n }\n } catch (err) {\n console.error('Error fetching autocomplete suggestions:', err);\n setError(err instanceof Error ? err.message : 'Failed to fetch suggestions');\n setSuggestions([]);\n } finally {\n setIsLoading(false);\n }\n }, [debouncedQuery, endpoint, collectionId, headers, conversationId, allowedRegions]);\n\n useEffect(() => {\n void fetchSuggestions();\n }, [fetchSuggestions]);\n\n return { suggestions, isLoading, error };\n}\n"],"names":[],"mappings":";;;AAuBA,MAAM,mBAAA,GAA8C;AAAA,EAClD,UAAA,EAAY,CAAA;AAAA,EACZ,SAAA,EAAW,GAAA;AAAA,EACX,WAAA,EAAa,CAAC,KAAA,KAAiB;AAE7B,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,KAAA;AAEjB,IAAA,OAAO,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,MAAA,IAAU,GAAA,GAAM,KAAA;AAAA,EACpD;AACF,CAAA;AAEA,MAAM,qBAAA,GAAkD;AAAA,EACtD,aAAA,EAAe,gFAAA;AAAA,EACf,aAAA,EAAe;AACjB,CAAA;AAEA,IAAI,kBAAA,GAA6C,EAAE,GAAG,mBAAA,EAAoB;AAC1E,IAAI,oBAAA,GAAiD,EAAE,GAAG,qBAAA,EAAsB;AAgBhF,eAAe,MAAM,EAAA,EAA2B;AAC9C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAEA,eAAsB,WAAA,CAAwC,GAAA,EAAmB,MAAA,GAA+B,EAAC,EAAuB;AACtI,EAAA,MAAM,EAAE,KAAA,GAAQ,EAAC,EAAG,UAAU,EAAC,EAAG,IAAA,EAAM,QAAA,GAAW,OAAO,QAAA,GAAW,EAAC,EAAG,GAAG,aAAY,GAAI,MAAA;AAC5F,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAG,kBAAA;AAAA,IACH,GAAG;AAAA,GACL;AACA,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,GAAG,oBAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAChC,GAAG,WAAA;AAAA,QACH,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,GAAG;AAAA,SACL;AAAA,QACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,KAAA;AAAA,OACrC,CAAA;AAED,MAAA,IAAI,SAAS,EAAA,EAAI;AAEf,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,YAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,UAC1C;AAEA,UAAA,OAAO,QAAA;AAAA,QACT;AAEA,QAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,QAAA,IAAI,CAAC,IAAA,IAAS,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,EAAI;AACzE,UAAA,MAAM,UAAA,GAAa,IAAI,KAAA,CAAM,eAAA,CAAgB,aAAa,CAAA;AAC1D,UAAA,UAAA,CAAW,IAAA,GAAO,oBAAA;AAClB,UAAA,MAAM,UAAA;AAAA,QACR;AAEA,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,eAAA,CAAgB,aAAa,CAAA;AACrD,MAAA,KAAA,CAAM,SAAS,QAAA,CAAS,MAAA;AACxB,MAAA,KAAA,CAAM,OAAO,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA;AACxD,MAAA,MAAM,KAAA;AAAA,IACR,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,kBAAA,GAAqB,MAAM,OAAA,CAAQ,OAAA,CAAQ,aAAa,WAAA,CAAY,KAAA,EAAgB,OAAO,CAAC,CAAA;AAElG,MAAA,IAAI,OAAA,IAAW,YAAA,CAAa,UAAA,IAAc,CAAC,kBAAA,EAAoB;AAC7D,QAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,oBAAA,EAAsB;AACjE,UAAA,OAAO,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA,EAAQ;AAAA,QAClC;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAA,wBAAA,EAA2B,OAAO,CAAA,IAAA,EAAO,YAAA,CAAa,UAAU,CAAA,aAAA,CAAe,CAAA;AAG5F,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA,GAAM,IAAA;AACrC,MAAA,MAAM,KAAA,CAAM,aAAa,SAAA,GAAY,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,GAAU,CAAC,CAAA,GAAI,MAAM,CAAA;AACtE,MAAA,OAAA,EAAA;AAAA,IACF;AAAA,EACF;AACF;;ACpHA,MAAM,iBAAA,GAAoB;AAAA,EACxB,UAAA,EAAY,CAAA;AAAA,EACZ,SAAA,EAAW,GAAA;AAAA;AAAA,EACX,WAAA,EAAa,CAAC,KAAA,KAAiB;AAC7B,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,KAAA;AAGjB,IAAA,OAAO,SAAS,MAAA,GAAS,QAAA,CAAS,UAAU,GAAA,IAAO,QAAA,CAAS,WAAW,GAAA,GAAM,KAAA;AAAA,EAC/E;AACF,CAAA;AAEA,MAAM,iBAAA,GAAoB;AAAA,EACxB,UAAA,EAAY,CAAA;AAAA,EACZ,SAAA,EAAW,GAAA;AAAA;AAAA,EACX,WAAA,EAAa,CAAC,KAAA,KAAiB;AAC7B,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,KAAA;AAGjB,IAAA,OAAO,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,MAAA,IAAU,GAAA,GAAM,KAAA;AAAA,EACpD;AACF,CAAA;AAcA,eAAsB,SAAA,CAAU;AAAA,EAC9B,QAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAU4B;AAC1B,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CASpB,QAAA,EAAU;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,KAAA,EAAO,iBAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,KAAA;AAAA,MACA,KAAA,EAAO,CAAA;AAAA,MACP,GAAI,YAAA,IAAgB,YAAA,KAAiB,KAAA,IAAS,EAAE,YAAA,EAAa;AAAA,MAC7D,GAAI,cAAA,IAAkB,EAAE,cAAA,EAAe;AAAA,MACvC,GAAI,UAAA,IAAc,EAAE,UAAA,EAAW;AAAA,MAC/B,GAAI,gBAAA,IAAoB,EAAE,gBAAA,EAAiB;AAAA,MAC3C,GAAI,cAAA,IAAkB,EAAE,cAAA,EAAe;AAAA,MACvC,GAAI,MAAA,IAAU,EAAE,MAAA;AAAO;AACzB,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,SAAS,OAAA,EAAS,IAAA;AAAA,IAClB,aAAA,EAAe,SAAS,WAAA,EAAa,EAAA;AAAA,IACrC,mBAAmB,OAAA,EAAS;AAAA,GAC9B;AACF;AAmCA,eAAsB,iBAAA,CAAkB;AAAA,EACtC,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EA8BsB;AACpB,EAAA,OAAO,YAAmC,QAAA,EAAU;AAAA,IAClD,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,KAAA,EAAO,iBAAA;AAAA,IACP,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,MACR,aAAA,EAAe,qGAAA;AAAA,MACf,aAAA,EAAe;AAAA,KACjB;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAGO,SAAS,oBAAA,GAA+B;AAC7C,EAAA,OAAO,QAAA,EAAS;AAClB;AAEA,eAAsB,eAAA,CAAgB;AAAA,EACpC,QAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAKmC;AACjC,EAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,EAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,IAAI,CAAA;AAC5B,EAAA,QAAA,CAAS,MAAA,CAAO,kBAAkB,cAAc,CAAA;AAEhD,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,EAAU;AAAA,IACrC,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACP,CAAA;AAED,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,EAChE;AAEA,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAElC,EAAA,OAAO,EAAE,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,SAAA,EAAU;AAC1C;AAEA,eAAsB,YAAA,CAAa;AAAA,EACjC,QAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAMkB;AAChB,EAAA,MAAM,YAOJ,QAAA,EAAU;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,aAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAI,cAAA,IAAkB,EAAE,cAAA;AAAe;AACzC,GACD,CAAA;AACH;AAEA,eAAsB,kBAAA,CAAmB;AAAA,EACvC,QAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAMkB;AAChB,EAAA,MAAM,YAOJ,QAAA,EAAU;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,aAAA;AAAA,MACA;AAAA;AACF,GACD,CAAA;AACH;AAaA,eAAsB,gBAAA,CAAiB;AAAA,EACrC,QAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKoD;AAClD,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAKpB,QAAA,EAAU;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA,EAAM,EAAE,cAAA,EAAe;AAAA,IACvB;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAK;AAC9B;AAMA,eAAsB,sBAAA,CAAuB;AAAA,EAC3C,QAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKsB;AACpB,EAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAMjB,QAAA,EAAU;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,aAAA;AAAA,MACA,GAAI;AAAmC;AACzC,GACD,CAAA;AAED,EAAA,OAAO,IAAA,CAAK,SAAA;AACd;AAWA,eAAsB,iBAAA,CAAkB;AAAA,EACtC,QAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAOkC;AAChC,EAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAQjB,QAAA,EAAU;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,KAAA,EAAO,iBAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,KAAA;AAAA,MACA,GAAI,YAAA,IAAgB,YAAA,KAAiB,KAAA,IAAS,EAAE,YAAA,EAAa;AAAA,MAC7D,GAAI,cAAA,IAAkB,EAAE,cAAA,EAAe;AAAA,MACvC,GAAI,cAAA,IAAkB,EAAE,cAAA;AAAe;AACzC,GACD,CAAA;AAED,EAAA,OAAO,IAAA;AACT;;ACzYO,SAAS,WAAA,CAAe,OAAU,KAAA,EAAkB;AACzD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAY,KAAK,CAAA;AAE7D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,IACzB,GAAG,KAAK,CAAA;AAER,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,cAAA;AACT;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAQG;AACD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAA,CAAuB,EAAE,CAAA;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,EAAiB;AAE3C,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,KAAA,EAAO,KAAK,CAAA;AAE/C,EAAA,MAAM,gBAAA,GAAmB,YAAY,YAAY;AAC/C,IAAA,IAAI,CAAC,cAAA,CAAe,IAAA,EAAK,EAAG;AAC1B,MAAA,cAAA,CAAe,EAAE,CAAA;AAEjB,MAAA;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,MAAS,CAAA;AAElB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB;AAAA,QACtC,QAAA;AAAA,QACA,KAAA,EAAO,cAAA;AAAA,QACP,YAAA;AAAA,QACA,OAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,IAAI,OAAA,EAAS,UAAU,OAAA,EAAS;AAE9B,QAAA,MAAM,cAAA,GAAiB,eAAe,WAAA,EAAY;AAClD,QAAA,MAAM,oBAAoB,OAAA,CAAQ,QAAA,CAAS,QAAQ,IAAA,CAAK,CAAC,GAAyB,CAAA,KAA4B;AAC5G,UAAA,MAAM,mBAAmB,CAAA,CAAE,QAAA,CAAS,WAAA,EAAY,CAAE,WAAW,cAAc,CAAA;AAC3E,UAAA,MAAM,mBAAmB,CAAA,CAAE,QAAA,CAAS,WAAA,EAAY,CAAE,WAAW,cAAc,CAAA;AAE3E,UAAA,IAAI,gBAAA,IAAoB,CAAC,gBAAA,EAAkB,OAAO,CAAA,CAAA;AAClD,UAAA,IAAI,CAAC,gBAAA,IAAoB,gBAAA,EAAkB,OAAO,CAAA;AAElD,UAAA,OAAO,CAAA;AAAA,QACT,CAAC,CAAA;AAED,QAAA,cAAA,CAAe,iBAAiB,CAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,cAAA,CAAe,EAAE,CAAA;AAAA,MACnB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,GAAG,CAAA;AAC7D,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,6BAA6B,CAAA;AAC3E,MAAA,cAAA,CAAe,EAAE,CAAA;AAAA,IACnB,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,QAAA,EAAU,cAAc,OAAA,EAAS,cAAA,EAAgB,cAAc,CAAC,CAAA;AAEpF,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAK,gBAAA,EAAiB;AAAA,EACxB,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,OAAO,EAAE,WAAA,EAAa,SAAA,EAAW,KAAA,EAAM;AACzC;;;;"}
@@ -4,7 +4,7 @@ import { a as HeaderNav, H as HEADER_NAV_HEIGHT } from './header-nav.gQJ2Hh5z.js
4
4
  import { ScrollArea } from '../components/ui/scroll-area.js';
5
5
  import { c as cn } from './utils.Cwtlq8dh.js';
6
6
  import { Item } from '../components/ui/item.js';
7
- import { S as Sidebar } from './sidebar.BejmvpB3.js';
7
+ import { S as Sidebar } from './sidebar.kcxBRKYA.js';
8
8
 
9
9
  const FullLayoutNavStateContext = React__default.createContext(null);
10
10
  const FullLayoutContext = React__default.createContext(null);
@@ -445,4 +445,4 @@ const FullLayout = Object.assign(React__default.memo(FullLayoutRoot, fullLayoutR
445
445
  });
446
446
 
447
447
  export { FullLayout as F, FullLayoutLeftSidebar as a, FullLayoutNavStateContext as b, FullLayoutProvider as c, FullLayoutRightSidebar as d, useRightSidebar as e, useFullLayoutContext as u };
448
- //# sourceMappingURL=layout.Cw9KlzMD.js.map
448
+ //# sourceMappingURL=layout.B4f3-2zh.js.map