@descope/web-components-ui 3.17.0 → 3.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs.js +2807 -1010
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +3244 -1442
- package/dist/index.esm.js.map +1 -1
- package/dist/umd/1408.js +8 -8
- package/dist/umd/1408.js.map +1 -1
- package/dist/umd/5260.js +1 -1
- package/dist/umd/5260.js.map +1 -1
- package/dist/umd/6618.js +1 -1
- package/dist/umd/6618.js.map +1 -1
- package/dist/umd/67.js +2 -0
- package/dist/umd/67.js.map +1 -0
- package/dist/umd/7092.js +1 -1
- package/dist/umd/7092.js.map +1 -1
- package/dist/umd/7939.js +1 -1
- package/dist/umd/7939.js.map +1 -1
- package/dist/umd/8350.js +1 -1
- package/dist/umd/8350.js.map +1 -1
- package/dist/umd/9439.js +2 -0
- package/dist/umd/9439.js.map +1 -0
- package/dist/umd/DescopeDev.js +1 -1
- package/dist/umd/DescopeDev.js.map +1 -1
- package/dist/umd/descope-attachment.js +1 -1
- package/dist/umd/descope-attachment.js.map +1 -1
- package/dist/umd/descope-badge.js +1 -1
- package/dist/umd/descope-badge.js.map +1 -1
- package/dist/umd/descope-date-field-descope-calendar-index-js.js +10 -10
- package/dist/umd/descope-date-field-descope-calendar-index-js.js.map +1 -1
- package/dist/umd/descope-date-field-index-js.js +1 -1
- package/dist/umd/descope-date-field-index-js.js.map +1 -1
- package/dist/umd/descope-filter.js +2 -0
- package/dist/umd/descope-filter.js.map +1 -0
- package/dist/umd/descope-month-day-field.js +1 -1
- package/dist/umd/descope-month-day-field.js.map +1 -1
- package/dist/umd/descope-multi-line-mappings.js +4 -4
- package/dist/umd/descope-multi-line-mappings.js.LICENSE.txt +6 -0
- package/dist/umd/descope-multi-line-mappings.js.map +1 -1
- package/dist/umd/descope-multi-select-combo-box.js +2 -1
- package/dist/umd/descope-multi-select-combo-box.js.LICENSE.txt +5 -0
- package/dist/umd/descope-multi-select-combo-box.js.map +1 -1
- package/dist/umd/descope-multi-sso.js +1 -1
- package/dist/umd/descope-multi-sso.js.map +1 -1
- package/dist/umd/descope-new-password-index-js.js +1 -1
- package/dist/umd/descope-new-password-index-js.js.map +1 -1
- package/dist/umd/descope-passcode-index-js.js +1 -1
- package/dist/umd/descope-passcode-index-js.js.map +1 -1
- package/dist/umd/descope-security-questions-setup-index-js.js +1 -1
- package/dist/umd/descope-security-questions-setup-index-js.js.map +1 -1
- package/dist/umd/descope-security-questions-verify-index-js.js +1 -1
- package/dist/umd/descope-security-questions-verify-index-js.js.map +1 -1
- package/dist/umd/descope-text-field.js +1 -1
- package/dist/umd/descope-text-field.js.map +1 -1
- package/dist/umd/descope-trusted-devices.js +1 -1
- package/dist/umd/descope-trusted-devices.js.map +1 -1
- package/dist/umd/descope-user-attribute-index-js.js +1 -1
- package/dist/umd/descope-user-attribute-index-js.js.map +1 -1
- package/dist/umd/descope-user-auth-method-index-js.js +1 -1
- package/dist/umd/descope-user-auth-method-index-js.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js.map +1 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-field-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-field-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js.map +1 -1
- package/package.json +42 -41
- package/src/theme/components/index.js +2 -0
|
@@ -0,0 +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","RawAnchored","baseSelector","this","defaultSlot","assignedElements","flatten","shadowRoot","querySelector","getRootNode","host","constructor","super","attachShadow","mode","innerHTML","init","addEventListener","hasHidden","classList","contains","toggle","disconnect","includeAttrs","connectedCallback","css","replaceSync","observer","target","attr","removeAttribute","disconnectedCallback","toggleAttribute","AnchoredClass","customElements","define","ATTACHMENT_POSITIONS","DEFAULT_POSITION","RawAttachment","attachmentSlot","anchored","observedAttributes","attributeChangedCallback","name","oldVal","newVal","container","window","requestAnimationFrame","anchor","anchorRect","getBoundingClientRect","availableWidth","width","setAttribute","Number","hasAnchor","length","direction","getAttribute","offsetX","offsetY","pos","includes","attachmentContainer","selector","AttachmentClass","mappings","transform","justifyContent","maxWidth","top","bottom","left","right","RawBadge","shrinkToIndicatorThreshold","value","parseFloat","BadgeClass","hostWidth","property","hostHeight","hostDirection","fontFamily","fontSize","fontWeight","lineHeight","textTransform","verticalPadding","horizontalPadding","borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","textColor","textAlign","boxShadow","textIndent","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","cssVarList","ComboBoxClass","C","MultiSelectComboBoxClass","rowGap","inputWidth","TextFieldClass","deleteDisabledIconColor","iconColor","superclass","fn","wrapped","args","clearTimeout","cancel","debounce","inputs","asPlaceholder","mapAttrs","prev","e","columnId","trueLabel","falseLabel","colDef","operators","data","nextOp","prevInputType","nextInputType","typeChanged","resetValue","opts","reset","options","o","detail","dispatchEvent","CustomEvent","bubbles","composed","undefined","labelType","floating","placeholder","stringify","attrName","oldValue","newValue","startsWith","col","ops","rowsList","actions","addRowIcon","FilterRowsClass","containerWidth","containerPadding","containerGap","listGap","listMaxHeight","actionsGap","addRowIconSize","v","hasValue","bind","b","keepIds","Set","has","dataset","rowId","document","createElement","rowEl","src","soleEmpty","maxRows","parseInt","limitReached","isNaN","closest","stopPropagation","prefix","suffix","toPublicRow","rows","addButtonLabel","clearAllButtonLabel","textContent","parsed","BaseClass","ROW_ICON_SLOTS","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","marginTop","backdropBackgroundColor","backdropPointerEvents","padding","outlineWidth","outlineColor","outlineStyle","triggerBtn","triggerLabel","counter","counterText","opened","isIndicatorVisible","isFullWidth","baseElement","filterRowsElement","slot","isConnected","trigger","withBackdrop","renderer","onPopoverToggle","root","firstChild","positionTarget","filterRows","cs","CSSStyleSheet","insertRule","adoptedStyleSheets","push","closePopover","style","setProperty","popover","windowRect","body","triggerRect","overlayRect","offset","availableLeft","availableRight","newOffset","Math","min","abs","round","next","action","count","_attachOverlay","bringToFront","_detachOverlay","readOnly","openPopover"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[1202,6724,9585],{49139(t){t.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05IDVIMTVWNC41MDQ2OEMxNSA0LjIxNDA0IDE1LjIyNiA0IDE1LjUwNDcgNEgxNi40OTUzQzE2Ljc4NiA0IDE3IDQuMjI1OTUgMTcgNC41MDQ2OFY1SDE4Ljc1NjhDMTkuMzAyOCA1IDE5Ljc1IDUuNDQ3MjUgMTkuNzUgNS45OTg5NlY3LjAwMTA0QzE5Ljc1IDcuNTU3MzQgMTkuMzA1MyA4IDE4Ljc1NjggOEg1LjI0MzE3QzQuNjk3MTcgOCA0LjI1IDcuNTUyNzUgNC4yNSA3LjAwMTA0VjUuOTk4OTZDNC4yNSA1LjQ0MjY2IDQuNjk0NjYgNSA1LjI0MzE3IDVIN1Y0LjUwNDY4QzcgNC4yMTQwNCA3LjIyNTk2IDQgNy41MDQ2OCA0SDguNDk1MzJDOC43ODU5NiA0IDkgNC4yMjU5NSA5IDQuNTA0NjhWNVpNNS41MDQ2OCA5SDYuNDk1MzJDNi43ODU5NiA5IDcgOS4yMjU5NiA3IDkuNTA0NjhWMTAuNDk1M0M3IDEwLjc4NiA2Ljc3NDA0IDExIDYuNDk1MzIgMTFINS41MDQ2OEM1LjIxNDA0IDExIDUgMTAuNzc0IDUgMTAuNDk1M1Y5LjUwNDY4QzUgOS4yMTQwNCA1LjIyNTk1IDkgNS41MDQ2OCA5Wk04LjUwNDY4IDlIOS40OTUzMkM5Ljc4NTk2IDkgMTAgOS4yMjU5NiAxMCA5LjUwNDY4VjEwLjQ5NTNDMTAgMTAuNzg2IDkuNzc0MDQgMTEgOS40OTUzMiAxMUg4LjUwNDY4QzguMjE0MDQgMTEgOCAxMC43NzQgOCAxMC40OTUzVjkuNTA0NjhDOCA5LjIxNDA0IDguMjI1OTYgOSA4LjUwNDY4IDlaTTExLjUwNDcgOUgxMi40OTUzQzEyLjc4NiA5IDEzIDkuMjI1OTYgMTMgOS41MDQ2OFYxMC40OTUzQzEzIDEwLjc4NiAxMi43NzQgMTEgMTIuNDk1MyAxMUgxMS41MDQ3QzExLjIxNCAxMSAxMSAxMC43NzQgMTEgMTAuNDk1M1Y5LjUwNDY4QzExIDkuMjE0MDQgMTEuMjI2IDkgMTEuNTA0NyA5Wk01LjUwNDY4IDEySDYuNDk1MzJDNi43ODU5NiAxMiA3IDEyLjIyNiA3IDEyLjUwNDdWMTMuNDk1M0M3IDEzLjc4NiA2Ljc3NDA0IDE0IDYuNDk1MzIgMTRINS41MDQ2OEM1LjIxNDA0IDE0IDUgMTMuNzc0IDUgMTMuNDk1M1YxMi41MDQ3QzUgMTIuMjE0IDUuMjI1OTUgMTIgNS41MDQ2OCAxMlpNOC41MDQ2OCAxMkg5LjQ5NTMyQzkuNzg1OTYgMTIgMTAgMTIuMjI2IDEwIDEyLjUwNDdWMTMuNDk1M0MxMCAxMy43ODYgOS43NzQwNCAxNCA5LjQ5NTMyIDE0SDguNTA0NjhDOC4yMTQwNCAxNCA4IDEzLjc3NCA4IDEzLjQ5NTNWMTIuNTA0N0M4IDEyLjIxNCA4LjIyNTk2IDEyIDguNTA0NjggMTJaTTExLjUwNDcgMTJIMTIuNDk1M0MxMi43ODYgMTIgMTMgMTIuMjI2IDEzIDEyLjUwNDdWMTMuNDk1M0MxMyAxMy43ODYgMTIuNzc0IDE0IDEyLjQ5NTMgMTRIMTEuNTA0N0MxMS4yMTQgMTQgMTEgMTMuNzc0IDExIDEzLjQ5NTNWMTIuNTA0N0MxMSAxMi4yMTQgMTEuMjI2IDEyIDExLjUwNDcgMTJaTTUuNTA0NjggMTVINi40OTUzMkM2Ljc4NTk2IDE1IDcgMTUuMjI2IDcgMTUuNTA0N1YxNi40OTUzQzcgMTYuNzg2IDYuNzc0MDQgMTcgNi40OTUzMiAxN0g1LjUwNDY4QzUuMjE0MDQgMTcgNSAxNi43NzQgNSAxNi40OTUzVjE1LjUwNDdDNSAxNS4yMTQgNS4yMjU5NSAxNSA1LjUwNDY4IDE1Wk04LjUwNDY4IDE1SDkuNDk1MzJDOS43ODU5NiAxNSAxMCAxNS4yMjYgMTAgMTUuNTA0N1YxNi40OTUzQzEwIDE2Ljc4NiA5Ljc3NDA0IDE3IDkuNDk1MzIgMTdIOC41MDQ2OEM4LjIxNDA0IDE3IDggMTYuNzc0IDggMTYuNDk1M1YxNS41MDQ3QzggMTUuMjE0IDguMjI1OTYgMTUgOC41MDQ2OCAxNVpNMTEuNTA0NyAxNUgxMi40OTUzQzEyLjc4NiAxNSAxMyAxNS4yMjYgMTMgMTUuNTA0N1YxNi40OTUzQzEzIDE2Ljc4NiAxMi43NzQgMTcgMTIuNDk1MyAxN0gxMS41MDQ3QzExLjIxNCAxNyAxMSAxNi43NzQgMTEgMTYuNDk1M1YxNS41MDQ3QzExIDE1LjIxNCAxMS4yMjYgMTUgMTEuNTA0NyAxNVpNMTQuNTA0NyA5SDE1LjQ5NTNDMTUuNzg2IDkgMTYgOS4yMjU5NiAxNiA5LjUwNDY4VjEwLjQ5NTNDMTYgMTAuNzg2IDE1Ljc3NCAxMSAxNS40OTUzIDExSDE0LjUwNDdDMTQuMjE0IDExIDE0IDEwLjc3NCAxNCAxMC40OTUzVjkuNTA0NjhDMTQgOS4yMTQwNCAxNC4yMjYgOSAxNC41MDQ3IDlaTTE0LjUwNDcgMTJIMTUuNDk1M0MxNS43ODYgMTIgMTYgMTIuMjI2IDE2IDEyLjUwNDdWMTMuNDk1M0MxNiAxMy43ODYgMTUuNzc0IDE0IDE1LjQ5NTMgMTRIMTQuNTA0N0MxNC4yMTQgMTQgMTQgMTMuNzc0IDE0IDEzLjQ5NTNWMTIuNTA0N0MxNCAxMi4yMTQgMTQuMjI2IDEyIDE0LjUwNDcgMTJaTTE0LjUwNDcgMTVIMTUuNDk1M0MxNS43ODYgMTUgMTYgMTUuMjI2IDE2IDE1LjUwNDdWMTYuNDk1M0MxNiAxNi43ODYgMTUuNzc0IDE3IDE1LjQ5NTMgMTdIMTQuNTA0N0MxNC4yMTQgMTcgMTQgMTYuNzc0IDE0IDE2LjQ5NTNWMTUuNTA0N0MxNCAxNS4yMTQgMTQuMjI2IDE1IDE0LjUwNDcgMTVaTTE3LjUwNDcgMTVIMTguNDk1M0MxOC43ODYgMTUgMTkgMTUuMjI2IDE5IDE1LjUwNDdWMTYuNDk1M0MxOSAxNi43ODYgMTguNzc0IDE3IDE4LjQ5NTMgMTdIMTcuNTA0N0MxNy4yMTQgMTcgMTcgMTYuNzc0IDE3IDE2LjQ5NTNWMTUuNTA0N0MxNyAxNS4yMTQgMTcuMjI2IDE1IDE3LjUwNDcgMTVaTTUuNTA0NjggMThINi40OTUzMkM2Ljc4NTk2IDE4IDcgMTguMjI2IDcgMTguNTA0N1YxOS40OTUzQzcgMTkuNzg2IDYuNzc0MDQgMjAgNi40OTUzMiAyMEg1LjUwNDY4QzUuMjE0MDQgMjAgNSAxOS43NzQgNSAxOS40OTUzVjE4LjUwNDdDNSAxOC4yMTQgNS4yMjU5NSAxOCA1LjUwNDY4IDE4Wk04LjUwNDY4IDE4SDkuNDk1MzJDOS43ODU5NiAxOCAxMCAxOC4yMjYgMTAgMTguNTA0N1YxOS40OTUzQzEwIDE5Ljc4NiA5Ljc3NDA0IDIwIDkuNDk1MzIgMjBIOC41MDQ2OEM4LjIxNDA0IDIwIDggMTkuNzc0IDggMTkuNDk1M1YxOC41MDQ3QzggMTguMjE0IDguMjI1OTYgMTggOC41MDQ2OCAxOFpNMTEuNTA0NyAxOEgxMi40OTUzQzEyLjc4NiAxOCAxMyAxOC4yMjYgMTMgMTguNTA0N1YxOS40OTUzQzEzIDE5Ljc4NiAxMi43NzQgMjAgMTIuNDk1MyAyMEgxMS41MDQ3QzExLjIxNCAyMCAxMSAxOS43NzQgMTEgMTkuNDk1M1YxOC41MDQ3QzExIDE4LjIxNCAxMS4yMjYgMTggMTEuNTA0NyAxOFpNMTQuNTA0NyAxOEgxNS40OTUzQzE1Ljc4NiAxOCAxNiAxOC4yMjYgMTYgMTguNTA0N1YxOS40OTUzQzE2IDE5Ljc4NiAxNS43NzQgMjAgMTUuNDk1MyAyMEgxNC41MDQ3QzE0LjIxNCAyMCAxNCAxOS43NzQgMTQgMTkuNDk1M1YxOC41MDQ3QzE0IDE4LjIxNCAxNC4yMjYgMTggMTQuNTA0NyAxOFpNMTcuNTA0NyAxOEgxOC40OTUzQzE4Ljc4NiAxOCAxOSAxOC4yMjYgMTkgMTguNTA0N1YxOS40OTUzQzE5IDE5Ljc4NiAxOC43NzQgMjAgMTguNDk1MyAyMEgxNy41MDQ3QzE3LjIxNCAyMCAxNyAxOS43NzQgMTcgMTkuNDk1M1YxOC41MDQ3QzE3IDE4LjIxNCAxNy4yMjYgMTggMTcuNTA0NyAxOFpNMTcuNTA0NyAxMkgxOC40OTUzQzE4Ljc4NiAxMiAxOSAxMi4yMjYgMTkgMTIuNTA0N1YxMy40OTUzQzE5IDEzLjc4NiAxOC43NzQgMTQgMTguNDk1MyAxNEgxNy41MDQ3QzE3LjIxNCAxNCAxNyAxMy43NzQgMTcgMTMuNDk1M1YxMi41MDQ3QzE3IDEyLjIxNCAxNy4yMjYgMTIgMTcuNTA0NyAxMlpNMTcuNTA0NyA5SDE4LjQ5NTNDMTguNzg2IDkgMTkgOS4yMjU5NiAxOSA5LjUwNDY4VjEwLjQ5NTNDMTkgMTAuNzg2IDE4Ljc3NCAxMSAxOC40OTUzIDExSDE3LjUwNDdDMTcuMjE0IDExIDE3IDEwLjc3NCAxNyAxMC40OTUzVjkuNTA0NjhDMTcgOS4yMTQwNCAxNy4yMjYgOSAxNy41MDQ3IDlaIiBmaWxsPSIjODA4MDgwIi8+IDwvc3ZnPiA="},19624(t,e,i){"use strict";i.d(e,{J:()=>d,T:()=>l});var n=i(63200),o=i(25964),r=i(88961),s=i(98538),a=i(10767);const l=(0,o.xE)("button"),{host:p,label:u,slottedIcon:c}={host:{selector:()=>":host"},label:{selector:"::part(label)"},slottedIcon:{selector:()=>"::slotted(descope-icon)"}};let h;const d=(0,n.Zz)((0,r.DM)({triggers:[{attr:"full-width",value:"true"}]}),(0,r.RF)({mappings:{hostWidth:{property:"width"},hostMaxWidth:{...p,property:"max-width"},hostHeight:{property:"height"},hostDirection:{...p,property:"direction"},fontSize:{},fontFamily:{},fontWeight:{},cursor:{},backgroundColor:{},outlineOffset:{},outlineColor:{},outlineStyle:{},outlineWidth:{},borderRadius:{},borderColor:{},borderStyle:{},borderWidth:{},verticalPadding:[{property:"padding-top"},{property:"padding-bottom"}],horizontalPadding:[{property:"padding-right",fallback:"0.875em"},{property:"padding-left",fallback:"0.875em"}],labelTextColor:{property:"color"},iconColor:{selector:()=>"::slotted(*)",property:s.S.cssVarList.fill},labelTextDecoration:{...u,property:"text-decoration"},labelSpacing:{...u,property:"gap"},textAlign:{...u,property:"justify-content",fallback:"center"},iconSize:[{...c,property:"width"},{...c,property:"height"}]}}),a.G,r.VO,r.tQ)((0,r.tz)({slots:["","prefix","label","suffix"],wrappedEleName:"vaadin-button",style:()=>`\n\t\t\t\n\t:host {\n\t\tdisplay: inline-block;\n\t\tbox-sizing: border-box;\n\t}\n\tvaadin-button::before,\n\tvaadin-button::after {\n\t\topacity: 0;\n\t}\n\tvaadin-button {\n\t\tmargin: 0;\n\t\tmin-width: 0;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tbox-shadow: none;\n\t}\n\tvaadin-button::part(label) {\n\t\tpadding: 0;\n width: 100%;\n\t}\n\tvaadin-button::part(prefix) {\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t\t\t\n\tvaadin-button::part(prefix),\n\tvaadin-button::part(label) {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t\t\t${h}\n\t\t\tvaadin-button::part(label) { pointer-events: none; }\n\t\t\t:host {\n\t\t\t\tpadding: calc(var(${d.cssVarList.outlineWidth}) + var(${d.cssVarList.outlineOffset}));\n\t\t\t}\n :host([full-width="true"]) {\n width: var(${d.cssVarList.hostWidth});\n }\n\t\t\tvaadin-button {\n\t\t\t\theight: calc(var(${d.cssVarList.hostHeight}) - var(${d.cssVarList.outlineWidth}) - var(${d.cssVarList.outlineOffset}));\n\t\t\t}\n\t\t\t[square="true"]:not([full-width="true"]) {\n\t\t\t\twidth: calc(var(${d.cssVarList.hostWidth}) - var(${d.cssVarList.outlineWidth}) - var(${d.cssVarList.outlineOffset}));\n padding: 0;\n\t\t\t}\n\t\t`,excludeAttrsSync:["tabindex","class","style"],componentName:l})),{color:g,fontSize:y}=d.cssVarList;h=`\n\t@keyframes spin {\n\t\t0% { -webkit-transform: rotate(0deg); }\n\t\t100% { -webkit-transform: rotate(360deg); }\n\t}\n\t:host([loading="true"]) ::before {\n\t\tanimation: spin 2s linear infinite;\n\t\tposition: absolute;\n\t\tcontent: '';\n\t\tz-index: 1;\n\t\tbox-sizing: border-box;\n\t\tborder-radius: 50%;\n\t\tborder-bottom-color: transparent;\n\t\tborder-left-color: transparent;\n\t\tborder-style: solid;\n\t\tcolor: var(${g});\n\t\ttop: calc(50% - (var(${y}) / 2));\n\t\tleft: calc(50% - (var(${y}) / 2));\n\t\tborder-width: calc(var(${y}) / 10);\n\t\twidth: var(${y});\n\t\theight: var(${y});\n\t}\n\t:host([disabled="true"]),\n\t:host([loading="true"]) {\n\t\tpointer-events: none;\n\t}\n\t:host([loading="true"]) ::part(prefix),\n\t:host([loading="true"]) ::part(label) {\n\t\tvisibility: hidden;\n\t}\n`},10767(t,e,i){"use strict";i.d(e,{G:()=>n});const n=t=>class extends t{get isLoading(){return"true"===this.getAttribute("loading")}click(){this.isLoading||super.click()}}},30576(t,e,i){"use strict";i.r(e),i.d(e,{ButtonClass:()=>n.J,componentName:()=>n.T});var n=i(19624);i(83799),customElements.define(n.T,n.J)},98538(t,e,i){"use strict";i.d(e,{S:()=>l,T:()=>a});var n=i(88961),o=i(25964),r=i(8512),s=i(63200);const a=(0,o.xE)("icon"),l=(0,s.Zz)((0,n.RF)({mappings:{fill:[{},{property:r.q.cssVarList.fill}],height:{selector:()=>":host"},width:{selector:()=>":host"}}}),n.VO,n.tQ)((0,n.tz)({slots:[],wrappedEleName:"descope-image",style:()=>"\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n max-height: 100%;\n }\n ",excludeAttrsSync:["tabindex","class","style","st-height","st-width"],componentName:a}))},56737(t,e,i){"use strict";i.r(e),i.d(e,{IconClass:()=>n.S,componentName:()=>n.T}),i(53455);var n=i(98538);customElements.define(n.T,n.S)},8512(t,e,i){"use strict";i.d(e,{T:()=>l,q:()=>c});var n=i(88961),o=i(72270),r=i(63200),s=i(25964),a=i(18782);const l=(0,s.xE)("image"),p=["src","src-dark"];class u extends((0,o.qu)({componentName:l,baseSelector:"slot"})){static get observedAttributes(){return p}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML="\n\t\t<slot></slot>\n\t",(0,s.fz)("\n\t\t\t:host {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t}\n :host > slot {\n width: 100%;\n height: 100%;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tdisplay: flex;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\n ::slotted(*) {\n width: 100%;\n\t\t\t}\n\n .hidden {\n display: none;\n }\n ",this)}init(){super.init?.(),this.toggleVisibility(this.getSrc)}onThemeChange(){this.renderImage()}toggleVisibility(t){t?this.classList.remove("hidden"):this.classList.add("hidden")}get altText(){return this.getAttribute("alt")||""}get legacySrc(){return this.getAttribute("src")}get themeSrc(){return this.getAttribute(`src-${this.currentThemeName}`)}get getSrc(){return this.themeSrc||this.legacySrc}updateFillColor(t){[t,...t.querySelectorAll("*[fill]")].forEach(t=>{t.setAttribute("fill",`var(${c.cssVarList.fill}, ${t.getAttribute("fill")||"''"})`)})}renderImage(){this.toggleVisibility(this.getSrc),(0,a.m)(this.getSrc,this.altText).then(t=>{this.innerHTML="",t&&(this.updateFillColor(t),this.appendChild(t))})}shouldRender(t){const e=this.getAttribute(t);return this.getSrc===e}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i),e!==i&&this.shouldRender(t)&&this.renderImage()}}const c=(0,r.Zz)((0,n.RF)({mappings:{fill:{},height:{selector:()=>":host"},width:{selector:()=>":host"}}}),n.VO,n.tQ)(u)},18782(t,e,i){"use strict";i.d(e,{m:()=>r});var n=i(25414);const o=t=>{const e=n.A.sanitize(t,{USE_PROFILES:{svg:!0,svgFilters:!0},ADD_TAGS:["image"],FORBID_TAGS:["defs"]});return(new DOMParser).parseFromString(e,"image/svg+xml").querySelector("svg")},r=async(t,e)=>{try{let i;if((t=>t.startsWith("data:image/svg+xml;base64,"))(t)){const e=atob(t.slice(26));i=o(e)}else if("svg"===(t=>{const e=t.match(/\.([0-9a-z]+)(?:[\\?#]|$)/i);return e?e[1]:null})(t)){const e=await fetch(t),n=await e.text();i=o(n)}else i=((t,e)=>{const i=document.createElement("img");return i.setAttribute("src",t),i.setAttribute("alt",e),i})(t,e);return i.style.setProperty("max-width","100%"),i.style.setProperty("max-height","100%"),i}catch{return null}}},53455(t,e,i){"use strict";i.r(e),i.d(e,{ImageClass:()=>n.q,componentName:()=>n.T});var n=i(8512);customElements.define(n.T,n.q)},92661(t,e,i){"use strict";i.r(e),i.d(e,{MonthDayFieldPickerClass:()=>N,componentName:()=>p}),i(27092);var n=i(72270),o=i(63200),r=i(25964),s=i(88961);const a=[31,29,31,30,31,30,31,31,30,31,30,31],l=["January","February","March","April","May","June","July","August","September","October","November","December"],p=(0,r.xE)("month-day-field-picker"),u=["initial-value","picker-months","st-host-direction","disabled","full-width"],c=(0,n.yc)({componentName:p,baseSelector:"div"}),h=(t,e)=>{const i=document.createDocumentFragment();t.forEach(({id:t,name:e})=>{const n=document.createElement("div");n.className="combo-box-item",n.setAttribute("data-id",String(t)),n.setAttribute("data-name",e),n.textContent=e,i.appendChild(n)}),e.replaceChildren(i)},{picker:d,monthInput:g,dayInput:y,inputsRow:M}={picker:{selector:()=>".picker"},monthInput:{selector:()=>".month-input"},dayInput:{selector:()=>".day-input"},inputsRow:{selector:()=>".inputs-row"}},N=(0,o.Zz)((0,s.RF)({componentNameOverride:(0,r.xE)("input-wrapper")}),(0,s.RF)({mappings:{fontSize:{},fontFamily:{},hostWidth:{selector:()=>":host",property:"width"},hostDirection:{property:"direction"},pickerPadding:{...d,property:"padding"},inputsRowGap:{...M,property:"gap"},inputWidth:[{...g,property:"width"},{...y,property:"width"}]}}),s.VO,s.tQ)(class extends c{static get observedAttributes(){return[].concat(c.observedAttributes||[],u)}#t=null;#e=null;constructor(){super(),this.attachShadow({mode:"open"}).innerHTML='\n <div class="picker">\n <div class="inputs-row">\n <descope-combo-box\n class="month-input"\n bordered="true"\n label-type="static"\n allow-custom-value="false"\n full-width="true"\n item-label-path="data-name"\n item-value-path="data-id"\n ></descope-combo-box>\n <descope-combo-box\n class="day-input"\n bordered="true"\n label-type="static"\n allow-custom-value="false"\n full-width="true"\n item-label-path="data-name"\n item-value-path="data-id"\n ></descope-combo-box>\n </div>\n </div>\n ',(0,r.fz)("\n :host {\n display: inline-block;\n box-sizing: border-box;\n max-width: 100%;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .inputs-row {\n display: flex;\n }\n\n .inputs-row > descope-combo-box {\n flex: 1;\n min-width: 0;\n }\n ",this),this.monthInput=this.shadowRoot.querySelector(".month-input"),this.dayInput=this.shadowRoot.querySelector(".day-input")}get month(){return this.#t}set month(t){const e=Number(t);!Number.isInteger(e)||e<1||e>12?this.#t=null:this.#t=e,null!=this.#e&&null!=this.#t&&this.#e>a[this.#t-1]&&(this.#e=1),this.#i(),this.#n(),this.#o(),this.#r()}get day(){return this.#e}set day(t){const e=Number(t);!Number.isInteger(e)||e<1||null!=this.#t&&e>a[this.#t-1]?this.#e=null:this.#e=e,this.#o(),this.#r()}set value(t){if(!t)return void this.#s();const e=/^(0?[1-9]|1[0-2])\D(0?[1-9]|[12][0-9]|3[01])$/.exec(String(t).trim());if(!e)return;const i=Number(e[1]),n=Number(e[2]);this.month=i,this.day=n}#s(){const t=new Date;this.month=t.getMonth()+1,this.day=t.getDate()}get value(){return null==this.#t||null==this.#e?"":`${String(this.#t).padStart(2,"0")}/${String(this.#e).padStart(2,"0")}`}init(){super.init?.(),this.#a(),this.#l();const t=this.getAttribute("initial-value");t?this.value=t:null==this.#t&&this.#s(),(0,r.EA)(this,this.monthInput,{includeAttrs:["disabled","size","st-host-direction"]}),(0,r.EA)(this,this.dayInput,{includeAttrs:["disabled","size","st-host-direction"]})}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i),e!==i&&("initial-value"===t?this.value=i:"picker-months"===t&&this.#p())}get#u(){return(t=>{const e=t?.split(",");return(t=>Array.isArray(t)&&12===t.length&&12===t.filter(Boolean).length)(e)?e:l})(this.getAttribute("picker-months"))}#a(){this.#p(),this.monthInput.addEventListener("input",this.#c.bind(this))}#l(){this.dayInput.addEventListener("input",this.#h.bind(this))}#p(){h(this.#u.map((t,e)=>({id:e+1,name:t})),this.monthInput),this.#i()}#n(){const t=a[this.#t-1]??0;h((t=>Array.from({length:t},(t,e)=>({id:e+1,name:String(e+1)})))(t),this.dayInput)}#i(){this.monthInput&&setTimeout(()=>{this.monthInput&&(this.monthInput.value=null!=this.#t?String(this.#t):"")})}#o(){setTimeout(()=>{this.dayInput&&(this.dayInput.value=null!==this.#e?String(this.#e):"")})}#c(t){const e=t.target?.value,i=e?Number(e):null;i!==this.#t&&(this.month=i)}#h(t){const e=t.target?.value,i=e?Number(e):null;i!==this.#e&&(this.day=i)}#r(){this.dispatchEvent(new CustomEvent("change",{detail:{month:this.#t,day:this.#e},bubbles:!0,composed:!0}))}getValidity(){return{}}});customElements.define(p,N)},63423(t,e,i){"use strict";i.r(e),i.d(e,{MonthDayFieldClass:()=>Q,componentName:()=>x}),i(20428),i(64014),i(92661),i(56737),i(30576);var n=i(28027),o=i(19624),r=i(72270),s=i(63200),a=i(88961),l=i(25964);class p{#d=Object.freeze([]);constructor({id:t,min:e,max:i,placeholder:n},o){this.id=t,this.min=e,this.max=i,this.placeholder=n,this.onChange=o}get data(){return this.#d}set data(t){this.#d=Object.freeze(t),this.onChange?.()}get#g(){return this.data.length?this.numberValue:0}get numberValue(){return Number(this.stringValue)}get stringValue(){return(this.data.join("")||this.placeholder).padStart(this.length,"0")}get isFull(){return 10*this.numberValue>this.max||this.data.length===this.length}get isEmpty(){return this.stringValue===this.placeholder}get length(){return this.max.toString().length}set(t){this.data=t.toString().split("")}add(t){let{data:e}=this;return e=[...e,t],Number(e.join(""))>this.max?e=[t]:this.length<e.length&&(e=e.slice(1,e.length)),this.data=e,t}del(){this.data.filter(t=>"0"!==t).filter(Boolean).length?this.data=this.data.slice(0,this.data.length-1):this.data=[]}clear(){this.data=[]}inc(t){this.replaceValue(this.#g<this.max?Math.max(this.#g+(t||1),this.min):this.min)}dec(t){this.replaceValue(this.#g>this.min?Math.min(this.#g-(t||1),this.max):this.max)}isInRange(t){return t>=this.min&&t<=this.max}replaceValue(t){this.isInRange(t)&&(this.data=t.toString().padStart(this.length,0).split(""))}setMin(t){this.min=Number(t)}setMax(t){this.max=Number(t)}}const u=["MM/DD","DD/MM"],c=u[0],h="/",d=[31,29,31,30,31,30,31,31,30,31,30,31],g={id:"month",min:1,max:12,placeholder:"MM"},y={id:"day",min:1,max:31,placeholder:"DD"},M={MM:"(0?[1-9]|1[0-2])",DD:"(0?[1-9]|[12][0-9]|3[01])"},N=t=>{const e=(t=>`^${t.split(h).map(t=>M[t]).join("\\D")}$`)(t),i=(t=>{const e=t.split(h);return t=>{const i={};return e.forEach((e,n)=>{i[e]=Number(t[n+1])}),{month:i.MM,day:i.DD}}})(t),n=new RegExp(e);return{pattern:e,validate:t=>n.test(t),getParts:t=>{const e=n.exec(t);return e?i(e):null}}},m=Object.fromEntries(u.map(t=>[t,N(t)]));var b=i(49139),D=i.n(b);const T=(t,e)=>{const i=t?.trim?.();return i?m[e]?.getParts(i)??null:null},x=(0,l.xE)("month-day-field"),I=(0,r.yc)({componentName:x,baseSelector:"vaadin-popover"}),A=["format","opened","initial-value","readonly","disable-picker"],v=["picker-months","picker-label-submit","picker-label-cancel"],C=[...A,...v],E=n.w.cssVarList,{host:S,input:k,inputEleRTL:j,toggleButton:w,overlay:f,backdrop:L,bottomNav:O,navButton:z}={host:{selector:()=>":host"},input:{selector:()=>"descope-text-field"},inputEleRTL:{selector:()=>':host([st-host-direction="rtl"]) descope-text-field'},toggleButton:{selector:()=>".toggle-picker"},overlay:{selector:"vaadin-popover-overlay::part(overlay)"},backdrop:{selector:"vaadin-popover-overlay::part(backdrop)"},bottomNav:{selector:"vaadin-popover-overlay .bottom-nav"},navButton:{selector:"vaadin-popover-overlay .bottom-nav descope-button"}},Q=(0,s.Zz)((0,a.RF)({componentNameOverride:(0,l.xE)("input-wrapper")}),(0,a.RF)({mappings:{iconMargin:{...w,property:"margin-inline-end"},hostWidth:{...S,property:"width"},hostDirection:{...S,property:"direction"},textAlign:{...k,property:"text-align"},rtlInputDirection:{...j,property:E.inputDirection},rtlInputAlignment:{...j,property:E.inputTextAlign},overlayGap:{property:()=>Q.cssVarList.overlayGap},overlayBackgroundColor:{property:()=>Q.cssVarList.overlayBackgroundColor},overlayPadding:{property:()=>Q.cssVarList.overlayPadding},overlayBoxShadow:{property:()=>Q.cssVarList.overlayBoxShadow},overlayOutlineWidth:{property:()=>Q.cssVarList.overlayOutlineWidth},overlayOutlineColor:{property:()=>Q.cssVarList.overlayOutlineColor},overlayOutlineStyle:{property:()=>Q.cssVarList.overlayOutlineStyle},errorMessageIcon:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIcon},errorMessageIconSize:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconSize},errorMessageIconPadding:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconPadding},errorMessageIconRepeat:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconRepeat},errorMessageIconPosition:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconPosition},errorMessageFontSize:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageFontSize},labelFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.labelFontWeight},inputValueFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.inputValueFontWeight},inputPlaceholderFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.inputPlaceholderFontWeight},helperTextFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.helperTextFontWeight},errorMessageFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageFontWeight}}}),(0,a.mA)({name:"overlay",selector:"",mappings:{marginTop:{...f,property:"margin-top"},backgroundColor:{...f},backdropBackgroundColor:{...L,property:"background-color"},backdropPointerEvents:{...L,property:"pointer-events"},padding:{...f},boxShadow:{...f},outlineWidth:{...f},outlineColor:{...f},outlineStyle:{...f},bottomNavTopPadding:{...O,property:"padding-top"},bottomNavBottomPadding:{...O,property:"padding-bottom"},bottomNavHorizontalPadding:[{...O,property:"padding-left"},{...O,property:"padding-right"}],bottomNavAlignment:{...O,property:"justify-content"},bottomNavGap:{...O,property:"gap"},navButtonPadding:[{...z,property:o.J.cssVarList.horizontalPadding},{...z,property:o.J.cssVarList.verticalPadding}],navButtonOutlineWidth:{...z,property:o.J.cssVarList.outlineWidth}}}),a.VO,a.tQ)(class extends I{format=c;#y=0;#M=()=>{this.updateCountersDisplay(),this.#N(),this.#m()};#b=[new p(g,this.#M.bind(this)),new p(y,this.#M.bind(this))];static get observedAttributes(){return[].concat(I.observedAttributes||[],C)}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML=`\n <div>\n <descope-text-field inputmode="numeric">\n <span slot="suffix" class="toggle-picker">\n <descope-icon src="${D()}"></descope-icon>\n </span>\n </descope-text-field>\n <vaadin-popover></vaadin-popover>\n </div>\n `,(0,l.fz)('\n :host {\n display: inline-block;\n box-sizing: border-box;\n user-select: none;\n max-width: 100%;\n }\n\n :host ::slotted {\n padding: 0;\n }\n\n .toggle-picker {\n cursor: pointer;\n display: flex;\n align-self: center;\n z-index: 1;\n height: 100%;\n align-items: center;\n }\n\n :host([readonly="true"]) .toggle-picker {\n pointer-events: none;\n }\n\n .hidden {\n display: none;\n }\n ',this),this.inputElement=this.shadowRoot.querySelector("descope-text-field"),this.popoverToggleButton=this.inputElement.querySelector(".toggle-picker")}get validationTarget(){return this.inputElement}get opened(){return"true"===this.getAttribute("opened")}get monthCounter(){return this.#b.find(t=>t.id===g.id)}get dayCounter(){return this.#b.find(t=>t.id===y.id)}get sortedCounters(){return this.format.split(h).map(t=>this.#b.find(e=>e.placeholder===t))}get activeCounter(){return this.sortedCounters[this.#y]}get countersValue(){return this.sortedCounters.map(t=>t.stringValue).join(h)}get isCountersEmpty(){return this.#b.every(t=>t.isEmpty)}get isCountersOutOfRange(){return this.#b.some(t=>!t.isInRange(t.numberValue))}get disablePicker(){return"true"===this.getAttribute("disable-picker")}get overlay(){return this.baseElement.shadowRoot?.querySelector("vaadin-popover-overlay")}get backdrop(){return this.overlay?.shadowRoot?.querySelector("#backdrop")}get picker(){return this.overlay?.querySelector("descope-month-day-field-picker")}get isRTL(){const t=getComputedStyle(this.baseElement).getPropertyValue("direction");return t?"rtl"===t:"rtl"===this.getAttribute("st-host-direction")}get value(){return this.isCountersEmpty||this.isCountersOutOfRange?"":(t=this.monthCounter.numberValue,e=this.dayCounter.numberValue,this.format.replace(/MM|DD/g,i=>String("MM"===i?t:e).padStart(2,"0")));var t,e}set value(t){const e=t?T(String(t),this.format):null;e?this.#D(e.month,e.day):(this.#b.forEach(t=>t.clear()),this.clearInputEle())}get isSelectAll(){const{value:t,selectionStart:e,selectionEnd:i}=this.inputElement;return t.length===e+i}getValidity(){return this.isRequired&&this.isCountersEmpty?{valueMissing:!0}:!this.isCountersEmpty&&this.isCountersOutOfRange?{patternMismatch:!0}:{}}reportValidity(){this.inputElement.reportValidity()}#N(){const t=this.monthCounter.numberValue,e=d[t-1]??31;this.dayCounter.max!==e&&this.dayCounter.setMax(e)}#D(t,e){this.monthCounter.replaceValue(t),this.#N(),e>this.dayCounter.max?this.dayCounter.clear():this.dayCounter.replaceValue(e)}updateCountersDisplay(){this.inputElement.value=this.countersValue}#m(){this.dispatchEvent(new Event("input",{bubbles:!0}))}resetCounters(){this.#b.forEach(t=>t.clear())}clearInputEle(){this.inputElement.value=""}init(){super.init?.(),this.#T(),this.#x(),this.#M(),this.#I(),setTimeout(()=>this.#A(),0)}#I(){this.inputElement.getValidity=this.getValidity.bind(this),this.popoverToggleButton.addEventListener("click",this.#v.bind(this)),this.inputElement.addEventListener("focus",this.#C.bind(this)),this.inputElement.addEventListener("blur",this.#E.bind(this)),this.inputElement.addEventListener("click",this.#S.bind(this)),this.inputElement.addEventListener("keydown",this.#k.bind(this)),this.inputElement.addEventListener("beforeinput",this.#j.bind(this)),this.inputElement.addEventListener("pointerdown",this.#w.bind(this)),this.inputElement.addEventListener("paste",this.#f.bind(this)),(0,l.EA)(this,this.inputElement,{includeAttrs:["label","label-type","placeholder","disabled","readonly","bordered","required","full-width","st-host-direction","pattern","data-errormessage-value-missing","data-errormessage-pattern-mismatch","st-error-message-icon","st-error-message-icon-size","st-error-message-icon-padding"]})}#x(){this.baseElement.trigger=["click"],this.baseElement.withBackdrop=!0,this.baseElement.renderer=this.#L.bind(this),this.baseElement.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation()})}#O;#L(t){t.firstChild||(this.overlay.positionTarget=this.shadowRoot.querySelector(".toggle-picker"),t.appendChild(this.#z()),(t=>{const e=new CSSStyleSheet;e.insertRule(":host{display:block!important;}"),t?.shadowRoot?.adoptedStyleSheets?.push(e)})(this.baseElement),this.backdrop?.addEventListener("click",this.closePopover.bind(this)),(0,l.fz)("\n .overlay-hidden { visibility: hidden; }\n .bottom-nav {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n }\n ",t.getRootNode())),this.#Q(),t.classList.add("overlay-hidden"),setTimeout(()=>{this.#U(),t.classList.remove("overlay-hidden")},100)}#U(){const t=this.shadowRoot.querySelector("vaadin-popover").shadowRoot;if(!t||!this.picker)return;this.#O?.replaceSync("vaadin-popover-overlay::part(overlay) { margin-left: 0; }");const e=document.body.getBoundingClientRect(),i=this.getBoundingClientRect(),n=this.picker.getBoundingClientRect(),o=this.isRTL?"right":"left",r=i[o]-n[o],s=n.left,a=e.width-n.right;let p;p=r>0?Math.min(r,a):-1*Math.min(Math.abs(r),s);const u=`\n vaadin-popover-overlay::part(overlay) {\n margin-left: ${p}px;\n }\n `;this.#O?this.#O.replaceSync(u):this.#O=(0,l.fz)(u,t)}#z(){const t=document.createElement("span");t.innerHTML='\n <descope-month-day-field-picker></descope-month-day-field-picker>\n <nav class="bottom-nav">\n <descope-button class="cancel-button" variant="link" mode="primary"></descope-button>\n <descope-button class="submit-button" variant="link" mode="primary" disabled="true"></descope-button>\n </nav>\n ';const e=t.querySelector("descope-month-day-field-picker");return this.cancelButton=t.querySelector(".cancel-button"),this.submitButton=t.querySelector(".submit-button"),this.#V(),this.cancelButton.addEventListener("click",this.#P.bind(this)),this.submitButton.addEventListener("click",this.#Y.bind(this)),e.addEventListener("change",this.#F.bind(this)),t}#A(){this.overlay&&(this.overlay._attachOverlay=()=>this.overlay.bringToFront(),this.overlay._detachOverlay=()=>{},this.overlay._enterModalState=()=>{})}#Q(){this.picker&&(this.isCountersEmpty?this.picker.value="":(this.picker.month=this.monthCounter.isEmpty?null:this.monthCounter.numberValue,this.picker.day=this.dayCounter.isEmpty?null:this.dayCounter.numberValue),(0,l.EA)(this,this.picker,{includeAttrs:["st-host-direction","readonly","disabled","picker-months"]}))}get#R(){return this.getAttribute("picker-label-submit")||"Done"}get#W(){return this.getAttribute("picker-label-cancel")||"Cancel"}#V(){this.submitButton&&(this.submitButton.textContent=this.#R,this.cancelButton.textContent=this.#W)}#F(t){const{month:e,day:i}=t.detail||{};this.#B(null==e||null==i)}#B(t){if(!this.submitButton)return;const e=this.submitButton.shadowRoot?.querySelector("vaadin-button");t?(this.submitButton.setAttribute("disabled","true"),e?.setAttribute("disabled","true")):(this.submitButton.removeAttribute("disabled"),e?.removeAttribute("disabled"))}#P(){this.closePopover()}#Y(){if(this.isReadOnly)return void this.closePopover();const t=this.picker?.month,e=this.picker?.day;null!=t&&null!=e?(this.#D(t,e),this.#m(),this.closePopover()):this.closePopover()}#v(){this.opened?this.closePopover():this.openPopover()}openPopover(){this.disablePicker||this.setAttribute("opened","true")}closePopover(){this.removeAttribute("opened"),this.inputElement.focus()}#$(t){t?this.popoverToggleButton.classList.remove("hidden"):this.popoverToggleButton.classList.add("hidden")}#j(t){var e;t.preventDefault(),this.#q(),t.data&&(e=t.data,String(e||"").trim()&&!Number.isNaN(Number(e)))?(this.#J(t.data),this.updateCountersDisplay()):t.inputType&&this.#Z(t)}#q(){this.isSelectAll&&this.#H()}#J(t){this.activeCounter.add(t),this.activeCounter.isFull&&this.#G(),this.#_()}#K(t){const[e,i]=this.sortedCounters.map(t=>t.length);return t<=e?0:1}#X(t){this.#y=this.#K(t.target?.selectionStart||this.inputElement.selectionStart)}#H(){this.#y=0}#G(){this.#y<this.#b.length-1&&(this.#y=Math.min(this.#y+1,1))}#tt(){this.#y>0&&(this.#y=0)}#_(){this.#y<0||setTimeout(()=>{const t=this.sortedCounters.slice(0,this.#y).reduce((t,e)=>t+e.length,this.#y);this.inputElement.setSelectionRange(t,t+this.sortedCounters[this.#y].length)})}#k(t){t.metaKey||t.ctrlKey?"x"===t.key.toLowerCase()&&this.#et(t):(this.#q(),"ArrowUp"===t.key?this.activeCounter.inc():"ArrowDown"===t.key?this.activeCounter.dec():"ArrowRight"===t.key?this.#G():"ArrowLeft"===t.key&&this.#tt(),this.#_())}#Z(t){this.isReadOnly||(this.opened&&this.closePopover(),this.activeCounter&&("deleteContentBackward"===t.inputType&&this.#it(),this.#_()))}#it(){if(this.isSelectAll)return void this.#nt();const t=this.activeCounter;t.isEmpty?(this.#tt(),this.#_()):t.set(""),setTimeout(()=>{this.updateCountersDisplay(),this.#_()})}#S(t){this.opened||(t.preventDefault(),this.#X(t),this.#_())}#w(t){setTimeout(()=>this.#S(t),150)}#C(){this.isReadOnly||setTimeout(()=>this.#ot())}#E(){this.opened||this.inputElement.value===this.format&&this.clearInputEle()}#ot(){this.inputElement.value||(this.inputElement.value=this.format),this.#H(),this.inputElement.setSelectionRange(0,this.sortedCounters[0].length)}#nt(){this.resetCounters(),this.#H(),this.#ot()}#rt(t){Object.keys(m).includes(t)&&(this.format=t,this.#T(),this.updateCountersDisplay())}#T(){const t=this.getAttribute("format")||this.format||c,e=m[t]?t:c;this.format=e,this.setAttribute("pattern",m[e].pattern)}#et(t){t.preventDefault(),this.isSelectAll?(this.#st(this.countersValue),this.#nt()):(this.#st(this.activeCounter.stringValue),this.activeCounter.set("")),this.#_()}#st(t){try{navigator.clipboard.writeText(t)}catch(t){console.error("Failed to copy month/day value:",t)}}#f(t){t.preventDefault();const e=(t.clipboardData||window.clipboardData).getData("Text"),i=T(e,this.format);if(i)return this.#D(i.month,i.day),this.#M(),void setTimeout(()=>this.inputElement.setSelectionRange(0,this.inputElement.value.length));const n=Number(e);n&&this.activeCounter.isInRange(n)&&(this.activeCounter.set(String(n)),setTimeout(()=>this.#_()))}#at(t){this.value||setTimeout(()=>{t&&(this.value=t)})}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i),e!==i&&("disable-picker"===t&&this.#$("true"!==i),A.includes(t)?(i&&"format"===t&&this.#rt(i),"initial-value"===t&&this.#at(i)):"picker-label-submit"===t||"picker-label-cancel"===t?this.#V():v.includes(t)&&(i?this.picker?.setAttribute(t,i):this.picker?.removeAttribute(t)))}});customElements.define(x,Q)},28027(t,e,i){"use strict";i.d(e,{T:()=>l,w:()=>u});var n=i(88961),o=i(63200),r=i(25964),s=i(79673),a=i(47656);const l=(0,r.xE)("text-field"),p=["type","label-type","copy-to-clipboard"],u=(0,o.Zz)((0,n.RF)({mappings:a.A}),n.VO,(0,n.OZ)({proxyProps:["value","selectionStart","selectionEnd"],useProxyTargets:!0}),n.tQ,t=>class extends t{static get observedAttributes(){return p.concat(t.observedAttributes||[])}icon;init(){super.init?.()}renderCopyToClipboard(t){if(!t)return void this.icon?.remove();const e={icon:"vaadin:copy-o",title:"Copy",style:"cursor: pointer"},i={icon:"vaadin:check-circle-o",title:"Copied",style:"cursor: initial"};this.icon=Object.assign(document.createElement("vaadin-icon"),{slot:"suffix",...e}),this.baseElement.appendChild(this.icon),this.icon.addEventListener("click",()=>{navigator.clipboard.writeText(this.value),Object.assign(this.icon,i),setTimeout(()=>{Object.assign(this.icon,e)},5e3)})}onLabelClick(){this.focus()}attributeChangedCallback(t,e,i){super.attributeChangeCallback?.(t,e,i),"type"===t&&this.baseElement._setType(i),e!==i&&("label-type"===t?"floating"===i?this.addEventListener("click",this.onLabelClick):this.removeEventListener("click",this.onLabelClick):"copy-to-clipboard"===t&&this.renderCopyToClipboard("true"===i))}})((0,n.tz)({slots:["prefix","suffix"],wrappedEleName:"vaadin-text-field",style:()=>`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tpadding: calc(var(${u.cssVarList.inputOutlineWidth}) + var(${u.cssVarList.inputOutlineOffset}));\n box-sizing: border-box;\n\t\t\t}\n :host(:is([readonly], [disabled])) ::slotted(:is(input, textarea):placeholder-shown) {\n opacity: 1;\n }\n\n vaadin-text-field[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n ${(0,s.$J)("vaadin-text-field")}\n\t\t\t${(0,s.cy)(u.cssVarList)}\n\t\t\t${(0,s.LJ)("vaadin-text-field",u.cssVarList)}\n ${(0,s.Kl)()}\n\n vaadin-text-field vaadin-icon {\n align-self: center;\n }\n\t\t`,excludeAttrsSync:["tabindex","style"],componentName:l}))},64014(t,e,i){"use strict";i.r(e),i.d(e,{TextFieldClass:()=>n.w,componentName:()=>n.T}),i(11284),i(37182),i(95260);var n=i(28027);customElements.define(n.T,n.w)},47656(t,e,i){"use strict";i.d(e,{A:()=>b});const{host:n,label:o,placeholder:r,requiredIndicator:s,inputField:a,input:l,inputMask:p,helperText:u,errorMessage:c,disabledPlaceholder:h,inputDisabled:d,inputIcon:g,externalInput:y,externalInputDisabled:M,externalPlaceholder:N,externalDisabledPlaceholder:m}={host:{selector:()=>":host"},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},placeholder:[{selector:"> input:placeholder-shown"},{selector:()=>":host::slotted(input:placeholder-shown)"}],disabledPlaceholder:{selector:"> input:disabled::placeholder"},inputField:{selector:"::part(input-field)"},input:{selector:"input"},inputMask:{selector:"::part(input-field)::before"},inputDisabled:{selector:"input:disabled"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"},inputIcon:{selector:"vaadin-icon"},externalInput:{selector:()=>"::slotted(input)"},externalInputDisabled:{selector:()=>"::slotted(input:disabled)"},externalPlaceholder:{selector:()=>"::slotted(input:placeholder-shown)"},externalDisabledPlaceholder:{selector:()=>"::slotted(input:disabled::placeholder)"}},b={fontSize:[{},n],fontFamily:[o,a,u,c],labelFontSize:{...o,property:"font-size"},labelFontWeight:{...o,property:"font-weight"},inputValueFontWeight:[{...l,property:"font-weight"},{...y,property:"font-weight"}],inputPlaceholderFontWeight:[{selector:()=>":host input:placeholder-shown",property:"font-weight"},{...N,property:"font-weight"}],helperTextFontWeight:{...u,property:"font-weight"},errorMessageFontWeight:{...c,property:"font-weight"},labelTextColor:[{...o,property:"color"},{...s,property:"color"},{...o,property:"-webkit-text-fill-color"},{...s,property:"-webkit-text-fill-color"}],hostWidth:{...n,property:"width"},hostMinWidth:{...n,property:"min-width"},hostDirection:{...n,property:"direction"},inputDirection:{...l,property:"direction"},inputBackgroundColor:[{...a,property:"background-color"},{...p,property:"background-color"}],errorMessageTextColor:{...c,property:"color"},errorMessageIcon:{...c,property:"background-image"},errorMessageIconSize:{...c,property:"background-size"},errorMessageIconPadding:{...c,property:"padding-inline-start"},errorMessageIconRepeat:{...c,property:"background-repeat"},errorMessageIconPosition:{...c,property:"background-position"},errorMessageFontSize:{...c,property:"font-size"},helperTextColor:{...u,property:"-webkit-text-fill-color"},inputValueTextColor:[{...a,property:"color"},{...d,property:"-webkit-text-fill-color"},{...M,property:"-webkit-text-fill-color"}],inputCaretTextColor:[{...l,property:"caret-color"},{...y,property:"caret-color"}],labelRequiredIndicator:{...s,property:"content"},inputBorderColor:{...a,property:"border-color"},inputBorderWidth:{...a,property:"border-width"},inputBorderStyle:{...a,property:"border-style"},inputBorderRadius:{...a,property:"border-radius"},inputHeight:{...a,property:"height"},inputHorizontalPadding:[{...l,property:"padding-left"},{...l,property:"padding-right"},{...y,property:"padding-left"},{...y,property:"padding-right"}],inputOutlineColor:{...a,property:"outline-color"},inputOutlineStyle:{...a,property:"outline-style"},inputOutlineWidth:{...a,property:"outline-width"},inputOutlineOffset:{...a,property:"outline-offset"},textAlign:{},inputTextAlign:[{...l,property:"text-align"},{...y,property:"text-align"}],inputPlaceholderColor:[{selector:()=>":host input:placeholder-shown",property:"color"},{...N,property:"color"},{...r,property:"color"},{...h,property:"-webkit-text-fill-color"},{...m,property:"-webkit-text-fill-color"}],labelPosition:{...o,property:"position"},labelTopPosition:{...o,property:"top"},labelHorizontalPosition:[{...o,property:"left"},{...o,property:"right"}],inputTransformY:{...o,property:"transform"},inputTransition:{...o,property:"transition"},marginInlineStart:{...o,property:"margin-inline-start"},placeholderOpacity:[{selector:"> input:placeholder-shown",property:"opacity"},{...N,property:"opacity"}],inputVerticalAlignment:[{...a,property:"align-items"},{...y,property:"align-items"}],valueInputHeight:[{...l,property:"height"},{...y,property:"height"}],valueInputMarginBottom:[{...l,property:"margin-bottom"},{...y,property:"margin-bottom"}],inputIconOffset:[{...g,property:"margin-right"},{...g,property:"margin-left"}],inputIconSize:{...g,property:"font-size"},inputIconColor:{...g,property:"color"},inputTextSecurity:[{...l,property:"-webkit-text-security"},{...l,property:"text-security"},{...y,property:"-webkit-text-security"},{...y,property:"text-security"}]}}}]);
|
|
1
|
+
(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[9585],{49139(t){t.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05IDVIMTVWNC41MDQ2OEMxNSA0LjIxNDA0IDE1LjIyNiA0IDE1LjUwNDcgNEgxNi40OTUzQzE2Ljc4NiA0IDE3IDQuMjI1OTUgMTcgNC41MDQ2OFY1SDE4Ljc1NjhDMTkuMzAyOCA1IDE5Ljc1IDUuNDQ3MjUgMTkuNzUgNS45OTg5NlY3LjAwMTA0QzE5Ljc1IDcuNTU3MzQgMTkuMzA1MyA4IDE4Ljc1NjggOEg1LjI0MzE3QzQuNjk3MTcgOCA0LjI1IDcuNTUyNzUgNC4yNSA3LjAwMTA0VjUuOTk4OTZDNC4yNSA1LjQ0MjY2IDQuNjk0NjYgNSA1LjI0MzE3IDVIN1Y0LjUwNDY4QzcgNC4yMTQwNCA3LjIyNTk2IDQgNy41MDQ2OCA0SDguNDk1MzJDOC43ODU5NiA0IDkgNC4yMjU5NSA5IDQuNTA0NjhWNVpNNS41MDQ2OCA5SDYuNDk1MzJDNi43ODU5NiA5IDcgOS4yMjU5NiA3IDkuNTA0NjhWMTAuNDk1M0M3IDEwLjc4NiA2Ljc3NDA0IDExIDYuNDk1MzIgMTFINS41MDQ2OEM1LjIxNDA0IDExIDUgMTAuNzc0IDUgMTAuNDk1M1Y5LjUwNDY4QzUgOS4yMTQwNCA1LjIyNTk1IDkgNS41MDQ2OCA5Wk04LjUwNDY4IDlIOS40OTUzMkM5Ljc4NTk2IDkgMTAgOS4yMjU5NiAxMCA5LjUwNDY4VjEwLjQ5NTNDMTAgMTAuNzg2IDkuNzc0MDQgMTEgOS40OTUzMiAxMUg4LjUwNDY4QzguMjE0MDQgMTEgOCAxMC43NzQgOCAxMC40OTUzVjkuNTA0NjhDOCA5LjIxNDA0IDguMjI1OTYgOSA4LjUwNDY4IDlaTTExLjUwNDcgOUgxMi40OTUzQzEyLjc4NiA5IDEzIDkuMjI1OTYgMTMgOS41MDQ2OFYxMC40OTUzQzEzIDEwLjc4NiAxMi43NzQgMTEgMTIuNDk1MyAxMUgxMS41MDQ3QzExLjIxNCAxMSAxMSAxMC43NzQgMTEgMTAuNDk1M1Y5LjUwNDY4QzExIDkuMjE0MDQgMTEuMjI2IDkgMTEuNTA0NyA5Wk01LjUwNDY4IDEySDYuNDk1MzJDNi43ODU5NiAxMiA3IDEyLjIyNiA3IDEyLjUwNDdWMTMuNDk1M0M3IDEzLjc4NiA2Ljc3NDA0IDE0IDYuNDk1MzIgMTRINS41MDQ2OEM1LjIxNDA0IDE0IDUgMTMuNzc0IDUgMTMuNDk1M1YxMi41MDQ3QzUgMTIuMjE0IDUuMjI1OTUgMTIgNS41MDQ2OCAxMlpNOC41MDQ2OCAxMkg5LjQ5NTMyQzkuNzg1OTYgMTIgMTAgMTIuMjI2IDEwIDEyLjUwNDdWMTMuNDk1M0MxMCAxMy43ODYgOS43NzQwNCAxNCA5LjQ5NTMyIDE0SDguNTA0NjhDOC4yMTQwNCAxNCA4IDEzLjc3NCA4IDEzLjQ5NTNWMTIuNTA0N0M4IDEyLjIxNCA4LjIyNTk2IDEyIDguNTA0NjggMTJaTTExLjUwNDcgMTJIMTIuNDk1M0MxMi43ODYgMTIgMTMgMTIuMjI2IDEzIDEyLjUwNDdWMTMuNDk1M0MxMyAxMy43ODYgMTIuNzc0IDE0IDEyLjQ5NTMgMTRIMTEuNTA0N0MxMS4yMTQgMTQgMTEgMTMuNzc0IDExIDEzLjQ5NTNWMTIuNTA0N0MxMSAxMi4yMTQgMTEuMjI2IDEyIDExLjUwNDcgMTJaTTUuNTA0NjggMTVINi40OTUzMkM2Ljc4NTk2IDE1IDcgMTUuMjI2IDcgMTUuNTA0N1YxNi40OTUzQzcgMTYuNzg2IDYuNzc0MDQgMTcgNi40OTUzMiAxN0g1LjUwNDY4QzUuMjE0MDQgMTcgNSAxNi43NzQgNSAxNi40OTUzVjE1LjUwNDdDNSAxNS4yMTQgNS4yMjU5NSAxNSA1LjUwNDY4IDE1Wk04LjUwNDY4IDE1SDkuNDk1MzJDOS43ODU5NiAxNSAxMCAxNS4yMjYgMTAgMTUuNTA0N1YxNi40OTUzQzEwIDE2Ljc4NiA5Ljc3NDA0IDE3IDkuNDk1MzIgMTdIOC41MDQ2OEM4LjIxNDA0IDE3IDggMTYuNzc0IDggMTYuNDk1M1YxNS41MDQ3QzggMTUuMjE0IDguMjI1OTYgMTUgOC41MDQ2OCAxNVpNMTEuNTA0NyAxNUgxMi40OTUzQzEyLjc4NiAxNSAxMyAxNS4yMjYgMTMgMTUuNTA0N1YxNi40OTUzQzEzIDE2Ljc4NiAxMi43NzQgMTcgMTIuNDk1MyAxN0gxMS41MDQ3QzExLjIxNCAxNyAxMSAxNi43NzQgMTEgMTYuNDk1M1YxNS41MDQ3QzExIDE1LjIxNCAxMS4yMjYgMTUgMTEuNTA0NyAxNVpNMTQuNTA0NyA5SDE1LjQ5NTNDMTUuNzg2IDkgMTYgOS4yMjU5NiAxNiA5LjUwNDY4VjEwLjQ5NTNDMTYgMTAuNzg2IDE1Ljc3NCAxMSAxNS40OTUzIDExSDE0LjUwNDdDMTQuMjE0IDExIDE0IDEwLjc3NCAxNCAxMC40OTUzVjkuNTA0NjhDMTQgOS4yMTQwNCAxNC4yMjYgOSAxNC41MDQ3IDlaTTE0LjUwNDcgMTJIMTUuNDk1M0MxNS43ODYgMTIgMTYgMTIuMjI2IDE2IDEyLjUwNDdWMTMuNDk1M0MxNiAxMy43ODYgMTUuNzc0IDE0IDE1LjQ5NTMgMTRIMTQuNTA0N0MxNC4yMTQgMTQgMTQgMTMuNzc0IDE0IDEzLjQ5NTNWMTIuNTA0N0MxNCAxMi4yMTQgMTQuMjI2IDEyIDE0LjUwNDcgMTJaTTE0LjUwNDcgMTVIMTUuNDk1M0MxNS43ODYgMTUgMTYgMTUuMjI2IDE2IDE1LjUwNDdWMTYuNDk1M0MxNiAxNi43ODYgMTUuNzc0IDE3IDE1LjQ5NTMgMTdIMTQuNTA0N0MxNC4yMTQgMTcgMTQgMTYuNzc0IDE0IDE2LjQ5NTNWMTUuNTA0N0MxNCAxNS4yMTQgMTQuMjI2IDE1IDE0LjUwNDcgMTVaTTE3LjUwNDcgMTVIMTguNDk1M0MxOC43ODYgMTUgMTkgMTUuMjI2IDE5IDE1LjUwNDdWMTYuNDk1M0MxOSAxNi43ODYgMTguNzc0IDE3IDE4LjQ5NTMgMTdIMTcuNTA0N0MxNy4yMTQgMTcgMTcgMTYuNzc0IDE3IDE2LjQ5NTNWMTUuNTA0N0MxNyAxNS4yMTQgMTcuMjI2IDE1IDE3LjUwNDcgMTVaTTUuNTA0NjggMThINi40OTUzMkM2Ljc4NTk2IDE4IDcgMTguMjI2IDcgMTguNTA0N1YxOS40OTUzQzcgMTkuNzg2IDYuNzc0MDQgMjAgNi40OTUzMiAyMEg1LjUwNDY4QzUuMjE0MDQgMjAgNSAxOS43NzQgNSAxOS40OTUzVjE4LjUwNDdDNSAxOC4yMTQgNS4yMjU5NSAxOCA1LjUwNDY4IDE4Wk04LjUwNDY4IDE4SDkuNDk1MzJDOS43ODU5NiAxOCAxMCAxOC4yMjYgMTAgMTguNTA0N1YxOS40OTUzQzEwIDE5Ljc4NiA5Ljc3NDA0IDIwIDkuNDk1MzIgMjBIOC41MDQ2OEM4LjIxNDA0IDIwIDggMTkuNzc0IDggMTkuNDk1M1YxOC41MDQ3QzggMTguMjE0IDguMjI1OTYgMTggOC41MDQ2OCAxOFpNMTEuNTA0NyAxOEgxMi40OTUzQzEyLjc4NiAxOCAxMyAxOC4yMjYgMTMgMTguNTA0N1YxOS40OTUzQzEzIDE5Ljc4NiAxMi43NzQgMjAgMTIuNDk1MyAyMEgxMS41MDQ3QzExLjIxNCAyMCAxMSAxOS43NzQgMTEgMTkuNDk1M1YxOC41MDQ3QzExIDE4LjIxNCAxMS4yMjYgMTggMTEuNTA0NyAxOFpNMTQuNTA0NyAxOEgxNS40OTUzQzE1Ljc4NiAxOCAxNiAxOC4yMjYgMTYgMTguNTA0N1YxOS40OTUzQzE2IDE5Ljc4NiAxNS43NzQgMjAgMTUuNDk1MyAyMEgxNC41MDQ3QzE0LjIxNCAyMCAxNCAxOS43NzQgMTQgMTkuNDk1M1YxOC41MDQ3QzE0IDE4LjIxNCAxNC4yMjYgMTggMTQuNTA0NyAxOFpNMTcuNTA0NyAxOEgxOC40OTUzQzE4Ljc4NiAxOCAxOSAxOC4yMjYgMTkgMTguNTA0N1YxOS40OTUzQzE5IDE5Ljc4NiAxOC43NzQgMjAgMTguNDk1MyAyMEgxNy41MDQ3QzE3LjIxNCAyMCAxNyAxOS43NzQgMTcgMTkuNDk1M1YxOC41MDQ3QzE3IDE4LjIxNCAxNy4yMjYgMTggMTcuNTA0NyAxOFpNMTcuNTA0NyAxMkgxOC40OTUzQzE4Ljc4NiAxMiAxOSAxMi4yMjYgMTkgMTIuNTA0N1YxMy40OTUzQzE5IDEzLjc4NiAxOC43NzQgMTQgMTguNDk1MyAxNEgxNy41MDQ3QzE3LjIxNCAxNCAxNyAxMy43NzQgMTcgMTMuNDk1M1YxMi41MDQ3QzE3IDEyLjIxNCAxNy4yMjYgMTIgMTcuNTA0NyAxMlpNMTcuNTA0NyA5SDE4LjQ5NTNDMTguNzg2IDkgMTkgOS4yMjU5NiAxOSA5LjUwNDY4VjEwLjQ5NTNDMTkgMTAuNzg2IDE4Ljc3NCAxMSAxOC40OTUzIDExSDE3LjUwNDdDMTcuMjE0IDExIDE3IDEwLjc3NCAxNyAxMC40OTUzVjkuNTA0NjhDMTcgOS4yMTQwNCAxNy4yMjYgOSAxNy41MDQ3IDlaIiBmaWxsPSIjODA4MDgwIi8+IDwvc3ZnPiA="},56737(t,e,i){"use strict";i.r(e),i.d(e,{IconClass:()=>n.S,componentName:()=>n.T}),i(53455);var n=i(98538);customElements.define(n.T,n.S)},53455(t,e,i){"use strict";i.r(e),i.d(e,{ImageClass:()=>n.q,componentName:()=>n.T});var n=i(8512);customElements.define(n.T,n.q)},92661(t,e,i){"use strict";i.r(e),i.d(e,{MonthDayFieldPickerClass:()=>y,componentName:()=>l}),i(27092);var n=i(72270),s=i(63200),o=i(25964),r=i(88961);const a=[31,29,31,30,31,30,31,31,30,31,30,31],u=["January","February","March","April","May","June","July","August","September","October","November","December"],l=(0,o.xE)("month-day-field-picker"),h=["initial-value","picker-months","st-host-direction","disabled","full-width"],c=(0,n.yc)({componentName:l,baseSelector:"div"}),d=(t,e)=>{const i=document.createDocumentFragment();t.forEach(({id:t,name:e})=>{const n=document.createElement("div");n.className="combo-box-item",n.setAttribute("data-id",String(t)),n.setAttribute("data-name",e),n.textContent=e,i.appendChild(n)}),e.replaceChildren(i)},{picker:p,monthInput:g,dayInput:M,inputsRow:N}={picker:{selector:()=>".picker"},monthInput:{selector:()=>".month-input"},dayInput:{selector:()=>".day-input"},inputsRow:{selector:()=>".inputs-row"}},y=(0,s.Zz)((0,r.RF)({componentNameOverride:(0,o.xE)("input-wrapper")}),(0,r.RF)({mappings:{fontSize:{},fontFamily:{},hostWidth:{selector:()=>":host",property:"width"},hostDirection:{property:"direction"},pickerPadding:{...p,property:"padding"},inputsRowGap:{...N,property:"gap"},inputWidth:[{...g,property:"width"},{...M,property:"width"}]}}),r.VO,r.tQ)(class extends c{static get observedAttributes(){return[].concat(c.observedAttributes||[],h)}#t=null;#e=null;constructor(){super(),this.attachShadow({mode:"open"}).innerHTML='\n <div class="picker">\n <div class="inputs-row">\n <descope-combo-box\n class="month-input"\n bordered="true"\n label-type="static"\n allow-custom-value="false"\n full-width="true"\n item-label-path="data-name"\n item-value-path="data-id"\n ></descope-combo-box>\n <descope-combo-box\n class="day-input"\n bordered="true"\n label-type="static"\n allow-custom-value="false"\n full-width="true"\n item-label-path="data-name"\n item-value-path="data-id"\n ></descope-combo-box>\n </div>\n </div>\n ',(0,o.fz)("\n :host {\n display: inline-block;\n box-sizing: border-box;\n max-width: 100%;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .inputs-row {\n display: flex;\n }\n\n .inputs-row > descope-combo-box {\n flex: 1;\n min-width: 0;\n }\n ",this),this.monthInput=this.shadowRoot.querySelector(".month-input"),this.dayInput=this.shadowRoot.querySelector(".day-input")}get month(){return this.#t}set month(t){const e=Number(t);!Number.isInteger(e)||e<1||e>12?this.#t=null:this.#t=e,null!=this.#e&&null!=this.#t&&this.#e>a[this.#t-1]&&(this.#e=1),this.#i(),this.#n(),this.#s(),this.#o()}get day(){return this.#e}set day(t){const e=Number(t);!Number.isInteger(e)||e<1||null!=this.#t&&e>a[this.#t-1]?this.#e=null:this.#e=e,this.#s(),this.#o()}set value(t){if(!t)return void this.#r();const e=/^(0?[1-9]|1[0-2])\D(0?[1-9]|[12][0-9]|3[01])$/.exec(String(t).trim());if(!e)return;const i=Number(e[1]),n=Number(e[2]);this.month=i,this.day=n}#r(){const t=new Date;this.month=t.getMonth()+1,this.day=t.getDate()}get value(){return null==this.#t||null==this.#e?"":`${String(this.#t).padStart(2,"0")}/${String(this.#e).padStart(2,"0")}`}init(){super.init?.(),this.#a(),this.#u();const t=this.getAttribute("initial-value");t?this.value=t:null==this.#t&&this.#r(),(0,o.EA)(this,this.monthInput,{includeAttrs:["disabled","size","st-host-direction"]}),(0,o.EA)(this,this.dayInput,{includeAttrs:["disabled","size","st-host-direction"]})}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i),e!==i&&("initial-value"===t?this.value=i:"picker-months"===t&&this.#l())}get#h(){return(t=>{const e=t?.split(",");return(t=>Array.isArray(t)&&12===t.length&&12===t.filter(Boolean).length)(e)?e:u})(this.getAttribute("picker-months"))}#a(){this.#l(),this.monthInput.addEventListener("input",this.#c.bind(this))}#u(){this.dayInput.addEventListener("input",this.#d.bind(this))}#l(){d(this.#h.map((t,e)=>({id:e+1,name:t})),this.monthInput),this.#i()}#n(){const t=a[this.#t-1]??0;d((t=>Array.from({length:t},(t,e)=>({id:e+1,name:String(e+1)})))(t),this.dayInput)}#i(){this.monthInput&&setTimeout(()=>{this.monthInput&&(this.monthInput.value=null!=this.#t?String(this.#t):"")})}#s(){setTimeout(()=>{this.dayInput&&(this.dayInput.value=null!==this.#e?String(this.#e):"")})}#c(t){const e=t.target?.value,i=e?Number(e):null;i!==this.#t&&(this.month=i)}#d(t){const e=t.target?.value,i=e?Number(e):null;i!==this.#e&&(this.day=i)}#o(){this.dispatchEvent(new CustomEvent("change",{detail:{month:this.#t,day:this.#e},bubbles:!0,composed:!0}))}getValidity(){return{}}});customElements.define(l,y)},63423(t,e,i){"use strict";i.r(e),i.d(e,{MonthDayFieldClass:()=>U,componentName:()=>A}),i(20428),i(64014),i(92661),i(56737),i(30576);var n=i(28027),s=i(19624),o=i(72270),r=i(63200),a=i(88961),u=i(25964);class l{#p=Object.freeze([]);constructor({id:t,min:e,max:i,placeholder:n},s){this.id=t,this.min=e,this.max=i,this.placeholder=n,this.onChange=s}get data(){return this.#p}set data(t){this.#p=Object.freeze(t),this.onChange?.()}get#g(){return this.data.length?this.numberValue:0}get numberValue(){return Number(this.stringValue)}get stringValue(){return(this.data.join("")||this.placeholder).padStart(this.length,"0")}get isFull(){return 10*this.numberValue>this.max||this.data.length===this.length}get isEmpty(){return this.stringValue===this.placeholder}get length(){return this.max.toString().length}set(t){this.data=t.toString().split("")}add(t){let{data:e}=this;return e=[...e,t],Number(e.join(""))>this.max?e=[t]:this.length<e.length&&(e=e.slice(1,e.length)),this.data=e,t}del(){this.data.filter(t=>"0"!==t).filter(Boolean).length?this.data=this.data.slice(0,this.data.length-1):this.data=[]}clear(){this.data=[]}inc(t){this.replaceValue(this.#g<this.max?Math.max(this.#g+(t||1),this.min):this.min)}dec(t){this.replaceValue(this.#g>this.min?Math.min(this.#g-(t||1),this.max):this.max)}isInRange(t){return t>=this.min&&t<=this.max}replaceValue(t){this.isInRange(t)&&(this.data=t.toString().padStart(this.length,0).split(""))}setMin(t){this.min=Number(t)}setMax(t){this.max=Number(t)}}const h=["MM/DD","DD/MM"],c=h[0],d="/",p=[31,29,31,30,31,30,31,31,30,31,30,31],g={id:"month",min:1,max:12,placeholder:"MM"},M={id:"day",min:1,max:31,placeholder:"DD"},N={MM:"(0?[1-9]|1[0-2])",DD:"(0?[1-9]|[12][0-9]|3[01])"},y=t=>{const e=(t=>`^${t.split(d).map(t=>N[t]).join("\\D")}$`)(t),i=(t=>{const e=t.split(d);return t=>{const i={};return e.forEach((e,n)=>{i[e]=Number(t[n+1])}),{month:i.MM,day:i.DD}}})(t),n=new RegExp(e);return{pattern:e,validate:t=>n.test(t),getParts:t=>{const e=n.exec(t);return e?i(e):null}}},D=Object.fromEntries(h.map(t=>[t,y(t)]));var m=i(49139),T=i.n(m);const I=(t,e)=>{const i=t?.trim?.();return i?D[e]?.getParts(i)??null:null},A=(0,u.xE)("month-day-field"),x=(0,o.yc)({componentName:A,baseSelector:"vaadin-popover"}),C=["format","opened","initial-value","readonly","disable-picker"],E=["picker-months","picker-label-submit","picker-label-cancel"],b=[...C,...E],v=n.w.cssVarList,{host:j,input:S,inputEleRTL:k,toggleButton:L,overlay:O,backdrop:z,bottomNav:Q,navButton:w}={host:{selector:()=>":host"},input:{selector:()=>"descope-text-field"},inputEleRTL:{selector:()=>':host([st-host-direction="rtl"]) descope-text-field'},toggleButton:{selector:()=>".toggle-picker"},overlay:{selector:"vaadin-popover-overlay::part(overlay)"},backdrop:{selector:"vaadin-popover-overlay::part(backdrop)"},bottomNav:{selector:"vaadin-popover-overlay .bottom-nav"},navButton:{selector:"vaadin-popover-overlay .bottom-nav descope-button"}},U=(0,r.Zz)((0,a.RF)({componentNameOverride:(0,u.xE)("input-wrapper")}),(0,a.RF)({mappings:{iconMargin:{...L,property:"margin-inline-end"},hostWidth:{...j,property:"width"},hostDirection:{...j,property:"direction"},textAlign:{...S,property:"text-align"},rtlInputDirection:{...k,property:v.inputDirection},rtlInputAlignment:{...k,property:v.inputTextAlign},overlayGap:{property:()=>U.cssVarList.overlayGap},overlayBackgroundColor:{property:()=>U.cssVarList.overlayBackgroundColor},overlayPadding:{property:()=>U.cssVarList.overlayPadding},overlayBoxShadow:{property:()=>U.cssVarList.overlayBoxShadow},overlayOutlineWidth:{property:()=>U.cssVarList.overlayOutlineWidth},overlayOutlineColor:{property:()=>U.cssVarList.overlayOutlineColor},overlayOutlineStyle:{property:()=>U.cssVarList.overlayOutlineStyle},errorMessageIcon:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIcon},errorMessageIconSize:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconSize},errorMessageIconPadding:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconPadding},errorMessageIconRepeat:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconRepeat},errorMessageIconPosition:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconPosition},errorMessageFontSize:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageFontSize},labelFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.labelFontWeight},inputValueFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.inputValueFontWeight},inputPlaceholderFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.inputPlaceholderFontWeight},helperTextFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.helperTextFontWeight},errorMessageFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageFontWeight}}}),(0,a.mA)({name:"overlay",selector:"",mappings:{marginTop:{...O,property:"margin-top"},backgroundColor:{...O},backdropBackgroundColor:{...z,property:"background-color"},backdropPointerEvents:{...z,property:"pointer-events"},padding:{...O},boxShadow:{...O},outlineWidth:{...O},outlineColor:{...O},outlineStyle:{...O},bottomNavTopPadding:{...Q,property:"padding-top"},bottomNavBottomPadding:{...Q,property:"padding-bottom"},bottomNavHorizontalPadding:[{...Q,property:"padding-left"},{...Q,property:"padding-right"}],bottomNavAlignment:{...Q,property:"justify-content"},bottomNavGap:{...Q,property:"gap"},navButtonPadding:[{...w,property:s.J.cssVarList.horizontalPadding},{...w,property:s.J.cssVarList.verticalPadding}],navButtonOutlineWidth:{...w,property:s.J.cssVarList.outlineWidth}}}),a.VO,a.tQ)(class extends x{format=c;#M=0;#N=()=>{this.updateCountersDisplay(),this.#y(),this.#D()};#m=[new l(g,this.#N.bind(this)),new l(M,this.#N.bind(this))];static get observedAttributes(){return[].concat(x.observedAttributes||[],b)}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML=`\n <div>\n <descope-text-field inputmode="numeric">\n <span slot="suffix" class="toggle-picker">\n <descope-icon src="${T()}"></descope-icon>\n </span>\n </descope-text-field>\n <vaadin-popover></vaadin-popover>\n </div>\n `,(0,u.fz)('\n :host {\n display: inline-block;\n box-sizing: border-box;\n user-select: none;\n max-width: 100%;\n }\n\n :host ::slotted {\n padding: 0;\n }\n\n .toggle-picker {\n cursor: pointer;\n display: flex;\n align-self: center;\n z-index: 1;\n height: 100%;\n align-items: center;\n }\n\n :host([readonly="true"]) .toggle-picker {\n pointer-events: none;\n }\n\n .hidden {\n display: none;\n }\n ',this),this.inputElement=this.shadowRoot.querySelector("descope-text-field"),this.popoverToggleButton=this.inputElement.querySelector(".toggle-picker")}get validationTarget(){return this.inputElement}get opened(){return"true"===this.getAttribute("opened")}get monthCounter(){return this.#m.find(t=>t.id===g.id)}get dayCounter(){return this.#m.find(t=>t.id===M.id)}get sortedCounters(){return this.format.split(d).map(t=>this.#m.find(e=>e.placeholder===t))}get activeCounter(){return this.sortedCounters[this.#M]}get countersValue(){return this.sortedCounters.map(t=>t.stringValue).join(d)}get isCountersEmpty(){return this.#m.every(t=>t.isEmpty)}get isCountersOutOfRange(){return this.#m.some(t=>!t.isInRange(t.numberValue))}get disablePicker(){return"true"===this.getAttribute("disable-picker")}get overlay(){return this.baseElement.shadowRoot?.querySelector("vaadin-popover-overlay")}get backdrop(){return this.overlay?.shadowRoot?.querySelector("#backdrop")}get picker(){return this.overlay?.querySelector("descope-month-day-field-picker")}get isRTL(){const t=getComputedStyle(this.baseElement).getPropertyValue("direction");return t?"rtl"===t:"rtl"===this.getAttribute("st-host-direction")}get value(){return this.isCountersEmpty||this.isCountersOutOfRange?"":(t=this.monthCounter.numberValue,e=this.dayCounter.numberValue,this.format.replace(/MM|DD/g,i=>String("MM"===i?t:e).padStart(2,"0")));var t,e}set value(t){const e=t?I(String(t),this.format):null;e?this.#T(e.month,e.day):(this.#m.forEach(t=>t.clear()),this.clearInputEle())}get isSelectAll(){const{value:t,selectionStart:e,selectionEnd:i}=this.inputElement;return t.length===e+i}getValidity(){return this.isRequired&&this.isCountersEmpty?{valueMissing:!0}:!this.isCountersEmpty&&this.isCountersOutOfRange?{patternMismatch:!0}:{}}reportValidity(){this.inputElement.reportValidity()}#y(){const t=this.monthCounter.numberValue,e=p[t-1]??31;this.dayCounter.max!==e&&this.dayCounter.setMax(e)}#T(t,e){this.monthCounter.replaceValue(t),this.#y(),e>this.dayCounter.max?this.dayCounter.clear():this.dayCounter.replaceValue(e)}updateCountersDisplay(){this.inputElement.value=this.countersValue}#D(){this.dispatchEvent(new Event("input",{bubbles:!0}))}resetCounters(){this.#m.forEach(t=>t.clear())}clearInputEle(){this.inputElement.value=""}init(){super.init?.(),this.#I(),this.#A(),this.#N(),this.#x(),setTimeout(()=>this.#C(),0)}#x(){this.inputElement.getValidity=this.getValidity.bind(this),this.popoverToggleButton.addEventListener("click",this.#E.bind(this)),this.inputElement.addEventListener("focus",this.#b.bind(this)),this.inputElement.addEventListener("blur",this.#v.bind(this)),this.inputElement.addEventListener("click",this.#j.bind(this)),this.inputElement.addEventListener("keydown",this.#S.bind(this)),this.inputElement.addEventListener("beforeinput",this.#k.bind(this)),this.inputElement.addEventListener("pointerdown",this.#L.bind(this)),this.inputElement.addEventListener("paste",this.#O.bind(this)),(0,u.EA)(this,this.inputElement,{includeAttrs:["label","label-type","placeholder","disabled","readonly","bordered","required","full-width","st-host-direction","pattern","data-errormessage-value-missing","data-errormessage-pattern-mismatch","st-error-message-icon","st-error-message-icon-size","st-error-message-icon-padding"]})}#A(){this.baseElement.trigger=["click"],this.baseElement.withBackdrop=!0,this.baseElement.renderer=this.#z.bind(this),this.baseElement.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation()})}#Q;#z(t){t.firstChild||(this.overlay.positionTarget=this.shadowRoot.querySelector(".toggle-picker"),t.appendChild(this.#w()),(t=>{const e=new CSSStyleSheet;e.insertRule(":host{display:block!important;}"),t?.shadowRoot?.adoptedStyleSheets?.push(e)})(this.baseElement),this.backdrop?.addEventListener("click",this.closePopover.bind(this)),(0,u.fz)("\n .overlay-hidden { visibility: hidden; }\n .bottom-nav {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n }\n ",t.getRootNode())),this.#U(),t.classList.add("overlay-hidden"),setTimeout(()=>{this.#f(),t.classList.remove("overlay-hidden")},100)}#f(){const t=this.shadowRoot.querySelector("vaadin-popover").shadowRoot;if(!t||!this.picker)return;this.#Q?.replaceSync("vaadin-popover-overlay::part(overlay) { margin-left: 0; }");const e=document.body.getBoundingClientRect(),i=this.getBoundingClientRect(),n=this.picker.getBoundingClientRect(),s=this.isRTL?"right":"left",o=i[s]-n[s],r=n.left,a=e.width-n.right;let l;l=o>0?Math.min(o,a):-1*Math.min(Math.abs(o),r);const h=`\n vaadin-popover-overlay::part(overlay) {\n margin-left: ${l}px;\n }\n `;this.#Q?this.#Q.replaceSync(h):this.#Q=(0,u.fz)(h,t)}#w(){const t=document.createElement("span");t.innerHTML='\n <descope-month-day-field-picker></descope-month-day-field-picker>\n <nav class="bottom-nav">\n <descope-button class="cancel-button" variant="link" mode="primary"></descope-button>\n <descope-button class="submit-button" variant="link" mode="primary" disabled="true"></descope-button>\n </nav>\n ';const e=t.querySelector("descope-month-day-field-picker");return this.cancelButton=t.querySelector(".cancel-button"),this.submitButton=t.querySelector(".submit-button"),this.#Y(),this.cancelButton.addEventListener("click",this.#V.bind(this)),this.submitButton.addEventListener("click",this.#P.bind(this)),e.addEventListener("change",this.#R.bind(this)),t}#C(){this.overlay&&(this.overlay._attachOverlay=()=>this.overlay.bringToFront(),this.overlay._detachOverlay=()=>{},this.overlay._enterModalState=()=>{})}#U(){this.picker&&(this.isCountersEmpty?this.picker.value="":(this.picker.month=this.monthCounter.isEmpty?null:this.monthCounter.numberValue,this.picker.day=this.dayCounter.isEmpty?null:this.dayCounter.numberValue),(0,u.EA)(this,this.picker,{includeAttrs:["st-host-direction","readonly","disabled","picker-months"]}))}get#F(){return this.getAttribute("picker-label-submit")||"Done"}get#B(){return this.getAttribute("picker-label-cancel")||"Cancel"}#Y(){this.submitButton&&(this.submitButton.textContent=this.#F,this.cancelButton.textContent=this.#B)}#R(t){const{month:e,day:i}=t.detail||{};this.#W(null==e||null==i)}#W(t){if(!this.submitButton)return;const e=this.submitButton.shadowRoot?.querySelector("vaadin-button");t?(this.submitButton.setAttribute("disabled","true"),e?.setAttribute("disabled","true")):(this.submitButton.removeAttribute("disabled"),e?.removeAttribute("disabled"))}#V(){this.closePopover()}#P(){if(this.isReadOnly)return void this.closePopover();const t=this.picker?.month,e=this.picker?.day;null!=t&&null!=e?(this.#T(t,e),this.#D(),this.closePopover()):this.closePopover()}#E(){this.opened?this.closePopover():this.openPopover()}openPopover(){this.disablePicker||this.setAttribute("opened","true")}closePopover(){this.removeAttribute("opened"),this.inputElement.focus()}#J(t){t?this.popoverToggleButton.classList.remove("hidden"):this.popoverToggleButton.classList.add("hidden")}#k(t){var e;t.preventDefault(),this.#q(),t.data&&(e=t.data,String(e||"").trim()&&!Number.isNaN(Number(e)))?(this.#Z(t.data),this.updateCountersDisplay()):t.inputType&&this.#G(t)}#q(){this.isSelectAll&&this.#_()}#Z(t){this.activeCounter.add(t),this.activeCounter.isFull&&this.#H(),this.#$()}#K(t){const[e,i]=this.sortedCounters.map(t=>t.length);return t<=e?0:1}#X(t){this.#M=this.#K(t.target?.selectionStart||this.inputElement.selectionStart)}#_(){this.#M=0}#H(){this.#M<this.#m.length-1&&(this.#M=Math.min(this.#M+1,1))}#tt(){this.#M>0&&(this.#M=0)}#$(){this.#M<0||setTimeout(()=>{const t=this.sortedCounters.slice(0,this.#M).reduce((t,e)=>t+e.length,this.#M);this.inputElement.setSelectionRange(t,t+this.sortedCounters[this.#M].length)})}#S(t){t.metaKey||t.ctrlKey?"x"===t.key.toLowerCase()&&this.#et(t):(this.#q(),"ArrowUp"===t.key?this.activeCounter.inc():"ArrowDown"===t.key?this.activeCounter.dec():"ArrowRight"===t.key?this.#H():"ArrowLeft"===t.key&&this.#tt(),this.#$())}#G(t){this.isReadOnly||(this.opened&&this.closePopover(),this.activeCounter&&("deleteContentBackward"===t.inputType&&this.#it(),this.#$()))}#it(){if(this.isSelectAll)return void this.#nt();const t=this.activeCounter;t.isEmpty?(this.#tt(),this.#$()):t.set(""),setTimeout(()=>{this.updateCountersDisplay(),this.#$()})}#j(t){this.opened||(t.preventDefault(),this.#X(t),this.#$())}#L(t){setTimeout(()=>this.#j(t),150)}#b(){this.isReadOnly||setTimeout(()=>this.#st())}#v(){this.opened||this.inputElement.value===this.format&&this.clearInputEle()}#st(){this.inputElement.value||(this.inputElement.value=this.format),this.#_(),this.inputElement.setSelectionRange(0,this.sortedCounters[0].length)}#nt(){this.resetCounters(),this.#_(),this.#st()}#ot(t){Object.keys(D).includes(t)&&(this.format=t,this.#I(),this.updateCountersDisplay())}#I(){const t=this.getAttribute("format")||this.format||c,e=D[t]?t:c;this.format=e,this.setAttribute("pattern",D[e].pattern)}#et(t){t.preventDefault(),this.isSelectAll?(this.#rt(this.countersValue),this.#nt()):(this.#rt(this.activeCounter.stringValue),this.activeCounter.set("")),this.#$()}#rt(t){try{navigator.clipboard.writeText(t)}catch(t){console.error("Failed to copy month/day value:",t)}}#O(t){t.preventDefault();const e=(t.clipboardData||window.clipboardData).getData("Text"),i=I(e,this.format);if(i)return this.#T(i.month,i.day),this.#N(),void setTimeout(()=>this.inputElement.setSelectionRange(0,this.inputElement.value.length));const n=Number(e);n&&this.activeCounter.isInRange(n)&&(this.activeCounter.set(String(n)),setTimeout(()=>this.#$()))}#at(t){this.value||setTimeout(()=>{t&&(this.value=t)})}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i),e!==i&&("disable-picker"===t&&this.#J("true"!==i),C.includes(t)?(i&&"format"===t&&this.#ot(i),"initial-value"===t&&this.#at(i)):"picker-label-submit"===t||"picker-label-cancel"===t?this.#Y():E.includes(t)&&(i?this.picker?.setAttribute(t,i):this.picker?.removeAttribute(t)))}});customElements.define(A,U)}}]);
|
|
2
2
|
//# sourceMappingURL=descope-month-day-field.js.map
|