@soave/ui 0.2.1 → 0.3.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 (109) hide show
  1. package/dist/adapters/types.d.ts +1 -1
  2. package/dist/components/Button.vue +36 -0
  3. package/dist/components/Card.vue +23 -0
  4. package/dist/components/Checkbox.vue +44 -0
  5. package/dist/components/Dialog.vue +99 -0
  6. package/dist/components/Input.vue +42 -0
  7. package/dist/components/RadioGroup.vue +35 -0
  8. package/dist/components/RadioItem.vue +55 -0
  9. package/dist/components/Select.vue +95 -0
  10. package/dist/components/SelectContent.vue +40 -0
  11. package/dist/components/SelectItem.vue +44 -0
  12. package/dist/components/SelectTrigger.vue +61 -0
  13. package/dist/components/Switch.vue +43 -0
  14. package/dist/components/Textarea.vue +49 -0
  15. package/dist/components/index.d.ts +13 -0
  16. package/dist/components/index.mjs +13 -0
  17. package/dist/composables/useButton.d.ts +2 -2
  18. package/dist/composables/useButton.mjs +14 -41
  19. package/dist/composables/useCard.d.ts +2 -2
  20. package/dist/composables/useCard.mjs +5 -18
  21. package/dist/composables/useCheckbox.d.ts +2 -1
  22. package/dist/composables/useCheckbox.mjs +11 -44
  23. package/dist/composables/useFileInput.d.ts +2 -0
  24. package/dist/composables/useFileInput.mjs +15 -30
  25. package/dist/composables/useForm.mjs +2 -2
  26. package/dist/composables/useInput.d.ts +2 -2
  27. package/dist/composables/useInput.mjs +12 -33
  28. package/dist/composables/useRadio.d.ts +2 -1
  29. package/dist/composables/useRadio.mjs +10 -42
  30. package/dist/composables/useSelect.d.ts +3 -0
  31. package/dist/composables/useSelect.mjs +20 -49
  32. package/dist/composables/useSwitch.d.ts +2 -1
  33. package/dist/composables/useSwitch.mjs +10 -43
  34. package/dist/composables/useTextarea.d.ts +2 -1
  35. package/dist/composables/useTextarea.mjs +12 -33
  36. package/dist/composables/useToast.mjs +1 -1
  37. package/dist/env.d.ts +11 -0
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.mjs +1 -1
  40. package/dist/types/button.d.ts +19 -5
  41. package/dist/types/card.d.ts +11 -2
  42. package/dist/types/checkbox.d.ts +15 -6
  43. package/dist/types/composables.d.ts +52 -24
  44. package/dist/types/config.d.ts +1 -0
  45. package/dist/types/file-input.d.ts +15 -5
  46. package/dist/types/form.d.ts +5 -5
  47. package/dist/types/input.d.ts +17 -6
  48. package/dist/types/radio.d.ts +14 -6
  49. package/dist/types/select.d.ts +25 -7
  50. package/dist/types/switch.d.ts +14 -5
  51. package/dist/types/textarea.d.ts +20 -7
  52. package/dist/types/toast.d.ts +2 -2
  53. package/dist/types/tooltip.d.ts +3 -0
  54. package/dist/types/tooltip.mjs +1 -0
  55. package/package.json +1 -9
  56. package/dist/components/ui/Alert.vue +0 -41
  57. package/dist/components/ui/AlertDescription.vue +0 -22
  58. package/dist/components/ui/AlertTitle.vue +0 -22
  59. package/dist/components/ui/Button.vue +0 -85
  60. package/dist/components/ui/Card.vue +0 -39
  61. package/dist/components/ui/CardContent.vue +0 -22
  62. package/dist/components/ui/CardDescription.vue +0 -22
  63. package/dist/components/ui/CardFooter.vue +0 -22
  64. package/dist/components/ui/CardHeader.vue +0 -22
  65. package/dist/components/ui/CardTitle.vue +0 -22
  66. package/dist/components/ui/Checkbox.vue +0 -94
  67. package/dist/components/ui/Dialog.vue +0 -110
  68. package/dist/components/ui/DialogDescription.vue +0 -22
  69. package/dist/components/ui/DialogFooter.vue +0 -22
  70. package/dist/components/ui/DialogHeader.vue +0 -22
  71. package/dist/components/ui/DialogTitle.vue +0 -22
  72. package/dist/components/ui/DropdownMenu.vue +0 -32
  73. package/dist/components/ui/DropdownMenuContent.vue +0 -69
  74. package/dist/components/ui/DropdownMenuItem.vue +0 -71
  75. package/dist/components/ui/DropdownMenuLabel.vue +0 -20
  76. package/dist/components/ui/DropdownMenuSeparator.vue +0 -16
  77. package/dist/components/ui/DropdownMenuTrigger.vue +0 -38
  78. package/dist/components/ui/FileInput.vue +0 -153
  79. package/dist/components/ui/FormError.vue +0 -20
  80. package/dist/components/ui/FormField.vue +0 -12
  81. package/dist/components/ui/FormInput.vue +0 -46
  82. package/dist/components/ui/FormLabel.vue +0 -19
  83. package/dist/components/ui/FormTextarea.vue +0 -39
  84. package/dist/components/ui/Input.vue +0 -72
  85. package/dist/components/ui/Popover.vue +0 -35
  86. package/dist/components/ui/PopoverContent.vue +0 -66
  87. package/dist/components/ui/PopoverTrigger.vue +0 -36
  88. package/dist/components/ui/RadioGroup.vue +0 -47
  89. package/dist/components/ui/RadioItem.vue +0 -62
  90. package/dist/components/ui/Select.vue +0 -62
  91. package/dist/components/ui/SelectContent.vue +0 -55
  92. package/dist/components/ui/SelectItem.vue +0 -55
  93. package/dist/components/ui/SelectTrigger.vue +0 -70
  94. package/dist/components/ui/SelectValue.vue +0 -27
  95. package/dist/components/ui/Sheet.vue +0 -148
  96. package/dist/components/ui/SheetDescription.vue +0 -22
  97. package/dist/components/ui/SheetFooter.vue +0 -22
  98. package/dist/components/ui/SheetHeader.vue +0 -22
  99. package/dist/components/ui/SheetTitle.vue +0 -22
  100. package/dist/components/ui/Switch.vue +0 -63
  101. package/dist/components/ui/Textarea.vue +0 -73
  102. package/dist/components/ui/Toast.vue +0 -116
  103. package/dist/components/ui/Toaster.vue +0 -76
  104. package/dist/components/ui/Tooltip.vue +0 -42
  105. package/dist/components/ui/TooltipContent.vue +0 -71
  106. package/dist/components/ui/TooltipTrigger.vue +0 -39
  107. package/dist/components/ui/UIProvider.vue +0 -23
  108. package/dist/components/ui/index.d.ts +0 -52
  109. package/dist/components/ui/index.mjs +0 -52
