@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.
Files changed (89) hide show
  1. package/dist/assets/styles/variables.scss +0 -6
  2. package/dist/components/Button.svelte +82 -73
  3. package/dist/components/Button.svelte.d.ts +26 -25
  4. package/dist/components/Checkbox.svelte +86 -77
  5. package/dist/components/Checkbox.svelte.d.ts +26 -25
  6. package/dist/components/CheckboxGroup.svelte +43 -26
  7. package/dist/components/CheckboxGroup.svelte.d.ts +4 -3
  8. package/dist/components/ColorPicker.svelte +71 -61
  9. package/dist/components/ColorPicker.svelte.d.ts +28 -27
  10. package/dist/components/Combobox.svelte +79 -76
  11. package/dist/components/Combobox.svelte.d.ts +28 -27
  12. package/dist/components/ConfirmDialog.svelte +24 -22
  13. package/dist/components/ConfirmDialog.svelte.d.ts +2 -2
  14. package/dist/components/Datepicker.svelte +131 -84
  15. package/dist/components/Datepicker.svelte.d.ts +33 -30
  16. package/dist/components/DatepickerCalendar.svelte +24 -18
  17. package/dist/components/DatepickerCalendar.svelte.d.ts +7 -6
  18. package/dist/components/Dialog.svelte +30 -28
  19. package/dist/components/Dialog.svelte.d.ts +2 -2
  20. package/dist/components/Drawer.svelte +31 -29
  21. package/dist/components/Drawer.svelte.d.ts +2 -2
  22. package/dist/components/Fab.svelte +63 -54
  23. package/dist/components/Fab.svelte.d.ts +26 -25
  24. package/dist/components/FileUploader.svelte +59 -49
  25. package/dist/components/FileUploader.svelte.d.ts +14 -13
  26. package/dist/components/Icon.svelte +29 -27
  27. package/dist/components/Icon.svelte.d.ts +2 -2
  28. package/dist/components/IconButton.svelte +88 -79
  29. package/dist/components/IconButton.svelte.d.ts +26 -25
  30. package/dist/components/ImageUploader.svelte +61 -51
  31. package/dist/components/ImageUploader.svelte.d.ts +14 -13
  32. package/dist/components/ImageUploaderPreview.svelte +33 -20
  33. package/dist/components/ImageUploaderPreview.svelte.d.ts +2 -2
  34. package/dist/components/Input.svelte +105 -93
  35. package/dist/components/Input.svelte.d.ts +30 -29
  36. package/dist/components/LoadingSpinner.svelte +14 -13
  37. package/dist/components/LoadingSpinner.svelte.d.ts +2 -2
  38. package/dist/components/Modal.svelte +26 -24
  39. package/dist/components/Modal.svelte.d.ts +2 -2
  40. package/dist/components/Pagination.svelte +20 -28
  41. package/dist/components/Pagination.svelte.d.ts +2 -2
  42. package/dist/components/Popup.svelte +48 -49
  43. package/dist/components/Popup.svelte.d.ts +3 -3
  44. package/dist/components/PopupMenu.svelte +90 -90
  45. package/dist/components/PopupMenu.svelte.d.ts +2 -2
  46. package/dist/components/PopupMenuButton.svelte +83 -76
  47. package/dist/components/PopupMenuButton.svelte.d.ts +26 -25
  48. package/dist/components/Radio.svelte +73 -63
  49. package/dist/components/Radio.svelte.d.ts +30 -28
  50. package/dist/components/RadioGroup.svelte +39 -26
  51. package/dist/components/RadioGroup.svelte.d.ts +4 -3
  52. package/dist/components/SegmentedControl.svelte +79 -69
  53. package/dist/components/SegmentedControl.svelte.d.ts +26 -25
  54. package/dist/components/Select.svelte +73 -65
  55. package/dist/components/Select.svelte.d.ts +27 -26
  56. package/dist/components/Slider.svelte +73 -64
  57. package/dist/components/Slider.svelte.d.ts +26 -25
  58. package/dist/components/Snackbar.svelte +10 -9
  59. package/dist/components/Snackbar.svelte.d.ts +2 -2
  60. package/dist/components/SnackbarItem.svelte +28 -28
  61. package/dist/components/SnackbarItem.svelte.d.ts +2 -2
  62. package/dist/components/Switch.svelte +70 -62
  63. package/dist/components/Switch.svelte.d.ts +26 -25
  64. package/dist/components/Tab.svelte +31 -20
  65. package/dist/components/Tab.svelte.d.ts +3 -2
  66. package/dist/components/TabItem.svelte +20 -19
  67. package/dist/components/TabItem.svelte.d.ts +2 -2
  68. package/dist/components/Textarea.svelte +96 -95
  69. package/dist/components/Textarea.svelte.d.ts +27 -26
  70. package/dist/components/skeleton/Skeleton.svelte +16 -14
  71. package/dist/components/skeleton/Skeleton.svelte.d.ts +2 -2
  72. package/dist/components/skeleton/SkeletonAvatar.svelte +9 -5
  73. package/dist/components/skeleton/SkeletonAvatar.svelte.d.ts +2 -2
  74. package/dist/components/skeleton/SkeletonBox.svelte +11 -11
  75. package/dist/components/skeleton/SkeletonBox.svelte.d.ts +2 -2
  76. package/dist/components/skeleton/SkeletonButton.svelte +10 -5
  77. package/dist/components/skeleton/SkeletonButton.svelte.d.ts +2 -2
  78. package/dist/components/skeleton/SkeletonHeading.svelte +8 -11
  79. package/dist/components/skeleton/SkeletonHeading.svelte.d.ts +2 -2
  80. package/dist/components/skeleton/SkeletonMedia.svelte +10 -6
  81. package/dist/components/skeleton/SkeletonMedia.svelte.d.ts +2 -2
  82. package/dist/components/skeleton/SkeletonText.svelte +9 -13
  83. package/dist/components/skeleton/SkeletonText.svelte.d.ts +2 -2
  84. package/dist/index.d.ts +41 -0
  85. package/dist/types/eventHandlers.d.ts +9 -0
  86. package/dist/types/eventHandlers.js +2 -0
  87. package/dist/types/options.d.ts +1 -1
  88. package/dist/utils/formatText.js +4 -1
  89. package/package.json +5 -2
