lutra 0.0.20 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -24
- package/dist/components/AspectRatio.svelte +26 -0
- package/dist/components/AspectRatio.svelte.d.ts +8 -0
- package/dist/components/Dialog.svelte +78 -0
- package/dist/components/Dialog.svelte.d.ts +14 -0
- package/dist/components/Layout.svelte +32 -0
- package/dist/components/Layout.svelte.d.ts +11 -0
- package/dist/components/PageContent.svelte +108 -0
- package/dist/components/PageContent.svelte.d.ts +38 -0
- package/dist/components/Theme.svelte +87 -0
- package/dist/components/Theme.svelte.d.ts +17 -0
- package/dist/{display → components}/Tooltip.svelte +37 -11
- package/dist/components/Tooltip.svelte.d.ts +12 -0
- package/dist/config.d.ts +30 -0
- package/dist/config.js +18 -0
- package/dist/css/0-layers.css +1 -0
- package/dist/css/1-props.css +775 -0
- package/dist/css/2-base.css +209 -0
- package/dist/css/3-typo.css +65 -0
- package/dist/css/4-layout.css +5 -0
- package/dist/css/5-media.css +21 -0
- package/dist/css/lutra.css +6 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +5 -2
- package/dist/types.d.ts +39 -0
- package/dist/types.js +25 -0
- package/package.json +29 -75
- package/dist/data/Stat.svelte +0 -89
- package/dist/data/Stat.svelte.d.ts +0 -39
- package/dist/data/index.d.ts +0 -1
- package/dist/data/index.js +0 -1
- package/dist/display/Avatar.svelte +0 -61
- package/dist/display/Avatar.svelte.d.ts +0 -23
- package/dist/display/Badge.svelte +0 -93
- package/dist/display/Badge.svelte.d.ts +0 -34
- package/dist/display/Callout.svelte +0 -109
- package/dist/display/Callout.svelte.d.ts +0 -36
- package/dist/display/Close.svelte +0 -58
- package/dist/display/Close.svelte.d.ts +0 -21
- package/dist/display/Code.svelte +0 -195
- package/dist/display/Code.svelte.d.ts +0 -31
- package/dist/display/ContextTip.svelte +0 -26
- package/dist/display/ContextTip.svelte.d.ts +0 -22
- package/dist/display/Details.svelte +0 -49
- package/dist/display/Details.svelte.d.ts +0 -32
- package/dist/display/Hero.svelte +0 -50
- package/dist/display/Hero.svelte.d.ts +0 -30
- package/dist/display/Icon.svelte +0 -40
- package/dist/display/Icon.svelte.d.ts +0 -24
- package/dist/display/IconButton.svelte +0 -84
- package/dist/display/IconButton.svelte.d.ts +0 -30
- package/dist/display/Image.svelte +0 -91
- package/dist/display/Image.svelte.d.ts +0 -37
- package/dist/display/Indicator.svelte +0 -352
- package/dist/display/Indicator.svelte.d.ts +0 -24
- package/dist/display/Inset.svelte +0 -18
- package/dist/display/Inset.svelte.d.ts +0 -22
- package/dist/display/Notification.svelte +0 -104
- package/dist/display/Notification.svelte.d.ts +0 -42
- package/dist/display/Popup.svelte +0 -111
- package/dist/display/Popup.svelte.d.ts +0 -30
- package/dist/display/Table.svelte +0 -24
- package/dist/display/Table.svelte.d.ts +0 -34
- package/dist/display/Tag.svelte +0 -90
- package/dist/display/Tag.svelte.d.ts +0 -35
- package/dist/display/Tooltip.svelte.d.ts +0 -28
- package/dist/display/index.d.ts +0 -14
- package/dist/display/index.js +0 -14
- package/dist/display/notifications.svelte.d.ts +0 -21
- package/dist/display/notifications.svelte.js +0 -31
- package/dist/form/Button.svelte +0 -34
- package/dist/form/Button.svelte.d.ts +0 -36
- package/dist/form/FieldActions.svelte +0 -46
- package/dist/form/FieldActions.svelte.d.ts +0 -24
- package/dist/form/FieldContainer.svelte +0 -37
- package/dist/form/FieldContainer.svelte.d.ts +0 -24
- package/dist/form/FieldContent.svelte +0 -134
- package/dist/form/FieldContent.svelte.d.ts +0 -59
- package/dist/form/FieldError.svelte +0 -14
- package/dist/form/FieldError.svelte.d.ts +0 -21
- package/dist/form/FieldSection.svelte +0 -86
- package/dist/form/FieldSection.svelte.d.ts +0 -34
- package/dist/form/Fieldset.svelte +0 -68
- package/dist/form/Fieldset.svelte.d.ts +0 -42
- package/dist/form/Form.svelte +0 -98
- package/dist/form/Form.svelte.d.ts +0 -33
- package/dist/form/Input.svelte +0 -287
- package/dist/form/Input.svelte.d.ts +0 -142
- package/dist/form/InputLength.svelte +0 -32
- package/dist/form/InputLength.svelte.d.ts +0 -21
- package/dist/form/Label.svelte +0 -27
- package/dist/form/Label.svelte.d.ts +0 -31
- package/dist/form/Select.svelte +0 -88
- package/dist/form/Select.svelte.d.ts +0 -97
- package/dist/form/client.svelte.d.ts +0 -45
- package/dist/form/client.svelte.js +0 -90
- package/dist/form/form.d.ts +0 -52
- package/dist/form/form.js +0 -326
- package/dist/form/index.d.ts +0 -15
- package/dist/form/index.js +0 -15
- package/dist/form/types.d.ts +0 -52
- package/dist/form/types.js +0 -1
- package/dist/grid/Column.svelte +0 -11
- package/dist/grid/Column.svelte.d.ts +0 -22
- package/dist/grid/Grid.svelte +0 -19
- package/dist/grid/Grid.svelte.d.ts +0 -24
- package/dist/grid/Row.svelte +0 -44
- package/dist/grid/Row.svelte.d.ts +0 -24
- package/dist/icons/Alert.svelte +0 -3
- package/dist/icons/Alert.svelte.d.ts +0 -23
- package/dist/icons/Copy.svelte +0 -3
- package/dist/icons/Copy.svelte.d.ts +0 -23
- package/dist/icons/Done.svelte +0 -3
- package/dist/icons/Done.svelte.d.ts +0 -23
- package/dist/icons/Error.svelte +0 -3
- package/dist/icons/Error.svelte.d.ts +0 -23
- package/dist/icons/Help.svelte +0 -3
- package/dist/icons/Help.svelte.d.ts +0 -23
- package/dist/icons/Hide.svelte +0 -3
- package/dist/icons/Hide.svelte.d.ts +0 -23
- package/dist/icons/Info.svelte +0 -3
- package/dist/icons/Info.svelte.d.ts +0 -23
- package/dist/icons/Link.svelte +0 -3
- package/dist/icons/Link.svelte.d.ts +0 -23
- package/dist/icons/MenuBurger.svelte +0 -3
- package/dist/icons/MenuBurger.svelte.d.ts +0 -23
- package/dist/icons/MenuDots.svelte +0 -3
- package/dist/icons/MenuDots.svelte.d.ts +0 -23
- package/dist/icons/Show.svelte +0 -3
- package/dist/icons/Show.svelte.d.ts +0 -23
- package/dist/icons/Success.svelte +0 -3
- package/dist/icons/Success.svelte.d.ts +0 -23
- package/dist/icons/Warning.svelte +0 -3
- package/dist/icons/Warning.svelte.d.ts +0 -23
- package/dist/icons/index.d.ts +0 -11
- package/dist/icons/index.js +0 -11
- package/dist/layout/Layout.svelte +0 -45
- package/dist/layout/Layout.svelte.d.ts +0 -25
- package/dist/layout/LayoutFooter.svelte +0 -21
- package/dist/layout/LayoutFooter.svelte.d.ts +0 -19
- package/dist/layout/LayoutGrid.svelte +0 -51
- package/dist/layout/LayoutGrid.svelte.d.ts +0 -38
- package/dist/layout/LayoutHeader.svelte +0 -94
- package/dist/layout/LayoutHeader.svelte.d.ts +0 -39
- package/dist/layout/LayoutSideMenu.svelte +0 -54
- package/dist/layout/LayoutSideMenu.svelte.d.ts +0 -25
- package/dist/layout/LayoutTypes.d.ts +0 -15
- package/dist/layout/LayoutTypes.js +0 -9
- package/dist/layout/Overlay.svelte +0 -20
- package/dist/layout/Overlay.svelte.d.ts +0 -35
- package/dist/layout/OverlayContainer.svelte +0 -28
- package/dist/layout/OverlayContainer.svelte.d.ts +0 -16
- package/dist/layout/OverlayLayer.svelte +0 -145
- package/dist/layout/OverlayLayer.svelte.d.ts +0 -22
- package/dist/layout/PageContent.svelte +0 -97
- package/dist/layout/PageContent.svelte.d.ts +0 -28
- package/dist/layout/Theme.svelte +0 -228
- package/dist/layout/Theme.svelte.d.ts +0 -24
- package/dist/layout/UIContent.svelte +0 -15
- package/dist/layout/UIContent.svelte.d.ts +0 -22
- package/dist/layout/index.d.ts +0 -7
- package/dist/layout/index.js +0 -7
- package/dist/layout/overlays.svelte.d.ts +0 -34
- package/dist/layout/overlays.svelte.js +0 -44
- package/dist/nav/Breadcrumb.svelte +0 -82
- package/dist/nav/Breadcrumb.svelte.d.ts +0 -33
- package/dist/nav/Menu.svelte +0 -177
- package/dist/nav/Menu.svelte.d.ts +0 -33
- package/dist/nav/MenuItem.svelte +0 -140
- package/dist/nav/MenuItem.svelte.d.ts +0 -26
- package/dist/nav/MenuTypes.d.ts +0 -58
- package/dist/nav/MenuTypes.js +0 -1
- package/dist/nav/NavMenu.svelte +0 -183
- package/dist/nav/NavMenu.svelte.d.ts +0 -20
- package/dist/nav/TabbedContent.svelte +0 -43
- package/dist/nav/TabbedContent.svelte.d.ts +0 -24
- package/dist/nav/Tabs.svelte +0 -118
- package/dist/nav/Tabs.svelte.d.ts +0 -26
- package/dist/nav/index.d.ts +0 -6
- package/dist/nav/index.js +0 -5
- package/dist/style.css +0 -853
- package/dist/typo/Clamp.svelte +0 -25
- package/dist/typo/Clamp.svelte.d.ts +0 -28
- package/dist/typo/H.svelte +0 -52
- package/dist/typo/H.svelte.d.ts +0 -32
- package/dist/typo/H1.svelte +0 -14
- package/dist/typo/H1.svelte.d.ts +0 -30
- package/dist/typo/H2.svelte +0 -14
- package/dist/typo/H2.svelte.d.ts +0 -30
- package/dist/typo/H3.svelte +0 -14
- package/dist/typo/H3.svelte.d.ts +0 -30
- package/dist/typo/H4.svelte +0 -14
- package/dist/typo/H4.svelte.d.ts +0 -30
- package/dist/typo/H5.svelte +0 -14
- package/dist/typo/H5.svelte.d.ts +0 -30
- package/dist/typo/H6.svelte +0 -14
- package/dist/typo/H6.svelte.d.ts +0 -30
- package/dist/typo/P.svelte +0 -34
- package/dist/typo/P.svelte.d.ts +0 -30
- package/dist/typo/index.d.ts +0 -9
- package/dist/typo/index.js +0 -9
- package/dist/utils/StringOrComponentOrSnippet.svelte +0 -14
- package/dist/utils/StringOrComponentOrSnippet.svelte.d.ts +0 -24
- package/dist/utils/attr.d.ts +0 -5
- package/dist/utils/attr.js +0 -21
- package/dist/utils/color.d.ts +0 -51
- package/dist/utils/color.js +0 -97
- package/dist/utils/defaults.d.ts +0 -4
- package/dist/utils/defaults.js +0 -1
- package/dist/utils/dom.d.ts +0 -15
- package/dist/utils/dom.js +0 -74
- package/dist/utils/hooks.server.d.ts +0 -2
- package/dist/utils/hooks.server.js +0 -16
- package/dist/utils/id.d.ts +0 -1
- package/dist/utils/id.js +0 -3
- package/dist/utils/index.d.ts +0 -8
- package/dist/utils/index.js +0 -5
- package/dist/utils/isSnippet.d.ts +0 -5
- package/dist/utils/isSnippet.js +0 -6
- package/dist/utils/keyboard.svelte.d.ts +0 -22
- package/dist/utils/keyboard.svelte.js +0 -161
- /package/dist/{utils → util}/transitions.d.ts +0 -0
- /package/dist/{utils → util}/transitions.js +0 -0
@@ -1,82 +0,0 @@
|
|
1
|
-
<script lang="ts">const {
|
2
|
-
items,
|
3
|
-
separator = "/",
|
4
|
-
contained,
|
5
|
-
fullWidth,
|
6
|
-
center
|
7
|
-
} = $props();
|
8
|
-
</script>
|
9
|
-
|
10
|
-
<nav class:center class:contained class:fullWidth aria-label="Breadcrumb">
|
11
|
-
<ol>
|
12
|
-
{#each items as item, index}
|
13
|
-
<li aria-current={index === items.length - 1 ? "page" : undefined}>
|
14
|
-
{#if item.href && index < items.length - 1}
|
15
|
-
<a href={item.href}>{item.label}</a>
|
16
|
-
{:else}
|
17
|
-
<span>{item.label}</span>
|
18
|
-
{/if}
|
19
|
-
</li>
|
20
|
-
{#if index !== items.length - 1}
|
21
|
-
<li aria-hidden="true" class="separator">
|
22
|
-
{#if typeof separator === "string"}
|
23
|
-
<span>{separator}</span>
|
24
|
-
{/if}
|
25
|
-
</li>
|
26
|
-
{/if}
|
27
|
-
{/each}
|
28
|
-
</ol>
|
29
|
-
</nav>
|
30
|
-
|
31
|
-
<style>
|
32
|
-
nav {
|
33
|
-
padding: 0;
|
34
|
-
block-size: auto;
|
35
|
-
display: flex;
|
36
|
-
justify-content: start;
|
37
|
-
align-items: center;
|
38
|
-
font-size: var(--font-size, 1em);
|
39
|
-
}
|
40
|
-
|
41
|
-
nav ol {
|
42
|
-
display: flex;
|
43
|
-
align-items: center;
|
44
|
-
list-style: none;
|
45
|
-
margin: 0;
|
46
|
-
padding: 0;
|
47
|
-
gap: 0.5rem;
|
48
|
-
border-radius: var(--border-radius);
|
49
|
-
}
|
50
|
-
|
51
|
-
nav ol li {
|
52
|
-
display: flex;
|
53
|
-
align-items: center;
|
54
|
-
justify-content: center;
|
55
|
-
margin: 0;
|
56
|
-
padding: 0;
|
57
|
-
}
|
58
|
-
|
59
|
-
.separator span {
|
60
|
-
font-size: 1rem;
|
61
|
-
line-height: 1rem;
|
62
|
-
color: var(--text-subtle);
|
63
|
-
}
|
64
|
-
|
65
|
-
nav.contained ol {
|
66
|
-
padding: 0 1rem;
|
67
|
-
border: var(--border);
|
68
|
-
}
|
69
|
-
|
70
|
-
nav.contained ol li a {
|
71
|
-
padding: var(--padding, 0.5rem 0);
|
72
|
-
}
|
73
|
-
|
74
|
-
nav.center {
|
75
|
-
justify-content: center;
|
76
|
-
}
|
77
|
-
|
78
|
-
nav.fullWidth ol {
|
79
|
-
block-size: 100%;
|
80
|
-
}
|
81
|
-
|
82
|
-
</style>
|
@@ -1,33 +0,0 @@
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
2
|
-
import type { ComponentType } from "svelte";
|
3
|
-
import type { BreadcrumbItem } from "./MenuTypes.js";
|
4
|
-
declare const __propDef: {
|
5
|
-
props: {
|
6
|
-
items: BreadcrumbItem[];
|
7
|
-
separator?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
8
|
-
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
9
|
-
}) | ComponentType | undefined;
|
10
|
-
contained?: boolean | undefined;
|
11
|
-
fullWidth?: boolean | undefined;
|
12
|
-
center?: boolean | undefined;
|
13
|
-
};
|
14
|
-
events: {
|
15
|
-
[evt: string]: CustomEvent<any>;
|
16
|
-
};
|
17
|
-
slots: {};
|
18
|
-
};
|
19
|
-
export type BreadcrumbProps = typeof __propDef.props;
|
20
|
-
export type BreadcrumbEvents = typeof __propDef.events;
|
21
|
-
export type BreadcrumbSlots = typeof __propDef.slots;
|
22
|
-
export default class Breadcrumb extends SvelteComponent<BreadcrumbProps, BreadcrumbEvents, BreadcrumbSlots> {
|
23
|
-
constructor(options?: import("svelte").ComponentConstructorOptions<{
|
24
|
-
items: BreadcrumbItem[];
|
25
|
-
separator?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
26
|
-
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
27
|
-
}) | ComponentType | undefined;
|
28
|
-
contained?: boolean | undefined;
|
29
|
-
fullWidth?: boolean | undefined;
|
30
|
-
center?: boolean | undefined;
|
31
|
-
}>);
|
32
|
-
}
|
33
|
-
export {};
|
package/dist/nav/Menu.svelte
DELETED
@@ -1,177 +0,0 @@
|
|
1
|
-
<script lang="ts">import { BROWSER } from "esm-env";
|
2
|
-
import MenuItem from "./MenuItem.svelte";
|
3
|
-
import { isComponent } from "../utils/isSnippet.js";
|
4
|
-
import { createId } from "../utils/id.js";
|
5
|
-
import { slidefade } from "../utils/transitions.js";
|
6
|
-
import UiContent from "../layout/UIContent.svelte";
|
7
|
-
import { arrowNavigation, getNextFocusableElement, matchOnType } from "../utils/keyboard.svelte.js";
|
8
|
-
import StringOrComponentOrSnippet from "../utils/StringOrComponentOrSnippet.svelte";
|
9
|
-
import { findContainingBlock, getPossiblyContainedPosition } from "../utils/dom.js";
|
10
|
-
import Overlay from "../layout/Overlay.svelte";
|
11
|
-
let {
|
12
|
-
open = $bindable(false),
|
13
|
-
items,
|
14
|
-
trigger
|
15
|
-
} = $props();
|
16
|
-
let _open = $state(open);
|
17
|
-
let triggerEl = $state(null);
|
18
|
-
let contentEl = $state(null);
|
19
|
-
let menuEl = $state(null);
|
20
|
-
let currentIndex = $state(-1);
|
21
|
-
let keyboardHasFocus = $state(false);
|
22
|
-
const id = createId();
|
23
|
-
$effect(() => {
|
24
|
-
if (_open) {
|
25
|
-
window.addEventListener("click", clickoutside);
|
26
|
-
window.addEventListener("keydown", onkeydown);
|
27
|
-
} else {
|
28
|
-
window.removeEventListener("click", clickoutside);
|
29
|
-
window.removeEventListener("keydown", onkeydown);
|
30
|
-
}
|
31
|
-
});
|
32
|
-
function toggle() {
|
33
|
-
_open = !_open;
|
34
|
-
}
|
35
|
-
let scrollable = $derived.by(() => {
|
36
|
-
if (!contentEl)
|
37
|
-
return false;
|
38
|
-
return contentEl.scrollHeight > contentEl.clientHeight;
|
39
|
-
});
|
40
|
-
function onclick(e) {
|
41
|
-
e.preventDefault();
|
42
|
-
_open = !_open;
|
43
|
-
}
|
44
|
-
function clickoutside(e) {
|
45
|
-
if (!_open)
|
46
|
-
return;
|
47
|
-
if (contentEl && !contentEl.contains(e.target) && !triggerEl?.contains(e.target)) {
|
48
|
-
_open = false;
|
49
|
-
}
|
50
|
-
}
|
51
|
-
function onkeydown(e) {
|
52
|
-
if (!_open)
|
53
|
-
return;
|
54
|
-
const active = document.activeElement;
|
55
|
-
switch (e.key) {
|
56
|
-
case "Escape":
|
57
|
-
e.preventDefault();
|
58
|
-
_open = false;
|
59
|
-
break;
|
60
|
-
case "Tab":
|
61
|
-
e.preventDefault();
|
62
|
-
e.stopPropagation();
|
63
|
-
_open = false;
|
64
|
-
setTimeout(() => {
|
65
|
-
const nextEl = getNextFocusableElement(menuEl, triggerEl, e.shiftKey ? "previous" : "next");
|
66
|
-
console.log("nextEl", nextEl);
|
67
|
-
if (nextEl) {
|
68
|
-
nextEl.focus();
|
69
|
-
if (nextEl.tagName === "BUTTON" || nextEl.tagName === "A" && nextEl.parentElement?.classList.contains("Trigger")) {
|
70
|
-
nextEl.click();
|
71
|
-
}
|
72
|
-
}
|
73
|
-
}, 0);
|
74
|
-
break;
|
75
|
-
case "ArrowDown":
|
76
|
-
e.preventDefault();
|
77
|
-
arrowNavigation(contentEl, "down");
|
78
|
-
matchOnType(contentEl, e);
|
79
|
-
keyboardHasFocus = true;
|
80
|
-
break;
|
81
|
-
case "ArrowUp":
|
82
|
-
e.preventDefault();
|
83
|
-
arrowNavigation(contentEl, "up");
|
84
|
-
matchOnType(contentEl, e);
|
85
|
-
keyboardHasFocus = true;
|
86
|
-
break;
|
87
|
-
case "Enter":
|
88
|
-
case "Space":
|
89
|
-
e.preventDefault();
|
90
|
-
active.click();
|
91
|
-
break;
|
92
|
-
default:
|
93
|
-
matchOnType(contentEl, e);
|
94
|
-
}
|
95
|
-
}
|
96
|
-
function mouseover(e, item, index) {
|
97
|
-
if (item.type === "item") {
|
98
|
-
currentIndex = index;
|
99
|
-
}
|
100
|
-
}
|
101
|
-
</script>
|
102
|
-
|
103
|
-
|
104
|
-
<UiContent>
|
105
|
-
<div class="Menu" bind:this={menuEl}>
|
106
|
-
<div
|
107
|
-
class="Trigger"
|
108
|
-
bind:this={triggerEl}
|
109
|
-
>
|
110
|
-
{#if typeof trigger === "string" || isComponent(trigger)}
|
111
|
-
<button type="button" class="button" {onclick} aria-haspopup="true" aria-controls={id} aria-expanded="{_open}">
|
112
|
-
<StringOrComponentOrSnippet content={trigger} />
|
113
|
-
</button>
|
114
|
-
{:else}
|
115
|
-
{@render trigger({ toggle: toggle, isOpen: _open })}
|
116
|
-
{/if}
|
117
|
-
</div>
|
118
|
-
{#if _open && triggerEl}
|
119
|
-
<Overlay position="anchor" id="o-{id}" anchor={triggerEl} layer="menu">
|
120
|
-
<div {id}
|
121
|
-
class="MenuContent"
|
122
|
-
class:scrollable={scrollable}
|
123
|
-
role="menu"
|
124
|
-
bind:this={contentEl}
|
125
|
-
>
|
126
|
-
<ul>
|
127
|
-
{#each items as item, index}
|
128
|
-
<MenuItem {keyboardHasFocus} onmouseover={mouseover} item={item} {index} />
|
129
|
-
{/each}
|
130
|
-
</ul>
|
131
|
-
</div>
|
132
|
-
</Overlay>
|
133
|
-
{/if}
|
134
|
-
</div>
|
135
|
-
</UiContent>
|
136
|
-
|
137
|
-
<style>
|
138
|
-
.Menu {
|
139
|
-
position: relative;
|
140
|
-
}
|
141
|
-
|
142
|
-
.Trigger {
|
143
|
-
position: relative;
|
144
|
-
display: inline-flex;
|
145
|
-
}
|
146
|
-
|
147
|
-
.MenuContent {
|
148
|
-
max-height: calc(50vh - 2rem);
|
149
|
-
margin: 0;
|
150
|
-
z-index: 1000;
|
151
|
-
margin: 0;
|
152
|
-
border: var(--menu-border);
|
153
|
-
border-radius: var(--border-radius);
|
154
|
-
box-shadow: 0 0.5rem 1rem var(--shadow);
|
155
|
-
background-color: var(--menu-bg);
|
156
|
-
width: var(--width, 25ch);
|
157
|
-
overflow-x: clip;
|
158
|
-
overflow-y: auto;
|
159
|
-
scrollbar-width: thin;
|
160
|
-
scrollbar-color: var(--scrollbar-color);
|
161
|
-
}
|
162
|
-
|
163
|
-
.MenuContent.scrollable {
|
164
|
-
border-top-right-radius: 0;
|
165
|
-
border-bottom-right-radius: 0;
|
166
|
-
}
|
167
|
-
|
168
|
-
.MenuContent:has(li:last-of-type[data-type="item"]) {
|
169
|
-
padding-block-end: 0.5rem;
|
170
|
-
}
|
171
|
-
|
172
|
-
ul {
|
173
|
-
margin: 0;
|
174
|
-
list-style: none;
|
175
|
-
padding: 0;
|
176
|
-
}
|
177
|
-
</style>
|
@@ -1,33 +0,0 @@
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
2
|
-
import type { ComponentType, Snippet } from "svelte";
|
3
|
-
import type { MenuItem as Item } from "./MenuTypes.js";
|
4
|
-
declare const __propDef: {
|
5
|
-
props: {
|
6
|
-
open?: import("svelte").Bindable<boolean | undefined>;
|
7
|
-
items: Item[];
|
8
|
-
trigger: string | ComponentType | Snippet<[{
|
9
|
-
toggle: () => void;
|
10
|
-
isOpen: boolean;
|
11
|
-
}]>;
|
12
|
-
};
|
13
|
-
events: {
|
14
|
-
[evt: string]: CustomEvent<any>;
|
15
|
-
};
|
16
|
-
slots: {};
|
17
|
-
};
|
18
|
-
export type MenuProps = typeof __propDef.props;
|
19
|
-
export type MenuEvents = typeof __propDef.events;
|
20
|
-
export type MenuSlots = typeof __propDef.slots;
|
21
|
-
export default class Menu extends SvelteComponent<MenuProps, MenuEvents, MenuSlots> {
|
22
|
-
constructor(options?: import("svelte").ComponentConstructorOptions<{
|
23
|
-
open?: import("svelte").Bindable<boolean | undefined>;
|
24
|
-
items: Item[];
|
25
|
-
trigger: string | ComponentType | ((this: void, args_0: {
|
26
|
-
toggle: () => void;
|
27
|
-
isOpen: boolean;
|
28
|
-
}) => typeof import("svelte").SnippetReturn & {
|
29
|
-
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
30
|
-
});
|
31
|
-
}>);
|
32
|
-
}
|
33
|
-
export {};
|
package/dist/nav/MenuItem.svelte
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
<script lang="ts">import StringOrComponentOrSnippet from "../utils/StringOrComponentOrSnippet.svelte";
|
2
|
-
import { isStatusColor } from "../utils/color.js";
|
3
|
-
import { isComponent, isSnippet } from "../utils/isSnippet.js";
|
4
|
-
let {
|
5
|
-
item,
|
6
|
-
index,
|
7
|
-
onmouseover,
|
8
|
-
keyboardHasFocus
|
9
|
-
} = $props();
|
10
|
-
let isSet = $derived(item.type !== "divider" ? isStatusColor(item.color) : false);
|
11
|
-
let el = $state(null);
|
12
|
-
function mouseover(e) {
|
13
|
-
if (onmouseover && item.type === "item") {
|
14
|
-
el?.focus();
|
15
|
-
}
|
16
|
-
}
|
17
|
-
</script>
|
18
|
-
|
19
|
-
<!-- svelte-ignore a11y_mouse_events_have_key_events -->
|
20
|
-
<li
|
21
|
-
onmouseover={mouseover}
|
22
|
-
data-index={index}
|
23
|
-
class:keyboardHasFocus
|
24
|
-
class:divider={item.type === 'divider'}
|
25
|
-
class:header={item.type === 'header'}
|
26
|
-
data-type="{item.type}"
|
27
|
-
style="--color: {isSet && item.type !== 'divider' ? 'var(--status-'+item.color+')' : (item.type !== 'divider' && item.color ? item.color : 'var(--menu-text)')}"
|
28
|
-
>
|
29
|
-
{#if item.type === 'divider'}
|
30
|
-
<hr />
|
31
|
-
{:else if item.type === 'header'}
|
32
|
-
<div class="Header">
|
33
|
-
<StringOrComponentOrSnippet content={item.content} />
|
34
|
-
</div>
|
35
|
-
{:else if item.type === 'item'}
|
36
|
-
{#if item.href}
|
37
|
-
<a href="{item.href}" class="Item" bind:this={el}>
|
38
|
-
<span class="Content">
|
39
|
-
<StringOrComponentOrSnippet content={item.content} />
|
40
|
-
</span>
|
41
|
-
{#if item.shortcut}
|
42
|
-
<span class="Shortcut">{item.shortcut}</span>
|
43
|
-
{/if}
|
44
|
-
</a>
|
45
|
-
{:else if item.onclick}
|
46
|
-
<button type="button" onclick={(e) => item.type === 'item' ? item.onclick!(e, item) : undefined} class="Item" bind:this={el}>
|
47
|
-
<span class="Content">
|
48
|
-
<StringOrComponentOrSnippet content={item.content} />
|
49
|
-
</span>
|
50
|
-
{#if item.shortcut}
|
51
|
-
<span class="Shortcut">{item.shortcut}</span>
|
52
|
-
{/if}
|
53
|
-
</button>
|
54
|
-
{:else if isSnippet(item.content)}
|
55
|
-
<div class="Item Custom">
|
56
|
-
{@render item.content()}
|
57
|
-
</div>
|
58
|
-
{:else if isComponent(item.content)}
|
59
|
-
<div class="Item Custom">
|
60
|
-
<svelte:component this={item.content} />
|
61
|
-
</div>
|
62
|
-
{/if}
|
63
|
-
{/if}
|
64
|
-
</li>
|
65
|
-
|
66
|
-
<style>
|
67
|
-
li {
|
68
|
-
margin: 0;
|
69
|
-
list-style: none;
|
70
|
-
padding: 0;
|
71
|
-
user-select: none;
|
72
|
-
}
|
73
|
-
|
74
|
-
li .Item,
|
75
|
-
li .Header {
|
76
|
-
font-size: 1em;
|
77
|
-
text-align: left;
|
78
|
-
padding-block: 0.5rem;
|
79
|
-
padding-inline: 1rem;
|
80
|
-
display: inline-flex;
|
81
|
-
align-items: center;
|
82
|
-
justify-content: space-between;
|
83
|
-
width: 100%;
|
84
|
-
color: inherit;
|
85
|
-
text-decoration: none;
|
86
|
-
color: var(--color);
|
87
|
-
--inset-block: 0.5rem;
|
88
|
-
--inset-inline: 1rem;
|
89
|
-
}
|
90
|
-
|
91
|
-
li .Header {
|
92
|
-
font-weight: 600;
|
93
|
-
}
|
94
|
-
|
95
|
-
li:not(.keyboardHasFocus) .Item:not(.Custom):hover,
|
96
|
-
li .Item:not(.Custom):focus-visible {
|
97
|
-
background-color: var(--menu-bg-hover);
|
98
|
-
cursor: pointer;
|
99
|
-
outline: none;
|
100
|
-
}
|
101
|
-
|
102
|
-
li .Item span.Shortcut {
|
103
|
-
font-size: max(0.75em, 9px);
|
104
|
-
text-align: right;
|
105
|
-
color: var(--text-subtle);
|
106
|
-
}
|
107
|
-
|
108
|
-
li .Item:not(.Custom):active {
|
109
|
-
scale: 1;
|
110
|
-
}
|
111
|
-
|
112
|
-
li.divider {
|
113
|
-
padding-block: 0.5rem;
|
114
|
-
}
|
115
|
-
|
116
|
-
hr {
|
117
|
-
display: block;
|
118
|
-
border: none;
|
119
|
-
margin: 0;
|
120
|
-
border-top: 1px solid var(--border-color);
|
121
|
-
}
|
122
|
-
|
123
|
-
li:first-child[data-type="item"] {
|
124
|
-
margin-block-start: var(--menu-item-margin, 0.5rem);
|
125
|
-
}
|
126
|
-
|
127
|
-
li:first-child[data-type="header"]:has(+ li[data-type="item"]) {
|
128
|
-
margin-block-end: 0.125rem;
|
129
|
-
}
|
130
|
-
|
131
|
-
li:nth-last-child(2)[data-type="item"]:has(+ li[data-type="header"]:last-child) {
|
132
|
-
margin-block-end: 0.5rem;
|
133
|
-
}
|
134
|
-
|
135
|
-
@media (pointer: none) {
|
136
|
-
li .Item span.Shortcut {
|
137
|
-
display: none;
|
138
|
-
}
|
139
|
-
}
|
140
|
-
</style>
|
@@ -1,26 +0,0 @@
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
2
|
-
import type { MenuItem as Item } from "./MenuTypes.js";
|
3
|
-
declare const __propDef: {
|
4
|
-
props: {
|
5
|
-
item: Item;
|
6
|
-
index: number;
|
7
|
-
onmouseover?: ((e: MouseEvent, item: Item, index: number) => void) | undefined;
|
8
|
-
keyboardHasFocus?: boolean | undefined;
|
9
|
-
};
|
10
|
-
events: {
|
11
|
-
[evt: string]: CustomEvent<any>;
|
12
|
-
};
|
13
|
-
slots: {};
|
14
|
-
};
|
15
|
-
export type MenuItemProps = typeof __propDef.props;
|
16
|
-
export type MenuItemEvents = typeof __propDef.events;
|
17
|
-
export type MenuItemSlots = typeof __propDef.slots;
|
18
|
-
export default class MenuItem extends SvelteComponent<MenuItemProps, MenuItemEvents, MenuItemSlots> {
|
19
|
-
constructor(options?: import("svelte").ComponentConstructorOptions<{
|
20
|
-
item: Item;
|
21
|
-
index: number;
|
22
|
-
onmouseover?: ((e: MouseEvent, item: Item, index: number) => void) | undefined;
|
23
|
-
keyboardHasFocus?: boolean | undefined;
|
24
|
-
}>);
|
25
|
-
}
|
26
|
-
export {};
|
package/dist/nav/MenuTypes.d.ts
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
import type { StatusColorOrString } from "../utils/color.js";
|
2
|
-
import type { ComponentType, Snippet } from "svelte";
|
3
|
-
export type MenuItem = {
|
4
|
-
/** Type of menu item to render. */
|
5
|
-
type: 'divider';
|
6
|
-
} | {
|
7
|
-
/** Type of menu item to render. */
|
8
|
-
type: 'header';
|
9
|
-
/** Text label of the item to display to the user. */
|
10
|
-
content: string | ComponentType | Snippet;
|
11
|
-
/** Color to use for the item. */
|
12
|
-
color?: StatusColorOrString;
|
13
|
-
} | {
|
14
|
-
/** Type of menu item to render. */
|
15
|
-
type: 'item';
|
16
|
-
/** Text label of the item to display to the user. */
|
17
|
-
content: string | ComponentType | Snippet;
|
18
|
-
/** Keyboard shortcut to display next to the item. */
|
19
|
-
shortcut?: string;
|
20
|
-
/** Icon to display. Pass either a Svelte Component or an URL. Use the Icon component to recolor your icons according to the user theme. */
|
21
|
-
icon?: string | ComponentType;
|
22
|
-
/** Path or URL to use for the menu item. */
|
23
|
-
href?: string;
|
24
|
-
/** Click event handler. */
|
25
|
-
onclick?: (event: MouseEvent, item: MenuItem) => void;
|
26
|
-
/** If true, disables the item. */
|
27
|
-
disabled?: boolean;
|
28
|
-
/** Color to use for the item. */
|
29
|
-
color?: StatusColorOrString;
|
30
|
-
/** Menu item children. Pass an array of menu items to create a nested menu. */
|
31
|
-
children?: MenuItem[];
|
32
|
-
};
|
33
|
-
export type TabItem = {
|
34
|
-
/** Text label of the item to display to the user. */
|
35
|
-
label: string;
|
36
|
-
/** Path or URL to use for the item. If the href ends with a star (*), it will match any path that starts with the given path. This allows for nested active items. */
|
37
|
-
href: string;
|
38
|
-
/** Click event handler. */
|
39
|
-
onclick?: (event: MouseEvent, item: TabItem, index: number) => void;
|
40
|
-
/** If true, overrides the currently selected item. */
|
41
|
-
active?: boolean;
|
42
|
-
};
|
43
|
-
export type TabbedContentItem = {
|
44
|
-
/** Text label of the item to display to the user. */
|
45
|
-
label: string;
|
46
|
-
/** URL hash to use for the item. */
|
47
|
-
hash?: string;
|
48
|
-
/** Content to display when the item is selected. */
|
49
|
-
content: Snippet;
|
50
|
-
};
|
51
|
-
export type BreadcrumbItem = {
|
52
|
-
/** Text label of the item to display to the user. */
|
53
|
-
label: string;
|
54
|
-
/** Icon to display. Pass either a Svelte Component or an URL. Use the Icon component to recolor your icons according to the user theme. */
|
55
|
-
icon?: string | ComponentType;
|
56
|
-
/** Path or URL to use for the breadcrumb item. */
|
57
|
-
href?: string;
|
58
|
-
};
|
package/dist/nav/MenuTypes.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|