@lotics/ui 6.3.0 → 6.4.0

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.
package/AGENTS.md CHANGED
@@ -761,7 +761,7 @@ list · list_item · menu_button · menu_list_item · detail_row · pressable_ro
761
761
  check_circle (CheckCircle — the completion ring: an empty ring that springs to a filled check when done, distinct from the square checkbox; the task/to-do/checklist toggle. Compose task rows directly, no Task component) · action_menu ·
762
762
  floating_action_bar · filter_chip · column_filter (ColumnFilter — the typed per-column filter pill +
763
763
  columnFilterToConditions; for a register filtering on several columns) · chip_group · search_input ·
764
- sort_header · table · data_grid (DataGrid — the inline-managed grouped table: a grouped, sortable grid of LIVE inline-editor cells (`columns[].cell` → ANY field) + optional per-row `leading` (a CheckCircle) + `renderGroupFooter` (per-group add, align with the exported `gridRowStyle`) + `labels` (localize the sort-header a11y via `SortHeaderLabels`). Owns header/sections/rows; consumer owns data + sort/group/filter/collapse state + toolbar. Renders ALL rows — MODERATE data; 10k+ → the paginated `Table` register. Examples: `tpl_task_board`, `tpl_pipeline`) · pagination · accordion · stepper (Stepper + Step — done/current/upcoming/warning/complete progress on a track (horizontal) or spine (vertical); compound `<Step status>children` OR data `steps[]`+`current`; the guided-run / agent-feed primitive — subsumes the old StepList) ·
764
+ sort_header · table · data_grid (DataGrid — the inline-managed grouped table: a grouped, sortable grid of LIVE inline-editor cells (`columns[].cell` → ANY field) + optional per-row `leading` (a CheckCircle) + `renderGroupFooter` (per-group add, align with the exported `gridRowStyle`) + `labels` (localize the sort-header a11y via `SortHeaderLabels`). Owns header/sections/rows; consumer owns data + sort/group/filter/collapse state + toolbar. Renders ALL rows — MODERATE data; 10k+ → the paginated `Table` register. Examples: `tpl_task_board`, `tpl_pipeline`) · pagination · accordion · stepper (Stepper + Step — done/current/upcoming/warning/complete progress on a track (horizontal) or spine (vertical); compound `<Step status>children` OR data `steps[]`+`current`; **navigable** via `Step.onPress` (both orientations — the whole step is the tap target) + `active` to wash the selected one, so it doubles as a section/phase switcher; the guided-run / agent-feed primitive — subsumes the old StepList) ·
765
765
  step_progress · timeline (heterogeneous event LOG — per-row icon + expandable details, models the past; NOT progress) · drawer (+ DrawerFooter) · dialog · popover · tooltip ·
766
766
  alert · peek · empty_state · completion_state · callout (Callout · CalloutTitle ·
767
767
  CalloutText · CalloutActions) · kpi_card · kpi_strip · metric · trend_chip · sparkline ·
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lotics/ui",
3
- "version": "6.3.0",
3
+ "version": "6.4.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./tokens": "./src/tokens.ts",
package/src/stepper.tsx CHANGED
@@ -56,7 +56,8 @@ interface StepPositional {
56
56
  export interface StepProps extends StepPositional {
57
57
  status: StepStatus;
58
58
  children: ReactNode;
59
- /** Make the step navigable; the active one holds a wash so a panel can sit beside it (vertical). */
59
+ /** Make the step navigable (both orientations) the whole step is the tap target.
60
+ * `active` washes the selected one (a panel can also sit beside it in vertical). */
60
61
  onPress?: () => void;
61
62
  active?: boolean;
62
63
  accessibilityLabel?: string;
@@ -116,16 +117,34 @@ export function Step(props: StepProps) {
116
117
  const { orientation, color, live } = useContext(StepperContext);
117
118
 
118
119
  if (orientation === "horizontal") {
119
- return (
120
- <View style={styles.hStep}>
120
+ const inner = (
121
+ <>
121
122
  <View style={styles.hTrackRow}>
122
123
  <View style={[styles.hTrack, { backgroundColor: _leftFilled ? color : colors.zinc[200] }]} />
123
124
  <Marker status={status} color={color} live={live} />
124
125
  <View style={[styles.hTrack, { backgroundColor: _rightFilled ? color : colors.zinc[200] }]} />
125
126
  </View>
126
127
  <View style={styles.hLabel}>{children}</View>
127
- </View>
128
+ </>
128
129
  );
130
+ // Navigable: the whole step (marker + label + its track halves) is the tap
131
+ // target — generous, no dead zones; `active` washes the selected one.
132
+ if (onPress) {
133
+ return (
134
+ <View style={styles.hStepSlot}>
135
+ <PressableHighlight
136
+ focusRing
137
+ onPress={onPress}
138
+ accessibilityRole="button"
139
+ accessibilityLabel={accessibilityLabel}
140
+ style={[styles.hPress, active ? styles.hActive : null]}
141
+ >
142
+ {inner}
143
+ </PressableHighlight>
144
+ </View>
145
+ );
146
+ }
147
+ return <View style={styles.hStep}>{inner}</View>;
129
148
  }
130
149
 
131
150
  const body = <View style={[styles.vRowBox, active ? styles.vActive : null]}>{children}</View>;
@@ -210,6 +229,9 @@ const NODE = 18;
210
229
  const styles = StyleSheet.create({
211
230
  hRow: { flexDirection: "row" },
212
231
  hStep: { flex: 1, alignItems: "center", gap: 8 },
232
+ hStepSlot: { flex: 1 },
233
+ hPress: { width: "100%", alignItems: "center", gap: 8, borderRadius: 8, paddingVertical: 4 },
234
+ hActive: { backgroundColor: colors.zinc[100] },
213
235
  hTrackRow: { flexDirection: "row", alignItems: "center", width: "100%" },
214
236
  hTrack: { flex: 1, height: 2 },
215
237
  hLabel: { alignItems: "center" },