@@ -376,7 +376,6 @@
376
376
  --svelte-ui-input-icon-space-double-inline: calc(var(--svelte-ui-form-icon-space) * 2);
377
377
  --svelte-ui-input-bg: var(--svelte-ui-form-bg);
378
378
  --svelte-ui-input-border-color: var(--svelte-ui-border-weak-color);
379
- --svelte-ui-input-readonly-bg: var(--svelte-ui-form-bg);
380
379
  --svelte-ui-input-text-color: var(--svelte-ui-text-color);
381
380
  --svelte-ui-input-placeholder-color: var(--svelte-ui-text-placeholder-color);
382
381
  --svelte-ui-input-icon-color: var(--svelte-ui-text-subtle-color);
@@ -396,11 +395,6 @@
396
395
  --svelte-ui-textarea-icon-space-inline: var(--svelte-ui-form-icon-space);
397
396
  --svelte-ui-textarea-icon-top: 2px;
398
397
  --svelte-ui-textarea-icon-top-inline: -2px;
399
- --svelte-ui-textarea-bg: var(--svelte-ui-form-bg);
400
- --svelte-ui-textarea-border-color: var(--svelte-ui-border-weak-color);
401
- --svelte-ui-textarea-readonly-bg: var(--svelte-ui-form-bg);
402
- --svelte-ui-textarea-text-color: var(--svelte-ui-text-color);
403
- --svelte-ui-textarea-placeholder-color: var(--svelte-ui-text-placeholder-color);
404
398
  --svelte-ui-textarea-icon-color: var(--svelte-ui-text-subtle-color);
405
399
 
406
400
  /* Select */
