Commit 1a5f57c
Boolean property: use CdxCheckbox instead of CdxToggleSwitch (#850)
* Boolean property: use CdxCheckbox instead of CdxToggleSwitch
Codex's ToggleSwitch usage guideline says:
Use the ToggleSwitch component only where an instant change in the
user-interface based on their assigned action is intended. For
non-instant selections and selection groups, use Checkbox instead.
BooleanInput is used in two non-instant contexts:
- Subject editor: the value lands in a form gated by Save.
- Schema editor's "Initial value" control: also lives inside the
property-definition form, gated by Save.
Both fit the "non-instant selection" case, so Checkbox is the
guideline-correct widget.
Local to BooleanInput.vue: same :model-value / @update:model-value
wiring; the toggle's :align-switch and :label props are dropped (no
Checkbox equivalents), the label text and optional description icon
move into the Checkbox default slot.
No data-shape change: BooleanInput still emits BooleanValue(true/false)
on change, still renders checked iff modelValue.boolean === true, and
still defaults to false for undefined / wrong-type input (the "Boolean
is never unset" choice from PR #837).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* BooleanInput: field heading and inline label match the call site
Shape field labelling to fit both call sites:
- Inline checkbox label is the property's own name (e.g. "Is public").
This is what the subject editor showed before the swap and what
users see when they toggle the value.
- The CdxField #label heading shows the caller-supplied props.label,
but only when it differs from the property name. The schema editor
passes "Initial value" so the heading renders and clarifies what
the bare checkbox at the bottom of the property-definition form
represents (the default for new subjects, not a value on the
property itself). The subject editor passes the property name as
the label, so the heading would just repeat the inline checkbox
label; suppressed.
- :optional is not set on the CdxField, because a Boolean value is
always defined, so an "(optional)" affordance would be misleading.
A short template comment documents both the heading-rule and the
:optional omission so they don't read as oversights.
Tests grow by two cases pinning both heading branches (shown when
label differs from property name, hidden when they match). The
fixture now sets a stable property name "Is public" so the inline
label has a meaningful assertion target.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 16e7974 commit 1a5f57c
2 files changed
Lines changed: 52 additions & 29 deletions
File tree
- resources/ext.neowiki
- src/components/Value
- tests/components/Value
Lines changed: 16 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
8 | 14 | | |
9 | | - | |
10 | | - | |
11 | 15 | | |
12 | 16 | | |
13 | | - | |
| 17 | + | |
14 | 18 | | |
15 | 19 | | |
16 | 20 | | |
17 | 21 | | |
18 | 22 | | |
19 | 23 | | |
20 | 24 | | |
21 | | - | |
| 25 | + | |
22 | 26 | | |
23 | 27 | | |
24 | 28 | | |
| |||
27 | 31 | | |
28 | 32 | | |
29 | 33 | | |
30 | | - | |
31 | | - | |
| 34 | + | |
| 35 | + | |
32 | 36 | | |
33 | 37 | | |
34 | 38 | | |
| |||
47 | 51 | | |
48 | 52 | | |
49 | 53 | | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
50 | 58 | | |
51 | 59 | | |
52 | 60 | | |
| |||
Lines changed: 36 additions & 21 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
38 | | - | |
| 37 | + | |
| 38 | + | |
39 | 39 | | |
40 | 40 | | |
41 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
42 | 57 | | |
43 | 58 | | |
44 | | - | |
| 59 | + | |
45 | 60 | | |
46 | 61 | | |
47 | | - | |
| 62 | + | |
48 | 63 | | |
49 | 64 | | |
50 | | - | |
| 65 | + | |
51 | 66 | | |
52 | 67 | | |
53 | | - | |
| 68 | + | |
54 | 69 | | |
55 | 70 | | |
56 | | - | |
| 71 | + | |
57 | 72 | | |
58 | 73 | | |
59 | | - | |
| 74 | + | |
60 | 75 | | |
61 | 76 | | |
62 | | - | |
| 77 | + | |
63 | 78 | | |
64 | 79 | | |
65 | | - | |
| 80 | + | |
66 | 81 | | |
67 | 82 | | |
68 | | - | |
| 83 | + | |
69 | 84 | | |
70 | 85 | | |
71 | 86 | | |
72 | 87 | | |
73 | | - | |
| 88 | + | |
74 | 89 | | |
75 | 90 | | |
76 | | - | |
| 91 | + | |
77 | 92 | | |
78 | 93 | | |
79 | 94 | | |
| |||
83 | 98 | | |
84 | 99 | | |
85 | 100 | | |
86 | | - | |
| 101 | + | |
87 | 102 | | |
88 | 103 | | |
89 | 104 | | |
| |||
108 | 123 | | |
109 | 124 | | |
110 | 125 | | |
111 | | - | |
| 126 | + | |
112 | 127 | | |
113 | 128 | | |
114 | | - | |
| 129 | + | |
115 | 130 | | |
116 | 131 | | |
117 | 132 | | |
| |||
120 | 135 | | |
121 | 136 | | |
122 | 137 | | |
123 | | - | |
| 138 | + | |
124 | 139 | | |
125 | 140 | | |
126 | 141 | | |
| |||
0 commit comments