melta-app 0.5.3 → 0.7.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 +493 -186
- package/docs/architecture.md +99 -0
- package/eslint-rules/melta.d.mts +44 -0
- 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 +28 -7
- 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 +4 -1
- 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 +10 -5
- 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 +27 -1
- package/lib/module/theme/define-theme.js.map +1 -1
- package/lib/module/theme/index.js +7 -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 +52 -0
- package/lib/module/theme/line-height.js.map +1 -0
- package/lib/module/theme/native-theme.js +8 -7
- package/lib/module/theme/native-theme.js.map +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 -13
- 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 +44 -0
- package/lib/typescript/src/theme/line-height.d.ts.map +1 -0
- 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 +10 -1
- package/lib/typescript/src/theme/types.d.ts.map +1 -1
- package/llms.txt +2 -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 +42 -9
- 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 +9 -2
- 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 +10 -6
- package/src/safe-area/index.ts +21 -7
- package/src/theme/ThemeProvider.tsx +8 -5
- package/src/theme/define-theme.ts +33 -2
- package/src/theme/index.ts +18 -16
- package/src/theme/letter-spacing.ts +17 -0
- package/src/theme/line-height.ts +53 -0
- package/src/theme/native-theme.ts +9 -8
- package/src/theme/types.ts +10 -1
|
@@ -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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","RADIO_SPEC","resolveRadioCircleStyle","resolveRadioGroupStyle","jsx","_jsx","jsxs","_jsxs","Radio","label","options","value","onChange","variant","error","disabled","testID","theme","mode","hasError","group","circles","unselected","selected","style","opacity","disabledOpacity","undefined","children","weight","color","marginBottom","groupLabelStyle","accessibilityRole","containerStyle","map","option","optionDisabled","onPress","accessibilityState","checked","accessibilityLabel","cardStyle","cardSelectedStyle","flexDirection","alignItems","description","gap","optionGap","dotStyle","flexShrink","accessibilityLiveRegion","errorTextStyle","marginTop","__contract","radio"],"sourceRoot":"../../../src","sources":["components/Radio.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,EAAEC,IAAI,QAAQ,cAAc;AAC9C,SAASC,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","RADIO_SPEC","resolveRadioCircleStyle","resolveRadioGroupStyle","jsx","_jsx","jsxs","_jsxs","Radio","label","options","value","onChange","variant","error","disabled","testID","theme","mode","hasError","group","circles","unselected","selected","style","opacity","disabledOpacity","undefined","children","weight","color","marginBottom","groupLabelStyle","accessibilityRole","containerStyle","map","option","optionDisabled","onPress","accessibilityState","checked","accessibilityLabel","minHeight","optionMinHeight","justifyContent","cardStyle","cardSelectedStyle","flexDirection","alignItems","description","gap","optionGap","dotStyle","flexShrink","accessibilityLiveRegion","errorTextStyle","marginTop","__contract","radio"],"sourceRoot":"../../../src","sources":["components/Radio.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,19 +15,27 @@
|
|
|
15
15
|
* react-native-safe-area-context 利用者は subpath "melta-app/safe-area" の
|
|
16
16
|
* enableSafeAreaContext() で context hook + View adapter に差し替えられる
|
|
17
17
|
* (rally-nav dogfood 由来、RN 0.85 Fabric/Android の初回 inset flash 対応)。
|
|
18
|
+
* 適用する edge は `edges` prop(省略時は enableSafeAreaContext の既定)。
|
|
18
19
|
*/
|
|
19
20
|
|
|
20
|
-
import { useMemo } from "react";
|
|
21
|
+
import { useEffect, useMemo } from "react";
|
|
21
22
|
import { ScrollView, View } from "react-native";
|
|
22
23
|
import { resolveSafeAreaView } from "./safe-area-registry.js";
|
|
24
|
+
import { isDev } from "../theme/define-theme.js";
|
|
23
25
|
import { useTheme } from "../theme/index.js";
|
|
24
26
|
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
25
27
|
import { resolveScreenStyle } from "./screen.styles.js";
|
|
28
|
+
|
|
29
|
+
/** dev 警告の重複抑止(inline object の scrollViewProps で毎 render 鳴らさない)。 */
|
|
26
30
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
31
|
+
const warned = new Set();
|
|
27
32
|
export function Screen({
|
|
28
33
|
variant = "scroll",
|
|
29
34
|
padding = "4",
|
|
35
|
+
edges,
|
|
30
36
|
header,
|
|
37
|
+
scrollViewProps,
|
|
38
|
+
scrollViewRef,
|
|
31
39
|
style,
|
|
32
40
|
testID,
|
|
33
41
|
children
|
|
@@ -43,12 +51,29 @@ export function Screen({
|
|
|
43
51
|
variant,
|
|
44
52
|
padding
|
|
45
53
|
}), [theme, mode, variant, padding]);
|
|
46
|
-
|
|
54
|
+
|
|
55
|
+
// fixed には内部 ScrollView が無い=渡された prop は黙って捨てられる。dev で気づけるようにする。
|
|
56
|
+
const ignoresScrollProps = variant === "fixed" && (scrollViewProps != null || scrollViewRef != null);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (!isDev || !ignoresScrollProps) return;
|
|
59
|
+
const message = 'melta: Screen variant="fixed" では scrollViewProps / scrollViewRef は適用されない' + "(内部 ScrollView が無いため)。variant=\"scroll\" にするか prop を外すこと。";
|
|
60
|
+
if (warned.has(message)) return;
|
|
61
|
+
warned.add(message);
|
|
62
|
+
console.warn(message);
|
|
63
|
+
}, [ignoresScrollProps]);
|
|
64
|
+
const SafeArea = resolveSafeAreaView(edges);
|
|
47
65
|
return /*#__PURE__*/_jsxs(SafeArea, {
|
|
48
66
|
style: [safeAreaStyle, style],
|
|
49
67
|
testID: testID,
|
|
50
68
|
children: [header, variant === "scroll" ? /*#__PURE__*/_jsx(ScrollView, {
|
|
51
|
-
|
|
69
|
+
ref: scrollViewRef
|
|
70
|
+
// iOS の既定 0 は onScroll が 1 ドラッグ 1 発しか来ない(スクロール連動ヘッダが動かない)。
|
|
71
|
+
// spread より前に置いて消費者が上書きできるようにする。
|
|
72
|
+
,
|
|
73
|
+
scrollEventThrottle: 16,
|
|
74
|
+
...scrollViewProps,
|
|
75
|
+
// contentContainerStyle は素の spread だと DS の padding ごと消えるため配列合成(後勝ち)。
|
|
76
|
+
contentContainerStyle: [contentStyle, scrollViewProps?.contentContainerStyle],
|
|
52
77
|
children: children
|
|
53
78
|
}) : /*#__PURE__*/_jsx(View, {
|
|
54
79
|
style: contentStyle,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","ScrollView","View","resolveSafeAreaView","useTheme","CONTRACTS","resolveScreenStyle","jsx","_jsx","jsxs","_jsxs","Screen","variant","padding","header","style","testID","children","theme","mode","safeAreaStyle","contentStyle","SafeArea","contentContainerStyle","__contract","screen"],"sourceRoot":"../../../src","sources":["components/Screen.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","ScrollView","View","resolveSafeAreaView","isDev","useTheme","CONTRACTS","resolveScreenStyle","jsx","_jsx","jsxs","_jsxs","warned","Set","Screen","variant","padding","edges","header","scrollViewProps","scrollViewRef","style","testID","children","theme","mode","safeAreaStyle","contentStyle","ignoresScrollProps","message","has","add","console","warn","SafeArea","ref","scrollEventThrottle","contentContainerStyle","__contract","screen"],"sourceRoot":"../../../src","sources":["components/Screen.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,OAAO,QAAkC,OAAO;AACpE,SACEC,UAAU,EACVC,IAAI,QAIC,cAAc;AACrB,SAASC,mBAAmB,QAA2B,yBAAyB;AAChF,SAASC,KAAK,QAAQ,0BAA0B;AAChD,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAwB,gCAAgC;AAC1E,SAASC,kBAAkB,QAA8C,oBAAoB;;AAE7F;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAAS,CAAC;AAmChC,OAAO,SAASC,MAAMA,CAAC;EACrBC,OAAO,GAAG,QAAQ;EAClBC,OAAO,GAAG,GAAG;EACbC,KAAK;EACLC,MAAM;EACNC,eAAe;EACfC,aAAa;EACbC,KAAK;EACLC,MAAM;EACNC;AACW,CAAC,EAAE;EACd,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGpB,QAAQ,CAAC,CAAC;EAElC,MAAM;IAAEqB,aAAa;IAAEC;EAAa,CAAC,GAAG3B,OAAO,CAC7C,MAAMO,kBAAkB,CAACiB,KAAK,EAAEC,IAAI,EAAE;IAAEV,OAAO;IAAEC;EAAQ,CAAC,CAAC,EAC3D,CAACQ,KAAK,EAAEC,IAAI,EAAEV,OAAO,EAAEC,OAAO,CAChC,CAAC;;EAED;EACA,MAAMY,kBAAkB,GACtBb,OAAO,KAAK,OAAO,KAAKI,eAAe,IAAI,IAAI,IAAIC,aAAa,IAAI,IAAI,CAAC;EAC3ErB,SAAS,CAAC,MAAM;IACd,IAAI,CAACK,KAAK,IAAI,CAACwB,kBAAkB,EAAE;IACnC,MAAMC,OAAO,GACX,0EAA0E,GAC1E,2DAA2D;IAC7D,IAAIjB,MAAM,CAACkB,GAAG,CAACD,OAAO,CAAC,EAAE;IACzBjB,MAAM,CAACmB,GAAG,CAACF,OAAO,CAAC;IACnBG,OAAO,CAACC,IAAI,CAACJ,OAAO,CAAC;EACvB,CAAC,EAAE,CAACD,kBAAkB,CAAC,CAAC;EAExB,MAAMM,QAAQ,GAAG/B,mBAAmB,CAACc,KAAK,CAAC;EAE3C,oBACEN,KAAA,CAACuB,QAAQ;IAACb,KAAK,EAAE,CAACK,aAAa,EAAEL,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAC,QAAA,GACrDL,MAAM,EACNH,OAAO,KAAK,QAAQ,gBACnBN,IAAA,CAACR,UAAU;MACTkC,GAAG,EAAEf;MACL;MACA;MAAA;MACAgB,mBAAmB,EAAE,EAAG;MAAA,GACpBjB,eAAe;MACnB;MACAkB,qBAAqB,EAAE,CAACV,YAAY,EAAER,eAAe,EAAEkB,qBAAqB,CAAE;MAAAd,QAAA,EAE7EA;IAAQ,CACC,CAAC,gBAEbd,IAAA,CAACP,IAAI;MAACmB,KAAK,EAAEM,YAAa;MAAAJ,QAAA,EAAEA;IAAQ,CAAO,CAC5C;EAAA,CACO,CAAC;AAEf;AAEAT,MAAM,CAACwB,UAAU,GAAGhC,SAAS,CAACiC,MAAM","ignoreList":[]}
|
|
@@ -164,6 +164,7 @@ export function Skeleton({
|
|
|
164
164
|
});
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
//
|
|
167
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
168
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
168
169
|
Skeleton.__contract = CONTRACTS.skeleton;
|
|
169
170
|
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useMemo","useRef","AccessibilityInfo","Animated","View","Surface","useTheme","CONTRACTS","CARD_SURFACE_SPEC","PULSE_OPACITY","SKELETON_METRICS","resolveSkeletonStates","resolveSkeletonVariants","jsx","_jsx","jsxs","_jsxs","Skeleton","variant","width","lines","accessibilityLabel","style","testID","theme","mode","styles","opacity","Value","from","current","cancelled","loop","anim","loading","animation","isReduceMotionEnabled","then","reduce","sequence","timing","toValue","opacityTo","duration","useNativeDriver","opacityFrom","start","stop","a11y","accessible","accessibilityState","busy","circle","barStyle","card","borderWidth","borderColor","children","gap","spacing","flexDirection","alignItems","circleSize","height","borderRadius","radius","full","backgroundColor","flex","textBar","text","Array","length","_unused","i","__contract","skeleton"],"sourceRoot":"../../../src","sources":["components/Skeleton.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAClD,SACEC,iBAAiB,EACjBC,QAAQ,EACRC,IAAI,QAIC,cAAc;AACrB,SAASC,OAAO,QAAQ,
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","useRef","AccessibilityInfo","Animated","View","Surface","useTheme","CONTRACTS","CARD_SURFACE_SPEC","PULSE_OPACITY","SKELETON_METRICS","resolveSkeletonStates","resolveSkeletonVariants","jsx","_jsx","jsxs","_jsxs","Skeleton","variant","width","lines","accessibilityLabel","style","testID","theme","mode","styles","opacity","Value","from","current","cancelled","loop","anim","loading","animation","isReduceMotionEnabled","then","reduce","sequence","timing","toValue","opacityTo","duration","useNativeDriver","opacityFrom","start","stop","a11y","accessible","accessibilityState","busy","circle","barStyle","card","borderWidth","borderColor","children","gap","spacing","flexDirection","alignItems","circleSize","height","borderRadius","radius","full","backgroundColor","flex","textBar","text","Array","length","_unused","i","__contract","skeleton"],"sourceRoot":"../../../src","sources":["components/Skeleton.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,6 +44,7 @@ export function Surface({
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
//
|
|
47
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
48
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
48
49
|
Surface.__contract = CONTRACTS.surface;
|
|
49
50
|
//# sourceMappingURL=Surface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["View","useTheme","CONTRACTS","resolveSurfaceStyle","jsx","_jsx","Surface","bg","radius","elevation","padding","style","testID","children","theme","mode","resolved","base","__contract","surface"],"sourceRoot":"../../../src","sources":["components/Surface.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,
|
|
1
|
+
{"version":3,"names":["View","useTheme","CONTRACTS","resolveSurfaceStyle","jsx","_jsx","Surface","bg","radius","elevation","padding","style","testID","children","theme","mode","resolved","base","__contract","surface"],"sourceRoot":"../../../src","sources":["components/Surface.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SAASC,mBAAmB,QAAgC,qBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQlF,OAAO,SAASC,OAAOA,CAAC;EAAEC,EAAE;EAAEC,MAAM;EAAEC,SAAS;EAAEC,OAAO;EAAEC,KAAK;EAAEC,MAAM;EAAEC;AAAuB,CAAC,EAAE;EACjG,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGd,QAAQ,CAAC,CAAC;EAClC,MAAMe,QAAQ,GAAGb,mBAAmB,CAACW,KAAK,EAAEC,IAAI,EAAE;IAAER,EAAE;IAAEC,MAAM;IAAEC,SAAS;IAAEC;EAAQ,CAAC,CAAC;EACrF,oBACEL,IAAA,CAACL,IAAI;IAACY,MAAM,EAAEA,MAAO;IAACD,KAAK,EAAE,CAACK,QAAQ,CAACC,IAAI,EAAED,QAAQ,CAACP,SAAS,EAAEE,KAAK,CAAE;IAAAE,QAAA,EACrEA;EAAQ,CACL,CAAC;AAEX;;AAEA;AACA;AACAP,OAAO,CAACY,UAAU,GAAGhB,SAAS,CAACiB,OAAO","ignoreList":[]}
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* editable=false + accessibilityState.disabled を併せて適用する(recipe description の規約)。
|
|
9
9
|
* - error 時は errorText を必ずテキストで表示する(FORM_NO_COLOR_ONLY_ERROR = 色だけで伝えない)。
|
|
10
10
|
* RN には aria-describedby 相当が無いため、(a) errorText を input の accessibilityLabel に合成
|
|
11
|
-
*
|
|
11
|
+
* (再フォーカス時に読み上げ。合成文は formatErrorAccessibilityLabel で差し替え可能 = i18n フック。
|
|
12
|
+
* 既定は日本語)、(b) errorText 側に accessibilityLiveRegion="polite"(Android は
|
|
12
13
|
* 出現時に通知。iOS の即時通知が要る画面は submit 時に announceForAccessibility を併用する —
|
|
13
14
|
* docs/patterns.md 参照)。
|
|
14
15
|
* - focus は内部 state(onFocus/onBlur)で recipe states.focus の inputStyle 差分
|
|
@@ -28,7 +29,7 @@ import { CONTRACTS } from "../contracts/contract-types.js";
|
|
|
28
29
|
import { resolveTextFieldStyle, resolveTextFieldFocusStyle } from "./textfield.styles.js";
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
|
-
* Android の EditText
|
|
32
|
+
* Android の EditText は高さ下限(minHeight)と組み合わさると既定の縦 padding で文字が
|
|
32
33
|
* 上寄り・下端切れになるため、縦 padding を殺して縦センターに揃える。
|
|
33
34
|
* textAlignVertical は Android 専用、paddingVertical: 0 は iOS の見た目を変えない
|
|
34
35
|
* (iOS の単一行入力は元々縦センター)。
|
|
@@ -54,6 +55,15 @@ export function resolveInputVerticalFix(os) {
|
|
|
54
55
|
/* eslint-enable melta/no-raw-spacing */
|
|
55
56
|
|
|
56
57
|
const INPUT_VERTICAL_FIX = resolveInputVerticalFix(Platform.OS);
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* error 時の accessibilityLabel 合成の既定(日本語)。
|
|
61
|
+
* props で差し替え可能(formatErrorAccessibilityLabel)。既定値を変えると
|
|
62
|
+
* 既存アプリの VoiceOver 読み上げが変わるので、既定は日本語のまま据え置く。
|
|
63
|
+
*/
|
|
64
|
+
function defaultErrorAccessibilityLabel(label, errorText) {
|
|
65
|
+
return `${label}。エラー: ${errorText}`;
|
|
66
|
+
}
|
|
57
67
|
export function TextField({
|
|
58
68
|
label,
|
|
59
69
|
value,
|
|
@@ -64,6 +74,7 @@ export function TextField({
|
|
|
64
74
|
size = "medium",
|
|
65
75
|
helperText,
|
|
66
76
|
errorText,
|
|
77
|
+
formatErrorAccessibilityLabel = defaultErrorAccessibilityLabel,
|
|
67
78
|
keyboardType,
|
|
68
79
|
autoCapitalize,
|
|
69
80
|
autoCorrect,
|
|
@@ -108,7 +119,7 @@ export function TextField({
|
|
|
108
119
|
maxLength: maxLength,
|
|
109
120
|
returnKeyType: returnKeyType,
|
|
110
121
|
onSubmitEditing: onSubmitEditing,
|
|
111
|
-
accessibilityLabel: showError ?
|
|
122
|
+
accessibilityLabel: showError ? formatErrorAccessibilityLabel(label, errorText) : label,
|
|
112
123
|
accessibilityState: {
|
|
113
124
|
disabled
|
|
114
125
|
},
|
|
@@ -132,6 +143,7 @@ export function TextField({
|
|
|
132
143
|
});
|
|
133
144
|
}
|
|
134
145
|
|
|
135
|
-
//
|
|
146
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
147
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
136
148
|
TextField.__contract = CONTRACTS.textfield;
|
|
137
149
|
//# sourceMappingURL=TextField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","useState","Platform","TextInput","View","Text","RNText","useTheme","CONTRACTS","resolveTextFieldStyle","resolveTextFieldFocusStyle","jsx","_jsx","jsxs","_jsxs","resolveInputVerticalFix","os","paddingVertical","paddingBottom","textAlignVertical","INPUT_VERTICAL_FIX","OS","
|
|
1
|
+
{"version":3,"names":["useMemo","useState","Platform","TextInput","View","Text","RNText","useTheme","CONTRACTS","resolveTextFieldStyle","resolveTextFieldFocusStyle","jsx","_jsx","jsxs","_jsxs","resolveInputVerticalFix","os","paddingVertical","paddingBottom","textAlignVertical","INPUT_VERTICAL_FIX","OS","defaultErrorAccessibilityLabel","label","errorText","TextField","value","onChangeText","placeholder","variant","disabled","size","helperText","formatErrorAccessibilityLabel","keyboardType","autoCapitalize","autoCorrect","maxLength","returnKeyType","onSubmitEditing","onBlur","onFocus","style","testID","theme","mode","colors","focused","setFocused","effectiveVariant","resolved","focusStyle","showError","children","placeholderTextColor","editable","accessibilityLabel","accessibilityState","e","input","accessibilityLiveRegion","__contract","textfield"],"sourceRoot":"../../../src","sources":["components/TextField.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
* - presentational component。表示位置・キュー・自動消滅はアプリ層の責務
|
|
8
8
|
* (entering/visible/dismissing のアニメ state は Phase 外、recipe description)。
|
|
9
9
|
* - closeButton は契約 anatomy で必須 → onClose を required prop にして型で強制。
|
|
10
|
-
* Pressable + テキスト ×(accessibilityLabel
|
|
10
|
+
* Pressable + テキスト ×(accessibilityLabel は既定 "閉じる"、closeAccessibilityLabel で差し替え可能)。
|
|
11
|
+
* - action と × は隣接する 2 つの操作要素。当たり判定が重なると押し違いが起きるので、
|
|
12
|
+
* 横 hitSlop を gap の 1/2 に絞る(toast.styles.ts の TOAST_TAP_TARGET)。
|
|
11
13
|
* - a11y(§2 web→RN mapping): web の role=status + aria-live=polite を
|
|
12
14
|
* accessibilityLiveRegion="polite"(Android のみ有効)に落とす。
|
|
13
15
|
* - elevation は theme.elevation.sm(iOS shadow* + Android elevation の複合値)を container に
|
|
@@ -22,7 +24,7 @@ import { Pressable, View } from "react-native";
|
|
|
22
24
|
import { Text } from "../primitives/Text.js";
|
|
23
25
|
import { useTheme } from "../theme/index.js";
|
|
24
26
|
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
25
|
-
import { TOAST_SPEC, resolveToastStyles } from "./toast.styles.js";
|
|
27
|
+
import { TOAST_SPEC, TOAST_TAP_TARGET, resolveToastStyles } from "./toast.styles.js";
|
|
26
28
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
27
29
|
export function Toast({
|
|
28
30
|
variant,
|
|
@@ -31,6 +33,7 @@ export function Toast({
|
|
|
31
33
|
onClose,
|
|
32
34
|
actionLabel,
|
|
33
35
|
onAction,
|
|
36
|
+
closeAccessibilityLabel = "閉じる",
|
|
34
37
|
style,
|
|
35
38
|
testID
|
|
36
39
|
}) {
|
|
@@ -65,10 +68,14 @@ export function Toast({
|
|
|
65
68
|
},
|
|
66
69
|
children: description
|
|
67
70
|
})]
|
|
68
|
-
}), actionLabel != null && onAction != null &&
|
|
71
|
+
}), actionLabel != null && onAction != null &&
|
|
72
|
+
/*#__PURE__*/
|
|
73
|
+
// 横 hitSlop は gap/2(= 6)まで。10 のままだと隣の × と当たり判定が 8pt 重なり、
|
|
74
|
+
// 手前に描かれる × が勝って「元に戻す」が押せない(toast.styles.ts の TOAST_TAP_TARGET 参照)。
|
|
75
|
+
_jsx(Pressable, {
|
|
69
76
|
onPress: onAction,
|
|
70
77
|
accessibilityRole: "button",
|
|
71
|
-
hitSlop:
|
|
78
|
+
hitSlop: TOAST_TAP_TARGET.hitSlop,
|
|
72
79
|
children: /*#__PURE__*/_jsx(Text, {
|
|
73
80
|
variant: TOAST_SPEC.messageFont,
|
|
74
81
|
weight: TOAST_SPEC.messageWeight,
|
|
@@ -81,11 +88,11 @@ export function Toast({
|
|
|
81
88
|
}), /*#__PURE__*/_jsx(Pressable, {
|
|
82
89
|
onPress: onClose,
|
|
83
90
|
accessibilityRole: "button",
|
|
84
|
-
accessibilityLabel:
|
|
85
|
-
hitSlop:
|
|
91
|
+
accessibilityLabel: closeAccessibilityLabel,
|
|
92
|
+
hitSlop: TOAST_TAP_TARGET.hitSlop,
|
|
86
93
|
style: {
|
|
87
|
-
minWidth:
|
|
88
|
-
minHeight:
|
|
94
|
+
minWidth: TOAST_TAP_TARGET.closeMinWidth,
|
|
95
|
+
minHeight: TOAST_TAP_TARGET.closeMinHeight,
|
|
89
96
|
alignItems: "center",
|
|
90
97
|
justifyContent: "center"
|
|
91
98
|
},
|
|
@@ -100,6 +107,7 @@ export function Toast({
|
|
|
100
107
|
});
|
|
101
108
|
}
|
|
102
109
|
|
|
103
|
-
//
|
|
110
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
111
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
104
112
|
Toast.__contract = CONTRACTS.toast;
|
|
105
113
|
//# sourceMappingURL=Toast.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","TOAST_SPEC","resolveToastStyles","jsx","_jsx","jsxs","_jsxs","Toast","variant","message","description","onClose","actionLabel","onAction","style","testID","theme","mode","styles","accessibilityLiveRegion","containerStyle","elevation","children","flex","gap","spacing","messageFont","weight","messageWeight","color","messageStyle","onPress","accessibilityRole","hitSlop","textDecorationLine","accessibilityLabel","minWidth","minHeight","alignItems","justifyContent","__contract","toast"],"sourceRoot":"../../../src","sources":["components/Toast.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,EAAEC,IAAI,QAAwC,cAAc;AAC9E,SAASC,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","TOAST_SPEC","TOAST_TAP_TARGET","resolveToastStyles","jsx","_jsx","jsxs","_jsxs","Toast","variant","message","description","onClose","actionLabel","onAction","closeAccessibilityLabel","style","testID","theme","mode","styles","accessibilityLiveRegion","containerStyle","elevation","children","flex","gap","spacing","messageFont","weight","messageWeight","color","messageStyle","onPress","accessibilityRole","hitSlop","textDecorationLine","accessibilityLabel","minWidth","closeMinWidth","minHeight","closeMinHeight","alignItems","justifyContent","__contract","toast"],"sourceRoot":"../../../src","sources":["components/Toast.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* flex-start / flex-end を切り替える(アニメは Phase 外)。
|
|
11
11
|
* - disabled: recipe states.disabled の opacity + accessibilityState.disabled + onPress 無効。
|
|
12
12
|
* - a11y: accessibilityRole="switch" + accessibilityState.checked。label があれば右に表示し、
|
|
13
|
-
* Pressable 全体がタップ領域 + accessibilityLabel
|
|
13
|
+
* Pressable 全体がタップ領域 + accessibilityLabel になる。実効タップ標的 44pt は
|
|
14
|
+
* 縦 hitSlop で確保する(TOGGLE_VERTICAL_HIT_SLOP、A11Y_MIN_TAP_TARGET_44)。
|
|
14
15
|
* - 色・寸法の決定は pure resolver(toggle.styles.ts)に分離。
|
|
15
16
|
* recipes/app/toggle.recipe.json との機械照合は scripts/lib/toggle-conformance.test.ts が行う。
|
|
16
17
|
*/
|
|
@@ -20,7 +21,7 @@ import { Pressable, View } from "react-native";
|
|
|
20
21
|
import { Text } from "../primitives/Text.js";
|
|
21
22
|
import { useTheme } from "../theme/index.js";
|
|
22
23
|
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
23
|
-
import { resolveToggleStyle, TOGGLE_DISABLED_OPACITY } from "./toggle.styles.js";
|
|
24
|
+
import { resolveToggleStyle, TOGGLE_DISABLED_OPACITY, TOGGLE_VERTICAL_HIT_SLOP } from "./toggle.styles.js";
|
|
24
25
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
26
|
export function Toggle({
|
|
26
27
|
value,
|
|
@@ -48,7 +49,14 @@ export function Toggle({
|
|
|
48
49
|
checked: value,
|
|
49
50
|
disabled
|
|
50
51
|
},
|
|
51
|
-
accessibilityLabel: label
|
|
52
|
+
accessibilityLabel: label
|
|
53
|
+
// track(24/28pt)も label 付きの行(36pt)も 44pt に届かないので縦 hitSlop で補う。
|
|
54
|
+
// 値の根拠は toggle.styles.ts の TOGGLE_VERTICAL_HIT_SLOP。
|
|
55
|
+
,
|
|
56
|
+
hitSlop: {
|
|
57
|
+
top: TOGGLE_VERTICAL_HIT_SLOP[size],
|
|
58
|
+
bottom: TOGGLE_VERTICAL_HIT_SLOP[size]
|
|
59
|
+
},
|
|
52
60
|
testID: testID,
|
|
53
61
|
style: [{
|
|
54
62
|
flexDirection: "row",
|
|
@@ -72,6 +80,7 @@ export function Toggle({
|
|
|
72
80
|
});
|
|
73
81
|
}
|
|
74
82
|
|
|
75
|
-
//
|
|
83
|
+
// conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
|
|
84
|
+
// 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
|
|
76
85
|
Toggle.__contract = CONTRACTS.toggle;
|
|
77
86
|
//# sourceMappingURL=Toggle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","resolveToggleStyle","TOGGLE_DISABLED_OPACITY","jsx","_jsx","jsxs","_jsxs","Toggle","value","onValueChange","label","size","disabled","style","testID","theme","mode","variant","resolved","onPress","accessibilityRole","accessibilityState","checked","accessibilityLabel","flexDirection","alignItems","alignSelf","gap","spacing","opacity","children","track","justifyContent","thumb","__contract","toggle"],"sourceRoot":"../../../src","sources":["components/Toggle.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,EAAEC,IAAI,QAAwC,cAAc;AAC9E,SAASC,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"names":["useMemo","Pressable","View","Text","useTheme","CONTRACTS","resolveToggleStyle","TOGGLE_DISABLED_OPACITY","TOGGLE_VERTICAL_HIT_SLOP","jsx","_jsx","jsxs","_jsxs","Toggle","value","onValueChange","label","size","disabled","style","testID","theme","mode","variant","resolved","onPress","accessibilityRole","accessibilityState","checked","accessibilityLabel","hitSlop","top","bottom","flexDirection","alignItems","alignSelf","gap","spacing","opacity","children","track","justifyContent","thumb","__contract","toggle"],"sourceRoot":"../../../src","sources":["components/Toggle.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,EAAEC,IAAI,QAAwC,cAAc;AAC9E,SAASC,IAAI,QAAQ,uBAAuB;AAC5C,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SACEC,kBAAkB,EAClBC,uBAAuB,EACvBC,wBAAwB,QAGnB,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAc5B,OAAO,SAASC,MAAMA,CAAC;EACrBC,KAAK;EACLC,aAAa;EACbC,KAAK;EACLC,IAAI,GAAG,QAAQ;EACfC,QAAQ,GAAG,KAAK;EAChBC,KAAK;EACLC;AACW,CAAC,EAAE;EACd,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGlB,QAAQ,CAAC,CAAC;EAElC,MAAMmB,OAAsB,GAAGT,KAAK,GAAG,IAAI,GAAG,KAAK;EACnD,MAAMU,QAAQ,GAAGxB,OAAO,CACtB,MAAMM,kBAAkB,CAACe,KAAK,EAAEC,IAAI,EAAE;IAAEC,OAAO;IAAEN;EAAK,CAAC,CAAC,EACxD,CAACI,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAEN,IAAI,CAC7B,CAAC;EAED,oBACEL,KAAA,CAACX,SAAS;IACRwB,OAAO,EAAEA,CAAA,KAAMV,aAAa,GAAG,CAACD,KAAK,CAAE;IACvCI,QAAQ,EAAEA,QAAS;IACnBQ,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAE;MAAEC,OAAO,EAAEd,KAAK;MAAEI;IAAS,CAAE;IACjDW,kBAAkB,EAAEb;IACpB;IACA;IAAA;IACAc,OAAO,EAAE;MACPC,GAAG,EAAEvB,wBAAwB,CAACS,IAAI,CAAC;MACnCe,MAAM,EAAExB,wBAAwB,CAACS,IAAI;IACvC,CAAE;IACFG,MAAM,EAAEA,MAAO;IACfD,KAAK,EAAE,CACL;MACEc,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,QAAQ;MACpBC,SAAS,EAAE,YAAY;MACvBC,GAAG,EAAEf,KAAK,CAACgB,OAAO,CAAC,GAAG,CAAC;MACvBC,OAAO,EAAEpB,QAAQ,GAAGX,uBAAuB,GAAG;IAChD,CAAC,EACDY,KAAK,CACL;IAAAoB,QAAA,gBAEF7B,IAAA,CAACR,IAAI;MACHiB,KAAK,EAAE,CACLK,QAAQ,CAACgB,KAAK,EACd;QACEP,aAAa,EAAE,KAAK;QACpBC,UAAU,EAAE,QAAQ;QACpBO,cAAc,EAAE3B,KAAK,GAAG,UAAU,GAAG;MACvC,CAAC,CACD;MAAAyB,QAAA,eAEF7B,IAAA,CAACR,IAAI;QAACiB,KAAK,EAAEK,QAAQ,CAACkB;MAAM,CAAE;IAAC,CAC3B,CAAC,EACN1B,KAAK,IAAI,IAAI,iBAAIN,IAAA,CAACP,IAAI;MAAAoC,QAAA,EAAEvB;IAAK,CAAO,CAAC;EAAA,CAC7B,CAAC;AAEhB;;AAEA;AACA;AACAH,MAAM,CAAC8B,UAAU,GAAGtC,SAAS,CAACuC,MAAM","ignoreList":[]}
|