Extend declarative configuration UI controls #42

Closed
opened 2026-05-21 06:27:44 +00:00 by steve · 0 comments
Owner

Expand manifest-declared configuration schema rendering so plugins can use
normal settings controls without custom DOM for common settings surfaces.

Context

The configuration system already supports schema-backed settings. New Lapis
plugins should be able to express common settings declaratively, while the
trusted DOM compatibility path remains available for Obsidian-style custom
settings tabs.

Acceptance Criteria

  • Configuration schemas support enum/select, array-of-enum multiselect,
    numeric ranges, color values, object groups, and descriptions.
  • Settings UI renders each supported schema shape with an appropriate control.
  • Defaults are applied on first load and preserved across reloads.
  • Invalid enum, range, and array values are rejected with useful validation
    messages.
  • Plugin-owned setting keys remain namespaced and uninstall-safe.
  • Tests cover every new control type, default application, validation, and
    persistence.
  • The configuration spec documents supported schema features and fallback
    behavior for unsupported schema shapes.
  • Settings components use the same shadcn/svelte components as the rest of the
    application. Re-use anything in packages/ui as required and import any useful
    components from shadcn/svelte that don't exist in the ui package.
  • Components should follow the same css styling as the rest of the app.

Notes

This reduces pressure to use plugin-owned DOM for routine settings UI.

Implementation Summary

Expanded declarative configuration schemas with nested object groups, enum-array multiselects, runtime validation/default materialization, schema-driven workspace controls, and updated spec coverage.

Expand manifest-declared configuration schema rendering so plugins can use normal settings controls without custom DOM for common settings surfaces. ## Context The configuration system already supports schema-backed settings. New Lapis plugins should be able to express common settings declaratively, while the trusted DOM compatibility path remains available for Obsidian-style custom settings tabs. ## Acceptance Criteria - Configuration schemas support enum/select, array-of-enum multiselect, numeric ranges, color values, object groups, and descriptions. - Settings UI renders each supported schema shape with an appropriate control. - Defaults are applied on first load and preserved across reloads. - Invalid enum, range, and array values are rejected with useful validation messages. - Plugin-owned setting keys remain namespaced and uninstall-safe. - Tests cover every new control type, default application, validation, and persistence. - The configuration spec documents supported schema features and fallback behavior for unsupported schema shapes. - Settings components use the same shadcn/svelte components as the rest of the application. Re-use anything in `packages/ui` as required and import any useful components from `shadcn/svelte` that don't exist in the ui package. - Components should follow the same css styling as the rest of the app. ## Notes This reduces pressure to use plugin-owned DOM for routine settings UI. ## Implementation Summary Expanded declarative configuration schemas with nested object groups, enum-array multiselects, runtime validation/default materialization, schema-driven workspace controls, and updated spec coverage. <!-- backlog:task_id=TASK-PLUGIN-039 source_spec=spec/src/30-cross-package-contracts/configuration-and-settings.md -->
steve 2026-05-21 09:54:31 +00:00
  • closed this issue
  • added
    done
    and removed
    open
    labels
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lapis-notes/lapis#42
No description provided.