@flanksource/clicky-ui 0.3.5 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -0
- package/dist/ai.cjs +15 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +15 -0
- package/dist/ai.js.map +1 -1
- package/dist/components/DateField.d.ts +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DateTimePicker.d.ts +1 -1
- package/dist/components/FormLookupProvider.cjs +12 -0
- package/dist/components/FormLookupProvider.cjs.map +1 -0
- package/dist/components/FormLookupProvider.d.ts +7 -0
- package/dist/components/FormLookupProvider.d.ts.map +1 -0
- package/dist/components/FormLookupProvider.js +12 -0
- package/dist/components/FormLookupProvider.js.map +1 -0
- package/dist/components/JsonSchemaForm.cjs +2 -2
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.js +1 -1
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/ListMenu.cjs +145 -0
- package/dist/components/ListMenu.cjs.map +1 -0
- package/dist/components/ListMenu.d.ts +54 -0
- package/dist/components/ListMenu.d.ts.map +1 -0
- package/dist/components/ListMenu.js +145 -0
- package/dist/components/ListMenu.js.map +1 -0
- package/dist/components/MdxEditorField.cjs +128 -0
- package/dist/components/MdxEditorField.cjs.map +1 -0
- package/dist/components/MdxEditorField.d.ts +4 -0
- package/dist/components/MdxEditorField.d.ts.map +1 -0
- package/dist/components/MdxEditorField.js +106 -0
- package/dist/components/MdxEditorField.js.map +1 -0
- package/dist/components/MdxEditorToolbar.cjs +76 -0
- package/dist/components/MdxEditorToolbar.cjs.map +1 -0
- package/dist/components/MdxEditorToolbar.d.ts +8 -0
- package/dist/components/MdxEditorToolbar.d.ts.map +1 -0
- package/dist/components/MdxEditorToolbar.js +76 -0
- package/dist/components/MdxEditorToolbar.js.map +1 -0
- package/dist/components/button-variants.d.ts +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/form-lookup-context.cjs +1 -8
- package/dist/components/form-lookup-context.cjs.map +1 -1
- package/dist/components/form-lookup-context.d.ts +1 -5
- package/dist/components/form-lookup-context.d.ts.map +1 -1
- package/dist/components/form-lookup-context.js +1 -8
- package/dist/components/form-lookup-context.js.map +1 -1
- package/dist/components/jotai-bindings-core.cjs +197 -0
- package/dist/components/jotai-bindings-core.cjs.map +1 -0
- package/dist/components/jotai-bindings-core.d.ts +45 -0
- package/dist/components/jotai-bindings-core.d.ts.map +1 -0
- package/dist/components/jotai-bindings-core.js +197 -0
- package/dist/components/jotai-bindings-core.js.map +1 -0
- package/dist/components/jotai-bindings.cjs +17 -0
- package/dist/components/jotai-bindings.cjs.map +1 -0
- package/dist/components/jotai-bindings.d.ts +4 -0
- package/dist/components/jotai-bindings.d.ts.map +1 -0
- package/dist/components/jotai-bindings.js +17 -0
- package/dist/components/jotai-bindings.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +37 -0
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +6 -0
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +38 -1
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +3 -1
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +4 -2
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +9 -0
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +9 -0
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +4 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/mdx-editor-field-plugins.cjs +124 -0
- package/dist/components/mdx-editor-field-plugins.cjs.map +1 -0
- package/dist/components/mdx-editor-field-plugins.d.ts +6 -0
- package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -0
- package/dist/components/mdx-editor-field-plugins.js +124 -0
- package/dist/components/mdx-editor-field-plugins.js.map +1 -0
- package/dist/components/mdx-editor-options.d.ts +77 -0
- package/dist/components/mdx-editor-options.d.ts.map +1 -0
- package/dist/components/use-list-menu-selection.cjs +77 -0
- package/dist/components/use-list-menu-selection.cjs.map +1 -0
- package/dist/components/use-list-menu-selection.d.ts +40 -0
- package/dist/components/use-list-menu-selection.d.ts.map +1 -0
- package/dist/components/use-list-menu-selection.js +77 -0
- package/dist/components/use-list-menu-selection.js.map +1 -0
- package/dist/components.cjs +10 -1
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +4 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +10 -1
- package/dist/components.js.map +1 -1
- package/dist/data/MarkdownEditor.model.d.ts +1 -1
- package/dist/data/ProgressBars.cjs +194 -0
- package/dist/data/ProgressBars.cjs.map +1 -0
- package/dist/data/ProgressBars.d.ts +85 -0
- package/dist/data/ProgressBars.d.ts.map +1 -0
- package/dist/data/ProgressBars.js +194 -0
- package/dist/data/ProgressBars.js.map +1 -0
- package/dist/data/ProgressBars.model.cjs +27 -0
- package/dist/data/ProgressBars.model.cjs.map +1 -0
- package/dist/data/ProgressBars.model.d.ts +20 -0
- package/dist/data/ProgressBars.model.d.ts.map +1 -0
- package/dist/data/ProgressBars.model.js +27 -0
- package/dist/data/ProgressBars.model.js.map +1 -0
- package/dist/data/PromptBanner.cjs +199 -0
- package/dist/data/PromptBanner.cjs.map +1 -0
- package/dist/data/PromptBanner.d.ts +17 -0
- package/dist/data/PromptBanner.d.ts.map +1 -0
- package/dist/data/PromptBanner.js +199 -0
- package/dist/data/PromptBanner.js.map +1 -0
- package/dist/data/PromptBanner.model.cjs +132 -0
- package/dist/data/PromptBanner.model.cjs.map +1 -0
- package/dist/data/PromptBanner.model.d.ts +23 -0
- package/dist/data/PromptBanner.model.d.ts.map +1 -0
- package/dist/data/PromptBanner.model.js +132 -0
- package/dist/data/PromptBanner.model.js.map +1 -0
- package/dist/data/PromptDialog.cjs +43 -0
- package/dist/data/PromptDialog.cjs.map +1 -0
- package/dist/data/PromptDialog.d.ts +14 -0
- package/dist/data/PromptDialog.d.ts.map +1 -0
- package/dist/data/PromptDialog.js +43 -0
- package/dist/data/PromptDialog.js.map +1 -0
- package/dist/data/TaskManager.cjs +8 -1
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +8 -1
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskProgress.cjs +15 -2
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +0 -10
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +15 -2
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.cjs +19 -173
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts +9 -26
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +20 -174
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/WorkloadCard.model.cjs.map +1 -1
- package/dist/data/WorkloadCard.model.d.ts +2 -2
- package/dist/data/WorkloadCard.model.d.ts.map +1 -1
- package/dist/data/WorkloadCard.model.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +53 -9
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +53 -9
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/SessionViewer.cjs +275 -0
- package/dist/data/ai/SessionViewer.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.d.ts +33 -0
- package/dist/data/ai/SessionViewer.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.fixtures.d.ts +4 -0
- package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.js +275 -0
- package/dist/data/ai/SessionViewer.js.map +1 -0
- package/dist/data/ai/SessionViewer.model.cjs +275 -0
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.model.d.ts +87 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.model.js +275 -0
- package/dist/data/ai/SessionViewer.model.js.map +1 -0
- package/dist/data/ai/SessionViewerMenu.cjs +190 -0
- package/dist/data/ai/SessionViewerMenu.cjs.map +1 -0
- package/dist/data/ai/SessionViewerMenu.d.ts +24 -0
- package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -0
- package/dist/data/ai/SessionViewerMenu.js +190 -0
- package/dist/data/ai/SessionViewerMenu.js.map +1 -0
- package/dist/data/ai/ToolPreferences.cjs +232 -39
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +4 -7
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +234 -41
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/index.d.ts +3 -0
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/session-categories.cjs +219 -0
- package/dist/data/ai/session-categories.cjs.map +1 -0
- package/dist/data/ai/session-categories.d.ts +36 -0
- package/dist/data/ai/session-categories.d.ts.map +1 -0
- package/dist/data/ai/session-categories.js +219 -0
- package/dist/data/ai/session-categories.js.map +1 -0
- package/dist/data/chat/clickyOperationsToTools.cjs +89 -3
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.js +89 -3
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -1
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/task-status.cjs +19 -12
- package/dist/data/task-status.cjs.map +1 -1
- package/dist/data/task-status.d.ts +2 -1
- package/dist/data/task-status.d.ts.map +1 -1
- package/dist/data/task-status.js +19 -12
- package/dist/data/task-status.js.map +1 -1
- package/dist/data/test-runner/TestRunner.fixtures.d.ts +11 -4
- package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.cjs.map +1 -1
- package/dist/data/version-info.js +3 -3
- package/dist/data/version-info.js.map +1 -1
- package/dist/data.cjs +11 -2
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +6 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +11 -2
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-prompts.cjs +83 -0
- package/dist/hooks/use-prompts.cjs.map +1 -0
- package/dist/hooks/use-prompts.d.ts +43 -0
- package/dist/hooks/use-prompts.d.ts.map +1 -0
- package/dist/hooks/use-prompts.js +83 -0
- package/dist/hooks/use-prompts.js.map +1 -0
- package/dist/hooks.cjs +3 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +3 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +21 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/jotai.cjs +9 -0
- package/dist/jotai.cjs.map +1 -0
- package/dist/jotai.d.ts +4 -0
- package/dist/jotai.d.ts.map +1 -0
- package/dist/jotai.js +9 -0
- package/dist/jotai.js.map +1 -0
- package/dist/lib/utils.cjs +18 -1
- package/dist/lib/utils.cjs.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +18 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/mdx-editor.cjs +5 -0
- package/dist/mdx-editor.cjs.map +1 -0
- package/dist/mdx-editor.css +2 -0
- package/dist/mdx-editor.d.ts +2 -0
- package/dist/mdx-editor.d.ts.map +1 -0
- package/dist/mdx-editor.js +5 -0
- package/dist/mdx-editor.js.map +1 -0
- package/dist/rpc/apiClient.cjs +1 -1
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.js +1 -1
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/surfaceIconMap.cjs +12 -1
- package/dist/rpc/surfaceIconMap.cjs.map +1 -1
- package/dist/rpc/surfaceIconMap.d.ts.map +1 -1
- package/dist/rpc/surfaceIconMap.js +12 -1
- package/dist/rpc/surfaceIconMap.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +1 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/oxlint-plugins/README.md +148 -0
- package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +88 -0
- package/oxlint-plugins/clicky-ui-prefer-components.js +46 -0
- package/oxlint-plugins/clicky-ui-prefer-icons.js +121 -0
- package/oxlint-plugins/clicky-ui-prefer-tailwind.js +98 -0
- package/oxlint-plugins/clicky-ui-prefer-theme.js +134 -0
- package/oxlint-plugins/clicky-ui-shared.js +132 -0
- package/oxlint-plugins/clicky-ui.js +34 -0
- package/oxlint-plugins/no-iconify-names.js +37 -0
- package/package.json +21 -1
- package/dist/data/TimeseriesCoreBars.model.cjs +0 -27
- package/dist/data/TimeseriesCoreBars.model.cjs.map +0 -1
- package/dist/data/TimeseriesCoreBars.model.d.ts +0 -20
- package/dist/data/TimeseriesCoreBars.model.d.ts.map +0 -1
- package/dist/data/TimeseriesCoreBars.model.js +0 -27
- package/dist/data/TimeseriesCoreBars.model.js.map +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const utils = require("../../lib/utils.cjs");
|
|
5
|
+
const DropdownMenu = require("../../overlay/DropdownMenu.cjs");
|
|
6
|
+
const Icon = require("../Icon.cjs");
|
|
7
|
+
const sessionCategories = require("./session-categories.cjs");
|
|
8
|
+
const UiDotsVertical = require("../../icons/components/UiDotsVertical.cjs");
|
|
9
|
+
const UiResizeVertical = require("../../icons/components/UiResizeVertical.cjs");
|
|
10
|
+
const UiRows = require("../../icons/components/UiRows.cjs");
|
|
11
|
+
const UiListFlat = require("../../icons/components/UiListFlat.cjs");
|
|
12
|
+
const UiListDashes = require("../../icons/components/UiListDashes.cjs");
|
|
13
|
+
const UiDesktop = require("../../icons/components/UiDesktop.cjs");
|
|
14
|
+
const UiSun = require("../../icons/components/UiSun.cjs");
|
|
15
|
+
const UiMoon = require("../../icons/components/UiMoon.cjs");
|
|
16
|
+
const UiCheck = require("../../icons/components/UiCheck.cjs");
|
|
17
|
+
const DENSITY_OPTIONS = [
|
|
18
|
+
{ value: "compact", icon: UiRows.UiRows, label: "Compact" },
|
|
19
|
+
{ value: "comfortable", icon: UiListFlat.UiListFlat, label: "Comfortable" },
|
|
20
|
+
{ value: "spacious", icon: UiListDashes.UiListDashes, label: "Spacious" }
|
|
21
|
+
];
|
|
22
|
+
const THEME_OPTIONS = [
|
|
23
|
+
{ value: "light", icon: UiSun.UiSun, label: "Light" },
|
|
24
|
+
{ value: "dark", icon: UiMoon.UiMoon, label: "Dark" }
|
|
25
|
+
];
|
|
26
|
+
function SessionViewerMenu({
|
|
27
|
+
density,
|
|
28
|
+
onDensityChange,
|
|
29
|
+
theme,
|
|
30
|
+
onThemeChange,
|
|
31
|
+
filters,
|
|
32
|
+
hiddenCategories,
|
|
33
|
+
hiddenTools,
|
|
34
|
+
hiddenSources,
|
|
35
|
+
onToggleCategory,
|
|
36
|
+
onToggleTool,
|
|
37
|
+
onToggleSource,
|
|
38
|
+
showThinking,
|
|
39
|
+
onToggleThinking,
|
|
40
|
+
hasThinking
|
|
41
|
+
}) {
|
|
42
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
43
|
+
DropdownMenu.DropdownMenu,
|
|
44
|
+
{
|
|
45
|
+
icon: UiDotsVertical.UiDotsVertical,
|
|
46
|
+
hideChevron: true,
|
|
47
|
+
variant: "ghost",
|
|
48
|
+
size: "icon",
|
|
49
|
+
align: "right",
|
|
50
|
+
title: "Session options",
|
|
51
|
+
menuLabel: "Session options",
|
|
52
|
+
menuClassName: "min-w-[14rem] max-h-[70vh] overflow-auto px-1",
|
|
53
|
+
children: () => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-popover-foreground", children: [
|
|
54
|
+
/* @__PURE__ */ jsxRuntime.jsx(MenuHeading, { children: "Density" }),
|
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
56
|
+
RadioRow,
|
|
57
|
+
{
|
|
58
|
+
icon: UiResizeVertical.UiResizeVertical,
|
|
59
|
+
label: "Use page density",
|
|
60
|
+
active: density === void 0,
|
|
61
|
+
onSelect: () => onDensityChange(void 0)
|
|
62
|
+
}
|
|
63
|
+
),
|
|
64
|
+
DENSITY_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
65
|
+
RadioRow,
|
|
66
|
+
{
|
|
67
|
+
icon: option.icon,
|
|
68
|
+
label: option.label,
|
|
69
|
+
active: density === option.value,
|
|
70
|
+
onSelect: () => onDensityChange(option.value)
|
|
71
|
+
},
|
|
72
|
+
option.value
|
|
73
|
+
)),
|
|
74
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Section, { heading: "Theme", children: [
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
+
RadioRow,
|
|
77
|
+
{
|
|
78
|
+
icon: UiDesktop.UiDesktop,
|
|
79
|
+
label: "Use page theme",
|
|
80
|
+
active: theme === void 0,
|
|
81
|
+
onSelect: () => onThemeChange(void 0)
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
THEME_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
+
RadioRow,
|
|
86
|
+
{
|
|
87
|
+
icon: option.icon,
|
|
88
|
+
label: option.label,
|
|
89
|
+
active: theme === option.value,
|
|
90
|
+
onSelect: () => onThemeChange(option.value)
|
|
91
|
+
},
|
|
92
|
+
option.value
|
|
93
|
+
))
|
|
94
|
+
] }),
|
|
95
|
+
filters.categories.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Section, { heading: "Categories", children: filters.categories.map((category) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
96
|
+
CheckRow,
|
|
97
|
+
{
|
|
98
|
+
label: sessionCategories.CATEGORY_LABELS[category],
|
|
99
|
+
checked: !hiddenCategories.has(category),
|
|
100
|
+
onToggle: () => onToggleCategory(category)
|
|
101
|
+
},
|
|
102
|
+
category
|
|
103
|
+
)) }),
|
|
104
|
+
filters.tools.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Section, { heading: "Tools", children: filters.tools.map((tool) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
105
|
+
CheckRow,
|
|
106
|
+
{
|
|
107
|
+
label: tool.label,
|
|
108
|
+
checked: !hiddenTools.has(tool.key),
|
|
109
|
+
onToggle: () => onToggleTool(tool.key)
|
|
110
|
+
},
|
|
111
|
+
tool.key
|
|
112
|
+
)) }),
|
|
113
|
+
filters.sources.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(Section, { heading: "Source", children: filters.sources.map((source) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
+
CheckRow,
|
|
115
|
+
{
|
|
116
|
+
label: source,
|
|
117
|
+
checked: !hiddenSources.has(source),
|
|
118
|
+
onToggle: () => onToggleSource(source)
|
|
119
|
+
},
|
|
120
|
+
source
|
|
121
|
+
)) }),
|
|
122
|
+
hasThinking && /* @__PURE__ */ jsxRuntime.jsx(Section, { heading: "Other", children: /* @__PURE__ */ jsxRuntime.jsx(CheckRow, { label: "Reasoning", checked: showThinking, onToggle: onToggleThinking }) })
|
|
123
|
+
] })
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
function MenuHeading({ children }) {
|
|
128
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-1.5 text-xs font-medium text-muted-foreground", children });
|
|
129
|
+
}
|
|
130
|
+
function Section({ heading, children }) {
|
|
131
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1 border-t border-border pt-1", children: [
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsx(MenuHeading, { children: heading }),
|
|
133
|
+
children
|
|
134
|
+
] });
|
|
135
|
+
}
|
|
136
|
+
const ROW_CLASS = "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none";
|
|
137
|
+
function RadioRow({
|
|
138
|
+
icon,
|
|
139
|
+
label,
|
|
140
|
+
active,
|
|
141
|
+
onSelect
|
|
142
|
+
}) {
|
|
143
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
144
|
+
"button",
|
|
145
|
+
{
|
|
146
|
+
type: "button",
|
|
147
|
+
role: "menuitemradio",
|
|
148
|
+
"aria-checked": active,
|
|
149
|
+
className: utils.cn(ROW_CLASS, active && "text-foreground"),
|
|
150
|
+
onClick: onSelect,
|
|
151
|
+
children: [
|
|
152
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon, className: "text-sm text-muted-foreground" }),
|
|
153
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: label }),
|
|
154
|
+
active ? /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiCheck.UiCheck, className: "text-sm text-foreground" }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block h-4 w-4", "aria-hidden": true })
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
function CheckRow({
|
|
160
|
+
label,
|
|
161
|
+
checked,
|
|
162
|
+
onToggle
|
|
163
|
+
}) {
|
|
164
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
165
|
+
"button",
|
|
166
|
+
{
|
|
167
|
+
type: "button",
|
|
168
|
+
role: "menuitemcheckbox",
|
|
169
|
+
"aria-checked": checked,
|
|
170
|
+
className: utils.cn(ROW_CLASS, !checked && "text-muted-foreground"),
|
|
171
|
+
onClick: onToggle,
|
|
172
|
+
children: [
|
|
173
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
174
|
+
"span",
|
|
175
|
+
{
|
|
176
|
+
"aria-hidden": true,
|
|
177
|
+
className: utils.cn(
|
|
178
|
+
"flex h-4 w-4 shrink-0 items-center justify-center rounded border",
|
|
179
|
+
checked ? "border-primary bg-primary text-primary-foreground" : "border-input"
|
|
180
|
+
),
|
|
181
|
+
children: checked && /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiCheck.UiCheck, className: "text-[0.7rem]" })
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: label })
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
exports.SessionViewerMenu = SessionViewerMenu;
|
|
190
|
+
//# sourceMappingURL=SessionViewerMenu.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionViewerMenu.cjs","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { CATEGORY_LABELS, type SessionCategory, type SessionFilters } from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\nconst DENSITY_OPTIONS: Array<{ value: Density; icon: StaticIconComponent; label: string }> = [\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<{ value: SessionThemeOverride; icon: StaticIconComponent; label: string }> = [\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n}\n\n/** The SessionViewer's \"3-dot\" menu: a density override (matching DataTable's\n * pattern) plus visibility toggles for the captain category / tool / source\n * facets present in the session. */\nexport function SessionViewerMenu({\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[14rem] max-h-[70vh] overflow-auto px-1\"\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <MenuHeading>Density</MenuHeading>\n <RadioRow\n icon={UiResizeVertical}\n label=\"Use page density\"\n active={density === undefined}\n onSelect={() => onDensityChange(undefined)}\n />\n {DENSITY_OPTIONS.map((option) => (\n <RadioRow\n key={option.value}\n icon={option.icon}\n label={option.label}\n active={density === option.value}\n onSelect={() => onDensityChange(option.value)}\n />\n ))}\n\n <Section heading=\"Theme\">\n <RadioRow\n icon={UiDesktop}\n label=\"Use page theme\"\n active={theme === undefined}\n onSelect={() => onThemeChange(undefined)}\n />\n {THEME_OPTIONS.map((option) => (\n <RadioRow\n key={option.value}\n icon={option.icon}\n label={option.label}\n active={theme === option.value}\n onSelect={() => onThemeChange(option.value)}\n />\n ))}\n </Section>\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section heading=\"Other\">\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction MenuHeading({ children }: { children: ReactNode }) {\n return <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">{children}</div>;\n}\n\nfunction Section({ heading, children }: { heading: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-1\">\n <MenuHeading>{heading}</MenuHeading>\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction RadioRow({\n icon,\n label,\n active,\n onSelect,\n}: {\n icon: StaticIconComponent;\n label: string;\n active: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(ROW_CLASS, active && \"text-foreground\")}\n onClick={onSelect}\n >\n <Icon icon={icon} className=\"text-sm text-muted-foreground\" />\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {active ? (\n <Icon icon={UiCheck} className=\"text-sm text-foreground\" />\n ) : (\n <span className=\"inline-block h-4 w-4\" aria-hidden />\n )}\n </button>\n );\n}\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-4 w-4 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.7rem]\" />}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":["UiRows","UiListFlat","UiListDashes","UiSun","UiMoon","jsx","DropdownMenu","UiDotsVertical","jsxs","UiResizeVertical","UiDesktop","CATEGORY_LABELS","cn","Icon","UiCheck"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Density } from '../../hooks/use-density';
|
|
2
|
+
import { SessionCategory, SessionFilters } from './session-categories';
|
|
3
|
+
export type SessionThemeOverride = "light" | "dark";
|
|
4
|
+
export interface SessionViewerMenuProps {
|
|
5
|
+
density: Density | undefined;
|
|
6
|
+
onDensityChange: (density: Density | undefined) => void;
|
|
7
|
+
theme: SessionThemeOverride | undefined;
|
|
8
|
+
onThemeChange: (theme: SessionThemeOverride | undefined) => void;
|
|
9
|
+
filters: SessionFilters;
|
|
10
|
+
hiddenCategories: ReadonlySet<SessionCategory>;
|
|
11
|
+
hiddenTools: ReadonlySet<string>;
|
|
12
|
+
hiddenSources: ReadonlySet<string>;
|
|
13
|
+
onToggleCategory: (category: SessionCategory) => void;
|
|
14
|
+
onToggleTool: (tool: string) => void;
|
|
15
|
+
onToggleSource: (source: string) => void;
|
|
16
|
+
showThinking: boolean;
|
|
17
|
+
onToggleThinking: () => void;
|
|
18
|
+
hasThinking: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** The SessionViewer's "3-dot" menu: a density override (matching DataTable's
|
|
21
|
+
* pattern) plus visibility toggles for the captain category / tool / source
|
|
22
|
+
* facets present in the session. */
|
|
23
|
+
export declare function SessionViewerMenu({ density, onDensityChange, theme, onThemeChange, filters, hiddenCategories, hiddenTools, hiddenSources, onToggleCategory, onToggleTool, onToggleSource, showThinking, onToggleThinking, hasThinking, }: SessionViewerMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
//# sourceMappingURL=SessionViewerMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionViewerMenu.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAmB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAElG,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AAapD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACxC,aAAa,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;IACjE,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC/C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;qCAEqC;AACrC,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,eAAe,EACf,KAAK,EACL,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,GACZ,EAAE,sBAAsB,2CAiGxB"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { DropdownMenu } from "../../overlay/DropdownMenu.js";
|
|
4
|
+
import { Icon } from "../Icon.js";
|
|
5
|
+
import { CATEGORY_LABELS } from "./session-categories.js";
|
|
6
|
+
import { UiDotsVertical } from "../../icons/components/UiDotsVertical.js";
|
|
7
|
+
import { UiResizeVertical } from "../../icons/components/UiResizeVertical.js";
|
|
8
|
+
import { UiRows } from "../../icons/components/UiRows.js";
|
|
9
|
+
import { UiListFlat } from "../../icons/components/UiListFlat.js";
|
|
10
|
+
import { UiListDashes } from "../../icons/components/UiListDashes.js";
|
|
11
|
+
import { UiDesktop } from "../../icons/components/UiDesktop.js";
|
|
12
|
+
import { UiSun } from "../../icons/components/UiSun.js";
|
|
13
|
+
import { UiMoon } from "../../icons/components/UiMoon.js";
|
|
14
|
+
import { UiCheck } from "../../icons/components/UiCheck.js";
|
|
15
|
+
const DENSITY_OPTIONS = [
|
|
16
|
+
{ value: "compact", icon: UiRows, label: "Compact" },
|
|
17
|
+
{ value: "comfortable", icon: UiListFlat, label: "Comfortable" },
|
|
18
|
+
{ value: "spacious", icon: UiListDashes, label: "Spacious" }
|
|
19
|
+
];
|
|
20
|
+
const THEME_OPTIONS = [
|
|
21
|
+
{ value: "light", icon: UiSun, label: "Light" },
|
|
22
|
+
{ value: "dark", icon: UiMoon, label: "Dark" }
|
|
23
|
+
];
|
|
24
|
+
function SessionViewerMenu({
|
|
25
|
+
density,
|
|
26
|
+
onDensityChange,
|
|
27
|
+
theme,
|
|
28
|
+
onThemeChange,
|
|
29
|
+
filters,
|
|
30
|
+
hiddenCategories,
|
|
31
|
+
hiddenTools,
|
|
32
|
+
hiddenSources,
|
|
33
|
+
onToggleCategory,
|
|
34
|
+
onToggleTool,
|
|
35
|
+
onToggleSource,
|
|
36
|
+
showThinking,
|
|
37
|
+
onToggleThinking,
|
|
38
|
+
hasThinking
|
|
39
|
+
}) {
|
|
40
|
+
return /* @__PURE__ */ jsx(
|
|
41
|
+
DropdownMenu,
|
|
42
|
+
{
|
|
43
|
+
icon: UiDotsVertical,
|
|
44
|
+
hideChevron: true,
|
|
45
|
+
variant: "ghost",
|
|
46
|
+
size: "icon",
|
|
47
|
+
align: "right",
|
|
48
|
+
title: "Session options",
|
|
49
|
+
menuLabel: "Session options",
|
|
50
|
+
menuClassName: "min-w-[14rem] max-h-[70vh] overflow-auto px-1",
|
|
51
|
+
children: () => /* @__PURE__ */ jsxs("div", { className: "text-popover-foreground", children: [
|
|
52
|
+
/* @__PURE__ */ jsx(MenuHeading, { children: "Density" }),
|
|
53
|
+
/* @__PURE__ */ jsx(
|
|
54
|
+
RadioRow,
|
|
55
|
+
{
|
|
56
|
+
icon: UiResizeVertical,
|
|
57
|
+
label: "Use page density",
|
|
58
|
+
active: density === void 0,
|
|
59
|
+
onSelect: () => onDensityChange(void 0)
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
DENSITY_OPTIONS.map((option) => /* @__PURE__ */ jsx(
|
|
63
|
+
RadioRow,
|
|
64
|
+
{
|
|
65
|
+
icon: option.icon,
|
|
66
|
+
label: option.label,
|
|
67
|
+
active: density === option.value,
|
|
68
|
+
onSelect: () => onDensityChange(option.value)
|
|
69
|
+
},
|
|
70
|
+
option.value
|
|
71
|
+
)),
|
|
72
|
+
/* @__PURE__ */ jsxs(Section, { heading: "Theme", children: [
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
RadioRow,
|
|
75
|
+
{
|
|
76
|
+
icon: UiDesktop,
|
|
77
|
+
label: "Use page theme",
|
|
78
|
+
active: theme === void 0,
|
|
79
|
+
onSelect: () => onThemeChange(void 0)
|
|
80
|
+
}
|
|
81
|
+
),
|
|
82
|
+
THEME_OPTIONS.map((option) => /* @__PURE__ */ jsx(
|
|
83
|
+
RadioRow,
|
|
84
|
+
{
|
|
85
|
+
icon: option.icon,
|
|
86
|
+
label: option.label,
|
|
87
|
+
active: theme === option.value,
|
|
88
|
+
onSelect: () => onThemeChange(option.value)
|
|
89
|
+
},
|
|
90
|
+
option.value
|
|
91
|
+
))
|
|
92
|
+
] }),
|
|
93
|
+
filters.categories.length > 0 && /* @__PURE__ */ jsx(Section, { heading: "Categories", children: filters.categories.map((category) => /* @__PURE__ */ jsx(
|
|
94
|
+
CheckRow,
|
|
95
|
+
{
|
|
96
|
+
label: CATEGORY_LABELS[category],
|
|
97
|
+
checked: !hiddenCategories.has(category),
|
|
98
|
+
onToggle: () => onToggleCategory(category)
|
|
99
|
+
},
|
|
100
|
+
category
|
|
101
|
+
)) }),
|
|
102
|
+
filters.tools.length > 0 && /* @__PURE__ */ jsx(Section, { heading: "Tools", children: filters.tools.map((tool) => /* @__PURE__ */ jsx(
|
|
103
|
+
CheckRow,
|
|
104
|
+
{
|
|
105
|
+
label: tool.label,
|
|
106
|
+
checked: !hiddenTools.has(tool.key),
|
|
107
|
+
onToggle: () => onToggleTool(tool.key)
|
|
108
|
+
},
|
|
109
|
+
tool.key
|
|
110
|
+
)) }),
|
|
111
|
+
filters.sources.length > 1 && /* @__PURE__ */ jsx(Section, { heading: "Source", children: filters.sources.map((source) => /* @__PURE__ */ jsx(
|
|
112
|
+
CheckRow,
|
|
113
|
+
{
|
|
114
|
+
label: source,
|
|
115
|
+
checked: !hiddenSources.has(source),
|
|
116
|
+
onToggle: () => onToggleSource(source)
|
|
117
|
+
},
|
|
118
|
+
source
|
|
119
|
+
)) }),
|
|
120
|
+
hasThinking && /* @__PURE__ */ jsx(Section, { heading: "Other", children: /* @__PURE__ */ jsx(CheckRow, { label: "Reasoning", checked: showThinking, onToggle: onToggleThinking }) })
|
|
121
|
+
] })
|
|
122
|
+
}
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
function MenuHeading({ children }) {
|
|
126
|
+
return /* @__PURE__ */ jsx("div", { className: "px-2 py-1.5 text-xs font-medium text-muted-foreground", children });
|
|
127
|
+
}
|
|
128
|
+
function Section({ heading, children }) {
|
|
129
|
+
return /* @__PURE__ */ jsxs("div", { className: "mt-1 border-t border-border pt-1", children: [
|
|
130
|
+
/* @__PURE__ */ jsx(MenuHeading, { children: heading }),
|
|
131
|
+
children
|
|
132
|
+
] });
|
|
133
|
+
}
|
|
134
|
+
const ROW_CLASS = "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none";
|
|
135
|
+
function RadioRow({
|
|
136
|
+
icon,
|
|
137
|
+
label,
|
|
138
|
+
active,
|
|
139
|
+
onSelect
|
|
140
|
+
}) {
|
|
141
|
+
return /* @__PURE__ */ jsxs(
|
|
142
|
+
"button",
|
|
143
|
+
{
|
|
144
|
+
type: "button",
|
|
145
|
+
role: "menuitemradio",
|
|
146
|
+
"aria-checked": active,
|
|
147
|
+
className: cn(ROW_CLASS, active && "text-foreground"),
|
|
148
|
+
onClick: onSelect,
|
|
149
|
+
children: [
|
|
150
|
+
/* @__PURE__ */ jsx(Icon, { icon, className: "text-sm text-muted-foreground" }),
|
|
151
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: label }),
|
|
152
|
+
active ? /* @__PURE__ */ jsx(Icon, { icon: UiCheck, className: "text-sm text-foreground" }) : /* @__PURE__ */ jsx("span", { className: "inline-block h-4 w-4", "aria-hidden": true })
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
function CheckRow({
|
|
158
|
+
label,
|
|
159
|
+
checked,
|
|
160
|
+
onToggle
|
|
161
|
+
}) {
|
|
162
|
+
return /* @__PURE__ */ jsxs(
|
|
163
|
+
"button",
|
|
164
|
+
{
|
|
165
|
+
type: "button",
|
|
166
|
+
role: "menuitemcheckbox",
|
|
167
|
+
"aria-checked": checked,
|
|
168
|
+
className: cn(ROW_CLASS, !checked && "text-muted-foreground"),
|
|
169
|
+
onClick: onToggle,
|
|
170
|
+
children: [
|
|
171
|
+
/* @__PURE__ */ jsx(
|
|
172
|
+
"span",
|
|
173
|
+
{
|
|
174
|
+
"aria-hidden": true,
|
|
175
|
+
className: cn(
|
|
176
|
+
"flex h-4 w-4 shrink-0 items-center justify-center rounded border",
|
|
177
|
+
checked ? "border-primary bg-primary text-primary-foreground" : "border-input"
|
|
178
|
+
),
|
|
179
|
+
children: checked && /* @__PURE__ */ jsx(Icon, { icon: UiCheck, className: "text-[0.7rem]" })
|
|
180
|
+
}
|
|
181
|
+
),
|
|
182
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: label })
|
|
183
|
+
]
|
|
184
|
+
}
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
export {
|
|
188
|
+
SessionViewerMenu
|
|
189
|
+
};
|
|
190
|
+
//# sourceMappingURL=SessionViewerMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionViewerMenu.js","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { CATEGORY_LABELS, type SessionCategory, type SessionFilters } from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\nconst DENSITY_OPTIONS: Array<{ value: Density; icon: StaticIconComponent; label: string }> = [\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<{ value: SessionThemeOverride; icon: StaticIconComponent; label: string }> = [\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n}\n\n/** The SessionViewer's \"3-dot\" menu: a density override (matching DataTable's\n * pattern) plus visibility toggles for the captain category / tool / source\n * facets present in the session. */\nexport function SessionViewerMenu({\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[14rem] max-h-[70vh] overflow-auto px-1\"\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <MenuHeading>Density</MenuHeading>\n <RadioRow\n icon={UiResizeVertical}\n label=\"Use page density\"\n active={density === undefined}\n onSelect={() => onDensityChange(undefined)}\n />\n {DENSITY_OPTIONS.map((option) => (\n <RadioRow\n key={option.value}\n icon={option.icon}\n label={option.label}\n active={density === option.value}\n onSelect={() => onDensityChange(option.value)}\n />\n ))}\n\n <Section heading=\"Theme\">\n <RadioRow\n icon={UiDesktop}\n label=\"Use page theme\"\n active={theme === undefined}\n onSelect={() => onThemeChange(undefined)}\n />\n {THEME_OPTIONS.map((option) => (\n <RadioRow\n key={option.value}\n icon={option.icon}\n label={option.label}\n active={theme === option.value}\n onSelect={() => onThemeChange(option.value)}\n />\n ))}\n </Section>\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section heading=\"Other\">\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction MenuHeading({ children }: { children: ReactNode }) {\n return <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">{children}</div>;\n}\n\nfunction Section({ heading, children }: { heading: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-1\">\n <MenuHeading>{heading}</MenuHeading>\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction RadioRow({\n icon,\n label,\n active,\n onSelect,\n}: {\n icon: StaticIconComponent;\n label: string;\n active: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(ROW_CLASS, active && \"text-foreground\")}\n onClick={onSelect}\n >\n <Icon icon={icon} className=\"text-sm text-muted-foreground\" />\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {active ? (\n <Icon icon={UiCheck} className=\"text-sm text-foreground\" />\n ) : (\n <span className=\"inline-block h-4 w-4\" aria-hidden />\n )}\n </button>\n );\n}\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-4 w-4 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.7rem]\" />}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":[],"mappings":"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"}
|