@14ch/svelte-ui 0.0.11 → 0.0.13
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/assets/styles/variables.scss +0 -6
- package/dist/components/Button.svelte +82 -73
- package/dist/components/Button.svelte.d.ts +26 -25
- package/dist/components/Checkbox.svelte +86 -77
- package/dist/components/Checkbox.svelte.d.ts +26 -25
- package/dist/components/CheckboxGroup.svelte +43 -26
- package/dist/components/CheckboxGroup.svelte.d.ts +4 -3
- package/dist/components/ColorPicker.svelte +71 -61
- package/dist/components/ColorPicker.svelte.d.ts +28 -27
- package/dist/components/Combobox.svelte +79 -76
- package/dist/components/Combobox.svelte.d.ts +28 -27
- package/dist/components/ConfirmDialog.svelte +24 -22
- package/dist/components/ConfirmDialog.svelte.d.ts +2 -2
- package/dist/components/Datepicker.svelte +131 -84
- package/dist/components/Datepicker.svelte.d.ts +33 -30
- package/dist/components/DatepickerCalendar.svelte +24 -18
- package/dist/components/DatepickerCalendar.svelte.d.ts +7 -6
- package/dist/components/Dialog.svelte +30 -28
- package/dist/components/Dialog.svelte.d.ts +2 -2
- package/dist/components/Drawer.svelte +31 -29
- package/dist/components/Drawer.svelte.d.ts +2 -2
- package/dist/components/Fab.svelte +63 -54
- package/dist/components/Fab.svelte.d.ts +26 -25
- package/dist/components/FileUploader.svelte +59 -49
- package/dist/components/FileUploader.svelte.d.ts +14 -13
- package/dist/components/Icon.svelte +29 -27
- package/dist/components/Icon.svelte.d.ts +2 -2
- package/dist/components/IconButton.svelte +88 -79
- package/dist/components/IconButton.svelte.d.ts +26 -25
- package/dist/components/ImageUploader.svelte +61 -51
- package/dist/components/ImageUploader.svelte.d.ts +14 -13
- package/dist/components/ImageUploaderPreview.svelte +33 -20
- package/dist/components/ImageUploaderPreview.svelte.d.ts +2 -2
- package/dist/components/Input.svelte +105 -93
- package/dist/components/Input.svelte.d.ts +30 -29
- package/dist/components/LoadingSpinner.svelte +14 -13
- package/dist/components/LoadingSpinner.svelte.d.ts +2 -2
- package/dist/components/Modal.svelte +26 -24
- package/dist/components/Modal.svelte.d.ts +2 -2
- package/dist/components/Pagination.svelte +20 -28
- package/dist/components/Pagination.svelte.d.ts +2 -2
- package/dist/components/Popup.svelte +48 -49
- package/dist/components/Popup.svelte.d.ts +3 -3
- package/dist/components/PopupMenu.svelte +90 -90
- package/dist/components/PopupMenu.svelte.d.ts +2 -2
- package/dist/components/PopupMenuButton.svelte +83 -76
- package/dist/components/PopupMenuButton.svelte.d.ts +26 -25
- package/dist/components/Radio.svelte +73 -63
- package/dist/components/Radio.svelte.d.ts +30 -28
- package/dist/components/RadioGroup.svelte +39 -26
- package/dist/components/RadioGroup.svelte.d.ts +4 -3
- package/dist/components/SegmentedControl.svelte +79 -69
- package/dist/components/SegmentedControl.svelte.d.ts +26 -25
- package/dist/components/Select.svelte +73 -65
- package/dist/components/Select.svelte.d.ts +27 -26
- package/dist/components/Slider.svelte +73 -64
- package/dist/components/Slider.svelte.d.ts +26 -25
- package/dist/components/Snackbar.svelte +10 -9
- package/dist/components/Snackbar.svelte.d.ts +2 -2
- package/dist/components/SnackbarItem.svelte +28 -28
- package/dist/components/SnackbarItem.svelte.d.ts +2 -2
- package/dist/components/Switch.svelte +70 -62
- package/dist/components/Switch.svelte.d.ts +26 -25
- package/dist/components/Tab.svelte +31 -20
- package/dist/components/Tab.svelte.d.ts +3 -2
- package/dist/components/TabItem.svelte +20 -19
- package/dist/components/TabItem.svelte.d.ts +2 -2
- package/dist/components/Textarea.svelte +96 -95
- package/dist/components/Textarea.svelte.d.ts +27 -26
- package/dist/components/skeleton/Skeleton.svelte +16 -14
- package/dist/components/skeleton/Skeleton.svelte.d.ts +2 -2
- package/dist/components/skeleton/SkeletonAvatar.svelte +9 -5
- package/dist/components/skeleton/SkeletonAvatar.svelte.d.ts +2 -2
- package/dist/components/skeleton/SkeletonBox.svelte +11 -11
- package/dist/components/skeleton/SkeletonBox.svelte.d.ts +2 -2
- package/dist/components/skeleton/SkeletonButton.svelte +10 -5
- package/dist/components/skeleton/SkeletonButton.svelte.d.ts +2 -2
- package/dist/components/skeleton/SkeletonHeading.svelte +8 -11
- package/dist/components/skeleton/SkeletonHeading.svelte.d.ts +2 -2
- package/dist/components/skeleton/SkeletonMedia.svelte +10 -6
- package/dist/components/skeleton/SkeletonMedia.svelte.d.ts +2 -2
- package/dist/components/skeleton/SkeletonText.svelte +9 -13
- package/dist/components/skeleton/SkeletonText.svelte.d.ts +2 -2
- package/dist/index.d.ts +41 -0
- package/dist/types/eventHandlers.d.ts +9 -0
- package/dist/types/eventHandlers.js +2 -0
- package/dist/types/options.d.ts +1 -1
- package/dist/utils/formatText.js +4 -1
- package/package.json +5 -2
|
@@ -7,10 +7,97 @@
|
|
|
7
7
|
import { convertToHtml, convertToHtmlWithLink } from '../utils/formatText';
|
|
8
8
|
import type { HTMLTextareaAttributes } from 'svelte/elements';
|
|
9
9
|
import type { IconVariant } from '../types/icon';
|
|
10
|
+
import type {
|
|
11
|
+
FocusHandler,
|
|
12
|
+
KeyboardHandler,
|
|
13
|
+
MouseHandler,
|
|
14
|
+
TouchHandler,
|
|
15
|
+
PointerHandler,
|
|
16
|
+
BivariantValueHandler
|
|
17
|
+
} from '../types/eventHandlers';
|
|
10
18
|
|
|
11
19
|
// =========================================================================
|
|
12
20
|
// Props, States & Constants
|
|
13
21
|
// =========================================================================
|
|
22
|
+
export type TextareaProps = {
|
|
23
|
+
// 基本プロパティ
|
|
24
|
+
name?: string;
|
|
25
|
+
value: string;
|
|
26
|
+
placeholder?: string;
|
|
27
|
+
|
|
28
|
+
// HTML属性系
|
|
29
|
+
id?: string | null;
|
|
30
|
+
tabindex?: number | null;
|
|
31
|
+
maxlength?: number | null;
|
|
32
|
+
autocomplete?: HTMLTextareaAttributes['autocomplete'];
|
|
33
|
+
wrap?: 'soft' | 'hard' | null;
|
|
34
|
+
spellcheck?: boolean | null;
|
|
35
|
+
autocapitalize?: 'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters' | null;
|
|
36
|
+
textareaAttributes?: HTMLTextareaAttributes | undefined;
|
|
37
|
+
|
|
38
|
+
// スタイル/レイアウト
|
|
39
|
+
rows?: number;
|
|
40
|
+
minHeight?: string | number | null;
|
|
41
|
+
maxHeight?: string | number | null;
|
|
42
|
+
inline?: boolean;
|
|
43
|
+
focusStyle?: 'background' | 'outline' | 'none';
|
|
44
|
+
fullWidth?: boolean;
|
|
45
|
+
fullHeight?: boolean;
|
|
46
|
+
width?: string | number | null;
|
|
47
|
+
rounded?: boolean;
|
|
48
|
+
customStyle?: string;
|
|
49
|
+
|
|
50
|
+
// 状態/動作
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
autoResize?: boolean;
|
|
53
|
+
resizable?: boolean;
|
|
54
|
+
clearable?: boolean;
|
|
55
|
+
clearButtonAriaLabel?: string;
|
|
56
|
+
readonly?: boolean;
|
|
57
|
+
required?: boolean;
|
|
58
|
+
iconVariant?: IconVariant;
|
|
59
|
+
linkify?: boolean;
|
|
60
|
+
|
|
61
|
+
// フォーカスイベント
|
|
62
|
+
onfocus?: FocusHandler;
|
|
63
|
+
onblur?: FocusHandler;
|
|
64
|
+
|
|
65
|
+
// キーボードイベント
|
|
66
|
+
onkeydown?: KeyboardHandler;
|
|
67
|
+
onkeyup?: KeyboardHandler;
|
|
68
|
+
|
|
69
|
+
// マウスイベント
|
|
70
|
+
onclick?: MouseHandler;
|
|
71
|
+
onmousedown?: MouseHandler;
|
|
72
|
+
onmouseup?: MouseHandler;
|
|
73
|
+
onmouseenter?: MouseHandler;
|
|
74
|
+
onmouseleave?: MouseHandler;
|
|
75
|
+
onmouseover?: MouseHandler;
|
|
76
|
+
onmouseout?: MouseHandler;
|
|
77
|
+
oncontextmenu?: MouseHandler;
|
|
78
|
+
onauxclick?: MouseHandler;
|
|
79
|
+
|
|
80
|
+
// タッチイベント
|
|
81
|
+
ontouchstart?: TouchHandler;
|
|
82
|
+
ontouchend?: TouchHandler;
|
|
83
|
+
ontouchmove?: TouchHandler;
|
|
84
|
+
ontouchcancel?: TouchHandler;
|
|
85
|
+
|
|
86
|
+
// ポインターイベント
|
|
87
|
+
onpointerdown?: PointerHandler;
|
|
88
|
+
onpointerup?: PointerHandler;
|
|
89
|
+
onpointerenter?: PointerHandler;
|
|
90
|
+
onpointerleave?: PointerHandler;
|
|
91
|
+
onpointermove?: PointerHandler;
|
|
92
|
+
onpointercancel?: PointerHandler;
|
|
93
|
+
|
|
94
|
+
// 入力イベント
|
|
95
|
+
onchange?: (value: string) => void;
|
|
96
|
+
oninput?: (value: string) => void;
|
|
97
|
+
|
|
98
|
+
// その他
|
|
99
|
+
[key: string]: any;
|
|
100
|
+
};
|
|
14
101
|
|
|
15
102
|
let {
|
|
16
103
|
// 基本プロパティ
|
|
@@ -90,94 +177,14 @@
|
|
|
90
177
|
|
|
91
178
|
// その他
|
|
92
179
|
...restProps
|
|
93
|
-
}:
|
|
94
|
-
// 基本プロパティ
|
|
95
|
-
name?: string;
|
|
96
|
-
value: string;
|
|
97
|
-
placeholder?: string;
|
|
98
|
-
|
|
99
|
-
// HTML属性系
|
|
100
|
-
id?: string | null;
|
|
101
|
-
tabindex?: number | null;
|
|
102
|
-
maxlength?: number | null;
|
|
103
|
-
autocomplete?: HTMLTextareaAttributes['autocomplete'];
|
|
104
|
-
wrap?: 'soft' | 'hard' | null;
|
|
105
|
-
spellcheck?: boolean | null;
|
|
106
|
-
autocapitalize?: 'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters' | null;
|
|
107
|
-
textareaAttributes?: HTMLTextareaAttributes | undefined;
|
|
108
|
-
|
|
109
|
-
// スタイル/レイアウト
|
|
110
|
-
rows?: number;
|
|
111
|
-
minHeight?: number | null;
|
|
112
|
-
maxHeight?: string | number | null;
|
|
113
|
-
inline?: boolean;
|
|
114
|
-
focusStyle?: 'background' | 'outline' | 'none';
|
|
115
|
-
fullWidth?: boolean;
|
|
116
|
-
fullHeight?: boolean;
|
|
117
|
-
width?: string | number | null;
|
|
118
|
-
rounded?: boolean;
|
|
119
|
-
customStyle?: string;
|
|
120
|
-
|
|
121
|
-
// 状態/動作
|
|
122
|
-
disabled?: boolean;
|
|
123
|
-
autoResize?: boolean;
|
|
124
|
-
resizable?: boolean;
|
|
125
|
-
clearable?: boolean;
|
|
126
|
-
clearButtonAriaLabel?: string;
|
|
127
|
-
readonly?: boolean;
|
|
128
|
-
required?: boolean;
|
|
129
|
-
iconVariant?: IconVariant;
|
|
130
|
-
linkify?: boolean;
|
|
131
|
-
|
|
132
|
-
// フォーカスイベント
|
|
133
|
-
onfocus?: Function; // No params for type inference
|
|
134
|
-
onblur?: Function; // No params for type inference
|
|
135
|
-
|
|
136
|
-
// キーボードイベント
|
|
137
|
-
onkeydown?: Function; // No params for type inference
|
|
138
|
-
onkeyup?: Function; // No params for type inference
|
|
139
|
-
|
|
140
|
-
// マウスイベント
|
|
141
|
-
onclick?: Function; // No params for type inference
|
|
142
|
-
onmousedown?: Function; // No params for type inference
|
|
143
|
-
onmouseup?: Function; // No params for type inference
|
|
144
|
-
onmouseenter?: Function; // No params for type inference
|
|
145
|
-
onmouseleave?: Function; // No params for type inference
|
|
146
|
-
onmouseover?: Function; // No params for type inference
|
|
147
|
-
onmouseout?: Function; // No params for type inference
|
|
148
|
-
oncontextmenu?: Function; // No params for type inference
|
|
149
|
-
onauxclick?: Function; // No params for type inference
|
|
150
|
-
|
|
151
|
-
// タッチイベント
|
|
152
|
-
ontouchstart?: Function; // No params for type inference
|
|
153
|
-
ontouchend?: Function; // No params for type inference
|
|
154
|
-
ontouchmove?: Function; // No params for type inference
|
|
155
|
-
ontouchcancel?: Function; // No params for type inference
|
|
156
|
-
|
|
157
|
-
// ポインターイベント
|
|
158
|
-
onpointerdown?: Function; // No params for type inference
|
|
159
|
-
onpointerup?: Function; // No params for type inference
|
|
160
|
-
onpointerenter?: Function; // No params for type inference
|
|
161
|
-
onpointerleave?: Function; // No params for type inference
|
|
162
|
-
onpointermove?: Function; // No params for type inference
|
|
163
|
-
onpointercancel?: Function; // No params for type inference
|
|
164
|
-
|
|
165
|
-
// 入力イベント
|
|
166
|
-
onchange?: (value: string) => void;
|
|
167
|
-
oninput?: (value: string) => void;
|
|
168
|
-
|
|
169
|
-
// その他
|
|
170
|
-
[key: string]: any;
|
|
171
|
-
} = $props();
|
|
180
|
+
}: TextareaProps = $props();
|
|
172
181
|
|
|
173
182
|
let ref: HTMLTextAreaElement | null = null;
|
|
174
183
|
let isFocused: boolean = $state(false);
|
|
175
184
|
|
|
176
185
|
// =========================================================================
|
|
177
|
-
|
|
178
186
|
// Methods
|
|
179
187
|
// =========================================================================
|
|
180
|
-
|
|
181
188
|
const clear = (): void => {
|
|
182
189
|
if (disabled || readonly) return;
|
|
183
190
|
value = '';
|
|
@@ -326,21 +333,15 @@
|
|
|
326
333
|
// =========================================================================
|
|
327
334
|
// $derived
|
|
328
335
|
// =========================================================================
|
|
329
|
-
|
|
330
|
-
// min-height用CSS変数の上書きスタイル
|
|
331
|
-
// デフォルト値は variables.scss の --svelte-ui-textarea-min-height に委譲し、
|
|
332
|
-
// props で minHeight が指定されたときだけ上書きする
|
|
333
|
-
const minHeightVarStyle = $derived(
|
|
334
|
-
!inline && minHeight != null ? `--svelte-ui-textarea-min-height: ${minHeight}px;` : ''
|
|
335
|
-
);
|
|
336
|
-
|
|
336
|
+
const minHeightStyle = $derived(getStyleFromNumber(minHeight));
|
|
337
337
|
const maxHeightStyle = $derived(getStyleFromNumber(maxHeight));
|
|
338
338
|
const widthStyle = $derived(getStyleFromNumber(width));
|
|
339
339
|
|
|
340
340
|
// HTML表示用の値(autoResize時の高さ調整用)
|
|
341
341
|
const htmlValue = $derived.by(() => {
|
|
342
342
|
if (value !== '') {
|
|
343
|
-
|
|
343
|
+
const converted = convertToHtml(value);
|
|
344
|
+
let html = typeof converted === 'string' ? converted : String(converted ?? '');
|
|
344
345
|
// 最後の行が空だったら空白を追加(高さ調整のため)
|
|
345
346
|
const lines = html.split('<br />');
|
|
346
347
|
if (lines.length > 0 && lines[lines.length - 1] === '') {
|
|
@@ -350,7 +351,6 @@
|
|
|
350
351
|
} else {
|
|
351
352
|
// inline かつ value が空のとき、placeholder がなければ
|
|
352
353
|
// 1行分の高さを確保するためにダミーの を入れる
|
|
353
|
-
// (placeholder がある場合は :empty::before でプレースホルダを表示したいので空にしておく)
|
|
354
354
|
if (inline && !placeholder) {
|
|
355
355
|
return ' ';
|
|
356
356
|
}
|
|
@@ -388,7 +388,7 @@
|
|
|
388
388
|
<div
|
|
389
389
|
class="textarea__display-text"
|
|
390
390
|
data-placeholder={placeholder}
|
|
391
|
-
style="{
|
|
391
|
+
style="min-height: {minHeightStyle}; {customStyle}"
|
|
392
392
|
>
|
|
393
393
|
{@html htmlValue}
|
|
394
394
|
</div>
|
|
@@ -410,7 +410,7 @@
|
|
|
410
410
|
{spellcheck}
|
|
411
411
|
{autocapitalize}
|
|
412
412
|
class:resizable
|
|
413
|
-
style="
|
|
413
|
+
style="min-height: {minHeightStyle}; width: {widthStyle}; {customStyle}"
|
|
414
414
|
onchange={handleChange}
|
|
415
415
|
oninput={handleInput}
|
|
416
416
|
onfocus={handleFocus}
|
|
@@ -458,7 +458,7 @@
|
|
|
458
458
|
{/if}
|
|
459
459
|
</div>
|
|
460
460
|
{#if linkify}
|
|
461
|
-
<div class="textarea__link-text" style="{
|
|
461
|
+
<div class="textarea__link-text" style="min-height: {minHeightStyle}; {customStyle}">
|
|
462
462
|
{@html linkHtmlValue}
|
|
463
463
|
</div>
|
|
464
464
|
{/if}
|
|
@@ -662,7 +662,8 @@
|
|
|
662
662
|
}
|
|
663
663
|
|
|
664
664
|
textarea[readonly] {
|
|
665
|
-
|
|
665
|
+
/* Match Input behavior: readonly fields keep the same background,
|
|
666
|
+
* but use a default cursor to indicate non-editable. */
|
|
666
667
|
cursor: default;
|
|
667
668
|
}
|
|
668
669
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { HTMLTextareaAttributes } from 'svelte/elements';
|
|
2
2
|
import type { IconVariant } from '../types/icon';
|
|
3
|
-
type
|
|
3
|
+
import type { FocusHandler, KeyboardHandler, MouseHandler, TouchHandler, PointerHandler } from '../types/eventHandlers';
|
|
4
|
+
export type TextareaProps = {
|
|
4
5
|
name?: string;
|
|
5
6
|
value: string;
|
|
6
7
|
placeholder?: string;
|
|
@@ -13,7 +14,7 @@ type $$ComponentProps = {
|
|
|
13
14
|
autocapitalize?: 'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters' | null;
|
|
14
15
|
textareaAttributes?: HTMLTextareaAttributes | undefined;
|
|
15
16
|
rows?: number;
|
|
16
|
-
minHeight?: number | null;
|
|
17
|
+
minHeight?: string | number | null;
|
|
17
18
|
maxHeight?: string | number | null;
|
|
18
19
|
inline?: boolean;
|
|
19
20
|
focusStyle?: 'background' | 'outline' | 'none';
|
|
@@ -31,34 +32,34 @@ type $$ComponentProps = {
|
|
|
31
32
|
required?: boolean;
|
|
32
33
|
iconVariant?: IconVariant;
|
|
33
34
|
linkify?: boolean;
|
|
34
|
-
onfocus?:
|
|
35
|
-
onblur?:
|
|
36
|
-
onkeydown?:
|
|
37
|
-
onkeyup?:
|
|
38
|
-
onclick?:
|
|
39
|
-
onmousedown?:
|
|
40
|
-
onmouseup?:
|
|
41
|
-
onmouseenter?:
|
|
42
|
-
onmouseleave?:
|
|
43
|
-
onmouseover?:
|
|
44
|
-
onmouseout?:
|
|
45
|
-
oncontextmenu?:
|
|
46
|
-
onauxclick?:
|
|
47
|
-
ontouchstart?:
|
|
48
|
-
ontouchend?:
|
|
49
|
-
ontouchmove?:
|
|
50
|
-
ontouchcancel?:
|
|
51
|
-
onpointerdown?:
|
|
52
|
-
onpointerup?:
|
|
53
|
-
onpointerenter?:
|
|
54
|
-
onpointerleave?:
|
|
55
|
-
onpointermove?:
|
|
56
|
-
onpointercancel?:
|
|
35
|
+
onfocus?: FocusHandler;
|
|
36
|
+
onblur?: FocusHandler;
|
|
37
|
+
onkeydown?: KeyboardHandler;
|
|
38
|
+
onkeyup?: KeyboardHandler;
|
|
39
|
+
onclick?: MouseHandler;
|
|
40
|
+
onmousedown?: MouseHandler;
|
|
41
|
+
onmouseup?: MouseHandler;
|
|
42
|
+
onmouseenter?: MouseHandler;
|
|
43
|
+
onmouseleave?: MouseHandler;
|
|
44
|
+
onmouseover?: MouseHandler;
|
|
45
|
+
onmouseout?: MouseHandler;
|
|
46
|
+
oncontextmenu?: MouseHandler;
|
|
47
|
+
onauxclick?: MouseHandler;
|
|
48
|
+
ontouchstart?: TouchHandler;
|
|
49
|
+
ontouchend?: TouchHandler;
|
|
50
|
+
ontouchmove?: TouchHandler;
|
|
51
|
+
ontouchcancel?: TouchHandler;
|
|
52
|
+
onpointerdown?: PointerHandler;
|
|
53
|
+
onpointerup?: PointerHandler;
|
|
54
|
+
onpointerenter?: PointerHandler;
|
|
55
|
+
onpointerleave?: PointerHandler;
|
|
56
|
+
onpointermove?: PointerHandler;
|
|
57
|
+
onpointercancel?: PointerHandler;
|
|
57
58
|
onchange?: (value: string) => void;
|
|
58
59
|
oninput?: (value: string) => void;
|
|
59
60
|
[key: string]: any;
|
|
60
61
|
};
|
|
61
|
-
declare const Textarea: import("svelte").Component
|
|
62
|
+
declare const Textarea: import("svelte").Component<TextareaProps, {
|
|
62
63
|
focus: () => void;
|
|
63
64
|
}, "value">;
|
|
64
65
|
type Textarea = ReturnType<typeof Textarea>;
|
|
@@ -13,8 +13,17 @@
|
|
|
13
13
|
import { DEFAULT_PATTERN_CONFIG, PRESET_PATTERNS } from '../../constants/skeleton';
|
|
14
14
|
|
|
15
15
|
// =========================================================================
|
|
16
|
-
// Props
|
|
16
|
+
// Props, States & Constants
|
|
17
17
|
// =========================================================================
|
|
18
|
+
export type SkeletonProps = {
|
|
19
|
+
patterns?: SkeletonPatternConfig[];
|
|
20
|
+
repeat?: number;
|
|
21
|
+
repeatGap?: string | number;
|
|
22
|
+
patternGap?: string | number;
|
|
23
|
+
className?: string;
|
|
24
|
+
customStyle?: string;
|
|
25
|
+
animated?: boolean;
|
|
26
|
+
};
|
|
18
27
|
|
|
19
28
|
let {
|
|
20
29
|
// 基本プロパティ
|
|
@@ -25,22 +34,11 @@
|
|
|
25
34
|
className = '',
|
|
26
35
|
customStyle = '',
|
|
27
36
|
animated = true
|
|
28
|
-
}:
|
|
29
|
-
patterns?: SkeletonPatternConfig[];
|
|
30
|
-
repeat?: number;
|
|
31
|
-
repeatGap?: string | number;
|
|
32
|
-
patternGap?: string | number;
|
|
33
|
-
className?: string;
|
|
34
|
-
customStyle?: string;
|
|
35
|
-
animated?: boolean;
|
|
36
|
-
} = $props();
|
|
37
|
+
}: SkeletonProps = $props();
|
|
37
38
|
|
|
38
39
|
// =========================================================================
|
|
39
|
-
//
|
|
40
|
+
// Methods
|
|
40
41
|
// =========================================================================
|
|
41
|
-
|
|
42
|
-
const containerClasses = $derived(['skeleton', className].filter(Boolean).join(' '));
|
|
43
|
-
|
|
44
42
|
// パターン設定をマージ
|
|
45
43
|
const mergedPatterns = $derived.by(() => {
|
|
46
44
|
return patterns
|
|
@@ -97,6 +95,10 @@
|
|
|
97
95
|
.flat();
|
|
98
96
|
});
|
|
99
97
|
|
|
98
|
+
// =========================================================================
|
|
99
|
+
// $derived
|
|
100
|
+
// =========================================================================
|
|
101
|
+
const containerClasses = $derived(['skeleton', className].filter(Boolean).join(' '));
|
|
100
102
|
const repeatGapStyle = $derived(getStyleFromNumber(repeatGap));
|
|
101
103
|
const patternGapStyle = $derived(getStyleFromNumber(patternGap));
|
|
102
104
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SkeletonPatternConfig } from '../../types/skeleton';
|
|
2
|
-
type
|
|
2
|
+
export type SkeletonProps = {
|
|
3
3
|
patterns?: SkeletonPatternConfig[];
|
|
4
4
|
repeat?: number;
|
|
5
5
|
repeatGap?: string | number;
|
|
@@ -8,6 +8,6 @@ type $$ComponentProps = {
|
|
|
8
8
|
customStyle?: string;
|
|
9
9
|
animated?: boolean;
|
|
10
10
|
};
|
|
11
|
-
declare const Skeleton: import("svelte").Component
|
|
11
|
+
declare const Skeleton: import("svelte").Component<SkeletonProps, {}, "">;
|
|
12
12
|
type Skeleton = ReturnType<typeof Skeleton>;
|
|
13
13
|
export default Skeleton;
|
|
@@ -12,18 +12,22 @@
|
|
|
12
12
|
} from '../../constants/skeleton';
|
|
13
13
|
|
|
14
14
|
// =========================================================================
|
|
15
|
-
// Props
|
|
15
|
+
// Props, States & Constants
|
|
16
16
|
// =========================================================================
|
|
17
|
+
export type SkeletonAvatarProps = {
|
|
18
|
+
avatarConfig?: Partial<SkeletonAvatarConfig>;
|
|
19
|
+
animated?: boolean;
|
|
20
|
+
};
|
|
17
21
|
|
|
18
22
|
let {
|
|
19
23
|
// 基本プロパティ
|
|
20
24
|
avatarConfig = {},
|
|
21
25
|
animated = true
|
|
22
|
-
}:
|
|
23
|
-
avatarConfig?: Partial<SkeletonAvatarConfig>;
|
|
24
|
-
animated?: boolean;
|
|
25
|
-
} = $props();
|
|
26
|
+
}: SkeletonAvatarProps = $props();
|
|
26
27
|
|
|
28
|
+
// =========================================================================
|
|
29
|
+
// $derived
|
|
30
|
+
// =========================================================================
|
|
27
31
|
// マージされた設定
|
|
28
32
|
const mergedAvatarImageConfig = $derived({
|
|
29
33
|
...DEFAULT_AVATAR_IMAGE_CONFIG,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SkeletonAvatarConfig } from '../../types/skeleton';
|
|
2
|
-
type
|
|
2
|
+
export type SkeletonAvatarProps = {
|
|
3
3
|
avatarConfig?: Partial<SkeletonAvatarConfig>;
|
|
4
4
|
animated?: boolean;
|
|
5
5
|
};
|
|
6
|
-
declare const SkeletonAvatar: import("svelte").Component
|
|
6
|
+
declare const SkeletonAvatar: import("svelte").Component<SkeletonAvatarProps, {}, "">;
|
|
7
7
|
type SkeletonAvatar = ReturnType<typeof SkeletonAvatar>;
|
|
8
8
|
export default SkeletonAvatar;
|
|
@@ -5,8 +5,17 @@
|
|
|
5
5
|
import { DEFAULT_BOX_CONFIG } from '../../constants/skeleton';
|
|
6
6
|
|
|
7
7
|
// =========================================================================
|
|
8
|
-
// Props
|
|
8
|
+
// Props, States & Constants
|
|
9
9
|
// =========================================================================
|
|
10
|
+
export type SkeletonBoxProps = {
|
|
11
|
+
width?: string | number;
|
|
12
|
+
height?: string | number;
|
|
13
|
+
aspectRatio?: string | number;
|
|
14
|
+
radius?: string | number;
|
|
15
|
+
animated?: boolean;
|
|
16
|
+
className?: string;
|
|
17
|
+
customStyle?: string;
|
|
18
|
+
};
|
|
10
19
|
|
|
11
20
|
let {
|
|
12
21
|
// 基本プロパティ
|
|
@@ -17,20 +26,11 @@
|
|
|
17
26
|
animated = true,
|
|
18
27
|
className = '',
|
|
19
28
|
customStyle = ''
|
|
20
|
-
}:
|
|
21
|
-
width?: string | number;
|
|
22
|
-
height?: string | number;
|
|
23
|
-
aspectRatio?: string | number;
|
|
24
|
-
radius?: string | number;
|
|
25
|
-
animated?: boolean;
|
|
26
|
-
className?: string;
|
|
27
|
-
customStyle?: string;
|
|
28
|
-
} = $props();
|
|
29
|
+
}: SkeletonBoxProps = $props();
|
|
29
30
|
|
|
30
31
|
// =========================================================================
|
|
31
32
|
// $derived
|
|
32
33
|
// =========================================================================
|
|
33
|
-
|
|
34
34
|
const containerClasses = $derived(
|
|
35
35
|
['skeleton-box', animated && 'skeleton-box--animated', className].filter(Boolean).join(' ')
|
|
36
36
|
);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type
|
|
1
|
+
export type SkeletonBoxProps = {
|
|
2
2
|
width?: string | number;
|
|
3
3
|
height?: string | number;
|
|
4
4
|
aspectRatio?: string | number;
|
|
@@ -7,6 +7,6 @@ type $$ComponentProps = {
|
|
|
7
7
|
className?: string;
|
|
8
8
|
customStyle?: string;
|
|
9
9
|
};
|
|
10
|
-
declare const SkeletonBox: import("svelte").Component
|
|
10
|
+
declare const SkeletonBox: import("svelte").Component<SkeletonBoxProps, {}, "">;
|
|
11
11
|
type SkeletonBox = ReturnType<typeof SkeletonBox>;
|
|
12
12
|
export default SkeletonBox;
|
|
@@ -6,14 +6,19 @@
|
|
|
6
6
|
import type { SkeletonButtonConfig } from '../../types/skeleton';
|
|
7
7
|
import { DEFAULT_BUTTON_CONFIG } from '../../constants/skeleton';
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
// =========================================================================
|
|
10
|
+
// Props, States & Constants
|
|
11
|
+
// =========================================================================
|
|
12
|
+
export type SkeletonButtonProps = {
|
|
13
13
|
buttonConfig?: Partial<SkeletonButtonConfig>;
|
|
14
14
|
animated?: boolean;
|
|
15
|
-
}
|
|
15
|
+
};
|
|
16
16
|
|
|
17
|
+
let { buttonConfig = {}, animated = true }: SkeletonButtonProps = $props();
|
|
18
|
+
|
|
19
|
+
// =========================================================================
|
|
20
|
+
// $derived
|
|
21
|
+
// =========================================================================
|
|
17
22
|
// マージされた設定
|
|
18
23
|
const mergedButtonConfig = $derived({
|
|
19
24
|
...DEFAULT_BUTTON_CONFIG,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SkeletonButtonConfig } from '../../types/skeleton';
|
|
2
|
-
type
|
|
2
|
+
export type SkeletonButtonProps = {
|
|
3
3
|
buttonConfig?: Partial<SkeletonButtonConfig>;
|
|
4
4
|
animated?: boolean;
|
|
5
5
|
};
|
|
6
|
-
declare const SkeletonButton: import("svelte").Component
|
|
6
|
+
declare const SkeletonButton: import("svelte").Component<SkeletonButtonProps, {}, "">;
|
|
7
7
|
type SkeletonButton = ReturnType<typeof SkeletonButton>;
|
|
8
8
|
export default SkeletonButton;
|
|
@@ -7,27 +7,24 @@
|
|
|
7
7
|
import { DEFAULT_HEADING_CONFIG } from '../../constants/skeleton';
|
|
8
8
|
|
|
9
9
|
// =========================================================================
|
|
10
|
-
// Props
|
|
10
|
+
// Props, States & Constants
|
|
11
11
|
// =========================================================================
|
|
12
|
-
|
|
13
|
-
let {
|
|
14
|
-
headingConfig = {},
|
|
15
|
-
animated = true
|
|
16
|
-
}: {
|
|
12
|
+
export type SkeletonHeadingProps = {
|
|
17
13
|
headingConfig?: Partial<SkeletonHeadingConfig>;
|
|
18
14
|
animated?: boolean;
|
|
19
|
-
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
let { headingConfig = {}, animated = true }: SkeletonHeadingProps = $props();
|
|
20
18
|
|
|
19
|
+
// =========================================================================
|
|
20
|
+
// $derived
|
|
21
|
+
// =========================================================================
|
|
21
22
|
// マージされた設定
|
|
22
23
|
const mergedHeadingConfig = $derived({
|
|
23
24
|
...DEFAULT_HEADING_CONFIG,
|
|
24
25
|
...headingConfig
|
|
25
26
|
});
|
|
26
27
|
|
|
27
|
-
// =========================================================================
|
|
28
|
-
// $derived
|
|
29
|
-
// =========================================================================
|
|
30
|
-
|
|
31
28
|
const widthStyle = $derived(getStyleFromNumber(mergedHeadingConfig.width));
|
|
32
29
|
const fontSizeStyle = $derived(
|
|
33
30
|
mergedHeadingConfig.fontSize
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SkeletonHeadingConfig } from '../../types/skeleton';
|
|
2
|
-
type
|
|
2
|
+
export type SkeletonHeadingProps = {
|
|
3
3
|
headingConfig?: Partial<SkeletonHeadingConfig>;
|
|
4
4
|
animated?: boolean;
|
|
5
5
|
};
|
|
6
|
-
declare const SkeletonHeading: import("svelte").Component
|
|
6
|
+
declare const SkeletonHeading: import("svelte").Component<SkeletonHeadingProps, {}, "">;
|
|
7
7
|
type SkeletonHeading = ReturnType<typeof SkeletonHeading>;
|
|
8
8
|
export default SkeletonHeading;
|
|
@@ -11,16 +11,20 @@
|
|
|
11
11
|
DEFAULT_TEXT_CONFIG_MEDIA
|
|
12
12
|
} from '../../constants/skeleton';
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}: {
|
|
14
|
+
// =========================================================================
|
|
15
|
+
// Props, States & Constants
|
|
16
|
+
// =========================================================================
|
|
17
|
+
export type SkeletonMediaProps = {
|
|
19
18
|
width?: string | number;
|
|
20
19
|
mediaConfig?: Partial<SkeletonMediaConfig>;
|
|
21
20
|
animated?: boolean;
|
|
22
|
-
}
|
|
21
|
+
};
|
|
23
22
|
|
|
23
|
+
let { width = '100%', mediaConfig = {}, animated = true }: SkeletonMediaProps = $props();
|
|
24
|
+
|
|
25
|
+
// =========================================================================
|
|
26
|
+
// $derived
|
|
27
|
+
// =========================================================================
|
|
24
28
|
// マージされた設定
|
|
25
29
|
const mergedMediaConfig = $derived({
|
|
26
30
|
...DEFAULT_MEDIA_CONFIG,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { SkeletonMediaConfig } from '../../types/skeleton';
|
|
2
|
-
type
|
|
2
|
+
export type SkeletonMediaProps = {
|
|
3
3
|
width?: string | number;
|
|
4
4
|
mediaConfig?: Partial<SkeletonMediaConfig>;
|
|
5
5
|
animated?: boolean;
|
|
6
6
|
};
|
|
7
|
-
declare const SkeletonMedia: import("svelte").Component
|
|
7
|
+
declare const SkeletonMedia: import("svelte").Component<SkeletonMediaProps, {}, "">;
|
|
8
8
|
type SkeletonMedia = ReturnType<typeof SkeletonMedia>;
|
|
9
9
|
export default SkeletonMedia;
|
|
@@ -7,34 +7,30 @@
|
|
|
7
7
|
import { DEFAULT_TEXT_CONFIG } from '../../constants/skeleton';
|
|
8
8
|
|
|
9
9
|
// =========================================================================
|
|
10
|
-
// Props
|
|
10
|
+
// Props, States & Constants
|
|
11
11
|
// =========================================================================
|
|
12
|
+
export type SkeletonTextProps = {
|
|
13
|
+
textConfig?: Partial<SkeletonTextConfig>;
|
|
14
|
+
animated?: boolean;
|
|
15
|
+
};
|
|
12
16
|
|
|
13
17
|
let {
|
|
14
18
|
// 基本プロパティ
|
|
15
19
|
textConfig = {},
|
|
16
20
|
animated = true
|
|
17
|
-
}:
|
|
18
|
-
textConfig?: Partial<SkeletonTextConfig>;
|
|
19
|
-
animated?: boolean;
|
|
20
|
-
} = $props();
|
|
21
|
+
}: SkeletonTextProps = $props();
|
|
21
22
|
|
|
23
|
+
// =========================================================================
|
|
24
|
+
// $derived
|
|
25
|
+
// =========================================================================
|
|
22
26
|
// マージされた設定
|
|
23
27
|
const mergedTextConfig = $derived({
|
|
24
28
|
...DEFAULT_TEXT_CONFIG,
|
|
25
29
|
...textConfig
|
|
26
30
|
});
|
|
27
31
|
|
|
28
|
-
// =========================================================================
|
|
29
|
-
// State
|
|
30
|
-
// =========================================================================
|
|
31
|
-
|
|
32
32
|
let containerRef: HTMLDivElement;
|
|
33
33
|
|
|
34
|
-
// =========================================================================
|
|
35
|
-
// $derived
|
|
36
|
-
// =========================================================================
|
|
37
|
-
|
|
38
34
|
const widthStyle = $derived(getStyleFromNumber(mergedTextConfig.width));
|
|
39
35
|
const fontSizeStyle = $derived(getStyleFromNumber(mergedTextConfig.fontSize));
|
|
40
36
|
</script>
|