melta-app 0.8.0 → 0.8.1

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 CHANGED
@@ -367,7 +367,9 @@ const listRef = useRef<ScrollView>(null);
367
367
  | `Toggle` medium / large | track 24 / 28 | 縦 hitSlop 10 / 8 | 44 |
368
368
  | `Checkbox` の行 | box 20(行は label 込み) | `minHeight: 44` | 44 |
369
369
 
370
- - **背景を持つ要素は hitSlop、持たない要素は `minHeight`**。背景がある要素を minHeight で伸ばすと見た目が変わるため
370
+ - **背景を持つ要素は hitSlop、持たない行は `minHeight`**。背景がある要素を minHeight で伸ばすと見た目が変わるため。
371
+ 例外は × / action のような**小型の固定標的**で、見えない箱(minWidth/minHeight)+ hitSlop の複合
372
+ (正典パターン 24+10、Toast のように横 hitSlop を絞る席では箱を 32 に広げて 44 を維持)
371
373
  - **横方向の hitSlop は隣接する操作要素との gap の 1/2 まで**。超えると当たり判定が重なって押し違いが起きる
372
374
  (`Toast` の action と × はこれで実際に 8pt 重なっていた。0.7.0 で修正)
373
375
  - ⚠️ **iconOnly の `Button` だけは横にも hitSlop が付く**(幅 32/40 では 44pt に届かないため)。
@@ -29,13 +29,7 @@ export const CANONICAL_TAP_TARGET = {
29
29
  hitSlop: 10
30
30
  };
31
31
 
32
- /**
33
- * 視覚寸法 `visual` を実効 44pt に届かせるのに必要な**片側** hitSlop(切り上げ 安全側)。
34
- *
35
- * ⚠️ 実装の hitSlop 値をこの関数で計算しないこと(上のコメント参照)。
36
- * 使うのは (a) 値を決めるときの検算、(b) conformance テストの期待値算出。
37
- */
38
- export function requiredHitSlop(visual) {
39
- return Math.max(0, Math.ceil((MIN_TAP_TARGET - visual) / 2));
40
- }
32
+ // requiredHitSlop(必要 hitSlop の導出関数)は置かない — 実装値は literal 規約で導出禁止、
33
+ // テスト側も「実効 = 視覚 + slop×2 >= 44」を直接検算するため使い道が無い(dead code 化して撤去、
34
+ // Codex スパン監査 2026-08-06)。値を決めるときの検算は手計算 ceil((44 − 視覚) / 2) で足りる。
41
35
  //# sourceMappingURL=tap-target.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MIN_TAP_TARGET","CANONICAL_TAP_TARGET","minWidth","minHeight","hitSlop","requiredHitSlop","visual","Math","max","ceil"],"sourceRoot":"../../../src","sources":["a11y/tap-target.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,MAAMA,cAAc,GAAG,EAAE;;AAEhC;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAG;EAClCC,QAAQ,EAAE,EAAE;EACZC,SAAS,EAAE,EAAE;EACbC,OAAO,EAAE;AACX,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAACC,MAAc,EAAU;EACtD,OAAOC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,IAAI,CAAC,CAACT,cAAc,GAAGM,MAAM,IAAI,CAAC,CAAC,CAAC;AAC9D","ignoreList":[]}
