@14ch/svelte-ui 0.0.61 → 0.0.63
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.
|
@@ -185,22 +185,22 @@
|
|
|
185
185
|
--svelte-ui-text-inverse-subtle-color: var(--base-500-transparent);
|
|
186
186
|
--svelte-ui-text-placeholder-color: var(--white-500-transparent);
|
|
187
187
|
/* ボーダーカラー */
|
|
188
|
-
--svelte-ui-border-color: var(--white-
|
|
189
|
-
--svelte-ui-border-weak-color: var(--white-
|
|
190
|
-
--svelte-ui-border-strong-color: var(--white-
|
|
188
|
+
--svelte-ui-border-color: var(--white-200-transparent);
|
|
189
|
+
--svelte-ui-border-weak-color: var(--white-100-transparent);
|
|
190
|
+
--svelte-ui-border-strong-color: var(--white-300-transparent);
|
|
191
191
|
/* 非アクティブ色 */
|
|
192
|
-
--svelte-ui-inactive-color: var(--white-
|
|
192
|
+
--svelte-ui-inactive-color: var(--white-200-transparent);
|
|
193
193
|
/* 入力欄背景色 */
|
|
194
194
|
--svelte-ui-form-bg: var(--white-100-transparent);
|
|
195
195
|
/* サーフェス背景色 */
|
|
196
|
-
--svelte-ui-surface-color: var(--base-
|
|
196
|
+
--svelte-ui-surface-color: var(--base-950);
|
|
197
197
|
--svelte-ui-surface-accent-color: var(--white-50-transparent);
|
|
198
198
|
--svelte-ui-surface-inverse-color: var(--white-800-transparent);
|
|
199
199
|
/* スケルトン色 */
|
|
200
200
|
--svelte-ui-skeleton-color: var(--white-100-transparent);
|
|
201
201
|
/* hover & select 効果 */
|
|
202
202
|
--svelte-ui-hover-overlay: var(--white-100-transparent);
|
|
203
|
-
--svelte-ui-select-overlay: var(--primary-
|
|
203
|
+
--svelte-ui-select-overlay: var(--primary-800-transparent);
|
|
204
204
|
/* ドロップダウンアイコン */
|
|
205
205
|
--svelte-ui-dropdown-icon-color: var(--svelte-ui-text-subtle-color);
|
|
206
206
|
/* フォーカス色 */
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
/* Disabled色 */
|
|
209
209
|
--svelte-ui-disabled-bg: var(--white-100-transparent);
|
|
210
210
|
/* Glass色 */
|
|
211
|
-
--svelte-ui-glass-bg: var(--white-
|
|
211
|
+
--svelte-ui-glass-bg: var(--white-100-transparent);
|
|
212
212
|
}
|
|
213
213
|
|
|
214
214
|
:where(:root),
|
|
@@ -200,18 +200,18 @@
|
|
|
200
200
|
--svelte-ui-text-placeholder-color: var(--white-500-transparent);
|
|
201
201
|
|
|
202
202
|
/* ボーダーカラー */
|
|
203
|
-
--svelte-ui-border-color: var(--white-
|
|
204
|
-
--svelte-ui-border-weak-color: var(--white-
|
|
205
|
-
--svelte-ui-border-strong-color: var(--white-
|
|
203
|
+
--svelte-ui-border-color: var(--white-200-transparent);
|
|
204
|
+
--svelte-ui-border-weak-color: var(--white-100-transparent);
|
|
205
|
+
--svelte-ui-border-strong-color: var(--white-300-transparent);
|
|
206
206
|
|
|
207
207
|
/* 非アクティブ色 */
|
|
208
|
-
--svelte-ui-inactive-color: var(--white-
|
|
208
|
+
--svelte-ui-inactive-color: var(--white-200-transparent);
|
|
209
209
|
|
|
210
210
|
/* 入力欄背景色 */
|
|
211
211
|
--svelte-ui-form-bg: var(--white-100-transparent);
|
|
212
212
|
|
|
213
213
|
/* サーフェス背景色 */
|
|
214
|
-
--svelte-ui-surface-color: var(--base-
|
|
214
|
+
--svelte-ui-surface-color: var(--base-950);
|
|
215
215
|
--svelte-ui-surface-accent-color: var(--white-50-transparent);
|
|
216
216
|
--svelte-ui-surface-inverse-color: var(--white-800-transparent);
|
|
217
217
|
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
|
|
221
221
|
/* hover & select 効果 */
|
|
222
222
|
--svelte-ui-hover-overlay: var(--white-100-transparent);
|
|
223
|
-
--svelte-ui-select-overlay: var(--primary-
|
|
223
|
+
--svelte-ui-select-overlay: var(--primary-800-transparent);
|
|
224
224
|
|
|
225
225
|
/* ドロップダウンアイコン */
|
|
226
226
|
--svelte-ui-dropdown-icon-color: var(--svelte-ui-text-subtle-color);
|
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
--svelte-ui-disabled-bg: var(--white-100-transparent);
|
|
233
233
|
|
|
234
234
|
/* Glass色 */
|
|
235
|
-
--svelte-ui-glass-bg: var(--white-
|
|
235
|
+
--svelte-ui-glass-bg: var(--white-100-transparent);
|
|
236
236
|
}
|
|
237
237
|
|
|
238
238
|
:where(:root),
|
|
@@ -55,6 +55,26 @@
|
|
|
55
55
|
let bottomItems: SnackbarData[] = $derived(
|
|
56
56
|
snackbarManager.items.filter((item) => item.position === 'bottom')
|
|
57
57
|
);
|
|
58
|
+
|
|
59
|
+
// =========================================================================
|
|
60
|
+
// Top layer (popover)
|
|
61
|
+
// =========================================================================
|
|
62
|
+
// Modal は <dialog>.showModal() でトップレイヤーに載るため、通常の z-index では前面に出せない。
|
|
63
|
+
// Snackbar 自身も popover でトップレイヤーに載せて Dialog より前面に表示する。
|
|
64
|
+
let topEl: HTMLDivElement | null = $state(null);
|
|
65
|
+
let bottomEl: HTMLDivElement | null = $state(null);
|
|
66
|
+
|
|
67
|
+
const ensureShown = (el: HTMLDivElement | null) => {
|
|
68
|
+
if (!el || typeof el.showPopover !== 'function') return;
|
|
69
|
+
if (!el.matches(':popover-open')) el.showPopover();
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
$effect(() => {
|
|
73
|
+
if (topItems.length > 0) ensureShown(topEl);
|
|
74
|
+
});
|
|
75
|
+
$effect(() => {
|
|
76
|
+
if (bottomItems.length > 0) ensureShown(bottomEl);
|
|
77
|
+
});
|
|
58
78
|
</script>
|
|
59
79
|
|
|
60
80
|
{#snippet snackbarItemSnippet(item: SnackbarData, index: number)}
|
|
@@ -79,7 +99,7 @@
|
|
|
79
99
|
|
|
80
100
|
<!-- Snackbar Top Items -->
|
|
81
101
|
{#if topItems.length > 0}
|
|
82
|
-
<div class="snackbar snackbar--top" data-testid="snackbar">
|
|
102
|
+
<div bind:this={topEl} class="snackbar snackbar--top" popover="manual" data-testid="snackbar">
|
|
83
103
|
{#each topItems as item, index (item.id)}
|
|
84
104
|
{@render snackbarItemSnippet(item, index)}
|
|
85
105
|
{/each}
|
|
@@ -88,7 +108,12 @@
|
|
|
88
108
|
|
|
89
109
|
<!-- Snackbar Bottom Items -->
|
|
90
110
|
{#if bottomItems.length > 0}
|
|
91
|
-
<div
|
|
111
|
+
<div
|
|
112
|
+
bind:this={bottomEl}
|
|
113
|
+
class="snackbar snackbar--bottom"
|
|
114
|
+
popover="manual"
|
|
115
|
+
data-testid="snackbar"
|
|
116
|
+
>
|
|
92
117
|
{#each bottomItems as item, index (item.id)}
|
|
93
118
|
{@render snackbarItemSnippet(item, index)}
|
|
94
119
|
{/each}
|
|
@@ -97,12 +122,23 @@
|
|
|
97
122
|
|
|
98
123
|
<style>
|
|
99
124
|
.snackbar {
|
|
125
|
+
/* popover の UA デフォルトスタイルを打ち消す(inset/margin/border/padding/背景/overflow)。
|
|
126
|
+
inset は left より先に打ち消す(あとに置くと left の中央寄せを上書きしてしまう) */
|
|
127
|
+
inset: auto;
|
|
128
|
+
margin: 0;
|
|
129
|
+
padding: 0;
|
|
130
|
+
border: 0;
|
|
131
|
+
background: transparent;
|
|
132
|
+
overflow: visible;
|
|
133
|
+
color: inherit;
|
|
134
|
+
|
|
100
135
|
position: fixed;
|
|
101
136
|
left: 50%;
|
|
102
137
|
transform: translateX(-50%);
|
|
103
138
|
width: max-content;
|
|
104
139
|
max-width: 90vw;
|
|
105
140
|
pointer-events: none;
|
|
141
|
+
/* popover 非対応ブラウザ向けフォールバック(対応時はトップレイヤーで最前面になる) */
|
|
106
142
|
z-index: var(--svelte-ui-snackbar-z-index, 1000);
|
|
107
143
|
display: flex;
|
|
108
144
|
flex-direction: column;
|