cclkit4svelte 2.0.6 → 3.0.0

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 (82) hide show
  1. package/dist/Accordion.svelte +40 -29
  2. package/dist/Accordion.svelte.d.ts +31 -22
  3. package/dist/AccordionItem.svelte +120 -87
  4. package/dist/AccordionItem.svelte.d.ts +43 -34
  5. package/dist/Alert.svelte +111 -82
  6. package/dist/Alert.svelte.d.ts +38 -36
  7. package/dist/Badge.svelte +84 -0
  8. package/dist/Badge.svelte.d.ts +34 -0
  9. package/dist/BookCard.svelte +127 -88
  10. package/dist/BookCard.svelte.d.ts +47 -45
  11. package/dist/Breadcrumb.svelte +91 -0
  12. package/dist/Breadcrumb.svelte.d.ts +37 -0
  13. package/dist/Button.svelte +72 -35
  14. package/dist/Button.svelte.d.ts +33 -31
  15. package/dist/Card.svelte +110 -75
  16. package/dist/Card.svelte.d.ts +38 -36
  17. package/dist/Carousel.svelte +91 -66
  18. package/dist/Carousel.svelte.d.ts +26 -24
  19. package/dist/ChangeHistory.svelte +188 -150
  20. package/dist/ChangeHistory.svelte.d.ts +29 -27
  21. package/dist/Checkbox.svelte +120 -89
  22. package/dist/Checkbox.svelte.d.ts +41 -39
  23. package/dist/CommonHeader.svelte +51 -24
  24. package/dist/CommonHeader.svelte.d.ts +38 -36
  25. package/dist/DatePicker.svelte +239 -188
  26. package/dist/DatePicker.svelte.d.ts +40 -38
  27. package/dist/Dialog.svelte +224 -0
  28. package/dist/Dialog.svelte.d.ts +50 -0
  29. package/dist/Drawer.svelte +158 -0
  30. package/dist/Drawer.svelte.d.ts +40 -0
  31. package/dist/Footer.svelte +32 -16
  32. package/dist/Footer.svelte.d.ts +21 -19
  33. package/dist/FormGroup.svelte +67 -43
  34. package/dist/FormGroup.svelte.d.ts +46 -37
  35. package/dist/Header.svelte +108 -98
  36. package/dist/Header.svelte.d.ts +25 -23
  37. package/dist/Input.svelte +154 -99
  38. package/dist/Input.svelte.d.ts +62 -60
  39. package/dist/Pagination.svelte +222 -0
  40. package/dist/Pagination.svelte.d.ts +35 -0
  41. package/dist/ProgressBar.svelte +49 -44
  42. package/dist/ProgressBar.svelte.d.ts +25 -23
  43. package/dist/RadioButton.svelte +92 -62
  44. package/dist/RadioButton.svelte.d.ts +40 -38
  45. package/dist/Select.svelte +94 -53
  46. package/dist/Select.svelte.d.ts +49 -47
  47. package/dist/ServiceCard.svelte +71 -64
  48. package/dist/ServiceCard.svelte.d.ts +27 -25
  49. package/dist/Skeleton.svelte +96 -0
  50. package/dist/Skeleton.svelte.d.ts +24 -0
  51. package/dist/SlideMenu.svelte +157 -0
  52. package/dist/SlideMenu.svelte.d.ts +42 -0
  53. package/dist/Spinner.svelte +25 -23
  54. package/dist/Spinner.svelte.d.ts +20 -18
  55. package/dist/TabPanel.svelte +42 -21
  56. package/dist/TabPanel.svelte.d.ts +40 -31
  57. package/dist/Table.svelte +114 -73
  58. package/dist/Table.svelte.d.ts +33 -31
  59. package/dist/Tabs.svelte +78 -72
  60. package/dist/Tabs.svelte.d.ts +18 -16
  61. package/dist/Textarea.svelte +101 -52
  62. package/dist/Textarea.svelte.d.ts +57 -55
  63. package/dist/Thumbnail.svelte +33 -15
  64. package/dist/Thumbnail.svelte.d.ts +34 -32
  65. package/dist/Toaster.svelte +144 -0
  66. package/dist/Toaster.svelte.d.ts +26 -0
  67. package/dist/Toggle.svelte +85 -61
  68. package/dist/Toggle.svelte.d.ts +36 -34
  69. package/dist/Tooltip.svelte +126 -122
  70. package/dist/Tooltip.svelte.d.ts +30 -21
  71. package/dist/const/colorMap.d.ts +5 -0
  72. package/dist/const/colorMap.js +21 -0
  73. package/dist/const/variables.css +21 -21
  74. package/dist/index.d.ts +10 -0
  75. package/dist/index.js +9 -0
  76. package/dist/toast.d.ts +29 -0
  77. package/dist/toast.js +66 -0
  78. package/dist/types/breadcrumb.d.ts +4 -0
  79. package/dist/types/breadcrumb.js +1 -0
  80. package/dist/types/slide-menu.d.ts +5 -0
  81. package/dist/types/slide-menu.js +1 -0
  82. package/package.json +87 -87
