@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
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { HTMLButtonAttributes } from 'svelte/elements';
|
|
3
3
|
import type { IconVariant, IconWeight, IconGrade, IconOpticalSize } from '../types/icon';
|
|
4
|
-
type
|
|
4
|
+
import type { FocusHandler, KeyboardHandler, MouseHandler, TouchHandler, PointerHandler } from '../types/eventHandlers';
|
|
5
|
+
export type IconButtonProps = {
|
|
5
6
|
children: Snippet;
|
|
6
7
|
buttonAttributes?: HTMLButtonAttributes | undefined;
|
|
7
8
|
type?: 'button' | 'submit' | 'reset' | null | undefined;
|
|
@@ -30,31 +31,31 @@ type $$ComponentProps = {
|
|
|
30
31
|
ariaDescribedby?: string;
|
|
31
32
|
ariaPressed?: boolean;
|
|
32
33
|
reducedMotion?: boolean;
|
|
33
|
-
onfocus?:
|
|
34
|
-
onblur?:
|
|
35
|
-
onkeydown?:
|
|
36
|
-
onkeyup?:
|
|
37
|
-
onclick?:
|
|
38
|
-
onmousedown?:
|
|
39
|
-
onmouseup?:
|
|
40
|
-
onmouseenter?:
|
|
41
|
-
onmouseleave?:
|
|
42
|
-
onmouseover?:
|
|
43
|
-
onmouseout?:
|
|
44
|
-
oncontextmenu?:
|
|
45
|
-
onauxclick?:
|
|
46
|
-
ontouchstart?:
|
|
47
|
-
ontouchend?:
|
|
48
|
-
ontouchmove?:
|
|
49
|
-
ontouchcancel?:
|
|
50
|
-
onpointerdown?:
|
|
51
|
-
onpointerup?:
|
|
52
|
-
onpointerenter?:
|
|
53
|
-
onpointerleave?:
|
|
54
|
-
onpointermove?:
|
|
55
|
-
onpointercancel?:
|
|
34
|
+
onfocus?: FocusHandler;
|
|
35
|
+
onblur?: FocusHandler;
|
|
36
|
+
onkeydown?: KeyboardHandler;
|
|
37
|
+
onkeyup?: KeyboardHandler;
|
|
38
|
+
onclick?: MouseHandler;
|
|
39
|
+
onmousedown?: MouseHandler;
|
|
40
|
+
onmouseup?: MouseHandler;
|
|
41
|
+
onmouseenter?: MouseHandler;
|
|
42
|
+
onmouseleave?: MouseHandler;
|
|
43
|
+
onmouseover?: MouseHandler;
|
|
44
|
+
onmouseout?: MouseHandler;
|
|
45
|
+
oncontextmenu?: MouseHandler;
|
|
46
|
+
onauxclick?: MouseHandler;
|
|
47
|
+
ontouchstart?: TouchHandler;
|
|
48
|
+
ontouchend?: TouchHandler;
|
|
49
|
+
ontouchmove?: TouchHandler;
|
|
50
|
+
ontouchcancel?: TouchHandler;
|
|
51
|
+
onpointerdown?: PointerHandler;
|
|
52
|
+
onpointerup?: PointerHandler;
|
|
53
|
+
onpointerenter?: PointerHandler;
|
|
54
|
+
onpointerleave?: PointerHandler;
|
|
55
|
+
onpointermove?: PointerHandler;
|
|
56
|
+
onpointercancel?: PointerHandler;
|
|
56
57
|
[key: string]: any;
|
|
57
58
|
};
|
|
58
|
-
declare const IconButton: import("svelte").Component
|
|
59
|
+
declare const IconButton: import("svelte").Component<IconButtonProps, {}, "">;
|
|
59
60
|
type IconButton = ReturnType<typeof IconButton>;
|
|
60
61
|
export default IconButton;
|
|
@@ -8,10 +8,70 @@
|
|
|
8
8
|
import { onDestroy } from 'svelte';
|
|
9
9
|
import ImageUploaderPreview from './ImageUploaderPreview.svelte';
|
|
10
10
|
import type { IconVariant, IconWeight, IconGrade, IconOpticalSize } from '../types/icon';
|
|
11
|
+
import type {
|
|
12
|
+
BivariantValueHandler,
|
|
13
|
+
FocusHandler,
|
|
14
|
+
KeyboardHandler,
|
|
15
|
+
MouseHandler,
|
|
16
|
+
TouchHandler,
|
|
17
|
+
PointerHandler
|
|
18
|
+
} from '../types/eventHandlers';
|
|
11
19
|
|
|
12
20
|
// =========================================================================
|
|
13
21
|
// Props, States & Constants
|
|
14
22
|
// =========================================================================
|
|
23
|
+
export type ImageUploaderProps = {
|
|
24
|
+
// 基本プロパティ
|
|
25
|
+
value: FileList | null | undefined;
|
|
26
|
+
multiple?: boolean;
|
|
27
|
+
maxFileSize?: number;
|
|
28
|
+
placeholder?: string;
|
|
29
|
+
|
|
30
|
+
// HTML属性系
|
|
31
|
+
id?: string;
|
|
32
|
+
accept?: string;
|
|
33
|
+
|
|
34
|
+
// スタイル/レイアウト
|
|
35
|
+
width?: string | number;
|
|
36
|
+
height?: string | number;
|
|
37
|
+
rounded?: boolean;
|
|
38
|
+
previewStyle?: 'plain' | 'framed';
|
|
39
|
+
previewAdaptive?: boolean;
|
|
40
|
+
|
|
41
|
+
// アイコン系
|
|
42
|
+
icon?: string;
|
|
43
|
+
iconSize?: number;
|
|
44
|
+
iconFilled?: boolean;
|
|
45
|
+
iconWeight?: IconWeight;
|
|
46
|
+
iconGrade?: IconGrade;
|
|
47
|
+
iconOpticalSize?: IconOpticalSize;
|
|
48
|
+
iconVariant?: IconVariant;
|
|
49
|
+
removeFileAriaLabel?: string;
|
|
50
|
+
|
|
51
|
+
// 入力イベント
|
|
52
|
+
onchange?: BivariantValueHandler<FileList | null | undefined>;
|
|
53
|
+
|
|
54
|
+
// フォーカスイベント
|
|
55
|
+
onfocus?: FocusHandler;
|
|
56
|
+
onblur?: FocusHandler;
|
|
57
|
+
|
|
58
|
+
// キーボードイベント
|
|
59
|
+
onkeydown?: KeyboardHandler;
|
|
60
|
+
onkeyup?: KeyboardHandler;
|
|
61
|
+
|
|
62
|
+
// マウスイベント
|
|
63
|
+
onmouseenter?: MouseHandler;
|
|
64
|
+
onmouseleave?: MouseHandler;
|
|
65
|
+
|
|
66
|
+
// タッチイベント
|
|
67
|
+
ontouchstart?: TouchHandler;
|
|
68
|
+
ontouchend?: TouchHandler;
|
|
69
|
+
|
|
70
|
+
// ポインターイベント
|
|
71
|
+
onpointerenter?: PointerHandler;
|
|
72
|
+
onpointerleave?: PointerHandler;
|
|
73
|
+
};
|
|
74
|
+
|
|
15
75
|
let {
|
|
16
76
|
// 基本プロパティ
|
|
17
77
|
value = $bindable(),
|
|
@@ -64,57 +124,7 @@
|
|
|
64
124
|
// ポインターイベント
|
|
65
125
|
onpointerenter = () => {}, // No params for type inference
|
|
66
126
|
onpointerleave = () => {} // No params for type inference
|
|
67
|
-
}:
|
|
68
|
-
// 基本プロパティ
|
|
69
|
-
value: FileList | null | undefined;
|
|
70
|
-
multiple?: boolean;
|
|
71
|
-
maxFileSize?: number;
|
|
72
|
-
placeholder?: string;
|
|
73
|
-
|
|
74
|
-
// HTML属性系
|
|
75
|
-
id?: string;
|
|
76
|
-
accept?: string;
|
|
77
|
-
|
|
78
|
-
// スタイル/レイアウト
|
|
79
|
-
width?: string | number;
|
|
80
|
-
height?: string | number;
|
|
81
|
-
rounded?: boolean;
|
|
82
|
-
previewStyle?: 'plain' | 'framed';
|
|
83
|
-
previewAdaptive?: boolean;
|
|
84
|
-
|
|
85
|
-
// アイコン系
|
|
86
|
-
icon?: string;
|
|
87
|
-
iconSize?: number;
|
|
88
|
-
iconFilled?: boolean;
|
|
89
|
-
iconWeight?: IconWeight;
|
|
90
|
-
iconGrade?: IconGrade;
|
|
91
|
-
iconOpticalSize?: IconOpticalSize;
|
|
92
|
-
iconVariant?: IconVariant;
|
|
93
|
-
removeFileAriaLabel?: string;
|
|
94
|
-
|
|
95
|
-
// 入力イベント
|
|
96
|
-
onchange?: (value: FileList | null | undefined) => void;
|
|
97
|
-
|
|
98
|
-
// フォーカスイベント
|
|
99
|
-
onfocus?: Function; // No params for type inference
|
|
100
|
-
onblur?: Function; // No params for type inference
|
|
101
|
-
|
|
102
|
-
// キーボードイベント
|
|
103
|
-
onkeydown?: Function; // No params for type inference
|
|
104
|
-
onkeyup?: Function; // No params for type inference
|
|
105
|
-
|
|
106
|
-
// マウスイベント
|
|
107
|
-
onmouseenter?: Function; // No params for type inference
|
|
108
|
-
onmouseleave?: Function; // No params for type inference
|
|
109
|
-
|
|
110
|
-
// タッチイベント
|
|
111
|
-
ontouchstart?: Function; // No params for type inference
|
|
112
|
-
ontouchend?: Function; // No params for type inference
|
|
113
|
-
|
|
114
|
-
// ポインターイベント
|
|
115
|
-
onpointerenter?: Function; // No params for type inference
|
|
116
|
-
onpointerleave?: Function; // No params for type inference
|
|
117
|
-
} = $props();
|
|
127
|
+
}: ImageUploaderProps = $props();
|
|
118
128
|
|
|
119
129
|
let dropAreaRef: HTMLButtonElement;
|
|
120
130
|
let fileInputRef: HTMLInputElement;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { IconVariant, IconWeight, IconGrade, IconOpticalSize } from '../types/icon';
|
|
2
|
-
type
|
|
2
|
+
import type { BivariantValueHandler, FocusHandler, KeyboardHandler, MouseHandler, TouchHandler, PointerHandler } from '../types/eventHandlers';
|
|
3
|
+
export type ImageUploaderProps = {
|
|
3
4
|
value: FileList | null | undefined;
|
|
4
5
|
multiple?: boolean;
|
|
5
6
|
maxFileSize?: number;
|
|
@@ -19,19 +20,19 @@ type $$ComponentProps = {
|
|
|
19
20
|
iconOpticalSize?: IconOpticalSize;
|
|
20
21
|
iconVariant?: IconVariant;
|
|
21
22
|
removeFileAriaLabel?: string;
|
|
22
|
-
onchange?:
|
|
23
|
-
onfocus?:
|
|
24
|
-
onblur?:
|
|
25
|
-
onkeydown?:
|
|
26
|
-
onkeyup?:
|
|
27
|
-
onmouseenter?:
|
|
28
|
-
onmouseleave?:
|
|
29
|
-
ontouchstart?:
|
|
30
|
-
ontouchend?:
|
|
31
|
-
onpointerenter?:
|
|
32
|
-
onpointerleave?:
|
|
23
|
+
onchange?: BivariantValueHandler<FileList | null | undefined>;
|
|
24
|
+
onfocus?: FocusHandler;
|
|
25
|
+
onblur?: FocusHandler;
|
|
26
|
+
onkeydown?: KeyboardHandler;
|
|
27
|
+
onkeyup?: KeyboardHandler;
|
|
28
|
+
onmouseenter?: MouseHandler;
|
|
29
|
+
onmouseleave?: MouseHandler;
|
|
30
|
+
ontouchstart?: TouchHandler;
|
|
31
|
+
ontouchend?: TouchHandler;
|
|
32
|
+
onpointerenter?: PointerHandler;
|
|
33
|
+
onpointerleave?: PointerHandler;
|
|
33
34
|
};
|
|
34
|
-
declare const ImageUploader: import("svelte").Component
|
|
35
|
+
declare const ImageUploader: import("svelte").Component<ImageUploaderProps, {
|
|
35
36
|
reset: () => void;
|
|
36
37
|
}, "value">;
|
|
37
38
|
type ImageUploader = ReturnType<typeof ImageUploader>;
|
|
@@ -1,8 +1,34 @@
|
|
|
1
|
+
<!-- ImageUploaderPreview.svelte -->
|
|
2
|
+
|
|
1
3
|
<script lang="ts">
|
|
2
4
|
import { onDestroy } from 'svelte';
|
|
3
5
|
import IconButton from './IconButton.svelte';
|
|
4
6
|
import { getStyleFromNumber } from '../utils/style';
|
|
5
7
|
|
|
8
|
+
// =========================================================================
|
|
9
|
+
// Props, States & Constants
|
|
10
|
+
// =========================================================================
|
|
11
|
+
export type ImageUploaderPreviewProps = {
|
|
12
|
+
// 基本プロパティ
|
|
13
|
+
file: File;
|
|
14
|
+
|
|
15
|
+
// HTML属性系
|
|
16
|
+
id?: string;
|
|
17
|
+
|
|
18
|
+
// スタイル/レイアウト
|
|
19
|
+
width?: string | number;
|
|
20
|
+
height?: string | number;
|
|
21
|
+
previewAdaptive?: boolean;
|
|
22
|
+
rounded?: boolean;
|
|
23
|
+
previewStyle?: 'plain' | 'framed';
|
|
24
|
+
|
|
25
|
+
// ARIA/アクセシビリティ
|
|
26
|
+
removeFileAriaLabel?: string;
|
|
27
|
+
|
|
28
|
+
// 入力イベント
|
|
29
|
+
onRemove: () => void;
|
|
30
|
+
};
|
|
31
|
+
|
|
6
32
|
let {
|
|
7
33
|
// 基本プロパティ
|
|
8
34
|
file,
|
|
@@ -22,29 +48,13 @@
|
|
|
22
48
|
|
|
23
49
|
// 入力イベント
|
|
24
50
|
onRemove
|
|
25
|
-
}:
|
|
26
|
-
// 基本プロパティ
|
|
27
|
-
file: File;
|
|
28
|
-
|
|
29
|
-
// HTML属性系
|
|
30
|
-
id?: string;
|
|
31
|
-
|
|
32
|
-
// スタイル/レイアウト
|
|
33
|
-
width?: string | number;
|
|
34
|
-
height?: string | number;
|
|
35
|
-
previewAdaptive?: boolean;
|
|
36
|
-
rounded?: boolean;
|
|
37
|
-
previewStyle?: 'plain' | 'framed';
|
|
38
|
-
|
|
39
|
-
// ARIA/アクセシビリティ
|
|
40
|
-
removeFileAriaLabel?: string;
|
|
41
|
-
|
|
42
|
-
// 入力イベント
|
|
43
|
-
onRemove: () => void;
|
|
44
|
-
} = $props();
|
|
51
|
+
}: ImageUploaderPreviewProps = $props();
|
|
45
52
|
|
|
46
53
|
let imageSizes = $state<Record<string, { width: number; height: number }>>({});
|
|
47
54
|
|
|
55
|
+
// =========================================================================
|
|
56
|
+
// Methods
|
|
57
|
+
// =========================================================================
|
|
48
58
|
const getImageUrl = (file: File): string => {
|
|
49
59
|
return URL.createObjectURL(file);
|
|
50
60
|
};
|
|
@@ -67,6 +77,9 @@
|
|
|
67
77
|
img.src = getImageUrl(file);
|
|
68
78
|
};
|
|
69
79
|
|
|
80
|
+
// =========================================================================
|
|
81
|
+
// $derived
|
|
82
|
+
// =========================================================================
|
|
70
83
|
// previewAdaptiveによる分岐を最初に行う
|
|
71
84
|
const imageSizeStyle = $derived.by(() => {
|
|
72
85
|
if (previewAdaptive) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type
|
|
1
|
+
export type ImageUploaderPreviewProps = {
|
|
2
2
|
file: File;
|
|
3
3
|
id?: string;
|
|
4
4
|
width?: string | number;
|
|
@@ -9,6 +9,6 @@ type $$ComponentProps = {
|
|
|
9
9
|
removeFileAriaLabel?: string;
|
|
10
10
|
onRemove: () => void;
|
|
11
11
|
};
|
|
12
|
-
declare const ImageUploaderPreview: import("svelte").Component
|
|
12
|
+
declare const ImageUploaderPreview: import("svelte").Component<ImageUploaderPreviewProps, {}, "">;
|
|
13
13
|
type ImageUploaderPreview = ReturnType<typeof ImageUploaderPreview>;
|
|
14
14
|
export default ImageUploaderPreview;
|
|
@@ -8,10 +8,111 @@
|
|
|
8
8
|
import type { IconVariant, IconWeight, IconGrade, IconOpticalSize } from '../types/icon';
|
|
9
9
|
import { t } from '../i18n';
|
|
10
10
|
import { convertToHtmlWithLink } from '../utils/formatText';
|
|
11
|
+
import type {
|
|
12
|
+
FocusHandler,
|
|
13
|
+
KeyboardHandler,
|
|
14
|
+
MouseHandler,
|
|
15
|
+
TouchHandler,
|
|
16
|
+
PointerHandler,
|
|
17
|
+
BivariantValueHandler
|
|
18
|
+
} from '../types/eventHandlers';
|
|
11
19
|
|
|
12
20
|
// =========================================================================
|
|
13
21
|
// Props, States & Constants
|
|
14
22
|
// =========================================================================
|
|
23
|
+
export type InputProps = {
|
|
24
|
+
// 基本プロパティ
|
|
25
|
+
name?: string;
|
|
26
|
+
value: string | number;
|
|
27
|
+
|
|
28
|
+
// HTML属性系
|
|
29
|
+
id?: string | null;
|
|
30
|
+
type?: 'text' | 'password' | 'email' | 'tel' | 'url' | 'number';
|
|
31
|
+
tabindex?: number | null;
|
|
32
|
+
maxlength?: number | null;
|
|
33
|
+
pattern?: string | null;
|
|
34
|
+
min?: number | null;
|
|
35
|
+
max?: number | null;
|
|
36
|
+
step?: number | null;
|
|
37
|
+
size?: number | null;
|
|
38
|
+
autocomplete?: HTMLInputElement['autocomplete'] | null;
|
|
39
|
+
spellcheck?: boolean | null;
|
|
40
|
+
inputAttributes?: HTMLInputAttributes | undefined;
|
|
41
|
+
|
|
42
|
+
// スタイル/レイアウト
|
|
43
|
+
inline?: boolean;
|
|
44
|
+
focusStyle?: 'background' | 'outline' | 'none';
|
|
45
|
+
placeholder?: string;
|
|
46
|
+
fullWidth?: boolean;
|
|
47
|
+
width?: string | number | null;
|
|
48
|
+
minWidth?: string | number | null;
|
|
49
|
+
maxWidth?: string | number | null;
|
|
50
|
+
rounded?: boolean;
|
|
51
|
+
customStyle?: string;
|
|
52
|
+
|
|
53
|
+
// アイコン関連
|
|
54
|
+
rightIcon?: string;
|
|
55
|
+
leftIcon?: string;
|
|
56
|
+
leftIconAriaLabel?: string;
|
|
57
|
+
rightIconAriaLabel?: string;
|
|
58
|
+
iconFilled?: boolean;
|
|
59
|
+
iconWeight?: IconWeight;
|
|
60
|
+
iconGrade?: IconGrade;
|
|
61
|
+
iconOpticalSize?: IconOpticalSize;
|
|
62
|
+
iconVariant?: IconVariant;
|
|
63
|
+
|
|
64
|
+
// 状態/動作
|
|
65
|
+
disabled?: boolean;
|
|
66
|
+
readonly?: boolean;
|
|
67
|
+
required?: boolean;
|
|
68
|
+
clearable?: boolean;
|
|
69
|
+
linkify?: boolean;
|
|
70
|
+
|
|
71
|
+
// フォーカスイベント
|
|
72
|
+
onfocus?: FocusHandler;
|
|
73
|
+
onblur?: FocusHandler;
|
|
74
|
+
|
|
75
|
+
// キーボードイベント
|
|
76
|
+
onkeydown?: KeyboardHandler;
|
|
77
|
+
onkeyup?: KeyboardHandler;
|
|
78
|
+
|
|
79
|
+
// マウスイベント
|
|
80
|
+
onclick?: MouseHandler;
|
|
81
|
+
onmousedown?: MouseHandler;
|
|
82
|
+
onmouseup?: MouseHandler;
|
|
83
|
+
onmouseenter?: MouseHandler;
|
|
84
|
+
onmouseleave?: MouseHandler;
|
|
85
|
+
onmouseover?: MouseHandler;
|
|
86
|
+
onmouseout?: MouseHandler;
|
|
87
|
+
oncontextmenu?: MouseHandler;
|
|
88
|
+
onauxclick?: MouseHandler;
|
|
89
|
+
|
|
90
|
+
// タッチイベント
|
|
91
|
+
ontouchstart?: TouchHandler;
|
|
92
|
+
ontouchend?: TouchHandler;
|
|
93
|
+
ontouchmove?: TouchHandler;
|
|
94
|
+
ontouchcancel?: TouchHandler;
|
|
95
|
+
|
|
96
|
+
// ポインターイベント
|
|
97
|
+
onpointerdown?: PointerHandler;
|
|
98
|
+
onpointerup?: PointerHandler;
|
|
99
|
+
onpointerenter?: PointerHandler;
|
|
100
|
+
onpointerleave?: PointerHandler;
|
|
101
|
+
onpointermove?: PointerHandler;
|
|
102
|
+
onpointercancel?: PointerHandler;
|
|
103
|
+
|
|
104
|
+
// 入力イベント
|
|
105
|
+
onchange?: BivariantValueHandler<string | number>;
|
|
106
|
+
oninput?: BivariantValueHandler<string | number>;
|
|
107
|
+
|
|
108
|
+
// アイコンイベント
|
|
109
|
+
onRightIconClick?: MouseHandler;
|
|
110
|
+
onLeftIconClick?: MouseHandler;
|
|
111
|
+
|
|
112
|
+
// その他
|
|
113
|
+
[key: string]: any;
|
|
114
|
+
};
|
|
115
|
+
|
|
15
116
|
let {
|
|
16
117
|
// 基本プロパティ
|
|
17
118
|
name,
|
|
@@ -104,98 +205,7 @@
|
|
|
104
205
|
|
|
105
206
|
// その他
|
|
106
207
|
...restProps
|
|
107
|
-
}:
|
|
108
|
-
// 基本プロパティ
|
|
109
|
-
name?: string;
|
|
110
|
-
value: string | number;
|
|
111
|
-
|
|
112
|
-
// HTML属性系
|
|
113
|
-
id?: string | null;
|
|
114
|
-
type?: 'text' | 'password' | 'email' | 'tel' | 'url' | 'number';
|
|
115
|
-
tabindex?: number | null;
|
|
116
|
-
maxlength?: number | null;
|
|
117
|
-
pattern?: string | null;
|
|
118
|
-
min?: number | null;
|
|
119
|
-
max?: number | null;
|
|
120
|
-
step?: number | null;
|
|
121
|
-
size?: number | null;
|
|
122
|
-
autocomplete?: HTMLInputElement['autocomplete'] | null;
|
|
123
|
-
spellcheck?: boolean | null;
|
|
124
|
-
inputAttributes?: HTMLInputAttributes | undefined;
|
|
125
|
-
|
|
126
|
-
// スタイル/レイアウト
|
|
127
|
-
inline?: boolean;
|
|
128
|
-
focusStyle?: 'background' | 'outline' | 'none';
|
|
129
|
-
placeholder?: string;
|
|
130
|
-
fullWidth?: boolean;
|
|
131
|
-
width?: string | number | null;
|
|
132
|
-
minWidth?: string | number | null;
|
|
133
|
-
maxWidth?: string | number | null;
|
|
134
|
-
rounded?: boolean;
|
|
135
|
-
customStyle?: string;
|
|
136
|
-
|
|
137
|
-
// アイコン関連
|
|
138
|
-
rightIcon?: string;
|
|
139
|
-
leftIcon?: string;
|
|
140
|
-
leftIconAriaLabel?: string;
|
|
141
|
-
rightIconAriaLabel?: string;
|
|
142
|
-
iconFilled?: boolean;
|
|
143
|
-
iconWeight?: IconWeight;
|
|
144
|
-
iconGrade?: IconGrade;
|
|
145
|
-
iconOpticalSize?: IconOpticalSize;
|
|
146
|
-
iconVariant?: IconVariant;
|
|
147
|
-
|
|
148
|
-
// 状態/動作
|
|
149
|
-
disabled?: boolean;
|
|
150
|
-
readonly?: boolean;
|
|
151
|
-
required?: boolean;
|
|
152
|
-
clearable?: boolean;
|
|
153
|
-
linkify?: boolean;
|
|
154
|
-
|
|
155
|
-
// フォーカスイベント
|
|
156
|
-
onfocus?: Function; // No params for type inference
|
|
157
|
-
onblur?: Function; // No params for type inference
|
|
158
|
-
|
|
159
|
-
// キーボードイベント
|
|
160
|
-
onkeydown?: Function; // No params for type inference
|
|
161
|
-
onkeyup?: Function; // No params for type inference
|
|
162
|
-
|
|
163
|
-
// マウスイベント
|
|
164
|
-
onclick?: Function; // No params for type inference
|
|
165
|
-
onmousedown?: Function; // No params for type inference
|
|
166
|
-
onmouseup?: Function; // No params for type inference
|
|
167
|
-
onmouseenter?: Function; // No params for type inference
|
|
168
|
-
onmouseleave?: Function; // No params for type inference
|
|
169
|
-
onmouseover?: Function; // No params for type inference
|
|
170
|
-
onmouseout?: Function; // No params for type inference
|
|
171
|
-
oncontextmenu?: Function; // No params for type inference
|
|
172
|
-
onauxclick?: Function; // No params for type inference
|
|
173
|
-
|
|
174
|
-
// タッチイベント
|
|
175
|
-
ontouchstart?: Function; // No params for type inference
|
|
176
|
-
ontouchend?: Function; // No params for type inference
|
|
177
|
-
ontouchmove?: Function; // No params for type inference
|
|
178
|
-
ontouchcancel?: Function; // No params for type inference
|
|
179
|
-
|
|
180
|
-
// ポインターイベント
|
|
181
|
-
onpointerdown?: Function; // No params for type inference
|
|
182
|
-
onpointerup?: Function; // No params for type inference
|
|
183
|
-
onpointerenter?: Function; // No params for type inference
|
|
184
|
-
onpointerleave?: Function; // No params for type inference
|
|
185
|
-
onpointermove?: Function; // No params for type inference
|
|
186
|
-
onpointercancel?: Function; // No params for type inference
|
|
187
|
-
|
|
188
|
-
// 入力イベント
|
|
189
|
-
onchange?: (value: string | number) => void;
|
|
190
|
-
oninput?: (value: string | number) => void;
|
|
191
|
-
|
|
192
|
-
// アイコンイベント
|
|
193
|
-
onRightIconClick?: Function; // No params for type inference
|
|
194
|
-
onLeftIconClick?: Function; // No params for type inference
|
|
195
|
-
|
|
196
|
-
// その他
|
|
197
|
-
[key: string]: any;
|
|
198
|
-
} = $props();
|
|
208
|
+
}: InputProps = $props();
|
|
199
209
|
|
|
200
210
|
let ref: HTMLInputElement | undefined = $state();
|
|
201
211
|
let isFocused: boolean = $state(false);
|
|
@@ -962,7 +972,9 @@
|
|
|
962
972
|
}
|
|
963
973
|
|
|
964
974
|
input[readonly] {
|
|
965
|
-
background
|
|
975
|
+
/* Keep cursor behavior but do not add a special background.
|
|
976
|
+
* In this library, filled backgrounds are used to indicate editable fields,
|
|
977
|
+
* so readonly inputs intentionally have no extra background color. */
|
|
966
978
|
cursor: default;
|
|
967
979
|
}
|
|
968
980
|
</style>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { HTMLInputAttributes } from 'svelte/elements';
|
|
2
2
|
import type { IconVariant, IconWeight, IconGrade, IconOpticalSize } from '../types/icon';
|
|
3
|
-
type
|
|
3
|
+
import type { FocusHandler, KeyboardHandler, MouseHandler, TouchHandler, PointerHandler, BivariantValueHandler } from '../types/eventHandlers';
|
|
4
|
+
export type InputProps = {
|
|
4
5
|
name?: string;
|
|
5
6
|
value: string | number;
|
|
6
7
|
id?: string | null;
|
|
@@ -38,36 +39,36 @@ type $$ComponentProps = {
|
|
|
38
39
|
required?: boolean;
|
|
39
40
|
clearable?: boolean;
|
|
40
41
|
linkify?: boolean;
|
|
41
|
-
onfocus?:
|
|
42
|
-
onblur?:
|
|
43
|
-
onkeydown?:
|
|
44
|
-
onkeyup?:
|
|
45
|
-
onclick?:
|
|
46
|
-
onmousedown?:
|
|
47
|
-
onmouseup?:
|
|
48
|
-
onmouseenter?:
|
|
49
|
-
onmouseleave?:
|
|
50
|
-
onmouseover?:
|
|
51
|
-
onmouseout?:
|
|
52
|
-
oncontextmenu?:
|
|
53
|
-
onauxclick?:
|
|
54
|
-
ontouchstart?:
|
|
55
|
-
ontouchend?:
|
|
56
|
-
ontouchmove?:
|
|
57
|
-
ontouchcancel?:
|
|
58
|
-
onpointerdown?:
|
|
59
|
-
onpointerup?:
|
|
60
|
-
onpointerenter?:
|
|
61
|
-
onpointerleave?:
|
|
62
|
-
onpointermove?:
|
|
63
|
-
onpointercancel?:
|
|
64
|
-
onchange?:
|
|
65
|
-
oninput?:
|
|
66
|
-
onRightIconClick?:
|
|
67
|
-
onLeftIconClick?:
|
|
42
|
+
onfocus?: FocusHandler;
|
|
43
|
+
onblur?: FocusHandler;
|
|
44
|
+
onkeydown?: KeyboardHandler;
|
|
45
|
+
onkeyup?: KeyboardHandler;
|
|
46
|
+
onclick?: MouseHandler;
|
|
47
|
+
onmousedown?: MouseHandler;
|
|
48
|
+
onmouseup?: MouseHandler;
|
|
49
|
+
onmouseenter?: MouseHandler;
|
|
50
|
+
onmouseleave?: MouseHandler;
|
|
51
|
+
onmouseover?: MouseHandler;
|
|
52
|
+
onmouseout?: MouseHandler;
|
|
53
|
+
oncontextmenu?: MouseHandler;
|
|
54
|
+
onauxclick?: MouseHandler;
|
|
55
|
+
ontouchstart?: TouchHandler;
|
|
56
|
+
ontouchend?: TouchHandler;
|
|
57
|
+
ontouchmove?: TouchHandler;
|
|
58
|
+
ontouchcancel?: TouchHandler;
|
|
59
|
+
onpointerdown?: PointerHandler;
|
|
60
|
+
onpointerup?: PointerHandler;
|
|
61
|
+
onpointerenter?: PointerHandler;
|
|
62
|
+
onpointerleave?: PointerHandler;
|
|
63
|
+
onpointermove?: PointerHandler;
|
|
64
|
+
onpointercancel?: PointerHandler;
|
|
65
|
+
onchange?: BivariantValueHandler<string | number>;
|
|
66
|
+
oninput?: BivariantValueHandler<string | number>;
|
|
67
|
+
onRightIconClick?: MouseHandler;
|
|
68
|
+
onLeftIconClick?: MouseHandler;
|
|
68
69
|
[key: string]: any;
|
|
69
70
|
};
|
|
70
|
-
declare const Input: import("svelte").Component
|
|
71
|
+
declare const Input: import("svelte").Component<InputProps, {
|
|
71
72
|
focus: () => void;
|
|
72
73
|
}, "value">;
|
|
73
74
|
type Input = ReturnType<typeof Input>;
|
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
<!-- LoadingSpinner.svelte -->
|
|
2
2
|
|
|
3
3
|
<script lang="ts">
|
|
4
|
-
import { getStyleFromNumber } from '../utils/style';
|
|
5
4
|
// =========================================================================
|
|
6
5
|
// Props, States & Constants
|
|
7
6
|
// =========================================================================
|
|
7
|
+
export type LoadingSpinnerProps = {
|
|
8
|
+
// スタイル/レイアウト
|
|
9
|
+
size?: number;
|
|
10
|
+
color?: string;
|
|
11
|
+
strokeWidth?: number;
|
|
12
|
+
|
|
13
|
+
// 状態/動作
|
|
14
|
+
speed?: number;
|
|
15
|
+
|
|
16
|
+
// ARIA/アクセシビリティ
|
|
17
|
+
reducedMotion?: boolean;
|
|
18
|
+
};
|
|
19
|
+
|
|
8
20
|
let {
|
|
9
21
|
// スタイル/レイアウト
|
|
10
22
|
size = 32,
|
|
@@ -16,18 +28,7 @@
|
|
|
16
28
|
|
|
17
29
|
// ARIA/アクセシビリティ
|
|
18
30
|
reducedMotion = false
|
|
19
|
-
}:
|
|
20
|
-
// スタイル/レイアウト
|
|
21
|
-
size?: number;
|
|
22
|
-
color?: string;
|
|
23
|
-
strokeWidth?: number;
|
|
24
|
-
|
|
25
|
-
// 状態/動作
|
|
26
|
-
speed?: number;
|
|
27
|
-
|
|
28
|
-
// ARIA/アクセシビリティ
|
|
29
|
-
reducedMotion?: boolean;
|
|
30
|
-
} = $props();
|
|
31
|
+
}: LoadingSpinnerProps = $props();
|
|
31
32
|
|
|
32
33
|
// =========================================================================
|
|
33
34
|
// $derived
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
type
|
|
1
|
+
export type LoadingSpinnerProps = {
|
|
2
2
|
size?: number;
|
|
3
3
|
color?: string;
|
|
4
4
|
strokeWidth?: number;
|
|
5
5
|
speed?: number;
|
|
6
6
|
reducedMotion?: boolean;
|
|
7
7
|
};
|
|
8
|
-
declare const LoadingSpinner: import("svelte").Component
|
|
8
|
+
declare const LoadingSpinner: import("svelte").Component<LoadingSpinnerProps, {}, "">;
|
|
9
9
|
type LoadingSpinner = ReturnType<typeof LoadingSpinner>;
|
|
10
10
|
export default LoadingSpinner;
|