melta-app 0.6.0 → 0.8.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.
- package/README.md +231 -21
- package/docs/architecture.md +12 -5
- package/eslint-rules/melta.d.mts +45 -0
- package/eslint-rules/melta.mjs +32 -5
- package/lib/module/a11y/tap-target.js +41 -0
- package/lib/module/a11y/tap-target.js.map +1 -0
- package/lib/module/components/ActionSheet.js +20 -6
- package/lib/module/components/ActionSheet.js.map +1 -1
- package/lib/module/components/Alert.js +11 -7
- package/lib/module/components/Alert.js.map +1 -1
- package/lib/module/components/Avatar.js +7 -2
- package/lib/module/components/Avatar.js.map +1 -1
- package/lib/module/components/BottomSheet.js +11 -3
- package/lib/module/components/BottomSheet.js.map +1 -1
- package/lib/module/components/Card.js +4 -3
- package/lib/module/components/Card.js.map +1 -1
- package/lib/module/components/Checkbox.js +8 -5
- package/lib/module/components/Checkbox.js.map +1 -1
- package/lib/module/components/EmptyState.js +2 -1
- package/lib/module/components/EmptyState.js.map +1 -1
- package/lib/module/components/Header.js.map +1 -1
- package/lib/module/components/Image.js +5 -3
- package/lib/module/components/Image.js.map +1 -1
- package/lib/module/components/Modal.js +12 -4
- package/lib/module/components/Modal.js.map +1 -1
- package/lib/module/components/Progress.js +2 -1
- package/lib/module/components/Progress.js.map +1 -1
- package/lib/module/components/Radio.js +11 -3
- package/lib/module/components/Radio.js.map +1 -1
- package/lib/module/components/Screen.js +28 -3
- package/lib/module/components/Screen.js.map +1 -1
- package/lib/module/components/Skeleton.js +2 -1
- package/lib/module/components/Skeleton.js.map +1 -1
- package/lib/module/components/Surface.js +2 -1
- package/lib/module/components/Surface.js.map +1 -1
- package/lib/module/components/TextField.js +16 -4
- package/lib/module/components/TextField.js.map +1 -1
- package/lib/module/components/Toast.js +17 -9
- package/lib/module/components/Toast.js.map +1 -1
- package/lib/module/components/Toggle.js +13 -4
- package/lib/module/components/Toggle.js.map +1 -1
- package/lib/module/components/alert.styles.js +12 -26
- package/lib/module/components/alert.styles.js.map +1 -1
- package/lib/module/components/avatar.styles.js +24 -2
- package/lib/module/components/avatar.styles.js.map +1 -1
- package/lib/module/components/card.validate.js.map +1 -1
- package/lib/module/components/checkbox.styles.js +5 -2
- package/lib/module/components/checkbox.styles.js.map +1 -1
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/components/modal.styles.js +9 -0
- package/lib/module/components/modal.styles.js.map +1 -1
- package/lib/module/components/radio.styles.js +11 -2
- package/lib/module/components/radio.styles.js.map +1 -1
- package/lib/module/components/safe-area-registry.js +64 -13
- package/lib/module/components/safe-area-registry.js.map +1 -1
- package/lib/module/components/status-colors.js +53 -0
- package/lib/module/components/status-colors.js.map +1 -0
- package/lib/module/components/textfield.styles.js +15 -8
- package/lib/module/components/textfield.styles.js.map +1 -1
- package/lib/module/components/toast.styles.js +36 -25
- package/lib/module/components/toast.styles.js.map +1 -1
- package/lib/module/components/toggle.styles.js +20 -0
- package/lib/module/components/toggle.styles.js.map +1 -1
- package/lib/module/icons/Icon.js +4 -1
- package/lib/module/icons/Icon.js.map +1 -1
- package/lib/module/icons/icon.styles.js +32 -1
- package/lib/module/icons/icon.styles.js.map +1 -1
- package/lib/module/icons/index.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/primitives/Button.js +23 -11
- package/lib/module/primitives/Button.js.map +1 -1
- package/lib/module/primitives/Metric.js +2 -1
- package/lib/module/primitives/Metric.js.map +1 -1
- package/lib/module/primitives/Row.js.map +1 -1
- package/lib/module/primitives/Stack.js.map +1 -1
- package/lib/module/primitives/Tag.js +15 -7
- package/lib/module/primitives/Tag.js.map +1 -1
- package/lib/module/primitives/Text.js +13 -5
- package/lib/module/primitives/Text.js.map +1 -1
- package/lib/module/primitives/_internal/focus-ring.js.map +1 -1
- package/lib/module/primitives/button.styles.js +58 -8
- package/lib/module/primitives/button.styles.js.map +1 -1
- package/lib/module/primitives/index.js.map +1 -1
- package/lib/module/primitives/metric.styles.js +2 -2
- package/lib/module/primitives/metric.styles.js.map +1 -1
- package/lib/module/primitives/tag.styles.js +42 -3
- package/lib/module/primitives/tag.styles.js.map +1 -1
- package/lib/module/primitives/text.styles.js +6 -7
- package/lib/module/primitives/text.styles.js.map +1 -1
- package/lib/module/safe-area/index.js +11 -5
- package/lib/module/safe-area/index.js.map +1 -1
- package/lib/module/theme/ThemeProvider.js +5 -2
- package/lib/module/theme/ThemeProvider.js.map +1 -1
- package/lib/module/theme/define-theme.js +14 -1
- package/lib/module/theme/define-theme.js.map +1 -1
- package/lib/module/theme/index.js +6 -8
- package/lib/module/theme/index.js.map +1 -1
- package/lib/module/theme/letter-spacing.js +20 -0
- package/lib/module/theme/letter-spacing.js.map +1 -0
- package/lib/module/theme/line-height.js +18 -2
- package/lib/module/theme/line-height.js.map +1 -1
- package/lib/module/theme/native-theme.js +1 -1
- package/lib/typescript/src/a11y/tap-target.d.ts +34 -0
- package/lib/typescript/src/a11y/tap-target.d.ts.map +1 -0
- package/lib/typescript/src/components/ActionSheet.d.ts +8 -1
- package/lib/typescript/src/components/ActionSheet.d.ts.map +1 -1
- package/lib/typescript/src/components/Alert.d.ts +9 -2
- package/lib/typescript/src/components/Alert.d.ts.map +1 -1
- package/lib/typescript/src/components/Avatar.d.ts +1 -1
- package/lib/typescript/src/components/Avatar.d.ts.map +1 -1
- package/lib/typescript/src/components/BottomSheet.d.ts +4 -1
- package/lib/typescript/src/components/BottomSheet.d.ts.map +1 -1
- package/lib/typescript/src/components/Card.d.ts +2 -2
- package/lib/typescript/src/components/Checkbox.d.ts +3 -3
- package/lib/typescript/src/components/Checkbox.d.ts.map +1 -1
- package/lib/typescript/src/components/Image.d.ts +4 -3
- package/lib/typescript/src/components/Image.d.ts.map +1 -1
- package/lib/typescript/src/components/Modal.d.ts +9 -3
- package/lib/typescript/src/components/Modal.d.ts.map +1 -1
- package/lib/typescript/src/components/Progress.d.ts +1 -1
- package/lib/typescript/src/components/Progress.d.ts.map +1 -1
- package/lib/typescript/src/components/Radio.d.ts +3 -2
- package/lib/typescript/src/components/Radio.d.ts.map +1 -1
- package/lib/typescript/src/components/Screen.d.ts +28 -5
- package/lib/typescript/src/components/Screen.d.ts.map +1 -1
- package/lib/typescript/src/components/Skeleton.d.ts +1 -1
- package/lib/typescript/src/components/Skeleton.d.ts.map +1 -1
- package/lib/typescript/src/components/Surface.d.ts +1 -1
- package/lib/typescript/src/components/Surface.d.ts.map +1 -1
- package/lib/typescript/src/components/TextField.d.ts +11 -4
- package/lib/typescript/src/components/TextField.d.ts.map +1 -1
- package/lib/typescript/src/components/Toast.d.ts +10 -3
- package/lib/typescript/src/components/Toast.d.ts.map +1 -1
- package/lib/typescript/src/components/Toggle.d.ts +3 -2
- package/lib/typescript/src/components/Toggle.d.ts.map +1 -1
- package/lib/typescript/src/components/action-sheet.styles.d.ts +1 -1
- package/lib/typescript/src/components/action-sheet.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/alert.styles.d.ts +14 -14
- package/lib/typescript/src/components/alert.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/avatar.styles.d.ts +36 -1
- package/lib/typescript/src/components/avatar.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/bottom-sheet.styles.d.ts +1 -1
- package/lib/typescript/src/components/bottom-sheet.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/card.styles.d.ts +1 -1
- package/lib/typescript/src/components/card.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/card.validate.d.ts +1 -1
- package/lib/typescript/src/components/card.validate.d.ts.map +1 -1
- package/lib/typescript/src/components/checkbox.styles.d.ts +6 -3
- package/lib/typescript/src/components/checkbox.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/empty-state.styles.d.ts +1 -1
- package/lib/typescript/src/components/empty-state.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/header.styles.d.ts +1 -1
- package/lib/typescript/src/components/header.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/image.styles.d.ts +1 -1
- package/lib/typescript/src/components/image.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/index.d.ts +18 -18
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/components/modal.styles.d.ts +13 -2
- package/lib/typescript/src/components/modal.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/progress.styles.d.ts +1 -1
- package/lib/typescript/src/components/progress.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/radio.styles.d.ts +10 -2
- package/lib/typescript/src/components/radio.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/safe-area-registry.d.ts +47 -11
- package/lib/typescript/src/components/safe-area-registry.d.ts.map +1 -1
- package/lib/typescript/src/components/screen.styles.d.ts +1 -1
- package/lib/typescript/src/components/screen.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/skeleton.styles.d.ts +1 -1
- package/lib/typescript/src/components/skeleton.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/status-colors.d.ts +33 -0
- package/lib/typescript/src/components/status-colors.d.ts.map +1 -0
- package/lib/typescript/src/components/surface.styles.d.ts +1 -1
- package/lib/typescript/src/components/surface.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/textfield.styles.d.ts +9 -5
- package/lib/typescript/src/components/textfield.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/toast.styles.d.ts +34 -14
- package/lib/typescript/src/components/toast.styles.d.ts.map +1 -1
- package/lib/typescript/src/components/toggle.styles.d.ts +17 -1
- package/lib/typescript/src/components/toggle.styles.d.ts.map +1 -1
- package/lib/typescript/src/icons/Icon.d.ts +12 -6
- package/lib/typescript/src/icons/Icon.d.ts.map +1 -1
- package/lib/typescript/src/icons/icon.styles.d.ts +14 -2
- package/lib/typescript/src/icons/icon.styles.d.ts.map +1 -1
- package/lib/typescript/src/icons/index.d.ts +3 -3
- package/lib/typescript/src/icons/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/primitives/Button.d.ts +8 -4
- package/lib/typescript/src/primitives/Button.d.ts.map +1 -1
- package/lib/typescript/src/primitives/Metric.d.ts +1 -1
- package/lib/typescript/src/primitives/Metric.d.ts.map +1 -1
- package/lib/typescript/src/primitives/Row.d.ts +2 -2
- package/lib/typescript/src/primitives/Row.d.ts.map +1 -1
- package/lib/typescript/src/primitives/Stack.d.ts +2 -2
- package/lib/typescript/src/primitives/Stack.d.ts.map +1 -1
- package/lib/typescript/src/primitives/Tag.d.ts +2 -2
- package/lib/typescript/src/primitives/Tag.d.ts.map +1 -1
- package/lib/typescript/src/primitives/Text.d.ts +20 -6
- package/lib/typescript/src/primitives/Text.d.ts.map +1 -1
- package/lib/typescript/src/primitives/button.styles.d.ts +44 -7
- package/lib/typescript/src/primitives/button.styles.d.ts.map +1 -1
- package/lib/typescript/src/primitives/index.d.ts +6 -6
- package/lib/typescript/src/primitives/index.d.ts.map +1 -1
- package/lib/typescript/src/primitives/metric.styles.d.ts +1 -1
- package/lib/typescript/src/primitives/metric.styles.d.ts.map +1 -1
- package/lib/typescript/src/primitives/row.styles.d.ts +1 -1
- package/lib/typescript/src/primitives/row.styles.d.ts.map +1 -1
- package/lib/typescript/src/primitives/stack.styles.d.ts +1 -1
- package/lib/typescript/src/primitives/stack.styles.d.ts.map +1 -1
- package/lib/typescript/src/primitives/tag.styles.d.ts +34 -1
- package/lib/typescript/src/primitives/tag.styles.d.ts.map +1 -1
- package/lib/typescript/src/primitives/text.styles.d.ts +2 -4
- package/lib/typescript/src/primitives/text.styles.d.ts.map +1 -1
- package/lib/typescript/src/safe-area/index.d.ts +19 -5
- package/lib/typescript/src/safe-area/index.d.ts.map +1 -1
- package/lib/typescript/src/theme/ThemeProvider.d.ts +2 -2
- package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -1
- package/lib/typescript/src/theme/define-theme.d.ts +15 -2
- package/lib/typescript/src/theme/define-theme.d.ts.map +1 -1
- package/lib/typescript/src/theme/index.d.ts +14 -14
- package/lib/typescript/src/theme/index.d.ts.map +1 -1
- package/lib/typescript/src/theme/letter-spacing.d.ts +15 -0
- package/lib/typescript/src/theme/letter-spacing.d.ts.map +1 -0
- package/lib/typescript/src/theme/line-height.d.ts +19 -2
- package/lib/typescript/src/theme/line-height.d.ts.map +1 -1
- package/lib/typescript/src/theme/native-theme.d.ts +1 -1
- package/lib/typescript/src/theme/native-theme.d.ts.map +1 -1
- package/lib/typescript/src/theme/types.d.ts +1 -1
- package/package.json +22 -7
- package/src/a11y/tap-target.ts +38 -0
- package/src/components/ActionSheet.tsx +25 -15
- package/src/components/Alert.tsx +37 -10
- package/src/components/Avatar.tsx +12 -4
- package/src/components/BottomSheet.tsx +16 -13
- package/src/components/Card.tsx +9 -8
- package/src/components/Checkbox.tsx +12 -9
- package/src/components/EmptyState.tsx +7 -6
- package/src/components/Header.tsx +4 -4
- package/src/components/Image.tsx +9 -7
- package/src/components/Modal.tsx +22 -6
- package/src/components/Progress.tsx +5 -4
- package/src/components/Radio.tsx +11 -6
- package/src/components/Screen.tsx +66 -8
- package/src/components/Skeleton.tsx +6 -5
- package/src/components/Surface.tsx +5 -4
- package/src/components/TextField.tsx +25 -7
- package/src/components/Toast.tsx +33 -11
- package/src/components/Toggle.tsx +15 -6
- package/src/components/action-sheet.styles.ts +1 -1
- package/src/components/alert.styles.ts +13 -25
- package/src/components/avatar.styles.ts +25 -3
- package/src/components/bottom-sheet.styles.ts +1 -1
- package/src/components/card.styles.ts +1 -1
- package/src/components/card.validate.ts +2 -2
- package/src/components/checkbox.styles.ts +6 -3
- package/src/components/empty-state.styles.ts +1 -1
- package/src/components/header.styles.ts +1 -1
- package/src/components/image.styles.ts +1 -1
- package/src/components/index.ts +18 -18
- package/src/components/modal.styles.ts +11 -2
- package/src/components/progress.styles.ts +1 -1
- package/src/components/radio.styles.ts +11 -2
- package/src/components/safe-area-registry.ts +81 -14
- package/src/components/screen.styles.ts +1 -1
- package/src/components/skeleton.styles.ts +1 -1
- package/src/components/status-colors.ts +59 -0
- package/src/components/surface.styles.ts +1 -1
- package/src/components/textfield.styles.ts +18 -15
- package/src/components/toast.styles.ts +32 -25
- package/src/components/toggle.styles.ts +21 -1
- package/src/icons/Icon.tsx +13 -8
- package/src/icons/icon.styles.ts +38 -3
- package/src/icons/index.ts +3 -3
- package/src/index.ts +4 -4
- package/src/primitives/Button.tsx +28 -14
- package/src/primitives/Metric.tsx +5 -4
- package/src/primitives/Row.tsx +4 -4
- package/src/primitives/Stack.tsx +4 -4
- package/src/primitives/Tag.tsx +29 -11
- package/src/primitives/Text.tsx +28 -11
- package/src/primitives/_internal/focus-ring.tsx +1 -1
- package/src/primitives/button.styles.ts +63 -10
- package/src/primitives/index.ts +6 -6
- package/src/primitives/metric.styles.ts +3 -3
- package/src/primitives/row.styles.ts +1 -1
- package/src/primitives/stack.styles.ts +1 -1
- package/src/primitives/tag.styles.ts +43 -4
- package/src/primitives/text.styles.ts +7 -12
- package/src/safe-area/index.ts +21 -7
- package/src/theme/ThemeProvider.tsx +8 -5
- package/src/theme/define-theme.ts +15 -2
- package/src/theme/index.ts +14 -17
- package/src/theme/letter-spacing.ts +17 -0
- package/src/theme/line-height.ts +18 -2
- package/src/theme/native-theme.ts +2 -2
- package/src/theme/types.ts +1 -1
|
@@ -11,17 +11,28 @@
|
|
|
11
11
|
* 色だけでなくラベル文言でも破壊的操作と分かる文言にするのは呼び出し側の責務(contract a11y)。
|
|
12
12
|
* - 先頭 action の borderTop は title が無い場合は消す(title がある時だけ区切りとして意味を持つ)。
|
|
13
13
|
* - action の onPress 後は onClose も呼ぶ(選択 = シートを閉じる)。
|
|
14
|
-
* -
|
|
14
|
+
* - 下余白(ホームインジケータ)は SafeArea で確保する(recipe description 参照)。位置は
|
|
15
|
+
* **最下部の面である cancel ブロックの内側**(BottomSheet と同じ「内側」方針に統一)。
|
|
16
|
+
* 0.5.x までは sheet 群の外側に置いていたため、iOS では inset 帯に overlay の黒が見えていた。
|
|
17
|
+
* 内側に移したことで inset 帯まで bg-surface で塗られる代わり、cancel ブロックは
|
|
18
|
+
* inset のぶん背が高くなる(ラベルは上寄りに見える)=意図した見た目の変更。
|
|
19
|
+
* edge は bottom + 左右のみ(top は overlay 側で、シートは上端に接しない)。
|
|
20
|
+
* SafeArea 実装は registry 経由(safe-area-registry.ts)— "melta-app/safe-area" を
|
|
21
|
+
* 有効化したアプリでは Android でも inset が入る(RN core の SafeAreaView は Android で no-op)。
|
|
15
22
|
* - sheet 側は onStartShouldSetResponder で touch を claim し、overlay tap でだけ閉じる。
|
|
16
23
|
* - style の決定は pure resolver(action-sheet.styles.ts)に分離 — recipe との機械照合対象。
|
|
17
24
|
*/
|
|
18
25
|
|
|
19
26
|
import { useMemo } from "react";
|
|
20
|
-
import { Modal as RNModal, Pressable,
|
|
27
|
+
import { Modal as RNModal, Pressable, Text as RNText, View } from "react-native";
|
|
21
28
|
import { useTheme } from "../theme/index.js";
|
|
22
29
|
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
23
30
|
import { resolveActionSheetStyle } from "./action-sheet.styles.js";
|
|
31
|
+
import { resolveSafeAreaView } from "./safe-area-registry.js";
|
|
32
|
+
|
|
33
|
+
/** シートは画面下端に密着するので top inset は不要。 */
|
|
24
34
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
35
|
+
const SHEET_EDGES = ["bottom", "left", "right"];
|
|
25
36
|
export function ActionSheet({
|
|
26
37
|
visible,
|
|
27
38
|
onClose,
|
|
@@ -35,6 +46,7 @@ export function ActionSheet({
|
|
|
35
46
|
mode
|
|
36
47
|
} = useTheme();
|
|
37
48
|
const styles = useMemo(() => resolveActionSheetStyle(theme, mode), [theme, mode]);
|
|
49
|
+
const SafeArea = resolveSafeAreaView(SHEET_EDGES);
|
|
38
50
|
return /*#__PURE__*/_jsx(RNModal, {
|
|
39
51
|
visible: visible,
|
|
40
52
|
transparent: true,
|
|
@@ -45,7 +57,7 @@ export function ActionSheet({
|
|
|
45
57
|
style: styles.overlayStyle,
|
|
46
58
|
onPress: onClose,
|
|
47
59
|
accessible: false,
|
|
48
|
-
children: /*#__PURE__*/_jsxs(
|
|
60
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
49
61
|
accessibilityViewIsModal: true,
|
|
50
62
|
onStartShouldSetResponder: () => true,
|
|
51
63
|
testID: testID,
|
|
@@ -74,9 +86,11 @@ export function ActionSheet({
|
|
|
74
86
|
accessibilityRole: "button",
|
|
75
87
|
onPress: onClose,
|
|
76
88
|
style: styles.cancelStyle,
|
|
77
|
-
children: /*#__PURE__*/_jsx(
|
|
78
|
-
|
|
79
|
-
|
|
89
|
+
children: /*#__PURE__*/_jsx(SafeArea, {
|
|
90
|
+
children: /*#__PURE__*/_jsx(RNText, {
|
|
91
|
+
style: styles.cancelTextStyle,
|
|
92
|
+
children: cancelLabel
|
|
93
|
+
})
|
|
80
94
|
})
|
|
81
95
|
})]
|
|
82
96
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Modal","RNModal","Pressable","
|
|
1
|
+
{"version":3,"names":["useMemo","Modal","RNModal","Pressable","Text","RNText","View","useTheme","CONTRACTS","resolveActionSheetStyle","resolveSafeAreaView","jsx","_jsx","jsxs","_jsxs","SHEET_EDGES","ActionSheet","visible","onClose","title","actions","cancelLabel","testID","theme","mode","styles","SafeArea","transparent","animationType","onRequestClose","statusBarTranslucent","children","style","overlayStyle","onPress","accessible","accessibilityViewIsModal","onStartShouldSetResponder","sheetStyle","titleStyle","map","action","index","accessibilityRole","actionStyle","borderTopWidth","destructive","destructiveTextStyle","actionTextStyle","label","cancelStyle","cancelTextStyle","__contract","actionSheet"],"sourceRoot":"../../../src","sources":["components/ActionSheet.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* - RN では border を持たず bg subtle + text 色で表現(status token に border 用の中間色が無い、
|
|
8
8
|
* recipe description)。COLOR_ONLY_FORBIDDEN は title/message のテキストと icon slot で担保する設計。
|
|
9
9
|
* - icon は ReactNode slot(EmptyState 前例。Icon を差すなら melta-app/icons を利用者が opt-in)。
|
|
10
|
+
* - × の accessibilityLabel は既定 "閉じる"(closeAccessibilityLabel で差し替え可能)。
|
|
11
|
+
* 当たり判定は正典パターン(24 + hitSlop 10 = 44pt)。
|
|
10
12
|
* - a11y(§2 web→RN mapping): web の role=alert(error/warning) / status(info/success) を、
|
|
11
13
|
* error/warning → accessibilityRole="alert"、info/success → accessibilityLiveRegion="polite"
|
|
12
14
|
* (Android のみ有効。RN に status role が無いための写像)に落とす。
|
|
@@ -20,7 +22,7 @@ import { Pressable, View } from "react-native";
|
|
|
20
22
|
import { Text } from "../primitives/Text.js";
|
|
21
23
|
import { useTheme } from "../theme/index.js";
|
|
22
24
|
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
23
|
-
import { ALERT_SPEC, resolveAlertStyles } from "./alert.styles.js";
|
|
25
|
+
import { ALERT_CLOSE_TAP_TARGET, ALERT_SPEC, resolveAlertStyles } from "./alert.styles.js";
|
|
24
26
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
27
|
export function Alert({
|
|
26
28
|
variant,
|
|
@@ -28,6 +30,7 @@ export function Alert({
|
|
|
28
30
|
message,
|
|
29
31
|
icon,
|
|
30
32
|
onClose,
|
|
33
|
+
closeAccessibilityLabel = "閉じる",
|
|
31
34
|
style,
|
|
32
35
|
testID
|
|
33
36
|
}) {
|
|
@@ -65,15 +68,15 @@ export function Alert({
|
|
|
65
68
|
})]
|
|
66
69
|
}), onClose != null &&
|
|
67
70
|
/*#__PURE__*/
|
|
68
|
-
// 最小タップターゲット確保:
|
|
71
|
+
// 最小タップターゲット確保: 正典パターン 24 + hitSlop 10 = 実効 44pt(Tag removable と同型)。
|
|
69
72
|
_jsx(Pressable, {
|
|
70
73
|
onPress: onClose,
|
|
71
74
|
accessibilityRole: "button",
|
|
72
|
-
accessibilityLabel:
|
|
73
|
-
hitSlop:
|
|
75
|
+
accessibilityLabel: closeAccessibilityLabel,
|
|
76
|
+
hitSlop: ALERT_CLOSE_TAP_TARGET.hitSlop,
|
|
74
77
|
style: {
|
|
75
|
-
minWidth:
|
|
76
|
-
minHeight:
|
|
78
|
+
minWidth: ALERT_CLOSE_TAP_TARGET.minWidth,
|
|
79
|
+
minHeight: ALERT_CLOSE_TAP_TARGET.minHeight,
|
|
77
80
|
alignItems: "center",
|
|
78
81
|
justifyContent: "center"
|
|
79
82
|
},
|
|
@@ -88,6 +91,7 @@ export function Alert({
|
|
|
88
91
|
});
|
|
89
92
|
}
|
|
90
93
|
|
|
91
|
-
//
|
|
94
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
95
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
92
96
|
Alert.__contract = CONTRACTS.alert;
|
|
93
97
|
//# sourceMappingURL=Alert.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","ALERT_SPEC","resolveAlertStyles","jsx","_jsx","jsxs","_jsxs","Alert","variant","title","message","icon","onClose","style","testID","theme","mode","styles","urgent","accessibilityRole","undefined","accessibilityLiveRegion","containerStyle","children","flex","gap","spacing","titleFont","weight","titleWeight","color","titleStyle","messageFont","messageStyle","onPress","accessibilityLabel","hitSlop","minWidth","minHeight","alignItems","justifyContent","__contract","alert"],"sourceRoot":"../../../src","sources":["components/Alert.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,SAAS,EAAEC,IAAI,QAAwC,cAAc;AAC9E,SAASC,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","ALERT_CLOSE_TAP_TARGET","ALERT_SPEC","resolveAlertStyles","jsx","_jsx","jsxs","_jsxs","Alert","variant","title","message","icon","onClose","closeAccessibilityLabel","style","testID","theme","mode","styles","urgent","accessibilityRole","undefined","accessibilityLiveRegion","containerStyle","children","flex","gap","spacing","titleFont","weight","titleWeight","color","titleStyle","messageFont","messageStyle","onPress","accessibilityLabel","hitSlop","minWidth","minHeight","alignItems","justifyContent","__contract","alert"],"sourceRoot":"../../../src","sources":["components/Alert.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,7 +15,7 @@ import { Children, useMemo } from "react";
|
|
|
15
15
|
import { Image as RNImage, Text as RNText, View } from "react-native";
|
|
16
16
|
import { useTheme } from "../theme/index.js";
|
|
17
17
|
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
18
|
-
import { resolveAvatarGroupStyle, resolveAvatarStatusColor, resolveAvatarStyle } from "./avatar.styles.js";
|
|
18
|
+
import { AVATAR_INITIALS_MAX_FONT_SCALE, resolveAvatarGroupStyle, resolveAvatarStatusColor, resolveAvatarStyle } from "./avatar.styles.js";
|
|
19
19
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
20
|
/** name → initials(先頭2文字。空白区切りなら各語の頭文字を優先: "Taro Tanaka" → "TT")。 */
|
|
21
21
|
function toInitials(name) {
|
|
@@ -58,8 +58,13 @@ export function Avatar({
|
|
|
58
58
|
width: "100%",
|
|
59
59
|
height: "100%"
|
|
60
60
|
}
|
|
61
|
-
}) :
|
|
61
|
+
}) :
|
|
62
|
+
/*#__PURE__*/
|
|
63
|
+
// 器(円)は fontScale で伸びないので、文字側に size 別の上限を掛けて溢れを防ぐ
|
|
64
|
+
// (根拠と導出は avatar.styles.ts の AVATAR_INITIALS_MAX_FONT_SCALE)。
|
|
65
|
+
_jsx(RNText, {
|
|
62
66
|
style: resolved.text,
|
|
67
|
+
maxFontSizeMultiplier: AVATAR_INITIALS_MAX_FONT_SCALE[size],
|
|
63
68
|
children: toInitials(name)
|
|
64
69
|
})
|
|
65
70
|
}), status ? /*#__PURE__*/_jsx(View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Children","useMemo","Image","RNImage","Text","RNText","View","useTheme","CONTRACTS","resolveAvatarGroupStyle","resolveAvatarStatusColor","resolveAvatarStyle","jsx","_jsx","jsxs","_jsxs","toInitials","name","words","trim","split","filter","Boolean","length","toUpperCase","slice","Avatar","source","size","status","style","testID","theme","mode","variant","resolved","dotColor","undefined","width","container","height","accessible","accessibilityRole","accessibilityLabel","children","text","dot","backgroundColor","position","right","bottom","AvatarGroup","group","map","child","index","overlap","Group","__contract","avatar"],"sourceRoot":"../../../src","sources":["components/Avatar.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,EAAEC,OAAO,QAAwB,OAAO;AACzD,SACEC,KAAK,IAAIC,OAAO,EAChBC,IAAI,IAAIC,MAAM,EACdC,IAAI,QAIC,cAAc;AACrB,SAASC,QAAQ,QAAQ,
|
|
1
|
+
{"version":3,"names":["Children","useMemo","Image","RNImage","Text","RNText","View","useTheme","CONTRACTS","AVATAR_INITIALS_MAX_FONT_SCALE","resolveAvatarGroupStyle","resolveAvatarStatusColor","resolveAvatarStyle","jsx","_jsx","jsxs","_jsxs","toInitials","name","words","trim","split","filter","Boolean","length","toUpperCase","slice","Avatar","source","size","status","style","testID","theme","mode","variant","resolved","dotColor","undefined","width","container","height","accessible","accessibilityRole","accessibilityLabel","children","text","maxFontSizeMultiplier","dot","backgroundColor","position","right","bottom","AvatarGroup","group","map","child","index","overlap","Group","__contract","avatar"],"sourceRoot":"../../../src","sources":["components/Avatar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,18 +8,25 @@
|
|
|
8
8
|
* - grabber は装飾バー。a11y ツリーから除外する(importantForAccessibility="no" +
|
|
9
9
|
* accessibilityElementsHidden。recipe description 参照)。
|
|
10
10
|
* - スワイプで閉じるジェスチャは実装しない(overlay tap + Android back で閉じる、Phase 外)。
|
|
11
|
-
* - sheet は下端密着(bg-surface)のため、
|
|
11
|
+
* - sheet は下端密着(bg-surface)のため、SafeArea を sheet の内側に置いて
|
|
12
12
|
* 下余白(ホームインジケータ)まで sheet 背景で覆いつつ content を安全域に収める。
|
|
13
|
+
* edge は bottom + 左右のみ(top は overlay 側で、シートは上端に接しない)。
|
|
14
|
+
* SafeArea 実装は registry 経由(safe-area-registry.ts)— "melta-app/safe-area" を
|
|
15
|
+
* 有効化したアプリでは Android でも inset が入る(RN core の SafeAreaView は Android で no-op)。
|
|
13
16
|
* - sheet 側は onStartShouldSetResponder で touch を claim し、overlay tap でだけ閉じる。
|
|
14
17
|
* - style の決定は pure resolver(bottom-sheet.styles.ts)に分離 — recipe との機械照合対象。
|
|
15
18
|
*/
|
|
16
19
|
|
|
17
20
|
import { useMemo } from "react";
|
|
18
|
-
import { Modal as RNModal, Pressable,
|
|
21
|
+
import { Modal as RNModal, Pressable, Text as RNText, View } from "react-native";
|
|
19
22
|
import { useTheme } from "../theme/index.js";
|
|
20
23
|
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
21
24
|
import { resolveBottomSheetStyle } from "./bottom-sheet.styles.js";
|
|
25
|
+
import { resolveSafeAreaView } from "./safe-area-registry.js";
|
|
26
|
+
|
|
27
|
+
/** シートは画面下端に密着するので top inset は不要。 */
|
|
22
28
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
29
|
+
const SHEET_EDGES = ["bottom", "left", "right"];
|
|
23
30
|
export function BottomSheet({
|
|
24
31
|
visible,
|
|
25
32
|
onClose,
|
|
@@ -32,6 +39,7 @@ export function BottomSheet({
|
|
|
32
39
|
mode
|
|
33
40
|
} = useTheme();
|
|
34
41
|
const styles = useMemo(() => resolveBottomSheetStyle(theme, mode), [theme, mode]);
|
|
42
|
+
const SafeArea = resolveSafeAreaView(SHEET_EDGES);
|
|
35
43
|
return /*#__PURE__*/_jsx(RNModal, {
|
|
36
44
|
visible: visible,
|
|
37
45
|
transparent: true,
|
|
@@ -47,7 +55,7 @@ export function BottomSheet({
|
|
|
47
55
|
accessibilityViewIsModal: true,
|
|
48
56
|
onStartShouldSetResponder: () => true,
|
|
49
57
|
testID: testID,
|
|
50
|
-
children: /*#__PURE__*/_jsxs(
|
|
58
|
+
children: /*#__PURE__*/_jsxs(SafeArea, {
|
|
51
59
|
children: [/*#__PURE__*/_jsx(View, {
|
|
52
60
|
style: styles.grabberStyle,
|
|
53
61
|
importantForAccessibility: "no",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Modal","RNModal","Pressable","
|
|
1
|
+
{"version":3,"names":["useMemo","Modal","RNModal","Pressable","Text","RNText","View","useTheme","CONTRACTS","resolveBottomSheetStyle","resolveSafeAreaView","jsx","_jsx","jsxs","_jsxs","SHEET_EDGES","BottomSheet","visible","onClose","title","testID","children","theme","mode","styles","SafeArea","transparent","animationType","onRequestClose","statusBarTranslucent","style","overlayStyle","onPress","accessible","sheetStyle","accessibilityViewIsModal","onStartShouldSetResponder","grabberStyle","importantForAccessibility","accessibilityElementsHidden","titleStyle","accessibilityRole","contentStyle","__contract","bottomSheet"],"sourceRoot":"../../../src","sources":["components/BottomSheet.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,KAAK,IAAIC,OAAO,EAAEC,SAAS,EAAEC,IAAI,IAAIC,MAAM,EAAEC,IAAI,QAAQ,cAAc;AAChF,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SAASC,uBAAuB,QAA+B,0BAA0B;AACzF,SAASC,mBAAmB,QAA2B,yBAAyB;;AAEhF;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,MAAMC,WAAoC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAaxE,OAAO,SAASC,WAAWA,CAAC;EAAEC,OAAO;EAAEC,OAAO;EAAEC,KAAK;EAAEC,MAAM;EAAEC;AAA2B,CAAC,EAAE;EAC3F,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGhB,QAAQ,CAAC,CAAC;EAElC,MAAMiB,MAAM,GAAGxB,OAAO,CACpB,MAAMS,uBAAuB,CAACa,KAAK,EAAEC,IAAI,CAAC,EAC1C,CAACD,KAAK,EAAEC,IAAI,CACd,CAAC;EAED,MAAME,QAAQ,GAAGf,mBAAmB,CAACK,WAAW,CAAC;EAEjD,oBACEH,IAAA,CAACV,OAAO;IACNe,OAAO,EAAEA,OAAQ;IACjBS,WAAW;IACXC,aAAa,EAAC,OAAO;IACrBC,cAAc,EAAEV,OAAQ;IACxBW,oBAAoB;IAAAR,QAAA,eAEpBT,IAAA,CAACT,SAAS;MAAC2B,KAAK,EAAEN,MAAM,CAACO,YAAa;MAACC,OAAO,EAAEd,OAAQ;MAACe,UAAU,EAAE,KAAM;MAAAZ,QAAA,eACzET,IAAA,CAACN,IAAI;QACHwB,KAAK,EAAEN,MAAM,CAACU,UAAW;QACzBC,wBAAwB;QACxBC,yBAAyB,EAAEA,CAAA,KAAM,IAAK;QACtChB,MAAM,EAAEA,MAAO;QAAAC,QAAA,eAEfP,KAAA,CAACW,QAAQ;UAAAJ,QAAA,gBAEPT,IAAA,CAACN,IAAI;YACHwB,KAAK,EAAEN,MAAM,CAACa,YAAa;YAC3BC,yBAAyB,EAAC,IAAI;YAC9BC,2BAA2B;UAAA,CAC5B,CAAC,EACDpB,KAAK,IAAI,IAAI,iBACZP,IAAA,CAACP,MAAM;YAACyB,KAAK,EAAEN,MAAM,CAACgB,UAAW;YAACC,iBAAiB,EAAC,QAAQ;YAAApB,QAAA,EACzDF;UAAK,CACA,CACT,eACDP,IAAA,CAACN,IAAI;YAACwB,KAAK,EAAEN,MAAM,CAACkB,YAAa;YAAArB,QAAA,EAAEA;UAAQ,CAAO,CAAC;QAAA,CAC3C;MAAC,CACP;IAAC,CACE;EAAC,CACL,CAAC;AAEd;AAEAL,WAAW,CAAC2B,UAAU,GAAGnC,SAAS,CAACoC,WAAW","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* scripts/lib/card-conformance.test.ts が行う。
|
|
10
10
|
* - variant: basic/media は非インタラクティブ、action/link は Pressable。
|
|
11
11
|
* action/link は pressed 時 elevation.sm→md(§2 hover→pressed mapping)。
|
|
12
|
-
* focus-within は RN
|
|
12
|
+
* focus-within は RN 非サポートとして明示 drop(§2)。
|
|
13
13
|
* - 型で action/link は onPress 必須を強制(§4 の DU 精神。無言で非対話に落ちる事故を防ぐ)。
|
|
14
14
|
* - **カード面自体は操作要素にしない**(contract 2.1.0 の a11y.required)。面の Pressable は
|
|
15
15
|
* `accessibilityRole` を名乗らず `accessible={false}`。理由は2つ:
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* react-native-web では実際に `<article>` 要素になる)。accessibilityRole 系とは別系統。
|
|
24
24
|
* - **focus ring は Card では描かない**。フォーカスを受けるのは `primaryAction` 側で、
|
|
25
25
|
* melta の Button は自前の ring を持つ。カードにも出すと1回のフォーカスで ring が二重に描かれる。
|
|
26
|
-
* contract の focus-within は RN
|
|
26
|
+
* contract の focus-within は RN 非サポートとして明示 drop 済み(app recipe に記録あり)で、
|
|
27
27
|
* web だけ動く実装を残すとプラットフォーム非対称になるため、実装ごと持たない。
|
|
28
28
|
* - `accessibilityLabel` は 0.5.0 で削除した。面が `accessible={false}` なので native では
|
|
29
29
|
* 原理的に読まれず、web だけ `aria-label` として効く非対称な prop だった。
|
|
@@ -127,6 +127,7 @@ export function Card({
|
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
//
|
|
130
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
131
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
131
132
|
Card.__contract = CONTRACTS.card;
|
|
132
133
|
//# sourceMappingURL=Card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","Pressable","View","useTheme","CONTRACTS","isDev","CARD_INTERACTIVE","resolveCardShape","resolveCardBodyStyle","validateCardProps","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","reported","Set","Card","variant","header","footer","media","onPress","primaryAction","style","testID","children","theme","mode","interactive","problem","has","add","console","error","isMedia","inner","content","borderRadius","radius","lg","overflow","role","accessible","pressed","__contract","card"],"sourceRoot":"../../../src","sources":["components/Card.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,QAA2C,OAAO;AACpE,SAASC,SAAS,EAAEC,IAAI,QAAwC,cAAc;AAC9E,SAASC,QAAQ,QAAQ,
|
|
1
|
+
{"version":3,"names":["useEffect","Pressable","View","useTheme","CONTRACTS","isDev","CARD_INTERACTIVE","resolveCardShape","resolveCardBodyStyle","validateCardProps","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","reported","Set","Card","variant","header","footer","media","onPress","primaryAction","style","testID","children","theme","mode","interactive","problem","has","add","console","error","isMedia","inner","content","borderRadius","radius","lg","overflow","role","accessible","pressed","__contract","card"],"sourceRoot":"../../../src","sources":["components/Card.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
* - RN にネイティブ checkbox が無いため Pressable(行全体タップ)+ 描画で実装する。
|
|
7
7
|
* checkmark は rotate した View の L 字 border、indeterminate は横棒
|
|
8
8
|
* (react-native-svg 非依存 = 本体エントリの依存ゼロ維持。recipe description 参照)。
|
|
9
|
-
* - box は 20px(web の 16px
|
|
10
|
-
*
|
|
9
|
+
* - box は 20px(web の 16px より大きいのはタッチ前提)。実効タップ標的は行の
|
|
10
|
+
* minHeight 44 で確保する(規約 10-(b): 背景を持たない行は hitSlop でなく寸法)。
|
|
11
11
|
* - label 必須(FORM_NO_LABEL_OMIT を props 型で強制)。label は Text primitive
|
|
12
12
|
* (base/text-default = recipe labelStyle と同値)。
|
|
13
13
|
* - states(contract → prop の写像): checked/unchecked → checked:boolean、
|
|
14
14
|
* indeterminate → indeterminate:boolean(variant "indeterminate"。a11y は "mixed")、
|
|
15
15
|
* error → error:boolean(borderColor 差分、checked より優先)、disabled → prop
|
|
16
|
-
* (opacity 0.5 + 非活性)。focus
|
|
16
|
+
* (opacity 0.5 + 非活性)。focus は非対応(recipe にも focus 差分なし)。
|
|
17
17
|
* - 色・寸法の決定は pure resolver(checkbox.styles.ts)に分離。
|
|
18
18
|
* recipes/app/checkbox.recipe.json との機械照合は scripts/lib/checkbox-conformance.test.ts が行う。
|
|
19
19
|
*/
|
|
@@ -58,7 +58,6 @@ export function Checkbox({
|
|
|
58
58
|
return /*#__PURE__*/_jsxs(Pressable, {
|
|
59
59
|
onPress: () => onChange(!checked),
|
|
60
60
|
disabled: disabled,
|
|
61
|
-
hitSlop: CHECKBOX_SPEC.hitSlop,
|
|
62
61
|
accessibilityRole: "checkbox",
|
|
63
62
|
accessibilityState: {
|
|
64
63
|
checked: indeterminate ? "mixed" : checked,
|
|
@@ -70,6 +69,9 @@ export function Checkbox({
|
|
|
70
69
|
flexDirection: "row",
|
|
71
70
|
alignItems: "center",
|
|
72
71
|
gap: resolved.gap,
|
|
72
|
+
// 実効タップ標的 44pt。背景を持たない行なので hitSlop でなく minHeight(規約 10-(b)、
|
|
73
|
+
// 縦積みの隣接行と当たり判定が重ならない)
|
|
74
|
+
minHeight: CHECKBOX_SPEC.rowMinHeight,
|
|
73
75
|
opacity: disabled ? CHECKBOX_SPEC.disabledOpacity : 1
|
|
74
76
|
},
|
|
75
77
|
children: [/*#__PURE__*/_jsx(View, {
|
|
@@ -110,6 +112,7 @@ export function Checkbox({
|
|
|
110
112
|
});
|
|
111
113
|
}
|
|
112
114
|
|
|
113
|
-
//
|
|
115
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
116
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
114
117
|
Checkbox.__contract = CONTRACTS.checkbox;
|
|
115
118
|
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","CHECKBOX_SPEC","resolveCheckboxStyle","jsx","_jsx","jsxs","_jsxs","CHECKMARK","width","height","borderWidth","offsetY","INDETERMINATE_BAR","Checkbox","label","checked","onChange","indeterminate","disabled","error","testID","theme","mode","resolved","onPress","
|
|
1
|
+
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","CHECKBOX_SPEC","resolveCheckboxStyle","jsx","_jsx","jsxs","_jsxs","CHECKMARK","width","height","borderWidth","offsetY","INDETERMINATE_BAR","Checkbox","label","checked","onChange","indeterminate","disabled","error","testID","theme","mode","resolved","onPress","accessibilityRole","accessibilityState","accessibilityLabel","style","flexDirection","alignItems","gap","minHeight","rowMinHeight","opacity","disabledOpacity","children","boxStyle","justifyContent","backgroundColor","markColor","borderLeftWidth","borderBottomWidth","borderColor","marginTop","transform","rotate","variant","color","__contract","checkbox"],"sourceRoot":"../../../src","sources":["components/Checkbox.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -65,6 +65,7 @@ export function EmptyState({
|
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
//
|
|
68
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
69
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
69
70
|
EmptyState.__contract = CONTRACTS.emptyState;
|
|
70
71
|
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","View","Text","Button","useTheme","CONTRACTS","EMPTY_STATE_SPEC","resolveEmptyStateStyles","jsx","_jsx","jsxs","_jsxs","EmptyState","icon","title","description","action","style","testID","theme","mode","styles","children","variant","titleFont","role","weight","titleWeight","color","titleColor","textAlign","titleStyle","descriptionFont","descriptionColor","descriptionStyle","actionStyle","label","onPress","__contract","emptyState"],"sourceRoot":"../../../src","sources":["components/EmptyState.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"names":["useMemo","View","Text","Button","useTheme","CONTRACTS","EMPTY_STATE_SPEC","resolveEmptyStateStyles","jsx","_jsx","jsxs","_jsxs","EmptyState","icon","title","description","action","style","testID","theme","mode","styles","children","variant","titleFont","role","weight","titleWeight","color","titleColor","textAlign","titleStyle","descriptionFont","descriptionColor","descriptionStyle","actionStyle","label","onPress","__contract","emptyState"],"sourceRoot":"../../../src","sources":["components/EmptyState.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,IAAI,QAAQ,uBAAuB;AAC5C,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SAASC,gBAAgB,EAAEC,uBAAuB,QAAQ,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAWpF,OAAO,SAASC,UAAUA,CAAC;EAAEC,IAAI;EAAEC,KAAK;EAAEC,WAAW;EAAEC,MAAM;EAAEC,KAAK;EAAEC;AAAwB,CAAC,EAAE;EAC/F,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGhB,QAAQ,CAAC,CAAC;EAClC,MAAMiB,MAAM,GAAGrB,OAAO,CAAC,MAAMO,uBAAuB,CAACY,KAAK,EAAEC,IAAI,CAAC,EAAE,CAACD,KAAK,EAAEC,IAAI,CAAC,CAAC;EACjF,oBACET,KAAA,CAACV,IAAI;IAACiB,MAAM,EAAEA,MAAO;IAACD,KAAK,EAAE,CAACI,MAAM,CAACJ,KAAK,EAAEA,KAAK,CAAE;IAAAK,QAAA,GAChDT,IAAI,IAAI,IAAI,iBAAIJ,IAAA,CAACR,IAAI;MAAAqB,QAAA,EAAET;IAAI,CAAO,CAAC,eACpCJ,IAAA,CAACP,IAAI;MACHqB,OAAO,EAAEjB,gBAAgB,CAACkB,SAAU;MACpCC,IAAI,EAAC,SAAS;MACdC,MAAM,EAAEpB,gBAAgB,CAACqB,WAAY;MACrCC,KAAK,EAAEtB,gBAAgB,CAACuB,UAAW;MACnCZ,KAAK,EAAE;QAAEa,SAAS,EAAET,MAAM,CAACU,UAAU,CAACD;MAAU,CAAE;MAAAR,QAAA,EAEjDR;IAAK,CACF,CAAC,EACNC,WAAW,IAAI,IAAI,iBAClBN,IAAA,CAACP,IAAI;MACHqB,OAAO,EAAEjB,gBAAgB,CAAC0B,eAAgB;MAC1CJ,KAAK,EAAEtB,gBAAgB,CAAC2B,gBAAiB;MACzChB,KAAK,EAAE;QAAEa,SAAS,EAAET,MAAM,CAACa,gBAAgB,CAACJ;MAAU,CAAE;MAAAR,QAAA,EAEvDP;IAAW,CACR,CACP,EACAC,MAAM,IAAI,IAAI,iBACbP,IAAA,CAACR,IAAI;MAACgB,KAAK,EAAEI,MAAM,CAACc,WAAY;MAAAb,QAAA,eAC9Bb,IAAA,CAACN,MAAM;QAACoB,OAAO,EAAC,WAAW;QAACa,KAAK,EAAEpB,MAAM,CAACoB,KAAM;QAACC,OAAO,EAAErB,MAAM,CAACqB;MAAQ,CAAE;IAAC,CACxE,CACP;EAAA,CACG,CAAC;AAEX;;AAEA;AACA;AACAzB,UAAU,CAAC0B,UAAU,GAAGjC,SAAS,CAACkC,UAAU","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","View","useTheme","CONTRACTS","Text","resolveHeaderStyle","jsx","_jsx","jsxs","_jsxs","Header","title","leading","trailing","style","testID","theme","mode","containerStyle","titleWrapStyle","children","variant","weight","color","role","numberOfLines","__contract","header"],"sourceRoot":"../../../src","sources":["components/Header.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,
|
|
1
|
+
{"version":3,"names":["useMemo","View","useTheme","CONTRACTS","Text","resolveHeaderStyle","jsx","_jsx","jsxs","_jsxs","Header","title","leading","trailing","style","testID","theme","mode","containerStyle","titleWrapStyle","children","variant","weight","color","role","numberOfLines","__contract","header"],"sourceRoot":"../../../src","sources":["components/Header.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SAASC,IAAI,QAAQ,uBAAuB;AAC5C,SAASC,kBAAkB,QAA0B,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAa1E,OAAO,SAASC,MAAMA,CAAC;EAAEC,KAAK;EAAEC,OAAO;EAAEC,QAAQ;EAAEC,KAAK;EAAEC;AAAoB,CAAC,EAAE;EAC/E,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGf,QAAQ,CAAC,CAAC;EAElC,MAAM;IAAEgB,cAAc;IAAEC;EAAe,CAAC,GAAGnB,OAAO,CAChD,MAAMK,kBAAkB,CAACW,KAAK,EAAEC,IAAI,CAAC,EACrC,CAACD,KAAK,EAAEC,IAAI,CACd,CAAC;EAED,oBACER,KAAA,CAACR,IAAI;IAACa,KAAK,EAAE,CAACI,cAAc,EAAEJ,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAK,QAAA,GAClDR,OAAO,eACRL,IAAA,CAACN,IAAI;MAACa,KAAK,EAAEK,cAAe;MAAAC,QAAA,eAC1Bb,IAAA,CAACH,IAAI;QAACiB,OAAO,EAAC,IAAI;QAACC,MAAM,EAAC,MAAM;QAACC,KAAK,EAAC,cAAc;QAACC,IAAI,EAAC,SAAS;QAACC,aAAa,EAAE,CAAE;QAAAL,QAAA,EACnFT;MAAK,CACF;IAAC,CACH,CAAC,EACNE,QAAQ;EAAA,CACL,CAAC;AAEX;AAEAH,MAAM,CAACgB,UAAU,GAAGvB,SAAS,CAACwB,MAAM","ignoreList":[]}
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Image — 画像表示 component(設計書 §1)。contract: image(app 先行定義)。
|
|
5
5
|
*
|
|
6
|
-
* -
|
|
7
|
-
*
|
|
6
|
+
* - 実装は RN コア Image(依存ゼロ維持)。expo-image への差し替えは blurhash / 高度 cache が
|
|
7
|
+
* 要件化してから(未着手)。差し替えコスト最小化のためここで包む(呼び出し側は melta-app の
|
|
8
|
+
* Image だけ見る)。
|
|
8
9
|
* - contentFit("cover"|"contain") → RN の resizeMode に変換。
|
|
9
10
|
* - onError 時に fallback(ReactNode)を表示。fallback 未指定なら何も出さない。
|
|
10
11
|
* - radius は token キーのみ(生数値不可、§5)。shape の解決は pure resolver
|
|
@@ -62,6 +63,7 @@ export function Image({
|
|
|
62
63
|
});
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
//
|
|
66
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
67
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
66
68
|
Image.__contract = CONTRACTS.image;
|
|
67
69
|
//# sourceMappingURL=Image.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useState","Image","RNImage","View","useTheme","CONTRACTS","resolveImageShape","jsx","_jsx","source","aspectRatio","radius","contentFit","fallback","accessibilityLabel","style","testID","theme","errored","setErrored","shape","accessible","children","resizeMode","onError","__contract","image"],"sourceRoot":"../../../src","sources":["components/Image.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAwB,OAAO;AAChD,SACEC,KAAK,IAAIC,OAAO,EAChBC,IAAI,QAKC,cAAc;AACrB,SAASC,QAAQ,QAAQ,
|
|
1
|
+
{"version":3,"names":["useState","Image","RNImage","View","useTheme","CONTRACTS","resolveImageShape","jsx","_jsx","source","aspectRatio","radius","contentFit","fallback","accessibilityLabel","style","testID","theme","errored","setErrored","shape","accessible","children","resizeMode","onError","__contract","image"],"sourceRoot":"../../../src","sources":["components/Image.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAwB,OAAO;AAChD,SACEC,KAAK,IAAIC,OAAO,EAChBC,IAAI,QAKC,cAAc;AACrB,SAASC,QAAQ,QAAQ,mBAAmB;AAE5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SAASC,iBAAiB,QAAQ,mBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAiBtD,OAAO,SAASP,KAAKA,CAAC;EACpBQ,MAAM;EACNC,WAAW;EACXC,MAAM;EACNC,UAAU,GAAG,OAAO;EACpBC,QAAQ;EACRC,kBAAkB;EAClBC,KAAK;EACLC;AACU,CAAC,EAAE;EACb,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAC5B,MAAM,CAACc,OAAO,EAAEC,UAAU,CAAC,GAAGnB,QAAQ,CAAC,KAAK,CAAC;;EAE7C;EACA;EACA,MAAMoB,KAAK,GAAGd,iBAAiB,CAACW,KAAK,EAAE;IAAEP,WAAW;IAAEC;EAAO,CAAC,CAAC;EAE/D,IAAIO,OAAO,IAAIL,QAAQ,IAAI,IAAI,EAAE;IAC/B;IACA;IACA;IACA,oBACEL,IAAA,CAACL,IAAI;MACHY,KAAK,EAAE,CAACK,KAAK,EAAEL,KAAK,CAAqC;MACzDC,MAAM,EAAEA,MAAO;MACfK,UAAU,EAAEP,kBAAkB,IAAI,IAAK;MACvCA,kBAAkB,EAAEA,kBAAmB;MAAAQ,QAAA,EAEtCT;IAAQ,CACL,CAAC;EAEX;EAEA,oBACEL,IAAA,CAACN,OAAO;IACNc,MAAM,EAAEA,MAAO;IACfP,MAAM,EAAEA,MAA8B;IACtCc,UAAU,EAAEX,UAAW;IACvBY,OAAO,EAAEA,CAAA,KAAML,UAAU,CAAC,IAAI,CAAE;IAChCE,UAAU,EAAEP,kBAAkB,IAAI,IAAK;IACvCA,kBAAkB,EAAEA,kBAAmB;IACvCC,KAAK,EAAE,CAACK,KAAK,EAAEL,KAAK;EAAE,CACvB,CAAC;AAEN;;AAEA;AACA;AACAd,KAAK,CAACwB,UAAU,GAAGpB,SAAS,CAACqB,KAAK","ignoreList":[]}
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* Escape → Android back(onRequestClose)、open/closing state → RN Modal の visible + animationType。
|
|
11
11
|
* - overlay tap で閉じる(MODAL_OVERLAY_REQUIRED)。panel 側は onStartShouldSetResponder で
|
|
12
12
|
* touch を claim し、overlay への伝播を止める(panel 内 tap では閉じない)。
|
|
13
|
-
* - title 行の右端に閉じるボタン「×」(MODAL_CLOSE_REQUIRED、accessibilityLabel
|
|
13
|
+
* - title 行の右端に閉じるボタン「×」(MODAL_CLOSE_REQUIRED、accessibilityLabel は既定 "閉じる"、
|
|
14
|
+
* closeAccessibilityLabel で差し替え可能)。当たり判定は正典パターン(24 + hitSlop 10 = 44pt)。
|
|
14
15
|
* title は melta の Text ではなく titleStyle 直(recipe が typography を持つ)。
|
|
15
16
|
* - style の決定は pure resolver(modal.styles.ts)に分離 — recipe との機械照合対象。
|
|
16
17
|
* title 行の row layout と × の見た目は recipe 外の構造 glue(token 経由で解決)。
|
|
@@ -20,7 +21,7 @@ import { useMemo } from "react";
|
|
|
20
21
|
import { Modal as RNModal, Pressable, Text as RNText, View } from "react-native";
|
|
21
22
|
import { useTheme } from "../theme/index.js";
|
|
22
23
|
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
23
|
-
import { resolveModalStyle } from "./modal.styles.js";
|
|
24
|
+
import { MODAL_CLOSE_TAP_TARGET, resolveModalStyle } from "./modal.styles.js";
|
|
24
25
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
26
|
export function Modal({
|
|
26
27
|
visible,
|
|
@@ -29,6 +30,7 @@ export function Modal({
|
|
|
29
30
|
variant = "confirmation",
|
|
30
31
|
size = "medium",
|
|
31
32
|
footer,
|
|
33
|
+
closeAccessibilityLabel = "閉じる",
|
|
32
34
|
testID,
|
|
33
35
|
children
|
|
34
36
|
}) {
|
|
@@ -70,8 +72,14 @@ export function Modal({
|
|
|
70
72
|
}), /*#__PURE__*/_jsx(Pressable, {
|
|
71
73
|
onPress: onClose,
|
|
72
74
|
accessibilityRole: "button",
|
|
73
|
-
accessibilityLabel:
|
|
74
|
-
hitSlop:
|
|
75
|
+
accessibilityLabel: closeAccessibilityLabel,
|
|
76
|
+
hitSlop: MODAL_CLOSE_TAP_TARGET.hitSlop,
|
|
77
|
+
style: {
|
|
78
|
+
minWidth: MODAL_CLOSE_TAP_TARGET.minWidth,
|
|
79
|
+
minHeight: MODAL_CLOSE_TAP_TARGET.minHeight,
|
|
80
|
+
alignItems: "center",
|
|
81
|
+
justifyContent: "center"
|
|
82
|
+
},
|
|
75
83
|
children: /*#__PURE__*/_jsx(RNText, {
|
|
76
84
|
style: {
|
|
77
85
|
fontSize: theme.typography.fontSize.xl.fontSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Modal","RNModal","Pressable","Text","RNText","View","useTheme","CONTRACTS","resolveModalStyle","jsx","_jsx","jsxs","_jsxs","visible","onClose","title","variant","size","footer","testID","children","theme","mode","colors","styles","transparent","animationType","onRequestClose","statusBarTranslucent","style","overlayStyle","onPress","accessible","panelStyle","panelElevation","accessibilityViewIsModal","onStartShouldSetResponder","flexDirection","alignItems","titleStyle","flex","accessibilityRole","accessibilityLabel","hitSlop","
|
|
1
|
+
{"version":3,"names":["useMemo","Modal","RNModal","Pressable","Text","RNText","View","useTheme","CONTRACTS","MODAL_CLOSE_TAP_TARGET","resolveModalStyle","jsx","_jsx","jsxs","_jsxs","visible","onClose","title","variant","size","footer","closeAccessibilityLabel","testID","children","theme","mode","colors","styles","transparent","animationType","onRequestClose","statusBarTranslucent","style","overlayStyle","onPress","accessible","panelStyle","panelElevation","accessibilityViewIsModal","onStartShouldSetResponder","flexDirection","alignItems","titleStyle","flex","accessibilityRole","accessibilityLabel","hitSlop","minWidth","minHeight","justifyContent","fontSize","typography","xl","color","bodyStyle","footerStyle","__contract","modal"],"sourceRoot":"../../../src","sources":["components/Modal.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -108,6 +108,7 @@ export function Progress({
|
|
|
108
108
|
});
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
//
|
|
111
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
112
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
112
113
|
Progress.__contract = CONTRACTS.progress;
|
|
113
114
|
//# sourceMappingURL=Progress.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useMemo","useRef","useState","AccessibilityInfo","Animated","View","useTheme","CONTRACTS","PROGRESS_INDETERMINATE_FILL_RATIO","clampProgressValue","resolveProgressStyles","jsx","_jsx","Progress","variant","value","label","style","testID","theme","mode","styles","indeterminate","clamped","progress","Value","current","trackWidth","setTrackWidth","reduceMotion","setReduceMotion","cancelled","isReduceMotionEnabled","then","enabled","sub","addEventListener","remove","setValue","duration","motion","slow","loop","sequence","timing","toValue","useNativeDriver","start","stop","onLayout","e","nativeEvent","layout","width","undefined","translateX","interpolate","inputRange","outputRange","Math","max","accessible","accessibilityRole","accessibilityValue","min","now","accessibilityLabel","trackStyle","children","fillStyle","transform","__contract"],"sourceRoot":"../../../src","sources":["components/Progress.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC5D,SACEC,iBAAiB,EACjBC,QAAQ,EACRC,IAAI,QAIC,cAAc;AACrB,SAASC,QAAQ,QAAQ,
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","useRef","useState","AccessibilityInfo","Animated","View","useTheme","CONTRACTS","PROGRESS_INDETERMINATE_FILL_RATIO","clampProgressValue","resolveProgressStyles","jsx","_jsx","Progress","variant","value","label","style","testID","theme","mode","styles","indeterminate","clamped","progress","Value","current","trackWidth","setTrackWidth","reduceMotion","setReduceMotion","cancelled","isReduceMotionEnabled","then","enabled","sub","addEventListener","remove","setValue","duration","motion","slow","loop","sequence","timing","toValue","useNativeDriver","start","stop","onLayout","e","nativeEvent","layout","width","undefined","translateX","interpolate","inputRange","outputRange","Math","max","accessible","accessibilityRole","accessibilityValue","min","now","accessibilityLabel","trackStyle","children","fillStyle","transform","__contract"],"sourceRoot":"../../../src","sources":["components/Progress.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
* - variant はレイアウト: vertical(標準)/ horizontal(wrap する横並び)/ card-style
|
|
10
10
|
* (各 option を枠付きカードにする。web の grid 2col は RN では縦積みに読み替え)。
|
|
11
11
|
* - RN にネイティブ radio が無いため各 option は Pressable + 描画(circle + 内側 dot)。
|
|
12
|
+
* option 行は minHeight 44pt(RADIO_SPEC.optionMinHeight)で実効タップ標的を確保する。
|
|
12
13
|
* - states(contract → prop の写像): selected/unselected → value との一致、
|
|
13
14
|
* error → error?: string(circle の borderColor 差分 + errorText 表示。selected と併用時は
|
|
14
15
|
* error を優先 = 契約 stateSpecs)、disabled → グループ全体 or option 個別(opacity 0.5 + 非活性)。
|
|
15
|
-
* focus
|
|
16
|
+
* focus は非対応(recipe にも focus 差分なし)。
|
|
16
17
|
* - a11y: グループに accessibilityRole="radiogroup"、各 option に "radio" +
|
|
17
18
|
* accessibilityState={{ checked, disabled }}。
|
|
18
19
|
* - 色・寸法の決定は pure resolver(radio.styles.ts)に分離。
|
|
@@ -81,7 +82,13 @@ export function Radio({
|
|
|
81
82
|
disabled: optionDisabled
|
|
82
83
|
},
|
|
83
84
|
accessibilityLabel: option.label,
|
|
84
|
-
style: [
|
|
85
|
+
style: [
|
|
86
|
+
// 実効タップ標的 44pt(A11Y_MIN_TAP_TARGET_44)。option 行は背景を持たないので
|
|
87
|
+
// minHeight で下げ止める(視覚不変・隣接 option と当たり判定が重ならない)。
|
|
88
|
+
{
|
|
89
|
+
minHeight: RADIO_SPEC.optionMinHeight,
|
|
90
|
+
justifyContent: "center"
|
|
91
|
+
}, variant === "card-style" ? [group.cardStyle, selected ? group.cardSelectedStyle : null] : null,
|
|
85
92
|
// グループ disabled は外側 View の opacity で表現済み。二重にしない。
|
|
86
93
|
option.disabled === true && !disabled ? {
|
|
87
94
|
opacity: RADIO_SPEC.disabledOpacity
|
|
@@ -133,6 +140,7 @@ export function Radio({
|
|
|
133
140
|
});
|
|
134
141
|
}
|
|
135
142
|
|
|
136
|
-
//
|
|
143
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
144
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
137
145
|
Radio.__contract = CONTRACTS.radio;
|
|
138
146
|
//# sourceMappingURL=Radio.js.map
|