contain-css-svelte 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 +58 -0
- package/dist/Card.svelte +172 -0
- package/dist/Card.svelte.d.ts +27 -0
- package/dist/controls/Button.svelte +74 -0
- package/dist/controls/Button.svelte.d.ts +28 -0
- package/dist/controls/Checkbox.svelte +111 -0
- package/dist/controls/Checkbox.svelte.d.ts +18 -0
- package/dist/controls/Input.svelte +33 -0
- package/dist/controls/Input.svelte.d.ts +22 -0
- package/dist/controls/MiniButton.svelte +78 -0
- package/dist/controls/MiniButton.svelte.d.ts +31 -0
- package/dist/controls/RadioButton.svelte +109 -0
- package/dist/controls/RadioButton.svelte.d.ts +25 -0
- package/dist/controls/Select.svelte +135 -0
- package/dist/controls/Select.svelte.d.ts +20 -0
- package/dist/controls/Slider.svelte +45 -0
- package/dist/controls/Slider.svelte.d.ts +29 -0
- package/dist/controls/TabItem.svelte +56 -0
- package/dist/controls/TabItem.svelte.d.ts +29 -0
- package/dist/cssprops.d.ts +1 -0
- package/dist/cssprops.js +189 -0
- package/dist/dropdowns/DropdownMenu.svelte +234 -0
- package/dist/dropdowns/DropdownMenu.svelte.d.ts +19 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +24 -0
- package/dist/layout/Bar.svelte +57 -0
- package/dist/layout/Bar.svelte.d.ts +27 -0
- package/dist/layout/Column.svelte +40 -0
- package/dist/layout/Column.svelte.d.ts +19 -0
- package/dist/layout/Columns.svelte +21 -0
- package/dist/layout/Columns.svelte.d.ts +27 -0
- package/dist/layout/Container.svelte +105 -0
- package/dist/layout/Container.svelte.d.ts +27 -0
- package/dist/layout/FormItem.svelte +97 -0
- package/dist/layout/FormItem.svelte.d.ts +35 -0
- package/dist/layout/GridLayout.svelte +22 -0
- package/dist/layout/GridLayout.svelte.d.ts +16 -0
- package/dist/layout/Hero.svelte +86 -0
- package/dist/layout/Hero.svelte.d.ts +23 -0
- package/dist/layout/MenuList.svelte +108 -0
- package/dist/layout/MenuList.svelte.d.ts +29 -0
- package/dist/layout/Page.svelte +189 -0
- package/dist/layout/Page.svelte.d.ts +31 -0
- package/dist/layout/ResponsiveText.svelte +99 -0
- package/dist/layout/ResponsiveText.svelte.d.ts +26 -0
- package/dist/layout/Row.svelte +39 -0
- package/dist/layout/Row.svelte.d.ts +19 -0
- package/dist/layout/Sidebar.svelte +264 -0
- package/dist/layout/Sidebar.svelte.d.ts +23 -0
- package/dist/layout/SplitPane.svelte +160 -0
- package/dist/layout/SplitPane.svelte.d.ts +21 -0
- package/dist/layout/TabBar.svelte +49 -0
- package/dist/layout/TabBar.svelte.d.ts +28 -0
- package/dist/layout/Tile.svelte +172 -0
- package/dist/layout/Tile.svelte.d.ts +27 -0
- package/dist/misc/Code.svelte +27 -0
- package/dist/misc/Code.svelte.d.ts +18 -0
- package/dist/sass/_containers.scss +117 -0
- package/dist/sass/_mixins.scss +309 -0
- package/dist/typography/TextLayout.svelte +46 -0
- package/dist/typography/TextLayout.svelte.d.ts +27 -0
- package/dist/util.d.ts +3 -0
- package/dist/util.js +13 -0
- package/dist/vars/affordances.css +26 -0
- package/dist/vars/colors.css +345 -0
- package/dist/vars/defaults.css +14 -0
- package/dist/vars/layout.css +39 -0
- package/dist/vars/themes/lightordark.css +39 -0
- package/dist/vars/themes/purple.css +18 -0
- package/dist/vars/themes/typography-airy.css +13 -0
- package/dist/vars/themes/typography-browser.css +20 -0
- package/dist/vars/themes/typography-carbon.css +20 -0
- package/dist/vars/typography.css +16 -0
- package/package.json +52 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let fullWidth = false;
|
|
3
|
+
export let globalInputStyles = true;
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<div class="form-item" class:fullWidth class:globalInputStyles>
|
|
7
|
+
<slot name="before" />
|
|
8
|
+
<label>
|
|
9
|
+
<span class="label">
|
|
10
|
+
<slot name="label" />
|
|
11
|
+
</span>
|
|
12
|
+
<span class="input">
|
|
13
|
+
<slot />
|
|
14
|
+
</span>
|
|
15
|
+
</label>
|
|
16
|
+
<slot name="after" />
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<style>/* Convenience groupings */
|
|
20
|
+
/* Warning: because we define a fallback
|
|
21
|
+
media query, the media query can override the container
|
|
22
|
+
if we stack a bunch of these in a row and aren't thoughtful about the order.
|
|
23
|
+
Put min-width queries *after* max-width queries so that smaller
|
|
24
|
+
container queries don't get their styles overridden by large media queries.
|
|
25
|
+
*/
|
|
26
|
+
.form-item {
|
|
27
|
+
display: flex;
|
|
28
|
+
align-items: var(--form-label-align, baseline);
|
|
29
|
+
justify-content: var(--form-label-justify, flex-start);
|
|
30
|
+
gap: var(--form-label-horizontal-gap, var(--padding));
|
|
31
|
+
padding-top: var(--padding, form-item, 8px);
|
|
32
|
+
padding-bottom: var(--padding, form-item, 8px);
|
|
33
|
+
font-family: var(--form-item-font-family, var(--ui-font-family, var(--font-family, sans-serif)));
|
|
34
|
+
text-transform: var(--form-item-text-transform, var(--ui-text-transform, var(--text-transform, none)));
|
|
35
|
+
text-decoration: var(--form-item-text-decoration, var(--ui-text-decoration, var(--text-decoration, none)));
|
|
36
|
+
font-size: var(--form-item-font-size, var(--ui-font-size, var(--font-size, 16px)));
|
|
37
|
+
font-weight: var(--form-item-font-weight, var(--ui-font-weight, var(--font-weight, 400)));
|
|
38
|
+
line-height: var(--form-item-line-height, var(--ui-line-height, var(--line-height, 1.5)));
|
|
39
|
+
letter-spacing: var(--form-item-letter-spacing, var(--ui-letter-spacing, var(--letter-spacing, 0.05em)));
|
|
40
|
+
box-sizing: border-box;
|
|
41
|
+
}
|
|
42
|
+
label {
|
|
43
|
+
display: contents;
|
|
44
|
+
}
|
|
45
|
+
.label {
|
|
46
|
+
box-sizing: border-box;
|
|
47
|
+
width: var(--form-label-width, 12em);
|
|
48
|
+
text-align: var(--form-label-text-align, right);
|
|
49
|
+
}
|
|
50
|
+
.input {
|
|
51
|
+
box-sizing: border-box;
|
|
52
|
+
width: var(--form-input-fixed-width, var(--form-input-width));
|
|
53
|
+
}
|
|
54
|
+
:global(.fullWidth) .input {
|
|
55
|
+
box-sizing: border-box;
|
|
56
|
+
width: var(--form-input-fixed-width, 100%);
|
|
57
|
+
}
|
|
58
|
+
:global(.fullWidth) .input :global(input) {
|
|
59
|
+
box-sizing: border-box;
|
|
60
|
+
width: 100%;
|
|
61
|
+
}
|
|
62
|
+
@container (max-width: 400px) {
|
|
63
|
+
.form-item {
|
|
64
|
+
flex-direction: column;
|
|
65
|
+
align-items: flex-start;
|
|
66
|
+
gap: var(--form-label-vertical-gap, var(--space));
|
|
67
|
+
}
|
|
68
|
+
.label {
|
|
69
|
+
text-align: left;
|
|
70
|
+
}
|
|
71
|
+
.form-item {
|
|
72
|
+
width: auto;
|
|
73
|
+
text-align: left;
|
|
74
|
+
font-size: var(--font-size-small);
|
|
75
|
+
}
|
|
76
|
+
.form-item {
|
|
77
|
+
width: var(--form-input-fixed-width, var(--form-input-width));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/* Global Input Styles */
|
|
81
|
+
.globalInputStyles :global(input) {
|
|
82
|
+
font-family: var(--form-input-font-family, var(--input-font-family, var(--ui-font-family, var(--font-family, sans-serif))));
|
|
83
|
+
text-transform: var(--form-input-text-transform, var(--input-text-transform, var(--ui-text-transform, var(--text-transform, none))));
|
|
84
|
+
text-decoration: var(--form-input-text-decoration, var(--input-text-decoration, var(--ui-text-decoration, var(--text-decoration, none))));
|
|
85
|
+
font-size: var(--form-input-font-size, var(--input-font-size, var(--ui-font-size, var(--font-size, 16px))));
|
|
86
|
+
font-weight: var(--form-input-font-weight, var(--input-font-weight, var(--ui-font-weight, var(--font-weight, 400))));
|
|
87
|
+
line-height: var(--form-input-line-height, var(--input-line-height, var(--ui-line-height, var(--line-height, 1.5))));
|
|
88
|
+
letter-spacing: var(--form-input-letter-spacing, var(--input-letter-spacing, var(--ui-letter-spacing, var(--letter-spacing, 0.05em))));
|
|
89
|
+
box-sizing: border-box;
|
|
90
|
+
border: var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))));
|
|
91
|
+
border-top: var(--form-input-border-top, var(--input-border-top, var(--ui-border-top, var(--border-top, var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))))))));
|
|
92
|
+
border-right: var(--form-input-border-right, var(--input-border-right, var(--ui-border-right, var(--border-right, var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))))))));
|
|
93
|
+
border-bottom: var(--form-input-border-bottom, var(--input-border-bottom, var(--ui-border-bottom, var(--border-bottom, var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))))))));
|
|
94
|
+
border-left: var(--form-input-border-left, var(--input-border-left, var(--ui-border-left, var(--border-left, var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))))))));
|
|
95
|
+
padding: var(--form-input-padding, var(--input-padding, var(--ui-padding, var(--padding, 4px))));
|
|
96
|
+
border-radius: var(--form-input-square-radius, var(--input-square-radius, var(--ui-square-radius, var(--square-radius, 0))));
|
|
97
|
+
}</style>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} FormItemProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} FormItemEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} FormItemSlots */
|
|
4
|
+
export default class FormItem extends SvelteComponent<{
|
|
5
|
+
fullWidth?: boolean | undefined;
|
|
6
|
+
globalInputStyles?: boolean | undefined;
|
|
7
|
+
}, {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
}, {
|
|
10
|
+
before: {};
|
|
11
|
+
label: {};
|
|
12
|
+
default: {};
|
|
13
|
+
after: {};
|
|
14
|
+
}> {
|
|
15
|
+
}
|
|
16
|
+
export type FormItemProps = typeof __propDef.props;
|
|
17
|
+
export type FormItemEvents = typeof __propDef.events;
|
|
18
|
+
export type FormItemSlots = typeof __propDef.slots;
|
|
19
|
+
import { SvelteComponent } from "svelte";
|
|
20
|
+
declare const __propDef: {
|
|
21
|
+
props: {
|
|
22
|
+
fullWidth?: boolean | undefined;
|
|
23
|
+
globalInputStyles?: boolean | undefined;
|
|
24
|
+
};
|
|
25
|
+
events: {
|
|
26
|
+
[evt: string]: CustomEvent<any>;
|
|
27
|
+
};
|
|
28
|
+
slots: {
|
|
29
|
+
before: {};
|
|
30
|
+
label: {};
|
|
31
|
+
default: {};
|
|
32
|
+
after: {};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script>import { onMount } from "svelte";
|
|
2
|
+
let grid;
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="grid-layout">
|
|
6
|
+
<slot />
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<style>/* Convenience groupings */
|
|
10
|
+
/* Warning: because we define a fallback
|
|
11
|
+
media query, the media query can override the container
|
|
12
|
+
if we stack a bunch of these in a row and aren't thoughtful about the order.
|
|
13
|
+
Put min-width queries *after* max-width queries so that smaller
|
|
14
|
+
container queries don't get their styles overridden by large media queries.
|
|
15
|
+
*/
|
|
16
|
+
.grid-layout {
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-wrap: wrap;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
/*@include box-props(grid-layout);*/
|
|
21
|
+
gap: var(--grid-layout-gap, var(--gap, 8px));
|
|
22
|
+
}</style>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {
|
|
8
|
+
default: {};
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export type GridLayoutProps = typeof __propDef.props;
|
|
12
|
+
export type GridLayoutEvents = typeof __propDef.events;
|
|
13
|
+
export type GridLayoutSlots = typeof __propDef.slots;
|
|
14
|
+
export default class GridLayout extends SvelteComponent<GridLayoutProps, GridLayoutEvents, GridLayoutSlots> {
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<script>import { injectVars } from "../util";
|
|
2
|
+
export let bg = null;
|
|
3
|
+
export let fg = null;
|
|
4
|
+
export let padding = null;
|
|
5
|
+
export let width = null;
|
|
6
|
+
export let height = null;
|
|
7
|
+
let cssVars = injectVars($$props, "hero", [
|
|
8
|
+
"bg",
|
|
9
|
+
"fg",
|
|
10
|
+
"padding",
|
|
11
|
+
"width",
|
|
12
|
+
"height"
|
|
13
|
+
]);
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<div class="hero">
|
|
17
|
+
<slot />
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<style>/* Convenience groupings */
|
|
21
|
+
/* Warning: because we define a fallback
|
|
22
|
+
media query, the media query can override the container
|
|
23
|
+
if we stack a bunch of these in a row and aren't thoughtful about the order.
|
|
24
|
+
Put min-width queries *after* max-width queries so that smaller
|
|
25
|
+
container queries don't get their styles overridden by large media queries.
|
|
26
|
+
*/
|
|
27
|
+
.hero {
|
|
28
|
+
background: var(--hero-bg, var(--container-bg, var(--bg, white)));
|
|
29
|
+
color: var(--hero-fg, var(--container-fg, var(--fg, black)));
|
|
30
|
+
font-family: var(--hero-font-family, var(--container-font-family, var(--font-family, sans-serif)));
|
|
31
|
+
text-transform: var(--hero-text-transform, var(--container-text-transform, var(--text-transform, none)));
|
|
32
|
+
text-decoration: var(--hero-text-decoration, var(--container-text-decoration, var(--text-decoration, none)));
|
|
33
|
+
font-size: var(--hero-font-size, var(--container-font-size, var(--font-size, 16px)));
|
|
34
|
+
font-weight: var(--hero-font-weight, var(--container-font-weight, var(--font-weight, 400)));
|
|
35
|
+
line-height: var(--hero-line-height, var(--container-line-height, var(--line-height, 1.5)));
|
|
36
|
+
letter-spacing: var(--hero-letter-spacing, var(--container-letter-spacing, var(--letter-spacing, 0.05em)));
|
|
37
|
+
display: grid;
|
|
38
|
+
place-content: center;
|
|
39
|
+
width: var(--hero-width, 100%);
|
|
40
|
+
height: var(--hero-height, 100vh);
|
|
41
|
+
font-size: var(--hero-font-size, 2rem);
|
|
42
|
+
box-sizing: border-box;
|
|
43
|
+
animation-name: fade-in;
|
|
44
|
+
animation-duration: var(--hero-animation-duration, 1s);
|
|
45
|
+
animation-timing-function: var(--hero-animation-timing-function, ease-in-out);
|
|
46
|
+
}
|
|
47
|
+
.hero :global(p), .hero :global(blockquote), .hero :global(dl), .hero :global(ul), .hero :global(ol) {
|
|
48
|
+
max-width: var(--hero-line-width, var(--container-line-width, var(--line-width, 40em)));
|
|
49
|
+
font-family: var(--hero-body-font-family, var(--container-body-font-family, var(--body-font-family, var(--font-family))));
|
|
50
|
+
line-height: var(--hero-line-height, var(--container-line-height, var(--line-height, 1.5)));
|
|
51
|
+
margin-left: auto;
|
|
52
|
+
margin-right: auto;
|
|
53
|
+
font-weight: var(--hero-body-font-weight, var(--container-body-font-weight, var(--body-font-weight, var(--normal))));
|
|
54
|
+
}
|
|
55
|
+
.hero :global(h1),
|
|
56
|
+
.hero :global(h2),
|
|
57
|
+
.hero :global(h3),
|
|
58
|
+
.hero :global(h4),
|
|
59
|
+
.hero :global(h5),
|
|
60
|
+
.hero :global(h6) {
|
|
61
|
+
max-width: var(--hero-line-width, var(--container-line-width, var(--line-width, 40em)));
|
|
62
|
+
font-family: var(--hero-heading-font-family, var(--container-heading-font-family, var(--heading-font-family, var(--font-family))));
|
|
63
|
+
line-height: var(--hero-heading-line-height, var(--container-heading-line-height, var(--heading-line-height, var(--line-height))));
|
|
64
|
+
margin-left: auto;
|
|
65
|
+
margin-right: auto;
|
|
66
|
+
color: var(--heading-color, hero, container, var(--fg));
|
|
67
|
+
font-weight: var(--heading-font-weight, hero, container, var(--bold));
|
|
68
|
+
}
|
|
69
|
+
.hero h1,
|
|
70
|
+
.hero h2,
|
|
71
|
+
.hero h3,
|
|
72
|
+
.hero h4,
|
|
73
|
+
.hero h5,
|
|
74
|
+
.hero h6 {
|
|
75
|
+
text-align: center;
|
|
76
|
+
}
|
|
77
|
+
@keyframes fade-in {
|
|
78
|
+
0% {
|
|
79
|
+
filter: blur(3px);
|
|
80
|
+
opacity: 0;
|
|
81
|
+
}
|
|
82
|
+
100% {
|
|
83
|
+
filter: blur(0);
|
|
84
|
+
opacity: 1;
|
|
85
|
+
}
|
|
86
|
+
}</style>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
bg?: string | null | undefined;
|
|
6
|
+
fg?: string | null | undefined;
|
|
7
|
+
padding?: string | null | undefined;
|
|
8
|
+
width?: string | null | undefined;
|
|
9
|
+
height?: string | null | undefined;
|
|
10
|
+
};
|
|
11
|
+
events: {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
};
|
|
14
|
+
slots: {
|
|
15
|
+
default: {};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export type HeroProps = typeof __propDef.props;
|
|
19
|
+
export type HeroEvents = typeof __propDef.events;
|
|
20
|
+
export type HeroSlots = typeof __propDef.slots;
|
|
21
|
+
export default class Hero extends SvelteComponent<HeroProps, HeroEvents, HeroSlots> {
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
<script>import { injectVars } from "../util";
|
|
2
|
+
export let fg = null;
|
|
3
|
+
export let bg = null;
|
|
4
|
+
export let itemPadding = null;
|
|
5
|
+
export let itemWidth = null;
|
|
6
|
+
export let itemHeight = null;
|
|
7
|
+
export let itemFg = null;
|
|
8
|
+
export let itemBg = null;
|
|
9
|
+
export let itemEvenFg = null;
|
|
10
|
+
export let itemEvenBg = null;
|
|
11
|
+
export let itemActiveFg = null;
|
|
12
|
+
export let itemActiveBg = null;
|
|
13
|
+
let style = injectVars($$props, "menu", [
|
|
14
|
+
"fg",
|
|
15
|
+
"bg",
|
|
16
|
+
"itemPadding",
|
|
17
|
+
"itemWidth",
|
|
18
|
+
"itemHeight",
|
|
19
|
+
"itemFg",
|
|
20
|
+
"itemBg",
|
|
21
|
+
"itemEvenFg",
|
|
22
|
+
"itemEvenBg",
|
|
23
|
+
"itemActiveFg",
|
|
24
|
+
"itemActiveBg"
|
|
25
|
+
]);
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<ul {style} class="menu">
|
|
29
|
+
<slot />
|
|
30
|
+
</ul>
|
|
31
|
+
|
|
32
|
+
<style>/* Convenience groupings */
|
|
33
|
+
/* Warning: because we define a fallback
|
|
34
|
+
media query, the media query can override the container
|
|
35
|
+
if we stack a bunch of these in a row and aren't thoughtful about the order.
|
|
36
|
+
Put min-width queries *after* max-width queries so that smaller
|
|
37
|
+
container queries don't get their styles overridden by large media queries.
|
|
38
|
+
*/
|
|
39
|
+
.menu {
|
|
40
|
+
list-style: none;
|
|
41
|
+
padding: 0;
|
|
42
|
+
margin: 0;
|
|
43
|
+
background: var(--menu-bg, var(--container-bg, var(--bg, white)));
|
|
44
|
+
color: var(--menu-fg, var(--container-fg, var(--fg, black)));
|
|
45
|
+
}
|
|
46
|
+
.menu :global(a), .menu :global(button), .menu :global(input[type="submit"]), .menu :global(.button) {
|
|
47
|
+
display: flex;
|
|
48
|
+
justify-content: var(--menu-item-justify, center);
|
|
49
|
+
align-items: var(--menu-item-align, center);
|
|
50
|
+
width: var(--menu-item-width, 100%);
|
|
51
|
+
height: var(--menu-item-height);
|
|
52
|
+
text-decoration: none;
|
|
53
|
+
font-family: var(--menu-item-font-family, var(--button-font-family, var(--ui-font-family, var(--control-font-family, var(--font-family, sans-serif)))));
|
|
54
|
+
text-transform: var(--menu-item-text-transform, var(--button-text-transform, var(--ui-text-transform, var(--control-text-transform, var(--text-transform, none)))));
|
|
55
|
+
text-decoration: var(--menu-item-text-decoration, var(--button-text-decoration, var(--ui-text-decoration, var(--control-text-decoration, var(--text-decoration, none)))));
|
|
56
|
+
font-size: var(--menu-item-font-size, var(--button-font-size, var(--ui-font-size, var(--control-font-size, var(--font-size, 16px)))));
|
|
57
|
+
font-weight: var(--menu-item-font-weight, var(--button-font-weight, var(--ui-font-weight, var(--control-font-weight, var(--font-weight, 400)))));
|
|
58
|
+
line-height: var(--menu-item-line-height, var(--button-line-height, var(--ui-line-height, var(--control-line-height, var(--line-height, 1.5)))));
|
|
59
|
+
letter-spacing: var(--menu-item-letter-spacing, var(--button-letter-spacing, var(--ui-letter-spacing, var(--control-letter-spacing, var(--letter-spacing, 0.05em)))));
|
|
60
|
+
background: var(--menu-item-bg, var(--button-bg, var(--control-bg, var(--bg, white))));
|
|
61
|
+
color: var(--menu-item-fg, var(--button-fg, var(--control-fg, var(--fg, black))));
|
|
62
|
+
box-sizing: border-box;
|
|
63
|
+
border: var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))));
|
|
64
|
+
border-top: var(--menu-item-border-top, var(--button-border-top, var(--control-border-top, var(--border-top, var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))))))));
|
|
65
|
+
border-right: var(--menu-item-border-right, var(--button-border-right, var(--control-border-right, var(--border-right, var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))))))));
|
|
66
|
+
border-bottom: var(--menu-item-border-bottom, var(--button-border-bottom, var(--control-border-bottom, var(--border-bottom, var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))))))));
|
|
67
|
+
border-left: var(--menu-item-border-left, var(--button-border-left, var(--control-border-left, var(--border-left, var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))))))));
|
|
68
|
+
padding: var(--menu-item-padding, var(--button-padding, var(--control-padding, var(--padding, 4px))));
|
|
69
|
+
border-radius: var(--menu-item-square-radius, var(--button-square-radius, var(--control-square-radius, var(--square-radius, 0))));
|
|
70
|
+
cursor: pointer;
|
|
71
|
+
transition: filter, transform var(--button-transition, var(--control-transition, var(--transition, 300ms)));
|
|
72
|
+
}
|
|
73
|
+
.menu :global(a):hover, .menu :global(button):hover, .menu :global(input[type="submit"]):hover, .menu :global(.button):hover {
|
|
74
|
+
filter: var(--menu-item-hover-filter, var(--button-hover-filter, var(--control-hover-filter, var(--hover-filter, brightness(1.1)))));
|
|
75
|
+
transform: var(--menu-item-hover-transform, var(--button-hover-transform, var(--control-hover-transform, var(--hover-transform, none))));
|
|
76
|
+
}
|
|
77
|
+
.menu :global(a):active, .menu :global(button):active, .menu :global(input[type="submit"]):active, .menu :global(.button):active {
|
|
78
|
+
filter: var(--menu-item-hover-filter, var(--button-hover-filter, var(--control-hover-filter, var(--hover-filter, brightness(0.9)))));
|
|
79
|
+
transform: var(--menu-item-hover-transform, var(--button-hover-transform, var(--control-hover-transform, var(--hover-transform, translate(var(--space), var(--space))))));
|
|
80
|
+
}
|
|
81
|
+
.menu :global(.active) {
|
|
82
|
+
background: var(--menu-item-active-bg, var(--primary-bg, var(--menu-item-bg, var(--button-bg, var(--control-bg, var(--container-bg, var(--bg, white)))))));
|
|
83
|
+
color: var(--menu-item-active-fg, var(--primary-fg, var(--menu-item-fg, var(--button-fg, var(--control-fg, var(--container-fg, var(--fg, black)))))));
|
|
84
|
+
}
|
|
85
|
+
/* & :global(li:nth-of-type(even)) > {
|
|
86
|
+
@include global-buttons {
|
|
87
|
+
@include color-props(
|
|
88
|
+
menu-item-even,
|
|
89
|
+
stripe,
|
|
90
|
+
menu-item,
|
|
91
|
+
button,
|
|
92
|
+
control
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
& :global(li:nth-of-type(even)) :global(.active),
|
|
98
|
+
:global(li:nth-of-type(odd)) :global(.active) {
|
|
99
|
+
@include color-props(
|
|
100
|
+
menu-item-active,
|
|
101
|
+
primary,
|
|
102
|
+
menu-item,
|
|
103
|
+
button,
|
|
104
|
+
control,
|
|
105
|
+
container
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
} */</style>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
fg?: string | null | undefined;
|
|
6
|
+
bg?: string | null | undefined;
|
|
7
|
+
itemPadding?: string | null | undefined;
|
|
8
|
+
itemWidth?: string | null | undefined;
|
|
9
|
+
itemHeight?: string | null | undefined;
|
|
10
|
+
itemFg?: string | null | undefined;
|
|
11
|
+
itemBg?: string | null | undefined;
|
|
12
|
+
itemEvenFg?: string | null | undefined;
|
|
13
|
+
itemEvenBg?: string | null | undefined;
|
|
14
|
+
itemActiveFg?: string | null | undefined;
|
|
15
|
+
itemActiveBg?: string | null | undefined;
|
|
16
|
+
};
|
|
17
|
+
events: {
|
|
18
|
+
[evt: string]: CustomEvent<any>;
|
|
19
|
+
};
|
|
20
|
+
slots: {
|
|
21
|
+
default: {};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type MenuListProps = typeof __propDef.props;
|
|
25
|
+
export type MenuListEvents = typeof __propDef.events;
|
|
26
|
+
export type MenuListSlots = typeof __propDef.slots;
|
|
27
|
+
export default class MenuList extends SvelteComponent<MenuListProps, MenuListEvents, MenuListSlots> {
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
<script>import { injectVars } from "../util";
|
|
2
|
+
import { onDestroy, onMount } from "svelte";
|
|
3
|
+
export let right = false;
|
|
4
|
+
export let sticky = false;
|
|
5
|
+
export let hideSidebar = false;
|
|
6
|
+
export let hideHeader = false;
|
|
7
|
+
export let hideFooter = false;
|
|
8
|
+
export let contentPadding = null;
|
|
9
|
+
export let width = null;
|
|
10
|
+
export let height = null;
|
|
11
|
+
export let bg = null;
|
|
12
|
+
export let fg = null;
|
|
13
|
+
let style = injectVars($$props, "page", [
|
|
14
|
+
"bg",
|
|
15
|
+
"fg",
|
|
16
|
+
"contentPadding",
|
|
17
|
+
"width",
|
|
18
|
+
"height"
|
|
19
|
+
]);
|
|
20
|
+
let hasSidebar;
|
|
21
|
+
let hasHeader;
|
|
22
|
+
let hasFooter;
|
|
23
|
+
$:
|
|
24
|
+
hasSidebar = $$slots.sidebar && !hideSidebar;
|
|
25
|
+
$:
|
|
26
|
+
hasHeader = $$slots.header && !hideHeader;
|
|
27
|
+
$:
|
|
28
|
+
hasFooter = $$slots.footer && !hideFooter;
|
|
29
|
+
$:
|
|
30
|
+
console.log(
|
|
31
|
+
"Update to flags: header,footer,sidebar=",
|
|
32
|
+
hasHeader,
|
|
33
|
+
hasFooter,
|
|
34
|
+
hasSidebar
|
|
35
|
+
);
|
|
36
|
+
let freeze = false;
|
|
37
|
+
let pageElement;
|
|
38
|
+
function handleScroll() {
|
|
39
|
+
if (sticky) {
|
|
40
|
+
const rect = pageElement.getBoundingClientRect();
|
|
41
|
+
const computedTopStyle = getComputedStyle(pageElement).getPropertyValue("top");
|
|
42
|
+
const computedTop = parseFloat(computedTopStyle);
|
|
43
|
+
const isSticking = rect.top <= computedTop;
|
|
44
|
+
console.log("Freeze = ", !isSticking);
|
|
45
|
+
freeze = !isSticking;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
onMount(() => {
|
|
49
|
+
if (sticky) {
|
|
50
|
+
console.log("Add scroll handler in a sec");
|
|
51
|
+
let el = document.querySelector(window.location.hash);
|
|
52
|
+
console.log("Hash", window.location.hash, "points to ", el);
|
|
53
|
+
el?.scrollIntoView();
|
|
54
|
+
window.addEventListener("scroll", handleScroll);
|
|
55
|
+
}
|
|
56
|
+
return () => {
|
|
57
|
+
if (window) {
|
|
58
|
+
window.removeEventListener("scroll", handleScroll);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
<section
|
|
65
|
+
class="page"
|
|
66
|
+
class:freeze
|
|
67
|
+
class:right
|
|
68
|
+
class:sticky
|
|
69
|
+
class:hasHeader
|
|
70
|
+
class:hasSidebar
|
|
71
|
+
class:hasFooter
|
|
72
|
+
bind:this={pageElement}
|
|
73
|
+
{style}
|
|
74
|
+
>
|
|
75
|
+
<header>
|
|
76
|
+
<slot name="header" />
|
|
77
|
+
</header>
|
|
78
|
+
<div class="side-by-side">
|
|
79
|
+
<div class="aside">
|
|
80
|
+
<slot name="sidebar" />
|
|
81
|
+
</div>
|
|
82
|
+
<div class="content">
|
|
83
|
+
<slot />
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
<footer>
|
|
87
|
+
<slot name="footer" />
|
|
88
|
+
</footer>
|
|
89
|
+
</section>
|
|
90
|
+
|
|
91
|
+
<style>/* Convenience groupings */
|
|
92
|
+
/* Warning: because we define a fallback
|
|
93
|
+
media query, the media query can override the container
|
|
94
|
+
if we stack a bunch of these in a row and aren't thoughtful about the order.
|
|
95
|
+
Put min-width queries *after* max-width queries so that smaller
|
|
96
|
+
container queries don't get their styles overridden by large media queries.
|
|
97
|
+
*/
|
|
98
|
+
header {
|
|
99
|
+
display: none;
|
|
100
|
+
}
|
|
101
|
+
.hasHeader > header {
|
|
102
|
+
display: block;
|
|
103
|
+
}
|
|
104
|
+
footer {
|
|
105
|
+
display: none;
|
|
106
|
+
}
|
|
107
|
+
.hasFooter > footer {
|
|
108
|
+
display: block;
|
|
109
|
+
}
|
|
110
|
+
.aside {
|
|
111
|
+
display: none;
|
|
112
|
+
}
|
|
113
|
+
.hasSidebar > div > .aside {
|
|
114
|
+
display: flex;
|
|
115
|
+
}
|
|
116
|
+
.page {
|
|
117
|
+
background: var(--page-bg, var(--bg, white));
|
|
118
|
+
color: var(--page-fg, var(--fg, black));
|
|
119
|
+
border: var(--page-border);
|
|
120
|
+
height: var(--page-height, 100vh);
|
|
121
|
+
width: var(--page-width, 100%);
|
|
122
|
+
container-type: size;
|
|
123
|
+
display: flex;
|
|
124
|
+
flex-direction: column;
|
|
125
|
+
align-items: stretch;
|
|
126
|
+
justify-content: stretch;
|
|
127
|
+
}
|
|
128
|
+
.page.sticky {
|
|
129
|
+
position: sticky;
|
|
130
|
+
top: 0;
|
|
131
|
+
}
|
|
132
|
+
.header {
|
|
133
|
+
flex-shrink: 1;
|
|
134
|
+
}
|
|
135
|
+
.content {
|
|
136
|
+
overflow-y: auto;
|
|
137
|
+
scrollbar-width: var(--page-content-scrollbar-width, var(--page-scrollbar-width, var(--scrollbar-width, thin)));
|
|
138
|
+
scrollbar-color: var(--page-content-scrollbar-thumb-bg, var(--page-scrollbar-thumb-bg, var(--scrollbar-thumb-bg, #888))) var(--page-content-scrollbar-track-bg, var(--page-scrollbar-track-bg, var(--scrollbar-track-bg, var(--border-color))));
|
|
139
|
+
box-sizing: border-box;
|
|
140
|
+
padding: var(--page-content-padding, var(--padding, 4px));
|
|
141
|
+
border: var(--page-content-border, var(--border, none));
|
|
142
|
+
border-top: var(--page-content-border-top, var(--border-top, var(--page-content-border, var(--border, none))));
|
|
143
|
+
border-right: var(--page-content-border-right, var(--border-right, var(--page-content-border, var(--border, none))));
|
|
144
|
+
border-bottom: var(--page-content-border-bottom, var(--border-bottom, var(--page-content-border, var(--border, none))));
|
|
145
|
+
border-left: var(--page-content-border-left, var(--border-left, var(--page-content-border, var(--border, none))));
|
|
146
|
+
border-radius: var(--page-content-border-radius, var(--border-radius, none));
|
|
147
|
+
}
|
|
148
|
+
.content::-webkit-scrollbar {
|
|
149
|
+
width: var(--page-content-scrollbar-width, var(--page-scrollbar-width, var(--scrollbar-width, var(--space-md))));
|
|
150
|
+
height: var(--page-content-scrollbar-height, var(--page-scrollbar-height, var(--scrollbar-height, var(--gap))));
|
|
151
|
+
}
|
|
152
|
+
.content::-webkit-scrollbar-track {
|
|
153
|
+
background: var(--page-content-scrollbar-track-bg, var(--page-scrollbar-track-bg, var(--scrollbar-track-bg, var(--bg))));
|
|
154
|
+
}
|
|
155
|
+
.content::-webkit-scrollbar-thumb {
|
|
156
|
+
background: var(--page-content-scrollbar-thumb-bg, var(--page-scrollbar-thumb-bg, var(--scrollbar-thumb-bg, var(--stripe-bg))));
|
|
157
|
+
border-radius: var(--page-content-scrollbar-thumb-radius, var(--page-scrollbar-thumb-radius, var(--scrollbar-thumb-radius, var(--border-radius))));
|
|
158
|
+
}
|
|
159
|
+
.content::-webkit-scrollbar-thumb:hover {
|
|
160
|
+
background: var(--page-content-scrollbar-thumb-hover-bg, var(--page-scrollbar-thumb-hover-bg, var(--scrollbar-thumb-hover-bg, var(--secondary-bg))));
|
|
161
|
+
}
|
|
162
|
+
.aside {
|
|
163
|
+
flex: 0 0 auto;
|
|
164
|
+
}
|
|
165
|
+
.side-by-side {
|
|
166
|
+
flex-grow: 1;
|
|
167
|
+
display: flex;
|
|
168
|
+
flex-direction: row;
|
|
169
|
+
align-items: stretch;
|
|
170
|
+
justify-content: stretch;
|
|
171
|
+
overflow: hidden;
|
|
172
|
+
margin: 0;
|
|
173
|
+
box-sizing: border-box;
|
|
174
|
+
gap: var(--column-gap);
|
|
175
|
+
padding: var(--padding);
|
|
176
|
+
}
|
|
177
|
+
.right .side-by-side {
|
|
178
|
+
flex-direction: row-reverse;
|
|
179
|
+
}
|
|
180
|
+
.page .content {
|
|
181
|
+
container-type: size;
|
|
182
|
+
height: 100%;
|
|
183
|
+
width: 100%;
|
|
184
|
+
background: var(--bg);
|
|
185
|
+
color: var(--text);
|
|
186
|
+
}
|
|
187
|
+
.page.sticky.freeze :global(*) {
|
|
188
|
+
overflow: hidden;
|
|
189
|
+
}</style>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
right?: boolean | undefined;
|
|
6
|
+
sticky?: boolean | undefined;
|
|
7
|
+
hideSidebar?: boolean | undefined;
|
|
8
|
+
hideHeader?: boolean | undefined;
|
|
9
|
+
hideFooter?: boolean | undefined;
|
|
10
|
+
contentPadding?: string | null | undefined;
|
|
11
|
+
width?: string | null | undefined;
|
|
12
|
+
height?: string | null | undefined;
|
|
13
|
+
bg?: string | null | undefined;
|
|
14
|
+
fg?: string | null | undefined;
|
|
15
|
+
};
|
|
16
|
+
events: {
|
|
17
|
+
[evt: string]: CustomEvent<any>;
|
|
18
|
+
};
|
|
19
|
+
slots: {
|
|
20
|
+
header: {};
|
|
21
|
+
sidebar: {};
|
|
22
|
+
default: {};
|
|
23
|
+
footer: {};
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export type PageProps = typeof __propDef.props;
|
|
27
|
+
export type PageEvents = typeof __propDef.events;
|
|
28
|
+
export type PageSlots = typeof __propDef.slots;
|
|
29
|
+
export default class Page extends SvelteComponent<PageProps, PageEvents, PageSlots> {
|
|
30
|
+
}
|
|
31
|
+
export {};
|