@@ -0,0 +1,224 @@
1
+ <script lang="ts">
2
+ import { createEventDispatcher, onDestroy, onMount } from 'svelte';
3
+ import { CCLVividColor } from './const/config';
4
+ type VividVar = (typeof CCLVividColor)[keyof typeof CCLVividColor];
5
+
6
+ const isBrowser = typeof window !== 'undefined';
7
+
8
+ const dispatch = createEventDispatcher<{ close: void }>();
9
+
10
+ /**
11
+ * ダイアログの表示状態
12
+ */
13
+ export let open: boolean = false;
14
+
15
+ /**
16
+ * タイトル(スロット優先)。
17
+ */
18
+ export let title: string = '';
19
+
20
+ /**
21
+ * ESCキーで閉じるか
22
+ */
23
+ export let closeOnEsc: boolean = true;
24
+
25
+ /**
26
+ * オーバーレイ(外側クリック)で閉じるか
27
+ */
28
+ export let closeOnOutside: boolean = true;
29
+
30
+ /**
31
+ * アクセント色(境界線やタイトルに使用)
32
+ */
33
+ export let borderColor: VividVar = CCLVividColor.STRAWBERRY_PINK;
34
+
35
+ // ヘッダー背景は borderColor と共通化
36
+ let panelEl: HTMLElement | null = null;
37
+ let previouslyFocused: Element | null = null;
38
+ const titleId = `ccl-dialog-title-${Math.random().toString(36).substring(2, 9)}`;
39
+
40
+ function close() {
41
+ dispatch('close');
42
+ }
43
+
44
+ function onKeydown(e: KeyboardEvent) {
45
+ if (!open) return;
46
+ if (e.key === 'Escape' && closeOnEsc) {
47
+ e.stopPropagation();
48
+ close();
49
+ }
50
+ if (e.key === 'Tab') {
51
+ // 簡易フォーカストラップ
52
+ const focusable = panelEl?.querySelectorAll<HTMLElement>(
53
+ 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex="-1"])'
54
+ );
55
+ if (!focusable || focusable.length === 0) return;
56
+ const first = focusable[0];
57
+ const last = focusable[focusable.length - 1];
58
+ const active = document.activeElement as HTMLElement | null;
59
+ if (e.shiftKey) {
60
+ if (active === first || !panelEl?.contains(active)) {
61
+ e.preventDefault();
62
+ last.focus();
63
+ }
64
+ } else {
65
+ if (active === last) {
66
+ e.preventDefault();
67
+ first.focus();
68
+ }
69
+ }
70
+ }
71
+ }
72
+
73
+ function moveFocusIn() {
74
+ // 表示時にパネル内へフォーカス移動
75
+ previouslyFocused = document.activeElement;
76
+ const focusable = panelEl?.querySelector<HTMLElement>(
77
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
78
+ );
79
+ (focusable ?? panelEl)?.focus();
80
+ }
81
+
82
+ function restoreFocus() {
83
+ if (previouslyFocused instanceof HTMLElement) {
84
+ previouslyFocused.focus({ preventScroll: true });
85
+ }
86
+ }
87
+
88
+ function lockScroll() {
89
+ const original = document.documentElement.style.overflow;
90
+ document.documentElement.style.overflow = 'hidden';
91
+ return () => {
92
+ document.documentElement.style.overflow = original;
93
+ };
94
+ }
95
+
96
+ let unlockScroll: (() => void) | null = null;
97
+
98
+ onMount(() => {
99
+ const handle = (e: KeyboardEvent) => onKeydown(e);
100
+ window.addEventListener('keydown', handle, true);
101
+ return () => window.removeEventListener('keydown', handle, true);
102
+ });
103
+
104
+ $: if (isBrowser) {
105
+ if (open) {
106
+ // 表示されたときに実施
107
+ setTimeout(moveFocusIn, 0);
108
+ if (!unlockScroll) unlockScroll = lockScroll();
109
+ } else {
110
+ // 非表示に切り替わったとき
111
+ if (unlockScroll) {
112
+ unlockScroll();
113
+ unlockScroll = null;
114
+ }
115
+ restoreFocus();
116
+ }
117
+ }
118
+
119
+ onDestroy(() => {
120
+ if (unlockScroll) unlockScroll();
121
+ });
122
+ </script>
123
+
124
+ {#if open}
125
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
126
+ <div
127
+ class="ccl-dialog-backdrop"
128
+ role="presentation"
129
+ on:click={() => {
130
+ if (closeOnOutside) close();
131
+ }}
132
+ >
133
+ <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
134
+ <div
135
+ bind:this={panelEl}
136
+ class="ccl-dialog-panel"
137
+ role="dialog"
138
+ aria-modal="true"
139
+ aria-labelledby={titleId}
140
+ style="--border-color: var({borderColor});"
141
+ on:click|stopPropagation
142
+ tabindex="-1"
143
+ >
144
+ <header class="ccl-dialog-header">
145
+ <h2 id={titleId} class="ccl-dialog-title">
146
+ <slot name="title">{title}</slot>
147
+ </h2>
148
+ <button class="ccl-dialog-close" aria-label="Close dialog" on:click={close}> × </button>
149
+ </header>
150
+ <section class="ccl-dialog-body">
151
+ <slot />
152
+ </section>
153
+ <footer class="ccl-dialog-footer">
154
+ <slot name="footer" />
155
+ </footer>
156
+ </div>
157
+ </div>
158
+ {/if}
159
+
160
+ <style>
161
+ .ccl-dialog-backdrop {
162
+ position: fixed;
163
+ inset: 0;
164
+ background: var(--wrap-grey);
165
+ display: grid;
166
+ place-items: center;
167
+ z-index: 1000;
168
+ }
169
+
170
+ .ccl-dialog-panel {
171
+ background: #fff;
172
+ border: 4px solid var(--border-color);
173
+ border-radius: 12px;
174
+ max-width: 640px;
175
+ width: calc(100% - 2rem);
176
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.25);
177
+ color: var(--wrap-grey);
178
+ display: grid;
179
+ grid-template-rows: auto 1fr auto;
180
+ max-height: 85vh;
181
+ outline: none;
182
+ }
183
+
184
+ .ccl-dialog-header {
185
+ display: flex;
186
+ align-items: center;
187
+ justify-content: space-between;
188
+ padding: 0.75rem 1rem;
189
+ border-bottom: 3px solid var(--border-color);
190
+ background: var(--border-color);
191
+ color: #fff;
192
+ }
193
+
194
+ .ccl-dialog-title {
195
+ margin: 0;
196
+ color: #fff;
197
+ font-size: 1.1rem;
198
+ }
199
+
200
+ .ccl-dialog-close {
201
+ background: var(--border-color);
202
+ border: 2px solid var(--border-color);
203
+ color: #fff;
204
+ border-radius: 8px;
205
+ width: 2.25rem;
206
+ height: 2.25rem;
207
+ cursor: pointer;
208
+ font-size: 1.5rem;
209
+ font-weight: 900;
210
+ line-height: 1;
211
+ }
212
+
213
+ .ccl-dialog-body {
214
+ padding: 1rem;
215
+ overflow: auto;
216
+ }
217
+
218
+ .ccl-dialog-footer {
219
+ padding: 0.75rem 1rem;
220
+ display: flex;
221
+ gap: 0.5rem;
222
+ justify-content: flex-end;
223
+ }
224
+ </style>
@@ -0,0 +1,50 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
15
+ default: any;
16
+ } ? Props extends Record<string, never> ? any : {
17
+ children?: any;
18
+ } : {});
19
+ declare const Dialog: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
+ /**
21
+ * ダイアログの表示状態
22
+ */ open?: boolean;
23
+ /**
24
+ * タイトル(スロット優先)。
25
+ */ title?: string;
26
+ /**
27
+ * ESCキーで閉じるか
28
+ */ closeOnEsc?: boolean;
29
+ /**
30
+ * オーバーレイ(外側クリック)で閉じるか
31
+ */ closeOnOutside?: boolean;
32
+ /**
33
+ * アクセント色(境界線やタイトルに使用)
34
+ */ borderColor?: any;
35
+ }, {
36
+ title: {};
37
+ default: {};
38
+ footer: {};
39
+ }>, {
40
+ click: PointerEvent;
41
+ close: CustomEvent<void>;
42
+ } & {
43
+ [evt: string]: CustomEvent<any>;
44
+ }, {
45
+ title: {};
46
+ default: {};
47
+ footer: {};
48
+ }, {}, string>;
49
+ type Dialog = InstanceType<typeof Dialog>;
50
+ export default Dialog;
@@ -0,0 +1,158 @@
1
+ <script lang="ts">
2
+ import { createEventDispatcher, onMount, onDestroy } from 'svelte';
3
+
4
+ const dispatch = createEventDispatcher();
5
+
6
+ /** 開閉状態(制御用) */
7
+ export let open: boolean = false;
8
+ /** どの方向から表示するか */
9
+ export let side: 'left' | 'right' | 'top' | 'bottom' = 'right';
10
+ /** パネルサイズ(left/right は幅、top/bottom は高さ) */
11
+ export let size: string = '320px';
12
+ /** 背景のバックドロップを表示するか */
13
+ export let backdrop: boolean = true;
14
+ /** ESC キーで閉じるか */
15
+ export let closeOnEsc: boolean = true;
16
+ /** バックドロップクリックで閉じるか */
17
+ export let closeOnBackdropClick: boolean = true;
18
+ /** アクセシビリティ用ラベル(タイトルが無い場合など) */
19
+ export let ariaLabel: string | undefined;
20
+ /** 追加クラス(外部からパネルへ付与) */
21
+ export let panelClass: string = '';
22
+ /** 追加スタイル(外部からパネルへ付与) */
23
+ export let panelStyle: string = '';
24
+
25
+ let panelEl: HTMLDivElement | null = null;
26
+
27
+ function handleKeydown(e: KeyboardEvent) {
28
+ if (!open) return;
29
+ if (closeOnEsc && e.key === 'Escape') {
30
+ e.stopPropagation();
31
+ dispatch('close');
32
+ }
33
+ }
34
+
35
+ function onBackdropClick() {
36
+ if (!open) return;
37
+ if (closeOnBackdropClick) dispatch('close');
38
+ }
39
+
40
+ function lockScroll(lock: boolean) {
41
+ try {
42
+ document.body.style.overflow = lock ? 'hidden' : '';
43
+ } catch {}
44
+ }
45
+
46
+ $: lockScroll(open && backdrop);
47
+
48
+ onMount(() => {
49
+ window.addEventListener('keydown', handleKeydown, { capture: true });
50
+ });
51
+ onDestroy(() => {
52
+ window.removeEventListener('keydown', handleKeydown, { capture: true } as any);
53
+ lockScroll(false);
54
+ });
55
+ </script>
56
+
57
+ {#if backdrop}
58
+ <div
59
+ class="drawer-backdrop {open ? 'open' : ''}"
60
+ data-testid="drawer-backdrop"
61
+ aria-hidden="true"
62
+ on:click={onBackdropClick}
63
+ />
64
+ {/if}
65
+
66
+ <div
67
+ bind:this={panelEl}
68
+ {...$$restProps}
69
+ class={`drawer ${open ? 'open' : ''} from-${side} ${panelClass}`}
70
+ role="dialog"
71
+ aria-modal="true"
72
+ aria-hidden={!open}
73
+ aria-label={ariaLabel}
74
+ style={`--drawer-size: ${size}; ${panelStyle}`}
75
+ >
76
+ <slot />
77
+ </div>
78
+
79
+ <style>
80
+ .drawer-backdrop {
81
+ position: fixed;
82
+ inset: 0;
83
+ background: rgba(0, 0, 0, 0.35);
84
+ opacity: 0;
85
+ pointer-events: none;
86
+ transition: opacity 0.2s ease;
87
+ z-index: 9998;
88
+ }
89
+ .drawer-backdrop.open {
90
+ opacity: 1;
91
+ pointer-events: auto;
92
+ }
93
+
94
+ .drawer {
95
+ position: fixed;
96
+ z-index: 9999;
97
+ background: #fff;
98
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
99
+ transition: transform 0.22s ease;
100
+ overflow: hidden; /* prevent inner spill */
101
+ visibility: hidden; /* hide when closed to avoid visual leak */
102
+ pointer-events: none; /* ignore interactions when closed */
103
+ /* default size for each side is set via vars */
104
+ }
105
+
106
+ .drawer.open {
107
+ visibility: visible;
108
+ pointer-events: auto;
109
+ }
110
+
111
+ /* from-right */
112
+ .drawer.from-right {
113
+ top: 0;
114
+ right: 0;
115
+ height: 100%;
116
+ width: var(--drawer-size);
117
+ transform: translateX(100%);
118
+ }
119
+ .drawer.from-right.open {
120
+ transform: translateX(0);
121
+ }
122
+
123
+ /* from-left */
124
+ .drawer.from-left {
125
+ top: 0;
126
+ left: 0;
127
+ height: 100%;
128
+ width: var(--drawer-size);
129
+ transform: translateX(-100%);
130
+ }
131
+ .drawer.from-left.open {
132
+ transform: translateX(0);
133
+ }
134
+
135
+ /* from-top */
136
+ .drawer.from-top {
137
+ top: 0;
138
+ left: 0;
139
+ width: 100%;
140
+ height: var(--drawer-size);
141
+ transform: translateY(-100%);
142
+ }
143
+ .drawer.from-top.open {
144
+ transform: translateY(0);
145
+ }
146
+
147
+ /* from-bottom */
148
+ .drawer.from-bottom {
149
+ bottom: 0;
150
+ left: 0;
151
+ width: 100%;
152
+ height: var(--drawer-size);
153
+ transform: translateY(100%);
154
+ }
155
+ .drawer.from-bottom.open {
156
+ transform: translateY(0);
157
+ }
158
+ </style>
@@ -0,0 +1,40 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
15
+ default: any;
16
+ } ? Props extends Record<string, never> ? any : {
17
+ children?: any;
18
+ } : {});
19
+ declare const Drawer: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
+ [x: string]: any;
21
+ open?: boolean | undefined;
22
+ side?: "left" | "right" | "top" | "bottom" | undefined;
23
+ size?: string | undefined;
24
+ backdrop?: boolean | undefined;
25
+ closeOnEsc?: boolean | undefined;
26
+ closeOnBackdropClick?: boolean | undefined;
27
+ ariaLabel: string | undefined;
28
+ panelClass?: string | undefined;
29
+ panelStyle?: string | undefined;
30
+ }, {
31
+ default: {};
32
+ }>, {
33
+ close: CustomEvent<any>;
34
+ } & {
35
+ [evt: string]: CustomEvent<any>;
36
+ }, {
37
+ default: {};
38
+ }, {}, string>;
39
+ type Drawer = InstanceType<typeof Drawer>;
40
+ export default Drawer;
@@ -1,24 +1,40 @@
1
- <script>import { getYear } from "./scripts/date";
2
- export let bgColor = "--strawberry-pink";
3
- const year = getYear();
1
+ <script lang="ts">
2
+ import type { ColorVar } from './const/config';
3
+ import { getYear } from './scripts/date';
4
+ import { vividFor } from './const/colorMap';
5
+
6
+ /**
7
+ * フッター背景色(CCLVividColor/CCLPastelColor の CSS 変数名)
8
+ * @default --strawberry-pink
9
+ */
10
+ export let bgColor: ColorVar = '--strawberry-pink';
11
+ $: footerFg = vividFor(bgColor as string);
12
+
13
+ /**
14
+ * アクセス当日の年を4桁で算出、フッターの中に配置する
15
+ */
16
+ const year = getYear();
4
17
  </script>
