@sveltia/ui 0.7.4 → 0.8.0
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/alert/alert.svelte +4 -4
- package/package/components/alert/alert.svelte.d.ts +2 -2
- package/package/components/button/button.svelte +13 -3
- package/package/components/button/button.svelte.d.ts +11 -4
- package/package/components/button/select-button-group.svelte +12 -8
- package/package/components/button/select-button.svelte +5 -4
- package/package/components/button/select-button.svelte.d.ts +2 -0
- package/package/components/calendar/calendar.svelte +20 -14
- package/package/components/checkbox/checkbox-group.svelte +6 -5
- package/package/components/checkbox/checkbox.svelte +16 -9
- package/package/components/checkbox/checkbox.svelte.d.ts +2 -2
- package/package/components/dialog/alert-dialog.svelte +50 -0
- package/package/components/dialog/alert-dialog.svelte.d.ts +55 -0
- package/package/components/dialog/confirmation-dialog.svelte +55 -0
- package/package/components/dialog/confirmation-dialog.svelte.d.ts +57 -0
- package/package/components/dialog/dialog.svelte +164 -220
- package/package/components/dialog/dialog.svelte.d.ts +20 -12
- package/package/components/dialog/prompt-dialog.svelte +78 -0
- package/package/components/dialog/prompt-dialog.svelte.d.ts +72 -0
- package/package/components/disclosure/disclosure.svelte +3 -3
- package/package/components/divider/divider.svelte +1 -1
- package/package/components/divider/spacer.svelte +1 -12
- package/package/components/divider/spacer.svelte.d.ts +0 -2
- package/package/components/drawer/drawer.svelte +118 -208
- package/package/components/drawer/drawer.svelte.d.ts +12 -8
- package/package/components/grid/grid-body.svelte +51 -0
- package/package/components/grid/grid-body.svelte.d.ts +36 -0
- package/package/components/grid/grid-cell.svelte +22 -0
- package/package/components/grid/grid-cell.svelte.d.ts +34 -0
- package/package/components/grid/grid-col-header.svelte +22 -0
- package/package/components/grid/grid-col-header.svelte.d.ts +34 -0
- package/package/components/grid/grid-foot.svelte +27 -0
- package/package/components/grid/grid-foot.svelte.d.ts +34 -0
- package/package/components/grid/grid-head.svelte +27 -0
- package/package/components/grid/grid-head.svelte.d.ts +34 -0
- package/package/components/grid/grid-row-header.svelte +23 -0
- package/package/components/grid/grid-row-header.svelte.d.ts +34 -0
- package/package/components/grid/grid-row.svelte +37 -0
- package/package/components/grid/grid-row.svelte.d.ts +44 -0
- package/package/components/grid/grid.svelte +52 -0
- package/package/components/grid/grid.svelte.d.ts +42 -0
- package/package/components/icon/icon.svelte +6 -7
- package/package/components/icon/icon.svelte.d.ts +0 -2
- package/package/components/listbox/listbox.svelte +6 -6
- package/package/components/listbox/option-group.svelte +6 -5
- package/package/components/listbox/option.svelte +7 -28
- package/package/components/listbox/option.svelte.d.ts +2 -0
- package/package/components/menu/menu-button.svelte +26 -16
- package/package/components/menu/menu-button.svelte.d.ts +2 -2
- package/package/components/menu/menu-item-checkbox.svelte +5 -4
- package/package/components/menu/menu-item-checkbox.svelte.d.ts +2 -0
- package/package/components/menu/menu-item-group.svelte +4 -3
- package/package/components/menu/menu-item-radio.svelte +5 -4
- package/package/components/menu/menu-item-radio.svelte.d.ts +2 -0
- package/package/components/menu/menu-item.svelte +7 -5
- package/package/components/menu/menu-item.svelte.d.ts +4 -2
- package/package/components/menu/menu.svelte +1 -1
- package/package/components/radio/radio-group.svelte +8 -8
- package/package/components/radio/radio-group.svelte.d.ts +2 -2
- package/package/components/radio/radio.svelte +5 -2
- package/package/components/radio/radio.svelte.d.ts +2 -0
- package/package/components/select/combobox.svelte +55 -35
- package/package/components/select/combobox.svelte.d.ts +3 -2
- package/package/components/select/select.svelte +10 -9
- package/package/components/select/select.svelte.d.ts +4 -3
- package/package/components/slider/slider.svelte +15 -7
- package/package/components/switch/switch.svelte +9 -6
- package/package/components/switch/switch.svelte.d.ts +2 -2
- package/package/components/table/table-body.svelte +31 -3
- package/package/components/table/table-body.svelte.d.ts +2 -0
- package/package/components/table/table-cell.svelte +3 -4
- package/package/components/table/table-cell.svelte.d.ts +1 -1
- package/package/components/table/table-col-header.svelte +1 -2
- package/package/components/table/table-foot.svelte +7 -3
- package/package/components/table/table-head.svelte +7 -3
- package/package/components/table/table-row-header.svelte +1 -2
- package/package/components/table/table-row.svelte +1 -14
- package/package/components/table/table-row.svelte.d.ts +0 -8
- package/package/components/table/table.svelte +5 -17
- package/package/components/table/table.svelte.d.ts +1 -7
- package/package/components/tabs/tab-list.svelte +7 -5
- package/package/components/tabs/tab-panel.svelte +1 -1
- package/package/components/tabs/tab.svelte +2 -1
- package/package/components/tabs/tab.svelte.d.ts +2 -0
- package/package/components/text-field/markdown-editor.svelte +36 -9
- package/package/components/text-field/markdown-editor.svelte.d.ts +2 -0
- package/package/components/text-field/number-input.svelte +107 -43
- package/package/components/text-field/number-input.svelte.d.ts +2 -0
- package/package/components/text-field/password-input.svelte +43 -12
- package/package/components/text-field/password-input.svelte.d.ts +2 -0
- package/package/components/text-field/search-bar.svelte +43 -13
- package/package/components/text-field/search-bar.svelte.d.ts +5 -0
- package/package/components/text-field/text-area.svelte +26 -6
- package/package/components/text-field/text-area.svelte.d.ts +2 -0
- package/package/components/text-field/text-input.svelte +37 -7
- package/package/components/text-field/text-input.svelte.d.ts +14 -4
- package/package/components/toast/toast.svelte +6 -16
- package/package/components/toast/toast.svelte.d.ts +2 -2
- package/package/components/toolbar/toolbar.svelte +3 -4
- package/package/components/util/app-shell.svelte +34 -29
- package/package/components/util/group.svelte +2 -2
- package/package/components/util/modal.svelte +220 -0
- package/package/components/util/modal.svelte.d.ts +83 -0
- package/package/components/util/popup.svelte +80 -121
- package/package/components/util/popup.svelte.d.ts +22 -13
- package/package/components/util/portal.svelte +1 -1
- package/package/index.d.ts +12 -0
- package/package/index.js +12 -0
- package/package/locales/en.d.ts +1 -0
- package/package/locales/en.js +1 -0
- package/package/locales/ja.d.ts +1 -0
- package/package/locales/ja.js +1 -0
- package/package/services/group.js +67 -13
- package/package/services/popup.d.ts +5 -1
- package/package/services/popup.js +22 -19
- package/package/styles/core.scss +13 -26
- package/package/styles/variables.scss +14 -2
- package/package.json +107 -11
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
A modal confirmation dialog. It shows the OK and Cancel buttons, just like `window.confirm()`.
|
|
4
|
+
@see https://w3c.github.io/aria/#alertdialog
|
|
5
|
+
@see https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/
|
|
6
|
+
@see https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm
|
|
7
|
+
-->
|
|
8
|
+
<script>
|
|
9
|
+
import Dialog from './dialog.svelte';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `class` attribute on the `<dialog>` element.
|
|
13
|
+
* @type {string}
|
|
14
|
+
*/
|
|
15
|
+
let className = '';
|
|
16
|
+
export { className as class };
|
|
17
|
+
/**
|
|
18
|
+
* Whether to open the dialog.
|
|
19
|
+
* @type {boolean}
|
|
20
|
+
*/
|
|
21
|
+
export let open = false;
|
|
22
|
+
/**
|
|
23
|
+
* Text label displayed on the header. Required.
|
|
24
|
+
* @type {string}
|
|
25
|
+
*/
|
|
26
|
+
export let title;
|
|
27
|
+
/**
|
|
28
|
+
* Text label displayed on the OK button.
|
|
29
|
+
* @type {string}
|
|
30
|
+
*/
|
|
31
|
+
export let okLabel = '';
|
|
32
|
+
/**
|
|
33
|
+
* Text label displayed on the Cancel button.
|
|
34
|
+
* @type {string}
|
|
35
|
+
*/
|
|
36
|
+
export let cancelLabel = '';
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<Dialog
|
|
40
|
+
role="alertdialog"
|
|
41
|
+
class={className}
|
|
42
|
+
bind:open
|
|
43
|
+
{title}
|
|
44
|
+
{okLabel}
|
|
45
|
+
{cancelLabel}
|
|
46
|
+
{...$$restProps}
|
|
47
|
+
on:opening
|
|
48
|
+
on:open
|
|
49
|
+
on:ok
|
|
50
|
+
on:cancel
|
|
51
|
+
on:closing
|
|
52
|
+
on:close
|
|
53
|
+
>
|
|
54
|
+
<slot />
|
|
55
|
+
</Dialog>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} ConfirmationDialogProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} ConfirmationDialogEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} ConfirmationDialogSlots */
|
|
4
|
+
/**
|
|
5
|
+
* A modal confirmation dialog. It shows the OK and Cancel buttons, just like `window.confirm()`.
|
|
6
|
+
* @see https://w3c.github.io/aria/#alertdialog
|
|
7
|
+
* @see https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/
|
|
8
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm
|
|
9
|
+
*/
|
|
10
|
+
export default class ConfirmationDialog extends SvelteComponent<{
|
|
11
|
+
[x: string]: any;
|
|
12
|
+
title: string;
|
|
13
|
+
class?: string;
|
|
14
|
+
open?: boolean;
|
|
15
|
+
okLabel?: string;
|
|
16
|
+
cancelLabel?: string;
|
|
17
|
+
}, {
|
|
18
|
+
opening: CustomEvent<any>;
|
|
19
|
+
open: CustomEvent<any>;
|
|
20
|
+
ok: CustomEvent<any>;
|
|
21
|
+
cancel: CustomEvent<any>;
|
|
22
|
+
closing: CustomEvent<any>;
|
|
23
|
+
close: CustomEvent<any>;
|
|
24
|
+
} & {
|
|
25
|
+
[evt: string]: CustomEvent<any>;
|
|
26
|
+
}, {
|
|
27
|
+
default: {};
|
|
28
|
+
}> {
|
|
29
|
+
}
|
|
30
|
+
export type ConfirmationDialogProps = typeof __propDef.props;
|
|
31
|
+
export type ConfirmationDialogEvents = typeof __propDef.events;
|
|
32
|
+
export type ConfirmationDialogSlots = typeof __propDef.slots;
|
|
33
|
+
import { SvelteComponent } from "svelte";
|
|
34
|
+
declare const __propDef: {
|
|
35
|
+
props: {
|
|
36
|
+
[x: string]: any;
|
|
37
|
+
title: string;
|
|
38
|
+
class?: string;
|
|
39
|
+
open?: boolean;
|
|
40
|
+
okLabel?: string;
|
|
41
|
+
cancelLabel?: string;
|
|
42
|
+
};
|
|
43
|
+
events: {
|
|
44
|
+
opening: CustomEvent<any>;
|
|
45
|
+
open: CustomEvent<any>;
|
|
46
|
+
ok: CustomEvent<any>;
|
|
47
|
+
cancel: CustomEvent<any>;
|
|
48
|
+
closing: CustomEvent<any>;
|
|
49
|
+
close: CustomEvent<any>;
|
|
50
|
+
} & {
|
|
51
|
+
[evt: string]: CustomEvent<any>;
|
|
52
|
+
};
|
|
53
|
+
slots: {
|
|
54
|
+
default: {};
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
export {};
|
|
@@ -5,289 +5,232 @@
|
|
|
5
5
|
@see https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/
|
|
6
6
|
-->
|
|
7
7
|
<script>
|
|
8
|
-
import { createEventDispatcher, onMount } from 'svelte';
|
|
9
8
|
import { _ } from 'svelte-i18n';
|
|
9
|
+
import { getRandomId } from '../../services/util';
|
|
10
10
|
import Button from '../button/button.svelte';
|
|
11
11
|
import Spacer from '../divider/spacer.svelte';
|
|
12
12
|
import Icon from '../icon/icon.svelte';
|
|
13
|
+
import Modal from '../util/modal.svelte';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
+
* The `class` attribute on the content element.
|
|
16
17
|
* @type {string}
|
|
17
18
|
*/
|
|
18
19
|
let className = '';
|
|
19
|
-
|
|
20
20
|
export { className as class };
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
/**
|
|
22
|
+
* The `role` attribute on the `<dialog>` element.
|
|
23
|
+
* @type {'dialog' | 'alertdialog'}
|
|
24
|
+
*/
|
|
25
|
+
export let role = 'dialog';
|
|
26
26
|
/**
|
|
27
27
|
* Width of the dialog.
|
|
28
28
|
* @type {('small' | 'medium' | 'large' | 'x-large')}
|
|
29
29
|
*/
|
|
30
30
|
export let size = 'medium';
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Whether to open the dialog.
|
|
33
|
+
* @type {boolean}
|
|
34
|
+
*/
|
|
35
|
+
export let open = false;
|
|
36
|
+
/**
|
|
37
|
+
* Text label displayed on the header. Required.
|
|
38
|
+
* @type {string}
|
|
39
|
+
*/
|
|
40
|
+
export let title;
|
|
41
|
+
/**
|
|
42
|
+
* Whether to show the Close button on the header.
|
|
43
|
+
* @type {boolean}
|
|
44
|
+
*/
|
|
38
45
|
export let showClose = false;
|
|
39
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Whether to show the OK button on the footer.
|
|
48
|
+
* @type {boolean}
|
|
49
|
+
*/
|
|
50
|
+
export let showOk = true;
|
|
51
|
+
/**
|
|
52
|
+
* Text label displayed on the OK button.
|
|
53
|
+
* @type {string}
|
|
54
|
+
*/
|
|
40
55
|
export let okLabel = '';
|
|
41
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Whether to disable the OK button.
|
|
58
|
+
* @type {boolean}
|
|
59
|
+
*/
|
|
42
60
|
export let okDisabled = false;
|
|
43
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Whether to show the Cancel button on the footer.
|
|
63
|
+
* @type {boolean}
|
|
64
|
+
*/
|
|
65
|
+
export let showCancel = true;
|
|
66
|
+
/**
|
|
67
|
+
* Text label displayed on the Cancel button.
|
|
68
|
+
* @type {string}
|
|
69
|
+
*/
|
|
44
70
|
export let cancelLabel = '';
|
|
45
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Whether to disable the Cancel button.
|
|
73
|
+
* @type {boolean}
|
|
74
|
+
*/
|
|
46
75
|
export let cancelDisabled = false;
|
|
47
|
-
|
|
48
|
-
export let closeOnBackdropClick = false;
|
|
49
|
-
|
|
50
|
-
const dispatch = createEventDispatcher();
|
|
51
|
-
/** @type {?HTMLDialogElement} */
|
|
52
|
-
let dialog;
|
|
53
|
-
/** @type {?HTMLFormElement} */
|
|
54
|
-
let form;
|
|
55
|
-
let showDialog = false;
|
|
56
|
-
let showContent = false;
|
|
57
|
-
|
|
58
76
|
/**
|
|
59
|
-
*
|
|
77
|
+
* Whether to close the modal when the backdrop (outside of the modal) is clicked.
|
|
78
|
+
* @type {boolean}
|
|
60
79
|
*/
|
|
61
|
-
|
|
62
|
-
(document.querySelector('.sui.app-shell') ?? document.body).appendChild(dialog);
|
|
63
|
-
showContent = true;
|
|
64
|
-
|
|
65
|
-
if (modal) {
|
|
66
|
-
dialog.showModal();
|
|
67
|
-
} else {
|
|
68
|
-
dialog.show();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
window.requestAnimationFrame(() => {
|
|
72
|
-
showDialog = true;
|
|
73
|
-
});
|
|
74
|
-
};
|
|
80
|
+
export let lightDismiss = false;
|
|
75
81
|
|
|
76
82
|
/**
|
|
77
|
-
*
|
|
83
|
+
* The ID of the drawer.
|
|
84
|
+
* @type {string}
|
|
78
85
|
*/
|
|
79
|
-
const
|
|
80
|
-
showDialog = false;
|
|
81
|
-
|
|
82
|
-
await new Promise((resolve) => {
|
|
83
|
-
form.addEventListener('transitionend', () => resolve(), { once: true });
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
showContent = false;
|
|
87
|
-
dialog?.close();
|
|
88
|
-
dialog?.remove();
|
|
89
|
-
|
|
90
|
-
if (['ok', 'cancel'].includes(dialog?.returnValue)) {
|
|
91
|
-
dispatch(dialog?.returnValue);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
dispatch('close', dialog?.returnValue);
|
|
95
|
-
};
|
|
96
|
-
|
|
86
|
+
const id = getRandomId('dialog');
|
|
97
87
|
/**
|
|
98
|
-
*
|
|
88
|
+
* a reference to the modal component.
|
|
89
|
+
* @type {Modal}
|
|
99
90
|
*/
|
|
100
|
-
|
|
101
|
-
if (dialog) {
|
|
102
|
-
if (open) {
|
|
103
|
-
openDialog();
|
|
104
|
-
} else {
|
|
105
|
-
closeDialog();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
$: {
|
|
111
|
-
void open;
|
|
112
|
-
toggleDialog();
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
onMount(() => {
|
|
116
|
-
dialog.remove();
|
|
117
|
-
|
|
118
|
-
// onUnmount
|
|
119
|
-
return () => {
|
|
120
|
-
dialog?.close();
|
|
121
|
-
dialog?.remove();
|
|
122
|
-
};
|
|
123
|
-
});
|
|
91
|
+
let modal;
|
|
124
92
|
</script>
|
|
125
93
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
class="
|
|
130
|
-
|
|
131
|
-
aria-
|
|
94
|
+
<Modal
|
|
95
|
+
{role}
|
|
96
|
+
{id}
|
|
97
|
+
class="dialog"
|
|
98
|
+
aria-label={$$slots.header ? undefined : title}
|
|
99
|
+
aria-labelledby={$$slots.header ? title : `${id}-title`}
|
|
100
|
+
aria-describedby="{id}-body"
|
|
101
|
+
bind:open
|
|
102
|
+
showBackdrop
|
|
103
|
+
{lightDismiss}
|
|
132
104
|
{...$$restProps}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
on:
|
|
140
|
-
// Cancelled with the Escape key
|
|
141
|
-
open = false;
|
|
142
|
-
}}
|
|
105
|
+
bind:this={modal}
|
|
106
|
+
on:opening
|
|
107
|
+
on:open
|
|
108
|
+
on:ok
|
|
109
|
+
on:cancel
|
|
110
|
+
on:closing
|
|
111
|
+
on:close
|
|
143
112
|
>
|
|
144
|
-
<
|
|
145
|
-
{#if
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
{
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
<slot name="header-extra" />
|
|
157
|
-
{/if}
|
|
158
|
-
{#if showClose}
|
|
159
|
-
<Button
|
|
160
|
-
variant="ghost"
|
|
161
|
-
iconic
|
|
162
|
-
on:click={() => {
|
|
163
|
-
dialog.returnValue = 'close';
|
|
164
|
-
open = false;
|
|
165
|
-
}}
|
|
166
|
-
>
|
|
167
|
-
<Icon slot="start-icon" name="close" label={$_('_sui.close')} />
|
|
168
|
-
</Button>
|
|
169
|
-
{/if}
|
|
113
|
+
<div role="none" class="content {className} {size}">
|
|
114
|
+
{#if title || showClose || $$slots.header || $$slots['header-extra']}
|
|
115
|
+
<div role="none" class="header">
|
|
116
|
+
{#if $$slots.header}
|
|
117
|
+
<slot name="header" />
|
|
118
|
+
{:else}
|
|
119
|
+
<div role="none" id="{id}-title" class="title">
|
|
120
|
+
{title}
|
|
121
|
+
</div>
|
|
122
|
+
<Spacer flex={true} />
|
|
123
|
+
{#if $$slots['header-extra']}
|
|
124
|
+
<slot name="header-extra" />
|
|
170
125
|
{/if}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
126
|
+
{#if showClose}
|
|
127
|
+
<Button
|
|
128
|
+
variant="ghost"
|
|
129
|
+
iconic
|
|
130
|
+
aria-label={$_('_sui.close')}
|
|
131
|
+
aria-controls={id}
|
|
132
|
+
on:click={() => {
|
|
133
|
+
modal.close('close');
|
|
134
|
+
}}
|
|
135
|
+
>
|
|
136
|
+
<Icon slot="start-icon" name="close" />
|
|
137
|
+
</Button>
|
|
138
|
+
{/if}
|
|
139
|
+
{/if}
|
|
175
140
|
</div>
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
variant="primary"
|
|
188
|
-
label={okLabel || $_('_sui.ok')}
|
|
189
|
-
disabled={okDisabled}
|
|
190
|
-
on:click={() => {
|
|
191
|
-
dialog.returnValue = 'ok';
|
|
192
|
-
open = false;
|
|
193
|
-
}}
|
|
194
|
-
/>
|
|
195
|
-
{/if}
|
|
196
|
-
{#if showCancel}
|
|
197
|
-
<Button
|
|
198
|
-
variant="secondary"
|
|
199
|
-
label={cancelLabel || $_('_sui.cancel')}
|
|
200
|
-
disabled={cancelDisabled}
|
|
201
|
-
on:click={() => {
|
|
202
|
-
dialog.returnValue = 'cancel';
|
|
203
|
-
open = false;
|
|
204
|
-
}}
|
|
205
|
-
/>
|
|
206
|
-
{/if}
|
|
141
|
+
{/if}
|
|
142
|
+
<div role="none" id="{id}-body" class="body">
|
|
143
|
+
<slot />
|
|
144
|
+
</div>
|
|
145
|
+
{#if showOk || showCancel || $$slots.footer || $$slots['footer-extra']}
|
|
146
|
+
<div role="none" class="footer">
|
|
147
|
+
{#if $$slots.footer}
|
|
148
|
+
<slot name="footer" />
|
|
149
|
+
{:else}
|
|
150
|
+
{#if $$slots['footer-extra']}
|
|
151
|
+
<slot name="footer-extra" />
|
|
207
152
|
{/if}
|
|
208
|
-
|
|
209
|
-
|
|
153
|
+
<Spacer flex={true} />
|
|
154
|
+
{#if showOk}
|
|
155
|
+
<Button
|
|
156
|
+
variant="primary"
|
|
157
|
+
label={okLabel || $_('_sui.ok')}
|
|
158
|
+
disabled={okDisabled}
|
|
159
|
+
on:click={() => {
|
|
160
|
+
modal.close('ok');
|
|
161
|
+
}}
|
|
162
|
+
/>
|
|
163
|
+
{/if}
|
|
164
|
+
{#if showCancel}
|
|
165
|
+
<Button
|
|
166
|
+
variant="secondary"
|
|
167
|
+
label={cancelLabel || $_('_sui.cancel')}
|
|
168
|
+
disabled={cancelDisabled}
|
|
169
|
+
on:click={() => {
|
|
170
|
+
modal.close('cancel');
|
|
171
|
+
}}
|
|
172
|
+
/>
|
|
173
|
+
{/if}
|
|
174
|
+
{/if}
|
|
175
|
+
</div>
|
|
210
176
|
{/if}
|
|
211
|
-
</
|
|
212
|
-
</
|
|
177
|
+
</div>
|
|
178
|
+
</Modal>
|
|
213
179
|
|
|
214
|
-
<style
|
|
215
|
-
|
|
216
|
-
justify-content: center;
|
|
217
|
-
align-items: center;
|
|
218
|
-
outline: 0;
|
|
219
|
-
background-color: var(--sui-popup-backdrop-color);
|
|
220
|
-
}
|
|
221
|
-
dialog.open form {
|
|
222
|
-
opacity: 1;
|
|
223
|
-
transform: scale(100%);
|
|
224
|
-
transition-duration: 100ms;
|
|
225
|
-
}
|
|
226
|
-
dialog:not(.open) {
|
|
227
|
-
pointer-events: none !important;
|
|
228
|
-
}
|
|
229
|
-
dialog:not(.open) form {
|
|
230
|
-
opacity: 0;
|
|
231
|
-
transform: scale(90%);
|
|
232
|
-
pointer-events: none;
|
|
233
|
-
transition-duration: 200ms;
|
|
234
|
-
}
|
|
235
|
-
dialog:not(.open) :global(*) {
|
|
236
|
-
pointer-events: none !important;
|
|
237
|
-
}
|
|
238
|
-
dialog :global(a),
|
|
239
|
-
dialog :global(input[aria-disabled="false"]),
|
|
240
|
-
dialog :global(textarea[aria-disabled="false"]),
|
|
241
|
-
dialog :global(button[aria-disabled="false"]),
|
|
242
|
-
dialog :global([tabindex="0"]) {
|
|
243
|
-
pointer-events: all;
|
|
244
|
-
}
|
|
245
|
-
dialog form {
|
|
180
|
+
<style>.content {
|
|
181
|
+
position: relative;
|
|
246
182
|
display: flex;
|
|
247
183
|
flex-direction: column;
|
|
248
184
|
border-radius: 4px;
|
|
249
|
-
max-width: calc(
|
|
185
|
+
max-width: calc(100dvw - 32px);
|
|
250
186
|
background-color: var(--sui-secondary-background-color-translucent);
|
|
187
|
+
box-shadow: 0 8px 16px var(--sui-popup-shadow-color);
|
|
251
188
|
-webkit-backdrop-filter: blur(16px);
|
|
252
189
|
backdrop-filter: blur(16px);
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
190
|
+
transition-property: transform;
|
|
191
|
+
}
|
|
192
|
+
:global(dialog.open) .content {
|
|
193
|
+
transition-duration: 150ms;
|
|
194
|
+
transform: scale(100%);
|
|
195
|
+
}
|
|
196
|
+
:global(dialog:not(.open)) .content {
|
|
197
|
+
transition-duration: 300ms;
|
|
198
|
+
transform: scale(90%);
|
|
256
199
|
}
|
|
257
|
-
|
|
200
|
+
.content.small {
|
|
258
201
|
width: 400px;
|
|
259
202
|
max-height: 400px;
|
|
260
203
|
}
|
|
261
204
|
@media (max-height: 400px) {
|
|
262
|
-
|
|
263
|
-
max-height: calc(
|
|
205
|
+
.content.small {
|
|
206
|
+
max-height: calc(100dvh - 32px);
|
|
264
207
|
}
|
|
265
208
|
}
|
|
266
|
-
|
|
209
|
+
.content.medium {
|
|
267
210
|
width: 600px;
|
|
268
211
|
max-height: 600px;
|
|
269
212
|
}
|
|
270
213
|
@media (max-height: 600px) {
|
|
271
|
-
|
|
272
|
-
max-height: calc(
|
|
214
|
+
.content.medium {
|
|
215
|
+
max-height: calc(100dvh - 32px);
|
|
273
216
|
}
|
|
274
217
|
}
|
|
275
|
-
|
|
218
|
+
.content.large {
|
|
276
219
|
width: 800px;
|
|
277
220
|
max-height: 800px;
|
|
278
221
|
}
|
|
279
222
|
@media (max-height: 800px) {
|
|
280
|
-
|
|
281
|
-
max-height: calc(
|
|
223
|
+
.content.large {
|
|
224
|
+
max-height: calc(100dvh - 32px);
|
|
282
225
|
}
|
|
283
226
|
}
|
|
284
|
-
|
|
227
|
+
.content.x-large {
|
|
285
228
|
width: 1000px;
|
|
286
229
|
max-height: 1000px;
|
|
287
230
|
}
|
|
288
231
|
@media (max-height: 1000px) {
|
|
289
|
-
|
|
290
|
-
max-height: calc(
|
|
232
|
+
.content.x-large {
|
|
233
|
+
max-height: calc(100dvh - 32px);
|
|
291
234
|
}
|
|
292
235
|
}
|
|
293
236
|
|
|
@@ -295,7 +238,7 @@ dialog.x-large form {
|
|
|
295
238
|
.footer {
|
|
296
239
|
display: flex;
|
|
297
240
|
align-items: center;
|
|
298
|
-
gap:
|
|
241
|
+
gap: 4px;
|
|
299
242
|
}
|
|
300
243
|
|
|
301
244
|
.header {
|
|
@@ -314,8 +257,9 @@ dialog.x-large form {
|
|
|
314
257
|
margin: 0 24px 24px;
|
|
315
258
|
}
|
|
316
259
|
|
|
317
|
-
.
|
|
260
|
+
.body {
|
|
318
261
|
overflow: auto;
|
|
319
262
|
margin: 24px 24px;
|
|
320
263
|
white-space: normal;
|
|
264
|
+
line-height: var(--sui-line-height-compact);
|
|
321
265
|
}</style>
|
|
@@ -8,21 +8,25 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export default class Dialog extends SvelteComponent<{
|
|
10
10
|
[x: string]: any;
|
|
11
|
+
title: string;
|
|
11
12
|
class?: string;
|
|
12
|
-
title?: string;
|
|
13
13
|
size?: "small" | "medium" | "large" | "x-large";
|
|
14
|
+
role?: "dialog" | "alertdialog";
|
|
14
15
|
open?: boolean;
|
|
15
|
-
|
|
16
|
-
showCancel?: boolean;
|
|
17
|
-
showOk?: boolean;
|
|
16
|
+
lightDismiss?: boolean;
|
|
18
17
|
showClose?: boolean;
|
|
18
|
+
showOk?: boolean;
|
|
19
19
|
okLabel?: string;
|
|
20
20
|
okDisabled?: boolean;
|
|
21
|
+
showCancel?: boolean;
|
|
21
22
|
cancelLabel?: string;
|
|
22
23
|
cancelDisabled?: boolean;
|
|
23
|
-
closeOnBackdropClick?: boolean;
|
|
24
24
|
}, {
|
|
25
|
-
|
|
25
|
+
opening: CustomEvent<any>;
|
|
26
|
+
open: CustomEvent<any>;
|
|
27
|
+
ok: CustomEvent<any>;
|
|
28
|
+
cancel: CustomEvent<any>;
|
|
29
|
+
closing: CustomEvent<any>;
|
|
26
30
|
close: CustomEvent<any>;
|
|
27
31
|
} & {
|
|
28
32
|
[evt: string]: CustomEvent<any>;
|
|
@@ -41,22 +45,26 @@ import { SvelteComponent } from "svelte";
|
|
|
41
45
|
declare const __propDef: {
|
|
42
46
|
props: {
|
|
43
47
|
[x: string]: any;
|
|
48
|
+
title: string;
|
|
44
49
|
class?: string;
|
|
45
|
-
title?: string;
|
|
46
50
|
size?: ('small' | 'medium' | 'large' | 'x-large');
|
|
51
|
+
role?: 'dialog' | 'alertdialog';
|
|
47
52
|
open?: boolean;
|
|
48
|
-
|
|
49
|
-
showCancel?: boolean;
|
|
50
|
-
showOk?: boolean;
|
|
53
|
+
lightDismiss?: boolean;
|
|
51
54
|
showClose?: boolean;
|
|
55
|
+
showOk?: boolean;
|
|
52
56
|
okLabel?: string;
|
|
53
57
|
okDisabled?: boolean;
|
|
58
|
+
showCancel?: boolean;
|
|
54
59
|
cancelLabel?: string;
|
|
55
60
|
cancelDisabled?: boolean;
|
|
56
|
-
closeOnBackdropClick?: boolean;
|
|
57
61
|
};
|
|
58
62
|
events: {
|
|
59
|
-
|
|
63
|
+
opening: CustomEvent<any>;
|
|
64
|
+
open: CustomEvent<any>;
|
|
65
|
+
ok: CustomEvent<any>;
|
|
66
|
+
cancel: CustomEvent<any>;
|
|
67
|
+
closing: CustomEvent<any>;
|
|
60
68
|
close: CustomEvent<any>;
|
|
61
69
|
} & {
|
|
62
70
|
[evt: string]: CustomEvent<any>;
|