@sveltia/ui 0.1.5 → 0.2.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/package/components/composite/calendar.svelte +5 -6
- package/package/components/composite/calendar.svelte.d.ts +8 -1
- package/package/components/composite/checkbox-group.svelte.d.ts +11 -1
- package/package/components/composite/combobox.svelte +21 -17
- package/package/components/composite/combobox.svelte.d.ts +16 -1
- package/package/components/composite/disclosure.svelte.d.ts +10 -1
- package/package/components/composite/grid.svelte.d.ts +10 -1
- package/package/components/composite/listbox.svelte +1 -1
- package/package/components/composite/listbox.svelte.d.ts +20 -7
- package/package/components/composite/menu-item-group.svelte.d.ts +11 -1
- package/package/components/composite/menu.svelte.d.ts +14 -5
- package/package/components/composite/radio-button-group.svelte.d.ts +10 -1
- package/package/components/composite/select-button-group.svelte.d.ts +14 -1
- package/package/components/composite/select.svelte.d.ts +14 -2
- package/package/components/composite/tab-list.svelte.d.ts +22 -9
- package/package/components/core/button.svelte +25 -14
- package/package/components/core/button.svelte.d.ts +50 -19
- package/package/components/core/checkbox.svelte +11 -1
- package/package/components/core/checkbox.svelte.d.ts +16 -1
- package/package/components/core/dialog.svelte +50 -36
- package/package/components/core/dialog.svelte.d.ts +29 -1
- package/package/components/core/drawer.svelte +338 -0
- package/package/components/core/drawer.svelte.d.ts +59 -0
- package/package/components/core/grid-cell.svelte.d.ts +9 -1
- package/package/components/core/group.svelte.d.ts +11 -1
- package/package/components/core/icon.svelte.d.ts +8 -1
- package/package/components/core/menu-button.svelte.d.ts +17 -1
- package/package/components/core/menu-item-checkbox.svelte.d.ts +12 -2
- package/package/components/core/menu-item-radio.svelte.d.ts +12 -2
- package/package/components/core/menu-item.svelte.d.ts +17 -2
- package/package/components/core/number-input.svelte +1 -1
- package/package/components/core/number-input.svelte.d.ts +17 -3
- package/package/components/core/option.svelte +6 -0
- package/package/components/core/option.svelte.d.ts +31 -6
- package/package/components/core/password-input.svelte +1 -1
- package/package/components/core/password-input.svelte.d.ts +15 -4
- package/package/components/core/radio-button.svelte +1 -1
- package/package/components/core/radio-button.svelte.d.ts +11 -1
- package/package/components/core/row-group.svelte.d.ts +9 -1
- package/package/components/core/row.svelte.d.ts +11 -1
- package/package/components/core/search-bar.svelte +3 -2
- package/package/components/core/search-bar.svelte.d.ts +25 -11
- package/package/components/core/select-button.svelte.d.ts +19 -2
- package/package/components/core/separator.svelte.d.ts +7 -1
- package/package/components/core/slider.svelte +2 -1
- package/package/components/core/slider.svelte.d.ts +17 -1
- package/package/components/core/spacer.svelte.d.ts +7 -1
- package/package/components/core/switch.svelte +6 -0
- package/package/components/core/switch.svelte.d.ts +11 -1
- package/package/components/core/tab-panel.svelte.d.ts +9 -1
- package/package/components/core/tab.svelte.d.ts +15 -1
- package/package/components/core/text-area.svelte.d.ts +25 -11
- package/package/components/core/text-input.svelte +3 -2
- package/package/components/core/text-input.svelte.d.ts +33 -15
- package/package/components/core/toolbar.svelte +3 -3
- package/package/components/core/toolbar.svelte.d.ts +10 -1
- package/package/components/editor/markdown.svelte +1 -1
- package/package/components/editor/markdown.svelte.d.ts +7 -1
- package/package/components/helpers/popup.d.ts +7 -2
- package/package/components/helpers/popup.js +11 -0
- package/package/components/util/app-shell.svelte +128 -58
- package/package/components/util/app-shell.svelte.d.ts +11 -1
- package/package/components/util/popup.svelte +24 -14
- package/package/components/util/popup.svelte.d.ts +24 -8
- package/package/components/util/portal.svelte.d.ts +8 -1
- package/package/index.d.ts +2 -0
- package/package/index.js +5 -5
- package/package/styles/core.scss +3 -3
- package/package/styles/variables.scss +127 -57
- package/package.json +23 -13
|
@@ -5,11 +5,25 @@
|
|
|
5
5
|
* @see https://w3c.github.io/aria/#tab
|
|
6
6
|
* @see https://w3c.github.io/aria-practices/#tabpanel
|
|
7
7
|
*/
|
|
8
|
-
export default class Tab {
|
|
8
|
+
export default class Tab extends SvelteComponentTyped<{
|
|
9
|
+
[x: string]: any;
|
|
10
|
+
class?: string;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {
|
|
14
|
+
'start-icon': {
|
|
15
|
+
slot: string;
|
|
16
|
+
};
|
|
17
|
+
default: {};
|
|
18
|
+
'end-icon': {
|
|
19
|
+
slot: string;
|
|
20
|
+
};
|
|
21
|
+
}> {
|
|
9
22
|
}
|
|
10
23
|
export type TabProps = typeof __propDef.props;
|
|
11
24
|
export type TabEvents = typeof __propDef.events;
|
|
12
25
|
export type TabSlots = typeof __propDef.slots;
|
|
26
|
+
import { SvelteComponentTyped } from "svelte";
|
|
13
27
|
declare const __propDef: {
|
|
14
28
|
props: {
|
|
15
29
|
[x: string]: any;
|
|
@@ -2,26 +2,40 @@
|
|
|
2
2
|
/** @typedef {typeof __propDef.events} TextAreaEvents */
|
|
3
3
|
/** @typedef {typeof __propDef.slots} TextAreaSlots */
|
|
4
4
|
/** @see https://w3c.github.io/aria/#textbox */
|
|
5
|
-
export default class TextArea {
|
|
5
|
+
export default class TextArea extends SvelteComponentTyped<{
|
|
6
|
+
[x: string]: any;
|
|
7
|
+
class?: string;
|
|
8
|
+
element?: HTMLTextAreaElement;
|
|
9
|
+
name?: string;
|
|
10
|
+
value?: string;
|
|
11
|
+
autoResize?: boolean;
|
|
12
|
+
}, {
|
|
13
|
+
click: MouseEvent;
|
|
14
|
+
input: Event;
|
|
15
|
+
keypress: KeyboardEvent;
|
|
16
|
+
} & {
|
|
17
|
+
[evt: string]: CustomEvent<any>;
|
|
18
|
+
}, {}> {
|
|
6
19
|
/**accessor*/
|
|
7
|
-
set class(arg:
|
|
8
|
-
get class():
|
|
20
|
+
set class(arg: string);
|
|
21
|
+
get class(): string;
|
|
9
22
|
/**accessor*/
|
|
10
|
-
set element(arg:
|
|
11
|
-
get element():
|
|
23
|
+
set element(arg: HTMLTextAreaElement);
|
|
24
|
+
get element(): HTMLTextAreaElement;
|
|
12
25
|
/**accessor*/
|
|
13
|
-
set name(arg:
|
|
14
|
-
get name():
|
|
26
|
+
set name(arg: string);
|
|
27
|
+
get name(): string;
|
|
15
28
|
/**accessor*/
|
|
16
|
-
set value(arg:
|
|
17
|
-
get value():
|
|
29
|
+
set value(arg: string);
|
|
30
|
+
get value(): string;
|
|
18
31
|
/**accessor*/
|
|
19
|
-
set autoResize(arg:
|
|
20
|
-
get autoResize():
|
|
32
|
+
set autoResize(arg: boolean);
|
|
33
|
+
get autoResize(): boolean;
|
|
21
34
|
}
|
|
22
35
|
export type TextAreaProps = typeof __propDef.props;
|
|
23
36
|
export type TextAreaEvents = typeof __propDef.events;
|
|
24
37
|
export type TextAreaSlots = typeof __propDef.slots;
|
|
38
|
+
import { SvelteComponentTyped } from "svelte";
|
|
25
39
|
declare const __propDef: {
|
|
26
40
|
props: {
|
|
27
41
|
[x: string]: any;
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
type="text"
|
|
52
52
|
{role}
|
|
53
53
|
name={name || undefined}
|
|
54
|
+
tabindex={disabled ? -1 : 0}
|
|
54
55
|
{readOnly}
|
|
55
56
|
aria-readonly={readOnly ? true : undefined}
|
|
56
57
|
{disabled}
|
|
@@ -99,7 +100,7 @@ input:focus {
|
|
|
99
100
|
border-color: var(--primary-accent-color);
|
|
100
101
|
}
|
|
101
102
|
input:read-only {
|
|
102
|
-
color: var(--
|
|
103
|
+
color: var(--tertiary-foreground-color);
|
|
103
104
|
border-color: var(--control-border-color) !important;
|
|
104
105
|
}
|
|
105
106
|
input:disabled {
|
|
@@ -122,7 +123,7 @@ input ~ :global(button):last-child {
|
|
|
122
123
|
border-radius: 0 4px 4px 0;
|
|
123
124
|
}
|
|
124
125
|
input ~ :global(button) :global(.icon) {
|
|
125
|
-
font-size:
|
|
126
|
+
font-size: var(--font-size--xx-large);
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
.label {
|
|
@@ -2,32 +2,50 @@
|
|
|
2
2
|
/** @typedef {typeof __propDef.events} TextInputEvents */
|
|
3
3
|
/** @typedef {typeof __propDef.slots} TextInputSlots */
|
|
4
4
|
/** @see https://w3c.github.io/aria/#textbox */
|
|
5
|
-
export default class TextInput {
|
|
5
|
+
export default class TextInput extends SvelteComponentTyped<{
|
|
6
|
+
[x: string]: any;
|
|
7
|
+
class?: string;
|
|
8
|
+
element?: HTMLInputElement;
|
|
9
|
+
role?: "textbox" | "searchbox" | "combobox" | "spinbutton";
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
name?: string;
|
|
12
|
+
value?: string;
|
|
13
|
+
readOnly?: boolean;
|
|
14
|
+
}, {
|
|
15
|
+
input: Event;
|
|
16
|
+
keydown: KeyboardEvent;
|
|
17
|
+
keyup: KeyboardEvent;
|
|
18
|
+
keypress: KeyboardEvent;
|
|
19
|
+
change: Event;
|
|
20
|
+
} & {
|
|
21
|
+
[evt: string]: CustomEvent<any>;
|
|
22
|
+
}, {}> {
|
|
6
23
|
/**accessor*/
|
|
7
|
-
set class(arg:
|
|
8
|
-
get class():
|
|
24
|
+
set class(arg: string);
|
|
25
|
+
get class(): string;
|
|
9
26
|
/**accessor*/
|
|
10
|
-
set element(arg:
|
|
11
|
-
get element():
|
|
27
|
+
set element(arg: HTMLInputElement);
|
|
28
|
+
get element(): HTMLInputElement;
|
|
12
29
|
/**accessor*/
|
|
13
|
-
set role(arg:
|
|
14
|
-
get role():
|
|
30
|
+
set role(arg: "textbox" | "searchbox" | "combobox" | "spinbutton");
|
|
31
|
+
get role(): "textbox" | "searchbox" | "combobox" | "spinbutton";
|
|
15
32
|
/**accessor*/
|
|
16
|
-
set readOnly(arg:
|
|
17
|
-
get readOnly():
|
|
33
|
+
set readOnly(arg: boolean);
|
|
34
|
+
get readOnly(): boolean;
|
|
18
35
|
/**accessor*/
|
|
19
|
-
set disabled(arg:
|
|
20
|
-
get disabled():
|
|
36
|
+
set disabled(arg: boolean);
|
|
37
|
+
get disabled(): boolean;
|
|
21
38
|
/**accessor*/
|
|
22
|
-
set name(arg:
|
|
23
|
-
get name():
|
|
39
|
+
set name(arg: string);
|
|
40
|
+
get name(): string;
|
|
24
41
|
/**accessor*/
|
|
25
|
-
set value(arg:
|
|
26
|
-
get value():
|
|
42
|
+
set value(arg: string);
|
|
43
|
+
get value(): string;
|
|
27
44
|
}
|
|
28
45
|
export type TextInputProps = typeof __propDef.props;
|
|
29
46
|
export type TextInputEvents = typeof __propDef.events;
|
|
30
47
|
export type TextInputSlots = typeof __propDef.slots;
|
|
48
|
+
import { SvelteComponentTyped } from "svelte";
|
|
31
49
|
declare const __propDef: {
|
|
32
50
|
props: {
|
|
33
51
|
[x: string]: any;
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
background-color: var(--secondary-background-color);
|
|
43
43
|
}
|
|
44
44
|
[role=toolbar].secondary {
|
|
45
|
-
background-color: var(--
|
|
45
|
+
background-color: var(--tertiary-background-color);
|
|
46
46
|
}
|
|
47
47
|
[role=toolbar][aria-orientation=horizontal] {
|
|
48
48
|
height: var(--toolbar-size);
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
gap: 8px;
|
|
66
66
|
margin: 0;
|
|
67
67
|
padding: 0 8px;
|
|
68
|
-
font-size:
|
|
68
|
+
font-size: var(--font-size--large);
|
|
69
69
|
}
|
|
70
70
|
[role=toolbar] :global(h2) :global(span) {
|
|
71
|
-
font-size:
|
|
71
|
+
font-size: var(--font-size--small);
|
|
72
72
|
font-weight: normal;
|
|
73
73
|
opacity: 0.8;
|
|
74
74
|
}</style>
|
|
@@ -5,11 +5,20 @@
|
|
|
5
5
|
* @see https://w3c.github.io/aria/#toolbar
|
|
6
6
|
* @see https://w3c.github.io/aria-practices/#toolbar
|
|
7
7
|
*/
|
|
8
|
-
export default class Toolbar {
|
|
8
|
+
export default class Toolbar extends SvelteComponentTyped<{
|
|
9
|
+
[x: string]: any;
|
|
10
|
+
class?: string;
|
|
11
|
+
orientation?: "horizontal" | "vertical";
|
|
12
|
+
}, {
|
|
13
|
+
[evt: string]: CustomEvent<any>;
|
|
14
|
+
}, {
|
|
15
|
+
default: {};
|
|
16
|
+
}> {
|
|
9
17
|
}
|
|
10
18
|
export type ToolbarProps = typeof __propDef.props;
|
|
11
19
|
export type ToolbarEvents = typeof __propDef.events;
|
|
12
20
|
export type ToolbarSlots = typeof __propDef.slots;
|
|
21
|
+
import { SvelteComponentTyped } from "svelte";
|
|
13
22
|
declare const __propDef: {
|
|
14
23
|
props: {
|
|
15
24
|
[x: string]: any;
|
|
@@ -65,7 +65,7 @@ div :global([role="toolbar"]) {
|
|
|
65
65
|
gap: 8px;
|
|
66
66
|
border-radius: 4px 4px 0 0;
|
|
67
67
|
padding: 8px;
|
|
68
|
-
background-color: var(--
|
|
68
|
+
background-color: var(--tertiary-background-color);
|
|
69
69
|
}
|
|
70
70
|
div :global([role="toolbar"]) :global(button) {
|
|
71
71
|
flex: none;
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
/** @typedef {typeof __propDef.props} MarkdownProps */
|
|
2
2
|
/** @typedef {typeof __propDef.events} MarkdownEvents */
|
|
3
3
|
/** @typedef {typeof __propDef.slots} MarkdownSlots */
|
|
4
|
-
export default class Markdown {
|
|
4
|
+
export default class Markdown extends SvelteComponentTyped<{
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
value?: string;
|
|
7
|
+
}, {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
}, {}> {
|
|
5
10
|
}
|
|
6
11
|
export type MarkdownProps = typeof __propDef.props;
|
|
7
12
|
export type MarkdownEvents = typeof __propDef.events;
|
|
8
13
|
export type MarkdownSlots = typeof __propDef.slots;
|
|
14
|
+
import { SvelteComponentTyped } from "svelte";
|
|
9
15
|
declare const __propDef: {
|
|
10
16
|
props: {
|
|
11
17
|
disabled?: boolean;
|
|
@@ -11,8 +11,13 @@ declare class Popup {
|
|
|
11
11
|
* @param {PopupPosition} position
|
|
12
12
|
*/
|
|
13
13
|
constructor(anchorElement: HTMLElement, popupElement: HTMLElement, position: PopupPosition);
|
|
14
|
-
open:
|
|
15
|
-
style:
|
|
14
|
+
open: import("svelte/store").Writable<boolean>;
|
|
15
|
+
style: import("svelte/store").Writable<{
|
|
16
|
+
inset: any;
|
|
17
|
+
zIndex: any;
|
|
18
|
+
width: any;
|
|
19
|
+
height: any;
|
|
20
|
+
}>;
|
|
16
21
|
observer: IntersectionObserver;
|
|
17
22
|
anchorElement: HTMLElement;
|
|
18
23
|
popupElement: HTMLElement;
|
|
@@ -98,6 +98,17 @@ class Popup {
|
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
100
|
|
|
101
|
+
this.anchorElement.addEventListener('keydown', (event) => {
|
|
102
|
+
const { key, ctrlKey, metaKey, shiftKey, altKey } = event;
|
|
103
|
+
|
|
104
|
+
if (!ctrlKey && !metaKey && !shiftKey && !altKey) {
|
|
105
|
+
if (key === ' ' || key === 'Enter') {
|
|
106
|
+
event.stopPropagation();
|
|
107
|
+
this.open.set(!get(this.open));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
101
112
|
this.popupElement.addEventListener('click', (event) => {
|
|
102
113
|
if (get(this.open) && event.target !== this.anchorElement) {
|
|
103
114
|
this.open.set(false);
|
|
@@ -41,34 +41,144 @@
|
|
|
41
41
|
|
|
42
42
|
<style global>@import url("https://fonts.googleapis.com/css2?family=Merriweather+Sans:ital,wght@0,300;0,600;1,300&family=Noto+Sans+Mono&display=swap");
|
|
43
43
|
@import url("https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block");
|
|
44
|
+
:global(:root[data-theme=light]) {
|
|
45
|
+
--foreground-color-1-hsl: var(--base-hue) 5% 0%;
|
|
46
|
+
--foreground-color-2-hsl: var(--base-hue) 5% 20%;
|
|
47
|
+
--foreground-color-3-hsl: var(--base-hue) 5% 40%;
|
|
48
|
+
--foreground-color-4-hsl: var(--base-hue) 5% 60%;
|
|
49
|
+
--border-color-1-hsl: var(--base-hue) 5% 75%;
|
|
50
|
+
--border-color-2-hsl: var(--base-hue) 5% 80%;
|
|
51
|
+
--background-color-1-hsl: var(--base-hue) 5% 100%;
|
|
52
|
+
--background-color-2-hsl: var(--base-hue) 5% 98%;
|
|
53
|
+
--background-color-3-hsl: var(--base-hue) 5% 94%;
|
|
54
|
+
--background-color-4-hsl: var(--base-hue) 5% 90%;
|
|
55
|
+
--background-color-5-hsl: var(--base-hue) 5% 86%;
|
|
56
|
+
--shadow-color: var(--base-hue) 10% 0%;
|
|
57
|
+
--primary-accent-color: hsl(var(--base-hue) 80% 45%);
|
|
58
|
+
--primary-accent-color-lighter: hsl(var(--base-hue) 80% 40%);
|
|
59
|
+
--primary-accent-color-darker: hsl(var(--base-hue) 80% 50%);
|
|
60
|
+
--primary-accent-color-foreground: hsl(var(--base-hue) 10% 100%);
|
|
61
|
+
--danger-color-hue: 0;
|
|
62
|
+
--warning-color-hue: 40;
|
|
63
|
+
--success-color-hue: 100;
|
|
64
|
+
--info-color-hue: 220;
|
|
65
|
+
--alert-foreground-color-saturation: 88%;
|
|
66
|
+
--alert-foreground-color-lightness: 28%;
|
|
67
|
+
--alert-background-color-saturation: 68%;
|
|
68
|
+
--alert-background-color-lightness: 88%;
|
|
69
|
+
--alert-border-color-saturation: 48%;
|
|
70
|
+
--alert-border-color-lightness: 68%;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
:global(:root[data-theme=dark]) {
|
|
74
|
+
--foreground-color-1-hsl: var(--base-hue) 10% 100%;
|
|
75
|
+
--foreground-color-2-hsl: var(--base-hue) 10% 80%;
|
|
76
|
+
--foreground-color-3-hsl: var(--base-hue) 10% 60%;
|
|
77
|
+
--foreground-color-4-hsl: var(--base-hue) 10% 40%;
|
|
78
|
+
--border-color-1-hsl: var(--base-hue) 10% 25%;
|
|
79
|
+
--border-color-2-hsl: var(--base-hue) 10% 20%;
|
|
80
|
+
--background-color-1-hsl: var(--base-hue) 10% 10%;
|
|
81
|
+
--background-color-2-hsl: var(--base-hue) 10% 12%;
|
|
82
|
+
--background-color-3-hsl: var(--base-hue) 10% 16%;
|
|
83
|
+
--background-color-4-hsl: var(--base-hue) 10% 20%;
|
|
84
|
+
--background-color-5-hsl: var(--base-hue) 10% 24%;
|
|
85
|
+
--shadow-color: var(--base-hue) 10% 0%;
|
|
86
|
+
--primary-accent-color: hsl(var(--base-hue) 100% 45%);
|
|
87
|
+
--primary-accent-color-lighter: hsl(var(--base-hue) 100% 55%);
|
|
88
|
+
--primary-accent-color-darker: hsl(var(--base-hue) 100% 35%);
|
|
89
|
+
--primary-accent-color-foreground: hsl(var(--base-hue) 10% 100%);
|
|
90
|
+
--danger-color-hue: 0;
|
|
91
|
+
--warning-color-hue: 40;
|
|
92
|
+
--success-color-hue: 100;
|
|
93
|
+
--info-color-hue: 220;
|
|
94
|
+
--alert-foreground-color-saturation: 48%;
|
|
95
|
+
--alert-foreground-color-lightness: 68%;
|
|
96
|
+
--alert-background-color-saturation: 88%;
|
|
97
|
+
--alert-background-color-lightness: 8%;
|
|
98
|
+
--alert-border-color-saturation: 38%;
|
|
99
|
+
--alert-border-color-lightness: 18%;
|
|
100
|
+
}
|
|
101
|
+
|
|
44
102
|
:global(:root) {
|
|
45
|
-
--hue: 210;
|
|
103
|
+
--base-hue: 210;
|
|
46
104
|
--highlight-foreground-color: hsl(var(--foreground-color-1-hsl));
|
|
47
105
|
--primary-foreground-color: hsl(var(--foreground-color-2-hsl));
|
|
48
106
|
--secondary-foreground-color: hsl(var(--foreground-color-3-hsl));
|
|
49
|
-
--
|
|
107
|
+
--tertiary-foreground-color: hsl(var(--foreground-color-3-hsl));
|
|
50
108
|
--disabled-foreground-color: hsl(var(--foreground-color-4-hsl));
|
|
51
|
-
--danger-foreground-color: hsl(
|
|
109
|
+
--danger-foreground-color: hsl(
|
|
110
|
+
var(--danger-color-hue) var(--alert-foreground-color-saturation)
|
|
111
|
+
var(--alert-foreground-color-lightness)
|
|
112
|
+
);
|
|
113
|
+
--warning-foreground-color: hsl(
|
|
114
|
+
var(--warning-color-hue) var(--alert-foreground-color-saturation)
|
|
115
|
+
var(--alert-foreground-color-lightness)
|
|
116
|
+
);
|
|
117
|
+
--success-foreground-color: hsl(
|
|
118
|
+
var(--success-color-hue) var(--alert-foreground-color-saturation)
|
|
119
|
+
var(--alert-foreground-color-lightness)
|
|
120
|
+
);
|
|
121
|
+
--info-foreground-color: hsl(
|
|
122
|
+
var(--info-color-hue) var(--alert-foreground-color-saturation)
|
|
123
|
+
var(--alert-foreground-color-lightness)
|
|
124
|
+
);
|
|
52
125
|
--highlight-background-color: hsl(var(--background-color-5-hsl));
|
|
53
126
|
--content-background-color: hsl(var(--background-color-1-hsl));
|
|
54
127
|
--primary-background-color: hsl(var(--background-color-2-hsl));
|
|
128
|
+
--primary-background-color-translucent: hsl(var(--background-color-2-hsl) / 80%);
|
|
55
129
|
--secondary-background-color: hsl(var(--background-color-3-hsl));
|
|
56
|
-
--secondary-background-color-translucent: hsl(var(--background-color-3-hsl) /
|
|
57
|
-
--
|
|
130
|
+
--secondary-background-color-translucent: hsl(var(--background-color-3-hsl) / 80%);
|
|
131
|
+
--tertiary-background-color: hsl(var(--background-color-4-hsl));
|
|
132
|
+
--tertiary-background-color-translucent: hsl(var(--background-color-4-hsl) / 80%);
|
|
58
133
|
--control-background-color: hsl(var(--background-color-1-hsl));
|
|
59
134
|
--disabled-background-color: hsl(var(--background-color-4-hsl));
|
|
60
|
-
--danger-background-color: hsl(
|
|
135
|
+
--danger-background-color: hsl(
|
|
136
|
+
var(--danger-color-hue) var(--alert-background-color-saturation)
|
|
137
|
+
var(--alert-background-color-lightness)
|
|
138
|
+
);
|
|
139
|
+
--warning-background-color: hsl(
|
|
140
|
+
var(--warning-color-hue) var(--alert-background-color-saturation)
|
|
141
|
+
var(--alert-background-color-lightness)
|
|
142
|
+
);
|
|
143
|
+
--success-background-color: hsl(
|
|
144
|
+
var(--success-color-hue) var(--alert-background-color-saturation)
|
|
145
|
+
var(--alert-background-color-lightness)
|
|
146
|
+
);
|
|
147
|
+
--info-background-color: hsl(
|
|
148
|
+
var(--info-color-hue) var(--alert-background-color-saturation)
|
|
149
|
+
var(--alert-background-color-lightness)
|
|
150
|
+
);
|
|
61
151
|
--primary-border-color: hsl(var(--border-color-1-hsl));
|
|
62
152
|
--secondary-border-color: hsl(var(--border-color-2-hsl));
|
|
63
153
|
--control-border-color: hsl(var(--border-color-2-hsl));
|
|
154
|
+
--danger-border-color: hsl(
|
|
155
|
+
var(--danger-color-hue) var(--alert-border-color-saturation) var(--alert-border-color-lightness)
|
|
156
|
+
);
|
|
157
|
+
--warning-border-color: hsl(
|
|
158
|
+
var(--warning-color-hue) var(--alert-border-color-saturation)
|
|
159
|
+
var(--alert-border-color-lightness)
|
|
160
|
+
);
|
|
161
|
+
--success-border-color: hsl(
|
|
162
|
+
var(--success-color-hue) var(--alert-border-color-saturation)
|
|
163
|
+
var(--alert-border-color-lightness)
|
|
164
|
+
);
|
|
165
|
+
--info-border-color: hsl(
|
|
166
|
+
var(--info-color-hue) var(--alert-border-color-saturation) var(--alert-border-color-lightness)
|
|
167
|
+
);
|
|
64
168
|
--popup-shadow-color: hsl(var(--shadow-color) / 40%);
|
|
65
169
|
--popup-backdrop-color: hsl(var(--shadow-color) / 40%);
|
|
66
|
-
--
|
|
67
|
-
--
|
|
68
|
-
--
|
|
69
|
-
--
|
|
70
|
-
--
|
|
71
|
-
--
|
|
170
|
+
--font-family--default: "Merriweather Sans", sans-serif;
|
|
171
|
+
--font-size--xxx-large: 24px;
|
|
172
|
+
--font-size--xx-large: 20px;
|
|
173
|
+
--font-size--x-large: 18px;
|
|
174
|
+
--font-size--large: 16px;
|
|
175
|
+
--font-size--default: 14px;
|
|
176
|
+
--font-size--small: 12px;
|
|
177
|
+
--font-size--x-small: 10px;
|
|
178
|
+
--font-weight--normal: 300;
|
|
179
|
+
--font-weight--bold: 600;
|
|
180
|
+
--font-family--monospace: "Noto Sans Mono", monospace;
|
|
181
|
+
--font-size--monospace: 13px;
|
|
72
182
|
--control--small--border-width: 1px;
|
|
73
183
|
--control--small--border-radius: 2px;
|
|
74
184
|
--control--small--height: 24px;
|
|
@@ -101,46 +211,6 @@
|
|
|
101
211
|
--tab--large--height: var(--control--large--height);
|
|
102
212
|
}
|
|
103
213
|
|
|
104
|
-
:global(:root[data-theme=light]) {
|
|
105
|
-
--foreground-color-1-hsl: var(--hue) 5% 0%;
|
|
106
|
-
--foreground-color-2-hsl: var(--hue) 5% 20%;
|
|
107
|
-
--foreground-color-3-hsl: var(--hue) 5% 40%;
|
|
108
|
-
--foreground-color-4-hsl: var(--hue) 5% 60%;
|
|
109
|
-
--border-color-1-hsl: var(--hue) 5% 75%;
|
|
110
|
-
--border-color-2-hsl: var(--hue) 5% 80%;
|
|
111
|
-
--background-color-1-hsl: var(--hue) 5% 100%;
|
|
112
|
-
--background-color-2-hsl: var(--hue) 5% 98%;
|
|
113
|
-
--background-color-3-hsl: var(--hue) 5% 96%;
|
|
114
|
-
--background-color-4-hsl: var(--hue) 5% 94%;
|
|
115
|
-
--background-color-5-hsl: var(--hue) 5% 80%;
|
|
116
|
-
--shadow-color: var(--hue) 10% 0%;
|
|
117
|
-
--primary-accent-color: hsl(var(--hue) 80% 45%);
|
|
118
|
-
--primary-accent-color-lighter: hsl(var(--hue) 80% 40%);
|
|
119
|
-
--primary-accent-color-darker: hsl(var(--hue) 80% 50%);
|
|
120
|
-
--primary-accent-color-foreground: hsl(var(--hue) 10% 100%);
|
|
121
|
-
--danger-color: 0 68% 42%;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
:global(:root[data-theme=dark]) {
|
|
125
|
-
--foreground-color-1-hsl: var(--hue) 10% 100%;
|
|
126
|
-
--foreground-color-2-hsl: var(--hue) 10% 80%;
|
|
127
|
-
--foreground-color-3-hsl: var(--hue) 10% 60%;
|
|
128
|
-
--foreground-color-4-hsl: var(--hue) 10% 40%;
|
|
129
|
-
--border-color-1-hsl: var(--hue) 10% 25%;
|
|
130
|
-
--border-color-2-hsl: var(--hue) 10% 20%;
|
|
131
|
-
--background-color-1-hsl: var(--hue) 10% 8%;
|
|
132
|
-
--background-color-2-hsl: var(--hue) 10% 10%;
|
|
133
|
-
--background-color-3-hsl: var(--hue) 10% 12%;
|
|
134
|
-
--background-color-4-hsl: var(--hue) 10% 14%;
|
|
135
|
-
--background-color-5-hsl: var(--hue) 10% 18%;
|
|
136
|
-
--shadow-color: var(--hue) 10% 0%;
|
|
137
|
-
--primary-accent-color: hsl(var(--hue) 100% 45%);
|
|
138
|
-
--primary-accent-color-lighter: hsl(var(--hue) 100% 50%);
|
|
139
|
-
--primary-accent-color-darker: hsl(var(--hue) 100% 40%);
|
|
140
|
-
--primary-accent-color-foreground: hsl(var(--hue) 10% 100%);
|
|
141
|
-
--danger-color: 0 68% 42%;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
214
|
:global(.material-symbols-outlined) {
|
|
145
215
|
font-variation-settings: "FILL" 0, "wght" 300, "GRAD" 0, "opsz" 24;
|
|
146
216
|
}
|
|
@@ -171,11 +241,11 @@
|
|
|
171
241
|
:global(h5),
|
|
172
242
|
:global(h6) {
|
|
173
243
|
margin: 0;
|
|
174
|
-
font-weight: var(--
|
|
244
|
+
font-weight: var(--font-weight--bold);
|
|
175
245
|
}
|
|
176
246
|
|
|
177
247
|
:global(strong) {
|
|
178
|
-
font-weight: var(--
|
|
248
|
+
font-weight: var(--font-weight--bold);
|
|
179
249
|
}
|
|
180
250
|
|
|
181
251
|
:global(a) {
|
|
@@ -217,7 +287,7 @@
|
|
|
217
287
|
|
|
218
288
|
:global(code),
|
|
219
289
|
:global(pre) {
|
|
220
|
-
font-family: var(--
|
|
290
|
+
font-family: var(--font-family--monospace);
|
|
221
291
|
}
|
|
222
292
|
|
|
223
293
|
:global(pre) {
|
|
@@ -273,9 +343,9 @@
|
|
|
273
343
|
height: 100%;
|
|
274
344
|
color: var(--primary-foreground-color);
|
|
275
345
|
background-color: var(--primary-background-color);
|
|
276
|
-
font-family: var(--
|
|
277
|
-
font-size: var(--
|
|
278
|
-
font-weight: var(--
|
|
346
|
+
font-family: var(--font-family--default);
|
|
347
|
+
font-size: var(--font-size--default);
|
|
348
|
+
font-weight: var(--font-weight--normal);
|
|
279
349
|
-webkit-user-select: none;
|
|
280
350
|
user-select: none;
|
|
281
351
|
touch-action: none;
|
|
@@ -6,11 +6,21 @@
|
|
|
6
6
|
* dark/light mode switching. This component has to be placed directly under `<body>` (or
|
|
7
7
|
* `<div style="display:contents">` in a SvelteKit app).
|
|
8
8
|
*/
|
|
9
|
-
export default class AppShell {
|
|
9
|
+
export default class AppShell extends SvelteComponentTyped<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
dragover: DragEvent;
|
|
13
|
+
drop: DragEvent;
|
|
14
|
+
} & {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {
|
|
17
|
+
default: {};
|
|
18
|
+
}> {
|
|
10
19
|
}
|
|
11
20
|
export type AppShellProps = typeof __propDef.props;
|
|
12
21
|
export type AppShellEvents = typeof __propDef.events;
|
|
13
22
|
export type AppShellSlots = typeof __propDef.slots;
|
|
23
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
24
|
declare const __propDef: {
|
|
15
25
|
props: {
|
|
16
26
|
[x: string]: never;
|
|
@@ -18,6 +18,12 @@
|
|
|
18
18
|
*/
|
|
19
19
|
export let dialog = undefined;
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Reference to the content element.
|
|
23
|
+
* @type {(HTMLElement|undefined)}
|
|
24
|
+
*/
|
|
25
|
+
export let content = undefined;
|
|
26
|
+
|
|
21
27
|
/**
|
|
22
28
|
* Where to show the dropdown menu.
|
|
23
29
|
* @type {PopupPosition}
|
|
@@ -29,7 +35,6 @@
|
|
|
29
35
|
let showDialog = false;
|
|
30
36
|
let showContent = false;
|
|
31
37
|
let contentType;
|
|
32
|
-
let closeDialogTimer = 0;
|
|
33
38
|
|
|
34
39
|
let style = writable({
|
|
35
40
|
inset: undefined,
|
|
@@ -46,27 +51,32 @@
|
|
|
46
51
|
}
|
|
47
52
|
|
|
48
53
|
const openDialog = () => {
|
|
49
|
-
window.clearTimeout(closeDialogTimer);
|
|
50
54
|
(document.querySelector('.sui.app-shell') || document.body).appendChild(dialog);
|
|
51
55
|
showContent = true;
|
|
52
56
|
dialog.showModal();
|
|
53
57
|
|
|
54
58
|
window.requestAnimationFrame(() => {
|
|
55
59
|
showDialog = true;
|
|
60
|
+
|
|
61
|
+
window.requestAnimationFrame(() => {
|
|
62
|
+
(dialog.querySelector('[tabindex]') || dialog).focus();
|
|
63
|
+
});
|
|
56
64
|
});
|
|
57
65
|
};
|
|
58
66
|
|
|
59
|
-
const closeDialog = () => {
|
|
67
|
+
const closeDialog = async () => {
|
|
60
68
|
showDialog = false;
|
|
61
69
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
await new Promise((resolve) => {
|
|
71
|
+
content.addEventListener('transitionend', () => resolve(), { once: true });
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
showContent = false;
|
|
75
|
+
dialog?.close();
|
|
76
|
+
dialog?.remove();
|
|
67
77
|
};
|
|
68
78
|
|
|
69
|
-
|
|
79
|
+
const toggleDialog = () => {
|
|
70
80
|
if (dialog) {
|
|
71
81
|
if ($open) {
|
|
72
82
|
openDialog();
|
|
@@ -74,7 +84,10 @@
|
|
|
74
84
|
closeDialog();
|
|
75
85
|
}
|
|
76
86
|
}
|
|
77
|
-
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// Call the function only when the `$open` prop is changed
|
|
90
|
+
$: toggleDialog($open);
|
|
78
91
|
|
|
79
92
|
onMount(() => {
|
|
80
93
|
dialog.remove();
|
|
@@ -88,11 +101,8 @@
|
|
|
88
101
|
</script>
|
|
89
102
|
|
|
90
103
|
<dialog class="sui popup" bind:this={dialog} class:open={showDialog} {...$$restProps}>
|
|
91
|
-
<!-- Prevent the first item in the slot, e.g. a menu item, from being focused by adding `tabindex`
|
|
92
|
-
to the container -->
|
|
93
|
-
<!-- svelte-ignore a11y-no-noninteractive-tabindex -->
|
|
94
104
|
<div
|
|
95
|
-
|
|
105
|
+
bind:this={content}
|
|
96
106
|
class="content {contentType}"
|
|
97
107
|
style:inset={$style.inset}
|
|
98
108
|
style:z-index={$style.zIndex}
|