@happyvertical/smrt-svelte 0.55.16 → 0.55.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/agents/cookbook-shell.md +7 -1
- package/agents/overview-surfaces.md +5 -0
- package/agents/workspace.md +155 -11
- package/dist/browser-ai/svelte/components/DownloadProgress.svelte +22 -19
- package/dist/browser-ai/svelte/components/ModelStatusControl.svelte +16 -13
- package/dist/browser-ai/svelte/components/STTTest.svelte +41 -38
- package/dist/browser-ai/svelte/components/VoiceInput.svelte +17 -14
- package/dist/components/activity/ActivityList.svelte +1 -1
- package/dist/components/app/AppShell.svelte +279 -14
- package/dist/components/app/AppShell.svelte.d.ts +63 -2
- package/dist/components/app/AppShell.svelte.d.ts.map +1 -1
- package/dist/components/app/DockToggles.svelte +53 -11
- package/dist/components/app/DockToggles.svelte.d.ts.map +1 -1
- package/dist/components/app/OwnerSetupForm.svelte +98 -34
- package/dist/components/app/OwnerSetupForm.svelte.d.ts +4 -0
- package/dist/components/app/OwnerSetupForm.svelte.d.ts.map +1 -1
- package/dist/components/app/PhoneTabBar.svelte +136 -0
- package/dist/components/app/PhoneTabBar.svelte.d.ts +22 -0
- package/dist/components/app/PhoneTabBar.svelte.d.ts.map +1 -0
- package/dist/components/app/ShellSettingsPage.svelte +17 -2
- package/dist/components/app/ShellSettingsPage.svelte.d.ts +11 -16
- package/dist/components/app/ShellSettingsPage.svelte.d.ts.map +1 -1
- package/dist/components/app/dock-toggle.d.ts +3 -2
- package/dist/components/app/dock-toggle.d.ts.map +1 -1
- package/dist/components/app/index.d.ts +2 -1
- package/dist/components/app/index.d.ts.map +1 -1
- package/dist/components/app/index.js +1 -0
- package/dist/components/app/owner-setup-types.d.ts +5 -0
- package/dist/components/app/owner-setup-types.d.ts.map +1 -1
- package/dist/components/app/phone-tabs.d.ts +41 -0
- package/dist/components/app/phone-tabs.d.ts.map +1 -0
- package/dist/components/app/phone-tabs.js +66 -0
- package/dist/components/app/slot-item.d.ts +16 -0
- package/dist/components/app/slot-item.d.ts.map +1 -1
- package/dist/components/app/view-transition.d.ts +43 -0
- package/dist/components/app/view-transition.d.ts.map +1 -0
- package/dist/components/app/view-transition.js +76 -0
- package/dist/components/audit/AuditList.svelte +4 -1
- package/dist/components/audit/RecordHistory.svelte +4 -1
- package/dist/components/board/Board.svelte +4 -1
- package/dist/components/command-palette/CommandPalette.svelte +4 -1
- package/dist/components/command-palette/CommandPalette.svelte.d.ts +2 -0
- package/dist/components/command-palette/CommandPalette.svelte.d.ts.map +1 -1
- package/dist/components/command-palette/CommandPaletteDialog.svelte +3 -0
- package/dist/components/command-palette/CommandPaletteTrigger.svelte +3 -0
- package/dist/components/cookbook/CookbookApp.svelte +2 -1
- package/dist/components/cookbook/CookbookApp.svelte.d.ts.map +1 -1
- package/dist/components/cookbook/CookbookSectionPage.svelte +4 -1
- package/dist/components/cookbook/brand-theme.d.ts.map +1 -1
- package/dist/components/cookbook/brand-theme.js +21 -2
- package/dist/components/cookbook/build.js +1 -1
- package/dist/components/cookbook/theme.d.ts.map +1 -1
- package/dist/components/cookbook/theme.js +9 -5
- package/dist/components/cookbook/types.d.ts +5 -1
- package/dist/components/cookbook/types.d.ts.map +1 -1
- package/dist/components/forms/AddressInput.svelte +25 -22
- package/dist/components/forms/CheckboxInput.svelte +8 -5
- package/dist/components/forms/DateRangeInput.svelte +41 -38
- package/dist/components/forms/DateTimeInput.svelte +29 -26
- package/dist/components/forms/FileUpload.svelte +24 -21
- package/dist/components/forms/Form.svelte +34 -31
- package/dist/components/forms/FormMicButton.svelte +10 -7
- package/dist/components/forms/FormScope.svelte +4 -1
- package/dist/components/forms/MeasurementInput.svelte +26 -23
- package/dist/components/forms/MoneyInput.svelte +18 -15
- package/dist/components/forms/NumberInput.svelte +17 -14
- package/dist/components/forms/PhoneInput.svelte +37 -34
- package/dist/components/forms/SearchInput.svelte +16 -13
- package/dist/components/forms/SelectInput.svelte +17 -14
- package/dist/components/forms/TextInput.svelte +19 -16
- package/dist/components/forms/TextareaInput.svelte +21 -18
- package/dist/components/import-export/ImportExport.svelte +4 -1
- package/dist/components/module/ModulePanel.svelte +14 -11
- package/dist/components/notifications/NotificationBell.svelte +4 -1
- package/dist/components/overview/OverviewAssistantUndo.svelte +4 -1
- package/dist/components/overview/OverviewGrid.svelte +11 -6
- package/dist/components/overview/OverviewGrid.svelte.d.ts.map +1 -1
- package/dist/components/overview/WidgetOptionsForm.svelte +3 -0
- package/dist/components/overview/widgets/ChartWidget.svelte +7 -4
- package/dist/components/overview/widgets/MetricWidget.svelte +5 -2
- package/dist/components/overview/widgets/NoteWidget.svelte +5 -2
- package/dist/components/overview/widgets/RecordListWidget.svelte +6 -3
- package/dist/components/overview/widgets/ShortcutsWidget.svelte +12 -6
- package/dist/components/overview/widgets/ShortcutsWidget.svelte.d.ts.map +1 -1
- package/dist/components/screens/DetailScreen.svelte +6 -3
- package/dist/components/screens/EditForm.svelte +6 -3
- package/dist/components/screens/ListScreen.svelte +4 -1
- package/dist/components/screens/RecipeScreens.svelte +1 -1
- package/dist/components/settings/SettingsCatalog.svelte +4 -1
- package/dist/components/sortable/Sortable.svelte +11 -5
- package/dist/components/sortable/Sortable.svelte.d.ts.map +1 -1
- package/dist/components/workspace/Breadcrumbs.svelte +4 -1
- package/dist/components/workspace/NavTree.svelte +4 -1
- package/dist/components/workspace/RoleShell.svelte +4 -1
- package/dist/components/workspace/WorkspaceShell.svelte +43 -40
- package/dist/components/workspace/admin-shell/ActivityItem.svelte +4 -1
- package/dist/components/workspace/admin-shell/ActivityList.svelte +5 -2
- package/dist/components/workspace/admin-shell/ActivityTicker.svelte +6 -3
- package/dist/components/workspace/admin-shell/ActivityToasts.svelte +9 -4
- package/dist/components/workspace/admin-shell/AdminShell.svelte +642 -126
- package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts +7 -1
- package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/AppScopePanel.svelte +4 -1
- package/dist/components/workspace/admin-shell/HotkeyInput.svelte +4 -1
- package/dist/components/workspace/admin-shell/PhoneBottomBar.svelte +58 -14
- package/dist/components/workspace/admin-shell/PhoneBottomBar.svelte.d.ts +9 -2
- package/dist/components/workspace/admin-shell/PhoneBottomBar.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/PhoneTopBar.svelte +15 -6
- package/dist/components/workspace/admin-shell/ShellBrand.svelte +3 -0
- package/dist/components/workspace/admin-shell/ShellCorner.svelte +4 -1
- package/dist/components/workspace/admin-shell/ShellIconButton.svelte +11 -7
- package/dist/components/workspace/admin-shell/ShellLayoutEditor.svelte +6 -3
- package/dist/components/workspace/admin-shell/ShellNavEditor.svelte +19 -13
- package/dist/components/workspace/admin-shell/ShellNavEditor.svelte.d.ts +1 -1
- package/dist/components/workspace/admin-shell/ShellNavEditor.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ShellNavToggle.svelte +8 -5
- package/dist/components/workspace/admin-shell/ShellSectionIcon.svelte +4 -1
- package/dist/components/workspace/admin-shell/ShellSectionMenu.svelte +24 -17
- package/dist/components/workspace/admin-shell/ShellSectionMenu.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte +236 -48
- package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte.d.ts +11 -1
- package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ShellTitle.svelte +4 -1
- package/dist/components/workspace/admin-shell/ShortcutsOverlay.svelte +4 -1
- package/dist/components/workspace/admin-shell/SystemScopePanel.svelte +4 -1
- package/dist/components/workspace/admin-shell/SystemStatusChips.svelte +5 -2
- package/dist/components/workspace/admin-shell/TenantNav.svelte +112 -43
- package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts +4 -3
- package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte +322 -55
- package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts +15 -2
- package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/motion.d.ts +19 -0
- package/dist/components/workspace/admin-shell/motion.d.ts.map +1 -0
- package/dist/components/workspace/admin-shell/motion.js +44 -0
- package/dist/components/workspace/admin-shell/settings.d.ts +1 -0
- package/dist/components/workspace/admin-shell/settings.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/settings.js +1 -1
- package/dist/components/workspace/admin-shell/shell-icons.d.ts +8 -0
- package/dist/components/workspace/admin-shell/shell-icons.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/shell-icons.js +8 -0
- package/dist/components/workspace/admin-shell/state.svelte.d.ts +6 -0
- package/dist/components/workspace/admin-shell/state.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/state.svelte.js +15 -0
- package/dist/components/workspace/admin-shell/types.d.ts +13 -3
- package/dist/components/workspace/admin-shell/types.d.ts.map +1 -1
- package/dist/components/workspace/tools-dock/ToolsDock.svelte +41 -38
- package/dist/i18n/strings.workspace.d.ts +37 -0
- package/dist/i18n/strings.workspace.d.ts.map +1 -1
- package/dist/i18n/strings.workspace.js +42 -2
- package/dist/mcp-apps/McpAppsBridge.svelte +4 -1
- package/package.json +14 -14
|
@@ -103,8 +103,14 @@ interface Props extends AdminShellProps {
|
|
|
103
103
|
viewport: ShellViewport;
|
|
104
104
|
bottomBar: BottomBarMode;
|
|
105
105
|
}]>;
|
|
106
|
-
/** Phone behavior switches (scrim
|
|
106
|
+
/** Phone behavior switches (scrim and swipe to close default on; hide on scroll). */
|
|
107
107
|
phone?: AdminShellPhoneOptions;
|
|
108
|
+
/**
|
|
109
|
+
* Show the built-in "Tools" opener on phones while the right edge has
|
|
110
|
+
* focus tools (default true). `AppShell` turns it off when dock toggles
|
|
111
|
+
* already open the dock from the header.
|
|
112
|
+
*/
|
|
113
|
+
phoneDockOpener?: boolean;
|
|
108
114
|
/** Keep the phone top bar shown (e.g. while a banner is visible). */
|
|
109
115
|
pinChrome?: boolean;
|
|
110
116
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminShell.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/AdminShell.svelte.ts"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"AdminShell.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/AdminShell.svelte.ts"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAUtC,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,mBAAmB,CAAC;AActE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAGH,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AACtB,OAAO,KAAK,EACR,sBAAsB,EACtB,eAAe,EAEf,sBAAsB,EACtB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,UAAU,KAAM,SAAQ,eAAe;IACrC,sEAAsE;IACtE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C;;;OAGG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,6EAA6E;IAC7E,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,eAAe,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC,CAAC;IACxD;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC,CAAC;IAChD;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7C;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,SAAS,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC,CAAC;IAC5E,qFAAqF;IACrF,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAwyCH,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
|
@@ -36,7 +36,7 @@ const { t } = useI18n();
|
|
|
36
36
|
|
|
37
37
|
<section
|
|
38
38
|
class="smrt-app-scope-panel"
|
|
39
|
-
aria-label={t(M['ui.app_scope_panel.app_scope'])}
|
|
39
|
+
aria-label={t(M['ui.app_scope_panel.app_scope'])} data-smrt-component="AppScopePanel"
|
|
40
40
|
>
|
|
41
41
|
<header>
|
|
42
42
|
<div>
|
|
@@ -74,6 +74,8 @@ const { t } = useI18n();
|
|
|
74
74
|
</section>
|
|
75
75
|
|
|
76
76
|
<style>
|
|
77
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
78
|
+
@layer smrt.theme {
|
|
77
79
|
.smrt-app-scope-panel {
|
|
78
80
|
display: grid;
|
|
79
81
|
grid-template-columns: minmax(0, 1fr);
|
|
@@ -110,4 +112,5 @@ const { t } = useI18n();
|
|
|
110
112
|
.smrt-app-scope-panel__section {
|
|
111
113
|
min-width: 0;
|
|
112
114
|
}
|
|
115
|
+
}
|
|
113
116
|
</style>
|
|
@@ -45,7 +45,7 @@ function handleKeydown(event: KeyboardEvent): void {
|
|
|
45
45
|
}
|
|
46
46
|
</script>
|
|
47
47
|
|
|
48
|
-
<div class="smrt-hotkey-input">
|
|
48
|
+
<div class="smrt-hotkey-input" data-smrt-component="HotkeyInput">
|
|
49
49
|
<Button
|
|
50
50
|
variant="secondary"
|
|
51
51
|
size="sm"
|
|
@@ -63,6 +63,8 @@ function handleKeydown(event: KeyboardEvent): void {
|
|
|
63
63
|
</div>
|
|
64
64
|
|
|
65
65
|
<style>
|
|
66
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
67
|
+
@layer smrt.theme {
|
|
66
68
|
.smrt-hotkey-input {
|
|
67
69
|
display: flex;
|
|
68
70
|
align-items: center;
|
|
@@ -75,4 +77,5 @@ function handleKeydown(event: KeyboardEvent): void {
|
|
|
75
77
|
font-size: var(--smrt-typography-body-small-size);
|
|
76
78
|
overflow-wrap: anywhere;
|
|
77
79
|
}
|
|
80
|
+
}
|
|
78
81
|
</style>
|
|
@@ -7,21 +7,27 @@
|
|
|
7
7
|
* while a form's action bar is on screen or the keyboard is open.
|
|
8
8
|
*/
|
|
9
9
|
import { useI18n } from '@happyvertical/smrt-ui/i18n';
|
|
10
|
+
import type { Component } from 'svelte';
|
|
10
11
|
import { M } from '../../../i18n/strings.workspace.js';
|
|
11
12
|
import type { PhoneBottomBarItem } from './mobile-shell.js';
|
|
13
|
+
import ShellSectionIcon from './ShellSectionIcon.svelte';
|
|
14
|
+
import { SHELL_PLACEHOLDER_ICON } from './shell-icons.js';
|
|
15
|
+
import type { PhoneBottomBarEntry } from './types.js';
|
|
12
16
|
|
|
13
17
|
interface Props {
|
|
14
18
|
/** Bar entries, left to right. */
|
|
15
|
-
items: PhoneBottomBarItem[];
|
|
19
|
+
items: (PhoneBottomBarItem | PhoneBottomBarEntry)[];
|
|
20
|
+
/** Renders `iconName`s that are not built-in shell icons. */
|
|
21
|
+
iconComponent?: Component<{ name: string; size?: number }>;
|
|
16
22
|
/** Accessible name of the nav landmark (default "Main"). */
|
|
17
23
|
label?: string;
|
|
18
24
|
}
|
|
19
25
|
|
|
20
|
-
let { items, label }: Props = $props();
|
|
26
|
+
let { items, label, iconComponent }: Props = $props();
|
|
21
27
|
|
|
22
28
|
const { t } = useI18n();
|
|
23
29
|
|
|
24
|
-
function accessibleName(item:
|
|
30
|
+
function accessibleName(item: PhoneBottomBarEntry): string {
|
|
25
31
|
const parts = [item.label];
|
|
26
32
|
if (item.badge) {
|
|
27
33
|
parts.push(
|
|
@@ -33,9 +39,13 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
33
39
|
}
|
|
34
40
|
</script>
|
|
35
41
|
|
|
36
|
-
{#snippet content(item:
|
|
42
|
+
{#snippet content(item: PhoneBottomBarEntry)}
|
|
37
43
|
<span class="smrt-phone-bottom-bar__icon" aria-hidden="true">
|
|
38
|
-
|
|
44
|
+
{#if item.icon}
|
|
45
|
+
<item.icon size={22} />
|
|
46
|
+
{:else}
|
|
47
|
+
<ShellSectionIcon name={item.iconName ?? SHELL_PLACEHOLDER_ICON} size={22} {iconComponent} />
|
|
48
|
+
{/if}
|
|
39
49
|
{#if item.badge}
|
|
40
50
|
<span class="smrt-phone-bottom-bar__badge">
|
|
41
51
|
{item.badge > 9 ? '9+' : item.badge}
|
|
@@ -50,7 +60,7 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
50
60
|
<nav
|
|
51
61
|
class="smrt-phone-bottom-bar"
|
|
52
62
|
aria-label={label ?? t(M['ui.phone_bottom_bar.label'])}
|
|
53
|
-
data-testid="phone-bottom-bar"
|
|
63
|
+
data-testid="phone-bottom-bar" data-smrt-component="PhoneBottomBar"
|
|
54
64
|
>
|
|
55
65
|
{#each items as item (item.id)}
|
|
56
66
|
{#if item.href}
|
|
@@ -84,6 +94,8 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
84
94
|
</nav>
|
|
85
95
|
|
|
86
96
|
<style>
|
|
97
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
98
|
+
@layer smrt.theme {
|
|
87
99
|
.smrt-phone-bottom-bar {
|
|
88
100
|
display: grid;
|
|
89
101
|
grid-auto-columns: minmax(0, 1fr);
|
|
@@ -92,8 +104,10 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
92
104
|
box-sizing: content-box;
|
|
93
105
|
block-size: 3.5rem;
|
|
94
106
|
padding: 0 var(--smrt-spacing-2) env(safe-area-inset-bottom);
|
|
95
|
-
border-block-start:
|
|
96
|
-
background: var(--smrt-
|
|
107
|
+
border-block-start: var(--smrt-hairline);
|
|
108
|
+
background: var(--smrt-glass-surface);
|
|
109
|
+
-webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
|
|
110
|
+
backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
|
|
97
111
|
}
|
|
98
112
|
|
|
99
113
|
.smrt-phone-bottom-bar__item {
|
|
@@ -101,11 +115,11 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
101
115
|
place-items: center;
|
|
102
116
|
align-content: center;
|
|
103
117
|
gap: var(--smrt-spacing-1);
|
|
104
|
-
min-inline-size:
|
|
105
|
-
min-block-size:
|
|
118
|
+
min-inline-size: var(--smrt-touch-target-min);
|
|
119
|
+
min-block-size: var(--smrt-touch-target-min);
|
|
106
120
|
padding: var(--smrt-spacing-1) 0;
|
|
107
121
|
border: 0;
|
|
108
|
-
border-radius: var(--smrt-radius
|
|
122
|
+
border-radius: var(--smrt-control-radius);
|
|
109
123
|
background: transparent;
|
|
110
124
|
color: var(--smrt-color-on-surface-variant);
|
|
111
125
|
font: inherit;
|
|
@@ -114,6 +128,35 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
114
128
|
-webkit-tap-highlight-color: transparent;
|
|
115
129
|
}
|
|
116
130
|
|
|
131
|
+
.smrt-phone-bottom-bar__item {
|
|
132
|
+
position: relative;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* State layer over the whole tab; the selected indicator pill keeps its
|
|
136
|
+
container fill. */
|
|
137
|
+
.smrt-phone-bottom-bar__item::after {
|
|
138
|
+
content: '';
|
|
139
|
+
position: absolute;
|
|
140
|
+
inset: 0;
|
|
141
|
+
border-radius: inherit;
|
|
142
|
+
background: currentColor;
|
|
143
|
+
opacity: 0;
|
|
144
|
+
pointer-events: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.smrt-phone-bottom-bar__item:hover::after {
|
|
148
|
+
opacity: var(--smrt-state-hover);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.smrt-phone-bottom-bar__item:active::after {
|
|
152
|
+
opacity: var(--smrt-state-pressed);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.smrt-phone-bottom-bar__item:disabled,
|
|
156
|
+
.smrt-phone-bottom-bar__item[aria-disabled='true'] {
|
|
157
|
+
opacity: var(--smrt-state-disabled);
|
|
158
|
+
}
|
|
159
|
+
|
|
117
160
|
.smrt-phone-bottom-bar__item.active {
|
|
118
161
|
color: var(--smrt-color-primary);
|
|
119
162
|
}
|
|
@@ -124,8 +167,8 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
124
167
|
}
|
|
125
168
|
|
|
126
169
|
.smrt-phone-bottom-bar__item:focus-visible {
|
|
127
|
-
outline:
|
|
128
|
-
outline-offset: -
|
|
170
|
+
outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
|
|
171
|
+
outline-offset: calc(-1 * var(--smrt-focus-ring-width));
|
|
129
172
|
}
|
|
130
173
|
|
|
131
174
|
.smrt-phone-bottom-bar__icon {
|
|
@@ -163,8 +206,9 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
163
206
|
inset-inline-end: 1rem;
|
|
164
207
|
inline-size: 0.6rem;
|
|
165
208
|
block-size: 0.6rem;
|
|
166
|
-
border:
|
|
209
|
+
border: var(--smrt-focus-ring-width) solid var(--smrt-surface-panel);
|
|
167
210
|
border-radius: var(--smrt-radius-full);
|
|
168
211
|
background: var(--smrt-color-primary);
|
|
169
212
|
}
|
|
213
|
+
}
|
|
170
214
|
</style>
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
+
import type { Component } from 'svelte';
|
|
1
2
|
import type { PhoneBottomBarItem } from './mobile-shell.js';
|
|
3
|
+
import type { PhoneBottomBarEntry } from './types.js';
|
|
2
4
|
interface Props {
|
|
3
5
|
/** Bar entries, left to right. */
|
|
4
|
-
items: PhoneBottomBarItem[];
|
|
6
|
+
items: (PhoneBottomBarItem | PhoneBottomBarEntry)[];
|
|
7
|
+
/** Renders `iconName`s that are not built-in shell icons. */
|
|
8
|
+
iconComponent?: Component<{
|
|
9
|
+
name: string;
|
|
10
|
+
size?: number;
|
|
11
|
+
}>;
|
|
5
12
|
/** Accessible name of the nav landmark (default "Main"). */
|
|
6
13
|
label?: string;
|
|
7
14
|
}
|
|
8
|
-
declare const PhoneBottomBar:
|
|
15
|
+
declare const PhoneBottomBar: Component<Props, {}, "">;
|
|
9
16
|
type PhoneBottomBar = ReturnType<typeof PhoneBottomBar>;
|
|
10
17
|
export default PhoneBottomBar;
|
|
11
18
|
//# sourceMappingURL=PhoneBottomBar.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhoneBottomBar.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/PhoneBottomBar.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PhoneBottomBar.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/PhoneBottomBar.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,UAAU,KAAK;IACb,kCAAkC;IAClC,KAAK,EAAE,CAAC,kBAAkB,GAAG,mBAAmB,CAAC,EAAE,CAAC;IACpD,6DAA6D;IAC7D,aAAa,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiED,QAAA,MAAM,cAAc,0BAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -23,7 +23,7 @@ let { model, homeHref }: Props = $props();
|
|
|
23
23
|
const { t } = useI18n();
|
|
24
24
|
</script>
|
|
25
25
|
|
|
26
|
-
<div class="smrt-phone-top-bar" data-testid="phone-top-bar" data-kind={model.kind}>
|
|
26
|
+
<div class="smrt-phone-top-bar" data-testid="phone-top-bar" data-kind={model.kind} data-smrt-component="PhoneTopBar">
|
|
27
27
|
{#if model.kind === 'detail'}
|
|
28
28
|
<a
|
|
29
29
|
class="smrt-phone-top-bar__back"
|
|
@@ -52,6 +52,8 @@ const { t } = useI18n();
|
|
|
52
52
|
</div>
|
|
53
53
|
|
|
54
54
|
<style>
|
|
55
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
56
|
+
@layer smrt.theme {
|
|
55
57
|
.smrt-phone-top-bar {
|
|
56
58
|
display: flex;
|
|
57
59
|
align-items: center;
|
|
@@ -59,8 +61,10 @@ const { t } = useI18n();
|
|
|
59
61
|
box-sizing: border-box;
|
|
60
62
|
block-size: var(--smrt-admin-shell-phone-top-size, 3.5rem);
|
|
61
63
|
padding: 0 var(--smrt-spacing-2);
|
|
62
|
-
border-block-end:
|
|
63
|
-
background: var(--smrt-
|
|
64
|
+
border-block-end: var(--smrt-hairline);
|
|
65
|
+
background: var(--smrt-glass-surface);
|
|
66
|
+
-webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
|
|
67
|
+
backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
|
|
64
68
|
color: var(--smrt-color-on-surface);
|
|
65
69
|
}
|
|
66
70
|
|
|
@@ -76,12 +80,16 @@ const { t } = useI18n();
|
|
|
76
80
|
|
|
77
81
|
.smrt-phone-top-bar__back:hover,
|
|
78
82
|
.smrt-phone-top-bar__back:focus-visible {
|
|
79
|
-
background: var(--smrt-
|
|
83
|
+
background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.smrt-phone-top-bar__back:active {
|
|
87
|
+
background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent);
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
.smrt-phone-top-bar__back:focus-visible {
|
|
83
|
-
outline:
|
|
84
|
-
outline-offset: -
|
|
91
|
+
outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
|
|
92
|
+
outline-offset: calc(-1 * var(--smrt-focus-ring-width));
|
|
85
93
|
}
|
|
86
94
|
|
|
87
95
|
.smrt-phone-top-bar__title {
|
|
@@ -91,4 +99,5 @@ const { t } = useI18n();
|
|
|
91
99
|
text-overflow: ellipsis;
|
|
92
100
|
white-space: nowrap;
|
|
93
101
|
}
|
|
102
|
+
}
|
|
94
103
|
</style>
|
|
@@ -54,6 +54,8 @@ const { t } = useI18n();
|
|
|
54
54
|
{/if}
|
|
55
55
|
|
|
56
56
|
<style>
|
|
57
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
58
|
+
@layer smrt.theme {
|
|
57
59
|
.smrt-admin-shell__brand {
|
|
58
60
|
display: flex;
|
|
59
61
|
align-items: center;
|
|
@@ -83,4 +85,5 @@ const { t } = useI18n();
|
|
|
83
85
|
.smrt-admin-shell__brand-text.wordmark strong {
|
|
84
86
|
font: var(--smrt-typography-headline-small-font, 500 1.5rem/2rem sans-serif);
|
|
85
87
|
}
|
|
88
|
+
}
|
|
86
89
|
</style>
|
|
@@ -10,11 +10,13 @@ interface Props {
|
|
|
10
10
|
let { side, children }: Props = $props();
|
|
11
11
|
</script>
|
|
12
12
|
|
|
13
|
-
<div class="smrt-shell-corner" data-side={side}>
|
|
13
|
+
<div class="smrt-shell-corner" data-side={side} data-smrt-component="ShellCorner">
|
|
14
14
|
{@render children()}
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
17
|
<style>
|
|
18
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
19
|
+
@layer smrt.theme {
|
|
18
20
|
.smrt-shell-corner {
|
|
19
21
|
inline-size: var(--smrt-admin-shell-left-track);
|
|
20
22
|
min-inline-size: 0;
|
|
@@ -23,4 +25,5 @@ let { side, children }: Props = $props();
|
|
|
23
25
|
.smrt-shell-corner[data-side='right'] {
|
|
24
26
|
inline-size: var(--smrt-admin-shell-right-track);
|
|
25
27
|
}
|
|
28
|
+
}
|
|
26
29
|
</style>
|
|
@@ -44,7 +44,7 @@ let {
|
|
|
44
44
|
class="smrt-shell-icon-button {className}"
|
|
45
45
|
aria-label={label}
|
|
46
46
|
title={tooltip ?? label}
|
|
47
|
-
aria-pressed={pressed}
|
|
47
|
+
aria-pressed={pressed} data-smrt-component="ShellIconButton"
|
|
48
48
|
>
|
|
49
49
|
{#if children}
|
|
50
50
|
{@render children()}
|
|
@@ -56,22 +56,26 @@ let {
|
|
|
56
56
|
</button>
|
|
57
57
|
|
|
58
58
|
<style>
|
|
59
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
60
|
+
@layer smrt.theme {
|
|
59
61
|
.smrt-shell-icon-button {
|
|
60
62
|
flex: 0 0 auto;
|
|
61
63
|
display: inline-grid;
|
|
62
64
|
place-items: center;
|
|
63
65
|
box-sizing: border-box;
|
|
64
|
-
inline-size: max(
|
|
65
|
-
block-size: max(
|
|
66
|
+
inline-size: max(var(--smrt-control-height-small), var(--smrt-control-target-min, 0px));
|
|
67
|
+
block-size: max(var(--smrt-control-height-small), var(--smrt-control-target-min, 0px));
|
|
66
68
|
padding: 0;
|
|
67
69
|
border: 0;
|
|
68
|
-
border-radius: var(--smrt-radius
|
|
70
|
+
border-radius: var(--smrt-control-radius);
|
|
69
71
|
background: transparent;
|
|
70
72
|
color: var(--smrt-color-on-surface-variant);
|
|
71
73
|
cursor: pointer;
|
|
72
74
|
}
|
|
73
|
-
.smrt-shell-icon-button:hover { background: var(--smrt-
|
|
75
|
+
.smrt-shell-icon-button:hover { background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent); color: var(--smrt-color-on-surface); }
|
|
76
|
+
.smrt-shell-icon-button:active { background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent); }
|
|
74
77
|
.smrt-shell-icon-button[aria-pressed='true'] { color: var(--smrt-color-on-surface); }
|
|
75
|
-
.smrt-shell-icon-button:focus-visible { outline:
|
|
76
|
-
.smrt-shell-icon-button:disabled { opacity:
|
|
78
|
+
.smrt-shell-icon-button:focus-visible { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
|
|
79
|
+
.smrt-shell-icon-button:disabled { opacity: var(--smrt-state-disabled); cursor: not-allowed; }
|
|
80
|
+
}
|
|
77
81
|
</style>
|
|
@@ -114,7 +114,7 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
114
114
|
}
|
|
115
115
|
</script>
|
|
116
116
|
|
|
117
|
-
<section class="smrt-shell-layout-editor" aria-labelledby={headingId} bind:this={rootEl}>
|
|
117
|
+
<section class="smrt-shell-layout-editor" aria-labelledby={headingId} bind:this={rootEl} data-smrt-component="ShellLayoutEditor">
|
|
118
118
|
<header>
|
|
119
119
|
<div>
|
|
120
120
|
<h2 id={headingId}>{t(M['ui.shell_layout_editor.heading'])}</h2>
|
|
@@ -246,12 +246,14 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
246
246
|
</section>
|
|
247
247
|
|
|
248
248
|
<style>
|
|
249
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
250
|
+
@layer smrt.theme {
|
|
249
251
|
.smrt-shell-layout-editor { display: grid; gap: var(--smrt-spacing-4); min-inline-size: 0; overflow-wrap: anywhere; }
|
|
250
252
|
.smrt-shell-layout-editor header { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--smrt-spacing-3); }
|
|
251
253
|
.smrt-shell-layout-editor h2, .smrt-shell-layout-editor h3, .smrt-shell-layout-editor p { margin: 0; }
|
|
252
254
|
.smrt-shell-layout-editor p, .smrt-shell-layout-editor__muted { color: var(--smrt-color-on-surface-variant); }
|
|
253
255
|
.smrt-shell-layout-editor h3 { font: var(--smrt-typography-title-small-font); margin-block-end: var(--smrt-spacing-2); }
|
|
254
|
-
.smrt-shell-layout-editor__panels { display: grid; gap: var(--smrt-spacing-2); margin: 0; padding: var(--smrt-spacing-3); border:
|
|
256
|
+
.smrt-shell-layout-editor__panels { display: grid; gap: var(--smrt-spacing-2); margin: 0; padding: var(--smrt-spacing-3); border: var(--smrt-hairline); border-radius: var(--smrt-radius-md); }
|
|
255
257
|
.smrt-shell-layout-editor__panels legend { padding-inline: var(--smrt-spacing-1); font: var(--smrt-typography-title-small-font); }
|
|
256
258
|
.smrt-shell-layout-editor__row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--smrt-spacing-4); }
|
|
257
259
|
.smrt-shell-layout-editor__body { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: var(--smrt-spacing-4); align-items: start; }
|
|
@@ -259,10 +261,11 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
259
261
|
.smrt-shell-layout-editor__nav-head h3 { margin-block-end: 0; }
|
|
260
262
|
:global(.smrt-shell-layout-editor__name) { flex: 1 1 8rem; min-inline-size: 0; }
|
|
261
263
|
.smrt-shell-layout-editor__label { flex: 1 1 auto; min-inline-size: 0; }
|
|
262
|
-
.smrt-shell-layout-editor__preview-frame { padding: var(--smrt-spacing-3); border:
|
|
264
|
+
.smrt-shell-layout-editor__preview-frame { padding: var(--smrt-spacing-3); border: var(--smrt-hairline); border-style: dashed; border-radius: var(--smrt-radius-md); background: var(--smrt-surface-sunken); }
|
|
263
265
|
/* Label on its own line (never broken mid-word); the select and Reset share the next line. */
|
|
264
266
|
@media (max-width: 48rem) {
|
|
265
267
|
.smrt-shell-layout-editor header { flex-direction: column; }
|
|
266
268
|
.smrt-shell-layout-editor__body { grid-template-columns: minmax(0, 1fr); }
|
|
267
269
|
}
|
|
270
|
+
}
|
|
268
271
|
</style>
|
|
@@ -43,7 +43,7 @@ interface Props {
|
|
|
43
43
|
* picker); their entries are edited on the section's own page with
|
|
44
44
|
* `ShellSectionMenu`. Default `'items'`.
|
|
45
45
|
*/
|
|
46
|
-
navMode?: 'items' | 'sections';
|
|
46
|
+
navMode?: 'items' | 'sections' | 'sections-with-items';
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
let {
|
|
@@ -312,7 +312,7 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
312
312
|
data-layout-editing=""
|
|
313
313
|
data-nav-mode={navMode}
|
|
314
314
|
aria-label={ariaLabel || t(M['ui.shell_layout_editor.sortable_label'])}
|
|
315
|
-
bind:this={rootEl}
|
|
315
|
+
bind:this={rootEl} data-smrt-component="ShellNavEditor"
|
|
316
316
|
>
|
|
317
317
|
<Sortable
|
|
318
318
|
{containers}
|
|
@@ -350,7 +350,7 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
350
350
|
aria-label={t(M['ui.layout_edit.edit_section'], { label: entry.label })}
|
|
351
351
|
onpointerenter={(event) => onhover(entry.id, event)}
|
|
352
352
|
onclick={() => onactivate(entry.id)}
|
|
353
|
-
>{#if navMode
|
|
353
|
+
>{#if navMode !== 'items'}<span class="smrt-nav-editor__section-icon"><ShellSectionIcon name={entry.icon} iconComponent={IconComponent} /></span>{/if}{entry.label}</button>
|
|
354
354
|
<span class="smrt-nav-editor__overlay">
|
|
355
355
|
{@render toggles(entry)}
|
|
356
356
|
{@render actions(entry)}
|
|
@@ -377,7 +377,7 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
377
377
|
}}
|
|
378
378
|
/>
|
|
379
379
|
{@render toggles(entry)}
|
|
380
|
-
{#if navMode
|
|
380
|
+
{#if navMode !== 'items'}
|
|
381
381
|
<ShellIconButton
|
|
382
382
|
data-section-icon={entry.id}
|
|
383
383
|
aria-haspopup="true"
|
|
@@ -396,7 +396,7 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
396
396
|
/>
|
|
397
397
|
{/if}
|
|
398
398
|
{@render actions(entry)}
|
|
399
|
-
{#if navMode
|
|
399
|
+
{#if navMode !== 'items' && iconPicker === entry.id}
|
|
400
400
|
<div
|
|
401
401
|
class="smrt-nav-editor__icons"
|
|
402
402
|
role="group"
|
|
@@ -432,7 +432,7 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
432
432
|
{#if IconComponent}
|
|
433
433
|
<IconComponent name={icon} size={18} />
|
|
434
434
|
{:else}
|
|
435
|
-
{icon}
|
|
435
|
+
<ShellSectionIcon name={icon} size={18} />
|
|
436
436
|
{/if}
|
|
437
437
|
</span>
|
|
438
438
|
{/if}
|
|
@@ -489,13 +489,15 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
489
489
|
</nav>
|
|
490
490
|
|
|
491
491
|
<style>
|
|
492
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
493
|
+
@layer smrt.theme {
|
|
492
494
|
.smrt-nav-editor { display: grid; gap: var(--smrt-spacing-2); min-inline-size: 0; }
|
|
493
495
|
/* Make the generic Sortable read as the real navigation. */
|
|
494
496
|
.smrt-nav-editor :global(.smrt-sortable) { gap: var(--smrt-spacing-1); }
|
|
495
497
|
.smrt-nav-editor :global(.smrt-sortable__containers) { gap: var(--smrt-spacing-1); }
|
|
496
498
|
.smrt-nav-editor :global(.smrt-sortable__container) { padding: 0; border: 0; background: transparent; gap: var(--smrt-spacing-1); }
|
|
497
|
-
.smrt-nav-editor :global(.smrt-sortable__item) { padding: 0; border: 0; border-radius: var(--smrt-radius
|
|
498
|
-
.smrt-nav-editor :global(.smrt-sortable__item:hover) { background: var(--smrt-
|
|
499
|
+
.smrt-nav-editor :global(.smrt-sortable__item) { padding: 0; border: 0; border-radius: var(--smrt-control-radius); background: transparent; }
|
|
500
|
+
.smrt-nav-editor :global(.smrt-sortable__item:hover) { background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent); }
|
|
499
501
|
.smrt-nav-editor :global(.smrt-sortable__items) { padding-inline-start: var(--smrt-spacing-3); min-block-size: 0; }
|
|
500
502
|
.smrt-nav-editor :global(.smrt-sortable__header) { min-block-size: 0; }
|
|
501
503
|
.smrt-nav-editor :global(.smrt-sortable__empty) { padding-block: 0; }
|
|
@@ -503,15 +505,18 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
503
505
|
|
|
504
506
|
.smrt-nav-editor__top { color: var(--smrt-color-on-surface-variant); font: var(--smrt-typography-label-small-font); text-transform: uppercase; letter-spacing: 0.04em; }
|
|
505
507
|
.smrt-nav-editor__head { position: relative; flex: 1 1 auto; display: flex; align-items: center; gap: var(--smrt-spacing-1); min-inline-size: 0; }
|
|
506
|
-
.smrt-nav-editor__title { flex: 1 1 auto; min-inline-size: 0; padding: var(--smrt-spacing-2) var(--smrt-spacing-3); border: 0; border-radius: var(--smrt-radius
|
|
507
|
-
.smrt-nav-editor__title:hover, .smrt-nav-editor__head[data-toolbar-open] .smrt-nav-editor__title { background: var(--smrt-
|
|
508
|
-
.smrt-nav-editor__title:focus-visible { outline:
|
|
508
|
+
.smrt-nav-editor__title { flex: 1 1 auto; min-inline-size: 0; padding: var(--smrt-spacing-2) var(--smrt-spacing-3); border: 0; border-radius: var(--smrt-control-radius); background: transparent; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-label-large-size); font-weight: var(--smrt-typography-weight-semibold); text-align: start; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
509
|
+
.smrt-nav-editor__title:hover, .smrt-nav-editor__head[data-toolbar-open] .smrt-nav-editor__title { background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent); }
|
|
510
|
+
.smrt-nav-editor__title:focus-visible { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
|
|
509
511
|
.smrt-nav-editor__title--off { font-style: italic; font-weight: var(--smrt-typography-weight-normal, normal); }
|
|
510
512
|
.smrt-nav-editor__title--hidden { opacity: 0.55; }
|
|
511
513
|
.smrt-nav-editor__overlay { display: inline-flex; align-items: center; flex: 0 0 auto; }
|
|
512
|
-
.smrt-nav-editor__toolbar { position: absolute; inset-block-start: 100%; inset-inline: 0; z-index: 40; display: flex; flex-wrap: wrap; align-items: center; gap: var(--smrt-spacing-1); padding: var(--smrt-spacing-2); border:
|
|
514
|
+
.smrt-nav-editor__toolbar { position: absolute; inset-block-start: 100%; inset-inline: 0; z-index: 40; display: flex; flex-wrap: wrap; align-items: center; gap: var(--smrt-spacing-1); padding: var(--smrt-spacing-2); border: var(--smrt-hairline); border-radius: var(--smrt-radius-medium); background: var(--smrt-glass-surface-strong); -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation)); backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation)); box-shadow: var(--smrt-elevation-3), var(--smrt-inset-highlight); }
|
|
513
515
|
:global(.smrt-nav-editor__name) { flex: 1 1 100%; min-inline-size: 0; }
|
|
514
|
-
.smrt-nav-editor__row { flex: 1 1 auto; min-inline-size: 0; display: flex; align-items: center; gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-2) var(--smrt-spacing-1); color: var(--smrt-color-on-surface); }
|
|
516
|
+
.smrt-nav-editor__row { flex: 1 1 auto; min-inline-size: 0; display: flex; align-items: center; gap: var(--smrt-spacing-2); box-sizing: border-box; min-block-size: var(--smrt-control-target-min); padding: var(--smrt-spacing-2) var(--smrt-spacing-1); color: var(--smrt-color-on-surface); }
|
|
517
|
+
@media (max-width: 48rem) {
|
|
518
|
+
.smrt-nav-editor { --smrt-control-target-min: var(--smrt-touch-target-min); }
|
|
519
|
+
}
|
|
515
520
|
.smrt-nav-editor__row--muted { opacity: 0.55; }
|
|
516
521
|
.smrt-nav-editor__row strong { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: var(--smrt-typography-weight-medium, 500); }
|
|
517
522
|
/* Keep editor rows inside the sidebar: the implicit grid column would size to
|
|
@@ -528,4 +533,5 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
528
533
|
.smrt-nav-editor__section-icon { display: inline-flex; margin-inline-end: var(--smrt-spacing-2); vertical-align: middle; }
|
|
529
534
|
.smrt-nav-editor__icons { flex: 1 1 100%; display: grid; grid-template-columns: repeat(auto-fill, minmax(2rem, 1fr)); gap: var(--smrt-spacing-1); padding-block-start: var(--smrt-spacing-1); }
|
|
530
535
|
.smrt-nav-editor__icons :global(.smrt-shell-icon-button[aria-pressed='true']) { background: var(--smrt-color-primary-container); color: var(--smrt-color-on-primary-container); }
|
|
536
|
+
}
|
|
531
537
|
</style>
|
|
@@ -18,7 +18,7 @@ interface Props {
|
|
|
18
18
|
* picker); their entries are edited on the section's own page with
|
|
19
19
|
* `ShellSectionMenu`. Default `'items'`.
|
|
20
20
|
*/
|
|
21
|
-
navMode?: 'items' | 'sections';
|
|
21
|
+
navMode?: 'items' | 'sections' | 'sections-with-items';
|
|
22
22
|
}
|
|
23
23
|
declare const ShellNavEditor: Component<Props, {}, "">;
|
|
24
24
|
type ShellNavEditor = ReturnType<typeof ShellNavEditor>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellNavEditor.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ShellNavEditor.svelte.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAUrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAO3E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAG7D,UAAU,KAAK;IACb,oEAAoE;IACpE,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACvD;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ShellNavEditor.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ShellNavEditor.svelte.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAUrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAO3E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAG7D,UAAU,KAAK;IACb,oEAAoE;IACpE,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACvD;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,qBAAqB,CAAC;CACxD;AA+WD,QAAA,MAAM,cAAc,0BAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -41,7 +41,7 @@ const name = $derived(label ?? t(M['ui.shell_nav_toggle.navigation']));
|
|
|
41
41
|
aria-expanded={expanded}
|
|
42
42
|
aria-controls={controls}
|
|
43
43
|
data-testid="shell-nav-toggle"
|
|
44
|
-
{onclick}
|
|
44
|
+
{onclick} data-smrt-component="ShellNavToggle"
|
|
45
45
|
>
|
|
46
46
|
<svg
|
|
47
47
|
viewBox="0 0 24 24"
|
|
@@ -63,6 +63,8 @@ const name = $derived(label ?? t(M['ui.shell_nav_toggle.navigation']));
|
|
|
63
63
|
</button>
|
|
64
64
|
|
|
65
65
|
<style>
|
|
66
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
67
|
+
@layer smrt.theme {
|
|
66
68
|
.smrt-shell-nav-toggle {
|
|
67
69
|
display: inline-grid;
|
|
68
70
|
place-items: center;
|
|
@@ -70,19 +72,20 @@ const name = $derived(label ?? t(M['ui.shell_nav_toggle.navigation']));
|
|
|
70
72
|
inline-size: 2.75rem;
|
|
71
73
|
block-size: 2.75rem;
|
|
72
74
|
border: 0;
|
|
73
|
-
border-radius: var(--smrt-radius
|
|
75
|
+
border-radius: var(--smrt-control-radius);
|
|
74
76
|
background: transparent;
|
|
75
77
|
color: var(--smrt-color-on-surface-variant);
|
|
76
78
|
cursor: pointer;
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
.smrt-shell-nav-toggle:hover {
|
|
80
|
-
background: var(--smrt-
|
|
82
|
+
background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
|
|
81
83
|
color: var(--smrt-color-on-surface);
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
.smrt-shell-nav-toggle:focus-visible {
|
|
85
|
-
outline:
|
|
86
|
-
outline-offset:
|
|
87
|
+
outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
|
|
88
|
+
outline-offset: var(--smrt-focus-ring-offset);
|
|
87
89
|
}
|
|
90
|
+
}
|
|
88
91
|
</style>
|
|
@@ -42,7 +42,7 @@ $effect(() => {
|
|
|
42
42
|
});
|
|
43
43
|
</script>
|
|
44
44
|
|
|
45
|
-
<span class="smrt-shell-section-icon" aria-hidden="true">
|
|
45
|
+
<span class="smrt-shell-section-icon" aria-hidden="true" data-smrt-component="ShellSectionIcon">
|
|
46
46
|
{#if isShellIconName(name)}
|
|
47
47
|
<svg viewBox="0 0 24 24" width={size} height={size} fill="currentColor" focusable="false"><path d={SHELL_ICON_PATHS[name]} /></svg>
|
|
48
48
|
{:else if Host}
|
|
@@ -53,5 +53,8 @@ $effect(() => {
|
|
|
53
53
|
</span>
|
|
54
54
|
|
|
55
55
|
<style>
|
|
56
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
57
|
+
@layer smrt.theme {
|
|
56
58
|
.smrt-shell-section-icon { display: inline-grid; place-items: center; flex: 0 0 auto; }
|
|
59
|
+
}
|
|
57
60
|
</style>
|