@@ -1,50 +1,17 @@
1
- import { computed } from "vue";
2
- import { cn } from "../utils/cn.mjs";
1
+ import { computed, readonly } from "vue";
3
2
  export const useSwitch = (props, checked) => {
4
- const is_disabled = computed(() => props.value.disabled ?? false);
5
- const track_size_classes = computed(() => {
6
- const size_map = {
7
- sm: "h-5 w-9",
8
- md: "h-6 w-11",
9
- lg: "h-7 w-14"
10
- };
11
- return size_map[props.value.size ?? "md"];
12
- });
13
- const track_classes = computed(
14
- () => cn(
15
- "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent",
16
- "transition-colors",
17
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
18
- "disabled:cursor-not-allowed disabled:opacity-50",
19
- "data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
20
- track_size_classes.value
21
- )
22
- );
23
- const thumb_size_classes = computed(() => {
24
- const size_map = {
25
- sm: "h-4 w-4 data-[state=checked]:translate-x-4",
26
- md: "h-5 w-5 data-[state=checked]:translate-x-5",
27
- lg: "h-6 w-6 data-[state=checked]:translate-x-7"
28
- };
29
- return size_map[props.value.size ?? "md"];
30
- });
31
- const thumb_classes = computed(
32
- () => cn(
33
- "pointer-events-none block rounded-full bg-background shadow-lg ring-0",
34
- "transition-transform",
35
- "data-[state=unchecked]:translate-x-0",
36
- thumb_size_classes.value
37
- )
38
- );
3
+ const state = computed(() => ({
4
+ size: props.value.size ?? "md",
5
+ disabled: props.value.disabled ?? false,
6
+ checked: checked.value
7
+ }));
39
8
  const aria_attributes = computed(() => ({
40
9
  role: "switch",
41
- "aria-checked": checked.value,
42
- "aria-disabled": is_disabled.value || void 0
10
+ "aria-checked": state.value.checked,
11
+ "aria-disabled": state.value.disabled || void 0
43
12
  }));
44
13
  return {
45
- track_classes,
46
- thumb_classes,
47
- is_disabled,
48
- aria_attributes
14
+ state: readonly(state),
15
+ aria_attributes: readonly(aria_attributes)
49
16
  };
50
17
  };
