# Bone Flow #032 DateTimeBox Specification v1.0

Component ID: #032  
Component: DateTimeBox  
Implementation Version: 1.0.23  
Status: Development  
Standard: Bone Flow Development Standard v1.0

## 1. 基準

共通INPUTの正本は #031 TimeBox v1.0.8 とする。#032は共通Property / Preview / Security / BoneJoint / WAIT-BLOCK / Smoke-Validation / Completionを削除・簡略化せず、DateTimeBox固有差分だけを追加する。

## 2. Data Contract

### 2.1 Editing

`YYYY-MM-DDTHH:mm:ss | ""`

- `T` 固定
- 年4桁 / 月日2桁 / 時分秒2桁
- 24時間制、秒00～59
- Gregorian calendarの実在日付を手動検証
- 小数秒直接入力不可
- 空白区切り不可
- 前後空白の自動trim不可
- Date object / timestamp / timezone付き文字列 / locale文字列不可

### 2.2 Canonical

`YYYY-MM-DDTHH:mm:ss.ffffff | null`

- canonical fractional secondsは6桁固定
- trusted `setValue / Bone IN / Joint IN` は6桁を保持可能
- `Date.parse()` は使用しない
- timezone変換を行わない

### 2.3 Normal commit

通常の Enter / blur / API `commit()` は editing value をcanonicalへ変換し、fractionを `.000000` とする。

- `committedValue`: `.000000`
- `Bone.value`: `.000000`
- 通常commit OUT: `.000000`
- 時計由来fractionを生成しない

### 2.4 Invoke

`invoke()` のみ呼び出し時点の時計から6桁fractionを生成する。生成値はOUTとPreview表示へ反映するが、committedValue / Bone.valueへ保存しない。

- 保存値: `.000000`
- `Bone.value`: `.000000`
- input表示: 秒まで
- invoke `outputValue / output.value`: 時計由来6桁
- 生成fractionを保存値へ書き戻さない
- 利用可能な時計精度を超える桁を乱数等で捏造しない

## 3. Display Contract

- `fractionDisplayDigits`: 0～6
- default: 3
- 非アクティブ表示だけfractionを表示
- 入力中は秒まで
- `iso-local`: `YYYY-MM-DD HH:mm:ss[.fraction]`
- `jp`: 年月日 時分秒形式

## 4. Validation

- required
- min / max
- minute step
- real Gregorian date
- min/max秒指定は内部で min `.000000` / max `.999999`
- canonical6 boundaryも受理可能

## 5. Picker

正式依存は `#025 DatePicker v1.0.4 -> #024 Calendar v1.0.6`、`#026 TimePicker v1.0.4`、`#022 Bone Hover Border Effect v1.0.1` とする。#032はPicker UIを独自実装せず、選択RETURNだけを受けてDateTimeBox固有契約へ戻す。

- メイン入力は起動用Calendarアイコン1個だけを表示し、#032の1つのDateTime Picker内で日付欄 / Clock切替を行う
- #025 DatePickerが #024 Calendar をDateTime Picker内へ表示し、日付セル選択は候補日として保持する
- DateTime Picker内のClock切替から #026 TimePickerを表示し、時・分・秒候補選択を #026 へ委譲する
- #026は `showHour=true / showMinute=true / showSecond=true`
- Calendar / Timeの候補は外側の「候補を反映」で一括して #032 editing Previewへ反映し、DateTime Picker全体を閉じる
- #026内部の「閉じる」「選択」は#032内では表示しない。外側の「候補を反映」で候補日＋時＋分＋秒を一括して #032 editing Previewへ反映する
- 秒列は00～59を表示し、秒候補を選択できる。minute stepは秒列へ適用しない
- minute step `1 / 5 / 10 / 15 / 30` を #026へそのまま渡す。`any` はPicker表示上のみ1分刻みへ写像する
- #032のstepは「分刻み」であり、#024 Calendarの日付stepへ流用しない。Calendar date stepは1固定
- min / max は #025の日付範囲と、DatePickerが保持する候補日に応じた #026の時刻範囲（HH:mm:ss）へ外側反映前から再同期する
- Theme / clockVisual / disabled / readonly を両Pickerへ委譲する
- #024 Calendar設定として `weekStart / locale / annotations / showTasks` を #025経由で委譲する
- #024で保存した `{ "type": "calendar.annotations", "value": {...} }` JSONをtestページから読み込み可能とする
- native browser date/time popupは使用しない

## 6. Shared INPUT Property

必須保持:

- 日本語 / English Property
- Theme default/dark/light/neon
- backgroundColor theme/transparent/#RRGGBB
- appearance
- Parent Dependency
- Parent Preview設定
- 9方向配置
- inputAlign
- inactiveDisplayFormat
- Font FIT/fixed
- Active Border Effect
- Effect Color theme/#RRGGBB
- Effect Direction / Speed

## 7. Bone Joint Connection Image

5ケースを `BoneJoint.evaluate()` の実結果で生成する。診断文字列を固定HTMLで決め打ちしない。

- normal IN/OUT
- IN target missing
- OUT target missing
- IN type mismatch
- OUT type mismatch

診断: Source Field Exists / Target Field Exists / Compatibility / Joint State / Raw State。Raw Stateも `BoneJoint.evaluate()` の実結果を表示し、描画はBoneJoint正式APIを使用する。

## 8. Security

Security TestはPreview本体とは別Instance。

- accepted / blocked
- code
- message
- preservedValue
- JSON result
- Before / After / Preview非変更

Getter / Proxy等を暗黙文字列化してはならない。

## 9. OUT WAIT / BLOCKED

Delivery Test専用 `deliveryBox` を使う。通常Preview stateをテストデータで上書きしない。

WAIT/BLOCK責務は #002 Bone Joint Delivery Channelへ委譲する。

## 10. Runtime QA / Completion

Browser Runtimeはpackage生成だけではPASS扱いにしない。

Runtime ALL PASS条件:

1. Smoke ALL PASS
2. Validation ALL PASS
3. WAITを手動実行し、Target READY後に実配送成功
4. BLOCKを手動実行し、危険データがTargetへ未配送であることを実確認

Completion条件:

1. Runtime ALL PASS
2. WAIT目視確認
3. BLOCK目視確認

Completion UIは #027/#031基準の7項目表示と完了/解除操作を維持する。

## 11. Package / Installer

- component-specific dependency SHA lockは使用しない
- `MANIFEST.sha256` はpackage integrityを検証する
- Installerは#001/#002に加え、#022 Bone Hover Border Effect v1.0.1 / #024 Calendar v1.0.6 / #025 DatePicker v1.0.4（Calendar v1.0.6）/ #026 TimePicker v1.0.4 の実在とversionを確認する
- install後にHTML/JSのVersionを照合する
- 既存同名ファイルはbackupへ退避する


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

- アクティブ時の枠Effect描画を `#022 Bone Hover Border Effect v1.0.1` へ委譲する。
- #032 は input の `focus / blur` を Active ON / OFF として #022 へ通知する。
- Effect種別は `normal / neon / spin / cross / blink`。
- Effect Color / Direction / Speed は #032 Property から #022 へ渡す。
- #032 内で独自の枠Effect描画を再実装しない。
- 通常入力 `YYYY-MM-DDTHH:mm:ss`、通常commit `.000000`、invoke時のみ時計由来6桁OUT、Picker、Security、#002 WAIT/BLOCKED、接続イメージ、Completion の既存責務は変更しない。
