@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
@@ -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
- let html = convertToHtml(value) as string;
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行分の高さを確保するためにダミーの &nbsp; を入れる
353
- // (placeholder がある場合は :empty::before でプレースホルダを表示したいので空にしておく)
354
354
  if (inline && !placeholder) {
355
355
  return '&nbsp;';
356
356
  }
@@ -388,7 +388,7 @@
388
388
  <div
389
389
  class="textarea__display-text"
390
390
  data-placeholder={placeholder}
391
- style="{minHeightVarStyle} {customStyle}"
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="width: {widthStyle}; {minHeightVarStyle} {customStyle}"
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="{minHeightVarStyle} {customStyle}">
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
- background-color: var(--svelte-ui-input-readonly-bg);
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 $$ComponentProps = {
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?: Function;
35
- onblur?: Function;
36
- onkeydown?: Function;
37
- onkeyup?: Function;
38
- onclick?: Function;
39
- onmousedown?: Function;
40
- onmouseup?: Function;
41
- onmouseenter?: Function;
42
- onmouseleave?: Function;
43
- onmouseover?: Function;
44
- onmouseout?: Function;
45
- oncontextmenu?: Function;
46
- onauxclick?: Function;
47
- ontouchstart?: Function;
48
- ontouchend?: Function;
49
- ontouchmove?: Function;
50
- ontouchcancel?: Function;
51
- onpointerdown?: Function;
52
- onpointerup?: Function;
53
- onpointerenter?: Function;
54
- onpointerleave?: Function;
55
- onpointermove?: Function;
56
- onpointercancel?: Function;
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<$$ComponentProps, {
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
- // $derived
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 $$ComponentProps = {
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<$$ComponentProps, {}, "">;
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 $$ComponentProps = {
2
+ export type SkeletonAvatarProps = {
3
3
  avatarConfig?: Partial<SkeletonAvatarConfig>;
4
4
  animated?: boolean;
5
5
  };
6
- declare const SkeletonAvatar: import("svelte").Component<$$ComponentProps, {}, "">;
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 $$ComponentProps = {
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<$$ComponentProps, {}, "">;
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
- let {
10
- buttonConfig = {},
11
- animated = true
12
- }: {
9
+ // =========================================================================
10
+ // Props, States & Constants
11
+ // =========================================================================
12
+ export type SkeletonButtonProps = {
13
13
  buttonConfig?: Partial<SkeletonButtonConfig>;
14
14
  animated?: boolean;
15
- } = $props();
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 $$ComponentProps = {
2
+ export type SkeletonButtonProps = {
3
3
  buttonConfig?: Partial<SkeletonButtonConfig>;
4
4
  animated?: boolean;
5
5
  };
6
- declare const SkeletonButton: import("svelte").Component<$$ComponentProps, {}, "">;
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
- } = $props();
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 $$ComponentProps = {
2
+ export type SkeletonHeadingProps = {
3
3
  headingConfig?: Partial<SkeletonHeadingConfig>;
4
4
  animated?: boolean;
5
5
  };
6
- declare const SkeletonHeading: import("svelte").Component<$$ComponentProps, {}, "">;
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
- let {
15
- width = '100%',
16
- mediaConfig = {},
17
- animated = true
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
- } = $props();
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 $$ComponentProps = {
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<$$ComponentProps, {}, "">;
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>