lutra 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 +29 -0
- package/dist/Data/Stat.svelte +89 -0
- package/dist/Data/Stat.svelte.d.ts +33 -0
- package/dist/DataTable/DataTable.svelte +36 -0
- package/dist/DataTable/DataTable.svelte.d.ts +19 -0
- package/dist/DataTable/DataTableColumn.svelte +20 -0
- package/dist/DataTable/DataTableColumn.svelte.d.ts +18 -0
- package/dist/DataTable/DataTableRow.svelte +28 -0
- package/dist/DataTable/DataTableRow.svelte.d.ts +18 -0
- package/dist/Display/Avatar.svelte +61 -0
- package/dist/Display/Avatar.svelte.d.ts +18 -0
- package/dist/Display/Badge.svelte +93 -0
- package/dist/Display/Badge.svelte.d.ts +30 -0
- package/dist/Display/Callout.svelte +105 -0
- package/dist/Display/Callout.svelte.d.ts +34 -0
- package/dist/Display/Code.svelte +195 -0
- package/dist/Display/Code.svelte.d.ts +29 -0
- package/dist/Display/ContextTip.svelte +23 -0
- package/dist/Display/ContextTip.svelte.d.ts +17 -0
- package/dist/Display/Details.svelte +49 -0
- package/dist/Display/Details.svelte.d.ts +26 -0
- package/dist/Display/Hero.svelte +50 -0
- package/dist/Display/Hero.svelte.d.ts +25 -0
- package/dist/Display/Icon.svelte +35 -0
- package/dist/Display/Icon.svelte.d.ts +18 -0
- package/dist/Display/IconButton.svelte +85 -0
- package/dist/Display/IconButton.svelte.d.ts +28 -0
- package/dist/Display/Indicator.svelte +352 -0
- package/dist/Display/Indicator.svelte.d.ts +22 -0
- package/dist/Display/Popup.svelte +111 -0
- package/dist/Display/Popup.svelte.d.ts +26 -0
- package/dist/Display/Tag.svelte +90 -0
- package/dist/Display/Tag.svelte.d.ts +31 -0
- package/dist/Display/Tooltip.svelte +96 -0
- package/dist/Display/Tooltip.svelte.d.ts +22 -0
- package/dist/Form/Button.svelte +34 -0
- package/dist/Form/Button.svelte.d.ts +24 -0
- package/dist/Form/FieldActions.svelte +25 -0
- package/dist/Form/FieldActions.svelte.d.ts +17 -0
- package/dist/Form/FieldContainer.svelte +31 -0
- package/dist/Form/FieldContainer.svelte.d.ts +18 -0
- package/dist/Form/FieldContent.svelte +78 -0
- package/dist/Form/FieldContent.svelte.d.ts +32 -0
- package/dist/Form/FieldSection.svelte +97 -0
- package/dist/Form/FieldSection.svelte.d.ts +23 -0
- package/dist/Form/Fieldset.svelte +63 -0
- package/dist/Form/Fieldset.svelte.d.ts +32 -0
- package/dist/Form/Form.svelte +19 -0
- package/dist/Form/Form.svelte.d.ts +18 -0
- package/dist/Form/Input.svelte +266 -0
- package/dist/Form/Input.svelte.d.ts +113 -0
- package/dist/Form/InputLength.svelte +32 -0
- package/dist/Form/InputLength.svelte.d.ts +19 -0
- package/dist/Form/Label.svelte +26 -0
- package/dist/Form/Label.svelte.d.ts +25 -0
- package/dist/Form/Select.svelte +24 -0
- package/dist/Form/Select.svelte.d.ts +28 -0
- package/dist/Form/form.d.ts +34 -0
- package/dist/Form/form.js +31 -0
- package/dist/Form/types.d.ts +4 -0
- package/dist/Form/types.js +1 -0
- package/dist/Grid/Column.svelte +11 -0
- package/dist/Grid/Column.svelte.d.ts +17 -0
- package/dist/Grid/Grid.svelte +19 -0
- package/dist/Grid/Grid.svelte.d.ts +18 -0
- package/dist/Grid/Row.svelte +44 -0
- package/dist/Grid/Row.svelte.d.ts +19 -0
- package/dist/Icons/Alert.svelte +3 -0
- package/dist/Icons/Alert.svelte.d.ts +23 -0
- package/dist/Icons/Copy.svelte +3 -0
- package/dist/Icons/Copy.svelte.d.ts +23 -0
- package/dist/Icons/Done.svelte +3 -0
- package/dist/Icons/Done.svelte.d.ts +23 -0
- package/dist/Icons/Error.svelte +3 -0
- package/dist/Icons/Error.svelte.d.ts +23 -0
- package/dist/Icons/Help.svelte +3 -0
- package/dist/Icons/Help.svelte.d.ts +23 -0
- package/dist/Icons/Hide.svelte +3 -0
- package/dist/Icons/Hide.svelte.d.ts +23 -0
- package/dist/Icons/Info.svelte +3 -0
- package/dist/Icons/Info.svelte.d.ts +23 -0
- package/dist/Icons/Link.svelte +3 -0
- package/dist/Icons/Link.svelte.d.ts +23 -0
- package/dist/Icons/Show.svelte +3 -0
- package/dist/Icons/Show.svelte.d.ts +23 -0
- package/dist/Icons/Success.svelte +3 -0
- package/dist/Icons/Success.svelte.d.ts +23 -0
- package/dist/Icons/Warning.svelte +3 -0
- package/dist/Icons/Warning.svelte.d.ts +23 -0
- package/dist/Layout/Layout.svelte +43 -0
- package/dist/Layout/Layout.svelte.d.ts +21 -0
- package/dist/Layout/LayoutFooter.svelte +21 -0
- package/dist/Layout/LayoutFooter.svelte.d.ts +17 -0
- package/dist/Layout/LayoutGrid.svelte +51 -0
- package/dist/Layout/LayoutGrid.svelte.d.ts +30 -0
- package/dist/Layout/LayoutHeader.svelte +94 -0
- package/dist/Layout/LayoutHeader.svelte.d.ts +38 -0
- package/dist/Layout/LayoutTypes.svelte.d.ts +15 -0
- package/dist/Layout/LayoutTypes.svelte.js +9 -0
- package/dist/Layout/PageContent.svelte +89 -0
- package/dist/Layout/PageContent.svelte.d.ts +23 -0
- package/dist/Layout/Theme.svelte +215 -0
- package/dist/Layout/Theme.svelte.d.ts +18 -0
- package/dist/Layout/UIContent.svelte +15 -0
- package/dist/Layout/UIContent.svelte.d.ts +17 -0
- package/dist/Navigation/Breadcrumb.svelte +82 -0
- package/dist/Navigation/Breadcrumb.svelte.d.ts +29 -0
- package/dist/Navigation/Menu.svelte +180 -0
- package/dist/Navigation/Menu.svelte.d.ts +18 -0
- package/dist/Navigation/MenuTypes.svelte.d.ts +37 -0
- package/dist/Navigation/MenuTypes.svelte.js +1 -0
- package/dist/Navigation/TabbedContent.svelte +43 -0
- package/dist/Navigation/TabbedContent.svelte.d.ts +22 -0
- package/dist/Navigation/Tabs.svelte +118 -0
- package/dist/Navigation/Tabs.svelte.d.ts +24 -0
- package/dist/Pages/LoginPage.svelte +32 -0
- package/dist/Pages/LoginPage.svelte.d.ts +14 -0
- package/dist/Typography/Clamp.svelte +25 -0
- package/dist/Typography/Clamp.svelte.d.ts +23 -0
- package/dist/Typography/H.svelte +51 -0
- package/dist/Typography/H.svelte.d.ts +25 -0
- package/dist/Typography/H1.svelte +14 -0
- package/dist/Typography/H1.svelte.d.ts +23 -0
- package/dist/Typography/H2.svelte +13 -0
- package/dist/Typography/H2.svelte.d.ts +23 -0
- package/dist/Typography/H3.svelte +13 -0
- package/dist/Typography/H3.svelte.d.ts +23 -0
- package/dist/Typography/H4.svelte +13 -0
- package/dist/Typography/H4.svelte.d.ts +23 -0
- package/dist/Typography/H5.svelte +13 -0
- package/dist/Typography/H5.svelte.d.ts +23 -0
- package/dist/Typography/H6.svelte +13 -0
- package/dist/Typography/H6.svelte.d.ts +23 -0
- package/dist/Typography/P.svelte +32 -0
- package/dist/Typography/P.svelte.d.ts +23 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/style.css +787 -0
- package/dist/utils/attr.d.ts +5 -0
- package/dist/utils/attr.js +21 -0
- package/dist/utils/color.d.ts +51 -0
- package/dist/utils/color.js +97 -0
- package/dist/utils/defaults.d.ts +4 -0
- package/dist/utils/defaults.js +1 -0
- package/dist/utils/hooks.server.d.ts +2 -0
- package/dist/utils/hooks.server.js +16 -0
- package/dist/utils/id.d.ts +1 -0
- package/dist/utils/id.js +3 -0
- package/dist/utils/isSnippet.d.ts +5 -0
- package/dist/utils/isSnippet.js +6 -0
- package/dist/utils/transitions.d.ts +29 -0
- package/dist/utils/transitions.js +66 -0
- package/package.json +58 -0
@@ -0,0 +1,96 @@
|
|
1
|
+
<script>import Theme from "../Layout/Theme.svelte";
|
2
|
+
let {
|
3
|
+
children,
|
4
|
+
tip,
|
5
|
+
open
|
6
|
+
} = $props();
|
7
|
+
const id = `tt-${Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)}`;
|
8
|
+
</script>
|
9
|
+
|
10
|
+
<span class="Tooltip" class:open>
|
11
|
+
<span class="TooltipContainer" role="tooltip">
|
12
|
+
<Theme theme="invert">
|
13
|
+
<span class="TooltipContent" id={id}>
|
14
|
+
{#if typeof tip === "string"}
|
15
|
+
{@html tip}
|
16
|
+
{:else}
|
17
|
+
{@render tip()}
|
18
|
+
{/if}
|
19
|
+
</span>
|
20
|
+
<svg width="12" height="8" viewBox="0 0 12 8" version="1.1">
|
21
|
+
<g transform="matrix(0.75,0,0,1,0,0)">
|
22
|
+
<path d="M16,0L0,0L8,8L16,0Z" fill="var(--bg-app)"/>
|
23
|
+
</g>
|
24
|
+
</svg>
|
25
|
+
</Theme>
|
26
|
+
</span>
|
27
|
+
<span class="TooltipTrigger" aria-describedby="{id}">
|
28
|
+
{@render children() }
|
29
|
+
</span>
|
30
|
+
</span>
|
31
|
+
|
32
|
+
<style>
|
33
|
+
.Tooltip {
|
34
|
+
position: relative;
|
35
|
+
height: 100%;
|
36
|
+
display: inline-flex;
|
37
|
+
align-items: center;
|
38
|
+
}
|
39
|
+
.TooltipContainer {
|
40
|
+
position: absolute;
|
41
|
+
bottom: calc(100%);
|
42
|
+
left: 50%;
|
43
|
+
transform: translateX(-50%);
|
44
|
+
padding-bottom: 4px;
|
45
|
+
z-index: 1000;
|
46
|
+
display: flex;
|
47
|
+
flex-direction: column;
|
48
|
+
align-items: center;
|
49
|
+
filter: drop-shadow(0px 2px 5px var(--border-subtle-color));
|
50
|
+
opacity: 0;
|
51
|
+
pointer-events: none;
|
52
|
+
}
|
53
|
+
.TooltipContent {
|
54
|
+
background-color: var(--bg-app);
|
55
|
+
padding: 0.125rem 0.35rem;
|
56
|
+
border-radius: calc(var(--border-radius));
|
57
|
+
border-top: var(--border-subtle);
|
58
|
+
border-left: var(--border-subtle);
|
59
|
+
border-right: var(--border-subtle);
|
60
|
+
display: block;
|
61
|
+
font-size: max(0.85rem, 12px);
|
62
|
+
line-height: 1.4;
|
63
|
+
font-weight: 500;
|
64
|
+
color: var(--text);
|
65
|
+
max-width: clamp(5ch, 100%, 35ch);
|
66
|
+
width: max-content;
|
67
|
+
}
|
68
|
+
.TooltipContent :global(code) {
|
69
|
+
font-weight: 600;
|
70
|
+
}
|
71
|
+
.TooltipContent :global(strong),
|
72
|
+
.TooltipContent :global(b) {
|
73
|
+
font-weight: 700;
|
74
|
+
}
|
75
|
+
.Tooltip:has(.TooltipTrigger:hover):not(.open) .TooltipContainer {
|
76
|
+
animation: fadeIn 0.2s var(--delay, 0.5s) ease-in-out forwards;
|
77
|
+
}
|
78
|
+
.Tooltip:has(.TooltipTrigger:focus-within) .TooltipContainer {
|
79
|
+
animation: fadeIn 0.2s ease-in-out forwards;
|
80
|
+
}
|
81
|
+
.Tooltip.open .TooltipContainer {
|
82
|
+
animation: fadeIn 0.2s ease-in-out forwards;
|
83
|
+
}
|
84
|
+
@keyframes fadeIn {
|
85
|
+
0% { opacity: 0; transform: translateY(-0.5rem) translateX(-50%); }
|
86
|
+
100% { opacity: 1; transform: translateY(0) translateX(-50%); }
|
87
|
+
}
|
88
|
+
@media(prefers-reduced-motion: reduce) {
|
89
|
+
.Tooltip:has(.TooltipTrigger:hover) .TooltipContainer,
|
90
|
+
.Tooltip:has(.TooltipTrigger:focus-within) .TooltipContainer,
|
91
|
+
.Tooltip.open .TooltipContainer {
|
92
|
+
animation: none !important;
|
93
|
+
opacity: 1;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
</style>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import type { Snippet } from "svelte";
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
/** Content to trigger the tooltip */
|
6
|
+
children: Snippet;
|
7
|
+
/** The content of the tooltip */
|
8
|
+
tip: string | Snippet;
|
9
|
+
/** Open the tooltip on render (cannot be closed) */
|
10
|
+
open?: boolean | undefined;
|
11
|
+
};
|
12
|
+
events: {
|
13
|
+
[evt: string]: CustomEvent<any>;
|
14
|
+
};
|
15
|
+
slots: {};
|
16
|
+
};
|
17
|
+
export type TooltipProps = typeof __propDef.props;
|
18
|
+
export type TooltipEvents = typeof __propDef.events;
|
19
|
+
export type TooltipSlots = typeof __propDef.slots;
|
20
|
+
export default class Tooltip extends SvelteComponent<TooltipProps, TooltipEvents, TooltipSlots> {
|
21
|
+
}
|
22
|
+
export {};
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<script>import Icon from "../Display/Icon.svelte";
|
2
|
+
let {
|
3
|
+
href,
|
4
|
+
type = "button",
|
5
|
+
disabled = false,
|
6
|
+
icon,
|
7
|
+
onclick,
|
8
|
+
children
|
9
|
+
} = $props();
|
10
|
+
</script>
|
11
|
+
|
12
|
+
{#if href}
|
13
|
+
<a class="Button Link button" {href} {onclick}>
|
14
|
+
{#if icon}
|
15
|
+
<Icon {icon} />
|
16
|
+
{/if}
|
17
|
+
{@render children()}
|
18
|
+
</a>
|
19
|
+
{:else}
|
20
|
+
<button class="Button button" type={type} disabled={disabled} {onclick}>
|
21
|
+
{#if icon}
|
22
|
+
<Icon {icon} />
|
23
|
+
{/if}
|
24
|
+
{@render children()}
|
25
|
+
</button>
|
26
|
+
{/if}
|
27
|
+
|
28
|
+
<style>
|
29
|
+
.Button {
|
30
|
+
display: inline-flex;
|
31
|
+
align-items: center;
|
32
|
+
justify-content: center;
|
33
|
+
}
|
34
|
+
</style>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import type { ComponentType, Snippet } from 'svelte';
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
href?: string | undefined;
|
6
|
+
type?: "button" | "submit" | "reset" | undefined;
|
7
|
+
disabled?: boolean | undefined;
|
8
|
+
icon?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
9
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
10
|
+
}) | ComponentType | undefined;
|
11
|
+
onclick?: ((event: MouseEvent) => void) | undefined;
|
12
|
+
children: Snippet;
|
13
|
+
};
|
14
|
+
events: {
|
15
|
+
[evt: string]: CustomEvent<any>;
|
16
|
+
};
|
17
|
+
slots: {};
|
18
|
+
};
|
19
|
+
export type ButtonProps = typeof __propDef.props;
|
20
|
+
export type ButtonEvents = typeof __propDef.events;
|
21
|
+
export type ButtonSlots = typeof __propDef.slots;
|
22
|
+
export default class Button extends SvelteComponent<ButtonProps, ButtonEvents, ButtonSlots> {
|
23
|
+
}
|
24
|
+
export {};
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<script>let {
|
2
|
+
children
|
3
|
+
} = $props();
|
4
|
+
</script>
|
5
|
+
|
6
|
+
<div class="FieldActions">
|
7
|
+
{@render children()}
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<style>
|
11
|
+
.FieldActions {
|
12
|
+
display: flex;
|
13
|
+
flex-direction: row;
|
14
|
+
align-items: center;
|
15
|
+
justify-content: space-between;
|
16
|
+
gap: 1.35em;
|
17
|
+
background: color-mix(in srgb, var(--bg-subtle) calc(var(--fcc) * 100%), transparent);
|
18
|
+
padding: calc(1.5em * var(--fcc)) calc(1.5em * var(--fcc));
|
19
|
+
}
|
20
|
+
@container (max-width: 400px) {
|
21
|
+
.FieldActions {
|
22
|
+
flex-direction: column;
|
23
|
+
}
|
24
|
+
}
|
25
|
+
</style>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import type { Snippet } from "svelte";
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
children: Snippet;
|
6
|
+
};
|
7
|
+
events: {
|
8
|
+
[evt: string]: CustomEvent<any>;
|
9
|
+
};
|
10
|
+
slots: {};
|
11
|
+
};
|
12
|
+
export type FieldActionsProps = typeof __propDef.props;
|
13
|
+
export type FieldActionsEvents = typeof __propDef.events;
|
14
|
+
export type FieldActionsSlots = typeof __propDef.slots;
|
15
|
+
export default class FieldActions extends SvelteComponent<FieldActionsProps, FieldActionsEvents, FieldActionsSlots> {
|
16
|
+
}
|
17
|
+
export {};
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<script>let {
|
2
|
+
children,
|
3
|
+
contained
|
4
|
+
} = $props();
|
5
|
+
</script>
|
6
|
+
|
7
|
+
<div class="FieldContainer" class:contained style="--fcc: {contained ? 1 : 0}">
|
8
|
+
{@render children()}
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<style>
|
12
|
+
.FieldContainer {
|
13
|
+
container-type: inline-size;
|
14
|
+
display: grid;
|
15
|
+
gap: 1.5em;
|
16
|
+
grid-template-columns: 1fr;
|
17
|
+
border-radius: var(--border-radius);
|
18
|
+
}
|
19
|
+
.FieldContainer.contained {
|
20
|
+
border: var(--border);
|
21
|
+
gap: 0;
|
22
|
+
overflow: clip;
|
23
|
+
}
|
24
|
+
.FieldContainer :global(.FieldSection:has(+ .FieldActions)) {
|
25
|
+
margin-bottom: 0;
|
26
|
+
border-bottom: 0;
|
27
|
+
}
|
28
|
+
.FieldContainer.contained :global(.FieldSection:has(+ .FieldActions)) {
|
29
|
+
border-bottom: var(--border);
|
30
|
+
}
|
31
|
+
</style>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import type { Snippet } from "svelte";
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
contained?: boolean | undefined;
|
6
|
+
children: Snippet;
|
7
|
+
};
|
8
|
+
events: {
|
9
|
+
[evt: string]: CustomEvent<any>;
|
10
|
+
};
|
11
|
+
slots: {};
|
12
|
+
};
|
13
|
+
export type FieldContainerProps = typeof __propDef.props;
|
14
|
+
export type FieldContainerEvents = typeof __propDef.events;
|
15
|
+
export type FieldContainerSlots = typeof __propDef.slots;
|
16
|
+
export default class FieldContainer extends SvelteComponent<FieldContainerProps, FieldContainerEvents, FieldContainerSlots> {
|
17
|
+
}
|
18
|
+
export {};
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<script>import Label from "./Label.svelte";
|
2
|
+
let {
|
3
|
+
id,
|
4
|
+
contained,
|
5
|
+
prefix,
|
6
|
+
suffix,
|
7
|
+
label,
|
8
|
+
labelTip,
|
9
|
+
type = "text",
|
10
|
+
children
|
11
|
+
} = $props();
|
12
|
+
</script>
|
13
|
+
|
14
|
+
|
15
|
+
<div class="FieldContent {type}" class:contained>
|
16
|
+
<Label {label} tip={labelTip} {id} />
|
17
|
+
{#if contained}
|
18
|
+
<div class="Field">
|
19
|
+
{#if prefix}
|
20
|
+
<div class="Fix Prefix">{prefix}</div>
|
21
|
+
{/if}
|
22
|
+
{@render children()}
|
23
|
+
{#if suffix}
|
24
|
+
<div class="Fix Suffix">{suffix}</div>
|
25
|
+
{/if}
|
26
|
+
</div>
|
27
|
+
{:else}
|
28
|
+
{@render children()}
|
29
|
+
{/if}
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<style>
|
33
|
+
.FieldContent {
|
34
|
+
display: flex;
|
35
|
+
gap: 0.75em;
|
36
|
+
flex-direction: column;
|
37
|
+
font-size: var(--font-size, 1em);
|
38
|
+
}
|
39
|
+
.Field {
|
40
|
+
background-color: var(--field-bg);
|
41
|
+
border: var(--border-size) var(--border-style) var(--border-color);
|
42
|
+
border-radius: var(--field-radius);
|
43
|
+
display: flex;
|
44
|
+
padding-inline: 0.15em;
|
45
|
+
}
|
46
|
+
.Field > *:not(input) {
|
47
|
+
flex-grow: 0;
|
48
|
+
flex-shrink: 0;
|
49
|
+
}
|
50
|
+
.Fix {
|
51
|
+
display: flex;
|
52
|
+
align-items: center;
|
53
|
+
padding-inline: 0.75em;
|
54
|
+
font-size: 1em;
|
55
|
+
line-height: 1.5;
|
56
|
+
color: var(--text-subtle);
|
57
|
+
}
|
58
|
+
.Suffix {
|
59
|
+
padding-inline-start: 0;
|
60
|
+
}
|
61
|
+
.Prefix {
|
62
|
+
padding-inline-end: 0;
|
63
|
+
}
|
64
|
+
.Field:has(input:focus-visible) {
|
65
|
+
outline: var(--focus-outline);
|
66
|
+
}
|
67
|
+
.Field.hasPrefix input {
|
68
|
+
padding-inline-start: 0.35em;
|
69
|
+
}
|
70
|
+
/**
|
71
|
+
* Buttons
|
72
|
+
*/
|
73
|
+
.Field :global(button:focus-visible) {
|
74
|
+
outline: var(--focus-outline);
|
75
|
+
outline-offset: 3px;
|
76
|
+
border-radius: calc(var(--field-radius) - 2px);
|
77
|
+
}
|
78
|
+
</style>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import type { Snippet } from "svelte";
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
id: string;
|
6
|
+
contained?: boolean | undefined;
|
7
|
+
prefix?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
8
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
9
|
+
}) | undefined;
|
10
|
+
suffix?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
11
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
12
|
+
}) | undefined;
|
13
|
+
type?: string | undefined;
|
14
|
+
label?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
15
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
16
|
+
}) | undefined;
|
17
|
+
labelTip?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
18
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
19
|
+
}) | undefined;
|
20
|
+
children: Snippet;
|
21
|
+
};
|
22
|
+
events: {
|
23
|
+
[evt: string]: CustomEvent<any>;
|
24
|
+
};
|
25
|
+
slots: {};
|
26
|
+
};
|
27
|
+
export type FieldContentProps = typeof __propDef.props;
|
28
|
+
export type FieldContentEvents = typeof __propDef.events;
|
29
|
+
export type FieldContentSlots = typeof __propDef.slots;
|
30
|
+
export default class FieldContent extends SvelteComponent<FieldContentProps, FieldContentEvents, FieldContentSlots> {
|
31
|
+
}
|
32
|
+
export {};
|
@@ -0,0 +1,97 @@
|
|
1
|
+
<script>import H5 from "../Typography/H5.svelte";
|
2
|
+
import P from "../Typography/P.svelte";
|
3
|
+
let {
|
4
|
+
title,
|
5
|
+
description,
|
6
|
+
children
|
7
|
+
} = $props();
|
8
|
+
</script>
|
9
|
+
|
10
|
+
<div class="FieldSection">
|
11
|
+
{#if title || description}
|
12
|
+
<div class="FieldSectionTitle">
|
13
|
+
{#if title}
|
14
|
+
{#if typeof title === "string"}
|
15
|
+
<H5>{title}</H5>
|
16
|
+
{:else}
|
17
|
+
{@render title()}
|
18
|
+
{/if}
|
19
|
+
{/if}
|
20
|
+
{#if description}
|
21
|
+
{#if typeof description === "string"}
|
22
|
+
<small>{description}</small>
|
23
|
+
{:else}
|
24
|
+
{@render description()}
|
25
|
+
{/if}
|
26
|
+
{/if}
|
27
|
+
</div>
|
28
|
+
{/if}
|
29
|
+
<div class="FieldSectionFields">
|
30
|
+
{@render children()}
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<style>
|
35
|
+
.FieldSection {
|
36
|
+
padding: 0;
|
37
|
+
display: grid;
|
38
|
+
gap: 0rem;
|
39
|
+
grid-template-columns: 1fr;
|
40
|
+
}
|
41
|
+
.FieldSection .FieldSectionTitle {
|
42
|
+
display: flex;
|
43
|
+
flex-direction: column;
|
44
|
+
background-color: var(--base);
|
45
|
+
gap: 0.25rem;
|
46
|
+
padding: 1em 1.5em;
|
47
|
+
border-bottom: var(--border);
|
48
|
+
}
|
49
|
+
.FieldSection:not(:first-child) {
|
50
|
+
border-top: calc(var(--fcc) * var(--border-size)) var(--border-style) var(--border-color);
|
51
|
+
}
|
52
|
+
.FieldSection .FieldSectionFields {
|
53
|
+
padding: calc(var(--padding, 1.5em) * var(--fcc));
|
54
|
+
display: grid;
|
55
|
+
gap: 3rem;
|
56
|
+
}
|
57
|
+
@container (min-width: 600px) {
|
58
|
+
.FieldSection {
|
59
|
+
gap: 3rem;
|
60
|
+
padding: 2rem;
|
61
|
+
grid-template-columns: 1fr;
|
62
|
+
border-bottom: 1px dotted var(--border-light);
|
63
|
+
margin-bottom: 3rem;
|
64
|
+
border-radius: 0;
|
65
|
+
}
|
66
|
+
.FieldSection:has(.FieldSectionTitle) {
|
67
|
+
grid-template-columns: minmax(180px, 1fr) 3fr;
|
68
|
+
}
|
69
|
+
.FieldSection:last-child {
|
70
|
+
border-bottom: none;
|
71
|
+
margin-bottom: 0;
|
72
|
+
}
|
73
|
+
.FieldSection:not(:first-child) {
|
74
|
+
border-top: 0;
|
75
|
+
padding-top: 0;
|
76
|
+
}
|
77
|
+
.FieldSection .FieldSectionTitle {
|
78
|
+
gap: 1rem;
|
79
|
+
padding: 0;
|
80
|
+
background-color: transparent;
|
81
|
+
border-bottom: none;
|
82
|
+
}
|
83
|
+
.FieldSection .FieldSectionFields {
|
84
|
+
padding: 0;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
@container (min-width: 1024px) {
|
88
|
+
.FieldSection {
|
89
|
+
grid-template-columns: minmax(300px, 1fr) 3fr;
|
90
|
+
padding: 3rem;
|
91
|
+
}
|
92
|
+
.FieldSection:not(:first-child) {
|
93
|
+
border-top: 0;
|
94
|
+
padding-top: 0;
|
95
|
+
}
|
96
|
+
}
|
97
|
+
</style>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import type { Snippet } from "svelte";
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
title?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
6
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
7
|
+
}) | undefined;
|
8
|
+
description?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
9
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
10
|
+
}) | undefined;
|
11
|
+
children: Snippet;
|
12
|
+
};
|
13
|
+
events: {
|
14
|
+
[evt: string]: CustomEvent<any>;
|
15
|
+
};
|
16
|
+
slots: {};
|
17
|
+
};
|
18
|
+
export type FieldSectionProps = typeof __propDef.props;
|
19
|
+
export type FieldSectionEvents = typeof __propDef.events;
|
20
|
+
export type FieldSectionSlots = typeof __propDef.slots;
|
21
|
+
export default class FieldSection extends SvelteComponent<FieldSectionProps, FieldSectionEvents, FieldSectionSlots> {
|
22
|
+
}
|
23
|
+
export {};
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<script>let {
|
2
|
+
description,
|
3
|
+
contained,
|
4
|
+
rounded,
|
5
|
+
legend,
|
6
|
+
columns = 1,
|
7
|
+
children
|
8
|
+
} = $props();
|
9
|
+
let columnsArray = Array.isArray(columns) ? columns : [columns, columns, columns];
|
10
|
+
let lgColumns = columnsArray[0];
|
11
|
+
let mdColumns = columnsArray[1] || lgColumns;
|
12
|
+
let smColumns = columnsArray[2] || mdColumns;
|
13
|
+
</script>
|
14
|
+
|
15
|
+
<div class="FieldsetContainer">
|
16
|
+
<fieldset class:rounded class:contained class="cols-{columns}" style="--lg-cols: {lgColumns}; --md-cols: {mdColumns}; --sm-cols: {smColumns}">
|
17
|
+
{#if legend}
|
18
|
+
<legend>
|
19
|
+
{#if typeof legend === 'string'}
|
20
|
+
{legend}
|
21
|
+
{:else}
|
22
|
+
{@render legend()}
|
23
|
+
{/if}
|
24
|
+
</legend>
|
25
|
+
{/if}
|
26
|
+
{#if description}
|
27
|
+
{#if typeof description === 'string'}
|
28
|
+
<small>{description}</small>
|
29
|
+
{:else}
|
30
|
+
{@render description()}
|
31
|
+
{/if}
|
32
|
+
{/if}
|
33
|
+
{@render children()}
|
34
|
+
</fieldset>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<style>
|
38
|
+
.FieldsetContainer {
|
39
|
+
container-type: inline-size;
|
40
|
+
}
|
41
|
+
fieldset {
|
42
|
+
display: grid;
|
43
|
+
grid-template-columns: repeat(var(--lg-cols), 1fr);
|
44
|
+
gap: 1rem;
|
45
|
+
}
|
46
|
+
legend {
|
47
|
+
margin-bottom: 1.5rem;
|
48
|
+
font-size: var(--font-size, 1em);
|
49
|
+
}
|
50
|
+
fieldset.contained {
|
51
|
+
padding: 2rem;
|
52
|
+
}
|
53
|
+
@container(max-width: 960px) {
|
54
|
+
fieldset {
|
55
|
+
grid-template-columns: repeat(var(--md-cols), 1fr);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
@container(max-width: 640px) {
|
59
|
+
fieldset {
|
60
|
+
grid-template-columns: repeat(var(--sm-cols), 1fr);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
</style>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import type { Snippet } from "svelte";
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
/** The description of the fieldset. */
|
6
|
+
description?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
7
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
8
|
+
}) | undefined;
|
9
|
+
/** Whether the fieldset should be contained. */
|
10
|
+
contained?: boolean | undefined;
|
11
|
+
/** Whether the fieldset should be rounded. */
|
12
|
+
rounded?: boolean | undefined;
|
13
|
+
/** The legend of the fieldset. */
|
14
|
+
legend?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
|
15
|
+
_: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
|
16
|
+
}) | undefined;
|
17
|
+
/** The number of columns to display the fieldset in. You can pass a single number or an array of numbers. The array will be used to set the number of columns at different breakpoints (lg, md, sm). */
|
18
|
+
columns?: number | [number] | [number, number] | [number, number, number] | undefined;
|
19
|
+
/** Content to be rendered inside the fieldset. */
|
20
|
+
children: Snippet;
|
21
|
+
};
|
22
|
+
events: {
|
23
|
+
[evt: string]: CustomEvent<any>;
|
24
|
+
};
|
25
|
+
slots: {};
|
26
|
+
};
|
27
|
+
export type FieldsetProps = typeof __propDef.props;
|
28
|
+
export type FieldsetEvents = typeof __propDef.events;
|
29
|
+
export type FieldsetSlots = typeof __propDef.slots;
|
30
|
+
export default class Fieldset extends SvelteComponent<FieldsetProps, FieldsetEvents, FieldsetSlots> {
|
31
|
+
}
|
32
|
+
export {};
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<script>import { enhance as enhanceAction } from "$app/forms";
|
2
|
+
import UiContent from "../Layout/UIContent.svelte";
|
3
|
+
import { onMount, setContext } from "svelte";
|
4
|
+
let {
|
5
|
+
fullWidth = false,
|
6
|
+
children
|
7
|
+
} = $props();
|
8
|
+
</script>
|
9
|
+
|
10
|
+
<UiContent>
|
11
|
+
<form>
|
12
|
+
{@render children()}
|
13
|
+
</form>
|
14
|
+
</UiContent>
|
15
|
+
|
16
|
+
<style>
|
17
|
+
form {
|
18
|
+
}
|
19
|
+
</style>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import type { Snippet } from "svelte";
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
fullWidth?: boolean | undefined;
|
6
|
+
children: Snippet;
|
7
|
+
};
|
8
|
+
events: {
|
9
|
+
[evt: string]: CustomEvent<any>;
|
10
|
+
};
|
11
|
+
slots: {};
|
12
|
+
};
|
13
|
+
export type FormProps = typeof __propDef.props;
|
14
|
+
export type FormEvents = typeof __propDef.events;
|
15
|
+
export type FormSlots = typeof __propDef.slots;
|
16
|
+
export default class Form extends SvelteComponent<FormProps, FormEvents, FormSlots> {
|
17
|
+
}
|
18
|
+
export {};
|