@happyvertical/smrt-svelte 0.55.16 → 0.55.17
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 +145 -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 +274 -9
- 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 +27 -1
- 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 +4 -1
- package/dist/components/workspace/admin-shell/AdminShell.svelte +502 -72
- 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 +21 -8
- 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 +4 -1
- 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 +4 -1
- package/dist/components/workspace/admin-shell/ShellLayoutEditor.svelte +4 -1
- package/dist/components/workspace/admin-shell/ShellNavEditor.svelte +13 -7
- 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 +4 -1
- package/dist/components/workspace/admin-shell/ShellSectionIcon.svelte +4 -1
- package/dist/components/workspace/admin-shell/ShellSectionMenu.svelte +15 -10
- 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 +81 -36
- 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 +305 -53
- 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":"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"}
|
|
@@ -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);
|
|
@@ -101,8 +113,8 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
101
113
|
place-items: center;
|
|
102
114
|
align-content: center;
|
|
103
115
|
gap: var(--smrt-spacing-1);
|
|
104
|
-
min-inline-size:
|
|
105
|
-
min-block-size:
|
|
116
|
+
min-inline-size: var(--smrt-touch-target-min);
|
|
117
|
+
min-block-size: var(--smrt-touch-target-min);
|
|
106
118
|
padding: var(--smrt-spacing-1) 0;
|
|
107
119
|
border: 0;
|
|
108
120
|
border-radius: var(--smrt-radius-lg);
|
|
@@ -167,4 +179,5 @@ function accessibleName(item: PhoneBottomBarItem): string {
|
|
|
167
179
|
border-radius: var(--smrt-radius-full);
|
|
168
180
|
background: var(--smrt-color-primary);
|
|
169
181
|
}
|
|
182
|
+
}
|
|
170
183
|
</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;
|
|
@@ -91,4 +93,5 @@ const { t } = useI18n();
|
|
|
91
93
|
text-overflow: ellipsis;
|
|
92
94
|
white-space: nowrap;
|
|
93
95
|
}
|
|
96
|
+
}
|
|
94
97
|
</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,6 +56,8 @@ 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;
|
|
@@ -74,4 +76,5 @@ let {
|
|
|
74
76
|
.smrt-shell-icon-button[aria-pressed='true'] { color: var(--smrt-color-on-surface); }
|
|
75
77
|
.smrt-shell-icon-button:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
|
|
76
78
|
.smrt-shell-icon-button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
79
|
+
}
|
|
77
80
|
</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,6 +246,8 @@ 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; }
|
|
@@ -265,4 +267,5 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
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,6 +489,8 @@ 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); }
|
|
@@ -511,7 +513,10 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
|
|
|
511
513
|
.smrt-nav-editor__overlay { display: inline-flex; align-items: center; flex: 0 0 auto; }
|
|
512
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: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-medium); background: var(--smrt-color-surface-container-high); box-shadow: var(--smrt-elevation-2, 0 4px 12px rgb(0 0 0 / 0.2)); }
|
|
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;
|
|
@@ -85,4 +87,5 @@ const name = $derived(label ?? t(M['ui.shell_nav_toggle.navigation']));
|
|
|
85
87
|
outline: 2px solid var(--smrt-color-primary);
|
|
86
88
|
outline-offset: 2px;
|
|
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>
|
|
@@ -19,6 +19,7 @@ import Sortable from '../../sortable/Sortable.svelte';
|
|
|
19
19
|
import type { SortableItem, SortableItemMove } from '../../sortable/types.js';
|
|
20
20
|
import { useShellLayout } from './layout-context.js';
|
|
21
21
|
import type { ShellLayoutController } from './layout-controller.svelte.js';
|
|
22
|
+
import { flipRow } from './motion.js';
|
|
22
23
|
import ShellIconButton from './ShellIconButton.svelte';
|
|
23
24
|
import ShellSectionIcon from './ShellSectionIcon.svelte';
|
|
24
25
|
import { SHELL_DEFAULT_SECTION_ICON, SHELL_ICON_PATHS } from './shell-icons.js';
|
|
@@ -130,7 +131,7 @@ function onmove(move: SortableItemMove<SortableItem>): void {
|
|
|
130
131
|
class="smrt-section-menu"
|
|
131
132
|
class:smrt-section-menu--cards={layoutMode === 'cards'}
|
|
132
133
|
bind:this={rootEl}
|
|
133
|
-
data-editing={editing ? '' : undefined}
|
|
134
|
+
data-editing={editing ? '' : undefined} data-smrt-component="ShellSectionMenu"
|
|
134
135
|
>
|
|
135
136
|
{#if editing}
|
|
136
137
|
<Sortable
|
|
@@ -203,12 +204,14 @@ function onmove(move: SortableItemMove<SortableItem>): void {
|
|
|
203
204
|
{:else if layoutMode === 'cards'}
|
|
204
205
|
<ul class="smrt-section-menu__cards" aria-label={listLabel}>
|
|
205
206
|
{#each entries as entry (entry.id)}
|
|
206
|
-
<li class="smrt-section-menu__card">
|
|
207
|
+
<li class="smrt-section-menu__card" animate:flipRow>
|
|
207
208
|
<a class="smrt-section-menu__card-link" href={entry.href} onclick={onNavigate}>
|
|
208
|
-
<span class="smrt-section-menu__card-
|
|
209
|
-
<
|
|
209
|
+
<span class="smrt-section-menu__card-heading">
|
|
210
|
+
<span class="smrt-section-menu__card-icon">
|
|
211
|
+
<ShellSectionIcon name={entry.icon ?? SHELL_DEFAULT_SECTION_ICON} size={28} iconComponent={IconComponent} />
|
|
212
|
+
</span>
|
|
213
|
+
<span class="smrt-section-menu__card-title">{entry.label}</span>
|
|
210
214
|
</span>
|
|
211
|
-
<span class="smrt-section-menu__card-title">{entry.label}</span>
|
|
212
215
|
{#if entry.item.description}
|
|
213
216
|
<span class="smrt-section-menu__desc">{entry.item.description}</span>
|
|
214
217
|
{/if}
|
|
@@ -225,7 +228,7 @@ function onmove(move: SortableItemMove<SortableItem>): void {
|
|
|
225
228
|
{:else}
|
|
226
229
|
<ul class="smrt-section-menu__list" aria-label={listLabel}>
|
|
227
230
|
{#each entries as entry (entry.id)}
|
|
228
|
-
<li class="smrt-section-menu__item">
|
|
231
|
+
<li class="smrt-section-menu__item" animate:flipRow>
|
|
229
232
|
<a class="smrt-section-menu__link" href={entry.href} onclick={onNavigate}>
|
|
230
233
|
{#if entry.icon}
|
|
231
234
|
<ShellSectionIcon name={entry.icon} iconComponent={IconComponent} />
|
|
@@ -242,6 +245,8 @@ function onmove(move: SortableItemMove<SortableItem>): void {
|
|
|
242
245
|
</div>
|
|
243
246
|
|
|
244
247
|
<style>
|
|
248
|
+
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
249
|
+
@layer smrt.theme {
|
|
245
250
|
.smrt-section-menu { min-inline-size: 0; }
|
|
246
251
|
.smrt-section-menu__list { display: grid; gap: var(--smrt-spacing-1); margin: 0; padding: 0; list-style: none; }
|
|
247
252
|
.smrt-section-menu__item { position: relative; display: flex; align-items: center; gap: var(--smrt-spacing-3); min-inline-size: 0; padding: var(--smrt-spacing-2) var(--smrt-spacing-3); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-medium); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface); }
|
|
@@ -257,9 +262,7 @@ function onmove(move: SortableItemMove<SortableItem>): void {
|
|
|
257
262
|
.smrt-section-menu__chevron { flex: 0 0 auto; color: var(--smrt-color-on-surface-variant); }
|
|
258
263
|
/* Fixed icon column so labels align whatever the glyph (or a missing one). */
|
|
259
264
|
.smrt-section-menu :global(.smrt-shell-section-icon) { inline-size: 20px; block-size: 20px; }
|
|
260
|
-
|
|
261
|
-
the centred circle. */
|
|
262
|
-
.smrt-section-menu__card-icon :global(.smrt-shell-section-icon) { inline-size: 32px; block-size: 32px; }
|
|
265
|
+
.smrt-section-menu__card-icon :global(.smrt-shell-section-icon) { inline-size: 28px; block-size: 28px; }
|
|
263
266
|
/* Cards: a responsive grid; the whole card is one stretched link. */
|
|
264
267
|
.smrt-section-menu__cards, .smrt-section-menu--cards :global(.smrt-sortable__items) { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(16rem, 100%), 1fr)); gap: var(--smrt-spacing-3); margin: 0; padding: 0; list-style: none; }
|
|
265
268
|
.smrt-section-menu__card { position: relative; display: flex; flex-direction: column; gap: var(--smrt-spacing-3); min-inline-size: 0; padding: var(--smrt-spacing-4); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-large, var(--smrt-radius-medium)); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface); transition: background-color 120ms, border-color 120ms, transform 120ms; }
|
|
@@ -268,7 +271,8 @@ function onmove(move: SortableItemMove<SortableItem>): void {
|
|
|
268
271
|
.smrt-section-menu__card-link::after { content: ''; position: absolute; inset: 0; border-radius: inherit; }
|
|
269
272
|
.smrt-section-menu__card-link:focus-visible { outline: none; }
|
|
270
273
|
.smrt-section-menu__card-link:focus-visible::after { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
|
|
271
|
-
.smrt-section-menu__card-
|
|
274
|
+
.smrt-section-menu__card-heading { display: flex; align-items: center; gap: var(--smrt-spacing-2); min-inline-size: 0; }
|
|
275
|
+
.smrt-section-menu__card-icon { display: inline-grid; place-items: center; flex: 0 0 28px; inline-size: 28px; block-size: 28px; color: var(--smrt-color-primary); }
|
|
272
276
|
.smrt-section-menu__card-title { font-size: var(--smrt-typography-title-medium-size, 1rem); font-weight: var(--smrt-typography-weight-medium, 500); overflow-wrap: anywhere; }
|
|
273
277
|
.smrt-section-menu__desc { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-body-medium-size, 0.875rem); }
|
|
274
278
|
.smrt-section-menu__card-foot { position: relative; z-index: 1; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--smrt-spacing-2); }
|
|
@@ -287,4 +291,5 @@ function onmove(move: SortableItemMove<SortableItem>): void {
|
|
|
287
291
|
.smrt-section-menu__row--muted { opacity: 0.55; }
|
|
288
292
|
.smrt-section-menu__row strong { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: var(--smrt-typography-weight-medium, 500); }
|
|
289
293
|
:global(.smrt-section-menu__name) { flex: 1 1 auto; min-inline-size: 0; }
|
|
294
|
+
}
|
|
290
295
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellSectionMenu.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ShellSectionMenu.svelte.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAKrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"ShellSectionMenu.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ShellSectionMenu.svelte.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAKrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAK3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,UAAU,KAAK;IACb,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,aAAa,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,oDAAoD;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACxC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC3C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AA0LD,QAAA,MAAM,gBAAgB,0BAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
|