# Bone Flow #032 - DateTimeBox

Version: 1.0.23  
Status: Development  
Standard: Bone Flow Development Standard v1.0

## 役割

#032 DateTimeBox は、Gregorian local date + 24時間制 time を1つの入力UIとして扱う INPUT Component です。共通INPUT UI / Property / Joint / Security / WAIT-BLOCK / Runtime QA / Completion は #031 TimeBox v1.0.8 を基準とし、DateTimeBox固有差分だけを持ちます。

## 値と入力

- 通常編集文字列: `YYYY-MM-DDTHH:mm:ss`
- 区切りは `T` 固定。空白区切り・前後空白を受理しません。
- 通常ユーザー入力で小数秒を直接入力できません。
- 内部 canonical: `YYYY-MM-DDTHH:mm:ss.ffffff | null`
- 通常 commit: 秒入力を canonical 化し、小数秒は必ず `.000000` として `committedValue / Bone.value / 通常OUT` に保存・配送します。
- trusted `setValue / Bone IN / Joint IN`: 6桁 canonical を受理し、その6桁を保持します。

## 呼び出し（invoke）と小数秒

`invoke()` は通常 commit と役割を分離します。

1. 現在の通常編集値を検証し、保存値は `.000000` で確定します。
2. 呼び出した瞬間の時計から利用可能な精度だけを6桁文字列へ反映します。
3. 生成したOUT値はPreview表示にも反映しますが、committedValue / Bone.valueには保存しません。
3. 生成した6桁は **invoke OUT の value にだけ**付与します。
4. `committedValue / Bone.value / input` へ生成小数秒を書き戻しません。

時計がミリ秒精度しか持たない環境では下3桁は `000` になります。乱数等で存在しない精度を捏造しません。

## 表示

- `fractionDisplayDigits`: 0～6
- デフォルト: 3桁
- 非アクティブ表示のみ指定桁数を表示します。
- 入力中は常に秒までで、小数秒入力欄にはしません。
- `inactiveDisplayFormat`: ISO-local表示 / 日本語表示

## Date / Time picker

正式Pickerへ委譲します。

- Date: `#032 DateTimeBox -> #025 DatePicker v1.0.4 -> #024 Calendar v1.0.6`
- Time: `#032 DateTimeBox -> #026 TimePicker v1.0.4`
- メイン入力には #025 のカレンダーアイコンだけを表示します。
- メイン入力は起動用Calendarアイコン1個だけを表示し、1つのDateTime Picker内で日付欄 / Clock切替によりCalendarとTimePickerを切り替えます。
- #026は時・分・秒の3列を表示します。時は00～23、分は`step`分刻み、秒は00～59です。`step`は秒列へ適用しません。
- Calendarの日付セルは候補日を保持し、外側の「候補を反映」で日付＋時刻候補を #032 editing Previewへ反映してDateTime Picker全体を閉じます。
- #026 TimePicker内の「閉じる」「選択」は#032内では表示せず、時・分・秒候補を外側の「候補を反映」で日付候補と一括反映します。
- 秒候補は #026 の秒列（00～59）で選択し、外側の「候補を反映」まで #032 本体値は変更しません。
- 分: `step = 1 / 5 / 10 / 15 / 30`。`any` はPicker候補だけ1分刻みに写像します。
- `min / max` は #025の日付範囲と、DatePickerで保持している候補日に応じた #026の選択可能時刻（秒込み）へ反映します。
- #024 Calendarの日付stepは1固定です。#032の分stepを日付stepへ適用しません。
- `weekStart / locale / annotations / showTasks` を #025経由で #024へ渡します。
- testページでは #024 が保存した `calendar.annotations` JSONを直接読み込めます。
- `clockVisual` は #025/#026へ委譲し、Font Awesome相当内蔵SVG / 絵文字を切替します。CDNは使用しません。
- native browser date/time popupは使用しません。

## Property / Preview

共通INPUT基準を維持します。

- Property 日本語 / English
- Theme: default / dark / light / neon
- 背景: Theme / transparent / 指定色
- appearance: normal / flat / borderless
- Parent Dependency
- Parent Preview: 幅 / 高さ / 文字位置 / 背景色 / 文字色 / 角丸
- 単体時: 幅 / 高さ / 9方向配置 / 入力文字位置
- Font FIT / fixed
- Active Border Effect: normal / neon / spin / cross / blink（#022へ委譲）
- Effect指定色 / direction / speed
- Preview内の `呼び出し（OUT再現）` ボタン
- 通常commitボタンはProperty側に独立して配置

## 接続イメージ

#027基準の正式接続イメージを使用します。固定HTMLで判定値を偽装しません。

- `BoneJoint.evaluate()` の実結果を使用
- 正常 IN / OUT
- IN Target Field不存在
- OUT Target Field不存在
- IN 型不一致
- OUT 型不一致
- Source Field Exists / Target Field Exists / Compatibility / Joint State / Raw State の実結果診断
- `BoneJoint.drawLine()` による実描画
- IN青 / OUT緑 / 型不一致橙 / エラー赤 の凡例

## Untrusted IN / Security Test

Security Testは通常Previewとは別Instanceで実行します。

- 正常6桁 canonical
- 3桁 canonical拒否
- Getter拒否
- Proxy trap拒否
- 実在しない日付拒否
- Date object拒否
- Security Gateに `code + message` を表示
- 下段に実結果JSON / Before / After / `Preview: 変更なし` を表示

## OUT WAIT / BLOCKED

OUTテストは専用 `deliveryBox` を使用し、通常Previewから完全分離します。

- WAIT中のFIFO snapshot
- Target ready後の自動配送
- Guard BLOCK時はTargetへ配送しない
- WAIT / BLOCK操作で通常Previewの editing / committed / Bone.value / OUT状態を変更しない

## Completion

Completionは以下を個別表示します。

- Component
- Version
- Status
- Runtime QA
- WAIT目視
- BLOCK目視
- Completion Flag

Runtime ALL PASS は `Smoke ALL PASS + Validation ALL PASS + WAIT実操作成功 + BLOCK実操作成功` の4条件で成立します。

そのうえで `WAIT目視 + BLOCK目視` のチェックまで揃うまで完了ボタンを有効化しません。

## Test URL

`http://localhost/BoneFlow/test/bone-datetimebox.html`

Package作成時点ではBrowser Runtimeを実施済みとは扱いません。localhostでRuntime QAを実行して確認してください。


## v1.0.23 #022 Active Border Effect正式委譲

- Focus / Blur を #022 の Active ON / OFF へ委譲。
- Effect: `normal / neon / spin / cross / blink`。
- 色・方向・速度も #022 へ渡す。
- DateTimeBox固有の小数秒6桁規約、#025/#024/#026 Picker、Security、WAIT/BLOCKED、接続イメージ、Completion は変更しない。
