Skip to content

Commit fc7257e

Browse files
jasonpriemclaude
andcommitted
OQL builder table round 8 (#575): editable numeric predicate, no parens, the-chip, trash delete, and… button
Jason's round-8 screenshot batch: - Predicate slot is now DARKER + clickable on numeric (range) filters, opening an operator menu (=/≥/≤/>/<) that rewrites the clause op (edit.setOperator + swap); fixed predicates (has/is/boolean) stay light + inert. - Parens are HIDDEN in the advanced view (kept in OQL/OQO): .val-paren display:none, text-block display strips bare (/) parts, standalone paren chip renders nothing. - Leading → arrow chip → the word 'the' ('the title has foo'); OQL-spec 'the' support filed to the oql-bulletproof job (elastic-api grammar, separate). - End-of-line 'or' now appends at the END of the value bag (edit.appendAdjacentValue), so the draft lands after value-block AND sub-groups — single/multi chips intermingle. - Left-gutter kebab → a trash-can DELETE button (hover-revealed, reddens). - Toolbar filter-plus removed; add-filter lives on the canvas. - Empty canvas = a single 'Add a filter' button; trailing line = an 'and…' button. - Field-picker menu card back to WHITE (was peach); draft field menu drops 'Delete filter' (a draft isn't a committed filter yet). 798 gui unit tests green (8 pre-existing offline dedup-404s); prod build clean; dev-verified on :8093 (all 10 items, 0 console errors). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 6450ab0 commit fc7257e

6 files changed

Lines changed: 216 additions & 132 deletions

File tree

src/components/Oql/OqlFieldChip.vue

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,9 @@
6262
@click.stop @mousedown.stop />
6363
</span>
6464
</template>
65-
<template #footer="{ close }">
66-
<v-list density="compact" class="py-0">
67-
<v-list-item class="filter-delete-item" @click="close(); $emit('delete-filter')">
68-
<template #prepend><v-icon size="18">mdi-delete-outline</v-icon></template>
69-
<v-list-item-title>Delete filter</v-list-item-title>
70-
</v-list-item>
71-
</v-list>
72-
</template>
65+
<!-- (#575 round 8, Jason: the "Delete filter" footer is gone — a not-yet-committed DRAFT
66+
has nothing to delete; abandon it by clicking away / Escape. Committed filters delete
67+
via the row's left-gutter trash button.) -->
7368
</SelectionMenu>
7469
</template>
7570

@@ -96,14 +91,14 @@ const locked = computed(() => !!props.tok._column && !props.tok._draft);
9691
// the slot read it).
9792
const chipLabel = computed(() => props.tok._label);
9893
99-
// The field menu extends its chip's COLOUR (oxjob #561; monospace dropped per Jason
100-
// follow-up). Inline values (not CSS vars) — the menu card teleports to <body>, outside the
101-
// .builder ancestor that carries the palette vars. --menu-hl: hover/keyboard-highlight rows
102-
// use the peach family's darker hover shade instead of Vuetify's grey overlay.
94+
// The field-picker menu card is WHITE (#575 round 8, Jason — the peach card was too much).
95+
// Inline values (not CSS vars) — the menu card teleports to <body>, outside the .builder
96+
// ancestor that carries the palette vars. --menu-hl: hover/keyboard-highlight rows use a soft
97+
// peach tint (readable on white) instead of Vuetify's grey overlay, so the field family still
98+
// reads through on the highlighted row.
10399
const menuCardStyle = {
104-
backgroundColor: OQL_ROLE_CSS_VARS["--prop-bg"],
105-
color: OQL_ROLE_CSS_VARS["--prop-fg"],
106-
"--menu-hl": OQL_ROLE_CSS_VARS["--prop-bg-hov"],
100+
backgroundColor: "#fff",
101+
"--menu-hl": OQL_ROLE_CSS_VARS["--prop-bg"],
107102
};
108103
109104
// TYPE-ON-CHIP field search (oxjob #561): the query typed on the chip input; drives the
@@ -168,8 +163,4 @@ const onFieldKeydown = (e) => {
168163
(oqlChip.css). */
169164
.prop-typeon { cursor: text; }
170165
.prop-typeon:hover { background: var(--prop-bg, #fae1d1); filter: none; }
171-
/* "Delete filter" footer item — danger red. (Lives here, not in the builder: the menu
172-
content teleports to a body-level overlay, so only THIS component's scope reaches it.) */
173-
.filter-delete-item :deep(.v-list-item-title) { color: #b3261e; }
174-
.filter-delete-item :deep(.v-icon) { color: #b3261e; opacity: 0.85; }
175166
</style>

src/components/Oql/OqlParenChip.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020
hardcode a width here (oxjob #428/#503).
2121
-->
2222
<template>
23-
<span class="paren-block" :class="{ selected: active }"
23+
<!-- #575 round 8 (Jason): no parens in the advanced view. A standalone paren chip only appears
24+
transiently while an AND sub-group is mid-edit (expanded); render nothing so no bare `(`/`)`
25+
bricks flash. Parens stay in the OQL/OQO model, just not painted. -->
26+
<span v-if="false" class="paren-block" :class="{ selected: active }"
2427
@click.stop="$emit('menu', $event.currentTarget, $event)">{{ tok.text }}</span>
2528
</template>
2629

0 commit comments

Comments
 (0)