@pi-unipi/footer 3.0.0-alpha.22 → 3.0.0-alpha.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +3 -3
  2. package/src/config.ts +39 -19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/footer",
3
- "version": "3.0.0-alpha.22",
3
+ "version": "3.0.0-alpha.24",
4
4
  "description": "Persistent status bar for Unipi — subscribes to UNIPI_EVENTS and renders key stats from all unipi packages",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -32,8 +32,8 @@
32
32
  "access": "public"
33
33
  },
34
34
  "dependencies": {
35
- "@pi-unipi/core": "3.0.0-alpha.22",
36
- "@pi-unipi/background-tasks": "3.0.0-alpha.22"
35
+ "@pi-unipi/core": "3.0.0-alpha.24",
36
+ "@pi-unipi/background-tasks": "3.0.0-alpha.24"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@earendil-works/pi-coding-agent": "^0.87.1",
package/src/config.ts CHANGED
@@ -93,44 +93,63 @@ registerSettings({
93
93
  {
94
94
  title: "General",
95
95
  fields: [
96
- { key: "enabled", type: "boolean", label: "Footer enabled" },
96
+ { key: "enabled", type: "boolean", label: "Footer enabled", description: "The status line above the input. Off removes it and every segment entirely." },
97
+ { key: "glanceMode", type: "boolean", label: "Glance mode", description: "The framed input surface with status in its bottom border. Applies to new renders." },
98
+ {
99
+ key: "iconStyle",
100
+ type: "enum",
101
+ label: "Icon style",
102
+ description: "Glyph set for the brand and segment icons (glance frame included).",
103
+ options: [
104
+ { value: "emoji", label: "emoji", description: "emoji glyphs, always render" },
105
+ { value: "nerd", label: "nerd font", description: "nerd-font glyphs, need a patched font" },
106
+ { value: "text", label: "text only", description: "no icons, plain text labels" },
107
+ ],
108
+ },
109
+ ],
110
+ },
111
+ {
112
+ title: "Classic footer",
113
+ description: "Used only when Glance mode is off.",
114
+ advanced: true,
115
+ fields: [
97
116
  {
98
117
  key: "preset",
99
118
  type: "enum",
100
119
  label: "Preset",
101
- options: ["default", "classic", "minimal", "dense", "devops", "zen"],
102
- description: "Segment layout preset (glance mode uses its own frame)",
120
+ description: "Which segments appear and in what order.",
121
+ options: [
122
+ { value: "default", label: "default", description: "model, git, context, cost, clock — the balanced line" },
123
+ { value: "classic", label: "classic", description: "the pre-v3 view with more status segments" },
124
+ { value: "minimal", label: "minimal", description: "mode, model, git, context, clock only" },
125
+ { value: "compact", label: "compact", description: "minimal plus tps and cost" },
126
+ { value: "full", label: "full", description: "every segment, incl. servers, loops and tasks" },
127
+ { value: "ascii", label: "ascii", description: "compact set, safe on any terminal" },
128
+ ],
103
129
  },
104
- { key: "glanceMode", type: "boolean", label: "Glance mode", description: "The input-box frame renderer" },
105
- { key: "showFullLabels", type: "boolean", label: "Full labels", description: "Labeled instead of compact segments" },
106
130
  {
107
131
  key: "separator",
108
132
  type: "enum",
109
133
  label: "Separator",
110
- description: "Segment divider style",
134
+ plainOptions: true,
135
+ description: "Style of the divider drawn between segments.",
111
136
  options: ["powerline", "powerline-thin", "slash", "pipe", "dot", "ascii"],
112
137
  },
113
138
  {
114
139
  key: "zoneSeparator",
115
140
  type: "enum",
116
141
  label: "Zone separator",
117
- description: "Divider between zones (left · center · right)",
142
+ plainOptions: true,
143
+ description: "Divider between the left, center and right zones.",
118
144
  options: ["│", "╎", "·", "─", "none"],
119
145
  },
120
- {
121
- key: "iconStyle",
122
- type: "enum",
123
- label: "Icon style",
124
- options: [
125
- { value: "emoji", label: "emoji" },
126
- { value: "nerd", label: "nerd font" },
127
- { value: "text", label: "text only" },
128
- ],
129
- },
146
+ { key: "showFullLabels", type: "boolean", label: "Full labels", description: "Show each segment's name next to its value." },
130
147
  {
131
148
  key: "colorMode",
132
149
  type: "enum",
133
150
  label: "Color mode",
151
+ plainOptions: true,
152
+ description: "How much color the footer emits.",
134
153
  options: ["auto", "truecolor", "256", "mono"],
135
154
  },
136
155
  ],
@@ -142,16 +161,17 @@ registerSettings({
142
161
  key: "segments-page",
143
162
  type: "page",
144
163
  label: "Segments…",
145
- description: "Per-group and per-segment visibility",
164
+ description: "Choose which groups and segments appear in the footer.",
146
165
  sections: () =>
147
166
  getFooterRegistry().getAllGroups().map((g) => ({
148
167
  title: g.name,
149
168
  fields: [
150
- { key: `groups.${g.id}.show`, type: "boolean" as const, label: `Show ${g.name}` },
169
+ { key: `groups.${g.id}.show`, type: "boolean" as const, label: `Show ${g.name}`, description: `Show the ${g.name} group in the footer.` },
151
170
  ...g.segments.map((seg) => ({
152
171
  key: `groups.${g.id}.segments.${seg.id}`,
153
172
  type: "boolean" as const,
154
173
  label: seg.label,
174
+ description: `Show the ${seg.label} segment in the ${g.name} group.`,
155
175
  })),
156
176
  ],
157
177
  })),