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,61 +0,0 @@
|
|
1
|
-
<script lang="ts">import { hexRelativeLuminance, stringToColor } from "../utils/color.js";
|
2
|
-
const {
|
3
|
-
src,
|
4
|
-
name = "N/A",
|
5
|
-
shape = "circle"
|
6
|
-
} = $props();
|
7
|
-
const color = stringToColor(name);
|
8
|
-
const luminance = hexRelativeLuminance(color);
|
9
|
-
const textColor = luminance < 0.5 ? "rgba(255,255,255,0.85)" : "rgba(0,0,0,0.85)";
|
10
|
-
</script>
|
11
|
-
|
12
|
-
<figure class="Avatar {shape}" style="--user-color: {color}; --text-color: {textColor};">
|
13
|
-
{#if src}
|
14
|
-
<img src={src} alt={name} />
|
15
|
-
{:else}
|
16
|
-
<div class="Placeholder">
|
17
|
-
<span>{name[0]}</span>
|
18
|
-
</div>
|
19
|
-
{/if}
|
20
|
-
</figure>
|
21
|
-
|
22
|
-
<style>
|
23
|
-
.Avatar {
|
24
|
-
display: flex;
|
25
|
-
align-items: center;
|
26
|
-
justify-content: center;
|
27
|
-
margin: 0;
|
28
|
-
block-size: var(--size, 3rem);
|
29
|
-
inline-size: var(--size, 3rem);
|
30
|
-
overflow: hidden;
|
31
|
-
background-color: var(--user-color);
|
32
|
-
mask-image: var(--mask-image, none);
|
33
|
-
mask-size: 100% 100%;
|
34
|
-
mask-repeat: no-repeat;
|
35
|
-
-webkit-mask-image: var(--mask-image, none);
|
36
|
-
-webkit-mask-size: 100% 100%;
|
37
|
-
-webkit-mask-repeat: no-repeat;
|
38
|
-
}
|
39
|
-
.Avatar.circle { border-radius: 50%; }
|
40
|
-
.Avatar.square { border-radius: 0; }
|
41
|
-
.Avatar.rounded { border-radius: var(--border-radius); }
|
42
|
-
.Avatar img {
|
43
|
-
block-size: 100%;
|
44
|
-
inline-size: 100%;
|
45
|
-
object-fit: cover;
|
46
|
-
}
|
47
|
-
.Avatar .Placeholder {
|
48
|
-
display: flex;
|
49
|
-
align-items: center;
|
50
|
-
justify-content: center;
|
51
|
-
block-size: 100%;
|
52
|
-
inline-size: 100%;
|
53
|
-
background-color: var(--user-color);
|
54
|
-
}
|
55
|
-
.Avatar .Placeholder span {
|
56
|
-
font-size: 1rem;
|
57
|
-
font-weight: 600;
|
58
|
-
color: var(--text-color);
|
59
|
-
user-select: none;
|
60
|
-
}
|
61
|
-
</style>
|
@@ -1,23 +0,0 @@
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
2
|
-
declare const __propDef: {
|
3
|
-
props: {
|
4
|
-
src?: string | undefined;
|
5
|
-
name?: string | undefined;
|
6
|
-
shape?: "circle" | "square" | "rounded" | undefined;
|
7
|
-
};
|
8
|
-
events: {
|
9
|
-
[evt: string]: CustomEvent<any>;
|
10
|
-
};
|
11
|
-
slots: {};
|
12
|
-
};
|
13
|
-
export type AvatarProps = typeof __propDef.props;
|
14
|
-
export type AvatarEvents = typeof __propDef.events;
|
15
|
-
export type AvatarSlots = typeof __propDef.slots;
|
16
|
-
export default class Avatar extends SvelteComponent<AvatarProps, AvatarEvents, AvatarSlots> {
|
17
|
-
constructor(options?: import("svelte").ComponentConstructorOptions<{
|
18
|
-
src?: string | undefined;
|
19
|
-
name?: string | undefined;
|
20
|
-
shape?: "circle" | "square" | "rounded" | undefined;
|
21
|
-
}>);
|
22
|
-
}
|
23
|
-
export {};
|
@@ -1,93 +0,0 @@
|
|
1
|
-
<script lang="ts">import { isStatusColor } from "../utils/color.js";
|
2
|
-
let {
|
3
|
-
count,
|
4
|
-
max = 99,
|
5
|
-
color = "alert",
|
6
|
-
glow = true,
|
7
|
-
outline = true,
|
8
|
-
children
|
9
|
-
} = $props();
|
10
|
-
let el = $state(null);
|
11
|
-
let isSet = $derived(isStatusColor(color));
|
12
|
-
let charCount = $derived.by(() => {
|
13
|
-
if (count === void 0)
|
14
|
-
return 0;
|
15
|
-
if (max && count > max)
|
16
|
-
return max.toString().length + 1;
|
17
|
-
return count.toString().length;
|
18
|
-
});
|
19
|
-
</script>
|
20
|
-
|
21
|
-
<div class="BadgeContainer">
|
22
|
-
<div class="BadgeContent">
|
23
|
-
{#if children}
|
24
|
-
{@render children()}
|
25
|
-
{/if}
|
26
|
-
</div>
|
27
|
-
<span class="Badge" class:outline class:glow class:empty={count === undefined} bind:this={el} style="--charCount: {charCount}ch; --bgColor: {!isSet ? color : 'var(--status-'+color+')'};">
|
28
|
-
{#if count && max}
|
29
|
-
<em>
|
30
|
-
{count > max ? `${max}+` : count}
|
31
|
-
</em>
|
32
|
-
{/if}
|
33
|
-
</span>
|
34
|
-
</div>
|
35
|
-
|
36
|
-
|
37
|
-
<style>
|
38
|
-
.BadgeContainer {
|
39
|
-
position: relative;
|
40
|
-
display: inline-grid;
|
41
|
-
grid-template-columns: fit-content;
|
42
|
-
grid-template-areas: "content";
|
43
|
-
text-rendering: geometricPrecision;
|
44
|
-
}
|
45
|
-
.BadgeContent {
|
46
|
-
grid-area: content;
|
47
|
-
}
|
48
|
-
.Badge {
|
49
|
-
--internalSize: max(calc(var(--size, 0.75rem)), 14px);
|
50
|
-
display: grid;
|
51
|
-
place-items: center;
|
52
|
-
align-items: center;
|
53
|
-
justify-content: center;
|
54
|
-
position: absolute;
|
55
|
-
top: calc(1px + var(--top, 0%));
|
56
|
-
right: var(--right, 0%);
|
57
|
-
transform: translate(0.55rem, -50%);
|
58
|
-
background-color: var(--bgColor);
|
59
|
-
padding: 3px 5px 2px 5px;
|
60
|
-
border-radius: 9999px;
|
61
|
-
--h: max(calc(var(--internalSize) * 0.9), 9px);
|
62
|
-
font-size: var(--h);
|
63
|
-
line-height: var(--h);
|
64
|
-
z-index: 100;
|
65
|
-
font-weight: 600;
|
66
|
-
grid-area: content;
|
67
|
-
}
|
68
|
-
.Badge.outline {
|
69
|
-
outline: min(calc(var(--size, 0.75rem) * 0.25), 2px) solid var(--outline-color, var(--bg-app));
|
70
|
-
}
|
71
|
-
.Badge.empty {
|
72
|
-
width: max(0.5rem, 8px);
|
73
|
-
height: max(0.5rem, 8px);
|
74
|
-
min-width: auto;
|
75
|
-
aspect-ratio: 1/1;
|
76
|
-
transform: translate(50%, -50%);
|
77
|
-
padding: 0;
|
78
|
-
}
|
79
|
-
.Badge.glow {
|
80
|
-
filter: drop-shadow(0 0 0.25rem color-mix(in srgb, var(--bgColor) 30%, transparent 70%));
|
81
|
-
}
|
82
|
-
em {
|
83
|
-
opacity: 0.99;
|
84
|
-
font-style: normal;
|
85
|
-
color: var(--bgColor);
|
86
|
-
filter: invert(1) grayscale(1) brightness(1.3) contrast(9000%);
|
87
|
-
mix-blend-mode: luminosity;
|
88
|
-
left: 50%;
|
89
|
-
position: relative;
|
90
|
-
display: block;
|
91
|
-
transform: translateX(-50%);
|
92
|
-
}
|
93
|
-
</style>
|
@@ -1,34 +0,0 @@
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
2
|
-
import type { StatusColorOrString } from "../utils/color.js";
|
3
|
-
declare const __propDef: {
|
4
|
-
props: {
|
5
|
-
count?: number | undefined;
|
6
|
-
max?: number | undefined;
|
7
|
-
color?: StatusColorOrString | undefined;
|
8
|
-
glow?: boolean | undefined;
|
9
|
-
outline?: boolean | undefined;
|
10
|
-
children?: ((this: void) => typeof import("svelte").SnippetReturn & {
|
11
|
-
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
12
|
-
}) | undefined;
|
13
|
-
};
|
14
|
-
events: {
|
15
|
-
[evt: string]: CustomEvent<any>;
|
16
|
-
};
|
17
|
-
slots: {};
|
18
|
-
};
|
19
|
-
export type BadgeProps = typeof __propDef.props;
|
20
|
-
export type BadgeEvents = typeof __propDef.events;
|
21
|
-
export type BadgeSlots = typeof __propDef.slots;
|
22
|
-
export default class Badge extends SvelteComponent<BadgeProps, BadgeEvents, BadgeSlots> {
|
23
|
-
constructor(options?: import("svelte").ComponentConstructorOptions<{
|
24
|
-
count?: number | undefined;
|
25
|
-
max?: number | undefined;
|
26
|
-
color?: StatusColorOrString | undefined;
|
27
|
-
glow?: boolean | undefined;
|
28
|
-
outline?: boolean | undefined;
|
29
|
-
children?: ((this: void) => typeof import("svelte").SnippetReturn & {
|
30
|
-
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
31
|
-
}) | undefined;
|
32
|
-
}>);
|
33
|
-
}
|
34
|
-
export {};
|
@@ -1,109 +0,0 @@
|
|
1
|
-
<script lang="ts">import Icon from "./Icon.svelte";
|
2
|
-
import Alert from "../icons/Alert.svelte";
|
3
|
-
import Info from "../icons/Info.svelte";
|
4
|
-
import Success from "../icons/Success.svelte";
|
5
|
-
import Warning from "../icons/Warning.svelte";
|
6
|
-
import Error from "../icons/Error.svelte";
|
7
|
-
import PageContent from "../layout/PageContent.svelte";
|
8
|
-
import Tooltip from "./Tooltip.svelte";
|
9
|
-
let {
|
10
|
-
icon,
|
11
|
-
type,
|
12
|
-
contained,
|
13
|
-
rounded,
|
14
|
-
dismissable
|
15
|
-
} = $props();
|
16
|
-
if (!icon) {
|
17
|
-
switch (type) {
|
18
|
-
case "alert":
|
19
|
-
icon = Alert;
|
20
|
-
break;
|
21
|
-
case "info":
|
22
|
-
icon = Info;
|
23
|
-
break;
|
24
|
-
case "ok":
|
25
|
-
icon = Success;
|
26
|
-
break;
|
27
|
-
case "warn":
|
28
|
-
icon = Warning;
|
29
|
-
break;
|
30
|
-
case "task":
|
31
|
-
icon = Error;
|
32
|
-
break;
|
33
|
-
default:
|
34
|
-
icon = void 0;
|
35
|
-
break;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
</script>
|
39
|
-
|
40
|
-
<div class="Callout {type}" class:hasIcon={!!icon} class:contained class:rounded class:dismissable style="--margin-scale: 0.5;">
|
41
|
-
{#if icon}
|
42
|
-
<Icon {icon} --icon-width="1.5rem" --icon-height="1.5rem" />
|
43
|
-
{/if}
|
44
|
-
<div class="CalloutText">
|
45
|
-
<slot />
|
46
|
-
</div>
|
47
|
-
{#if dismissable}
|
48
|
-
<div class="Dismiss">
|
49
|
-
<Tooltip tip="Dismiss">
|
50
|
-
<button type="button" class="CalloutDismiss" aria-label="Dismiss callout">
|
51
|
-
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
52
|
-
<path d="M1 1L15 15" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
53
|
-
<path d="M1 15L15 1" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
54
|
-
</svg>
|
55
|
-
</button>
|
56
|
-
</Tooltip>
|
57
|
-
</div>
|
58
|
-
{/if}
|
59
|
-
</div>
|
60
|
-
|
61
|
-
<style>
|
62
|
-
.Callout {
|
63
|
-
background: var(--bg, var(--bg-subtle));
|
64
|
-
padding: var(--padding, 1rem);
|
65
|
-
display: grid;
|
66
|
-
gap: var(--gap, 1rem);
|
67
|
-
align-items: var(--align-items, start);
|
68
|
-
--text-heading: hsla(240, 10%, 98%);
|
69
|
-
--text: hsla(240, 10%, 95%);
|
70
|
-
--text-subtle: hsla(240, 10%, 90%);
|
71
|
-
color: var(--text-heading);
|
72
|
-
}
|
73
|
-
.Callout.contained {
|
74
|
-
border: var(--border);
|
75
|
-
}
|
76
|
-
.Callout.rounded {
|
77
|
-
border-radius: var(--border-radius);
|
78
|
-
}
|
79
|
-
.Callout.hasIcon {
|
80
|
-
grid-template-columns: auto 1fr;
|
81
|
-
}
|
82
|
-
.Callout.dismissable {
|
83
|
-
grid-template-columns: 1fr auto;
|
84
|
-
}
|
85
|
-
.Callout.dismissable.hasIcon {
|
86
|
-
grid-template-columns: auto 1fr auto;
|
87
|
-
}
|
88
|
-
.CalloutText {
|
89
|
-
font-size: var(--font-size, 1em);
|
90
|
-
line-height: 1.5;
|
91
|
-
}
|
92
|
-
.Callout.info {
|
93
|
-
--bg: var(--status-info);
|
94
|
-
}
|
95
|
-
.Callout.ok {
|
96
|
-
--bg: var(--status-ok);
|
97
|
-
}
|
98
|
-
.Dismiss {
|
99
|
-
margin: -0.75rem;
|
100
|
-
}
|
101
|
-
.CalloutDismiss {
|
102
|
-
background: transparent;
|
103
|
-
border: none;
|
104
|
-
padding: 0.75rem;
|
105
|
-
cursor: pointer;
|
106
|
-
}
|
107
|
-
.CalloutText {
|
108
|
-
}
|
109
|
-
</style>
|
@@ -1,36 +0,0 @@
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
2
|
-
import type { ComponentType } from "svelte";
|
3
|
-
declare const __propDef: {
|
4
|
-
props: {
|
5
|
-
icon?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
6
|
-
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
7
|
-
}) | ComponentType | undefined;
|
8
|
-
type?: "ok" | "alert" | "warn" | "info" | "task" | undefined;
|
9
|
-
contained?: boolean | undefined;
|
10
|
-
rounded?: boolean | undefined;
|
11
|
-
dismissable?: boolean | undefined;
|
12
|
-
};
|
13
|
-
events: {
|
14
|
-
[evt: string]: CustomEvent<any>;
|
15
|
-
};
|
16
|
-
slots: {
|
17
|
-
default: {};
|
18
|
-
};
|
19
|
-
};
|
20
|
-
export type CalloutProps = typeof __propDef.props;
|
21
|
-
export type CalloutEvents = typeof __propDef.events;
|
22
|
-
export type CalloutSlots = typeof __propDef.slots;
|
23
|
-
export default class Callout extends SvelteComponent<CalloutProps, CalloutEvents, CalloutSlots> {
|
24
|
-
constructor(options?: import("svelte").ComponentConstructorOptions<__sveltets_2_PropsWithChildren<{
|
25
|
-
icon?: 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
|
-
type?: "ok" | "alert" | "warn" | "info" | "task" | undefined;
|
29
|
-
contained?: boolean | undefined;
|
30
|
-
rounded?: boolean | undefined;
|
31
|
-
dismissable?: boolean | undefined;
|
32
|
-
}, {
|
33
|
-
default: {};
|
34
|
-
}>>);
|
35
|
-
}
|
36
|
-
export {};
|
@@ -1,58 +0,0 @@
|
|
1
|
-
<script lang="ts">let {
|
2
|
-
onclick,
|
3
|
-
position
|
4
|
-
} = $props();
|
5
|
-
</script>
|
6
|
-
|
7
|
-
<button class="Close {position}" {onclick}>
|
8
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
9
|
-
<line x1="18" y1="6" x2="6" y2="18"></line>
|
10
|
-
<line x1="6" y1="6" x2="18" y2="18"></line>
|
11
|
-
</svg>
|
12
|
-
</button>
|
13
|
-
|
14
|
-
<style>
|
15
|
-
.Close {
|
16
|
-
cursor: pointer;
|
17
|
-
padding: var(--close-padding, 0.5rem);
|
18
|
-
border-radius: 50%;
|
19
|
-
color: var(--text);
|
20
|
-
cursor: pointer;
|
21
|
-
pointer-events: auto;
|
22
|
-
}
|
23
|
-
|
24
|
-
svg {
|
25
|
-
width: max(1.5rem, 16px);
|
26
|
-
height: max(1.5rem, 16px);
|
27
|
-
}
|
28
|
-
|
29
|
-
.Close:hover {
|
30
|
-
color: var(--text-subtle);
|
31
|
-
}
|
32
|
-
|
33
|
-
.Close.top {
|
34
|
-
position: absolute;
|
35
|
-
top: 0;
|
36
|
-
right: 0;
|
37
|
-
z-index: 100;
|
38
|
-
}
|
39
|
-
|
40
|
-
.Close.bottom {
|
41
|
-
position: absolute;
|
42
|
-
bottom: 0;
|
43
|
-
right: 0;
|
44
|
-
}
|
45
|
-
|
46
|
-
.Close.left {
|
47
|
-
position: absolute;
|
48
|
-
top: 0;
|
49
|
-
left: 0;
|
50
|
-
right: auto;
|
51
|
-
}
|
52
|
-
|
53
|
-
.Close.right {
|
54
|
-
position: absolute;
|
55
|
-
top: 0;
|
56
|
-
right: 0;
|
57
|
-
}
|
58
|
-
</style>
|
@@ -1,21 +0,0 @@
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
2
|
-
declare const __propDef: {
|
3
|
-
props: {
|
4
|
-
onclick?: ((e: MouseEvent) => void) | undefined;
|
5
|
-
position?: "top left" | "top right" | "bottom left" | "bottom right" | undefined;
|
6
|
-
};
|
7
|
-
events: {
|
8
|
-
[evt: string]: CustomEvent<any>;
|
9
|
-
};
|
10
|
-
slots: {};
|
11
|
-
};
|
12
|
-
export type CloseProps = typeof __propDef.props;
|
13
|
-
export type CloseEvents = typeof __propDef.events;
|
14
|
-
export type CloseSlots = typeof __propDef.slots;
|
15
|
-
export default class Close extends SvelteComponent<CloseProps, CloseEvents, CloseSlots> {
|
16
|
-
constructor(options?: import("svelte").ComponentConstructorOptions<{
|
17
|
-
onclick?: ((e: MouseEvent) => void) | undefined;
|
18
|
-
position?: "top left" | "top right" | "bottom left" | "bottom right" | undefined;
|
19
|
-
}>);
|
20
|
-
}
|
21
|
-
export {};
|
package/dist/display/Code.svelte
DELETED
@@ -1,195 +0,0 @@
|
|
1
|
-
<script lang="ts">import Copy from "../icons/Copy.svelte";
|
2
|
-
import Done from "../icons/Done.svelte";
|
3
|
-
import IconButton from "./IconButton.svelte";
|
4
|
-
import Tooltip from "./Tooltip.svelte";
|
5
|
-
let {
|
6
|
-
code = $bindable(""),
|
7
|
-
highlight,
|
8
|
-
copyable,
|
9
|
-
contained,
|
10
|
-
rounded,
|
11
|
-
lineNumbers,
|
12
|
-
readonly
|
13
|
-
} = $props();
|
14
|
-
const numberOfLines = $derived(code.split("\n").length);
|
15
|
-
let title = $state("Copy");
|
16
|
-
let open = $state(false);
|
17
|
-
let btnIcon = $state(Copy);
|
18
|
-
let el = $state(null);
|
19
|
-
let scrollTop = $state(0);
|
20
|
-
let scrollLeft = $state(0);
|
21
|
-
function copy() {
|
22
|
-
if (!el)
|
23
|
-
return;
|
24
|
-
if (navigator.clipboard) {
|
25
|
-
navigator.clipboard.writeText(code);
|
26
|
-
} else {
|
27
|
-
el.focus();
|
28
|
-
el.select();
|
29
|
-
document.execCommand("copy");
|
30
|
-
}
|
31
|
-
btnIcon = Done;
|
32
|
-
title = "Copied!";
|
33
|
-
open = true;
|
34
|
-
setTimeout(() => {
|
35
|
-
btnIcon = Copy;
|
36
|
-
title = "Copy";
|
37
|
-
open = false;
|
38
|
-
}, 1500);
|
39
|
-
}
|
40
|
-
function onscroll(e) {
|
41
|
-
scrollTop = e.target.scrollTop;
|
42
|
-
scrollLeft = e.target.scrollLeft;
|
43
|
-
}
|
44
|
-
let codeLines = $derived.by(() => {
|
45
|
-
return (highlight ? highlight(code) : code).split("\n") || [];
|
46
|
-
});
|
47
|
-
</script>
|
48
|
-
|
49
|
-
<div class="Code" class:lineNumbers class:singleLine={numberOfLines === 1} class:rounded class:copyable class:contained class:hasOverlay={highlight}>
|
50
|
-
{#if numberOfLines === 1}
|
51
|
-
<input class="CodeInput" spellcheck="false" autocorrect="off" autocapitalize="off" autocomplete="off" {readonly} bind:this={el} bind:value={code} title={copyable ? code : undefined} {onscroll} />
|
52
|
-
{:else}
|
53
|
-
<textarea class="CodeInput" spellcheck="false" autocorrect="off" autocapitalize="off" autocomplete="off" {readonly} bind:this={el} bind:value={code} {onscroll}></textarea>
|
54
|
-
{/if}
|
55
|
-
<div class="Overlay" tabindex="-1" aria-hidden="true" style="top: {-scrollTop}px; left: {-scrollLeft}px;">
|
56
|
-
{#each codeLines as line, index}
|
57
|
-
<div class="Line">
|
58
|
-
{#if lineNumbers}
|
59
|
-
<div class="Number">
|
60
|
-
<span>{index + 1}</span>
|
61
|
-
</div>
|
62
|
-
{/if}
|
63
|
-
<div class="Content">
|
64
|
-
{@html line}
|
65
|
-
</div>
|
66
|
-
</div>
|
67
|
-
{/each}
|
68
|
-
</div>
|
69
|
-
{#if copyable}
|
70
|
-
<Tooltip tip={title} {open}>
|
71
|
-
<IconButton icon={btnIcon} onclick={copy} disabled={open} />
|
72
|
-
</Tooltip>
|
73
|
-
{/if}
|
74
|
-
</div>
|
75
|
-
|
76
|
-
<style>
|
77
|
-
.Code {
|
78
|
-
display: grid;
|
79
|
-
align-items: start;
|
80
|
-
grid-template-areas: "content";
|
81
|
-
}
|
82
|
-
.Code.lineNumbers {
|
83
|
-
grid-template-columns: auto 1fr;
|
84
|
-
grid-template-areas: "lines content";
|
85
|
-
margin-inline-start: -2rem;
|
86
|
-
width: calc(100% + 2rem);
|
87
|
-
}
|
88
|
-
.CodeInput,
|
89
|
-
.Overlay {
|
90
|
-
font-family: var(--font-family-mono);
|
91
|
-
font-size: var(--font-size, 1em);
|
92
|
-
line-height: 1.5;
|
93
|
-
margin: 0;
|
94
|
-
border: 0;
|
95
|
-
grid-area: content;
|
96
|
-
background: var(--field-bg);
|
97
|
-
}
|
98
|
-
textarea {
|
99
|
-
width: 100%;
|
100
|
-
height: 100%;
|
101
|
-
white-space: pre-wrap;
|
102
|
-
word-break: normal;
|
103
|
-
overflow-wrap: anywhere;
|
104
|
-
direction: ltr;
|
105
|
-
writing-mode: lr;
|
106
|
-
resize: none;
|
107
|
-
z-index: -1;
|
108
|
-
}
|
109
|
-
.Code.lineNumbers textarea {
|
110
|
-
padding-inline-start: 2rem;
|
111
|
-
width: calc(100% - 2rem);
|
112
|
-
}
|
113
|
-
.Code.hasOverlay .CodeInput {
|
114
|
-
color: transparent;
|
115
|
-
caret-color: var(--text);
|
116
|
-
}
|
117
|
-
.Code.rounded,
|
118
|
-
.Code.rounded .CodeInput {
|
119
|
-
border-radius: var(--border-radius);
|
120
|
-
}
|
121
|
-
.Code.singleLine.copyable .CodeInput {
|
122
|
-
border-top-right-radius: 0;
|
123
|
-
border-bottom-right-radius: 0;
|
124
|
-
}
|
125
|
-
|
126
|
-
/**
|
127
|
-
* Contained
|
128
|
-
*/
|
129
|
-
|
130
|
-
.Code.contained {
|
131
|
-
border: var(--border);
|
132
|
-
}
|
133
|
-
.Code.contained .CodeInput,
|
134
|
-
.Code.contained .Overlay {
|
135
|
-
height: auto;
|
136
|
-
min-height: auto;
|
137
|
-
padding: var(--padding, 0.5rem 1rem);
|
138
|
-
}
|
139
|
-
.Code.contained:focus-within {
|
140
|
-
outline: var(--focus-outline);
|
141
|
-
}
|
142
|
-
.Code.contained:focus-within .CodeInput {
|
143
|
-
outline: none;
|
144
|
-
}
|
145
|
-
.Code.contained:focus-within:has(:focus:not(.CodeInput)) {
|
146
|
-
outline: none;
|
147
|
-
}
|
148
|
-
|
149
|
-
/**
|
150
|
-
* Single line
|
151
|
-
*/
|
152
|
-
|
153
|
-
.Code.singleLine {
|
154
|
-
align-items: center;
|
155
|
-
overflow-inline: clip;
|
156
|
-
}
|
157
|
-
.Code.singleLine.copyable {
|
158
|
-
grid-template-columns: 1fr auto;
|
159
|
-
grid-template-areas: "content button";
|
160
|
-
}
|
161
|
-
.Code.singleLine.copyable .CodeInput,
|
162
|
-
.Code.singleLine.copyable .Overlay {
|
163
|
-
text-overflow: ellipsis;
|
164
|
-
white-space: nowrap;
|
165
|
-
padding: var(--padding, 0.35rem 0.75rem);
|
166
|
-
}
|
167
|
-
.Code.singleLine .CodeInput,
|
168
|
-
.Code.singleLine .Overlay {
|
169
|
-
resize: none;
|
170
|
-
line-height: 1;
|
171
|
-
}
|
172
|
-
|
173
|
-
.LineNumbers {
|
174
|
-
grid-area: lines;
|
175
|
-
display: grid;
|
176
|
-
padding-right: 0.5rem;
|
177
|
-
width: 2rem;
|
178
|
-
font-size: var(--font-size, 1em);
|
179
|
-
line-height: 1.5;
|
180
|
-
text-align: end;
|
181
|
-
justify-content: end;
|
182
|
-
font-family: var(--font-family-mono);
|
183
|
-
font-size: var(--font-size, 1em);
|
184
|
-
color: var(--text-subtle);
|
185
|
-
opacity: 0.75;
|
186
|
-
}
|
187
|
-
.Line {
|
188
|
-
display: grid;
|
189
|
-
grid-template-columns: 2rem 1fr;
|
190
|
-
}
|
191
|
-
.Line .Number {
|
192
|
-
text-align: end;
|
193
|
-
padding-inline-end: 0.5rem;
|
194
|
-
}
|
195
|
-
</style>
|
@@ -1,31 +0,0 @@
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
2
|
-
declare const __propDef: {
|
3
|
-
props: {
|
4
|
-
code: import("svelte").Bindable<string>;
|
5
|
-
highlight?: ((code: string) => string) | undefined;
|
6
|
-
copyable?: boolean | undefined;
|
7
|
-
contained?: boolean | undefined;
|
8
|
-
rounded?: boolean | undefined;
|
9
|
-
lineNumbers?: boolean | undefined;
|
10
|
-
readonly?: boolean | undefined;
|
11
|
-
};
|
12
|
-
events: {
|
13
|
-
[evt: string]: CustomEvent<any>;
|
14
|
-
};
|
15
|
-
slots: {};
|
16
|
-
};
|
17
|
-
export type CodeProps = typeof __propDef.props;
|
18
|
-
export type CodeEvents = typeof __propDef.events;
|
19
|
-
export type CodeSlots = typeof __propDef.slots;
|
20
|
-
export default class Code extends SvelteComponent<CodeProps, CodeEvents, CodeSlots> {
|
21
|
-
constructor(options?: import("svelte").ComponentConstructorOptions<{
|
22
|
-
code: import("svelte").Bindable<string>;
|
23
|
-
highlight?: ((code: string) => string) | undefined;
|
24
|
-
copyable?: boolean | undefined;
|
25
|
-
contained?: boolean | undefined;
|
26
|
-
rounded?: boolean | undefined;
|
27
|
-
lineNumbers?: boolean | undefined;
|
28
|
-
readonly?: boolean | undefined;
|
29
|
-
}>);
|
30
|
-
}
|
31
|
-
export {};
|
@@ -1,26 +0,0 @@
|
|
1
|
-
<script lang="ts">import Tooltip from "./Tooltip.svelte";
|
2
|
-
import Help from "../icons/Help.svelte";
|
3
|
-
import Icon from "./Icon.svelte";
|
4
|
-
let {
|
5
|
-
tip
|
6
|
-
} = $props();
|
7
|
-
</script>
|
8
|
-
|
9
|
-
<Tooltip {tip}>
|
10
|
-
<a href="#foo" onclick={(e) => { e.preventDefault(); e.stopPropagation(); }}>
|
11
|
-
<Icon icon={Help} --icon-width="16px" --icon-height="16px" --cursor="help" --vertical-align="baseline" />
|
12
|
-
</a>
|
13
|
-
</Tooltip>
|
14
|
-
|
15
|
-
<style>
|
16
|
-
a {
|
17
|
-
border-radius: 50%;
|
18
|
-
color: var(--text);
|
19
|
-
height: 16px;
|
20
|
-
width: 16px;
|
21
|
-
display: inline-block;
|
22
|
-
}
|
23
|
-
a:focus,
|
24
|
-
a:active {
|
25
|
-
}
|
26
|
-
</style>
|