1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// SPDX-License-Identifier: MPL-2.0
// SPDX-FileCopyrightText: 2026 FernTech
//! Tier-3 style protocol for `Splitter`. See `docs/styling-system.md`.
//!
//! The `Splitter` widget owns all input handling (drag, keyboard,
//! collapse, accessibility) and delegates only the *paint* of each
//! divider handle to a [`SplitterStyle`] impl. Layout-affecting
//! dimensions (gutter thickness, min pane sizes, keyboard step, snap
//! offset) live on the `SplitterModel`, not here — the styling-system
//! rule is that anything consumed by `place_children` must be resolved
//! before layout, whereas a style body is built lazily and paints at
//! paint time.
//!
//! The IntUI default ([`crate::styles`]'s `RecipeSplitterStyle`, in
//! `teksilo-widgets`) reproduces the thin-line-with-hover-dwell-focus
//! look out of the box; apps install a different look per-call via
//! `Splitter::style(...)` or theme-wide via `theme.style_slots.splitter`.
use Rc;
use Orientation;
use crateBuildContext;
use crateFocusOrigin;
use crateSignal;
use crateWidgetId;
/// Reactive inputs handed to a [`SplitterStyle`] when it builds one
/// divider handle's visual body. Every field a default impl repaints on
/// is a `Signal`, so the body re-renders without a rebuild.
/// The visual contract for a `Splitter` divider handle.
///
/// `make_handle` returns the `WidgetId` of a leaf (or subtree) that
/// paints the divider chrome. The host `Splitter` sizes it to the
/// model's gutter thickness × the cross axis and routes all input
/// itself — the body is purely presentational and should mark itself
/// hidden from the accessibility tree (the splitter handle owns the
/// `Role::Splitter` node).
pub type SharedSplitterStyle = ;