@descope/web-components-ui 3.18.1 → 3.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs.js +8 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +8 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/umd/DescopeDev.js +1 -1
- package/dist/umd/DescopeDev.js.map +1 -1
- package/dist/umd/descope-filter.js +1 -1
- package/dist/umd/descope-filter.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/package.json +42 -42
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descope-filter.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/delete.svg","webpack://@descope/web-components-ui/../components/descope-anchored/src/component/AnchoredClass.js","webpack://@descope/web-components-ui/../components/descope-anchored/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-attachment/src/component/AttachmentClass.js","webpack://@descope/web-components-ui/../components/descope-attachment/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-badge/src/component/BadgeClass.js","webpack://@descope/web-components-ui/../components/descope-badge/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/operators.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/helpers.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/FilterRowClass.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/helpers.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/index.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-rows/FilterRowsClass.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-rows/index.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/FilterClass.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-icon/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-image/src/component/index.js"],"sourcesContent":["module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxNCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPHBhdGggZD0iTTEgMTZDMSAxNy4xIDEuOSAxOCAzIDE4SDExQzEyLjEgMTggMTMgMTcuMSAxMyAxNlY0SDFWMTZaTTMgNkgxMVYxNkgzVjZaTTEwLjUgMUw5LjUgMEg0LjVMMy41IDFIMFYzSDE0VjFIMTAuNVoiIGZpbGw9ImN1cnJlbnRjb2xvciIvPiA8L3N2Zz4=\"","import { componentNameValidationMixin } from '@descope-ui/common/components-mixins';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport {\n forwardAttrs,\n getComponentName,\n injectStyle,\n observeAttributes,\n} from '@descope-ui/common/components-helpers';\nimport { compose } from '@descope-ui/common/utils';\n\nexport const componentName = getComponentName('anchored');\n\nclass RawAnchored extends createBaseClass({\n componentName,\n baseSelector: '.anchored-root',\n}) {\n #stretchObserver = null;\n\n #directionObserver = null;\n\n #hostStretchSheet = null;\n\n // Observes the anchor's `class` attribute so runtime updates by the SDK\n // (e.g. real-time conditional components toggling `.hidden`) propagate to\n // this element. Without this, only the initial slotchange would sync.\n #anchorClassObserver = null;\n\n get #anchor() {\n return this.defaultSlot.assignedElements({ flatten: true })[0];\n }\n\n get #anchored() {\n return this.shadowRoot\n .querySelector('slot[name=\"anchored\"]')\n ?.assignedElements()[0];\n }\n\n get #outerHost() {\n return this.getRootNode().host;\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"anchored-root\" part=\"root\">\n <slot></slot>\n <div class=\"anchored-host\" part=\"anchored\">\n <slot name=\"anchored\"></slot>\n </div>\n </div>\n `;\n\n this.defaultSlot = this.shadowRoot.querySelector('slot:not([name])');\n }\n\n init() {\n super.init?.();\n\n injectStyle(\n `\n :host {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n }\n\n :host(:not([has-anchor])) {\n display: none;\n }\n\n .anchored-root {\n position: relative;\n display: flex;\n width: 100%;\n min-width: 0;\n }\n\n /* Make anchor fill the flex row and allow it to shrink. */\n ::slotted(*:not([slot])) {\n flex-grow: 1; /* fill the flex row */\n flex-shrink: 1; /* compress when constrained */\n flex-basis: auto; /* start from the anchor's natural size */\n min-width: 0; /* flex items won't shrink below content size without this */\n }\n\n /* Anchored container covers the anchor but is invisible to pointer events. */\n .anchored-host {\n position: absolute;\n inset: 0;\n pointer-events: none;\n }\n\n /* Restore interactivity for actual anchored content. */\n ::slotted([slot=\"anchored\"]) {\n pointer-events: auto;\n }\n `,\n this,\n );\n\n this.#syncStretchCSS();\n\n this.defaultSlot.addEventListener('slotchange', () => this.#syncAnchor());\n\n this.#syncAnchor();\n }\n\n // To support conditional components in flow, we need to sync the 'hidden' className to the root of the component.\n // Ideally, this would happen in the SDK, but we resolved to this patch to fix the issue without forcing users to update SDKs.\n #syncComponentState() {\n const hasHidden = this.#anchor?.classList?.contains('hidden');\n this.classList.toggle('hidden', hasHidden);\n }\n\n #syncAnchor() {\n this.#onAnchorChanged();\n\n this.#stretchObserver = this.#forwardAttr(\n this.#stretchObserver,\n this.#outerHost,\n 'stretch',\n );\n\n this.#directionObserver = this.#forwardAttr(\n this.#directionObserver,\n this.#anchored,\n 'st-host-direction',\n );\n\n this.#observeAnchorClass();\n }\n\n #observeAnchorClass() {\n this.#anchorClassObserver?.disconnect();\n if (this.#anchor) {\n this.#anchorClassObserver = observeAttributes(\n this.#anchor,\n () => this.#syncComponentState(),\n { includeAttrs: ['class'] },\n );\n }\n }\n\n // createBaseClass gates init() to first-connect (#isInit). Without\n // re-observing here, runtime `.hidden` toggles stop syncing after a\n // detach/reattach cycle.\n connectedCallback() {\n super.connectedCallback?.();\n this.#observeAnchorClass();\n this.#syncComponentState();\n }\n\n // Injects [stretch] layout rules into the containing component's shadow root (e.g. descope-attachment)\n // so it stretches when the anchor has [stretch]. Replaces the existing rules on subsequent calls.\n #syncStretchCSS() {\n const css = `\n descope-anchored {\n width: 100%; /* fill the outer host so the anchored element spans the full anchor width */\n }\n :host([stretch]) {\n display: inline-flex; /* switch from inline-block so internal children are flex items */\n width: 100%; /* fill non-flex parents */\n flex-grow: 1; /* absorb extra space in flex parents */\n flex-shrink: 0; /* hold full width — shrink:1 would let siblings squeeze it below 100% */\n flex-basis: auto; /* defer to width:100% on the main axis; avoids forcing 100% height in column-flex parents */\n min-width: 0; /* prevent overflow when the outer host is itself inside a constrained flex row */\n }\n `;\n\n if (this.#hostStretchSheet) {\n this.#hostStretchSheet.replaceSync(css);\n } else if (this.#outerHost) {\n this.#hostStretchSheet = injectStyle(css, this.#outerHost);\n }\n }\n\n // Reconnects forwarding to the current anchor. Disconnects the old observer and\n // removes the stale attr from target first — forwardAttrs only sets attrs present\n // on the source, so absent attrs won't be removed automatically.\n #forwardAttr(observer, target, attr) {\n observer?.disconnect();\n target?.removeAttribute(attr);\n if (!this.#anchor || !target) return null;\n return forwardAttrs(this.#anchor, target, { includeAttrs: [attr] });\n }\n\n // Prevent stale callbacks from firing on a detached anchor after removal.\n disconnectedCallback() {\n super.disconnectedCallback?.();\n this.#stretchObserver?.disconnect();\n this.#directionObserver?.disconnect();\n this.#anchorClassObserver?.disconnect();\n }\n\n // Track whether anything is slotted, so the host display rule can hide an\n // empty host rather than reserving its layout box.\n #onAnchorChanged() {\n this.toggleAttribute('has-anchor', !!this.#anchor);\n this.#syncComponentState();\n }\n}\n\nexport const AnchoredClass = compose(componentNameValidationMixin)(RawAnchored);\n","import { componentName, AnchoredClass } from './AnchoredClass';\n\ncustomElements.define(componentName, AnchoredClass);\n\nexport { AnchoredClass, componentName };\n","import {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n} from '@descope-ui/common/components-mixins';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport {\n getComponentName,\n injectStyle,\n observeAttributes,\n} from '@descope-ui/common/components-helpers';\nimport { compose } from '@descope-ui/common/utils';\n\nexport const componentName = getComponentName('attachment');\n\nconst ATTACHMENT_POSITIONS = [\n 'top-end',\n 'top-start',\n 'top-center',\n 'bottom-start',\n 'bottom-end',\n 'bottom-center',\n];\n\nconst DEFAULT_POSITION = ATTACHMENT_POSITIONS[0];\n\nclass RawAttachment extends createBaseClass({\n componentName,\n baseSelector: 'descope-anchored',\n}) {\n // Observes the inner descope-anchored's `class` attribute so runtime\n // updates (e.g. real-time conditional components toggling `.hidden`) keep\n // this attachment host's class in sync. Set up in connectedCallback so\n // reconnects work (createBaseClass gates init() to first connect only).\n #anchoredClassObserver = null;\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <descope-anchored>\n <slot></slot>\n <div slot=\"anchored\" class=\"attachment-container\">\n <slot name=\"attachment\"></slot>\n </div>\n </descope-anchored>\n `;\n\n this.defaultSlot = this.shadowRoot.querySelector('slot:not([name])');\n this.attachmentSlot = this.shadowRoot.querySelector(\n 'slot[name=\"attachment\"]',\n );\n\n this.anchored = this.shadowRoot.querySelector('descope-anchored');\n }\n\n get #attachment() {\n return this.attachmentSlot?.assignedElements()[0];\n }\n\n static get observedAttributes() {\n return [...(super.observedAttributes || []), 'position'];\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n super.attributeChangedCallback?.(name, oldVal, newVal);\n if (name === 'position' && oldVal !== newVal) {\n this.#handlePositionChange();\n }\n }\n\n init() {\n super.init?.();\n\n injectStyle(\n `\n :host {\n display: inline-block;\n }\n :host(.hidden) {\n display: none;\n }\n .attachment-container {\n position: absolute;\n z-index: 1;\n pointer-events: none;\n width: 100%;\n display: flex;\n align-items: center;\n container-type: inline-size;\n }\n`,\n this,\n );\n\n this.#handlePositionChange();\n\n // When descope-anchored forwards st-host-direction from the anchor to this container,\n // propagate it to the attachment elements.\n const container = this.shadowRoot.querySelector('.attachment-container');\n observeAttributes(container, () => this.#syncDirection(), {\n includeAttrs: ['st-host-direction'],\n });\n\n // Re-sync direction when new elements are slotted into the attachment slot.\n this.attachmentSlot.addEventListener('slotchange', () =>\n this.#syncDirection(),\n );\n\n this.defaultSlot.addEventListener('slotchange', () => {\n this.#setVisibility();\n window.requestAnimationFrame(() => this.#syncAvailableSizeAttr());\n });\n\n window.requestAnimationFrame(() => this.#setVisibility());\n }\n\n // To support conditional components in flow, we need to sync the 'hidden' className to the root of the component.\n // Ideally, this would happen in the SDK, but we resolved to this patch to fix the issue without forcing users to update SDKs.\n #syncComponentState() {\n const hasHidden = this.anchored?.classList?.contains('hidden');\n this.classList.toggle('hidden', hasHidden);\n }\n\n #observeAnchored() {\n this.#anchoredClassObserver?.disconnect();\n if (this.anchored) {\n this.#anchoredClassObserver = observeAttributes(\n this.anchored,\n () => this.#syncComponentState(),\n { includeAttrs: ['class'] },\n );\n }\n }\n\n // createBaseClass gates init() to first-connect, so observing here is\n // required for the detach/reattach cycle to keep working.\n connectedCallback() {\n super.connectedCallback?.();\n this.#syncComponentState();\n this.#observeAnchored();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.();\n this.#anchoredClassObserver?.disconnect();\n }\n\n #syncAvailableSizeAttr() {\n const anchor = this.defaultSlot?.assignedElements()?.[0];\n\n const anchorRect = anchor?.getBoundingClientRect();\n if (anchorRect) {\n const availableWidth = anchorRect.width;\n this.#attachment?.setAttribute(\n 'data-attachment-size',\n Number(availableWidth),\n );\n }\n }\n\n #setVisibility() {\n const hasAnchor = this.defaultSlot?.assignedElements()?.length > 0;\n this.classList.toggle('hidden', !hasAnchor);\n }\n\n #syncDirection() {\n const direction = this.shadowRoot\n .querySelector('.attachment-container')\n ?.getAttribute('st-host-direction');\n\n if (!direction) return;\n // currently we support direction sync only for web-components-ui\n // elements, which support st-host-direction attribute.\n this.#attachment?.setAttribute('st-host-direction', direction);\n }\n\n get offsetX() {\n return this.getAttribute('offset-x') || '0px';\n }\n\n get offsetY() {\n return this.getAttribute('offset-y') || '0px';\n }\n\n #handlePositionChange() {\n const pos = this.getAttribute('position');\n if (!ATTACHMENT_POSITIONS.includes(pos)) {\n this.setAttribute('position', DEFAULT_POSITION);\n }\n }\n}\n\nconst attachmentContainer = { selector: () => '.attachment-container' };\n\nexport const AttachmentClass = compose(\n createStyleMixin({\n mappings: {\n transform: { ...attachmentContainer },\n justifyContent: { ...attachmentContainer },\n maxWidth: { ...attachmentContainer },\n top: { ...attachmentContainer },\n bottom: { ...attachmentContainer },\n left: { ...attachmentContainer },\n right: { ...attachmentContainer },\n offsetX: {},\n offsetY: {},\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawAttachment);\n","import '@descope-ui/descope-anchored';\nimport { componentName, AttachmentClass } from './AttachmentClass';\n\ncustomElements.define(componentName, AttachmentClass);\n\nexport { AttachmentClass, componentName };\n","import {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n} from '@descope-ui/common/components-mixins';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport {\n getComponentName,\n injectStyle,\n} from '@descope-ui/common/components-helpers';\nimport { compose } from '@descope-ui/common/utils';\n\nexport const componentName = getComponentName('badge');\n\nclass RawBadge extends createBaseClass({\n componentName,\n baseSelector: ':host > div',\n}) {\n static get observedAttributes() {\n return ['data-attachment-size', 'shrink-to-indicator-threshold'];\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n\t\t<div>\n <slot></slot>\n\t\t</div>\n\t\t`;\n\n injectStyle(\n `\n :host {\n display: inline-flex;\n }\n :host > div {\n position: relative;\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n `,\n this,\n );\n }\n\n get shrinkToIndicatorThreshold() {\n return this.getAttribute('shrink-to-indicator-threshold') || 65;\n }\n\n #handleShrinkToIndicator(value) {\n this.toggleAttribute(\n 'shrink-to-indicator',\n parseFloat(value) < this.shrinkToIndicatorThreshold,\n );\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n super.attributeChangedCallback?.(name, oldVal, newVal);\n if (name === 'data-attachment-size' && oldVal !== newVal) {\n this.#handleShrinkToIndicator(newVal);\n }\n }\n}\n\nexport const BadgeClass = compose(\n createStyleMixin({\n mappings: {\n hostWidth: [{ selector: () => ':host', property: 'width' }],\n hostHeight: [{ selector: () => ':host', property: 'height' }],\n hostDirection: { property: 'direction' },\n\n fontFamily: {},\n fontSize: {},\n fontWeight: {},\n lineHeight: {},\n textTransform: {},\n verticalPadding: [\n { property: 'padding-top' },\n { property: 'padding-bottom' },\n ],\n horizontalPadding: [\n { property: 'padding-left' },\n { property: 'padding-right' },\n ],\n\n borderWidth: {},\n borderStyle: {},\n borderColor: {},\n borderRadius: {},\n\n backgroundColor: {},\n\n textColor: { property: 'color' },\n textAlign: {},\n boxShadow: {},\n textIndent: {},\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawBadge);\n","import { componentName, BadgeClass } from './BadgeClass';\n\ncustomElements.define(componentName, BadgeClass);\n\nexport { BadgeClass, componentName };\n","// Global per-operator metadata: default English label + noValue flag.\n// One source of truth; OPERATORS below is just id lists per inputType.\n// The component is agnostic to query semantics: `prefix`/`suffix` (SQL-LIKE\n// wildcards) are NOT defaulted here — they're BE-specific and supplied by the\n// consumer via the operators object shape. When present, they're forwarded\n// verbatim on the apply payload.\nexport const OPERATOR_META = {\n equal: { label: 'Equal' },\n 'not-equal': { label: 'Not Equal' },\n contains: { label: 'Contains' },\n 'not-contains': { label: 'Excludes' },\n 'starts-with': { label: 'Starts with' },\n 'ends-with': { label: 'Ends with' },\n gt: { label: 'Greater Than' },\n lt: { label: 'Less Than' },\n gte: { label: 'Not Less Than' },\n lte: { label: 'Not Greater Than' },\n 'is-any-of': { label: 'Is any of' },\n 'not-any-of': { label: 'Not any of' },\n 'is-empty': { label: 'Is empty', noValue: true },\n 'is-not-empty': { label: 'Is not empty', noValue: true },\n};\n\n// The `data-operator-label-<id>` i18n-override attributes, one per built-in\n// operator. Used as the forwardAttrs allowlist (filter → rows → row) and the\n// filter-row observed set — custom operator ids carry their label in the\n// operators catalog instead.\nexport const OPERATOR_LABEL_ATTRS = Object.keys(OPERATOR_META).map(\n (id) => `data-operator-label-${id}`,\n);\n\n// Per inputType: ordered list of operator ids. Resolve meta via OPERATOR_META at runtime.\nexport const OPERATORS = {\n text: [\n 'contains',\n 'not-contains',\n 'equal',\n 'not-equal',\n 'starts-with',\n 'ends-with',\n 'is-empty',\n 'is-not-empty',\n ],\n number: [\n 'equal',\n 'not-equal',\n 'gt',\n 'lte',\n 'lt',\n 'gte',\n 'is-empty',\n 'is-not-empty',\n ],\n email: [\n 'equal',\n 'not-equal',\n 'contains',\n 'not-contains',\n 'is-empty',\n 'is-not-empty',\n ],\n boolean: ['equal', 'not-equal', 'is-empty', 'is-not-empty'],\n singleselect: ['equal', 'not-equal', 'is-empty', 'is-not-empty'],\n multiselect: ['is-any-of', 'not-any-of', 'is-empty', 'is-not-empty'],\n};\n\nconst resolve = (id, meta) => ({ id, ...(meta[id] || {}) });\n\n// `custom` accepts two shapes:\n// - string[] → allowlist of operator ids; uses meta labels.\n// - {id,label?,noValue?}[] → full custom set (overrides any fields).\n//\n// `catalog` optionally overrides the OPERATORS map (keyed by inputType → id[]).\n// `meta` optionally overrides OPERATOR_META (per id → {label, noValue}).\nexport const getOperatorsForInputType = (\n inputType,\n custom,\n catalog,\n meta = OPERATOR_META,\n) => {\n const baseMap = catalog || OPERATORS;\n const baseIds = baseMap[inputType] || [];\n const baseOps = baseIds.map((id) => resolve(id, meta));\n\n if (!Array.isArray(custom) || custom.length === 0) return baseOps;\n\n // Pure string[] → allowlist filter over the base set (preserves base order).\n if (custom.every((c) => typeof c === 'string')) {\n return baseOps.filter((op) => custom.includes(op.id));\n }\n\n // Any object entry → treat the array as the explicit ordered operator set.\n // Entries may be mixed: a bare string id, or an object overriding fields\n // (label/prefix/suffix/noValue). Each falls back to the built-in meta.\n return custom.map((c) => {\n const id = typeof c === 'string' ? c : c.id;\n const override = typeof c === 'string' ? {} : c;\n const fallback = baseOps.find((op) => op.id === id) || resolve(id, meta);\n return { ...fallback, ...override };\n });\n};\n\nconst isNoValueOp = (operatorId) => !!OPERATOR_META[operatorId]?.noValue;\n\n// A row represents an actual filtering condition only when:\n// - column + operator are set, AND\n// - operator is noValue, OR value is non-empty (string non-empty / array non-empty)\n// `row.noValue` is the resolved flag from #assembleRowValue (works for custom\n// operator ids); falls back to the built-in OPERATOR_META lookup.\nexport const isValidRow = (row) => {\n if (!row || !row.column || !row.operator) return false;\n if (row.noValue || isNoValueOp(row.operator)) return true;\n const { value } = row;\n if (value === null || value === undefined) return false;\n if (Array.isArray(value)) return value.length > 0;\n return String(value).length > 0;\n};\n","// Mirror nodes assigned to `host`'s named slot into `dest` (in another light\n// DOM). Existing clones tagged with `data-slot-copy=<slotName>` are removed\n// first so the call is idempotent and safe to invoke on every slotchange.\nconst cloneNamedSlotInto = (host, dest, slotName) => {\n Array.from(\n dest.querySelectorAll(`:scope > [data-slot-copy=\"${slotName}\"]`),\n ).forEach((el) => el.remove());\n\n Array.from(host.children)\n .filter((el) => el.getAttribute?.('slot') === slotName)\n .forEach((node) => {\n const clone = node.cloneNode(true);\n // `slot` is already copied from the source; add only our cleanup marker.\n clone.setAttribute('data-slot-copy', slotName);\n dest.appendChild(clone);\n });\n};\n\n// Clone every named slot's assigned nodes from `host` into `dest`.\nexport const cloneNamedSlotsInto = (host, dest, slotNames) => {\n slotNames.forEach((s) => cloneNamedSlotInto(host, dest, s));\n};\n\n// Parse a `value` payload (array, JSON string, or anything) into a well-shaped\n// rows array. Each row must be an object with `column` and `operator` strings;\n// malformed entries are dropped. Returns [] on parse failure.\nexport const parseRowsArray = (input) => {\n let raw = input;\n if (typeof raw === 'string') {\n try {\n raw = JSON.parse(raw);\n } catch {\n return [];\n }\n }\n if (!Array.isArray(raw)) return [];\n return raw.filter(\n (row) =>\n row &&\n typeof row === 'object' &&\n typeof row.column === 'string' &&\n typeof row.operator === 'string',\n );\n};\n\n// Parse a JSON-encoded attribute value. Returns `null` on missing/invalid.\nexport const parseJsonAttr = (ele, name) => {\n const raw = ele.getAttribute(name);\n if (!raw) return null;\n try {\n return JSON.parse(raw);\n } catch {\n return null;\n }\n};\n","import {\n createStyleMixin,\n componentNameValidationMixin,\n} from '@descope-ui/common/components-mixins';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n getComponentName,\n injectStyle,\n forwardAttrs,\n} from '@descope-ui/common/components-helpers';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport { ButtonClass } from '@descope-ui/descope-button/class';\nimport { ComboBoxClass } from '@descope-ui/descope-combo-box/class';\nimport { MultiSelectComboBoxClass } from '@descope-ui/descope-multi-select-combo-box/class';\nimport { TextFieldClass } from '@descope-ui/descope-text-field/class';\nimport {\n OPERATORS,\n OPERATOR_META,\n OPERATOR_LABEL_ATTRS,\n getOperatorsForInputType,\n isValidRow,\n} from './operators';\nimport { debounce } from './helpers';\nimport { parseJsonAttr } from '../helpers';\nimport deleteIconSrc from './delete.svg';\n\nexport const componentName = getComponentName('filter-row');\n\nconst TEXT_INPUT_TYPES = ['text', 'number', 'email'];\nconst COMBO_INPUT_TYPES = ['boolean', 'singleselect'];\n\n// No column picked yet (falsy type) renders the text input.\nconst isTextLike = (t) => !t || TEXT_INPUT_TYPES.includes(t);\nconst isComboLike = (t) => COMBO_INPUT_TYPES.includes(t);\nconst isMultiLike = (t) => t === 'multiselect';\n\n// vaadin-combo-box renders its items a macrotask after `data` is set; await one\n// before assigning `.value` so it resolves against the rendered list.\nconst whenComboReady = () => new Promise((r) => setTimeout(r));\n\nconst TEXT_DEBOUNCE_MS = 350;\n\nconst FilterRowMixin = (superclass) =>\n class FilterRowMixinClass extends superclass {\n #columns = [];\n\n #rowId = null;\n\n // Suppresses input listeners during our own writes so they don't re-enter.\n #updating = false;\n\n #colSelect;\n\n #opSelect;\n\n #textValue;\n\n #comboValue;\n\n #multiValue;\n\n #deleteBtn;\n\n #lastInputType = null;\n\n #debouncedChange = debounce(() => this.#dispatchChange(), TEXT_DEBOUNCE_MS);\n\n static get observedAttributes() {\n return [\n ...(superclass.observedAttributes || []),\n 'data',\n 'value',\n 'disable-delete',\n 'label-type',\n 'operators-catalog',\n 'data-value-label-true',\n 'data-value-label-false',\n ...OPERATOR_LABEL_ATTRS,\n ];\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"row\">\n <descope-combo-box class=\"col-select\" placeholder=\"Column\" bordered=\"true\" item-label-path=\"data-name\" item-value-path=\"data-id\"></descope-combo-box>\n <descope-combo-box class=\"op-select\" placeholder=\"Operator\" bordered=\"true\" item-label-path=\"data-name\" item-value-path=\"data-id\"></descope-combo-box>\n <div class=\"value-wrapper\">\n <descope-text-field class=\"text-value\" placeholder=\"Value\" bordered=\"true\"></descope-text-field>\n <descope-combo-box class=\"combo-value hidden\" placeholder=\"Value\" bordered=\"true\" item-label-path=\"data-name\" item-value-path=\"data-id\"></descope-combo-box>\n <descope-multi-select-combo-box class=\"multi-value hidden\" placeholder=\"Value\" bordered=\"true\" item-label-path=\"data-name\" item-value-path=\"data-id\"></descope-multi-select-combo-box>\n </div>\n <descope-button class=\"delete-btn\" variant=\"link\" mode=\"primary\" size=\"md\" square=\"true\">\n <slot name=\"delete-row-icon\">\n <descope-icon src=\"${deleteIconSrc}\" src-dark=\"${deleteIconSrc}\"></descope-icon>\n </slot>\n </descope-button>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: block;\n }\n .row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) auto;\n align-items: center;\n }\n .col-select,\n .op-select,\n .value-wrapper {\n min-width: 0;\n overflow: hidden;\n }\n /* Let value inputs shrink to the cell instead of growing to fit their\n content (e.g. the multi-select's chip area). */\n .text-value,\n .combo-value,\n .multi-value {\n min-width: 0;\n }\n .hidden {\n display: none;\n }\n .value-wrapper.no-value {\n visibility: hidden;\n }\n `,\n this,\n );\n\n this.#colSelect = this.shadowRoot.querySelector('.col-select');\n this.#opSelect = this.shadowRoot.querySelector('.op-select');\n this.#textValue = this.shadowRoot.querySelector('.text-value');\n this.#comboValue = this.shadowRoot.querySelector('.combo-value');\n this.#multiValue = this.shadowRoot.querySelector('.multi-value');\n this.#deleteBtn = this.shadowRoot.querySelector('.delete-btn');\n }\n\n init() {\n super.init?.();\n\n this.#setupUserEventListeners();\n this.#deleteBtn.addEventListener('click', () => this.#dispatch('delete'));\n this.#setupAttrForwarding();\n }\n\n #setupAttrForwarding() {\n const inputs = [\n this.#colSelect,\n this.#opSelect,\n this.#textValue,\n this.#comboValue,\n this.#multiValue,\n ];\n\n [...inputs, this.#deleteBtn].forEach((t) =>\n forwardAttrs(this, t, { includeAttrs: ['size', 'disabled'] }),\n );\n\n this.#setupPlaceholderForwarding();\n\n inputs.forEach((t) =>\n forwardAttrs(this, t, { includeAttrs: ['label-type'] }),\n );\n }\n\n #setupPlaceholderForwarding() {\n const asPlaceholder = (attr) => ({\n includeAttrs: [attr],\n mapAttrs: { [attr]: 'placeholder' },\n });\n forwardAttrs(\n this,\n this.#colSelect,\n asPlaceholder('data-column-placeholder'),\n );\n forwardAttrs(\n this,\n this.#opSelect,\n asPlaceholder('data-operator-placeholder'),\n );\n [this.#textValue, this.#comboValue, this.#multiValue].forEach((t) =>\n forwardAttrs(this, t, asPlaceholder('data-value-placeholder')),\n );\n }\n\n // Sets `input.value` without triggering our input handlers. Restores the\n // prior flag so callers can hold it across an async block (see #syncFromRow).\n #setSilent(input, value) {\n const prev = this.#updating;\n this.#updating = true;\n input.value = value;\n this.#updating = prev;\n }\n\n // One delegated `input` listener for the whole row. Skip our own writes\n // (#setSilent / #syncFromRow set #updating) — vaadin fires input events for\n // those too, and reacting would re-enter and clobber state.\n #setupUserEventListeners() {\n this.shadowRoot.querySelector('.row').addEventListener('input', (e) => {\n if (this.#updating) return;\n if (e.target === this.#colSelect) this.#onColumnChange();\n else if (e.target === this.#opSelect) this.#onOperatorChange();\n // value input: debounce text typing, emit selects immediately.\n else if (this.#isTextValueActive()) this.#debouncedChange();\n else this.#dispatchChange();\n });\n }\n\n #isTextValueActive() {\n return !this.#textValue.classList.contains('hidden');\n }\n\n #getColDef(columnId) {\n return this.#columns.find((c) => c.id === columnId);\n }\n\n get trueLabel() {\n return this.getAttribute('data-value-label-true') || 'True';\n }\n\n get falseLabel() {\n return this.getAttribute('data-value-label-false') || 'False';\n }\n\n #booleanOptions() {\n return [\n { value: 'true', label: this.trueLabel },\n { value: 'false', label: this.falseLabel },\n ];\n }\n\n // Resolve order: per-column allowlist -> operators-catalog -> built-in\n // defaults, then layer per-operator `data-operator-label-<id>` overrides.\n #getOperators(colDef) {\n if (!colDef) return [];\n const ops = getOperatorsForInputType(\n colDef.inputType,\n colDef.operators,\n parseJsonAttr(this, 'operators-catalog'),\n );\n return ops.map((op) => {\n const label = this.getAttribute(`data-operator-label-${op.id}`);\n return label ? { ...op, label } : op;\n });\n }\n\n #onColumnChange() {\n const colDef = this.#getColDef(this.#colSelect.value);\n if (!colDef) return;\n\n this.#debouncedChange.cancel(); // stale text change from the old column\n\n const operators = this.#getOperators(colDef);\n this.#opSelect.data = operators.map((op) => ({\n value: op.id,\n label: op.label,\n }));\n\n // Keep the operator if the new column still offers it, else use its first.\n const nextOp =\n operators.find((op) => op.id === this.#opSelect.value) || operators[0];\n if (nextOp) this.#setSilent(this.#opSelect, nextOp.id);\n\n // Keep the value only when the input type is unchanged; a different type\n // can't render the old value.\n const prevInputType = this.#lastInputType;\n const nextInputType = colDef.inputType;\n const typeChanged = prevInputType !== nextInputType;\n this.#lastInputType = nextInputType;\n\n this.#updateValueInput(colDef, nextOp, { resetValue: typeChanged });\n this.#dispatchChange();\n }\n\n #onOperatorChange() {\n const colDef = this.#getColDef(this.#colSelect.value);\n const operator = this.#getOperators(colDef).find(\n (op) => op.id === this.#opSelect.value,\n );\n this.#updateValueInput(colDef, operator);\n this.#dispatchChange();\n }\n\n #updateValueInput(colDef, operator, opts = {}) {\n const inputType = colDef?.inputType;\n const reset = opts.resetValue ?? false;\n\n this.shadowRoot\n .querySelector('.value-wrapper')\n .classList.toggle('no-value', !!operator?.noValue);\n this.#showActiveValueInput(inputType);\n\n if (isTextLike(inputType)) {\n this.#configureTextValue(inputType, reset);\n } else if (isComboLike(inputType)) {\n this.#configureComboValue(colDef, reset);\n } else if (isMultiLike(inputType)) {\n this.#configureMultiValue(colDef, reset);\n }\n }\n\n #showActiveValueInput(inputType) {\n this.#textValue.classList.toggle('hidden', !isTextLike(inputType));\n this.#comboValue.classList.toggle('hidden', !isComboLike(inputType));\n this.#multiValue.classList.toggle('hidden', !isMultiLike(inputType));\n }\n\n #configureTextValue(inputType, reset) {\n if (inputType === 'number')\n this.#textValue.setAttribute('type', 'number');\n else if (inputType === 'email')\n this.#textValue.setAttribute('type', 'email');\n else this.#textValue.removeAttribute('type');\n if (reset) this.#setSilent(this.#textValue, '');\n }\n\n #configureComboValue(colDef, reset) {\n const options =\n colDef.inputType === 'boolean'\n ? this.#booleanOptions()\n : colDef.options || [];\n this.#comboValue.data = options.map((o) => ({\n value: o.value,\n label: o.label,\n }));\n if (reset) this.#setSilent(this.#comboValue, '');\n }\n\n #configureMultiValue(colDef, reset) {\n this.#multiValue.data = (colDef.options || []).map((o) => ({\n value: o.value,\n label: o.label,\n }));\n if (reset) this.#setSilent(this.#multiValue, []);\n }\n\n #activeInputForType(inputType) {\n if (isMultiLike(inputType)) return this.#multiValue;\n if (isComboLike(inputType)) return this.#comboValue;\n if (isTextLike(inputType)) return this.#textValue;\n return null;\n }\n\n #readActiveInputValue(colDef) {\n const input = this.#activeInputForType(colDef.inputType);\n if (!input) return null;\n return input.value ?? (isMultiLike(colDef.inputType) ? [] : '');\n }\n\n #assembleRowValue() {\n const columnId = this.#colSelect?.value || '';\n const operatorId = this.#opSelect?.value || '';\n const colDef = this.#getColDef(columnId);\n const operator = this.#getOperators(colDef).find(\n (op) => op.id === operatorId,\n );\n const noValue = !!operator?.noValue;\n const value =\n operator && !noValue && colDef\n ? this.#readActiveInputValue(colDef)\n : null;\n // `noValue` is internal (kept so isValidRow accepts no-value custom\n // operators); FilterRowsClass strips it from the public payload.\n return {\n id: this.#rowId,\n column: columnId,\n operator: operatorId,\n value,\n noValue,\n };\n }\n\n #dispatch(name, detail) {\n this.dispatchEvent(\n new CustomEvent(name, { bubbles: true, composed: true, detail }),\n );\n }\n\n #dispatchChange() {\n this.#dispatch('change', { value: this.#assembleRowValue() });\n }\n\n // Holds #updating across the whole async sync so vaadin's late input events\n // stay guarded — per-call #setSilent clears too early.\n async #syncFromRow(row) {\n this.#rowId = row.id ?? null;\n if (!row.column) return;\n this.#updating = true;\n try {\n const colDef = this.#getColDef(row.column);\n if (!colDef) return;\n\n await whenComboReady();\n this.#colSelect.value = row.column;\n\n const operators = this.#getOperators(colDef);\n this.#opSelect.data = operators.map((op) => ({\n value: op.id,\n label: op.label,\n }));\n\n if (row.operator) {\n await whenComboReady();\n this.#opSelect.value = row.operator;\n const operator = operators.find((op) => op.id === row.operator);\n this.#updateValueInput(colDef, operator);\n }\n\n if (row.value !== null && row.value !== undefined) {\n await whenComboReady();\n this.#applyRowValueToWidget(colDef, row.value);\n }\n } finally {\n this.#updating = false;\n }\n }\n\n #applyRowValueToWidget(colDef, value) {\n const t = colDef.inputType;\n const input = this.#activeInputForType(t);\n if (!input) return;\n if (isMultiLike(t))\n this.#setSilent(input, Array.isArray(value) ? value : []);\n else if (isComboLike(t)) this.#setSilent(input, String(value));\n else this.#setSilent(input, value ?? '');\n }\n\n #syncFloatingLabel(labelType) {\n const floating = labelType === 'floating';\n [\n this.#colSelect,\n this.#opSelect,\n this.#textValue,\n this.#comboValue,\n this.#multiValue,\n ].forEach((el) => {\n if (!el) return;\n if (floating) {\n const placeholder = el.getAttribute('placeholder');\n if (placeholder) el.setAttribute('label', placeholder);\n } else {\n el.removeAttribute('label');\n }\n });\n }\n\n get value() {\n return JSON.stringify(this.#assembleRowValue());\n }\n\n set value(row) {\n this.setAttribute(\n 'value',\n typeof row === 'string' ? row : JSON.stringify(row),\n );\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n if (oldValue === newValue) return;\n\n if (attrName === 'data') this.#onDataChanged(newValue);\n if (attrName === 'value') this.#onValueChanged(newValue);\n if (attrName === 'label-type') this.#syncFloatingLabel(newValue);\n if (attrName === 'disable-delete') this.#onDisableDeleteChanged(newValue);\n if (\n attrName === 'operators-catalog' ||\n attrName.startsWith('data-operator-label-')\n ) {\n this.#refreshOperatorsCombo();\n }\n if (\n attrName === 'data-value-label-true' ||\n attrName === 'data-value-label-false'\n ) {\n this.#refreshBooleanValueCombo();\n }\n }\n\n #onDataChanged(newValue) {\n if (!newValue) return;\n try {\n this.#columns = JSON.parse(newValue);\n this.#colSelect.data = this.#columns.map((col) => ({\n value: col.id,\n label: col.label,\n }));\n } catch {\n // ignore invalid JSON\n }\n }\n\n #onValueChanged(newValue) {\n if (!newValue) return;\n try {\n this.#syncFromRow(JSON.parse(newValue));\n } catch {\n // ignore invalid JSON\n }\n }\n\n #onDisableDeleteChanged(newValue) {\n const off = newValue !== null && newValue !== 'false';\n if (off) this.#deleteBtn.setAttribute('disabled', 'true');\n else this.#deleteBtn.removeAttribute('disabled');\n }\n\n #refreshBooleanValueCombo() {\n const colDef = this.#getColDef(this.#colSelect?.value);\n if (!colDef || colDef.inputType !== 'boolean' || !this.#comboValue)\n return;\n this.#comboValue.data = this.#booleanOptions();\n }\n\n #refreshOperatorsCombo() {\n const colDef = this.#getColDef(this.#colSelect?.value);\n if (!colDef || !this.#opSelect) return;\n const ops = this.#getOperators(colDef);\n this.#opSelect.data = ops.map((op) => ({\n value: op.id,\n label: op.label,\n }));\n }\n };\n\nconst { host } = {\n host: { selector: () => ':host' },\n};\n\nexport const FilterRowClass = compose(\n createStyleMixin({\n mappings: {\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { selector: () => ':host', property: 'min-width' },\n hostDirection: [\n { ...host, property: 'direction' },\n {\n selector: () => ButtonClass.componentName,\n property: ButtonClass.cssVarList.hostDirection,\n },\n {\n selector: () => ComboBoxClass.componentName,\n property: ComboBoxClass.cssVarList.hostDirection,\n },\n {\n selector: () => MultiSelectComboBoxClass.componentName,\n property: MultiSelectComboBoxClass.cssVarList.hostDirection,\n },\n ],\n rowGap: { selector: () => '.row', property: 'gap' },\n inputWidth: [\n {\n selector: () => ComboBoxClass.componentName,\n property: ComboBoxClass.cssVarList.hostWidth,\n },\n {\n selector: () => TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.hostWidth,\n },\n {\n selector: () => MultiSelectComboBoxClass.componentName,\n property: MultiSelectComboBoxClass.cssVarList.hostWidth,\n },\n ],\n deleteDisabledIconColor: {\n selector: () =>\n `${ButtonClass.componentName}.delete-btn[disabled=\"true\"]`,\n property: ButtonClass.cssVarList.iconColor,\n },\n },\n }),\n componentNameValidationMixin,\n FilterRowMixin,\n)(createBaseClass({ componentName, baseSelector: '.row' }));\n\nexport {\n OPERATORS,\n OPERATOR_META,\n OPERATOR_LABEL_ATTRS,\n isValidRow,\n getOperatorsForInputType,\n};\n","// Trailing debounce with a cancel(). Deliberately NOT common's `asyncDebounce`:\n// that one is built for async functions — it awaits the returned promise and\n// shares the last call's resolved value across pending callers — and exposes\n// no cancel(). Here the target is a sync, fire-and-forget dispatch that we must\n// be able to cancel mid-flight (a column change drops a stale text edit).\nexport const debounce = (fn, ms) => {\n let t;\n const wrapped = (...args) => {\n clearTimeout(t);\n t = setTimeout(() => fn(...args), ms);\n };\n wrapped.cancel = () => clearTimeout(t);\n return wrapped;\n};\n","import '@descope-ui/descope-text-field';\nimport '@descope-ui/descope-combo-box';\nimport '@descope-ui/descope-multi-select-combo-box';\nimport '@descope-ui/descope-button';\nimport '@descope-ui/descope-icon';\n\nimport { componentName, FilterRowClass } from './FilterRowClass';\n\ncustomElements.define(componentName, FilterRowClass);\n\nexport { FilterRowClass, componentName };\nexport { OPERATORS, getOperatorsForInputType, isValidRow } from './operators';\n","import {\n createStyleMixin,\n componentNameValidationMixin,\n} from '@descope-ui/common/components-mixins';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n getComponentName,\n injectStyle,\n observeChildren,\n forwardAttrs,\n} from '@descope-ui/common/components-helpers';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport { ButtonClass } from '@descope-ui/descope-button/class';\nimport {\n FilterRowClass,\n isValidRow,\n getOperatorsForInputType,\n OPERATOR_LABEL_ATTRS,\n componentName as FILTER_ROW_TAG,\n} from '../descope-filter-row/FilterRowClass.js';\nimport { parseJsonAttr } from '../helpers';\n\nexport const componentName = getComponentName('filter-rows');\n\nconst FilterRowsMixin = (superclass) =>\n class FilterRowsMixinClass extends superclass {\n #rows = [];\n\n #rowIdSeq = 0;\n\n #newRowId() {\n this.#rowIdSeq += 1;\n return `row-${this.#rowIdSeq}`;\n }\n\n #emptyRow() {\n return { id: this.#newRowId(), column: '', operator: '', value: null };\n }\n\n // A row is empty when nothing has been entered yet (pristine). Populated\n // rows — partial or complete, valid or not — count as non-empty.\n #isEmptyRow(row) {\n const v = row.value;\n const hasValue =\n v != null && v !== '' && !(Array.isArray(v) && v.length === 0);\n return !row.column && !row.operator && !hasValue;\n }\n\n #resolvedColumns = [];\n\n #rowsList;\n\n #addRowBtn;\n\n #addRowLabel;\n\n #clearAllBtn;\n\n static get observedAttributes() {\n return [\n ...(superclass.observedAttributes || []),\n 'data',\n 'value',\n 'clear-all-button-label',\n 'add-button-label',\n 'max-rows',\n ];\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"container\">\n <div class=\"rows-list\"></div>\n <div class=\"actions\">\n <descope-button class=\"add-row\" variant=\"link\" mode=\"primary\">\n <slot name=\"add-row-icon\" slot=\"prefix\"></slot>\n <span class=\"add-button-label\">Add filter</span>\n </descope-button>\n <descope-button class=\"clear-all\" variant=\"link\" mode=\"error\">Clear all</descope-button>\n </div>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: block;\n box-sizing: border-box;\n }\n .container {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n .rows-list {\n display: flex;\n flex-direction: column;\n overflow: hidden auto;\n }\n .rows-list:empty {\n display: none;\n }\n .actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n .add-row {\n margin-inline-end: auto;\n }\n .hidden {\n display: none;\n }\n ::slotted([slot=\"add-row-icon\"]) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n `,\n this,\n );\n\n this.#rowsList = this.shadowRoot.querySelector('.rows-list');\n this.#addRowBtn = this.shadowRoot.querySelector('.add-row');\n this.#addRowLabel = this.shadowRoot.querySelector('.add-button-label');\n this.#clearAllBtn = this.shadowRoot.querySelector('.clear-all');\n }\n\n init() {\n super.init?.();\n\n observeChildren(this, this.#syncDeleteIconsIntoRows.bind(this));\n\n this.#addRowBtn.addEventListener('click', this.#onAddRow.bind(this));\n this.#clearAllBtn.addEventListener('click', this.#onClearAll.bind(this));\n\n this.#rowsList.addEventListener('change', this.#onRowChange.bind(this));\n this.#rowsList.addEventListener('delete', this.#onRowDelete.bind(this));\n\n [this.#addRowBtn, this.#clearAllBtn].forEach((b) =>\n forwardAttrs(this, b, { includeAttrs: ['size'] }),\n );\n\n this.#resolveColumns();\n this.#syncDeleteIconsIntoRows();\n\n // Never start with 0 rows.\n this.#ensureAtLeastOneRow();\n this.#renderRows();\n\n // The Clear all button (descope-button) runs its own attr sync in a\n // deferred init(), which can race and drop the `disabled` we set during\n // the first render. Re-assert once it's up. (Per-row delete isn't\n // affected — the row applies it in its own attributeChangedCallback.)\n setTimeout(() => this.#updateActionsState());\n }\n\n #resolveColumns() {\n const data = parseJsonAttr(this, 'data');\n this.#resolvedColumns = Array.isArray(data) ? data : [];\n }\n\n // Re-clone delete-row-icon into every row. Idempotent: clears prior clones first.\n #syncDeleteIconsIntoRows() {\n this.#rowsList.querySelectorAll(FILTER_ROW_TAG).forEach((row) => {\n row\n .querySelectorAll(':scope > [slot=\"delete-row-icon\"]')\n .forEach((c) => c.remove());\n this.#cloneDeleteIconsInto(row);\n });\n }\n\n // Remove DOM rows whose id is no longer in #rows (e.g. after delete).\n #pruneRemovedRows() {\n const keepIds = new Set(this.#rows.map((r) => r.id));\n this.#rowsList.querySelectorAll(FILTER_ROW_TAG).forEach((el) => {\n if (!keepIds.has(el.dataset.rowId)) el.remove();\n });\n }\n\n #findRowEl(rowId) {\n return this.#rowsList.querySelector(\n `${FILTER_ROW_TAG}[data-row-id=\"${rowId}\"]`,\n );\n }\n\n #renderRows() {\n this.#pruneRemovedRows();\n this.#rows.forEach((row) => {\n const el = this.#findRowEl(row.id) || this.#createRowEl(row.id);\n el.setAttribute('value', JSON.stringify(row));\n });\n this.#updateActionsState();\n this.#updateAddRowVisibility();\n }\n\n #createRowEl(rowId) {\n const el = document.createElement(FILTER_ROW_TAG);\n el.dataset.rowId = rowId;\n this.#rowsList.appendChild(el);\n forwardAttrs(this, el, {\n includeAttrs: [\n 'data',\n 'size',\n 'label-type',\n 'operators-catalog',\n 'data-value-label-true',\n 'data-value-label-false',\n 'data-column-placeholder',\n 'data-operator-placeholder',\n 'data-value-placeholder',\n ...OPERATOR_LABEL_ATTRS,\n ],\n });\n this.#cloneDeleteIconsInto(el);\n return el;\n }\n\n #cloneDeleteIconsInto(rowEl) {\n Array.from(this.children)\n .filter((c) => c.getAttribute?.('slot') === 'delete-row-icon')\n .forEach((src) => {\n const clone = src.cloneNode(true);\n clone.setAttribute('slot', 'delete-row-icon');\n rowEl.appendChild(clone);\n });\n }\n\n // A lone, still-empty row has nothing to act on, so both per-row delete and\n // Clear all are disabled. A populated sole row keeps delete enabled;\n // deleting it clears it back to empty (see #onRowDelete + #ensureAtLeastOneRow).\n #updateActionsState() {\n const soleEmpty =\n this.#rows.length === 1 && this.#isEmptyRow(this.#rows[0]);\n this.#rowsList.querySelectorAll(FILTER_ROW_TAG).forEach((row) => {\n if (soleEmpty) row.setAttribute('disable-delete', '');\n else row.removeAttribute('disable-delete');\n });\n if (soleEmpty) this.#clearAllBtn.setAttribute('disabled', 'true');\n else this.#clearAllBtn.removeAttribute('disabled');\n }\n\n #ensureAtLeastOneRow() {\n if (this.#rows.length === 0) {\n this.#rows = [this.#emptyRow()];\n }\n }\n\n #updateAddRowVisibility() {\n const maxRows = parseInt(this.getAttribute('max-rows'), 10);\n const limitReached =\n !Number.isNaN(maxRows) && this.#rows.length >= maxRows;\n this.#addRowBtn.classList.toggle('hidden', limitReached);\n }\n\n #onAddRow() {\n this.#rows = [...this.#rows, this.#emptyRow()];\n this.#renderRows();\n this.#dispatchChange();\n }\n\n #onClearAll() {\n this.#rows = [this.#emptyRow()];\n this.#renderRows();\n // `clear` is the commit signal for Clear all — the host commits an empty\n // filter from it. No separate `change` (that would double-commit).\n this.#dispatch('clear');\n }\n\n #onRowChange(e) {\n const rowEl = e.target.closest(FILTER_ROW_TAG);\n if (!rowEl) return;\n // Stop the per-row `change` here — the host listens for THIS component's\n // aggregate `change` (below), not the individual row's single-row detail.\n e.stopPropagation();\n const id = rowEl.dataset.rowId;\n this.#rows = this.#rows.map((r) => (r.id === id ? e.detail.value : r));\n // A sole row may have just become populated (or empty again); recompute\n // so its delete button enables/disables live, without a re-render.\n this.#updateActionsState();\n this.#dispatchChange();\n }\n\n #onRowDelete(e) {\n const rowEl = e.target.closest(FILTER_ROW_TAG);\n if (!rowEl) return;\n const id = rowEl.dataset.rowId;\n this.#rows = this.#rows.filter((r) => r.id !== id);\n this.#ensureAtLeastOneRow();\n this.#renderRows();\n this.#dispatchChange();\n }\n\n #dispatch(name, detail) {\n this.dispatchEvent(\n new CustomEvent(name, { bubbles: true, composed: true, detail }),\n );\n }\n\n // Resolve a row's operator def from the catalog (per-column allowlist ->\n // operators-catalog -> built-ins). Used to recover metadata not carried on\n // the row itself (prefix/suffix, noValue).\n #resolveOperator({ column, operator }) {\n const colDef = this.#resolvedColumns.find((c) => c.id === column);\n if (!colDef) return null;\n return (\n getOperatorsForInputType(\n colDef.inputType,\n colDef.operators,\n parseJsonAttr(this, 'operators-catalog'),\n ).find((o) => o.id === operator) || null\n );\n }\n\n // The operator's configured prefix/suffix (query affixes like SQL `%`).\n #operatorWildcards(row) {\n const op = this.#resolveOperator(row);\n if (!op) return {};\n return {\n ...(op.prefix != null && { prefix: op.prefix }),\n ...(op.suffix != null && { suffix: op.suffix }),\n };\n }\n\n // Commit signal, fired on every row mutation. `value` = valid rows only\n // (public contract: badge + query); `rows` = full draft incl. partial rows\n // so the host retains in-progress work. Row id is stripped from both.\n #dispatchChange() {\n const toPublicRow = (row) => ({\n column: row.column,\n operator: row.operator,\n value: row.value,\n ...this.#operatorWildcards(row),\n });\n const value = this.#rows.filter(isValidRow).map(toPublicRow);\n const rows = this.#rows.map((row) => ({\n ...toPublicRow(row),\n ...(row.noValue != null && { noValue: row.noValue }),\n }));\n this.#dispatch('change', { value, rows });\n }\n\n get value() {\n return JSON.stringify(this.#rows);\n }\n\n set value(rows) {\n this.setAttribute(\n 'value',\n typeof rows === 'string' ? rows : JSON.stringify(rows),\n );\n }\n\n get addButtonLabel() {\n return this.getAttribute('add-button-label') || 'Add filter';\n }\n\n get clearAllButtonLabel() {\n return this.getAttribute('clear-all-button-label') || 'Clear all';\n }\n\n #updateAddRowLabel() {\n this.#addRowLabel.textContent = this.addButtonLabel;\n }\n\n #updateClearAllLabel() {\n this.#clearAllBtn.textContent = this.clearAllButtonLabel;\n }\n\n #onRowsChanged(newValue) {\n if (!newValue) return;\n try {\n const parsed = JSON.parse(newValue);\n this.#rows = (Array.isArray(parsed) ? parsed : []).map((row) => {\n const op = this.#resolveOperator(row);\n return {\n ...row,\n // accept rows without internal `id`; assign one on ingest.\n id: row.id || this.#newRowId(),\n // Resolve noValue from the catalog. Rows seeded via `value` arrive\n // without it, and isValidRow can't recover it for custom operator\n // ids (OPERATOR_META knows built-ins only) — so a no-value custom\n // row would be dropped from the committed filter on the next edit.\n ...(op && { noValue: !!op.noValue }),\n };\n });\n this.#ensureAtLeastOneRow();\n this.#renderRows();\n } catch {\n // ignore invalid JSON\n }\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (oldValue === newValue) return;\n\n if (attrName === 'data') {\n this.#resolveColumns();\n this.#renderRows();\n }\n if (attrName === 'value') this.#onRowsChanged(newValue);\n if (attrName === 'add-button-label') this.#updateAddRowLabel();\n if (attrName === 'clear-all-button-label') this.#updateClearAllLabel();\n if (attrName === 'max-rows') this.#updateAddRowVisibility();\n }\n };\n\nconst { host, container, rowsList, actions, addRowIcon } = {\n host: { selector: () => ':host' },\n container: { selector: () => '.container' },\n rowsList: { selector: () => '.rows-list' },\n actions: { selector: () => '.actions' },\n addRowIcon: { selector: () => '::slotted([slot=\"add-row-icon\"])' },\n};\n\nexport const FilterRowsClass = compose(\n createStyleMixin({\n mappings: {\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { ...host, property: 'min-width' },\n hostDirection: [\n { ...host, property: 'direction' },\n {\n selector: () => ButtonClass.componentName,\n property: ButtonClass.cssVarList.hostDirection,\n },\n {\n selector: () => FilterRowClass.componentName,\n property: FilterRowClass.cssVarList.hostDirection,\n },\n ],\n containerWidth: { ...container, property: 'width' },\n containerPadding: { ...container, property: 'padding' },\n containerGap: { ...container, property: 'gap' },\n listGap: { ...rowsList, property: 'gap' },\n listMaxHeight: { ...rowsList, property: 'max-height' },\n actionsGap: { ...actions, property: 'gap' },\n addRowIconSize: [\n { ...addRowIcon, property: 'width' },\n { ...addRowIcon, property: 'height' },\n ],\n },\n }),\n componentNameValidationMixin,\n FilterRowsMixin,\n)(createBaseClass({ componentName, baseSelector: '.container' }));\n","import '../descope-filter-row';\nimport '@descope-ui/descope-button';\n\nimport { componentName, FilterRowsClass } from './FilterRowsClass';\n\ncustomElements.define(componentName, FilterRowsClass);\n\nexport { FilterRowsClass, componentName };\n","import {\n injectStyle,\n getComponentName,\n forwardAttrs,\n} from '@descope-ui/common/components-helpers';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport {\n createStyleMixin,\n draggableMixin,\n componentNameValidationMixin,\n portalMixin,\n} from '@descope-ui/common/components-mixins';\nimport { compose } from '@descope-ui/common/utils';\nimport { BadgeClass } from '@descope-ui/descope-badge/class';\nimport { ButtonClass } from '@descope-ui/descope-button/class';\nimport {\n FilterRowsClass,\n componentName as FILTER_ROWS_TAG,\n} from './descope-filter-rows/FilterRowsClass.js';\nimport {\n FilterRowClass,\n OPERATOR_LABEL_ATTRS,\n} from './descope-filter-row/FilterRowClass.js';\nimport { AttachmentClass } from '@descope-ui/descope-attachment/class';\nimport { cloneNamedSlotsInto, parseRowsArray } from './helpers';\n\nexport const componentName = getComponentName('filter');\n\nconst BASE_SELECTOR = 'vaadin-popover';\n\nconst BaseClass = createBaseClass({\n componentName,\n baseSelector: BASE_SELECTOR,\n});\n\nconst ROW_ICON_SLOTS = ['add-row-icon', 'delete-row-icon'];\n\nclass RawFilterClass extends BaseClass {\n #committedRows = [];\n\n // Set while committing a change that originated from the inner filter-rows,\n // so #onValueAttrChanged skips pushing the (valid-only) committed value back into\n // filter-rows — the rows element owns the live draft (incl. partial rows).\n #syncingFromRows = false;\n\n #popoverPosStylesheet;\n\n #data = null;\n\n #filterRowsRef = null;\n\n #overlay = null;\n\n static get observedAttributes() {\n return [\n ...(BaseClass.observedAttributes || []),\n 'label',\n 'disable-indicator',\n 'data',\n 'value',\n ];\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div>\n <descope-attachment class=\"attachment\" position=\"top-end\" st-offset-x=\"0px\">\n <descope-button class=\"trigger-btn\">\n <slot name=\"button-icon\"></slot>\n <span class=\"trigger-label\"></span>\n </descope-button>\n <descope-badge slot=\"attachment\" class=\"counter hidden\" mode=\"primary\" variant=\"contained\" bordered=\"true\" size=\"xs\">\n <span class=\"counter-text\">0</span>\n </descope-badge>\n </descope-attachment>\n <vaadin-popover></vaadin-popover>\n <slot name=\"add-row-icon\" class=\"hidden\"></slot>\n <slot name=\"delete-row-icon\" class=\"hidden\"></slot>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: inline-block;\n box-sizing: border-box;\n user-select: none;\n max-width: 100%;\n }\n\n :host([full-width=\"true\"]) {\n display: block;\n }\n\n \n .hidden {\n display: none;\n }\n\n :host([read-only=\"true\"]) .trigger-btn {\n pointer-events: none;\n }\n `,\n this,\n );\n\n this.triggerBtn = this.shadowRoot.querySelector('.trigger-btn');\n this.triggerLabel = this.shadowRoot.querySelector('.trigger-label');\n this.counter = this.shadowRoot.querySelector('.counter');\n this.counterText = this.shadowRoot.querySelector('.counter-text');\n }\n\n get opened() {\n return this.getAttribute('opened') === 'true';\n }\n\n get isIndicatorVisible() {\n return this.getAttribute('disable-indicator') !== 'true';\n }\n\n get isFullWidth() {\n return this.getAttribute('full-width') === 'true';\n }\n\n get overlay() {\n // vaadin creates the overlay lazily on first render, so this can't be a\n // const captured at init. Once it exists it's stable — cache it.\n this.#overlay ??=\n this.baseElement.shadowRoot?.querySelector('vaadin-popover-overlay') ||\n null;\n return this.#overlay;\n }\n\n get backdrop() {\n return this.overlay?.shadowRoot?.querySelector('#backdrop');\n }\n\n get filterRowsElement() {\n return this.overlay?.querySelector(FILTER_ROWS_TAG) || null;\n }\n\n init() {\n super.init?.();\n\n this.#initPopover();\n this.#updateCounter();\n this.#updateLabel();\n\n forwardAttrs(this, this.triggerBtn, {\n includeAttrs: ['button-mode', 'button-variant', 'size', 'full-width'],\n mapAttrs: { 'button-mode': 'mode', 'button-variant': 'variant' },\n });\n\n this.#setupSlotChangeListeners();\n\n setTimeout(() => {\n this.#overrideOverlaySettings();\n });\n }\n\n #setupSlotChangeListeners() {\n ROW_ICON_SLOTS.forEach((name) => {\n const slot = this.shadowRoot.querySelector(`slot[name=\"${name}\"]`);\n slot?.addEventListener('slotchange', () => {\n if (this.#filterRowsRef?.isConnected) {\n cloneNamedSlotsInto(this, this.#filterRowsRef, [name]);\n }\n });\n });\n }\n\n #initPopover() {\n // Manual mode (empty trigger): we own open/close via our trigger button +\n // onPopoverToggle(), and the backdrop-click handler below carries close.\n // Native close is unavailable here — see #overrideOverlaySettings for why.\n this.baseElement.trigger = [];\n this.baseElement.withBackdrop = true;\n this.baseElement.renderer = this.#popoverRenderer.bind(this);\n\n this.baseElement.addEventListener('click', (e) => {\n e.stopPropagation();\n });\n\n this.triggerBtn.addEventListener('click', () => this.onPopoverToggle());\n }\n\n #popoverRenderer(root) {\n if (!root.firstChild) {\n this.overlay.positionTarget = this.triggerBtn;\n\n const filterRows = document.createElement(FILTER_ROWS_TAG);\n\n forwardAttrs(this, filterRows, {\n includeAttrs: [\n 'operators',\n 'size',\n 'max-rows',\n 'clear-all-button-label',\n 'add-button-label',\n 'label-type',\n 'data-value-label-true',\n 'data-value-label-false',\n 'data-column-placeholder',\n 'data-operator-placeholder',\n 'data-value-placeholder',\n ...OPERATOR_LABEL_ATTRS,\n ],\n mapAttrs: { operators: 'operators-catalog' },\n });\n this.#forwardDataToRows(filterRows);\n\n root.appendChild(filterRows);\n\n this.#filterRowsRef = filterRows;\n\n // Seed the freshly created rows with the current committed value.\n filterRows.setAttribute('value', JSON.stringify(this.#committedRows));\n\n // Live filtering: every inner-rows `change` commits immediately (no Apply\n // button). `clear` commits an empty filter. The popover stays open.\n filterRows.addEventListener('change', this.#onRowsChange.bind(this));\n filterRows.addEventListener('clear', this.#onClear.bind(this));\n\n // vaadin-popover's host is `:host{display:none!important}` (in its own\n // shadow), which hides our shadow-kept overlay. Override it from inside\n // that same shadow scope — an inline/outer rule can't beat the :host\n // important rule.\n const cs = new CSSStyleSheet();\n cs.insertRule(':host{display:block!important;}');\n this.baseElement?.shadowRoot?.adoptedStyleSheets?.push(cs);\n\n this.backdrop?.addEventListener('click', () => this.closePopover());\n }\n\n if (this.#filterRowsRef) {\n // Reopen path: the rows element already exists and holds the live draft,\n // so its value is left as-is (no reset). Only re-clone the slotted icons,\n // in case the consumer swapped them while the popover was closed.\n cloneNamedSlotsInto(this, this.#filterRowsRef, ROW_ICON_SLOTS);\n }\n\n // Hidden until we reposition. The delay lets the overlay (and, in full-width\n // mode, the host's stretch) settle before we measure — vaadin-overlay-open\n // fires too early for the full-width measurement.\n root.style.setProperty('visibility', 'hidden');\n setTimeout(() => {\n this.#adjustPopoverPosition();\n root.style.setProperty('visibility', 'visible');\n }, 50);\n }\n\n #adjustPopoverPosition() {\n if (!this.overlay) return;\n const popover = this.shadowRoot.querySelector('vaadin-popover')?.shadowRoot;\n if (!popover) return;\n\n if (this.#popoverPosStylesheet) {\n popover.adoptedStyleSheets = popover.adoptedStyleSheets.filter(\n (s) => s !== this.#popoverPosStylesheet,\n );\n }\n\n const windowRect = document.body.getBoundingClientRect();\n const triggerRect = this.triggerBtn.getBoundingClientRect();\n const overlayRect = this.overlay.getBoundingClientRect();\n\n const offset = triggerRect.left - overlayRect.left;\n const availableLeft = overlayRect.left;\n const availableRight = windowRect.width - overlayRect.right;\n\n let newOffset;\n if (offset > 0) {\n newOffset = Math.min(offset, availableRight);\n } else {\n newOffset = Math.min(Math.abs(offset), availableLeft) * -1;\n }\n\n // Offset via `margin-left`, NOT `transform`: a transform creates a\n // containing block that traps the position:fixed combo-box dropdowns inside\n // the popover, clipping their listboxes. margin-left avoids that.\n // In full-width mode, stretch the overlay to the host width (the size theme\n // var only sets a fixed width, leaving the popover narrower than the\n // full-width trigger). Measure the host, not the trigger button — the\n // button's full-width stretch settles a frame after the first open, so its\n // width is stale on that first measure; the host is laid out in the page\n // and stable.\n const hostWidth = Math.round(this.getBoundingClientRect().width);\n this.#popoverPosStylesheet = injectStyle(\n `\n vaadin-popover-overlay::part(overlay) {\n margin-left: ${newOffset}px;\n ${this.isFullWidth ? `width: ${hostWidth}px; max-width: ${hostWidth}px;` : ''}\n }\n `,\n popover,\n );\n }\n\n #dispatch(name, detail) {\n this.dispatchEvent(\n new CustomEvent(name, { bubbles: true, composed: true, detail }),\n );\n }\n\n // Single commit path: the `value` attribute is the source of truth; its\n // callback (#onValueAttrChanged) does the state + UI sync.\n #commitRowsAttr(rows) {\n // Flag the write so the value attributeChangedCallback (#onValueAttrChanged)\n // skips pushing it back into filter-rows. setAttribute is synchronous, so\n // the guard opens and closes within this call — no re-entry window.\n this.#syncingFromRows = true;\n this.setAttribute('value', JSON.stringify(parseRowsArray(rows)));\n this.#syncingFromRows = false;\n }\n\n // Live commit from a rows edit: commit only the valid rows (badge/query\n // contract); the full draft stays in filter-rows. Skip when the valid set\n // is unchanged so we don't fire redundant queries. Popover stays open.\n #onRowsChange(e) {\n const next = parseRowsArray(e.detail.value || []);\n if (JSON.stringify(next) === JSON.stringify(this.#committedRows)) return;\n this.#commitRowsAttr(next);\n this.#dispatch('filter-apply', {\n value: this.#committedRows,\n action: 'apply',\n });\n }\n\n #onClear() {\n this.#commitRowsAttr([]);\n this.#dispatch('filter-clear', {\n value: this.#committedRows,\n action: 'clear-all',\n });\n }\n\n #updateCounter() {\n if (!this.counter) return;\n const count = this.#committedRows.length;\n this.counterText.textContent = String(count);\n this.counter.classList.toggle(\n 'hidden',\n count < 1 || !this.isIndicatorVisible,\n );\n }\n\n #updateLabel() {\n if (!this.triggerLabel) return;\n const label = this.getAttribute('label') || '';\n this.triggerLabel.textContent = label;\n this.triggerLabel.classList.toggle('hidden', !label);\n }\n\n #forwardDataToRows(filterRows) {\n if (!filterRows || !this.#data) return;\n filterRows.setAttribute('data', JSON.stringify(this.#data));\n }\n\n get value() {\n return JSON.stringify(this.#committedRows);\n }\n\n set value(rows) {\n this.#commitRowsAttr(rows);\n }\n\n set data(data) {\n this.#data = Array.isArray(data) ? data : null;\n if (this.filterRowsElement && this.#data) {\n this.filterRowsElement.setAttribute('data', JSON.stringify(this.#data));\n }\n }\n\n get data() {\n return this.#data;\n }\n\n // Constraint: vaadin normally reparents the open overlay out to document.body,\n // which puts it outside our shadow DOM -> our scoped theme CSS vars no longer\n // reach it. We need it themed, so we must keep it inside our shadow DOM.\n //\n // Decision: override the attach/detach hooks so the overlay stays put\n // (attach only bringToFront()s; detach no-ops — native detach dereferences\n // the _placeholder that native attach creates, which our attach skips).\n //\n // Trade-off: vaadin fires its native outside-click/Esc close only for the\n // topmost overlay, which it finds by scanning document.body's children\n // (isLastOverlay). Ours never lands there, so native close silently no-ops.\n // We accept that and drive close ourselves (manual trigger + the backdrop\n // click handler in #initPopover). Esc close is intentionally not implemented.\n #overrideOverlaySettings() {\n if (!this.overlay) return;\n this.overlay._attachOverlay = () => this.overlay.bringToFront();\n this.overlay._detachOverlay = () => {};\n }\n\n get readOnly() {\n return this.getAttribute('read-only') === 'true';\n }\n\n onPopoverToggle() {\n if (this.readOnly) return;\n this.opened ? this.closePopover() : this.openPopover();\n }\n\n openPopover() {\n this.setAttribute('opened', 'true');\n this.baseElement.opened = true;\n }\n\n closePopover() {\n this.removeAttribute('opened');\n this.baseElement.opened = false;\n }\n\n #onValueAttrChanged(newValue) {\n if (!newValue) return;\n this.#committedRows = parseRowsArray(newValue);\n this.#updateCounter();\n // Don't push a rows-originated commit back into filter-rows (it would wipe\n // partial rows). External `value` writes DO push, to render the new state.\n if (this.#syncingFromRows) return;\n this.filterRowsElement?.setAttribute(\n 'value',\n JSON.stringify(this.#committedRows),\n );\n }\n\n #onColumnsChanged(newValue) {\n if (!newValue) return;\n try {\n this.#data = JSON.parse(newValue);\n this.filterRowsElement?.setAttribute('data', JSON.stringify(this.#data));\n } catch {\n // ignore invalid JSON\n }\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (oldValue === newValue) return;\n\n if (attrName === 'value') this.#onValueAttrChanged(newValue);\n if (attrName === 'data') this.#onColumnsChanged(newValue);\n if (attrName === 'label') this.#updateLabel();\n if (attrName === 'disable-indicator') this.#updateCounter();\n }\n}\n\nconst { host, overlay, backdrop } = {\n host: { selector: () => ':host' },\n overlay: { selector: 'vaadin-popover-overlay::part(overlay)' },\n backdrop: { selector: 'vaadin-popover-overlay::part(backdrop)' },\n};\n\nexport const FilterClass = compose(\n createStyleMixin({\n mappings: {\n hostWidth: { ...host, property: 'width' },\n hostDirection: [\n { ...host, property: 'direction' },\n {\n selector: () => ButtonClass.componentName,\n property: ButtonClass.cssVarList.hostDirection,\n },\n {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.hostDirection,\n },\n ],\n\n counterBorderRadius: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.borderRadius,\n },\n counterWidth: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.hostWidth,\n },\n counterHeight: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.hostHeight,\n },\n counterFontSize: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.fontSize,\n },\n counterLineHeight: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.lineHeight,\n },\n counterBackgroundColor: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.backgroundColor,\n },\n counterTextColor: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.textColor,\n },\n // Suppresses the badge's own mode border (maps it to filter's unset var)\n // so the counter shows no ring. Removing this lets mode=primary's border\n // through — keep it.\n counterBorderColor: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.borderColor,\n },\n counterOffsetX: {\n selector: () => AttachmentClass.componentName,\n property: AttachmentClass.cssVarList.offsetX,\n },\n counterOffsetY: {\n selector: () => AttachmentClass.componentName,\n property: AttachmentClass.cssVarList.offsetY,\n },\n\n rowsHostWidth: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.hostWidth,\n },\n rowsContainerWidth: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.containerWidth,\n },\n rowsContainerPadding: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.containerPadding,\n },\n rowsContainerGap: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.containerGap,\n },\n rowsListGap: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.listGap,\n },\n rowsListMaxHeight: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.listMaxHeight,\n },\n rowsActionsGap: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.actionsGap,\n },\n rowsAddRowIconSize: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.addRowIconSize,\n },\n rowWidth: { ...host, property: FilterRowClass.cssVarList.hostWidth },\n rowMinWidth: {\n ...host,\n property: FilterRowClass.cssVarList.hostMinWidth,\n },\n rowValueWidth: {\n ...host,\n property: FilterRowClass.cssVarList.inputWidth,\n },\n rowGap: { ...host, property: FilterRowClass.cssVarList.rowGap },\n rowDisabledDeleteColor: {\n ...host,\n property: FilterRowClass.cssVarList.deleteDisabledIconColor,\n },\n },\n }),\n portalMixin({\n name: 'overlay',\n selector: '',\n mappings: {\n marginTop: { ...overlay, property: 'margin-top' },\n width: { ...overlay },\n backgroundColor: { ...overlay },\n backdropBackgroundColor: { ...backdrop, property: 'background-color' },\n backdropPointerEvents: { ...backdrop, property: 'pointer-events' },\n padding: { ...overlay },\n boxShadow: { ...overlay },\n borderRadius: { ...overlay },\n outlineWidth: { ...overlay },\n outlineColor: { ...overlay },\n outlineStyle: { ...overlay },\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawFilterClass);\n","import '@vaadin/popover/src/vaadin-popover';\nimport './descope-filter-rows';\nimport '@descope-ui/descope-button';\nimport '@descope-ui/descope-badge';\nimport '@descope-ui/descope-attachment';\n\nimport { componentName, FilterClass } from './FilterClass';\n\ncustomElements.define(componentName, FilterClass);\n\nexport { FilterClass, componentName };\n","import '@descope-ui/descope-image';\n\nimport { componentName, IconClass } from './IconClass';\n\ncustomElements.define(componentName, IconClass);\n\nexport { IconClass, componentName };\n","import { componentName, ImageClass } from './ImageClass';\n\ncustomElements.define(componentName, ImageClass);\n\nexport { ImageClass, componentName };\n"],"names":["module","exports","componentName","componentsHelpers","xE","RawAnchored","baseClasses","qu","baseSelector","stretchObserver","directionObserver","hostStretchSheet","anchorClassObserver","anchor","this","defaultSlot","assignedElements","flatten","anchored","shadowRoot","querySelector","outerHost","getRootNode","host","constructor","super","attachShadow","mode","innerHTML","init","fz","syncStretchCSS","addEventListener","syncAnchor","syncComponentState","hasHidden","classList","contains","toggle","onAnchorChanged","forwardAttr","observeAnchorClass","disconnect","mx","includeAttrs","connectedCallback","css","replaceSync","observer","target","attr","removeAttribute","EA","disconnectedCallback","toggleAttribute","AnchoredClass","utils","Zz","componentsMixins","tQ","customElements","define","_descope_ui_common_components_helpers__WEBPACK_IMPORTED_MODULE_2__","ATTACHMENT_POSITIONS","DEFAULT_POSITION","RawAttachment","_descope_ui_common_base_classes__WEBPACK_IMPORTED_MODULE_1__","anchoredClassObserver","attachmentSlot","attachment","observedAttributes","attributeChangedCallback","name","oldVal","newVal","handlePositionChange","container","syncDirection","setVisibility","window","requestAnimationFrame","syncAvailableSizeAttr","observeAnchored","anchorRect","getBoundingClientRect","availableWidth","width","setAttribute","Number","hasAnchor","length","direction","getAttribute","offsetX","offsetY","pos","includes","attachmentContainer","selector","AttachmentClass","_descope_ui_common_utils__WEBPACK_IMPORTED_MODULE_3__","_descope_ui_common_components_mixins__WEBPACK_IMPORTED_MODULE_0__","RF","mappings","transform","justifyContent","maxWidth","top","bottom","left","right","VO","_AttachmentClass__WEBPACK_IMPORTED_MODULE_1__","T","q","RawBadge","shrinkToIndicatorThreshold","handleShrinkToIndicator","value","parseFloat","BadgeClass","hostWidth","property","hostHeight","hostDirection","fontFamily","fontSize","fontWeight","lineHeight","textTransform","verticalPadding","horizontalPadding","borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","textColor","textAlign","boxShadow","textIndent","_BadgeClass__WEBPACK_IMPORTED_MODULE_0__","e","OPERATOR_META","equal","label","gt","lt","gte","lte","noValue","OPERATOR_LABEL_ATTRS","Object","keys","map","id","OPERATORS","text","number","email","boolean","singleselect","multiselect","resolve","meta","getOperatorsForInputType","inputType","custom","catalog","baseOps","Array","isArray","every","c","filter","op","override","find","isValidRow","row","column","operator","operatorId","String","cloneNamedSlotsInto","dest","slotNames","forEach","s","slotName","from","querySelectorAll","el","remove","children","node","clone","cloneNode","appendChild","cloneNamedSlotInto","parseRowsArray","input","raw","JSON","parse","parseJsonAttr","ele","TEXT_INPUT_TYPES","COMBO_INPUT_TYPES","isTextLike","t","isComboLike","isMultiLike","whenComboReady","Promise","r","setTimeout","FilterRowClass","hostMinWidth","ButtonClass","J","cssVarList","ComboBoxClass","C","MultiSelectComboBoxClass","rowGap","inputWidth","TextFieldClass","w","deleteDisabledIconColor","iconColor","superclass","columns","rowId","updating","colSelect","opSelect","textValue","comboValue","multiValue","deleteBtn","lastInputType","debouncedChange","fn","wrapped","args","clearTimeout","cancel","debounce","dispatchChange","delete_default","setupUserEventListeners","dispatch","setupAttrForwarding","inputs","setupPlaceholderForwarding","asPlaceholder","mapAttrs","setSilent","prev","onColumnChange","onOperatorChange","isTextValueActive","getColDef","columnId","trueLabel","falseLabel","booleanOptions","getOperators","colDef","operators","data","nextOp","prevInputType","nextInputType","typeChanged","updateValueInput","resetValue","opts","reset","showActiveValueInput","configureTextValue","configureComboValue","configureMultiValue","options","o","activeInputForType","readActiveInputValue","assembleRowValue","detail","dispatchEvent","CustomEvent","bubbles","composed","syncFromRow","undefined","applyRowValueToWidget","syncFloatingLabel","labelType","floating","placeholder","stringify","attrName","oldValue","newValue","onDataChanged","onValueChanged","onDisableDeleteChanged","startsWith","refreshOperatorsCombo","refreshBooleanValueCombo","col","ops","FilterRowsClass_componentName","FilterRowsClass_host","rowsList","actions","addRowIcon","FilterRowsClass","containerWidth","containerPadding","containerGap","listGap","listMaxHeight","actionsGap","addRowIconSize","rows","rowIdSeq","newRowId","emptyRow","isEmptyRow","v","hasValue","resolvedColumns","addRowBtn","addRowLabel","clearAllBtn","Ge","syncDeleteIconsIntoRows","bind","onAddRow","onClearAll","onRowChange","onRowDelete","b","resolveColumns","ensureAtLeastOneRow","renderRows","updateActionsState","cloneDeleteIconsInto","pruneRemovedRows","keepIds","Set","has","dataset","findRowEl","createRowEl","updateAddRowVisibility","document","createElement","rowEl","src","soleEmpty","maxRows","parseInt","limitReached","isNaN","closest","stopPropagation","resolveOperator","operatorWildcards","prefix","suffix","toPublicRow","addButtonLabel","clearAllButtonLabel","updateAddRowLabel","textContent","updateClearAllLabel","onRowsChanged","parsed","FilterClass_componentName","BaseClass","ROW_ICON_SLOTS","FilterClass_host","overlay","backdrop","FilterClass","counterBorderRadius","counterWidth","counterHeight","counterFontSize","counterLineHeight","counterBackgroundColor","counterTextColor","counterBorderColor","counterOffsetX","counterOffsetY","rowsHostWidth","rowsContainerWidth","rowsContainerPadding","rowsContainerGap","rowsListGap","rowsListMaxHeight","rowsActionsGap","rowsAddRowIconSize","rowWidth","rowMinWidth","rowValueWidth","rowDisabledDeleteColor","mA","marginTop","backdropBackgroundColor","backdropPointerEvents","padding","outlineWidth","outlineColor","outlineStyle","committedRows","syncingFromRows","popoverPosStylesheet","filterRowsRef","triggerBtn","triggerLabel","counter","counterText","opened","isIndicatorVisible","isFullWidth","baseElement","filterRowsElement","initPopover","updateCounter","updateLabel","setupSlotChangeListeners","overrideOverlaySettings","slot","isConnected","trigger","withBackdrop","renderer","popoverRenderer","onPopoverToggle","root","firstChild","positionTarget","filterRows","forwardDataToRows","onRowsChange","onClear","cs","CSSStyleSheet","insertRule","adoptedStyleSheets","push","closePopover","style","setProperty","adjustPopoverPosition","popover","windowRect","body","triggerRect","overlayRect","offset","availableLeft","availableRight","newOffset","Math","min","abs","round","commitRowsAttr","next","action","count","_attachOverlay","bringToFront","_detachOverlay","readOnly","openPopover","onValueAttrChanged","onColumnsChanged","_IconClass__WEBPACK_IMPORTED_MODULE_1__","S","_ImageClass__WEBPACK_IMPORTED_MODULE_0__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"descope-filter.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/delete.svg","webpack://@descope/web-components-ui/../components/descope-anchored/src/component/AnchoredClass.js","webpack://@descope/web-components-ui/../components/descope-anchored/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-attachment/src/component/AttachmentClass.js","webpack://@descope/web-components-ui/../components/descope-attachment/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-badge/src/component/BadgeClass.js","webpack://@descope/web-components-ui/../components/descope-badge/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/operators.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/helpers.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/FilterRowClass.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/helpers.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-row/index.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-rows/FilterRowsClass.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/descope-filter-rows/index.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/FilterClass.js","webpack://@descope/web-components-ui/../components/descope-filter/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-icon/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-image/src/component/index.js"],"sourcesContent":["module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxNCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPHBhdGggZD0iTTEgMTZDMSAxNy4xIDEuOSAxOCAzIDE4SDExQzEyLjEgMTggMTMgMTcuMSAxMyAxNlY0SDFWMTZaTTMgNkgxMVYxNkgzVjZaTTEwLjUgMUw5LjUgMEg0LjVMMy41IDFIMFYzSDE0VjFIMTAuNVoiIGZpbGw9ImN1cnJlbnRjb2xvciIvPiA8L3N2Zz4=\"","import { componentNameValidationMixin } from '@descope-ui/common/components-mixins';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport {\n forwardAttrs,\n getComponentName,\n injectStyle,\n observeAttributes,\n} from '@descope-ui/common/components-helpers';\nimport { compose } from '@descope-ui/common/utils';\n\nexport const componentName = getComponentName('anchored');\n\nclass RawAnchored extends createBaseClass({\n componentName,\n baseSelector: '.anchored-root',\n}) {\n #stretchObserver = null;\n\n #directionObserver = null;\n\n #hostStretchSheet = null;\n\n // Observes the anchor's `class` attribute so runtime updates by the SDK\n // (e.g. real-time conditional components toggling `.hidden`) propagate to\n // this element. Without this, only the initial slotchange would sync.\n #anchorClassObserver = null;\n\n get #anchor() {\n return this.defaultSlot.assignedElements({ flatten: true })[0];\n }\n\n get #anchored() {\n return this.shadowRoot\n .querySelector('slot[name=\"anchored\"]')\n ?.assignedElements()[0];\n }\n\n get #outerHost() {\n return this.getRootNode().host;\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"anchored-root\" part=\"root\">\n <slot></slot>\n <div class=\"anchored-host\" part=\"anchored\">\n <slot name=\"anchored\"></slot>\n </div>\n </div>\n `;\n\n this.defaultSlot = this.shadowRoot.querySelector('slot:not([name])');\n }\n\n init() {\n super.init?.();\n\n injectStyle(\n `\n :host {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n }\n\n :host(:not([has-anchor])) {\n display: none;\n }\n\n .anchored-root {\n position: relative;\n display: flex;\n width: 100%;\n min-width: 0;\n }\n\n /* Make anchor fill the flex row and allow it to shrink. */\n ::slotted(*:not([slot])) {\n flex-grow: 1; /* fill the flex row */\n flex-shrink: 1; /* compress when constrained */\n flex-basis: auto; /* start from the anchor's natural size */\n min-width: 0; /* flex items won't shrink below content size without this */\n }\n\n /* Anchored container covers the anchor but is invisible to pointer events. */\n .anchored-host {\n position: absolute;\n inset: 0;\n pointer-events: none;\n }\n\n /* Restore interactivity for actual anchored content. */\n ::slotted([slot=\"anchored\"]) {\n pointer-events: auto;\n }\n `,\n this,\n );\n\n this.#syncStretchCSS();\n\n this.defaultSlot.addEventListener('slotchange', () => this.#syncAnchor());\n\n this.#syncAnchor();\n }\n\n // To support conditional components in flow, we need to sync the 'hidden' className to the root of the component.\n // Ideally, this would happen in the SDK, but we resolved to this patch to fix the issue without forcing users to update SDKs.\n #syncComponentState() {\n const hasHidden = this.#anchor?.classList?.contains('hidden');\n this.classList.toggle('hidden', hasHidden);\n }\n\n #syncAnchor() {\n this.#onAnchorChanged();\n\n this.#stretchObserver = this.#forwardAttr(\n this.#stretchObserver,\n this.#outerHost,\n 'stretch',\n );\n\n this.#directionObserver = this.#forwardAttr(\n this.#directionObserver,\n this.#anchored,\n 'st-host-direction',\n );\n\n this.#observeAnchorClass();\n }\n\n #observeAnchorClass() {\n this.#anchorClassObserver?.disconnect();\n if (this.#anchor) {\n this.#anchorClassObserver = observeAttributes(\n this.#anchor,\n () => this.#syncComponentState(),\n { includeAttrs: ['class'] },\n );\n }\n }\n\n // createBaseClass gates init() to first-connect (#isInit). Without\n // re-observing here, runtime `.hidden` toggles stop syncing after a\n // detach/reattach cycle.\n connectedCallback() {\n super.connectedCallback?.();\n this.#observeAnchorClass();\n this.#syncComponentState();\n }\n\n // Injects [stretch] layout rules into the containing component's shadow root (e.g. descope-attachment)\n // so it stretches when the anchor has [stretch]. Replaces the existing rules on subsequent calls.\n #syncStretchCSS() {\n const css = `\n descope-anchored {\n width: 100%; /* fill the outer host so the anchored element spans the full anchor width */\n }\n :host([stretch]) {\n display: inline-flex; /* switch from inline-block so internal children are flex items */\n width: 100%; /* fill non-flex parents */\n flex-grow: 1; /* absorb extra space in flex parents */\n flex-shrink: 0; /* hold full width — shrink:1 would let siblings squeeze it below 100% */\n flex-basis: auto; /* defer to width:100% on the main axis; avoids forcing 100% height in column-flex parents */\n min-width: 0; /* prevent overflow when the outer host is itself inside a constrained flex row */\n }\n `;\n\n if (this.#hostStretchSheet) {\n this.#hostStretchSheet.replaceSync(css);\n } else if (this.#outerHost) {\n this.#hostStretchSheet = injectStyle(css, this.#outerHost);\n }\n }\n\n // Reconnects forwarding to the current anchor. Disconnects the old observer and\n // removes the stale attr from target first — forwardAttrs only sets attrs present\n // on the source, so absent attrs won't be removed automatically.\n #forwardAttr(observer, target, attr) {\n observer?.disconnect();\n target?.removeAttribute(attr);\n if (!this.#anchor || !target) return null;\n return forwardAttrs(this.#anchor, target, { includeAttrs: [attr] });\n }\n\n // Prevent stale callbacks from firing on a detached anchor after removal.\n disconnectedCallback() {\n super.disconnectedCallback?.();\n this.#stretchObserver?.disconnect();\n this.#directionObserver?.disconnect();\n this.#anchorClassObserver?.disconnect();\n }\n\n // Track whether anything is slotted, so the host display rule can hide an\n // empty host rather than reserving its layout box.\n #onAnchorChanged() {\n this.toggleAttribute('has-anchor', !!this.#anchor);\n this.#syncComponentState();\n }\n}\n\nexport const AnchoredClass = compose(componentNameValidationMixin)(RawAnchored);\n","import { componentName, AnchoredClass } from './AnchoredClass';\n\ncustomElements.define(componentName, AnchoredClass);\n\nexport { AnchoredClass, componentName };\n","import {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n} from '@descope-ui/common/components-mixins';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport {\n getComponentName,\n injectStyle,\n observeAttributes,\n} from '@descope-ui/common/components-helpers';\nimport { compose } from '@descope-ui/common/utils';\n\nexport const componentName = getComponentName('attachment');\n\nconst ATTACHMENT_POSITIONS = [\n 'top-end',\n 'top-start',\n 'top-center',\n 'bottom-start',\n 'bottom-end',\n 'bottom-center',\n];\n\nconst DEFAULT_POSITION = ATTACHMENT_POSITIONS[0];\n\nclass RawAttachment extends createBaseClass({\n componentName,\n baseSelector: 'descope-anchored',\n}) {\n // Observes the inner descope-anchored's `class` attribute so runtime\n // updates (e.g. real-time conditional components toggling `.hidden`) keep\n // this attachment host's class in sync. Set up in connectedCallback so\n // reconnects work (createBaseClass gates init() to first connect only).\n #anchoredClassObserver = null;\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <descope-anchored>\n <slot></slot>\n <div slot=\"anchored\" class=\"attachment-container\">\n <slot name=\"attachment\"></slot>\n </div>\n </descope-anchored>\n `;\n\n this.defaultSlot = this.shadowRoot.querySelector('slot:not([name])');\n this.attachmentSlot = this.shadowRoot.querySelector(\n 'slot[name=\"attachment\"]',\n );\n\n this.anchored = this.shadowRoot.querySelector('descope-anchored');\n }\n\n get #attachment() {\n return this.attachmentSlot?.assignedElements()[0];\n }\n\n static get observedAttributes() {\n return [...(super.observedAttributes || []), 'position'];\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n super.attributeChangedCallback?.(name, oldVal, newVal);\n if (name === 'position' && oldVal !== newVal) {\n this.#handlePositionChange();\n }\n }\n\n init() {\n super.init?.();\n\n injectStyle(\n `\n :host {\n display: inline-block;\n }\n :host(.hidden) {\n display: none;\n }\n .attachment-container {\n position: absolute;\n z-index: 1;\n pointer-events: none;\n width: 100%;\n display: flex;\n align-items: center;\n container-type: inline-size;\n }\n`,\n this,\n );\n\n this.#handlePositionChange();\n\n // When descope-anchored forwards st-host-direction from the anchor to this container,\n // propagate it to the attachment elements.\n const container = this.shadowRoot.querySelector('.attachment-container');\n observeAttributes(container, () => this.#syncDirection(), {\n includeAttrs: ['st-host-direction'],\n });\n\n // Re-sync direction when new elements are slotted into the attachment slot.\n this.attachmentSlot.addEventListener('slotchange', () =>\n this.#syncDirection(),\n );\n\n this.defaultSlot.addEventListener('slotchange', () => {\n this.#setVisibility();\n window.requestAnimationFrame(() => this.#syncAvailableSizeAttr());\n });\n\n window.requestAnimationFrame(() => this.#setVisibility());\n }\n\n // To support conditional components in flow, we need to sync the 'hidden' className to the root of the component.\n // Ideally, this would happen in the SDK, but we resolved to this patch to fix the issue without forcing users to update SDKs.\n #syncComponentState() {\n const hasHidden = this.anchored?.classList?.contains('hidden');\n this.classList.toggle('hidden', hasHidden);\n }\n\n #observeAnchored() {\n this.#anchoredClassObserver?.disconnect();\n if (this.anchored) {\n this.#anchoredClassObserver = observeAttributes(\n this.anchored,\n () => this.#syncComponentState(),\n { includeAttrs: ['class'] },\n );\n }\n }\n\n // createBaseClass gates init() to first-connect, so observing here is\n // required for the detach/reattach cycle to keep working.\n connectedCallback() {\n super.connectedCallback?.();\n this.#syncComponentState();\n this.#observeAnchored();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.();\n this.#anchoredClassObserver?.disconnect();\n }\n\n #syncAvailableSizeAttr() {\n const anchor = this.defaultSlot?.assignedElements()?.[0];\n\n const anchorRect = anchor?.getBoundingClientRect();\n if (anchorRect) {\n const availableWidth = anchorRect.width;\n this.#attachment?.setAttribute(\n 'data-attachment-size',\n Number(availableWidth),\n );\n }\n }\n\n #setVisibility() {\n const hasAnchor = this.defaultSlot?.assignedElements()?.length > 0;\n this.classList.toggle('hidden', !hasAnchor);\n }\n\n #syncDirection() {\n const direction = this.shadowRoot\n .querySelector('.attachment-container')\n ?.getAttribute('st-host-direction');\n\n if (!direction) return;\n // currently we support direction sync only for web-components-ui\n // elements, which support st-host-direction attribute.\n this.#attachment?.setAttribute('st-host-direction', direction);\n }\n\n get offsetX() {\n return this.getAttribute('offset-x') || '0px';\n }\n\n get offsetY() {\n return this.getAttribute('offset-y') || '0px';\n }\n\n #handlePositionChange() {\n const pos = this.getAttribute('position');\n if (!ATTACHMENT_POSITIONS.includes(pos)) {\n this.setAttribute('position', DEFAULT_POSITION);\n }\n }\n}\n\nconst attachmentContainer = { selector: () => '.attachment-container' };\n\nexport const AttachmentClass = compose(\n createStyleMixin({\n mappings: {\n transform: { ...attachmentContainer },\n justifyContent: { ...attachmentContainer },\n maxWidth: { ...attachmentContainer },\n top: { ...attachmentContainer },\n bottom: { ...attachmentContainer },\n left: { ...attachmentContainer },\n right: { ...attachmentContainer },\n offsetX: {},\n offsetY: {},\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawAttachment);\n","import '@descope-ui/descope-anchored';\nimport { componentName, AttachmentClass } from './AttachmentClass';\n\ncustomElements.define(componentName, AttachmentClass);\n\nexport { AttachmentClass, componentName };\n","import {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n} from '@descope-ui/common/components-mixins';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport {\n getComponentName,\n injectStyle,\n} from '@descope-ui/common/components-helpers';\nimport { compose } from '@descope-ui/common/utils';\n\nexport const componentName = getComponentName('badge');\n\nclass RawBadge extends createBaseClass({\n componentName,\n baseSelector: ':host > div',\n}) {\n static get observedAttributes() {\n return ['data-attachment-size', 'shrink-to-indicator-threshold'];\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n\t\t<div>\n <slot></slot>\n\t\t</div>\n\t\t`;\n\n injectStyle(\n `\n :host {\n display: inline-flex;\n }\n :host > div {\n position: relative;\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n `,\n this,\n );\n }\n\n get shrinkToIndicatorThreshold() {\n return this.getAttribute('shrink-to-indicator-threshold') || 65;\n }\n\n #handleShrinkToIndicator(value) {\n this.toggleAttribute(\n 'shrink-to-indicator',\n parseFloat(value) < this.shrinkToIndicatorThreshold,\n );\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n super.attributeChangedCallback?.(name, oldVal, newVal);\n if (name === 'data-attachment-size' && oldVal !== newVal) {\n this.#handleShrinkToIndicator(newVal);\n }\n }\n}\n\nexport const BadgeClass = compose(\n createStyleMixin({\n mappings: {\n hostWidth: [{ selector: () => ':host', property: 'width' }],\n hostHeight: [{ selector: () => ':host', property: 'height' }],\n hostDirection: { property: 'direction' },\n\n fontFamily: {},\n fontSize: {},\n fontWeight: {},\n lineHeight: {},\n textTransform: {},\n verticalPadding: [\n { property: 'padding-top' },\n { property: 'padding-bottom' },\n ],\n horizontalPadding: [\n { property: 'padding-left' },\n { property: 'padding-right' },\n ],\n\n borderWidth: {},\n borderStyle: {},\n borderColor: {},\n borderRadius: {},\n\n backgroundColor: {},\n\n textColor: { property: 'color' },\n textAlign: {},\n boxShadow: {},\n textIndent: {},\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawBadge);\n","import { componentName, BadgeClass } from './BadgeClass';\n\ncustomElements.define(componentName, BadgeClass);\n\nexport { BadgeClass, componentName };\n","// Global per-operator metadata: default English label + noValue flag.\n// One source of truth; OPERATORS below is just id lists per inputType.\n// The component is agnostic to query semantics: `prefix`/`suffix` (SQL-LIKE\n// wildcards) are NOT defaulted here — they're BE-specific and supplied by the\n// consumer via the operators object shape. When present, they're forwarded\n// verbatim on the apply payload.\nexport const OPERATOR_META = {\n equal: { label: 'Equal' },\n 'not-equal': { label: 'Not Equal' },\n contains: { label: 'Contains' },\n 'not-contains': { label: 'Excludes' },\n 'starts-with': { label: 'Starts with' },\n 'ends-with': { label: 'Ends with' },\n gt: { label: 'Greater Than' },\n lt: { label: 'Less Than' },\n gte: { label: 'Not Less Than' },\n lte: { label: 'Not Greater Than' },\n 'is-any-of': { label: 'Is any of' },\n 'not-any-of': { label: 'Not any of' },\n 'is-empty': { label: 'Is empty', noValue: true },\n 'is-not-empty': { label: 'Is not empty', noValue: true },\n};\n\n// The `data-operator-label-<id>` i18n-override attributes, one per built-in\n// operator. Used as the forwardAttrs allowlist (filter → rows → row) and the\n// filter-row observed set — custom operator ids carry their label in the\n// operators catalog instead.\nexport const OPERATOR_LABEL_ATTRS = Object.keys(OPERATOR_META).map(\n (id) => `data-operator-label-${id}`,\n);\n\n// Per inputType: ordered list of operator ids. Resolve meta via OPERATOR_META at runtime.\nexport const OPERATORS = {\n text: [\n 'contains',\n 'not-contains',\n 'equal',\n 'not-equal',\n 'starts-with',\n 'ends-with',\n 'is-empty',\n 'is-not-empty',\n ],\n number: [\n 'equal',\n 'not-equal',\n 'gt',\n 'lte',\n 'lt',\n 'gte',\n 'is-empty',\n 'is-not-empty',\n ],\n email: [\n 'equal',\n 'not-equal',\n 'contains',\n 'not-contains',\n 'is-empty',\n 'is-not-empty',\n ],\n boolean: ['equal', 'not-equal', 'is-empty', 'is-not-empty'],\n singleselect: ['equal', 'not-equal', 'is-empty', 'is-not-empty'],\n multiselect: ['is-any-of', 'not-any-of', 'is-empty', 'is-not-empty'],\n};\n\nconst resolve = (id, meta) => ({ id, ...(meta[id] || {}) });\n\n// `custom` accepts two shapes:\n// - string[] → allowlist of operator ids; uses meta labels.\n// - {id,label?,noValue?}[] → full custom set (overrides any fields).\n//\n// `catalog` optionally overrides the OPERATORS map (keyed by inputType → id[]).\n// `meta` optionally overrides OPERATOR_META (per id → {label, noValue}).\nexport const getOperatorsForInputType = (\n inputType,\n custom,\n catalog,\n meta = OPERATOR_META,\n) => {\n const baseMap = catalog || OPERATORS;\n const baseIds = baseMap[inputType] || [];\n const baseOps = baseIds.map((id) => resolve(id, meta));\n\n if (!Array.isArray(custom) || custom.length === 0) return baseOps;\n\n // Pure string[] → allowlist filter over the base set (preserves base order).\n if (custom.every((c) => typeof c === 'string')) {\n return baseOps.filter((op) => custom.includes(op.id));\n }\n\n // Any object entry → treat the array as the explicit ordered operator set.\n // Entries may be mixed: a bare string id, or an object overriding fields\n // (label/prefix/suffix/noValue). Each falls back to the built-in meta.\n return custom.map((c) => {\n const id = typeof c === 'string' ? c : c.id;\n const override = typeof c === 'string' ? {} : c;\n const fallback = baseOps.find((op) => op.id === id) || resolve(id, meta);\n return { ...fallback, ...override };\n });\n};\n\nconst isNoValueOp = (operatorId) => !!OPERATOR_META[operatorId]?.noValue;\n\n// A row represents an actual filtering condition only when:\n// - column + operator are set, AND\n// - operator is noValue, OR value is non-empty (string non-empty / array non-empty)\n// `row.noValue` is the resolved flag from #assembleRowValue (works for custom\n// operator ids); falls back to the built-in OPERATOR_META lookup.\nexport const isValidRow = (row) => {\n if (!row || !row.column || !row.operator) return false;\n if (row.noValue || isNoValueOp(row.operator)) return true;\n const { value } = row;\n if (value === null || value === undefined) return false;\n if (Array.isArray(value)) return value.length > 0;\n return String(value).length > 0;\n};\n","// Mirror nodes assigned to `host`'s named slot into `dest` (in another light\n// DOM). Existing clones tagged with `data-slot-copy=<slotName>` are removed\n// first so the call is idempotent and safe to invoke on every slotchange.\nconst cloneNamedSlotInto = (host, dest, slotName) => {\n Array.from(\n dest.querySelectorAll(`:scope > [data-slot-copy=\"${slotName}\"]`),\n ).forEach((el) => el.remove());\n\n Array.from(host.children)\n .filter((el) => el.getAttribute?.('slot') === slotName)\n .forEach((node) => {\n const clone = node.cloneNode(true);\n // `slot` is already copied from the source; add only our cleanup marker.\n clone.setAttribute('data-slot-copy', slotName);\n dest.appendChild(clone);\n });\n};\n\n// Clone every named slot's assigned nodes from `host` into `dest`.\nexport const cloneNamedSlotsInto = (host, dest, slotNames) => {\n slotNames.forEach((s) => cloneNamedSlotInto(host, dest, s));\n};\n\n// Parse a `value` payload (array, JSON string, or anything) into a well-shaped\n// rows array. Each row must be an object with `column` and `operator` strings;\n// malformed entries are dropped. Returns [] on parse failure.\nexport const parseRowsArray = (input) => {\n let raw = input;\n if (typeof raw === 'string') {\n try {\n raw = JSON.parse(raw);\n } catch {\n return [];\n }\n }\n if (!Array.isArray(raw)) return [];\n return raw.filter(\n (row) =>\n row &&\n typeof row === 'object' &&\n typeof row.column === 'string' &&\n typeof row.operator === 'string',\n );\n};\n\n// Parse a JSON-encoded attribute value. Returns `null` on missing/invalid.\nexport const parseJsonAttr = (ele, name) => {\n const raw = ele.getAttribute(name);\n if (!raw) return null;\n try {\n return JSON.parse(raw);\n } catch {\n return null;\n }\n};\n","import {\n createStyleMixin,\n componentNameValidationMixin,\n} from '@descope-ui/common/components-mixins';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n getComponentName,\n injectStyle,\n forwardAttrs,\n} from '@descope-ui/common/components-helpers';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport { ButtonClass } from '@descope-ui/descope-button/class';\nimport { ComboBoxClass } from '@descope-ui/descope-combo-box/class';\nimport { MultiSelectComboBoxClass } from '@descope-ui/descope-multi-select-combo-box/class';\nimport { TextFieldClass } from '@descope-ui/descope-text-field/class';\nimport {\n OPERATORS,\n OPERATOR_META,\n OPERATOR_LABEL_ATTRS,\n getOperatorsForInputType,\n isValidRow,\n} from './operators';\nimport { debounce } from './helpers';\nimport { parseJsonAttr } from '../helpers';\nimport deleteIconSrc from './delete.svg';\n\nexport const componentName = getComponentName('filter-row');\n\nconst TEXT_INPUT_TYPES = ['text', 'number', 'email'];\nconst COMBO_INPUT_TYPES = ['boolean', 'singleselect'];\n\n// No column picked yet (falsy type) renders the text input.\nconst isTextLike = (t) => !t || TEXT_INPUT_TYPES.includes(t);\nconst isComboLike = (t) => COMBO_INPUT_TYPES.includes(t);\nconst isMultiLike = (t) => t === 'multiselect';\n\n// vaadin-combo-box renders its items a macrotask after `data` is set; await one\n// before assigning `.value` so it resolves against the rendered list.\nconst whenComboReady = () => new Promise((r) => setTimeout(r));\n\nconst TEXT_DEBOUNCE_MS = 350;\n\nconst FilterRowMixin = (superclass) =>\n class FilterRowMixinClass extends superclass {\n #columns = [];\n\n #rowId = null;\n\n // Suppresses input listeners during our own writes so they don't re-enter.\n #updating = false;\n\n #colSelect;\n\n #opSelect;\n\n #textValue;\n\n #comboValue;\n\n #multiValue;\n\n #deleteBtn;\n\n #lastInputType = null;\n\n #debouncedChange = debounce(() => this.#dispatchChange(), TEXT_DEBOUNCE_MS);\n\n static get observedAttributes() {\n return [\n ...(superclass.observedAttributes || []),\n 'data',\n 'value',\n 'disable-delete',\n 'label-type',\n 'operators-catalog',\n 'data-value-label-true',\n 'data-value-label-false',\n ...OPERATOR_LABEL_ATTRS,\n ];\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"row\">\n <descope-combo-box class=\"col-select\" placeholder=\"Column\" bordered=\"true\" item-label-path=\"data-name\" item-value-path=\"data-id\"></descope-combo-box>\n <descope-combo-box class=\"op-select\" placeholder=\"Operator\" bordered=\"true\" item-label-path=\"data-name\" item-value-path=\"data-id\"></descope-combo-box>\n <div class=\"value-wrapper\">\n <descope-text-field class=\"text-value\" placeholder=\"Value\" bordered=\"true\"></descope-text-field>\n <descope-combo-box class=\"combo-value hidden\" placeholder=\"Value\" bordered=\"true\" item-label-path=\"data-name\" item-value-path=\"data-id\"></descope-combo-box>\n <descope-multi-select-combo-box class=\"multi-value hidden\" placeholder=\"Value\" bordered=\"true\" item-label-path=\"data-name\" item-value-path=\"data-id\"></descope-multi-select-combo-box>\n </div>\n <descope-button class=\"delete-btn\" variant=\"link\" mode=\"primary\" size=\"md\" square=\"true\">\n <slot name=\"delete-row-icon\">\n <descope-icon src=\"${deleteIconSrc}\" src-dark=\"${deleteIconSrc}\"></descope-icon>\n </slot>\n </descope-button>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: block;\n }\n .row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) auto;\n align-items: center;\n }\n .col-select,\n .op-select,\n .value-wrapper {\n min-width: 0;\n overflow: hidden;\n }\n /* Let value inputs shrink to the cell instead of growing to fit their\n content (e.g. the multi-select's chip area). */\n .text-value,\n .combo-value,\n .multi-value {\n min-width: 0;\n }\n .hidden {\n display: none;\n }\n .value-wrapper.no-value {\n visibility: hidden;\n }\n `,\n this,\n );\n\n this.#colSelect = this.shadowRoot.querySelector('.col-select');\n this.#opSelect = this.shadowRoot.querySelector('.op-select');\n this.#textValue = this.shadowRoot.querySelector('.text-value');\n this.#comboValue = this.shadowRoot.querySelector('.combo-value');\n this.#multiValue = this.shadowRoot.querySelector('.multi-value');\n this.#deleteBtn = this.shadowRoot.querySelector('.delete-btn');\n }\n\n init() {\n super.init?.();\n\n this.#setupUserEventListeners();\n this.#deleteBtn.addEventListener('click', () => this.#dispatch('delete'));\n this.#setupAttrForwarding();\n }\n\n #setupAttrForwarding() {\n const inputs = [\n this.#colSelect,\n this.#opSelect,\n this.#textValue,\n this.#comboValue,\n this.#multiValue,\n ];\n\n [...inputs, this.#deleteBtn].forEach((t) =>\n forwardAttrs(this, t, { includeAttrs: ['size', 'disabled'] }),\n );\n\n this.#setupPlaceholderForwarding();\n\n inputs.forEach((t) =>\n forwardAttrs(this, t, { includeAttrs: ['label-type'] }),\n );\n }\n\n #setupPlaceholderForwarding() {\n const asPlaceholder = (attr) => ({\n includeAttrs: [attr],\n mapAttrs: { [attr]: 'placeholder' },\n });\n forwardAttrs(\n this,\n this.#colSelect,\n asPlaceholder('data-column-placeholder'),\n );\n forwardAttrs(\n this,\n this.#opSelect,\n asPlaceholder('data-operator-placeholder'),\n );\n [this.#textValue, this.#comboValue, this.#multiValue].forEach((t) =>\n forwardAttrs(this, t, asPlaceholder('data-value-placeholder')),\n );\n }\n\n // Sets `input.value` without triggering our input handlers. Restores the\n // prior flag so callers can hold it across an async block (see #syncFromRow).\n #setSilent(input, value) {\n const prev = this.#updating;\n this.#updating = true;\n input.value = value;\n this.#updating = prev;\n }\n\n // One delegated `input` listener for the whole row. Skip our own writes\n // (#setSilent / #syncFromRow set #updating) — vaadin fires input events for\n // those too, and reacting would re-enter and clobber state.\n #setupUserEventListeners() {\n this.shadowRoot.querySelector('.row').addEventListener('input', (e) => {\n if (this.#updating) return;\n if (e.target === this.#colSelect) this.#onColumnChange();\n else if (e.target === this.#opSelect) this.#onOperatorChange();\n // value input: debounce text typing, emit selects immediately.\n else if (this.#isTextValueActive()) this.#debouncedChange();\n else this.#dispatchChange();\n });\n }\n\n #isTextValueActive() {\n return !this.#textValue.classList.contains('hidden');\n }\n\n #getColDef(columnId) {\n return this.#columns.find((c) => c.id === columnId);\n }\n\n get trueLabel() {\n return this.getAttribute('data-value-label-true') || 'True';\n }\n\n get falseLabel() {\n return this.getAttribute('data-value-label-false') || 'False';\n }\n\n #booleanOptions() {\n return [\n { value: 'true', label: this.trueLabel },\n { value: 'false', label: this.falseLabel },\n ];\n }\n\n // Resolve order: per-column allowlist -> operators-catalog -> built-in\n // defaults, then layer per-operator `data-operator-label-<id>` overrides.\n #getOperators(colDef) {\n if (!colDef) return [];\n const ops = getOperatorsForInputType(\n colDef.inputType,\n colDef.operators,\n parseJsonAttr(this, 'operators-catalog'),\n );\n return ops.map((op) => {\n const label = this.getAttribute(`data-operator-label-${op.id}`);\n return label ? { ...op, label } : op;\n });\n }\n\n #onColumnChange() {\n const colDef = this.#getColDef(this.#colSelect.value);\n if (!colDef) return;\n\n this.#debouncedChange.cancel(); // stale text change from the old column\n\n const operators = this.#getOperators(colDef);\n this.#opSelect.data = operators.map((op) => ({\n value: op.id,\n label: op.label,\n }));\n\n // Keep the operator if the new column still offers it, else use its first.\n const nextOp =\n operators.find((op) => op.id === this.#opSelect.value) || operators[0];\n if (nextOp) this.#setSilent(this.#opSelect, nextOp.id);\n\n // Keep the value only when the input type is unchanged; a different type\n // can't render the old value.\n const prevInputType = this.#lastInputType;\n const nextInputType = colDef.inputType;\n const typeChanged = prevInputType !== nextInputType;\n this.#lastInputType = nextInputType;\n\n this.#updateValueInput(colDef, nextOp, { resetValue: typeChanged });\n this.#dispatchChange();\n }\n\n #onOperatorChange() {\n const colDef = this.#getColDef(this.#colSelect.value);\n const operator = this.#getOperators(colDef).find(\n (op) => op.id === this.#opSelect.value,\n );\n this.#updateValueInput(colDef, operator);\n this.#dispatchChange();\n }\n\n #updateValueInput(colDef, operator, opts = {}) {\n const inputType = colDef?.inputType;\n const reset = opts.resetValue ?? false;\n\n this.shadowRoot\n .querySelector('.value-wrapper')\n .classList.toggle('no-value', !!operator?.noValue);\n this.#showActiveValueInput(inputType);\n\n if (isTextLike(inputType)) {\n this.#configureTextValue(inputType, reset);\n } else if (isComboLike(inputType)) {\n this.#configureComboValue(colDef, reset);\n } else if (isMultiLike(inputType)) {\n this.#configureMultiValue(colDef, reset);\n }\n }\n\n #showActiveValueInput(inputType) {\n this.#textValue.classList.toggle('hidden', !isTextLike(inputType));\n this.#comboValue.classList.toggle('hidden', !isComboLike(inputType));\n this.#multiValue.classList.toggle('hidden', !isMultiLike(inputType));\n }\n\n #configureTextValue(inputType, reset) {\n if (inputType === 'number')\n this.#textValue.setAttribute('type', 'number');\n else if (inputType === 'email')\n this.#textValue.setAttribute('type', 'email');\n else this.#textValue.removeAttribute('type');\n if (reset) this.#setSilent(this.#textValue, '');\n }\n\n #configureComboValue(colDef, reset) {\n const options =\n colDef.inputType === 'boolean'\n ? this.#booleanOptions()\n : colDef.options || [];\n this.#comboValue.data = options.map((o) => ({\n value: o.value,\n label: o.label,\n }));\n if (reset) this.#setSilent(this.#comboValue, '');\n }\n\n #configureMultiValue(colDef, reset) {\n this.#multiValue.data = (colDef.options || []).map((o) => ({\n value: o.value,\n label: o.label,\n }));\n if (reset) this.#setSilent(this.#multiValue, []);\n }\n\n #activeInputForType(inputType) {\n if (isMultiLike(inputType)) return this.#multiValue;\n if (isComboLike(inputType)) return this.#comboValue;\n if (isTextLike(inputType)) return this.#textValue;\n return null;\n }\n\n #readActiveInputValue(colDef) {\n const input = this.#activeInputForType(colDef.inputType);\n if (!input) return null;\n return input.value ?? (isMultiLike(colDef.inputType) ? [] : '');\n }\n\n #assembleRowValue() {\n const columnId = this.#colSelect?.value || '';\n const operatorId = this.#opSelect?.value || '';\n const colDef = this.#getColDef(columnId);\n const operator = this.#getOperators(colDef).find(\n (op) => op.id === operatorId,\n );\n const noValue = !!operator?.noValue;\n const value =\n operator && !noValue && colDef\n ? this.#readActiveInputValue(colDef)\n : null;\n // `noValue` is internal (kept so isValidRow accepts no-value custom\n // operators); FilterRowsClass strips it from the public payload.\n return {\n id: this.#rowId,\n column: columnId,\n operator: operatorId,\n value,\n noValue,\n };\n }\n\n #dispatch(name, detail) {\n this.dispatchEvent(\n new CustomEvent(name, { bubbles: true, composed: true, detail }),\n );\n }\n\n #dispatchChange() {\n this.#dispatch('change', { value: this.#assembleRowValue() });\n }\n\n // Holds #updating across the whole async sync so vaadin's late input events\n // stay guarded — per-call #setSilent clears too early.\n async #syncFromRow(row) {\n this.#rowId = row.id ?? null;\n if (!row.column) return;\n this.#updating = true;\n try {\n const colDef = this.#getColDef(row.column);\n if (!colDef) return;\n\n await whenComboReady();\n this.#colSelect.value = row.column;\n\n const operators = this.#getOperators(colDef);\n this.#opSelect.data = operators.map((op) => ({\n value: op.id,\n label: op.label,\n }));\n\n if (row.operator) {\n await whenComboReady();\n this.#opSelect.value = row.operator;\n const operator = operators.find((op) => op.id === row.operator);\n this.#updateValueInput(colDef, operator);\n }\n\n if (row.value !== null && row.value !== undefined) {\n await whenComboReady();\n this.#applyRowValueToWidget(colDef, row.value);\n }\n } finally {\n this.#updating = false;\n }\n }\n\n #applyRowValueToWidget(colDef, value) {\n const t = colDef.inputType;\n const input = this.#activeInputForType(t);\n if (!input) return;\n if (isMultiLike(t))\n this.#setSilent(input, Array.isArray(value) ? value : []);\n else if (isComboLike(t)) this.#setSilent(input, String(value));\n else this.#setSilent(input, value ?? '');\n }\n\n #syncFloatingLabel(labelType) {\n const floating = labelType === 'floating';\n [\n this.#colSelect,\n this.#opSelect,\n this.#textValue,\n this.#comboValue,\n this.#multiValue,\n ].forEach((el) => {\n if (!el) return;\n if (floating) {\n const placeholder = el.getAttribute('placeholder');\n if (placeholder) el.setAttribute('label', placeholder);\n } else {\n el.removeAttribute('label');\n }\n });\n }\n\n get value() {\n return JSON.stringify(this.#assembleRowValue());\n }\n\n set value(row) {\n this.setAttribute(\n 'value',\n typeof row === 'string' ? row : JSON.stringify(row),\n );\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n if (oldValue === newValue) return;\n\n if (attrName === 'data') this.#onDataChanged(newValue);\n if (attrName === 'value') this.#onValueChanged(newValue);\n if (attrName === 'label-type') this.#syncFloatingLabel(newValue);\n if (attrName === 'disable-delete') this.#onDisableDeleteChanged(newValue);\n if (\n attrName === 'operators-catalog' ||\n attrName.startsWith('data-operator-label-')\n ) {\n this.#refreshOperatorsCombo();\n }\n if (\n attrName === 'data-value-label-true' ||\n attrName === 'data-value-label-false'\n ) {\n this.#refreshBooleanValueCombo();\n }\n }\n\n #onDataChanged(newValue) {\n if (!newValue) return;\n try {\n this.#columns = JSON.parse(newValue);\n this.#colSelect.data = this.#columns.map((col) => ({\n value: col.id,\n label: col.label,\n }));\n } catch {\n // ignore invalid JSON\n }\n }\n\n #onValueChanged(newValue) {\n if (!newValue) return;\n try {\n this.#syncFromRow(JSON.parse(newValue));\n } catch {\n // ignore invalid JSON\n }\n }\n\n #onDisableDeleteChanged(newValue) {\n const off = newValue !== null && newValue !== 'false';\n if (off) this.#deleteBtn.setAttribute('disabled', 'true');\n else this.#deleteBtn.removeAttribute('disabled');\n }\n\n #refreshBooleanValueCombo() {\n const colDef = this.#getColDef(this.#colSelect?.value);\n if (!colDef || colDef.inputType !== 'boolean' || !this.#comboValue)\n return;\n this.#comboValue.data = this.#booleanOptions();\n }\n\n #refreshOperatorsCombo() {\n const colDef = this.#getColDef(this.#colSelect?.value);\n if (!colDef || !this.#opSelect) return;\n const ops = this.#getOperators(colDef);\n this.#opSelect.data = ops.map((op) => ({\n value: op.id,\n label: op.label,\n }));\n }\n };\n\nconst { host } = {\n host: { selector: () => ':host' },\n};\n\nexport const FilterRowClass = compose(\n createStyleMixin({\n mappings: {\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { selector: () => ':host', property: 'min-width' },\n hostDirection: [\n { ...host, property: 'direction' },\n {\n selector: () => ButtonClass.componentName,\n property: ButtonClass.cssVarList.hostDirection,\n },\n {\n selector: () => ComboBoxClass.componentName,\n property: ComboBoxClass.cssVarList.hostDirection,\n },\n {\n selector: () => MultiSelectComboBoxClass.componentName,\n property: MultiSelectComboBoxClass.cssVarList.hostDirection,\n },\n ],\n rowGap: { selector: () => '.row', property: 'gap' },\n inputWidth: [\n {\n selector: () => ComboBoxClass.componentName,\n property: ComboBoxClass.cssVarList.hostWidth,\n },\n {\n selector: () => TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.hostWidth,\n },\n {\n selector: () => MultiSelectComboBoxClass.componentName,\n property: MultiSelectComboBoxClass.cssVarList.hostWidth,\n },\n ],\n deleteDisabledIconColor: {\n selector: () =>\n `${ButtonClass.componentName}.delete-btn[disabled=\"true\"]`,\n property: ButtonClass.cssVarList.iconColor,\n },\n },\n }),\n componentNameValidationMixin,\n FilterRowMixin,\n)(createBaseClass({ componentName, baseSelector: '.row' }));\n\nexport {\n OPERATORS,\n OPERATOR_META,\n OPERATOR_LABEL_ATTRS,\n isValidRow,\n getOperatorsForInputType,\n};\n","// Trailing debounce with a cancel(). Deliberately NOT common's `asyncDebounce`:\n// that one is built for async functions — it awaits the returned promise and\n// shares the last call's resolved value across pending callers — and exposes\n// no cancel(). Here the target is a sync, fire-and-forget dispatch that we must\n// be able to cancel mid-flight (a column change drops a stale text edit).\nexport const debounce = (fn, ms) => {\n let t;\n const wrapped = (...args) => {\n clearTimeout(t);\n t = setTimeout(() => fn(...args), ms);\n };\n wrapped.cancel = () => clearTimeout(t);\n return wrapped;\n};\n","import '@descope-ui/descope-text-field';\nimport '@descope-ui/descope-combo-box';\nimport '@descope-ui/descope-multi-select-combo-box';\nimport '@descope-ui/descope-button';\nimport '@descope-ui/descope-icon';\n\nimport { componentName, FilterRowClass } from './FilterRowClass';\n\ncustomElements.define(componentName, FilterRowClass);\n\nexport { FilterRowClass, componentName };\nexport { OPERATORS, getOperatorsForInputType, isValidRow } from './operators';\n","import {\n createStyleMixin,\n componentNameValidationMixin,\n} from '@descope-ui/common/components-mixins';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n getComponentName,\n injectStyle,\n observeChildren,\n forwardAttrs,\n} from '@descope-ui/common/components-helpers';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport { ButtonClass } from '@descope-ui/descope-button/class';\nimport {\n FilterRowClass,\n isValidRow,\n getOperatorsForInputType,\n OPERATOR_LABEL_ATTRS,\n componentName as FILTER_ROW_TAG,\n} from '../descope-filter-row/FilterRowClass.js';\nimport { parseJsonAttr } from '../helpers';\n\nexport const componentName = getComponentName('filter-rows');\n\nconst FilterRowsMixin = (superclass) =>\n class FilterRowsMixinClass extends superclass {\n #rows = [];\n\n #rowIdSeq = 0;\n\n #newRowId() {\n this.#rowIdSeq += 1;\n return `row-${this.#rowIdSeq}`;\n }\n\n #emptyRow() {\n return { id: this.#newRowId(), column: '', operator: '', value: null };\n }\n\n // A row is empty when nothing has been entered yet (pristine). Populated\n // rows — partial or complete, valid or not — count as non-empty.\n #isEmptyRow(row) {\n const v = row.value;\n const hasValue =\n v != null && v !== '' && !(Array.isArray(v) && v.length === 0);\n return !row.column && !row.operator && !hasValue;\n }\n\n #resolvedColumns = [];\n\n #rowsList;\n\n #addRowBtn;\n\n #addRowLabel;\n\n #clearAllBtn;\n\n static get observedAttributes() {\n return [\n ...(superclass.observedAttributes || []),\n 'data',\n 'value',\n 'clear-all-button-label',\n 'add-button-label',\n 'max-rows',\n ];\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"container\">\n <div class=\"rows-list\"></div>\n <div class=\"actions\">\n <descope-button class=\"add-row\" variant=\"link\" mode=\"primary\">\n <slot name=\"add-row-icon\" slot=\"prefix\"></slot>\n <span class=\"add-button-label\">Add filter</span>\n </descope-button>\n <descope-button class=\"clear-all\" variant=\"link\" mode=\"error\">Clear all</descope-button>\n </div>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: block;\n box-sizing: border-box;\n }\n .container {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n .rows-list {\n display: flex;\n flex-direction: column;\n overflow: hidden auto;\n }\n .rows-list:empty {\n display: none;\n }\n .actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n .add-row {\n margin-inline-end: auto;\n }\n .hidden {\n display: none;\n }\n ::slotted([slot=\"add-row-icon\"]) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n `,\n this,\n );\n\n this.#rowsList = this.shadowRoot.querySelector('.rows-list');\n this.#addRowBtn = this.shadowRoot.querySelector('.add-row');\n this.#addRowLabel = this.shadowRoot.querySelector('.add-button-label');\n this.#clearAllBtn = this.shadowRoot.querySelector('.clear-all');\n }\n\n init() {\n super.init?.();\n\n observeChildren(this, this.#syncDeleteIconsIntoRows.bind(this));\n\n this.#addRowBtn.addEventListener('click', this.#onAddRow.bind(this));\n this.#clearAllBtn.addEventListener('click', this.#onClearAll.bind(this));\n\n this.#rowsList.addEventListener('change', this.#onRowChange.bind(this));\n this.#rowsList.addEventListener('delete', this.#onRowDelete.bind(this));\n\n [this.#addRowBtn, this.#clearAllBtn].forEach((b) =>\n forwardAttrs(this, b, { includeAttrs: ['size'] }),\n );\n\n this.#resolveColumns();\n this.#syncDeleteIconsIntoRows();\n\n // Never start with 0 rows.\n this.#ensureAtLeastOneRow();\n this.#renderRows();\n\n // The Clear all button (descope-button) runs its own attr sync in a\n // deferred init(), which can race and drop the `disabled` we set during\n // the first render. Re-assert once it's up. (Per-row delete isn't\n // affected — the row applies it in its own attributeChangedCallback.)\n setTimeout(() => this.#updateActionsState());\n }\n\n #resolveColumns() {\n const data = parseJsonAttr(this, 'data');\n this.#resolvedColumns = Array.isArray(data) ? data : [];\n }\n\n // Re-clone delete-row-icon into every row. Idempotent: clears prior clones first.\n #syncDeleteIconsIntoRows() {\n this.#rowsList.querySelectorAll(FILTER_ROW_TAG).forEach((row) => {\n row\n .querySelectorAll(':scope > [slot=\"delete-row-icon\"]')\n .forEach((c) => c.remove());\n this.#cloneDeleteIconsInto(row);\n });\n }\n\n // Remove DOM rows whose id is no longer in #rows (e.g. after delete).\n #pruneRemovedRows() {\n const keepIds = new Set(this.#rows.map((r) => r.id));\n this.#rowsList.querySelectorAll(FILTER_ROW_TAG).forEach((el) => {\n if (!keepIds.has(el.dataset.rowId)) el.remove();\n });\n }\n\n #findRowEl(rowId) {\n return this.#rowsList.querySelector(\n `${FILTER_ROW_TAG}[data-row-id=\"${rowId}\"]`,\n );\n }\n\n #renderRows() {\n this.#pruneRemovedRows();\n this.#rows.forEach((row) => {\n const el = this.#findRowEl(row.id) || this.#createRowEl(row.id);\n el.setAttribute('value', JSON.stringify(row));\n });\n this.#updateActionsState();\n this.#updateAddRowVisibility();\n }\n\n #createRowEl(rowId) {\n const el = document.createElement(FILTER_ROW_TAG);\n el.dataset.rowId = rowId;\n this.#rowsList.appendChild(el);\n forwardAttrs(this, el, {\n includeAttrs: [\n 'data',\n 'size',\n 'label-type',\n 'operators-catalog',\n 'data-value-label-true',\n 'data-value-label-false',\n 'data-column-placeholder',\n 'data-operator-placeholder',\n 'data-value-placeholder',\n ...OPERATOR_LABEL_ATTRS,\n ],\n });\n this.#cloneDeleteIconsInto(el);\n return el;\n }\n\n #cloneDeleteIconsInto(rowEl) {\n Array.from(this.children)\n .filter((c) => c.getAttribute?.('slot') === 'delete-row-icon')\n .forEach((src) => {\n const clone = src.cloneNode(true);\n clone.setAttribute('slot', 'delete-row-icon');\n rowEl.appendChild(clone);\n });\n }\n\n // A lone, still-empty row has nothing to act on, so both per-row delete and\n // Clear all are disabled. A populated sole row keeps delete enabled;\n // deleting it clears it back to empty (see #onRowDelete + #ensureAtLeastOneRow).\n #updateActionsState() {\n const soleEmpty =\n this.#rows.length === 1 && this.#isEmptyRow(this.#rows[0]);\n this.#rowsList.querySelectorAll(FILTER_ROW_TAG).forEach((row) => {\n if (soleEmpty) row.setAttribute('disable-delete', '');\n else row.removeAttribute('disable-delete');\n });\n if (soleEmpty) this.#clearAllBtn.setAttribute('disabled', 'true');\n else this.#clearAllBtn.removeAttribute('disabled');\n }\n\n #ensureAtLeastOneRow() {\n if (this.#rows.length === 0) {\n this.#rows = [this.#emptyRow()];\n }\n }\n\n #updateAddRowVisibility() {\n const maxRows = parseInt(this.getAttribute('max-rows'), 10);\n const limitReached =\n !Number.isNaN(maxRows) && this.#rows.length >= maxRows;\n this.#addRowBtn.classList.toggle('hidden', limitReached);\n }\n\n #onAddRow() {\n this.#rows = [...this.#rows, this.#emptyRow()];\n this.#renderRows();\n this.#dispatchChange();\n }\n\n #onClearAll() {\n this.#rows = [this.#emptyRow()];\n this.#renderRows();\n // `clear` is the commit signal for Clear all — the host commits an empty\n // filter from it. No separate `change` (that would double-commit).\n this.#dispatch('clear');\n }\n\n #onRowChange(e) {\n const rowEl = e.target.closest(FILTER_ROW_TAG);\n if (!rowEl) return;\n // Stop the per-row `change` here — the host listens for THIS component's\n // aggregate `change` (below), not the individual row's single-row detail.\n e.stopPropagation();\n const id = rowEl.dataset.rowId;\n this.#rows = this.#rows.map((r) => (r.id === id ? e.detail.value : r));\n // A sole row may have just become populated (or empty again); recompute\n // so its delete button enables/disables live, without a re-render.\n this.#updateActionsState();\n this.#dispatchChange();\n }\n\n #onRowDelete(e) {\n const rowEl = e.target.closest(FILTER_ROW_TAG);\n if (!rowEl) return;\n const id = rowEl.dataset.rowId;\n this.#rows = this.#rows.filter((r) => r.id !== id);\n this.#ensureAtLeastOneRow();\n this.#renderRows();\n this.#dispatchChange();\n }\n\n #dispatch(name, detail) {\n this.dispatchEvent(\n new CustomEvent(name, { bubbles: true, composed: true, detail }),\n );\n }\n\n // Resolve a row's operator def from the catalog (per-column allowlist ->\n // operators-catalog -> built-ins). Used to recover metadata not carried on\n // the row itself (prefix/suffix, noValue).\n #resolveOperator({ column, operator }) {\n const colDef = this.#resolvedColumns.find((c) => c.id === column);\n if (!colDef) return null;\n return (\n getOperatorsForInputType(\n colDef.inputType,\n colDef.operators,\n parseJsonAttr(this, 'operators-catalog'),\n ).find((o) => o.id === operator) || null\n );\n }\n\n // The operator's configured prefix/suffix (query affixes like SQL `%`).\n #operatorWildcards(row) {\n const op = this.#resolveOperator(row);\n if (!op) return {};\n return {\n ...(op.prefix != null && { prefix: op.prefix }),\n ...(op.suffix != null && { suffix: op.suffix }),\n };\n }\n\n // Commit signal, fired on every row mutation. `value` = valid rows only\n // (public contract: badge + query); `rows` = full draft incl. partial rows\n // so the host retains in-progress work. Row id is stripped from both.\n #dispatchChange() {\n const toPublicRow = (row) => ({\n column: row.column,\n operator: row.operator,\n value: row.value,\n ...this.#operatorWildcards(row),\n });\n const value = this.#rows.filter(isValidRow).map(toPublicRow);\n const rows = this.#rows.map((row) => ({\n ...toPublicRow(row),\n ...(row.noValue != null && { noValue: row.noValue }),\n }));\n this.#dispatch('change', { value, rows });\n }\n\n get value() {\n return JSON.stringify(this.#rows);\n }\n\n set value(rows) {\n this.setAttribute(\n 'value',\n typeof rows === 'string' ? rows : JSON.stringify(rows),\n );\n }\n\n get addButtonLabel() {\n return this.getAttribute('add-button-label') || 'Add filter';\n }\n\n get clearAllButtonLabel() {\n return this.getAttribute('clear-all-button-label') || 'Clear all';\n }\n\n #updateAddRowLabel() {\n this.#addRowLabel.textContent = this.addButtonLabel;\n }\n\n #updateClearAllLabel() {\n this.#clearAllBtn.textContent = this.clearAllButtonLabel;\n }\n\n #onRowsChanged(newValue) {\n if (!newValue) return;\n try {\n const parsed = JSON.parse(newValue);\n this.#rows = (Array.isArray(parsed) ? parsed : []).map((row) => {\n const op = this.#resolveOperator(row);\n return {\n ...row,\n // accept rows without internal `id`; assign one on ingest.\n id: row.id || this.#newRowId(),\n // Resolve noValue from the catalog. Rows seeded via `value` arrive\n // without it, and isValidRow can't recover it for custom operator\n // ids (OPERATOR_META knows built-ins only) — so a no-value custom\n // row would be dropped from the committed filter on the next edit.\n ...(op && { noValue: !!op.noValue }),\n };\n });\n this.#ensureAtLeastOneRow();\n this.#renderRows();\n } catch {\n // ignore invalid JSON\n }\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (oldValue === newValue) return;\n\n if (attrName === 'data') {\n this.#resolveColumns();\n this.#renderRows();\n }\n if (attrName === 'value') this.#onRowsChanged(newValue);\n if (attrName === 'add-button-label') this.#updateAddRowLabel();\n if (attrName === 'clear-all-button-label') this.#updateClearAllLabel();\n if (attrName === 'max-rows') this.#updateAddRowVisibility();\n }\n };\n\nconst { host, container, rowsList, actions, addRowIcon } = {\n host: { selector: () => ':host' },\n container: { selector: () => '.container' },\n rowsList: { selector: () => '.rows-list' },\n actions: { selector: () => '.actions' },\n addRowIcon: { selector: () => '::slotted([slot=\"add-row-icon\"])' },\n};\n\nexport const FilterRowsClass = compose(\n createStyleMixin({\n mappings: {\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { ...host, property: 'min-width' },\n hostDirection: [\n { ...host, property: 'direction' },\n {\n selector: () => ButtonClass.componentName,\n property: ButtonClass.cssVarList.hostDirection,\n },\n {\n selector: () => FilterRowClass.componentName,\n property: FilterRowClass.cssVarList.hostDirection,\n },\n ],\n containerWidth: { ...container, property: 'width' },\n containerPadding: { ...container, property: 'padding' },\n containerGap: { ...container, property: 'gap' },\n listGap: { ...rowsList, property: 'gap' },\n listMaxHeight: { ...rowsList, property: 'max-height' },\n actionsGap: { ...actions, property: 'gap' },\n addRowIconSize: [\n { ...addRowIcon, property: 'width' },\n { ...addRowIcon, property: 'height' },\n ],\n },\n }),\n componentNameValidationMixin,\n FilterRowsMixin,\n)(createBaseClass({ componentName, baseSelector: '.container' }));\n","import '../descope-filter-row';\nimport '@descope-ui/descope-button';\n\nimport { componentName, FilterRowsClass } from './FilterRowsClass';\n\ncustomElements.define(componentName, FilterRowsClass);\n\nexport { FilterRowsClass, componentName };\n","import {\n injectStyle,\n getComponentName,\n forwardAttrs,\n} from '@descope-ui/common/components-helpers';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport {\n createStyleMixin,\n draggableMixin,\n componentNameValidationMixin,\n portalMixin,\n} from '@descope-ui/common/components-mixins';\nimport { compose } from '@descope-ui/common/utils';\nimport { BadgeClass } from '@descope-ui/descope-badge/class';\nimport { ButtonClass } from '@descope-ui/descope-button/class';\nimport {\n FilterRowsClass,\n componentName as FILTER_ROWS_TAG,\n} from './descope-filter-rows/FilterRowsClass.js';\nimport {\n FilterRowClass,\n OPERATOR_LABEL_ATTRS,\n} from './descope-filter-row/FilterRowClass.js';\nimport { AttachmentClass } from '@descope-ui/descope-attachment/class';\nimport { cloneNamedSlotsInto, parseRowsArray } from './helpers';\n\nexport const componentName = getComponentName('filter');\n\nconst BASE_SELECTOR = 'vaadin-popover';\n\nconst BaseClass = createBaseClass({\n componentName,\n baseSelector: BASE_SELECTOR,\n});\n\nconst ROW_ICON_SLOTS = ['add-row-icon', 'delete-row-icon'];\n\nclass RawFilterClass extends BaseClass {\n #committedRows = [];\n\n // Set while committing a change that originated from the inner filter-rows,\n // so #onValueAttrChanged skips pushing the (valid-only) committed value back into\n // filter-rows — the rows element owns the live draft (incl. partial rows).\n #syncingFromRows = false;\n\n #popoverPosStylesheet;\n\n #data = null;\n\n #filterRowsRef = null;\n\n #overlay = null;\n\n static get observedAttributes() {\n return [\n ...(BaseClass.observedAttributes || []),\n 'label',\n 'disable-indicator',\n 'data',\n 'value',\n ];\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div>\n <descope-attachment class=\"attachment\" position=\"top-end\" st-offset-x=\"0px\">\n <descope-button class=\"trigger-btn\">\n <slot name=\"button-icon\"></slot>\n <span class=\"trigger-label\"></span>\n </descope-button>\n <descope-badge slot=\"attachment\" class=\"counter hidden\" mode=\"primary\" variant=\"contained\" bordered=\"true\" size=\"xs\">\n <span class=\"counter-text\">0</span>\n </descope-badge>\n </descope-attachment>\n <vaadin-popover></vaadin-popover>\n <slot name=\"add-row-icon\" class=\"hidden\"></slot>\n <slot name=\"delete-row-icon\" class=\"hidden\"></slot>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: inline-block;\n box-sizing: border-box;\n user-select: none;\n max-width: 100%;\n }\n\n :host([full-width=\"true\"]) {\n display: block;\n }\n\n /* Block (not the attachment's own inline-block) so host width set from\n outside (e.g. container items-grow) flows down to the trigger button;\n anchored's flex-grow on the anchor carries it the rest of the way. */\n .attachment {\n display: block;\n }\n\n\n .hidden {\n display: none;\n }\n\n :host([read-only=\"true\"]) .trigger-btn {\n pointer-events: none;\n }\n `,\n this,\n );\n\n this.triggerBtn = this.shadowRoot.querySelector('.trigger-btn');\n this.triggerLabel = this.shadowRoot.querySelector('.trigger-label');\n this.counter = this.shadowRoot.querySelector('.counter');\n this.counterText = this.shadowRoot.querySelector('.counter-text');\n }\n\n get opened() {\n return this.getAttribute('opened') === 'true';\n }\n\n get isIndicatorVisible() {\n return this.getAttribute('disable-indicator') !== 'true';\n }\n\n get isFullWidth() {\n return this.getAttribute('full-width') === 'true';\n }\n\n get overlay() {\n // vaadin creates the overlay lazily on first render, so this can't be a\n // const captured at init. Once it exists it's stable — cache it.\n this.#overlay ??=\n this.baseElement.shadowRoot?.querySelector('vaadin-popover-overlay') ||\n null;\n return this.#overlay;\n }\n\n get backdrop() {\n return this.overlay?.shadowRoot?.querySelector('#backdrop');\n }\n\n get filterRowsElement() {\n return this.overlay?.querySelector(FILTER_ROWS_TAG) || null;\n }\n\n init() {\n super.init?.();\n\n this.#initPopover();\n this.#updateCounter();\n this.#updateLabel();\n\n forwardAttrs(this, this.triggerBtn, {\n includeAttrs: ['button-mode', 'button-variant', 'size', 'full-width'],\n mapAttrs: { 'button-mode': 'mode', 'button-variant': 'variant' },\n });\n\n this.#setupSlotChangeListeners();\n\n setTimeout(() => {\n this.#overrideOverlaySettings();\n });\n }\n\n #setupSlotChangeListeners() {\n ROW_ICON_SLOTS.forEach((name) => {\n const slot = this.shadowRoot.querySelector(`slot[name=\"${name}\"]`);\n slot?.addEventListener('slotchange', () => {\n if (this.#filterRowsRef?.isConnected) {\n cloneNamedSlotsInto(this, this.#filterRowsRef, [name]);\n }\n });\n });\n }\n\n #initPopover() {\n // Manual mode (empty trigger): we own open/close via our trigger button +\n // onPopoverToggle(), and the backdrop-click handler below carries close.\n // Native close is unavailable here — see #overrideOverlaySettings for why.\n this.baseElement.trigger = [];\n this.baseElement.withBackdrop = true;\n this.baseElement.renderer = this.#popoverRenderer.bind(this);\n\n this.baseElement.addEventListener('click', (e) => {\n e.stopPropagation();\n });\n\n this.triggerBtn.addEventListener('click', () => this.onPopoverToggle());\n }\n\n #popoverRenderer(root) {\n if (!root.firstChild) {\n this.overlay.positionTarget = this.triggerBtn;\n\n const filterRows = document.createElement(FILTER_ROWS_TAG);\n\n forwardAttrs(this, filterRows, {\n includeAttrs: [\n 'operators',\n 'size',\n 'max-rows',\n 'clear-all-button-label',\n 'add-button-label',\n 'label-type',\n 'data-value-label-true',\n 'data-value-label-false',\n 'data-column-placeholder',\n 'data-operator-placeholder',\n 'data-value-placeholder',\n ...OPERATOR_LABEL_ATTRS,\n ],\n mapAttrs: { operators: 'operators-catalog' },\n });\n this.#forwardDataToRows(filterRows);\n\n root.appendChild(filterRows);\n\n this.#filterRowsRef = filterRows;\n\n // Seed the freshly created rows with the current committed value.\n filterRows.setAttribute('value', JSON.stringify(this.#committedRows));\n\n // Live filtering: every inner-rows `change` commits immediately (no Apply\n // button). `clear` commits an empty filter. The popover stays open.\n filterRows.addEventListener('change', this.#onRowsChange.bind(this));\n filterRows.addEventListener('clear', this.#onClear.bind(this));\n\n // vaadin-popover's host is `:host{display:none!important}` (in its own\n // shadow), which hides our shadow-kept overlay. Override it from inside\n // that same shadow scope — an inline/outer rule can't beat the :host\n // important rule.\n const cs = new CSSStyleSheet();\n cs.insertRule(':host{display:block!important;}');\n this.baseElement?.shadowRoot?.adoptedStyleSheets?.push(cs);\n\n this.backdrop?.addEventListener('click', () => this.closePopover());\n }\n\n if (this.#filterRowsRef) {\n // Reopen path: the rows element already exists and holds the live draft,\n // so its value is left as-is (no reset). Only re-clone the slotted icons,\n // in case the consumer swapped them while the popover was closed.\n cloneNamedSlotsInto(this, this.#filterRowsRef, ROW_ICON_SLOTS);\n }\n\n // Hidden until we reposition. The delay lets the overlay (and, in full-width\n // mode, the host's stretch) settle before we measure — vaadin-overlay-open\n // fires too early for the full-width measurement.\n root.style.setProperty('visibility', 'hidden');\n setTimeout(() => {\n this.#adjustPopoverPosition();\n root.style.setProperty('visibility', 'visible');\n }, 50);\n }\n\n #adjustPopoverPosition() {\n if (!this.overlay) return;\n const popover = this.shadowRoot.querySelector('vaadin-popover')?.shadowRoot;\n if (!popover) return;\n\n if (this.#popoverPosStylesheet) {\n popover.adoptedStyleSheets = popover.adoptedStyleSheets.filter(\n (s) => s !== this.#popoverPosStylesheet,\n );\n }\n\n const windowRect = document.body.getBoundingClientRect();\n const triggerRect = this.triggerBtn.getBoundingClientRect();\n const overlayRect = this.overlay.getBoundingClientRect();\n\n const offset = triggerRect.left - overlayRect.left;\n const availableLeft = overlayRect.left;\n const availableRight = windowRect.width - overlayRect.right;\n\n let newOffset;\n if (offset > 0) {\n newOffset = Math.min(offset, availableRight);\n } else {\n newOffset = Math.min(Math.abs(offset), availableLeft) * -1;\n }\n\n // Offset via `margin-left`, NOT `transform`: a transform creates a\n // containing block that traps the position:fixed combo-box dropdowns inside\n // the popover, clipping their listboxes. margin-left avoids that.\n // In full-width mode, stretch the overlay to the host width (the size theme\n // var only sets a fixed width, leaving the popover narrower than the\n // full-width trigger). Measure the host, not the trigger button — the\n // button's full-width stretch settles a frame after the first open, so its\n // width is stale on that first measure; the host is laid out in the page\n // and stable.\n const hostWidth = Math.round(this.getBoundingClientRect().width);\n this.#popoverPosStylesheet = injectStyle(\n `\n vaadin-popover-overlay::part(overlay) {\n margin-left: ${newOffset}px;\n ${this.isFullWidth ? `width: ${hostWidth}px; max-width: ${hostWidth}px;` : ''}\n }\n `,\n popover,\n );\n }\n\n #dispatch(name, detail) {\n this.dispatchEvent(\n new CustomEvent(name, { bubbles: true, composed: true, detail }),\n );\n }\n\n // Single commit path: the `value` attribute is the source of truth; its\n // callback (#onValueAttrChanged) does the state + UI sync.\n #commitRowsAttr(rows) {\n // Flag the write so the value attributeChangedCallback (#onValueAttrChanged)\n // skips pushing it back into filter-rows. setAttribute is synchronous, so\n // the guard opens and closes within this call — no re-entry window.\n this.#syncingFromRows = true;\n this.setAttribute('value', JSON.stringify(parseRowsArray(rows)));\n this.#syncingFromRows = false;\n }\n\n // Live commit from a rows edit: commit only the valid rows (badge/query\n // contract); the full draft stays in filter-rows. Skip when the valid set\n // is unchanged so we don't fire redundant queries. Popover stays open.\n #onRowsChange(e) {\n const next = parseRowsArray(e.detail.value || []);\n if (JSON.stringify(next) === JSON.stringify(this.#committedRows)) return;\n this.#commitRowsAttr(next);\n this.#dispatch('filter-apply', {\n value: this.#committedRows,\n action: 'apply',\n });\n }\n\n #onClear() {\n this.#commitRowsAttr([]);\n this.#dispatch('filter-clear', {\n value: this.#committedRows,\n action: 'clear-all',\n });\n }\n\n #updateCounter() {\n if (!this.counter) return;\n const count = this.#committedRows.length;\n this.counterText.textContent = String(count);\n this.counter.classList.toggle(\n 'hidden',\n count < 1 || !this.isIndicatorVisible,\n );\n }\n\n #updateLabel() {\n if (!this.triggerLabel) return;\n const label = this.getAttribute('label') || '';\n this.triggerLabel.textContent = label;\n this.triggerLabel.classList.toggle('hidden', !label);\n }\n\n #forwardDataToRows(filterRows) {\n if (!filterRows || !this.#data) return;\n filterRows.setAttribute('data', JSON.stringify(this.#data));\n }\n\n get value() {\n return JSON.stringify(this.#committedRows);\n }\n\n set value(rows) {\n this.#commitRowsAttr(rows);\n }\n\n set data(data) {\n this.#data = Array.isArray(data) ? data : null;\n if (this.filterRowsElement && this.#data) {\n this.filterRowsElement.setAttribute('data', JSON.stringify(this.#data));\n }\n }\n\n get data() {\n return this.#data;\n }\n\n // Constraint: vaadin normally reparents the open overlay out to document.body,\n // which puts it outside our shadow DOM -> our scoped theme CSS vars no longer\n // reach it. We need it themed, so we must keep it inside our shadow DOM.\n //\n // Decision: override the attach/detach hooks so the overlay stays put\n // (attach only bringToFront()s; detach no-ops — native detach dereferences\n // the _placeholder that native attach creates, which our attach skips).\n //\n // Trade-off: vaadin fires its native outside-click/Esc close only for the\n // topmost overlay, which it finds by scanning document.body's children\n // (isLastOverlay). Ours never lands there, so native close silently no-ops.\n // We accept that and drive close ourselves (manual trigger + the backdrop\n // click handler in #initPopover). Esc close is intentionally not implemented.\n #overrideOverlaySettings() {\n if (!this.overlay) return;\n this.overlay._attachOverlay = () => this.overlay.bringToFront();\n this.overlay._detachOverlay = () => {};\n }\n\n get readOnly() {\n return this.getAttribute('read-only') === 'true';\n }\n\n onPopoverToggle() {\n if (this.readOnly) return;\n this.opened ? this.closePopover() : this.openPopover();\n }\n\n openPopover() {\n this.setAttribute('opened', 'true');\n this.baseElement.opened = true;\n }\n\n closePopover() {\n this.removeAttribute('opened');\n this.baseElement.opened = false;\n }\n\n #onValueAttrChanged(newValue) {\n if (!newValue) return;\n this.#committedRows = parseRowsArray(newValue);\n this.#updateCounter();\n // Don't push a rows-originated commit back into filter-rows (it would wipe\n // partial rows). External `value` writes DO push, to render the new state.\n if (this.#syncingFromRows) return;\n this.filterRowsElement?.setAttribute(\n 'value',\n JSON.stringify(this.#committedRows),\n );\n }\n\n #onColumnsChanged(newValue) {\n if (!newValue) return;\n try {\n this.#data = JSON.parse(newValue);\n this.filterRowsElement?.setAttribute('data', JSON.stringify(this.#data));\n } catch {\n // ignore invalid JSON\n }\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (oldValue === newValue) return;\n\n if (attrName === 'value') this.#onValueAttrChanged(newValue);\n if (attrName === 'data') this.#onColumnsChanged(newValue);\n if (attrName === 'label') this.#updateLabel();\n if (attrName === 'disable-indicator') this.#updateCounter();\n }\n}\n\nconst { host, overlay, backdrop } = {\n host: { selector: () => ':host' },\n overlay: { selector: 'vaadin-popover-overlay::part(overlay)' },\n backdrop: { selector: 'vaadin-popover-overlay::part(backdrop)' },\n};\n\nexport const FilterClass = compose(\n createStyleMixin({\n mappings: {\n hostWidth: { ...host, property: 'width' },\n hostDirection: [\n { ...host, property: 'direction' },\n {\n selector: () => ButtonClass.componentName,\n property: ButtonClass.cssVarList.hostDirection,\n },\n {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.hostDirection,\n },\n ],\n\n counterBorderRadius: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.borderRadius,\n },\n counterWidth: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.hostWidth,\n },\n counterHeight: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.hostHeight,\n },\n counterFontSize: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.fontSize,\n },\n counterLineHeight: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.lineHeight,\n },\n counterBackgroundColor: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.backgroundColor,\n },\n counterTextColor: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.textColor,\n },\n // Suppresses the badge's own mode border (maps it to filter's unset var)\n // so the counter shows no ring. Removing this lets mode=primary's border\n // through — keep it.\n counterBorderColor: {\n selector: () => BadgeClass.componentName,\n property: BadgeClass.cssVarList.borderColor,\n },\n counterOffsetX: {\n selector: () => AttachmentClass.componentName,\n property: AttachmentClass.cssVarList.offsetX,\n },\n counterOffsetY: {\n selector: () => AttachmentClass.componentName,\n property: AttachmentClass.cssVarList.offsetY,\n },\n\n rowsHostWidth: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.hostWidth,\n },\n rowsContainerWidth: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.containerWidth,\n },\n rowsContainerPadding: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.containerPadding,\n },\n rowsContainerGap: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.containerGap,\n },\n rowsListGap: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.listGap,\n },\n rowsListMaxHeight: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.listMaxHeight,\n },\n rowsActionsGap: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.actionsGap,\n },\n rowsAddRowIconSize: {\n selector: () => FilterRowsClass.componentName,\n property: FilterRowsClass.cssVarList.addRowIconSize,\n },\n rowWidth: { ...host, property: FilterRowClass.cssVarList.hostWidth },\n rowMinWidth: {\n ...host,\n property: FilterRowClass.cssVarList.hostMinWidth,\n },\n rowValueWidth: {\n ...host,\n property: FilterRowClass.cssVarList.inputWidth,\n },\n rowGap: { ...host, property: FilterRowClass.cssVarList.rowGap },\n rowDisabledDeleteColor: {\n ...host,\n property: FilterRowClass.cssVarList.deleteDisabledIconColor,\n },\n },\n }),\n portalMixin({\n name: 'overlay',\n selector: '',\n mappings: {\n marginTop: { ...overlay, property: 'margin-top' },\n width: { ...overlay },\n backgroundColor: { ...overlay },\n backdropBackgroundColor: { ...backdrop, property: 'background-color' },\n backdropPointerEvents: { ...backdrop, property: 'pointer-events' },\n padding: { ...overlay },\n boxShadow: { ...overlay },\n borderRadius: { ...overlay },\n outlineWidth: { ...overlay },\n outlineColor: { ...overlay },\n outlineStyle: { ...overlay },\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawFilterClass);\n","import '@vaadin/popover/src/vaadin-popover';\nimport './descope-filter-rows';\nimport '@descope-ui/descope-button';\nimport '@descope-ui/descope-badge';\nimport '@descope-ui/descope-attachment';\n\nimport { componentName, FilterClass } from './FilterClass';\n\ncustomElements.define(componentName, FilterClass);\n\nexport { FilterClass, componentName };\n","import '@descope-ui/descope-image';\n\nimport { componentName, IconClass } from './IconClass';\n\ncustomElements.define(componentName, IconClass);\n\nexport { IconClass, componentName };\n","import { componentName, ImageClass } from './ImageClass';\n\ncustomElements.define(componentName, ImageClass);\n\nexport { ImageClass, componentName };\n"],"names":["module","exports","componentName","componentsHelpers","xE","RawAnchored","baseClasses","qu","baseSelector","stretchObserver","directionObserver","hostStretchSheet","anchorClassObserver","anchor","this","defaultSlot","assignedElements","flatten","anchored","shadowRoot","querySelector","outerHost","getRootNode","host","constructor","super","attachShadow","mode","innerHTML","init","fz","syncStretchCSS","addEventListener","syncAnchor","syncComponentState","hasHidden","classList","contains","toggle","onAnchorChanged","forwardAttr","observeAnchorClass","disconnect","mx","includeAttrs","connectedCallback","css","replaceSync","observer","target","attr","removeAttribute","EA","disconnectedCallback","toggleAttribute","AnchoredClass","utils","Zz","componentsMixins","tQ","customElements","define","_descope_ui_common_components_helpers__WEBPACK_IMPORTED_MODULE_2__","ATTACHMENT_POSITIONS","DEFAULT_POSITION","RawAttachment","_descope_ui_common_base_classes__WEBPACK_IMPORTED_MODULE_1__","anchoredClassObserver","attachmentSlot","attachment","observedAttributes","attributeChangedCallback","name","oldVal","newVal","handlePositionChange","container","syncDirection","setVisibility","window","requestAnimationFrame","syncAvailableSizeAttr","observeAnchored","anchorRect","getBoundingClientRect","availableWidth","width","setAttribute","Number","hasAnchor","length","direction","getAttribute","offsetX","offsetY","pos","includes","attachmentContainer","selector","AttachmentClass","_descope_ui_common_utils__WEBPACK_IMPORTED_MODULE_3__","_descope_ui_common_components_mixins__WEBPACK_IMPORTED_MODULE_0__","RF","mappings","transform","justifyContent","maxWidth","top","bottom","left","right","VO","_AttachmentClass__WEBPACK_IMPORTED_MODULE_1__","T","q","RawBadge","shrinkToIndicatorThreshold","handleShrinkToIndicator","value","parseFloat","BadgeClass","hostWidth","property","hostHeight","hostDirection","fontFamily","fontSize","fontWeight","lineHeight","textTransform","verticalPadding","horizontalPadding","borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","textColor","textAlign","boxShadow","textIndent","_BadgeClass__WEBPACK_IMPORTED_MODULE_0__","e","OPERATOR_META","equal","label","gt","lt","gte","lte","noValue","OPERATOR_LABEL_ATTRS","Object","keys","map","id","OPERATORS","text","number","email","boolean","singleselect","multiselect","resolve","meta","getOperatorsForInputType","inputType","custom","catalog","baseOps","Array","isArray","every","c","filter","op","override","find","isValidRow","row","column","operator","operatorId","String","cloneNamedSlotsInto","dest","slotNames","forEach","s","slotName","from","querySelectorAll","el","remove","children","node","clone","cloneNode","appendChild","cloneNamedSlotInto","parseRowsArray","input","raw","JSON","parse","parseJsonAttr","ele","TEXT_INPUT_TYPES","COMBO_INPUT_TYPES","isTextLike","t","isComboLike","isMultiLike","whenComboReady","Promise","r","setTimeout","FilterRowClass","hostMinWidth","ButtonClass","J","cssVarList","ComboBoxClass","C","MultiSelectComboBoxClass","rowGap","inputWidth","TextFieldClass","w","deleteDisabledIconColor","iconColor","superclass","columns","rowId","updating","colSelect","opSelect","textValue","comboValue","multiValue","deleteBtn","lastInputType","debouncedChange","fn","wrapped","args","clearTimeout","cancel","debounce","dispatchChange","delete_default","setupUserEventListeners","dispatch","setupAttrForwarding","inputs","setupPlaceholderForwarding","asPlaceholder","mapAttrs","setSilent","prev","onColumnChange","onOperatorChange","isTextValueActive","getColDef","columnId","trueLabel","falseLabel","booleanOptions","getOperators","colDef","operators","data","nextOp","prevInputType","nextInputType","typeChanged","updateValueInput","resetValue","opts","reset","showActiveValueInput","configureTextValue","configureComboValue","configureMultiValue","options","o","activeInputForType","readActiveInputValue","assembleRowValue","detail","dispatchEvent","CustomEvent","bubbles","composed","syncFromRow","undefined","applyRowValueToWidget","syncFloatingLabel","labelType","floating","placeholder","stringify","attrName","oldValue","newValue","onDataChanged","onValueChanged","onDisableDeleteChanged","startsWith","refreshOperatorsCombo","refreshBooleanValueCombo","col","ops","FilterRowsClass_componentName","FilterRowsClass_host","rowsList","actions","addRowIcon","FilterRowsClass","containerWidth","containerPadding","containerGap","listGap","listMaxHeight","actionsGap","addRowIconSize","rows","rowIdSeq","newRowId","emptyRow","isEmptyRow","v","hasValue","resolvedColumns","addRowBtn","addRowLabel","clearAllBtn","Ge","syncDeleteIconsIntoRows","bind","onAddRow","onClearAll","onRowChange","onRowDelete","b","resolveColumns","ensureAtLeastOneRow","renderRows","updateActionsState","cloneDeleteIconsInto","pruneRemovedRows","keepIds","Set","has","dataset","findRowEl","createRowEl","updateAddRowVisibility","document","createElement","rowEl","src","soleEmpty","maxRows","parseInt","limitReached","isNaN","closest","stopPropagation","resolveOperator","operatorWildcards","prefix","suffix","toPublicRow","addButtonLabel","clearAllButtonLabel","updateAddRowLabel","textContent","updateClearAllLabel","onRowsChanged","parsed","FilterClass_componentName","BaseClass","ROW_ICON_SLOTS","FilterClass_host","overlay","backdrop","FilterClass","counterBorderRadius","counterWidth","counterHeight","counterFontSize","counterLineHeight","counterBackgroundColor","counterTextColor","counterBorderColor","counterOffsetX","counterOffsetY","rowsHostWidth","rowsContainerWidth","rowsContainerPadding","rowsContainerGap","rowsListGap","rowsListMaxHeight","rowsActionsGap","rowsAddRowIconSize","rowWidth","rowMinWidth","rowValueWidth","rowDisabledDeleteColor","mA","marginTop","backdropBackgroundColor","backdropPointerEvents","padding","outlineWidth","outlineColor","outlineStyle","committedRows","syncingFromRows","popoverPosStylesheet","filterRowsRef","triggerBtn","triggerLabel","counter","counterText","opened","isIndicatorVisible","isFullWidth","baseElement","filterRowsElement","initPopover","updateCounter","updateLabel","setupSlotChangeListeners","overrideOverlaySettings","slot","isConnected","trigger","withBackdrop","renderer","popoverRenderer","onPopoverToggle","root","firstChild","positionTarget","filterRows","forwardDataToRows","onRowsChange","onClear","cs","CSSStyleSheet","insertRule","adoptedStyleSheets","push","closePopover","style","setProperty","adjustPopoverPosition","popover","windowRect","body","triggerRect","overlayRect","offset","availableLeft","availableRight","newOffset","Math","min","abs","round","commitRowsAttr","next","action","count","_attachOverlay","bringToFront","_detachOverlay","readOnly","openPopover","onValueAttrChanged","onColumnsChanged","_IconClass__WEBPACK_IMPORTED_MODULE_1__","S","_ImageClass__WEBPACK_IMPORTED_MODULE_0__"],"sourceRoot":""}
|