5
18
 
6
19
  <!--汎用フッター-->
7
- <footer class="footerWrapper" style="--bgColor: var({bgColor});">
8
- <span class="copy">Copyright © 2015-{year} CANDY CHUPS Lab. All Rights Reserved.</span>
20
+ <footer
21
+ class="footerWrapper"
22
+ style="--bgColor: var({bgColor}); {footerFg ? `--footer-fg: var(${footerFg});` : ''}"
23
+ >
24
+ <span class="copy">Copyright © 2015-{year} CANDY CHUPS Lab. All Rights Reserved.</span>
9
25
  </footer>
10
26
 
11
27
  <style>
12
- .footerWrapper {
13
- display: flex;
14
- height: 30px;
15
- justify-content: center;
16
- align-items: center;
17
- background: var(--bgColor);
18
- }
28
+ .footerWrapper {
29
+ display: flex;
30
+ height: 30px;
31
+ justify-content: center;
32
+ align-items: center;
33
+ background: var(--bgColor);
34
+ }
19
35
 
20
- .copy {
21
- color: #fff;
22
- font-size: 9px;
23
- }
36
+ .copy {
37
+ color: var(--footer-fg, #fff);
38
+ font-size: 9px;
39
+ }
24
40
  </style>
@@ -1,22 +1,24 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type { ColorVar } from './const/config';
3
- declare const __propDef: {
4
- props: {
5
- /**
6
- * フッター背景色(CCLVividColor/CCLPastelColor の CSS 変数名)
7
- * @default --strawberry-pink
8
- */ bgColor?: ColorVar;
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
9
12
  };
10
- events: {
11
- [evt: string]: CustomEvent<any>;
12
- };
13
- slots: {};
14
- exports?: {} | undefined;
15
- bindings?: string | undefined;
16
- };
17
- export type FooterProps = typeof __propDef.props;
18
- export type FooterEvents = typeof __propDef.events;
19
- export type FooterSlots = typeof __propDef.slots;
20
- export default class Footer extends SvelteComponent<FooterProps, FooterEvents, FooterSlots> {
13
+ z_$$bindings?: Bindings;
21
14
  }
22
- export {};
15
+ declare const Footer: $$__sveltets_2_IsomorphicComponent<{
16
+ /**
17
+ * フッター背景色(CCLVividColor/CCLPastelColor の CSS 変数名)
18
+ * @default --strawberry-pink
19
+ */ bgColor?: ColorVar;
20
+ }, {
21
+ [evt: string]: CustomEvent<any>;
22
+ }, {}, {}, string>;
23
+ type Footer = InstanceType<typeof Footer>;
24
+ export default Footer;
@@ -1,53 +1,77 @@
1
- <script>export let label = "";
2
- export let helpText = "";
3
- export let errorMessage = "";
4
- export let forId = "";
1
+ <script lang="ts">
2
+ /**
3
+ * フォーム要素のラベルテキスト
4
+ * @default ''
5
+ * @type string
6
+ */
7
+ export let label: string = '';
8
+
9
+ /**
10
+ * ユーザーへの補足説明やヒント
11
+ * @default ''
12
+ * @type string
13
+ */
14
+ export let helpText: string = '';
15
+
16
+ /**
17
+ * バリデーションエラーが発生した場合に表示するメッセージ
18
+ * @default ''
19
+ * @type string
20
+ */
21
+ export let errorMessage: string = '';
22
+
23
+ /**
24
+ * ラベルと入力要素を関連付けるためのID
25
+ * @default ''
26
+ * @type string
27
+ */
28
+ export let forId: string = '';
5
29
  </script>
6
30
 
7
31
  <div class="formGroupWrapper">
8
- {#if label}
9
- <label for={forId} class="formLabel">{label}</label>
10
- {/if}
32
+ {#if label}
33
+ <label for={forId} class="formLabel">{label}</label>
34
+ {/if}
11
35
 
12
- <div class="formControl">
13
- <slot />
14
- </div>
36
+ <div class="formControl">
37
+ <slot />
38
+ </div>
15
39
 
16
- {#if helpText && !errorMessage}
17
- <p class="helpText">{helpText}</p>
18
- {/if}
40
+ {#if helpText && !errorMessage}
41
+ <p class="helpText">{helpText}</p>
42
+ {/if}
19
43
 
20
- {#if errorMessage}
21
- <p class="errorMessage">{errorMessage}</p>
22
- {/if}
44
+ {#if errorMessage}
45
+ <p class="errorMessage">{errorMessage}</p>
46
+ {/if}
23
47
  </div>
24
48
 
25
49
  <style>
26
- .formGroupWrapper {
27
- margin-bottom: 16px;
28
- }
29
-
30
- .formLabel {
31
- display: block;
32
- font-size: 14px;
33
- font-weight: bold;
34
- margin-bottom: 4px;
35
- color: #333;
36
- }
37
-
38
- .formControl {
39
- /* スロットコンテンツのスタイルを調整するために必要に応じて追加 */
40
- }
41
-
42
- .helpText {
43
- font-size: 12px;
44
- color: #666;
45
- margin-top: 4px;
46
- }
47
-
48
- .errorMessage {
49
- font-size: 12px;
50
- color: #d9534f; /* Bootstrap danger color */
51
- margin-top: 4px;
52
- }
50
+ .formGroupWrapper {
51
+ margin-bottom: 16px;
52
+ }
53
+
54
+ .formLabel {
55
+ display: block;
56
+ font-size: 14px;
57
+ font-weight: bold;
58
+ margin-bottom: 4px;
59
+ color: #333;
60
+ }
61
+
62
+ .formControl {
63
+ /* スロットコンテンツのスタイルを調整するために必要に応じて追加 */
64
+ }
65
+
66
+ .helpText {
67
+ font-size: 12px;
68
+ color: #666;
69
+ margin-top: 4px;
70
+ }
71
+
72
+ .errorMessage {
73
+ font-size: 12px;
74
+ color: #d9534f; /* Bootstrap danger color */
75
+ margin-top: 4px;
76
+ }
53
77
  </style>