@jini-ai/ui 0.3.3 → 0.3.6
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/dist/features/appearance/react/components/AppearanceTab.d.ts +4 -1
- package/dist/features/appearance/react/components/AppearanceTab.d.ts.map +1 -1
- package/dist/features/appearance/react/components/AppearanceTab.js +7 -4
- package/dist/features/appearance/react/components/AppearanceTab.js.map +1 -1
- package/dist/features/connectors/ConnectorsBrowser.d.ts +8 -1
- package/dist/features/connectors/ConnectorsBrowser.d.ts.map +1 -1
- package/dist/features/connectors/ConnectorsBrowser.js +4 -3
- package/dist/features/connectors/ConnectorsBrowser.js.map +1 -1
- package/dist/features/connectors/components/ConnectorCard.d.ts +4 -1
- package/dist/features/connectors/components/ConnectorCard.d.ts.map +1 -1
- package/dist/features/connectors/components/ConnectorCard.js +5 -4
- package/dist/features/connectors/components/ConnectorCard.js.map +1 -1
- package/dist/features/connectors/components/ConnectorDetailDrawer.d.ts +3 -1
- package/dist/features/connectors/components/ConnectorDetailDrawer.d.ts.map +1 -1
- package/dist/features/connectors/components/ConnectorDetailDrawer.js +3 -2
- package/dist/features/connectors/components/ConnectorDetailDrawer.js.map +1 -1
- package/dist/features/connectors/components/ConnectorGrid.d.ts +4 -1
- package/dist/features/connectors/components/ConnectorGrid.d.ts.map +1 -1
- package/dist/features/connectors/components/ConnectorGrid.js +4 -2
- package/dist/features/connectors/components/ConnectorGrid.js.map +1 -1
- package/dist/features/connectors/components/ConnectorSearchBar.d.ts +3 -1
- package/dist/features/connectors/components/ConnectorSearchBar.d.ts.map +1 -1
- package/dist/features/connectors/components/ConnectorSearchBar.js +4 -3
- package/dist/features/connectors/components/ConnectorSearchBar.js.map +1 -1
- package/dist/features/connectors/components/ProviderTabBar.d.ts +4 -1
- package/dist/features/connectors/components/ProviderTabBar.d.ts.map +1 -1
- package/dist/features/connectors/components/ProviderTabBar.js +5 -3
- package/dist/features/connectors/components/ProviderTabBar.js.map +1 -1
- package/dist/features/execution/constants.d.ts +30 -0
- package/dist/features/execution/constants.d.ts.map +1 -1
- package/dist/features/execution/constants.js +45 -0
- package/dist/features/execution/constants.js.map +1 -1
- package/dist/features/execution/index.d.ts +3 -3
- package/dist/features/execution/index.d.ts.map +1 -1
- package/dist/features/execution/index.js +2 -2
- package/dist/features/execution/index.js.map +1 -1
- package/dist/features/execution/react/components/AgentCliEnvFields.d.ts.map +1 -1
- package/dist/features/execution/react/components/AgentCliEnvFields.js +8 -1
- package/dist/features/execution/react/components/AgentCliEnvFields.js.map +1 -1
- package/dist/features/execution/react/components/ByokProviderForm.d.ts +30 -1
- package/dist/features/execution/react/components/ByokProviderForm.d.ts.map +1 -1
- package/dist/features/execution/react/components/ByokProviderForm.js +41 -21
- package/dist/features/execution/react/components/ByokProviderForm.js.map +1 -1
- package/dist/features/execution/react/components/ExecutionTab.d.ts +9 -1
- package/dist/features/execution/react/components/ExecutionTab.d.ts.map +1 -1
- package/dist/features/execution/react/components/ExecutionTab.js +9 -4
- package/dist/features/execution/react/components/ExecutionTab.js.map +1 -1
- package/dist/features/execution/react/components/LocalCliAgentCard.d.ts +4 -1
- package/dist/features/execution/react/components/LocalCliAgentCard.d.ts.map +1 -1
- package/dist/features/execution/react/components/LocalCliAgentCard.js +24 -28
- package/dist/features/execution/react/components/LocalCliAgentCard.js.map +1 -1
- package/dist/features/execution/react/components/LocalCliAgentList.d.ts +4 -1
- package/dist/features/execution/react/components/LocalCliAgentList.d.ts.map +1 -1
- package/dist/features/execution/react/components/LocalCliAgentList.js +4 -2
- package/dist/features/execution/react/components/LocalCliAgentList.js.map +1 -1
- package/dist/features/execution/react/components/ProviderChipGroup.d.ts +4 -1
- package/dist/features/execution/react/components/ProviderChipGroup.d.ts.map +1 -1
- package/dist/features/execution/react/components/ProviderChipGroup.js +7 -3
- package/dist/features/execution/react/components/ProviderChipGroup.js.map +1 -1
- package/dist/features/execution/react/components/SearchableModelSelect.d.ts +4 -1
- package/dist/features/execution/react/components/SearchableModelSelect.d.ts.map +1 -1
- package/dist/features/execution/react/components/SearchableModelSelect.js +3 -2
- package/dist/features/execution/react/components/SearchableModelSelect.js.map +1 -1
- package/dist/features/execution/react/hooks/useReasoningControl.d.ts +87 -0
- package/dist/features/execution/react/hooks/useReasoningControl.d.ts.map +1 -0
- package/dist/features/execution/react/hooks/useReasoningControl.js +149 -0
- package/dist/features/execution/react/hooks/useReasoningControl.js.map +1 -0
- package/dist/features/execution/rules.d.ts +87 -1
- package/dist/features/execution/rules.d.ts.map +1 -1
- package/dist/features/execution/rules.js +210 -1
- package/dist/features/execution/rules.js.map +1 -1
- package/dist/features/execution/types.d.ts +96 -0
- package/dist/features/execution/types.d.ts.map +1 -1
- package/dist/features/html-editor/react/components/InteractiveHtmlEditor.d.ts +1 -1
- package/dist/features/html-editor/react/hooks/useInteractiveHtmlEditor.js +1 -1
- package/dist/features/i18n/dictionaries/index.d.ts +1 -1
- package/dist/features/instructions/react/components/InstructionsTab.d.ts +3 -1
- package/dist/features/instructions/react/components/InstructionsTab.d.ts.map +1 -1
- package/dist/features/instructions/react/components/InstructionsTab.js +3 -2
- package/dist/features/instructions/react/components/InstructionsTab.js.map +1 -1
- package/dist/features/integrations/react/components/ClientPicker.d.ts +4 -1
- package/dist/features/integrations/react/components/ClientPicker.d.ts.map +1 -1
- package/dist/features/integrations/react/components/ClientPicker.js +7 -3
- package/dist/features/integrations/react/components/ClientPicker.js.map +1 -1
- package/dist/features/integrations/react/components/CodexInstallToggleButton.d.ts +3 -1
- package/dist/features/integrations/react/components/CodexInstallToggleButton.d.ts.map +1 -1
- package/dist/features/integrations/react/components/CodexInstallToggleButton.js +3 -2
- package/dist/features/integrations/react/components/CodexInstallToggleButton.js.map +1 -1
- package/dist/features/integrations/react/components/IntegrationsTab.d.ts +6 -1
- package/dist/features/integrations/react/components/IntegrationsTab.d.ts.map +1 -1
- package/dist/features/integrations/react/components/IntegrationsTab.js +4 -3
- package/dist/features/integrations/react/components/IntegrationsTab.js.map +1 -1
- package/dist/features/language/react/components/LanguageTab.d.ts +4 -1
- package/dist/features/language/react/components/LanguageTab.d.ts.map +1 -1
- package/dist/features/language/react/components/LanguageTab.js +5 -3
- package/dist/features/language/react/components/LanguageTab.js.map +1 -1
- package/dist/features/mcp-ui/sandbox-proxy.d.ts +42 -1
- package/dist/features/mcp-ui/sandbox-proxy.d.ts.map +1 -1
- package/dist/features/mcp-ui/sandbox-proxy.js +89 -1
- package/dist/features/mcp-ui/sandbox-proxy.js.map +1 -1
- package/dist/features/mcp-ui/surfaces/outcome.d.ts +1 -1
- package/dist/features/mcp-ui/surfaces/tokens.d.ts +6 -5
- package/dist/features/mcp-ui/surfaces/tokens.d.ts.map +1 -1
- package/dist/features/mcp-ui/surfaces/tokens.js +6 -5
- package/dist/features/mcp-ui/surfaces/tokens.js.map +1 -1
- package/dist/features/media-providers/react/components/MediaProvidersTab.d.ts +4 -1
- package/dist/features/media-providers/react/components/MediaProvidersTab.d.ts.map +1 -1
- package/dist/features/media-providers/react/components/MediaProvidersTab.js +14 -4
- package/dist/features/media-providers/react/components/MediaProvidersTab.js.map +1 -1
- package/dist/features/memory/react/components/MemoryEntryCard.d.ts +3 -1
- package/dist/features/memory/react/components/MemoryEntryCard.d.ts.map +1 -1
- package/dist/features/memory/react/components/MemoryEntryCard.js +3 -2
- package/dist/features/memory/react/components/MemoryEntryCard.js.map +1 -1
- package/dist/features/memory/react/components/MemoryExtractionCard.d.ts +3 -1
- package/dist/features/memory/react/components/MemoryExtractionCard.d.ts.map +1 -1
- package/dist/features/memory/react/components/MemoryExtractionCard.js +3 -2
- package/dist/features/memory/react/components/MemoryExtractionCard.js.map +1 -1
- package/dist/features/memory/react/components/MemoryHooksPanel.d.ts +3 -1
- package/dist/features/memory/react/components/MemoryHooksPanel.d.ts.map +1 -1
- package/dist/features/memory/react/components/MemoryHooksPanel.js +7 -2
- package/dist/features/memory/react/components/MemoryHooksPanel.js.map +1 -1
- package/dist/features/memory/react/components/MemoryHowPanel.d.ts +3 -1
- package/dist/features/memory/react/components/MemoryHowPanel.d.ts.map +1 -1
- package/dist/features/memory/react/components/MemoryHowPanel.js +2 -2
- package/dist/features/memory/react/components/MemoryHowPanel.js.map +1 -1
- package/dist/features/memory/react/components/MemoryList.d.ts +3 -1
- package/dist/features/memory/react/components/MemoryList.d.ts.map +1 -1
- package/dist/features/memory/react/components/MemoryList.js +12 -5
- package/dist/features/memory/react/components/MemoryList.js.map +1 -1
- package/dist/features/memory/react/components/MemorySettingsPanel.d.ts +7 -1
- package/dist/features/memory/react/components/MemorySettingsPanel.d.ts.map +1 -1
- package/dist/features/memory/react/components/MemorySettingsPanel.js +3 -2
- package/dist/features/memory/react/components/MemorySettingsPanel.js.map +1 -1
- package/dist/features/notifications/react/components/NotificationsTab.d.ts +3 -1
- package/dist/features/notifications/react/components/NotificationsTab.d.ts.map +1 -1
- package/dist/features/notifications/react/components/NotificationsTab.js +13 -6
- package/dist/features/notifications/react/components/NotificationsTab.js.map +1 -1
- package/dist/features/privacy/react/components/PrivacyTab.d.ts +9 -1
- package/dist/features/privacy/react/components/PrivacyTab.d.ts.map +1 -1
- package/dist/features/privacy/react/components/PrivacyTab.js +5 -4
- package/dist/features/privacy/react/components/PrivacyTab.js.map +1 -1
- package/dist/features/settings/dialog/react/components/SettingsDialogShell.d.ts +1 -1
- package/dist/features/settings/dialog/styles/settings-dialog.css +54 -0
- package/dist/features/skills/react/components/SkillDraftForm.d.ts +3 -1
- package/dist/features/skills/react/components/SkillDraftForm.d.ts.map +1 -1
- package/dist/features/skills/react/components/SkillDraftForm.js +3 -2
- package/dist/features/skills/react/components/SkillDraftForm.js.map +1 -1
- package/dist/features/skills/react/components/SkillRow.d.ts +3 -1
- package/dist/features/skills/react/components/SkillRow.d.ts.map +1 -1
- package/dist/features/skills/react/components/SkillRow.js +3 -2
- package/dist/features/skills/react/components/SkillRow.js.map +1 -1
- package/dist/features/skills/react/components/SkillsTab.d.ts +8 -1
- package/dist/features/skills/react/components/SkillsTab.d.ts.map +1 -1
- package/dist/features/skills/react/components/SkillsTab.js +7 -3
- package/dist/features/skills/react/components/SkillsTab.js.map +1 -1
- package/dist/features/tabbed-dialog/react/components/TabbedDialog.d.ts +1 -1
- package/dist/features/tabbed-dialog/react/components/TabbedDialog.js +1 -1
- package/dist/features/tabbed-dialog/types.d.ts +2 -2
- package/dist/features/tabbed-dialog/types.js +2 -2
- package/dist/react/components/RemixIcon.d.ts +42 -1
- package/dist/react/components/RemixIcon.d.ts.map +1 -1
- package/dist/react/components/RemixIcon.js +152 -8
- package/dist/react/components/RemixIcon.js.map +1 -1
- package/dist/utils/file-transfer.d.ts.map +1 -1
- package/dist/utils/file-transfer.js +2 -0
- package/dist/utils/file-transfer.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type MutableRefObject } from 'react';
|
|
2
2
|
import type { MemoryEntrySummary, MemoryExtractionRecord, MemoryType } from '../../types.js';
|
|
3
|
-
export declare function MemoryList({ sectionRef, entries, filtered, visibleExtractions, filter, onFilterChange, unifiedMemoryCount, onClearExtractions, onRefreshExtractions, isRefreshing, previewId, previewBody, nowClock, onOpenPreview, onStartEdit, onDeleteEntry, onDeleteExtraction, }: {
|
|
3
|
+
export declare function MemoryList({ sectionRef, entries, filtered, visibleExtractions, filter, onFilterChange, unifiedMemoryCount, onClearExtractions, onRefreshExtractions, isRefreshing, previewId, previewBody, nowClock, onOpenPreview, onStartEdit, onDeleteEntry, onDeleteExtraction, agentHandle, }: {
|
|
4
4
|
sectionRef: MutableRefObject<HTMLElement | null>;
|
|
5
5
|
entries: MemoryEntrySummary[];
|
|
6
6
|
filtered: MemoryEntrySummary[];
|
|
@@ -18,5 +18,7 @@ export declare function MemoryList({ sectionRef, entries, filtered, visibleExtra
|
|
|
18
18
|
onStartEdit: (id: string) => void;
|
|
19
19
|
onDeleteEntry: (id: string) => void;
|
|
20
20
|
onDeleteExtraction: (id: string) => void;
|
|
21
|
+
/** This section's own agent handle — see `MemorySettingsPanel`'s `agentHandle` doc. */
|
|
22
|
+
agentHandle?: string;
|
|
21
23
|
}): import("react").JSX.Element;
|
|
22
24
|
//# sourceMappingURL=MemoryList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryList.d.ts","sourceRoot":"","sources":["../../../../../src/features/memory/react/components/MemoryList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MemoryList.d.ts","sourceRoot":"","sources":["../../../../../src/features/memory/react/components/MemoryList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAMvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI7F,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,aAAa,EACb,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;IAC7C,MAAM,EAAE,KAAK,GAAG,UAAU,CAAC;IAC3B,cAAc,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,UAAU,KAAK,IAAI,CAAC;IACrD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,+BA8HA"}
|
|
@@ -4,24 +4,31 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
4
4
|
// visible extraction rows). Rendering only — every list, count, and handler is
|
|
5
5
|
// supplied by a host's entries/extractions hooks.
|
|
6
6
|
import { useMemo } from 'react';
|
|
7
|
+
import { agentHandleProps, agentSubHandle, buildAgentListHandles } from '@jini-ai/agentic';
|
|
7
8
|
import { Icon } from '../../../../react/components/Icon.js';
|
|
8
9
|
import { useT } from '../../../i18n/index.js';
|
|
9
10
|
import { TYPES } from '../../constants.js';
|
|
10
11
|
import { memoryTypeLabels } from '../../formatters.js';
|
|
11
12
|
import { MemoryEntryCard } from './MemoryEntryCard.js';
|
|
12
13
|
import { MemoryExtractionCard } from './MemoryExtractionCard.js';
|
|
13
|
-
export function MemoryList({ sectionRef, entries, filtered, visibleExtractions, filter, onFilterChange, unifiedMemoryCount, onClearExtractions, onRefreshExtractions, isRefreshing, previewId, previewBody, nowClock, onOpenPreview, onStartEdit, onDeleteEntry, onDeleteExtraction, }) {
|
|
14
|
+
export function MemoryList({ sectionRef, entries, filtered, visibleExtractions, filter, onFilterChange, unifiedMemoryCount, onClearExtractions, onRefreshExtractions, isRefreshing, previewId, previewBody, nowClock, onOpenPreview, onStartEdit, onDeleteEntry, onDeleteExtraction, agentHandle, }) {
|
|
14
15
|
const t = useT();
|
|
15
16
|
const typeLabel = useMemo(() => memoryTypeLabels(t), [t]);
|
|
16
|
-
|
|
17
|
+
const entryHandles = agentHandle
|
|
18
|
+
? buildAgentListHandles(agentSubHandle(agentHandle, 'entry'), filtered.map((e) => e.id))
|
|
19
|
+
: undefined;
|
|
20
|
+
const extractionHandles = agentHandle
|
|
21
|
+
? buildAgentListHandles(agentSubHandle(agentHandle, 'extraction'), visibleExtractions.map((r) => r.id))
|
|
22
|
+
: undefined;
|
|
23
|
+
return (_jsx("section", { ref: sectionRef, className: "settings-section settings-section-card memory-records-section", children: _jsxs("div", { className: "memory-management-panel", children: [_jsxs("div", { className: "memory-subsection-head", children: [_jsxs("div", { children: [_jsx("h4", { children: t('Saved memory') }), _jsx("p", { className: "hint", children: t('Saved facts, preferences, and project context available to future chats.') })] }), _jsxs("div", { className: "memory-management-counts", children: [_jsxs("span", { className: "memory-source-badge", children: [entries.length, " ", t('saved')] }), visibleExtractions.length > 0 ? (_jsxs("span", { className: "memory-source-badge", children: [visibleExtractions.length, " ", visibleExtractions.length === 1 ? t('extraction') : t('extractions')] })) : null] })] }), _jsxs("div", { className: "library-toolbar is-row", children: [_jsxs("div", { className: "library-filters", children: [_jsxs("button", { type: "button", className: `filter-pill${filter === 'all' ? ' active' : ''}`, onClick: () => onFilterChange('all'), ...agentHandleProps(agentHandle, { action: 'filter-all', role: 'button', label: t('All') }), children: [t('All'), _jsx("span", { className: "filter-pill-count", children: entries.length + visibleExtractions.length })] }), TYPES.map((type) => {
|
|
17
24
|
const count = entries.filter((e) => e.type === type).length;
|
|
18
25
|
if (count === 0 && filter !== type)
|
|
19
26
|
return null;
|
|
20
|
-
return (_jsxs("button", { type: "button", className: `filter-pill${filter === type ? ' active' : ''}`, onClick: () => onFilterChange(type), children: [typeLabel[type], _jsx("span", { className: "filter-pill-count", children: count })] }, type));
|
|
21
|
-
})] }), _jsxs("div", { className: "memory-management-actions", children: [visibleExtractions.length > 0 ? (_jsxs("button", { type: "button", className: "ghost memory-clear-extractions", onClick: () => onClearExtractions(), title: t('Clear extraction history'), children: [_jsx(Icon, { name: "close", size: 12 }), _jsx("span", { children: t('Clear') })] })) : null, visibleExtractions.length > 0 ? (_jsxs("button", { type: "button", className: "ghost memory-refresh-extractions", onClick: () => onRefreshExtractions(), disabled: isRefreshing, title: t('Refresh'), children: [_jsx(Icon, { name: "refresh", size: 12, className: isRefreshing ? 'icon-spin' : '' }), _jsx("span", { children: isRefreshing ? t('Refreshing') : t('Refresh') })] })) : null] })] }), _jsx("div", { className: "library-content memory-unified-list", children: unifiedMemoryCount === 0 ? (
|
|
27
|
+
return (_jsxs("button", { type: "button", className: `filter-pill${filter === type ? ' active' : ''}`, onClick: () => onFilterChange(type), ...agentHandleProps(agentHandle, { action: `filter-${type}`, role: 'button', label: typeLabel[type] }), children: [typeLabel[type], _jsx("span", { className: "filter-pill-count", children: count })] }, type));
|
|
28
|
+
})] }), _jsxs("div", { className: "memory-management-actions", children: [visibleExtractions.length > 0 ? (_jsxs("button", { type: "button", className: "ghost memory-clear-extractions", onClick: () => onClearExtractions(), title: t('Clear extraction history'), ...agentHandleProps(agentHandle, { action: 'clear-extractions', role: 'button', label: t('Clear extraction history') }), children: [_jsx(Icon, { name: "close", size: 12 }), _jsx("span", { children: t('Clear') })] })) : null, visibleExtractions.length > 0 ? (_jsxs("button", { type: "button", className: "ghost memory-refresh-extractions", onClick: () => onRefreshExtractions(), disabled: isRefreshing, title: t('Refresh'), ...agentHandleProps(agentHandle, { action: 'refresh-extractions', role: 'button', label: t('Refresh') }), children: [_jsx(Icon, { name: "refresh", size: 12, className: isRefreshing ? 'icon-spin' : '' }), _jsx("span", { children: isRefreshing ? t('Refreshing') : t('Refresh') })] })) : null] })] }), _jsx("div", { className: "library-content memory-unified-list", children: unifiedMemoryCount === 0 ? (
|
|
22
29
|
// Empty state: one clear "no rows yet" line and a one-sentence
|
|
23
30
|
// primer that explains the mechanism (talk in chat, fact gets
|
|
24
31
|
// extracted) with a single example.
|
|
25
|
-
_jsxs("div", { className: "library-empty", children: [_jsx("p", { className: "library-empty-title", children: t('No saved memories yet') }), _jsxs("p", { className: "library-empty-hint", children: [t('Tell the assistant a fact in chat — e.g.'), " ", _jsx("code", { children: t('I prefer dark mode') }), ' ', t('— and it will be saved here automatically.')] })] })) : (_jsxs(_Fragment, { children: [filtered.map((entry) => (_jsx(MemoryEntryCard, { entry: entry, previewId: previewId, previewBody: previewBody, onOpenPreview: onOpenPreview, onStartEdit: onStartEdit, onDelete: onDeleteEntry }, entry.id))), visibleExtractions.map((record) => (_jsx(MemoryExtractionCard, { record: record, nowClock: nowClock, onOpenPreview: onOpenPreview, onDelete: onDeleteExtraction }, record.id)))] })) })] }) }));
|
|
32
|
+
_jsxs("div", { className: "library-empty", children: [_jsx("p", { className: "library-empty-title", children: t('No saved memories yet') }), _jsxs("p", { className: "library-empty-hint", children: [t('Tell the assistant a fact in chat — e.g.'), " ", _jsx("code", { children: t('I prefer dark mode') }), ' ', t('— and it will be saved here automatically.')] })] })) : (_jsxs(_Fragment, { children: [filtered.map((entry, index) => (_jsx(MemoryEntryCard, { entry: entry, previewId: previewId, previewBody: previewBody, onOpenPreview: onOpenPreview, onStartEdit: onStartEdit, onDelete: onDeleteEntry, ...(entryHandles?.[index] ? { agentHandle: entryHandles[index] } : {}) }, entry.id))), visibleExtractions.map((record, index) => (_jsx(MemoryExtractionCard, { record: record, nowClock: nowClock, onOpenPreview: onOpenPreview, onDelete: onDeleteExtraction, ...(extractionHandles?.[index] ? { agentHandle: extractionHandles[index] } : {}) }, record.id)))] })) })] }) }));
|
|
26
33
|
}
|
|
27
34
|
//# sourceMappingURL=MemoryList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryList.js","sourceRoot":"","sources":["../../../../../src/features/memory/react/components/MemoryList.tsx"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,kDAAkD;AAClD,OAAO,EAAE,OAAO,EAAyB,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,sCAAsC,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,UAAU,UAAU,CAAC,EACzB,UAAU,EACV,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,aAAa,EACb,WAAW,EACX,aAAa,EACb,kBAAkB,
|
|
1
|
+
{"version":3,"file":"MemoryList.js","sourceRoot":"","sources":["../../../../../src/features/memory/react/components/MemoryList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,12 @@ export interface MemorySettingsPanelProps {
|
|
|
17
17
|
onOpenAdvanced?: () => void;
|
|
18
18
|
savedMemory: Omit<ComponentProps<typeof MemoryList>, 'sectionRef'>;
|
|
19
19
|
howItWorks: ComponentProps<typeof MemoryHowPanel>;
|
|
20
|
+
/**
|
|
21
|
+
* This panel's own agent handle, published by the host. The segmented view switch, the
|
|
22
|
+
* add/advanced buttons, the master toggle, and both body panels (`MemoryList`/`MemoryHowPanel`)
|
|
23
|
+
* all derive their own `data-agent-*` handle from this ONE base.
|
|
24
|
+
*/
|
|
25
|
+
agentHandle?: string;
|
|
20
26
|
}
|
|
21
|
-
export declare function MemorySettingsPanel({ enabled, onToggleEnabled, topTab, onTopTabChange, onAdd, onOpenAdvanced, savedMemory, howItWorks, }: MemorySettingsPanelProps): import("react").JSX.Element;
|
|
27
|
+
export declare function MemorySettingsPanel({ enabled, onToggleEnabled, topTab, onTopTabChange, onAdd, onOpenAdvanced, savedMemory, howItWorks, agentHandle, }: MemorySettingsPanelProps): import("react").JSX.Element;
|
|
22
28
|
//# sourceMappingURL=MemorySettingsPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemorySettingsPanel.d.ts","sourceRoot":"","sources":["../../../../../src/features/memory/react/components/MemorySettingsPanel.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MemorySettingsPanel.d.ts","sourceRoot":"","sources":["../../../../../src/features/memory/react/components/MemorySettingsPanel.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAI5C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,mDAAmD;IACnD,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C;;2CAEuC;IACvC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IACnE,UAAU,EAAE,cAAc,CAAC,OAAO,cAAc,CAAC,CAAC;IAClD;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,eAAe,EACf,MAAM,EACN,cAAc,EACd,KAAK,EACL,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,GACZ,EAAE,wBAAwB,+BAqF1B"}
|
|
@@ -16,15 +16,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
16
16
|
// a hand-duplicated prop list, so this file can't drift out of sync with
|
|
17
17
|
// either component's real signature.
|
|
18
18
|
import { useRef } from 'react';
|
|
19
|
+
import { agentHandleProps, agentSubHandle } from '@jini-ai/agentic';
|
|
19
20
|
import { Icon } from '../../../../react/components/Icon.js';
|
|
20
21
|
import { useT } from '../../../i18n/index.js';
|
|
21
22
|
import { MemoryHowPanel } from './MemoryHowPanel.js';
|
|
22
23
|
import { MemoryList } from './MemoryList.js';
|
|
23
|
-
export function MemorySettingsPanel({ enabled, onToggleEnabled, topTab, onTopTabChange, onAdd, onOpenAdvanced, savedMemory, howItWorks, }) {
|
|
24
|
+
export function MemorySettingsPanel({ enabled, onToggleEnabled, topTab, onTopTabChange, onAdd, onOpenAdvanced, savedMemory, howItWorks, agentHandle, }) {
|
|
24
25
|
const t = useT();
|
|
25
26
|
// Scroll target for the saved-memory section; nothing outside this panel
|
|
26
27
|
// needs to reach it, so it's owned here rather than threaded through props.
|
|
27
28
|
const sectionRef = useRef(null);
|
|
28
|
-
return (_jsxs("div", { className: "memory-settings-panel", children: [_jsxs("section", { className: "memory-panel-head-card", children: [_jsxs("div", { className: "memory-panel-head-copy", children: [_jsx("h4", { children: t('Memory') }), _jsx("p", { className: "hint", children: t('Control whether saved facts, preferences, and project context are reused in future chats.') })] }), _jsxs("div", { className: "memory-panel-head-controls", children: [_jsxs("div", { className: "jini-seg-control memory-panel-seg", role: "tablist", "aria-label": t('Memory view'), style: { '--seg-cols': 2 }, children: [_jsx("button", { type: "button", role: "tab", "aria-selected": topTab === 'memories', className: 'jini-seg-btn' + (topTab === 'memories' ? ' active' : ''), onClick: () => onTopTabChange('memories'), children: _jsx("span", { className: "jini-seg-title", children: t('Memories') }) }), _jsx("button", { type: "button", role: "tab", "aria-selected": topTab === 'how', className: 'jini-seg-btn' + (topTab === 'how' ? ' active' : ''), onClick: () => onTopTabChange('how'), children: _jsx("span", { className: "jini-seg-title", children: t('How it works') }) })] }), _jsx("button", { type: "button", className: "memory-icon-btn", onClick: onAdd, disabled: !onAdd, "aria-label": t('Add memory'), title: t('Add memory'), children: _jsx(Icon, { name: "plus", size: 14 }) }), _jsx("button", { type: "button", className: "memory-icon-btn", onClick: onOpenAdvanced, disabled: !onOpenAdvanced, "aria-label": t('Advanced'), title: t('Advanced'), children: _jsx(Icon, { name: "settings", size: 14 }) }), _jsxs("label", { className: "toggle-switch memory-panel-master-toggle", title: enabled ? t('On') : t('Off'), children: [_jsx("input", { type: "checkbox", "aria-label": t('Enable memory'), checked: enabled, onChange: (event) => onToggleEnabled(event.target.checked) }), _jsx("span", { className: "toggle-slider" })] })] })] }), topTab === 'memories' ? _jsx(MemoryList, { sectionRef: sectionRef, ...savedMemory }) : _jsx(MemoryHowPanel, { ...howItWorks })] }));
|
|
29
|
+
return (_jsxs("div", { className: "memory-settings-panel", children: [_jsxs("section", { className: "memory-panel-head-card", children: [_jsxs("div", { className: "memory-panel-head-copy", children: [_jsx("h4", { children: t('Memory') }), _jsx("p", { className: "hint", children: t('Control whether saved facts, preferences, and project context are reused in future chats.') })] }), _jsxs("div", { className: "memory-panel-head-controls", children: [_jsxs("div", { className: "jini-seg-control memory-panel-seg", role: "tablist", "aria-label": t('Memory view'), style: { '--seg-cols': 2 }, children: [_jsx("button", { type: "button", role: "tab", "aria-selected": topTab === 'memories', className: 'jini-seg-btn' + (topTab === 'memories' ? ' active' : ''), onClick: () => onTopTabChange('memories'), ...agentHandleProps(agentHandle, { action: 'view-memories', role: 'button', label: t('Memories') }), children: _jsx("span", { className: "jini-seg-title", children: t('Memories') }) }), _jsx("button", { type: "button", role: "tab", "aria-selected": topTab === 'how', className: 'jini-seg-btn' + (topTab === 'how' ? ' active' : ''), onClick: () => onTopTabChange('how'), ...agentHandleProps(agentHandle, { action: 'view-how', role: 'button', label: t('How it works') }), children: _jsx("span", { className: "jini-seg-title", children: t('How it works') }) })] }), _jsx("button", { type: "button", className: "memory-icon-btn", onClick: onAdd, disabled: !onAdd, "aria-label": t('Add memory'), title: t('Add memory'), ...agentHandleProps(agentHandle, { action: 'add', role: 'button', label: t('Add memory') }), children: _jsx(Icon, { name: "plus", size: 14 }) }), _jsx("button", { type: "button", className: "memory-icon-btn", onClick: onOpenAdvanced, disabled: !onOpenAdvanced, "aria-label": t('Advanced'), title: t('Advanced'), ...agentHandleProps(agentHandle, { action: 'advanced', role: 'button', label: t('Advanced') }), children: _jsx(Icon, { name: "settings", size: 14 }) }), _jsxs("label", { className: "toggle-switch memory-panel-master-toggle", title: enabled ? t('On') : t('Off'), children: [_jsx("input", { type: "checkbox", "aria-label": t('Enable memory'), checked: enabled, onChange: (event) => onToggleEnabled(event.target.checked), ...agentHandleProps(agentHandle, { action: 'enabled', role: 'checkbox', label: t('Enable memory') }) }), _jsx("span", { className: "toggle-slider" })] })] })] }), topTab === 'memories' ? (_jsx(MemoryList, { sectionRef: sectionRef, ...savedMemory, ...(agentHandle ? { agentHandle: agentSubHandle(agentHandle, 'saved') } : {}) })) : (_jsx(MemoryHowPanel, { ...howItWorks, ...(agentHandle ? { agentHandle: agentSubHandle(agentHandle, 'how') } : {}) }))] }));
|
|
29
30
|
}
|
|
30
31
|
//# sourceMappingURL=MemorySettingsPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemorySettingsPanel.js","sourceRoot":"","sources":["../../../../../src/features/memory/react/components/MemorySettingsPanel.tsx"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,qEAAqE;AACrE,2EAA2E;AAC3E,8EAA8E;AAC9E,QAAQ;AACR,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,yEAAyE;AACzE,qCAAqC;AACrC,OAAO,EAAE,MAAM,EAAsB,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,IAAI,EAAE,MAAM,sCAAsC,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"MemorySettingsPanel.js","sourceRoot":"","sources":["../../../../../src/features/memory/react/components/MemorySettingsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ export interface NotificationsTabProps {
|
|
|
22
22
|
testNotificationTitle?: string;
|
|
23
23
|
testNotificationBody?: string;
|
|
24
24
|
labels?: NotificationsTabLabels;
|
|
25
|
+
/** This tab's own agent handle — see other tabs' `agentHandle` doc for the split. */
|
|
26
|
+
agentHandle?: string;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* Completion-sound toggle/picker + browser desktop-notification permission
|
|
@@ -44,5 +46,5 @@ export interface NotificationsTabProps {
|
|
|
44
46
|
* 'sent'/'failed' rather than carrying unreachable members (see its own doc
|
|
45
47
|
* comment in this feature's `rules.ts`).
|
|
46
48
|
*/
|
|
47
|
-
export declare function NotificationsTab({ preferences, onChange, testNotificationTitle, testNotificationBody, labels }: NotificationsTabProps): import("react").JSX.Element;
|
|
49
|
+
export declare function NotificationsTab({ preferences, onChange, testNotificationTitle, testNotificationBody, labels, agentHandle, }: NotificationsTabProps): import("react").JSX.Element;
|
|
48
50
|
//# sourceMappingURL=NotificationsTab.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationsTab.d.ts","sourceRoot":"","sources":["../../../../../src/features/notifications/react/components/NotificationsTab.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NotificationsTab.d.ts","sourceRoot":"","sources":["../../../../../src/features/notifications/react/components/NotificationsTab.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,wBAAwB,CAAC;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC,KAAK,IAAI,CAAC;IAC7D;uDACmD;IACnD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,QAAQ,EACR,qBAAqB,EACrB,oBAAoB,EACpB,MAAM,EACN,WAAW,GACZ,EAAE,qBAAqB,+BA8LvB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
+
import { agentHandleProps, agentSubHandle, buildAgentListHandles } from '@jini-ai/agentic';
|
|
3
4
|
import { useT } from '../../../i18n/index.js';
|
|
4
5
|
import { FAILURE_SOUNDS, SUCCESS_SOUNDS, notificationPermission, playSound, requestNotificationPermission, showCompletionNotification, } from '../../../../utils/notifications.js';
|
|
5
6
|
import { testStatusLabel } from '../../rules.js';
|
|
@@ -24,8 +25,14 @@ import { testStatusLabel } from '../../rules.js';
|
|
|
24
25
|
* 'sent'/'failed' rather than carrying unreachable members (see its own doc
|
|
25
26
|
* comment in this feature's `rules.ts`).
|
|
26
27
|
*/
|
|
27
|
-
export function NotificationsTab({ preferences, onChange, testNotificationTitle, testNotificationBody, labels }) {
|
|
28
|
+
export function NotificationsTab({ preferences, onChange, testNotificationTitle, testNotificationBody, labels, agentHandle, }) {
|
|
28
29
|
const t = useT();
|
|
30
|
+
const successSoundHandles = agentHandle
|
|
31
|
+
? buildAgentListHandles(agentSubHandle(agentHandle, 'success-sound'), SUCCESS_SOUNDS.map((s) => s.id))
|
|
32
|
+
: undefined;
|
|
33
|
+
const failureSoundHandles = agentHandle
|
|
34
|
+
? buildAgentListHandles(agentSubHandle(agentHandle, 'failure-sound'), FAILURE_SOUNDS.map((s) => s.id))
|
|
35
|
+
: undefined;
|
|
29
36
|
const [permission, setPermission] = useState(() => notificationPermission());
|
|
30
37
|
const [testStatus, setTestStatus] = useState(null);
|
|
31
38
|
const completionSoundTitle = labels?.completionSoundTitle ?? t('Completion sound');
|
|
@@ -69,16 +76,16 @@ export function NotificationsTab({ preferences, onChange, testNotificationTitle,
|
|
|
69
76
|
// outcome here rather than getting their own dead states.
|
|
70
77
|
setTestStatus(result === 'shown' ? 'sent' : 'failed');
|
|
71
78
|
};
|
|
72
|
-
return (_jsxs("section", { className: "jini-settings-section jini-settings-notifications", children: [_jsxs("div", { className: "jini-settings-subsection", children: [_jsxs("div", { className: "jini-settings-notify-card", children: [_jsxs("div", { className: "jini-settings-notify-card-header", children: [_jsx("h4", { children: completionSoundTitle }), _jsx("div", { className: "jini-seg-control", role: "group", "aria-label": completionSoundTitle, style: { '--seg-cols': 1 }, children: _jsx("button", { type: "button", className: 'jini-seg-btn' + (preferences.soundEnabled ? ' active' : ''), "aria-pressed": preferences.soundEnabled, "aria-label": completionSoundTitle, onClick: toggleSound, children: _jsx("span", { className: "jini-seg-title", children: preferences.soundEnabled ? activeLabel : offLabel }) }) })] }), _jsx("p", { className: "jini-hint", children: completionSoundHint })] }), preferences.soundEnabled ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "jini-settings-field", children: [_jsx("label", { children: successSoundLabel }), _jsx("div", { className: "jini-seg-control", role: "group", "aria-label": successSoundLabel, style: { '--seg-cols': SUCCESS_SOUNDS.length }, children: SUCCESS_SOUNDS.map((sound) => (_jsx("button", { type: "button", className: 'jini-seg-btn' + (preferences.successSoundId === sound.id ? ' active' : ''), "aria-pressed": preferences.successSoundId === sound.id, onClick: () => {
|
|
79
|
+
return (_jsxs("section", { className: "jini-settings-section jini-settings-notifications", children: [_jsxs("div", { className: "jini-settings-subsection", children: [_jsxs("div", { className: "jini-settings-notify-card", children: [_jsxs("div", { className: "jini-settings-notify-card-header", children: [_jsx("h4", { children: completionSoundTitle }), _jsx("div", { className: "jini-seg-control", role: "group", "aria-label": completionSoundTitle, style: { '--seg-cols': 1 }, children: _jsx("button", { type: "button", className: 'jini-seg-btn' + (preferences.soundEnabled ? ' active' : ''), "aria-pressed": preferences.soundEnabled, "aria-label": completionSoundTitle, onClick: toggleSound, ...agentHandleProps(agentHandle, { action: 'sound-toggle', role: 'button', label: completionSoundTitle }), children: _jsx("span", { className: "jini-seg-title", children: preferences.soundEnabled ? activeLabel : offLabel }) }) })] }), _jsx("p", { className: "jini-hint", children: completionSoundHint })] }), preferences.soundEnabled ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "jini-settings-field", children: [_jsx("label", { children: successSoundLabel }), _jsx("div", { className: "jini-seg-control", role: "group", "aria-label": successSoundLabel, style: { '--seg-cols': SUCCESS_SOUNDS.length }, children: SUCCESS_SOUNDS.map((sound, index) => (_jsx("button", { type: "button", className: 'jini-seg-btn' + (preferences.successSoundId === sound.id ? ' active' : ''), "aria-pressed": preferences.successSoundId === sound.id, onClick: () => {
|
|
73
80
|
onChange({ successSoundId: sound.id });
|
|
74
81
|
playSound(sound.id);
|
|
75
|
-
}, children: _jsx("span", { className: "jini-seg-title", children: t(sound.labelKey) }) }, sound.id))) })] }), _jsxs("div", { className: "jini-settings-field", children: [_jsx("label", { children: failureSoundLabel }), _jsx("div", { className: "jini-seg-control", role: "group", "aria-label": failureSoundLabel, style: { '--seg-cols': FAILURE_SOUNDS.length }, children: FAILURE_SOUNDS.map((sound) => (_jsx("button", { type: "button", className: 'jini-seg-btn' + (preferences.failureSoundId === sound.id ? ' active' : ''), "aria-pressed": preferences.failureSoundId === sound.id, onClick: () => {
|
|
82
|
+
}, ...agentHandleProps(successSoundHandles?.[index], { role: 'button', label: t(sound.labelKey) }), children: _jsx("span", { className: "jini-seg-title", children: t(sound.labelKey) }) }, sound.id))) })] }), _jsxs("div", { className: "jini-settings-field", children: [_jsx("label", { children: failureSoundLabel }), _jsx("div", { className: "jini-seg-control", role: "group", "aria-label": failureSoundLabel, style: { '--seg-cols': FAILURE_SOUNDS.length }, children: FAILURE_SOUNDS.map((sound, index) => (_jsx("button", { type: "button", className: 'jini-seg-btn' + (preferences.failureSoundId === sound.id ? ' active' : ''), "aria-pressed": preferences.failureSoundId === sound.id, onClick: () => {
|
|
76
83
|
onChange({ failureSoundId: sound.id });
|
|
77
84
|
playSound(sound.id);
|
|
78
|
-
}, children: _jsx("span", { className: "jini-seg-title", children: t(sound.labelKey) }) }, sound.id))) })] })] })) : null] }), _jsxs("div", { className: "jini-settings-subsection", children: [_jsxs("div", { className: "jini-settings-notify-card", children: [_jsxs("div", { className: "jini-settings-notify-card-header", children: [_jsx("h4", { children: desktopTitle }), _jsx("div", { className: "jini-seg-control", role: "group", "aria-label": desktopTitle, style: { '--seg-cols': 1 }, children: _jsx("button", { type: "button", className: 'jini-seg-btn' + (preferences.desktopEnabled ? ' active' : ''), "aria-pressed": preferences.desktopEnabled, "aria-label": desktopTitle, disabled: permission === 'unsupported', onClick: () => {
|
|
85
|
+
}, ...agentHandleProps(failureSoundHandles?.[index], { role: 'button', label: t(sound.labelKey) }), children: _jsx("span", { className: "jini-seg-title", children: t(sound.labelKey) }) }, sound.id))) })] })] })) : null] }), _jsxs("div", { className: "jini-settings-subsection", children: [_jsxs("div", { className: "jini-settings-notify-card", children: [_jsxs("div", { className: "jini-settings-notify-card-header", children: [_jsx("h4", { children: desktopTitle }), _jsx("div", { className: "jini-seg-control", role: "group", "aria-label": desktopTitle, style: { '--seg-cols': 1 }, children: _jsx("button", { type: "button", className: 'jini-seg-btn' + (preferences.desktopEnabled ? ' active' : ''), "aria-pressed": preferences.desktopEnabled, "aria-label": desktopTitle, disabled: permission === 'unsupported', onClick: () => {
|
|
79
86
|
void toggleDesktop();
|
|
80
|
-
}, children: _jsx("span", { className: "jini-seg-title", children: preferences.desktopEnabled ? activeLabel : offLabel }) }) })] }), _jsx("p", { className: "jini-hint", children: desktopHint })] }), permission === 'unsupported' ? _jsx("p", { className: "jini-hint", children: desktopUnsupported }) : null, permission === 'denied' ? _jsx("p", { className: "jini-hint", children: desktopBlocked }) : null, preferences.desktopEnabled && permission === 'granted' ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "jini-button jini-button-ghost", onClick: () => {
|
|
87
|
+
}, ...agentHandleProps(agentHandle, { action: 'desktop-toggle', role: 'button', label: desktopTitle }), children: _jsx("span", { className: "jini-seg-title", children: preferences.desktopEnabled ? activeLabel : offLabel }) }) })] }), _jsx("p", { className: "jini-hint", children: desktopHint })] }), permission === 'unsupported' ? _jsx("p", { className: "jini-hint", children: desktopUnsupported }) : null, permission === 'denied' ? _jsx("p", { className: "jini-hint", children: desktopBlocked }) : null, preferences.desktopEnabled && permission === 'granted' ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "jini-button jini-button-ghost", onClick: () => {
|
|
81
88
|
void sendTestNotification();
|
|
82
|
-
}, children: sendTestLabel }), testStatus ? (_jsx("p", { className: "jini-hint", role: "status", children: testStatusLabel(testStatus, { testSentLabel, testFailedLabel }) })) : null] })) : null] })] }));
|
|
89
|
+
}, ...agentHandleProps(agentHandle, { action: 'send-test', role: 'button', label: sendTestLabel }), children: sendTestLabel }), testStatus ? (_jsx("p", { className: "jini-hint", role: "status", children: testStatusLabel(testStatus, { testSentLabel, testFailedLabel }) })) : null] })) : null] })] }));
|
|
83
90
|
}
|
|
84
91
|
//# sourceMappingURL=NotificationsTab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationsTab.js","sourceRoot":"","sources":["../../../../../src/features/notifications/react/components/NotificationsTab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,SAAS,EACT,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAmB,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"NotificationsTab.js","sourceRoot":"","sources":["../../../../../src/features/notifications/react/components/NotificationsTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,14 @@ export interface PrivacyTabProps {
|
|
|
20
20
|
labels?: PrivacyTabLabels;
|
|
21
21
|
/** Injectable clock, for deterministic tests. Defaults to `Date.now`. */
|
|
22
22
|
now?: () => number;
|
|
23
|
+
/**
|
|
24
|
+
* This tab's own agent handle, published by the host. Every interactive control below derives
|
|
25
|
+
* its own `data-agent-*` handle from this ONE base via `agentHandleProps` — see that function's
|
|
26
|
+
* doc in `@jini-ai/agentic` for the "host names a component, the component names its own parts"
|
|
27
|
+
* split this generalizes. Omit and no `data-agent-*` markup is emitted at all — additive, never a
|
|
28
|
+
* behavior change for a host that doesn't pass it.
|
|
29
|
+
*/
|
|
30
|
+
agentHandle?: string;
|
|
23
31
|
}
|
|
24
32
|
/**
|
|
25
33
|
* Telemetry consent card (share/decline + two per-category toggles) over a
|
|
@@ -30,5 +38,5 @@ export interface PrivacyTabProps {
|
|
|
30
38
|
* `ADS-memory/reports/jini-port/recon/r6-god-component-internals.md` §1.3; this task is
|
|
31
39
|
* the first full verification (see `packages/ui/source-map.md`).
|
|
32
40
|
*/
|
|
33
|
-
export declare function PrivacyTab({ state, onChange, labels, now }: PrivacyTabProps): import("react").JSX.Element;
|
|
41
|
+
export declare function PrivacyTab({ state, onChange, labels, now, agentHandle }: PrivacyTabProps): import("react").JSX.Element;
|
|
34
42
|
//# sourceMappingURL=PrivacyTab.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrivacyTab.d.ts","sourceRoot":"","sources":["../../../../../src/features/privacy/react/components/PrivacyTab.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PrivacyTab.d.ts","sourceRoot":"","sources":["../../../../../src/features/privacy/react/components/PrivacyTab.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAc,EAAE,WAAW,EAAE,EAAE,eAAe,+BAiHnG"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { agentHandleProps, agentSubHandle } from '@jini-ai/agentic';
|
|
2
3
|
import { useT } from '../../../i18n/index.js';
|
|
3
4
|
import { Icon } from '../../../../react/components/Icon.js';
|
|
4
5
|
import { hasMadeConsentDecision, isSharingEnabled, nextStateForDeclineAll, nextStateForDeleteMyData, nextStateForShareAll, nextStateForTelemetryPatch, } from '../../rules.js';
|
|
5
|
-
function ToggleRow({ label, hint, checked, onChange }) {
|
|
6
|
-
return (_jsxs("button", { type: "button", className: `jini-toggle-row${checked ? ' on' : ''}`, onClick: () => onChange(!checked), "aria-pressed": checked, children: [_jsxs("div", { className: "jini-toggle-row-text", children: [_jsx("span", { className: "jini-toggle-row-label", children: label }), _jsx("span", { className: "jini-toggle-row-hint", children: hint })] }), _jsx("span", { className: "jini-toggle-row-switch", "aria-hidden": true })] }));
|
|
6
|
+
function ToggleRow({ label, hint, checked, onChange, agentHandle }) {
|
|
7
|
+
return (_jsxs("button", { type: "button", className: `jini-toggle-row${checked ? ' on' : ''}`, onClick: () => onChange(!checked), "aria-pressed": checked, ...agentHandleProps(agentHandle, { role: 'checkbox', label }), children: [_jsxs("div", { className: "jini-toggle-row-text", children: [_jsx("span", { className: "jini-toggle-row-label", children: label }), _jsx("span", { className: "jini-toggle-row-hint", children: hint })] }), _jsx("span", { className: "jini-toggle-row-switch", "aria-hidden": true })] }));
|
|
7
8
|
}
|
|
8
9
|
/**
|
|
9
10
|
* Telemetry consent card (share/decline + two per-category toggles) over a
|
|
@@ -14,7 +15,7 @@ function ToggleRow({ label, hint, checked, onChange }) {
|
|
|
14
15
|
* `ADS-memory/reports/jini-port/recon/r6-god-component-internals.md` §1.3; this task is
|
|
15
16
|
* the first full verification (see `packages/ui/source-map.md`).
|
|
16
17
|
*/
|
|
17
|
-
export function PrivacyTab({ state, onChange, labels, now = Date.now }) {
|
|
18
|
+
export function PrivacyTab({ state, onChange, labels, now = Date.now, agentHandle }) {
|
|
18
19
|
const t = useT();
|
|
19
20
|
const decided = hasMadeConsentDecision(state);
|
|
20
21
|
const sharing = decided ? isSharingEnabled(state.telemetry) : undefined;
|
|
@@ -31,6 +32,6 @@ export function PrivacyTab({ state, onChange, labels, now = Date.now }) {
|
|
|
31
32
|
const installationIdHint = labels?.installationIdHint ?? t('An anonymous id used to group your shared data.');
|
|
32
33
|
const optedOutLabel = labels?.optedOutLabel ?? t('Not sharing');
|
|
33
34
|
const deleteMyDataLabel = labels?.deleteMyDataLabel ?? t('Delete my data');
|
|
34
|
-
return (_jsxs("section", { className: "jini-settings-section jini-settings-privacy", children: [_jsxs("div", { className: "jini-settings-subsection", children: [_jsx("div", { className: "jini-section-head", children: _jsxs("div", { children: [_jsx("h4", { children: consentKicker }), _jsx("p", { className: "jini-hint", children: consentLead })] }) }), _jsxs("dl", { className: "jini-settings-privacy-disclosure", children: [_jsxs("div", { children: [_jsx("dt", { children: metricsLabel }), _jsx("dd", { children: metricsHint })] }), _jsxs("div", { children: [_jsx("dt", { children: contentLabel }), _jsx("dd", { children: contentHint })] })] }), _jsx("p", { className: "jini-hint", children: consentFooter }), _jsxs("div", { className: "jini-privacy-consent-actions", role: "group", "aria-label": consentKicker, children: [_jsx("button", { type: "button", className: `jini-privacy-consent-action${sharing === false ? ' is-active' : ''}`, "aria-pressed": sharing === false, onClick: () => onChange(nextStateForDeclineAll(state, now())), children: declineLabel }), _jsx("button", { type: "button", className: `jini-privacy-consent-action jini-privacy-consent-action--primary${sharing === true ? ' is-active' : ''}`, "aria-pressed": sharing === true, onClick: () => onChange(nextStateForShareAll(state, now())), children: shareLabel })] })] }), decided ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "jini-settings-privacy-toggles", children: [_jsx(ToggleRow, { label: metricsLabel, hint: metricsHint, checked: state.telemetry.metrics === true, onChange: (v) => onChange(nextStateForTelemetryPatch(state, { metrics: v }, now())) }), _jsx(ToggleRow, { label: contentLabel, hint: contentHint, checked: state.telemetry.content === true, onChange: (v) => onChange(nextStateForTelemetryPatch(state, { content: v }, now())) })] }), _jsxs("div", { className: "jini-settings-subsection", children: [_jsx("div", { className: "jini-section-head", children: _jsxs("div", { children: [_jsx("h4", { children: installationIdLabel }), _jsx("p", { className: "jini-hint", children: installationIdHint })] }) }), _jsx("div", { className: "jini-settings-field", children: _jsx("input", { type: "text", readOnly: true, value: state.installationId ?? optedOutLabel, "aria-label": installationIdLabel }) }), _jsxs("button", { type: "button", className: "jini-button jini-button-ghost", onClick: () => onChange(nextStateForDeleteMyData(state, now())), children: [_jsx(Icon, { name: "trash", size: 13 }), _jsx("span", { children: deleteMyDataLabel })] })] })] })) : null] }));
|
|
35
|
+
return (_jsxs("section", { className: "jini-settings-section jini-settings-privacy", children: [_jsxs("div", { className: "jini-settings-subsection", children: [_jsx("div", { className: "jini-section-head", children: _jsxs("div", { children: [_jsx("h4", { children: consentKicker }), _jsx("p", { className: "jini-hint", children: consentLead })] }) }), _jsxs("dl", { className: "jini-settings-privacy-disclosure", children: [_jsxs("div", { children: [_jsx("dt", { children: metricsLabel }), _jsx("dd", { children: metricsHint })] }), _jsxs("div", { children: [_jsx("dt", { children: contentLabel }), _jsx("dd", { children: contentHint })] })] }), _jsx("p", { className: "jini-hint", children: consentFooter }), _jsxs("div", { className: "jini-privacy-consent-actions", role: "group", "aria-label": consentKicker, children: [_jsx("button", { type: "button", className: `jini-privacy-consent-action${sharing === false ? ' is-active' : ''}`, "aria-pressed": sharing === false, onClick: () => onChange(nextStateForDeclineAll(state, now())), ...agentHandleProps(agentHandle, { action: 'decline', role: 'button', label: declineLabel }), children: declineLabel }), _jsx("button", { type: "button", className: `jini-privacy-consent-action jini-privacy-consent-action--primary${sharing === true ? ' is-active' : ''}`, "aria-pressed": sharing === true, onClick: () => onChange(nextStateForShareAll(state, now())), ...agentHandleProps(agentHandle, { action: 'share', role: 'button', label: shareLabel }), children: shareLabel })] })] }), decided ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "jini-settings-privacy-toggles", children: [_jsx(ToggleRow, { label: metricsLabel, hint: metricsHint, checked: state.telemetry.metrics === true, onChange: (v) => onChange(nextStateForTelemetryPatch(state, { metrics: v }, now())), ...(agentHandle ? { agentHandle: agentSubHandle(agentHandle, 'metrics-toggle') } : {}) }), _jsx(ToggleRow, { label: contentLabel, hint: contentHint, checked: state.telemetry.content === true, onChange: (v) => onChange(nextStateForTelemetryPatch(state, { content: v }, now())), ...(agentHandle ? { agentHandle: agentSubHandle(agentHandle, 'content-toggle') } : {}) })] }), _jsxs("div", { className: "jini-settings-subsection", children: [_jsx("div", { className: "jini-section-head", children: _jsxs("div", { children: [_jsx("h4", { children: installationIdLabel }), _jsx("p", { className: "jini-hint", children: installationIdHint })] }) }), _jsx("div", { className: "jini-settings-field", children: _jsx("input", { type: "text", readOnly: true, value: state.installationId ?? optedOutLabel, "aria-label": installationIdLabel, ...agentHandleProps(agentHandle, { action: 'installation-id', role: 'field', label: installationIdLabel }) }) }), _jsxs("button", { type: "button", className: "jini-button jini-button-ghost", onClick: () => onChange(nextStateForDeleteMyData(state, now())), ...agentHandleProps(agentHandle, { action: 'delete-my-data', role: 'button', label: deleteMyDataLabel }), children: [_jsx(Icon, { name: "trash", size: 13 }), _jsx("span", { children: deleteMyDataLabel })] })] })] })) : null] }));
|
|
35
36
|
}
|
|
36
37
|
//# sourceMappingURL=PrivacyTab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrivacyTab.js","sourceRoot":"","sources":["../../../../../src/features/privacy/react/components/PrivacyTab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,sCAAsC,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"PrivacyTab.js","sourceRoot":"","sources":["../../../../../src/features/privacy/react/components/PrivacyTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import type { TabbedDialogProps, TabbedDialogTab } from '../../../../tabbed-dial
|
|
|
8
8
|
export type SettingsDialogTab<TId extends string = string> = TabbedDialogTab<TId>;
|
|
9
9
|
/**
|
|
10
10
|
* Alias of `TabbedDialogProps` — see that interface for the field-by-field docs. Kept as its
|
|
11
|
-
* own name (rather than inlining `TabbedDialogProps` at every
|
|
11
|
+
* own name (rather than inlining `TabbedDialogProps` at every host call site) purely for
|
|
12
12
|
* call-site continuity; `SettingsDialogShell` adds no fields of its own.
|
|
13
13
|
*/
|
|
14
14
|
export type SettingsDialogShellProps<T extends SettingsDialogTab = SettingsDialogTab> = TabbedDialogProps<T>;
|
|
@@ -383,6 +383,59 @@ a.jini-button {
|
|
|
383
383
|
color: var(--jini-text-strong);
|
|
384
384
|
}
|
|
385
385
|
|
|
386
|
+
/* Base URL + Max tokens on one line (owner ruling, 2026-09-02). A WRAPPING flex row rather than a
|
|
387
|
+
two-column grid, and the responsiveness is entirely in these two declarations: `flex: 1 1 210px`
|
|
388
|
+
is what makes each field claim half a wide card and the whole of a narrow one, and `flex-wrap`
|
|
389
|
+
is what lets the second drop below the first instead of both being squeezed. Container-driven,
|
|
390
|
+
with no media query — this card renders inside a settings modal, a full-width admin page, and a
|
|
391
|
+
phone, and a viewport breakpoint would be answering the wrong question in the first two.
|
|
392
|
+
|
|
393
|
+
`align-items: start` so a field with a two-line hint (an invalid base URL) does not stretch its
|
|
394
|
+
neighbour's input to match. */
|
|
395
|
+
.jini-byok-field-row {
|
|
396
|
+
display: flex;
|
|
397
|
+
flex-wrap: wrap;
|
|
398
|
+
align-items: start;
|
|
399
|
+
gap: 14px;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.jini-byok-field-row > .jini-field {
|
|
403
|
+
/* 210px let the row keep Base URL and Max tokens side by side well before either had real room
|
|
404
|
+
(owner-reported, 2026-09-02). The longest realistic default Base URL preset
|
|
405
|
+
('https://generativelanguage.googleapis.com', `constants.ts`) is 41 characters, which at
|
|
406
|
+
`.jini-input`'s 13px font needs roughly 300px (glyphs + the input's 20px horizontal padding
|
|
407
|
+
and 1px border each side) before it displays without visually truncating — so the row now
|
|
408
|
+
requires that much per field before it stays on one line; below it, Max tokens drops below
|
|
409
|
+
Base URL instead of squeezing both into a sliver. */
|
|
410
|
+
flex: 1 1 320px;
|
|
411
|
+
min-width: 0;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/* The Model control with "Test connection" beside it, same wrapping rule as the field row above so
|
|
415
|
+
the button drops below the field on a narrow card.
|
|
416
|
+
|
|
417
|
+
`align-items: flex-end` is what puts the button on the input's own line rather than level with the
|
|
418
|
+
field's "Model" caption: the label is a flex column of [caption, control], so its bottom edge IS
|
|
419
|
+
the control's bottom edge. That holds only because both status lines live outside this row — a
|
|
420
|
+
hint inside the label would extend it downward and take the button with it. */
|
|
421
|
+
.jini-byok-model-row {
|
|
422
|
+
display: flex;
|
|
423
|
+
flex-wrap: wrap;
|
|
424
|
+
align-items: flex-end;
|
|
425
|
+
gap: 10px;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
.jini-byok-model-row > .jini-field {
|
|
429
|
+
flex: 1 1 210px;
|
|
430
|
+
min-width: 0;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.jini-byok-model-row > .jini-byok-test-btn {
|
|
434
|
+
flex: 0 0 auto;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/* Now the probe's RESULT line only — the button itself moved up into `.jini-byok-model-row`. Kept as
|
|
438
|
+
a row rather than a bare span so a future second status can sit beside this one. */
|
|
386
439
|
.jini-byok-test-row {
|
|
387
440
|
display: flex;
|
|
388
441
|
align-items: center;
|
|
@@ -4275,6 +4328,7 @@ button.connector-action.is-loading { cursor: wait; }
|
|
|
4275
4328
|
padding: 5px 10px;
|
|
4276
4329
|
font: inherit;
|
|
4277
4330
|
font-size: 12px;
|
|
4331
|
+
color: var(--jini-text);
|
|
4278
4332
|
background: var(--jini-bg-panel);
|
|
4279
4333
|
border: 1px solid var(--jini-border);
|
|
4280
4334
|
border-radius: var(--jini-radius-sm);
|
|
@@ -29,11 +29,13 @@ export interface SkillDraftFormProps {
|
|
|
29
29
|
onCancel: () => void;
|
|
30
30
|
onSubmit: () => void;
|
|
31
31
|
labels?: SkillDraftFormLabels | undefined;
|
|
32
|
+
/** This form's own agent handle — see `SkillsTab`'s `agentHandle` doc. */
|
|
33
|
+
agentHandle?: string;
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* The create/edit form for one skill — shared between the top-of-list
|
|
35
37
|
* "New skill" panel and an expanded row's inline edit. Origin:
|
|
36
38
|
* `SkillDraftForm` in `SkillsSection.tsx`.
|
|
37
39
|
*/
|
|
38
|
-
export declare function SkillDraftForm({ heading, subheading, draft, onDraftChange, error, saving, isEdit, isBuiltInOverride, onCancel, onSubmit, labels, }: SkillDraftFormProps): import("react").JSX.Element;
|
|
40
|
+
export declare function SkillDraftForm({ heading, subheading, draft, onDraftChange, error, saving, isEdit, isBuiltInOverride, onCancel, onSubmit, labels, agentHandle, }: SkillDraftFormProps): import("react").JSX.Element;
|
|
39
41
|
//# sourceMappingURL=SkillDraftForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillDraftForm.d.ts","sourceRoot":"","sources":["../../../../../src/features/skills/react/components/SkillDraftForm.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SkillDraftForm.d.ts","sourceRoot":"","sources":["../../../../../src/features/skills/react/components/SkillDraftForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGlE,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,KAAK,IAAI,CAAC;IACpE,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC1C,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,KAAK,EACL,aAAa,EACb,KAAK,EACL,MAAM,EACN,MAAM,EACN,iBAAyB,EACzB,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,WAAW,GACZ,EAAE,mBAAmB,+BAiHrB"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { agentHandleProps } from '@jini-ai/agentic';
|
|
2
3
|
import { useT } from '../../../i18n/index.js';
|
|
3
4
|
/**
|
|
4
5
|
* The create/edit form for one skill — shared between the top-of-list
|
|
5
6
|
* "New skill" panel and an expanded row's inline edit. Origin:
|
|
6
7
|
* `SkillDraftForm` in `SkillsSection.tsx`.
|
|
7
8
|
*/
|
|
8
|
-
export function SkillDraftForm({ heading, subheading, draft, onDraftChange, error, saving, isEdit, isBuiltInOverride = false, onCancel, onSubmit, labels, }) {
|
|
9
|
+
export function SkillDraftForm({ heading, subheading, draft, onDraftChange, error, saving, isEdit, isBuiltInOverride = false, onCancel, onSubmit, labels, agentHandle, }) {
|
|
9
10
|
const t = useT();
|
|
10
11
|
const nameLabel = labels?.nameLabel ?? t('Name');
|
|
11
12
|
const namePlaceholder = labels?.namePlaceholder ?? t('my-skill');
|
|
@@ -24,6 +25,6 @@ export function SkillDraftForm({ heading, subheading, draft, onDraftChange, erro
|
|
|
24
25
|
const bodyRequiredError = labels?.bodyRequiredError ?? t('Body is required.');
|
|
25
26
|
const submitLabel = saving ? savingLabel : isEdit ? (isBuiltInOverride ? overrideSaveLabel : saveLabel) : createLabel;
|
|
26
27
|
const errorText = error?.kind === 'name-required' ? nameRequiredError : error?.kind === 'body-required' ? bodyRequiredError : (error?.message ?? null);
|
|
27
|
-
return (_jsxs("div", { className: "jini-settings-subsection jini-skills-draft", "data-testid": isEdit ? 'skills-edit-form' : 'skills-create-form', children: [_jsx("div", { className: "jini-section-head", children: _jsxs("div", { children: [_jsx("h4", { children: heading }), subheading ? _jsx("p", { className: "jini-hint", children: subheading }) : null] }) }), _jsx("div", { className: "jini-settings-field", children: _jsxs("label", { children: [_jsx("span", { children: nameLabel }), _jsx("input", { type: "text", value: draft.name, onChange: (event) => onDraftChange((current) => ({ ...current, name: event.target.value })), placeholder: namePlaceholder, disabled: isEdit })] }) }), _jsx("div", { className: "jini-settings-field", children: _jsxs("label", { children: [_jsx("span", { children: triggersLabel }), _jsx("input", { type: "text", value: draft.triggers, onChange: (event) => onDraftChange((current) => ({ ...current, triggers: event.target.value })), placeholder: triggersPlaceholder })] }) }), _jsx("div", { className: "jini-settings-field", children: _jsxs("label", { children: [_jsx("span", { children: descriptionLabel }), _jsx("textarea", { rows: 2, value: draft.description, onChange: (event) => onDraftChange((current) => ({ ...current, description: event.target.value })), placeholder: descriptionPlaceholder })] }) }), _jsx("div", { className: "jini-settings-field", children: _jsxs("label", { children: [_jsx("span", { children: bodyLabel }), _jsx("textarea", { rows: 14, value: draft.body, onChange: (event) => onDraftChange((current) => ({ ...current, body: event.target.value })), placeholder: bodyPlaceholder })] }) }), errorText ? (_jsx("p", { className: "jini-hint jini-hint-error", role: "alert", children: errorText })) : null, _jsxs("div", { className: "jini-skills-draft-actions", children: [_jsx("button", { type: "button", className: "jini-button jini-button-ghost", onClick: onCancel, disabled: saving, children: cancelLabel }), _jsx("button", { type: "button", className: "jini-button jini-button-primary", onClick: onSubmit, disabled: saving, "data-testid": "skills-save", children: submitLabel })] })] }));
|
|
28
|
+
return (_jsxs("div", { className: "jini-settings-subsection jini-skills-draft", "data-testid": isEdit ? 'skills-edit-form' : 'skills-create-form', children: [_jsx("div", { className: "jini-section-head", children: _jsxs("div", { children: [_jsx("h4", { children: heading }), subheading ? _jsx("p", { className: "jini-hint", children: subheading }) : null] }) }), _jsx("div", { className: "jini-settings-field", children: _jsxs("label", { children: [_jsx("span", { children: nameLabel }), _jsx("input", { type: "text", value: draft.name, onChange: (event) => onDraftChange((current) => ({ ...current, name: event.target.value })), placeholder: namePlaceholder, disabled: isEdit, ...agentHandleProps(agentHandle, { action: 'name', role: 'field', label: nameLabel }) })] }) }), _jsx("div", { className: "jini-settings-field", children: _jsxs("label", { children: [_jsx("span", { children: triggersLabel }), _jsx("input", { type: "text", value: draft.triggers, onChange: (event) => onDraftChange((current) => ({ ...current, triggers: event.target.value })), placeholder: triggersPlaceholder, ...agentHandleProps(agentHandle, { action: 'triggers', role: 'field', label: triggersLabel }) })] }) }), _jsx("div", { className: "jini-settings-field", children: _jsxs("label", { children: [_jsx("span", { children: descriptionLabel }), _jsx("textarea", { rows: 2, value: draft.description, onChange: (event) => onDraftChange((current) => ({ ...current, description: event.target.value })), placeholder: descriptionPlaceholder, ...agentHandleProps(agentHandle, { action: 'description', role: 'field', label: descriptionLabel }) })] }) }), _jsx("div", { className: "jini-settings-field", children: _jsxs("label", { children: [_jsx("span", { children: bodyLabel }), _jsx("textarea", { rows: 14, value: draft.body, onChange: (event) => onDraftChange((current) => ({ ...current, body: event.target.value })), placeholder: bodyPlaceholder, ...agentHandleProps(agentHandle, { action: 'body', role: 'field', label: bodyLabel }) })] }) }), errorText ? (_jsx("p", { className: "jini-hint jini-hint-error", role: "alert", children: errorText })) : null, _jsxs("div", { className: "jini-skills-draft-actions", children: [_jsx("button", { type: "button", className: "jini-button jini-button-ghost", onClick: onCancel, disabled: saving, ...agentHandleProps(agentHandle, { action: 'cancel', role: 'button', label: cancelLabel }), children: cancelLabel }), _jsx("button", { type: "button", className: "jini-button jini-button-primary", onClick: onSubmit, disabled: saving, "data-testid": "skills-save", ...agentHandleProps(agentHandle, { action: 'submit', role: 'button', label: submitLabel }), children: submitLabel })] })] }));
|
|
28
29
|
}
|
|
29
30
|
//# sourceMappingURL=SkillDraftForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillDraftForm.js","sourceRoot":"","sources":["../../../../../src/features/skills/react/components/SkillDraftForm.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"SkillDraftForm.js","sourceRoot":"","sources":["../../../../../src/features/skills/react/components/SkillDraftForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,8 @@ export interface SkillRowProps {
|
|
|
43
43
|
onCancelEdit: () => void;
|
|
44
44
|
onSubmitEdit: () => void;
|
|
45
45
|
labels?: SkillRowLabels | undefined;
|
|
46
|
+
/** This row's own agent handle — `SkillsTab` derives one per skill via `buildAgentListHandles`. */
|
|
47
|
+
agentHandle?: string;
|
|
46
48
|
}
|
|
47
49
|
/**
|
|
48
50
|
* One collapsible skill row: header (enable toggle, name, mode/category/
|
|
@@ -50,5 +52,5 @@ export interface SkillRowProps {
|
|
|
50
52
|
* tree, or an inline edit form, revealed only when expanded. Origin:
|
|
51
53
|
* `SkillRow` in `SkillsSection.tsx`.
|
|
52
54
|
*/
|
|
53
|
-
export declare function SkillRow({ skill, locale, enabled, expanded, editing, body, bodyLoading, files, filesLoading, confirmDelete, confirmBuiltInEdit, draft, draftError, draftSaving, onDraftChange, onToggleExpanded, onToggleEnabled, onStartEdit, onConfirmBuiltInEdit, onCancelBuiltInEdit, onArmDelete, onCancelDelete, onCommitDelete, onCancelEdit, onSubmitEdit, labels, }: SkillRowProps): import("react").JSX.Element;
|
|
55
|
+
export declare function SkillRow({ skill, locale, enabled, expanded, editing, body, bodyLoading, files, filesLoading, confirmDelete, confirmBuiltInEdit, draft, draftError, draftSaving, onDraftChange, onToggleExpanded, onToggleEnabled, onStartEdit, onConfirmBuiltInEdit, onCancelBuiltInEdit, onArmDelete, onCancelDelete, onCommitDelete, onCancelEdit, onSubmitEdit, labels, agentHandle, }: SkillRowProps): import("react").JSX.Element;
|
|
54
56
|
//# sourceMappingURL=SkillRow.d.ts.map
|