@descope/web-components-ui 3.13.3 → 3.14.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.
Files changed (41) hide show
  1. package/dist/cjs/index.cjs.js +1283 -729
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +1577 -1022
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/umd/8350.js +1 -1
  6. package/dist/umd/8350.js.map +1 -1
  7. package/dist/umd/DescopeDev.js +1 -1
  8. package/dist/umd/DescopeDev.js.map +1 -1
  9. package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js +1 -1
  10. package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js.map +1 -1
  11. package/dist/umd/descope-button.js +1 -1
  12. package/dist/umd/descope-button.js.map +1 -1
  13. package/dist/umd/descope-month-day-field.js +1 -1
  14. package/dist/umd/descope-month-day-field.js.map +1 -1
  15. package/dist/umd/descope-multi-line-mappings.js +1 -1
  16. package/dist/umd/descope-multi-line-mappings.js.map +1 -1
  17. package/dist/umd/descope-multi-sso.js +339 -0
  18. package/dist/umd/descope-multi-sso.js.LICENSE.txt +5 -0
  19. package/dist/umd/descope-multi-sso.js.map +1 -0
  20. package/dist/umd/descope-outbound-app-button.js +1 -1
  21. package/dist/umd/descope-outbound-app-button.js.map +1 -1
  22. package/dist/umd/descope-outbound-apps.js +1 -1
  23. package/dist/umd/descope-outbound-apps.js.map +1 -1
  24. package/dist/umd/descope-timer-button.js +1 -1
  25. package/dist/umd/descope-timer-button.js.map +1 -1
  26. package/dist/umd/descope-upload-file-index-js.js +2 -2
  27. package/dist/umd/descope-upload-file-index-js.js.map +1 -1
  28. package/dist/umd/descope-user-attribute-index-js.js +4 -4
  29. package/dist/umd/descope-user-attribute-index-js.js.map +1 -1
  30. package/dist/umd/descope-user-auth-method-index-js.js +1 -1
  31. package/dist/umd/descope-user-auth-method-index-js.js.map +1 -1
  32. package/dist/umd/descope-user-passkeys.js +1 -1
  33. package/dist/umd/descope-user-passkeys.js.map +1 -1
  34. package/dist/umd/index.js +1 -1
  35. package/dist/umd/index.js.map +1 -1
  36. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
  37. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js.map +1 -1
  38. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
  39. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js.map +1 -1
  40. package/package.json +40 -39
  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 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 transform so getBoundingClientRect measures the natural position.\n this.#popoverPosStylesheet?.replaceSync(\n `vaadin-popover-overlay::part(overlay) { transform: none; }`,\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 transform: translateX(${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","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-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 transform so getBoundingClientRect measures the natural position.\n this.#popoverPosStylesheet?.replaceSync(\n `vaadin-popover-overlay::part(overlay) { transform: none; }`,\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 transform: translateX(${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":""}