melta-app 0.1.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/LICENSE +21 -0
- package/README.md +197 -0
- package/THIRD_PARTY_LICENSES.md +198 -0
- package/lib/module/components/ActionSheet.js +87 -0
- package/lib/module/components/ActionSheet.js.map +1 -0
- package/lib/module/components/Alert.js +93 -0
- package/lib/module/components/Alert.js.map +1 -0
- package/lib/module/components/Avatar.js +93 -0
- package/lib/module/components/Avatar.js.map +1 -0
- package/lib/module/components/BottomSheet.js +69 -0
- package/lib/module/components/BottomSheet.js.map +1 -0
- package/lib/module/components/Card.js +93 -0
- package/lib/module/components/Card.js.map +1 -0
- package/lib/module/components/Checkbox.js +115 -0
- package/lib/module/components/Checkbox.js.map +1 -0
- package/lib/module/components/EmptyState.js +70 -0
- package/lib/module/components/EmptyState.js.map +1 -0
- package/lib/module/components/Header.js +53 -0
- package/lib/module/components/Header.js.map +1 -0
- package/lib/module/components/Image.js +67 -0
- package/lib/module/components/Image.js.map +1 -0
- package/lib/module/components/Modal.js +95 -0
- package/lib/module/components/Modal.js.map +1 -0
- package/lib/module/components/Progress.js +113 -0
- package/lib/module/components/Progress.js.map +1 -0
- package/lib/module/components/Radio.js +134 -0
- package/lib/module/components/Radio.js.map +1 -0
- package/lib/module/components/Screen.js +57 -0
- package/lib/module/components/Screen.js.map +1 -0
- package/lib/module/components/Skeleton.js +169 -0
- package/lib/module/components/Skeleton.js.map +1 -0
- package/lib/module/components/Surface.js +49 -0
- package/lib/module/components/Surface.js.map +1 -0
- package/lib/module/components/TextField.js +84 -0
- package/lib/module/components/TextField.js.map +1 -0
- package/lib/module/components/Toast.js +105 -0
- package/lib/module/components/Toast.js.map +1 -0
- package/lib/module/components/Toggle.js +77 -0
- package/lib/module/components/Toggle.js.map +1 -0
- package/lib/module/components/action-sheet.styles.js +70 -0
- package/lib/module/components/action-sheet.styles.js.map +1 -0
- package/lib/module/components/alert.styles.js +80 -0
- package/lib/module/components/alert.styles.js.map +1 -0
- package/lib/module/components/avatar.styles.js +94 -0
- package/lib/module/components/avatar.styles.js.map +1 -0
- package/lib/module/components/bottom-sheet.styles.js +55 -0
- package/lib/module/components/bottom-sheet.styles.js.map +1 -0
- package/lib/module/components/card.styles.js +50 -0
- package/lib/module/components/card.styles.js.map +1 -0
- package/lib/module/components/checkbox.styles.js +55 -0
- package/lib/module/components/checkbox.styles.js.map +1 -0
- package/lib/module/components/empty-state.styles.js +60 -0
- package/lib/module/components/empty-state.styles.js.map +1 -0
- package/lib/module/components/header.styles.js +33 -0
- package/lib/module/components/header.styles.js.map +1 -0
- package/lib/module/components/image.styles.js +37 -0
- package/lib/module/components/image.styles.js.map +1 -0
- package/lib/module/components/index.js +26 -0
- package/lib/module/components/index.js.map +1 -0
- package/lib/module/components/modal.styles.js +68 -0
- package/lib/module/components/modal.styles.js.map +1 -0
- package/lib/module/components/progress.styles.js +55 -0
- package/lib/module/components/progress.styles.js.map +1 -0
- package/lib/module/components/radio.styles.js +96 -0
- package/lib/module/components/radio.styles.js.map +1 -0
- package/lib/module/components/screen.styles.js +38 -0
- package/lib/module/components/screen.styles.js.map +1 -0
- package/lib/module/components/skeleton.styles.js +114 -0
- package/lib/module/components/skeleton.styles.js.map +1 -0
- package/lib/module/components/surface.styles.js +37 -0
- package/lib/module/components/surface.styles.js.map +1 -0
- package/lib/module/components/textfield.styles.js +121 -0
- package/lib/module/components/textfield.styles.js.map +1 -0
- package/lib/module/components/toast.styles.js +81 -0
- package/lib/module/components/toast.styles.js.map +1 -0
- package/lib/module/components/toggle.styles.js +69 -0
- package/lib/module/components/toggle.styles.js.map +1 -0
- package/lib/module/contracts/contract-types.js +192 -0
- package/lib/module/contracts/contract-types.js.map +1 -0
- package/lib/module/icons/Icon.js +57 -0
- package/lib/module/icons/Icon.js.map +1 -0
- package/lib/module/icons/glyphs.js +257 -0
- package/lib/module/icons/glyphs.js.map +1 -0
- package/lib/module/icons/icon.styles.js +28 -0
- package/lib/module/icons/icon.styles.js.map +1 -0
- package/lib/module/icons/index.js +14 -0
- package/lib/module/icons/index.js.map +1 -0
- package/lib/module/index.js +20 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/primitives/Button.js +105 -0
- package/lib/module/primitives/Button.js.map +1 -0
- package/lib/module/primitives/Metric.js +68 -0
- package/lib/module/primitives/Metric.js.map +1 -0
- package/lib/module/primitives/Row.js +43 -0
- package/lib/module/primitives/Row.js.map +1 -0
- package/lib/module/primitives/Stack.js +39 -0
- package/lib/module/primitives/Stack.js.map +1 -0
- package/lib/module/primitives/Tag.js +160 -0
- package/lib/module/primitives/Tag.js.map +1 -0
- package/lib/module/primitives/Text.js +54 -0
- package/lib/module/primitives/Text.js.map +1 -0
- package/lib/module/primitives/_internal/focus-ring.js +57 -0
- package/lib/module/primitives/_internal/focus-ring.js.map +1 -0
- package/lib/module/primitives/button.styles.js +88 -0
- package/lib/module/primitives/button.styles.js.map +1 -0
- package/lib/module/primitives/index.js +11 -0
- package/lib/module/primitives/index.js.map +1 -0
- package/lib/module/primitives/metric.styles.js +54 -0
- package/lib/module/primitives/metric.styles.js.map +1 -0
- package/lib/module/primitives/row.styles.js +53 -0
- package/lib/module/primitives/row.styles.js.map +1 -0
- package/lib/module/primitives/stack.styles.js +37 -0
- package/lib/module/primitives/stack.styles.js.map +1 -0
- package/lib/module/primitives/tag.styles.js +56 -0
- package/lib/module/primitives/tag.styles.js.map +1 -0
- package/lib/module/primitives/text.styles.js +33 -0
- package/lib/module/primitives/text.styles.js.map +1 -0
- package/lib/module/theme/ThemeProvider.js +41 -0
- package/lib/module/theme/ThemeProvider.js.map +1 -0
- package/lib/module/theme/index.js +19 -0
- package/lib/module/theme/index.js.map +1 -0
- package/lib/module/theme/native-theme.js +201 -0
- package/lib/module/theme/native-theme.js.map +1 -0
- package/lib/module/theme/types.js +4 -0
- package/lib/module/theme/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/components/ActionSheet.d.ts +45 -0
- package/lib/typescript/src/components/ActionSheet.d.ts.map +1 -0
- package/lib/typescript/src/components/Alert.d.ts +43 -0
- package/lib/typescript/src/components/Alert.d.ts.map +1 -0
- package/lib/typescript/src/components/Avatar.d.ts +45 -0
- package/lib/typescript/src/components/Avatar.d.ts.map +1 -0
- package/lib/typescript/src/components/BottomSheet.d.ts +36 -0
- package/lib/typescript/src/components/BottomSheet.d.ts.map +1 -0
- package/lib/typescript/src/components/Card.d.ts +46 -0
- package/lib/typescript/src/components/Card.d.ts.map +1 -0
- package/lib/typescript/src/components/Checkbox.d.ts +40 -0
- package/lib/typescript/src/components/Checkbox.d.ts.map +1 -0
- package/lib/typescript/src/components/EmptyState.d.ts +36 -0
- package/lib/typescript/src/components/EmptyState.d.ts.map +1 -0
- package/lib/typescript/src/components/Header.d.ts +34 -0
- package/lib/typescript/src/components/Header.d.ts.map +1 -0
- package/lib/typescript/src/components/Image.d.ts +41 -0
- package/lib/typescript/src/components/Image.d.ts.map +1 -0
- package/lib/typescript/src/components/Modal.d.ts +46 -0
- package/lib/typescript/src/components/Modal.d.ts.map +1 -0
- package/lib/typescript/src/components/Progress.d.ts +39 -0
- package/lib/typescript/src/components/Progress.d.ts.map +1 -0
- package/lib/typescript/src/components/Radio.d.ts +52 -0
- package/lib/typescript/src/components/Radio.d.ts.map +1 -0
- package/lib/typescript/src/components/Screen.d.ts +42 -0
- package/lib/typescript/src/components/Screen.d.ts.map +1 -0
- package/lib/typescript/src/components/Skeleton.d.ts +37 -0
- package/lib/typescript/src/components/Skeleton.d.ts.map +1 -0
- package/lib/typescript/src/components/Surface.d.ts +31 -0
- package/lib/typescript/src/components/Surface.d.ts.map +1 -0
- package/lib/typescript/src/components/TextField.d.ts +45 -0
- package/lib/typescript/src/components/TextField.d.ts.map +1 -0
- package/lib/typescript/src/components/Toast.d.ts +45 -0
- package/lib/typescript/src/components/Toast.d.ts.map +1 -0
- package/lib/typescript/src/components/Toggle.d.ts +39 -0
- package/lib/typescript/src/components/Toggle.d.ts.map +1 -0
- package/lib/typescript/src/components/action-sheet.styles.d.ts +65 -0
- package/lib/typescript/src/components/action-sheet.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/alert.styles.d.ts +61 -0
- package/lib/typescript/src/components/alert.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/avatar.styles.d.ts +60 -0
- package/lib/typescript/src/components/avatar.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/bottom-sheet.styles.d.ts +50 -0
- package/lib/typescript/src/components/bottom-sheet.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/card.styles.d.ts +27 -0
- package/lib/typescript/src/components/card.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/checkbox.styles.d.ts +55 -0
- package/lib/typescript/src/components/checkbox.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/empty-state.styles.d.ts +58 -0
- package/lib/typescript/src/components/empty-state.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/header.styles.d.ts +30 -0
- package/lib/typescript/src/components/header.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/image.styles.d.ts +28 -0
- package/lib/typescript/src/components/image.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +23 -0
- package/lib/typescript/src/components/index.d.ts.map +1 -0
- package/lib/typescript/src/components/modal.styles.d.ts +66 -0
- package/lib/typescript/src/components/modal.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/progress.styles.d.ts +44 -0
- package/lib/typescript/src/components/progress.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/radio.styles.d.ts +91 -0
- package/lib/typescript/src/components/radio.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/screen.styles.d.ts +34 -0
- package/lib/typescript/src/components/screen.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/skeleton.styles.d.ts +105 -0
- package/lib/typescript/src/components/skeleton.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/surface.styles.d.ts +31 -0
- package/lib/typescript/src/components/surface.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/textfield.styles.d.ts +75 -0
- package/lib/typescript/src/components/textfield.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/toast.styles.d.ts +62 -0
- package/lib/typescript/src/components/toast.styles.d.ts.map +1 -0
- package/lib/typescript/src/components/toggle.styles.d.ts +53 -0
- package/lib/typescript/src/components/toggle.styles.d.ts.map +1 -0
- package/lib/typescript/src/contracts/contract-types.d.ts +193 -0
- package/lib/typescript/src/contracts/contract-types.d.ts.map +1 -0
- package/lib/typescript/src/icons/Icon.d.ts +40 -0
- package/lib/typescript/src/icons/Icon.d.ts.map +1 -0
- package/lib/typescript/src/icons/glyphs.d.ts +259 -0
- package/lib/typescript/src/icons/glyphs.d.ts.map +1 -0
- package/lib/typescript/src/icons/icon.styles.d.ts +20 -0
- package/lib/typescript/src/icons/icon.styles.d.ts.map +1 -0
- package/lib/typescript/src/icons/index.d.ts +12 -0
- package/lib/typescript/src/icons/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +12 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/primitives/Button.d.ts +48 -0
- package/lib/typescript/src/primitives/Button.d.ts.map +1 -0
- package/lib/typescript/src/primitives/Metric.d.ts +38 -0
- package/lib/typescript/src/primitives/Metric.d.ts.map +1 -0
- package/lib/typescript/src/primitives/Row.d.ts +37 -0
- package/lib/typescript/src/primitives/Row.d.ts.map +1 -0
- package/lib/typescript/src/primitives/Stack.d.ts +33 -0
- package/lib/typescript/src/primitives/Stack.d.ts.map +1 -0
- package/lib/typescript/src/primitives/Tag.d.ts +43 -0
- package/lib/typescript/src/primitives/Tag.d.ts.map +1 -0
- package/lib/typescript/src/primitives/Text.d.ts +45 -0
- package/lib/typescript/src/primitives/Text.d.ts.map +1 -0
- package/lib/typescript/src/primitives/_internal/focus-ring.d.ts +31 -0
- package/lib/typescript/src/primitives/_internal/focus-ring.d.ts.map +1 -0
- package/lib/typescript/src/primitives/button.styles.d.ts +29 -0
- package/lib/typescript/src/primitives/button.styles.d.ts.map +1 -0
- package/lib/typescript/src/primitives/index.d.ts +8 -0
- package/lib/typescript/src/primitives/index.d.ts.map +1 -0
- package/lib/typescript/src/primitives/metric.styles.d.ts +43 -0
- package/lib/typescript/src/primitives/metric.styles.d.ts.map +1 -0
- package/lib/typescript/src/primitives/row.styles.d.ts +50 -0
- package/lib/typescript/src/primitives/row.styles.d.ts.map +1 -0
- package/lib/typescript/src/primitives/stack.styles.d.ts +34 -0
- package/lib/typescript/src/primitives/stack.styles.d.ts.map +1 -0
- package/lib/typescript/src/primitives/tag.styles.d.ts +32 -0
- package/lib/typescript/src/primitives/tag.styles.d.ts.map +1 -0
- package/lib/typescript/src/primitives/text.styles.d.ts +26 -0
- package/lib/typescript/src/primitives/text.styles.d.ts.map +1 -0
- package/lib/typescript/src/theme/ThemeProvider.d.ts +32 -0
- package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -0
- package/lib/typescript/src/theme/index.d.ts +15 -0
- package/lib/typescript/src/theme/index.d.ts.map +1 -0
- package/lib/typescript/src/theme/native-theme.d.ts +3 -0
- package/lib/typescript/src/theme/native-theme.d.ts.map +1 -0
- package/lib/typescript/src/theme/types.d.ts +121 -0
- package/lib/typescript/src/theme/types.d.ts.map +1 -0
- package/package.json +120 -0
- package/src/components/ActionSheet.tsx +112 -0
- package/src/components/Alert.tsx +84 -0
- package/src/components/Avatar.tsx +110 -0
- package/src/components/BottomSheet.tsx +81 -0
- package/src/components/Card.tsx +102 -0
- package/src/components/Checkbox.tsx +107 -0
- package/src/components/EmptyState.tsx +64 -0
- package/src/components/Header.tsx +51 -0
- package/src/components/Image.tsx +89 -0
- package/src/components/Modal.tsx +113 -0
- package/src/components/Progress.tsx +124 -0
- package/src/components/Radio.tsx +151 -0
- package/src/components/Screen.tsx +62 -0
- package/src/components/Skeleton.tsx +154 -0
- package/src/components/Surface.tsx +37 -0
- package/src/components/TextField.tsx +102 -0
- package/src/components/Toast.tsx +103 -0
- package/src/components/Toggle.tsx +94 -0
- package/src/components/action-sheet.styles.ts +102 -0
- package/src/components/alert.styles.ts +115 -0
- package/src/components/avatar.styles.ts +110 -0
- package/src/components/bottom-sheet.styles.ts +78 -0
- package/src/components/card.styles.ts +56 -0
- package/src/components/checkbox.styles.ts +83 -0
- package/src/components/empty-state.styles.ts +98 -0
- package/src/components/header.styles.ts +44 -0
- package/src/components/image.styles.ts +36 -0
- package/src/components/index.ts +23 -0
- package/src/components/modal.styles.ts +106 -0
- package/src/components/progress.styles.ts +74 -0
- package/src/components/radio.styles.ts +132 -0
- package/src/components/screen.styles.ts +44 -0
- package/src/components/skeleton.styles.ts +155 -0
- package/src/components/surface.styles.ts +50 -0
- package/src/components/textfield.styles.ts +135 -0
- package/src/components/toast.styles.ts +115 -0
- package/src/components/toggle.styles.ts +73 -0
- package/src/contracts/contract-types.ts +199 -0
- package/src/icons/Icon.tsx +65 -0
- package/src/icons/glyphs.ts +54 -0
- package/src/icons/icon.styles.ts +37 -0
- package/src/icons/index.ts +12 -0
- package/src/index.ts +24 -0
- package/src/primitives/Button.tsx +114 -0
- package/src/primitives/Metric.tsx +67 -0
- package/src/primitives/Row.tsx +54 -0
- package/src/primitives/Stack.tsx +42 -0
- package/src/primitives/Tag.tsx +126 -0
- package/src/primitives/Text.tsx +71 -0
- package/src/primitives/_internal/focus-ring.tsx +59 -0
- package/src/primitives/button.styles.ts +69 -0
- package/src/primitives/index.ts +8 -0
- package/src/primitives/metric.styles.ts +75 -0
- package/src/primitives/row.styles.ts +66 -0
- package/src/primitives/stack.styles.ts +47 -0
- package/src/primitives/tag.styles.ts +65 -0
- package/src/primitives/text.styles.ts +42 -0
- package/src/theme/ThemeProvider.tsx +60 -0
- package/src/theme/index.ts +18 -0
- package/src/theme/native-theme.ts +215 -0
- package/src/theme/types.ts +137 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Stack — 縦積み layout primitive。RN コア View の薄いラッパ。
|
|
5
|
+
* contract: stack(app 先行定義、melta-contracts)。dogfood 不足-1(生 flexbox 手書き)の解消。
|
|
6
|
+
*
|
|
7
|
+
* - gap は spacing token キー限定(生数値不可、§5 lint の意味を保つ)。
|
|
8
|
+
* - align は交差軸の配置(default stretch = RN デフォルト)。
|
|
9
|
+
* - 決定ロジックは pure resolver(stack.styles.ts)に分離 — recipe との機械照合対象。
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { useMemo } from "react";
|
|
13
|
+
import { View } from "react-native";
|
|
14
|
+
import { useTheme } from "../theme/index.js";
|
|
15
|
+
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
16
|
+
import { resolveStackStyle } from "./stack.styles.js";
|
|
17
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
+
export function Stack({
|
|
19
|
+
gap,
|
|
20
|
+
align = "stretch",
|
|
21
|
+
style,
|
|
22
|
+
testID,
|
|
23
|
+
children
|
|
24
|
+
}) {
|
|
25
|
+
const {
|
|
26
|
+
theme
|
|
27
|
+
} = useTheme();
|
|
28
|
+
const layout = useMemo(() => resolveStackStyle(theme, {
|
|
29
|
+
gap,
|
|
30
|
+
align
|
|
31
|
+
}), [theme, gap, align]);
|
|
32
|
+
return /*#__PURE__*/_jsx(View, {
|
|
33
|
+
style: [layout, style],
|
|
34
|
+
testID: testID,
|
|
35
|
+
children: children
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
Stack.__contract = CONTRACTS.stack;
|
|
39
|
+
//# sourceMappingURL=Stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","View","useTheme","CONTRACTS","resolveStackStyle","jsx","_jsx","Stack","gap","align","style","testID","children","theme","layout","__contract","stack"],"sourceRoot":"../../../src","sources":["primitives/Stack.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,mBAAU;AAEnC,SAASC,SAAS,QAAQ,gCAA6B;AACvD,SAASC,iBAAiB,QAA0C,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAYrF,OAAO,SAASC,KAAKA,CAAC;EAAEC,GAAG;EAAEC,KAAK,GAAG,SAAS;EAAEC,KAAK;EAAEC,MAAM;EAAEC;AAAqB,CAAC,EAAE;EACrF,MAAM;IAAEC;EAAM,CAAC,GAAGX,QAAQ,CAAC,CAAC;EAE5B,MAAMY,MAAM,GAAGd,OAAO,CACpB,MAAMI,iBAAiB,CAACS,KAAK,EAAE;IAAEL,GAAG;IAAEC;EAAM,CAAC,CAAC,EAC9C,CAACI,KAAK,EAAEL,GAAG,EAAEC,KAAK,CACpB,CAAC;EAED,oBACEH,IAAA,CAACL,IAAI;IAACS,KAAK,EAAE,CAACI,MAAM,EAAEJ,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAC1CA;EAAQ,CACL,CAAC;AAEX;AAEAL,KAAK,CAACQ,UAAU,GAAGZ,SAAS,CAACa,KAAK","ignoreList":[]}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Tag — タグ / フィルターチップ primitive(設計書 §1, §4 C-3)。contract: tag。discriminated union。
|
|
5
|
+
*
|
|
6
|
+
* - variant で必須 prop が変わるため DU(§4: basic は表示のみ、removable は onRemove 必須、
|
|
7
|
+
* filter-chip は selected/onToggle 必須)。
|
|
8
|
+
* - contract states active/inactive → prop selected:boolean(§2)。selected→accessibilityState.selected。
|
|
9
|
+
* - 配色: basic/removable は bg-page-alt、filter-chip は bg-surface+border、selected 時は
|
|
10
|
+
* active-bg=primary.50 / active-border=primary.200 / active-text=primary.700(tag.contract tokenRefs)。
|
|
11
|
+
* 色・寸法の決定は pure resolver(tag.styles.ts)に分離、recipe との機械照合は
|
|
12
|
+
* scripts/lib/tag-conformance.test.ts が行う。
|
|
13
|
+
* - label は Text primitive。filter-chip active の文字色だけ primary.700(SemanticColors 外なので style 上書き)。
|
|
14
|
+
* - focus outline は Button(Step8) で Pressable focus handling を共通化してから Tag にも適用する
|
|
15
|
+
* (§1 は Phase1 scope だが acceptance 外。今は accessibilityState のみ。Button 実装時に回収)。
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { Pressable, View } from "react-native";
|
|
19
|
+
import { Text } from "./Text.js";
|
|
20
|
+
import { useTheme } from "../theme/index.js";
|
|
21
|
+
import { useFocusRing, FocusRing } from "./_internal/focus-ring.js";
|
|
22
|
+
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
23
|
+
import { resolveTagBase, resolveTagVariant } from "./tag.styles.js";
|
|
24
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
|
+
/** 共通形状(px-3 py-1 rounded-full。寸法は resolver、layout はここで足す)。 */
|
|
26
|
+
function useTagBase() {
|
|
27
|
+
const {
|
|
28
|
+
theme
|
|
29
|
+
} = useTheme();
|
|
30
|
+
return {
|
|
31
|
+
flexDirection: "row",
|
|
32
|
+
alignItems: "center",
|
|
33
|
+
...resolveTagBase(theme)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function FilterChipTag(props) {
|
|
37
|
+
const {
|
|
38
|
+
theme,
|
|
39
|
+
mode
|
|
40
|
+
} = useTheme();
|
|
41
|
+
const base = useTagBase();
|
|
42
|
+
const {
|
|
43
|
+
focused,
|
|
44
|
+
focusHandlers
|
|
45
|
+
} = useFocusRing();
|
|
46
|
+
const {
|
|
47
|
+
label,
|
|
48
|
+
selected,
|
|
49
|
+
onToggle,
|
|
50
|
+
style,
|
|
51
|
+
testID
|
|
52
|
+
} = props;
|
|
53
|
+
const v = resolveTagVariant(theme, mode, "filter-chip", selected);
|
|
54
|
+
return /*#__PURE__*/_jsxs(Pressable, {
|
|
55
|
+
...focusHandlers,
|
|
56
|
+
onPress: onToggle,
|
|
57
|
+
accessibilityRole: "button",
|
|
58
|
+
accessibilityState: {
|
|
59
|
+
selected
|
|
60
|
+
},
|
|
61
|
+
testID: testID,
|
|
62
|
+
style: [base, {
|
|
63
|
+
backgroundColor: v.bg,
|
|
64
|
+
borderWidth: v.borderWidth,
|
|
65
|
+
borderColor: v.border
|
|
66
|
+
}, style],
|
|
67
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
68
|
+
variant: v.font,
|
|
69
|
+
color: "text-default",
|
|
70
|
+
style: selected ? {
|
|
71
|
+
color: v.textColor
|
|
72
|
+
} : undefined,
|
|
73
|
+
children: label
|
|
74
|
+
}), /*#__PURE__*/_jsx(FocusRing, {
|
|
75
|
+
visible: focused,
|
|
76
|
+
radius: theme.radius.full
|
|
77
|
+
})]
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function RemovableTag(props) {
|
|
81
|
+
const {
|
|
82
|
+
theme,
|
|
83
|
+
mode
|
|
84
|
+
} = useTheme();
|
|
85
|
+
const base = useTagBase();
|
|
86
|
+
const {
|
|
87
|
+
focused,
|
|
88
|
+
focusHandlers
|
|
89
|
+
} = useFocusRing();
|
|
90
|
+
const {
|
|
91
|
+
label,
|
|
92
|
+
onRemove,
|
|
93
|
+
removeAccessibilityLabel,
|
|
94
|
+
style,
|
|
95
|
+
testID
|
|
96
|
+
} = props;
|
|
97
|
+
const v = resolveTagVariant(theme, mode, "removable");
|
|
98
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
99
|
+
testID: testID,
|
|
100
|
+
style: [base, {
|
|
101
|
+
backgroundColor: v.bg
|
|
102
|
+
}, style],
|
|
103
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
104
|
+
variant: v.font,
|
|
105
|
+
color: "text-default",
|
|
106
|
+
children: label
|
|
107
|
+
}), /*#__PURE__*/_jsxs(Pressable, {
|
|
108
|
+
...focusHandlers,
|
|
109
|
+
onPress: onRemove,
|
|
110
|
+
accessibilityRole: "button",
|
|
111
|
+
accessibilityLabel: removeAccessibilityLabel,
|
|
112
|
+
hitSlop: 10,
|
|
113
|
+
style: {
|
|
114
|
+
minWidth: 24,
|
|
115
|
+
minHeight: 24,
|
|
116
|
+
alignItems: "center",
|
|
117
|
+
justifyContent: "center"
|
|
118
|
+
},
|
|
119
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
120
|
+
variant: "xs",
|
|
121
|
+
color: "text-muted",
|
|
122
|
+
children: "\xD7"
|
|
123
|
+
}), /*#__PURE__*/_jsx(FocusRing, {
|
|
124
|
+
visible: focused,
|
|
125
|
+
radius: theme.radius.full
|
|
126
|
+
})]
|
|
127
|
+
})]
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
export function Tag(props) {
|
|
131
|
+
const {
|
|
132
|
+
theme,
|
|
133
|
+
mode
|
|
134
|
+
} = useTheme();
|
|
135
|
+
const base = useTagBase();
|
|
136
|
+
if (props.variant === "filter-chip") return /*#__PURE__*/_jsx(FilterChipTag, {
|
|
137
|
+
...props
|
|
138
|
+
});
|
|
139
|
+
if (props.variant === "removable") return /*#__PURE__*/_jsx(RemovableTag, {
|
|
140
|
+
...props
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// basic(表示のみ)
|
|
144
|
+
const v = resolveTagVariant(theme, mode, "basic");
|
|
145
|
+
return /*#__PURE__*/_jsx(View, {
|
|
146
|
+
testID: props.testID,
|
|
147
|
+
style: [base, {
|
|
148
|
+
backgroundColor: v.bg
|
|
149
|
+
}, props.style],
|
|
150
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
151
|
+
variant: v.font,
|
|
152
|
+
color: "text-default",
|
|
153
|
+
children: props.label
|
|
154
|
+
})
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Phase 2 conformance test 用の contract メタ(§2 A-3)。
|
|
159
|
+
Tag.__contract = CONTRACTS.tag;
|
|
160
|
+
//# sourceMappingURL=Tag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Pressable","View","Text","useTheme","useFocusRing","FocusRing","CONTRACTS","resolveTagBase","resolveTagVariant","jsx","_jsx","jsxs","_jsxs","useTagBase","theme","flexDirection","alignItems","FilterChipTag","props","mode","base","focused","focusHandlers","label","selected","onToggle","style","testID","v","onPress","accessibilityRole","accessibilityState","backgroundColor","bg","borderWidth","borderColor","border","children","variant","font","color","textColor","undefined","visible","radius","full","RemovableTag","onRemove","removeAccessibilityLabel","accessibilityLabel","hitSlop","minWidth","minHeight","justifyContent","Tag","__contract","tag"],"sourceRoot":"../../../src","sources":["primitives/Tag.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,IAAI,QAAwC,cAAc;AAC9E,SAASC,IAAI,QAAQ,WAAQ;AAC7B,SAASC,QAAQ,QAAQ,mBAAU;AACnC,SAASC,YAAY,EAAEC,SAAS,QAAQ,2BAAwB;AAChE,SAASC,SAAS,QAAQ,gCAA6B;AACvD,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,iBAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAajE;AACA,SAASC,UAAUA,CAAA,EAAc;EAC/B,MAAM;IAAEC;EAAM,CAAC,GAAGX,QAAQ,CAAC,CAAC;EAC5B,OAAO;IACLY,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpB,GAAGT,cAAc,CAACO,KAAK;EACzB,CAAC;AACH;AAEA,SAASG,aAAaA,CAACC,KAA4D,EAAE;EACnF,MAAM;IAAEJ,KAAK;IAAEK;EAAK,CAAC,GAAGhB,QAAQ,CAAC,CAAC;EAClC,MAAMiB,IAAI,GAAGP,UAAU,CAAC,CAAC;EACzB,MAAM;IAAEQ,OAAO;IAAEC;EAAc,CAAC,GAAGlB,YAAY,CAAC,CAAC;EACjD,MAAM;IAAEmB,KAAK;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGT,KAAK;EAC1D,MAAMU,CAAC,GAAGpB,iBAAiB,CAACM,KAAK,EAAEK,IAAI,EAAE,aAAa,EAAEK,QAAQ,CAAC;EACjE,oBACEZ,KAAA,CAACZ,SAAS;IAAA,GACJsB,aAAa;IACjBO,OAAO,EAAEJ,QAAS;IAClBK,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAE;MAAEP;IAAS,CAAE;IACjCG,MAAM,EAAEA,MAAO;IACfD,KAAK,EAAE,CACLN,IAAI,EACJ;MACEY,eAAe,EAAEJ,CAAC,CAACK,EAAE;MACrBC,WAAW,EAAEN,CAAC,CAACM,WAAW;MAC1BC,WAAW,EAAEP,CAAC,CAACQ;IACjB,CAAC,EACDV,KAAK,CACL;IAAAW,QAAA,gBAGF3B,IAAA,CAACR,IAAI;MAACoC,OAAO,EAAEV,CAAC,CAACW,IAAK;MAACC,KAAK,EAAC,cAAc;MAACd,KAAK,EAAEF,QAAQ,GAAG;QAAEgB,KAAK,EAAEZ,CAAC,CAACa;MAAU,CAAC,GAAGC,SAAU;MAAAL,QAAA,EAC9Fd;IAAK,CACF,CAAC,eACPb,IAAA,CAACL,SAAS;MAACsC,OAAO,EAAEtB,OAAQ;MAACuB,MAAM,EAAE9B,KAAK,CAAC8B,MAAM,CAACC;IAAK,CAAE,CAAC;EAAA,CACjD,CAAC;AAEhB;AAEA,SAASC,YAAYA,CACnB5B,KAA2E,EAC3E;EACA,MAAM;IAAEJ,KAAK;IAAEK;EAAK,CAAC,GAAGhB,QAAQ,CAAC,CAAC;EAClC,MAAMiB,IAAI,GAAGP,UAAU,CAAC,CAAC;EACzB,MAAM;IAAEQ,OAAO;IAAEC;EAAc,CAAC,GAAGlB,YAAY,CAAC,CAAC;EACjD,MAAM;IAAEmB,KAAK;IAAEwB,QAAQ;IAAEC,wBAAwB;IAAEtB,KAAK;IAAEC;EAAO,CAAC,GAAGT,KAAK;EAC1E,MAAMU,CAAC,GAAGpB,iBAAiB,CAACM,KAAK,EAAEK,IAAI,EAAE,WAAW,CAAC;EACrD,oBACEP,KAAA,CAACX,IAAI;IAAC0B,MAAM,EAAEA,MAAO;IAACD,KAAK,EAAE,CAACN,IAAI,EAAE;MAAEY,eAAe,EAAEJ,CAAC,CAACK;IAAG,CAAC,EAAEP,KAAK,CAAE;IAAAW,QAAA,gBACpE3B,IAAA,CAACR,IAAI;MAACoC,OAAO,EAAEV,CAAC,CAACW,IAAK;MAACC,KAAK,EAAC,cAAc;MAAAH,QAAA,EACxCd;IAAK,CACF,CAAC,eAEPX,KAAA,CAACZ,SAAS;MAAA,GACJsB,aAAa;MACjBO,OAAO,EAAEkB,QAAS;MAClBjB,iBAAiB,EAAC,QAAQ;MAC1BmB,kBAAkB,EAAED,wBAAyB;MAC7CE,OAAO,EAAE,EAAG;MACZxB,KAAK,EAAE;QAAEyB,QAAQ,EAAE,EAAE;QAAEC,SAAS,EAAE,EAAE;QAAEpC,UAAU,EAAE,QAAQ;QAAEqC,cAAc,EAAE;MAAS,CAAE;MAAAhB,QAAA,gBAEvF3B,IAAA,CAACR,IAAI;QAACoC,OAAO,EAAC,IAAI;QAACE,KAAK,EAAC,YAAY;QAAAH,QAAA,EAAC;MAEtC,CAAM,CAAC,eACP3B,IAAA,CAACL,SAAS;QAACsC,OAAO,EAAEtB,OAAQ;QAACuB,MAAM,EAAE9B,KAAK,CAAC8B,MAAM,CAACC;MAAK,CAAE,CAAC;IAAA,CACjD,CAAC;EAAA,CACR,CAAC;AAEX;AAEA,OAAO,SAASS,GAAGA,CAACpC,KAAe,EAAE;EACnC,MAAM;IAAEJ,KAAK;IAAEK;EAAK,CAAC,GAAGhB,QAAQ,CAAC,CAAC;EAClC,MAAMiB,IAAI,GAAGP,UAAU,CAAC,CAAC;EAEzB,IAAIK,KAAK,CAACoB,OAAO,KAAK,aAAa,EAAE,oBAAO5B,IAAA,CAACO,aAAa;IAAA,GAAKC;EAAK,CAAG,CAAC;EACxE,IAAIA,KAAK,CAACoB,OAAO,KAAK,WAAW,EAAE,oBAAO5B,IAAA,CAACoC,YAAY;IAAA,GAAK5B;EAAK,CAAG,CAAC;;EAErE;EACA,MAAMU,CAAC,GAAGpB,iBAAiB,CAACM,KAAK,EAAEK,IAAI,EAAE,OAAO,CAAC;EACjD,oBACET,IAAA,CAACT,IAAI;IAAC0B,MAAM,EAAET,KAAK,CAACS,MAAO;IAACD,KAAK,EAAE,CAACN,IAAI,EAAE;MAAEY,eAAe,EAAEJ,CAAC,CAACK;IAAG,CAAC,EAAEf,KAAK,CAACQ,KAAK,CAAE;IAAAW,QAAA,eAChF3B,IAAA,CAACR,IAAI;MAACoC,OAAO,EAAEV,CAAC,CAACW,IAAK;MAACC,KAAK,EAAC,cAAc;MAAAH,QAAA,EACxCnB,KAAK,CAACK;IAAK,CACR;EAAC,CACH,CAAC;AAEX;;AAEA;AACA+B,GAAG,CAACC,UAAU,GAAGjD,SAAS,CAACkD,GAAG","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Text — 基本テキスト primitive(設計書 §1)。RN コア Text の薄いラッパ。
|
|
5
|
+
* contract: text(app 先行定義、melta-contracts)。
|
|
6
|
+
*
|
|
7
|
+
* - variant は contract 由来の VariantOf<"text">(= fontSize の段階)。theme の FontSizeKey と
|
|
8
|
+
* 構造一致している前提で theme.typography.fontSize[variant] を引く。乖離したら型エラーで検知
|
|
9
|
+
* される(= A-3 conformance の型レベル最低ライン、§2)。
|
|
10
|
+
* - 色は token キーのみ(生 hex 不可、§5 lint の意味を保つ)。
|
|
11
|
+
* - letterSpacing は role(heading/body) の ratio を fontSize から pt 換算(text.styles.ts)。
|
|
12
|
+
* - 形状(fontSize/lineHeight/letterSpacing/fontWeight)は variant/role/weight 依存なので useMemo で
|
|
13
|
+
* 分離(B-3 の「形状/色 分離 + 参照安定性」を Phase1 は useMemo で満たす。StyleSheet 事前生成の
|
|
14
|
+
* 最適化は Card で実証予定)。色のみ render 時に colors から取る。
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { useMemo } from "react";
|
|
18
|
+
import { Text as RNText } from "react-native";
|
|
19
|
+
import { useTheme } from "../theme/index.js";
|
|
20
|
+
import { CONTRACTS } from "../contracts/contract-types.js";
|
|
21
|
+
import { resolveTextShape } from "./text.styles.js";
|
|
22
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
export function Text({
|
|
24
|
+
variant = "base",
|
|
25
|
+
weight,
|
|
26
|
+
color = "text-default",
|
|
27
|
+
role = "body",
|
|
28
|
+
numberOfLines,
|
|
29
|
+
style,
|
|
30
|
+
testID,
|
|
31
|
+
children
|
|
32
|
+
}) {
|
|
33
|
+
const {
|
|
34
|
+
theme,
|
|
35
|
+
colors
|
|
36
|
+
} = useTheme();
|
|
37
|
+
|
|
38
|
+
// 形状(mode 非依存)は variant/role/weight にだけ依存させてメモ化(B-3)。
|
|
39
|
+
// 決定ロジックは pure resolver(text.styles.ts)に分離済み — recipe との機械照合対象。
|
|
40
|
+
const shape = useMemo(() => resolveTextShape(theme, variant, role, weight), [theme, variant, role, weight]);
|
|
41
|
+
return /*#__PURE__*/_jsx(RNText, {
|
|
42
|
+
style: [shape, {
|
|
43
|
+
color: colors[color]
|
|
44
|
+
}, style],
|
|
45
|
+
numberOfLines: numberOfLines,
|
|
46
|
+
accessibilityRole: role === "heading" ? "header" : undefined,
|
|
47
|
+
testID: testID,
|
|
48
|
+
children: children
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Phase 2 conformance test 用の contract メタ(§2 A-3)。
|
|
53
|
+
Text.__contract = CONTRACTS.text;
|
|
54
|
+
//# sourceMappingURL=Text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","Text","RNText","useTheme","CONTRACTS","resolveTextShape","jsx","_jsx","variant","weight","color","role","numberOfLines","style","testID","children","theme","colors","shape","accessibilityRole","undefined","__contract","text"],"sourceRoot":"../../../src","sources":["primitives/Text.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,IAAIC,MAAM,QAAwC,cAAc;AAC7E,SAASC,QAAQ,QAAQ,mBAAU;AAEnC,SAASC,SAAS,QAAwB,gCAA6B;AACvE,SAASC,gBAAgB,QAAuB,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmBhE,OAAO,SAASN,IAAIA,CAAC;EACnBO,OAAO,GAAG,MAAM;EAChBC,MAAM;EACNC,KAAK,GAAG,cAAc;EACtBC,IAAI,GAAG,MAAM;EACbC,aAAa;EACbC,KAAK;EACLC,MAAM;EACNC;AACS,CAAC,EAAE;EACZ,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGd,QAAQ,CAAC,CAAC;;EAEpC;EACA;EACA,MAAMe,KAAK,GAAGlB,OAAO,CACnB,MAAMK,gBAAgB,CAACW,KAAK,EAAER,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAAC,EACpD,CAACO,KAAK,EAAER,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAC/B,CAAC;EAED,oBACEF,IAAA,CAACL,MAAM;IACLW,KAAK,EAAE,CAACK,KAAK,EAAE;MAAER,KAAK,EAAEO,MAAM,CAACP,KAAK;IAAE,CAAC,EAAEG,KAAK,CAAE;IAChDD,aAAa,EAAEA,aAAc;IAC7BO,iBAAiB,EAAER,IAAI,KAAK,SAAS,GAAG,QAAQ,GAAGS,SAAU;IAC7DN,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAEdA;EAAQ,CACH,CAAC;AAEb;;AAEA;AACAd,IAAI,CAACoB,UAAU,GAAGjB,SAAS,CAACkB,IAAI","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* focus-ring — Pressable の focus 可視化を共通化する internal helper(設計書 §1/§2)。
|
|
5
|
+
*
|
|
6
|
+
* RN にブラウザの focus-visible / ring はないので、focus 時に「outline 相当の View overlay」を
|
|
7
|
+
* 対象の外側に絶対配置で描く(§2 mapping: focus → accessible + Pressable onFocus で outline)。
|
|
8
|
+
* 外付けキーボード / TV / a11y focus で効く。Button / Tag / Card で共有する(個別実装の重複を防ぐ)。
|
|
9
|
+
*
|
|
10
|
+
* 使い方:
|
|
11
|
+
* const { focused, focusHandlers } = useFocusRing();
|
|
12
|
+
* <Pressable {...focusHandlers} style={{ ... }}>
|
|
13
|
+
* {children}
|
|
14
|
+
* <FocusRing visible={focused} radius={theme.radius.md} />
|
|
15
|
+
* </Pressable>
|
|
16
|
+
* 注: 親 Pressable は position:relative(RN 既定)かつ overflow を hidden にしないこと
|
|
17
|
+
* (ring は inset 負値で外側に出るため)。
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { useState } from "react";
|
|
21
|
+
import { View } from "react-native";
|
|
22
|
+
import { useTheme } from "../../theme/index.js";
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
export function useFocusRing() {
|
|
25
|
+
const [focused, setFocused] = useState(false);
|
|
26
|
+
return {
|
|
27
|
+
focused,
|
|
28
|
+
focusHandlers: {
|
|
29
|
+
onFocus: () => setFocused(true),
|
|
30
|
+
onBlur: () => setFocused(false)
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const INSET = 3;
|
|
35
|
+
export function FocusRing({
|
|
36
|
+
visible,
|
|
37
|
+
radius
|
|
38
|
+
}) {
|
|
39
|
+
const {
|
|
40
|
+
theme
|
|
41
|
+
} = useTheme();
|
|
42
|
+
if (!visible) return null;
|
|
43
|
+
return /*#__PURE__*/_jsx(View, {
|
|
44
|
+
pointerEvents: "none",
|
|
45
|
+
style: {
|
|
46
|
+
position: "absolute",
|
|
47
|
+
top: -INSET,
|
|
48
|
+
left: -INSET,
|
|
49
|
+
right: -INSET,
|
|
50
|
+
bottom: -INSET,
|
|
51
|
+
borderWidth: 2,
|
|
52
|
+
borderColor: theme.color.primary["500"],
|
|
53
|
+
borderRadius: radius + INSET
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=focus-ring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","View","useTheme","jsx","_jsx","useFocusRing","focused","setFocused","focusHandlers","onFocus","onBlur","INSET","FocusRing","visible","radius","theme","pointerEvents","style","position","top","left","right","bottom","borderWidth","borderColor","color","primary","borderRadius"],"sourceRoot":"../../../../src","sources":["primitives/_internal/focus-ring.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,QAAQ,QAAQ,sBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEvC,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGP,QAAQ,CAAC,KAAK,CAAC;EAC7C,OAAO;IACLM,OAAO;IACPE,aAAa,EAAE;MACbC,OAAO,EAAEA,CAAA,KAAMF,UAAU,CAAC,IAAI,CAAC;MAC/BG,MAAM,EAAEA,CAAA,KAAMH,UAAU,CAAC,KAAK;IAChC;EACF,CAAC;AACH;AAQA,MAAMI,KAAK,GAAG,CAAC;AAEf,OAAO,SAASC,SAASA,CAAC;EAAEC,OAAO;EAAEC;AAAuB,CAAC,EAAE;EAC7D,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAC5B,IAAI,CAACW,OAAO,EAAE,OAAO,IAAI;EACzB,oBACET,IAAA,CAACH,IAAI;IACHe,aAAa,EAAC,MAAM;IACpBC,KAAK,EAAE;MACLC,QAAQ,EAAE,UAAU;MACpBC,GAAG,EAAE,CAACR,KAAK;MACXS,IAAI,EAAE,CAACT,KAAK;MACZU,KAAK,EAAE,CAACV,KAAK;MACbW,MAAM,EAAE,CAACX,KAAK;MACdY,WAAW,EAAE,CAAC;MACdC,WAAW,EAAET,KAAK,CAACU,KAAK,CAACC,OAAO,CAAC,KAAK,CAAC;MACvCC,YAAY,EAAEb,MAAM,GAAGH;IACzB;EAAE,CACH,CAAC;AAEN","ignoreList":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* button.styles — Button の pure style resolver(P4 conformance 対応で Button.tsx から分離)。
|
|
5
|
+
*
|
|
6
|
+
* react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
|
|
7
|
+
* 直接実行できる。recipes/app/button.recipe.json(melta-contracts の styleRefs)との
|
|
8
|
+
* 機械照合は scripts/lib/recipe-conformance.test.ts が行う。
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** size → height / 横 padding / label fontSize / icon box(contract sizes/iconButton と整合)。 */
|
|
12
|
+
export const SIZE_SPEC = {
|
|
13
|
+
small: {
|
|
14
|
+
height: 32,
|
|
15
|
+
px: "3",
|
|
16
|
+
font: "sm",
|
|
17
|
+
iconBox: 32
|
|
18
|
+
},
|
|
19
|
+
medium: {
|
|
20
|
+
height: 40,
|
|
21
|
+
px: "4",
|
|
22
|
+
font: "base",
|
|
23
|
+
iconBox: 40
|
|
24
|
+
},
|
|
25
|
+
large: {
|
|
26
|
+
height: 48,
|
|
27
|
+
px: "6",
|
|
28
|
+
font: "base",
|
|
29
|
+
iconBox: 48
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* variant → 色解決(button.contract tokenRefs の 1:1 写像)。
|
|
35
|
+
* 文字色は variant により semantic 外(primary.500 等)もあるため hex 文字列で返し、
|
|
36
|
+
* Text の style で color 上書きする(Text の color prop は SemanticColors キー限定のため)。
|
|
37
|
+
*/
|
|
38
|
+
export function resolveVariant(theme, mode, variant) {
|
|
39
|
+
const c = theme.color;
|
|
40
|
+
const sem = c.semantic[mode];
|
|
41
|
+
switch (variant) {
|
|
42
|
+
case "contained":
|
|
43
|
+
return {
|
|
44
|
+
bg: c.primary["500"],
|
|
45
|
+
pressedBg: c.primary["700"],
|
|
46
|
+
textColor: sem["text-on-accent"]
|
|
47
|
+
};
|
|
48
|
+
case "outlined":
|
|
49
|
+
return {
|
|
50
|
+
bg: sem["bg-surface"],
|
|
51
|
+
pressedBg: sem["bg-surface-alt"],
|
|
52
|
+
textColor: sem["text-default"],
|
|
53
|
+
border: sem["border-default"]
|
|
54
|
+
};
|
|
55
|
+
case "brand-outline":
|
|
56
|
+
return {
|
|
57
|
+
bg: sem["bg-surface"],
|
|
58
|
+
pressedBg: c.primary["50"],
|
|
59
|
+
textColor: c.primary["500"],
|
|
60
|
+
border: c.primary["500"]
|
|
61
|
+
};
|
|
62
|
+
case "neutral":
|
|
63
|
+
return {
|
|
64
|
+
bg: sem["bg-surface-alt"],
|
|
65
|
+
pressedBg: sem["border-default"],
|
|
66
|
+
textColor: sem["text-default"]
|
|
67
|
+
};
|
|
68
|
+
case "lighted":
|
|
69
|
+
return {
|
|
70
|
+
bg: c.primary["50"],
|
|
71
|
+
pressedBg: c.primary["100"],
|
|
72
|
+
textColor: c.primary["500"]
|
|
73
|
+
};
|
|
74
|
+
case "danger":
|
|
75
|
+
return {
|
|
76
|
+
bg: c.status.danger.base,
|
|
77
|
+
pressedBg: c.status.danger.textLight,
|
|
78
|
+
textColor: sem["text-on-accent"]
|
|
79
|
+
};
|
|
80
|
+
case "subtle":
|
|
81
|
+
return {
|
|
82
|
+
bg: "transparent",
|
|
83
|
+
pressedBg: sem["bg-surface-alt"],
|
|
84
|
+
textColor: sem["text-default"]
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=button.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SIZE_SPEC","small","height","px","font","iconBox","medium","large","resolveVariant","theme","mode","variant","c","color","sem","semantic","bg","primary","pressedBg","textColor","border","status","danger","base","textLight"],"sourceRoot":"../../../src","sources":["primitives/button.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;AACA,OAAO,MAAMA,SAGZ,GAAG;EACFC,KAAK,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,IAAI;IAAEC,OAAO,EAAE;EAAG,CAAC;EACvDC,MAAM,EAAE;IAAEJ,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,MAAM;IAAEC,OAAO,EAAE;EAAG,CAAC;EAC1DE,KAAK,EAAE;IAAEL,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,MAAM;IAAEC,OAAO,EAAE;EAAG;AAC1D,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,cAAcA,CAC5BC,KAAkB,EAClBC,IAAe,EACfC,OAAsB,EACmD;EACzE,MAAMC,CAAC,GAAGH,KAAK,CAACI,KAAK;EACrB,MAAMC,GAAG,GAAGF,CAAC,CAACG,QAAQ,CAACL,IAAI,CAAC;EAC5B,QAAQC,OAAO;IACb,KAAK,WAAW;MACd,OAAO;QAAEK,EAAE,EAAEJ,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEC,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEE,SAAS,EAAEL,GAAG,CAAC,gBAAgB;MAAE,CAAC;IAChG,KAAK,UAAU;MACb,OAAO;QACLE,EAAE,EAAEF,GAAG,CAAC,YAAY,CAAC;QACrBI,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAChCK,SAAS,EAAEL,GAAG,CAAC,cAAc,CAAC;QAC9BM,MAAM,EAAEN,GAAG,CAAC,gBAAgB;MAC9B,CAAC;IACH,KAAK,eAAe;MAClB,OAAO;QACLE,EAAE,EAAEF,GAAG,CAAC,YAAY,CAAC;QACrBI,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,IAAI,CAAC;QAC1BE,SAAS,EAAEP,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAC3BG,MAAM,EAAER,CAAC,CAACK,OAAO,CAAC,KAAK;MACzB,CAAC;IACH,KAAK,SAAS;MACZ,OAAO;QAAED,EAAE,EAAEF,GAAG,CAAC,gBAAgB,CAAC;QAAEI,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAAEK,SAAS,EAAEL,GAAG,CAAC,cAAc;MAAE,CAAC;IACxG,KAAK,SAAS;MACZ,OAAO;QAAEE,EAAE,EAAEJ,CAAC,CAACK,OAAO,CAAC,IAAI,CAAC;QAAEC,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEE,SAAS,EAAEP,CAAC,CAACK,OAAO,CAAC,KAAK;MAAE,CAAC;IAC1F,KAAK,QAAQ;MACX,OAAO;QAAED,EAAE,EAAEJ,CAAC,CAACS,MAAM,CAACC,MAAM,CAACC,IAAI;QAAEL,SAAS,EAAEN,CAAC,CAACS,MAAM,CAACC,MAAM,CAACE,SAAS;QAAEL,SAAS,EAAEL,GAAG,CAAC,gBAAgB;MAAE,CAAC;IAC7G,KAAK,QAAQ;MACX,OAAO;QAAEE,EAAE,EAAE,aAAa;QAAEE,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAAEK,SAAS,EAAEL,GAAG,CAAC,cAAc;MAAE,CAAC;EAClG;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** melta-app primitives の公開エントリ。実装ごとにここへ追記する(設計書 §1)。 */
|
|
4
|
+
|
|
5
|
+
export { Text } from "./Text.js";
|
|
6
|
+
export { Metric } from "./Metric.js";
|
|
7
|
+
export { Tag } from "./Tag.js";
|
|
8
|
+
export { Button } from "./Button.js";
|
|
9
|
+
export { Stack } from "./Stack.js";
|
|
10
|
+
export { Row } from "./Row.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Text","Metric","Tag","Button","Stack","Row"],"sourceRoot":"../../../src","sources":["primitives/index.ts"],"mappings":";;AAAA;;AAEA,SAASA,IAAI,QAAQ,WAAQ;AAC7B,SAASC,MAAM,QAAQ,aAAU;AACjC,SAASC,GAAG,QAAQ,UAAO;AAC3B,SAASC,MAAM,QAAQ,aAAU;AACjC,SAASC,KAAK,QAAQ,YAAS;AAC/B,SAASC,GAAG,QAAQ,UAAO","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* metric.styles — Metric の pure style resolver(styleRefs conformance 対応で Metric.tsx から分離)。
|
|
5
|
+
*
|
|
6
|
+
* react-native を import しない純粋モジュール(型 import のみ可)にすることで node テスト
|
|
7
|
+
* (tsx --test)から直接実行できる。recipes/app/metric.recipe.json(melta-contracts の
|
|
8
|
+
* styleRefs)との機械照合は scripts/lib/metric-conformance.test.ts が行う。
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* size → value / unit の fontSize token(metric.recipe sizes と整合)。
|
|
13
|
+
* unit は value の1段下の fontSize(ベースライン揃え用)。
|
|
14
|
+
*/
|
|
15
|
+
export const METRIC_FONT = {
|
|
16
|
+
sm: {
|
|
17
|
+
value: "lg",
|
|
18
|
+
unit: "base"
|
|
19
|
+
},
|
|
20
|
+
md: {
|
|
21
|
+
value: "2xl",
|
|
22
|
+
unit: "lg"
|
|
23
|
+
},
|
|
24
|
+
lg: {
|
|
25
|
+
value: "3xl",
|
|
26
|
+
unit: "xl"
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
/** size → value / unit / label の style 解決(metric.recipe styleRefs の 1:1 写像)。 */
|
|
30
|
+
export function resolveMetricStyles(theme, mode, size) {
|
|
31
|
+
const sem = theme.color.semantic[mode];
|
|
32
|
+
const fontSize = theme.typography.fontSize;
|
|
33
|
+
const font = METRIC_FONT[size];
|
|
34
|
+
return {
|
|
35
|
+
valueStyle: {
|
|
36
|
+
fontSize: fontSize[font.value].fontSize,
|
|
37
|
+
lineHeight: fontSize[font.value].lineHeight,
|
|
38
|
+
fontWeight: theme.typography.fontWeight.bold,
|
|
39
|
+
color: sem["text-heading"],
|
|
40
|
+
fontVariant: ["tabular-nums"]
|
|
41
|
+
},
|
|
42
|
+
unitStyle: {
|
|
43
|
+
fontSize: fontSize[font.unit].fontSize,
|
|
44
|
+
fontWeight: theme.typography.fontWeight.medium,
|
|
45
|
+
color: sem["text-muted"],
|
|
46
|
+
marginLeft: theme.spacing["1"]
|
|
47
|
+
},
|
|
48
|
+
labelStyle: {
|
|
49
|
+
fontSize: fontSize.sm.fontSize,
|
|
50
|
+
color: sem["text-muted"]
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=metric.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["METRIC_FONT","sm","value","unit","md","lg","resolveMetricStyles","theme","mode","size","sem","color","semantic","fontSize","typography","font","valueStyle","lineHeight","fontWeight","bold","fontVariant","unitStyle","medium","marginLeft","spacing","labelStyle"],"sourceRoot":"../../../src","sources":["primitives/metric.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA,OAAO,MAAMA,WAA0E,GAAG;EACxFC,EAAE,EAAE;IAAEC,KAAK,EAAE,IAAI;IAAEC,IAAI,EAAE;EAAO,CAAC;EACjCC,EAAE,EAAE;IAAEF,KAAK,EAAE,KAAK;IAAEC,IAAI,EAAE;EAAK,CAAC;EAChCE,EAAE,EAAE;IAAEH,KAAK,EAAE,KAAK;IAAEC,IAAI,EAAE;EAAK;AACjC,CAAC;AAyBD;AACA,OAAO,SAASG,mBAAmBA,CACjCC,KAAkB,EAClBC,IAAe,EACfC,IAAgB,EACF;EACd,MAAMC,GAAG,GAAGH,KAAK,CAACI,KAAK,CAACC,QAAQ,CAACJ,IAAI,CAAC;EACtC,MAAMK,QAAQ,GAAGN,KAAK,CAACO,UAAU,CAACD,QAAQ;EAC1C,MAAME,IAAI,GAAGf,WAAW,CAACS,IAAI,CAAC;EAC9B,OAAO;IACLO,UAAU,EAAE;MACVH,QAAQ,EAAEA,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACW,QAAQ;MACvCI,UAAU,EAAEJ,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACe,UAAU;MAC3CC,UAAU,EAAEX,KAAK,CAACO,UAAU,CAACI,UAAU,CAACC,IAAI;MAC5CR,KAAK,EAAED,GAAG,CAAC,cAAc,CAAC;MAC1BU,WAAW,EAAE,CAAC,cAAc;IAC9B,CAAC;IACDC,SAAS,EAAE;MACTR,QAAQ,EAAEA,QAAQ,CAACE,IAAI,CAACZ,IAAI,CAAC,CAACU,QAAQ;MACtCK,UAAU,EAAEX,KAAK,CAACO,UAAU,CAACI,UAAU,CAACI,MAAM;MAC9CX,KAAK,EAAED,GAAG,CAAC,YAAY,CAAC;MACxBa,UAAU,EAAEhB,KAAK,CAACiB,OAAO,CAAC,GAAG;IAC/B,CAAC;IACDC,UAAU,EAAE;MACVZ,QAAQ,EAAEA,QAAQ,CAACZ,EAAE,CAACY,QAAQ;MAC9BF,KAAK,EAAED,GAAG,CAAC,YAAY;IACzB;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* row.styles — Row の pure style resolver(styleRefs conformance 対応で Row.tsx から分離)。
|
|
5
|
+
*
|
|
6
|
+
* react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
|
|
7
|
+
* 直接実行できる。recipes/app/row.recipe.json(melta-contracts の styleRefs)との
|
|
8
|
+
* 機械照合は scripts/lib/row-conformance.test.ts が行う。
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** 交差軸の配置(RN alignItems への写像)。default "center"(recipe default に焼いてある)。 */
|
|
12
|
+
|
|
13
|
+
/** 主軸の配置(RN justifyContent への写像)。default "start"(= RN デフォルト、style 出力なし)。 */
|
|
14
|
+
|
|
15
|
+
const ALIGN_MAP = {
|
|
16
|
+
start: "flex-start",
|
|
17
|
+
center: "center",
|
|
18
|
+
end: "flex-end",
|
|
19
|
+
baseline: "baseline",
|
|
20
|
+
stretch: "stretch"
|
|
21
|
+
};
|
|
22
|
+
const JUSTIFY_MAP = {
|
|
23
|
+
start: "flex-start",
|
|
24
|
+
center: "center",
|
|
25
|
+
end: "flex-end",
|
|
26
|
+
between: "space-between"
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* props → 横並び style の解決(row.recipe styleRefs の 1:1 写像)。
|
|
30
|
+
* デフォルト(align=center / justify=start / wrap=false / gap なし)は
|
|
31
|
+
* recipe の default variant(flexDirection + alignItems: "center")と一致させている。
|
|
32
|
+
*/
|
|
33
|
+
export function resolveRowStyle(theme, {
|
|
34
|
+
gap,
|
|
35
|
+
align = "center",
|
|
36
|
+
justify = "start",
|
|
37
|
+
wrap = false
|
|
38
|
+
} = {}) {
|
|
39
|
+
return {
|
|
40
|
+
flexDirection: "row",
|
|
41
|
+
alignItems: ALIGN_MAP[align],
|
|
42
|
+
...(justify !== "start" ? {
|
|
43
|
+
justifyContent: JUSTIFY_MAP[justify]
|
|
44
|
+
} : null),
|
|
45
|
+
...(wrap ? {
|
|
46
|
+
flexWrap: "wrap"
|
|
47
|
+
} : null),
|
|
48
|
+
...(gap != null ? {
|
|
49
|
+
gap: theme.spacing[gap]
|
|
50
|
+
} : null)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=row.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ALIGN_MAP","start","center","end","baseline","stretch","JUSTIFY_MAP","between","resolveRowStyle","theme","gap","align","justify","wrap","flexDirection","alignItems","justifyContent","flexWrap","spacing"],"sourceRoot":"../../../src","sources":["primitives/row.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAEA;;AAGA,MAAMA,SAAS,GAAG;EAChBC,KAAK,EAAE,YAAY;EACnBC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,UAAU;EACfC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE;AACX,CAAU;AAEV,MAAMC,WAAW,GAAG;EAClBL,KAAK,EAAE,YAAY;EACnBC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,UAAU;EACfI,OAAO,EAAE;AACX,CAAU;AAqBV;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,KAAkB,EAClB;EAAEC,GAAG;EAAEC,KAAK,GAAG,QAAQ;EAAEC,OAAO,GAAG,OAAO;EAAEC,IAAI,GAAG;AAAqB,CAAC,GAAG,CAAC,CAAC,EACpE;EACV,OAAO;IACLC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAEf,SAAS,CAACW,KAAK,CAAC;IAC5B,IAAIC,OAAO,KAAK,OAAO,GAAG;MAAEI,cAAc,EAAEV,WAAW,CAACM,OAAO;IAAE,CAAC,GAAG,IAAI,CAAC;IAC1E,IAAIC,IAAI,GAAG;MAAEI,QAAQ,EAAE;IAAgB,CAAC,GAAG,IAAI,CAAC;IAChD,IAAIP,GAAG,IAAI,IAAI,GAAG;MAAEA,GAAG,EAAED,KAAK,CAACS,OAAO,CAACR,GAAG;IAAE,CAAC,GAAG,IAAI;EACtD,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* stack.styles — Stack の pure style resolver(styleRefs conformance 対応で Stack.tsx から分離)。
|
|
5
|
+
*
|
|
6
|
+
* react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
|
|
7
|
+
* 直接実行できる。recipes/app/stack.recipe.json(melta-contracts の styleRefs)との
|
|
8
|
+
* 機械照合は scripts/lib/stack-conformance.test.ts が行う。
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** 交差軸の配置(RN alignItems への写像。default stretch = RN デフォルトなので出力しない)。 */
|
|
12
|
+
|
|
13
|
+
const ALIGN_MAP = {
|
|
14
|
+
start: "flex-start",
|
|
15
|
+
center: "center",
|
|
16
|
+
end: "flex-end",
|
|
17
|
+
stretch: "stretch"
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* props → 縦積み style の解決(stack.recipe styleRefs の 1:1 写像)。
|
|
21
|
+
* デフォルト(gap なし / align=stretch)は recipe の default variant(flexDirection のみ)と一致させている。
|
|
22
|
+
*/
|
|
23
|
+
export function resolveStackStyle(theme, {
|
|
24
|
+
gap,
|
|
25
|
+
align = "stretch"
|
|
26
|
+
} = {}) {
|
|
27
|
+
return {
|
|
28
|
+
flexDirection: "column",
|
|
29
|
+
...(gap != null ? {
|
|
30
|
+
gap: theme.spacing[gap]
|
|
31
|
+
} : null),
|
|
32
|
+
...(align !== "stretch" ? {
|
|
33
|
+
alignItems: ALIGN_MAP[align]
|
|
34
|
+
} : null)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=stack.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ALIGN_MAP","start","center","end","stretch","resolveStackStyle","theme","gap","align","flexDirection","spacing","alignItems"],"sourceRoot":"../../../src","sources":["primitives/stack.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAGA,MAAMA,SAAS,GAAG;EAChBC,KAAK,EAAE,YAAY;EACnBC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,UAAU;EACfC,OAAO,EAAE;AACX,CAAU;AAeV;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,KAAkB,EAClB;EAAEC,GAAG;EAAEC,KAAK,GAAG;AAA2B,CAAC,GAAG,CAAC,CAAC,EACpC;EACZ,OAAO;IACLC,aAAa,EAAE,QAAQ;IACvB,IAAIF,GAAG,IAAI,IAAI,GAAG;MAAEA,GAAG,EAAED,KAAK,CAACI,OAAO,CAACH,GAAG;IAAE,CAAC,GAAG,IAAI,CAAC;IACrD,IAAIC,KAAK,KAAK,SAAS,GAAG;MAAEG,UAAU,EAAEX,SAAS,CAACQ,KAAK;IAAE,CAAC,GAAG,IAAI;EACnE,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* tag.styles — Tag の pure style resolver(styleRefs conformance 対応で Tag.tsx から分離)。
|
|
5
|
+
*
|
|
6
|
+
* react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
|
|
7
|
+
* 直接実行できる。recipes/app/tag.recipe.json(melta-contracts の styleRefs)との
|
|
8
|
+
* 機械照合は scripts/lib/tag-conformance.test.ts が行う。
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** 共通形状(px-3 py-1 gap-1 rounded-full。tag.recipe の全 variant style と共通の寸法キー)。 */
|
|
12
|
+
export function resolveTagBase(theme) {
|
|
13
|
+
return {
|
|
14
|
+
gap: theme.spacing["1"],
|
|
15
|
+
paddingHorizontal: theme.spacing["3"],
|
|
16
|
+
paddingVertical: theme.spacing["1"],
|
|
17
|
+
borderRadius: theme.radius.full
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* variant(+ filter-chip の selected 状態)→ 配色 + label fontSize(tag.recipe styleRefs の 1:1 写像)。
|
|
23
|
+
*
|
|
24
|
+
* - selected は contract states active/inactive → prop selected:boolean の写像(filter-chip のみ有効)。
|
|
25
|
+
* active は bg=primary.50 / border=primary.200 / text=primary.700 の差分、inactive は variant style そのまま。
|
|
26
|
+
* - 文字色は active 時に semantic 外(primary.700)になるため hex 文字列で返し、
|
|
27
|
+
* Text の style で color 上書きする(Text の color prop は SemanticColors キー限定のため)。
|
|
28
|
+
*/
|
|
29
|
+
export function resolveTagVariant(theme, mode, variant, selected = false) {
|
|
30
|
+
const c = theme.color;
|
|
31
|
+
const sem = c.semantic[mode];
|
|
32
|
+
switch (variant) {
|
|
33
|
+
case "basic":
|
|
34
|
+
case "removable":
|
|
35
|
+
return {
|
|
36
|
+
bg: sem["bg-page-alt"],
|
|
37
|
+
textColor: sem["text-default"],
|
|
38
|
+
font: "xs"
|
|
39
|
+
};
|
|
40
|
+
case "filter-chip":
|
|
41
|
+
return selected ? {
|
|
42
|
+
bg: c.primary["50"],
|
|
43
|
+
borderWidth: 1,
|
|
44
|
+
border: c.primary["200"],
|
|
45
|
+
textColor: c.primary["700"],
|
|
46
|
+
font: "sm"
|
|
47
|
+
} : {
|
|
48
|
+
bg: sem["bg-surface"],
|
|
49
|
+
borderWidth: 1,
|
|
50
|
+
border: sem["border-default"],
|
|
51
|
+
textColor: sem["text-default"],
|
|
52
|
+
font: "sm"
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=tag.styles.js.map
|