@diegopluna/narvi 0.0.0-stage → 0.0.1
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 +82 -2
- package/dist/components/activity/ActivityContent.svelte +55 -0
- package/dist/components/activity/ActivityContent.svelte.d.ts +11 -0
- package/dist/components/activity/ActivityRoot.svelte +66 -0
- package/dist/components/activity/ActivityRoot.svelte.d.ts +17 -0
- package/dist/components/activity/ActivityStep.svelte +157 -0
- package/dist/components/activity/ActivityStep.svelte.d.ts +26 -0
- package/dist/components/activity/ActivityThought.svelte +60 -0
- package/dist/components/activity/ActivityThought.svelte.d.ts +10 -0
- package/dist/components/activity/ActivityTrigger.svelte +103 -0
- package/dist/components/activity/ActivityTrigger.svelte.d.ts +20 -0
- package/dist/components/activity/context.d.ts +7 -0
- package/dist/components/activity/context.js +11 -0
- package/dist/components/activity/index.d.ts +11 -0
- package/dist/components/activity/index.js +6 -0
- package/dist/components/announcer/Announcer.svelte +84 -0
- package/dist/components/announcer/Announcer.svelte.d.ts +13 -0
- package/dist/components/app-shell/AppShellHeader.svelte +54 -0
- package/dist/components/app-shell/AppShellHeader.svelte.d.ts +15 -0
- package/dist/components/app-shell/AppShellMain.svelte +49 -0
- package/dist/components/app-shell/AppShellMain.svelte.d.ts +11 -0
- package/dist/components/app-shell/AppShellPanel.svelte +107 -0
- package/dist/components/app-shell/AppShellPanel.svelte.d.ts +18 -0
- package/dist/components/app-shell/AppShellRoot.svelte +136 -0
- package/dist/components/app-shell/AppShellRoot.svelte.d.ts +28 -0
- package/dist/components/app-shell/AppShellSidebar.svelte +192 -0
- package/dist/components/app-shell/AppShellSidebar.svelte.d.ts +17 -0
- package/dist/components/app-shell/AppShellToggle.svelte +50 -0
- package/dist/components/app-shell/AppShellToggle.svelte.d.ts +10 -0
- package/dist/components/app-shell/context.d.ts +15 -0
- package/dist/components/app-shell/context.js +15 -0
- package/dist/components/app-shell/index.d.ts +15 -0
- package/dist/components/app-shell/index.js +8 -0
- package/dist/components/approval/Approval.svelte +213 -0
- package/dist/components/approval/Approval.svelte.d.ts +38 -0
- package/dist/components/avatar/AvatarFallback.svelte +73 -0
- package/dist/components/avatar/AvatarFallback.svelte.d.ts +11 -0
- package/dist/components/avatar/AvatarImage.svelte +75 -0
- package/dist/components/avatar/AvatarImage.svelte.d.ts +11 -0
- package/dist/components/avatar/AvatarRoot.svelte +108 -0
- package/dist/components/avatar/AvatarRoot.svelte.d.ts +19 -0
- package/dist/components/avatar/context.d.ts +11 -0
- package/dist/components/avatar/context.js +11 -0
- package/dist/components/avatar/index.d.ts +7 -0
- package/dist/components/avatar/index.js +6 -0
- package/dist/components/badge/Badge.svelte +78 -0
- package/dist/components/badge/Badge.svelte.d.ts +15 -0
- package/dist/components/button/Button.svelte +270 -0
- package/dist/components/button/Button.svelte.d.ts +22 -0
- package/dist/components/card/Card.svelte +65 -0
- package/dist/components/card/Card.svelte.d.ts +15 -0
- package/dist/components/change-stats/ChangeStats.svelte +52 -0
- package/dist/components/change-stats/ChangeStats.svelte.d.ts +14 -0
- package/dist/components/changes-summary/ChangesSummary.svelte +152 -0
- package/dist/components/changes-summary/ChangesSummary.svelte.d.ts +20 -0
- package/dist/components/checkbox/Checkbox.svelte +178 -0
- package/dist/components/checkbox/Checkbox.svelte.d.ts +19 -0
- package/dist/components/code/Code.svelte +33 -0
- package/dist/components/code/Code.svelte.d.ts +10 -0
- package/dist/components/command/CommandDialog.svelte +37 -0
- package/dist/components/command/CommandDialog.svelte.d.ts +12 -0
- package/dist/components/command/CommandEmpty.svelte +20 -0
- package/dist/components/command/CommandEmpty.svelte.d.ts +11 -0
- package/dist/components/command/CommandFooter.svelte +25 -0
- package/dist/components/command/CommandFooter.svelte.d.ts +11 -0
- package/dist/components/command/CommandGroup.svelte +25 -0
- package/dist/components/command/CommandGroup.svelte.d.ts +12 -0
- package/dist/components/command/CommandInput.svelte +33 -0
- package/dist/components/command/CommandInput.svelte.d.ts +8 -0
- package/dist/components/command/CommandItem.svelte +49 -0
- package/dist/components/command/CommandItem.svelte.d.ts +16 -0
- package/dist/components/command/CommandList.svelte +21 -0
- package/dist/components/command/CommandList.svelte.d.ts +10 -0
- package/dist/components/command/CommandRoot.svelte +20 -0
- package/dist/components/command/CommandRoot.svelte.d.ts +11 -0
- package/dist/components/command/index.d.ts +20 -0
- package/dist/components/command/index.js +12 -0
- package/dist/components/command/styles.d.ts +117 -0
- package/dist/components/command/styles.js +121 -0
- package/dist/components/composer/ComposerAttachButton.svelte +55 -0
- package/dist/components/composer/ComposerAttachButton.svelte.d.ts +14 -0
- package/dist/components/composer/ComposerAttachment.svelte +173 -0
- package/dist/components/composer/ComposerAttachment.svelte.d.ts +13 -0
- package/dist/components/composer/ComposerAttachments.svelte +63 -0
- package/dist/components/composer/ComposerAttachments.svelte.d.ts +13 -0
- package/dist/components/composer/ComposerModelPicker.svelte +475 -0
- package/dist/components/composer/ComposerModelPicker.svelte.d.ts +27 -0
- package/dist/components/composer/ComposerRoot.svelte +315 -0
- package/dist/components/composer/ComposerRoot.svelte.d.ts +42 -0
- package/dist/components/composer/ComposerSubmit.svelte +131 -0
- package/dist/components/composer/ComposerSubmit.svelte.d.ts +13 -0
- package/dist/components/composer/ComposerTextarea.svelte +109 -0
- package/dist/components/composer/ComposerTextarea.svelte.d.ts +9 -0
- package/dist/components/composer/ComposerToggle.svelte +106 -0
- package/dist/components/composer/ComposerToggle.svelte.d.ts +14 -0
- package/dist/components/composer/ComposerToolbar.svelte +29 -0
- package/dist/components/composer/ComposerToolbar.svelte.d.ts +11 -0
- package/dist/components/composer/context.d.ts +53 -0
- package/dist/components/composer/context.js +32 -0
- package/dist/components/composer/index.d.ts +21 -0
- package/dist/components/composer/index.js +13 -0
- package/dist/components/conversation/ConversationContent.svelte +94 -0
- package/dist/components/conversation/ConversationContent.svelte.d.ts +15 -0
- package/dist/components/conversation/ConversationEmpty.svelte +89 -0
- package/dist/components/conversation/ConversationEmpty.svelte.d.ts +16 -0
- package/dist/components/conversation/ConversationRoot.svelte +237 -0
- package/dist/components/conversation/ConversationRoot.svelte.d.ts +20 -0
- package/dist/components/conversation/ConversationScrollButton.svelte +114 -0
- package/dist/components/conversation/ConversationScrollButton.svelte.d.ts +14 -0
- package/dist/components/conversation/context.d.ts +28 -0
- package/dist/components/conversation/context.js +15 -0
- package/dist/components/conversation/index.d.ts +11 -0
- package/dist/components/conversation/index.js +8 -0
- package/dist/components/conversation/scrolling.d.ts +25 -0
- package/dist/components/conversation/scrolling.js +60 -0
- package/dist/components/dev-styles/DevStyles.svelte +21 -0
- package/dist/components/dev-styles/DevStyles.svelte.d.ts +3 -0
- package/dist/components/dialog/ConfirmDialog.svelte +157 -0
- package/dist/components/dialog/ConfirmDialog.svelte.d.ts +31 -0
- package/dist/components/dialog/DialogBody.svelte +19 -0
- package/dist/components/dialog/DialogBody.svelte.d.ts +10 -0
- package/dist/components/dialog/DialogContent.svelte +55 -0
- package/dist/components/dialog/DialogContent.svelte.d.ts +17 -0
- package/dist/components/dialog/DialogDescription.svelte +23 -0
- package/dist/components/dialog/DialogDescription.svelte.d.ts +10 -0
- package/dist/components/dialog/DialogFooter.svelte +19 -0
- package/dist/components/dialog/DialogFooter.svelte.d.ts +10 -0
- package/dist/components/dialog/DialogHeader.svelte +19 -0
- package/dist/components/dialog/DialogHeader.svelte.d.ts +10 -0
- package/dist/components/dialog/DialogTitle.svelte +20 -0
- package/dist/components/dialog/DialogTitle.svelte.d.ts +10 -0
- package/dist/components/dialog/index.d.ts +17 -0
- package/dist/components/dialog/index.js +12 -0
- package/dist/components/dialog/styles.d.ts +120 -0
- package/dist/components/dialog/styles.js +136 -0
- package/dist/components/divider/Divider.svelte +42 -0
- package/dist/components/divider/Divider.svelte.d.ts +11 -0
- package/dist/components/empty-state/EmptyState.svelte +82 -0
- package/dist/components/empty-state/EmptyState.svelte.d.ts +15 -0
- package/dist/components/field/Field.svelte +132 -0
- package/dist/components/field/Field.svelte.d.ts +23 -0
- package/dist/components/field/context.d.ts +12 -0
- package/dist/components/field/context.js +9 -0
- package/dist/components/frame/Frame.svelte +88 -0
- package/dist/components/frame/Frame.svelte.d.ts +19 -0
- package/dist/components/heading/Heading.svelte +82 -0
- package/dist/components/heading/Heading.svelte.d.ts +16 -0
- package/dist/components/input/Input.svelte +47 -0
- package/dist/components/input/Input.svelte.d.ts +14 -0
- package/dist/components/kbd/Kbd.svelte +40 -0
- package/dist/components/kbd/Kbd.svelte.d.ts +11 -0
- package/dist/components/link/Link.svelte +68 -0
- package/dist/components/link/Link.svelte.d.ts +16 -0
- package/dist/components/menu/ContextMenuContent.svelte +33 -0
- package/dist/components/menu/ContextMenuContent.svelte.d.ts +11 -0
- package/dist/components/menu/ContextMenuTrigger.svelte +44 -0
- package/dist/components/menu/ContextMenuTrigger.svelte.d.ts +11 -0
- package/dist/components/menu/MenuCheckboxItem.svelte +43 -0
- package/dist/components/menu/MenuCheckboxItem.svelte.d.ts +11 -0
- package/dist/components/menu/MenuContent.svelte +36 -0
- package/dist/components/menu/MenuContent.svelte.d.ts +10 -0
- package/dist/components/menu/MenuItem.svelte +41 -0
- package/dist/components/menu/MenuItem.svelte.d.ts +16 -0
- package/dist/components/menu/MenuLabel.svelte +24 -0
- package/dist/components/menu/MenuLabel.svelte.d.ts +10 -0
- package/dist/components/menu/MenuRadioItem.svelte +54 -0
- package/dist/components/menu/MenuRadioItem.svelte.d.ts +12 -0
- package/dist/components/menu/MenuSeparator.svelte +19 -0
- package/dist/components/menu/MenuSeparator.svelte.d.ts +8 -0
- package/dist/components/menu/MenuSubContent.svelte +34 -0
- package/dist/components/menu/MenuSubContent.svelte.d.ts +10 -0
- package/dist/components/menu/MenuSubTrigger.svelte +35 -0
- package/dist/components/menu/MenuSubTrigger.svelte.d.ts +11 -0
- package/dist/components/menu/context-menu.d.ts +11 -0
- package/dist/components/menu/context-menu.js +10 -0
- package/dist/components/menu/index.js +16 -0
- package/dist/components/message/MessageAction.svelte +62 -0
- package/dist/components/message/MessageAction.svelte.d.ts +16 -0
- package/dist/components/message/MessageActions.svelte +77 -0
- package/dist/components/message/MessageActions.svelte.d.ts +19 -0
- package/dist/components/message/MessageContent.svelte +68 -0
- package/dist/components/message/MessageContent.svelte.d.ts +12 -0
- package/dist/components/message/MessageCopy.svelte +106 -0
- package/dist/components/message/MessageCopy.svelte.d.ts +16 -0
- package/dist/components/message/MessageHeader.svelte +74 -0
- package/dist/components/message/MessageHeader.svelte.d.ts +15 -0
- package/dist/components/message/MessagePending.svelte +44 -0
- package/dist/components/message/MessagePending.svelte.d.ts +10 -0
- package/dist/components/message/MessageRoot.svelte +79 -0
- package/dist/components/message/MessageRoot.svelte.d.ts +20 -0
- package/dist/components/message/MessageTime.svelte +58 -0
- package/dist/components/message/MessageTime.svelte.d.ts +12 -0
- package/dist/components/message/context.d.ts +7 -0
- package/dist/components/message/context.js +11 -0
- package/dist/components/message/index.d.ts +18 -0
- package/dist/components/message/index.js +11 -0
- package/dist/components/notice/Notice.svelte +111 -0
- package/dist/components/notice/Notice.svelte.d.ts +26 -0
- package/dist/components/plan/Plan.svelte +198 -0
- package/dist/components/plan/Plan.svelte.d.ts +18 -0
- package/dist/components/popover/PopoverContent.svelte +42 -0
- package/dist/components/popover/PopoverContent.svelte.d.ts +10 -0
- package/dist/components/popover/index.d.ts +7 -0
- package/dist/components/popover/index.js +7 -0
- package/dist/components/progress/Progress.svelte +113 -0
- package/dist/components/progress/Progress.svelte.d.ts +11 -0
- package/dist/components/questionnaire/Questionnaire.svelte +315 -0
- package/dist/components/questionnaire/Questionnaire.svelte.d.ts +33 -0
- package/dist/components/queued-message/QueuedMessage.svelte +133 -0
- package/dist/components/queued-message/QueuedMessage.svelte.d.ts +23 -0
- package/dist/components/rail/RailItem.svelte +170 -0
- package/dist/components/rail/RailItem.svelte.d.ts +21 -0
- package/dist/components/rail/RailRoot.svelte +46 -0
- package/dist/components/rail/RailRoot.svelte.d.ts +13 -0
- package/dist/components/rail/RailSpacer.svelte +2 -0
- package/dist/components/rail/RailSpacer.svelte.d.ts +26 -0
- package/dist/components/rail/index.d.ts +6 -0
- package/dist/components/rail/index.js +4 -0
- package/dist/components/reasoning/ReasoningContent.svelte +56 -0
- package/dist/components/reasoning/ReasoningContent.svelte.d.ts +12 -0
- package/dist/components/reasoning/ReasoningRoot.svelte +102 -0
- package/dist/components/reasoning/ReasoningRoot.svelte.d.ts +25 -0
- package/dist/components/reasoning/ReasoningTrigger.svelte +106 -0
- package/dist/components/reasoning/ReasoningTrigger.svelte.d.ts +18 -0
- package/dist/components/reasoning/context.d.ts +8 -0
- package/dist/components/reasoning/context.js +11 -0
- package/dist/components/reasoning/index.d.ts +7 -0
- package/dist/components/reasoning/index.js +6 -0
- package/dist/components/resize-handle/ResizeHandle.svelte +177 -0
- package/dist/components/resize-handle/ResizeHandle.svelte.d.ts +29 -0
- package/dist/components/rolling-text/RollingText.svelte +51 -0
- package/dist/components/rolling-text/RollingText.svelte.d.ts +11 -0
- package/dist/components/segmented/SegmentedControl.svelte +171 -0
- package/dist/components/segmented/SegmentedControl.svelte.d.ts +20 -0
- package/dist/components/select/Select.svelte +146 -0
- package/dist/components/select/Select.svelte.d.ts +31 -0
- package/dist/components/separator/Separator.svelte +48 -0
- package/dist/components/separator/Separator.svelte.d.ts +11 -0
- package/dist/components/settings-row/SettingsRow.svelte +97 -0
- package/dist/components/settings-row/SettingsRow.svelte.d.ts +21 -0
- package/dist/components/shimmer/Shimmer.svelte +66 -0
- package/dist/components/shimmer/Shimmer.svelte.d.ts +12 -0
- package/dist/components/sidebar/SidebarContent.svelte +70 -0
- package/dist/components/sidebar/SidebarContent.svelte.d.ts +13 -0
- package/dist/components/sidebar/SidebarFooter.svelte +33 -0
- package/dist/components/sidebar/SidebarFooter.svelte.d.ts +10 -0
- package/dist/components/sidebar/SidebarGroup.svelte +123 -0
- package/dist/components/sidebar/SidebarGroup.svelte.d.ts +19 -0
- package/dist/components/sidebar/SidebarHeader.svelte +39 -0
- package/dist/components/sidebar/SidebarHeader.svelte.d.ts +12 -0
- package/dist/components/sidebar/SidebarItem.svelte +236 -0
- package/dist/components/sidebar/SidebarItem.svelte.d.ts +27 -0
- package/dist/components/sidebar/index.d.ts +11 -0
- package/dist/components/sidebar/index.js +6 -0
- package/dist/components/skeleton/Skeleton.svelte +61 -0
- package/dist/components/skeleton/Skeleton.svelte.d.ts +13 -0
- package/dist/components/spinner/Spinner.svelte +57 -0
- package/dist/components/spinner/Spinner.svelte.d.ts +12 -0
- package/dist/components/stack/Stack.svelte +99 -0
- package/dist/components/stack/Stack.svelte.d.ts +19 -0
- package/dist/components/status-indicator/StatusIndicator.svelte +97 -0
- package/dist/components/status-indicator/StatusIndicator.svelte.d.ts +14 -0
- package/dist/components/suggestions/SuggestionsItem.svelte +104 -0
- package/dist/components/suggestions/SuggestionsItem.svelte.d.ts +14 -0
- package/dist/components/suggestions/SuggestionsRoot.svelte +80 -0
- package/dist/components/suggestions/SuggestionsRoot.svelte.d.ts +20 -0
- package/dist/components/suggestions/context.d.ts +7 -0
- package/dist/components/suggestions/context.js +8 -0
- package/dist/components/suggestions/index.d.ts +5 -0
- package/dist/components/suggestions/index.js +5 -0
- package/dist/components/switch/Switch.svelte +175 -0
- package/dist/components/switch/Switch.svelte.d.ts +17 -0
- package/dist/components/tabs/Tabs.svelte +170 -0
- package/dist/components/tabs/Tabs.svelte.d.ts +22 -0
- package/dist/components/text/Text.svelte +88 -0
- package/dist/components/text/Text.svelte.d.ts +20 -0
- package/dist/components/textarea/Textarea.svelte +64 -0
- package/dist/components/textarea/Textarea.svelte.d.ts +13 -0
- package/dist/components/theme/Theme.svelte +49 -0
- package/dist/components/theme/Theme.svelte.d.ts +25 -0
- package/dist/components/toast/Toaster.svelte +223 -0
- package/dist/components/toast/Toaster.svelte.d.ts +9 -0
- package/dist/components/toast/toasts.svelte.d.ts +55 -0
- package/dist/components/toast/toasts.svelte.js +66 -0
- package/dist/components/tool/ToolContent.svelte +51 -0
- package/dist/components/tool/ToolContent.svelte.d.ts +11 -0
- package/dist/components/tool/ToolInput.svelte +21 -0
- package/dist/components/tool/ToolInput.svelte.d.ts +14 -0
- package/dist/components/tool/ToolOutput.svelte +33 -0
- package/dist/components/tool/ToolOutput.svelte.d.ts +16 -0
- package/dist/components/tool/ToolRoot.svelte +94 -0
- package/dist/components/tool/ToolRoot.svelte.d.ts +23 -0
- package/dist/components/tool/ToolSection.svelte +102 -0
- package/dist/components/tool/ToolSection.svelte.d.ts +16 -0
- package/dist/components/tool/ToolTrigger.svelte +191 -0
- package/dist/components/tool/ToolTrigger.svelte.d.ts +14 -0
- package/dist/components/tool/context.d.ts +18 -0
- package/dist/components/tool/context.js +11 -0
- package/dist/components/tool/index.d.ts +12 -0
- package/dist/components/tool/index.js +8 -0
- package/dist/components/tooltip/TooltipContent.svelte +76 -0
- package/dist/components/tooltip/TooltipContent.svelte.d.ts +12 -0
- package/dist/components/tooltip/TooltipRoot.svelte +37 -0
- package/dist/components/tooltip/TooltipRoot.svelte.d.ts +10 -0
- package/dist/components/tooltip/TooltipTrigger.svelte +25 -0
- package/dist/components/tooltip/TooltipTrigger.svelte.d.ts +5 -0
- package/dist/components/tooltip/index.d.ts +13 -0
- package/dist/components/tooltip/index.js +10 -0
- package/dist/components/tooltip/intent.d.ts +2 -0
- package/dist/components/tooltip/intent.js +29 -0
- package/dist/components/work-fold/WorkFold.svelte +100 -0
- package/dist/components/work-fold/WorkFold.svelte.d.ts +15 -0
- package/dist/index.d.ts +127 -0
- package/dist/index.js +93 -0
- package/dist/internal/Chevron.svelte +28 -0
- package/dist/internal/Chevron.svelte.d.ts +7 -0
- package/dist/internal/Code.svelte +70 -0
- package/dist/internal/Code.svelte.d.ts +10 -0
- package/dist/internal/Collapse.svelte +57 -0
- package/dist/internal/Collapse.svelte.d.ts +12 -0
- package/dist/internal/Glyph.svelte +89 -0
- package/dist/internal/Glyph.svelte.d.ts +37 -0
- package/dist/internal/Tile.svelte +86 -0
- package/dist/internal/Tile.svelte.d.ts +15 -0
- package/dist/internal/control.d.ts +58 -0
- package/dist/internal/control.js +74 -0
- package/dist/internal/disclosure.d.ts +7 -0
- package/dist/internal/disclosure.js +1 -0
- package/dist/internal/json.d.ts +13 -0
- package/dist/internal/json.js +51 -0
- package/dist/internal/kinds.d.ts +9 -0
- package/dist/internal/kinds.js +25 -0
- package/dist/internal/layer.d.ts +103 -0
- package/dist/internal/layer.js +129 -0
- package/dist/internal/loop.d.ts +35 -0
- package/dist/internal/loop.js +72 -0
- package/dist/internal/markers.stylex.d.ts +14 -0
- package/dist/internal/markers.stylex.js +10 -0
- package/dist/internal/roving.d.ts +17 -0
- package/dist/internal/roving.js +68 -0
- package/dist/internal/shared.d.ts +36 -0
- package/dist/internal/shared.js +44 -0
- package/dist/internal/sx.d.ts +14 -0
- package/dist/internal/sx.js +11 -0
- package/dist/preset.d.ts +102 -0
- package/dist/preset.js +334 -0
- package/dist/tokens.stylex.d.ts +104 -0
- package/dist/tokens.stylex.js +125 -0
- package/dist/vite.d.ts +16 -0
- package/dist/vite.js +58 -0
- package/package.json +123 -5
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Says a short message to assistive technology, such as "Working", "Waiting for
|
|
3
|
+
your answer" or "Done", without showing anything.
|
|
4
|
+
|
|
5
|
+
The rules come from Eregion, where each fixed a message that went unheard:
|
|
6
|
+
the region is on the page, empty, before anything is said into it; it is a
|
|
7
|
+
plain polite live region, because some screen readers drop updates from
|
|
8
|
+
role="status"; it says nothing for the message it starts with, so opening a
|
|
9
|
+
thread is quiet; a message said twice is still heard twice; and it empties
|
|
10
|
+
itself after a while, so a stale message is not found by browsing later.
|
|
11
|
+
-->
|
|
12
|
+
<script lang="ts" module>
|
|
13
|
+
import * as stylex from '@stylexjs/stylex';
|
|
14
|
+
|
|
15
|
+
export type AnnouncerProps = {
|
|
16
|
+
/** What to say. Each change is announced; the first value is not. */
|
|
17
|
+
message?: string;
|
|
18
|
+
/** `assertive` interrupts; keep it for what cannot wait. */
|
|
19
|
+
politeness?: 'polite' | 'assertive';
|
|
20
|
+
/** How long a message stays in the region, in milliseconds. */
|
|
21
|
+
clearAfter?: number;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const styles = stylex.create({
|
|
25
|
+
hidden: {
|
|
26
|
+
position: 'absolute',
|
|
27
|
+
width: '1px',
|
|
28
|
+
height: '1px',
|
|
29
|
+
margin: '-1px',
|
|
30
|
+
padding: 0,
|
|
31
|
+
overflow: 'hidden',
|
|
32
|
+
clipPath: 'inset(50%)',
|
|
33
|
+
whiteSpace: 'nowrap',
|
|
34
|
+
borderWidth: 0
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<script lang="ts">
|
|
40
|
+
import { untrack } from 'svelte';
|
|
41
|
+
|
|
42
|
+
let { message, politeness = 'polite', clearAfter = 7000 }: AnnouncerProps = $props();
|
|
43
|
+
|
|
44
|
+
const NBSP = String.fromCharCode(0xa0);
|
|
45
|
+
let text = $state('');
|
|
46
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
47
|
+
let first = true;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Says a message now. Use it to say the same words again, which a changed
|
|
51
|
+
* `message` cannot do.
|
|
52
|
+
*/
|
|
53
|
+
export function announce(next: string) {
|
|
54
|
+
clearTimeout(timer);
|
|
55
|
+
if (!next) {
|
|
56
|
+
text = '';
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// The same words as the region holds would be no change, and go unheard;
|
|
60
|
+
// a no-break space on the end makes them one
|
|
61
|
+
text = next === text ? next + NBSP : next;
|
|
62
|
+
timer = setTimeout(() => (text = ''), clearAfter);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
$effect(() => {
|
|
66
|
+
const next = message;
|
|
67
|
+
if (first) {
|
|
68
|
+
first = false;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
untrack(() => announce(next ?? ''));
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
$effect(() => () => clearTimeout(timer));
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<div
|
|
78
|
+
aria-live={politeness}
|
|
79
|
+
aria-atomic="true"
|
|
80
|
+
data-slot="announcer"
|
|
81
|
+
{...stylex.attrs(styles.hidden)}
|
|
82
|
+
>
|
|
83
|
+
{text}
|
|
84
|
+
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type AnnouncerProps = {
|
|
2
|
+
/** What to say. Each change is announced; the first value is not. */
|
|
3
|
+
message?: string;
|
|
4
|
+
/** `assertive` interrupts; keep it for what cannot wait. */
|
|
5
|
+
politeness?: 'polite' | 'assertive';
|
|
6
|
+
/** How long a message stays in the region, in milliseconds. */
|
|
7
|
+
clearAfter?: number;
|
|
8
|
+
};
|
|
9
|
+
declare const Announcer: import("svelte").Component<AnnouncerProps, {
|
|
10
|
+
announce: (next: string) => void;
|
|
11
|
+
}, "">;
|
|
12
|
+
type Announcer = ReturnType<typeof Announcer>;
|
|
13
|
+
export default Announcer;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import * as stylex from '@stylexjs/stylex';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
import { shared } from '../../internal/shared.js';
|
|
6
|
+
import { attrs, type Sx } from '../../internal/sx.js';
|
|
7
|
+
import { colors, font, motion } from '../../tokens.stylex.js';
|
|
8
|
+
|
|
9
|
+
export type AppShellHeaderProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
|
|
10
|
+
/**
|
|
11
|
+
* Whether the bar drags the window, in Electron with a hidden title bar.
|
|
12
|
+
* Narvi's controls opt out on their own, so they still take clicks.
|
|
13
|
+
*/
|
|
14
|
+
drag?: boolean;
|
|
15
|
+
sx?: Sx;
|
|
16
|
+
children?: Snippet;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const MOTION = '@media (prefers-reduced-motion: no-preference)';
|
|
20
|
+
|
|
21
|
+
const styles = stylex.create({
|
|
22
|
+
header: {
|
|
23
|
+
display: 'flex',
|
|
24
|
+
alignItems: 'center',
|
|
25
|
+
gap: '0.5rem',
|
|
26
|
+
flexShrink: 0,
|
|
27
|
+
height: '3.25rem',
|
|
28
|
+
paddingInlineEnd: '0.75rem',
|
|
29
|
+
// Clear of the traffic lights, for whatever part of them the sidebar
|
|
30
|
+
// does not cover now. It moves with the sidebar.
|
|
31
|
+
paddingInlineStart:
|
|
32
|
+
'calc(0.75rem + max(0px, var(--narvi-window-inset, 0px) - var(--narvi-sidebar-taken, 0px)))',
|
|
33
|
+
borderBottomWidth: '1px',
|
|
34
|
+
borderBottomStyle: 'solid',
|
|
35
|
+
borderBottomColor: colors.line,
|
|
36
|
+
fontSize: font.sizeMd,
|
|
37
|
+
transitionProperty: { default: 'none', [MOTION]: 'padding-inline-start' },
|
|
38
|
+
transitionDuration: motion.slow,
|
|
39
|
+
transitionTimingFunction: motion.easeInOut
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<script lang="ts">
|
|
45
|
+
let { drag = true, sx, class: className, children, ...rest }: AppShellHeaderProps = $props();
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<header
|
|
49
|
+
data-slot="app-shell-header"
|
|
50
|
+
{...rest}
|
|
51
|
+
{...attrs([styles.header, drag && shared.dragRegion, sx], className)}
|
|
52
|
+
>
|
|
53
|
+
{@render children?.()}
|
|
54
|
+
</header>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import { type Sx } from '../../internal/sx.js';
|
|
4
|
+
export type AppShellHeaderProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
|
|
5
|
+
/**
|
|
6
|
+
* Whether the bar drags the window, in Electron with a hidden title bar.
|
|
7
|
+
* Narvi's controls opt out on their own, so they still take clicks.
|
|
8
|
+
*/
|
|
9
|
+
drag?: boolean;
|
|
10
|
+
sx?: Sx;
|
|
11
|
+
children?: Snippet;
|
|
12
|
+
};
|
|
13
|
+
declare const AppShellHeader: import("svelte").Component<AppShellHeaderProps, {}, "">;
|
|
14
|
+
type AppShellHeader = ReturnType<typeof AppShellHeader>;
|
|
15
|
+
export default AppShellHeader;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import * as stylex from '@stylexjs/stylex';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
import { shared } from '../../internal/shared.js';
|
|
6
|
+
import { attrs, type Sx } from '../../internal/sx.js';
|
|
7
|
+
import { colors, radius } from '../../tokens.stylex.js';
|
|
8
|
+
import { useAppShell } from './context.js';
|
|
9
|
+
|
|
10
|
+
export type AppShellMainProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
|
|
11
|
+
sx?: Sx;
|
|
12
|
+
/** An AppShell.Header and the page. */
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const styles = stylex.create({
|
|
17
|
+
// The page sits on the stone like a sheet laid on a table
|
|
18
|
+
main: {
|
|
19
|
+
position: 'relative',
|
|
20
|
+
display: 'flex',
|
|
21
|
+
flexDirection: 'column',
|
|
22
|
+
flexGrow: 1,
|
|
23
|
+
minWidth: 0,
|
|
24
|
+
marginBlock: '0.375rem',
|
|
25
|
+
marginInlineEnd: '0.375rem',
|
|
26
|
+
overflow: 'clip',
|
|
27
|
+
borderRadius: radius.frame,
|
|
28
|
+
backgroundColor: colors.bgRaised,
|
|
29
|
+
boxShadow: `inset 0 0 0 1px ${colors.line}, 0 1px 2px ${colors.shade}`,
|
|
30
|
+
outlineStyle: 'none'
|
|
31
|
+
},
|
|
32
|
+
narrow: { margin: 0, borderRadius: 0, boxShadow: 'none' }
|
|
33
|
+
});
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<script lang="ts">
|
|
37
|
+
let { sx, class: className, children, ...rest }: AppShellMainProps = $props();
|
|
38
|
+
|
|
39
|
+
const shell = useAppShell('Main');
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<main
|
|
43
|
+
tabindex="-1"
|
|
44
|
+
data-slot="app-shell-main"
|
|
45
|
+
{...rest}
|
|
46
|
+
{...attrs([styles.main, shared.edged, shell.narrow && styles.narrow, sx], className)}
|
|
47
|
+
>
|
|
48
|
+
{@render children?.()}
|
|
49
|
+
</main>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import { type Sx } from '../../internal/sx.js';
|
|
4
|
+
export type AppShellMainProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
|
|
5
|
+
sx?: Sx;
|
|
6
|
+
/** An AppShell.Header and the page. */
|
|
7
|
+
children?: Snippet;
|
|
8
|
+
};
|
|
9
|
+
declare const AppShellMain: import("svelte").Component<AppShellMainProps, {}, "">;
|
|
10
|
+
type AppShellMain = ReturnType<typeof AppShellMain>;
|
|
11
|
+
export default AppShellMain;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import * as stylex from '@stylexjs/stylex';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
import { shared } from '../../internal/shared.js';
|
|
6
|
+
import { attrs, type Sx } from '../../internal/sx.js';
|
|
7
|
+
import { colors, radius } from '../../tokens.stylex.js';
|
|
8
|
+
import ResizeHandle from '../resize-handle/ResizeHandle.svelte';
|
|
9
|
+
import { useAppShell } from './context.js';
|
|
10
|
+
|
|
11
|
+
export type AppShellPanelProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
|
|
12
|
+
/** Names the region: "Changes", "Files". */
|
|
13
|
+
label: string;
|
|
14
|
+
/** Its width in pixels. Bindable; store it if it should be remembered. */
|
|
15
|
+
width?: number;
|
|
16
|
+
minWidth?: number;
|
|
17
|
+
defaultWidth?: number;
|
|
18
|
+
/** How much room it always leaves the main area, in pixels. */
|
|
19
|
+
mainMinWidth?: number;
|
|
20
|
+
sx?: Sx;
|
|
21
|
+
children?: Snippet;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const styles = stylex.create({
|
|
25
|
+
panel: {
|
|
26
|
+
position: 'relative',
|
|
27
|
+
display: 'flex',
|
|
28
|
+
flexDirection: 'column',
|
|
29
|
+
flexShrink: 0,
|
|
30
|
+
width: 'var(--narvi-panel-width)',
|
|
31
|
+
minWidth: 0,
|
|
32
|
+
marginBlock: '0.375rem',
|
|
33
|
+
marginInlineEnd: '0.375rem',
|
|
34
|
+
overflow: 'clip',
|
|
35
|
+
borderRadius: radius.frame,
|
|
36
|
+
backgroundColor: colors.bgRaised,
|
|
37
|
+
boxShadow: `inset 0 0 0 1px ${colors.line}, 0 1px 2px ${colors.shade}`
|
|
38
|
+
},
|
|
39
|
+
// On a narrow window the panel takes the place of the page, under its
|
|
40
|
+
// header, which stays in reach with the sidebar's toggle
|
|
41
|
+
narrow: {
|
|
42
|
+
position: 'absolute',
|
|
43
|
+
inset: 0,
|
|
44
|
+
top: '3.25rem',
|
|
45
|
+
zIndex: 5,
|
|
46
|
+
width: 'auto',
|
|
47
|
+
margin: 0,
|
|
48
|
+
borderRadius: 0,
|
|
49
|
+
boxShadow: 'none'
|
|
50
|
+
},
|
|
51
|
+
handle: { position: 'relative', alignSelf: 'stretch', marginBlock: '0.375rem' }
|
|
52
|
+
});
|
|
53
|
+
</script>
|
|
54
|
+
|
|
55
|
+
<script lang="ts">
|
|
56
|
+
let {
|
|
57
|
+
label,
|
|
58
|
+
width = $bindable(560),
|
|
59
|
+
minWidth = 320,
|
|
60
|
+
defaultWidth = 560,
|
|
61
|
+
mainMinWidth = 352,
|
|
62
|
+
sx,
|
|
63
|
+
class: className,
|
|
64
|
+
children,
|
|
65
|
+
...rest
|
|
66
|
+
}: AppShellPanelProps = $props();
|
|
67
|
+
|
|
68
|
+
const shell = useAppShell('Panel');
|
|
69
|
+
let element = $state<HTMLElement | null>(null);
|
|
70
|
+
|
|
71
|
+
// It never takes so much that the main area falls below its minimum
|
|
72
|
+
const largest = () => {
|
|
73
|
+
// On the server there is no window to measure: no limit yet
|
|
74
|
+
if (typeof window === 'undefined') return Infinity;
|
|
75
|
+
const shellWidth =
|
|
76
|
+
element?.closest<HTMLElement>('[data-slot="app-shell"]')?.clientWidth ?? innerWidth;
|
|
77
|
+
const main = element?.parentElement?.querySelector<HTMLElement>('[data-slot="app-shell-main"]');
|
|
78
|
+
const sidebar = element?.parentElement?.querySelector<HTMLElement>(
|
|
79
|
+
'[data-slot="app-shell-sidebar"]'
|
|
80
|
+
);
|
|
81
|
+
return shellWidth - (sidebar?.offsetWidth ?? 0) - Math.max(mainMinWidth, 0) - (main ? 12 : 0);
|
|
82
|
+
};
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
{#if !shell.narrow}
|
|
86
|
+
<ResizeHandle
|
|
87
|
+
bind:value={width}
|
|
88
|
+
min={minWidth}
|
|
89
|
+
max={largest}
|
|
90
|
+
defaultValue={defaultWidth}
|
|
91
|
+
edge="start"
|
|
92
|
+
target={element}
|
|
93
|
+
property="--narvi-panel-width"
|
|
94
|
+
label="Resize the {label.toLowerCase()} panel"
|
|
95
|
+
sx={styles.handle}
|
|
96
|
+
/>
|
|
97
|
+
{/if}
|
|
98
|
+
<aside
|
|
99
|
+
bind:this={element}
|
|
100
|
+
aria-label={label}
|
|
101
|
+
data-slot="app-shell-panel"
|
|
102
|
+
style:--narvi-panel-width="{width}px"
|
|
103
|
+
{...rest}
|
|
104
|
+
{...attrs([styles.panel, shared.edged, shell.narrow && styles.narrow, sx], className)}
|
|
105
|
+
>
|
|
106
|
+
{@render children?.()}
|
|
107
|
+
</aside>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import { type Sx } from '../../internal/sx.js';
|
|
4
|
+
export type AppShellPanelProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
|
|
5
|
+
/** Names the region: "Changes", "Files". */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Its width in pixels. Bindable; store it if it should be remembered. */
|
|
8
|
+
width?: number;
|
|
9
|
+
minWidth?: number;
|
|
10
|
+
defaultWidth?: number;
|
|
11
|
+
/** How much room it always leaves the main area, in pixels. */
|
|
12
|
+
mainMinWidth?: number;
|
|
13
|
+
sx?: Sx;
|
|
14
|
+
children?: Snippet;
|
|
15
|
+
};
|
|
16
|
+
declare const AppShellPanel: import("svelte").Component<AppShellPanelProps, {}, "width">;
|
|
17
|
+
type AppShellPanel = ReturnType<typeof AppShellPanel>;
|
|
18
|
+
export default AppShellPanel;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The frame of an app: a sidebar, the main area, and an optional panel.
|
|
3
|
+
|
|
4
|
+
Narvi lays it out and moves it; the app decides what is remembered. The open
|
|
5
|
+
state is bindable and nothing is stored, and no shortcut is bound: wire ⌘B,
|
|
6
|
+
or whatever the app chooses, to `toggle()` from the context or AppShell.Toggle.
|
|
7
|
+
-->
|
|
8
|
+
<script lang="ts" module>
|
|
9
|
+
import * as stylex from '@stylexjs/stylex';
|
|
10
|
+
import type { Snippet } from 'svelte';
|
|
11
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
12
|
+
import { attrs, type Sx } from '../../internal/sx.js';
|
|
13
|
+
import { colors, font } from '../../tokens.stylex.js';
|
|
14
|
+
import { setAppShellContext } from './context.js';
|
|
15
|
+
|
|
16
|
+
export type AppShellRootProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
17
|
+
/** Whether the sidebar shows in full; closed, it shrinks to its rail. Bindable. */
|
|
18
|
+
sidebarOpen?: boolean;
|
|
19
|
+
/** The width of the sidebar's list, in rem or px. A rail, if there is one, is added to it. */
|
|
20
|
+
sidebarWidth?: string;
|
|
21
|
+
/** Below this window width, in pixels, the sidebar becomes a drawer over the page. */
|
|
22
|
+
narrowAt?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Room kept clear at the top start corner of the window, for macOS's traffic
|
|
25
|
+
* lights in an Electron window with a hidden title bar. Headers start after it.
|
|
26
|
+
*/
|
|
27
|
+
windowInset?: string;
|
|
28
|
+
/**
|
|
29
|
+
* True while something modal covers the whole app, such as a settings
|
|
30
|
+
* screen of its own: the shell is then inert, out of reach and unread.
|
|
31
|
+
*/
|
|
32
|
+
covered?: boolean;
|
|
33
|
+
sx?: Sx;
|
|
34
|
+
ref?: HTMLDivElement | null;
|
|
35
|
+
/** An AppShell.Sidebar, an AppShell.Main and, if you like, an AppShell.Panel. */
|
|
36
|
+
children?: Snippet;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const styles = stylex.create({
|
|
40
|
+
root: {
|
|
41
|
+
position: 'relative',
|
|
42
|
+
display: 'flex',
|
|
43
|
+
height: '100dvh',
|
|
44
|
+
// `clip`, not `hidden`: scrollIntoView scrolls an overflow:hidden box, and
|
|
45
|
+
// in Eregion one stray button slid the whole window under its header
|
|
46
|
+
overflow: 'clip',
|
|
47
|
+
overscrollBehavior: 'none',
|
|
48
|
+
backgroundColor: colors.bg,
|
|
49
|
+
color: colors.text,
|
|
50
|
+
fontFamily: font.body,
|
|
51
|
+
fontSize: font.sizeMd,
|
|
52
|
+
lineHeight: font.leadingNormal
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<script lang="ts">
|
|
58
|
+
let {
|
|
59
|
+
sidebarOpen = $bindable(true),
|
|
60
|
+
sidebarWidth = '16rem',
|
|
61
|
+
narrowAt = 768,
|
|
62
|
+
windowInset = '0px',
|
|
63
|
+
covered = false,
|
|
64
|
+
sx,
|
|
65
|
+
class: className,
|
|
66
|
+
ref = $bindable(null),
|
|
67
|
+
children,
|
|
68
|
+
...rest
|
|
69
|
+
}: AppShellRootProps = $props();
|
|
70
|
+
|
|
71
|
+
const uid = $props.id();
|
|
72
|
+
let narrow = $state(false);
|
|
73
|
+
let drawer = $state(false);
|
|
74
|
+
let rail = $state(false);
|
|
75
|
+
|
|
76
|
+
$effect(() => {
|
|
77
|
+
const query = matchMedia(`(max-width: ${narrowAt - 0.02}px)`);
|
|
78
|
+
const update = () => {
|
|
79
|
+
narrow = query.matches;
|
|
80
|
+
if (!narrow) drawer = false;
|
|
81
|
+
};
|
|
82
|
+
update();
|
|
83
|
+
query.addEventListener('change', update);
|
|
84
|
+
return () => query.removeEventListener('change', update);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const open = $derived(narrow ? drawer : sidebarOpen);
|
|
88
|
+
// What the sidebar takes up now, so headers know how much of the window
|
|
89
|
+
// inset is still theirs to keep clear
|
|
90
|
+
const taken = $derived(
|
|
91
|
+
narrow
|
|
92
|
+
? '0px'
|
|
93
|
+
: sidebarOpen
|
|
94
|
+
? 'calc(var(--narvi-sidebar-width) + var(--narvi-rail-current))'
|
|
95
|
+
: 'var(--narvi-rail-current)'
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
setAppShellContext({
|
|
99
|
+
get open() {
|
|
100
|
+
return open;
|
|
101
|
+
},
|
|
102
|
+
get narrow() {
|
|
103
|
+
return narrow;
|
|
104
|
+
},
|
|
105
|
+
sidebarId: `${uid}-sidebar`,
|
|
106
|
+
toggle() {
|
|
107
|
+
if (narrow) drawer = !drawer;
|
|
108
|
+
else sidebarOpen = !sidebarOpen;
|
|
109
|
+
},
|
|
110
|
+
close() {
|
|
111
|
+
if (narrow) drawer = false;
|
|
112
|
+
else sidebarOpen = false;
|
|
113
|
+
},
|
|
114
|
+
setRail(present) {
|
|
115
|
+
rail = present;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
</script>
|
|
119
|
+
|
|
120
|
+
<div
|
|
121
|
+
bind:this={ref}
|
|
122
|
+
inert={covered || undefined}
|
|
123
|
+
aria-hidden={covered || undefined}
|
|
124
|
+
data-slot="app-shell"
|
|
125
|
+
data-sidebar={open ? 'open' : 'closed'}
|
|
126
|
+
data-narrow={narrow || undefined}
|
|
127
|
+
style:--narvi-sidebar-width={sidebarWidth}
|
|
128
|
+
style:--narvi-rail-width="3.25rem"
|
|
129
|
+
style:--narvi-rail-current={rail ? 'var(--narvi-rail-width)' : '0px'}
|
|
130
|
+
style:--narvi-window-inset={windowInset}
|
|
131
|
+
style:--narvi-sidebar-taken={taken}
|
|
132
|
+
{...rest}
|
|
133
|
+
{...attrs([styles.root, sx], className)}
|
|
134
|
+
>
|
|
135
|
+
{@render children?.()}
|
|
136
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import { type Sx } from '../../internal/sx.js';
|
|
4
|
+
export type AppShellRootProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
5
|
+
/** Whether the sidebar shows in full; closed, it shrinks to its rail. Bindable. */
|
|
6
|
+
sidebarOpen?: boolean;
|
|
7
|
+
/** The width of the sidebar's list, in rem or px. A rail, if there is one, is added to it. */
|
|
8
|
+
sidebarWidth?: string;
|
|
9
|
+
/** Below this window width, in pixels, the sidebar becomes a drawer over the page. */
|
|
10
|
+
narrowAt?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Room kept clear at the top start corner of the window, for macOS's traffic
|
|
13
|
+
* lights in an Electron window with a hidden title bar. Headers start after it.
|
|
14
|
+
*/
|
|
15
|
+
windowInset?: string;
|
|
16
|
+
/**
|
|
17
|
+
* True while something modal covers the whole app, such as a settings
|
|
18
|
+
* screen of its own: the shell is then inert, out of reach and unread.
|
|
19
|
+
*/
|
|
20
|
+
covered?: boolean;
|
|
21
|
+
sx?: Sx;
|
|
22
|
+
ref?: HTMLDivElement | null;
|
|
23
|
+
/** An AppShell.Sidebar, an AppShell.Main and, if you like, an AppShell.Panel. */
|
|
24
|
+
children?: Snippet;
|
|
25
|
+
};
|
|
26
|
+
declare const AppShellRoot: import("svelte").Component<AppShellRootProps, {}, "ref" | "sidebarOpen">;
|
|
27
|
+
type AppShellRoot = ReturnType<typeof AppShellRoot>;
|
|
28
|
+
export default AppShellRoot;
|