1
+ {"version":3,"names":["MIN_TAP_TARGET","CANONICAL_TAP_TARGET","minWidth","minHeight","hitSlop"],"sourceRoot":"../../../src","sources":["a11y/tap-target.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,MAAMA,cAAc,GAAG,EAAE;;AAEhC;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAG;EAClCC,QAAQ,EAAE,EAAE;EACZC,SAAS,EAAE,EAAE;EACbC,OAAO,EAAE;AACX,CAAU;;AAEV;AACA;AACA","ignoreList":[]}
@@ -26,7 +26,7 @@ import { useMemo, useState } from "react";
26
26
  import { Platform, TextInput, View, Text as RNText } from "react-native";
27
27
  import { useTheme } from "../theme/index.js";
28
28
  import { CONTRACTS } from "../contracts/contract-types.js";
29
- import { resolveTextFieldStyle, resolveTextFieldFocusStyle } from "./textfield.styles.js";
29
+ import { resolveTextFieldHitSlop, resolveTextFieldStyle, resolveTextFieldFocusStyle } from "./textfield.styles.js";
30
30
 
31
31
  /**
32
32
  * Android の EditText は高さ下限(minHeight)と組み合わさると既定の縦 padding で文字が
@@ -107,7 +107,10 @@ export function TextField({
107
107
  children: [/*#__PURE__*/_jsx(RNText, {
108
108
  style: resolved.label,
109
109
  children: label
110
- }), /*#__PURE__*/_jsx(TextInput, {
110
+ }), /*#__PURE__*/_jsx(TextInput
111
+ // small 36 / medium 42 の視覚寸法のまま実効タップ標的 44 を満たす(規約 10、値は literal)
112
+ , {
113
+ hitSlop: resolveTextFieldHitSlop(size),
111
114
  value: value,
112
115
  onChangeText: onChangeText,
113
116
  placeholder: placeholder,
@@ -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","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":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACzC,SACEC,QAAQ,EACRC,SAAS,EACTC,IAAI,EACJC,IAAI,IAAIC,MAAM,QAOT,cAAc;AACrB,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SACEC,qBAAqB,EACrBC,0BAA0B,QAErB,uBAAuB;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,OAAO,SAASC,uBAAuBA,CAACC,EAAsB,EAAa;EACzE,OAAO;IACLC,eAAe,EAAE,CAAC;IAClB,IAAID,EAAE,KAAK,SAAS,GAAG;MAAEE,aAAa,EAAE;IAAE,CAAC,GAAG,IAAI,CAAC;IACnDC,iBAAiB,EAAE;EACrB,CAAC;AACH;AACA;;AAEA,MAAMC,kBAAkB,GAAGL,uBAAuB,CAACb,QAAQ,CAACmB,EAAE,CAAC;;AAE/D;AACA;AACA;AACA;AACA;AACA,SAASC,8BAA8BA,CAACC,KAAa,EAAEC,SAAiB,EAAU;EAChF,OAAO,GAAGD,KAAK,SAASC,SAAS,EAAE;AACrC;AAqCA,OAAO,SAASC,SAASA,CAAC;EACxBF,KAAK;EACLG,KAAK;EACLC,YAAY;EACZC,WAAW;EACXC,OAAO,GAAG,SAAS;EACnBC,QAAQ,GAAG,KAAK;EAChBC,IAAI,GAAG,QAAQ;EACfC,UAAU;EACVR,SAAS;EACTS,6BAA6B,GAAGX,8BAA8B;EAC9DY,YAAY;EACZC,cAAc;EACdC,WAAW;EACXC,SAAS;EACTC,aAAa;EACbC,eAAe;EACfC,MAAM;EACNC,OAAO;EACPC,KAAK;EACLC;AACc,CAAC,EAAE;EACjB,MAAM;IAAEC,KAAK;IAAEC,IAAI;IAAEC;EAAO,CAAC,GAAGvC,QAAQ,CAAC,CAAC;EAC1C,MAAM,CAACwC,OAAO,EAAEC,UAAU,CAAC,GAAG/C,QAAQ,CAAC,KAAK,CAAC;;EAE7C;EACA,MAAMgD,gBAAgB,GAAGnB,QAAQ,GAAG,UAAU,GAAGD,OAAO;EACxD,MAAMqB,QAAQ,GAAGlD,OAAO,CACtB,MAAMS,qBAAqB,CAACmC,KAAK,EAAEC,IAAI,EAAE;IAAEhB,OAAO,EAAEoB,gBAAgB;IAAElB;EAAK,CAAC,CAAC,EAC7E,CAACa,KAAK,EAAEC,IAAI,EAAEI,gBAAgB,EAAElB,IAAI,CACtC,CAAC;EACD,MAAMoB,UAAU,GAAGnD,OAAO,CAAC,MAAMU,0BAA0B,CAACkC,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAE5E,MAAMQ,SAAS,GAAGH,gBAAgB,KAAK,OAAO,IAAIzB,SAAS,IAAI,IAAI;EAEnE,oBACEV,KAAA,CAACV,IAAI;IAACsC,KAAK,EAAEA,KAAM;IAACC,MAAM,EAAEA,MAAO;IAAAU,QAAA,gBACjCzC,IAAA,CAACN,MAAM;MAACoC,KAAK,EAAEQ,QAAQ,CAAC3B,KAAM;MAAA8B,QAAA,EAAE9B;IAAK,CAAS,CAAC,eAC/CX,IAAA,CAACT,SAAS;MACRuB,KAAK,EAAEA,KAAM;MACbC,YAAY,EAAEA,YAAa;MAC3BC,WAAW,EAAEA,WAAY;MACzB0B,oBAAoB,EAAER,MAAM,CAAC,YAAY,CAAE;MAC3CS,QAAQ,EAAE,CAACzB,QAAS;MACpBI,YAAY,EAAEA,YAAa;MAC3BC,cAAc,EAAEA,cAAe;MAC/BC,WAAW,EAAEA,WAAY;MACzBC,SAAS,EAAEA,SAAU;MACrBC,aAAa,EAAEA,aAAc;MAC7BC,eAAe,EAAEA,eAAgB;MACjCiB,kBAAkB,EAAEJ,SAAS,GAAGnB,6BAA6B,CAACV,KAAK,EAAEC,SAAS,CAAC,GAAGD,KAAM;MACxFkC,kBAAkB,EAAE;QAAE3B;MAAS,CAAE;MACjCW,OAAO,EAAGiB,CAAC,IAAK;QACd,IAAI,CAAC5B,QAAQ,EAAEkB,UAAU,CAAC,IAAI,CAAC;QAC/BP,OAAO,GAAGiB,CAAC,CAAC;MACd,CAAE;MACFlB,MAAM,EAAGkB,CAAC,IAAK;QACbV,UAAU,CAAC,KAAK,CAAC;QACjBR,MAAM,GAAGkB,CAAC,CAAC;MACb,CAAE;MACFhB,KAAK,EAAE,CAACQ,QAAQ,CAACS,KAAK,EAAEvC,kBAAkB,EAAE2B,OAAO,IAAI,CAACjB,QAAQ,GAAGqB,UAAU,GAAG,IAAI;IAAE,CACvF,CAAC,EACDnB,UAAU,IAAI,IAAI,IAAI,CAACoB,SAAS,iBAC/BxC,IAAA,CAACN,MAAM;MAACoC,KAAK,EAAEQ,QAAQ,CAAClB,UAAW;MAAAqB,QAAA,EAAErB;IAAU,CAAS,CACzD,EACAoB,SAAS,iBACRxC,IAAA,CAACN,MAAM;MAACsD,uBAAuB,EAAC,QAAQ;MAAClB,KAAK,EAAEQ,QAAQ,CAAC1B,SAAU;MAAA6B,QAAA,EAChE7B;IAAS,CACJ,CACT;EAAA,CACG,CAAC;AAEX;;AAEA;AACA;AACAC,SAAS,CAACoC,UAAU,GAAGrD,SAAS,CAACsD,SAAS","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","useState","Platform","TextInput","View","Text","RNText","useTheme","CONTRACTS","resolveTextFieldHitSlop","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","hitSlop","placeholderTextColor","editable","accessibilityLabel","accessibilityState","e","input","accessibilityLiveRegion","__contract","textfield"],"sourceRoot":"../../../src","sources":["components/TextField.tsx"],"mappings":"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","ignoreList":[]}
@@ -75,7 +75,14 @@ export function Toast({
75
75
  _jsx(Pressable, {
76
76
  onPress: onAction,
77
77
  accessibilityRole: "button",
78
- hitSlop: TOAST_TAP_TARGET.hitSlop,
78
+ hitSlop: TOAST_TAP_TARGET.hitSlop
79
+ // 短いラベル("OK" 等)でも横の実効 44 を割らないよう × と同じ幅下限(背景なし = 見た目不変)
80
+ ,
81
+ style: {
82
+ minWidth: TOAST_TAP_TARGET.actionMinWidth,
83
+ alignItems: "center",
84
+ justifyContent: "center"
85
+ },
79
86
  children: /*#__PURE__*/_jsx(Text, {
80
87
  variant: TOAST_SPEC.messageFont,
81
88
  weight: TOAST_SPEC.messageWeight,
@@ -1 +1 @@
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":[]}
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","minWidth","actionMinWidth","alignItems","justifyContent","textDecorationLine","accessibilityLabel","closeMinWidth","minHeight","closeMinHeight","__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;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,UAAU,EACVC,gBAAgB,EAChBC,kBAAkB,QAEb,mBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAuB3B,OAAO,SAASC,KAAKA,CAAC;EACpBC,OAAO;EACPC,OAAO;EACPC,WAAW;EACXC,OAAO;EACPC,WAAW;EACXC,QAAQ;EACRC,uBAAuB,GAAG,KAAK;EAC/BC,KAAK;EACLC;AACU,CAAC,EAAE;EACb,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGpB,QAAQ,CAAC,CAAC;EAClC,MAAMqB,MAAM,GAAGzB,OAAO,CAAC,MAAMQ,kBAAkB,CAACe,KAAK,EAAEC,IAAI,EAAEV,OAAO,CAAC,EAAE,CAACS,KAAK,EAAEC,IAAI,EAAEV,OAAO,CAAC,CAAC;EAE9F,oBACEF,KAAA,CAACV,IAAI;IACHwB,uBAAuB,EAAC,QAAQ;IAChCJ,MAAM,EAAEA,MAAO;IACfD,KAAK,EAAE,CAACI,MAAM,CAACE,cAAc,EAAEF,MAAM,CAACG,SAAS,EAAEP,KAAK,CAAE;IAAAQ,QAAA,gBAExDjB,KAAA,CAACV,IAAI;MAACmB,KAAK,EAAE;QAAES,IAAI,EAAE,CAAC;QAAEC,GAAG,EAAER,KAAK,CAACS,OAAO,CAAC,GAAG;MAAE,CAAE;MAAAH,QAAA,gBAChDnB,IAAA,CAACP,IAAI;QACHW,OAAO,EAAER,UAAU,CAAC2B,WAAY;QAChCC,MAAM,EAAE5B,UAAU,CAAC6B,aAAc;QACjCd,KAAK,EAAE;UAAEe,KAAK,EAAEX,MAAM,CAACY,YAAY,CAACD;QAAM,CAAE;QAAAP,QAAA,EAE3Cd;MAAO,CACJ,CAAC,EACNC,WAAW,IAAI,IAAI;MAAA;MAClB;MACAN,IAAA,CAACP,IAAI;QAACW,OAAO,EAAER,UAAU,CAAC2B,WAAY;QAACZ,KAAK,EAAE;UAAEe,KAAK,EAAEX,MAAM,CAACY,YAAY,CAACD;QAAM,CAAE;QAAAP,QAAA,EAChFb;MAAW,CACR,CACP;IAAA,CACG,CAAC,EACNE,WAAW,IAAI,IAAI,IAAIC,QAAQ,IAAI,IAAI;IAAA;IACtC;IACA;IACAT,IAAA,CAACT,SAAS;MACRqC,OAAO,EAAEnB,QAAS;MAClBoB,iBAAiB,EAAC,QAAQ;MAC1BC,OAAO,EAAEjC,gBAAgB,CAACiC;MAC1B;MAAA;MACAnB,KAAK,EAAE;QACLoB,QAAQ,EAAElC,gBAAgB,CAACmC,cAAc;QACzCC,UAAU,EAAE,QAAQ;QACpBC,cAAc,EAAE;MAClB,CAAE;MAAAf,QAAA,eAEFnB,IAAA,CAACP,IAAI;QACHW,OAAO,EAAER,UAAU,CAAC2B,WAAY;QAChCC,MAAM,EAAE5B,UAAU,CAAC6B,aAAc;QACjCd,KAAK,EAAE;UAAEe,KAAK,EAAEX,MAAM,CAACY,YAAY,CAACD,KAAK;UAAES,kBAAkB,EAAE;QAAY,CAAE;QAAAhB,QAAA,EAE5EX;MAAW,CACR;IAAC,CACE,CACZ,eAGDR,IAAA,CAACT,SAAS;MACRqC,OAAO,EAAErB,OAAQ;MACjBsB,iBAAiB,EAAC,QAAQ;MAC1BO,kBAAkB,EAAE1B,uBAAwB;MAC5CoB,OAAO,EAAEjC,gBAAgB,CAACiC,OAAQ;MAClCnB,KAAK,EAAE;QACLoB,QAAQ,EAAElC,gBAAgB,CAACwC,aAAa;QACxCC,SAAS,EAAEzC,gBAAgB,CAAC0C,cAAc;QAC1CN,UAAU,EAAE,QAAQ;QACpBC,cAAc,EAAE;MAClB,CAAE;MAAAf,QAAA,eAEFnB,IAAA,CAACP,IAAI;QAACW,OAAO,EAAC,IAAI;QAACO,KAAK,EAAE;UAAEe,KAAK,EAAEX,MAAM,CAACY,YAAY,CAACD;QAAM,CAAE;QAAAP,QAAA,EAAC;MAEhE,CAAM;IAAC,CACE,CAAC;EAAA,CACR,CAAC;AAEX;;AAEA;AACA;AACAhB,KAAK,CAACqC,UAAU,GAAG7C,SAAS,CAAC8C,KAAK","ignoreList":[]}
@@ -46,6 +46,28 @@ export const TEXTFIELD_SIZE_SPEC = {
46
46
  }
47
47
  };
48
48
 
49
+ /**
50
+ * TextInput への縦 hitSlop(片側)。small 36 / medium 42 は視覚寸法(recipe の minHeight)を
51
+ * 変えずに実効タップ標的 44 を満たすための手当て(A11Y_MIN_TAP_TARGET_44・規約 10。
52
+ * Codex スパン監査 2026-08-06: TextField が 44pt 横断の対象から漏れていた)。
53
+ * 横は付けない(input は親幅いっぱいで既に広い)。値は literal(規約 10: 導出しない)。
54
+ */
55
+ export const TEXTFIELD_VERTICAL_HIT_SLOP = {
56
+ small: 4,
57
+ medium: 1,
58
+ large: 0
59
+ };
60
+
61
+ /** size → TextInput に渡す hitSlop。0 のときは undefined(prop を付けない)。 */
62
+ export function resolveTextFieldHitSlop(size) {
63
+ const slop = TEXTFIELD_VERTICAL_HIT_SLOP[size];
64
+ if (slop === 0) return undefined;
65
+ return {
66
+ top: slop,
67
+ bottom: slop
68
+ };
69
+ }
70
+
49
71
  /** resolver の出力(label → input → helperText / errorText の縦構成の各パート)。 */
50
72
 
51
73
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["resolveStatusTokenColors","TEXTFIELD_SIZE_SPEC","small","minHeight","px","font","medium","large","resolveTextFieldStyle","theme","mode","variant","size","c","color","sem","semantic","spec","danger","colors","borderColor","backgroundColor","status","base","bg","success","input","paddingHorizontal","spacing","fontSize","typography","borderWidth","borderRadius","radius","md","label","sm","fontWeight","marginBottom","helperText","xs","marginTop","errorText","text","resolveTextFieldFocusStyle","primary"],"sourceRoot":"../../../src","sources":["components/textfield.styles.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["resolveStatusTokenColors","TEXTFIELD_SIZE_SPEC","small","minHeight","px","font","medium","large","TEXTFIELD_VERTICAL_HIT_SLOP","resolveTextFieldHitSlop","size","slop","undefined","top","bottom","resolveTextFieldStyle","theme","mode","variant","c","color","sem","semantic","spec","danger","colors","borderColor","backgroundColor","status","base","bg","success","input","paddingHorizontal","spacing","fontSize","typography","borderWidth","borderRadius","radius","md","label","sm","fontWeight","marginBottom","helperText","xs","marginTop","errorText","text","resolveTextFieldFocusStyle","primary"],"sourceRoot":"../../../src","sources":["components/textfield.styles.ts"],"mappings":"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","ignoreList":[]}
@@ -45,7 +45,9 @@ export const TOAST_SPEC = {
45
45
  *
46
46
  * 横を 6 に削ると × の実効幅が 24 + 6×2 = 36pt と 44pt を割るため、**箱の下限を 32pt に広げて**
47
47
  * 32 + 6×2 = 44pt を確保する(× は背景を持たないので幅を広げても見た目は変わらない)。
48
- * action 側はテキスト幅が可変で静的に決められないため、縦のみ 44pt を保証する。
48
+ * action 側も同じ手当て: テキスト幅は可変だが「短いラベル("OK" 等)で 44pt を割る」のは
49
+ * × と同型の問題なので、見えない箱の幅下限 32 + 横 hitSlop 6×2 = 44 で静的に保証する
50
+ * (Codex スパン監査 2026-08-06。従来は縦のみ保証で、横は「実運用では超える」頼みだった)。
49
51
  */
50
52
  export const TOAST_TAP_TARGET = {
51
53
  /** action / × 共通の hitSlop(横だけ gap/2 = 6 に絞る)。 */
@@ -58,7 +60,9 @@ export const TOAST_TAP_TARGET = {
58
60
  /** × の箱の幅の下限(横 hitSlop を削ったぶん canonical の 24 から広げる。32 + 6×2 = 44)。 */
59
61
  closeMinWidth: 32,
60
62
  /** × の箱の高さ下限(正典パターンと同値)。 */
61
- closeMinHeight: CANONICAL_TAP_TARGET.minHeight
63
+ closeMinHeight: CANONICAL_TAP_TARGET.minHeight,
64
+ /** action の箱の幅の下限(× と同じ 32 + 6×2 = 44。背景なしなので見た目不変)。 */
65
+ actionMinWidth: 32
62
66
  };
63
67
 
64
68
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["resolveStatusVariantColors","CANONICAL_TAP_TARGET","TOAST_SPEC","padding","gap","radius","elevation","messageFont","messageWeight","TOAST_TAP_TARGET","hitSlop","top","bottom","left","right","closeMinWidth","closeMinHeight","minHeight","resolveToastStyles","theme","mode","variant","bg","text","containerStyle","backgroundColor","borderRadius","spacing","flexDirection","alignItems","messageStyle","color","fontSize","typography","fontWeight"],"sourceRoot":"../../../src","sources":["components/toast.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA,SAASA,0BAA0B,QAA4B,oBAAoB;AACnF,SAASC,oBAAoB,QAAQ,uBAAuB;;AAE5D;;AAGA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAG;EACxBC,OAAO,EAAE,GAAG;EACZC,GAAG,EAAE,GAAG;EACRC,MAAM,EAAE,IAAI;EACZC,SAAS,EAAE,IAAI;EACfC,WAAW,EAAE,IAAI;EACjBC,aAAa,EAAE;AACjB,CAOC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAG;EAC9B;EACAC,OAAO,EAAE;IAAEC,GAAG,EAAE,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,IAAI,EAAE,CAAC;IAAEC,KAAK,EAAE;EAAE,CAAC;EACnD;EACAC,aAAa,EAAE,EAAE;EACjB;EACAC,cAAc,EAAEf,oBAAoB,CAACgB;AACvC,CAAU;;AAEV;AACA;AACA;AACA;;AAoBA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,KAAkB,EAClBC,IAAe,EACfC,OAAqB,EACR;EACb,MAAM;IAAEC,EAAE;IAAEC;EAAK,CAAC,GAAGvB,0BAA0B,CAACmB,KAAK,EAAEC,IAAI,EAAEC,OAAO,CAAC;EACrE,OAAO;IACLG,cAAc,EAAE;MACdC,eAAe,EAAEH,EAAE;MACnBI,YAAY,EAAEP,KAAK,CAACd,MAAM,CAACH,UAAU,CAACG,MAAM,CAAC;MAC7CF,OAAO,EAAEgB,KAAK,CAACQ,OAAO,CAACzB,UAAU,CAACC,OAAO,CAAC;MAC1CyB,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,QAAQ;MACpBzB,GAAG,EAAEe,KAAK,CAACQ,OAAO,CAACzB,UAAU,CAACE,GAAG;IACnC,CAAC;IACDE,SAAS,EAAEa,KAAK,CAACb,SAAS,CAACJ,UAAU,CAACI,SAAS,CAAC;IAChDwB,YAAY,EAAE;MACZC,KAAK,EAAER,IAAI;MACXS,QAAQ,EAAEb,KAAK,CAACc,UAAU,CAACD,QAAQ,CAAC9B,UAAU,CAACK,WAAW,CAAC,CAACyB,QAAQ;MACpEE,UAAU,EAAEf,KAAK,CAACc,UAAU,CAACC,UAAU,CAAChC,UAAU,CAACM,aAAa;IAClE;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["resolveStatusVariantColors","CANONICAL_TAP_TARGET","TOAST_SPEC","padding","gap","radius","elevation","messageFont","messageWeight","TOAST_TAP_TARGET","hitSlop","top","bottom","left","right","closeMinWidth","closeMinHeight","minHeight","actionMinWidth","resolveToastStyles","theme","mode","variant","bg","text","containerStyle","backgroundColor","borderRadius","spacing","flexDirection","alignItems","messageStyle","color","fontSize","typography","fontWeight"],"sourceRoot":"../../../src","sources":["components/toast.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA,SAASA,0BAA0B,QAA4B,oBAAoB;AACnF,SAASC,oBAAoB,QAAQ,uBAAuB;;AAE5D;;AAGA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAG;EACxBC,OAAO,EAAE,GAAG;EACZC,GAAG,EAAE,GAAG;EACRC,MAAM,EAAE,IAAI;EACZC,SAAS,EAAE,IAAI;EACfC,WAAW,EAAE,IAAI;EACjBC,aAAa,EAAE;AACjB,CAOC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAG;EAC9B;EACAC,OAAO,EAAE;IAAEC,GAAG,EAAE,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,IAAI,EAAE,CAAC;IAAEC,KAAK,EAAE;EAAE,CAAC;EACnD;EACAC,aAAa,EAAE,EAAE;EACjB;EACAC,cAAc,EAAEf,oBAAoB,CAACgB,SAAS;EAC9C;EACAC,cAAc,EAAE;AAClB,CAAU;;AAEV;AACA;AACA;AACA;;AAoBA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,KAAkB,EAClBC,IAAe,EACfC,OAAqB,EACR;EACb,MAAM;IAAEC,EAAE;IAAEC;EAAK,CAAC,GAAGxB,0BAA0B,CAACoB,KAAK,EAAEC,IAAI,EAAEC,OAAO,CAAC;EACrE,OAAO;IACLG,cAAc,EAAE;MACdC,eAAe,EAAEH,EAAE;MACnBI,YAAY,EAAEP,KAAK,CAACf,MAAM,CAACH,UAAU,CAACG,MAAM,CAAC;MAC7CF,OAAO,EAAEiB,KAAK,CAACQ,OAAO,CAAC1B,UAAU,CAACC,OAAO,CAAC;MAC1C0B,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,QAAQ;MACpB1B,GAAG,EAAEgB,KAAK,CAACQ,OAAO,CAAC1B,UAAU,CAACE,GAAG;IACnC,CAAC;IACDE,SAAS,EAAEc,KAAK,CAACd,SAAS,CAACJ,UAAU,CAACI,SAAS,CAAC;IAChDyB,YAAY,EAAE;MACZC,KAAK,EAAER,IAAI;MACXS,QAAQ,EAAEb,KAAK,CAACc,UAAU,CAACD,QAAQ,CAAC/B,UAAU,CAACK,WAAW,CAAC,CAAC0B,QAAQ;MACpEE,UAAU,EAAEf,KAAK,CAACc,UAAU,CAACC,UAAU,CAACjC,UAAU,CAACM,aAAa;IAClE;EACF,CAAC;AACH","ignoreList":[]}
@@ -24,11 +24,4 @@ export declare const CANONICAL_TAP_TARGET: {
24
24
  readonly minHeight: 24;
25
25
  readonly hitSlop: 10;
26
26
  };
27
- /**
28
- * 視覚寸法 `visual` を実効 44pt に届かせるのに必要な**片側** hitSlop(切り上げ = 安全側)。
29
- *
30
- * ⚠️ 実装の hitSlop 値をこの関数で計算しないこと(上のコメント参照)。
31
- * 使うのは (a) 値を決めるときの検算、(b) conformance テストの期待値算出。
32
- */
33
- export declare function requiredHitSlop(visual: number): number;
34
27
  //# sourceMappingURL=tap-target.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tap-target.d.ts","sourceRoot":"","sources":["../../../../src/a11y/tap-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,iEAAiE;AACjE,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD"}
1
+ {"version":3,"file":"tap-target.d.ts","sourceRoot":"","sources":["../../../../src/a11y/tap-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,iEAAiE;AACjE,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../src/components/TextField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,QAAQ,EAIR,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;GAWG;AAEH,sEAAsE;AACtE,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,SAAS,CAMzE;AAcD,UAAU,cAAc;IACtB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1C,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7E,iCAAiC;IACjC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,mEAAmE;IACnE,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,YAAY,EACZ,WAAW,EACX,OAAmB,EACnB,QAAgB,EAChB,IAAe,EACf,UAAU,EACV,SAAS,EACT,6BAA8D,EAC9D,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,eAAe,EACf,MAAM,EACN,OAAO,EACP,KAAK,EACL,MAAM,GACP,EAAE,cAAc,2CAmDhB;yBAxEe,SAAS"}
1
+ {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../src/components/TextField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,QAAQ,EAIR,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;GAWG;AAEH,sEAAsE;AACtE,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,SAAS,CAMzE;AAcD,UAAU,cAAc;IACtB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1C,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7E,iCAAiC;IACjC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,mEAAmE;IACnE,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,YAAY,EACZ,WAAW,EACX,OAAmB,EACnB,QAAgB,EAChB,IAAe,EACf,UAAU,EACV,SAAS,EACT,6BAA8D,EAC9D,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,eAAe,EACf,MAAM,EACN,OAAO,EACP,KAAK,EACL,MAAM,GACP,EAAE,cAAc,2CAqDhB;yBA1Ee,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../../src/components/Toast.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI/E,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,UAAU;IAClB,+BAA+B;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,EACX,QAAQ,EACR,uBAA+B,EAC/B,KAAK,EACL,MAAM,GACP,EAAE,UAAU,2CA0DZ;yBApEe,KAAK"}
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../../src/components/Toast.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI/E,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,UAAU;IAClB,+BAA+B;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,EACX,QAAQ,EACR,uBAA+B,EAC/B,KAAK,EACL,MAAM,GACP,EAAE,UAAU,2CAoEZ;yBA9Ee,KAAK"}
@@ -30,6 +30,18 @@ export declare const TEXTFIELD_SIZE_SPEC: Record<TextFieldSize, {
30
30
  px: SpacingKey;
31
31
  font: FontSizeKey;
32
32
  }>;
33
+ /**
34
+ * TextInput への縦 hitSlop(片側)。small 36 / medium 42 は視覚寸法(recipe の minHeight)を
35
+ * 変えずに実効タップ標的 44 を満たすための手当て(A11Y_MIN_TAP_TARGET_44・規約 10。
36
+ * Codex スパン監査 2026-08-06: TextField が 44pt 横断の対象から漏れていた)。
37
+ * 横は付けない(input は親幅いっぱいで既に広い)。値は literal(規約 10: 導出しない)。
38
+ */
39
+ export declare const TEXTFIELD_VERTICAL_HIT_SLOP: Record<TextFieldSize, number>;
40
+ /** size → TextInput に渡す hitSlop。0 のときは undefined(prop を付けない)。 */
41
+ export declare function resolveTextFieldHitSlop(size: TextFieldSize): {
42
+ top: number;
43
+ bottom: number;
44
+ } | undefined;
33
45
  /** resolver の出力(label → input → helperText / errorText の縦構成の各パート)。 */
34
46
  export interface TextFieldResolvedStyle {
35
47
  input: {
@@ -1 +1 @@
1
- {"version":3,"file":"textfield.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/textfield.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,EACX,MAAM,mBAAmB,CAAC;AAG3B,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,aAAa,EACb;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAKzD,CAAC;AAEF,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE;QACL,mDAAmD;QACnD,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,kEAAkE;QAClE,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EACE,OAAmB,EACnB,IAAe,GAChB,GAAE;IAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAA;CAAO,GAC3D,sBAAsB,CAgDxB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAEtF"}
1
+ {"version":3,"file":"textfield.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/textfield.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,EACX,MAAM,mBAAmB,CAAC;AAG3B,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,aAAa,EACb;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAKzD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAIrE,CAAC;AAEF,iEAAiE;AACjE,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,aAAa,GAClB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAI7C;AAED,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE;QACL,mDAAmD;QACnD,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,kEAAkE;QAClE,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EACE,OAAmB,EACnB,IAAe,GAChB,GAAE;IAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAA;CAAO,GAC3D,sBAAsB,CAgDxB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAEtF"}
@@ -40,7 +40,9 @@ export declare const TOAST_SPEC: {
40
40
  *
41
41
  * 横を 6 に削ると × の実効幅が 24 + 6×2 = 36pt と 44pt を割るため、**箱の下限を 32pt に広げて**
42
42
  * 32 + 6×2 = 44pt を確保する(× は背景を持たないので幅を広げても見た目は変わらない)。
43
- * action 側はテキスト幅が可変で静的に決められないため、縦のみ 44pt を保証する。
43
+ * action 側も同じ手当て: テキスト幅は可変だが「短いラベル("OK" 等)で 44pt を割る」のは
44
+ * × と同型の問題なので、見えない箱の幅下限 32 + 横 hitSlop 6×2 = 44 で静的に保証する
45
+ * (Codex スパン監査 2026-08-06。従来は縦のみ保証で、横は「実運用では超える」頼みだった)。
44
46
  */
45
47
  export declare const TOAST_TAP_TARGET: {
46
48
  /** action / × 共通の hitSlop(横だけ gap/2 = 6 に絞る)。 */
@@ -54,6 +56,8 @@ export declare const TOAST_TAP_TARGET: {
54
56
  readonly closeMinWidth: 32;
55
57
  /** × の箱の高さ下限(正典パターンと同値)。 */
56
58
  readonly closeMinHeight: 24;
59
+ /** action の箱の幅の下限(× と同じ 32 + 6×2 = 44。背景なしなので見た目不変)。 */
60
+ readonly actionMinWidth: 32;
57
61
  };
58
62
  /**
59
63
  * slot 構成(toast.recipe 各 variant の containerStyle / messageStyle と 1:1。
@@ -1 +1 @@
1
- {"version":3,"file":"toast.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/toast.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEV,cAAc,EAGd,eAAe,EACf,WAAW,EAGX,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGpF,qDAAqD;AACrD,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;CActB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB;IAC3B,iDAAiD;;;;;;;IAEjD,sEAAsE;;IAEtE,4BAA4B;;CAEpB,CAAC;AAEX;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,KAAK,CAAC;QACrB,UAAU,EAAE,QAAQ,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,kEAAkE;IAClE,SAAS,EAAE,cAAc,CAAC;IAC1B,kDAAkD;IAClD,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;KAC7B,CAAC;CACH;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GACpB,WAAW,CAkBb"}
1
+ {"version":3,"file":"toast.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/toast.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEV,cAAc,EAGd,eAAe,EACf,WAAW,EAGX,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGpF,qDAAqD;AACrD,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;CActB,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,gBAAgB;IAC3B,iDAAiD;;;;;;;IAEjD,sEAAsE;;IAEtE,4BAA4B;;IAE5B,wDAAwD;;CAEhD,CAAC;AAEX;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,KAAK,CAAC;QACrB,UAAU,EAAE,QAAQ,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,kEAAkE;IAClE,SAAS,EAAE,cAAc,CAAC;IAC1B,kDAAkD;IAClD,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;KAC7B,CAAC;CACH;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GACpB,WAAW,CAkBb"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "melta-app",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "melta for APP — melta デザインシステムの React Native UI kit。melta-contracts(デザイン契約)を single source of truth に RN 実装でその契約を満たす。アプリ本体ではなくライブラリ。",
5
5
  "license": "MIT",
6
6
  "homepage": "https://app.melta.tsubotax.com",
@@ -27,12 +27,6 @@ export const CANONICAL_TAP_TARGET = {
27
27
  hitSlop: 10,
28
28
  } as const;
29
29
 
30
- /**
31
- * 視覚寸法 `visual` を実効 44pt に届かせるのに必要な**片側** hitSlop(切り上げ 安全側)。
32
- *
33
- * ⚠️ 実装の hitSlop 値をこの関数で計算しないこと(上のコメント参照)。
34
- * 使うのは (a) 値を決めるときの検算、(b) conformance テストの期待値算出。
35
- */
36
- export function requiredHitSlop(visual: number): number {
37
- return Math.max(0, Math.ceil((MIN_TAP_TARGET - visual) / 2));
38
- }
30
+ // requiredHitSlop(必要 hitSlop の導出関数)は置かない — 実装値は literal 規約で導出禁止、
31
+ // テスト側も「実効 = 視覚 + slop×2 >= 44」を直接検算するため使い道が無い(dead code 化して撤去、
32
+ // Codex スパン監査 2026-08-06)。値を決めるときの検算は手計算 ceil((44 − 視覚) / 2) で足りる。
@@ -36,6 +36,7 @@ import {
36
36
  import { useTheme } from "../theme/index.js";
37
37
  import { CONTRACTS } from "../contracts/contract-types.js";
38
38
  import {
39
+ resolveTextFieldHitSlop,
39
40
  resolveTextFieldStyle,
40
41
  resolveTextFieldFocusStyle,
41
42
  type TextFieldSize,
@@ -149,6 +150,8 @@ export function TextField({
149
150
  <View style={style} testID={testID}>
150
151
  <RNText style={resolved.label}>{label}</RNText>
151
152
  <TextInput
153
+ // small 36 / medium 42 の視覚寸法のまま実効タップ標的 44 を満たす(規約 10、値は literal)
154
+ hitSlop={resolveTextFieldHitSlop(size)}
152
155
  value={value}
153
156
  onChangeText={onChangeText}
154
157
  placeholder={placeholder}
@@ -88,7 +88,17 @@ export function Toast({
88
88
  {actionLabel != null && onAction != null && (
89
89
  // 横 hitSlop は gap/2(= 6)まで。10 のままだと隣の × と当たり判定が 8pt 重なり、
90
90
  // 手前に描かれる × が勝って「元に戻す」が押せない(toast.styles.ts の TOAST_TAP_TARGET 参照)。
91
- <Pressable onPress={onAction} accessibilityRole="button" hitSlop={TOAST_TAP_TARGET.hitSlop}>
91
+ <Pressable
92
+ onPress={onAction}
93
+ accessibilityRole="button"
94
+ hitSlop={TOAST_TAP_TARGET.hitSlop}
95
+ // 短いラベル("OK" 等)でも横の実効 44 を割らないよう × と同じ幅下限(背景なし = 見た目不変)
96
+ style={{
97
+ minWidth: TOAST_TAP_TARGET.actionMinWidth,
98
+ alignItems: "center",
99
+ justifyContent: "center",
100
+ }}
101
+ >
92
102
  <Text
93
103
  variant={TOAST_SPEC.messageFont}
94
104
  weight={TOAST_SPEC.messageWeight}
@@ -44,6 +44,27 @@ export const TEXTFIELD_SIZE_SPEC: Record<
44
44
  large: { minHeight: 48, px: "3", font: "lg" },
45
45
  };
46
46
 
47
+ /**
48
+ * TextInput への縦 hitSlop(片側)。small 36 / medium 42 は視覚寸法(recipe の minHeight)を
49
+ * 変えずに実効タップ標的 44 を満たすための手当て(A11Y_MIN_TAP_TARGET_44・規約 10。
50
+ * Codex スパン監査 2026-08-06: TextField が 44pt 横断の対象から漏れていた)。
51
+ * 横は付けない(input は親幅いっぱいで既に広い)。値は literal(規約 10: 導出しない)。
52
+ */
53
+ export const TEXTFIELD_VERTICAL_HIT_SLOP: Record<TextFieldSize, number> = {
54
+ small: 4,
55
+ medium: 1,
56
+ large: 0,
57
+ };
58
+
59
+ /** size → TextInput に渡す hitSlop。0 のときは undefined(prop を付けない)。 */
60
+ export function resolveTextFieldHitSlop(
61
+ size: TextFieldSize,
62
+ ): { top: number; bottom: number } | undefined {
63
+ const slop = TEXTFIELD_VERTICAL_HIT_SLOP[size];
64
+ if (slop === 0) return undefined;
65
+ return { top: slop, bottom: slop };
66
+ }
67
+
47
68
  /** resolver の出力(label → input → helperText / errorText の縦構成の各パート)。 */
48
69
  export interface TextFieldResolvedStyle {
49
70
  input: {
@@ -62,7 +62,9 @@ export const TOAST_SPEC = {
62
62
  *
63
63
  * 横を 6 に削ると × の実効幅が 24 + 6×2 = 36pt と 44pt を割るため、**箱の下限を 32pt に広げて**
64
64
  * 32 + 6×2 = 44pt を確保する(× は背景を持たないので幅を広げても見た目は変わらない)。
65
- * action 側はテキスト幅が可変で静的に決められないため、縦のみ 44pt を保証する。
65
+ * action 側も同じ手当て: テキスト幅は可変だが「短いラベル("OK" 等)で 44pt を割る」のは
66
+ * × と同型の問題なので、見えない箱の幅下限 32 + 横 hitSlop 6×2 = 44 で静的に保証する
67
+ * (Codex スパン監査 2026-08-06。従来は縦のみ保証で、横は「実運用では超える」頼みだった)。
66
68
  */
67
69
  export const TOAST_TAP_TARGET = {
68
70
  /** action / × 共通の hitSlop(横だけ gap/2 = 6 に絞る)。 */
@@ -71,6 +73,8 @@ export const TOAST_TAP_TARGET = {
71
73
  closeMinWidth: 32,
72
74
  /** × の箱の高さ下限(正典パターンと同値)。 */
73
75
  closeMinHeight: CANONICAL_TAP_TARGET.minHeight,
76
+ /** action の箱の幅の下限(× と同じ 32 + 6×2 = 44。背景なしなので見た目不変)。 */
77
+ actionMinWidth: 32,
74
78
  } as const;
75
79
 
76
80
  /**