{"version":3,"file":"sdcorejs-angular-components-query-bar.mjs","sources":["../../../projects/sdcorejs-angular/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.html","../../../projects/sdcorejs-angular/components/query-bar/src/components/actions-bar/actions-bar.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/actions-bar/actions-bar.component.html","../../../projects/sdcorejs-angular/components/query-bar/src/query-bar.model.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.html","../../../projects/sdcorejs-angular/components/query-bar/src/components/build-chip/build-chip.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/build-chip/build-chip.component.html","../../../projects/sdcorejs-angular/components/query-bar/src/components/chip-popover/chip-popover.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/chip-popover/chip-popover.component.html","../../../projects/sdcorejs-angular/components/query-bar/src/components/field-picker/field-picker.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/field-picker/field-picker.component.html","../../../projects/sdcorejs-angular/components/query-bar/src/components/inline-chip/inline-chip.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/inline-chip/inline-chip.component.html","../../../projects/sdcorejs-angular/components/query-bar/src/components/popover-chip/popover-chip.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/components/popover-chip/popover-chip.component.html","../../../projects/sdcorejs-angular/components/query-bar/src/query-bar.component.ts","../../../projects/sdcorejs-angular/components/query-bar/src/query-bar.component.html","../../../projects/sdcorejs-angular/components/query-bar/sdcorejs-angular-components-query-bar.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal } from '@angular/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { SdQuery, SdSavedFilter } from '../../query-bar.model';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n/**\n * Saved-filters dropdown for `sd-query-bar`.\n *\n * Self-contained: persists the list to `localStorage` under\n * `sd-query-bar:savedFilters:<key>` whenever the host passes a `[key]`. Without a\n * key the dropdown still renders (host can still preview the menu) but the\n * trigger stays disabled.\n *\n * The host owns the live `[query]`: each save snapshots it into a new entry,\n * each apply emits the chosen filter back via `(apply)` for the host to install\n * into its own `filters` / `logic` / `search` model.\n *\n * The save action (`promptSave`) is public so the parent toolbar can place its\n * own \"Lưu bộ lọc\" button anywhere — typically next to the Search trigger.\n */\n@Component({\n  selector: 'sd-query-saved-filters-menu',\n  templateUrl: './saved-filters-menu.component.html',\n  styleUrl: './saved-filters-menu.component.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdIcon, MatMenuModule, MatTooltipModule],\n})\nexport class SdQuerySavedFiltersMenu {\n  /** Namespace key used to scope localStorage. `undefined` → menu disabled. */\n  readonly key = input<string | undefined>(undefined);\n\n  /** Current query the host wants to snapshot when the user clicks \"Save current\". */\n  readonly query = input<SdQuery>({ filters: [], logic: 'AND' });\n\n  /** Fired when the user picks a saved filter from the list. */\n  readonly apply = output<SdSavedFilter>();\n\n  readonly savedFilters = signal<SdSavedFilter[]>([]);\n\n  readonly #storageKey = computed<string | undefined>(() => {\n    const k = this.key();\n    return k ? `sd-query-bar:savedFilters:${k}` : undefined;\n  });\n\n  // why: reload whenever the namespace key changes (e.g. host switches user/context).\n  readonly #loadFilters = effect(() => {\n    const storage = this.#storageKey();\n    if (!storage) {\n      this.savedFilters.set([]);\n      return;\n    }\n    try {\n      const raw = localStorage.getItem(storage);\n      this.savedFilters.set(raw ? JSON.parse(raw) : []);\n    } catch {\n      this.savedFilters.set([]);\n    }\n  });\n\n  #persist(filters: SdSavedFilter[]): void {\n    const storage = this.#storageKey();\n    if (!storage) return;\n    try {\n      localStorage.setItem(storage, JSON.stringify(filters));\n    } catch {\n      /* quota / disabled storage — silent */\n    }\n  }\n\n  /**\n   * Prompt for a name and append a snapshot of the current query as a new\n   * saved filter. Public so the parent toolbar can wire its external \"save\"\n   * button to this method without re-implementing persistence.\n   */\n  promptSave(): void {\n    if (!this.#storageKey()) return;\n    const name = window.prompt('Tên bộ lọc:');\n    if (!name?.trim()) return;\n    const filter: SdSavedFilter = {\n      id: typeof crypto !== 'undefined' && crypto.randomUUID ? crypto.randomUUID() : String(Date.now()),\n      name: name.trim(),\n      query: this.query(),\n    };\n    const next = [...this.savedFilters(), filter];\n    this.savedFilters.set(next);\n    this.#persist(next);\n  }\n\n  /** Apply a saved filter — host re-installs filters/logic/search via `(apply)`. */\n  pick(filter: SdSavedFilter): void {\n    this.apply.emit(filter);\n  }\n\n  /** Delete a saved filter by id. Stops propagation so the parent button doesn't fire `pick`. */\n  remove(id: string, ev?: Event): void {\n    ev?.stopPropagation();\n    const next = this.savedFilters().filter(f => f.id !== id);\n    this.savedFilters.set(next);\n    this.#persist(next);\n  }\n}\n","<button\n  type=\"button\"\n  class=\"c-saved-filters\"\n  [disabled]=\"!key()\"\n  [matMenuTriggerFor]=\"menu\"\n  [matTooltip]=\"key() ? 'Bộ lọc đã lưu' : 'Cần [savedFiltersKey] để bật'\">\n  <sd-icon name=\"bookmark_border\"></sd-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" class=\"c-saved-filters-menu\" xPosition=\"before\" yPosition=\"below\">\n  @for (f of savedFilters(); track f.id) {\n    <button type=\"button\" mat-menu-item class=\"c-sf-row\" (click)=\"pick(f)\">\n      <sd-icon class=\"c-sf-lead\" name=\"filter_alt\"></sd-icon>\n      <span class=\"c-sf-name\">{{ f.name }}</span>\n      <span\n        role=\"button\"\n        tabindex=\"0\"\n        class=\"c-sf-del\"\n        aria-label=\"Xoá bộ lọc\"\n        (click)=\"remove(f.id, $event)\"\n        (keydown.enter)=\"remove(f.id, $event)\">\n        <sd-icon name=\"close\"></sd-icon>\n      </span>\n    </button>\n  } @empty {\n    <div class=\"c-sf-empty\">Chưa có bộ lọc nào.</div>\n  }\n  <!-- why: footer save action sống trong mat-menu để dropdown gom 1 vùng (list +\n       save) — user mở dropdown thấy ngay cả 2 hành động, không phải tìm nút lưu\n       ở chỗ khác trên toolbar. -->\n  <hr class=\"c-sf-divider\" aria-hidden=\"true\" />\n  <button type=\"button\" mat-menu-item class=\"c-sf-save\" [disabled]=\"!key()\" (click)=\"promptSave()\">\n    <sd-icon name=\"bookmark_add\"></sd-icon>\n    <span>Lưu bộ lọc hiện tại</span>\n  </button>\n</mat-menu>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, model, output } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { SdQuery, SdQueryLogic, SdSavedFilter } from '../../query-bar.model';\nimport { SdQuerySavedFiltersMenu } from '../saved-filters-menu/saved-filters-menu.component';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n/**\n * Right-pinned toolbar for `sd-query-bar`: AND/OR connector toggle, clear-all,\n * saved-filters dropdown (with footer \"Lưu bộ lọc hiện tại\"), and the deferred\n * Search trigger. Owns no business logic — just routes user intent back via\n * outputs (`(logic)` model, `(clear)`, `(search)`, `(applyFilter)`).\n *\n * The \"save current query\" action lives INSIDE the saved-filters mat-menu\n * footer (one zone for both apply + save). The dropdown trigger sits\n * immediately before Search so the user sees one filter-cluster on the right.\n */\n@Component({\n  selector: 'sd-query-actions-bar',\n  templateUrl: './actions-bar.component.html',\n  styleUrl: './actions-bar.component.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdIcon, MatTooltipModule, SdQuerySavedFiltersMenu],\n})\nexport class SdQueryActionsBar {\n  // AND/OR toggle —\n  readonly showLogicToggle = input(false, { transform: booleanAttribute });\n  readonly logic = model<SdQueryLogic>('AND');\n  readonly filtersCount = input(0);\n\n  // Saved filters —\n  readonly showSavedFilters = input(false, { transform: booleanAttribute });\n  readonly savedFiltersKey = input<string | undefined>(undefined);\n  readonly query = input<SdQuery>({ filters: [], logic: 'AND' });\n  readonly applyFilter = output<SdSavedFilter>();\n\n  // Clear-all —\n  readonly showClearAll = input(true, { transform: booleanAttribute });\n  readonly clear = output<void>();\n\n  // Search trigger —\n  readonly canSearch = input(false);\n  readonly search = output<void>();\n\n  setLogic(value: SdQueryLogic): void {\n    if (this.logic() === value) return;\n    this.logic.set(value);\n  }\n}\n","<!-- Vertical separator between the wrapping filter area (left) and the pinned toolbar. -->\n<span class=\"c-bar-divider\" aria-hidden=\"true\"></span>\n\n<div class=\"c-query-bar__actions\">\n  <!-- AND / OR toggle -->\n  @if (showLogicToggle() && filtersCount() >= 2) {\n    <div class=\"c-logic-toggle\" role=\"group\" aria-label=\"Logic operator\">\n      <button\n        type=\"button\"\n        class=\"c-logic-segment\"\n        [class.c-logic-active]=\"logic() === 'AND'\"\n        (click)=\"setLogic('AND')\">\n        AND\n      </button>\n      <button\n        type=\"button\"\n        class=\"c-logic-segment\"\n        [class.c-logic-active]=\"logic() === 'OR'\"\n        (click)=\"setLogic('OR')\">\n        OR\n      </button>\n    </div>\n  }\n\n  @if (showClearAll() && filtersCount() > 0) {\n    <button\n      type=\"button\"\n      class=\"c-clear-all\"\n      [matTooltip]=\"'Xóa tất cả (' + filtersCount() + ')'\"\n      (click)=\"clear.emit()\">\n      <sd-icon name=\"delete_sweep\"></sd-icon>\n    </button>\n  }\n\n  <!-- why: saved-filters dropdown đặt sát ngay trước Search — gom toàn bộ\n       hành động về bộ lọc (apply view cũ / lưu view hiện tại) cạnh nút submit,\n       user thấy 1 cụm. Footer \"Lưu bộ lọc hiện tại\" sống trong mat-menu của\n       saved-filters-menu, không tách ra nút riêng nữa. -->\n  @if (showSavedFilters()) {\n    <sd-query-saved-filters-menu\n      [key]=\"savedFiltersKey()\"\n      [query]=\"query()\"\n      (apply)=\"applyFilter.emit($event)\" />\n  }\n\n  <!-- why: far-right \"submit at the end of the toolbar\" position; sole query trigger. -->\n  <button\n    type=\"button\"\n    class=\"c-search-trigger\"\n    [disabled]=\"!canSearch()\"\n    matTooltip=\"Tìm kiếm\"\n    (click)=\"search.emit()\">\n    <sd-icon name=\"search\"></sd-icon>\n  </button>\n</div>\n","import { Signal } from '@angular/core';\nimport { SdSearch } from '@sdcorejs/angular/forms/models';\nimport { Filter, NestedKeyOf, Operator } from '@sdcorejs/utils/models';\n\n// ---------------------------------------------------------------------------\n// Field definitions — discriminated union by `type`, mirroring sd-table column\n// vocabulary. Each consumer declares its searchable fields via `SdQueryField`.\n// ---------------------------------------------------------------------------\n\nexport type SdQueryFieldType = 'string' | 'number' | 'boolean' | 'date' | 'datetime' | 'values' | 'lazy-values';\n\ninterface SdQueryFieldBase<T = any> {\n  /** Dot-notation field path (matches `Filter.field`). */\n  key: NestedKeyOf<T>;\n  /** Human-readable label shown on chip + field picker. */\n  label: string;\n  /** Material icon name; falls back to `SD_QUERY_TYPE_ICON[type]` then `'tune'`. */\n  icon?: string;\n  /**\n   * Controls the operator selector in the chip popover:\n   * - omitted / `false` → **simple mode**: no operator dropdown; the chip always uses\n   *   `defaultOperator` (or the per-type default). Use this for screens that don't need\n   *   operator choice.\n   * - `true` → show the full operator set for the field's `type`\n   *   (`SD_QUERY_OPERATORS_BY_TYPE[type]`).\n   * - `Operator[]` → show exactly these operators.\n   */\n  operators?: boolean | Operator[];\n  /**\n   * Operator the chip starts with. Falls back to `SD_QUERY_DEFAULT_OPERATOR_BY_TYPE[type]`:\n   * string→CONTAIN, number→EQUAL, values/lazy-values→IN, boolean→EQUAL, date/datetime→BETWEEN.\n   */\n  defaultOperator?: Operator;\n  /** Field is offered in picker but not interactive (read-only badge in chip). */\n  disabled?: boolean;\n}\n\nexport interface SdQueryFieldString<T = any> extends SdQueryFieldBase<T> {\n  type: 'string';\n}\n\nexport interface SdQueryFieldNumber<T = any> extends SdQueryFieldBase<T> {\n  type: 'number';\n  /** Bounds for the input control inside the chip popover. */\n  min?: number;\n  max?: number;\n  /** Step for the number input. */\n  step?: number;\n}\n\nexport interface SdQueryFieldBoolean<T = any> extends SdQueryFieldBase<T> {\n  type: 'boolean';\n  /** Labels rendered for the true/false buttons. Default: \"Có\" / \"Không\". */\n  trueLabel?: string;\n  falseLabel?: string;\n}\n\nexport interface SdQueryFieldDate<T = any> extends SdQueryFieldBase<T> {\n  type: 'date' | 'datetime';\n  /** Restrict the picker calendar to this range. */\n  min?: Date | string;\n  max?: Date | string;\n}\n\n/**\n * Statically-known options (sync array, signal, or one-shot promise).\n * Mirrors `SdTableColumnValues.option`.\n */\nexport interface SdQueryFieldValues<T = any, K = Record<string, any>> extends SdQueryFieldBase<T> {\n  type: 'values';\n  option: {\n    items: K[] | Signal<K[]> | (() => Promise<K[]>);\n    valueField: NestedKeyOf<K>;\n    displayField: NestedKeyOf<K>;\n  };\n}\n\n/**\n * Server-backed options — searchable, paginated. Mirrors `SdTableColumnLazyValues.option`.\n * `search` is the unified `SdSearch<K>` callback used by `sd-select`: it handles\n * `{ type: 'SEARCH', searchText }` for live queries and `{ type: 'VALUE', value }` for\n * resolving chip-display labels of already-selected IDs.\n */\nexport interface SdQueryFieldLazyValues<T = any, K = Record<string, any>> extends SdQueryFieldBase<T> {\n  type: 'lazy-values';\n  option: {\n    search: SdSearch<K>;\n    valueField: NestedKeyOf<K>;\n    displayField: NestedKeyOf<K>;\n  };\n}\n\nexport type SdQueryField<T = any> =\n  | SdQueryFieldString<T>\n  | SdQueryFieldNumber<T>\n  | SdQueryFieldBoolean<T>\n  | SdQueryFieldDate<T>\n  | SdQueryFieldValues<T>\n  | SdQueryFieldLazyValues<T>;\n\n// ---------------------------------------------------------------------------\n// Output model — `SdQuery` is the canonical payload emitted via `[(query)]`.\n// It composes the reusable `Filter[]` from utils plus query-bar-only metadata\n// (global logic, free-text search). Callers can also bind `[(filters)]` alone\n// when they don't need logic/search.\n// ---------------------------------------------------------------------------\n\nexport type SdQueryLogic = 'AND' | 'OR';\n\nexport interface SdQuery<T = any> {\n  filters: Filter<T>[];\n  /** Global connector between filters. Defaults to `'AND'`. */\n  logic?: SdQueryLogic;\n  /** Free-text search box (only present when `showSearch=true`). */\n  search?: string;\n}\n\nexport interface SdQueryBarOption<T = any> {\n  /** Prefix for auto-generated `data-autoid` on inner controls. */\n  autoId?: string;\n  /** Available fields the user can filter by. */\n  fields: SdQueryField<T>[];\n  /** Initial active filter chips. */\n  filters?: Filter<T>[];\n  /** Initial global connector between filters. */\n  logic?: SdQueryLogic;\n  /** Initial free-text search string. */\n  search?: string;\n  mode?: 'popover' | 'inline';\n  density?: 'compact' | 'comfortable';\n  showSearch?: boolean;\n  showSavedFilters?: boolean;\n  savedFiltersKey?: string;\n  showLogicToggle?: boolean;\n  showClearAll?: boolean;\n  showOperatorOnChip?: boolean;\n  onQueryChange?: (query: SdQuery<T>) => void;\n  onApply?: (query: SdQuery<T>) => void;\n}\n\n/** Persisted bookmark of a query (filters + logic + search) — managed by `[savedFiltersKey]`. */\nexport interface SdSavedFilter<T = any> {\n  id: string;\n  name: string;\n  query: SdQuery<T>;\n}\n\n/**\n * Transient state of the in-progress chip during inline-mode token build (field →\n * operator → value). Lives at the parent (`SdQueryBar.building()`) and is rendered\n * by `<sd-query-build-chip>`. Step transitions:\n *   - 'operator' — operator menu open, waiting for the user to pick a condition\n *   - 'value'    — operator locked, value picker / seamless input is the focus\n */\nexport interface BuildingChip<T = any> {\n  field: SdQueryField<T>;\n  operator?: Operator;\n  step: 'operator' | 'value';\n  value?: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Full operator set per field type — used when `operators: true`. */\nexport const SD_QUERY_OPERATORS_BY_TYPE: Record<SdQueryFieldType, Operator[]> = {\n  string: ['CONTAIN', 'EQUAL', 'NOT_EQUAL', 'START_WITH', 'END_WITH', 'NULL', 'NOT_NULL'],\n  number: ['EQUAL', 'NOT_EQUAL', 'GREATER_THAN', 'GREATER_OR_EQUAL', 'LESS_THAN', 'LESS_OR_EQUAL', 'BETWEEN'],\n  boolean: ['EQUAL'],\n  date: ['EQUAL', 'BETWEEN', 'GREATER_THAN', 'LESS_THAN'],\n  datetime: ['EQUAL', 'BETWEEN', 'GREATER_THAN', 'LESS_THAN'],\n  values: ['IN', 'NOT_IN', 'NULL', 'NOT_NULL'],\n  'lazy-values': ['IN', 'NOT_IN', 'NULL', 'NOT_NULL'],\n};\n\n/** Default operator when a chip is created and `field.defaultOperator` is not set. */\nexport const SD_QUERY_DEFAULT_OPERATOR_BY_TYPE: Record<SdQueryFieldType, Operator> = {\n  string: 'CONTAIN',\n  number: 'EQUAL',\n  boolean: 'EQUAL',\n  date: 'BETWEEN',\n  datetime: 'BETWEEN',\n  values: 'IN',\n  'lazy-values': 'IN',\n};\n\n/** Icon fallback per field type when `SdQueryField.icon` is not set. */\nexport const SD_QUERY_TYPE_ICON: Record<SdQueryFieldType, string> = {\n  string: 'text_fields',\n  number: 'tag',\n  boolean: 'toggle_on',\n  date: 'event',\n  datetime: 'schedule',\n  values: 'list',\n  'lazy-values': 'list',\n};\n\n/**\n * Resolves the icon shown on chips and in the field picker.\n * Priority: `field.icon` → `SD_QUERY_TYPE_ICON[field.type]` → `'tune'`.\n */\nexport function sdQueryFieldIcon(field: SdQueryField): string {\n  return field.icon ?? SD_QUERY_TYPE_ICON[field.type] ?? 'tune';\n}\n\n/** Operators that carry no data — value section is hidden in chip popover. */\nexport const SD_QUERY_NO_DATA_OPERATORS: Operator[] = ['NULL', 'NOT_NULL'];\n\n/** Operators that carry an array payload — UI offers multi-select. */\nexport const SD_QUERY_MULTI_OPERATORS: Operator[] = ['IN', 'NOT_IN'];\n\n/** Picks the initial operator when a new chip is created for `field`. */\nexport function sdQueryDefaultOperator(field: SdQueryField): Operator {\n  if (field.defaultOperator) return field.defaultOperator;\n  return SD_QUERY_DEFAULT_OPERATOR_BY_TYPE[field.type];\n}\n\n/**\n * Operators offered in the chip popover for `field`:\n * - `operators === true` → full set for the type\n * - `operators` is an array → that array (deduped against the type set is the caller's job)\n * - otherwise (simple mode) → just the single default operator (no real choice)\n */\nexport function sdQueryAllowedOperators(field: SdQueryField): Operator[] {\n  if (field.operators === true) return SD_QUERY_OPERATORS_BY_TYPE[field.type];\n  if (Array.isArray(field.operators) && field.operators.length > 0) return field.operators;\n  return [sdQueryDefaultOperator(field)];\n}\n\n/**\n * Whether the operator selector should be visible. Simple mode (operators omitted/false,\n * or an array with a single entry) hides the dropdown — the chip uses one fixed operator.\n */\nexport function sdQueryShowOperatorSelector(field: SdQueryField): boolean {\n  return sdQueryAllowedOperators(field).length > 1;\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal, viewChild } from '@angular/core';\nimport { SdOperator } from '@sdcorejs/angular/components/operator';\nimport { SdInlineText } from '@sdcorejs/angular/forms/inline-text';\nimport { Operator } from '@sdcorejs/utils/models';\n\nimport { SD_QUERY_NO_DATA_OPERATORS, SdQueryField, sdQueryFieldIcon } from '../../query-bar.model';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\ninterface Range {\n  from?: any;\n  to?: any;\n}\ntype ChipState = 'pending' | 'active' | 'focus' | 'error';\n\n/**\n * Seamless inline value chip for `string` / `number` fields (inline mode only).\n *\n * why: the pill itself IS the input — one border, no nested rectangle control. The\n * label + value + remove live in three flush segments inside a single pill envelope.\n * Mirrors refs/design_handoff_sd_query_bar \"Seamless string/number chip\" handoff.\n *\n * Commit model matches inline mode: edits write back via `(valueChange)` immediately\n * (host folds into `filters` without emitting); the bar's Search button stays the only\n * query trigger. Enter commits + blurs, Esc reverts + blurs, blur commits.\n */\n@Component({\n  selector: 'sd-query-inline-value-chip',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdIcon, SdOperator, SdInlineText],\n  templateUrl: './inline-value-chip.component.html',\n  styleUrl: './inline-value-chip.component.scss',\n})\nexport class SdQueryInlineValueChip {\n  /** Field this chip filters by — must be kind `string` or `number`. */\n  readonly field = input.required<SdQueryField>();\n  /** Active operator (drives BETWEEN dual-input + no-data hiding). */\n  readonly operator = input<Operator>('CONTAIN');\n  /** Current value: scalar for most operators, `{ from, to }` for BETWEEN. */\n  readonly value = input<unknown>(null);\n  readonly density = input<'compact' | 'comfortable'>('compact');\n  /** Show the operator label as a small pill inside the label segment. */\n  readonly showOperator = input(false);\n  /** Prefix for the inner input's `data-autoid`. */\n  readonly autoId = input<string | undefined>(undefined);\n  /** Focus the first input on creation — used for the in-progress build chip. */\n  readonly autofocus = input(false);\n\n  /** Emitted on commit (Enter / blur) with the parsed next value. */\n  readonly valueChange = output<unknown>();\n  /** Emitted when the user clicks the × segment. */\n  readonly remove = output<void>();\n\n  private readonly firstInput = viewChild<SdInlineText>('firstInput');\n\n  readonly focused = signal(false);\n  readonly hasError = signal(false);\n\n  /** Editable drafts — single value, plus from/to for BETWEEN. Seeded from `value`. */\n  readonly draft = signal('');\n  readonly draftFrom = signal('');\n  readonly draftTo = signal('');\n\n  readonly isNumber = computed(() => this.field().type === 'number');\n  readonly isBetween = computed(() => this.operator() === 'BETWEEN');\n  readonly isNoData = computed(() => SD_QUERY_NO_DATA_OPERATORS.includes(this.operator()));\n\n  readonly icon = computed(() => sdQueryFieldIcon(this.field()));\n\n  readonly ph = computed(() => (this.isNumber() ? 'giá trị' : 'nhập…'));\n  readonly phFrom = computed(() => (this.isNumber() ? 'Từ' : 'từ…'));\n  readonly phTo = computed(() => (this.isNumber() ? 'Đến' : 'đến…'));\n\n  readonly hasValue = computed(() => {\n    if (this.isNoData()) return true;\n    const v = this.value();\n    if (this.isBetween()) {\n      const r = (v ?? {}) as Range;\n      return (r.from != null && r.from !== '') || (r.to != null && r.to !== '');\n    }\n    return v != null && v !== '';\n  });\n\n  readonly state = computed<ChipState>(() => {\n    if (this.hasError()) return 'error';\n    if (this.focused()) return 'focus';\n    return this.hasValue() ? 'active' : 'pending';\n  });\n\n  constructor() {\n    // Reseed drafts whenever the bound value / operator / kind changes. While the user\n    // types, none of those change (commit is on blur), so this never clobbers an edit.\n    effect(() => {\n      const v = this.value();\n      if (this.isBetween()) {\n        const r = (v ?? {}) as Range;\n        this.draftFrom.set(this.#format(r.from));\n        this.draftTo.set(this.#format(r.to));\n      } else {\n        this.draft.set(this.#format(v));\n      }\n    });\n\n    // why: the build chip lands focused (autofocus) so the user types straight away —\n    // <sd-inline-text> owns that via its own [autofocus] input, so no afterNextRender here.\n  }\n\n  /** Click anywhere in the pill (except × or an input) focuses the first input. */\n  focusFromShell(ev: Event): void {\n    const target = ev.target as HTMLElement;\n    if (target.closest('.c-seamless__x') || target.closest('input')) return;\n    this.firstInput()?.focus();\n  }\n\n  onFocus(): void {\n    this.focused.set(true);\n  }\n\n  /** Commit a single-value field (string / number, non-BETWEEN). */\n  commitSingle(): void {\n    this.focused.set(false);\n    const parsed = this.#parse(this.draft());\n    if (!parsed.ok) {\n      this.hasError.set(true);\n      return;\n    }\n    this.hasError.set(false);\n    this.valueChange.emit(parsed.value);\n  }\n\n  /** Commit a BETWEEN range — both ends parsed, emitted as `{ from, to }`. */\n  commitRange(): void {\n    this.focused.set(false);\n    const from = this.#parse(this.draftFrom());\n    const to = this.#parse(this.draftTo());\n    if (!from.ok || !to.ok) {\n      this.hasError.set(true);\n      return;\n    }\n    this.hasError.set(false);\n    this.valueChange.emit({ from: from.value, to: to.value });\n  }\n\n  /** Esc — revert drafts to the committed value and blur without emitting. */\n  revertAndBlur(ref?: { blur: () => void }): void {\n    const v = this.value();\n    if (this.isBetween()) {\n      const r = (v ?? {}) as Range;\n      this.draftFrom.set(this.#format(r.from));\n      this.draftTo.set(this.#format(r.to));\n    } else {\n      this.draft.set(this.#format(v));\n    }\n    this.hasError.set(false);\n    this.focused.set(false);\n    ref?.blur();\n  }\n\n  onRemove(ev: Event): void {\n    ev.stopPropagation();\n    this.remove.emit();\n  }\n\n  /** Format a stored value for display — number → vi-VN grouped digits. */\n  #format(v: any): string {\n    if (v == null || v === '') return '';\n    if (this.isNumber()) {\n      const n = typeof v === 'number' ? v : Number(String(v).replace(/\\./g, ''));\n      return Number.isFinite(n) ? n.toLocaleString('vi-VN') : String(v);\n    }\n    return String(v);\n  }\n\n  /** Parse a draft back to a stored value. Number kind rejects non-numeric input. */\n  #parse(s: string): { ok: boolean; value: any } {\n    const t = (s ?? '').trim();\n    if (t === '') return { ok: true, value: this.isNumber() ? null : '' };\n    if (this.isNumber()) {\n      // vi-VN groups thousands with '.', so strip dots + spaces, then require a plain\n      // (optionally negative) integer — anything else (letters, stray symbols) is an error.\n      const cleaned = t.replace(/[.\\s]/g, '');\n      if (!/^-?\\d+$/.test(cleaned)) return { ok: false, value: t };\n      const n = Number(cleaned);\n      return Number.isFinite(n) ? { ok: true, value: n } : { ok: false, value: t };\n    }\n    return { ok: true, value: t };\n  }\n}\n","<!--\n  Seamless string/number chip — the pill IS the input. One border, three flush\n  segments: label · input(s) · ×. State styling driven by [data-state]. The value\n  field is the shared <sd-inline-text> primitive (chrome=\"seamless\") so width hugs\n  content; the chip keeps the envelope + parse/commit logic.\n-->\n@let _state = state();\n@let _autoId = autoId();\n@let _isNoData = isNoData();\n@let _density = density();\n@let _operator = operator();\n\n<span\n  class=\"c-seamless\"\n  [attr.data-state]=\"_state\"\n  [class.c-seamless--compact]=\"_density === 'compact'\"\n  [class.c-seamless--comfortable]=\"_density === 'comfortable'\"\n  (click)=\"focusFromShell($event)\">\n\n  <!-- Label segment: icon + field name (+ optional operator pill) -->\n  <span class=\"c-seamless__label\">\n    <sd-icon class=\"c-seamless__icon\" [name]=\"icon()\"></sd-icon>\n    <span class=\"c-seamless__field\">{{ field().label }}</span>\n    @if (showOperator() && !_isNoData) {\n      <sd-operator class=\"c-seamless__op\" [operators]=\"[_operator]\" [model]=\"_operator\" [disabled]=\"true\" />\n    } @else if (!_isNoData) {\n      <span class=\"c-seamless__sep\">:</span>\n    }\n  </span>\n\n  <!-- Input segment — seamless borderless primitive; hidden for NULL / NOT_NULL -->\n  @if (!_isNoData) {\n    <span class=\"c-seamless__input\">\n      @if (isBetween()) {\n        <sd-inline-text\n          #firstInput\n          chrome=\"seamless\"\n          [clearable]=\"false\"\n          [autofocus]=\"autofocus()\"\n          [state]=\"_state\"\n          [value]=\"draftFrom()\"\n          (valueChange)=\"draftFrom.set($event)\"\n          [placeholder]=\"phFrom()\"\n          [autoId]=\"_autoId ? _autoId + '-from' : undefined\"\n          (sdFocus)=\"onFocus()\"\n          (sdBlur)=\"commitRange()\"\n          (keyupEnter)=\"firstInput.blur()\"\n          (keydownEscape)=\"revertAndBlur(firstInput)\" />\n        <span class=\"c-seamless__dash\" aria-hidden=\"true\">—</span>\n        <sd-inline-text\n          #secondInput\n          chrome=\"seamless\"\n          [clearable]=\"false\"\n          [state]=\"_state\"\n          [value]=\"draftTo()\"\n          (valueChange)=\"draftTo.set($event)\"\n          [placeholder]=\"phTo()\"\n          [autoId]=\"_autoId ? _autoId + '-to' : undefined\"\n          (sdFocus)=\"onFocus()\"\n          (sdBlur)=\"commitRange()\"\n          (keyupEnter)=\"secondInput.blur()\"\n          (keydownEscape)=\"revertAndBlur(secondInput)\" />\n      } @else {\n        <sd-inline-text\n          #firstInput\n          chrome=\"seamless\"\n          [clearable]=\"false\"\n          [autofocus]=\"autofocus()\"\n          [state]=\"_state\"\n          [value]=\"draft()\"\n          (valueChange)=\"draft.set($event)\"\n          [placeholder]=\"ph()\"\n          [autoId]=\"_autoId ?? undefined\"\n          (sdFocus)=\"onFocus()\"\n          (sdBlur)=\"commitSingle()\"\n          (keyupEnter)=\"firstInput.blur()\"\n          (keydownEscape)=\"revertAndBlur(firstInput)\" />\n      }\n    </span>\n  }\n\n  <!-- × segment -->\n  <button type=\"button\" class=\"c-seamless__x\" aria-label=\"Remove filter\" (click)=\"onRemove($event)\">\n    <sd-icon name=\"close\"></sd-icon>\n  </button>\n</span>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, viewChild } from '@angular/core';\n\nimport { SdOperator } from '@sdcorejs/angular/components/operator';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDateRange } from '@sdcorejs/angular/forms/date-range';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { Operator } from '@sdcorejs/utils/models';\n\nimport { SdQueryInlineValueChip } from '../inline-value-chip/inline-value-chip.component';\nimport { BuildingChip } from '../../query-bar.model';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\ntype Density = 'compact' | 'comfortable';\n\n/**\n * Visual block for the in-progress build chip (inline mode token builder).\n *\n * why: tách khỏi `<sd-query-bar>` để parent chỉ giữ state (`building()` signal +\n * step transitions) — tất cả render logic của 2 step (operator picker / value\n * picker) cộng với 7 nhánh field type sống tại đây.\n *\n * The chip has two visually distinct branches:\n *  - **Seamless** (`string` / `number`) — the entire pill IS an `<sd-query-inline-value-chip>`\n *    (its own border, autofocused input). The host's `.c-token-building` shell is skipped.\n *  - **Token** (`values` / `lazy-values` / `date` / `datetime` / `boolean` / other) —\n *    `.c-token.c-token-building` dashed pill with field label + operator (menu in\n *    operator step, disabled badge in value step) + the per-type picker + × cancel.\n */\n@Component({\n  selector: 'sd-query-build-chip',\n  templateUrl: './build-chip.component.html',\n  styleUrl: './build-chip.component.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdIcon, CommonModule, SdOperator, SdDate, SdDateRange, SdDatetime, SdInput, SdInputNumber, SdSelect, SdQueryInlineValueChip],\n})\nexport class SdQueryBuildChip {\n  /** Current build state — drives every visual branch. */\n  readonly building = input.required<BuildingChip>();\n\n  /** Density preset — forwarded to the seamless chip + sizes the .c-token row. */\n  readonly density = input<Density>('compact');\n\n  /** Operator set offered in the operator-step menu (parent's `allowedOperatorsFor(field)`). */\n  readonly allowedOperators = input<Operator[]>([]);\n\n  /** Whether the active operator is a multi-select (`IN`/`NOT_IN`) — drives sd-select [multiple]. */\n  readonly multiple = input(false);\n\n  /** Show the operator label on the seamless chip's pill (forwarded to inline-value-chip). */\n  readonly showOperator = input(false);\n\n  /**\n   * Prefix for `data-autoid` on the inner picker / seamless input.\n   * why: parent originally hard-coded `'qb-build-value'` everywhere; default preserves that\n   * for backward compatibility with existing e2e selectors.\n   */\n  readonly autoId = input<string>('qb-build-value');\n\n  // ---------------------------------------------------------------------------\n  // Outputs\n  // ---------------------------------------------------------------------------\n\n  /** Operator chosen from the operator-step menu — parent advances to value step. */\n  readonly pickOperator = output<Operator>();\n\n  /**\n   * Value committed from a non-seamless picker (sd-select / sd-date / sd-date-range /\n   * sd-datetime) or a boolean toggle. Parent pushes the completed chip and clears building.\n   */\n  readonly commitValue = output<unknown>();\n\n  /** × button — abandon the build (parent clears `building` signal). */\n  readonly cancel = output<void>();\n\n  /**\n   * Commit from the seamless (string / number) branch. Parent decides empty → cancel\n   * vs push complete (see `onBuildSeamlessCommit`); this just forwards the raw value.\n   */\n  readonly seamlessCommit = output<unknown>();\n\n  /** Fallback editor (boolean ng-template / other) — staged draft on every change. */\n  readonly draftChange = output<unknown>();\n\n  /** Fallback editor — Enter / click commits the staged draft. */\n  readonly draftCommit = output<void>();\n\n  // ---------------------------------------------------------------------------\n  // Internal refs — used by parent via public open*() methods\n  // ---------------------------------------------------------------------------\n\n  /** Operator-step menu — auto-opened by parent right after `building` enters operator step. */\n  private readonly opMenu = viewChild<SdOperator>('buildOperator');\n\n  /** Value-step picker (the active bare control) — auto-opened by parent at value step. */\n  private readonly picker = viewChild<SdSelect | SdDate | SdDatetime | SdDateRange>('bPicker');\n\n  /** Open the operator menu — parent calls after rendering the operator step. */\n  openOperator(): void {\n    this.opMenu()?.open();\n  }\n\n  /** Open the value-step picker's native panel — parent calls after rendering the value step. */\n  openPicker(): void {\n    (this.picker() as any)?.open?.();\n  }\n\n  // ---------------------------------------------------------------------------\n  // Template helpers\n  // ---------------------------------------------------------------------------\n\n  /** True when the seamless branch (string/number value step) should be rendered. */\n  readonly isSeamless = computed<boolean>(() => {\n    const b = this.building();\n    if (b.step !== 'value') return false;\n    const t = b.field.type;\n    return t === 'string' || t === 'number';\n  });\n}\n","<!--\n  In-progress chip (inline-mode token build flow).\n  Seamless string/number branch keeps its own pill; everything else renders inside\n  the dashed .c-token.c-token-building shell.\n-->\n@let _building = building();\n@let _autoId = autoId();\n\n@if (isSeamless()) {\n  <sd-query-inline-value-chip\n    [field]=\"_building.field\"\n    [operator]=\"$any(_building.operator)\"\n    [value]=\"_building.value ?? null\"\n    [density]=\"density()\"\n    [showOperator]=\"showOperator()\"\n    [autoId]=\"_autoId\"\n    [autofocus]=\"true\"\n    (valueChange)=\"seamlessCommit.emit($event)\"\n    (remove)=\"cancel.emit()\" />\n} @else {\n  <div class=\"c-token c-token-building\">\n    <span class=\"c-token-field\">{{ _building.field.label }}</span>\n\n    @if (_building.step === 'operator') {\n      <sd-operator\n        #buildOperator\n        class=\"c-token-op\"\n        [operators]=\"allowedOperators()\"\n        [model]=\"_building.operator\"\n        (modelChange)=\"pickOperator.emit($any($event))\" />\n    } @else {\n      <!-- why: badge readonly cho operator đã chọn — vẫn render <sd-operator>\n           để giữ thị giác giống chip hoàn thành (icon + tooltip). -->\n      <sd-operator\n        class=\"c-token-op\"\n        [operators]=\"[$any(_building.operator)]\"\n        [model]=\"$any(_building.operator)\"\n        [disabled]=\"true\" />\n\n      @if (_building.field.type === 'values' || _building.field.type === 'lazy-values') {\n        @let _bopt = $any(_building.field).option;\n        <span class=\"c-token-value c-token-value-edit\">\n          <sd-select #bPicker size=\"sm\" [viewed]=\"'inline'\" [clearable]=\"false\" minWidthPanel=\"300px\"\n            [autoId]=\"_autoId\"\n            [items]=\"_building.field.type === 'lazy-values' ? $any(_bopt).search : $any(_bopt.items)\"\n            [valueField]=\"_bopt.valueField\"\n            [displayField]=\"_bopt.displayField\"\n            [multiple]=\"multiple()\"\n            [model]=\"$any(_building.value)\"\n            (sdChange)=\"commitValue.emit($event)\">\n            <!-- why: build chip multi-select cũng cần \"head +N\" để gọn (giống completed chip). -->\n            <ng-template #sdValue let-selectedItems=\"selectedItems\">\n              @if ((selectedItems?.length ?? 0) > 1) {\n                <span class=\"c-token-multi-head\">{{ $any(selectedItems)[0][_bopt.displayField] }}</span> +{{ selectedItems.length - 1 }}\n              } @else if ((selectedItems?.length ?? 0) === 1) {\n                <span class=\"c-token-multi-head\">{{ $any(selectedItems)[0][_bopt.displayField] }}</span>\n              }\n            </ng-template>\n          </sd-select>\n        </span>\n      } @else if (_building.field.type === 'date') {\n        <span class=\"c-token-value c-token-value-edit\">\n          @if (_building.operator === 'BETWEEN') {\n            <!-- why: 1 sd-date-range thay 2 sd-date — gọn hơn, hành vi thống nhất với completed chip. -->\n            <sd-date-range #bPicker size=\"sm\" [viewed]=\"'inline'\" [clearable]=\"false\"\n              [autoId]=\"_autoId\"\n              [model]=\"$any(_building.value)\"\n              (sdChange)=\"commitValue.emit($event)\"></sd-date-range>\n          } @else {\n            <sd-date #bPicker size=\"sm\" [viewed]=\"'inline'\" [clearable]=\"false\"\n              [autoId]=\"_autoId\"\n              [model]=\"$any(_building.value)\"\n              (sdChange)=\"commitValue.emit($event)\"></sd-date>\n          }\n        </span>\n      } @else if (_building.field.type === 'datetime') {\n        <span class=\"c-token-value c-token-value-edit\">\n          @if (_building.operator === 'BETWEEN') {\n            <!-- why: datetime BETWEEN downgrade về date-range (mất time precision; đã thống nhất). -->\n            <sd-date-range #bPicker size=\"sm\" [viewed]=\"'inline'\" [clearable]=\"false\"\n              [autoId]=\"_autoId\"\n              [model]=\"$any(_building.value)\"\n              (sdChange)=\"commitValue.emit($event)\"></sd-date-range>\n          } @else {\n            <sd-datetime #bPicker size=\"sm\" [viewed]=\"'inline'\" [clearable]=\"false\"\n              [autoId]=\"_autoId\"\n              [model]=\"$any(_building.value)\"\n              (sdChange)=\"commitValue.emit($event)\"></sd-datetime>\n          }\n        </span>\n      } @else if (_building.field.type === 'boolean') {\n        <!-- why: native button thay sd-button (tránh mat-button baseline 36px gây tràn).\n             Pill nhỏ vẽ bằng CSS scoped trong chip — giữ semantic colour qua class\n             .c-bool-true / .c-bool-false. -->\n        <span class=\"c-token-value c-token-value-edit c-bool-toggle\">\n          <button\n            type=\"button\"\n            class=\"c-bool-btn c-bool-true\"\n            [class.c-bool-active]=\"_building.value === true\"\n            [attr.data-autoId]=\"_autoId + '-true'\"\n            (click)=\"commitValue.emit(true)\">\n            {{ $any(_building.field).trueLabel || 'Có' }}\n          </button>\n          <button\n            type=\"button\"\n            class=\"c-bool-btn c-bool-false\"\n            [class.c-bool-active]=\"_building.value === false\"\n            [attr.data-autoId]=\"_autoId + '-false'\"\n            (click)=\"commitValue.emit(false)\">\n            {{ $any(_building.field).falseLabel || 'Không' }}\n          </button>\n        </span>\n      } @else {\n        <!-- Fallback (e.g. unforeseen type) — generic sd-input wired via draft outputs. -->\n        <span class=\"c-token-value c-token-value-edit\">\n          <sd-input size=\"sm\"\n            [autoId]=\"_autoId\"\n            [model]=\"$any(_building.value)\"\n            (sdChange)=\"draftChange.emit($event)\"\n            (keyupEnter)=\"draftCommit.emit()\"></sd-input>\n        </span>\n      }\n    }\n\n    <button type=\"button\" class=\"c-token-remove\" aria-label=\"Cancel\" (click)=\"cancel.emit()\">\n      <sd-icon name=\"close\"></sd-icon>\n    </button>\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, isSignal, output, signal, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatMenu, MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { isObservable } from 'rxjs';\n\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdOperator } from '@sdcorejs/angular/components/operator';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { Filter, Operator } from '@sdcorejs/utils/models';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\nimport {\n  SD_QUERY_MULTI_OPERATORS,\n  SD_QUERY_NO_DATA_OPERATORS,\n  SdQueryField,\n  sdQueryAllowedOperators,\n  sdQueryFieldIcon,\n  sdQueryShowOperatorSelector,\n} from '../../query-bar.model';\n\ninterface Range {\n  from?: string | number | null;\n  to?: string | number | null;\n}\n\n/**\n * Popover-mode chip editor — the entire `<mat-menu>` that opens when a popover-mode\n * chip is clicked. Owns ALL operator+value staging signals and async option loading.\n *\n * why: tách khỏi `<sd-query-bar>` để parent chỉ giữ `editingIndex` (chip nào đang\n * mở) + nhận `(commit)` khi popover đóng. Mỗi lần parent gọi `seed(filter, field)`\n * trước khi mở chip popover, child reset staging signals + kích option loading.\n *\n * Public surface (template ref `#cp`):\n *   - `cp.menu()` — the `<mat-menu>` to feed `[menu]` of `<sd-query-popover-chip>`\n *   - `cp.seed(filter, field)` — parent reseeds staging before opening\n *   - `(commit)` output — emitted on mat-menu close with staged Filter\n *   - `(swapField)` output — emitted when the nested field switcher picks a new field\n */\n@Component({\n  selector: 'sd-query-chip-popover',\n  templateUrl: './chip-popover.component.html',\n  styleUrl: './chip-popover.component.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    SdIcon,\n    CommonModule,\n    FormsModule,\n    MatMenuModule,\n    MatTooltipModule,\n    SdButton,\n    SdOperator,\n    SdSelect,\n    SdInput,\n    SdInputNumber,\n    SdDate,\n    SdDatetime,\n  ],\n})\nexport class SdQueryChipPopover {\n  // ---------------------------------------------------------------------------\n  // Inputs\n  // ---------------------------------------------------------------------------\n\n  /** Resolved field of the currently editing chip — parent passes from `fieldByKey()`. */\n  readonly field = input<SdQueryField | undefined>(undefined);\n\n  /** The chip's current Filter — used by `seed()` for initial staging values. */\n  readonly filter = input<Filter | undefined>(undefined);\n\n  /** Optional chip index — embedded in the composed autoIds. */\n  readonly chipIndex = input<number | null>(null);\n\n  /** Prefix for `data-autoId` on inner controls. */\n  readonly autoIdBase = input<string>('qb');\n\n  /** MatMenu for the field switcher — parent passes its `<sd-query-field-picker>` menu. */\n  readonly switchPickerMenu = input<MatMenu | undefined>(undefined);\n\n  // ---------------------------------------------------------------------------\n  // Outputs\n  // ---------------------------------------------------------------------------\n\n  /** Emitted when mat-menu closes — parent splices `next` into filters[idx]. */\n  readonly commit = output<Filter>();\n\n  /** Emitted when nested field-switcher picks a new field — parent calls changeFilterField. */\n  readonly swapField = output<SdQueryField>();\n\n  // ---------------------------------------------------------------------------\n  // Staging signals — uncommitted edits, committed on menu close.\n  // ---------------------------------------------------------------------------\n\n  /** Staged operator. */\n  readonly editingOperator = signal<Operator>('EQUAL');\n  /** Staged value (shape depends on field type + operator). */\n  readonly editingValue = signal<unknown>(null);\n  /** Resolved option list for values / lazy-values. */\n  readonly editingOptions = signal<any[]>([]);\n  /** Loading flag for async option fetch. */\n  readonly editingOptionsLoading = signal(false);\n\n  // ---------------------------------------------------------------------------\n  // Derived state\n  // ---------------------------------------------------------------------------\n\n  readonly allowedOperators = computed<Operator[]>(() => {\n    const f = this.field();\n    return f ? sdQueryAllowedOperators(f) : [];\n  });\n\n  readonly showOperatorSelector = computed<boolean>(() => {\n    const f = this.field();\n    return f ? sdQueryShowOperatorSelector(f) : false;\n  });\n\n  /** Whether the staged operator is multi-select (IN/NOT_IN). */\n  multiple(op?: Operator): boolean {\n    return SD_QUERY_MULTI_OPERATORS.includes(op ?? this.editingOperator());\n  }\n\n  /** Whether the staged operator carries no data (NULL/NOT_NULL). */\n  isNoDataOperator(op: Operator | string): boolean {\n    return SD_QUERY_NO_DATA_OPERATORS.includes(op as Operator);\n  }\n\n  /** Compose an autoId for an inner control (`<base>-chip<idx>-<role>`). */\n  chipAutoId(role: string): string {\n    const base = this.autoIdBase() ?? 'qb';\n    const idx = this.chipIndex();\n    return `${base}-chip${idx ?? 'x'}-${role}`;\n  }\n\n  readonly iconFor = sdQueryFieldIcon;\n\n  // ---------------------------------------------------------------------------\n  // mat-menu instance — parent reads via `cp.menu()`\n  // ---------------------------------------------------------------------------\n\n  readonly menu = viewChild<MatMenu>('menu');\n\n  // ---------------------------------------------------------------------------\n  // Seed — parent calls before opening the popover so staging signals are\n  // primed from the current filter + the option list is loaded.\n  // ---------------------------------------------------------------------------\n\n  /** Reseed staging from a new filter/field pair — call before opening the menu. */\n  seed(filter: Filter | undefined, field: SdQueryField | undefined): void {\n    if (!filter || !field) {\n      this.editingOperator.set('EQUAL');\n      this.editingValue.set(null);\n      this.editingOptions.set([]);\n      this.editingOptionsLoading.set(false);\n      return;\n    }\n    this.editingOperator.set((filter as any).operator as Operator);\n    this.editingValue.set((filter as any).data ?? null);\n\n    if (field.type === 'values') {\n      this.#loadValuesOptions(field);\n    } else if (field.type === 'lazy-values') {\n      this.#loadLazyOptions(field);\n    } else {\n      this.editingOptions.set([]);\n      this.editingOptionsLoading.set(false);\n    }\n  }\n\n  // ---------------------------------------------------------------------------\n  // Operator + value mutators\n  // ---------------------------------------------------------------------------\n\n  /** Called on operator change in the popover header — reshapes value when family changes. */\n  onEditingOperatorChange(next: Operator): void {\n    const prev = this.editingOperator();\n    this.editingOperator.set(next);\n\n    if (SD_QUERY_NO_DATA_OPERATORS.includes(next)) {\n      this.editingValue.set(null);\n      return;\n    }\n    if (next === 'BETWEEN') {\n      const v = this.editingValue();\n      if (v && typeof v === 'object' && 'from' in (v as any)) return;\n      this.editingValue.set({ from: null, to: null } as Range);\n      return;\n    }\n    const goingToMulti = SD_QUERY_MULTI_OPERATORS.includes(next);\n    const wasMulti = SD_QUERY_MULTI_OPERATORS.includes(prev as Operator);\n    if (goingToMulti && !wasMulti) {\n      const v = this.editingValue();\n      this.editingValue.set(v == null ? [] : [v]);\n    } else if (!goingToMulti && wasMulti) {\n      const v = this.editingValue();\n      this.editingValue.set(Array.isArray(v) && v.length > 0 ? v[0] : null);\n    }\n  }\n\n  /** Single-value input change. */\n  onEditingValueInput(value: unknown): void {\n    this.editingValue.set(value);\n  }\n\n  /** BETWEEN range — mutate only `.from`. */\n  onEditingRangeFrom(value: string | number | null): void {\n    const v = (this.editingValue() as Range) ?? {};\n    this.editingValue.set({ ...v, from: value });\n  }\n\n  /** BETWEEN range — mutate only `.to`. */\n  onEditingRangeTo(value: string | number | null): void {\n    const v = (this.editingValue() as Range) ?? {};\n    this.editingValue.set({ ...v, to: value });\n  }\n\n  /** Toggle a value in the staged multi-select array. */\n  toggleEditingMultiValue(value: unknown): void {\n    const arr = Array.isArray(this.editingValue()) ? [...(this.editingValue() as unknown[])] : [];\n    const idx = arr.indexOf(value);\n    if (idx >= 0) arr.splice(idx, 1);\n    else arr.push(value);\n    this.editingValue.set(arr);\n  }\n\n  isEditingMultiSelected(value: unknown): boolean {\n    const v = this.editingValue();\n    return Array.isArray(v) && v.includes(value);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Menu lifecycle — close = commit\n  // ---------------------------------------------------------------------------\n\n  /**\n   * mat-menu's (closed) handler — compose the next Filter from staging signals and\n   * emit (commit). Parent splices into its filters[] and nulls editingIndex.\n   */\n  onMenuClosed(): void {\n    const f = this.filter();\n    if (!f) return;\n    const next: Filter = {\n      field: (f as any).field,\n      operator: this.editingOperator(),\n      data: this.editingValue(),\n    } as Filter;\n    this.commit.emit(next);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Async option loaders — same logic as the parent's private methods.\n  // ---------------------------------------------------------------------------\n\n  #loadValuesOptions(field: SdQueryField): void {\n    const opt = (field as any).option;\n    const items = opt?.items;\n    if (Array.isArray(items)) {\n      this.editingOptions.set(items);\n      this.editingOptionsLoading.set(false);\n      return;\n    }\n    if (isSignal(items)) {\n      this.editingOptions.set((items as any)());\n      this.editingOptionsLoading.set(false);\n      return;\n    }\n    if (typeof items === 'function') {\n      this.editingOptionsLoading.set(true);\n      Promise.resolve(items())\n        .then((arr: any[]) => this.editingOptions.set(arr ?? []))\n        .finally(() => this.editingOptionsLoading.set(false));\n    }\n  }\n\n  #loadLazyOptions(field: SdQueryField, search = ''): void {\n    const opt = (field as any).option;\n    if (!opt?.search) return;\n    this.editingOptionsLoading.set(true);\n    const result = opt.search({ type: 'SEARCH', searchText: search });\n    if (isObservable(result)) {\n      (result as any).subscribe({\n        next: (arr: any[]) => this.editingOptions.set(arr ?? []),\n        complete: () => this.editingOptionsLoading.set(false),\n        error: () => this.editingOptionsLoading.set(false),\n      });\n    } else {\n      Promise.resolve(result)\n        .then((arr: any[]) => this.editingOptions.set(arr ?? []))\n        .finally(() => this.editingOptionsLoading.set(false));\n    }\n  }\n}\n","<!--\n  Chip popover — operator + value editor for the popover-mode chip.\n  Visual layout mirrors the previous inline `<mat-menu #chipPopover>` in query-bar.\n  Body branches on operator + field.type — 8 paths preserved exactly.\n-->\n<mat-menu #menu=\"matMenu\" class=\"c-chip-popover\" xPosition=\"after\" yPosition=\"below\" (closed)=\"onMenuClosed()\">\n  <ng-template matMenuContent>\n    @let _field = field();\n    @let _editingOperator = editingOperator();\n    @let _editingValue = editingValue();\n    @let _editingOptions = editingOptions();\n    @let _editingOptionsLoading = editingOptionsLoading();\n    @let _switchPickerMenu = switchPickerMenu();\n\n    @if (_field) {\n      <div class=\"c-pop-header\" (click)=\"$event.stopPropagation()\">\n        <sd-icon [name]=\"iconFor(_field)\"></sd-icon>\n        <!-- why: nested mat-menu trigger to swap the chip's field — parent provides\n             the field-picker MatMenu via [switchPickerMenu]. -->\n        @if (_switchPickerMenu) {\n          <button\n            type=\"button\"\n            class=\"c-pop-header-field\"\n            [matMenuTriggerFor]=\"_switchPickerMenu\"\n            matTooltip=\"Đổi field\">\n            <span>{{ _field.label }}</span>\n            <sd-icon name=\"unfold_more\"></sd-icon>\n          </button>\n        } @else {\n          <span class=\"c-pop-header-field\">{{ _field.label }}</span>\n        }\n        <!-- Operator selector (right-aligned). Disabled when field has ≤1 operator. -->\n        <sd-operator\n          class=\"c-pop-header-operator\"\n          [autoId]=\"chipAutoId('operator')\"\n          [operators]=\"allowedOperators()\"\n          [model]=\"_editingOperator\"\n          [disabled]=\"!showOperatorSelector()\"\n          (modelChange)=\"onEditingOperatorChange($any($event))\" />\n      </div>\n\n      <div class=\"c-pop-body\" (click)=\"$event.stopPropagation()\">\n        @if (!isNoDataOperator(_editingOperator)) {\n          @if (_editingOperator === 'BETWEEN') {\n            @if (_field.type === 'date') {\n              <div class=\"c-pop-between\">\n                <sd-date size=\"sm\" hideInlineError\n                  [autoId]=\"chipAutoId('value-from')\"\n                  placeholder=\"Từ\"\n                  [model]=\"$any(_editingValue)?.from\"\n                  (sdChange)=\"onEditingRangeFrom($event)\">\n                </sd-date>\n                <sd-date size=\"sm\" hideInlineError\n                  [autoId]=\"chipAutoId('value-to')\"\n                  placeholder=\"Đến\"\n                  [model]=\"$any(_editingValue)?.to\"\n                  (sdChange)=\"onEditingRangeTo($event)\">\n                </sd-date>\n              </div>\n            } @else if (_field.type === 'datetime') {\n              <div class=\"c-pop-between\">\n                <sd-datetime size=\"sm\" hideInlineError\n                  [autoId]=\"chipAutoId('value-from')\"\n                  placeholder=\"Từ\"\n                  [model]=\"$any(_editingValue)?.from\"\n                  (sdChange)=\"onEditingRangeFrom($event)\">\n                </sd-datetime>\n                <sd-datetime size=\"sm\" hideInlineError\n                  [autoId]=\"chipAutoId('value-to')\"\n                  placeholder=\"Đến\"\n                  [model]=\"$any(_editingValue)?.to\"\n                  (sdChange)=\"onEditingRangeTo($event)\">\n                </sd-datetime>\n              </div>\n            } @else {\n              <div class=\"c-pop-between\">\n                <sd-input-number size=\"sm\" hideInlineError\n                  [autoId]=\"chipAutoId('value-from')\"\n                  placeholder=\"Từ\"\n                  [model]=\"$any(_editingValue)?.from\"\n                  (sdChange)=\"onEditingRangeFrom($event)\">\n                </sd-input-number>\n                <sd-input-number size=\"sm\" hideInlineError\n                  [autoId]=\"chipAutoId('value-to')\"\n                  placeholder=\"Đến\"\n                  [model]=\"$any(_editingValue)?.to\"\n                  (sdChange)=\"onEditingRangeTo($event)\">\n                </sd-input-number>\n              </div>\n            }\n          } @else if (_field.type === 'boolean') {\n            <div class=\"c-pop-boolean c-bool-toggle\">\n              <sd-button\n                [autoId]=\"chipAutoId('value-true')\"\n                [type]=\"_editingValue === true ? 'fill' : 'outline'\"\n                color=\"success\"\n                [title]=\"$any(_field).trueLabel || 'Có'\"\n                (click)=\"onEditingValueInput(true)\">\n              </sd-button>\n              <sd-button\n                [autoId]=\"chipAutoId('value-false')\"\n                [type]=\"_editingValue === false ? 'fill' : 'outline'\"\n                color=\"warning\"\n                [title]=\"$any(_field).falseLabel || 'Không'\"\n                (click)=\"onEditingValueInput(false)\">\n              </sd-button>\n            </div>\n          } @else if (_field.type === 'values' || _field.type === 'lazy-values') {\n            @let _opt = $any(_field).option;\n            <sd-select size=\"sm\" hideInlineError\n              [autoId]=\"chipAutoId('value')\"\n              placeholder=\"Chọn giá trị\"\n              [items]=\"_editingOptions\"\n              [valueField]=\"_opt.valueField\"\n              [displayField]=\"_opt.displayField\"\n              [multiple]=\"multiple()\"\n              [model]=\"$any(_editingValue)\"\n              (sdChange)=\"onEditingValueInput($event)\">\n            </sd-select>\n            @if (_editingOptionsLoading) {\n              <div class=\"c-pop-values-loading\">Đang tải...</div>\n            }\n          } @else if (_field.type === 'date') {\n            <sd-date size=\"sm\" hideInlineError\n              [autoId]=\"chipAutoId('value')\"\n              placeholder=\"Chọn giá trị\"\n              [model]=\"$any(_editingValue)\"\n              (sdChange)=\"onEditingValueInput($event)\">\n            </sd-date>\n          } @else if (_field.type === 'datetime') {\n            <sd-datetime size=\"sm\" hideInlineError\n              [autoId]=\"chipAutoId('value')\"\n              placeholder=\"Chọn giá trị\"\n              [model]=\"$any(_editingValue)\"\n              (sdChange)=\"onEditingValueInput($event)\">\n            </sd-datetime>\n          } @else if (_field.type === 'number') {\n            <sd-input-number size=\"sm\" hideInlineError\n              [autoId]=\"chipAutoId('value')\"\n              placeholder=\"Nhập giá trị\"\n              [model]=\"$any(_editingValue)\"\n              (sdChange)=\"onEditingValueInput($event)\">\n            </sd-input-number>\n          } @else {\n            <sd-input size=\"sm\" hideInlineError\n              [autoId]=\"chipAutoId('value')\"\n              placeholder=\"Nhập giá trị\"\n              [model]=\"$any(_editingValue)\"\n              (sdChange)=\"onEditingValueInput($event)\">\n            </sd-input>\n          }\n        }\n      </div>\n    }\n  </ng-template>\n</mat-menu>\n","import { ChangeDetectionStrategy, Component, computed, input, output, viewChild } from '@angular/core';\nimport { MatMenu, MatMenuModule } from '@angular/material/menu';\n\nimport { SdQueryField, sdQueryFieldIcon } from '../../query-bar.model';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n/**\n * Field picker mat-menu for `sd-query-bar`.\n *\n * Shared between two flows in the bar:\n * - \"Add filter\" — pass `[usedKeys]` (a Set of field keys already on the bar) so\n *   those entries render disabled with a check.\n * - \"Đổi field\" inside the chip popover — pass `[currentKey]` to disable the\n *   currently-bound field.\n *\n * Parent triggers via `[matMenuTriggerFor]=\"picker.menu()\"` and receives the\n * chosen field through `(pick)`.\n */\n@Component({\n  selector: 'sd-query-field-picker',\n  templateUrl: './field-picker.component.html',\n  styleUrl: './field-picker.component.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdIcon, MatMenuModule],\n})\nexport class SdQueryFieldPicker {\n  /** Field list shown in the menu (caller-supplied; rendered in input order). */\n  readonly fields = input<SdQueryField[]>([]);\n\n  /** Single key disabled with a trailing check — used in the chip-popover \"Đổi field\" flow. */\n  readonly currentKey = input<string | undefined>(undefined);\n\n  /** Set of keys already in use — used in the \"Add filter\" flow to grey out duplicates. */\n  readonly usedKeys = input<Set<string>>(new Set<string>());\n\n  /** Emits when the user picks an enabled field. */\n  readonly pick = output<SdQueryField>();\n\n  /** MatMenu instance — parent binds `[matMenuTriggerFor]=\"picker.menu()\"`. */\n  readonly menu = viewChild.required(MatMenu);\n\n  readonly iconFor = sdQueryFieldIcon;\n\n  /** Per-field disabled state — current key OR used key OR field's own disabled flag. */\n  readonly disabledMap = computed<Set<string>>(() => {\n    const set = new Set(this.usedKeys());\n    const cur = this.currentKey();\n    if (cur) set.add(cur);\n    return set;\n  });\n\n  isDisabled(field: SdQueryField): boolean {\n    return field.disabled === true || this.disabledMap().has(field.key as string);\n  }\n\n  /** \"Current\" check icon — only when the field matches `currentKey`. */\n  isCurrent(field: SdQueryField): boolean {\n    return field.key === this.currentKey();\n  }\n\n  /** \"Used\" check icon — when the field is in `usedKeys` (not the same as current). */\n  isUsed(field: SdQueryField): boolean {\n    return this.usedKeys().has(field.key as string);\n  }\n}\n","<mat-menu #m=\"matMenu\" xPosition=\"after\" yPosition=\"below\" class=\"c-field-picker-menu\">\n  @for (field of fields(); track $index) {\n    <button\n      type=\"button\"\n      mat-menu-item\n      [disabled]=\"isDisabled(field)\"\n      (click)=\"pick.emit(field)\">\n      <sd-icon class=\"c-field-item-icon\" [name]=\"iconFor(field)\"></sd-icon>\n      <span class=\"c-field-item-label\">{{ field.label }}</span>\n      <span class=\"c-field-item-type\">{{ field.type }}</span>\n      @if (isCurrent(field) || isUsed(field)) {\n        <sd-icon class=\"c-field-item-check\" name=\"check\"></sd-icon>\n      }\n    </button>\n  } @empty {\n    <div class=\"c-field-empty\">Chưa có field nào được cấu hình.</div>\n  }\n</mat-menu>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\n\nimport { SdOperator } from '@sdcorejs/angular/components/operator';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDateRange } from '@sdcorejs/angular/forms/date-range';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { Filter, Operator } from '@sdcorejs/utils/models';\n\nimport { SdQueryField, sdQueryFieldIcon } from '../../query-bar.model';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\ntype Density = 'compact' | 'comfortable';\n\n/**\n * Completed inline chip (non-string/number — those use `<sd-query-inline-value-chip>`).\n *\n * why: tách edit lifecycle ra khỏi parent `<sd-query-bar>` — child tự quản lý\n * `isEditing` signal, auto-open picker, focusout exit. Parent chỉ pass field/filter\n * và nhận commit/remove outputs.\n *\n * Covers types: boolean, date, datetime, values, lazy-values, plus a fallback else\n * branch. BETWEEN (date / datetime) uses a single `<sd-date-range>` (datetime\n * downgrades to date precision).\n *\n * why: `values` / `lazy-values` đã chuyển sang `<sd-select [viewed]=\"'inline'\">` — sd-select\n * tự quản click→edit + focusout→thoát + bare editor, nên các nhánh đó KHÔNG dùng\n * `enterEdit` / `onFocusOut` / `#editing` nữa. Các nhánh còn lại (boolean / date / datetime /\n * BETWEEN) vẫn dùng lifecycle thủ công cho tới khi control tương ứng có inline mode (rollout).\n */\n@Component({\n  selector: 'sd-query-inline-chip',\n  templateUrl: './inline-chip.component.html',\n  styleUrl: './inline-chip.component.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdIcon, CommonModule, SdOperator, SdDate, SdDateRange, SdDatetime, SdSelect],\n})\nexport class SdQueryInlineChip {\n  // ---------------------------------------------------------------------------\n  // Inputs\n  // ---------------------------------------------------------------------------\n\n  /** Resolved field — parent passes it (no lookup needed inside). */\n  readonly field = input.required<SdQueryField>();\n\n  /** The chip's Filter — used for `data` + `operator`. */\n  readonly filter = input.required<Filter>();\n\n  /** Density preset — sizes the `.c-token` row. */\n  readonly density = input<Density>('compact');\n\n  /** Whether the active operator is a multi-select (IN/NOT_IN). */\n  readonly multiple = input(false);\n\n  /** Show `<sd-operator>` (disabled badge) on the chip; otherwise show `':'` separator. */\n  readonly showOperator = input(false);\n\n  /** autoId prefix for inner controls (parent passes `inlineAutoId(i, 'value')`). */\n  readonly autoId = input<string>('');\n\n  /** Pre-computed display text — parent owns `chipValueText(filter)` so we don't recompute. */\n  readonly valueText = input<string>('');\n\n  /** No-data operator (NULL/NOT_NULL) — hide entire value slot when true. */\n  readonly isNoData = input(false);\n\n  // ---------------------------------------------------------------------------\n  // Outputs\n  // ---------------------------------------------------------------------------\n\n  /** Single-value commit — parent runs `updateFilter(i, { data })`. */\n  readonly commit = output<unknown>();\n\n  /** BETWEEN commit (date/datetime) — parent runs `setFilterRange(i, ev)`. */\n  readonly commitRange = output<{ from: unknown; to: unknown } | null>();\n\n  /** Live edit during multi-select — parent runs `editValueFn(i)(v)`. */\n  readonly liveChange = output<unknown>();\n\n  /** × removal. */\n  readonly remove = output<void>();\n\n  // ---------------------------------------------------------------------------\n  // Internal state\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Edit toggle for the BOOLEAN branch only — viewed (false) ↔ toggle buttons (true).\n   * why: boolean isn't a `viewed`-aware form control (no inline mode); it keeps the chip's own\n   * click-to-edit. values/date/datetime/BETWEEN delegate to their control's `viewed='inline'`.\n   */\n  readonly #editing = signal(false);\n  readonly editing = this.#editing.asReadonly();\n\n  // ---------------------------------------------------------------------------\n  // Template helpers\n  // ---------------------------------------------------------------------------\n\n  readonly iconName = computed<string>(() => sdQueryFieldIcon(this.field()));\n\n  /** Operator code — convenience accessor for template. */\n  readonly operator = computed<Operator>(() => (this.filter() as any).operator as Operator);\n\n  /** Data payload — convenience accessor for template. */\n  readonly data = computed<unknown>(() => (this.filter() as any).data);\n\n  // ---------------------------------------------------------------------------\n  // Edit lifecycle\n  // ---------------------------------------------------------------------------\n\n  /** Enter edit mode (BOOLEAN branch — shows the toggle buttons; exits on toggle commit). */\n  enterEdit(): void {\n    if (this.#editing()) return;\n    this.#editing.set(true);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Commit handlers — single emit per category\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Single-value commit (sd-date, sd-datetime, single sd-select).\n   * why: date/datetime/values render via `viewed='inline'` (self-managed) — the chip only\n   * forwards the value; it no longer toggles `#editing` (that's boolean-only now).\n   */\n  emitSingleCommit(v: unknown): void {\n    this.commit.emit(v);\n  }\n\n  /** BETWEEN commit — sd-date-range (viewed='inline') emits `{from, to}`; chip just forwards it. */\n  emitRangeCommit(ev: { from: unknown; to: unknown } | null): void {\n    this.commitRange.emit(ev ?? null);\n  }\n\n  /** Multi-select live emit (sd-select inline). */\n  emitLive(v: unknown): void {\n    this.liveChange.emit(v);\n  }\n\n  /** Boolean toggle commit — exits edit. */\n  emitBoolean(v: boolean): void {\n    this.commit.emit(v);\n    this.#editing.set(false);\n  }\n}\n","<!--\n  Completed inline chip — non-string/number/seamless branches.\n  Edit lifecycle is self-managed: click enters edit + auto-opens picker,\n  focusout outside the wrapper exits edit, picker emits commit single OR\n  liveChange (multi) OR commitRange (BETWEEN).\n-->\n@let _field = field();\n@let _operator = operator();\n@let _data = data();\n@let _multiple = multiple();\n@let _editing = editing();\n@let _isNoData = isNoData();\n@let _autoId = autoId();\n\n<div class=\"c-token\" [class.c-token-editing]=\"_editing\">\n  <sd-icon class=\"c-token-icon\" [name]=\"iconName()\"></sd-icon>\n  <span class=\"c-token-field\">{{ _field.label }}</span>\n\n  @if (!_isNoData && showOperator()) {\n    <sd-operator class=\"c-token-op\" [operators]=\"[_operator]\" [model]=\"_operator\" [disabled]=\"true\" />\n  } @else if (!_isNoData) {\n    <span class=\"c-token-sep\">:</span>\n  }\n\n  @if (!_isNoData) {\n    @if (_field.type === 'boolean') {\n      @if (_editing) {\n        <!-- why: native button thay sd-button — mat-button MDC baseline 36px buộc\n             phải hack height/padding overrides; chip 28/32px nhỏ hơn nhiều. Tự vẽ\n             pill nhỏ với CSS scoped trong chip, không qua MDC, gọn + chuẩn baseline. -->\n        <span class=\"c-token-value c-token-value-edit c-bool-toggle\">\n          <button\n            type=\"button\"\n            class=\"c-bool-btn c-bool-true\"\n            [class.c-bool-active]=\"_data === true\"\n            [attr.data-autoId]=\"_autoId + '-true'\"\n            (click)=\"emitBoolean(true)\">\n            {{ $any(_field).trueLabel || 'Có' }}\n          </button>\n          <button\n            type=\"button\"\n            class=\"c-bool-btn c-bool-false\"\n            [class.c-bool-active]=\"_data === false\"\n            [attr.data-autoId]=\"_autoId + '-false'\"\n            (click)=\"emitBoolean(false)\">\n            {{ $any(_field).falseLabel || 'Không' }}\n          </button>\n        </span>\n      } @else {\n        <button type=\"button\" class=\"c-token-value\" (click)=\"enterEdit()\">{{ valueText() }}</button>\n      }\n    } @else if ((_field.type === 'date' || _field.type === 'datetime') && _operator === 'BETWEEN') {\n      <!-- why: sd-date-range [viewed]=\"'inline'\" tự quản click→edit + focusout (datetime downgrade về date).\n           Chip không wiring lifecycle nữa; [clearable]=false vì chip có × riêng. -->\n      <span class=\"c-token-value c-token-value-edit\">\n        <sd-date-range size=\"sm\"\n          [autoId]=\"_autoId\"\n          [viewed]=\"'inline'\"\n          [clearable]=\"false\"\n          [model]=\"$any(_data)\"\n          (sdChange)=\"emitRangeCommit($any($event))\"></sd-date-range>\n      </span>\n    } @else if (_field.type === 'values' || _field.type === 'lazy-values') {\n      @let _opt = $any(_field).option;\n      <!-- why: sd-select [viewed]=\"'inline'\" tự quản click→edit + focusout→thoát + bare editor.\n           Chip không wiring lifecycle cho nhánh này nữa (bỏ enterEdit/onFocusOut/bare). -->\n      <span class=\"c-token-value c-token-value-edit\">\n        <sd-select #chipPicker size=\"sm\" minWidthPanel=\"300px\"\n          [autoId]=\"_autoId\"\n          [items]=\"_field.type === 'lazy-values' ? $any(_opt).search : $any(_opt.items)\"\n          [valueField]=\"_opt.valueField\"\n          [displayField]=\"_opt.displayField\"\n          [multiple]=\"_multiple\"\n          [viewed]=\"'inline'\"\n          [clearable]=\"false\"\n          [model]=\"$any(_data)\"\n          (sdChange)=\"_multiple ? emitLive($event) : emitSingleCommit($event)\">\n          <!-- why: viewed mode mặc định dùng comma-joined cho multi — quá dài cho chip.\n               Override bằng template \"head +N\" giống popover chipValueText. -->\n          <ng-template #sdValue let-selectedItems=\"selectedItems\">\n            @if ((selectedItems?.length ?? 0) > 1) {\n              <span class=\"c-token-multi-head\">{{ $any(selectedItems)[0][_opt.displayField] }}</span> +{{ selectedItems.length - 1 }}\n            } @else if ((selectedItems?.length ?? 0) === 1) {\n              <span class=\"c-token-multi-head\">{{ $any(selectedItems)[0][_opt.displayField] }}</span>\n            }\n          </ng-template>\n        </sd-select>\n      </span>\n    } @else if (_field.type === 'date') {\n      <span class=\"c-token-value c-token-value-edit\">\n        <sd-date size=\"sm\"\n          [autoId]=\"_autoId\"\n          [viewed]=\"'inline'\"\n          [clearable]=\"false\"\n          [model]=\"$any(_data)\"\n          (sdChange)=\"emitSingleCommit($any($event))\"></sd-date>\n      </span>\n    } @else if (_field.type === 'datetime') {\n      <span class=\"c-token-value c-token-value-edit\">\n        <sd-datetime size=\"sm\"\n          [autoId]=\"_autoId\"\n          [viewed]=\"'inline'\"\n          [clearable]=\"false\"\n          [model]=\"$any(_data)\"\n          (sdChange)=\"emitSingleCommit($any($event))\"></sd-datetime>\n      </span>\n    } @else {\n      <!-- Fallback (unforeseen type) — read-only display via valueText. -->\n      <span class=\"c-token-value\">{{ valueText() }}</span>\n    }\n  }\n\n  <button type=\"button\" class=\"c-token-remove\" aria-label=\"Remove filter\" (click)=\"remove.emit()\">\n    <sd-icon name=\"close\"></sd-icon>\n  </button>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output, viewChild } from '@angular/core';\nimport { MatMenu, MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { SdOperator } from '@sdcorejs/angular/components/operator';\nimport { Filter, Operator } from '@sdcorejs/utils/models';\n\nimport { SdQueryField, sdQueryFieldIcon } from '../../query-bar.model';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n/**\n * Compact popover-mode chip face. Click → opens the parent-supplied [menu] (mat-menu\n * containing the chip editor). Inert div[role=button] so the nested <sd-operator>\n * doesn't end up as a button-in-button (invalid HTML).\n */\n@Component({\n  selector: 'sd-query-popover-chip',\n  templateUrl: './popover-chip.component.html',\n  styleUrl: './popover-chip.component.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdIcon, MatMenuModule, MatTooltipModule, SdOperator],\n})\nexport class SdQueryPopoverChip {\n  /** Resolved field (from the bar's `fieldByKey()` map). `undefined` → render raw key. */\n  readonly field = input<SdQueryField | undefined>(undefined);\n\n  /** The chip's filter — used to read `field` / `operator` / `data` for display text. */\n  readonly filter = input.required<Filter>();\n\n  /** \"Active\" = chip has a real value or is no-data op. Drives layout + colour. */\n  readonly active = input.required<boolean>();\n\n  /** Operator visible on the chip face (else hidden, \":\" separator). */\n  readonly showOperator = input(false);\n\n  /** Rendered value text for the value slot. */\n  readonly valueText = input<string>('');\n\n  /** Chip popover mat-menu instance supplied by the parent. */\n  readonly menu = input.required<MatMenu>();\n\n  /** Fired when the chip popover opens (parent seeds its editing state). */\n  readonly open = output<void>();\n  /** Fired when the user clicks the × removal icon. */\n  readonly remove = output<void>();\n\n  readonly iconFor = sdQueryFieldIcon;\n\n  filterField(): string {\n    return (this.filter() as any).field as string;\n  }\n  filterOperator(): Operator {\n    return (this.filter() as any).operator as Operator;\n  }\n\n  // why: parent's add/swap flow auto-opens the chip popover after render, and removeFilter\n  // closes the open one — expose open/close so the parent doesn't need a ViewChild on the\n  // internal MatMenuTrigger directive.\n  private readonly trigger = viewChild('chipTrigger', { read: MatMenuTrigger });\n  openMenu(): void {\n    this.trigger()?.openMenu();\n  }\n  closeMenu(): void {\n    this.trigger()?.closeMenu();\n  }\n}\n","<!-- why: div[role=button] (not <button>) so the nested <sd-operator> isn't button-in-button (invalid HTML). -->\n@let _active = active();\n@let _field = field();\n@let _filterField = filterField();\n@let _filterOperator = filterOperator();\n\n<div\n  #chipTrigger=\"matMenuTrigger\"\n  role=\"button\"\n  tabindex=\"0\"\n  class=\"c-chip\"\n  [class.c-chip-active]=\"_active\"\n  [class.c-chip-inactive]=\"!_active\"\n  [attr.data-field]=\"_filterField\"\n  [matTooltip]=\"_field?.label || _filterField\"\n  [matMenuTriggerFor]=\"menu()\"\n  (menuOpened)=\"open.emit()\"\n  (keydown.enter)=\"chipTrigger.openMenu()\"\n  (keydown.space)=\"$event.preventDefault(); chipTrigger.openMenu()\">\n  <sd-icon class=\"c-chip-icon\" [name]=\"_field ? iconFor(_field) : 'tune'\"></sd-icon>\n  <span class=\"c-chip-label\">{{ _field?.label || _filterField }}</span>\n\n  @if (showOperator() && _active) {\n    <sd-operator class=\"c-chip-operator\" [operators]=\"[_filterOperator]\" [model]=\"_filterOperator\" [disabled]=\"true\" />\n  } @else if (_active) {\n    <span class=\"c-chip-sep\">:</span>\n  }\n\n  @if (_active) {\n    <span class=\"c-chip-value\">{{ valueText() }}</span>\n  }\n\n  <sd-icon class=\"c-chip-chevron\" name=\"arrow_drop_down\"></sd-icon>\n\n  @if (_active) {\n    <span\n      role=\"button\"\n      tabindex=\"0\"\n      class=\"c-chip-remove\"\n      aria-label=\"Remove filter\"\n      (click)=\"$event.stopPropagation(); remove.emit()\"\n      (keydown.enter)=\"$event.stopPropagation(); remove.emit()\">\n      <sd-icon name=\"close\"></sd-icon>\n    </span>\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  afterNextRender,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  Injector,\n  input,\n  isSignal,\n  model,\n  output,\n  signal,\n  untracked,\n  viewChild,\n  viewChildren,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { I18nService } from '@sdcorejs/angular/i18n';\nimport { Filter, Operator } from '@sdcorejs/utils/models';\n\nimport { SdQueryActionsBar } from './components/actions-bar/actions-bar.component';\nimport { SdQueryBuildChip } from './components/build-chip/build-chip.component';\nimport { SdQueryChipPopover } from './components/chip-popover/chip-popover.component';\nimport { SdQueryFieldPicker } from './components/field-picker/field-picker.component';\nimport { SdQueryInlineChip } from './components/inline-chip/inline-chip.component';\nimport { SdQueryInlineValueChip } from './components/inline-value-chip/inline-value-chip.component';\nimport { SdQueryPopoverChip } from './components/popover-chip/popover-chip.component';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\nimport {\n  BuildingChip,\n  SD_QUERY_MULTI_OPERATORS,\n  SD_QUERY_NO_DATA_OPERATORS,\n  SdQuery,\n  SdQueryBarOption,\n  SdQueryField,\n  SdQueryLogic,\n  SdSavedFilter,\n  sdQueryAllowedOperators,\n  sdQueryDefaultOperator,\n  sdQueryFieldIcon,\n} from './query-bar.model';\n\ntype Density = 'compact' | 'comfortable';\ninterface Range {\n  from?: string | number | null;\n  to?: string | number | null;\n}\n\n/** Shared empty array — stable reference so template bindings don't churn change detection. */\nconst EMPTY_ARRAY: any[] = [];\n\n@Component({\n  selector: 'sd-query-bar',\n  templateUrl: './query-bar.component.html',\n  styleUrls: ['./query-bar.component.scss', './query-bar.controls.scss'],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    SdIcon,\n    CommonModule,\n    FormsModule,\n    MatMenuModule,\n    MatTooltipModule,\n    SdQueryActionsBar,\n    SdQueryBuildChip,\n    SdQueryChipPopover,\n    SdQueryFieldPicker,\n    SdQueryInlineChip,\n    SdQueryInlineValueChip,\n    SdQueryPopoverChip,\n  ],\n})\nexport class SdQueryBar {\n  readonly #i18n = inject(I18nService);\n  readonly #injector = inject(Injector);\n\n  /** All popover-mode chips in order — used to auto-open after addFilter / close before removeFilter. */\n  readonly popoverChips = viewChildren(SdQueryPopoverChip);\n\n  /** The extracted in-progress chip — owns operator menu + value picker view refs. */\n  private readonly buildChip = viewChild(SdQueryBuildChip);\n\n  /** The extracted chip popover — owns operator+value staging + commit-on-close. */\n  readonly chipPopover = viewChild(SdQueryChipPopover);\n\n  /**\n   * Land the user in the value editor after the build chip reaches the value step:\n   * popover-kind controls auto-open their native picker via the child; string/number\n   * branches use the seamless chip whose `[autofocus]` handles focus internally.\n   */\n  #enterValueStep(field: SdQueryField): void {\n    const k = field.type;\n    if (k === 'values' || k === 'lazy-values' || k === 'date' || k === 'datetime') {\n      afterNextRender(() => this.buildChip()?.openPicker(), { injector: this.#injector });\n    }\n    // why: string/number branch — <sd-query-inline-value-chip [autofocus]> tự focus,\n    // không cần parent gọi thêm.\n  }\n\n  // ---------------------------------------------------------------------------\n  // Inputs — all accept null|undefined at boundary, transform to canonical shape\n  // ---------------------------------------------------------------------------\n\n  /** Main option object. Prefer this API for new usage; individual inputs stay as a migration bridge. */\n  readonly option = input<SdQueryBarOption | undefined>(undefined);\n\n  /** Prefix for auto-generated `data-autoid` on inner controls (chips, operator/value editors, buttons). */\n  readonly autoIdInput = input<string | undefined, string | null | undefined>(undefined, {\n    alias: 'autoId',\n    transform: (v): string | undefined => v ?? undefined,\n  });\n\n  /** Available fields the user can filter by. Required for the field picker. */\n  readonly fields = input<SdQueryField[], SdQueryField[] | null | undefined>([], {\n    transform: (v): SdQueryField[] => (Array.isArray(v) ? v : []),\n  });\n\n  /**\n   * Active filter chips. Two-way bindable via `[(filters)]`.\n   * Use this when you only need a flat `Filter[]` (no global logic / search box).\n   */\n  readonly filters = model<Filter[]>([]);\n\n  /**\n   * Global connector between filters. Two-way bindable via `[(logic)]`.\n   * Only meaningful when `showLogicToggle=true` and there are ≥2 filters.\n   */\n  readonly logic = model<SdQueryLogic>('AND');\n\n  /** Free-text search string. Two-way bindable via `[(search)]`. Only shown when `showSearch=true`. */\n  readonly search = model<string>('');\n\n  /**\n   * Editing mode:\n   * - `'popover'` (default) → compact chips; click a chip to edit operator + value in a\n   *   mat-menu popover, commit with \"Áp dụng\".\n   * - `'inline'` → GitLab-style. Each filter's operator + value controls render directly\n   *   on the bar (no popup, no per-filter apply). Edits update `filters` live; the user\n   *   presses the search button (or Enter) once to fire `(apply)`.\n   */\n  readonly mode = input<'popover' | 'inline', 'popover' | 'inline' | null | undefined>('popover', {\n    transform: (v): 'popover' | 'inline' => v || 'popover',\n  });\n\n  /** Density preset — chip / control height. */\n  readonly density = input<Density, Density | null | undefined>('compact', {\n    transform: (v): Density => v || 'compact',\n  });\n\n  /** Show free-text search input on the left. */\n  readonly showSearch = input(false, { transform: booleanAttribute });\n\n  /** Show saved-filters dropdown on the right. Requires `[savedFiltersKey]` to actually persist. */\n  readonly showSavedFilters = input(false, { transform: booleanAttribute });\n\n  /**\n   * Namespace key for persisting saved filters to `localStorage`. When set, the saved-filters\n   * dropdown loads/saves under `sd-query-bar:savedFilters:<key>`. Leave undefined to disable.\n   */\n  readonly savedFiltersKey = input<string | undefined>(undefined);\n\n  /**\n   * Snapshot of the current query — fed into `<sd-query-saved-filters-menu [query]>` so\n   * saving a filter captures live filters/logic/search.\n   */\n  readonly currentQuery = computed<SdQuery>(() => this.#buildQuery());\n\n  /** Receive an applied filter from the saved-filters menu — re-install bar state + trigger apply. */\n  onApplyFilter(saved: SdSavedFilter): void {\n    this.filters.set(saved.query.filters ?? []);\n    this.logic.set(saved.query.logic ?? 'AND');\n    if (saved.query.search !== undefined) this.search.set(saved.query.search);\n    this.triggerApply();\n  }\n\n  /** Show AND/OR segmented toggle (renders only when there are ≥2 filters). */\n  readonly showLogicToggle = input(false, { transform: booleanAttribute });\n\n  /** Show \"Clear all\" button when at least one filter is active. */\n  readonly showClearAll = input(true, { transform: booleanAttribute });\n\n  /** Render the operator label on the chip face (default: hidden — operator only visible in popover). */\n  readonly showOperatorOnChip = input(false, { transform: booleanAttribute });\n\n  // ---------------------------------------------------------------------------\n  // Outputs\n  // ---------------------------------------------------------------------------\n\n  /** Composite payload — emitted whenever filters / logic / search change. */\n  readonly queryChange = output<SdQuery>();\n\n  /** Fires when the user presses \"Áp dụng\" inside a chip popover — host should reload data. */\n  readonly apply = output<SdQuery>();\n\n  // ---------------------------------------------------------------------------\n  // Derived state\n  // ---------------------------------------------------------------------------\n\n  /** Map of `field.key` → `SdQueryField` for fast lookup from filters[]. */\n  readonly resolvedAutoId = computed(() => this.option()?.autoId ?? this.autoIdInput() ?? undefined);\n  readonly resolvedFields = computed(() => this.option()?.fields ?? this.fields());\n  readonly resolvedMode = computed(() => this.option()?.mode ?? this.mode());\n  readonly resolvedDensity = computed(() => this.option()?.density ?? this.density());\n  readonly resolvedShowSearch = computed(() => this.option()?.showSearch ?? this.showSearch());\n  readonly resolvedShowSavedFilters = computed(() => this.option()?.showSavedFilters ?? this.showSavedFilters());\n  readonly resolvedSavedFiltersKey = computed(() => this.option()?.savedFiltersKey ?? this.savedFiltersKey());\n  readonly resolvedShowLogicToggle = computed(() => this.option()?.showLogicToggle ?? this.showLogicToggle());\n  readonly resolvedShowClearAll = computed(() => this.option()?.showClearAll ?? this.showClearAll());\n  readonly resolvedShowOperatorOnChip = computed(() => this.option()?.showOperatorOnChip ?? this.showOperatorOnChip());\n\n  constructor() {\n    effect(() => {\n      const option = this.option();\n      if (!option) return;\n      untracked(() => {\n        if (option.filters && this.filters() !== option.filters) this.filters.set(option.filters);\n        if (option.logic && this.logic() !== option.logic) this.logic.set(option.logic);\n        if (option.search !== undefined && this.search() !== option.search) this.search.set(option.search);\n      });\n    });\n  }\n\n  readonly fieldByKey = computed<Record<string, SdQueryField>>(() => {\n    const map: Record<string, SdQueryField> = {};\n    for (const f of this.resolvedFields()) map[f.key as string] = f;\n    return map;\n  });\n\n  /** Field keys already chained on a chip — the picker greys these out. */\n  readonly usedFieldKeys = computed<Set<string>>(() => {\n    const set = new Set<string>();\n    for (const f of this.filters()) {\n      if ('field' in f && typeof f.field === 'string') set.add(f.field);\n    }\n    return set;\n  });\n\n  /** Render the global AND/OR connector text between chips when `logic === 'OR'`. */\n  readonly showOrConnector = computed(() => this.resolvedShowLogicToggle() && this.logic() === 'OR' && this.filters().length >= 2);\n\n  /** Search button is actionable only when there is something to apply. */\n  readonly canSearch = computed(() => this.filters().length > 0 || this.search().trim().length > 0);\n\n  // ---------------------------------------------------------------------------\n  // Chip popover state — only `editingIndex` lives on the parent; the\n  // `<sd-query-chip-popover>` child owns ALL staging (operator + value + options).\n  // ---------------------------------------------------------------------------\n\n  /** Index of the chip whose popover is open. Reset to null after commit / close. */\n  readonly editingIndex = signal<number | null>(null);\n\n  /** Resolved field of the chip whose popover is currently open (or null). */\n  readonly editingField = computed<SdQueryField | null>(() => {\n    const idx = this.editingIndex();\n    if (idx === null) return null;\n    const f = this.filters()[idx];\n    if (!f || !('field' in f)) return null;\n    return this.fieldByKey()[f.field as string] ?? null;\n  });\n\n  /**\n   * Multi-select is derived from the operator (IN / NOT_IN) — not a field flag.\n   * Only called by inline-mode + build-mode templates with a known operator;\n   * popover-mode chips read `multiple()` from the child popover directly.\n   */\n  multiple(op: Operator): boolean {\n    return SD_QUERY_MULTI_OPERATORS.includes(op);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Template helpers\n  // ---------------------------------------------------------------------------\n\n  readonly iconFor = sdQueryFieldIcon;\n\n  /** Chip is \"active\" when it has a non-empty value OR a no-data operator (NULL/NOT_NULL). */\n  isFilterActive(filter: Filter): boolean {\n    if (SD_QUERY_NO_DATA_OPERATORS.includes(filter.operator as Operator)) return true;\n    const data = (filter as any).data;\n    if (data === null || data === undefined || data === '') return false;\n    if (Array.isArray(data) && data.length === 0) return false;\n    return true;\n  }\n\n  /** Rendered value text on a chip. */\n  chipValueText(filter: Filter): string {\n    if (SD_QUERY_NO_DATA_OPERATORS.includes(filter.operator as Operator)) return '';\n    const data = (filter as any).data;\n    if (data === null || data === undefined) return '';\n    if (filter.operator === 'BETWEEN' && data && typeof data === 'object') {\n      return `${data.from ?? ''} — ${data.to ?? ''}`;\n    }\n    if (Array.isArray(data)) {\n      if (data.length === 0) return '';\n      const head = this.#displayOne(filter, data[0]);\n      return data.length > 1 ? `${head} +${data.length - 1}` : head;\n    }\n    return this.#displayOne(filter, data);\n  }\n\n  isNoDataOperator(op: Operator | string): boolean {\n    return SD_QUERY_NO_DATA_OPERATORS.includes(op as Operator);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Inline mode — per-field helpers + live mutators (no popover / no Apply gate)\n  // ---------------------------------------------------------------------------\n\n  /** The single in-progress inline chip (not yet in `filters`). */\n  readonly #building = signal<BuildingChip | null>(null);\n  readonly building = this.#building.asReadonly();\n\n  allowedOperatorsFor(field: SdQueryField): Operator[] {\n    return sdQueryAllowedOperators(field);\n  }\n\n  inlineAutoId(index: number, role: string): string {\n    const base = this.resolvedAutoId() ?? 'qb';\n    return `${base}-inline${index}-${role}`;\n  }\n\n  // ---------------------------------------------------------------------------\n  // Inline mode — progressive token build flow (field → operator → value)\n  // ---------------------------------------------------------------------------\n\n  /** Append a completed chip to `filters` WITHOUT emitting (inline mode commits on Search). */\n  #pushComplete(field: SdQueryField, operator: Operator, value: unknown): void {\n    let data: unknown = value;\n    if (SD_QUERY_NO_DATA_OPERATORS.includes(operator)) data = null;\n    else if (operator === 'BETWEEN') {\n      if (!data || typeof data !== 'object') data = { from: null, to: null };\n    } else if (SD_QUERY_MULTI_OPERATORS.includes(operator)) {\n      data = Array.isArray(data) ? data : value == null ? [] : [value];\n    }\n    const next = { field: field.key as any, operator, data } as Filter;\n    this.filters.set([...this.filters(), next]);\n  }\n\n  /** Entry point from the field picker — start building a chip for `field`. */\n  beginBuild(field: SdQueryField): void {\n    const allowed = sdQueryAllowedOperators(field);\n    const def = sdQueryDefaultOperator(field);\n    // why: date/datetime mặc định là BETWEEN — skip operator step để user vào value\n    // step ngay (95% case dùng BETWEEN cho date/datetime; cắt 1 click cho luồng phổ\n    // biến nhất). Field type khác giữ flow chọn operator để user thấy đầy đủ lựa chọn.\n    const skipOperatorStep = (field.type === 'date' || field.type === 'datetime') && allowed.includes(def);\n    if (allowed.length > 1 && !skipOperatorStep) {\n      this.#building.set({ field, step: 'operator' });\n      // why: auto-open the operator menu so the user can pick the condition without a\n      // second click — the viewChild only resolves after the building chip renders.\n      afterNextRender(() => this.buildChip()?.openOperator(), { injector: this.#injector });\n      return;\n    }\n    const operator = skipOperatorStep ? def : (allowed[0] ?? def);\n    if (SD_QUERY_NO_DATA_OPERATORS.includes(operator)) {\n      this.#pushComplete(field, operator, null);\n      this.#building.set(null);\n      return;\n    }\n    this.#building.set({ field, operator, step: 'value' });\n    this.#enterValueStep(field);\n  }\n\n  /** Operator chosen during build — finish (no-data) or advance to the value step. */\n  pickBuildOperator(op: Operator): void {\n    const b = this.#building();\n    if (!b) return;\n    if (SD_QUERY_NO_DATA_OPERATORS.includes(op)) {\n      this.#pushComplete(b.field, op, null);\n      this.#building.set(null);\n      return;\n    }\n    this.#building.set({ ...b, operator: op, step: 'value' });\n    this.#enterValueStep(b.field);\n  }\n\n  /** Value committed during build — push the completed chip, clear building. No emit. */\n  commitBuildValue(value: unknown): void {\n    const b = this.#building();\n    if (!b || !b.operator) return;\n    this.#pushComplete(b.field, b.operator, value);\n    this.#building.set(null);\n  }\n\n  /**\n   * Commit from the seamless build chip (string / number). An empty value (blur with no\n   * input) cancels the build instead of pushing a blank chip.\n   */\n  onBuildSeamlessCommit(value: unknown): void {\n    const empty =\n      value == null || value === '' || (typeof value === 'object' && (value as Range).from == null && (value as Range).to == null);\n    if (empty) {\n      this.cancelBuild();\n      return;\n    }\n    this.commitBuildValue(value);\n  }\n\n  /** Abandon the in-progress chip. */\n  cancelBuild(): void {\n    this.#building.set(null);\n  }\n\n  /**\n   * Commit both ends of a BETWEEN range at once — called from `<sd-query-inline-chip>`'s\n   * `(commitRange)` output when the user picks a date range.\n   * why: sd-date-range emits {from,to} via (sdChange) — single call thay cho cặp\n   * setFilterRangeFrom / setFilterRangeTo cũ (đã bỏ).\n   */\n  setFilterRange(i: number, ev: { from: unknown; to: unknown } | null): void {\n    this.updateFilter(i, { data: ev ?? { from: null, to: null } } as Partial<Filter>);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Mutations\n  // ---------------------------------------------------------------------------\n\n  addFilter(field: SdQueryField): void {\n    const operator = sdQueryDefaultOperator(field);\n    const data = SD_QUERY_MULTI_OPERATORS.includes(operator) ? [] : null;\n    const next: Filter = { field: field.key as any, operator, data } as Filter;\n    const newIndex = this.filters().length;\n    this.filters.set([...this.filters(), next]);\n    // why: user added a field — open its edit popover immediately so they can pick\n    // operator + value in one continuous flow (no second click required).\n    afterNextRender(() => this.popoverChips()[newIndex]?.openMenu(), { injector: this.#injector });\n  }\n\n  /** Swap the field of an existing chip — reset operator + value to the new field's defaults. */\n  changeFilterField(index: number, field: SdQueryField): void {\n    const list = [...this.filters()];\n    if (index < 0 || index >= list.length) return;\n    const operator = sdQueryDefaultOperator(field);\n    const data = SD_QUERY_MULTI_OPERATORS.includes(operator) ? [] : null;\n    list[index] = { field: field.key as any, operator, data } as Filter;\n    this.filters.set(list);\n    // why: clicking an item in the nested fieldSwitchPicker closes both the picker AND\n    // the parent chipPopover. Re-open the chip's popover on the next render so user can\n    // continue picking operator + value without a second manual click.\n    afterNextRender(() => this.popoverChips()[index]?.openMenu(), { injector: this.#injector });\n  }\n\n  updateFilter(index: number, patch: Partial<Filter>): void {\n    const list = [...this.filters()];\n    if (index < 0 || index >= list.length) return;\n    list[index] = { ...list[index], ...patch } as Filter;\n    this.filters.set(list);\n  }\n\n  updateFilterData(index: number, data: unknown): void {\n    this.updateFilter(index, { data } as Partial<Filter>);\n  }\n\n  removeFilter(index: number): void {\n    const list = [...this.filters()];\n    if (index < 0 || index >= list.length) return;\n    // close the open popover (if it's this chip's) before the chip + its trigger vanish\n    if (this.editingIndex() === index) {\n      this.popoverChips()[index]?.closeMenu();\n      this.editingIndex.set(null);\n    }\n    list.splice(index, 1);\n    this.filters.set(list);\n  }\n\n  clearAll(): void {\n    if (this.filters().length === 0) return;\n    this.filters.set([]);\n    this.editingIndex.set(null);\n  }\n\n  setLogic(value: SdQueryLogic): void {\n    if (this.logic() === value) return;\n    this.logic.set(value);\n  }\n\n  setSearch(value: string): void {\n    if (this.search() === value) return;\n    this.search.set(value);\n  }\n\n  triggerApply(): void {\n    // why: single deferred trigger — fire both the change notification and the reload\n    // signal once, from here only (mutations no longer emit).\n    const q = this.#buildQuery();\n    this.option()?.onQueryChange?.(q);\n    this.queryChange.emit(q);\n    this.option()?.onApply?.(q);\n    this.apply.emit(q);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Chip popover — delegate staging to `<sd-query-chip-popover>` child.\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Called when a popover-mode chip is clicked — set editingIndex and seed the\n   * child popover's staging signals from the chip's Filter.\n   */\n  openChipPopover(index: number): void {\n    const filter = this.filters()[index];\n    if (!filter || !('field' in filter)) return;\n    this.editingIndex.set(index);\n    const field = this.fieldByKey()[filter.field as string];\n    this.chipPopover()?.seed(filter, field);\n  }\n\n  /** Receive `(commit)` from the child popover — splice into filters, null the index. */\n  onChipPopoverCommit(next: Filter): void {\n    const idx = this.editingIndex();\n    if (idx === null) return;\n    const list = [...this.filters()];\n    list[idx] = next;\n    this.filters.set(list);\n    this.editingIndex.set(null);\n  }\n\n  // ---------------------------------------------------------------------------\n  // Internals\n  // ---------------------------------------------------------------------------\n\n  #buildQuery(): SdQuery {\n    return {\n      filters: this.filters(),\n      logic: this.logic(),\n      ...(this.resolvedShowSearch() ? { search: this.search() } : {}),\n    };\n  }\n\n  #displayOne(filter: Filter, raw: any): string {\n    const fieldKey = 'field' in filter ? (filter.field as string) : '';\n    const field = this.fieldByKey()[fieldKey];\n    if (!field) return String(raw);\n    if (field.type === 'boolean') {\n      const trueLabel = (field as any).trueLabel ?? 'Có';\n      const falseLabel = (field as any).falseLabel ?? 'Không';\n      return raw ? trueLabel : falseLabel;\n    }\n    if (field.type === 'values' || field.type === 'lazy-values') {\n      const opt = (field as any).option;\n      const cachedOptions = this.chipPopover()?.editingOptions() ?? [];\n      const items = this.#resolveSyncItems(opt?.items) ?? cachedOptions;\n      const match = items.find((i: any) => i?.[opt.valueField] === raw);\n      if (match) return String(match[opt.displayField]);\n      const cached = cachedOptions.find((i: any) => i?.[opt.valueField] === raw);\n      return cached ? String(cached[opt.displayField]) : String(raw);\n    }\n    return String(raw);\n  }\n\n  #resolveSyncItems(items: any): any[] | null {\n    if (Array.isArray(items)) return items;\n    if (isSignal(items)) return (items as any)();\n    return null;\n  }\n}\n","<!--\n  sd-query-bar — unified filter chip row (Jira/Linear/Notion style).\n  Visual spec: refs/design_handoff_sd_query_bar/README.md\n  TODO(next-iter): replace inline placeholders for field-picker + chip-popover\n  with extracted sub-components driven by CDK overlay.\n-->\n@let _filters = filters();\n@let _resolvedFields = resolvedFields();\n@let _resolvedDensity = resolvedDensity();\n@let _showOrConnector = showOrConnector();\n@let _usedFieldKeys = usedFieldKeys();\n@let _editingIndex = editingIndex();\n@let _resolvedMode = resolvedMode();\n@let _resolvedShowOperatorOnChip = resolvedShowOperatorOnChip();\n\n<div\n  class=\"c-query-bar\"\n  [class.c-density-compact]=\"_resolvedDensity === 'compact'\"\n  [class.c-density-comfortable]=\"_resolvedDensity === 'comfortable'\">\n\n  <!-- Main region — search + filters + add-filter. Wraps internally; the right\n       action toolbar stays anchored and does NOT flow with this. -->\n  <div class=\"c-query-bar__main\">\n\n  <!-- Free-text search (left, optional) -->\n  @if (resolvedShowSearch()) {\n    <div class=\"c-search\">\n      <sd-icon class=\"c-search-icon\" name=\"search\"></sd-icon>\n      <input\n        class=\"c-search-input\"\n        type=\"text\"\n        [ngModel]=\"search()\"\n        (ngModelChange)=\"setSearch($event)\"\n        (keydown.enter)=\"triggerApply()\"\n        placeholder=\"Tìm kiếm...\" />\n    </div>\n    <span class=\"c-divider\" aria-hidden=\"true\"></span>\n  }\n\n  <!-- Chip popover — extracted into <sd-query-chip-popover>. Declared BEFORE chips\n       so the popover-mode @for chips can bind their [menu] to `chipPopover.menu()`.\n       why: mở popover để EDIT chỉ cho chỉnh operator + value — KHÔNG đổi field.\n       Bỏ [switchPickerMenu] → header render nhãn field tĩnh (read-only). Muốn đổi\n       field thì xoá chip rồi thêm lại. -->\n  <sd-query-chip-popover\n    #chipPopover\n    [field]=\"editingField() ?? undefined\"\n    [filter]=\"_editingIndex !== null ? $any(_filters[_editingIndex!]) : undefined\"\n    [chipIndex]=\"_editingIndex\"\n    [autoIdBase]=\"resolvedAutoId() ?? 'qb'\"\n    (commit)=\"onChipPopoverCommit($event)\" />\n\n  @if (_resolvedMode === 'inline') {\n    <!-- ===== INLINE MODE (GitLab-style token builder) ===== -->\n\n    <!-- Completed chips -->\n    @for (filter of _filters; track $index; let i = $index) {\n      @if (_showOrConnector && i > 0) {\n        <span class=\"c-or-connector\" aria-hidden=\"true\">OR</span>\n      }\n      @let _field = fieldByKey()[$any(filter).field];\n      @if (_field) {\n        @let _op = $any(filter.operator);\n        @let _data = $any(filter).data;\n        @if (_field.type === 'string' || _field.type === 'number') {\n          <!-- Seamless chip — the pill is the input (string / number). -->\n          <sd-query-inline-value-chip\n            [field]=\"_field\"\n            [operator]=\"_op\"\n            [value]=\"_data\"\n            [density]=\"_resolvedDensity\"\n            [showOperator]=\"_resolvedShowOperatorOnChip\"\n            [autoId]=\"inlineAutoId(i, 'value')\"\n            (valueChange)=\"updateFilterData(i, $event)\"\n            (remove)=\"removeFilter(i)\" />\n        } @else {\n          <sd-query-inline-chip\n            [field]=\"_field\"\n            [filter]=\"filter\"\n            [density]=\"_resolvedDensity\"\n            [multiple]=\"multiple(_op)\"\n            [showOperator]=\"_resolvedShowOperatorOnChip\"\n            [autoId]=\"inlineAutoId(i, 'value')\"\n            [valueText]=\"chipValueText(filter)\"\n            [isNoData]=\"isNoDataOperator(_op)\"\n            (commit)=\"updateFilterData(i, $event)\"\n            (commitRange)=\"setFilterRange(i, $event)\"\n            (liveChange)=\"updateFilterData(i, $event)\"\n            (remove)=\"removeFilter(i)\" />\n        }\n      }\n    }\n\n    <!-- Building chip (in-progress) — extracted into <sd-query-build-chip>. -->\n    @if (building(); as _b) {\n      <sd-query-build-chip\n        [building]=\"_b\"\n        [density]=\"_resolvedDensity\"\n        [allowedOperators]=\"allowedOperatorsFor(_b.field)\"\n        [multiple]=\"multiple($any(_b.operator))\"\n        [showOperator]=\"_resolvedShowOperatorOnChip\"\n        (pickOperator)=\"pickBuildOperator($any($event))\"\n        (commitValue)=\"commitBuildValue($event)\"\n        (cancel)=\"cancelBuild()\"\n        (seamlessCommit)=\"onBuildSeamlessCommit($event)\" />\n    }\n\n    <!-- Add filter -->\n    <button\n      type=\"button\"\n      class=\"c-add-filter\"\n      [matMenuTriggerFor]=\"addPicker.menu()\"\n      [disabled]=\"_resolvedFields.length === 0 || _usedFieldKeys.size >= _resolvedFields.length\"\n      [matTooltip]=\"_resolvedFields.length === 0 ? 'Chưa cấu hình fields' : 'Thêm filter'\">\n      <sd-icon name=\"add\"></sd-icon>\n    </button>\n  } @else {\n    <!-- ===== POPOVER MODE (default) — compact chips edited via mat-menu ===== -->\n    @for (filter of _filters; track $index; let i = $index) {\n      @if (_showOrConnector && i > 0) {\n        <span class=\"c-or-connector\" aria-hidden=\"true\">OR</span>\n      }\n      @let _field = fieldByKey()[$any(filter).field];\n      @let _active = isFilterActive(filter);\n      <!-- why: menu close commit is handled by chipPopover's (commit) →\n           onChipPopoverCommit; popover-chip only signals open + remove here. -->\n      <sd-query-popover-chip\n        [field]=\"_field\"\n        [filter]=\"filter\"\n        [active]=\"_active\"\n        [showOperator]=\"_resolvedShowOperatorOnChip\"\n        [valueText]=\"chipValueText(filter)\"\n        [menu]=\"chipPopover.menu()!\"\n        (open)=\"openChipPopover(i)\"\n        (remove)=\"removeFilter(i)\" />\n    }\n\n    <!-- Add filter trigger -->\n    <button\n      type=\"button\"\n      class=\"c-add-filter\"\n      [matMenuTriggerFor]=\"addPicker.menu()\"\n      [disabled]=\"_resolvedFields.length === 0 || _usedFieldKeys.size >= _resolvedFields.length\"\n      [matTooltip]=\"_resolvedFields.length === 0 ? 'Chưa cấu hình fields' : 'Thêm filter'\">\n      <sd-icon name=\"add\"></sd-icon>\n    </button>\n  }\n\n  </div><!-- /.c-query-bar__main -->\n\n  <!-- Field picker — list available fields, fade ones already in use. -->\n  <sd-query-field-picker\n    #addPicker\n    [fields]=\"_resolvedFields\"\n    [usedKeys]=\"_usedFieldKeys\"\n    (pick)=\"_resolvedMode === 'inline' ? beginBuild($event) : addFilter($event)\" />\n\n  <sd-query-actions-bar\n    [showLogicToggle]=\"resolvedShowLogicToggle()\"\n    [(logic)]=\"logic\"\n    [filtersCount]=\"_filters.length\"\n    [showSavedFilters]=\"resolvedShowSavedFilters()\"\n    [savedFiltersKey]=\"resolvedSavedFiltersKey()\"\n    [query]=\"currentQuery()\"\n    (applyFilter)=\"onApplyFilter($event)\"\n    [showClearAll]=\"resolvedShowClearAll()\"\n    [canSearch]=\"canSearch()\"\n    (clear)=\"clearAll()\"\n    (search)=\"triggerApply()\" />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}