@k2b/cloud 0.43.0 → 0.44.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 +7 -2
- package/src/_internal/app-access-request.ts +13 -0
- package/src/_internal/app-access-resources.ts +141 -0
- package/src/_internal/app-event-catalog.ts +40 -0
- package/src/_internal/app-event-schemas.ts +127 -0
- package/src/_internal/application-package.ts +40 -0
- package/src/_internal/built-in-app-ids.json +27 -0
- package/src/_internal/capabilities.ts +158 -12
- package/src/_internal/capability-origin.ts +4 -0
- package/src/_internal/capability-streams.ts +7 -5
- package/src/_internal/define-app.ts +57 -6
- package/src/_internal/object-store-area.ts +9 -0
- package/src/_internal/object-store-config.ts +101 -0
- package/src/_internal/object-store-key.ts +14 -0
- package/src/_internal/process-identity.ts +7 -2
- package/src/_internal/registry-validation.ts +11 -1
- package/src/_internal/registry.ts +8 -1
- package/src/_internal/runtime-context.ts +8 -1
- package/src/access/AppAccessEditor.tsx +2 -0
- package/src/access/PermissionEditor.tsx +9 -3
- package/src/access/PrincipalPicker.tsx +14 -4
- package/src/access/ResourceApiKeys.tsx +3 -4
- package/src/access/app-access-messages.ts +6 -0
- package/src/account/ProfilePictureDialog.tsx +699 -0
- package/src/account/profile-picture-messages.ts +269 -0
- package/src/account/ui.ts +7 -0
- package/src/ai/admin.ts +3 -0
- package/src/ai/app-frame.ts +12 -0
- package/src/ai/application-tasks.ts +101 -0
- package/src/ai/assistant-models.ts +126 -64
- package/src/ai/capabilities.ts +19 -4
- package/src/ai/chart-block.ts +63 -30
- package/src/ai/chat/chart-block.tsx +12 -3
- package/src/ai/chat/composer-adapter.ts +8 -7
- package/src/ai/chat/message-actions.tsx +1 -1
- package/src/ai/chat/message-utils.ts +2 -2
- package/src/ai/chat/presentation.tsx +22 -1
- package/src/ai/chat-quotas.ts +5 -4
- package/src/ai/chat-tasks.ts +2 -2
- package/src/ai/client/controller.ts +11 -10
- package/src/ai/client/projection.ts +3 -3
- package/src/ai/compaction.ts +3 -3
- package/src/ai/credentials.ts +13 -114
- package/src/ai/default-tool-contracts.ts +4 -3
- package/src/ai/dictation-runtime.ts +4 -4
- package/src/ai/enrich.ts +2 -2
- package/src/ai/executor.ts +31 -22
- package/src/ai/http.ts +17 -29
- package/src/ai/index.ts +11 -5
- package/src/ai/inference-calls.ts +5 -4
- package/src/ai/maintenance.ts +1 -1
- package/src/ai/memory-learning-runs.ts +5 -5
- package/src/ai/memory-learning.ts +3 -3
- package/src/ai/message-queue.ts +1 -2
- package/src/ai/migrate.ts +75 -42
- package/src/ai/model-access-migrate.ts +3 -17
- package/src/ai/model-access.ts +44 -85
- package/src/ai/model-card.tsx +134 -0
- package/src/ai/model-catalog.ts +359 -0
- package/src/ai/model-chooser-messages.ts +88 -0
- package/src/ai/model-chooser.tsx +577 -0
- package/src/ai/model-delete.ts +234 -0
- package/src/ai/model-fixture.ts +39 -0
- package/src/ai/model-icon.tsx +36 -0
- package/src/ai/model-overview.ts +53 -0
- package/src/ai/model-usage.ts +45 -0
- package/src/ai/openai-api-messages.ts +0 -4
- package/src/ai/openai-api.ts +26 -9
- package/src/ai/personal-agent.ts +1 -1
- package/src/ai/prefs.ts +12 -10
- package/src/ai/projects-routes.ts +2 -1
- package/src/ai/projects.ts +13 -12
- package/src/ai/protocol.ts +2 -2
- package/src/ai/provider-connections.ts +161 -0
- package/src/ai/provider-errors.ts +55 -6
- package/src/ai/provider-fetch.ts +4 -0
- package/src/ai/provider.ts +1 -1
- package/src/ai/quota-limits.ts +36 -0
- package/src/ai/quota-provider.ts +4 -2
- package/src/ai/quota-report.ts +7 -4
- package/src/ai/quotas.ts +19 -8
- package/src/ai/recent-resources.ts +6 -0
- package/src/ai/request-headers.ts +14 -87
- package/src/ai/resource-refs.ts +6 -2
- package/src/ai/routes.ts +17 -18
- package/src/ai/runtime.ts +50 -22
- package/src/ai/settings.ts +93 -580
- package/src/ai/store.ts +45 -23
- package/src/ai/stream.ts +1 -1
- package/src/ai/structured-runs.ts +2 -2
- package/src/ai/structured.ts +21 -44
- package/src/ai/task-contracts.ts +25 -5
- package/src/ai/task-execution.ts +15 -6
- package/src/ai/task-model.ts +9 -0
- package/src/ai/transcription.ts +27 -22
- package/src/ai/types.ts +50 -62
- package/src/ai/ui.tsx +13 -0
- package/src/ai/usage.ts +8 -8
- package/src/ai/validate.ts +8 -7
- package/src/ai/view-block.ts +2 -2
- package/src/api/accounts-entities.ts +16 -0
- package/src/api/admin-ai-quotas.ts +34 -56
- package/src/api/admin-ai-usage.ts +1 -1
- package/src/api/admin-ai.ts +173 -0
- package/src/api/admin-core-settings.ts +68 -244
- package/src/api/app-approval.ts +3 -1
- package/src/api/app-event-delivery.ts +51 -0
- package/src/api/app-events.ts +123 -0
- package/src/api/app-resource-access.ts +48 -0
- package/src/api/auth/account-mismatch.ts +24 -0
- package/src/api/auth.ts +26 -3
- package/src/api/capabilities.ts +28 -4
- package/src/api/index.ts +7 -1
- package/src/api/mcp.ts +175 -2
- package/src/api/me.ts +6 -4
- package/src/api/pwa-phone.ts +75 -26
- package/src/api/pwa.ts +34 -8
- package/src/api/resource-links.ts +83 -6
- package/src/api/resource-resolve.ts +50 -0
- package/src/api/search/schemas.ts +3 -1
- package/src/api/search.ts +9 -7
- package/src/app-pwa/contracts.ts +4 -0
- package/src/app-pwa/core-query-error.ts +20 -0
- package/src/app-pwa/index.ts +1 -0
- package/src/app-pwa/service.ts +91 -0
- package/src/app-pwa/transport.ts +22 -0
- package/src/approvals/messages.ts +2 -2
- package/src/browser/cloud-id.ts +86 -0
- package/src/browser/resource-clipboard.ts +4 -0
- package/src/browser/resource-links.ts +52 -0
- package/src/capabilities/server-invoke.ts +2 -11
- package/src/capabilities/testing.ts +5 -2
- package/src/cli/access.ts +6 -5
- package/src/cli/admin/ai-models.ts +199 -0
- package/src/cli/admin/ai-quotas.ts +6 -102
- package/src/cli/admin/ai-usage.ts +4 -4
- package/src/cli/admin/app-credentials.ts +5 -3
- package/src/cli/admin/index.ts +5 -2
- package/src/cli/apps.ts +89 -26
- package/src/cli/capabilities.ts +22 -1
- package/src/cli/events.ts +320 -0
- package/src/config/env.ts +40 -0
- package/src/contracts/app-access.ts +26 -2
- package/src/contracts/app-details.ts +89 -0
- package/src/contracts/app-events.ts +51 -0
- package/src/contracts/app.ts +21 -5
- package/src/contracts/capabilities.ts +143 -3
- package/src/contracts/index.ts +2 -0
- package/src/contracts/notification-types.ts +36 -9
- package/src/contracts/pwa.ts +17 -1
- package/src/contracts/registry.ts +6 -0
- package/src/contracts/resource-clipboard.ts +35 -0
- package/src/contracts/resource-pages.ts +140 -0
- package/src/contracts/resource-resolution.ts +13 -0
- package/src/contracts/shared.ts +4 -0
- package/src/contracts/user-notifications.ts +2 -0
- package/src/events/app-event-delivery.ts +100 -0
- package/src/events/app-events.testing.ts +65 -0
- package/src/events/app-events.ts +134 -0
- package/src/events/core-user-created.ts +24 -0
- package/src/events/index.ts +9 -0
- package/src/events/testing.ts +2 -0
- package/src/index.ts +1 -1
- package/src/server/api/respond.ts +8 -3
- package/src/server/index.ts +1 -0
- package/src/server/middleware/app-access.ts +1 -1
- package/src/server/middleware/auth.ts +21 -7
- package/src/server/middleware/index.ts +1 -0
- package/src/server/middleware/invocation.ts +2 -0
- package/src/server/public-storage.ts +106 -0
- package/src/server/services/access.ts +8 -0
- package/src/services/accounts/app.ts +6 -0
- package/src/services/accounts/entities.ts +14 -3
- package/src/services/accounts/groups.ts +3 -1
- package/src/services/accounts/identities.ts +62 -10
- package/src/services/accounts/users.ts +7 -6
- package/src/services/app-access.ts +25 -7
- package/src/services/app-details.ts +224 -0
- package/src/services/app-discovery.ts +2 -1
- package/src/services/app-event-shapes.ts +139 -0
- package/src/services/app-events/accept.ts +116 -0
- package/src/services/app-events/admin.ts +250 -0
- package/src/services/app-events/declarations.ts +187 -0
- package/src/services/app-events/deliver.ts +218 -0
- package/src/services/app-events.ts +92 -0
- package/src/services/config-conflict.ts +11 -0
- package/src/services/core-user-events.ts +1 -0
- package/src/services/freeipa-config.ts +9 -0
- package/src/services/geo/ledger.ts +28 -10
- package/src/services/geo/service.ts +43 -24
- package/src/services/identity/core-origin.ts +12 -0
- package/src/services/identity/invocation-actor.ts +20 -2
- package/src/services/identity/invocation-authority.ts +4 -0
- package/src/services/identity/invocation-token.ts +238 -56
- package/src/services/identity/issue-invocation.ts +6 -1
- package/src/services/image-metadata.ts +65 -1
- package/src/services/index.ts +13 -1
- package/src/services/ipa/sync.ts +6 -2
- package/src/services/ipa/users.ts +4 -1
- package/src/services/mandates/policy.ts +19 -12
- package/src/services/notifications/browser.ts +4 -0
- package/src/services/notifications/catalog.ts +5 -2
- package/src/services/notifications/platform.ts +7 -2
- package/src/services/notifications/user.ts +18 -7
- package/src/services/oauth-tokens.ts +28 -2
- package/src/services/object-store.ts +217 -0
- package/src/services/providers/local/users.ts +5 -0
- package/src/services/pwa-devices.ts +147 -37
- package/src/services/session/index.ts +14 -0
- package/src/services/settings/core-settings.ts +71 -43
- package/src/services/settings/index.ts +8 -0
- package/src/services/settings/versions.ts +26 -0
- package/src/shared/ai-models.ts +274 -0
- package/src/shared/ai-quotas.ts +2 -2
- package/src/shared/ai-usage.ts +2 -2
- package/src/shared/index.ts +2 -0
- package/src/shared-text/documents.ts +25 -8
- package/src/shared-text/log.ts +1 -1
- package/src/shared-text/text-diff.ts +75 -0
- package/src/ssr/AdminArea.tsx +131 -0
- package/src/ssr/AdminLayout.tsx +9 -3
- package/src/ssr/AdminSidebar.tsx +7 -7
- package/src/ssr/AppAccessDenied.tsx +2 -0
- package/src/ssr/AppBadge.tsx +14 -0
- package/src/ssr/AppLaunchpadPanel.tsx +1 -1
- package/src/ssr/CloudShell.island.tsx +25 -4
- package/src/ssr/Layout.tsx +8 -6
- package/src/ssr/PwaLayout.tsx +16 -1
- package/src/ssr/PwaPartCount.island.tsx +23 -0
- package/src/ssr/SettingsSaveOutcome.tsx +58 -0
- package/src/ssr/SettingsSaveStatus.island.tsx +16 -0
- package/src/ssr/__snapshots__/Layout.unchanged.render.test.tsx.snap +3 -3
- package/src/ssr/admin-active-link.ts +16 -0
- package/src/ssr/admin-navigation.ts +25 -20
- package/src/ssr/app-badges.ts +31 -7
- package/src/ssr/index.ts +8 -0
- package/src/ssr/page-trail-runtime.ts +3 -1
- package/src/ssr/platform-messages.ts +9 -1
- package/src/ssr/pwa-messages.ts +2 -2
- package/src/ssr/rail-navigation.ts +5 -1
- package/src/ssr/settings-draft.ts +153 -0
- package/src/ssr/shell-data.tsx +2 -0
- package/src/styles/global.css +1 -0
- package/src/styles/profile-picture.css +270 -0
- package/src/styles/utilities-navigation.css +6 -0
- package/src/workflows/ai/policy.ts +49 -0
- package/src/workflows/ai/runtime.ts +131 -21
- package/src/workflows/ai/store.ts +283 -35
- package/src/workflows/ai/types.ts +8 -2
- package/src/workflows/ai-actions.ts +148 -120
- package/src/workflows/authoring.ts +31 -0
- package/src/workflows/contracts.ts +1 -0
- package/src/workflows/definition.ts +2 -0
- package/src/workflows/editor.ts +15 -0
- package/src/workflows/index.ts +2 -1
- package/src/workflows/language/compiler.ts +34 -3
- package/src/workflows/runtime/executor.ts +132 -33
- package/src/workflows/runtime/index.ts +2 -0
- package/src/workflows/runtime/ports.ts +5 -1
- package/src/workflows/store/actions.ts +1 -1
- package/src/workflows/store/definitions.ts +5 -0
- package/src/workflows/store/runs.ts +5 -3
- package/src/workflows/store/worker.ts +7 -2
- package/src/ai/model-pricing.ts +0 -43
- package/src/ai/model-request-settings.ts +0 -98
- package/src/ai/settings-messages.ts +0 -129
- package/src/shared/ai-model-request-settings.ts +0 -21
|
@@ -22,7 +22,7 @@ exports[`opt-out regular HTML is unchanged 1`] = `
|
|
|
22
22
|
<script>!function(){var e=document.documentElement;if(e.hasAttribute("data-theme-fixed"))return;var m=matchMedia("(prefers-color-scheme: dark)");function r(n,s){var v;document.cookie.split(";").forEach(function(p){p=p.trim();var i=p.indexOf("=");if(i>0&&p.slice(0,i)===n){var t=p.slice(i+1);try{t=decodeURIComponent(t)}catch(e){}if(t==="light"||t==="dark"||s&&t==="system")v=t}});return v}function a(){var s=m.matches?"dark":"light";if(r("color-scheme")!==s)document.cookie="color-scheme="+s+"; path=/; max-age=31536000; SameSite=Lax"+(location.protocol==="https:"?"; Secure":"");var p=r("theme",true)||"system";e.classList.remove("light","dark");e.classList.add(p==="system"?s:p)}a();m.addEventListener("change",function(){a();window.dispatchEvent(new Event("cloud:theme-preference"))})}();</script>
|
|
23
23
|
</head>
|
|
24
24
|
<body class="k2b-ui" data-k2b-app-workspace-controller="global">
|
|
25
|
-
<div class="cloud-app-canvas relative flex w-full min-h-dvh md:h-dvh md:overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{"t":{"t":10,"i":0,"p":{"k":["panel","workspace","pageTrail","focus","help","commands","push","announcements","banners"],"v":[{"t":2,"s":2},{"t":10,"i":1,"p":{"k":["appId"],"v":[{"t":1,"s":"unchanged"}]},"o":0},{"t":2,"s":2},{"t":2,"s":2},{"t":2,"s":1},{"t":10,"i":2,"p":{"k":["searchResources"],"v":[{"t":2,"s":2}]},"o":0},{"t":2,"s":2},{"t":2,"s":1},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","currentPath","panelOpen"],"v":[{"t":1,"s":"rail"},{"t":1,"s":"/app/unchanged?mode=regular"},{"t":2,"s":3}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" 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 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" 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 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="9" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="9" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","panelOpen","authenticated","title","launchpad","breadcrumbs"],"v":[{"t":1,"s":"header"},{"t":2,"s":3},{"t":2,"s":2},{"t":1,"s":"Unchanged"},{"t":2,"s":2},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 md:overflow-auto md:[scrollbar-gutter:stable]">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
|
|
25
|
+
<div class="cloud-app-canvas relative flex w-full min-h-dvh md:h-dvh md:overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{"t":{"t":10,"i":0,"p":{"k":["panel","workspace","pageTrail","focus","help","commands","push","announcements","banners"],"v":[{"t":2,"s":2},{"t":10,"i":1,"p":{"k":["appId"],"v":[{"t":1,"s":"unchanged"}]},"o":0},{"t":2,"s":2},{"t":2,"s":2},{"t":2,"s":1},{"t":10,"i":2,"p":{"k":["searchResources"],"v":[{"t":2,"s":2}]},"o":0},{"t":2,"s":2},{"t":2,"s":1},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","currentPath","panelOpen"],"v":[{"t":1,"s":"rail"},{"t":1,"s":"/app/unchanged?mode=regular"},{"t":2,"s":3}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" 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 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" 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 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","panelOpen","authenticated","title","launchpad","breadcrumbs"],"v":[{"t":1,"s":"header"},{"t":2,"s":3},{"t":2,"s":2},{"t":1,"s":"Unchanged"},{"t":2,"s":2},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 md:overflow-auto md:[scrollbar-gutter:stable]">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
|
|
26
26
|
</body>
|
|
27
27
|
<style>solid-client,solid-island{display:contents}</style>
|
|
28
28
|
<script type="module" data-ssr-assets="/_ssr/0">const p="/_ssr/0";document.querySelectorAll('solid-island,solid-client').forEach(e=>import(p+'/'+e.dataset.id+'.js'));</script>
|
|
@@ -52,7 +52,7 @@ exports[`opt-out fullPage HTML is unchanged 1`] = `
|
|
|
52
52
|
<script>!function(){var e=document.documentElement;if(e.hasAttribute("data-theme-fixed"))return;var m=matchMedia("(prefers-color-scheme: dark)");function r(n,s){var v;document.cookie.split(";").forEach(function(p){p=p.trim();var i=p.indexOf("=");if(i>0&&p.slice(0,i)===n){var t=p.slice(i+1);try{t=decodeURIComponent(t)}catch(e){}if(t==="light"||t==="dark"||s&&t==="system")v=t}});return v}function a(){var s=m.matches?"dark":"light";if(r("color-scheme")!==s)document.cookie="color-scheme="+s+"; path=/; max-age=31536000; SameSite=Lax"+(location.protocol==="https:"?"; Secure":"");var p=r("theme",true)||"system";e.classList.remove("light","dark");e.classList.add(p==="system"?s:p)}a();m.addEventListener("change",function(){a();window.dispatchEvent(new Event("cloud:theme-preference"))})}();</script>
|
|
53
53
|
</head>
|
|
54
54
|
<body class="k2b-ui" data-k2b-app-workspace-controller="global">
|
|
55
|
-
<div class="cloud-app-canvas relative flex w-full h-dvh overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-full-page="true" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{"t":{"t":10,"i":0,"p":{"k":["panel","workspace","pageTrail","focus","help","commands","push","announcements","banners"],"v":[{"t":2,"s":2},{"t":10,"i":1,"p":{"k":["appId"],"v":[{"t":1,"s":"unchanged"}]},"o":0},{"t":2,"s":2},{"t":2,"s":2},{"t":2,"s":1},{"t":10,"i":2,"p":{"k":["searchResources"],"v":[{"t":2,"s":2}]},"o":0},{"t":2,"s":2},{"t":2,"s":1},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","currentPath","panelOpen"],"v":[{"t":1,"s":"rail"},{"t":1,"s":"/app/unchanged?mode=fullPage"},{"t":2,"s":3}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" 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 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" 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 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="9" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="9" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","panelOpen","authenticated","title","launchpad","breadcrumbs"],"v":[{"t":1,"s":"header"},{"t":2,"s":3},{"t":2,"s":2},{"t":1,"s":"Unchanged"},{"t":2,"s":2},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 flex flex-col">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
|
|
55
|
+
<div class="cloud-app-canvas relative flex w-full h-dvh overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-full-page="true" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{"t":{"t":10,"i":0,"p":{"k":["panel","workspace","pageTrail","focus","help","commands","push","announcements","banners"],"v":[{"t":2,"s":2},{"t":10,"i":1,"p":{"k":["appId"],"v":[{"t":1,"s":"unchanged"}]},"o":0},{"t":2,"s":2},{"t":2,"s":2},{"t":2,"s":1},{"t":10,"i":2,"p":{"k":["searchResources"],"v":[{"t":2,"s":2}]},"o":0},{"t":2,"s":2},{"t":2,"s":1},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","currentPath","panelOpen"],"v":[{"t":1,"s":"rail"},{"t":1,"s":"/app/unchanged?mode=fullPage"},{"t":2,"s":3}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" 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 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" 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 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","panelOpen","authenticated","title","launchpad","breadcrumbs"],"v":[{"t":1,"s":"header"},{"t":2,"s":3},{"t":2,"s":2},{"t":1,"s":"Unchanged"},{"t":2,"s":2},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 flex flex-col">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
|
|
56
56
|
</body>
|
|
57
57
|
<style>solid-client,solid-island{display:contents}</style>
|
|
58
58
|
<script type="module" data-ssr-assets="/_ssr/0">const p="/_ssr/0";document.querySelectorAll('solid-island,solid-client').forEach(e=>import(p+'/'+e.dataset.id+'.js'));</script>
|
|
@@ -82,7 +82,7 @@ exports[`opt-out fullWidth HTML is unchanged 1`] = `
|
|
|
82
82
|
<script>!function(){var e=document.documentElement;if(e.hasAttribute("data-theme-fixed"))return;var m=matchMedia("(prefers-color-scheme: dark)");function r(n,s){var v;document.cookie.split(";").forEach(function(p){p=p.trim();var i=p.indexOf("=");if(i>0&&p.slice(0,i)===n){var t=p.slice(i+1);try{t=decodeURIComponent(t)}catch(e){}if(t==="light"||t==="dark"||s&&t==="system")v=t}});return v}function a(){var s=m.matches?"dark":"light";if(r("color-scheme")!==s)document.cookie="color-scheme="+s+"; path=/; max-age=31536000; SameSite=Lax"+(location.protocol==="https:"?"; Secure":"");var p=r("theme",true)||"system";e.classList.remove("light","dark");e.classList.add(p==="system"?s:p)}a();m.addEventListener("change",function(){a();window.dispatchEvent(new Event("cloud:theme-preference"))})}();</script>
|
|
83
83
|
</head>
|
|
84
84
|
<body class="k2b-ui" data-k2b-app-workspace-controller="global">
|
|
85
|
-
<div class="cloud-app-canvas relative flex w-full min-h-dvh md:h-dvh md:overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{"t":{"t":10,"i":0,"p":{"k":["panel","workspace","pageTrail","focus","help","commands","push","announcements","banners"],"v":[{"t":2,"s":2},{"t":10,"i":1,"p":{"k":["appId"],"v":[{"t":1,"s":"unchanged"}]},"o":0},{"t":2,"s":2},{"t":2,"s":2},{"t":2,"s":1},{"t":10,"i":2,"p":{"k":["searchResources"],"v":[{"t":2,"s":2}]},"o":0},{"t":2,"s":2},{"t":2,"s":1},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","currentPath","panelOpen"],"v":[{"t":1,"s":"rail"},{"t":1,"s":"/app/unchanged?mode=fullWidth"},{"t":2,"s":3}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" 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 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" 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 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="9" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="9" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","panelOpen","authenticated","title","launchpad","breadcrumbs"],"v":[{"t":1,"s":"header"},{"t":2,"s":3},{"t":2,"s":2},{"t":1,"s":"Unchanged"},{"t":2,"s":2},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 flex flex-col">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
|
|
85
|
+
<div class="cloud-app-canvas relative flex w-full min-h-dvh md:h-dvh md:overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{"t":{"t":10,"i":0,"p":{"k":["panel","workspace","pageTrail","focus","help","commands","push","announcements","banners"],"v":[{"t":2,"s":2},{"t":10,"i":1,"p":{"k":["appId"],"v":[{"t":1,"s":"unchanged"}]},"o":0},{"t":2,"s":2},{"t":2,"s":2},{"t":2,"s":1},{"t":10,"i":2,"p":{"k":["searchResources"],"v":[{"t":2,"s":2}]},"o":0},{"t":2,"s":2},{"t":2,"s":1},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","currentPath","panelOpen"],"v":[{"t":1,"s":"rail"},{"t":1,"s":"/app/unchanged?mode=fullWidth"},{"t":2,"s":3}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" 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 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" 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 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{"t":{"t":10,"i":0,"p":{"k":["slot","panelOpen","authenticated","title","launchpad","breadcrumbs"],"v":[{"t":1,"s":"header"},{"t":2,"s":3},{"t":2,"s":2},{"t":1,"s":"Unchanged"},{"t":2,"s":2},{"t":2,"s":1}]},"o":0},"f":127,"m":[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 flex flex-col">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
|
|
86
86
|
</body>
|
|
87
87
|
<style>solid-client,solid-island{display:contents}</style>
|
|
88
88
|
<script type="module" data-ssr-assets="/_ssr/0">const p="/_ssr/0";document.querySelectorAll('solid-island,solid-client').forEach(e=>import(p+'/'+e.dataset.id+'.js'));</script>
|
|
@@ -45,3 +45,19 @@ export const activeAdminHref = (currentPath: string, hrefs: readonly string[]):
|
|
|
45
45
|
}
|
|
46
46
|
return best;
|
|
47
47
|
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The link whose own href or one of its `match` paths covers the current path most specifically. An area link, such
|
|
51
|
+
* as Observability, stays active on every page of the area.
|
|
52
|
+
*/
|
|
53
|
+
export const activeAdminLink = <Link extends { href: string; match?: readonly string[] }>(
|
|
54
|
+
currentPath: string,
|
|
55
|
+
links: readonly Link[],
|
|
56
|
+
): Link | null => {
|
|
57
|
+
const candidates = links.flatMap((link) => [link.href, ...(link.match ?? [])].map((path) => ({ link, path })));
|
|
58
|
+
const best = activeAdminHref(
|
|
59
|
+
currentPath,
|
|
60
|
+
candidates.map((candidate) => candidate.path),
|
|
61
|
+
);
|
|
62
|
+
return best === null ? null : (candidates.find((candidate) => candidate.path === best)?.link ?? null);
|
|
63
|
+
};
|
|
@@ -2,7 +2,8 @@ import { normalizeRedirectTo } from "../shared";
|
|
|
2
2
|
import { platformMessages } from "./platform-messages";
|
|
3
3
|
import type { RuntimeContext } from "./runtime";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
/** `match` lists further paths the link stands for, such as the pages of an area. */
|
|
6
|
+
export type AdminLink = { href: string; icon: string; label: string; match?: string[] };
|
|
6
7
|
export type AdminGroup = { label: string; links: AdminLink[] };
|
|
7
8
|
|
|
8
9
|
const normalizeAdminHref = (href: string | undefined): string | undefined => {
|
|
@@ -13,23 +14,12 @@ const normalizeAdminHref = (href: string | undefined): string | undefined => {
|
|
|
13
14
|
export const buildAdminGroups = (apps: readonly RuntimeContext["apps"][number][], locale = "en"): AdminGroup[] => {
|
|
14
15
|
const t = platformMessages.resolve([locale]).t;
|
|
15
16
|
const settingsLinks: AdminLink[] = [
|
|
16
|
-
{ href: "/admin/settings?tab=
|
|
17
|
+
{ href: "/admin/settings?tab=storage", icon: "ti-database", label: t.storage },
|
|
17
18
|
{ href: "/admin/outgoing-mail", icon: "ti-mail", label: t.outgoingMail },
|
|
18
|
-
{ href: "/admin/settings?tab=pdf-rendering", icon: "ti-file-type-pdf", label: t.pdfRendering },
|
|
19
|
-
{ href: "/admin/places-and-maps", icon: "ti-map-2", label: t.placesAndMaps },
|
|
20
19
|
{ href: "/admin/settings?tab=email-templates", icon: "ti-template", label: t.emailTemplates },
|
|
21
20
|
{ href: "/admin/settings?tab=security", icon: "ti-shield-lock", label: t.security },
|
|
22
|
-
{ href: "/admin/settings?tab=legal", icon: "ti-file-text", label: t.legal },
|
|
23
|
-
];
|
|
24
|
-
const aiLinks: AdminLink[] = [
|
|
25
|
-
{ href: "/admin/settings?tab=ai-general", icon: "ti-adjustments", label: t.general },
|
|
26
|
-
{ href: "/admin/settings?tab=ai-providers", icon: "ti-sparkles", label: t.providers },
|
|
27
|
-
{ href: "/admin/settings?tab=ai-quotas", icon: "ti-gauge", label: t.aiQuotas },
|
|
28
|
-
{ href: "/admin/settings?tab=ai-usage", icon: "ti-chart-histogram", label: t.aiUsage },
|
|
29
|
-
{ href: "/admin/settings?tab=ai-skills", icon: "ti-wand", label: t.skills },
|
|
30
|
-
{ href: "/admin/settings?tab=ai-projects", icon: "ti-folders", label: t.projects },
|
|
31
|
-
{ href: "/admin/settings?tab=ai-jobs", icon: "ti-activity", label: t.backgroundJobs },
|
|
32
21
|
];
|
|
22
|
+
// Areas show as one entry each. The AI area belongs to Core; Observability exists when an app contributes it.
|
|
33
23
|
const contributedApps = apps
|
|
34
24
|
.map((app) => ({
|
|
35
25
|
app,
|
|
@@ -46,10 +36,6 @@ export const buildAdminGroups = (apps: readonly RuntimeContext["apps"][number][]
|
|
|
46
36
|
}))
|
|
47
37
|
.sort((a, b) => a.app.name.localeCompare(b.app.name));
|
|
48
38
|
|
|
49
|
-
aiLinks.push(
|
|
50
|
-
...contributedApps.flatMap(({ groups }) => groups.filter((group) => group.section === "ai").flatMap((group) => group.links)),
|
|
51
|
-
);
|
|
52
|
-
|
|
53
39
|
const appsWithGroups = new Set(contributedApps.filter(({ groups }) => groups.length > 0).map(({ app }) => app.id));
|
|
54
40
|
const appLinks = apps
|
|
55
41
|
.filter((app) => !appsWithGroups.has(app.id))
|
|
@@ -59,6 +45,25 @@ export const buildAdminGroups = (apps: readonly RuntimeContext["apps"][number][]
|
|
|
59
45
|
})
|
|
60
46
|
.sort((a, b) => a.label.localeCompare(b.label));
|
|
61
47
|
|
|
48
|
+
const observabilityPaths = contributedApps.flatMap(({ groups }) =>
|
|
49
|
+
groups.filter((group) => group.section === "observability").flatMap((group) => group.links.map((link) => link.href)),
|
|
50
|
+
);
|
|
51
|
+
const areaLinks: AdminLink[] = [
|
|
52
|
+
{ href: "/admin/base", icon: "ti-adjustments", label: t.baseSettings },
|
|
53
|
+
{ href: "/admin/ai", icon: "ti-sparkles", label: t.ai },
|
|
54
|
+
...(observabilityPaths.length > 0
|
|
55
|
+
? [
|
|
56
|
+
{
|
|
57
|
+
// Gateway Ops owns the area's start; without it, the entry opens the first contributed page.
|
|
58
|
+
href: observabilityPaths.includes("/admin/observability") ? "/admin/observability" : observabilityPaths[0]!,
|
|
59
|
+
icon: "ti-heart-rate-monitor",
|
|
60
|
+
label: t.observability,
|
|
61
|
+
match: observabilityPaths,
|
|
62
|
+
},
|
|
63
|
+
]
|
|
64
|
+
: []),
|
|
65
|
+
];
|
|
66
|
+
|
|
62
67
|
return [
|
|
63
68
|
{
|
|
64
69
|
label: t.general,
|
|
@@ -70,8 +75,9 @@ export const buildAdminGroups = (apps: readonly RuntimeContext["apps"][number][]
|
|
|
70
75
|
{ href: "/admin/announcements", icon: "ti-speakerphone", label: t.announcements },
|
|
71
76
|
],
|
|
72
77
|
},
|
|
78
|
+
{ label: t.cloudAreas, links: areaLinks },
|
|
73
79
|
...contributedApps.flatMap(({ groups }) =>
|
|
74
|
-
groups.filter((group) => group.section
|
|
80
|
+
groups.filter((group) => group.section === undefined).map(({ label, links }) => ({ label, links })),
|
|
75
81
|
),
|
|
76
82
|
{
|
|
77
83
|
label: t.userManagement,
|
|
@@ -83,7 +89,6 @@ export const buildAdminGroups = (apps: readonly RuntimeContext["apps"][number][]
|
|
|
83
89
|
{ href: "/admin/settings?tab=freeipa", icon: "ti-building-fortress", label: "FreeIPA" },
|
|
84
90
|
],
|
|
85
91
|
},
|
|
86
|
-
{ label: t.ai, links: aiLinks },
|
|
87
92
|
{ label: t.settings, links: settingsLinks },
|
|
88
93
|
...(appLinks.length > 0 ? [{ label: t.appAdmin, links: appLinks }] : []),
|
|
89
94
|
];
|
package/src/ssr/app-badges.ts
CHANGED
|
@@ -14,6 +14,11 @@ export const APP_BADGE_INTERVAL_MS = 60_000;
|
|
|
14
14
|
// Keyed by endpoint, so a pinned app shortcut and the app's own entry share one
|
|
15
15
|
// count. Only the browser ever writes it; server renders always see no badge.
|
|
16
16
|
const [counts, setCounts] = createSignal<ReadonlyMap<string, number>>(new Map());
|
|
17
|
+
// The line a Cloud app part's summary route returns beside its count, keyed like the counts.
|
|
18
|
+
const [texts, setTexts] = createSignal<ReadonlyMap<string, string>>(new Map());
|
|
19
|
+
|
|
20
|
+
/** The text of a `PwaPartSummary` route once the browser has read it; undefined before or when the read failed. */
|
|
21
|
+
export const appPartSummaryText = (endpoint: string): string | undefined => texts().get(endpoint);
|
|
17
22
|
|
|
18
23
|
const [approvalCounts, setApprovalCounts] = createSignal<ApprovalCounts | null>(null);
|
|
19
24
|
|
|
@@ -37,16 +42,28 @@ export const parseAppBadge = (body: unknown): number => {
|
|
|
37
42
|
return typeof count === "number" && Number.isSafeInteger(count) && count > 0 ? count : 0;
|
|
38
43
|
};
|
|
39
44
|
|
|
40
|
-
|
|
45
|
+
/** A one-line text of at most 200 characters from a `PwaPartSummary` body, else undefined. */
|
|
46
|
+
export const parsePartSummaryText = (body: unknown): string | undefined => {
|
|
47
|
+
if (typeof body !== "object" || body === null || !("text" in body)) return undefined;
|
|
48
|
+
const text = body.text;
|
|
49
|
+
return typeof text === "string" && text.trim() !== "" && text.length <= 200 && !/[\r\n]/.test(text) ? text.trim() : undefined;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
type BadgeRead = { count: number; text?: string };
|
|
53
|
+
|
|
54
|
+
const readBadge = async (endpoint: string, signal: AbortSignal): Promise<BadgeRead> => {
|
|
41
55
|
try {
|
|
42
56
|
const response = await fetch(endpoint, { credentials: "same-origin", headers: { accept: "application/json" }, signal });
|
|
43
|
-
if (response.status === 200)
|
|
57
|
+
if (response.status === 200) {
|
|
58
|
+
const body: unknown = await response.json();
|
|
59
|
+
return { count: parseAppBadge(body), text: parsePartSummaryText(body) };
|
|
60
|
+
}
|
|
44
61
|
// Release the response without buffering an unused, potentially unbounded error body.
|
|
45
62
|
await response.body?.cancel();
|
|
46
|
-
return 0;
|
|
63
|
+
return { count: 0 };
|
|
47
64
|
} catch {
|
|
48
65
|
// An unreachable or failing app shows no badge rather than a stale one.
|
|
49
|
-
return 0;
|
|
66
|
+
return { count: 0 };
|
|
50
67
|
}
|
|
51
68
|
};
|
|
52
69
|
|
|
@@ -108,10 +125,17 @@ export const watchAppBadges = (endpoints: readonly string[]): (() => void) => {
|
|
|
108
125
|
running.set(endpoint, false);
|
|
109
126
|
const signal = AbortSignal.any([stopped.signal, AbortSignal.timeout(APP_BADGE_INTERVAL_MS)]);
|
|
110
127
|
const result = endpoint === APPROVAL_COUNTS_PATH ? readApprovalCounts(signal) : readBadge(endpoint, signal);
|
|
111
|
-
void result.then((
|
|
128
|
+
void result.then((answer) => {
|
|
112
129
|
if (stopped.signal.aborted) return;
|
|
113
|
-
if (
|
|
114
|
-
|
|
130
|
+
if ("count" in answer) {
|
|
131
|
+
setCounts((previous) => new Map(previous).set(endpoint, answer.count));
|
|
132
|
+
setTexts((previous) => {
|
|
133
|
+
const next = new Map(previous);
|
|
134
|
+
if (answer.text === undefined) next.delete(endpoint);
|
|
135
|
+
else next.set(endpoint, answer.text);
|
|
136
|
+
return next;
|
|
137
|
+
});
|
|
138
|
+
} else setApprovalCounts(answer);
|
|
115
139
|
const queued = running.get(endpoint);
|
|
116
140
|
running.delete(endpoint);
|
|
117
141
|
if (queued && document.visibilityState !== "hidden") read(endpoint);
|
package/src/ssr/index.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
// Server-only exports (these transitively import bun:sql via services)
|
|
2
2
|
// Do NOT import from this barrel in .island.tsx or .client.tsx files!
|
|
3
3
|
|
|
4
|
+
export {
|
|
5
|
+
AdminArea,
|
|
6
|
+
type AdminAreaGroup,
|
|
7
|
+
type AdminAreaItem,
|
|
8
|
+
AdminAreaPane,
|
|
9
|
+
AdminAreaSaveStatusFoot,
|
|
10
|
+
AdminAreaSaveStatusHead,
|
|
11
|
+
} from "./AdminArea";
|
|
4
12
|
export { default as AdminLayout } from "./AdminLayout";
|
|
5
13
|
export {
|
|
6
14
|
hasDedicatedRuntimeRoute,
|
|
@@ -304,7 +304,9 @@ export const installPageTrailRuntime = (labels: PageUpLabels): (() => void) => {
|
|
|
304
304
|
window.addEventListener("ssr:nav-swapped", restoreArrivingPage);
|
|
305
305
|
const onCapture = () => rememberPage();
|
|
306
306
|
const onNavigate = (event: NavigateEvent) => {
|
|
307
|
-
|
|
307
|
+
// Same-address history (for example a closing sheet) stays on this page.
|
|
308
|
+
// Only a departure needs a new scroll snapshot; reading it can force layout.
|
|
309
|
+
if (event.navigationType === "traverse" && event.destination.url !== location.href) rememberPage();
|
|
308
310
|
};
|
|
309
311
|
const onKey = (event: KeyboardEvent) => {
|
|
310
312
|
if (event.key === "Enter") rememberPage();
|
|
@@ -42,6 +42,9 @@ export const platformMessages = i18n.define({
|
|
|
42
42
|
announcements: "Announcements",
|
|
43
43
|
appCredentials: "App credentials",
|
|
44
44
|
ai: "AI",
|
|
45
|
+
observability: "Observability",
|
|
46
|
+
baseSettings: "Base settings",
|
|
47
|
+
cloudAreas: "Cloud",
|
|
45
48
|
settings: "Settings",
|
|
46
49
|
appAdmin: "App administration",
|
|
47
50
|
userManagement: "Accounts & sign-in",
|
|
@@ -49,6 +52,7 @@ export const platformMessages = i18n.define({
|
|
|
49
52
|
accountRegistration: "Registration & requests",
|
|
50
53
|
accountOperations: "Operations",
|
|
51
54
|
linuxAccess: "Linux identities",
|
|
55
|
+
storage: "Storage",
|
|
52
56
|
pdfRendering: "PDF rendering",
|
|
53
57
|
placesAndMaps: "Places and maps",
|
|
54
58
|
emailTemplates: "Email templates",
|
|
@@ -142,8 +146,11 @@ export const platformMessages = i18n.define({
|
|
|
142
146
|
general: "Allgemein",
|
|
143
147
|
rail: "App-Leiste",
|
|
144
148
|
announcements: "Ankündigungen",
|
|
145
|
-
appCredentials: "App-
|
|
149
|
+
appCredentials: "App-Schlüssel",
|
|
146
150
|
ai: "KI",
|
|
151
|
+
observability: "Observability",
|
|
152
|
+
baseSettings: "Grundeinstellungen",
|
|
153
|
+
cloudAreas: "Cloud",
|
|
147
154
|
settings: "Einstellungen",
|
|
148
155
|
appAdmin: "App-Administration",
|
|
149
156
|
userManagement: "Accounts & Anmeldung",
|
|
@@ -151,6 +158,7 @@ export const platformMessages = i18n.define({
|
|
|
151
158
|
accountRegistration: "Registrierung & Anfragen",
|
|
152
159
|
accountOperations: "Betrieb",
|
|
153
160
|
linuxAccess: "Linux-Identitäten",
|
|
161
|
+
storage: "Speicher",
|
|
154
162
|
pdfRendering: "PDF-Erstellung",
|
|
155
163
|
placesAndMaps: "Orte und Karten",
|
|
156
164
|
emailTemplates: "E-Mail-Vorlagen",
|