@@ -4,6 +4,13 @@
4
4
  import type { Snippet } from 'svelte';
5
5
  import type { HTMLButtonAttributes } from 'svelte/elements';
6
6
  import type { IconVariant, IconWeight, IconGrade, IconOpticalSize } from '../types/icon';
7
+ import type {
8
+ FocusHandler,
9
+ KeyboardHandler,
10
+ MouseHandler,
11
+ TouchHandler,
12
+ PointerHandler
13
+ } from '../types/eventHandlers';
7
14
  import Icon from './Icon.svelte';
8
15
  import LoadingSpinner from './LoadingSpinner.svelte';
9
16
  import { getStyleFromNumber } from '../utils/style';
@@ -11,6 +18,80 @@
11
18
  // =========================================================================
12
19
  // Props, States & Constants
13
20
  // =========================================================================
21
+ export type ButtonProps = {
22
+ // Snippet
23
+ children: Snippet;
24
+
25
+ // HTML属性系
26
+ buttonAttributes?: HTMLButtonAttributes | undefined;
27
+ type?: HTMLButtonAttributes['type'];
28
+ tabindex?: number | null;
29
+
30
+ // スタイル/レイアウト
31
+ customStyle?: HTMLButtonAttributes['style'];
32
+ variant?: 'ghost' | 'filled' | 'outlined' | 'glass';
33
+ size?: 'small' | 'medium' | 'large';
34
+ color?: string;
35
+ fullWidth?: boolean;
36
+ minWidth?: string | number;
37
+ rounded?: boolean;
38
+ popup?: boolean;
39
+
40
+ // アイコン関連
41
+ icon?: string;
42
+ iconFilled?: boolean;
43
+ iconWeight?: IconWeight;
44
+ iconGrade?: IconGrade;
45
+ iconOpticalSize?: IconOpticalSize;
46
+ iconVariant?: IconVariant;
47
+
48
+ // 状態/動作
49
+ disabled?: boolean;
50
+ loading?: boolean;
51
+
52
+ // ARIA/アクセシビリティ
53
+ ariaLabel?: string;
54
+ ariaDescribedby?: string;
55
+ ariaExpanded?: boolean;
56
+ reducedMotion?: boolean;
57
+
58
+ // フォーカスイベント
59
+ onfocus?: FocusHandler;
60
+ onblur?: FocusHandler;
61
+
62
+ // キーボードイベント
63
+ onkeydown?: KeyboardHandler;
64
+ onkeyup?: KeyboardHandler;
65
+
66
+ // マウスイベント
67
+ onclick?: MouseHandler;
68
+ onmousedown?: MouseHandler;
69
+ onmouseup?: MouseHandler;
70
+ onmouseenter?: MouseHandler;
71
+ onmouseleave?: MouseHandler;
72
+ onmouseover?: MouseHandler;
73
+ onmouseout?: MouseHandler;
74
+ oncontextmenu?: MouseHandler;
75
+ onauxclick?: MouseHandler;
76
+
77
+ // タッチイベント
78
+ ontouchstart?: TouchHandler;
79
+ ontouchend?: TouchHandler;
80
+ ontouchmove?: TouchHandler;
81
+ ontouchcancel?: TouchHandler;
82
+
83
+ // ポインターイベント
84
+ onpointerdown?: PointerHandler;
85
+ onpointerup?: PointerHandler;
86
+ onpointerenter?: PointerHandler;
87
+ onpointerleave?: PointerHandler;
88
+ onpointermove?: PointerHandler;
89
+ onpointercancel?: PointerHandler;
90
+
91
+ // その他
92
+ [key: string]: any;
93
+ };
94
+
14
95
  let {
15
96
  // Snippet
16
97
  children,
@@ -83,79 +164,7 @@
83
164
 
84
165
  // その他
85
166
  ...restProps
86
- }: {
87
- // Snippet
88
- children: Snippet;
89
-
90
- // HTML属性系
91
- buttonAttributes?: HTMLButtonAttributes | undefined;
92
- type?: HTMLButtonAttributes['type'];
93
- tabindex?: number | null;
94
-
95
- // スタイル/レイアウト
96
- customStyle?: HTMLButtonAttributes['style'];
97
- variant?: 'ghost' | 'filled' | 'outlined' | 'glass';
98
- size?: 'small' | 'medium' | 'large';
99
- color?: string;
100
- fullWidth?: boolean;
101
- minWidth?: string | number;
102
- rounded?: boolean;
103
- popup?: boolean;
104
-
105
- // アイコン関連
106
- icon?: string;
107
- iconFilled?: boolean;
108
- iconWeight?: IconWeight;
109
- iconGrade?: IconGrade;
110
- iconOpticalSize?: IconOpticalSize;
111
- iconVariant?: IconVariant;
112
-
113
- // 状態/動作
114
- disabled?: boolean;
115
- loading?: boolean;
116
-
117
- // ARIA/アクセシビリティ
118
- ariaLabel?: string;
119
- ariaDescribedby?: string;
120
- ariaExpanded?: boolean;
121
- reducedMotion?: boolean;
122
-
123
- // フォーカスイベント
124
- onfocus?: Function; // No params for type inference
125
- onblur?: Function; // No params for type inference
126
-
127
- // キーボードイベント
128
- onkeydown?: Function; // No params for type inference
129
- onkeyup?: Function; // No params for type inference
130
-
131
- // マウスイベント
132
- onclick?: Function; // No params for type inference
133
- onmousedown?: Function; // No params for type inference
134
- onmouseup?: Function; // No params for type inference
135
- onmouseenter?: Function; // No params for type inference
136
- onmouseleave?: Function; // No params for type inference
137
- onmouseover?: Function; // No params for type inference
138
- onmouseout?: Function; // No params for type inference
139
- oncontextmenu?: Function; // No params for type inference
140
- onauxclick?: Function; // No params for type inference
141
-
142
- // タッチイベント
143
- ontouchstart?: Function; // No params for type inference
144
- ontouchend?: Function; // No params for type inference
145
- ontouchmove?: Function; // No params for type inference
146
- ontouchcancel?: Function; // No params for type inference
147
-
148
- // ポインターイベント
149
- onpointerdown?: Function; // No params for type inference
150
- onpointerup?: Function; // No params for type inference
151
- onpointerenter?: Function; // No params for type inference
152
- onpointerleave?: Function; // No params for type inference
153
- onpointermove?: Function; // No params for type inference
154
- onpointercancel?: Function; // No params for type inference
155
-
156
- // その他
157
- [key: string]: any;
158
- } = $props();
167
+ }: ButtonProps = $props();
159
168
 