@@ -2,6 +2,7 @@ import { type Ref } from "vue";
2
2
  import type { TextareaProps, TextareaReturn } from "../types/textarea";
3
3
  /**
4
4
  * Textareaコンポーネントのロジックを提供するComposable
5
- * error, disabled, readonly, resizeに基づいてクラスとaria属性を生成
5
+ * 状態とARIA属性のみを返す(スタイル情報なし)
6
+ * スタイルは StyleAdapter または外部のスタイルパッケージが担当
6
7
  */
7
8
  export declare const useTextarea: (props: Ref<TextareaProps>) => TextareaReturn;
@@ -1,35 +1,17 @@
1
- import { computed, ref } from "vue";
2
- import { cn } from "../utils/cn.mjs";
1
+ import { computed, ref, readonly } from "vue";
3
2
  export const useTextarea = (props) => {
4
3
  const is_focused = ref(false);
5
- const has_error = computed(() => !!props.value.error);
6
- const is_disabled = computed(() => props.value.disabled ?? false);
7
- const is_readonly = computed(() => props.value.readonly ?? false);
8
- const resize_classes = computed(() => {
9
- const resize_map = {
10
- none: "resize-none",
11
- vertical: "resize-y",
12
- horizontal: "resize-x",
13
- both: "resize"
14
- };
15
- return resize_map[props.value.resize ?? "vertical"];
16
- });
17
- const base_classes = computed(
18
- () => cn(
19
- "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2",
20
- "text-sm ring-offset-background",
21
- "placeholder:text-muted-foreground",
22
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
23
- "disabled:cursor-not-allowed disabled:opacity-50",
24
- resize_classes.value,
25
- has_error.value && "border-destructive focus-visible:ring-destructive",
26
- is_readonly.value && "bg-muted"
27
- )
28
- );
4
+ const state = computed(() => ({
5
+ size: props.value.size ?? "md",
6
+ disabled: props.value.disabled ?? false,
7
+ readonly: props.value.readonly ?? false,
8
+ has_error: !!props.value.error,
9
+ resize: props.value.resize ?? "vertical"
10
+ }));
29
11
  const aria_attributes = computed(() => ({
30
- "aria-invalid": has_error.value || void 0,
12
+ "aria-invalid": state.value.has_error || void 0,
31
13
  "aria-describedby": props.value.error_id,
32
- "aria-readonly": is_readonly.value || void 0
14
+ "aria-readonly": state.value.readonly || void 0
33
15
  }));
34
16
  const handleFocus = () => {
35
17
  is_focused.value = true;
@@ -38,12 +20,9 @@ export const useTextarea = (props) => {
38
20
  is_focused.value = false;
39
21
  };
40
22
  return {
41
- base_classes,
23
+ state: readonly(state),
42
24
  is_focused,
43
- has_error,
44
- is_disabled,
45
- is_readonly,
46
- aria_attributes,
25
+ aria_attributes: readonly(aria_attributes),
47
26
  handleFocus,
48
27
  handleBlur
49
28
  };
@@ -46,7 +46,7 @@ export function useToast() {
46
46
  });
47
47
  };
