Skip to main content

HandwritingInput

Handwriting input canvas composite β€” DigitalInk + RecognitionBridge + BrushConfiguration assembly (Layer 2 Composite).

Status​

KeyValue
Layercomposite
TierL1
Statuswip
Version0.9.0
PriceFree (free)
CategoryInput & UX

Overview​

Overview​

HandwritingInput is multi-saas-kit's first Layer 2 Composite Plugin, assembled from 3 base plugins. It provides a single entry point for the canvas stroke input β†’ provider recognition call β†’ normalized result flow.

Dependencies (3 base plugins)​

PluginRoleLayer
DigitalInkStroke standard + validationL0 Foundation
BrushConfigurationCanvas / brush rendering configL0 Foundation
RecognitionBridgeRecognition API adaptersL1 Core

Core Component​

HandwritingInputService​

Single entry point process() encapsulating 5 steps:

1. StrokeData::fromArray($payload)        ← DigitalInk validation
2. (optional) Normalize round-trip ← Coordinate cleanup
3. RecognizerInterface::recognize ← RecognitionBridge
4. (optional) Normalize brush config ← Brush meta attachment
5. (optional) Compute bounding box ← Drawing area meta
β†’ HandwritingInputResult

HandwritingInputResult (DTO)​

{
ok, provider, elapsed_ms, candidates, message,
canvas: { width, height },
brush: { line_width, stroke_color, ... }, // when include_brush=true
bounding_box: { min_x, max_x, width, ... } // when include_bounding=true
}

Configuration​

return [
'enabled' => env('PLG_HANDWRITING_INPUT_ENABLED', true),
'flow' => [
'normalize_strokes' => false,
'include_brush' => true,
'include_bounding' => true,
],
];

Usage​

$service = new HandwritingInputService(
recognizer: $chain,
strokeNormalizer: new StrokeNormalizer,
brushNormalizer: BrushConfigNormalizer::fromConfig(config('brush-configuration')),
flow: config('handwriting-input.flow'),
);

$result = $service->process(
payload: ['ink' => [...], 'width' => 200, 'height' => 100],
brushInput: ['line_width' => 8],
options: ['language' => 'en', 'mode' => 'numeric'],
);

Scope​

HandwritingInput only composes the input stack. It does not include domain scoring, learning evaluation, submission workflows, or UI screens. Recognition provider operations and billing belong to the configured provider project, and SaaS-specific business rules belong to the consumer side.

License​

MIT

Dependencies​

Demos​


πŸ›’ View on Plugin Store: store.codebase.how/plugins/handwriting-input