160
169
  const backgroundColors = $derived({
161
170
  filled: color ?? 'var(--svelte-ui-button-bg-filled)',
@@ -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 $$ComponentProps = {
4
+ import type { FocusHandler, KeyboardHandler, MouseHandler, TouchHandler, PointerHandler } from '../types/eventHandlers';
5
+ export type ButtonProps = {
5
6
  children: Snippet;
6
7
  buttonAttributes?: HTMLButtonAttributes | undefined;
7
8
  type?: HTMLButtonAttributes['type'];
@@ -26,31 +27,31 @@ type $$ComponentProps = {
26
27
  ariaDescribedby?: string;
27
28
  ariaExpanded?: boolean;
28
29
  reducedMotion?: boolean;
29
- onfocus?: Function;
30
- onblur?: Function;
31
- onkeydown?: Function;
32
- onkeyup?: Function;
33
- onclick?: Function;
34
- onmousedown?: Function;
35
- onmouseup?: Function;
36
- onmouseenter?: Function;
37
- onmouseleave?: Function;
38
- onmouseover?: Function;
39
- onmouseout?: Function;
40
- oncontextmenu?: Function;
41
- onauxclick?: Function;
42
- ontouchstart?: Function;
43
- ontouchend?: Function;
44
- ontouchmove?: Function;
45
- ontouchcancel?: Function;
46
- onpointerdown?: Function;
47
- onpointerup?: Function;
48
- onpointerenter?: Function;
49
- onpointerleave?: Function;
50
- onpointermove?: Function;
51
- onpointercancel?: Function;
30
+ onfocus?: FocusHandler;
31
+ onblur?: FocusHandler;
32
+ onkeydown?: KeyboardHandler;
33
+ onkeyup?: KeyboardHandler;
34
+ onclick?: MouseHandler;
35
+ onmousedown?: MouseHandler;
36
+ onmouseup?: MouseHandler;
37
+ onmouseenter?: MouseHandler;
38
+ onmouseleave?: MouseHandler;
39
+ onmouseover?: MouseHandler;
40
+ onmouseout?: MouseHandler;
41
+ oncontextmenu?: MouseHandler;
42
+ onauxclick?: MouseHandler;
43
+ ontouchstart?: TouchHandler;
44
+ ontouchend?: TouchHandler;
45
+ ontouchmove?: TouchHandler;
46
+ ontouchcancel?: TouchHandler;
47
+ onpointerdown?: PointerHandler;
48
+ onpointerup?: PointerHandler;
49
+ onpointerenter?: PointerHandler;
50
+ onpointerleave?: PointerHandler;
51
+ onpointermove?: PointerHandler;
52
+ onpointercancel?: PointerHandler;
52
53
  [key: string]: any;
53
54
  };
54
- declare const Button: import("svelte").Component<$$ComponentProps, {}, "">;
55
+ declare const Button: import("svelte").Component<ButtonProps, {}, "">;
55
56
  type Button = ReturnType<typeof Button>;
56
57
  export default Button;
@@ -3,10 +3,81 @@
3
3
  <script lang="ts">
4
4
  import { type Snippet } from 'svelte';
5
5
  import type { HTMLInputAttributes } from 'svelte/elements';
6
+ import type {
7
+ FocusHandler,
8
+ KeyboardHandler,
9
+ MouseHandler,
10
+ TouchHandler,
11
+ PointerHandler,
12
+ BivariantValueHandler
13
+ } from '../types/eventHandlers';
6
14
 
7
15
  // =========================================================================
8
16
  // Props, States & Constants
9
17
  // =========================================================================
18
+ export type CheckboxProps = {
19
+ // Snippet
20
+ children?: Snippet;
21
+
22
+ // 基本プロパティ
23
+ name?: string;
24
+ value: boolean;
25
+ indeterminate?: boolean;
26
+
27
+ // HTML属性系
28
+ id?: string;
29
+ inputAttributes?: HTMLInputAttributes | undefined;
30
+
31
+ // スタイル/レイアウト
32
+ size?: 'small' | 'medium' | 'large';
33
+
34
+ // 状態/動作
35
+ disabled?: boolean;
36
+ required?: boolean;
37
+
38
+ // ARIA/アクセシビリティ
39
+ reducedMotion?: boolean;
40
+
41
+ // 入力イベント
42
+ onchange?: (value: boolean) => void;
43
+
44
+ // フォーカスイベント
45
+ onfocus?: FocusHandler;
46
+ onblur?: FocusHandler;
47
+
48
+ // キーボードイベント
49
+ onkeydown?: KeyboardHandler;
50
+ onkeyup?: KeyboardHandler;
51
+
52
+ // マウスイベント
53
+ onclick?: MouseHandler;
54
+ onmousedown?: MouseHandler;
55
+ onmouseup?: MouseHandler;
56
+ onmouseenter?: MouseHandler;
57
+ onmouseleave?: MouseHandler;
58
+ onmouseover?: MouseHandler;
59
+ onmouseout?: MouseHandler;
60
+ oncontextmenu?: MouseHandler;
61
+ onauxclick?: MouseHandler;
62
+
63
+ // タッチイベント
64
+ ontouchstart?: TouchHandler;
65
+ ontouchend?: TouchHandler;
66
+ ontouchmove?: TouchHandler;
67
+ ontouchcancel?: TouchHandler;
68
+
69
+ // ポインターイベント
70
+ onpointerdown?: PointerHandler;
71
+ onpointerup?: PointerHandler;
72
+ onpointerenter?: PointerHandler;
73
+ onpointerleave?: PointerHandler;
74
+ onpointermove?: PointerHandler;
75
+ onpointercancel?: PointerHandler;
76
+
77
+ // その他
78
+ [key: string]: any;
79
+ };
80
+
10
81
  let {
11
82
  // Snippet
12
83
  children,
@@ -68,85 +139,9 @@
68
139
 
69
140
  // その他
70
141
  ...restProps
71
- }: {
72
- // Snippet
73
- children?: Snippet;
74
-
75
- // 基本プロパティ
76
- name?: string;
77
- value: boolean;
78
- indeterminate?: boolean;
79
-
80
- // HTML属性系
81
- id?: string;
82
- inputAttributes?: HTMLInputAttributes | undefined;
83
-
84
- // スタイル/レイアウト
85
- size?: 'small' | 'medium' | 'large';
86
-
87
- // 状態/動作
88
- disabled?: boolean;
89
- required?: boolean;
90
-
91
- // ARIA/アクセシビリティ
92
- reducedMotion?: boolean;
93
-
94
- // 入力イベント
95
- onchange?: (value: boolean) => void;
96
-
97
- // フォーカスイベント
98
- onfocus?: Function; // No params for type inference
99
- onblur?: Function; // No params for type inference
100
-
101
- // キーボードイベント
102
- onkeydown?: Function; // No params for type inference
103
- onkeyup?: Function; // No params for type inference
104
-
105
- // マウスイベント
106
- onclick?: Function; // No params for type inference
107
- onmousedown?: Function; // No params for type inference
108
- onmouseup?: Function; // No params for type inference
109
- onmouseenter?: Function; // No params for type inference
110
- onmouseleave?: Function; // No params for type inference
111
- onmouseover?: Function; // No params for type inference
112
- onmouseout?: Function; // No params for type inference
113
- oncontextmenu?: Function; // No params for type inference
114
- onauxclick?: Function; // No params for type inference
115
-
116
- // タッチイベント
117
- ontouchstart?: Function; // No params for type inference
118
- ontouchend?: Function; // No params for type inference
119
- ontouchmove?: Function; // No params for type inference
120
- ontouchcancel?: Function; // No params for type inference
121
-
122
- // ポインターイベント
123
- onpointerdown?: Function; // No params for type inference
124
- onpointerup?: Function; // No params for type inference
125
- onpointerenter?: Function; // No params for type inference
126
- onpointerleave?: Function; // No params for type inference
127
- onpointermove?: Function; // No params for type inference
128
- onpointercancel?: Function; // No params for type inference
129
-
130
- // その他
131
- [key: string]: any;
132
- } = $props();
133
-
134
- // =========================================================================
135
- // $derived
136
- // =========================================================================
137
- const containerClasses = $derived(
138
- [
139
- 'checkbox',
140
- `checkbox--${size}`,
141
- disabled && 'checkbox--disabled',
142
- reducedMotion && 'checkbox--no-motion'
143
- ]
144
- .filter(Boolean)
145
- .join(' ')
146
- );
142
+ }: CheckboxProps = $props();
147
143
 
148
144
  // =========================================================================
149
-
150
145
  // Methods
151
146
  // =========================================================================
152
147
  const handleFocus = (event: FocusEvent) => {
@@ -275,6 +270,20 @@
275
270
  const handleChange = (event: Event) => {
276
271
  onchange(value);
277
272
  };
273
+
274
+ // =========================================================================
275
+ // $derived
276
+ // =========================================================================
277
+ const containerClasses = $derived(
278
+ [
279
+ 'checkbox',
280
+ `checkbox--${size}`,
281
+ disabled && 'checkbox--disabled',
282
+ reducedMotion && 'checkbox--no-motion'
283
+ ]
284
+ .filter(Boolean)
285
+ .join(' ')
286
+ );
278
287
  </script>
279
288
 
280
289
  <div class={containerClasses} data-testid="checkbox">
@@ -1,6 +1,7 @@
1
1
  import { type Snippet } from 'svelte';
2
2
  import type { HTMLInputAttributes } from 'svelte/elements';
3
- type $$ComponentProps = {
3
+ import type { FocusHandler, KeyboardHandler, MouseHandler, TouchHandler, PointerHandler } from '../types/eventHandlers';
4
+ export type CheckboxProps = {
4
5
  children?: Snippet;
5
6
  name?: string;
6
7
  value: boolean;
@@ -12,31 +13,31 @@ type $$ComponentProps = {
12
13
  required?: boolean;
13
14
  reducedMotion?: boolean;
14
15
  onchange?: (value: boolean) => void;
15
- onfocus?: Function;
16
- onblur?: Function;
17
- onkeydown?: Function;
18
- onkeyup?: Function;
19
- onclick?: Function;
20
- onmousedown?: Function;
21
- onmouseup?: Function;
22
- onmouseenter?: Function;
23
- onmouseleave?: Function;
24
- onmouseover?: Function;
25
- onmouseout?: Function;
26
- oncontextmenu?: Function;
27
- onauxclick?: Function;
28
- ontouchstart?: Function;
29
- ontouchend?: Function;
30
- ontouchmove?: Function;
31
- ontouchcancel?: Function;
32
- onpointerdown?: Function;
33
- onpointerup?: Function;
34
- onpointerenter?: Function;
35
- onpointerleave?: Function;
36
- onpointermove?: Function;
37
- onpointercancel?: Function;
16
+ onfocus?: FocusHandler;
17
+ onblur?: FocusHandler;
18
+ onkeydown?: KeyboardHandler;
19
+ onkeyup?: KeyboardHandler;
20
+ onclick?: MouseHandler;
21
+ onmousedown?: MouseHandler;
22
+ onmouseup?: MouseHandler;
23
+ onmouseenter?: MouseHandler;
24
+ onmouseleave?: MouseHandler;
25
+ onmouseover?: MouseHandler;
26
+ onmouseout?: MouseHandler;
27
+ oncontextmenu?: MouseHandler;
28
+ onauxclick?: MouseHandler;
29
+ ontouchstart?: TouchHandler;
30
+ ontouchend?: TouchHandler;
31
+ ontouchmove?: TouchHandler;
32
+ ontouchcancel?: TouchHandler;
33
+ onpointerdown?: PointerHandler;
34
+ onpointerup?: PointerHandler;
35
+ onpointerenter?: PointerHandler;
36
+ onpointerleave?: PointerHandler;
37
+ onpointermove?: PointerHandler;
38
+ onpointercancel?: PointerHandler;
38
39
  [key: string]: any;
39
40
  };
40
- declare const Checkbox: import("svelte").Component<$$ComponentProps, {}, "value" | "indeterminate">;
41
+ declare const Checkbox: import("svelte").Component<CheckboxProps, {}, "value" | "indeterminate">;
41
42
  type Checkbox = ReturnType<typeof Checkbox>;
42
43
  export default Checkbox;
@@ -1,8 +1,38 @@
1
+ <!-- CheckboxGroup.svelte -->
2
+
1
3
  <script lang="ts">
2
4
  import type { Option, OptionValue } from '../types/options';
3
5
  import Checkbox from './Checkbox.svelte';
4
6
  import { onMount } from 'svelte';
5
7
  import { getStyleFromNumber } from '../utils/style';
8
+ import type { BivariantValueHandler } from '../types/eventHandlers';
9
+
10
+ // =========================================================================
11
+ // Props, States & Constants
12
+ // =========================================================================
13
+
14
+ export type CheckboxGroupProps = {
15
+ // 基本プロパティ
16
+ options: Option[];
17
+ value: OptionValue[];
18
+
19
+ // スタイル/レイアウト
20
+ direction?: 'vertical' | 'horizontal';
21
+ gap?: string | number;
22
+ wrap?: boolean;
23
+ minOptionWidth?: string | number;
24
+ size?: 'small' | 'medium' | 'large';
25
+
26
+ // 状態/動作
27
+ disabled?: boolean;
28
+ required?: boolean;
29
+
30
+ // ARIA/アクセシビリティ
31
+ reducedMotion?: boolean;
32
+
33
+ // 入力イベント
34
+ onchange?: BivariantValueHandler<OptionValue[]>;
35
+ };
6
36
 
7
37
  let {
8
38
  // 基本プロパティ
@@ -25,43 +55,30 @@
25
55
 
26
56
  // 入力イベント
27
57
  onchange = () => {} // No params for type inference
28
- }: {
29
- // 基本プロパティ
30
- options: Option[];
31
- value: OptionValue[];
58
+ }: CheckboxGroupProps = $props();
32
59
 
33
- // スタイル/レイアウト
34
- direction?: 'vertical' | 'horizontal';
35
- gap?: string | number;
36
- wrap?: boolean;
37
- minOptionWidth?: string | number;
38
- size?: 'small' | 'medium' | 'large';
39
-
40
- // 状態/動作
41
- disabled?: boolean;
42
- required?: boolean;
43
-
44
- // ARIA/アクセシビリティ
45
- reducedMotion?: boolean;
46
-
47
- // 入力イベント
48
- onchange?: (value: OptionValue[]) => void;
49
- } = $props();
50
60
  let localValues: Record<string, boolean> = $state({});
51
61
 
62
+ // =========================================================================
63
+ // Lifecycle
64
+ // =========================================================================
52
65
  onMount(() => {
53
66
  options.forEach((option) => {
54
- localValues[option.value] = false;
67
+ localValues[String(option.value)] = false;
55
68
  });
56
69
  });
57
70
 
71
+ // =========================================================================
72
+ // Methods
73
+ // =========================================================================
58
74
  const handleChange = () => {
59
- value = options.filter((option) => localValues[option.value]).map((option) => option.value);
75
+ value = options
76
+ .filter((option) => localValues[String(option.value)])
77
+ .map((option) => option.value);
60
78
  onchange(value);
61
79
  };
62
80
 
63
81
  const gapStyle = gap !== undefined ? getStyleFromNumber(gap) : undefined;
64
-
65
82
  const minOptionWidthStyle = getStyleFromNumber(minOptionWidth);
66
83
  </script>
67
84
 
@@ -74,10 +91,10 @@
74
91
  "
75
92
  >
76
93
  {#each options as option (option.value)}
77
- {#if localValues[option.value] !== undefined}
94
+ {#if localValues[String(option.value)] !== undefined}
78
95
  <li class="checkbox-group__option">
79
96
  <Checkbox
80
- bind:value={localValues[option.value]}
97
+ bind:value={localValues[String(option.value)]}
81
98
  {size}
82
99
  {disabled}
83
100
  {required}
@@ -1,5 +1,6 @@
1
1
  import type { Option, OptionValue } from '../types/options';
2
- type $$ComponentProps = {
2
+ import type { BivariantValueHandler } from '../types/eventHandlers';
3
+ export type CheckboxGroupProps = {
3
4
  options: Option[];
4
5
  value: OptionValue[];
5
6
  direction?: 'vertical' | 'horizontal';
@@ -10,8 +11,8 @@ type $$ComponentProps = {
10
11
  disabled?: boolean;
11
12
  required?: boolean;
12
13
  reducedMotion?: boolean;
13
- onchange?: (value: OptionValue[]) => void;
14
+ onchange?: BivariantValueHandler<OptionValue[]>;
14
15
  };
15
- declare const CheckboxGroup: import("svelte").Component<$$ComponentProps, {}, "value">;
16
+ declare const CheckboxGroup: import("svelte").Component<CheckboxGroupProps, {}, "value">;
16
17
  type CheckboxGroup = ReturnType<typeof CheckboxGroup>;
17
18
  export default CheckboxGroup;