48
48
  return {
49
- toasts: toasts.value,
49
+ toasts: [...toasts.value],
50
50
  add,
51
51
  dismiss,
52
52
  dismissAll,
package/dist/env.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ interface ImportMetaEnv {
4
+ readonly DEV: boolean
5
+ readonly PROD: boolean
6
+ readonly MODE: string
7
+ }
8
+
9
+ interface ImportMeta {
10
+ readonly env: ImportMetaEnv
11
+ }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from "./composables";
2
- export * from "./components/ui";
2
+ export * from "./components";
3
3
  export * from "./types";
4
4
  export * from "./utils";
5
5
  export * from "./constants";
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from "./composables/index.mjs";
2
- export * from "./components/ui/index.mjs";
2
+ export * from "./components/index.mjs";
3
3
  export * from "./types/index.mjs";
4
4
  export * from "./utils/index.mjs";
5
5
  export * from "./constants/index.mjs";
@@ -1,20 +1,34 @@
1
- import type { ComputedRef } from "vue";
1
+ import type { ComputedRef, DeepReadonly } from "vue";
2
2
  export type ButtonVariant = "primary" | "secondary" | "ghost" | "outline" | "destructive";
3
3
  export type ButtonSize = "sm" | "md" | "lg";
4
+ export type ButtonType = "button" | "submit" | "reset";
4
5
  export interface ButtonProps {
5
6
  variant?: ButtonVariant;
6
7
  size?: ButtonSize;
7
8
  disabled?: boolean;
8
9
  loading?: boolean;
10
+ type?: ButtonType;
11
+ }
12
+ /**
13
+ * ボタンの状態(StyleAdapterに渡す用)
14
+ */
15
+ export interface ButtonState {
16
+ variant: ButtonVariant;
17
+ size: ButtonSize;
18
+ disabled: boolean;
19
+ loading: boolean;
20
+ type: ButtonType;
9
21
  }
10
22
  export interface ButtonAriaAttributes {
11
23
  "aria-disabled"?: boolean;
12
24
  "aria-busy"?: boolean;
13
25
  role: "button";
26
+ type: ButtonType;
14
27
  }
28
+ /**
29
+ * useButton の戻り値(ヘッドレス - スタイル情報なし)
30
+ */
15
31
  export interface ButtonReturn {
16
- base_classes: ComputedRef<string>;
17
- is_disabled: ComputedRef<boolean>;
18
- is_loading: ComputedRef<boolean>;
19
- aria_attributes: ComputedRef<ButtonAriaAttributes>;
32
+ state: DeepReadonly<ComputedRef<ButtonState>>;
33
+ aria_attributes: DeepReadonly<ComputedRef<ButtonAriaAttributes>>;
20
34
  }
@@ -1,10 +1,19 @@
1
- import type { ComputedRef } from "vue";
1
+ import type { ComputedRef, DeepReadonly } from "vue";
2
2
  export type CardPadding = "sm" | "md" | "lg" | "none";
3
3
  export interface CardProps {
4
4
  padding?: CardPadding;
5
5
  }
6
+ /**
7
+ * カードの状態(StyleAdapterに渡す用)
8
+ */
9
+ export interface CardState {
10
+ padding: CardPadding;
11
+ }
12
+ /**
13
+ * useCard の戻り値(ヘッドレス - スタイル情報なし)
14
+ */
6
15
  export interface CardReturn {
7
- base_classes: ComputedRef<string>;
16
+ state: DeepReadonly<ComputedRef<CardState>>;
8
17
  }
9
18
  export interface CardHeaderProps {
10
19
  class?: string;
@@ -1,19 +1,28 @@
1
- import type { ComputedRef } from "vue";
1
+ import type { ComputedRef, DeepReadonly } from "vue";
2
2
  export type CheckboxSize = "sm" | "md" | "lg";
3
3
  export interface CheckboxProps {
4
4
  size?: CheckboxSize;
5
5
  disabled?: boolean;
6
6
  indeterminate?: boolean;
7
7
  }
8
+ /**
9
+ * チェックボックスの状態(StyleAdapterに渡す用)
10
+ */
11
+ export interface CheckboxState {
12
+ size: CheckboxSize;
13
+ disabled: boolean;
14
+ indeterminate: boolean;
15
+ checked: boolean;
16
+ }
8
17
  export interface CheckboxAriaAttributes {
9
18
  role: "checkbox";
10
19
  "aria-checked": boolean | "mixed";
11
20
  "aria-disabled"?: boolean;
12
21
  }
22
+ /**
23
+ * useCheckbox の戻り値(ヘッドレス - スタイル情報なし)
24
+ */
13
25
  export interface CheckboxReturn {
14
- base_classes: ComputedRef<string>;
15
- indicator_classes: ComputedRef<string>;
16
- is_disabled: ComputedRef<boolean>;
17
- is_indeterminate: ComputedRef<boolean>;
18
- aria_attributes: ComputedRef<CheckboxAriaAttributes>;
26
+ state: DeepReadonly<ComputedRef<CheckboxState>>;
27
+ aria_attributes: DeepReadonly<ComputedRef<CheckboxAriaAttributes>>;
19
28
  }
@@ -1,38 +1,47 @@
1
1
  import type { Ref } from "vue";
2
+ /**
3
+ * 汎用的なコンポーネント状態(基底型)
4
+ */
5
+ export interface ComponentState {
6
+ [key: string]: unknown;
7
+ }
2
8
  /**
3
9
  * Button の状態
4
10
  */
5
- export interface ButtonState {
11
+ export interface ButtonState extends ComponentState {
6
12
  variant: "primary" | "secondary" | "ghost" | "outline" | "destructive";
7
13
  size: "sm" | "md" | "lg";
8
14
  disabled: boolean;
9
15
  loading: boolean;
16
+ type: "button" | "submit" | "reset";
10
17
  }
11
18
  /**
12
19
  * Input の状態
13
20
  */
14
- export interface InputState {
21
+ export interface InputState extends ComponentState {
22
+ type: "text" | "email" | "password" | "number" | "tel" | "url" | "search";
15
23
  size: "sm" | "md" | "lg";
16
24
  disabled: boolean;
17
25
  readonly: boolean;
18
- error: string | undefined;
26
+ has_error: boolean;
19
27
  }
20
28
  /**
21
29
  * Dialog の状態
22
30
  */
23
- export interface DialogState {
31
+ export interface DialogState extends ComponentState {
24
32
  is_open: boolean;
25
33
  }
26
34
  /**
27
35
  * Card の状態
28
36
  */
29
- export interface CardState {
37
+ export interface CardState extends ComponentState {
30
38
  padding: "sm" | "md" | "lg" | "none";
31
39
  }
32
40
  /**
33
41
  * Checkbox の状態
34
42
  */
35
- export interface CheckboxState {
43
+ export interface CheckboxState extends ComponentState {
44
+ size: "sm" | "md" | "lg";
36
45
  checked: boolean;
37
46
  disabled: boolean;
38
47
  indeterminate: boolean;
@@ -40,78 +49,97 @@ export interface CheckboxState {
40
49
  /**
41
50
  * Radio の状態
42
51
  */
43
- export interface RadioState {
52
+ export interface RadioItemState extends ComponentState {
53
+ size: "sm" | "md" | "lg";
44
54
  checked: boolean;
45
55
  disabled: boolean;
46
56
  }
47
57
  /**
48
58
  * Switch の状態
49
59
  */
50
- export interface SwitchState {
60
+ export interface SwitchState extends ComponentState {
61
+ size: "sm" | "md" | "lg";
51
62
  checked: boolean;
52
63
  disabled: boolean;
53
64
  }
54
65
  /**
55
66
  * Textarea の状態
56
67
  */
57
- export interface TextareaState {
68
+ export interface TextareaState extends ComponentState {
58
69
  size: "sm" | "md" | "lg";
59
70
  disabled: boolean;
60
71
  readonly: boolean;
61
- error: string | undefined;
72
+ has_error: boolean;
73
+ resize: "none" | "vertical" | "horizontal" | "both";
62
74
  }
63
75
  /**
64
- * Select の状態
76
+ * Select Trigger の状態
65
77
  */
66
- export interface SelectState {
78
+ export interface SelectTriggerState extends ComponentState {
67
79
  size: "sm" | "md" | "lg";
68
80
  disabled: boolean;
69
81
  is_open: boolean;
70
82
  }
83
+ /**
84
+ * Select Content の状態
85
+ */
86
+ export interface SelectContentState extends ComponentState {
87
+ is_open: boolean;
88
+ }
89
+ /**
90
+ * Select Item の状態
91
+ */
92
+ export interface SelectItemState extends ComponentState {
93
+ selected: boolean;
94
+ disabled: boolean;
95
+ }
96
+ /**
97
+ * FileInput の状態
98
+ */
99
+ export interface FileInputState extends ComponentState {
100
+ disabled: boolean;
101
+ is_dragging: boolean;
102
+ has_error: boolean;
103
+ has_files: boolean;
104
+ }
71
105
  /**
72
106
  * Toast の状態
73
107
  */
74
- export interface ToastState {
108
+ export interface ToastState extends ComponentState {
75
109
  variant: "default" | "success" | "error" | "warning" | "info";
76
110
  }
77
111
  /**
78
112
  * Tooltip の状態
79
113
  */
80
- export interface TooltipState {
114
+ export interface TooltipState extends ComponentState {
81
115
  is_open: boolean;
82
116
  side: "top" | "right" | "bottom" | "left";
83
117
  }
84
118
  /**
85
119
  * Popover の状態
86
120
  */
87
- export interface PopoverState {
121
+ export interface PopoverState extends ComponentState {
88
122
  is_open: boolean;
89
123
  }
90
124
  /**
91
125
  * Dropdown の状態
92
126
  */
93
- export interface DropdownState {
127
+ export interface DropdownState extends ComponentState {
94
128
  is_open: boolean;
95
129
  }
96
130
  /**
97
131
  * Sheet の状態
98
132
  */
99
- export interface SheetState {
133
+ export interface SheetState extends ComponentState {
100
134
  is_open: boolean;
101
135
  side: "top" | "right" | "bottom" | "left";
102
136
  }
103
137
  /**
104
138
  * Alert の状態
105
139
  */
106
- export interface AlertState {
140
+ export interface AlertState extends ComponentState {
107
141
  variant: "default" | "info" | "success" | "warning" | "destructive";
108
142
  }
109
- /**
110
- * 汎用的なコンポーネント状態
111
- */
112
- export interface ComponentState {
113
- [key: string]: unknown;
114
- }
115
143
  /**
116
144
  * Headless Composable の戻り値型
117
145
  * ロジック情報のみを返し、スタイル情報は返さない
@@ -7,6 +7,7 @@ import type { StyleAdapter } from "../adapters/types";
7
7
  * UIコンポーネントのグローバル設定
8
8
  */
9
9
  export interface UIConfig {
10
+ [key: string]: unknown;
10
11
  button: ButtonConfig;
11
12
  input: InputConfig;
12
13
  card: CardConfig;
@@ -1,4 +1,4 @@
1
- import type { ComputedRef, Ref } from "vue";
1
+ import type { ComputedRef, Ref, DeepReadonly } from "vue";
2
2
  export interface FileInputProps {
3
3
  accept?: string;
4
4
  multiple?: boolean;
@@ -13,18 +13,28 @@ export interface FileInfo {
13
13
  type: string;
14
14
  preview_url: string | null;
15
15
  }
16
+ /**
17
+ * ファイル入力の状態(StyleAdapterに渡す用)
18
+ */
19
+ export interface FileInputState {
20
+ disabled: boolean;
21
+ is_dragging: boolean;
22
+ has_error: boolean;
23
+ has_files: boolean;
24
+ }
16
25
  export interface FileInputAriaAttributes {
17
26
  "aria-disabled"?: boolean;
18
27
  "aria-invalid"?: boolean;
19
28
  }
29
+ /**
30
+ * useFileInput の戻り値(ヘッドレス - スタイル情報なし)
31
+ */
20
32
  export interface FileInputReturn {
21
- base_classes: ComputedRef<string>;
22
- dropzone_classes: ComputedRef<string>;
23
- is_disabled: ComputedRef<boolean>;
33
+ state: DeepReadonly<ComputedRef<FileInputState>>;
24
34
  is_dragging: Ref<boolean>;
25
35
  files: Ref<FileInfo[]>;
26
36
  error: Ref<string | null>;
27
- aria_attributes: ComputedRef<FileInputAriaAttributes>;
37
+ aria_attributes: DeepReadonly<ComputedRef<FileInputAriaAttributes>>;
28
38
  handleFiles: (file_list: FileList | null) => void;
29
39
  handleDragEnter: (event: DragEvent) => void;
30
40
  handleDragLeave: (event: DragEvent) => void;
@@ -1,4 +1,4 @@
1
- import type { ComputedRef, DeepReadonly } from "vue";
1
+ import type { ComputedRef } from "vue";
2
2
  export interface FormState<T> {
3
3
  values: T;
4
4
  errors: Partial<Record<keyof T, string>>;
@@ -37,11 +37,11 @@ export interface FileFieldOptions {
37
37
  }
38
38
  export interface FormReturn<T> {
39
39
  values: T;
40
- errors: DeepReadonly<Partial<Record<keyof T, string>>>;
41
- touched: DeepReadonly<Partial<Record<keyof T, boolean>>>;
40
+ errors: Readonly<Partial<Record<keyof T, string>>>;
41
+ touched: Readonly<Partial<Record<keyof T, boolean>>>;
42
42
  is_valid: ComputedRef<boolean>;
43
- is_submitting: DeepReadonly<ComputedRef<boolean>>;
44
- is_dirty: DeepReadonly<ComputedRef<boolean>>;
43
+ is_submitting: ComputedRef<boolean>;
44
+ is_dirty: ComputedRef<boolean>;
45
45
  validateField: (field: keyof T) => void;
46
46
  validateAll: () => boolean;
47
47
  reset: () => void;
@@ -1,4 +1,4 @@
1
- import type { ComputedRef, Ref } from "vue";
1
+ import type { ComputedRef, Ref, DeepReadonly } from "vue";
2
2
  export type InputSize = "sm" | "md" | "lg";
3
3
  export type InputType = "text" | "email" | "password" | "number" | "tel" | "url" | "search";
4
4
  export interface InputProps {
@@ -9,19 +9,30 @@ export interface InputProps {
9
9
  readonly?: boolean;
10
10
  error?: string;
11
11
  error_id?: string;
12
+ id?: string;
13
+ }
14
+ /**
15
+ * 入力の状態(StyleAdapterに渡す用)
16
+ */
17
+ export interface InputState {
18
+ type: InputType;
19
+ size: InputSize;
20
+ disabled: boolean;
21
+ readonly: boolean;
22
+ has_error: boolean;
12
23
  }
13
24
  export interface InputAriaAttributes {
14
25
  "aria-invalid"?: boolean;
15
26
  "aria-describedby"?: string;
16
27
  "aria-readonly"?: boolean;
17
28
  }
29
+ /**
30
+ * useInput の戻り値(ヘッドレス - スタイル情報なし)
31
+ */
18
32
  export interface InputReturn {
19
- base_classes: ComputedRef<string>;
33
+ state: DeepReadonly<ComputedRef<InputState>>;
20
34
  is_focused: Ref<boolean>;
21
- has_error: ComputedRef<boolean>;
22
- is_disabled: ComputedRef<boolean>;
23
- is_readonly: ComputedRef<boolean>;
24
- aria_attributes: ComputedRef<InputAriaAttributes>;
35
+ aria_attributes: DeepReadonly<ComputedRef<InputAriaAttributes>>;
25
36
  handleFocus: () => void;
26
37
  handleBlur: () => void;
27
38
  }
@@ -1,4 +1,4 @@
1
- import type { ComputedRef, InjectionKey, Ref } from "vue";
1
+ import type { ComputedRef, InjectionKey, Ref, DeepReadonly } from "vue";
2
2
  export type RadioSize = "sm" | "md" | "lg";
3
3
  export interface RadioGroupProps {
4
4
  disabled?: boolean;
@@ -19,15 +19,23 @@ export interface RadioGroupContext {
19
19
  updateValue: (value: string) => void;
20
20
  }
21
21
  export declare const RADIO_GROUP_KEY: InjectionKey<RadioGroupContext>;
22
+ /**
23
+ * ラジオボタンの状態(StyleAdapterに渡す用)
24
+ */
25
+ export interface RadioItemState {
26
+ size: RadioSize;
27
+ disabled: boolean;
28
+ checked: boolean;
29
+ }
22
30
  export interface RadioAriaAttributes {
23
31
  role: "radio";
24
32
  "aria-checked": boolean;
25
33
  "aria-disabled"?: boolean;
26
34
  }
35
+ /**
36
+ * useRadioItem の戻り値(ヘッドレス - スタイル情報なし)
37
+ */
27
38
  export interface RadioItemReturn {
28
- base_classes: ComputedRef<string>;
29
- indicator_classes: ComputedRef<string>;
30
- is_checked: ComputedRef<boolean>;
31
- is_disabled: ComputedRef<boolean>;
32
- aria_attributes: ComputedRef<RadioAriaAttributes>;
39
+ state: DeepReadonly<ComputedRef<RadioItemState>>;
40
+ aria_attributes: DeepReadonly<ComputedRef<RadioAriaAttributes>>;
33
41
  }
@@ -1,4 +1,4 @@
1
- import type { ComputedRef, InjectionKey, Ref } from "vue";
1
+ import type { ComputedRef, InjectionKey, Ref, DeepReadonly } from "vue";
2
2
  export type SelectSize = "sm" | "md" | "lg";
3
3
  export interface SelectProps {
4
4
  size?: SelectSize;
@@ -43,15 +43,33 @@ export interface SelectContext {
43
43
  setTriggerRef: (element: HTMLElement | null) => void;
44
44
  }
45
45
  export declare const SELECT_KEY: InjectionKey<SelectContext>;
46
+ /**
47
+ * セレクトトリガーの状態(StyleAdapterに渡す用)
48
+ */
49
+ export interface SelectTriggerState {
50
+ size: SelectSize;
51
+ disabled: boolean;
52
+ is_open: boolean;
53
+ }
54
+ /**
55
+ * セレクトコンテンツの状態(StyleAdapterに渡す用)
56
+ */
57
+ export interface SelectContentState {
58
+ is_open: boolean;
59
+ }
60
+ /**
61
+ * セレクトアイテムの状態(StyleAdapterに渡す用)
62
+ */
63
+ export interface SelectItemState {
64
+ selected: boolean;
65
+ disabled: boolean;
66
+ }
46
67
  export interface SelectTriggerReturn {
47
- base_classes: ComputedRef<string>;
48
- is_disabled: ComputedRef<boolean>;
68
+ state: DeepReadonly<ComputedRef<SelectTriggerState>>;
49
69
  }
50
70
  export interface SelectContentReturn {
51
- base_classes: ComputedRef<string>;
71
+ state: DeepReadonly<ComputedRef<SelectContentState>>;
52
72
  }
53
73
  export interface SelectItemReturn {
54
- base_classes: ComputedRef<string>;
55
- is_selected: ComputedRef<boolean>;
56
- is_disabled: ComputedRef<boolean>;
74
+ state: DeepReadonly<ComputedRef<SelectItemState>>;
57
75
  }
@@ -1,17 +1,26 @@
1
- import type { ComputedRef } from "vue";
1
+ import type { ComputedRef, DeepReadonly } from "vue";
2
2
  export type SwitchSize = "sm" | "md" | "lg";
3
3
  export interface SwitchProps {
4
4
  size?: SwitchSize;
5
5
  disabled?: boolean;
6
6
  }
7
+ /**
8
+ * スイッチの状態(StyleAdapterに渡す用)
9
+ */
10
+ export interface SwitchState {
11
+ size: SwitchSize;
12
+ disabled: boolean;
13
+ checked: boolean;
14
+ }
7
15
  export interface SwitchAriaAttributes {
8
16
  role: "switch";
9
17
  "aria-checked": boolean;
10
18
  "aria-disabled"?: boolean;
11
19
  }
20
+ /**
21
+ * useSwitch の戻り値(ヘッドレス - スタイル情報なし)
22
+ */
12
23
  export interface SwitchReturn {
13
- track_classes: ComputedRef<string>;
14
- thumb_classes: ComputedRef<string>;
15
- is_disabled: ComputedRef<boolean>;
16
- aria_attributes: ComputedRef<SwitchAriaAttributes>;
24
+ state: DeepReadonly<ComputedRef<SwitchState>>;
25
+ aria_attributes: DeepReadonly<ComputedRef<SwitchAriaAttributes>>;
17
26
  }