@widgetic/design-system 0.5.21 → 0.5.23
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 +2 -0
- package/dist/components/CopyableHeader.svelte +260 -448
- package/dist/components/CopyableHeader.svelte.d.ts +8 -5
- package/dist/components/EmptyState.svelte +100 -128
- package/dist/components/EmptyState.svelte.d.ts +16 -19
- package/dist/components/GenerateLoader.svelte +17 -10
- package/dist/components/PasswordInput.svelte +41 -44
- package/dist/components/PasswordInput.svelte.d.ts +2 -0
- package/dist/components/ThumbHashImage.svelte +117 -119
- package/dist/components/WScrollArea.svelte +47 -41
- package/dist/components/chat/ActivityRow.svelte +115 -0
- package/dist/components/chat/ActivityRow.svelte.d.ts +18 -0
- package/dist/components/chat/ChatHeader.svelte +114 -0
- package/dist/components/chat/ChatHeader.svelte.d.ts +26 -0
- package/dist/components/chat/Composer.svelte +172 -0
- package/dist/components/chat/Composer.svelte.d.ts +27 -0
- package/dist/components/chat/Message.svelte +158 -0
- package/dist/components/chat/Message.svelte.d.ts +28 -0
- package/dist/components/chat/OptionRow.svelte +59 -0
- package/dist/components/chat/OptionRow.svelte.d.ts +14 -0
- package/dist/components/chat/PlanCard.svelte +220 -0
- package/dist/components/chat/PlanCard.svelte.d.ts +34 -0
- package/dist/components/chat/QuestionCard.svelte +265 -0
- package/dist/components/chat/QuestionCard.svelte.d.ts +38 -0
- package/dist/components/chat/ScrollToBottom.svelte +51 -0
- package/dist/components/chat/ScrollToBottom.svelte.d.ts +11 -0
- package/dist/components/chat/SuggestionCard.svelte +79 -0
- package/dist/components/chat/SuggestionCard.svelte.d.ts +20 -0
- package/dist/components/chat/TaskRow.svelte +59 -0
- package/dist/components/chat/TaskRow.svelte.d.ts +11 -0
- package/dist/components/chat/composerLogic.d.ts +16 -0
- package/dist/components/chat/composerLogic.js +29 -0
- package/dist/components/chat/index.d.ts +16 -0
- package/dist/components/chat/index.js +16 -0
- package/dist/components/chat/questionCardLogic.d.ts +11 -0
- package/dist/components/chat/questionCardLogic.js +39 -0
- package/dist/components/index.d.ts +10 -1
- package/dist/components/index.js +10 -0
- package/dist/components/modals/ActionModal.svelte +186 -180
- package/dist/components/modals/BaseModal.svelte +404 -395
- package/dist/components/modals/BaseModal.svelte.d.ts +3 -0
- package/dist/components/modals/NewItemDialog.svelte +200 -243
- package/dist/components/modals/Portal.svelte +107 -105
- package/dist/components/modals/README.md +16 -2
- package/dist/components/modals/RenameDialog.svelte +234 -292
- package/dist/components/navigation/Breadcrumbs.svelte +415 -377
- package/dist/components/navigation/Breadcrumbs.svelte.d.ts +3 -2
- package/dist/components/navigation/types.d.ts +2 -0
- package/dist/components/pdf/PDFViewer.svelte +54 -1
- package/dist/components/search-input/SearchInput.svelte +51 -104
- package/dist/components/search-input/SearchInput.svelte.d.ts +9 -27
- package/dist/components/shad-editor/editor.css +1 -1
- package/dist/components/shad-editor/i18n/messages.d.ts +1 -1
- package/dist/components/shad-editor/i18n/messages.js +1 -1
- package/dist/components/shell/AppShell.svelte +52 -0
- package/dist/components/shell/AppShell.svelte.d.ts +13 -0
- package/dist/components/shell/Banner.svelte +90 -0
- package/dist/components/shell/Banner.svelte.d.ts +61 -0
- package/dist/components/shell/ErrorState.svelte +60 -0
- package/dist/components/shell/ErrorState.svelte.d.ts +13 -0
- package/dist/components/shell/Link.svelte +63 -0
- package/dist/components/shell/Link.svelte.d.ts +53 -0
- package/dist/components/shell/NavDrawer.svelte +117 -0
- package/dist/components/shell/NavDrawer.svelte.d.ts +10 -0
- package/dist/components/shell/NavRow.svelte +128 -0
- package/dist/components/shell/NavRow.svelte.d.ts +65 -0
- package/dist/components/shell/NavSectionLabel.svelte +27 -0
- package/dist/components/shell/NavSectionLabel.svelte.d.ts +9 -0
- package/dist/components/shell/NotificationRow.svelte +76 -0
- package/dist/components/shell/NotificationRow.svelte.d.ts +16 -0
- package/dist/components/shell/PageHeader.svelte +42 -0
- package/dist/components/shell/PageHeader.svelte.d.ts +12 -0
- package/dist/components/shell/ProfileRow.svelte +95 -0
- package/dist/components/shell/ProfileRow.svelte.d.ts +54 -0
- package/dist/components/shell/SettingsDialog.svelte +118 -0
- package/dist/components/shell/SettingsDialog.svelte.d.ts +19 -0
- package/dist/components/shell/SettingsNav.svelte +46 -0
- package/dist/components/shell/SettingsNav.svelte.d.ts +11 -0
- package/dist/components/shell/Sidebar.svelte +82 -0
- package/dist/components/shell/Sidebar.svelte.d.ts +25 -0
- package/dist/components/shell/Stat.svelte +63 -0
- package/dist/components/shell/Stat.svelte.d.ts +58 -0
- package/dist/components/shell/TopBar.svelte +37 -0
- package/dist/components/shell/TopBar.svelte.d.ts +11 -0
- package/dist/components/shell/WidgetRow.svelte +126 -0
- package/dist/components/shell/WidgetRow.svelte.d.ts +78 -0
- package/dist/components/shell/error-state-messages.d.ts +7 -0
- package/dist/components/shell/error-state-messages.js +9 -0
- package/dist/components/shell/index.d.ts +22 -0
- package/dist/components/shell/index.js +25 -0
- package/dist/components/shell/link-external.d.ts +2 -0
- package/dist/components/shell/link-external.js +7 -0
- package/dist/components/shell/messages.d.ts +7 -0
- package/dist/components/shell/messages.js +5 -0
- package/dist/components/shell/settings-nav-types.d.ts +12 -0
- package/dist/components/shell/settings-nav-types.js +3 -0
- package/dist/components/shell/shell-utils.d.ts +7 -0
- package/dist/components/shell/shell-utils.js +27 -0
- package/dist/components/shell/stat-tone.d.ts +3 -0
- package/dist/components/shell/stat-tone.js +11 -0
- package/dist/components/toast/ToasterModal.svelte +102 -168
- package/dist/components/toast/ToasterModal.svelte.d.ts +2 -12
- package/dist/components/ui/accordion/accordion-content.svelte +3 -2
- package/dist/components/ui/accordion/accordion-item.svelte +10 -1
- package/dist/components/ui/accordion/accordion-trigger.svelte +4 -3
- package/dist/components/ui/alert/alert-description.svelte +5 -1
- package/dist/components/ui/alert/alert-title.svelte +2 -1
- package/dist/components/ui/alert/index.d.ts +13 -11
- package/dist/components/ui/alert/index.js +4 -4
- package/dist/components/ui/avatar/avatar-utils.d.ts +2 -0
- package/dist/components/ui/avatar/avatar-utils.js +9 -0
- package/dist/components/ui/avatar/avatar.svelte +63 -0
- package/dist/components/ui/avatar/avatar.svelte.d.ts +80 -0
- package/dist/components/ui/avatar/index.d.ts +4 -0
- package/dist/components/ui/avatar/index.js +4 -0
- package/dist/components/ui/badge/badge.svelte +22 -10
- package/dist/components/ui/badge/badge.svelte.d.ts +14 -15
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +2 -2
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +1 -1
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +1 -1
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +2 -2
- package/dist/components/ui/button/button-padding.d.ts +9 -0
- package/dist/components/ui/button/button-padding.js +15 -0
- package/dist/components/ui/button/button.svelte +81 -31
- package/dist/components/ui/button/button.svelte.d.ts +48 -29
- package/dist/components/ui/calendar/calendar-cell.svelte +1 -1
- package/dist/components/ui/calendar/calendar-head-cell.svelte +1 -1
- package/dist/components/ui/calendar/calendar-next-button.svelte +2 -2
- package/dist/components/ui/calendar/calendar-prev-button.svelte +2 -2
- package/dist/components/ui/card/card-description.svelte +1 -1
- package/dist/components/ui/card/card-title.svelte +1 -1
- package/dist/components/ui/card/card.svelte +1 -1
- package/dist/components/ui/checkbox/checkbox.svelte +9 -5
- package/dist/components/ui/chip/chip.svelte +48 -0
- package/dist/components/ui/chip/chip.svelte.d.ts +13 -0
- package/dist/components/ui/chip/index.d.ts +2 -0
- package/dist/components/ui/chip/index.js +2 -0
- package/dist/components/ui/command/command-dialog.svelte +1 -1
- package/dist/components/ui/command/command-input.svelte +4 -4
- package/dist/components/ui/command/command-item.svelte +1 -1
- package/dist/components/ui/command/command.svelte +1 -1
- package/dist/components/ui/dialog/dialog-content.svelte +4 -4
- package/dist/components/ui/dialog/dialog-description.svelte +1 -1
- package/dist/components/ui/dialog/dialog-overlay.svelte +1 -1
- package/dist/components/ui/dialog/dialog-title.svelte +1 -1
- package/dist/components/ui/drawer/drawer-content.svelte +1 -1
- package/dist/components/ui/drawer/drawer-overlay.svelte +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +5 -5
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +20 -2
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +5 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +3 -3
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +2 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +3 -3
- package/dist/components/ui/field/field-ids.d.ts +7 -0
- package/dist/components/ui/field/field-ids.js +15 -0
- package/dist/components/ui/field/field.svelte +62 -0
- package/dist/components/ui/field/field.svelte.d.ts +21 -0
- package/dist/components/ui/field/index.d.ts +3 -0
- package/dist/components/ui/field/index.js +3 -0
- package/dist/components/ui/hover-card/hover-card-content.svelte +1 -1
- package/dist/components/ui/icon-button/icon-button.svelte +72 -0
- package/dist/components/ui/icon-button/icon-button.svelte.d.ts +90 -0
- package/dist/components/ui/icon-button/index.d.ts +2 -0
- package/dist/components/ui/icon-button/index.js +4 -0
- package/dist/components/ui/input/index.d.ts +1 -0
- package/dist/components/ui/input/input.svelte +11 -4
- package/dist/components/ui/input/input.svelte.d.ts +4 -1
- package/dist/components/ui/input-otp/input-otp-separator.svelte +2 -2
- package/dist/components/ui/input-otp/input-otp-slot.svelte +5 -4
- package/dist/components/ui/input-otp/input-otp-slot.svelte.d.ts +1 -1
- package/dist/components/ui/input-otp/input-otp.svelte +1 -1
- package/dist/components/ui/label/label.svelte +3 -2
- package/dist/components/ui/popover/popover-content.svelte +1 -1
- package/dist/components/ui/progress/progress.svelte +19 -5
- package/dist/components/ui/progress/progress.svelte.d.ts +4 -2
- package/dist/components/ui/radio-group/radio-group-item.svelte +4 -4
- package/dist/components/ui/range-calendar/range-calendar-head-cell.svelte +1 -1
- package/dist/components/ui/range-calendar/range-calendar-next-button.svelte +2 -2
- package/dist/components/ui/range-calendar/range-calendar-prev-button.svelte +2 -2
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +4 -1
- package/dist/components/ui/scroll-area/scroll-area.svelte +1 -1
- package/dist/components/ui/select/select-content.svelte +1 -3
- package/dist/components/ui/select/select-item.svelte +5 -4
- package/dist/components/ui/select/select-scroll-down-button.svelte +2 -2
- package/dist/components/ui/select/select-scroll-up-button.svelte +2 -2
- package/dist/components/ui/select/select-trigger.svelte +4 -3
- package/dist/components/ui/skeleton/index.d.ts +2 -0
- package/dist/components/ui/skeleton/index.js +2 -0
- package/dist/components/ui/skeleton/skeleton.svelte +24 -0
- package/dist/components/ui/skeleton/skeleton.svelte.d.ts +8 -0
- package/dist/components/ui/slider/slider.svelte +5 -10
- package/dist/components/ui/sonner/sonner.svelte +19 -13
- package/dist/components/ui/stepper-button/index.d.ts +3 -0
- package/dist/components/ui/stepper-button/index.js +2 -0
- package/dist/components/ui/stepper-button/stepper-button.svelte +37 -0
- package/dist/components/ui/stepper-button/stepper-button.svelte.d.ts +9 -0
- package/dist/components/ui/switch/switch.svelte +8 -3
- package/dist/components/ui/table/table-cell.svelte +1 -1
- package/dist/components/ui/table/table-head.svelte +1 -1
- package/dist/components/ui/table/table-row.svelte +1 -1
- package/dist/components/ui/tabs/tabs-list.svelte +1 -1
- package/dist/components/ui/tabs/tabs-trigger.svelte +1 -1
- package/dist/components/ui/tag/index.d.ts +2 -0
- package/dist/components/ui/tag/index.js +2 -0
- package/dist/components/ui/tag/tag.svelte +42 -0
- package/dist/components/ui/tag/tag.svelte.d.ts +11 -0
- package/dist/components/ui/textarea/textarea.svelte +4 -3
- package/dist/components/ui/textarea/textarea.svelte.d.ts +2 -2
- package/dist/components/ui/toggle/toggle.svelte +9 -9
- package/dist/components/ui/toggle/toggle.svelte.d.ts +14 -21
- package/dist/components/ui/tooltip/tooltip-content.svelte +1 -1
- package/dist/fonts/Inter/Inter-Black.woff2 +0 -0
- package/dist/fonts/Inter/Inter-BlackItalic.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Bold.woff2 +0 -0
- package/dist/fonts/Inter/Inter-BoldItalic.woff2 +0 -0
- package/dist/fonts/Inter/Inter-ExtraBold.woff2 +0 -0
- package/dist/fonts/Inter/Inter-ExtraBoldItalic.woff2 +0 -0
- package/dist/fonts/Inter/Inter-ExtraLight-BETA.woff2 +0 -0
- package/dist/fonts/Inter/Inter-ExtraLightItalic-BETA.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Italic.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Light-BETA.woff2 +0 -0
- package/dist/fonts/Inter/Inter-LightItalic-BETA.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Medium.woff2 +0 -0
- package/dist/fonts/Inter/Inter-MediumItalic.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Regular.woff2 +0 -0
- package/dist/fonts/Inter/Inter-SemiBold.woff2 +0 -0
- package/dist/fonts/Inter/Inter-SemiBoldItalic.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Thin-BETA.woff2 +0 -0
- package/dist/fonts/Inter/Inter-ThinItalic-BETA.woff2 +0 -0
- package/dist/fonts/Inter/Inter-italic.var.woff2 +0 -0
- package/dist/fonts/Inter/Inter-upright.var.woff2 +0 -0
- package/dist/fonts/Inter/Inter.var.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
- package/dist/i18n/audit/designSystemWords.d.ts +1 -1
- package/dist/i18n/audit/designSystemWords.js +1 -1
- package/dist/styles/fonts.css +18 -14
- package/dist/styles/global.css +7 -19
- package/dist/styles/tokens.css +332 -0
- package/dist/utils.d.ts +27 -0
- package/dist/utils.js +33 -2
- package/package.json +2 -1
- package/tailwind.config.ts +7 -47
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<!-- Figma: Widget Row (component set 54:5, node 54:5). -->
|
|
2
|
+
<script lang="ts" module>
|
|
3
|
+
import type { VariantProps } from 'tailwind-variants';
|
|
4
|
+
|
|
5
|
+
export const widgetRowVariants = tv({
|
|
6
|
+
base: 'group/widget-row flex min-h-16 w-full max-w-content items-center gap-4 rounded-xl py-3 ps-4 pe-4 transition-colors duration-fast focus-within:outline-hidden',
|
|
7
|
+
variants: {
|
|
8
|
+
selected: {
|
|
9
|
+
true: 'bg-brand-subtle ring-2 ring-brand',
|
|
10
|
+
false:
|
|
11
|
+
'hover:bg-accent focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background'
|
|
12
|
+
},
|
|
13
|
+
loading: {
|
|
14
|
+
true: 'pointer-events-none',
|
|
15
|
+
false: ''
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
selected: false,
|
|
20
|
+
loading: false
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export type WidgetRowVisualState = 'default' | 'hover' | 'focus' | 'selected' | 'loading';
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<script lang="ts">
|
|
28
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
29
|
+
import type { Snippet } from 'svelte';
|
|
30
|
+
import { cn, tv } from '../../utils.js';
|
|
31
|
+
import { Badge } from '../ui/badge/index.js';
|
|
32
|
+
import { Skeleton } from '../ui/skeleton/index.js';
|
|
33
|
+
|
|
34
|
+
let {
|
|
35
|
+
class: className,
|
|
36
|
+
title,
|
|
37
|
+
meta = '',
|
|
38
|
+
showBadge = true,
|
|
39
|
+
badgeLabel = 'Published',
|
|
40
|
+
selected = false,
|
|
41
|
+
loading = false,
|
|
42
|
+
visualState = undefined,
|
|
43
|
+
actionsAlwaysVisible = false,
|
|
44
|
+
thumbnail,
|
|
45
|
+
actions,
|
|
46
|
+
...restProps
|
|
47
|
+
}: HTMLAttributes<HTMLDivElement> & {
|
|
48
|
+
title: string;
|
|
49
|
+
meta?: string;
|
|
50
|
+
showBadge?: boolean;
|
|
51
|
+
badgeLabel?: string;
|
|
52
|
+
selected?: boolean;
|
|
53
|
+
loading?: boolean;
|
|
54
|
+
visualState?: WidgetRowVisualState;
|
|
55
|
+
/** Touch / mobile: keep row actions visible without hover. */
|
|
56
|
+
actionsAlwaysVisible?: boolean;
|
|
57
|
+
thumbnail?: Snippet;
|
|
58
|
+
actions?: Snippet;
|
|
59
|
+
} = $props();
|
|
60
|
+
|
|
61
|
+
const isLoading = $derived(loading || visualState === 'loading');
|
|
62
|
+
const isSelected = $derived(selected || visualState === 'selected');
|
|
63
|
+
const forceHover = $derived(visualState === 'hover');
|
|
64
|
+
const forceFocus = $derived(visualState === 'focus');
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
{#if isLoading}
|
|
68
|
+
<div
|
|
69
|
+
class={cn(
|
|
70
|
+
'max-w-content flex min-h-16 w-full items-center gap-4 rounded-xl py-3 ps-4 pe-4',
|
|
71
|
+
className
|
|
72
|
+
)}
|
|
73
|
+
role="status"
|
|
74
|
+
aria-busy="true"
|
|
75
|
+
>
|
|
76
|
+
<Skeleton class="size-10 shrink-0 rounded-lg" />
|
|
77
|
+
<div class="flex min-w-0 flex-1 flex-col gap-2">
|
|
78
|
+
<Skeleton class="h-5 w-3/5 max-w-xs" />
|
|
79
|
+
<Skeleton class="h-4 w-2/5 max-w-[12rem]" />
|
|
80
|
+
</div>
|
|
81
|
+
<Skeleton class="h-5 w-20 rounded-full" />
|
|
82
|
+
</div>
|
|
83
|
+
{:else}
|
|
84
|
+
<div
|
|
85
|
+
class={cn(
|
|
86
|
+
widgetRowVariants({ selected: isSelected }),
|
|
87
|
+
forceHover && !isSelected && 'bg-accent',
|
|
88
|
+
forceFocus && !isSelected && 'ring-ring ring-offset-background ring-2 ring-offset-2',
|
|
89
|
+
className
|
|
90
|
+
)}
|
|
91
|
+
{...restProps}
|
|
92
|
+
>
|
|
93
|
+
<div
|
|
94
|
+
class={cn(
|
|
95
|
+
'bg-muted duration-fast group-hover/widget-row:bg-background flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-lg transition-colors',
|
|
96
|
+
forceHover && 'bg-background'
|
|
97
|
+
)}
|
|
98
|
+
>
|
|
99
|
+
{#if thumbnail}
|
|
100
|
+
{@render thumbnail()}
|
|
101
|
+
{/if}
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<div class="min-w-0 flex-1 flex-col gap-0 overflow-hidden">
|
|
105
|
+
<span class="text-body-medium text-foreground block truncate">{title}</span>
|
|
106
|
+
{#if meta}
|
|
107
|
+
<span class="text-caption text-muted-foreground block truncate">{meta}</span>
|
|
108
|
+
{/if}
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
{#if showBadge}
|
|
112
|
+
<Badge variant="secondary" showDot class="shrink-0 max-sm:hidden">{badgeLabel}</Badge>
|
|
113
|
+
{/if}
|
|
114
|
+
|
|
115
|
+
{#if actions}
|
|
116
|
+
<div
|
|
117
|
+
class={cn(
|
|
118
|
+
'duration-fast shrink-0 opacity-0 transition-opacity group-focus-within/widget-row:opacity-100 group-hover/widget-row:opacity-100',
|
|
119
|
+
(actionsAlwaysVisible || forceHover || forceFocus) && 'opacity-100'
|
|
120
|
+
)}
|
|
121
|
+
>
|
|
122
|
+
{@render actions()}
|
|
123
|
+
</div>
|
|
124
|
+
{/if}
|
|
125
|
+
</div>
|
|
126
|
+
{/if}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export declare const widgetRowVariants: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
selected: {
|
|
3
|
+
true: string;
|
|
4
|
+
false: string;
|
|
5
|
+
};
|
|
6
|
+
loading: {
|
|
7
|
+
true: string;
|
|
8
|
+
false: string;
|
|
9
|
+
};
|
|
10
|
+
}, undefined, "group/widget-row flex min-h-16 w-full max-w-content items-center gap-4 rounded-xl py-3 ps-4 pe-4 transition-colors duration-fast focus-within:outline-hidden", {
|
|
11
|
+
responsiveVariants?: boolean | (string | number | symbol)[] | {
|
|
12
|
+
selected?: boolean | (string | number | symbol)[] | undefined;
|
|
13
|
+
loading?: boolean | (string | number | symbol)[] | undefined;
|
|
14
|
+
} | undefined;
|
|
15
|
+
} & import("tailwind-variants/dist/config.js").TWMConfig & {
|
|
16
|
+
twMergeConfig: {
|
|
17
|
+
classGroups: {
|
|
18
|
+
"font-size": {
|
|
19
|
+
text: ("display-hero" | "heading-page" | "heading-section" | "body" | "body-medium" | "body-large" | "caption" | "caption-medium" | "label" | "label-small" | "code")[];
|
|
20
|
+
}[];
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
}, {
|
|
24
|
+
selected: {
|
|
25
|
+
true: string;
|
|
26
|
+
false: string;
|
|
27
|
+
};
|
|
28
|
+
loading: {
|
|
29
|
+
true: string;
|
|
30
|
+
false: string;
|
|
31
|
+
};
|
|
32
|
+
}, undefined, import("tailwind-variants").TVReturnType<{
|
|
33
|
+
selected: {
|
|
34
|
+
true: string;
|
|
35
|
+
false: string;
|
|
36
|
+
};
|
|
37
|
+
loading: {
|
|
38
|
+
true: string;
|
|
39
|
+
false: string;
|
|
40
|
+
};
|
|
41
|
+
}, undefined, "group/widget-row flex min-h-16 w-full max-w-content items-center gap-4 rounded-xl py-3 ps-4 pe-4 transition-colors duration-fast focus-within:outline-hidden", import("tailwind-variants/dist/config.js").TVConfig<{
|
|
42
|
+
selected: {
|
|
43
|
+
true: string;
|
|
44
|
+
false: string;
|
|
45
|
+
};
|
|
46
|
+
loading: {
|
|
47
|
+
true: string;
|
|
48
|
+
false: string;
|
|
49
|
+
};
|
|
50
|
+
}, {
|
|
51
|
+
selected: {
|
|
52
|
+
true: string;
|
|
53
|
+
false: string;
|
|
54
|
+
};
|
|
55
|
+
loading: {
|
|
56
|
+
true: string;
|
|
57
|
+
false: string;
|
|
58
|
+
};
|
|
59
|
+
}>, unknown, unknown, undefined>>;
|
|
60
|
+
export type WidgetRowVisualState = 'default' | 'hover' | 'focus' | 'selected' | 'loading';
|
|
61
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
62
|
+
import type { Snippet } from 'svelte';
|
|
63
|
+
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
64
|
+
title: string;
|
|
65
|
+
meta?: string;
|
|
66
|
+
showBadge?: boolean;
|
|
67
|
+
badgeLabel?: string;
|
|
68
|
+
selected?: boolean;
|
|
69
|
+
loading?: boolean;
|
|
70
|
+
visualState?: WidgetRowVisualState;
|
|
71
|
+
/** Touch / mobile: keep row actions visible without hover. */
|
|
72
|
+
actionsAlwaysVisible?: boolean;
|
|
73
|
+
thumbnail?: Snippet;
|
|
74
|
+
actions?: Snippet;
|
|
75
|
+
};
|
|
76
|
+
declare const WidgetRow: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
77
|
+
type WidgetRow = ReturnType<typeof WidgetRow>;
|
|
78
|
+
export default WidgetRow;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// The words of the Figma Error State: the title says what failed in a few words, the description gives the likely cause
|
|
2
|
+
// and what to try. "Something went wrong" stays only for a failure whose cause is not known, and a page gives that as
|
|
3
|
+
// its own `messages`.
|
|
4
|
+
export const defaultErrorStateMessages = {
|
|
5
|
+
title: 'We could not load your widgets',
|
|
6
|
+
description: 'Check your connection and try again.',
|
|
7
|
+
retryLabel: 'Try again',
|
|
8
|
+
supportLabel: 'Contact support'
|
|
9
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { default as NavRow, navRowVariants } from './NavRow.svelte';
|
|
2
|
+
export { default as NavSectionLabel } from './NavSectionLabel.svelte';
|
|
3
|
+
export { default as ProfileRow, profileRowVariants } from './ProfileRow.svelte';
|
|
4
|
+
export { default as Sidebar } from './Sidebar.svelte';
|
|
5
|
+
export type { SidebarNavItem } from './Sidebar.svelte';
|
|
6
|
+
export { default as WidgetRow, widgetRowVariants } from './WidgetRow.svelte';
|
|
7
|
+
export { default as PageHeader } from './PageHeader.svelte';
|
|
8
|
+
export { default as TopBar } from './TopBar.svelte';
|
|
9
|
+
export { default as NavDrawer } from './NavDrawer.svelte';
|
|
10
|
+
export { default as AppShell } from './AppShell.svelte';
|
|
11
|
+
export { default as ErrorState } from './ErrorState.svelte';
|
|
12
|
+
export { defaultErrorStateMessages, type ErrorStateMessages } from './error-state-messages.js';
|
|
13
|
+
export { default as NotificationRow, type NotificationRowProps } from './NotificationRow.svelte';
|
|
14
|
+
export { default as SettingsNav, type SettingsNavProps } from './SettingsNav.svelte';
|
|
15
|
+
export { default as SettingsDialog, type SettingsDialogProps } from './SettingsDialog.svelte';
|
|
16
|
+
export { default as Stat, type StatProps, statVariants } from './Stat.svelte';
|
|
17
|
+
export { default as Banner, type BannerProps, type BannerTone, bannerVariants } from './Banner.svelte';
|
|
18
|
+
export { default as Link, type LinkProps, type LinkSize, linkVariants } from './Link.svelte';
|
|
19
|
+
export { type SettingsNavGroup, type SettingsNavItem, settingsNavItemIsActive } from './settings-nav-types.js';
|
|
20
|
+
export { externalLinkAttributes } from './link-external.js';
|
|
21
|
+
export { statHintClass, type StatTone } from './stat-tone.js';
|
|
22
|
+
export { type SettingsDialogMessages, defaultSettingsDialogMessages } from './messages.js';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Shell components (app shell, navigation, status, settings) built from the Figma design system.
|
|
2
|
+
// Each component is exported here by the agent that owns src/lib/components/shell.
|
|
3
|
+
// [S1 exports]
|
|
4
|
+
export { default as NavRow, navRowVariants } from './NavRow.svelte';
|
|
5
|
+
export { default as NavSectionLabel } from './NavSectionLabel.svelte';
|
|
6
|
+
export { default as ProfileRow, profileRowVariants } from './ProfileRow.svelte';
|
|
7
|
+
export { default as Sidebar } from './Sidebar.svelte';
|
|
8
|
+
export { default as WidgetRow, widgetRowVariants } from './WidgetRow.svelte';
|
|
9
|
+
export { default as PageHeader } from './PageHeader.svelte';
|
|
10
|
+
export { default as TopBar } from './TopBar.svelte';
|
|
11
|
+
export { default as NavDrawer } from './NavDrawer.svelte';
|
|
12
|
+
export { default as AppShell } from './AppShell.svelte';
|
|
13
|
+
export { default as ErrorState } from './ErrorState.svelte';
|
|
14
|
+
export { defaultErrorStateMessages } from './error-state-messages.js';
|
|
15
|
+
// [S2 exports]
|
|
16
|
+
export { default as NotificationRow } from './NotificationRow.svelte';
|
|
17
|
+
export { default as SettingsNav } from './SettingsNav.svelte';
|
|
18
|
+
export { default as SettingsDialog } from './SettingsDialog.svelte';
|
|
19
|
+
export { default as Stat, statVariants } from './Stat.svelte';
|
|
20
|
+
export { default as Banner, bannerVariants } from './Banner.svelte';
|
|
21
|
+
export { default as Link, linkVariants } from './Link.svelte';
|
|
22
|
+
export { settingsNavItemIsActive } from './settings-nav-types.js';
|
|
23
|
+
export { externalLinkAttributes } from './link-external.js';
|
|
24
|
+
export { statHintClass } from './stat-tone.js';
|
|
25
|
+
export { defaultSettingsDialogMessages } from './messages.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Footer links in SettingsDialog (Figma Settings Dialog 107:618). */
|
|
2
|
+
export interface SettingsDialogMessages {
|
|
3
|
+
privacyPolicy: string;
|
|
4
|
+
termsOfService: string;
|
|
5
|
+
cookieSettings: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const defaultSettingsDialogMessages: SettingsDialogMessages;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
export type SettingsNavItem = {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
icon?: Snippet;
|
|
6
|
+
};
|
|
7
|
+
export type SettingsNavGroup = {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
items: SettingsNavItem[];
|
|
11
|
+
};
|
|
12
|
+
export declare function settingsNavItemIsActive(activeId: string, itemId: string): boolean;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Drawer motion from Figma Responsive / appShell ledger (ms). */
|
|
2
|
+
export declare function navDrawerTransitionMs(open: boolean): number;
|
|
3
|
+
export declare function navDrawerTransitionEasing(open: boolean): 'var(--ease-drawer)' | 'var(--ease-out)';
|
|
4
|
+
export declare function navDrawerEffectiveTransitionMs(open: boolean, reducedMotion: boolean): number;
|
|
5
|
+
export declare function getFocusableElements(root: HTMLElement): HTMLElement[];
|
|
6
|
+
/** Returns the next element to focus when Tab / Shift+Tab is pressed inside `root`. */
|
|
7
|
+
export declare function navDrawerTabTarget(root: HTMLElement, active: HTMLElement, shiftKey: boolean): HTMLElement | null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Drawer motion from Figma Responsive / appShell ledger (ms). */
|
|
2
|
+
export function navDrawerTransitionMs(open) {
|
|
3
|
+
return open ? 320 : 220;
|
|
4
|
+
}
|
|
5
|
+
export function navDrawerTransitionEasing(open) {
|
|
6
|
+
return open ? 'var(--ease-drawer)' : 'var(--ease-out)';
|
|
7
|
+
}
|
|
8
|
+
export function navDrawerEffectiveTransitionMs(open, reducedMotion) {
|
|
9
|
+
return reducedMotion ? 0 : navDrawerTransitionMs(open);
|
|
10
|
+
}
|
|
11
|
+
const FOCUSABLE = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])';
|
|
12
|
+
export function getFocusableElements(root) {
|
|
13
|
+
return [...root.querySelectorAll(FOCUSABLE)].filter((el) => !el.hasAttribute('disabled') && el.getAttribute('aria-hidden') !== 'true');
|
|
14
|
+
}
|
|
15
|
+
/** Returns the next element to focus when Tab / Shift+Tab is pressed inside `root`. */
|
|
16
|
+
export function navDrawerTabTarget(root, active, shiftKey) {
|
|
17
|
+
const focusables = getFocusableElements(root);
|
|
18
|
+
if (focusables.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
const index = focusables.indexOf(active);
|
|
21
|
+
if (index === -1)
|
|
22
|
+
return focusables[0] ?? null;
|
|
23
|
+
if (shiftKey) {
|
|
24
|
+
return index === 0 ? focusables[focusables.length - 1] : focusables[index - 1];
|
|
25
|
+
}
|
|
26
|
+
return index === focusables.length - 1 ? focusables[0] : focusables[index + 1];
|
|
27
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Hint line colour for Stat tones (Figma Stat 327:243). */
|
|
2
|
+
export function statHintClass(tone) {
|
|
3
|
+
switch (tone) {
|
|
4
|
+
case 'positive':
|
|
5
|
+
return 'text-brand-foreground';
|
|
6
|
+
case 'negative':
|
|
7
|
+
return 'text-destructive';
|
|
8
|
+
default:
|
|
9
|
+
return 'text-muted-foreground';
|
|
10
|
+
}
|
|
11
|
+
}
|