@k2b/cloud 0.32.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/_internal/app-presentation.ts +40 -11
- package/src/_internal/define-app.ts +18 -8
- package/src/_internal/page-responses.ts +5 -1
- package/src/_internal/registry.ts +10 -1
- package/src/_internal/widget-declarations.ts +16 -3
- package/src/_internal/widget-settings.ts +93 -0
- package/src/ai/capabilities.ts +8 -5
- package/src/ai/code-source-contracts.ts +17 -2
- package/src/ai/code-source-tools.ts +1 -0
- package/src/ai/default-tools.ts +4 -4
- package/src/ai/memories.ts +48 -1
- package/src/ai/memory-learning.ts +17 -6
- package/src/ai/memory-tool.ts +1 -0
- package/src/ai/migrate.ts +8 -0
- package/src/ai/provider.ts +4 -3
- package/src/ai/resource-refs.ts +35 -3
- package/src/ai/system-prompt.ts +3 -2
- package/src/api/index.ts +2 -0
- package/src/api/mcp.ts +48 -17
- package/src/api/pwa.ts +7 -2
- package/src/api/resource-links.ts +43 -0
- package/src/api/widgets.ts +163 -82
- package/src/browser/CloudResourceSearch.tsx +6 -6
- package/src/browser/command-shortcuts.ts +2 -11
- package/src/browser/navigation-search.ts +4 -1
- package/src/browser/resource-picker.tsx +1 -0
- package/src/browser/resource-search.ts +7 -2
- package/src/browser/widgets.ts +23 -5
- package/src/capabilities/testing.ts +13 -1
- package/src/cli/capabilities.ts +61 -17
- package/src/cli/index.ts +2 -0
- package/src/cli/resource-links.ts +13 -0
- package/src/contracts/app.ts +7 -1
- package/src/contracts/capabilities.ts +25 -5
- package/src/contracts/registry.ts +3 -1
- package/src/contracts/resource-href.ts +7 -0
- package/src/contracts/widgets.ts +80 -6
- package/src/desktop/index.ts +3 -2
- package/src/desktop/solid.tsx +7 -5
- package/src/server/widget-request.ts +34 -5
- package/src/services/app-approval.ts +4 -2
- package/src/services/approvals/index.ts +40 -11
- package/src/services/approvals/list.ts +1 -0
- package/src/services/approvals/migrate.ts +10 -0
- package/src/services/outbox.ts +13 -6
- package/src/services/pdf/markdown.ts +11 -7
- package/src/services/pwa-devices.ts +68 -15
- package/src/shared/ai-platform-prompt.ts +3 -2
- package/src/shared/app-presentation.ts +49 -1
- package/src/shared/index.ts +1 -0
- package/src/shared/markdown/callout-sanitizer.ts +37 -0
- package/src/shared/markdown/index.ts +8 -2
- package/src/shared/theme.ts +41 -20
- package/src/ssr/AnnouncementBanners.tsx +30 -0
- package/src/ssr/AppLaunchpadPanel.tsx +2 -2
- package/src/ssr/CloudShell.island.tsx +91 -0
- package/src/ssr/GlobalSearchTrigger.tsx +51 -0
- package/src/ssr/Layout.tsx +58 -99
- package/src/ssr/LayoutHeader.tsx +31 -77
- package/src/ssr/LayoutHelp.browser-harness.tsx +43 -0
- package/src/ssr/LayoutHelp.tsx +319 -238
- package/src/ssr/LayoutHelpTrigger.tsx +49 -0
- package/src/ssr/LayoutPreferences.tsx +31 -0
- package/src/ssr/LayoutRail.tsx +15 -69
- package/src/ssr/MinimalLayout.tsx +2 -3
- package/src/ssr/MinimalLayoutPreferences.island.tsx +6 -15
- package/src/ssr/MobileNavigation.tsx +13 -8
- package/src/ssr/MobileProfileActions.tsx +4 -6
- package/src/ssr/PageTrailRow.tsx +14 -0
- package/src/ssr/{ProfilePreferences.island.tsx → ProfilePreferences.tsx} +8 -5
- package/src/ssr/PwaLayout.tsx +0 -2
- package/src/ssr/PwaRuntime.island.tsx +1 -1
- package/src/ssr/ShellRuntime.island.tsx +166 -0
- package/src/ssr/ThemeCycleButton.tsx +46 -0
- package/src/ssr/TimezoneCookie.island.tsx +3 -19
- package/src/ssr/WorkspaceNavigationProvider.tsx +20 -1
- package/src/ssr/announcements-dialog.tsx +66 -0
- package/src/ssr/app-appearance.ts +6 -1
- package/src/ssr/{AppLaunchpad.island.tsx → app-launchpad.tsx} +42 -62
- package/src/ssr/busy-action.ts +19 -0
- package/src/ssr/islands/index.ts +9 -6
- package/src/ssr/launchpad-surface.tsx +15 -0
- package/src/ssr/layout-help-registry.tsx +60 -0
- package/src/ssr/layout-help-url.ts +39 -0
- package/src/ssr/mobile-navigation.browser-harness.tsx +20 -0
- package/src/ssr/platform-messages.ts +0 -8
- package/src/ssr/preference-controller.ts +62 -19
- package/src/ssr/profile-actions.ts +12 -5
- package/src/ssr/profile-preferences-messages.ts +10 -4
- package/src/ssr/rail-context.ts +8 -12
- package/src/ssr/rail-navigation.ts +3 -0
- package/src/ssr/shell-data.tsx +48 -0
- package/src/ssr/timezone-cookie.ts +22 -0
- package/src/ssr/workspace-navigation.ts +25 -2
- package/src/styles/effects.css +13 -3
- package/src/styles/global.css +43 -5
- package/src/styles/input.css +0 -8
- package/src/styles/tokens.css +0 -2
- package/src/styles/utilities-navigation.css +10 -0
- package/src/workflows/language/compiler.ts +1 -1
- package/src/ssr/AppWorkspaceController.island.tsx +0 -21
- package/src/ssr/BrowserPushRegistration.island.tsx +0 -12
- package/src/ssr/GlobalAnnouncements.island.tsx +0 -117
- package/src/ssr/GlobalSearchHelpDialog.tsx +0 -104
- package/src/ssr/GlobalSearchTrigger.island.tsx +0 -75
- package/src/ssr/LayoutHelpTrigger.island.tsx +0 -61
- package/src/ssr/LayoutPreferences.island.tsx +0 -21
- package/src/ssr/PageTrailRow.island.tsx +0 -20
- package/src/ssr/PageTrailRuntime.island.tsx +0 -26
- package/src/ssr/RegisteredHelpDocuments.island.tsx +0 -3
- /package/src/ssr/{LayoutBreadcrumbs.island.tsx → LayoutBreadcrumbs.tsx} +0 -0
- /package/src/ssr/{RailApps.island.tsx → RailApps.tsx} +0 -0
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { IconButton, Tooltip, useLocale } from "@k2b/ui";
|
|
2
|
-
import { createEffect, onCleanup, onMount } from "solid-js";
|
|
3
|
-
import { registerContextAwareCommand } from "../browser/command-bridge";
|
|
4
|
-
import { attachCommandShortcuts } from "../browser/command-shortcuts";
|
|
5
|
-
import type { NavigationSearchItem } from "../browser/navigation-search";
|
|
6
|
-
import { importOnDemand } from "../browser/reload";
|
|
7
|
-
import { openGlobalSearch } from "../browser/search";
|
|
8
|
-
import { registerGlobalSearchHost } from "../browser/search-bridge";
|
|
9
|
-
import { createGlobalSearchHost } from "./global-search-host";
|
|
10
|
-
import { platformMessages } from "./platform-messages";
|
|
11
|
-
|
|
12
|
-
type GlobalSearchTriggerProps = {
|
|
13
|
-
variant: "header" | "rail" | "host";
|
|
14
|
-
class?: string;
|
|
15
|
-
registerCommand?: boolean;
|
|
16
|
-
searchLinks?: NavigationSearchItem[];
|
|
17
|
-
searchResources?: boolean;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
/** Opens the spotlight-style global search dialog from nav/header trigger points. */
|
|
21
|
-
export default function GlobalSearchTrigger(props: GlobalSearchTriggerProps) {
|
|
22
|
-
const locale = useLocale();
|
|
23
|
-
const t = () => platformMessages.resolve([locale()]).t;
|
|
24
|
-
|
|
25
|
-
if (props.registerCommand) {
|
|
26
|
-
const host = createGlobalSearchHost(() => props.searchLinks ?? [], props.searchResources);
|
|
27
|
-
onMount(() => {
|
|
28
|
-
onCleanup(registerGlobalSearchHost(host.open, host.dispose));
|
|
29
|
-
});
|
|
30
|
-
// Commands, their schemas and the capability client load on the first shortcut, not with every page.
|
|
31
|
-
onMount(() =>
|
|
32
|
-
onCleanup(
|
|
33
|
-
attachCommandShortcuts(
|
|
34
|
-
(command) =>
|
|
35
|
-
void importOnDemand(() => import("../browser/commands")).then((commands) => commands?.runContextAwareCommand(command)),
|
|
36
|
-
),
|
|
37
|
-
),
|
|
38
|
-
);
|
|
39
|
-
createEffect(() =>
|
|
40
|
-
onCleanup(
|
|
41
|
-
registerContextAwareCommand({
|
|
42
|
-
id: "cloud.search",
|
|
43
|
-
title: t().openGlobalSearch,
|
|
44
|
-
description: t().globalSearchDescription,
|
|
45
|
-
icon: "ti ti-search",
|
|
46
|
-
shortcut: "mod+k",
|
|
47
|
-
action: { search: {} },
|
|
48
|
-
}),
|
|
49
|
-
),
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (props.variant === "host") return null;
|
|
54
|
-
|
|
55
|
-
if (props.variant === "rail")
|
|
56
|
-
return (
|
|
57
|
-
<Tooltip.Trigger
|
|
58
|
-
type="button"
|
|
59
|
-
class={`rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 ${props.class ?? ""}`}
|
|
60
|
-
onClick={() => openGlobalSearch()}
|
|
61
|
-
aria-label={t().openGlobalSearch}
|
|
62
|
-
placement="right"
|
|
63
|
-
delay={0}
|
|
64
|
-
content={t().searchShortcut}
|
|
65
|
-
>
|
|
66
|
-
<i class="ti ti-search text-base" />
|
|
67
|
-
</Tooltip.Trigger>
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
return (
|
|
71
|
-
<IconButton class={props.class} onClick={() => openGlobalSearch()} label={t().openGlobalSearch} title={t().searchShortcut}>
|
|
72
|
-
<i class="ti ti-search text-base" />
|
|
73
|
-
</IconButton>
|
|
74
|
-
);
|
|
75
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { IconButton, Tooltip, useLocale } from "@k2b/ui";
|
|
2
|
-
import { createEffect, onCleanup } from "solid-js";
|
|
3
|
-
import { registerContextAwareCommand } from "../browser/command-bridge";
|
|
4
|
-
import type { GlobalSearchHelpApp } from "./GlobalSearchHelpDialog";
|
|
5
|
-
import { openLayoutHelpDialog } from "./LayoutHelp";
|
|
6
|
-
import { platformMessages } from "./platform-messages";
|
|
7
|
-
|
|
8
|
-
type LayoutHelpTriggerProps = {
|
|
9
|
-
variant: "header" | "rail";
|
|
10
|
-
class?: string;
|
|
11
|
-
registerCommand?: boolean;
|
|
12
|
-
searchHelpApps?: GlobalSearchHelpApp[];
|
|
13
|
-
accent?: string;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
/** Opens end-user help from either the desktop rail or the compact header. */
|
|
17
|
-
export default function LayoutHelpTrigger(props: LayoutHelpTriggerProps) {
|
|
18
|
-
const locale = useLocale();
|
|
19
|
-
const t = () => platformMessages.resolve([locale()]).t;
|
|
20
|
-
const searchHelpApps = props.searchHelpApps ?? [];
|
|
21
|
-
|
|
22
|
-
const openHelp = () => {
|
|
23
|
-
openLayoutHelpDialog(searchHelpApps, props.accent);
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
if (props.registerCommand) {
|
|
27
|
-
createEffect(() =>
|
|
28
|
-
onCleanup(
|
|
29
|
-
registerContextAwareCommand({
|
|
30
|
-
id: "cloud.help",
|
|
31
|
-
title: t().openShortcutHelp,
|
|
32
|
-
description: t().shortcutHelpDescription,
|
|
33
|
-
icon: "ti ti-help-circle",
|
|
34
|
-
shortcut: "shift+/",
|
|
35
|
-
action: openHelp,
|
|
36
|
-
}),
|
|
37
|
-
),
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (props.variant === "rail")
|
|
42
|
-
return (
|
|
43
|
-
<Tooltip.Trigger
|
|
44
|
-
type="button"
|
|
45
|
-
class={`rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 ${props.class ?? ""}`}
|
|
46
|
-
onClick={openHelp}
|
|
47
|
-
aria-label={t().openHelp}
|
|
48
|
-
placement="right"
|
|
49
|
-
delay={0}
|
|
50
|
-
content={t().helpShortcut}
|
|
51
|
-
>
|
|
52
|
-
<i class="ti ti-help-circle text-base" />
|
|
53
|
-
</Tooltip.Trigger>
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
return (
|
|
57
|
-
<IconButton class={props.class} onClick={openHelp} label={t().openHelp} title={t().helpShortcut}>
|
|
58
|
-
<i class="ti ti-help-circle text-base" />
|
|
59
|
-
</IconButton>
|
|
60
|
-
);
|
|
61
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Dropdown, type DropdownPosition, useLocale } from "@k2b/ui";
|
|
2
|
-
import type { CloudTheme } from "../shared/theme";
|
|
3
|
-
import { createPreferenceController } from "./preference-controller";
|
|
4
|
-
|
|
5
|
-
type LayoutPreferencesProps = {
|
|
6
|
-
initialTheme: CloudTheme;
|
|
7
|
-
position: DropdownPosition;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export default function LayoutPreferences(props: LayoutPreferencesProps) {
|
|
11
|
-
const locale = useLocale();
|
|
12
|
-
const preferences = createPreferenceController(props.initialTheme, locale);
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<Dropdown.Root items={preferences.items()} label={preferences.messages().preferencesMenuLabel} position={props.position} width="14rem">
|
|
16
|
-
<Dropdown.Trigger iconOnly label={preferences.messages().preferencesMenuLabel} size="sm" variant="secondary">
|
|
17
|
-
<i class="ti ti-adjustments-horizontal" aria-hidden="true" />
|
|
18
|
-
</Dropdown.Trigger>
|
|
19
|
-
</Dropdown.Root>
|
|
20
|
-
);
|
|
21
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { PageTitle, usePageTrail } from "@k2b/ui";
|
|
2
|
-
import { Show } from "solid-js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The shell's own place for the way up, above pages without a workspace. It
|
|
6
|
-
* shows only on a page with a page above it, and steps back when the page
|
|
7
|
-
* renders a workspace (whose head shows it) or its own `PageTrail`.
|
|
8
|
-
*/
|
|
9
|
-
export default function PageTrailRow() {
|
|
10
|
-
const trail = usePageTrail();
|
|
11
|
-
const deep = () => {
|
|
12
|
-
const current = trail();
|
|
13
|
-
return current?.ancestors.length ? current : undefined;
|
|
14
|
-
};
|
|
15
|
-
return (
|
|
16
|
-
<div class="layout-page-head" data-trail={deep() ? "up" : undefined}>
|
|
17
|
-
<Show when={deep()}>{(current) => <PageTitle trail={current()} as="p" fallback />}</Show>
|
|
18
|
-
</div>
|
|
19
|
-
);
|
|
20
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { followPageTrail, installPageTitleController, useLocale } from "@k2b/ui";
|
|
2
|
-
import { onCleanup, onMount } from "solid-js";
|
|
3
|
-
import { installPageTrailRuntime } from "./page-trail-runtime";
|
|
4
|
-
import { platformMessages } from "./platform-messages";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* One owner per document for the way up: it collapses every page title path
|
|
8
|
-
* to its space, keeps server-rendered workspace heads current after
|
|
9
|
-
* `layout.update()`, runs the per-tab memory behind up links, and offers
|
|
10
|
-
* "One level up" (Alt+↑) while the page has a page above it.
|
|
11
|
-
*/
|
|
12
|
-
export default function PageTrailRuntime() {
|
|
13
|
-
const locale = useLocale();
|
|
14
|
-
onMount(() => {
|
|
15
|
-
const t = platformMessages.resolve([locale()]).t;
|
|
16
|
-
const disposeTitles = installPageTitleController(document);
|
|
17
|
-
const disposeFollow = followPageTrail(document);
|
|
18
|
-
const disposeRuntime = installPageTrailRuntime((page) => ({ title: t.pageUp({ page }), description: t.pageUpDescription }));
|
|
19
|
-
onCleanup(() => {
|
|
20
|
-
disposeTitles();
|
|
21
|
-
disposeFollow();
|
|
22
|
-
disposeRuntime();
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
File without changes
|
|
File without changes
|