@streamscloud/kit 0.0.1-1770364570820 → 0.0.1-1770761450561
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/dist/core/continuation-token.d.ts +1 -0
- package/dist/core/continuation-token.js +4 -1
- package/dist/styles/_colors.scss +126 -0
- package/dist/styles/_form-group.scss +37 -0
- package/dist/styles/_functions.scss +37 -0
- package/dist/styles/_index.scss +6 -0
- package/dist/styles/_mixins.scss +128 -0
- package/dist/styles/_normalize.scss +257 -0
- package/dist/styles/_reset.scss +194 -0
- package/dist/styles/_responsive.scss +70 -0
- package/dist/styles/_row.scss +81 -0
- package/dist/styles/_theme.scss +68 -0
- package/dist/ui/button/cmp.button.svelte +10 -0
- package/dist/ui/button/cmp.button.svelte.d.ts +16 -0
- package/dist/ui/button/cmp.options-button.svelte +202 -0
- package/dist/ui/button/cmp.options-button.svelte.d.ts +21 -0
- package/dist/ui/button/index.d.ts +3 -0
- package/dist/ui/button/index.js +2 -0
- package/dist/ui/button/resources/button-base.svelte +81 -0
- package/dist/ui/button/resources/button-base.svelte.d.ts +13 -0
- package/dist/ui/button/resources/button-theme.svelte +233 -0
- package/dist/ui/button/resources/button-theme.svelte.d.ts +10 -0
- package/dist/ui/button/resources/types.d.ts +2 -0
- package/dist/ui/button/resources/types.js +1 -0
- package/dist/ui/dialog/cmp.dialog-button.svelte +13 -0
- package/dist/ui/dialog/cmp.dialog-button.svelte.d.ts +15 -0
- package/dist/ui/dialog/cmp.dialog-cancel-button.svelte +13 -0
- package/dist/ui/dialog/cmp.dialog-cancel-button.svelte.d.ts +11 -0
- package/dist/ui/dialog/cmp.dialog-close-button.svelte +17 -0
- package/dist/ui/dialog/cmp.dialog-close-button.svelte.d.ts +27 -0
- package/dist/ui/dialog/cmp.dialog-container.svelte +183 -0
- package/dist/ui/dialog/cmp.dialog-container.svelte.d.ts +27 -0
- package/dist/ui/dialog/cmp.dialog.svelte +113 -0
- package/dist/ui/dialog/cmp.dialog.svelte.d.ts +35 -0
- package/dist/ui/dialog/dialog-controller.d.ts +22 -0
- package/dist/ui/dialog/dialog-controller.js +45 -0
- package/dist/ui/dialog/dialog-data.d.ts +27 -0
- package/dist/ui/dialog/dialog-data.js +1 -0
- package/dist/ui/dialog/dialog-mount.d.ts +3 -0
- package/dist/ui/dialog/dialog-mount.js +19 -0
- package/dist/ui/dialog/dialogs.svelte.d.ts +13 -0
- package/dist/ui/dialog/dialogs.svelte.js +67 -0
- package/dist/ui/dialog/index.d.ts +8 -0
- package/dist/ui/dialog/index.js +7 -0
- package/dist/ui/dialog/types.svelte.d.ts +30 -0
- package/dist/ui/dialog/types.svelte.js +25 -0
- package/dist/ui/icon/cmp.icon.svelte +76 -0
- package/dist/ui/icon/cmp.icon.svelte.d.ts +8 -0
- package/dist/ui/icon/index.d.ts +2 -0
- package/dist/ui/icon/index.js +1 -0
- package/dist/ui/icon/types.d.ts +1 -0
- package/dist/ui/icon/types.js +1 -0
- package/package.json +42 -7
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<script lang="ts">let { type = 'button', disabled = false, autofocus = false, on, children } = $props();
|
|
2
|
+
let buttonRef;
|
|
3
|
+
$effect(() => {
|
|
4
|
+
if (autofocus) {
|
|
5
|
+
buttonRef.focus();
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
export {};
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<button class="button" disabled={disabled} type={type} bind:this={buttonRef} onclick={(e) => on?.click?.(e)}>
|
|
12
|
+
<span class="button__text">
|
|
13
|
+
{@render children()}
|
|
14
|
+
</span>
|
|
15
|
+
</button>
|
|
16
|
+
|
|
17
|
+
<style>.button {
|
|
18
|
+
--_button--font--size: var(--button--font--size, 1rem);
|
|
19
|
+
--_button--font--color: var(--button--font--color, black);
|
|
20
|
+
--_button--font--color--active: var(--button--font--color--active, var(--_button--font--color));
|
|
21
|
+
--_button--font--color--disabled: var(--button--font--color--disabled, var(--_button--font--color));
|
|
22
|
+
--_button--font-weight: var(--button--font-weight, 400);
|
|
23
|
+
--_button--text--font-size: var(--button--text--font-size, 0.75em);
|
|
24
|
+
--_button--icon--font-size: var(--button--icon--font-size, 1em);
|
|
25
|
+
--_button--justify-content: var(--button--justify-content, center);
|
|
26
|
+
--_button--background: var(--button--background, white);
|
|
27
|
+
--_button--background--hover: var(--button--background--hover, var(--_button--background));
|
|
28
|
+
--_button--background--active: var(--button--background--active, var(--_button--background));
|
|
29
|
+
--_button--background--disabled: var(--button--background--disabled, var(--_button--background));
|
|
30
|
+
--_button--border: var(--button--border, none);
|
|
31
|
+
--_button--border--disabled: var(--button--border--disabled, var(--_button--border));
|
|
32
|
+
--_button--border-radius: var(--button--border-radius, 0.25em);
|
|
33
|
+
--_button--padding--vertical: var(--button--padding--vertical, 0);
|
|
34
|
+
--_button--padding--horizontal: var(--button--padding--horizontal, 1em);
|
|
35
|
+
--_button--min-width: var(--button--min-width, 0);
|
|
36
|
+
--_button--width: var(--button--width, auto);
|
|
37
|
+
--_button--height: var(--button--height, 2em);
|
|
38
|
+
--_button--box-shadow: var(--button--box-shadow, none);
|
|
39
|
+
font-size: var(--_button--font--size);
|
|
40
|
+
font-weight: var(--_button--font-weight);
|
|
41
|
+
padding: var(--_button--padding--vertical) var(--_button--padding--horizontal);
|
|
42
|
+
color: var(--_button--font--color);
|
|
43
|
+
background: var(--_button--background);
|
|
44
|
+
box-shadow: var(--_button--box-shadow);
|
|
45
|
+
border: var(--_button--border);
|
|
46
|
+
border-radius: var(--_button--border-radius);
|
|
47
|
+
min-width: var(--_button--min-width);
|
|
48
|
+
width: var(--_button--width);
|
|
49
|
+
max-width: 100%;
|
|
50
|
+
height: var(--_button--height);
|
|
51
|
+
outline: none;
|
|
52
|
+
display: inline-flex;
|
|
53
|
+
justify-content: var(--_button--justify-content);
|
|
54
|
+
align-items: center;
|
|
55
|
+
vertical-align: middle;
|
|
56
|
+
transition: background-color linear 0.2s, color linear 0.2s, border-color linear 0.2s, filter linear 0.2s;
|
|
57
|
+
white-space: nowrap;
|
|
58
|
+
cursor: pointer;
|
|
59
|
+
}
|
|
60
|
+
.button__text {
|
|
61
|
+
width: 100%;
|
|
62
|
+
text-align: center;
|
|
63
|
+
font-size: var(--_button--text--font-size);
|
|
64
|
+
--icon-text--global--font-size: 1rem;
|
|
65
|
+
--icon-text--text--font-size: var(--_button--text--font-size);
|
|
66
|
+
--icon-text--icon--font-size: var(--_button--icon--font-size);
|
|
67
|
+
--icon-text--justify-content: var(--_button--justify-content);
|
|
68
|
+
}
|
|
69
|
+
.button:not(:disabled):hover {
|
|
70
|
+
background: var(--_button--background--hover);
|
|
71
|
+
}
|
|
72
|
+
.button:not(:disabled):active {
|
|
73
|
+
background: var(--_button--background--active);
|
|
74
|
+
color: var(--_button--font--color--active);
|
|
75
|
+
}
|
|
76
|
+
.button:disabled {
|
|
77
|
+
cursor: default;
|
|
78
|
+
background: var(--_button--background--disabled);
|
|
79
|
+
border: var(--_button--border--disabled);
|
|
80
|
+
color: var(--_button--font--color--disabled);
|
|
81
|
+
}</style>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
type Props = {
|
|
3
|
+
type?: 'button' | 'submit' | 'reset';
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
autofocus?: boolean;
|
|
6
|
+
on?: {
|
|
7
|
+
click?: (e: MouseEvent) => void;
|
|
8
|
+
};
|
|
9
|
+
children: Snippet;
|
|
10
|
+
};
|
|
11
|
+
declare const ButtonBase: import("svelte").Component<Props, {}, "">;
|
|
12
|
+
type ButtonBase = ReturnType<typeof ButtonBase>;
|
|
13
|
+
export default ButtonBase;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
<script lang="ts">let { variant = undefined, size = 'standard', children } = $props();
|
|
2
|
+
export {};
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div
|
|
6
|
+
class="button-theme"
|
|
7
|
+
class:button-theme--standard={variant === 'standard'}
|
|
8
|
+
class:button-theme--primary={variant === 'primary'}
|
|
9
|
+
class:button-theme--alert={variant === 'alert'}
|
|
10
|
+
class:button-theme--warning={variant === 'warning'}
|
|
11
|
+
class:button-theme--white={variant === 'white'}
|
|
12
|
+
class:button-theme--gray={variant === 'gray'}
|
|
13
|
+
class:button-theme--green={variant === 'green'}
|
|
14
|
+
class:button-theme--black={variant === 'black'}
|
|
15
|
+
class:button-theme--text-only={variant === 'text-only'}
|
|
16
|
+
class:button-theme--transparent-success={variant === 'transparent-success'}
|
|
17
|
+
class:button-theme--transparent-primary={variant === 'transparent-primary'}
|
|
18
|
+
class:button-theme--transparent-gray={variant === 'transparent-gray'}
|
|
19
|
+
class:button-theme--transparent-white={variant === 'transparent-white'}
|
|
20
|
+
class:button-theme--transparent-warning={variant === 'transparent-warning'}
|
|
21
|
+
class:button-theme--transparent-destructive={variant === 'transparent-destructive'}
|
|
22
|
+
class:button-theme--size-standard={size === 'standard'}
|
|
23
|
+
class:button-theme--size-large={size === 'large'}
|
|
24
|
+
class:button-theme--size-small={size === 'small'}>
|
|
25
|
+
{@render children()}
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<style>.button-theme {
|
|
29
|
+
display: contents;
|
|
30
|
+
}
|
|
31
|
+
.button-theme--primary {
|
|
32
|
+
--button--font--color: var(--button--primary--font--color, #ffffff);
|
|
33
|
+
--button--font--color--active: var(--button--primary--font--color--active, #ffffff);
|
|
34
|
+
--button--font--color--disabled: var(--button--primary--font--color--disabled, #ffffff);
|
|
35
|
+
--button--background: var(--button--primary--background, #144ab0);
|
|
36
|
+
--button--background--hover: var(--button--primary--background--hover, #1244a0);
|
|
37
|
+
--button--background--active: var(--button--primary--background--active, #103a89);
|
|
38
|
+
--button--background--disabled: var(--button--primary--background--disabled, #91b3f3);
|
|
39
|
+
--button--border: var(--button--primary--border, none);
|
|
40
|
+
--button--border--disabled: var(--button--primary--border--disabled, none);
|
|
41
|
+
--button--box-shadow: var(--button--primary--box-shadow, 0px 3px 0px 0px rgba(255, 255, 255, 0.3) inset);
|
|
42
|
+
}
|
|
43
|
+
.button-theme--standard {
|
|
44
|
+
--button--font--color: var(--button--standard--font--color, light-dark(#2e2e2e, #ffffff));
|
|
45
|
+
--button--font--color--active: var(--button--standard--font--color--active, light-dark(#2e2e2e, #ffffff));
|
|
46
|
+
--button--font--color--disabled: var(--button--standard--font--color--disabled, light-dark(#2e2e2e, #ffffff));
|
|
47
|
+
--button--background: var(--button--standard--background, light-dark(#ffffff, #111827));
|
|
48
|
+
--button--background--hover: var(--button--standard--background--hover, light-dark(#f9fafb, #1f2937));
|
|
49
|
+
--button--background--active: var(--button--standard--background--active, light-dark(#f2f2f3, #374151));
|
|
50
|
+
--button--background--disabled: var(--button--standard--background--disabled, light-dark(#f2f2f3, #374151));
|
|
51
|
+
--button--border: var(--button--standard--border, 1px solid light-dark(#e5e7eb, #4b5563));
|
|
52
|
+
--button--border--disabled: var(--button--standard--border--disabled, 1px solid light-dark(#e5e7eb, #4b5563));
|
|
53
|
+
--button--box-shadow: var(--button--standard--box-shadow, 0px 3px 0px 0px light-dark(transparent, rgba(255, 255, 255, 0.3)) inset);
|
|
54
|
+
}
|
|
55
|
+
.button-theme--white {
|
|
56
|
+
--button--font--color: var(--button--white--font--color, light-dark(#2e2e2e, #ffffff));
|
|
57
|
+
--button--font--color--active: var(--button--white--font--color--active, light-dark(#2e2e2e, #ffffff));
|
|
58
|
+
--button--font--color--disabled: var(--button--white--font--color--disabled, light-dark(#2e2e2e, #ffffff));
|
|
59
|
+
--button--background: var(--button--white--background, light-dark(#ffffff, #111827));
|
|
60
|
+
--button--background--hover: var(--button--white--background--hover, light-dark(#f9fafb, #1f2937));
|
|
61
|
+
--button--background--active: var(--button--white--background--active, light-dark(#f2f2f3, #374151));
|
|
62
|
+
--button--background--disabled: var(--button--white--background--disabled, light-dark(#f2f2f3, #374151));
|
|
63
|
+
--button--border: var(--button--white--border, none);
|
|
64
|
+
--button--border--disabled: var(--button--white--border--disabled, none);
|
|
65
|
+
--button--box-shadow: var(--button--white--box-shadow, 0px 3px 0px 0px light-dark(transparent, rgba(255, 255, 255, 0.3)) inset);
|
|
66
|
+
}
|
|
67
|
+
.button-theme--gray {
|
|
68
|
+
--button--font--color: var(--button--gray--font--color, light-dark(#2e2e2e, #ffffff));
|
|
69
|
+
--button--font--color--active: var(--button--gray--font--color--active, light-dark(#2e2e2e, #ffffff));
|
|
70
|
+
--button--font--color--disabled: var(--button--gray--font--color--disabled, light-dark(#2e2e2e, #ffffff));
|
|
71
|
+
--button--background: var(--button--gray--background, light-dark(#f2f2f3, #374151));
|
|
72
|
+
--button--background--hover: var(--button--gray--background--hover, light-dark(#f9fafb, #1f2937));
|
|
73
|
+
--button--background--active: var(--button--gray--background--active, light-dark(#f2f2f3, #374151));
|
|
74
|
+
--button--background--disabled: var(--button--gray--background--disabled, light-dark(#f2f2f3, #374151));
|
|
75
|
+
--button--border: var(--button--gray--border, 1px solid light-dark(#e5e7eb, #4b5563));
|
|
76
|
+
--button--border--disabled: var(--button--gray--border--disabled, 1px solid light-dark(#e5e7eb, #4b5563));
|
|
77
|
+
--button--box-shadow: var(--button--gray--box-shadow, 0px 3px 0px 0px rgba(255, 255, 255, 0.3) inset);
|
|
78
|
+
}
|
|
79
|
+
.button-theme--green {
|
|
80
|
+
--button--font--color: var(--button--green--font--color, light-dark(#0cce6b, #ffffff));
|
|
81
|
+
--button--font--color--active: var(--button--green--font--color--active, light-dark(#0cce6b, #ffffff));
|
|
82
|
+
--button--font--color--disabled: var(--button--green--font--color--disabled, light-dark(#0cce6b, #ffffff));
|
|
83
|
+
--button--background: var(--button--green--background, light-dark(#d4fce7, #374151));
|
|
84
|
+
--button--background--hover: var(--button--green--background--hover, light-dark(#088745, #1f2937));
|
|
85
|
+
--button--background--active: var(--button--green--background--active, light-dark(#088745, #374151));
|
|
86
|
+
--button--background--disabled: var(--button--green--background--disabled, light-dark(#ffffff, #374151));
|
|
87
|
+
--button--border: var(--button--green--border, 1px solid light-dark(#0cce6b, #4b5563));
|
|
88
|
+
--button--border--disabled: var(--button--green--border--disabled, 1px solid light-dark(#0cce6b, #4b5563));
|
|
89
|
+
--button--box-shadow: var(--button--green--box-shadow, 0px 3px 0px 0px rgba(255, 255, 255, 0.3) inset);
|
|
90
|
+
}
|
|
91
|
+
.button-theme--black {
|
|
92
|
+
--button--font--color: var(--button--black--font--color, light-dark(#ffffff, #2e2e2e));
|
|
93
|
+
--button--font--color--active: var(--button--black--font--color--active, light-dark(#ffffff, #2e2e2e));
|
|
94
|
+
--button--font--color--disabled: var(--button--black--font--color--disabled, light-dark(#ffffff, #2e2e2e));
|
|
95
|
+
--button--background: var(--button--black--background, light-dark(#1c1c1c, #fafafa));
|
|
96
|
+
--button--background--hover: var(--button--black--background--hover, light-dark(#1f2937, #f2f2f3));
|
|
97
|
+
--button--background--active: var(--button--black--background--active, light-dark(#374151, #e5e7eb));
|
|
98
|
+
--button--background--disabled: var(--button--black--background--disabled, light-dark(#374151, #e5e7eb));
|
|
99
|
+
--button--border: var(--button--black--border, none);
|
|
100
|
+
--button--border--disabled: var(--button--black--border--disabled, none);
|
|
101
|
+
--button--box-shadow: var(--button--black--box-shadow, 0px 3px 0px 0px rgba(255, 255, 255, 0.3) inset);
|
|
102
|
+
}
|
|
103
|
+
.button-theme--alert {
|
|
104
|
+
--button--font--color: var(--button--alert--font--color, #ffffff);
|
|
105
|
+
--button--font--color--active: var(--button--alert--font--color--active, #ffffff);
|
|
106
|
+
--button--font--color--disabled: var(--button--alert--font--color--disabled, #ffffff);
|
|
107
|
+
--button--background: var(--button--alert--background, #e71d36);
|
|
108
|
+
--button--background--hover: var(--button--alert--background--hover, #d4172d);
|
|
109
|
+
--button--background--active: var(--button--alert--background--active, #b81427);
|
|
110
|
+
--button--background--disabled: var(--button--alert--background--disabled, #f6a7b1);
|
|
111
|
+
--button--border: var(--button--alert--border, none);
|
|
112
|
+
--button--border--disabled: var(--button--alert--border--disabled, none);
|
|
113
|
+
--button--box-shadow: var(--button--alert--box-shadow, 0px 3px 0px 0px rgba(255, 255, 255, 0.3) inset);
|
|
114
|
+
}
|
|
115
|
+
.button-theme--warning {
|
|
116
|
+
--button--font--color: var(--button--warning--font--color, #ffffff);
|
|
117
|
+
--button--font--color--active: var(--button--warning--font--color--active, #ffffff);
|
|
118
|
+
--button--font--color--disabled: var(--button--warning--font--color--disabled, #ffffff);
|
|
119
|
+
--button--background: var(--button--warning--background, #ffa62b);
|
|
120
|
+
--button--background--hover: var(--button--warning--background--hover, #d97706);
|
|
121
|
+
--button--background--active: var(--button--warning--background--active, #b45309);
|
|
122
|
+
--button--background--disabled: var(--button--warning--background--disabled, #fcd34d);
|
|
123
|
+
--button--border: var(--button--warning--border, none);
|
|
124
|
+
--button--border--disabled: var(--button--warning--border--disabled, none);
|
|
125
|
+
--button--box-shadow: var(--button--warning--box-shadow, 0px 3px 0px 0px rgba(255, 255, 255, 0.3) inset);
|
|
126
|
+
}
|
|
127
|
+
.button-theme--text-only {
|
|
128
|
+
--button--font--color: var(--button--text-only--font--color, light-dark(#2e2e2e, #ffffff));
|
|
129
|
+
--button--font--color--active: var(--button--text-only--font--color--active, light-dark(#2e2e2e, #ffffff));
|
|
130
|
+
--button--font--color--disabled: var(--button--text-only--font--color--disabled, light-dark(#2e2e2e, #ffffff));
|
|
131
|
+
--button--background: var(--button--text-only--background, transparent);
|
|
132
|
+
--button--background--hover: var(--button--text-only--background--hover, light-dark(#f2f2f3, #111827));
|
|
133
|
+
--button--background--active: var(--button--text-only--background--active, light-dark(#e5e7eb, #1f2937));
|
|
134
|
+
--button--background--disabled: var(--button--text-only--background--disabled, transparent);
|
|
135
|
+
--button--border: var(--button--text-only--border, none);
|
|
136
|
+
--button--border--disabled: var(--button--text-only--border--disabled, none);
|
|
137
|
+
--button--box-shadow: var(--button--text-only--box-shadow, none);
|
|
138
|
+
}
|
|
139
|
+
.button-theme--transparent-success {
|
|
140
|
+
--button--font--color: var(--button--transparent-success--font--color, #0cce6b);
|
|
141
|
+
--button--font--color--active: var(--button--transparent-success--font--color--active, #0cce6b);
|
|
142
|
+
--button--font--color--disabled: var(--button--transparent-success--font--color--disabled, #39f393);
|
|
143
|
+
--button--background: var(--button--transparent-success--background, #ecfef4);
|
|
144
|
+
--button--background--hover: var(--button--transparent-success--background--hover, #ecfef4);
|
|
145
|
+
--button--background--active: var(--button--transparent-success--background--active, #d4fce7);
|
|
146
|
+
--button--background--disabled: var(--button--transparent-success--background--disabled, transparent);
|
|
147
|
+
--button--border: var(--button--transparent-success--border, 1px solid #0cce6b);
|
|
148
|
+
--button--border--disabled: var(--button--transparent-success--border--disabled, 1px solid #39f393);
|
|
149
|
+
--button--box-shadow: var(--button--transparent-success--box-shadow, none);
|
|
150
|
+
}
|
|
151
|
+
.button-theme--transparent-primary {
|
|
152
|
+
--button--font--color: var(--button--transparent-primary--font--color, #144ab0);
|
|
153
|
+
--button--font--color--active: var(--button--transparent-primary--font--color--active, #144ab0);
|
|
154
|
+
--button--font--color--disabled: var(--button--transparent-primary--font--color--disabled, #91b3f3);
|
|
155
|
+
--button--background: var(--button--transparent-primary--background, #f1f6fd);
|
|
156
|
+
--button--background--hover: var(--button--transparent-primary--background--hover, #f1f6fd);
|
|
157
|
+
--button--background--active: var(--button--transparent-primary--background--active, #dfe9fb);
|
|
158
|
+
--button--background--disabled: var(--button--transparent-primary--background--disabled, transparent);
|
|
159
|
+
--button--border: var(--button--transparent-primary--border, 1px solid #144ab0);
|
|
160
|
+
--button--border--disabled: var(--button--transparent-primary--border--disabled, 1px solid #91b3f3);
|
|
161
|
+
--button--box-shadow: var(--button--transparent-primary--box-shadow, none);
|
|
162
|
+
}
|
|
163
|
+
.button-theme--transparent-white {
|
|
164
|
+
--button--font--color: var(--button--transparent-white--font--color, #ffffff);
|
|
165
|
+
--button--font--color--active: var(--button--transparent-white--font--color--active, #ffffff);
|
|
166
|
+
--button--font--color--disabled: var(--button--transparent-white--font--color--disabled, #ffffff);
|
|
167
|
+
--button--background: var(--button--transparent-white--background, transparent);
|
|
168
|
+
--button--background--hover: var(--button--transparent-white--background--hover, transparent);
|
|
169
|
+
--button--background--active: var(--button--transparent-white--background--active, transparent);
|
|
170
|
+
--button--background--disabled: var(--button--transparent-white--background--disabled, transparent);
|
|
171
|
+
--button--border: var(--button--transparent-white--border, 1px solid #ffffff);
|
|
172
|
+
--button--border--disabled: var(--button--transparent-white--border--disabled, 1px solid #ffffff);
|
|
173
|
+
--button--box-shadow: var(--button--transparent-white--box-shadow, none);
|
|
174
|
+
}
|
|
175
|
+
.button-theme--transparent-gray {
|
|
176
|
+
--button--font--color: var(--button--transparent-gray--font--color, light-dark(#6b7280, #e5e7eb));
|
|
177
|
+
--button--font--color--active: var(
|
|
178
|
+
--button--transparent-gray--font--color--active,
|
|
179
|
+
light-dark(#6b7280, #e5e7eb)
|
|
180
|
+
);
|
|
181
|
+
--button--font--color--disabled: var(
|
|
182
|
+
--button--transparent-gray--font--color--disabled,
|
|
183
|
+
light-dark(#6b7280, #e5e7eb)
|
|
184
|
+
);
|
|
185
|
+
--button--background: var(--button--transparent-gray--background, light-dark(#f9fafb, #1f2937));
|
|
186
|
+
--button--background--hover: var(--button--transparent-gray--background--hover, light-dark(#f9fafb, #1f2937));
|
|
187
|
+
--button--background--active: var(--button--transparent-gray--background--active, light-dark(#f2f2f3, #374151));
|
|
188
|
+
--button--background--disabled: var(--button--transparent-gray--background--disabled, transparent);
|
|
189
|
+
--button--border: var(--button--transparent-gray--border, 1px solid light-dark(#6b7280, #e5e7eb));
|
|
190
|
+
--button--border--disabled: var(
|
|
191
|
+
--button--transparent-gray--border--disabled,
|
|
192
|
+
1px solid light-dark(#6b7280, #e5e7eb)
|
|
193
|
+
);
|
|
194
|
+
--button--box-shadow: var(--button--transparent-gray--box-shadow, none);
|
|
195
|
+
}
|
|
196
|
+
.button-theme--transparent-warning {
|
|
197
|
+
--button--font--color: var(--button--transparent-warning--font--color, #ffa62b);
|
|
198
|
+
--button--font--color--active: var(--button--transparent-warning--font--color--active, #ffa62b);
|
|
199
|
+
--button--font--color--disabled: var(--button--transparent-warning--font--color--disabled, #fcd34d);
|
|
200
|
+
--button--background: var(--button--transparent-warning--background, #fffbeb);
|
|
201
|
+
--button--background--hover: var(--button--transparent-warning--background--hover, #fffbeb);
|
|
202
|
+
--button--background--active: var(--button--transparent-warning--background--active, #fef3c7);
|
|
203
|
+
--button--background--disabled: var(--button--transparent-warning--background--disabled, transparent);
|
|
204
|
+
--button--border: var(--button--transparent-warning--border, 1px solid #ffa62b);
|
|
205
|
+
--button--border--disabled: var(--button--transparent-warning--border--disabled, 1px solid #fcd34d);
|
|
206
|
+
--button--box-shadow: var(--button--transparent-warning--box-shadow, none);
|
|
207
|
+
}
|
|
208
|
+
.button-theme--transparent-destructive {
|
|
209
|
+
--button--font--color: var(--button--transparent-destructive--font--color, #e71d36);
|
|
210
|
+
--button--font--color--active: var(--button--transparent-destructive--font--color--active, #e71d36);
|
|
211
|
+
--button--font--color--disabled: var(--button--transparent-destructive--font--color--disabled, #f6a7b1);
|
|
212
|
+
--button--background: var(--button--transparent-destructive--background, #fef1f3);
|
|
213
|
+
--button--background--hover: var(--button--transparent-destructive--background--hover, #fef1f3);
|
|
214
|
+
--button--background--active: var(--button--transparent-destructive--background--active, #fde8ea);
|
|
215
|
+
--button--background--disabled: var(--button--transparent-destructive--background--disabled, transparent);
|
|
216
|
+
--button--border: var(--button--transparent-destructive--border, 1px solid #e71d36);
|
|
217
|
+
--button--border--disabled: var(--button--transparent-destructive--border--disabled, 1px solid #f6a7b1);
|
|
218
|
+
--button--box-shadow: var(--button--transparent-destructive--box-shadow, none);
|
|
219
|
+
}
|
|
220
|
+
.button-theme--size-standard {
|
|
221
|
+
--button--height: 2em;
|
|
222
|
+
--button--text--font-size: 0.75em;
|
|
223
|
+
}
|
|
224
|
+
.button-theme--size-large {
|
|
225
|
+
--button--height: 3em;
|
|
226
|
+
--button--font-weight: 500;
|
|
227
|
+
--icon--stroke-width: 0.4;
|
|
228
|
+
--button--text--font-size: 0.9375em;
|
|
229
|
+
}
|
|
230
|
+
.button-theme--size-small {
|
|
231
|
+
--button--height: 1.5em;
|
|
232
|
+
--button--text--font-size: 0.625em;
|
|
233
|
+
}</style>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ButtonSize, ButtonVariant } from './types';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
type Props = {
|
|
4
|
+
variant?: ButtonVariant | null;
|
|
5
|
+
size?: ButtonSize | null;
|
|
6
|
+
children: Snippet;
|
|
7
|
+
};
|
|
8
|
+
declare const ButtonTheme: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type ButtonTheme = ReturnType<typeof ButtonTheme>;
|
|
10
|
+
export default ButtonTheme;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export type ButtonVariant = 'primary' | 'standard' | 'alert' | 'warning' | 'white' | 'gray' | 'green' | 'black' | 'text-only' | 'transparent-success' | 'transparent-primary' | 'transparent-gray' | 'transparent-white' | 'transparent-warning' | 'transparent-destructive';
|
|
2
|
+
export type ButtonSize = 'standard' | 'large' | 'small';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">import { default as Button } from '../button/cmp.button.svelte';
|
|
2
|
+
let { type = 'button', disabled = false, autofocus = false, variant = 'primary', on, children } = $props();
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="dialog-button">
|
|
6
|
+
<Button type={type} disabled={disabled} autofocus={autofocus} variant={variant} on={on}>
|
|
7
|
+
{@render children()}
|
|
8
|
+
</Button>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<style>.dialog-button {
|
|
12
|
+
--button--min-width: 8em;
|
|
13
|
+
}</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ButtonVariant } from '../button/resources/types';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
type Props = {
|
|
4
|
+
type?: 'button' | 'submit' | 'reset';
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
autofocus?: boolean;
|
|
7
|
+
variant?: ButtonVariant;
|
|
8
|
+
on?: {
|
|
9
|
+
click?: (e: MouseEvent) => void;
|
|
10
|
+
};
|
|
11
|
+
children: Snippet;
|
|
12
|
+
};
|
|
13
|
+
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
14
|
+
type Cmp = ReturnType<typeof Cmp>;
|
|
15
|
+
export default Cmp;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">import { default as Button } from '../button/cmp.button.svelte';
|
|
2
|
+
let { disabled = false, on, children } = $props();
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="dialog-cancel-button">
|
|
6
|
+
<Button type="button" disabled={disabled} variant="standard" on={on}>
|
|
7
|
+
{@render children()}
|
|
8
|
+
</Button>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<style>.dialog-cancel-button {
|
|
12
|
+
--button--min-width: 8em;
|
|
13
|
+
}</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
type Props = {
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
on?: {
|
|
5
|
+
click?: (e: MouseEvent) => void;
|
|
6
|
+
};
|
|
7
|
+
children: Snippet;
|
|
8
|
+
};
|
|
9
|
+
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type Cmp = ReturnType<typeof Cmp>;
|
|
11
|
+
export default Cmp;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts" generics="TResult = void, TCancelResult = void">import { default as Icon } from '../icon/cmp.icon.svelte';
|
|
2
|
+
import IconDismiss24Filled from '@fluentui/svg-icons/icons/dismiss_24_filled.svg?raw';
|
|
3
|
+
let { controller } = $props();
|
|
4
|
+
const handleClick = () => {
|
|
5
|
+
controller.cancel();
|
|
6
|
+
};
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<button type="button" class="dialog-close-button" onclick={handleClick} aria-label="Close">
|
|
10
|
+
<Icon src={IconDismiss24Filled} />
|
|
11
|
+
</button>
|
|
12
|
+
|
|
13
|
+
<style>.dialog-close-button {
|
|
14
|
+
--_dialog-close-button--color: var(--dialog-close-button--color, light-dark(#6b7280, #d1d5db));
|
|
15
|
+
--icon--size: 1.5rem;
|
|
16
|
+
color: var(--_dialog-close-button--color);
|
|
17
|
+
}</style>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DialogController } from './dialog-controller';
|
|
2
|
+
declare function $$render<TResult = void, TCancelResult = void>(): {
|
|
3
|
+
props: {
|
|
4
|
+
controller: DialogController<TResult, TCancelResult>;
|
|
5
|
+
};
|
|
6
|
+
exports: {};
|
|
7
|
+
bindings: "";
|
|
8
|
+
slots: {};
|
|
9
|
+
events: {};
|
|
10
|
+
};
|
|
11
|
+
declare class __sveltets_Render<TResult = void, TCancelResult = void> {
|
|
12
|
+
props(): ReturnType<typeof $$render<TResult, TCancelResult>>['props'];
|
|
13
|
+
events(): ReturnType<typeof $$render<TResult, TCancelResult>>['events'];
|
|
14
|
+
slots(): ReturnType<typeof $$render<TResult, TCancelResult>>['slots'];
|
|
15
|
+
bindings(): "";
|
|
16
|
+
exports(): {};
|
|
17
|
+
}
|
|
18
|
+
interface $$IsomorphicComponent {
|
|
19
|
+
new <TResult = void, TCancelResult = void>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TResult, TCancelResult>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TResult, TCancelResult>['props']>, ReturnType<__sveltets_Render<TResult, TCancelResult>['events']>, ReturnType<__sveltets_Render<TResult, TCancelResult>['slots']>> & {
|
|
20
|
+
$$bindings?: ReturnType<__sveltets_Render<TResult, TCancelResult>['bindings']>;
|
|
21
|
+
} & ReturnType<__sveltets_Render<TResult, TCancelResult>['exports']>;
|
|
22
|
+
<TResult = void, TCancelResult = void>(internal: unknown, props: ReturnType<__sveltets_Render<TResult, TCancelResult>['props']> & {}): ReturnType<__sveltets_Render<TResult, TCancelResult>['exports']>;
|
|
23
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
24
|
+
}
|
|
25
|
+
declare const Cmp: $$IsomorphicComponent;
|
|
26
|
+
type Cmp<TResult = void, TCancelResult = void> = InstanceType<typeof Cmp<TResult, TCancelResult>>;
|
|
27
|
+
export default Cmp;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
<script lang="ts" generics="TResult = void, TCancelResult = void, TData = void">import { Dialogs } from './dialogs.svelte';
|
|
2
|
+
import { DialogPosition, DialogSize } from './types.svelte';
|
|
3
|
+
import { untrack } from 'svelte';
|
|
4
|
+
let { dialog } = $props();
|
|
5
|
+
let dialogElement = $state();
|
|
6
|
+
const isActive = $derived(Dialogs.active?.id === dialog.id);
|
|
7
|
+
const canDismiss = $derived(!dialog.controller.settings.nonCancelable && dialog.controller.settings.closeOnEsc);
|
|
8
|
+
const DialogView = $derived(dialog.view);
|
|
9
|
+
// TEMP: Workaround for Chromium bug where preventDefault() on cancel event
|
|
10
|
+
// doesn't always prevent dialog close. Using keydown to block ESC earlier.
|
|
11
|
+
// Remove when browser bug is fixed.
|
|
12
|
+
// See: https://issues.chromium.org/issues/41487622
|
|
13
|
+
const handleKeydown = (event) => {
|
|
14
|
+
if (event.key !== /*@wc-ignore*/ 'Escape') {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (!canDismiss) {
|
|
18
|
+
event.preventDefault();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const handleCancel = (event) => {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
if (canDismiss) {
|
|
24
|
+
dialog.controller.cancel();
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const handleBackdropClick = (event) => {
|
|
28
|
+
if (!dialog.controller.settings.closeOnClickOutside) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (dialog.controller.settings.nonCancelable) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (event.target === dialogElement) {
|
|
35
|
+
dialog.controller.cancel();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
// Use $effect to ensure showModal() is called when dialog element changes (including HMR)
|
|
39
|
+
$effect(() => {
|
|
40
|
+
if (dialogElement && !dialogElement.open) {
|
|
41
|
+
dialogElement.showModal();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
$effect(() => {
|
|
45
|
+
const handleNavigateBack = () => {
|
|
46
|
+
Dialogs.closeAll();
|
|
47
|
+
};
|
|
48
|
+
const shouldTrack = untrack(() => Dialogs.count === 1);
|
|
49
|
+
if (shouldTrack) {
|
|
50
|
+
window.addEventListener('popstate', handleNavigateBack);
|
|
51
|
+
}
|
|
52
|
+
return () => {
|
|
53
|
+
if (shouldTrack) {
|
|
54
|
+
window.removeEventListener('popstate', handleNavigateBack);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
const size = $derived(dialog.controller.containerSettings.size);
|
|
59
|
+
const position = $derived(dialog.controller.containerSettings.position);
|
|
60
|
+
const isCustomWidth = $derived(!Object.values(DialogSize).includes(size));
|
|
61
|
+
const customWidth = $derived(isCustomWidth ? size : null);
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
<dialog
|
|
65
|
+
bind:this={dialogElement}
|
|
66
|
+
class="dialog-container"
|
|
67
|
+
class:dialog-container--inactive={!isActive}
|
|
68
|
+
class:dialog-container--size-small={size === DialogSize.Small}
|
|
69
|
+
class:dialog-container--size-medium={size === DialogSize.Medium}
|
|
70
|
+
class:dialog-container--size-default={size === DialogSize.Default}
|
|
71
|
+
class:dialog-container--size-large={size === DialogSize.Large}
|
|
72
|
+
class:dialog-container--size-fullhd={size === DialogSize.FullHD}
|
|
73
|
+
class:dialog-container--size-auto={size === DialogSize.Auto}
|
|
74
|
+
class:dialog-container--position-center={position === DialogPosition.Center}
|
|
75
|
+
class:dialog-container--position-center-top={position === DialogPosition.CenterTop}
|
|
76
|
+
class:dialog-container--position-full-screen={position === DialogPosition.FullScreen}
|
|
77
|
+
class:dialog-container--position-full-height={position === DialogPosition.FullHeight}
|
|
78
|
+
onkeydown={handleKeydown}
|
|
79
|
+
oncancel={handleCancel}
|
|
80
|
+
onclick={handleBackdropClick}
|
|
81
|
+
style:--_dialog-container--custom-width={customWidth}>
|
|
82
|
+
<div class="dialog-container__content">
|
|
83
|
+
<DialogView controller={dialog.controller} data={dialog.data as TData} />
|
|
84
|
+
</div>
|
|
85
|
+
</dialog>
|
|
86
|
+
|
|
87
|
+
<style>.dialog-container {
|
|
88
|
+
--_dialog-container--backdrop: var(--dialog-container--backdrop, light-dark(rgba(0, 0, 0, 0.5), rgba(255, 255, 255, 0.15)));
|
|
89
|
+
--_dialog-container--border-radius: var(--dialog-container--border-radius, 0.5rem);
|
|
90
|
+
--_dialog-container--max-width: var(--dialog-container--max-width, 64rem);
|
|
91
|
+
--_dialog-container--padding: var(--dialog-container--padding, 1rem);
|
|
92
|
+
--_dialog-container--scrollbar-thumb: var(--dialog-container--scrollbar-thumb, light-dark(#c1c1c1, #383838));
|
|
93
|
+
position: fixed;
|
|
94
|
+
inset: 0;
|
|
95
|
+
margin: 0;
|
|
96
|
+
border: none;
|
|
97
|
+
background: transparent;
|
|
98
|
+
max-width: 100vw;
|
|
99
|
+
max-height: 100vh;
|
|
100
|
+
width: 100vw;
|
|
101
|
+
height: 100vh;
|
|
102
|
+
overflow-x: hidden;
|
|
103
|
+
overflow-y: auto;
|
|
104
|
+
display: flex;
|
|
105
|
+
flex-direction: column;
|
|
106
|
+
align-items: center;
|
|
107
|
+
box-sizing: border-box;
|
|
108
|
+
padding: var(--_dialog-container--padding);
|
|
109
|
+
--_cross-browser-scrollbar--thumb-color: var(--_dialog-container--scrollbar-thumb);
|
|
110
|
+
--_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
|
|
111
|
+
}
|
|
112
|
+
.dialog-container::-webkit-scrollbar {
|
|
113
|
+
width: 6px;
|
|
114
|
+
height: 6px;
|
|
115
|
+
}
|
|
116
|
+
.dialog-container::-webkit-scrollbar-track {
|
|
117
|
+
background: var(--_cross-browser-scrollbar--track-color);
|
|
118
|
+
border-radius: 100vw;
|
|
119
|
+
}
|
|
120
|
+
.dialog-container::-webkit-scrollbar-thumb {
|
|
121
|
+
background: var(--_cross-browser-scrollbar--thumb-color);
|
|
122
|
+
border-radius: 100vw;
|
|
123
|
+
}
|
|
124
|
+
@supports (scrollbar-color: transparent transparent) {
|
|
125
|
+
.dialog-container {
|
|
126
|
+
scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
|
|
127
|
+
scrollbar-width: thin;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
.dialog-container::backdrop {
|
|
131
|
+
background: var(--_dialog-container--backdrop);
|
|
132
|
+
}
|
|
133
|
+
.dialog-container--inactive::backdrop {
|
|
134
|
+
background: transparent;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.dialog-container--size-small {
|
|
138
|
+
--_dialog-container--max-width: 31.25rem;
|
|
139
|
+
}
|
|
140
|
+
.dialog-container--size-medium {
|
|
141
|
+
--_dialog-container--max-width: 48.75rem;
|
|
142
|
+
}
|
|
143
|
+
.dialog-container--size-default {
|
|
144
|
+
--_dialog-container--max-width: 64rem;
|
|
145
|
+
}
|
|
146
|
+
.dialog-container--size-large {
|
|
147
|
+
--_dialog-container--max-width: 80rem;
|
|
148
|
+
}
|
|
149
|
+
.dialog-container--size-fullhd {
|
|
150
|
+
--_dialog-container--max-width: 118.75rem;
|
|
151
|
+
}
|
|
152
|
+
.dialog-container--size-auto {
|
|
153
|
+
--_dialog-container--max-width: max-content;
|
|
154
|
+
}
|
|
155
|
+
.dialog-container--position-center {
|
|
156
|
+
justify-content: center;
|
|
157
|
+
}
|
|
158
|
+
.dialog-container--position-center-top {
|
|
159
|
+
justify-content: flex-start;
|
|
160
|
+
}
|
|
161
|
+
.dialog-container--position-full-screen {
|
|
162
|
+
--_dialog-container--padding: 0;
|
|
163
|
+
--_dialog-container--border-radius: 0;
|
|
164
|
+
--_dialog-container--max-width: 100%;
|
|
165
|
+
overflow: hidden;
|
|
166
|
+
}
|
|
167
|
+
.dialog-container--position-full-height {
|
|
168
|
+
--_dialog-container--padding: 0;
|
|
169
|
+
--_dialog-container--border-radius: 0;
|
|
170
|
+
overflow: hidden;
|
|
171
|
+
}
|
|
172
|
+
.dialog-container__content {
|
|
173
|
+
width: 100%;
|
|
174
|
+
max-width: var(--_dialog-container--custom-width, var(--_dialog-container--max-width));
|
|
175
|
+
border-radius: var(--_dialog-container--border-radius);
|
|
176
|
+
pointer-events: auto;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.dialog-container--position-full-screen .dialog-container__content,
|
|
180
|
+
.dialog-container--position-full-height .dialog-container__content {
|
|
181
|
+
flex: 1;
|
|
182
|
+
min-height: 0;
|
|
183
|
+
}</style>
|