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,109 @@
|
|
|
1
|
+
<script>export let group;
|
|
2
|
+
export let value;
|
|
3
|
+
import { injectVars } from "../util";
|
|
4
|
+
export let bg = null;
|
|
5
|
+
export let fg = null;
|
|
6
|
+
export let padding = null;
|
|
7
|
+
export let width = null;
|
|
8
|
+
export let height = null;
|
|
9
|
+
let style = injectVars($$props, "radio-button", [
|
|
10
|
+
"bg",
|
|
11
|
+
"fg",
|
|
12
|
+
"padding",
|
|
13
|
+
"width",
|
|
14
|
+
"height"
|
|
15
|
+
]);
|
|
16
|
+
let ref;
|
|
17
|
+
let labelContent;
|
|
18
|
+
let labelWidth;
|
|
19
|
+
$: {
|
|
20
|
+
if (ref) {
|
|
21
|
+
labelContent = ref.innerHTML;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<label>
|
|
27
|
+
<input {value} type="radio" bind:group />
|
|
28
|
+
<span style:--label-width="{labelWidth + 4}px" bind:this={ref}><slot /></span>
|
|
29
|
+
</label>
|
|
30
|
+
<!-- Off-screen span for measuring -->
|
|
31
|
+
<span class="offscreen" bind:clientWidth={labelWidth}>{@html labelContent}</span
|
|
32
|
+
>
|
|
33
|
+
|
|
34
|
+
<style>@charset "UTF-8";
|
|
35
|
+
/* Convenience groupings */
|
|
36
|
+
/* Warning: because we define a fallback
|
|
37
|
+
media query, the media query can override the container
|
|
38
|
+
if we stack a bunch of these in a row and aren't thoughtful about the order.
|
|
39
|
+
Put min-width queries *after* max-width queries so that smaller
|
|
40
|
+
container queries don't get their styles overridden by large media queries.
|
|
41
|
+
*/
|
|
42
|
+
:root {
|
|
43
|
+
/* Customize these variables for radio button styling */
|
|
44
|
+
--radio-button-dot: "•";
|
|
45
|
+
}
|
|
46
|
+
/* Styles will be similar to the checkbox, with appropriate adjustments */
|
|
47
|
+
/* ... (rest of your styles adapted for radio button) ... */
|
|
48
|
+
.offscreen,
|
|
49
|
+
label {
|
|
50
|
+
font-family: var(--radio-button-font-family, var(--ui-font-family, var(--font-family, sans-serif)));
|
|
51
|
+
text-transform: var(--radio-button-text-transform, var(--ui-text-transform, var(--text-transform, none)));
|
|
52
|
+
text-decoration: var(--radio-button-text-decoration, var(--ui-text-decoration, var(--text-decoration, none)));
|
|
53
|
+
font-size: var(--radio-button-font-size, var(--ui-font-size, var(--font-size, 16px)));
|
|
54
|
+
font-weight: var(--radio-button-font-weight, var(--ui-font-weight, var(--font-weight, 400)));
|
|
55
|
+
line-height: var(--radio-button-line-height, var(--ui-line-height, var(--line-height, 1.5)));
|
|
56
|
+
letter-spacing: var(--radio-button-letter-spacing, var(--ui-letter-spacing, var(--letter-spacing, 0.05em)));
|
|
57
|
+
}
|
|
58
|
+
.offscreen {
|
|
59
|
+
visibility: hidden;
|
|
60
|
+
font-weight: var(--radio-button-checked-weight, var(--checked-weight, var(--weight, active)));
|
|
61
|
+
position: absolute;
|
|
62
|
+
}
|
|
63
|
+
label {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
box-sizing: border-box;
|
|
67
|
+
user-select: none;
|
|
68
|
+
gap: var(--radio-button-space, var(--toggle-space, var(--space-md)));
|
|
69
|
+
cursor: pointer;
|
|
70
|
+
transition: filter, transform var(--button-transition, var(--control-transition, var(--transition, 300ms)));
|
|
71
|
+
}
|
|
72
|
+
label:hover {
|
|
73
|
+
filter: var(--radio-button-hover-filter, var(--clickable-hover-filter, var(--hover-filter, brightness(1.1))));
|
|
74
|
+
transform: var(--radio-button-hover-transform, var(--clickable-hover-transform, var(--hover-transform, none)));
|
|
75
|
+
}
|
|
76
|
+
label:active {
|
|
77
|
+
filter: var(--radio-button-hover-filter, var(--clickable-hover-filter, var(--hover-filter, brightness(0.9))));
|
|
78
|
+
transform: var(--radio-button-hover-transform, var(--clickable-hover-transform, var(--hover-transform, translate(var(--space), var(--space)))));
|
|
79
|
+
}
|
|
80
|
+
label span {
|
|
81
|
+
width: var(--label-width);
|
|
82
|
+
}
|
|
83
|
+
label:has(input:checked) {
|
|
84
|
+
font-weight: var(--radio-button-checked-weight, var(--checked-weight, var(--weight, active)));
|
|
85
|
+
}
|
|
86
|
+
input[type=radio] {
|
|
87
|
+
display: none;
|
|
88
|
+
}
|
|
89
|
+
label::before {
|
|
90
|
+
transition: all var(--radio-button-transition, var(--transition, control));
|
|
91
|
+
display: inline-grid;
|
|
92
|
+
place-content: center;
|
|
93
|
+
content: " ";
|
|
94
|
+
width: var(--radio-button-size, var(--font-size, var(--size, 1em)));
|
|
95
|
+
height: var(--radio-button-size, var(--font-size, var(--size, 1em)));
|
|
96
|
+
background: var(--radio-button-bg, var(--toggle-bg, var(--inactive-bg, var(--secondary-bg, var(--bg, white)))));
|
|
97
|
+
color: var(--radio-button-fg, var(--toggle-fg, var(--inactive-fg, var(--secondary-fg, var(--fg, black)))));
|
|
98
|
+
border: var(--radio-button-border, var(--border, 1px solid var(--border-color)));
|
|
99
|
+
box-sizing: border-box;
|
|
100
|
+
border-radius: var(--radio-button-border-radius, 50%);
|
|
101
|
+
}
|
|
102
|
+
label:has(input:checked)::before {
|
|
103
|
+
background: var(--radio-button-checked-bg, var(--toggle-on-bg, var(--primary-bg, var(--radio-button-bg, var(--bg, white)))));
|
|
104
|
+
color: var(--radio-button-checked-fg, var(--toggle-on-fg, var(--primary-fg, var(--radio-button-fg, var(--fg, black)))));
|
|
105
|
+
border: var(--radio-button-checked-border, var(--toggle-on-border, var(--border, radio-button)));
|
|
106
|
+
box-sizing: border-box;
|
|
107
|
+
width: var(--radio-button-size, var(--toggle-size, var(--font-size, var(--size, 1em))));
|
|
108
|
+
height: var(--radio-button-size, var(--toggle-size, var(--font-size, var(--size, 1em))));
|
|
109
|
+
}</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
group: string;
|
|
6
|
+
value: any;
|
|
7
|
+
bg?: string | null | undefined;
|
|
8
|
+
fg?: string | null | undefined;
|
|
9
|
+
padding?: string | null | undefined;
|
|
10
|
+
width?: string | null | undefined;
|
|
11
|
+
height?: string | null | undefined;
|
|
12
|
+
};
|
|
13
|
+
events: {
|
|
14
|
+
[evt: string]: CustomEvent<any>;
|
|
15
|
+
};
|
|
16
|
+
slots: {
|
|
17
|
+
default: {};
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export type RadioButtonProps = typeof __propDef.props;
|
|
21
|
+
export type RadioButtonEvents = typeof __propDef.events;
|
|
22
|
+
export type RadioButtonSlots = typeof __propDef.slots;
|
|
23
|
+
export default class RadioButton extends SvelteComponent<RadioButtonProps, RadioButtonEvents, RadioButtonSlots> {
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
<script>import DropdownMenu from "../dropdowns/DropdownMenu.svelte";
|
|
2
|
+
import { onMount, tick } from "svelte";
|
|
3
|
+
export let value;
|
|
4
|
+
let selectElement;
|
|
5
|
+
let observer;
|
|
6
|
+
onMount(async () => {
|
|
7
|
+
await tick();
|
|
8
|
+
updateOptions();
|
|
9
|
+
observer = new MutationObserver((mutations) => {
|
|
10
|
+
mutations.forEach((mutation) => {
|
|
11
|
+
if (mutation.type === "childList") {
|
|
12
|
+
updateOptions();
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
observer.observe(selectElement, { childList: true });
|
|
17
|
+
return () => observer.disconnect();
|
|
18
|
+
});
|
|
19
|
+
let options = [];
|
|
20
|
+
let activeOption = null;
|
|
21
|
+
function updateOptions() {
|
|
22
|
+
if (!selectElement) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
options = [];
|
|
26
|
+
let optionEls = selectElement.querySelectorAll("option");
|
|
27
|
+
let newOptions = [];
|
|
28
|
+
for (let optionEl of optionEls) {
|
|
29
|
+
options.push({
|
|
30
|
+
value: optionEl.value,
|
|
31
|
+
html: optionEl.innerHTML
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
activeOption = options[selectElement.selectedIndex];
|
|
35
|
+
}
|
|
36
|
+
function setValue(idx) {
|
|
37
|
+
console.log("Button to set", idx);
|
|
38
|
+
selectElement.selectedIndex = idx;
|
|
39
|
+
selectElement.dispatchEvent(new Event("change"));
|
|
40
|
+
activeOption = options[idx];
|
|
41
|
+
}
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<select bind:value on:change bind:this={selectElement}>
|
|
45
|
+
<slot />
|
|
46
|
+
</select>
|
|
47
|
+
<div class="dropdown-wrapper">
|
|
48
|
+
<DropdownMenu>
|
|
49
|
+
<span class="select-dropdown" slot="label">
|
|
50
|
+
<span>
|
|
51
|
+
{#if activeOption}{@html activeOption.html}{:else}-{/if}
|
|
52
|
+
</span>
|
|
53
|
+
</span>
|
|
54
|
+
{#each options as option, index}
|
|
55
|
+
<li>
|
|
56
|
+
<button on:click={() => setValue(index)}>{@html option.html} </button>
|
|
57
|
+
</li>
|
|
58
|
+
{/each}
|
|
59
|
+
</DropdownMenu>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<style>@charset "UTF-8";
|
|
63
|
+
/* Convenience groupings */
|
|
64
|
+
/* Warning: because we define a fallback
|
|
65
|
+
media query, the media query can override the container
|
|
66
|
+
if we stack a bunch of these in a row and aren't thoughtful about the order.
|
|
67
|
+
Put min-width queries *after* max-width queries so that smaller
|
|
68
|
+
container queries don't get their styles overridden by large media queries.
|
|
69
|
+
*/
|
|
70
|
+
select,
|
|
71
|
+
.dropdown-wrapper {
|
|
72
|
+
box-sizing: border-box;
|
|
73
|
+
border: var(--select-border, var(--input-border, var(--menu-border, var(--control-border, var(--container-border, var(--border, var(--border-width, 1px) var(--border-style, solid) var(--border-color, var(--fg))))))));
|
|
74
|
+
border-top: var(--select-border-top, var(--input-border-top, var(--menu-border-top, var(--control-border-top, var(--container-border-top, var(--border-top, var(--select-border, var(--input-border, var(--menu-border, var(--control-border, var(--border, container)))))))))));
|
|
75
|
+
border-right: var(--select-border-right, var(--input-border-right, var(--menu-border-right, var(--control-border-right, var(--container-border-right, var(--border-right, var(--select-border, var(--input-border, var(--menu-border, var(--control-border, var(--border, container)))))))))));
|
|
76
|
+
border-bottom: var(--select-border-bottom, var(--input-border-bottom, var(--menu-border-bottom, var(--control-border-bottom, var(--container-border-bottom, var(--border-bottom, var(--select-border, var(--input-border, var(--menu-border, var(--control-border, var(--border, container)))))))))));
|
|
77
|
+
border-left: var(--select-border-left, var(--input-border-left, var(--menu-border-left, var(--control-border-left, var(--container-border-left, var(--border-left, var(--select-border, var(--input-border, var(--menu-border, var(--control-border, var(--border, container)))))))))));
|
|
78
|
+
padding: var(--select-padding, var(--input-padding, var(--menu-padding, var(--control-padding, var(--container-padding, var(--padding, 4px))))));
|
|
79
|
+
border-radius: var(--select-square-radius, var(--input-square-radius, var(--menu-square-radius, var(--control-square-radius, var(--container-square-radius, var(--square-radius, 0))))));
|
|
80
|
+
background: var(--select-bg, var(--input-bg, var(--menu-bg, var(--control-bg, var(--container-bg, var(--bg, white))))));
|
|
81
|
+
color: var(--select-fg, var(--input-fg, var(--menu-fg, var(--control-fg, var(--container-fg, var(--fg, black))))));
|
|
82
|
+
width: var(--select-width, var(--dropdown-menu-width, 12em));
|
|
83
|
+
}
|
|
84
|
+
.select-dropdown {
|
|
85
|
+
display: inline-flex;
|
|
86
|
+
width: var(--select-width, var(--dropdown-menu-width, 12em));
|
|
87
|
+
box-sizing: border-box;
|
|
88
|
+
}
|
|
89
|
+
.dropdown-wrapper {
|
|
90
|
+
background: var(--select-bg, var(--input-bg, var(--menu-bg, var(--control-bg, var(--container-bg, var(--bg, white))))));
|
|
91
|
+
color: var(--select-fg, var(--input-fg, var(--menu-fg, var(--control-fg, var(--container-fg, var(--fg, black))))));
|
|
92
|
+
}
|
|
93
|
+
.dropdown-menu :global(.dropdown-menu) > :global(button) {
|
|
94
|
+
background-color: inherit;
|
|
95
|
+
color: inherit;
|
|
96
|
+
}
|
|
97
|
+
.select-dropdown {
|
|
98
|
+
position: relative;
|
|
99
|
+
}
|
|
100
|
+
.select-dropdown::after {
|
|
101
|
+
content: var(--select-arrow, "⌄"); /* ↓ */
|
|
102
|
+
margin-left: auto;
|
|
103
|
+
transform: scaleX(1.5) translateY(-50%);
|
|
104
|
+
display: inline-grid;
|
|
105
|
+
width: 1em;
|
|
106
|
+
place-content: center;
|
|
107
|
+
position: absolute;
|
|
108
|
+
right: var(--padding);
|
|
109
|
+
top: 50%;
|
|
110
|
+
}
|
|
111
|
+
:global(.open) .select-dropdown::after {
|
|
112
|
+
transform: rotate(180deg) scaleX(1.5);
|
|
113
|
+
}
|
|
114
|
+
select {
|
|
115
|
+
display: none;
|
|
116
|
+
}
|
|
117
|
+
.dropdown-wrapper {
|
|
118
|
+
display: contents;
|
|
119
|
+
}
|
|
120
|
+
@media (max-width: 600px) {
|
|
121
|
+
select {
|
|
122
|
+
display: inline-block;
|
|
123
|
+
}
|
|
124
|
+
.dropdown-wrapper {
|
|
125
|
+
display: none;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
@container (max-width: 600px) {
|
|
129
|
+
select {
|
|
130
|
+
display: inline-block;
|
|
131
|
+
}
|
|
132
|
+
.dropdown-wrapper {
|
|
133
|
+
display: none;
|
|
134
|
+
}
|
|
135
|
+
}</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
value: any;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
change: Event;
|
|
8
|
+
} & {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {
|
|
12
|
+
default: {};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export type SelectProps = typeof __propDef.props;
|
|
16
|
+
export type SelectEvents = typeof __propDef.events;
|
|
17
|
+
export type SelectSlots = typeof __propDef.slots;
|
|
18
|
+
export default class Select extends SvelteComponent<SelectProps, SelectEvents, SelectSlots> {
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let value = 0;
|
|
3
|
+
export let min = 0;
|
|
4
|
+
export let max = 100;
|
|
5
|
+
export let step = 1;
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<input type="range" bind:value {min} {max} {step} />
|
|
9
|
+
|
|
10
|
+
<style>
|
|
11
|
+
:root {
|
|
12
|
+
--slider-button-color: var(--primary-bg);
|
|
13
|
+
--slider-button-radius: 50%;
|
|
14
|
+
--slider-line-color: var(--fg);
|
|
15
|
+
/* Add more variables and styles as needed */
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
input[type="range"] {
|
|
19
|
+
/* Apply your custom styles here */
|
|
20
|
+
background: transparent;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Slider Thumb */
|
|
24
|
+
input[type="range"]::-webkit-slider-thumb {
|
|
25
|
+
-webkit-appearance: none;
|
|
26
|
+
background: var(--slider-button-color);
|
|
27
|
+
border-radius: 3px;
|
|
28
|
+
width: 18px;
|
|
29
|
+
/* More styles for the thumb */
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
input[type="range"]::-moz-range-thumb {
|
|
33
|
+
/* Styles for Firefox */
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Slider Track */
|
|
37
|
+
input[type="range"]::-webkit-slider-runnable-track {
|
|
38
|
+
background: var(--slider-line-color);
|
|
39
|
+
/* More styles for the track */
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
input[type="range"]::-moz-range-track {
|
|
43
|
+
/* Styles for Firefox */
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} SliderProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} SliderEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} SliderSlots */
|
|
4
|
+
export default class Slider extends SvelteComponent<{
|
|
5
|
+
value?: number | undefined;
|
|
6
|
+
min?: number | undefined;
|
|
7
|
+
max?: number | undefined;
|
|
8
|
+
step?: number | undefined;
|
|
9
|
+
}, {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
}, {}> {
|
|
12
|
+
}
|
|
13
|
+
export type SliderProps = typeof __propDef.props;
|
|
14
|
+
export type SliderEvents = typeof __propDef.events;
|
|
15
|
+
export type SliderSlots = typeof __propDef.slots;
|
|
16
|
+
import { SvelteComponent } from "svelte";
|
|
17
|
+
declare const __propDef: {
|
|
18
|
+
props: {
|
|
19
|
+
value?: number | undefined;
|
|
20
|
+
min?: number | undefined;
|
|
21
|
+
max?: number | undefined;
|
|
22
|
+
step?: number | undefined;
|
|
23
|
+
};
|
|
24
|
+
events: {
|
|
25
|
+
[evt: string]: CustomEvent<any>;
|
|
26
|
+
};
|
|
27
|
+
slots: {};
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script>import { injectVars } from "../util";
|
|
2
|
+
import Button from "./Button.svelte";
|
|
3
|
+
export let primary = false;
|
|
4
|
+
export let warning = false;
|
|
5
|
+
let iconSlotted = $$slots.icon;
|
|
6
|
+
export let bg = null;
|
|
7
|
+
export let fg = null;
|
|
8
|
+
export let padding = null;
|
|
9
|
+
export let width = null;
|
|
10
|
+
export let height = null;
|
|
11
|
+
export let active;
|
|
12
|
+
let style = injectVars($$props, "tab", [
|
|
13
|
+
"bg",
|
|
14
|
+
"fg",
|
|
15
|
+
"padding",
|
|
16
|
+
"width",
|
|
17
|
+
"height"
|
|
18
|
+
]);
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<div class="tab" class:active {style}>
|
|
22
|
+
<Button on:click primary={active}>
|
|
23
|
+
<span slot="icon"><slot name="icon" /></span>
|
|
24
|
+
<span><slot /></span>
|
|
25
|
+
</Button>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<style>/* Convenience groupings */
|
|
29
|
+
/* Warning: because we define a fallback
|
|
30
|
+
media query, the media query can override the container
|
|
31
|
+
if we stack a bunch of these in a row and aren't thoughtful about the order.
|
|
32
|
+
Put min-width queries *after* max-width queries so that smaller
|
|
33
|
+
container queries don't get their styles overridden by large media queries.
|
|
34
|
+
*/
|
|
35
|
+
div,
|
|
36
|
+
span {
|
|
37
|
+
display: contents;
|
|
38
|
+
}
|
|
39
|
+
div > :global(button) {
|
|
40
|
+
background: var(--tab-bg, var(--button-bg, var(--control-bg, var(--secondary-bg, var(--bg, white)))));
|
|
41
|
+
color: var(--tab-fg, var(--button-fg, var(--control-fg, var(--secondary-fg, var(--fg, black)))));
|
|
42
|
+
box-sizing: border-box;
|
|
43
|
+
padding: var(--tab-padding, var(--button-padding, var(--control-padding, var(--secondary-padding, var(--padding, 4px)))));
|
|
44
|
+
border: var(--tab-border, var(--button-border, var(--control-border, var(--secondary-border, var(--border, none)))));
|
|
45
|
+
border-top: var(--tab-border-top, var(--button-border-top, var(--control-border-top, var(--secondary-border-top, var(--border-top, var(--tab-border, var(--button-border, var(--control-border, var(--secondary-border, var(--border, none))))))))));
|
|
46
|
+
border-right: var(--tab-border-right, var(--button-border-right, var(--control-border-right, var(--secondary-border-right, var(--border-right, var(--tab-border, var(--button-border, var(--control-border, var(--secondary-border, var(--border, none))))))))));
|
|
47
|
+
border-bottom: var(--tab-border-bottom, var(--button-border-bottom, var(--control-border-bottom, var(--secondary-border-bottom, var(--border-bottom, var(--tab-border, var(--button-border, var(--control-border, var(--secondary-border, var(--border, none))))))))));
|
|
48
|
+
border-left: var(--tab-border-left, var(--button-border-left, var(--control-border-left, var(--secondary-border-left, var(--border-left, var(--tab-border, var(--button-border, var(--control-border, var(--secondary-border, var(--border, none))))))))));
|
|
49
|
+
border-radius: var(--tab-border-radius, var(--button-border-radius, var(--control-border-radius, var(--secondary-border-radius, var(--border-radius, none)))));
|
|
50
|
+
border-radius: var(--tab-border-radius, var(--border-radius) var(--border-radius) 0 0);
|
|
51
|
+
margin: 0;
|
|
52
|
+
}
|
|
53
|
+
div.active > :global(button) {
|
|
54
|
+
background: var(--tab-active-bg, var(--primary-bg, var(--tab-bg, var(--button-bg, var(--control-bg, var(--secondary-bg, var(--bg, white)))))));
|
|
55
|
+
color: var(--tab-active-fg, var(--primary-fg, var(--tab-fg, var(--button-fg, var(--control-fg, var(--secondary-fg, var(--fg, black)))))));
|
|
56
|
+
}</style>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
primary?: boolean | undefined;
|
|
6
|
+
warning?: boolean | undefined;
|
|
7
|
+
bg?: string | null | undefined;
|
|
8
|
+
fg?: string | null | undefined;
|
|
9
|
+
padding?: string | null | undefined;
|
|
10
|
+
width?: string | null | undefined;
|
|
11
|
+
height?: string | null | undefined;
|
|
12
|
+
active: boolean;
|
|
13
|
+
};
|
|
14
|
+
events: {
|
|
15
|
+
click: MouseEvent;
|
|
16
|
+
} & {
|
|
17
|
+
[evt: string]: CustomEvent<any>;
|
|
18
|
+
};
|
|
19
|
+
slots: {
|
|
20
|
+
icon: {};
|
|
21
|
+
default: {};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type TabItemProps = typeof __propDef.props;
|
|
25
|
+
export type TabItemEvents = typeof __propDef.events;
|
|
26
|
+
export type TabItemSlots = typeof __propDef.slots;
|
|
27
|
+
export default class TabItem extends SvelteComponent<TabItemProps, TabItemEvents, TabItemSlots> {
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const cssProperties: string[];
|
package/dist/cssprops.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/* A convenient list of all the css variables (custom properties) in our library */
|
|
2
|
+
import { compile } from "svelte/compiler";
|
|
3
|
+
const plainProps = [
|
|
4
|
+
"--border-color",
|
|
5
|
+
"--border-radius",
|
|
6
|
+
"--border-style",
|
|
7
|
+
"--border-width",
|
|
8
|
+
"--bold",
|
|
9
|
+
"--font-size",
|
|
10
|
+
"--font-size-small",
|
|
11
|
+
"--first-heading-margin",
|
|
12
|
+
"--white",
|
|
13
|
+
"--black",
|
|
14
|
+
"--text",
|
|
15
|
+
"--text-size",
|
|
16
|
+
"--transition",
|
|
17
|
+
"--ui-font",
|
|
18
|
+
"--greyed-out-filter",
|
|
19
|
+
"stripe-bg",
|
|
20
|
+
"--space",
|
|
21
|
+
"--space-md",
|
|
22
|
+
"--space-lg",
|
|
23
|
+
"--space-xl",
|
|
24
|
+
"--shadow-distance",
|
|
25
|
+
"--shadow-color",
|
|
26
|
+
"--shadow-blur",
|
|
27
|
+
"icon-size",
|
|
28
|
+
];
|
|
29
|
+
const colorProps = [
|
|
30
|
+
"--primary-bg",
|
|
31
|
+
"--primary-fg",
|
|
32
|
+
"--secondary-bg",
|
|
33
|
+
"--secondary-fg",
|
|
34
|
+
"--inactive-bg",
|
|
35
|
+
"--inactive-fg",
|
|
36
|
+
];
|
|
37
|
+
const miscComponentProps = [
|
|
38
|
+
"--dropdown-transition",
|
|
39
|
+
"--column-gap",
|
|
40
|
+
"--split-pane-width",
|
|
41
|
+
"--split-pane-right-width",
|
|
42
|
+
"--split-pane-left-width",
|
|
43
|
+
"--sidebar-collapse",
|
|
44
|
+
"--sidebar-expand",
|
|
45
|
+
"--sidebar-transition",
|
|
46
|
+
"--resizer-grab-width",
|
|
47
|
+
"--resizer-grab-height",
|
|
48
|
+
"--resizer-color",
|
|
49
|
+
"--resizer-border",
|
|
50
|
+
"--radio-button-space",
|
|
51
|
+
"--mirror-sidebar-icons",
|
|
52
|
+
];
|
|
53
|
+
const flex = ["justify", "align", "gap"];
|
|
54
|
+
const color = ["fg", "bg"];
|
|
55
|
+
const typography = [
|
|
56
|
+
"font-family",
|
|
57
|
+
"text-transform",
|
|
58
|
+
"font-weight",
|
|
59
|
+
"font-size",
|
|
60
|
+
"line-height",
|
|
61
|
+
"letter-spacing",
|
|
62
|
+
"text-decoration",
|
|
63
|
+
];
|
|
64
|
+
const ctypography = [...typography, "body-font-family"];
|
|
65
|
+
const box = [
|
|
66
|
+
"padding",
|
|
67
|
+
"border",
|
|
68
|
+
"margin",
|
|
69
|
+
"border-bottom",
|
|
70
|
+
"border-top",
|
|
71
|
+
"border-left",
|
|
72
|
+
"border-right",
|
|
73
|
+
"border-radius",
|
|
74
|
+
];
|
|
75
|
+
const size = [
|
|
76
|
+
"width",
|
|
77
|
+
"height",
|
|
78
|
+
"min-width",
|
|
79
|
+
"min-height",
|
|
80
|
+
"max-width",
|
|
81
|
+
"max-height",
|
|
82
|
+
];
|
|
83
|
+
const clickable = [
|
|
84
|
+
"hover-filter",
|
|
85
|
+
"hover-transform",
|
|
86
|
+
"active-filter",
|
|
87
|
+
"active-transform",
|
|
88
|
+
"transition",
|
|
89
|
+
];
|
|
90
|
+
const scrollable = [
|
|
91
|
+
"scrollbar-width",
|
|
92
|
+
"scrollbar-height",
|
|
93
|
+
"scrollbar-track-bg",
|
|
94
|
+
"scrollbar-thumb-radius",
|
|
95
|
+
"scrollbar-thumb-hover-bg",
|
|
96
|
+
"scrollbar-thumb-bg",
|
|
97
|
+
];
|
|
98
|
+
const adaptiveSizes = [
|
|
99
|
+
"width-small",
|
|
100
|
+
"height-small",
|
|
101
|
+
"width",
|
|
102
|
+
"height",
|
|
103
|
+
"width-large",
|
|
104
|
+
"height-large",
|
|
105
|
+
];
|
|
106
|
+
const genericProps = Array.from(new Set([
|
|
107
|
+
...color,
|
|
108
|
+
...flex,
|
|
109
|
+
...ctypography,
|
|
110
|
+
...box,
|
|
111
|
+
...size,
|
|
112
|
+
...clickable,
|
|
113
|
+
...scrollable,
|
|
114
|
+
...adaptiveSizes,
|
|
115
|
+
])).map((prop) => `--${prop}`);
|
|
116
|
+
export const cssProperties = Array.from(new Set([
|
|
117
|
+
...genericProps,
|
|
118
|
+
...miscComponentProps,
|
|
119
|
+
...plainProps,
|
|
120
|
+
...colorProps,
|
|
121
|
+
]));
|
|
122
|
+
/* Now we get the list of component props... */
|
|
123
|
+
const components = [
|
|
124
|
+
...[
|
|
125
|
+
"button",
|
|
126
|
+
"mini-button",
|
|
127
|
+
"menu-item",
|
|
128
|
+
"dropdown-menu",
|
|
129
|
+
"select",
|
|
130
|
+
"checkbox",
|
|
131
|
+
"checkbox-checked",
|
|
132
|
+
"control",
|
|
133
|
+
"ui",
|
|
134
|
+
"tab-item",
|
|
135
|
+
].map((component) => ({
|
|
136
|
+
component,
|
|
137
|
+
props: [],
|
|
138
|
+
propnames: [...box, ...color, ...clickable, ...typography, ...size],
|
|
139
|
+
})),
|
|
140
|
+
...["container", "card", "page", "sidebar", "hero"].map((component) => ({
|
|
141
|
+
component,
|
|
142
|
+
props: [],
|
|
143
|
+
propnames: [...box, ...color, ...ctypography, ...size, ...scrollable],
|
|
144
|
+
})),
|
|
145
|
+
...["tab-bar", "bar", "form-item"].map((component) => ({
|
|
146
|
+
component,
|
|
147
|
+
props: [],
|
|
148
|
+
propnames: [...box, ...color, ...typography, ...size, ...flex],
|
|
149
|
+
})),
|
|
150
|
+
...["heading", "form-label", "form-item"].map((component) => ({
|
|
151
|
+
component,
|
|
152
|
+
props: [],
|
|
153
|
+
propnames: [...typography, ...color, ...box],
|
|
154
|
+
})),
|
|
155
|
+
...["code", "ui", "heading", "body"].map((component) => ({
|
|
156
|
+
component,
|
|
157
|
+
props: [],
|
|
158
|
+
propnames: [...typography, ...color],
|
|
159
|
+
})),
|
|
160
|
+
{
|
|
161
|
+
component: "tile",
|
|
162
|
+
props: [],
|
|
163
|
+
propnames: [
|
|
164
|
+
...color,
|
|
165
|
+
...box,
|
|
166
|
+
...typography,
|
|
167
|
+
...clickable,
|
|
168
|
+
...size,
|
|
169
|
+
"width-large",
|
|
170
|
+
"width-small",
|
|
171
|
+
"height-large",
|
|
172
|
+
"height-small",
|
|
173
|
+
"selected",
|
|
174
|
+
"checkbox",
|
|
175
|
+
"checkbox-checked",
|
|
176
|
+
],
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
component: "tile-selected",
|
|
180
|
+
props: [],
|
|
181
|
+
propnames: [...color, ...typography],
|
|
182
|
+
},
|
|
183
|
+
];
|
|
184
|
+
for (let c of components) {
|
|
185
|
+
c.props = c.propnames.map((prop) => `--${c.component}-${prop}`);
|
|
186
|
+
cssProperties.push(...c.props);
|
|
187
|
+
}
|
|
188
|
+
cssProperties.sort();
|
|
189
|
+
console.log(cssProperties);
|