@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descope-month-day-field.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/calendar.svg","webpack://@descope/web-components-ui/../components/descope-button/src/component/ButtonClass.js","webpack://@descope/web-components-ui/../components/descope-button/src/component/clickableMixin.js","webpack://@descope/web-components-ui/../components/descope-button/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-icon/src/component/IconClass.js","webpack://@descope/web-components-ui/../components/descope-icon/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-image/src/component/ImageClass.js","webpack://@descope/web-components-ui/../components/descope-image/src/component/helpers.js","webpack://@descope/web-components-ui/../components/descope-image/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/consts.js","webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/MonthDayFieldPickerClass.js","webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/MonthDayFieldCounter.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/consts.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/formats.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/helpers.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/MonthDayFieldClass.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-text-field/src/component/TextFieldClass.js","webpack://@descope/web-components-ui/../components/descope-text-field/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-text-field/src/component/textFieldMappings.js"],"sourcesContent":["module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05IDVIMTVWNC41MDQ2OEMxNSA0LjIxNDA0IDE1LjIyNiA0IDE1LjUwNDcgNEgxNi40OTUzQzE2Ljc4NiA0IDE3IDQuMjI1OTUgMTcgNC41MDQ2OFY1SDE4Ljc1NjhDMTkuMzAyOCA1IDE5Ljc1IDUuNDQ3MjUgMTkuNzUgNS45OTg5NlY3LjAwMTA0QzE5Ljc1IDcuNTU3MzQgMTkuMzA1MyA4IDE4Ljc1NjggOEg1LjI0MzE3QzQuNjk3MTcgOCA0LjI1IDcuNTUyNzUgNC4yNSA3LjAwMTA0VjUuOTk4OTZDNC4yNSA1LjQ0MjY2IDQuNjk0NjYgNSA1LjI0MzE3IDVIN1Y0LjUwNDY4QzcgNC4yMTQwNCA3LjIyNTk2IDQgNy41MDQ2OCA0SDguNDk1MzJDOC43ODU5NiA0IDkgNC4yMjU5NSA5IDQuNTA0NjhWNVpNNS41MDQ2OCA5SDYuNDk1MzJDNi43ODU5NiA5IDcgOS4yMjU5NiA3IDkuNTA0NjhWMTAuNDk1M0M3IDEwLjc4NiA2Ljc3NDA0IDExIDYuNDk1MzIgMTFINS41MDQ2OEM1LjIxNDA0IDExIDUgMTAuNzc0IDUgMTAuNDk1M1Y5LjUwNDY4QzUgOS4yMTQwNCA1LjIyNTk1IDkgNS41MDQ2OCA5Wk04LjUwNDY4IDlIOS40OTUzMkM5Ljc4NTk2IDkgMTAgOS4yMjU5NiAxMCA5LjUwNDY4VjEwLjQ5NTNDMTAgMTAuNzg2IDkuNzc0MDQgMTEgOS40OTUzMiAxMUg4LjUwNDY4QzguMjE0MDQgMTEgOCAxMC43NzQgOCAxMC40OTUzVjkuNTA0NjhDOCA5LjIxNDA0IDguMjI1OTYgOSA4LjUwNDY4IDlaTTExLjUwNDcgOUgxMi40OTUzQzEyLjc4NiA5IDEzIDkuMjI1OTYgMTMgOS41MDQ2OFYxMC40OTUzQzEzIDEwLjc4NiAxMi43NzQgMTEgMTIuNDk1MyAxMUgxMS41MDQ3QzExLjIxNCAxMSAxMSAxMC43NzQgMTEgMTAuNDk1M1Y5LjUwNDY4QzExIDkuMjE0MDQgMTEuMjI2IDkgMTEuNTA0NyA5Wk01LjUwNDY4IDEySDYuNDk1MzJDNi43ODU5NiAxMiA3IDEyLjIyNiA3IDEyLjUwNDdWMTMuNDk1M0M3IDEzLjc4NiA2Ljc3NDA0IDE0IDYuNDk1MzIgMTRINS41MDQ2OEM1LjIxNDA0IDE0IDUgMTMuNzc0IDUgMTMuNDk1M1YxMi41MDQ3QzUgMTIuMjE0IDUuMjI1OTUgMTIgNS41MDQ2OCAxMlpNOC41MDQ2OCAxMkg5LjQ5NTMyQzkuNzg1OTYgMTIgMTAgMTIuMjI2IDEwIDEyLjUwNDdWMTMuNDk1M0MxMCAxMy43ODYgOS43NzQwNCAxNCA5LjQ5NTMyIDE0SDguNTA0NjhDOC4yMTQwNCAxNCA4IDEzLjc3NCA4IDEzLjQ5NTNWMTIuNTA0N0M4IDEyLjIxNCA4LjIyNTk2IDEyIDguNTA0NjggMTJaTTExLjUwNDcgMTJIMTIuNDk1M0MxMi43ODYgMTIgMTMgMTIuMjI2IDEzIDEyLjUwNDdWMTMuNDk1M0MxMyAxMy43ODYgMTIuNzc0IDE0IDEyLjQ5NTMgMTRIMTEuNTA0N0MxMS4yMTQgMTQgMTEgMTMuNzc0IDExIDEzLjQ5NTNWMTIuNTA0N0MxMSAxMi4yMTQgMTEuMjI2IDEyIDExLjUwNDcgMTJaTTUuNTA0NjggMTVINi40OTUzMkM2Ljc4NTk2IDE1IDcgMTUuMjI2IDcgMTUuNTA0N1YxNi40OTUzQzcgMTYuNzg2IDYuNzc0MDQgMTcgNi40OTUzMiAxN0g1LjUwNDY4QzUuMjE0MDQgMTcgNSAxNi43NzQgNSAxNi40OTUzVjE1LjUwNDdDNSAxNS4yMTQgNS4yMjU5NSAxNSA1LjUwNDY4IDE1Wk04LjUwNDY4IDE1SDkuNDk1MzJDOS43ODU5NiAxNSAxMCAxNS4yMjYgMTAgMTUuNTA0N1YxNi40OTUzQzEwIDE2Ljc4NiA5Ljc3NDA0IDE3IDkuNDk1MzIgMTdIOC41MDQ2OEM4LjIxNDA0IDE3IDggMTYuNzc0IDggMTYuNDk1M1YxNS41MDQ3QzggMTUuMjE0IDguMjI1OTYgMTUgOC41MDQ2OCAxNVpNMTEuNTA0NyAxNUgxMi40OTUzQzEyLjc4NiAxNSAxMyAxNS4yMjYgMTMgMTUuNTA0N1YxNi40OTUzQzEzIDE2Ljc4NiAxMi43NzQgMTcgMTIuNDk1MyAxN0gxMS41MDQ3QzExLjIxNCAxNyAxMSAxNi43NzQgMTEgMTYuNDk1M1YxNS41MDQ3QzExIDE1LjIxNCAxMS4yMjYgMTUgMTEuNTA0NyAxNVpNMTQuNTA0NyA5SDE1LjQ5NTNDMTUuNzg2IDkgMTYgOS4yMjU5NiAxNiA5LjUwNDY4VjEwLjQ5NTNDMTYgMTAuNzg2IDE1Ljc3NCAxMSAxNS40OTUzIDExSDE0LjUwNDdDMTQuMjE0IDExIDE0IDEwLjc3NCAxNCAxMC40OTUzVjkuNTA0NjhDMTQgOS4yMTQwNCAxNC4yMjYgOSAxNC41MDQ3IDlaTTE0LjUwNDcgMTJIMTUuNDk1M0MxNS43ODYgMTIgMTYgMTIuMjI2IDE2IDEyLjUwNDdWMTMuNDk1M0MxNiAxMy43ODYgMTUuNzc0IDE0IDE1LjQ5NTMgMTRIMTQuNTA0N0MxNC4yMTQgMTQgMTQgMTMuNzc0IDE0IDEzLjQ5NTNWMTIuNTA0N0MxNCAxMi4yMTQgMTQuMjI2IDEyIDE0LjUwNDcgMTJaTTE0LjUwNDcgMTVIMTUuNDk1M0MxNS43ODYgMTUgMTYgMTUuMjI2IDE2IDE1LjUwNDdWMTYuNDk1M0MxNiAxNi43ODYgMTUuNzc0IDE3IDE1LjQ5NTMgMTdIMTQuNTA0N0MxNC4yMTQgMTcgMTQgMTYuNzc0IDE0IDE2LjQ5NTNWMTUuNTA0N0MxNCAxNS4yMTQgMTQuMjI2IDE1IDE0LjUwNDcgMTVaTTE3LjUwNDcgMTVIMTguNDk1M0MxOC43ODYgMTUgMTkgMTUuMjI2IDE5IDE1LjUwNDdWMTYuNDk1M0MxOSAxNi43ODYgMTguNzc0IDE3IDE4LjQ5NTMgMTdIMTcuNTA0N0MxNy4yMTQgMTcgMTcgMTYuNzc0IDE3IDE2LjQ5NTNWMTUuNTA0N0MxNyAxNS4yMTQgMTcuMjI2IDE1IDE3LjUwNDcgMTVaTTUuNTA0NjggMThINi40OTUzMkM2Ljc4NTk2IDE4IDcgMTguMjI2IDcgMTguNTA0N1YxOS40OTUzQzcgMTkuNzg2IDYuNzc0MDQgMjAgNi40OTUzMiAyMEg1LjUwNDY4QzUuMjE0MDQgMjAgNSAxOS43NzQgNSAxOS40OTUzVjE4LjUwNDdDNSAxOC4yMTQgNS4yMjU5NSAxOCA1LjUwNDY4IDE4Wk04LjUwNDY4IDE4SDkuNDk1MzJDOS43ODU5NiAxOCAxMCAxOC4yMjYgMTAgMTguNTA0N1YxOS40OTUzQzEwIDE5Ljc4NiA5Ljc3NDA0IDIwIDkuNDk1MzIgMjBIOC41MDQ2OEM4LjIxNDA0IDIwIDggMTkuNzc0IDggMTkuNDk1M1YxOC41MDQ3QzggMTguMjE0IDguMjI1OTYgMTggOC41MDQ2OCAxOFpNMTEuNTA0NyAxOEgxMi40OTUzQzEyLjc4NiAxOCAxMyAxOC4yMjYgMTMgMTguNTA0N1YxOS40OTUzQzEzIDE5Ljc4NiAxMi43NzQgMjAgMTIuNDk1MyAyMEgxMS41MDQ3QzExLjIxNCAyMCAxMSAxOS43NzQgMTEgMTkuNDk1M1YxOC41MDQ3QzExIDE4LjIxNCAxMS4yMjYgMTggMTEuNTA0NyAxOFpNMTQuNTA0NyAxOEgxNS40OTUzQzE1Ljc4NiAxOCAxNiAxOC4yMjYgMTYgMTguNTA0N1YxOS40OTUzQzE2IDE5Ljc4NiAxNS43NzQgMjAgMTUuNDk1MyAyMEgxNC41MDQ3QzE0LjIxNCAyMCAxNCAxOS43NzQgMTQgMTkuNDk1M1YxOC41MDQ3QzE0IDE4LjIxNCAxNC4yMjYgMTggMTQuNTA0NyAxOFpNMTcuNTA0NyAxOEgxOC40OTUzQzE4Ljc4NiAxOCAxOSAxOC4yMjYgMTkgMTguNTA0N1YxOS40OTUzQzE5IDE5Ljc4NiAxOC43NzQgMjAgMTguNDk1MyAyMEgxNy41MDQ3QzE3LjIxNCAyMCAxNyAxOS43NzQgMTcgMTkuNDk1M1YxOC41MDQ3QzE3IDE4LjIxNCAxNy4yMjYgMTggMTcuNTA0NyAxOFpNMTcuNTA0NyAxMkgxOC40OTUzQzE4Ljc4NiAxMiAxOSAxMi4yMjYgMTkgMTIuNTA0N1YxMy40OTUzQzE5IDEzLjc4NiAxOC43NzQgMTQgMTguNDk1MyAxNEgxNy41MDQ3QzE3LjIxNCAxNCAxNyAxMy43NzQgMTcgMTMuNDk1M1YxMi41MDQ3QzE3IDEyLjIxNCAxNy4yMjYgMTIgMTcuNTA0NyAxMlpNMTcuNTA0NyA5SDE4LjQ5NTNDMTguNzg2IDkgMTkgOS4yMjU5NiAxOSA5LjUwNDY4VjEwLjQ5NTNDMTkgMTAuNzg2IDE4Ljc3NCAxMSAxOC40OTUzIDExSDE3LjUwNDdDMTcuMjE0IDExIDE3IDEwLjc3NCAxNyAxMC40OTUzVjkuNTA0NjhDMTcgOS4yMTQwNCAxNy4yMjYgOSAxNy41MDQ3IDlaIiBmaWxsPSIjODA4MDgwIi8+IDwvc3ZnPiA=\"","import { compose } from '@descope-ui/common/utils';\nimport { getComponentName } from '@descope-ui/common/components-helpers';\nimport {\n createStyleMixin,\n draggableMixin,\n createProxy,\n componentNameValidationMixin,\n stretchMixin,\n} from '@descope-ui/common/components-mixins';\nimport { IconClass } from '@descope-ui/descope-icon/class';\nimport { clickableMixin } from './clickableMixin';\n\nexport const componentName = getComponentName('button');\n\nconst resetStyles = `\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\nconst iconStyles = `\n\tvaadin-button::part(prefix),\n\tvaadin-button::part(label) {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n`;\n\nconst editorOverrides = `vaadin-button::part(label) { pointer-events: none; }`;\n\nconst { host, label, slottedIcon } = {\n host: { selector: () => ':host' },\n label: { selector: '::part(label)' },\n slottedIcon: { selector: () => '::slotted(descope-icon)' },\n};\n\nlet loadingIndicatorStyles;\n\nexport const ButtonClass = compose(\n stretchMixin({ triggers: [{ attr: 'full-width', value: 'true' }] }),\n createStyleMixin({\n mappings: {\n hostWidth: { property: 'width' },\n hostMaxWidth: { ...host, property: 'max-width' },\n hostHeight: { property: 'height' },\n hostDirection: { ...host, property: 'direction' },\n fontSize: {},\n fontFamily: {},\n fontWeight: {},\n\n cursor: {},\n backgroundColor: {},\n\n outlineOffset: {},\n outlineColor: {},\n outlineStyle: {},\n outlineWidth: {},\n\n borderRadius: {},\n borderColor: {},\n borderStyle: {},\n borderWidth: {},\n\n verticalPadding: [\n { property: 'padding-top' },\n { property: 'padding-bottom' },\n ],\n horizontalPadding: [\n { property: 'padding-right', fallback: '0.875em' },\n { property: 'padding-left', fallback: '0.875em' },\n ],\n\n labelTextColor: { property: 'color' },\n iconColor: {\n selector: () => `::slotted(*)`,\n property: IconClass.cssVarList.fill,\n },\n labelTextDecoration: { ...label, property: 'text-decoration' },\n labelSpacing: { ...label, property: 'gap' },\n textAlign: { ...label, property: 'justify-content', fallback: 'center' },\n\n iconSize: [\n { ...slottedIcon, property: 'width' },\n { ...slottedIcon, property: 'height' },\n ],\n },\n }),\n clickableMixin,\n draggableMixin,\n componentNameValidationMixin,\n)(\n createProxy({\n slots: ['', 'prefix', 'label', 'suffix'],\n wrappedEleName: 'vaadin-button',\n style: () => `\n\t\t\t${resetStyles}\n\t\t\t${iconStyles}\n\t\t\t${loadingIndicatorStyles}\n\t\t\t${editorOverrides}\n\t\t\t:host {\n\t\t\t\tpadding: calc(var(${ButtonClass.cssVarList.outlineWidth}) + var(${ButtonClass.cssVarList.outlineOffset}));\n\t\t\t}\n :host([full-width=\"true\"]) {\n width: var(${ButtonClass.cssVarList.hostWidth});\n }\n\t\t\tvaadin-button {\n\t\t\t\theight: calc(var(${ButtonClass.cssVarList.hostHeight}) - var(${ButtonClass.cssVarList.outlineWidth}) - var(${ButtonClass.cssVarList.outlineOffset}));\n\t\t\t}\n\t\t\t[square=\"true\"]:not([full-width=\"true\"]) {\n\t\t\t\twidth: calc(var(${ButtonClass.cssVarList.hostWidth}) - var(${ButtonClass.cssVarList.outlineWidth}) - var(${ButtonClass.cssVarList.outlineOffset}));\n padding: 0;\n\t\t\t}\n\t\t`,\n excludeAttrsSync: ['tabindex', 'class', 'style'],\n componentName,\n }),\n);\n\nconst { color, fontSize } = ButtonClass.cssVarList;\nloadingIndicatorStyles = `\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(${color});\n\t\ttop: calc(50% - (var(${fontSize}) / 2));\n\t\tleft: calc(50% - (var(${fontSize}) / 2));\n\t\tborder-width: calc(var(${fontSize}) / 10);\n\t\twidth: var(${fontSize});\n\t\theight: var(${fontSize});\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`;\n","export const clickableMixin = (superclass) =>\n class ClickableMixinClass extends superclass {\n get isLoading() {\n return this.getAttribute('loading') === 'true';\n }\n\n click() {\n this.isLoading || super.click();\n }\n };\n","import { componentName, ButtonClass } from './ButtonClass';\nimport '@vaadin/button';\n\ncustomElements.define(componentName, ButtonClass);\n\nexport { ButtonClass, componentName };\n","import {\n componentNameValidationMixin,\n createProxy,\n createStyleMixin,\n draggableMixin,\n} from '@descope-ui/common/components-mixins';\nimport { getComponentName } from '@descope-ui/common/components-helpers';\nimport { ImageClass } from '@descope-ui/descope-image/class';\nimport { compose } from '@descope-ui/common/utils';\n\nexport const componentName = getComponentName('icon');\n\nexport const IconClass = compose(\n createStyleMixin({\n mappings: {\n fill: [{}, { property: ImageClass.cssVarList.fill }],\n height: { selector: () => ':host' },\n width: { selector: () => ':host' },\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(\n createProxy({\n slots: [],\n wrappedEleName: 'descope-image',\n style: () => `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n max-height: 100%;\n }\n `,\n excludeAttrsSync: ['tabindex', 'class', 'style', 'st-height', 'st-width'],\n componentName,\n }),\n);\n","import '@descope-ui/descope-image';\n\nimport { componentName, IconClass } from './IconClass';\n\ncustomElements.define(componentName, IconClass);\n\nexport { IconClass, componentName };\n"," \nimport {\n createStyleMixin,\n draggableMixin,\n componentNameValidationMixin,\n} from '@descope-ui/common/components-mixins';\nimport { createBaseClass } from '@descope-ui/common/base-classes';\nimport { compose } from '@descope-ui/common/utils';\nimport { getComponentName } from '@descope-ui/common/components-helpers';\nimport { createImage } from './helpers';\nimport { injectStyle } from '@descope-ui/common/components-helpers';\n\nexport const componentName = getComponentName('image');\n\nconst srcAttrs = ['src', 'src-dark'];\n\nclass RawImage extends createBaseClass({\n componentName,\n baseSelector: 'slot',\n}) {\n static get observedAttributes() {\n return srcAttrs;\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n\t\t<slot></slot>\n\t`;\n\n injectStyle(\n `\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 `,\n this,\n );\n }\n\n init() {\n super.init?.();\n this.toggleVisibility(this.getSrc);\n }\n\n onThemeChange() {\n this.renderImage();\n }\n\n toggleVisibility(isVisible) {\n if (isVisible) {\n this.classList.remove('hidden');\n } else {\n this.classList.add('hidden');\n }\n }\n\n get altText() {\n return this.getAttribute('alt') || '';\n }\n\n get legacySrc() {\n return this.getAttribute('src');\n }\n\n get themeSrc() {\n return this.getAttribute(`src-${this.currentThemeName}`);\n }\n\n get getSrc() {\n return this.themeSrc || this.legacySrc;\n }\n\n // in order to fill an SVG with `currentColor` override all of its `fill` and `path` nodes\n // with the value from the `st-fill` attribute\n \n updateFillColor(node) {\n // set fill to root node and all its relevant selectors\n const elementsToReplace = [node, ...node.querySelectorAll('*[fill]')];\n\n elementsToReplace.forEach((ele) => {\n ele.setAttribute(\n 'fill',\n `var(${ImageClass.cssVarList.fill}, ${ele.getAttribute('fill') || \"''\"})`,\n );\n });\n }\n\n renderImage() {\n this.toggleVisibility(this.getSrc);\n\n createImage(this.getSrc, this.altText).then((res) => {\n this.innerHTML = '';\n if (res) {\n this.updateFillColor(res);\n this.appendChild(res);\n }\n });\n }\n\n // render only when src attribute matches current theme\n shouldRender(src) {\n const srcVal = this.getAttribute(src);\n return this.getSrc === srcVal;\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (oldValue === newValue) return;\n\n if (this.shouldRender(attrName)) {\n this.renderImage();\n }\n }\n}\n\nexport const ImageClass = compose(\n createStyleMixin({\n mappings: {\n fill: {},\n height: { selector: () => ':host' },\n width: { selector: () => ':host' },\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawImage);\n","import DOMPurify from 'dompurify';\n\nconst getFileExtension = (path) => {\n const match = path.match(/\\.([0-9a-z]+)(?:[\\\\?#]|$)/i);\n return match ? match[1] : null;\n};\n\nconst base64Prefix = 'data:image/svg+xml;base64,';\n\nconst isBase64Svg = (src) => src.startsWith(base64Prefix);\n\nconst createImgEle = (src, altText) => {\n const ele = document.createElement('img');\n ele.setAttribute('src', src);\n ele.setAttribute('alt', altText);\n return ele;\n};\n\nconst createSvgEle = (text) => {\n // we want to purify the SVG to avoid XSS attacks\n const clean = DOMPurify.sanitize(text, {\n USE_PROFILES: { svg: true, svgFilters: true },\n // allow image to render\n ADD_TAGS: ['image'],\n // forbid interactiviy via `use` tags (which are sanitized by default)\n FORBID_TAGS: ['defs']\n });\n\n const parser = new DOMParser();\n const ele = parser\n .parseFromString(clean, 'image/svg+xml')\n .querySelector('svg');\n return ele;\n};\n\nexport const createImage = async (src, altText) => {\n try {\n let ele;\n if (isBase64Svg(src)) {\n // handle base64 source\n const svgXml = atob(src.slice(base64Prefix.length));\n ele = createSvgEle(svgXml);\n } else if (getFileExtension(src) === 'svg') {\n // handle urls\n const fetchedSrc = await fetch(src);\n const text = await fetchedSrc.text();\n ele = createSvgEle(text);\n } else {\n // handle binary\n ele = createImgEle(src, altText);\n }\n\n ele.style.setProperty('max-width', '100%');\n ele.style.setProperty('max-height', '100%');\n\n return ele;\n } catch {\n return null;\n }\n};\n","import { componentName, ImageClass } from './ImageClass';\n\ncustomElements.define(componentName, ImageClass);\n\nexport { ImageClass, componentName };\n","// February shows 29 days even though Feb 29 only exists in leap years —\n// the picker intentionally has no year, so Feb 29 is unconditionally allowed.\nexport const DAYS_PER_MONTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nexport const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n","import { createBaseInputClass } from '@descope-ui/common/base-classes';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n forwardAttrs,\n getComponentName,\n injectStyle,\n} from '@descope-ui/common/components-helpers';\nimport {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n} from '@descope-ui/common/components-mixins';\n\nimport { DAYS_PER_MONTH, months as DEFAULT_MONTHS } from './consts';\n\nexport const componentName = getComponentName('month-day-field-picker');\n\nconst observedAttrs = [\n 'initial-value',\n 'picker-months',\n 'st-host-direction',\n 'disabled',\n 'full-width',\n];\n\nconst BaseInputClass = createBaseInputClass({\n componentName,\n baseSelector: 'div',\n});\n\nconst isValidMonthNamesArr = (arr) =>\n Array.isArray(arr) && arr.length === 12 && arr.filter(Boolean).length === 12;\n\nconst ensureMonthNamesArr = (attrVal) => {\n const arr = attrVal?.split(',');\n return isValidMonthNamesArr(arr) ? arr : DEFAULT_MONTHS;\n};\n\n// Build descope-combo-box items via DOM (textContent / setAttribute) rather than an\n// innerHTML template. picker-months is a user-facing attribute (localized strings,\n// admin-configured copy) so labels must never be parsed as HTML.\nconst buildOptions = (entries, parent) => {\n const fragment = document.createDocumentFragment();\n entries.forEach(({ id, name }) => {\n const item = document.createElement('div');\n item.className = 'combo-box-item';\n item.setAttribute('data-id', String(id));\n item.setAttribute('data-name', name);\n item.textContent = name;\n fragment.appendChild(item);\n });\n parent.replaceChildren(fragment);\n};\n\nconst monthEntries = (names) =>\n names.map((name, idx) => ({ id: idx + 1, name }));\n\nconst dayEntries = (count) =>\n Array.from({ length: count }, (_, i) => ({ id: i + 1, name: String(i + 1) }));\n\nclass RawMonthDayPicker extends BaseInputClass {\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttrs);\n }\n\n // 1..12 or null\n #month = null;\n\n // 1..N (N depends on month) or null\n #day = null;\n\n constructor() {\n super();\n\n 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 `;\n\n injectStyle(\n `\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 `,\n this,\n );\n\n // Bind refs here so attributeChangedCallback (which fires before init) can\n // render into the combos instead of bailing on unbound refs and being redone.\n this.monthInput = this.shadowRoot.querySelector('.month-input');\n this.dayInput = this.shadowRoot.querySelector('.day-input');\n }\n\n // ---- public API ----\n\n get month() {\n return this.#month;\n }\n\n set month(val) {\n const n = Number(val);\n if (!Number.isInteger(n) || n < 1 || n > 12) {\n this.#month = null;\n } else {\n this.#month = n;\n }\n // If the previously selected day no longer exists in the newly selected month\n // (e.g. April 30 → February), reset to day 1. Days that still fit are kept\n // (e.g. April 30 → January keeps 30).\n if (\n this.#day != null &&\n this.#month != null &&\n this.#day > DAYS_PER_MONTH[this.#month - 1]\n ) {\n this.#day = 1;\n }\n this.#syncMonthInput();\n this.#renderDayOptions();\n this.#syncDayInput();\n this.#dispatchChange();\n }\n\n get day() {\n return this.#day;\n }\n\n set day(val) {\n const n = Number(val);\n if (!Number.isInteger(n) || n < 1) {\n this.#day = null;\n } else if (this.#month != null && n > DAYS_PER_MONTH[this.#month - 1]) {\n this.#day = null;\n } else {\n this.#day = n;\n }\n this.#syncDayInput();\n this.#dispatchChange();\n }\n\n /**\n * Sets both month and day from a string `\"MM/DD\"`. Empty / null / undefined resets to\n * today's date (current real-world month + current day). Other formats are silently ignored.\n */\n set value(val) {\n if (!val) {\n this.#defaultToToday();\n return;\n }\n const match = /^(0?[1-9]|1[0-2])\\D(0?[1-9]|[12][0-9]|3[01])$/.exec(\n String(val).trim(),\n );\n if (!match) return;\n const m = Number(match[1]);\n const d = Number(match[2]);\n this.month = m;\n // Re-assign day after month so the DAYS_PER_MONTH ceiling check uses the new month.\n this.day = d;\n }\n\n #defaultToToday() {\n const now = new Date();\n this.month = now.getMonth() + 1;\n this.day = now.getDate();\n }\n\n /** Returns `\"MM/DD\"` when both values are set; empty string otherwise. */\n get value() {\n if (this.#month == null || this.#day == null) return '';\n return `${String(this.#month).padStart(2, '0')}/${String(this.#day).padStart(2, '0')}`;\n }\n\n // ---- lifecycle ----\n\n init() {\n super.init?.();\n\n this.#initMonthInput();\n this.#initDayInput();\n\n // If we have neither initial-value nor an explicit month, default to today's date\n // (current real-world month + current day). The month/day setters paint the combos.\n const initial = this.getAttribute('initial-value');\n if (initial) {\n this.value = initial;\n } else if (this.#month == null) {\n this.#defaultToToday();\n }\n\n forwardAttrs(this, this.monthInput, {\n includeAttrs: ['disabled', 'size', 'st-host-direction'],\n });\n forwardAttrs(this, this.dayInput, {\n includeAttrs: ['disabled', 'size', 'st-host-direction'],\n });\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n super.attributeChangedCallback?.(name, oldVal, newVal);\n if (oldVal === newVal) return;\n\n if (name === 'initial-value') {\n this.value = newVal;\n } else if (name === 'picker-months') {\n this.#renderMonthOptions();\n }\n }\n\n // ---- internals ----\n\n get #monthNames() {\n return ensureMonthNamesArr(this.getAttribute('picker-months'));\n }\n\n #initMonthInput() {\n this.#renderMonthOptions();\n this.monthInput.addEventListener('input', this.#onMonthChange.bind(this));\n }\n\n #initDayInput() {\n // Day options are populated lazily — they depend on the selected month.\n this.dayInput.addEventListener('input', this.#onDayChange.bind(this));\n }\n\n #renderMonthOptions() {\n buildOptions(monthEntries(this.#monthNames), this.monthInput);\n this.#syncMonthInput();\n }\n\n #renderDayOptions() {\n const count = DAYS_PER_MONTH[this.#month - 1] ?? 0;\n buildOptions(dayEntries(count), this.dayInput);\n }\n\n #syncMonthInput() {\n if (!this.monthInput) return;\n // Defer one tick: descope-combo-box indexes its options via MutationObserver\n // (microtask). Setting `.value` synchronously right after appending options\n // silently fails to select an item, leaving the combo empty. Calendar uses\n // the same setTimeout workaround for its year input.\n setTimeout(() => {\n if (!this.monthInput) return;\n this.monthInput.value = this.#month != null ? String(this.#month) : '';\n });\n }\n\n #syncDayInput() {\n // Same microtask deferral as #syncMonthInput: the combo-box indexes its options\n // via MutationObserver, so setting `.value` synchronously after rendering options\n // silently no-ops.\n setTimeout(() => {\n if (!this.dayInput) return;\n this.dayInput.value = this.#day !== null ? String(this.#day) : '';\n });\n }\n\n #onMonthChange(e) {\n const raw = e.target?.value;\n const next = raw ? Number(raw) : null;\n if (next === this.#month) return;\n this.month = next;\n }\n\n #onDayChange(e) {\n const raw = e.target?.value;\n const next = raw ? Number(raw) : null;\n if (next === this.#day) return;\n this.day = next;\n }\n\n // Emitted on every month/day mutation (user or programmatic) so a host can observe\n // the picker's value/validity — e.g. to drive an external submit button's enabled\n // state. The host (descope-month-day-field) owns the Done/Cancel buttons.\n #dispatchChange() {\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { month: this.#month, day: this.#day },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n // The picker is popover content, not a form field, so it has no validation semantics.\n // Returning an empty validity object satisfies inputValidationMixin (the base class\n // default returns undefined and crashes the mixin's getErrorMessage destructure).\n getValidity() {\n return {};\n }\n}\n\nconst { picker, monthInput, dayInput, inputsRow } = {\n picker: { selector: () => '.picker' },\n monthInput: { selector: () => '.month-input' },\n dayInput: { selector: () => '.day-input' },\n inputsRow: { selector: () => '.inputs-row' },\n};\n\nexport const MonthDayFieldPickerClass = compose(\n createStyleMixin({\n componentNameOverride: getComponentName('input-wrapper'),\n }),\n createStyleMixin({\n mappings: {\n fontSize: {},\n fontFamily: {},\n hostWidth: { selector: () => ':host', property: 'width' },\n hostDirection: { property: 'direction' },\n\n pickerPadding: { ...picker, property: 'padding' },\n\n inputsRowGap: { ...inputsRow, property: 'gap' },\n inputWidth: [\n { ...monthInput, property: 'width' },\n { ...dayInput, property: 'width' },\n ],\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawMonthDayPicker);\n","import '@descope-ui/descope-combo-box';\n\nimport {\n componentName,\n MonthDayFieldPickerClass,\n} from './MonthDayFieldPickerClass';\n\ncustomElements.define(componentName, MonthDayFieldPickerClass);\n\nexport { MonthDayFieldPickerClass, componentName };\n","// MonthDayCounter holds the digit-buffer state for a single date part (month or day),\n// supporting digit-by-digit typing, increment/decrement with min/max wrap, and\n// padding to a fixed display width derived from `max`. This is a verbatim copy of\n// descope-date-field's DateCounter class — only the export name differs.\nexport class MonthDayCounter {\n #data = Object.freeze([]);\n\n constructor({ id, min, max, placeholder }, onChange) {\n this.id = id;\n this.min = min;\n this.max = max;\n this.placeholder = placeholder;\n this.onChange = onChange;\n }\n\n get data() {\n return this.#data;\n }\n\n set data(val) {\n this.#data = Object.freeze(val);\n this.onChange?.();\n }\n\n get #initialNumValue() {\n return this.data.length ? this.numberValue : 0;\n }\n\n get numberValue() {\n return Number(this.stringValue);\n }\n\n get stringValue() {\n return (this.data.join('') || this.placeholder).padStart(this.length, '0');\n }\n\n get isFull() {\n return this.numberValue * 10 > this.max || this.data.length === this.length;\n }\n\n get isEmpty() {\n return this.stringValue === this.placeholder;\n }\n\n get length() {\n return this.max.toString().length;\n }\n\n set(val) {\n this.data = val.toString().split('');\n }\n\n add(num) {\n let { data } = this;\n\n data = [...data, num];\n\n const numVal = Number(data.join(''));\n\n if (numVal > this.max) {\n data = [num];\n } else if (this.length < data.length) {\n data = data.slice(1, data.length);\n }\n\n this.data = data;\n\n return num;\n }\n\n del() {\n if (!this.data.filter((d) => d !== '0').filter(Boolean).length) {\n this.data = [];\n } else {\n this.data = this.data.slice(0, this.data.length - 1);\n }\n }\n\n clear() {\n this.data = [];\n }\n\n inc(gap) {\n this.replaceValue(\n this.#initialNumValue < this.max\n ? Math.max(this.#initialNumValue + (gap || 1), this.min)\n : this.min,\n );\n }\n\n dec(gap) {\n this.replaceValue(\n this.#initialNumValue > this.min\n ? Math.min(this.#initialNumValue - (gap || 1), this.max)\n : this.max,\n );\n }\n\n isInRange(val) {\n return val >= this.min && val <= this.max;\n }\n\n replaceValue(val) {\n if (this.isInRange(val)) {\n this.data = val.toString().padStart(this.length, 0).split('');\n }\n }\n\n setMin(val) {\n this.min = Number(val);\n }\n\n setMax(val) {\n this.max = Number(val);\n }\n}\n","export const SUPPORTED_FORMATS = ['MM/DD', 'DD/MM'];\n\nexport const DEFAULT_FORMAT = SUPPORTED_FORMATS[0];\n\nexport const DIVIDER = '/';\n\nexport const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\n// February shows 29 days even though Feb 29 only exists in leap years —\n// the component intentionally has no year, so we allow Feb 29 unconditionally.\nexport const DAYS_PER_MONTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nexport const counterConfig = {\n MONTH: { id: 'month', min: 1, max: 12, placeholder: 'MM' },\n // DAY.max is updated at runtime to DAYS_PER_MONTH[month-1] when a month is set.\n DAY: { id: 'day', min: 1, max: 31, placeholder: 'DD' },\n};\n\nexport const BUTTON_LABEL_DONE = 'Done';\nexport const BUTTON_LABEL_CANCEL = 'Cancel';\n\nexport const MOBILE_DEVICE_INTERACTION_TIMEOUT_MS = 150;\n","import { DIVIDER, SUPPORTED_FORMATS } from './consts';\n\nconst patterns = {\n MM: '(0?[1-9]|1[0-2])',\n DD: '(0?[1-9]|[12][0-9]|3[01])',\n};\n\nconst createPattern = (format) => {\n const pattern = format\n .split(DIVIDER)\n .map((part) => patterns[part])\n .join('\\\\D');\n\n return `^${pattern}$`;\n};\n\nconst createToPartsFn = (format) => {\n const order = format.split(DIVIDER);\n return (match) => {\n const parts = {};\n order.forEach((part, index) => {\n parts[part] = Number(match[index + 1]);\n });\n return { month: parts.MM, day: parts.DD };\n };\n};\n\nconst createFormat = (format) => {\n const pattern = createPattern(format);\n const toPartsFn = createToPartsFn(format);\n const regexp = new RegExp(pattern);\n\n return {\n pattern,\n validate: (val) => regexp.test(val),\n getParts: (val) => {\n const match = regexp.exec(val);\n return match ? toPartsFn(match) : null;\n },\n };\n};\n\nexport const formats = Object.fromEntries(\n SUPPORTED_FORMATS.map((f) => [f, createFormat(f)]),\n);\n","import { formats } from './formats';\n\nexport const isNumber = (val) =>\n !!String(val || '').trim() && !Number.isNaN(Number(val));\n\nexport const formatMonthDay = (month, day, format) =>\n format.replace(/MM|DD/g, (m) =>\n String(m === 'MM' ? month : day).padStart(2, '0'),\n );\n\nexport const parseMonthDayString = (val, format) => {\n const trimmed = val?.trim?.();\n if (!trimmed) return null;\n return formats[format]?.getParts(trimmed) ?? null;\n};\n\n// Vaadin uses a \"constructed stylesheet\" to hide :host on dialog/popover content.\n// To override it, we push our own constructed stylesheet into the shadow root.\n// Mirrors the workaround used by descope-date-field.\n// Opened upstream issue: https://github.com/vaadin/web-components/issues/7979\nexport const overrideConstructedStylesheet = (ele) => {\n const cs = new CSSStyleSheet();\n cs.insertRule(':host{display:block!important;}');\n ele?.shadowRoot?.adoptedStyleSheets?.push(cs);\n};\n","import { TextFieldClass } from '@descope-ui/descope-text-field/class';\nimport { ButtonClass } from '@descope-ui/descope-button/class';\nimport { createBaseInputClass } from '@descope-ui/common/base-classes';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n portalMixin,\n} from '@descope-ui/common/components-mixins';\nimport {\n forwardAttrs,\n getComponentName,\n injectStyle,\n} from '@descope-ui/common/components-helpers';\n\nimport { MonthDayCounter } from './MonthDayFieldCounter';\nimport {\n BUTTON_LABEL_CANCEL,\n BUTTON_LABEL_DONE,\n counterConfig,\n DAYS_PER_MONTH,\n DEFAULT_FORMAT,\n DIVIDER,\n MOBILE_DEVICE_INTERACTION_TIMEOUT_MS,\n} from './consts';\nimport { formats } from './formats';\nimport calendarIcon from './calendar.svg';\nimport {\n formatMonthDay,\n isNumber,\n overrideConstructedStylesheet,\n parseMonthDayString,\n} from './helpers';\n\nexport const componentName = getComponentName('month-day-field');\n\n// vaadin-popover is the baseSelector hack carried over from descope-date-field so portalMixin\n// can style the overlay. A cleaner solution requires upstream changes to portalMixin.\nconst BASE_SELECTOR = 'vaadin-popover';\nconst BaseInputClass = createBaseInputClass({\n componentName,\n baseSelector: BASE_SELECTOR,\n});\n\nconst monthDayFieldAttrs = [\n 'format',\n 'opened',\n 'initial-value',\n 'readonly',\n 'disable-picker',\n];\nconst pickerAttrs = [\n 'picker-months',\n 'picker-label-submit',\n 'picker-label-cancel',\n];\nconst observedAttrs = [...monthDayFieldAttrs, ...pickerAttrs];\n\nclass RawMonthDayFieldClass extends BaseInputClass {\n format = DEFAULT_FORMAT;\n\n #selectedCounterIdx = 0;\n\n #onCounterChange = () => {\n this.updateCountersDisplay();\n this.#syncDayCounterMax();\n this.#dispatchInput();\n };\n\n #monthDayFieldCounters = [\n new MonthDayCounter(counterConfig.MONTH, this.#onCounterChange.bind(this)),\n new MonthDayCounter(counterConfig.DAY, this.#onCounterChange.bind(this)),\n ];\n\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttrs);\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div>\n <descope-text-field inputmode=\"numeric\">\n <span slot=\"suffix\" class=\"toggle-picker\">\n <descope-icon src=\"${calendarIcon}\"></descope-icon>\n </span>\n </descope-text-field>\n <vaadin-popover></vaadin-popover>\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 ::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 `,\n this,\n );\n\n this.inputElement = this.shadowRoot.querySelector('descope-text-field');\n this.popoverToggleButton =\n this.inputElement.querySelector('.toggle-picker');\n }\n\n // ---- getters ----\n\n get validationTarget() {\n return this.inputElement;\n }\n\n get opened() {\n return this.getAttribute('opened') === 'true';\n }\n\n get monthCounter() {\n return this.#monthDayFieldCounters.find(\n (c) => c.id === counterConfig.MONTH.id,\n );\n }\n\n get dayCounter() {\n return this.#monthDayFieldCounters.find(\n (c) => c.id === counterConfig.DAY.id,\n );\n }\n\n get sortedCounters() {\n return this.format\n .split(DIVIDER)\n .map((placeholder) =>\n this.#monthDayFieldCounters.find((c) => c.placeholder === placeholder),\n );\n }\n\n get activeCounter() {\n return this.sortedCounters[this.#selectedCounterIdx];\n }\n\n get countersValue() {\n return this.sortedCounters.map((c) => c.stringValue).join(DIVIDER);\n }\n\n get isCountersEmpty() {\n return this.#monthDayFieldCounters.every((c) => c.isEmpty);\n }\n\n get isCountersOutOfRange() {\n return this.#monthDayFieldCounters.some((c) => !c.isInRange(c.numberValue));\n }\n\n get disablePicker() {\n return this.getAttribute('disable-picker') === 'true';\n }\n\n get overlay() {\n return this.baseElement.shadowRoot?.querySelector('vaadin-popover-overlay');\n }\n\n get backdrop() {\n return this.overlay?.shadowRoot?.querySelector('#backdrop');\n }\n\n get picker() {\n return this.overlay?.querySelector('descope-month-day-field-picker');\n }\n\n get isRTL() {\n const dir = getComputedStyle(this.baseElement).getPropertyValue(\n 'direction',\n );\n if (dir) return dir === 'rtl';\n return this.getAttribute('st-host-direction') === 'rtl';\n }\n\n get value() {\n if (this.isCountersEmpty || this.isCountersOutOfRange) return '';\n return formatMonthDay(\n this.monthCounter.numberValue,\n this.dayCounter.numberValue,\n this.format,\n );\n }\n\n set value(val) {\n const parts = val ? parseMonthDayString(String(val), this.format) : null;\n if (parts) {\n this.#applyMonthAndDay(parts.month, parts.day);\n } else {\n this.#monthDayFieldCounters.forEach((c) => c.clear());\n this.clearInputEle();\n }\n }\n\n get isSelectAll() {\n const { value, selectionStart, selectionEnd } = this.inputElement;\n return value.length === selectionStart + selectionEnd;\n }\n\n // ---- validity ----\n\n getValidity() {\n if (this.isRequired && this.isCountersEmpty) {\n return { valueMissing: true };\n }\n // Empty counters also read as out-of-range, so gate on !isCountersEmpty to\n // flag only a filled-but-invalid entry (e.g. Feb 30), not an empty field.\n if (!this.isCountersEmpty && this.isCountersOutOfRange) {\n return { patternMismatch: true };\n }\n return {};\n }\n\n reportValidity() {\n this.inputElement.reportValidity();\n }\n\n // ---- counter helpers ----\n\n #syncDayCounterMax() {\n const m = this.monthCounter.numberValue;\n const newMax = DAYS_PER_MONTH[m - 1] ?? 31;\n if (this.dayCounter.max !== newMax) {\n this.dayCounter.setMax(newMax);\n }\n }\n\n // Single place to apply a (month, day) pair to the counters. The trap this avoids:\n // dayCounter.replaceValue silently no-ops when the incoming day is out of range,\n // so without an explicit clear, a prior valid day \"sticks\" through the month change\n // — e.g. assigning \"02/30\" over an existing \"01/15\" reads back as \"02/15\" with no\n // signal that the input was rejected. Clearing the day forces the resulting state\n // to be invalid and visibly empty.\n #applyMonthAndDay(month, day) {\n this.monthCounter.replaceValue(month);\n this.#syncDayCounterMax();\n if (day > this.dayCounter.max) {\n this.dayCounter.clear();\n } else {\n this.dayCounter.replaceValue(day);\n }\n }\n\n updateCountersDisplay() {\n this.inputElement.value = this.countersValue;\n }\n\n #dispatchInput() {\n this.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n resetCounters() {\n this.#monthDayFieldCounters.forEach((c) => c.clear());\n }\n\n clearInputEle() {\n this.inputElement.value = '';\n }\n\n // ---- lifecycle ----\n\n init() {\n super.init?.();\n\n this.#updateFormatPattern();\n this.#initPopover();\n this.#onCounterChange();\n this.#initInputElement();\n\n setTimeout(() => this.#overrideOverlaySettings(), 0);\n }\n\n #initInputElement() {\n this.inputElement.getValidity = this.getValidity.bind(this);\n\n this.popoverToggleButton.addEventListener(\n 'click',\n this.#onPopoverToggle.bind(this),\n );\n\n this.inputElement.addEventListener('focus', this.#onFocus.bind(this));\n this.inputElement.addEventListener('blur', this.#onBlur.bind(this));\n this.inputElement.addEventListener(\n 'click',\n this.#handleMouseCaretPositionChange.bind(this),\n );\n this.inputElement.addEventListener(\n 'keydown',\n this.#handleKeyboard.bind(this),\n );\n this.inputElement.addEventListener(\n 'beforeinput',\n this.#handleInput.bind(this),\n );\n this.inputElement.addEventListener(\n 'pointerdown',\n this.#onPointerDown.bind(this),\n );\n this.inputElement.addEventListener('paste', this.#onPaste.bind(this));\n\n forwardAttrs(this, this.inputElement, {\n includeAttrs: [\n 'label',\n 'label-type',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'bordered',\n 'required',\n 'full-width',\n 'st-host-direction',\n 'pattern',\n 'data-errormessage-value-missing',\n 'data-errormessage-pattern-mismatch',\n 'st-error-message-icon',\n 'st-error-message-icon-size',\n 'st-error-message-icon-padding',\n ],\n });\n }\n\n // ---- popover ----\n\n #initPopover() {\n this.baseElement.trigger = ['click'];\n this.baseElement.withBackdrop = true;\n this.baseElement.renderer = this.#popoverRenderer.bind(this);\n\n this.baseElement.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n\n #popoverPosStylesheet;\n\n #popoverRenderer(root) {\n if (!root.firstChild) {\n this.overlay.positionTarget =\n this.shadowRoot.querySelector('.toggle-picker');\n root.appendChild(this.#getPopoverContent());\n overrideConstructedStylesheet(this.baseElement);\n this.backdrop?.addEventListener('click', this.closePopover.bind(this));\n // Seed overlay-scoped rules once. The hide toggle stays a class change (not an\n // inline style write — avoids style-src CSP concerns). Only structural layout\n // lives here; themeable nav values (padding/gap/alignment, button padding) come\n // from the portalMixin overlay mappings below.\n injectStyle(\n `\n .overlay-hidden { visibility: hidden; }\n .bottom-nav {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n }\n `,\n root.getRootNode(),\n );\n }\n\n // appendChild above ran the picker's init(), which defaults to today. Overwrite\n // it with the parent's value here — synchronously, before the overlay is shown —\n // so the picker reflects the real value immediately (rather than briefly showing\n // today). Keep this inline, not in the 100ms setTimeout below, so the value is\n // already correct for anything that reads picker.month / picker.day on open.\n this.#updatePickerView();\n\n // Hide overlay before adjusting position to prevent flickering.\n root.classList.add('overlay-hidden');\n\n setTimeout(() => {\n this.#adjustPopoverPosition();\n root.classList.remove('overlay-hidden');\n }, 100);\n }\n\n // Vaadin's popover anchors the overlay to the positionTarget (our .toggle-picker icon),\n // which leaves the popover visually offset from the input. Shift it so its leading edge\n // aligns with the input's leading edge — same approach legacy descope-date-field uses\n // (DateFieldClass.#adjustPopoverPosition).\n #adjustPopoverPosition() {\n const popover = this.shadowRoot.querySelector('vaadin-popover').shadowRoot;\n if (!popover || !this.picker) return;\n\n // Reset any previous offset so getBoundingClientRect measures the natural position.\n // NOTE: we offset with margin, not `transform`. A `transform` on this element\n // makes it the containing block for `position: fixed` descendants, which traps\n // the nested combo-box dropdowns inside the popover box (they then can't size\n // to the viewport and get clipped). `margin` shifts it identically without\n // creating a containing block, so the combo overlays stay viewport-positioned.\n this.#popoverPosStylesheet?.replaceSync(\n `vaadin-popover-overlay::part(overlay) { margin-left: 0; }`,\n );\n\n const windowRect = document.body.getBoundingClientRect();\n const inputRect = this.getBoundingClientRect();\n const pickerRect = this.picker.getBoundingClientRect();\n\n const side = this.isRTL ? 'right' : 'left';\n const offset = inputRect[side] - pickerRect[side];\n const availableLeft = pickerRect.left;\n const availableRight = windowRect.width - pickerRect.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 const css = `\n vaadin-popover-overlay::part(overlay) {\n margin-left: ${newOffset}px;\n }\n `;\n\n if (this.#popoverPosStylesheet) {\n this.#popoverPosStylesheet.replaceSync(css);\n } else {\n this.#popoverPosStylesheet = injectStyle(css, popover);\n }\n }\n\n #getPopoverContent() {\n const ele = document.createElement('span');\n ele.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 `;\n const picker = ele.querySelector('descope-month-day-field-picker');\n this.cancelButton = ele.querySelector('.cancel-button');\n this.submitButton = ele.querySelector('.submit-button');\n this.#syncButtonLabels();\n this.cancelButton.addEventListener('click', this.#onCancel.bind(this));\n this.submitButton.addEventListener('click', this.#onDone.bind(this));\n // The picker is a pure selector now; it emits `change` on every month/day\n // mutation so we can drive the Done button's enabled state from here.\n picker.addEventListener('change', this.#onPickerChange.bind(this));\n return ele;\n }\n\n // Open inside the shadow DOM rather than letting Vaadin re-parent the overlay onto body —\n // makes the overlay themable via portalMixin selectors. Same trick descope-date-field uses.\n #overrideOverlaySettings() {\n if (!this.overlay) return;\n this.overlay._attachOverlay = () => this.overlay.bringToFront();\n this.overlay._detachOverlay = () => {};\n this.overlay._enterModalState = () => {};\n }\n\n #updatePickerView() {\n if (!this.picker) return;\n\n // The picker is created once and reused, so we re-sync its state from the parent\n // every time the popover opens. Sync via picker.month / picker.day rather than\n // picker.value: this.value is formatted per the active `format` attribute (e.g.\n // \"04/07\" in DD/MM for July 4), but MonthDayPicker.value only parses MM/DD —\n // so a DD/MM string would be reinterpreted (e.g. April 7 instead of July 4).\n // Going through the numeric properties bypasses the format-string indirection\n // entirely, and also avoids the attributeChangedCallback short-circuit when the\n // attribute value would be unchanged.\n if (this.isCountersEmpty) {\n // Empty parent → let picker fall back to its today-default via value=''.\n this.picker.value = '';\n } else {\n this.picker.month = this.monthCounter.isEmpty\n ? null\n : this.monthCounter.numberValue;\n this.picker.day = this.dayCounter.isEmpty\n ? null\n : this.dayCounter.numberValue;\n }\n\n forwardAttrs(this, this.picker, {\n includeAttrs: [\n 'st-host-direction',\n 'readonly',\n 'disabled',\n 'picker-months',\n ],\n });\n }\n\n get #submitLabel() {\n return this.getAttribute('picker-label-submit') || BUTTON_LABEL_DONE;\n }\n\n get #cancelLabel() {\n return this.getAttribute('picker-label-cancel') || BUTTON_LABEL_CANCEL;\n }\n\n #syncButtonLabels() {\n if (!this.submitButton) return;\n this.submitButton.textContent = this.#submitLabel;\n this.cancelButton.textContent = this.#cancelLabel;\n }\n\n // Mirror the picker's value/validity onto the Done button's enabled state.\n #onPickerChange(e) {\n const { month, day } = e.detail || {};\n this.#setDoneDisabled(month == null || day == null);\n }\n\n #setDoneDisabled(disabled) {\n if (!this.submitButton) return;\n const inner = this.submitButton.shadowRoot?.querySelector('vaadin-button');\n if (disabled) {\n this.submitButton.setAttribute('disabled', 'true');\n inner?.setAttribute('disabled', 'true');\n } else {\n this.submitButton.removeAttribute('disabled');\n inner?.removeAttribute('disabled');\n }\n }\n\n #onCancel() {\n // The picker re-syncs from our counters on every reopen, so no local cleanup.\n this.closePopover();\n }\n\n #onDone() {\n if (this.isReadOnly) {\n this.closePopover();\n return;\n }\n const month = this.picker?.month;\n const day = this.picker?.day;\n if (month == null || day == null) {\n this.closePopover();\n return;\n }\n this.#applyMonthAndDay(month, day);\n this.#dispatchInput();\n this.closePopover();\n }\n\n #onPopoverToggle() {\n this.opened ? this.closePopover() : this.openPopover();\n }\n\n openPopover() {\n if (this.disablePicker) return;\n this.setAttribute('opened', 'true');\n }\n\n closePopover() {\n this.removeAttribute('opened');\n this.inputElement.focus();\n }\n\n #togglePopoverAccess(visibility) {\n if (visibility) {\n this.popoverToggleButton.classList.remove('hidden');\n } else {\n this.popoverToggleButton.classList.add('hidden');\n }\n }\n\n // ---- input / keyboard ----\n\n #handleInput(e) {\n e.preventDefault();\n this.#handleSelectAll();\n\n if (e.data && isNumber(e.data)) {\n this.#parseDigits(e.data);\n this.updateCountersDisplay();\n } else if (e.inputType) {\n this.#handleNavKeys(e);\n }\n }\n\n #handleSelectAll() {\n if (this.isSelectAll) {\n this.#selectFirstCounter();\n }\n }\n\n #parseDigits(value) {\n this.activeCounter.add(value);\n if (this.activeCounter.isFull) {\n this.#selectNextCounter();\n }\n this.#setInputSelectionRange();\n }\n\n #getCounterIdx(caretPos) {\n const [c1ln, c2ln] = this.sortedCounters.map((c) => c.length);\n if (caretPos <= c1ln) return 0;\n if (caretPos >= c1ln && caretPos <= c1ln + c2ln + 1) return 1;\n return 1;\n }\n\n #setSelectedCounterByCaretPosition(e) {\n this.#selectedCounterIdx = this.#getCounterIdx(\n e.target?.selectionStart || this.inputElement.selectionStart,\n );\n }\n\n #selectFirstCounter() {\n this.#selectedCounterIdx = 0;\n }\n\n #selectNextCounter() {\n if (this.#selectedCounterIdx < this.#monthDayFieldCounters.length - 1) {\n this.#selectedCounterIdx = Math.min(this.#selectedCounterIdx + 1, 1);\n }\n }\n\n #selectPrevCounter() {\n if (this.#selectedCounterIdx > 0) {\n this.#selectedCounterIdx = 0;\n }\n }\n\n #setInputSelectionRange() {\n if (this.#selectedCounterIdx < 0) return;\n\n setTimeout(() => {\n const caretStart = this.sortedCounters\n .slice(0, this.#selectedCounterIdx)\n .reduce(\n (acc, counter) => acc + counter.length,\n this.#selectedCounterIdx,\n );\n\n this.inputElement.setSelectionRange(\n caretStart,\n caretStart + this.sortedCounters[this.#selectedCounterIdx].length,\n );\n });\n }\n\n #handleKeyboard(e) {\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === 'x') this.#onCut(e);\n return;\n }\n\n this.#handleSelectAll();\n\n if (e.key === 'ArrowUp') {\n this.activeCounter.inc();\n } else if (e.key === 'ArrowDown') {\n this.activeCounter.dec();\n } else if (e.key === 'ArrowRight') {\n this.#selectNextCounter();\n } else if (e.key === 'ArrowLeft') {\n this.#selectPrevCounter();\n }\n\n this.#setInputSelectionRange();\n }\n\n #handleNavKeys(e) {\n if (this.isReadOnly) return;\n if (this.opened) this.closePopover();\n if (!this.activeCounter) return;\n\n if (e.inputType === 'deleteContentBackward') {\n this.#handleBackspace();\n }\n\n this.#setInputSelectionRange();\n }\n\n #handleBackspace() {\n if (this.isSelectAll) {\n this.#resetToInitialState();\n return;\n }\n\n const counter = this.activeCounter;\n if (counter.isEmpty) {\n this.#selectPrevCounter();\n this.#setInputSelectionRange();\n } else {\n counter.set('');\n }\n\n setTimeout(() => {\n this.updateCountersDisplay();\n this.#setInputSelectionRange();\n });\n }\n\n #handleMouseCaretPositionChange(e) {\n if (this.opened) return;\n e.preventDefault();\n this.#setSelectedCounterByCaretPosition(e);\n this.#setInputSelectionRange();\n }\n\n #onPointerDown(e) {\n setTimeout(\n () => this.#handleMouseCaretPositionChange(e),\n MOBILE_DEVICE_INTERACTION_TIMEOUT_MS,\n );\n }\n\n #onFocus() {\n if (this.isReadOnly) return;\n setTimeout(() => this.#resetDisplay());\n }\n\n #onBlur() {\n if (this.opened) return;\n if (this.inputElement.value === this.format) {\n this.clearInputEle();\n }\n }\n\n #resetDisplay() {\n if (!this.inputElement.value) {\n this.inputElement.value = this.format;\n }\n this.#selectFirstCounter();\n this.inputElement.setSelectionRange(0, this.sortedCounters[0].length);\n }\n\n #resetToInitialState() {\n this.resetCounters();\n this.#selectFirstCounter();\n this.#resetDisplay();\n }\n\n // ---- format ----\n\n #onFormatUpdate(format) {\n if (Object.keys(formats).includes(format)) {\n this.format = format;\n this.#updateFormatPattern();\n this.updateCountersDisplay();\n }\n }\n\n #updateFormatPattern() {\n // `format` is a public attribute, so its incoming value is untrusted at init time.\n // An unsupported value (e.g. `format=\"XYZ\"`) would make formats[format] undefined and\n // crash the constructor when reading `.pattern`. Fall back to DEFAULT_FORMAT — same\n // guard used in #onFormatUpdate for runtime changes.\n const requested =\n this.getAttribute('format') || this.format || DEFAULT_FORMAT;\n const format = formats[requested] ? requested : DEFAULT_FORMAT;\n this.format = format;\n this.setAttribute('pattern', formats[format].pattern);\n }\n\n // ---- clipboard ----\n\n #onCut(e) {\n e.preventDefault();\n if (this.isSelectAll) {\n this.#copyToClipboard(this.countersValue);\n this.#resetToInitialState();\n } else {\n this.#copyToClipboard(this.activeCounter.stringValue);\n this.activeCounter.set('');\n }\n this.#setInputSelectionRange();\n }\n\n #copyToClipboard(value) {\n try {\n navigator.clipboard.writeText(value);\n } catch (err) {\n console.error('Failed to copy month/day value:', err);\n }\n }\n\n #onPaste(e) {\n e.preventDefault();\n const clipboardData = e.clipboardData || window.clipboardData;\n const pasted = clipboardData.getData('Text');\n\n const parts = parseMonthDayString(pasted, this.format);\n if (parts) {\n this.#applyMonthAndDay(parts.month, parts.day);\n this.#onCounterChange();\n setTimeout(() =>\n this.inputElement.setSelectionRange(0, this.inputElement.value.length),\n );\n return;\n }\n\n const numeric = Number(pasted);\n if (numeric && this.activeCounter.isInRange(numeric)) {\n this.activeCounter.set(String(numeric));\n setTimeout(() => this.#setInputSelectionRange());\n }\n }\n\n // ---- attribute handling ----\n\n #onInitialValueChange(val) {\n if (this.value) return;\n setTimeout(() => {\n if (val) this.value = val;\n });\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n if (oldValue === newValue) return;\n\n if (attrName === 'disable-picker') {\n this.#togglePopoverAccess(newValue !== 'true');\n }\n if (monthDayFieldAttrs.includes(attrName)) {\n if (newValue && attrName === 'format') {\n this.#onFormatUpdate(newValue);\n }\n if (attrName === 'initial-value') {\n this.#onInitialValueChange(newValue);\n }\n } else if (\n attrName === 'picker-label-submit' ||\n attrName === 'picker-label-cancel'\n ) {\n // Labels belong to the field's own Done/Cancel buttons now.\n this.#syncButtonLabels();\n } else if (pickerAttrs.includes(attrName)) {\n if (newValue) {\n this.picker?.setAttribute(attrName, newValue);\n } else {\n this.picker?.removeAttribute(attrName);\n }\n }\n }\n}\n\nconst textVars = TextFieldClass.cssVarList;\nconst {\n host,\n input,\n inputEleRTL,\n toggleButton,\n overlay,\n backdrop,\n bottomNav,\n navButton,\n} = {\n host: { selector: () => ':host' },\n input: { selector: () => 'descope-text-field' },\n inputEleRTL: {\n selector: () => ':host([st-host-direction=\"rtl\"]) descope-text-field',\n },\n toggleButton: { selector: () => '.toggle-picker' },\n overlay: { selector: 'vaadin-popover-overlay::part(overlay)' },\n backdrop: { selector: 'vaadin-popover-overlay::part(backdrop)' },\n // The Done/Cancel nav is light-DOM content of the overlay (not behind ::part),\n // so target it as a descendant of the overlay element.\n bottomNav: { selector: 'vaadin-popover-overlay .bottom-nav' },\n navButton: { selector: 'vaadin-popover-overlay .bottom-nav descope-button' },\n};\n\nexport const MonthDayFieldClass = compose(\n createStyleMixin({\n componentNameOverride: getComponentName('input-wrapper'),\n }),\n createStyleMixin({\n mappings: {\n iconMargin: { ...toggleButton, property: 'margin-inline-end' },\n hostWidth: { ...host, property: 'width' },\n hostDirection: { ...host, property: 'direction' },\n textAlign: { ...input, property: 'text-align' },\n rtlInputDirection: { ...inputEleRTL, property: textVars.inputDirection },\n rtlInputAlignment: { ...inputEleRTL, property: textVars.inputTextAlign },\n overlayGap: { property: () => MonthDayFieldClass.cssVarList.overlayGap },\n overlayBackgroundColor: {\n property: () => MonthDayFieldClass.cssVarList.overlayBackgroundColor,\n },\n overlayPadding: {\n property: () => MonthDayFieldClass.cssVarList.overlayPadding,\n },\n overlayBoxShadow: {\n property: () => MonthDayFieldClass.cssVarList.overlayBoxShadow,\n },\n overlayOutlineWidth: {\n property: () => MonthDayFieldClass.cssVarList.overlayOutlineWidth,\n },\n overlayOutlineColor: {\n property: () => MonthDayFieldClass.cssVarList.overlayOutlineColor,\n },\n overlayOutlineStyle: {\n property: () => MonthDayFieldClass.cssVarList.overlayOutlineStyle,\n },\n errorMessageIcon: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIcon,\n },\n errorMessageIconSize: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconSize,\n },\n errorMessageIconPadding: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconPadding,\n },\n errorMessageIconRepeat: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconRepeat,\n },\n errorMessageIconPosition: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconPosition,\n },\n errorMessageFontSize: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageFontSize,\n },\n labelFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.labelFontWeight,\n },\n inputValueFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.inputValueFontWeight,\n },\n inputPlaceholderFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.inputPlaceholderFontWeight,\n },\n helperTextFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.helperTextFontWeight,\n },\n errorMessageFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageFontWeight,\n },\n },\n }),\n portalMixin({\n name: 'overlay',\n selector: '',\n mappings: {\n marginTop: { ...overlay, property: 'margin-top' },\n backgroundColor: { ...overlay },\n backdropBackgroundColor: { ...backdrop, property: 'background-color' },\n backdropPointerEvents: { ...backdrop, property: 'pointer-events' },\n padding: { ...overlay },\n boxShadow: { ...overlay },\n outlineWidth: { ...overlay },\n outlineColor: { ...overlay },\n outlineStyle: { ...overlay },\n\n bottomNavTopPadding: { ...bottomNav, property: 'padding-top' },\n bottomNavBottomPadding: { ...bottomNav, property: 'padding-bottom' },\n bottomNavHorizontalPadding: [\n { ...bottomNav, property: 'padding-left' },\n { ...bottomNav, property: 'padding-right' },\n ],\n bottomNavAlignment: { ...bottomNav, property: 'justify-content' },\n bottomNavGap: { ...bottomNav, property: 'gap' },\n navButtonPadding: [\n { ...navButton, property: ButtonClass.cssVarList.horizontalPadding },\n { ...navButton, property: ButtonClass.cssVarList.verticalPadding },\n ],\n navButtonOutlineWidth: {\n ...navButton,\n property: ButtonClass.cssVarList.outlineWidth,\n },\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawMonthDayFieldClass);\n","import '@vaadin/popover/src/vaadin-popover';\nimport '@descope-ui/descope-text-field';\nimport '@descope-ui/descope-month-day-field-picker';\nimport '@descope-ui/descope-icon';\nimport '@descope-ui/descope-button';\n\nimport { componentName, MonthDayFieldClass } from './MonthDayFieldClass';\n\ncustomElements.define(componentName, MonthDayFieldClass);\n\nexport { MonthDayFieldClass, componentName };\n","import {\n createStyleMixin,\n draggableMixin,\n createProxy,\n proxyInputMixin,\n componentNameValidationMixin,\n} from '@descope-ui/common/components-mixins';\nimport { compose } from '@descope-ui/common/utils';\nimport { getComponentName } from '@descope-ui/common/components-helpers';\nimport {\n inputFloatingLabelStyle,\n resetInputLabelPosition,\n resetInputOverrides,\n useHostExternalPadding,\n} from '@descope-ui/common/theme-helpers';\nimport textFieldMappings from './textFieldMappings';\n\nexport const componentName = getComponentName('text-field');\n\nconst observedAttrs = ['type', 'label-type', 'copy-to-clipboard'];\n\nconst customMixin = (superclass) =>\n class TextFieldClass extends superclass {\n static get observedAttributes() {\n return observedAttrs.concat(superclass.observedAttributes || []);\n }\n\n icon;\n\n init() {\n super.init?.();\n }\n\n renderCopyToClipboard(shouldRender) {\n if (!shouldRender) {\n this.icon?.remove();\n return;\n }\n\n const iconInitConfig = {\n icon: 'vaadin:copy-o',\n title: 'Copy',\n style: 'cursor: pointer',\n };\n\n const iconCopiedConfig = {\n icon: 'vaadin:check-circle-o',\n title: 'Copied',\n style: 'cursor: initial',\n };\n\n this.icon = Object.assign(document.createElement('vaadin-icon'), {\n slot: 'suffix',\n ...iconInitConfig,\n });\n\n this.baseElement.appendChild(this.icon);\n this.icon.addEventListener('click', () => {\n navigator.clipboard.writeText(this.value);\n Object.assign(this.icon, iconCopiedConfig);\n\n // we want the icon to go back to the initial state after 5 seconds\n setTimeout(() => {\n Object.assign(this.icon, iconInitConfig);\n }, 5000);\n });\n }\n\n onLabelClick() {\n this.focus();\n }\n\n attributeChangedCallback(attrName, oldVal, newVal) {\n super.attributeChangeCallback?.(attrName, oldVal, newVal);\n\n // Vaadin doesn't allow to change the input type attribute.\n // We need the ability to do that, so we're overriding their\n // behavior with their private API.\n // When receiving a `type` attribute, we use their private API\n // to set it on the input.\n if (attrName === 'type') {\n this.baseElement._setType(newVal);\n }\n\n if (oldVal !== newVal) {\n if (attrName === 'label-type') {\n if (newVal === 'floating') {\n this.addEventListener('click', this.onLabelClick);\n } else {\n this.removeEventListener('click', this.onLabelClick);\n }\n } else if (attrName === 'copy-to-clipboard') {\n this.renderCopyToClipboard(newVal === 'true');\n }\n }\n }\n };\n\nexport const TextFieldClass = compose(\n createStyleMixin({\n mappings: textFieldMappings,\n }),\n draggableMixin,\n proxyInputMixin({\n proxyProps: ['value', 'selectionStart', 'selectionEnd'],\n useProxyTargets: true,\n }),\n componentNameValidationMixin,\n customMixin,\n)(\n createProxy({\n slots: ['prefix', 'suffix'],\n wrappedEleName: 'vaadin-text-field',\n 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(${TextFieldClass.cssVarList.inputOutlineWidth}) + var(${\n TextFieldClass.cssVarList.inputOutlineOffset\n }));\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 ${resetInputLabelPosition('vaadin-text-field')}\n\t\t\t${useHostExternalPadding(TextFieldClass.cssVarList)}\n\t\t\t${resetInputOverrides('vaadin-text-field', TextFieldClass.cssVarList)}\n ${inputFloatingLabelStyle()}\n\n vaadin-text-field vaadin-icon {\n align-self: center;\n }\n\t\t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n }),\n);\n","import '@vaadin/text-field';\nimport '@vaadin/icons';\nimport '@vaadin/icon';\n\nimport { componentName, TextFieldClass } from './TextFieldClass';\n\ncustomElements.define(componentName, TextFieldClass);\n\nexport { TextFieldClass, componentName };\n","const {\n host,\n label,\n placeholder,\n requiredIndicator,\n inputField,\n input,\n inputMask,\n helperText,\n errorMessage,\n disabledPlaceholder,\n inputDisabled,\n inputIcon,\n externalInput,\n externalInputDisabled,\n externalPlaceholder,\n externalDisabledPlaceholder,\n} = {\n host: { selector: () => ':host' },\n label: { selector: '::part(label)' },\n requiredIndicator: {\n selector: '[required]::part(required-indicator)::after',\n },\n placeholder: [\n { selector: '> input:placeholder-shown' },\n { selector: () => ':host::slotted(input:placeholder-shown)' },\n ],\n disabledPlaceholder: { selector: '> input:disabled::placeholder' },\n inputField: { selector: '::part(input-field)' },\n input: { selector: 'input' },\n inputMask: { selector: '::part(input-field)::before' },\n inputDisabled: { selector: 'input:disabled' },\n helperText: { selector: '::part(helper-text)' },\n errorMessage: { selector: '::part(error-message)' },\n inputIcon: { selector: 'vaadin-icon' },\n externalInput: { selector: () => '::slotted(input)' },\n externalInputDisabled: { selector: () => '::slotted(input:disabled)' },\n externalPlaceholder: { selector: () => '::slotted(input:placeholder-shown)' },\n externalDisabledPlaceholder: {\n selector: () => '::slotted(input:disabled::placeholder)',\n },\n};\n\nexport default {\n // we apply font-size also on the host so we can set its width with em\n fontSize: [{}, host],\n fontFamily: [label, inputField, helperText, errorMessage],\n\n labelFontSize: { ...label, property: 'font-size' },\n labelFontWeight: { ...label, property: 'font-weight' },\n\n inputValueFontWeight: [\n { ...input, property: 'font-weight' },\n { ...externalInput, property: 'font-weight' },\n ],\n inputPlaceholderFontWeight: [\n {\n selector: () => ':host input:placeholder-shown',\n property: 'font-weight',\n },\n { ...externalPlaceholder, property: 'font-weight' },\n ],\n helperTextFontWeight: { ...helperText, property: 'font-weight' },\n errorMessageFontWeight: { ...errorMessage, property: 'font-weight' },\n\n labelTextColor: [\n { ...label, property: 'color' },\n { ...requiredIndicator, property: 'color' },\n { ...label, property: '-webkit-text-fill-color' },\n { ...requiredIndicator, property: '-webkit-text-fill-color' },\n ],\n\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { ...host, property: 'min-width' },\n hostDirection: { ...host, property: 'direction' },\n inputDirection: { ...input, property: 'direction' },\n\n inputBackgroundColor: [\n { ...inputField, property: 'background-color' },\n { ...inputMask, property: 'background-color' },\n ],\n\n errorMessageTextColor: { ...errorMessage, property: 'color' },\n errorMessageIcon: { ...errorMessage, property: 'background-image' },\n errorMessageIconSize: { ...errorMessage, property: 'background-size' },\n errorMessageIconPadding: {\n ...errorMessage,\n property: 'padding-inline-start',\n },\n errorMessageIconRepeat: { ...errorMessage, property: 'background-repeat' },\n errorMessageIconPosition: {\n ...errorMessage,\n property: 'background-position',\n },\n errorMessageFontSize: { ...errorMessage, property: 'font-size' },\n\n helperTextColor: { ...helperText, property: '-webkit-text-fill-color' },\n\n inputValueTextColor: [\n { ...inputField, property: 'color' },\n { ...inputDisabled, property: '-webkit-text-fill-color' },\n { ...externalInputDisabled, property: '-webkit-text-fill-color' },\n ],\n inputCaretTextColor: [\n { ...input, property: 'caret-color' },\n { ...externalInput, property: 'caret-color' },\n ],\n\n labelRequiredIndicator: { ...requiredIndicator, property: 'content' },\n\n inputBorderColor: { ...inputField, property: 'border-color' },\n inputBorderWidth: { ...inputField, property: 'border-width' },\n inputBorderStyle: { ...inputField, property: 'border-style' },\n inputBorderRadius: { ...inputField, property: 'border-radius' },\n\n inputHeight: { ...inputField, property: 'height' },\n inputHorizontalPadding: [\n { ...input, property: 'padding-left' },\n { ...input, property: 'padding-right' },\n { ...externalInput, property: 'padding-left' },\n { ...externalInput, property: 'padding-right' },\n ],\n\n inputOutlineColor: { ...inputField, property: 'outline-color' },\n inputOutlineStyle: { ...inputField, property: 'outline-style' },\n inputOutlineWidth: { ...inputField, property: 'outline-width' },\n inputOutlineOffset: { ...inputField, property: 'outline-offset' },\n\n textAlign: {},\n\n inputTextAlign: [\n { ...input, property: 'text-align' },\n { ...externalInput, property: 'text-align' },\n ],\n\n inputPlaceholderColor: [\n { selector: () => ':host input:placeholder-shown', property: 'color' },\n { ...externalPlaceholder, property: 'color' },\n { ...placeholder, property: 'color' },\n { ...disabledPlaceholder, property: '-webkit-text-fill-color' },\n { ...externalDisabledPlaceholder, property: '-webkit-text-fill-color' },\n ],\n\n labelPosition: { ...label, property: 'position' },\n labelTopPosition: { ...label, property: 'top' },\n labelHorizontalPosition: [\n { ...label, property: 'left' },\n { ...label, property: 'right' },\n ],\n inputTransformY: { ...label, property: 'transform' },\n inputTransition: { ...label, property: 'transition' },\n marginInlineStart: { ...label, property: 'margin-inline-start' },\n placeholderOpacity: [\n { selector: '> input:placeholder-shown', property: 'opacity' },\n { ...externalPlaceholder, property: 'opacity' },\n ],\n inputVerticalAlignment: [\n { ...inputField, property: 'align-items' },\n { ...externalInput, property: 'align-items' },\n ],\n valueInputHeight: [\n { ...input, property: 'height' },\n { ...externalInput, property: 'height' },\n ],\n valueInputMarginBottom: [\n { ...input, property: 'margin-bottom' },\n { ...externalInput, property: 'margin-bottom' },\n ],\n\n inputIconOffset: [\n { ...inputIcon, property: 'margin-right' },\n { ...inputIcon, property: 'margin-left' },\n ],\n inputIconSize: { ...inputIcon, property: 'font-size' },\n inputIconColor: { ...inputIcon, property: 'color' },\n inputTextSecurity: [\n { ...input, property: '-webkit-text-security' },\n { ...input, property: 'text-security' },\n { ...externalInput, property: '-webkit-text-security' },\n { ...externalInput, property: 'text-security' },\n ],\n};\n"],"names":["module","exports","componentName","host","label","slottedIcon","selector","loadingIndicatorStyles","ButtonClass","triggers","attr","value","mappings","hostWidth","property","hostMaxWidth","hostHeight","hostDirection","fontSize","fontFamily","fontWeight","cursor","backgroundColor","outlineOffset","outlineColor","outlineStyle","outlineWidth","borderRadius","borderColor","borderStyle","borderWidth","verticalPadding","horizontalPadding","fallback","labelTextColor","iconColor","cssVarList","fill","labelTextDecoration","labelSpacing","textAlign","iconSize","slots","wrappedEleName","style","excludeAttrsSync","color","clickableMixin","superclass","isLoading","this","getAttribute","click","super","customElements","define","IconClass","height","width","srcAttrs","RawImage","baseSelector","observedAttributes","constructor","attachShadow","mode","innerHTML","init","toggleVisibility","getSrc","onThemeChange","renderImage","isVisible","classList","remove","add","altText","legacySrc","themeSrc","currentThemeName","updateFillColor","node","querySelectorAll","forEach","ele","setAttribute","ImageClass","then","res","appendChild","shouldRender","src","srcVal","attributeChangedCallback","attrName","oldValue","newValue","createSvgEle","text","clean","sanitize","USE_PROFILES","svg","svgFilters","ADD_TAGS","FORBID_TAGS","DOMParser","parseFromString","querySelector","createImage","async","startsWith","isBase64Svg","svgXml","atob","slice","base64Prefix","path","match","getFileExtension","fetchedSrc","fetch","document","createElement","createImgEle","setProperty","DAYS_PER_MONTH","months","observedAttrs","BaseInputClass","buildOptions","entries","parent","fragment","createDocumentFragment","id","name","item","className","String","textContent","replaceChildren","picker","monthInput","dayInput","inputsRow","MonthDayFieldPickerClass","componentNameOverride","pickerPadding","inputsRowGap","inputWidth","concat","shadowRoot","month","val","n","Number","isInteger","day","exec","trim","m","d","now","Date","getMonth","getDate","padStart","initial","includeAttrs","oldVal","newVal","attrVal","arr","split","Array","isArray","length","filter","Boolean","isValidMonthNamesArr","ensureMonthNamesArr","addEventListener","bind","map","idx","count","from","_","i","dayEntries","setTimeout","e","raw","target","next","dispatchEvent","CustomEvent","detail","bubbles","composed","getValidity","MonthDayCounter","Object","freeze","min","max","placeholder","onChange","data","numberValue","stringValue","join","isFull","isEmpty","toString","set","num","del","clear","inc","gap","replaceValue","Math","dec","isInRange","setMin","setMax","SUPPORTED_FORMATS","DEFAULT_FORMAT","DIVIDER","counterConfig","patterns","MM","DD","createFormat","format","pattern","part","createPattern","toPartsFn","order","parts","index","createToPartsFn","regexp","RegExp","validate","test","getParts","formats","fromEntries","f","parseMonthDayString","trimmed","monthDayFieldAttrs","pickerAttrs","textVars","TextFieldClass","input","inputEleRTL","toggleButton","overlay","backdrop","bottomNav","navButton","MonthDayFieldClass","iconMargin","rtlInputDirection","inputDirection","rtlInputAlignment","inputTextAlign","overlayGap","overlayBackgroundColor","overlayPadding","overlayBoxShadow","overlayOutlineWidth","overlayOutlineColor","overlayOutlineStyle","errorMessageIcon","errorMessageIconSize","errorMessageIconPadding","errorMessageIconRepeat","errorMessageIconPosition","errorMessageFontSize","labelFontWeight","inputValueFontWeight","inputPlaceholderFontWeight","helperTextFontWeight","errorMessageFontWeight","marginTop","backdropBackgroundColor","backdropPointerEvents","padding","boxShadow","bottomNavTopPadding","bottomNavBottomPadding","bottomNavHorizontalPadding","bottomNavAlignment","bottomNavGap","navButtonPadding","navButtonOutlineWidth","updateCountersDisplay","inputElement","popoverToggleButton","validationTarget","opened","monthCounter","find","c","dayCounter","sortedCounters","activeCounter","countersValue","isCountersEmpty","every","isCountersOutOfRange","some","disablePicker","baseElement","isRTL","dir","getComputedStyle","getPropertyValue","replace","clearInputEle","isSelectAll","selectionStart","selectionEnd","isRequired","valueMissing","patternMismatch","reportValidity","newMax","Event","resetCounters","trigger","withBackdrop","renderer","preventDefault","stopPropagation","root","firstChild","positionTarget","cs","CSSStyleSheet","insertRule","adoptedStyleSheets","push","overrideConstructedStylesheet","closePopover","getRootNode","popover","replaceSync","windowRect","body","getBoundingClientRect","inputRect","pickerRect","side","offset","availableLeft","left","availableRight","right","newOffset","abs","css","cancelButton","submitButton","_attachOverlay","bringToFront","_detachOverlay","_enterModalState","disabled","inner","removeAttribute","isReadOnly","openPopover","focus","visibility","isNaN","inputType","caretPos","c1ln","c2ln","caretStart","reduce","acc","counter","setSelectionRange","metaKey","ctrlKey","key","toLowerCase","keys","includes","requested","navigator","clipboard","writeText","err","console","error","pasted","clipboardData","window","getData","numeric","proxyProps","useProxyTargets","icon","renderCopyToClipboard","iconInitConfig","title","iconCopiedConfig","assign","slot","onLabelClick","attributeChangeCallback","_setType","removeEventListener","inputOutlineWidth","inputOutlineOffset","requiredIndicator","inputField","inputMask","helperText","errorMessage","disabledPlaceholder","inputDisabled","inputIcon","externalInput","externalInputDisabled","externalPlaceholder","externalDisabledPlaceholder","labelFontSize","hostMinWidth","inputBackgroundColor","errorMessageTextColor","helperTextColor","inputValueTextColor","inputCaretTextColor","labelRequiredIndicator","inputBorderColor","inputBorderWidth","inputBorderStyle","inputBorderRadius","inputHeight","inputHorizontalPadding","inputOutlineColor","inputOutlineStyle","inputPlaceholderColor","labelPosition","labelTopPosition","labelHorizontalPosition","inputTransformY","inputTransition","marginInlineStart","placeholderOpacity","inputVerticalAlignment","valueInputHeight","valueInputMarginBottom","inputIconOffset","inputIconSize","inputIconColor","inputTextSecurity"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"descope-month-day-field.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/calendar.svg","webpack://@descope/web-components-ui/../components/descope-icon/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-image/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/consts.js","webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/MonthDayFieldPickerClass.js","webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/index.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/MonthDayFieldCounter.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/consts.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/formats.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/helpers.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/MonthDayFieldClass.js","webpack://@descope/web-components-ui/../components/descope-month-day-field/src/component/index.js"],"sourcesContent":["module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05IDVIMTVWNC41MDQ2OEMxNSA0LjIxNDA0IDE1LjIyNiA0IDE1LjUwNDcgNEgxNi40OTUzQzE2Ljc4NiA0IDE3IDQuMjI1OTUgMTcgNC41MDQ2OFY1SDE4Ljc1NjhDMTkuMzAyOCA1IDE5Ljc1IDUuNDQ3MjUgMTkuNzUgNS45OTg5NlY3LjAwMTA0QzE5Ljc1IDcuNTU3MzQgMTkuMzA1MyA4IDE4Ljc1NjggOEg1LjI0MzE3QzQuNjk3MTcgOCA0LjI1IDcuNTUyNzUgNC4yNSA3LjAwMTA0VjUuOTk4OTZDNC4yNSA1LjQ0MjY2IDQuNjk0NjYgNSA1LjI0MzE3IDVIN1Y0LjUwNDY4QzcgNC4yMTQwNCA3LjIyNTk2IDQgNy41MDQ2OCA0SDguNDk1MzJDOC43ODU5NiA0IDkgNC4yMjU5NSA5IDQuNTA0NjhWNVpNNS41MDQ2OCA5SDYuNDk1MzJDNi43ODU5NiA5IDcgOS4yMjU5NiA3IDkuNTA0NjhWMTAuNDk1M0M3IDEwLjc4NiA2Ljc3NDA0IDExIDYuNDk1MzIgMTFINS41MDQ2OEM1LjIxNDA0IDExIDUgMTAuNzc0IDUgMTAuNDk1M1Y5LjUwNDY4QzUgOS4yMTQwNCA1LjIyNTk1IDkgNS41MDQ2OCA5Wk04LjUwNDY4IDlIOS40OTUzMkM5Ljc4NTk2IDkgMTAgOS4yMjU5NiAxMCA5LjUwNDY4VjEwLjQ5NTNDMTAgMTAuNzg2IDkuNzc0MDQgMTEgOS40OTUzMiAxMUg4LjUwNDY4QzguMjE0MDQgMTEgOCAxMC43NzQgOCAxMC40OTUzVjkuNTA0NjhDOCA5LjIxNDA0IDguMjI1OTYgOSA4LjUwNDY4IDlaTTExLjUwNDcgOUgxMi40OTUzQzEyLjc4NiA5IDEzIDkuMjI1OTYgMTMgOS41MDQ2OFYxMC40OTUzQzEzIDEwLjc4NiAxMi43NzQgMTEgMTIuNDk1MyAxMUgxMS41MDQ3QzExLjIxNCAxMSAxMSAxMC43NzQgMTEgMTAuNDk1M1Y5LjUwNDY4QzExIDkuMjE0MDQgMTEuMjI2IDkgMTEuNTA0NyA5Wk01LjUwNDY4IDEySDYuNDk1MzJDNi43ODU5NiAxMiA3IDEyLjIyNiA3IDEyLjUwNDdWMTMuNDk1M0M3IDEzLjc4NiA2Ljc3NDA0IDE0IDYuNDk1MzIgMTRINS41MDQ2OEM1LjIxNDA0IDE0IDUgMTMuNzc0IDUgMTMuNDk1M1YxMi41MDQ3QzUgMTIuMjE0IDUuMjI1OTUgMTIgNS41MDQ2OCAxMlpNOC41MDQ2OCAxMkg5LjQ5NTMyQzkuNzg1OTYgMTIgMTAgMTIuMjI2IDEwIDEyLjUwNDdWMTMuNDk1M0MxMCAxMy43ODYgOS43NzQwNCAxNCA5LjQ5NTMyIDE0SDguNTA0NjhDOC4yMTQwNCAxNCA4IDEzLjc3NCA4IDEzLjQ5NTNWMTIuNTA0N0M4IDEyLjIxNCA4LjIyNTk2IDEyIDguNTA0NjggMTJaTTExLjUwNDcgMTJIMTIuNDk1M0MxMi43ODYgMTIgMTMgMTIuMjI2IDEzIDEyLjUwNDdWMTMuNDk1M0MxMyAxMy43ODYgMTIuNzc0IDE0IDEyLjQ5NTMgMTRIMTEuNTA0N0MxMS4yMTQgMTQgMTEgMTMuNzc0IDExIDEzLjQ5NTNWMTIuNTA0N0MxMSAxMi4yMTQgMTEuMjI2IDEyIDExLjUwNDcgMTJaTTUuNTA0NjggMTVINi40OTUzMkM2Ljc4NTk2IDE1IDcgMTUuMjI2IDcgMTUuNTA0N1YxNi40OTUzQzcgMTYuNzg2IDYuNzc0MDQgMTcgNi40OTUzMiAxN0g1LjUwNDY4QzUuMjE0MDQgMTcgNSAxNi43NzQgNSAxNi40OTUzVjE1LjUwNDdDNSAxNS4yMTQgNS4yMjU5NSAxNSA1LjUwNDY4IDE1Wk04LjUwNDY4IDE1SDkuNDk1MzJDOS43ODU5NiAxNSAxMCAxNS4yMjYgMTAgMTUuNTA0N1YxNi40OTUzQzEwIDE2Ljc4NiA5Ljc3NDA0IDE3IDkuNDk1MzIgMTdIOC41MDQ2OEM4LjIxNDA0IDE3IDggMTYuNzc0IDggMTYuNDk1M1YxNS41MDQ3QzggMTUuMjE0IDguMjI1OTYgMTUgOC41MDQ2OCAxNVpNMTEuNTA0NyAxNUgxMi40OTUzQzEyLjc4NiAxNSAxMyAxNS4yMjYgMTMgMTUuNTA0N1YxNi40OTUzQzEzIDE2Ljc4NiAxMi43NzQgMTcgMTIuNDk1MyAxN0gxMS41MDQ3QzExLjIxNCAxNyAxMSAxNi43NzQgMTEgMTYuNDk1M1YxNS41MDQ3QzExIDE1LjIxNCAxMS4yMjYgMTUgMTEuNTA0NyAxNVpNMTQuNTA0NyA5SDE1LjQ5NTNDMTUuNzg2IDkgMTYgOS4yMjU5NiAxNiA5LjUwNDY4VjEwLjQ5NTNDMTYgMTAuNzg2IDE1Ljc3NCAxMSAxNS40OTUzIDExSDE0LjUwNDdDMTQuMjE0IDExIDE0IDEwLjc3NCAxNCAxMC40OTUzVjkuNTA0NjhDMTQgOS4yMTQwNCAxNC4yMjYgOSAxNC41MDQ3IDlaTTE0LjUwNDcgMTJIMTUuNDk1M0MxNS43ODYgMTIgMTYgMTIuMjI2IDE2IDEyLjUwNDdWMTMuNDk1M0MxNiAxMy43ODYgMTUuNzc0IDE0IDE1LjQ5NTMgMTRIMTQuNTA0N0MxNC4yMTQgMTQgMTQgMTMuNzc0IDE0IDEzLjQ5NTNWMTIuNTA0N0MxNCAxMi4yMTQgMTQuMjI2IDEyIDE0LjUwNDcgMTJaTTE0LjUwNDcgMTVIMTUuNDk1M0MxNS43ODYgMTUgMTYgMTUuMjI2IDE2IDE1LjUwNDdWMTYuNDk1M0MxNiAxNi43ODYgMTUuNzc0IDE3IDE1LjQ5NTMgMTdIMTQuNTA0N0MxNC4yMTQgMTcgMTQgMTYuNzc0IDE0IDE2LjQ5NTNWMTUuNTA0N0MxNCAxNS4yMTQgMTQuMjI2IDE1IDE0LjUwNDcgMTVaTTE3LjUwNDcgMTVIMTguNDk1M0MxOC43ODYgMTUgMTkgMTUuMjI2IDE5IDE1LjUwNDdWMTYuNDk1M0MxOSAxNi43ODYgMTguNzc0IDE3IDE4LjQ5NTMgMTdIMTcuNTA0N0MxNy4yMTQgMTcgMTcgMTYuNzc0IDE3IDE2LjQ5NTNWMTUuNTA0N0MxNyAxNS4yMTQgMTcuMjI2IDE1IDE3LjUwNDcgMTVaTTUuNTA0NjggMThINi40OTUzMkM2Ljc4NTk2IDE4IDcgMTguMjI2IDcgMTguNTA0N1YxOS40OTUzQzcgMTkuNzg2IDYuNzc0MDQgMjAgNi40OTUzMiAyMEg1LjUwNDY4QzUuMjE0MDQgMjAgNSAxOS43NzQgNSAxOS40OTUzVjE4LjUwNDdDNSAxOC4yMTQgNS4yMjU5NSAxOCA1LjUwNDY4IDE4Wk04LjUwNDY4IDE4SDkuNDk1MzJDOS43ODU5NiAxOCAxMCAxOC4yMjYgMTAgMTguNTA0N1YxOS40OTUzQzEwIDE5Ljc4NiA5Ljc3NDA0IDIwIDkuNDk1MzIgMjBIOC41MDQ2OEM4LjIxNDA0IDIwIDggMTkuNzc0IDggMTkuNDk1M1YxOC41MDQ3QzggMTguMjE0IDguMjI1OTYgMTggOC41MDQ2OCAxOFpNMTEuNTA0NyAxOEgxMi40OTUzQzEyLjc4NiAxOCAxMyAxOC4yMjYgMTMgMTguNTA0N1YxOS40OTUzQzEzIDE5Ljc4NiAxMi43NzQgMjAgMTIuNDk1MyAyMEgxMS41MDQ3QzExLjIxNCAyMCAxMSAxOS43NzQgMTEgMTkuNDk1M1YxOC41MDQ3QzExIDE4LjIxNCAxMS4yMjYgMTggMTEuNTA0NyAxOFpNMTQuNTA0NyAxOEgxNS40OTUzQzE1Ljc4NiAxOCAxNiAxOC4yMjYgMTYgMTguNTA0N1YxOS40OTUzQzE2IDE5Ljc4NiAxNS43NzQgMjAgMTUuNDk1MyAyMEgxNC41MDQ3QzE0LjIxNCAyMCAxNCAxOS43NzQgMTQgMTkuNDk1M1YxOC41MDQ3QzE0IDE4LjIxNCAxNC4yMjYgMTggMTQuNTA0NyAxOFpNMTcuNTA0NyAxOEgxOC40OTUzQzE4Ljc4NiAxOCAxOSAxOC4yMjYgMTkgMTguNTA0N1YxOS40OTUzQzE5IDE5Ljc4NiAxOC43NzQgMjAgMTguNDk1MyAyMEgxNy41MDQ3QzE3LjIxNCAyMCAxNyAxOS43NzQgMTcgMTkuNDk1M1YxOC41MDQ3QzE3IDE4LjIxNCAxNy4yMjYgMTggMTcuNTA0NyAxOFpNMTcuNTA0NyAxMkgxOC40OTUzQzE4Ljc4NiAxMiAxOSAxMi4yMjYgMTkgMTIuNTA0N1YxMy40OTUzQzE5IDEzLjc4NiAxOC43NzQgMTQgMTguNDk1MyAxNEgxNy41MDQ3QzE3LjIxNCAxNCAxNyAxMy43NzQgMTcgMTMuNDk1M1YxMi41MDQ3QzE3IDEyLjIxNCAxNy4yMjYgMTIgMTcuNTA0NyAxMlpNMTcuNTA0NyA5SDE4LjQ5NTNDMTguNzg2IDkgMTkgOS4yMjU5NiAxOSA5LjUwNDY4VjEwLjQ5NTNDMTkgMTAuNzg2IDE4Ljc3NCAxMSAxOC40OTUzIDExSDE3LjUwNDdDMTcuMjE0IDExIDE3IDEwLjc3NCAxNyAxMC40OTUzVjkuNTA0NjhDMTcgOS4yMTQwNCAxNy4yMjYgOSAxNy41MDQ3IDlaIiBmaWxsPSIjODA4MDgwIi8+IDwvc3ZnPiA=\"","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","// February shows 29 days even though Feb 29 only exists in leap years —\n// the picker intentionally has no year, so Feb 29 is unconditionally allowed.\nexport const DAYS_PER_MONTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nexport const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n","import { createBaseInputClass } from '@descope-ui/common/base-classes';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n forwardAttrs,\n getComponentName,\n injectStyle,\n} from '@descope-ui/common/components-helpers';\nimport {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n} from '@descope-ui/common/components-mixins';\n\nimport { DAYS_PER_MONTH, months as DEFAULT_MONTHS } from './consts';\n\nexport const componentName = getComponentName('month-day-field-picker');\n\nconst observedAttrs = [\n 'initial-value',\n 'picker-months',\n 'st-host-direction',\n 'disabled',\n 'full-width',\n];\n\nconst BaseInputClass = createBaseInputClass({\n componentName,\n baseSelector: 'div',\n});\n\nconst isValidMonthNamesArr = (arr) =>\n Array.isArray(arr) && arr.length === 12 && arr.filter(Boolean).length === 12;\n\nconst ensureMonthNamesArr = (attrVal) => {\n const arr = attrVal?.split(',');\n return isValidMonthNamesArr(arr) ? arr : DEFAULT_MONTHS;\n};\n\n// Build descope-combo-box items via DOM (textContent / setAttribute) rather than an\n// innerHTML template. picker-months is a user-facing attribute (localized strings,\n// admin-configured copy) so labels must never be parsed as HTML.\nconst buildOptions = (entries, parent) => {\n const fragment = document.createDocumentFragment();\n entries.forEach(({ id, name }) => {\n const item = document.createElement('div');\n item.className = 'combo-box-item';\n item.setAttribute('data-id', String(id));\n item.setAttribute('data-name', name);\n item.textContent = name;\n fragment.appendChild(item);\n });\n parent.replaceChildren(fragment);\n};\n\nconst monthEntries = (names) =>\n names.map((name, idx) => ({ id: idx + 1, name }));\n\nconst dayEntries = (count) =>\n Array.from({ length: count }, (_, i) => ({ id: i + 1, name: String(i + 1) }));\n\nclass RawMonthDayPicker extends BaseInputClass {\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttrs);\n }\n\n // 1..12 or null\n #month = null;\n\n // 1..N (N depends on month) or null\n #day = null;\n\n constructor() {\n super();\n\n 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 `;\n\n injectStyle(\n `\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 `,\n this,\n );\n\n // Bind refs here so attributeChangedCallback (which fires before init) can\n // render into the combos instead of bailing on unbound refs and being redone.\n this.monthInput = this.shadowRoot.querySelector('.month-input');\n this.dayInput = this.shadowRoot.querySelector('.day-input');\n }\n\n // ---- public API ----\n\n get month() {\n return this.#month;\n }\n\n set month(val) {\n const n = Number(val);\n if (!Number.isInteger(n) || n < 1 || n > 12) {\n this.#month = null;\n } else {\n this.#month = n;\n }\n // If the previously selected day no longer exists in the newly selected month\n // (e.g. April 30 → February), reset to day 1. Days that still fit are kept\n // (e.g. April 30 → January keeps 30).\n if (\n this.#day != null &&\n this.#month != null &&\n this.#day > DAYS_PER_MONTH[this.#month - 1]\n ) {\n this.#day = 1;\n }\n this.#syncMonthInput();\n this.#renderDayOptions();\n this.#syncDayInput();\n this.#dispatchChange();\n }\n\n get day() {\n return this.#day;\n }\n\n set day(val) {\n const n = Number(val);\n if (!Number.isInteger(n) || n < 1) {\n this.#day = null;\n } else if (this.#month != null && n > DAYS_PER_MONTH[this.#month - 1]) {\n this.#day = null;\n } else {\n this.#day = n;\n }\n this.#syncDayInput();\n this.#dispatchChange();\n }\n\n /**\n * Sets both month and day from a string `\"MM/DD\"`. Empty / null / undefined resets to\n * today's date (current real-world month + current day). Other formats are silently ignored.\n */\n set value(val) {\n if (!val) {\n this.#defaultToToday();\n return;\n }\n const match = /^(0?[1-9]|1[0-2])\\D(0?[1-9]|[12][0-9]|3[01])$/.exec(\n String(val).trim(),\n );\n if (!match) return;\n const m = Number(match[1]);\n const d = Number(match[2]);\n this.month = m;\n // Re-assign day after month so the DAYS_PER_MONTH ceiling check uses the new month.\n this.day = d;\n }\n\n #defaultToToday() {\n const now = new Date();\n this.month = now.getMonth() + 1;\n this.day = now.getDate();\n }\n\n /** Returns `\"MM/DD\"` when both values are set; empty string otherwise. */\n get value() {\n if (this.#month == null || this.#day == null) return '';\n return `${String(this.#month).padStart(2, '0')}/${String(this.#day).padStart(2, '0')}`;\n }\n\n // ---- lifecycle ----\n\n init() {\n super.init?.();\n\n this.#initMonthInput();\n this.#initDayInput();\n\n // If we have neither initial-value nor an explicit month, default to today's date\n // (current real-world month + current day). The month/day setters paint the combos.\n const initial = this.getAttribute('initial-value');\n if (initial) {\n this.value = initial;\n } else if (this.#month == null) {\n this.#defaultToToday();\n }\n\n forwardAttrs(this, this.monthInput, {\n includeAttrs: ['disabled', 'size', 'st-host-direction'],\n });\n forwardAttrs(this, this.dayInput, {\n includeAttrs: ['disabled', 'size', 'st-host-direction'],\n });\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n super.attributeChangedCallback?.(name, oldVal, newVal);\n if (oldVal === newVal) return;\n\n if (name === 'initial-value') {\n this.value = newVal;\n } else if (name === 'picker-months') {\n this.#renderMonthOptions();\n }\n }\n\n // ---- internals ----\n\n get #monthNames() {\n return ensureMonthNamesArr(this.getAttribute('picker-months'));\n }\n\n #initMonthInput() {\n this.#renderMonthOptions();\n this.monthInput.addEventListener('input', this.#onMonthChange.bind(this));\n }\n\n #initDayInput() {\n // Day options are populated lazily — they depend on the selected month.\n this.dayInput.addEventListener('input', this.#onDayChange.bind(this));\n }\n\n #renderMonthOptions() {\n buildOptions(monthEntries(this.#monthNames), this.monthInput);\n this.#syncMonthInput();\n }\n\n #renderDayOptions() {\n const count = DAYS_PER_MONTH[this.#month - 1] ?? 0;\n buildOptions(dayEntries(count), this.dayInput);\n }\n\n #syncMonthInput() {\n if (!this.monthInput) return;\n // Defer one tick: descope-combo-box indexes its options via MutationObserver\n // (microtask). Setting `.value` synchronously right after appending options\n // silently fails to select an item, leaving the combo empty. Calendar uses\n // the same setTimeout workaround for its year input.\n setTimeout(() => {\n if (!this.monthInput) return;\n this.monthInput.value = this.#month != null ? String(this.#month) : '';\n });\n }\n\n #syncDayInput() {\n // Same microtask deferral as #syncMonthInput: the combo-box indexes its options\n // via MutationObserver, so setting `.value` synchronously after rendering options\n // silently no-ops.\n setTimeout(() => {\n if (!this.dayInput) return;\n this.dayInput.value = this.#day !== null ? String(this.#day) : '';\n });\n }\n\n #onMonthChange(e) {\n const raw = e.target?.value;\n const next = raw ? Number(raw) : null;\n if (next === this.#month) return;\n this.month = next;\n }\n\n #onDayChange(e) {\n const raw = e.target?.value;\n const next = raw ? Number(raw) : null;\n if (next === this.#day) return;\n this.day = next;\n }\n\n // Emitted on every month/day mutation (user or programmatic) so a host can observe\n // the picker's value/validity — e.g. to drive an external submit button's enabled\n // state. The host (descope-month-day-field) owns the Done/Cancel buttons.\n #dispatchChange() {\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { month: this.#month, day: this.#day },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n // The picker is popover content, not a form field, so it has no validation semantics.\n // Returning an empty validity object satisfies inputValidationMixin (the base class\n // default returns undefined and crashes the mixin's getErrorMessage destructure).\n getValidity() {\n return {};\n }\n}\n\nconst { picker, monthInput, dayInput, inputsRow } = {\n picker: { selector: () => '.picker' },\n monthInput: { selector: () => '.month-input' },\n dayInput: { selector: () => '.day-input' },\n inputsRow: { selector: () => '.inputs-row' },\n};\n\nexport const MonthDayFieldPickerClass = compose(\n createStyleMixin({\n componentNameOverride: getComponentName('input-wrapper'),\n }),\n createStyleMixin({\n mappings: {\n fontSize: {},\n fontFamily: {},\n hostWidth: { selector: () => ':host', property: 'width' },\n hostDirection: { property: 'direction' },\n\n pickerPadding: { ...picker, property: 'padding' },\n\n inputsRowGap: { ...inputsRow, property: 'gap' },\n inputWidth: [\n { ...monthInput, property: 'width' },\n { ...dayInput, property: 'width' },\n ],\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawMonthDayPicker);\n","import '@descope-ui/descope-combo-box';\n\nimport {\n componentName,\n MonthDayFieldPickerClass,\n} from './MonthDayFieldPickerClass';\n\ncustomElements.define(componentName, MonthDayFieldPickerClass);\n\nexport { MonthDayFieldPickerClass, componentName };\n","// MonthDayCounter holds the digit-buffer state for a single date part (month or day),\n// supporting digit-by-digit typing, increment/decrement with min/max wrap, and\n// padding to a fixed display width derived from `max`. This is a verbatim copy of\n// descope-date-field's DateCounter class — only the export name differs.\nexport class MonthDayCounter {\n #data = Object.freeze([]);\n\n constructor({ id, min, max, placeholder }, onChange) {\n this.id = id;\n this.min = min;\n this.max = max;\n this.placeholder = placeholder;\n this.onChange = onChange;\n }\n\n get data() {\n return this.#data;\n }\n\n set data(val) {\n this.#data = Object.freeze(val);\n this.onChange?.();\n }\n\n get #initialNumValue() {\n return this.data.length ? this.numberValue : 0;\n }\n\n get numberValue() {\n return Number(this.stringValue);\n }\n\n get stringValue() {\n return (this.data.join('') || this.placeholder).padStart(this.length, '0');\n }\n\n get isFull() {\n return this.numberValue * 10 > this.max || this.data.length === this.length;\n }\n\n get isEmpty() {\n return this.stringValue === this.placeholder;\n }\n\n get length() {\n return this.max.toString().length;\n }\n\n set(val) {\n this.data = val.toString().split('');\n }\n\n add(num) {\n let { data } = this;\n\n data = [...data, num];\n\n const numVal = Number(data.join(''));\n\n if (numVal > this.max) {\n data = [num];\n } else if (this.length < data.length) {\n data = data.slice(1, data.length);\n }\n\n this.data = data;\n\n return num;\n }\n\n del() {\n if (!this.data.filter((d) => d !== '0').filter(Boolean).length) {\n this.data = [];\n } else {\n this.data = this.data.slice(0, this.data.length - 1);\n }\n }\n\n clear() {\n this.data = [];\n }\n\n inc(gap) {\n this.replaceValue(\n this.#initialNumValue < this.max\n ? Math.max(this.#initialNumValue + (gap || 1), this.min)\n : this.min,\n );\n }\n\n dec(gap) {\n this.replaceValue(\n this.#initialNumValue > this.min\n ? Math.min(this.#initialNumValue - (gap || 1), this.max)\n : this.max,\n );\n }\n\n isInRange(val) {\n return val >= this.min && val <= this.max;\n }\n\n replaceValue(val) {\n if (this.isInRange(val)) {\n this.data = val.toString().padStart(this.length, 0).split('');\n }\n }\n\n setMin(val) {\n this.min = Number(val);\n }\n\n setMax(val) {\n this.max = Number(val);\n }\n}\n","export const SUPPORTED_FORMATS = ['MM/DD', 'DD/MM'];\n\nexport const DEFAULT_FORMAT = SUPPORTED_FORMATS[0];\n\nexport const DIVIDER = '/';\n\nexport const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\n// February shows 29 days even though Feb 29 only exists in leap years —\n// the component intentionally has no year, so we allow Feb 29 unconditionally.\nexport const DAYS_PER_MONTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nexport const counterConfig = {\n MONTH: { id: 'month', min: 1, max: 12, placeholder: 'MM' },\n // DAY.max is updated at runtime to DAYS_PER_MONTH[month-1] when a month is set.\n DAY: { id: 'day', min: 1, max: 31, placeholder: 'DD' },\n};\n\nexport const BUTTON_LABEL_DONE = 'Done';\nexport const BUTTON_LABEL_CANCEL = 'Cancel';\n\nexport const MOBILE_DEVICE_INTERACTION_TIMEOUT_MS = 150;\n","import { DIVIDER, SUPPORTED_FORMATS } from './consts';\n\nconst patterns = {\n MM: '(0?[1-9]|1[0-2])',\n DD: '(0?[1-9]|[12][0-9]|3[01])',\n};\n\nconst createPattern = (format) => {\n const pattern = format\n .split(DIVIDER)\n .map((part) => patterns[part])\n .join('\\\\D');\n\n return `^${pattern}$`;\n};\n\nconst createToPartsFn = (format) => {\n const order = format.split(DIVIDER);\n return (match) => {\n const parts = {};\n order.forEach((part, index) => {\n parts[part] = Number(match[index + 1]);\n });\n return { month: parts.MM, day: parts.DD };\n };\n};\n\nconst createFormat = (format) => {\n const pattern = createPattern(format);\n const toPartsFn = createToPartsFn(format);\n const regexp = new RegExp(pattern);\n\n return {\n pattern,\n validate: (val) => regexp.test(val),\n getParts: (val) => {\n const match = regexp.exec(val);\n return match ? toPartsFn(match) : null;\n },\n };\n};\n\nexport const formats = Object.fromEntries(\n SUPPORTED_FORMATS.map((f) => [f, createFormat(f)]),\n);\n","import { formats } from './formats';\n\nexport const isNumber = (val) =>\n !!String(val || '').trim() && !Number.isNaN(Number(val));\n\nexport const formatMonthDay = (month, day, format) =>\n format.replace(/MM|DD/g, (m) =>\n String(m === 'MM' ? month : day).padStart(2, '0'),\n );\n\nexport const parseMonthDayString = (val, format) => {\n const trimmed = val?.trim?.();\n if (!trimmed) return null;\n return formats[format]?.getParts(trimmed) ?? null;\n};\n\n// Vaadin uses a \"constructed stylesheet\" to hide :host on dialog/popover content.\n// To override it, we push our own constructed stylesheet into the shadow root.\n// Mirrors the workaround used by descope-date-field.\n// Opened upstream issue: https://github.com/vaadin/web-components/issues/7979\nexport const overrideConstructedStylesheet = (ele) => {\n const cs = new CSSStyleSheet();\n cs.insertRule(':host{display:block!important;}');\n ele?.shadowRoot?.adoptedStyleSheets?.push(cs);\n};\n","import { TextFieldClass } from '@descope-ui/descope-text-field/class';\nimport { ButtonClass } from '@descope-ui/descope-button/class';\nimport { createBaseInputClass } from '@descope-ui/common/base-classes';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n portalMixin,\n} from '@descope-ui/common/components-mixins';\nimport {\n forwardAttrs,\n getComponentName,\n injectStyle,\n} from '@descope-ui/common/components-helpers';\n\nimport { MonthDayCounter } from './MonthDayFieldCounter';\nimport {\n BUTTON_LABEL_CANCEL,\n BUTTON_LABEL_DONE,\n counterConfig,\n DAYS_PER_MONTH,\n DEFAULT_FORMAT,\n DIVIDER,\n MOBILE_DEVICE_INTERACTION_TIMEOUT_MS,\n} from './consts';\nimport { formats } from './formats';\nimport calendarIcon from './calendar.svg';\nimport {\n formatMonthDay,\n isNumber,\n overrideConstructedStylesheet,\n parseMonthDayString,\n} from './helpers';\n\nexport const componentName = getComponentName('month-day-field');\n\n// vaadin-popover is the baseSelector hack carried over from descope-date-field so portalMixin\n// can style the overlay. A cleaner solution requires upstream changes to portalMixin.\nconst BASE_SELECTOR = 'vaadin-popover';\nconst BaseInputClass = createBaseInputClass({\n componentName,\n baseSelector: BASE_SELECTOR,\n});\n\nconst monthDayFieldAttrs = [\n 'format',\n 'opened',\n 'initial-value',\n 'readonly',\n 'disable-picker',\n];\nconst pickerAttrs = [\n 'picker-months',\n 'picker-label-submit',\n 'picker-label-cancel',\n];\nconst observedAttrs = [...monthDayFieldAttrs, ...pickerAttrs];\n\nclass RawMonthDayFieldClass extends BaseInputClass {\n format = DEFAULT_FORMAT;\n\n #selectedCounterIdx = 0;\n\n #onCounterChange = () => {\n this.updateCountersDisplay();\n this.#syncDayCounterMax();\n this.#dispatchInput();\n };\n\n #monthDayFieldCounters = [\n new MonthDayCounter(counterConfig.MONTH, this.#onCounterChange.bind(this)),\n new MonthDayCounter(counterConfig.DAY, this.#onCounterChange.bind(this)),\n ];\n\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttrs);\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div>\n <descope-text-field inputmode=\"numeric\">\n <span slot=\"suffix\" class=\"toggle-picker\">\n <descope-icon src=\"${calendarIcon}\"></descope-icon>\n </span>\n </descope-text-field>\n <vaadin-popover></vaadin-popover>\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 ::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 `,\n this,\n );\n\n this.inputElement = this.shadowRoot.querySelector('descope-text-field');\n this.popoverToggleButton =\n this.inputElement.querySelector('.toggle-picker');\n }\n\n // ---- getters ----\n\n get validationTarget() {\n return this.inputElement;\n }\n\n get opened() {\n return this.getAttribute('opened') === 'true';\n }\n\n get monthCounter() {\n return this.#monthDayFieldCounters.find(\n (c) => c.id === counterConfig.MONTH.id,\n );\n }\n\n get dayCounter() {\n return this.#monthDayFieldCounters.find(\n (c) => c.id === counterConfig.DAY.id,\n );\n }\n\n get sortedCounters() {\n return this.format\n .split(DIVIDER)\n .map((placeholder) =>\n this.#monthDayFieldCounters.find((c) => c.placeholder === placeholder),\n );\n }\n\n get activeCounter() {\n return this.sortedCounters[this.#selectedCounterIdx];\n }\n\n get countersValue() {\n return this.sortedCounters.map((c) => c.stringValue).join(DIVIDER);\n }\n\n get isCountersEmpty() {\n return this.#monthDayFieldCounters.every((c) => c.isEmpty);\n }\n\n get isCountersOutOfRange() {\n return this.#monthDayFieldCounters.some((c) => !c.isInRange(c.numberValue));\n }\n\n get disablePicker() {\n return this.getAttribute('disable-picker') === 'true';\n }\n\n get overlay() {\n return this.baseElement.shadowRoot?.querySelector('vaadin-popover-overlay');\n }\n\n get backdrop() {\n return this.overlay?.shadowRoot?.querySelector('#backdrop');\n }\n\n get picker() {\n return this.overlay?.querySelector('descope-month-day-field-picker');\n }\n\n get isRTL() {\n const dir = getComputedStyle(this.baseElement).getPropertyValue(\n 'direction',\n );\n if (dir) return dir === 'rtl';\n return this.getAttribute('st-host-direction') === 'rtl';\n }\n\n get value() {\n if (this.isCountersEmpty || this.isCountersOutOfRange) return '';\n return formatMonthDay(\n this.monthCounter.numberValue,\n this.dayCounter.numberValue,\n this.format,\n );\n }\n\n set value(val) {\n const parts = val ? parseMonthDayString(String(val), this.format) : null;\n if (parts) {\n this.#applyMonthAndDay(parts.month, parts.day);\n } else {\n this.#monthDayFieldCounters.forEach((c) => c.clear());\n this.clearInputEle();\n }\n }\n\n get isSelectAll() {\n const { value, selectionStart, selectionEnd } = this.inputElement;\n return value.length === selectionStart + selectionEnd;\n }\n\n // ---- validity ----\n\n getValidity() {\n if (this.isRequired && this.isCountersEmpty) {\n return { valueMissing: true };\n }\n // Empty counters also read as out-of-range, so gate on !isCountersEmpty to\n // flag only a filled-but-invalid entry (e.g. Feb 30), not an empty field.\n if (!this.isCountersEmpty && this.isCountersOutOfRange) {\n return { patternMismatch: true };\n }\n return {};\n }\n\n reportValidity() {\n this.inputElement.reportValidity();\n }\n\n // ---- counter helpers ----\n\n #syncDayCounterMax() {\n const m = this.monthCounter.numberValue;\n const newMax = DAYS_PER_MONTH[m - 1] ?? 31;\n if (this.dayCounter.max !== newMax) {\n this.dayCounter.setMax(newMax);\n }\n }\n\n // Single place to apply a (month, day) pair to the counters. The trap this avoids:\n // dayCounter.replaceValue silently no-ops when the incoming day is out of range,\n // so without an explicit clear, a prior valid day \"sticks\" through the month change\n // — e.g. assigning \"02/30\" over an existing \"01/15\" reads back as \"02/15\" with no\n // signal that the input was rejected. Clearing the day forces the resulting state\n // to be invalid and visibly empty.\n #applyMonthAndDay(month, day) {\n this.monthCounter.replaceValue(month);\n this.#syncDayCounterMax();\n if (day > this.dayCounter.max) {\n this.dayCounter.clear();\n } else {\n this.dayCounter.replaceValue(day);\n }\n }\n\n updateCountersDisplay() {\n this.inputElement.value = this.countersValue;\n }\n\n #dispatchInput() {\n this.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n resetCounters() {\n this.#monthDayFieldCounters.forEach((c) => c.clear());\n }\n\n clearInputEle() {\n this.inputElement.value = '';\n }\n\n // ---- lifecycle ----\n\n init() {\n super.init?.();\n\n this.#updateFormatPattern();\n this.#initPopover();\n this.#onCounterChange();\n this.#initInputElement();\n\n setTimeout(() => this.#overrideOverlaySettings(), 0);\n }\n\n #initInputElement() {\n this.inputElement.getValidity = this.getValidity.bind(this);\n\n this.popoverToggleButton.addEventListener(\n 'click',\n this.#onPopoverToggle.bind(this),\n );\n\n this.inputElement.addEventListener('focus', this.#onFocus.bind(this));\n this.inputElement.addEventListener('blur', this.#onBlur.bind(this));\n this.inputElement.addEventListener(\n 'click',\n this.#handleMouseCaretPositionChange.bind(this),\n );\n this.inputElement.addEventListener(\n 'keydown',\n this.#handleKeyboard.bind(this),\n );\n this.inputElement.addEventListener(\n 'beforeinput',\n this.#handleInput.bind(this),\n );\n this.inputElement.addEventListener(\n 'pointerdown',\n this.#onPointerDown.bind(this),\n );\n this.inputElement.addEventListener('paste', this.#onPaste.bind(this));\n\n forwardAttrs(this, this.inputElement, {\n includeAttrs: [\n 'label',\n 'label-type',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'bordered',\n 'required',\n 'full-width',\n 'st-host-direction',\n 'pattern',\n 'data-errormessage-value-missing',\n 'data-errormessage-pattern-mismatch',\n 'st-error-message-icon',\n 'st-error-message-icon-size',\n 'st-error-message-icon-padding',\n ],\n });\n }\n\n // ---- popover ----\n\n #initPopover() {\n this.baseElement.trigger = ['click'];\n this.baseElement.withBackdrop = true;\n this.baseElement.renderer = this.#popoverRenderer.bind(this);\n\n this.baseElement.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n\n #popoverPosStylesheet;\n\n #popoverRenderer(root) {\n if (!root.firstChild) {\n this.overlay.positionTarget =\n this.shadowRoot.querySelector('.toggle-picker');\n root.appendChild(this.#getPopoverContent());\n overrideConstructedStylesheet(this.baseElement);\n this.backdrop?.addEventListener('click', this.closePopover.bind(this));\n // Seed overlay-scoped rules once. The hide toggle stays a class change (not an\n // inline style write — avoids style-src CSP concerns). Only structural layout\n // lives here; themeable nav values (padding/gap/alignment, button padding) come\n // from the portalMixin overlay mappings below.\n injectStyle(\n `\n .overlay-hidden { visibility: hidden; }\n .bottom-nav {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n }\n `,\n root.getRootNode(),\n );\n }\n\n // appendChild above ran the picker's init(), which defaults to today. Overwrite\n // it with the parent's value here — synchronously, before the overlay is shown —\n // so the picker reflects the real value immediately (rather than briefly showing\n // today). Keep this inline, not in the 100ms setTimeout below, so the value is\n // already correct for anything that reads picker.month / picker.day on open.\n this.#updatePickerView();\n\n // Hide overlay before adjusting position to prevent flickering.\n root.classList.add('overlay-hidden');\n\n setTimeout(() => {\n this.#adjustPopoverPosition();\n root.classList.remove('overlay-hidden');\n }, 100);\n }\n\n // Vaadin's popover anchors the overlay to the positionTarget (our .toggle-picker icon),\n // which leaves the popover visually offset from the input. Shift it so its leading edge\n // aligns with the input's leading edge — same approach legacy descope-date-field uses\n // (DateFieldClass.#adjustPopoverPosition).\n #adjustPopoverPosition() {\n const popover = this.shadowRoot.querySelector('vaadin-popover').shadowRoot;\n if (!popover || !this.picker) return;\n\n // Reset any previous offset so getBoundingClientRect measures the natural position.\n // NOTE: we offset with margin, not `transform`. A `transform` on this element\n // makes it the containing block for `position: fixed` descendants, which traps\n // the nested combo-box dropdowns inside the popover box (they then can't size\n // to the viewport and get clipped). `margin` shifts it identically without\n // creating a containing block, so the combo overlays stay viewport-positioned.\n this.#popoverPosStylesheet?.replaceSync(\n `vaadin-popover-overlay::part(overlay) { margin-left: 0; }`,\n );\n\n const windowRect = document.body.getBoundingClientRect();\n const inputRect = this.getBoundingClientRect();\n const pickerRect = this.picker.getBoundingClientRect();\n\n const side = this.isRTL ? 'right' : 'left';\n const offset = inputRect[side] - pickerRect[side];\n const availableLeft = pickerRect.left;\n const availableRight = windowRect.width - pickerRect.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 const css = `\n vaadin-popover-overlay::part(overlay) {\n margin-left: ${newOffset}px;\n }\n `;\n\n if (this.#popoverPosStylesheet) {\n this.#popoverPosStylesheet.replaceSync(css);\n } else {\n this.#popoverPosStylesheet = injectStyle(css, popover);\n }\n }\n\n #getPopoverContent() {\n const ele = document.createElement('span');\n ele.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 `;\n const picker = ele.querySelector('descope-month-day-field-picker');\n this.cancelButton = ele.querySelector('.cancel-button');\n this.submitButton = ele.querySelector('.submit-button');\n this.#syncButtonLabels();\n this.cancelButton.addEventListener('click', this.#onCancel.bind(this));\n this.submitButton.addEventListener('click', this.#onDone.bind(this));\n // The picker is a pure selector now; it emits `change` on every month/day\n // mutation so we can drive the Done button's enabled state from here.\n picker.addEventListener('change', this.#onPickerChange.bind(this));\n return ele;\n }\n\n // Open inside the shadow DOM rather than letting Vaadin re-parent the overlay onto body —\n // makes the overlay themable via portalMixin selectors. Same trick descope-date-field uses.\n #overrideOverlaySettings() {\n if (!this.overlay) return;\n this.overlay._attachOverlay = () => this.overlay.bringToFront();\n this.overlay._detachOverlay = () => {};\n this.overlay._enterModalState = () => {};\n }\n\n #updatePickerView() {\n if (!this.picker) return;\n\n // The picker is created once and reused, so we re-sync its state from the parent\n // every time the popover opens. Sync via picker.month / picker.day rather than\n // picker.value: this.value is formatted per the active `format` attribute (e.g.\n // \"04/07\" in DD/MM for July 4), but MonthDayPicker.value only parses MM/DD —\n // so a DD/MM string would be reinterpreted (e.g. April 7 instead of July 4).\n // Going through the numeric properties bypasses the format-string indirection\n // entirely, and also avoids the attributeChangedCallback short-circuit when the\n // attribute value would be unchanged.\n if (this.isCountersEmpty) {\n // Empty parent → let picker fall back to its today-default via value=''.\n this.picker.value = '';\n } else {\n this.picker.month = this.monthCounter.isEmpty\n ? null\n : this.monthCounter.numberValue;\n this.picker.day = this.dayCounter.isEmpty\n ? null\n : this.dayCounter.numberValue;\n }\n\n forwardAttrs(this, this.picker, {\n includeAttrs: [\n 'st-host-direction',\n 'readonly',\n 'disabled',\n 'picker-months',\n ],\n });\n }\n\n get #submitLabel() {\n return this.getAttribute('picker-label-submit') || BUTTON_LABEL_DONE;\n }\n\n get #cancelLabel() {\n return this.getAttribute('picker-label-cancel') || BUTTON_LABEL_CANCEL;\n }\n\n #syncButtonLabels() {\n if (!this.submitButton) return;\n this.submitButton.textContent = this.#submitLabel;\n this.cancelButton.textContent = this.#cancelLabel;\n }\n\n // Mirror the picker's value/validity onto the Done button's enabled state.\n #onPickerChange(e) {\n const { month, day } = e.detail || {};\n this.#setDoneDisabled(month == null || day == null);\n }\n\n #setDoneDisabled(disabled) {\n if (!this.submitButton) return;\n const inner = this.submitButton.shadowRoot?.querySelector('vaadin-button');\n if (disabled) {\n this.submitButton.setAttribute('disabled', 'true');\n inner?.setAttribute('disabled', 'true');\n } else {\n this.submitButton.removeAttribute('disabled');\n inner?.removeAttribute('disabled');\n }\n }\n\n #onCancel() {\n // The picker re-syncs from our counters on every reopen, so no local cleanup.\n this.closePopover();\n }\n\n #onDone() {\n if (this.isReadOnly) {\n this.closePopover();\n return;\n }\n const month = this.picker?.month;\n const day = this.picker?.day;\n if (month == null || day == null) {\n this.closePopover();\n return;\n }\n this.#applyMonthAndDay(month, day);\n this.#dispatchInput();\n this.closePopover();\n }\n\n #onPopoverToggle() {\n this.opened ? this.closePopover() : this.openPopover();\n }\n\n openPopover() {\n if (this.disablePicker) return;\n this.setAttribute('opened', 'true');\n }\n\n closePopover() {\n this.removeAttribute('opened');\n this.inputElement.focus();\n }\n\n #togglePopoverAccess(visibility) {\n if (visibility) {\n this.popoverToggleButton.classList.remove('hidden');\n } else {\n this.popoverToggleButton.classList.add('hidden');\n }\n }\n\n // ---- input / keyboard ----\n\n #handleInput(e) {\n e.preventDefault();\n this.#handleSelectAll();\n\n if (e.data && isNumber(e.data)) {\n this.#parseDigits(e.data);\n this.updateCountersDisplay();\n } else if (e.inputType) {\n this.#handleNavKeys(e);\n }\n }\n\n #handleSelectAll() {\n if (this.isSelectAll) {\n this.#selectFirstCounter();\n }\n }\n\n #parseDigits(value) {\n this.activeCounter.add(value);\n if (this.activeCounter.isFull) {\n this.#selectNextCounter();\n }\n this.#setInputSelectionRange();\n }\n\n #getCounterIdx(caretPos) {\n const [c1ln, c2ln] = this.sortedCounters.map((c) => c.length);\n if (caretPos <= c1ln) return 0;\n if (caretPos >= c1ln && caretPos <= c1ln + c2ln + 1) return 1;\n return 1;\n }\n\n #setSelectedCounterByCaretPosition(e) {\n this.#selectedCounterIdx = this.#getCounterIdx(\n e.target?.selectionStart || this.inputElement.selectionStart,\n );\n }\n\n #selectFirstCounter() {\n this.#selectedCounterIdx = 0;\n }\n\n #selectNextCounter() {\n if (this.#selectedCounterIdx < this.#monthDayFieldCounters.length - 1) {\n this.#selectedCounterIdx = Math.min(this.#selectedCounterIdx + 1, 1);\n }\n }\n\n #selectPrevCounter() {\n if (this.#selectedCounterIdx > 0) {\n this.#selectedCounterIdx = 0;\n }\n }\n\n #setInputSelectionRange() {\n if (this.#selectedCounterIdx < 0) return;\n\n setTimeout(() => {\n const caretStart = this.sortedCounters\n .slice(0, this.#selectedCounterIdx)\n .reduce(\n (acc, counter) => acc + counter.length,\n this.#selectedCounterIdx,\n );\n\n this.inputElement.setSelectionRange(\n caretStart,\n caretStart + this.sortedCounters[this.#selectedCounterIdx].length,\n );\n });\n }\n\n #handleKeyboard(e) {\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === 'x') this.#onCut(e);\n return;\n }\n\n this.#handleSelectAll();\n\n if (e.key === 'ArrowUp') {\n this.activeCounter.inc();\n } else if (e.key === 'ArrowDown') {\n this.activeCounter.dec();\n } else if (e.key === 'ArrowRight') {\n this.#selectNextCounter();\n } else if (e.key === 'ArrowLeft') {\n this.#selectPrevCounter();\n }\n\n this.#setInputSelectionRange();\n }\n\n #handleNavKeys(e) {\n if (this.isReadOnly) return;\n if (this.opened) this.closePopover();\n if (!this.activeCounter) return;\n\n if (e.inputType === 'deleteContentBackward') {\n this.#handleBackspace();\n }\n\n this.#setInputSelectionRange();\n }\n\n #handleBackspace() {\n if (this.isSelectAll) {\n this.#resetToInitialState();\n return;\n }\n\n const counter = this.activeCounter;\n if (counter.isEmpty) {\n this.#selectPrevCounter();\n this.#setInputSelectionRange();\n } else {\n counter.set('');\n }\n\n setTimeout(() => {\n this.updateCountersDisplay();\n this.#setInputSelectionRange();\n });\n }\n\n #handleMouseCaretPositionChange(e) {\n if (this.opened) return;\n e.preventDefault();\n this.#setSelectedCounterByCaretPosition(e);\n this.#setInputSelectionRange();\n }\n\n #onPointerDown(e) {\n setTimeout(\n () => this.#handleMouseCaretPositionChange(e),\n MOBILE_DEVICE_INTERACTION_TIMEOUT_MS,\n );\n }\n\n #onFocus() {\n if (this.isReadOnly) return;\n setTimeout(() => this.#resetDisplay());\n }\n\n #onBlur() {\n if (this.opened) return;\n if (this.inputElement.value === this.format) {\n this.clearInputEle();\n }\n }\n\n #resetDisplay() {\n if (!this.inputElement.value) {\n this.inputElement.value = this.format;\n }\n this.#selectFirstCounter();\n this.inputElement.setSelectionRange(0, this.sortedCounters[0].length);\n }\n\n #resetToInitialState() {\n this.resetCounters();\n this.#selectFirstCounter();\n this.#resetDisplay();\n }\n\n // ---- format ----\n\n #onFormatUpdate(format) {\n if (Object.keys(formats).includes(format)) {\n this.format = format;\n this.#updateFormatPattern();\n this.updateCountersDisplay();\n }\n }\n\n #updateFormatPattern() {\n // `format` is a public attribute, so its incoming value is untrusted at init time.\n // An unsupported value (e.g. `format=\"XYZ\"`) would make formats[format] undefined and\n // crash the constructor when reading `.pattern`. Fall back to DEFAULT_FORMAT — same\n // guard used in #onFormatUpdate for runtime changes.\n const requested =\n this.getAttribute('format') || this.format || DEFAULT_FORMAT;\n const format = formats[requested] ? requested : DEFAULT_FORMAT;\n this.format = format;\n this.setAttribute('pattern', formats[format].pattern);\n }\n\n // ---- clipboard ----\n\n #onCut(e) {\n e.preventDefault();\n if (this.isSelectAll) {\n this.#copyToClipboard(this.countersValue);\n this.#resetToInitialState();\n } else {\n this.#copyToClipboard(this.activeCounter.stringValue);\n this.activeCounter.set('');\n }\n this.#setInputSelectionRange();\n }\n\n #copyToClipboard(value) {\n try {\n navigator.clipboard.writeText(value);\n } catch (err) {\n console.error('Failed to copy month/day value:', err);\n }\n }\n\n #onPaste(e) {\n e.preventDefault();\n const clipboardData = e.clipboardData || window.clipboardData;\n const pasted = clipboardData.getData('Text');\n\n const parts = parseMonthDayString(pasted, this.format);\n if (parts) {\n this.#applyMonthAndDay(parts.month, parts.day);\n this.#onCounterChange();\n setTimeout(() =>\n this.inputElement.setSelectionRange(0, this.inputElement.value.length),\n );\n return;\n }\n\n const numeric = Number(pasted);\n if (numeric && this.activeCounter.isInRange(numeric)) {\n this.activeCounter.set(String(numeric));\n setTimeout(() => this.#setInputSelectionRange());\n }\n }\n\n // ---- attribute handling ----\n\n #onInitialValueChange(val) {\n if (this.value) return;\n setTimeout(() => {\n if (val) this.value = val;\n });\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n if (oldValue === newValue) return;\n\n if (attrName === 'disable-picker') {\n this.#togglePopoverAccess(newValue !== 'true');\n }\n if (monthDayFieldAttrs.includes(attrName)) {\n if (newValue && attrName === 'format') {\n this.#onFormatUpdate(newValue);\n }\n if (attrName === 'initial-value') {\n this.#onInitialValueChange(newValue);\n }\n } else if (\n attrName === 'picker-label-submit' ||\n attrName === 'picker-label-cancel'\n ) {\n // Labels belong to the field's own Done/Cancel buttons now.\n this.#syncButtonLabels();\n } else if (pickerAttrs.includes(attrName)) {\n if (newValue) {\n this.picker?.setAttribute(attrName, newValue);\n } else {\n this.picker?.removeAttribute(attrName);\n }\n }\n }\n}\n\nconst textVars = TextFieldClass.cssVarList;\nconst {\n host,\n input,\n inputEleRTL,\n toggleButton,\n overlay,\n backdrop,\n bottomNav,\n navButton,\n} = {\n host: { selector: () => ':host' },\n input: { selector: () => 'descope-text-field' },\n inputEleRTL: {\n selector: () => ':host([st-host-direction=\"rtl\"]) descope-text-field',\n },\n toggleButton: { selector: () => '.toggle-picker' },\n overlay: { selector: 'vaadin-popover-overlay::part(overlay)' },\n backdrop: { selector: 'vaadin-popover-overlay::part(backdrop)' },\n // The Done/Cancel nav is light-DOM content of the overlay (not behind ::part),\n // so target it as a descendant of the overlay element.\n bottomNav: { selector: 'vaadin-popover-overlay .bottom-nav' },\n navButton: { selector: 'vaadin-popover-overlay .bottom-nav descope-button' },\n};\n\nexport const MonthDayFieldClass = compose(\n createStyleMixin({\n componentNameOverride: getComponentName('input-wrapper'),\n }),\n createStyleMixin({\n mappings: {\n iconMargin: { ...toggleButton, property: 'margin-inline-end' },\n hostWidth: { ...host, property: 'width' },\n hostDirection: { ...host, property: 'direction' },\n textAlign: { ...input, property: 'text-align' },\n rtlInputDirection: { ...inputEleRTL, property: textVars.inputDirection },\n rtlInputAlignment: { ...inputEleRTL, property: textVars.inputTextAlign },\n overlayGap: { property: () => MonthDayFieldClass.cssVarList.overlayGap },\n overlayBackgroundColor: {\n property: () => MonthDayFieldClass.cssVarList.overlayBackgroundColor,\n },\n overlayPadding: {\n property: () => MonthDayFieldClass.cssVarList.overlayPadding,\n },\n overlayBoxShadow: {\n property: () => MonthDayFieldClass.cssVarList.overlayBoxShadow,\n },\n overlayOutlineWidth: {\n property: () => MonthDayFieldClass.cssVarList.overlayOutlineWidth,\n },\n overlayOutlineColor: {\n property: () => MonthDayFieldClass.cssVarList.overlayOutlineColor,\n },\n overlayOutlineStyle: {\n property: () => MonthDayFieldClass.cssVarList.overlayOutlineStyle,\n },\n errorMessageIcon: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIcon,\n },\n errorMessageIconSize: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconSize,\n },\n errorMessageIconPadding: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconPadding,\n },\n errorMessageIconRepeat: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconRepeat,\n },\n errorMessageIconPosition: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconPosition,\n },\n errorMessageFontSize: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageFontSize,\n },\n labelFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.labelFontWeight,\n },\n inputValueFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.inputValueFontWeight,\n },\n inputPlaceholderFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.inputPlaceholderFontWeight,\n },\n helperTextFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.helperTextFontWeight,\n },\n errorMessageFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageFontWeight,\n },\n },\n }),\n portalMixin({\n name: 'overlay',\n selector: '',\n mappings: {\n marginTop: { ...overlay, property: 'margin-top' },\n backgroundColor: { ...overlay },\n backdropBackgroundColor: { ...backdrop, property: 'background-color' },\n backdropPointerEvents: { ...backdrop, property: 'pointer-events' },\n padding: { ...overlay },\n boxShadow: { ...overlay },\n outlineWidth: { ...overlay },\n outlineColor: { ...overlay },\n outlineStyle: { ...overlay },\n\n bottomNavTopPadding: { ...bottomNav, property: 'padding-top' },\n bottomNavBottomPadding: { ...bottomNav, property: 'padding-bottom' },\n bottomNavHorizontalPadding: [\n { ...bottomNav, property: 'padding-left' },\n { ...bottomNav, property: 'padding-right' },\n ],\n bottomNavAlignment: { ...bottomNav, property: 'justify-content' },\n bottomNavGap: { ...bottomNav, property: 'gap' },\n navButtonPadding: [\n { ...navButton, property: ButtonClass.cssVarList.horizontalPadding },\n { ...navButton, property: ButtonClass.cssVarList.verticalPadding },\n ],\n navButtonOutlineWidth: {\n ...navButton,\n property: ButtonClass.cssVarList.outlineWidth,\n },\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawMonthDayFieldClass);\n","import '@vaadin/popover/src/vaadin-popover';\nimport '@descope-ui/descope-text-field';\nimport '@descope-ui/descope-month-day-field-picker';\nimport '@descope-ui/descope-icon';\nimport '@descope-ui/descope-button';\n\nimport { componentName, MonthDayFieldClass } from './MonthDayFieldClass';\n\ncustomElements.define(componentName, MonthDayFieldClass);\n\nexport { MonthDayFieldClass, componentName };\n"],"names":["module","exports","customElements","define","DAYS_PER_MONTH","months","componentName","observedAttrs","BaseInputClass","baseSelector","buildOptions","entries","parent","fragment","document","createDocumentFragment","forEach","id","name","item","createElement","className","setAttribute","String","textContent","appendChild","replaceChildren","picker","monthInput","dayInput","inputsRow","selector","MonthDayFieldPickerClass","componentNameOverride","mappings","fontSize","fontFamily","hostWidth","property","hostDirection","pickerPadding","inputsRowGap","inputWidth","observedAttributes","concat","constructor","super","this","attachShadow","mode","innerHTML","shadowRoot","querySelector","month","val","n","Number","isInteger","day","value","match","exec","trim","m","d","now","Date","getMonth","getDate","padStart","init","initial","getAttribute","includeAttrs","attributeChangedCallback","oldVal","newVal","attrVal","arr","split","Array","isArray","length","filter","Boolean","isValidMonthNamesArr","ensureMonthNamesArr","addEventListener","bind","map","idx","count","from","_","i","dayEntries","setTimeout","e","raw","target","next","dispatchEvent","CustomEvent","detail","bubbles","composed","getValidity","MonthDayCounter","Object","freeze","min","max","placeholder","onChange","data","numberValue","stringValue","join","isFull","isEmpty","toString","set","add","num","slice","del","clear","inc","gap","replaceValue","Math","dec","isInRange","setMin","setMax","SUPPORTED_FORMATS","DEFAULT_FORMAT","DIVIDER","counterConfig","patterns","MM","DD","createFormat","format","pattern","part","createPattern","toPartsFn","order","parts","index","createToPartsFn","regexp","RegExp","validate","test","getParts","formats","fromEntries","f","parseMonthDayString","trimmed","monthDayFieldAttrs","pickerAttrs","textVars","TextFieldClass","cssVarList","host","input","inputEleRTL","toggleButton","overlay","backdrop","bottomNav","navButton","MonthDayFieldClass","iconMargin","textAlign","rtlInputDirection","inputDirection","rtlInputAlignment","inputTextAlign","overlayGap","overlayBackgroundColor","overlayPadding","overlayBoxShadow","overlayOutlineWidth","overlayOutlineColor","overlayOutlineStyle","errorMessageIcon","errorMessageIconSize","errorMessageIconPadding","errorMessageIconRepeat","errorMessageIconPosition","errorMessageFontSize","labelFontWeight","inputValueFontWeight","inputPlaceholderFontWeight","helperTextFontWeight","errorMessageFontWeight","marginTop","backgroundColor","backdropBackgroundColor","backdropPointerEvents","padding","boxShadow","outlineWidth","outlineColor","outlineStyle","bottomNavTopPadding","bottomNavBottomPadding","bottomNavHorizontalPadding","bottomNavAlignment","bottomNavGap","navButtonPadding","ButtonClass","horizontalPadding","verticalPadding","navButtonOutlineWidth","updateCountersDisplay","inputElement","popoverToggleButton","validationTarget","opened","monthCounter","find","c","dayCounter","sortedCounters","activeCounter","countersValue","isCountersEmpty","every","isCountersOutOfRange","some","disablePicker","baseElement","isRTL","dir","getComputedStyle","getPropertyValue","replace","clearInputEle","isSelectAll","selectionStart","selectionEnd","isRequired","valueMissing","patternMismatch","reportValidity","newMax","Event","resetCounters","trigger","withBackdrop","renderer","preventDefault","stopPropagation","root","firstChild","positionTarget","ele","cs","CSSStyleSheet","insertRule","adoptedStyleSheets","push","overrideConstructedStylesheet","closePopover","getRootNode","classList","remove","popover","replaceSync","windowRect","body","getBoundingClientRect","inputRect","pickerRect","side","offset","availableLeft","left","availableRight","width","right","newOffset","abs","css","cancelButton","submitButton","_attachOverlay","bringToFront","_detachOverlay","_enterModalState","disabled","inner","removeAttribute","isReadOnly","openPopover","focus","visibility","isNaN","inputType","caretPos","c1ln","c2ln","caretStart","reduce","acc","counter","setSelectionRange","metaKey","ctrlKey","key","toLowerCase","keys","includes","requested","navigator","clipboard","writeText","err","console","error","pasted","clipboardData","window","getData","numeric","attrName","oldValue","newValue"],"sourceRoot":""}
|