@servicetitan/anvil2 1.50.1 → 1.50.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{Calendar-CAYitkfM.js → Calendar-BeFARXwq.js} +2 -2
  3. package/dist/{Calendar-CAYitkfM.js.map → Calendar-BeFARXwq.js.map} +1 -1
  4. package/dist/{Calendar-C9oxHTGG.js → Calendar-M9v994mm.js} +2 -2
  5. package/dist/{Calendar-C9oxHTGG.js.map → Calendar-M9v994mm.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-DbBeuNdW.js → Checkbox-BwFY38z1.js} +3 -2
  8. package/dist/Checkbox-BwFY38z1.js.map +1 -0
  9. package/dist/{Checkbox-zAKOGEBl.js → Checkbox-Chck2V5C.js} +2 -2
  10. package/dist/{Checkbox-zAKOGEBl.js.map → Checkbox-Chck2V5C.js.map} +1 -1
  11. package/dist/Checkbox.js +2 -2
  12. package/dist/{Combobox-DGAa9vgU.js → Combobox-BTTWNSW1.js} +285 -175
  13. package/dist/Combobox-BTTWNSW1.js.map +1 -0
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-DQ9FFuV8.js → DataTable-hXWouflx.js} +6 -6
  16. package/dist/{DataTable-DQ9FFuV8.js.map → DataTable-hXWouflx.js.map} +1 -1
  17. package/dist/{DateField-BT9jJRp5.js → DateField-B8JdMu94.js} +6 -6
  18. package/dist/{DateField-BT9jJRp5.js.map → DateField-B8JdMu94.js.map} +1 -1
  19. package/dist/DateField.js +1 -1
  20. package/dist/{DateFieldRange-ZAic_9mt.js → DateFieldRange-DWAgi_T9.js} +7 -7
  21. package/dist/{DateFieldRange-ZAic_9mt.js.map → DateFieldRange-DWAgi_T9.js.map} +1 -1
  22. package/dist/DateFieldRange.js +1 -1
  23. package/dist/{DateFieldSingle-DAtR8ImE.js → DateFieldSingle-CQ6X-bVX.js} +7 -7
  24. package/dist/{DateFieldSingle-DAtR8ImE.js.map → DateFieldSingle-CQ6X-bVX.js.map} +1 -1
  25. package/dist/DateFieldSingle.js +1 -1
  26. package/dist/{DateFieldYearless-DXO_MPwA.js → DateFieldYearless-D6-NfIHu.js} +4 -4
  27. package/dist/{DateFieldYearless-DXO_MPwA.js.map → DateFieldYearless-D6-NfIHu.js.map} +1 -1
  28. package/dist/DateFieldYearless.js +1 -1
  29. package/dist/{DateFieldYearlessRange-Cg6bbPIi.js → DateFieldYearlessRange-CQM0vibm.js} +4 -4
  30. package/dist/{DateFieldYearlessRange-Cg6bbPIi.js.map → DateFieldYearlessRange-CQM0vibm.js.map} +1 -1
  31. package/dist/DateFieldYearlessRange.js +1 -1
  32. package/dist/{DaysOfTheWeek-9B9d7-hF.js → DaysOfTheWeek-BR-mg77X.js} +3 -3
  33. package/dist/{DaysOfTheWeek-9B9d7-hF.js.map → DaysOfTheWeek-BR-mg77X.js.map} +1 -1
  34. package/dist/DaysOfTheWeek.js +1 -1
  35. package/dist/{Dialog-BwabBKoZ.js → Dialog-Ba2oIATn.js} +8 -8
  36. package/dist/Dialog-Ba2oIATn.js.map +1 -0
  37. package/dist/Dialog.js +2 -2
  38. package/dist/{DialogCancelButton-sTEfx5kf.js → DialogCancelButton-CBHyI0CI.js} +2 -2
  39. package/dist/{DialogCancelButton-sTEfx5kf.js.map → DialogCancelButton-CBHyI0CI.js.map} +1 -1
  40. package/dist/{Drawer-GXeoK-r9.js → Drawer-CWogbC68.js} +7 -7
  41. package/dist/{Drawer-GXeoK-r9.js.map → Drawer-CWogbC68.js.map} +1 -1
  42. package/dist/Drawer.js +1 -1
  43. package/dist/{DrawerContext-Cs3k160L.js → DrawerContext-rJvgnn3O.js} +2 -2
  44. package/dist/{DrawerContext-Cs3k160L.js.map → DrawerContext-rJvgnn3O.js.map} +1 -1
  45. package/dist/FieldDialog-BHgkQOhh.js +519 -0
  46. package/dist/FieldDialog-BHgkQOhh.js.map +1 -0
  47. package/dist/{FieldLabel-jqlQ1Ldh.js → FieldLabel-BWOIFXgt.js} +7 -4
  48. package/dist/FieldLabel-BWOIFXgt.js.map +1 -0
  49. package/dist/FieldLabel.js +1 -1
  50. package/dist/{InputMask-CJC9xZHG.js → InputMask-BzY1DJoV.js} +3 -3
  51. package/dist/{InputMask-CJC9xZHG.js.map → InputMask-BzY1DJoV.js.map} +1 -1
  52. package/dist/InputMask.js +1 -1
  53. package/dist/{ListView-D8mfK8Lu.js → ListView-C5OBwbHe.js} +6 -4
  54. package/dist/ListView-C5OBwbHe.js.map +1 -0
  55. package/dist/ListView.js +1 -1
  56. package/dist/{Menu-Cn2JJe1Y.js → Menu-69JwGxYh.js} +2 -2
  57. package/dist/{Menu-Cn2JJe1Y.js.map → Menu-69JwGxYh.js.map} +1 -1
  58. package/dist/Menu.js +1 -1
  59. package/dist/MultiSelectField.d.ts +2 -0
  60. package/dist/MultiSelectField.js +2 -0
  61. package/dist/MultiSelectField.js.map +1 -0
  62. package/dist/MultiSelectFieldSync-B3HNQf7R.js +873 -0
  63. package/dist/MultiSelectFieldSync-B3HNQf7R.js.map +1 -0
  64. package/dist/MultiSelectFieldSync.css +259 -0
  65. package/dist/{NumberField-CjWLnD9X.js → NumberField-CcH25bnO.js} +3 -3
  66. package/dist/{NumberField-CjWLnD9X.js.map → NumberField-CcH25bnO.js.map} +1 -1
  67. package/dist/NumberField.js +1 -1
  68. package/dist/{Page-DEbpjQw0.js → Page-B5HZSjSl.js} +5 -5
  69. package/dist/{Page-DEbpjQw0.js.map → Page-B5HZSjSl.js.map} +1 -1
  70. package/dist/Page.js +1 -1
  71. package/dist/{Pagination-BR8MiRaA.js → Pagination-CkdBaQx6.js} +2 -2
  72. package/dist/{Pagination-BR8MiRaA.js.map → Pagination-CkdBaQx6.js.map} +1 -1
  73. package/dist/Pagination.js +1 -1
  74. package/dist/{Popover-CCXrzBul.js → Popover-D9SmGQTh.js} +6 -5
  75. package/dist/{Popover-CCXrzBul.js.map → Popover-D9SmGQTh.js.map} +1 -1
  76. package/dist/Popover.js +1 -1
  77. package/dist/{ProgressBar-BpKEr6cO.js → ProgressBar-BABkqVmW.js} +2 -2
  78. package/dist/{ProgressBar-BpKEr6cO.js.map → ProgressBar-BABkqVmW.js.map} +1 -1
  79. package/dist/ProgressBar.js +1 -1
  80. package/dist/{Radio-jj0-1dOg.js → Radio-Cds2laHA.js} +2 -2
  81. package/dist/{Radio-jj0-1dOg.js.map → Radio-Cds2laHA.js.map} +1 -1
  82. package/dist/Radio.js +2 -2
  83. package/dist/{RadioGroup-Bxy415eu.js → RadioGroup-COVlUmwy.js} +3 -3
  84. package/dist/{RadioGroup-Bxy415eu.js.map → RadioGroup-COVlUmwy.js.map} +1 -1
  85. package/dist/{SelectCard-CjbsPKZ4.js → SelectCard-C-Kjk5eS.js} +3 -3
  86. package/dist/{SelectCard-CjbsPKZ4.js.map → SelectCard-C-Kjk5eS.js.map} +1 -1
  87. package/dist/SelectCard.js +1 -1
  88. package/dist/SelectField.js +1 -1
  89. package/dist/SelectFieldSync-0CL0RTpg.js +679 -0
  90. package/dist/SelectFieldSync-0CL0RTpg.js.map +1 -0
  91. package/dist/{SelectTrigger-D4AjiMKp.js → SelectTrigger-C1U-PlLz.js} +6 -3
  92. package/dist/SelectTrigger-C1U-PlLz.js.map +1 -0
  93. package/dist/SelectTrigger.js +1 -1
  94. package/dist/{SelectTriggerBase-D9GuxPxR.js → SelectTriggerBase-RHD4FTQE.js} +3 -3
  95. package/dist/{SelectTriggerBase-D9GuxPxR.js.map → SelectTriggerBase-RHD4FTQE.js.map} +1 -1
  96. package/dist/SelectTriggerBase.css +65 -59
  97. package/dist/SelectTriggerBase.module-B0NFRlQP.js +36 -0
  98. package/dist/SelectTriggerBase.module-B0NFRlQP.js.map +1 -0
  99. package/dist/Table.js +1 -1
  100. package/dist/{TextField-Qv6OqiKQ.js → TextField-BYGSTwkL.js} +2 -2
  101. package/dist/{TextField-Qv6OqiKQ.js.map → TextField-BYGSTwkL.js.map} +1 -1
  102. package/dist/{TextField-DNuEXKyN.js → TextField-BZ3h2mqU.js} +3 -3
  103. package/dist/{TextField-DNuEXKyN.js.map → TextField-BZ3h2mqU.js.map} +1 -1
  104. package/dist/TextField.js +1 -1
  105. package/dist/{Textarea-DdLD4imO.js → Textarea-Cb0Qs2FH.js} +8 -3
  106. package/dist/Textarea-Cb0Qs2FH.js.map +1 -0
  107. package/dist/Textarea.js +1 -1
  108. package/dist/{TimeField-C39hYluo.js → TimeField-DBtJYC7t.js} +4 -4
  109. package/dist/{TimeField-C39hYluo.js.map → TimeField-DBtJYC7t.js.map} +1 -1
  110. package/dist/TimeField.js +1 -1
  111. package/dist/Toast.js +2 -2
  112. package/dist/{Toaster-DJ4tNy-0.js → Toaster-Cerf91qp.js} +2 -2
  113. package/dist/{Toaster-DJ4tNy-0.js.map → Toaster-Cerf91qp.js.map} +1 -1
  114. package/dist/{Toaster-DyDVYq4x.js → Toaster-DDrGllhh.js} +3 -3
  115. package/dist/{Toaster-DyDVYq4x.js.map → Toaster-DDrGllhh.js.map} +1 -1
  116. package/dist/{Toolbar-Vw9V1RHr.js → Toolbar-K9UFfyvX.js} +127 -41
  117. package/dist/Toolbar-K9UFfyvX.js.map +1 -0
  118. package/dist/Toolbar.js +1 -1
  119. package/dist/{Tooltip-CBy7srE2.js → Tooltip-CkfkiQPz.js} +2 -2
  120. package/dist/{Tooltip-CBy7srE2.js.map → Tooltip-CkfkiQPz.js.map} +1 -1
  121. package/dist/Tooltip.js +1 -1
  122. package/dist/{YearlessDateInputWithPicker-DMGx3gE2.js → YearlessDateInputWithPicker-BIkxKxPi.js} +4 -4
  123. package/dist/{YearlessDateInputWithPicker-DMGx3gE2.js.map → YearlessDateInputWithPicker-BIkxKxPi.js.map} +1 -1
  124. package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +27 -0
  125. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +63 -0
  126. package/dist/beta/components/MultiSelectField/index.d.ts +3 -0
  127. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldInput.d.ts +79 -0
  128. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +26 -0
  129. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +44 -0
  130. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +19 -0
  131. package/dist/beta/components/MultiSelectField/types.d.ts +311 -0
  132. package/dist/beta/components/SelectField/internal/FieldDialog/FieldDialog.d.ts +3 -1
  133. package/dist/beta/components/SelectField/internal/FieldPopover/FieldPopover.d.ts +1 -0
  134. package/dist/beta/components/SelectField/internal/SelectFieldInput.d.ts +3 -1
  135. package/dist/beta/components/SelectField/internal/SelectFieldLabel.d.ts +11 -3
  136. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
  137. package/dist/beta/components/SelectField/types.d.ts +19 -1
  138. package/dist/beta/components/index.d.ts +1 -0
  139. package/dist/beta.js +7 -5
  140. package/dist/beta.js.map +1 -1
  141. package/dist/components/Button/Button.figma.d.ts +1 -0
  142. package/dist/components/Combobox/ComboboxTypes.d.ts +1 -1
  143. package/dist/components/Combobox/internal/ComboboxLegacy/ComboboxLegacyTrigger.d.ts +2 -2
  144. package/dist/components/FieldLabel/FieldLabel.d.ts +5 -1
  145. package/dist/components/FieldLabel/internal/FieldLabelMoreInfoIcon.d.ts +3 -1
  146. package/dist/components/Icon/Icons.figma.d.ts +11 -0
  147. package/dist/components/ListView/ListView.d.ts +2 -9
  148. package/dist/components/ListView/internal/types.d.ts +12 -0
  149. package/dist/components/SelectTrigger/SelectTrigger.d.ts +1 -1
  150. package/dist/components/Switch/Switch.figma.d.ts +1 -0
  151. package/dist/components/Textarea/Textarea.d.ts +1 -1
  152. package/dist/index.js +34 -34
  153. package/dist/internal/components/Label/Label.d.ts +13 -3
  154. package/dist/internal/hooks/useOnClickOutside/useOnClickOutside.d.ts +8 -7
  155. package/dist/types/props.d.ts +5 -0
  156. package/dist/{useInitialFocus-BpmW7pDB.js → useInitialFocus-D_ESGka7.js} +3 -3
  157. package/dist/{useInitialFocus-BpmW7pDB.js.map → useInitialFocus-D_ESGka7.js.map} +1 -1
  158. package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
  159. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
  160. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js +68 -0
  161. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js.map +1 -0
  162. package/dist/{usePopoverSupport-CCSCHnit.js → usePopoverSupport-CldZmxFl.js} +2 -2
  163. package/dist/{usePopoverSupport-CCSCHnit.js.map → usePopoverSupport-CldZmxFl.js.map} +1 -1
  164. package/dist/{utils-Bkbn9cyk.js → utils-u8cyv323.js} +2 -2
  165. package/dist/{utils-Bkbn9cyk.js.map → utils-u8cyv323.js.map} +1 -1
  166. package/package.json +4 -3
  167. package/dist/Checkbox-DbBeuNdW.js.map +0 -1
  168. package/dist/Combobox-DGAa9vgU.js.map +0 -1
  169. package/dist/Dialog-BwabBKoZ.js.map +0 -1
  170. package/dist/FieldLabel-jqlQ1Ldh.js.map +0 -1
  171. package/dist/ListView-D8mfK8Lu.js.map +0 -1
  172. package/dist/SelectFieldSync-D4VdOXoY.js +0 -1134
  173. package/dist/SelectFieldSync-D4VdOXoY.js.map +0 -1
  174. package/dist/SelectTrigger-D4AjiMKp.js.map +0 -1
  175. package/dist/SelectTriggerBase.module-Ce49lamD.js +0 -35
  176. package/dist/SelectTriggerBase.module-Ce49lamD.js.map +0 -1
  177. package/dist/Textarea-DdLD4imO.js.map +0 -1
  178. package/dist/Toolbar-Vw9V1RHr.js.map +0 -1
  179. package/dist/useOnClickOutside-BDzuUjmY.js +0 -147
  180. package/dist/useOnClickOutside-BDzuUjmY.js.map +0 -1
  181. /package/dist/{SelectFieldSync.css → FieldDialog.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"YearlessDateInputWithPicker-DMGx3gE2.js","sources":["../src/components/DateFieldYearless/internal/PickerListOption.tsx","../src/components/DateFieldYearless/internal/PickerList.tsx","../src/components/DateFieldYearless/internal/utils.ts","../src/components/DateFieldYearless/internal/YearlessDateSelectionPopover.tsx","../src/components/DateFieldYearless/internal/maskito/yearlessDateSegmentsStepping.ts","../src/components/DateFieldYearless/internal/maskito/yearlessDatePlaceholderMask.ts","../src/components/DateFieldYearless/internal/YearlessDateInput.tsx","../src/components/DateFieldYearless/internal/YearlessDateInputWithPicker.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, MouseEvent } from \"react\";\nimport { Icon } from \"../../Icon\";\nimport { Flex, FlexProps } from \"../../Flex\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport { DataTrackingId } from \"../../../types\";\n\nimport cx from \"classnames\";\nimport styles from \"./PickerList.module.scss\";\n\n/**\n * Props for the PickerListOption component\n * @extends ComponentPropsWithoutRef<\"li\">\n */\nexport type PickerListOptionProps = ComponentPropsWithoutRef<\"li\"> & {\n /** The item object containing label, value, and optional disabled state */\n item: { label: string; value: number; disabled?: boolean };\n /** Whether this option is currently selected */\n isSelected: boolean;\n /** Callback when this option is selected */\n onSelectionChange: (\n selected: { label: string; value: number } | undefined,\n ) => void;\n /** Flex alignment for items */\n alignItems?: FlexProps[\"alignItems\"];\n /** Flex justification for items */\n justifyItems?: FlexProps[\"justifyItems\"];\n /** Flex alignment for content */\n alignContent?: FlexProps[\"alignContent\"];\n /** Flex justification for content */\n justifyContent?: FlexProps[\"justifyContent\"];\n /** Flex place-items property */\n placeItems?: FlexProps[\"placeItems\"];\n /** Flex place-content property */\n placeContent?: FlexProps[\"placeContent\"];\n} & DataTrackingId;\n\nexport const PickerListOption = forwardRef<\n HTMLLIElement,\n PickerListOptionProps\n>((props, ref) => {\n const {\n className,\n children,\n onClick,\n item,\n isSelected,\n onSelectionChange,\n alignItems,\n justifyItems,\n alignContent,\n justifyContent,\n placeItems,\n placeContent,\n ...rest\n } = props;\n\n const disabled = item.disabled || false;\n\n const handleSelection = () => {\n if (disabled) return;\n\n if (isSelected) {\n onSelectionChange(undefined);\n } else {\n onSelectionChange(item);\n }\n };\n\n const onClickHandler = (e: MouseEvent<HTMLLIElement>) => {\n onClick?.(e);\n handleSelection();\n };\n\n const onKeyDownHandler = (e: React.KeyboardEvent<HTMLLIElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSelection();\n }\n };\n\n const PickerListOptionClassNames = cx(\n styles[\"picker-list-option\"],\n className,\n );\n\n return (\n <li\n className={PickerListOptionClassNames}\n data-anv=\"picker-list-option\"\n role=\"option\"\n aria-disabled={disabled}\n aria-selected={isSelected}\n data-item-label={item.label}\n onClick={onClickHandler}\n onKeyDown={onKeyDownHandler}\n tabIndex={-1}\n ref={ref}\n {...rest}\n >\n <Flex\n className={styles[\"children\"]}\n grow={1}\n shrink={1}\n alignItems={alignItems}\n justifyItems={justifyItems}\n alignContent={alignContent}\n justifyContent={justifyContent}\n placeItems={placeItems}\n placeContent={placeContent}\n >\n {children || item.label}\n </Flex>\n <Icon\n aria-hidden\n svg={Check}\n inherit\n className={styles[\"Icon\"]}\n style={{ opacity: isSelected ? 1 : 0 }}\n />\n </li>\n );\n});\n\nPickerListOption.displayName = \"PickerListOption\";\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n useRef,\n useImperativeHandle,\n} from \"react\";\nimport { LayoutUtilProps } from \"../../../types\";\nimport { PickerListOption } from \"./PickerListOption\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"./PickerList.module.scss\";\n\n/**\n * Represents an item in the picker list with a label and optional disabled state.\n */\nexport type PickerListItem = {\n /** The display label for the item */\n label: string;\n /** The value of the item */\n value: number;\n /** Whether the item is disabled and cannot be selected */\n disabled?: boolean;\n};\n\n/**\n * Props for the PickerList component\n * @extends ComponentPropsWithoutRef<\"ul\">\n * @extends LayoutUtilProps\n */\nexport type PickerListProps = Omit<ComponentPropsWithoutRef<\"ul\">, \"children\"> &\n LayoutUtilProps & {\n /** Array of items to render */\n items: PickerListItem[];\n /** Currently selected item (controlled) */\n selected?: PickerListItem;\n /** Callback when selection changes */\n onSelectionChange?: (selected: PickerListItem | undefined) => void;\n };\n\n/**\n * Ref methods exposed by PickerList\n */\nexport type PickerListRef = {\n /** Scroll to a specific item by label */\n scrollToItem: (label: string, behavior?: ScrollBehavior) => void;\n /** Scroll to a specific item by value */\n scrollToValue: (value: number, behavior?: ScrollBehavior) => void;\n};\n\n/**\n * PickerList component for selecting items from a list.\n *\n * Features:\n * - Single selection mode only\n * - Mouse click selection\n * - Programmatic scrolling to specific items\n * - Support for disabled items\n * - Accessible with proper ARIA attributes\n * - Visual consistency with Listbox component\n *\n * @example\n * <PickerList\n * items={months}\n * selected={selectedMonth}\n * onSelectionChange={handleMonthChange}\n * />\n */\nexport const PickerList = forwardRef<PickerListRef, PickerListProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n items,\n onSelectionChange,\n selected: selectedProp,\n style,\n ...rest\n } = componentProps;\n\n const listRef = useRef<HTMLUListElement>(null);\n\n const scrollToItem = (\n label: string,\n behavior: ScrollBehavior = \"smooth\",\n ) => {\n const listElement = listRef.current;\n const itemElement = listElement?.querySelector(\n `li[data-item-label=\"${label}\"]`,\n ) as HTMLLIElement | null;\n\n if (listElement && itemElement) {\n // Calculate the target scroll position to center the item\n const itemTop = itemElement.offsetTop;\n const itemHeight = itemElement.offsetHeight;\n const listHeight = listElement.clientHeight;\n\n // Center the item vertically in the list\n const targetScrollTop = itemTop - listHeight / 2 + itemHeight / 2;\n\n // Ensure we don't scroll beyond the bounds\n const maxScrollTop = listElement.scrollHeight - listHeight;\n const clampedScrollTop = Math.max(\n 0,\n Math.min(targetScrollTop, maxScrollTop),\n );\n\n listElement.scrollTo({\n top: clampedScrollTop,\n behavior,\n });\n }\n };\n\n const scrollToValue = (\n value: number,\n behavior: ScrollBehavior = \"smooth\",\n ) => {\n const item = items.find((item) => item.value === value);\n if (item) {\n scrollToItem(item.label, behavior);\n }\n };\n\n useImperativeHandle(ref, () => ({\n scrollToItem,\n scrollToValue,\n }));\n\n const handleSelectionChange = (item: PickerListItem | undefined) => {\n onSelectionChange?.(item);\n };\n\n const PickerListClassNames = cx(styles[\"picker-list\"], className);\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <ul\n role=\"listbox\"\n style={styleCombined}\n className={PickerListClassNames}\n data-anv=\"picker-list\"\n ref={listRef}\n {...rest}\n tabIndex={-1}\n >\n {items.map((item) => (\n <PickerListOption\n key={item.label}\n item={item}\n isSelected={selectedProp?.value === item.value}\n onSelectionChange={handleSelectionChange}\n />\n ))}\n </ul>\n );\n },\n);\n\nPickerList.displayName = \"PickerList\";\n","import { YearlessDate, YearlessDateMode } from \"../types\";\n\nexport function validateYearlessDate({\n value,\n constraints,\n}: {\n value: YearlessDate | null;\n constraints: {\n required?: boolean;\n unavailable?: {\n dates?: YearlessDate[];\n };\n minDate?: YearlessDate | null;\n maxDate?: YearlessDate | null;\n };\n}): boolean {\n const { required, unavailable, minDate, maxDate } = constraints;\n if (!value || (!value?.day && !value?.month)) {\n return required ? false : true;\n }\n if (value.day === null || value.month === null) {\n return false;\n }\n if (\n unavailable?.dates?.some(\n (d) => d.day === value.day && d.month === value.month,\n )\n ) {\n return false;\n }\n const minDateMonth = minDate?.month ?? 1;\n const minDateDay = minDate?.day ?? 1;\n const maxDateMonth = maxDate?.month ?? 12;\n const maxDateDay = maxDate?.day ?? 31;\n if (\n value.month < minDateMonth || // Earlier month\n (value.month === minDateMonth && value.day < minDateDay) // Same month, earlier day\n ) {\n return false;\n }\n if (\n value.month > maxDateMonth || // Later month\n (value.month === maxDateMonth && value.day > maxDateDay) // Same month, later day\n ) {\n return false;\n }\n return true;\n}\n\n/**\n * Return list of months\n * 🌍 localeName: name of local,\n * ✅ monthFormat: short, numeric, long (Default)\n */\nexport function getMonthNames({\n locale,\n format,\n}: {\n locale: string;\n format: Intl.DateTimeFormatOptions[\"month\"];\n}): string[] {\n const formatFn = new Intl.DateTimeFormat(locale, { month: format }).format;\n return [...Array(12).keys()].map((m) =>\n formatFn(new Date(Date.UTC(2021, (m + 1) % 12))),\n );\n}\n\n/**\n * Given a text value, parse it into a YearlessDate object and validate it.\n * @param value - The text value to parse.\n * @param mode - The mode of the date input.\n * @param removePlaceholder - The function to remove the placeholder from the text value.\n * @returns An object containing the parsed YearlessDate object, the input validity, and the input emptiness.\n */\nexport function parseInputValue(\n value: string,\n mode: YearlessDateMode,\n removePlaceholder: (value: string) => string,\n): {\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n} {\n const valueMinusPlaceholder = removePlaceholder(value);\n const [segment1, segment2] = valueMinusPlaceholder.split(\"/\");\n const incompleteFirstSegment = segment1?.length !== 2;\n const incompleteSecondSegment = segment2?.length !== 2;\n if (mode === \"dd/mm\") {\n return {\n value: {\n day: incompleteFirstSegment ? null : parseInt(segment1),\n month: incompleteSecondSegment ? null : parseInt(segment2),\n },\n isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n }\n return {\n value: {\n day: incompleteSecondSegment ? null : parseInt(segment2),\n month: incompleteFirstSegment ? null : parseInt(segment1),\n },\n isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n}\n\n/**\n * Swap the mode of a date input.\n * @param inputString - The text value to swap the mode of.\n * @param previousMode - The previous mode of the date input.\n * @param mode - The new mode of the date input.\n * @returns The text value with the new mode.\n */\nexport function swapMode(\n inputString: string,\n previousMode: YearlessDateMode,\n mode: YearlessDateMode,\n) {\n const { day, month } = divideSegments(inputString, previousMode);\n return stringifyYearlessDate(day, month, mode);\n}\n\n/**\n * Given a text value and a mode, divide the segments of a date input.\n * @param value - The text value to divide the segments of.\n * @param mode - The mode of the date input.\n * @returns An object containing the day and month segments.\n */\nfunction divideSegments(\n value: string,\n mode: YearlessDateMode,\n): {\n day: string;\n month: string;\n} {\n const [segment1, segment2] = value.split(\"/\");\n if (mode === \"dd/mm\") {\n return { day: segment1, month: segment2 };\n }\n return { day: segment2, month: segment1 };\n}\n\n/**\n * Convert a YearlessDate object into a text value.\n * @param day - The day of the date.\n * @param month - The month of the date.\n * @param mode - The mode of the date input.\n * @returns The stringified date.\n */\nexport function stringifyYearlessDate(\n day: number | string | null,\n month: number | string | null,\n mode: YearlessDateMode,\n) {\n const dd = (day ?? \"__\").toString().padStart(2, \"0\");\n const mm = (month ?? \"__\").toString().padStart(2, \"0\");\n if (mode === \"dd/mm\") {\n return `${dd}/${mm}`;\n }\n return `${mm}/${dd}`;\n}\n\n/**\n * Get the number of days in a given month.\n * @param month - The month number (1-12)\n * @returns The number of days in the month\n */\nexport function getDaysInMonth(month: number): number {\n // Use a leap year (2024) to account for February having 29 days\n return new Date(2024, month, 0).getDate();\n}\n\n/**\n * Get months that don't have enough days for the given day.\n * @param day - The day number (1-31)\n * @returns Array of month numbers that don't have enough days for the given day\n */\nexport function getInvalidMonthsForDay(day: number): number[] {\n const invalidMonths: number[] = [];\n\n for (let month = 1; month <= 12; month++) {\n const daysInMonth = getDaysInMonth(month);\n if (day > daysInMonth) {\n invalidMonths.push(month);\n }\n }\n\n return invalidMonths;\n}\n","import { RefObject, useEffect, useMemo, useRef } from \"react\";\nimport Popover from \"../../Popover\";\nimport { PickerList, PickerListRef } from \"./PickerList\";\nimport { getMonthNames, getDaysInMonth, getInvalidMonthsForDay } from \"./utils\";\nimport { Flex } from \"../../Flex\";\nimport { YearlessDateMode } from \"..\";\nimport dateFieldYearlessStyles from \"../DateFieldYearless.module.scss\";\nimport type { PopoverTriggerProps } from \"../../Popover/PopoverTrigger\";\n\n/**\n * Props for the YearlessDateSelectionPopover component\n */\nexport type YearlessDateSelectionPopoverProps = {\n popoverRef: RefObject<{\n openPopover: () => void;\n closePopover: () => void;\n }>;\n popoverContentRef: RefObject<HTMLDivElement>;\n month: number | null;\n day: number | null;\n onMonthChange: (month: number | null) => void;\n onDayChange: (day: number | null) => void;\n onClose: () => void;\n mode: YearlessDateMode;\n onFocus?: (event: React.FocusEvent) => void;\n onBlur?: (event: React.FocusEvent) => void;\n} & PopoverTriggerProps;\n\n/**\n * A yearless date selection tool built into a popover.\n * @param param0\n * @returns\n */\nexport function YearlessDateSelectionPopover({\n children,\n popoverRef,\n popoverContentRef,\n month,\n day,\n onMonthChange,\n onDayChange,\n onClose,\n mode,\n onFocus,\n onBlur,\n}: YearlessDateSelectionPopoverProps) {\n const monthListboxRef = useRef<PickerListRef>(null);\n const dayListboxRef = useRef<PickerListRef>(null);\n\n const months = useMemo(() => {\n return getMonthNames({ locale: \"en-US\", format: \"short\" }).map(\n (name, index) => ({\n label: name,\n value: index + 1,\n }),\n );\n }, []);\n\n const days = useMemo(() => {\n return Array.from({ length: 31 }, (_, i) => ({\n label: `${i + 1}`,\n value: i + 1,\n }));\n }, []);\n\n const invalidDays = useMemo(() => {\n if (!month) {\n return [];\n }\n const daysInMonth = getDaysInMonth(month);\n return Array.from(\n { length: 31 - daysInMonth },\n (_, i) => daysInMonth + i + 1,\n );\n }, [month]);\n\n const invalidMonths = useMemo(() => {\n if (!day) {\n return [];\n }\n return getInvalidMonthsForDay(day);\n }, [day]);\n\n const scrollToSelectedOption = (\n value: number | null,\n ref: RefObject<PickerListRef>,\n behavior: ScrollBehavior = \"smooth\",\n ) => {\n if (value && ref.current) {\n ref.current.scrollToValue(value, behavior);\n }\n };\n\n useEffect(() => {\n scrollToSelectedOption(month, monthListboxRef, \"smooth\");\n }, [month]);\n\n useEffect(() => {\n scrollToSelectedOption(day, dayListboxRef, \"smooth\");\n }, [day]);\n\n const handleMonthChange = (\n selected: { label: string; value: number } | undefined,\n ) => {\n if (selected?.value) {\n onMonthChange?.(selected.value);\n\n // If current day is invalid for the new month, clear it\n if (day && invalidDays.includes(day)) {\n onDayChange?.(null);\n }\n }\n };\n\n const handleDayChange = (\n selected: { label: string; value: number } | undefined,\n ) => {\n if (selected?.value) {\n onDayChange?.(selected.value);\n\n // If current month is invalid for the new day, clear it\n if (month && invalidMonths.includes(month)) {\n onMonthChange?.(null);\n }\n }\n };\n\n const monthPicker = (\n <PickerList\n ref={monthListboxRef}\n items={months.map((item) => ({\n ...item,\n disabled: invalidMonths.includes(item.value),\n }))}\n selected={months.find((m) => m.value === month)}\n style={{ maxHeight: \"240px\", overflow: \"auto\" }}\n className={dateFieldYearlessStyles[\"scrolling-container\"]}\n onSelectionChange={handleMonthChange}\n />\n );\n\n const dayPicker = (\n <PickerList\n ref={dayListboxRef}\n items={days.map((item) => ({\n ...item,\n disabled: invalidDays.includes(item.value),\n }))}\n selected={days.find((d) => d.value === day)}\n className={dateFieldYearlessStyles[\"scrolling-container\"]}\n onSelectionChange={handleDayChange}\n />\n );\n\n return (\n <Popover\n ref={popoverRef}\n placement=\"bottom-start\"\n disableFlipFallback\n disableCaret\n disableAutoUpdate\n onClose={onClose}\n onOpenAnimationStart={() => {\n scrollToSelectedOption(month, monthListboxRef, \"instant\");\n scrollToSelectedOption(day, dayListboxRef, \"instant\");\n }}\n >\n <Popover.Trigger>\n {(triggerProps) => <>{children(triggerProps)}</>}\n </Popover.Trigger>\n <Popover.Content\n ref={popoverContentRef}\n hideWhileClosed\n onFocus={onFocus}\n onBlur={onBlur}\n >\n <Flex gap={2} style={{ maxHeight: \"240px\" }}>\n {mode === \"dd/mm\" ? (\n <>\n {dayPicker}\n {monthPicker}\n </>\n ) : (\n <>\n {monthPicker}\n {dayPicker}\n </>\n )}\n </Flex>\n </Popover.Content>\n </Popover>\n );\n}\n","import type { MaskitoPlugin, MaskitoElement } from \"@maskito/core\";\nimport { maskitoUpdateElement } from \"@maskito/core\";\n\nimport { YearlessDateMode } from \"../../types\";\nimport { getDaysInMonth } from \"../utils\";\n\ntype YearlessDateSegments = {\n month: number;\n day: number;\n};\n\ntype SegmentRange = [number, number];\n\n// Constants\nconst MIN_MONTH = 1;\nconst MAX_MONTH = 12;\nconst MIN_DAY = 1;\nconst MAX_DAY = 31;\nconst SEGMENT_LENGTH = 2;\n\n/**\n * Creates a Maskito plugin for yearless date segment stepping\n * @param mode - The date format mode (mm/dd or dd/mm)\n * @returns MaskitoPlugin that handles arrow key navigation\n * @example\n * const plugin = createYearlessDateSegmentsSteppingPlugin({ mode: \"mm/dd\" });\n */\nexport function createYearlessDateSegmentsSteppingPlugin({\n mode,\n}: {\n mode: YearlessDateMode;\n}): MaskitoPlugin {\n const segmentsIndexes = createSegmentIndexes(mode);\n\n return (element) => {\n const listener = (event: KeyboardEvent): void => {\n if (event.key === \"ArrowRight\") {\n handleArrowRight(element, event);\n return;\n }\n\n if (event.key !== \"ArrowUp\" && event.key !== \"ArrowDown\") {\n return;\n }\n\n event.preventDefault();\n\n const selectionStart = element.selectionStart ?? 0;\n const activeSegment = getActiveSegment({\n segmentsIndexes,\n selectionStart,\n });\n\n if (!activeSegment) {\n return;\n }\n\n const segmentSelection = segmentsIndexes.get(activeSegment);\n if (!segmentSelection) {\n return;\n }\n\n const maxValue = getMaxValueForSegment(\n activeSegment,\n element.value,\n segmentsIndexes,\n );\n\n const updatedValue = updateSegmentValue({\n selection: segmentSelection,\n value: element.value,\n increment: event.key === \"ArrowUp\" ? -1 : 1,\n min: MIN_DAY,\n max: maxValue,\n });\n\n // If we're updating the month, check if the day needs to be adjusted\n const finalValue =\n activeSegment === \"month\"\n ? adjustDayForNewMonth(updatedValue, segmentsIndexes)\n : updatedValue;\n\n maskitoUpdateElement(element, {\n value: finalValue,\n selection: [selectionStart, selectionStart],\n });\n };\n\n element.addEventListener(\"keydown\", listener);\n return () => element.removeEventListener(\"keydown\", listener);\n };\n}\n\nfunction createSegmentIndexes(\n mode: YearlessDateMode,\n): Map<keyof YearlessDateSegments, SegmentRange> {\n const map = new Map<keyof YearlessDateSegments, SegmentRange>();\n\n if (mode === \"mm/dd\") {\n map.set(\"month\", [0, SEGMENT_LENGTH]);\n map.set(\"day\", [SEGMENT_LENGTH + 1, SEGMENT_LENGTH * 2 + 1]);\n } else if (mode === \"dd/mm\") {\n map.set(\"day\", [0, SEGMENT_LENGTH]);\n map.set(\"month\", [SEGMENT_LENGTH + 1, SEGMENT_LENGTH * 2 + 1]);\n }\n\n return map;\n}\n\n/**\n * Handle ArrowRight key to insert separator at the right position\n */\nfunction handleArrowRight(element: MaskitoElement, event: KeyboardEvent): void {\n const selectionStart = element.selectionStart ?? 0;\n const value = element.value;\n\n // Position 3 is where the separator should be (after the first segment)\n if (selectionStart === SEGMENT_LENGTH && value.includes(\"__\")) {\n // Insert the separator\n event.preventDefault();\n maskitoUpdateElement(element, {\n value: value + \"/\",\n selection: [selectionStart + 1, selectionStart + 1],\n });\n }\n}\n\n/**\n * Adjust the day value if it's out of bounds for the new month\n */\nfunction adjustDayForNewMonth(\n value: string,\n segmentsIndexes: Map<keyof YearlessDateSegments, SegmentRange>,\n): string {\n const monthSelection = segmentsIndexes.get(\"month\");\n const daySelection = segmentsIndexes.get(\"day\");\n\n if (!monthSelection || !daySelection) {\n return value;\n }\n\n const monthValue = parseSegmentValue(value, monthSelection);\n const dayValue = parseSegmentValue(value, daySelection);\n\n // If month or day is invalid, return original value\n if (monthValue < MIN_MONTH || monthValue > MAX_MONTH || dayValue < MIN_DAY) {\n return value;\n }\n\n const maxDaysInMonth = getDaysInMonth(monthValue);\n\n // If day is within bounds, no adjustment needed\n if (dayValue <= maxDaysInMonth) {\n return value;\n }\n\n // Adjust day to the last valid day of the month\n const [dayFrom, dayTo] = daySelection;\n const adjustedDay = String(maxDaysInMonth).padStart(dayTo - dayFrom, \"0\");\n\n return (\n value.slice(0, dayFrom) + adjustedDay + value.slice(dayTo, value.length)\n );\n}\n\n/**\n * Parse a segment value from the input string, treating empty segments as 0\n */\nfunction parseSegmentValue(value: string, selection: SegmentRange): number {\n const [from, to] = selection;\n const segmentText = value.slice(from, to);\n if (segmentText.includes(\"_\")) return 0;\n return Number(segmentText.padEnd(to - from, \"0\"));\n}\n\nfunction getMaxValueForSegment(\n segment: keyof YearlessDateSegments,\n value: string,\n segmentsIndexes: Map<keyof YearlessDateSegments, SegmentRange>,\n): number {\n if (segment === \"month\") {\n return MAX_MONTH;\n }\n\n // For day segment, get the current month value to determine max days\n const monthSelection = segmentsIndexes.get(\"month\");\n if (!monthSelection) {\n return MAX_DAY;\n }\n\n const monthValue = parseSegmentValue(value, monthSelection);\n\n // If month is not valid, use default max\n if (monthValue < MIN_MONTH || monthValue > MAX_MONTH) {\n return MAX_DAY;\n }\n\n return getDaysInMonth(monthValue);\n}\n\nfunction getActiveSegment({\n segmentsIndexes,\n selectionStart,\n}: {\n segmentsIndexes: Map<keyof YearlessDateSegments, SegmentRange>;\n selectionStart: number;\n}): keyof YearlessDateSegments | null {\n for (const [segmentName, segmentRange] of segmentsIndexes.entries()) {\n const [from, to] = segmentRange;\n if (from <= selectionStart && selectionStart <= to) {\n return segmentName;\n }\n }\n return null;\n}\n\nfunction updateSegmentValue({\n selection,\n value,\n increment,\n min,\n max,\n}: {\n selection: SegmentRange;\n value: string;\n increment: number;\n min: number;\n max: number;\n}): string {\n const [from, to] = selection;\n const segmentValue = parseSegmentValue(value, selection);\n // Prevent decrementing 0 losing negative and rolling up to 1.\n if (segmentValue === 0 && increment < 0) return value;\n const newSegmentValue = Math.max(\n min,\n Math.min(max, segmentValue + increment),\n );\n\n return (\n value.slice(0, from) +\n String(newSegmentValue).padStart(to - from, \"0\") +\n value.slice(to, value.length)\n );\n}\n","import { maskitoTransform, type MaskitoOptions } from \"@maskito/core\";\nimport {\n maskitoDateOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\n\nimport { YearlessDateMode } from \"../../types\";\nimport { makeZeroShortcutPreprocessor } from \"../../../DateFieldSingle/internal/maskito/makeZeroShortcutPreprocessor\";\nimport { createYearlessDateSegmentsSteppingPlugin } from \"./yearlessDateSegmentsStepping\";\n\nconst yearlessDatePlaceholderMask = ({\n mode,\n separator = \"/\",\n placeholder,\n enableStepping = false,\n}: {\n mode: YearlessDateMode;\n enableStepping: boolean;\n separator?: string;\n placeholder: string;\n}) => {\n const dateOptions = maskitoDateOptionsGenerator({\n mode,\n separator,\n });\n\n const { plugins, removePlaceholder, ...placeholderOptions } =\n maskitoWithPlaceholder(placeholder);\n\n const datePlaceholderMask = {\n ...dateOptions,\n plugins: plugins.concat([\n ...(dateOptions.plugins || []),\n ...(enableStepping\n ? [createYearlessDateSegmentsSteppingPlugin({ mode })]\n : []),\n ]),\n preprocessors: [\n ...placeholderOptions.preprocessors,\n ...dateOptions.preprocessors,\n makeZeroShortcutPreprocessor(mode, separator),\n ],\n postprocessors: [\n ...dateOptions.postprocessors,\n ...placeholderOptions.postprocessors,\n ],\n } satisfies Required<MaskitoOptions>;\n\n const transform = (value: string) => {\n return maskitoTransform(value, datePlaceholderMask);\n };\n\n return { options: datePlaceholderMask, removePlaceholder, transform };\n};\n\nexport default yearlessDatePlaceholderMask;\n","import { useMaskito } from \"@maskito/react\";\nimport {\n forwardRef,\n InputHTMLAttributes,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { YearlessDateMode, YearlessDate } from \"../types\";\nimport { usePrevious } from \"../../../internal/hooks\";\nimport yearlessDatePlaceholderMask from \"./maskito/yearlessDatePlaceholderMask\";\nimport { swapMode, stringifyYearlessDate, parseInputValue } from \"./utils\";\nimport textFieldStyles from \"../../TextField/TextField.module.scss\";\nimport dateFieldYearlessStyles from \"../DateFieldYearless.module.scss\";\nimport cx from \"classnames\";\nimport { PassThroughPropsWithRef, Size } from \"../../../types\";\nimport { Spinner } from \"../../Spinner\";\n\nexport type YearlessDateInputChange = {\n event: React.ChangeEvent<HTMLInputElement> | null;\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type YearlessDateInputChangeHandler = (\n change: YearlessDateInputChange,\n) => void;\n\nexport type YearlessDateInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"value\" | \"ref\" | \"size\"\n> & {\n onChange: YearlessDateInputChangeHandler;\n mode?: YearlessDateMode;\n value?: YearlessDate | null;\n error?: boolean;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n wrapperProps?: PassThroughPropsWithRef<\"div\">;\n rootProps?: PassThroughPropsWithRef<\"div\">;\n loading?: boolean;\n enableStepping?: boolean;\n};\n\nexport type YearlessDateInputRef = HTMLInputElement & {\n setValue: (value: YearlessDate | null) => {\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n };\n removePlaceholder: (value: string) => string;\n};\n\n/**\n * A masked date input component that allows for the input of a date in a specific format.\n *\n * Provides a `setDate` method that can be used to set the date from outside the component (e.g from a calendar).\n *\n * @internal This component is not intended to be used directly in consumer code.\n *\n * @param props - The props for the MaskedDateInput component.\n * @param props.onChange - The function to call when the date changes.\n * @param props.mode - The mode of the date input.\n */\nexport const YearlessDateInput = forwardRef<\n YearlessDateInputRef,\n YearlessDateInputProps\n>(\n (\n {\n onChange,\n mode = \"mm/dd\",\n value,\n error,\n size,\n wrapperProps,\n rootProps,\n loading = false,\n enableStepping = false,\n className: classNameProp,\n ...restProps\n },\n ref,\n ) => {\n const placeholder = \"__/__\";\n const [inputValue, setInputValue] = useState(placeholder);\n const { options, removePlaceholder, transform } =\n yearlessDatePlaceholderMask({\n mode,\n placeholder,\n enableStepping,\n });\n const maskedInputRef = useMaskito({ options });\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = useMergeRefs([maskedInputRef, inputRef, ref]);\n const previousValue = usePrevious(value);\n const previousMode = usePrevious(mode);\n\n // Update the input value when the mode changes.\n useEffect(() => {\n if (mode !== previousMode) {\n setInputValue((oldInputValue) =>\n swapMode(oldInputValue, previousMode ?? mode, mode),\n );\n }\n }, [mode, previousMode]);\n\n const triggerAutoChange = useCallback(\n (stringValue: string) => {\n const {\n value: v,\n isInputValid,\n isInputEmpty,\n } = parseInputValue(stringValue, mode, removePlaceholder);\n onChange?.({\n event: null,\n value: v,\n isInputValid,\n isInputEmpty,\n });\n },\n [mode, removePlaceholder, onChange],\n );\n\n // Update the input value when the parent's value changes.\n useEffect(() => {\n if (\n previousValue?.day !== value?.day ||\n previousValue?.month !== value?.month\n ) {\n if (value?.day && value?.month) {\n const stringValue = stringifyYearlessDate(\n value.day,\n value.month,\n mode,\n );\n const transformedValue = transform(stringValue);\n setInputValue(transformedValue);\n if (transformedValue !== stringValue) {\n triggerAutoChange(transformedValue);\n }\n } else if (\n previousValue !== null &&\n previousValue !== undefined &&\n (value === null || (value?.day === null && value?.month === null))\n ) {\n setInputValue(placeholder);\n } else {\n return;\n }\n }\n }, [value, mode, previousValue, transform, triggerAutoChange]);\n\n const currentParsedData = useMemo(() => {\n return parseInputValue(inputValue, mode, removePlaceholder);\n }, [inputValue, mode, removePlaceholder]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(event.target.value);\n const {\n value: v,\n isInputValid,\n isInputEmpty,\n } = parseInputValue(event.target.value, mode, removePlaceholder);\n\n const isDateDifferent =\n (v === null) !== (currentParsedData.value === null) ||\n v?.day !== currentParsedData.value?.day ||\n v?.month !== currentParsedData.value?.month;\n if (!isDateDifferent) {\n return;\n }\n\n onChange?.({\n event,\n value: v ?? currentParsedData.value ?? null,\n isInputValid,\n isInputEmpty,\n });\n };\n\n // Extend the input ref with additional methods.\n // This provides a way to set the input value from outside the component.\n useImperativeHandle(ref, () => {\n const input = inputRef.current;\n if (!input) return null as unknown as YearlessDateInputRef;\n return Object.assign(input, {\n setValue: (value: YearlessDate | null) => {\n if (!value) {\n setInputValue(placeholder);\n return parseInputValue(placeholder, mode, removePlaceholder);\n }\n const valueAsString = stringifyYearlessDate(\n value.day ?? null,\n value.month ?? null,\n mode,\n );\n const transformedValue = transform(valueAsString);\n setInputValue(transformedValue);\n return parseInputValue(transformedValue, mode, removePlaceholder);\n },\n removePlaceholder,\n });\n }, [mode, placeholder, removePlaceholder, transform]);\n\n return (\n <div\n className={cx(textFieldStyles[\"textfield\"])}\n data-anv=\"yearless-date-input\"\n {...rootProps}\n >\n <div\n {...wrapperProps}\n className={cx(\n textFieldStyles[\"input-wrapper\"],\n wrapperProps?.className,\n {\n [textFieldStyles[\"small\"]]: size === \"small\",\n [textFieldStyles[\"large\"]]: size === \"large\",\n [dateFieldYearlessStyles[\"small\"]]: size === \"small\",\n [dateFieldYearlessStyles[\"large\"]]: size === \"large\",\n },\n )}\n >\n <input\n {...restProps}\n ref={combinedRef}\n data-month-value={value?.month}\n data-day-value={value?.day}\n data-input-valid={currentParsedData.isInputValid}\n data-input-empty={currentParsedData.isInputEmpty}\n value={inputValue}\n onChange={handleChange}\n className={cx(\n textFieldStyles[\"input\"],\n dateFieldYearlessStyles[\"input\"],\n {\n [textFieldStyles[\"error\"]]: error ?? false,\n },\n classNameProp,\n )}\n />\n {loading ? (\n <div className={textFieldStyles[\"loading-spinner-wrapper\"]}>\n <Spinner />\n </div>\n ) : null}\n </div>\n </div>\n );\n },\n);\n\nYearlessDateInput.displayName = \"YearlessDateInput\";\n","import {\n forwardRef,\n InputHTMLAttributes,\n Ref,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { YearlessDateMode, YearlessDate } from \"../types\";\nimport { YearlessDateSelectionPopover } from \"./YearlessDateSelectionPopover\";\nimport { DateFieldYearlessChangeHandler } from \"../DateFieldYearless\";\nimport {\n YearlessDateInput,\n YearlessDateInputChange,\n YearlessDateInputRef,\n} from \"./YearlessDateInput\";\nimport { validateYearlessDate } from \"./utils\";\nimport {\n useFocusWithin,\n useOptionallyControlledState,\n usePopoverSupport,\n} from \"../../../internal\";\nimport { Size } from \"../../../types\";\nimport { mergeRefs } from \"../../../hooks/useMergeRefs/useMergeRefs\";\n\nexport type YearlessDateInputWithPickerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"value\" | \"ref\" | \"size\" | \"defaultValue\" | \"onFocus\" | \"onBlur\"\n> & {\n /**\n * The controlled value of the date field\n */\n value?: YearlessDate | null;\n /**\n * The default value for uncontrolled usage\n */\n defaultValue?: YearlessDate | null;\n /**\n * The function to call when the date value changes\n */\n onChange?: DateFieldYearlessChangeHandler;\n /**\n * The date format mode (mm/dd or dd/mm)\n */\n mode?: YearlessDateMode;\n /**\n * Whether the field is required\n */\n required?: boolean;\n /**\n * The minimum allowed date\n */\n minDate?: YearlessDate | null;\n /**\n * The maximum allowed date\n */\n maxDate?: YearlessDate | null;\n /**\n * Configuration for unavailable dates\n */\n unavailable?: {\n /**\n * Array of dates that are not selectable\n */\n dates?: YearlessDate[];\n };\n /**\n * Whether the picker is disabled\n */\n disablePicker?: boolean;\n /**\n * The size of the input\n */\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n /**\n * Whether the input has an error\n */\n error?: boolean;\n /**\n * Whether the input is in loading state\n */\n loading?: boolean;\n /**\n * Function to call when the input is focused\n */\n onFocus?: (event: React.FocusEvent) => void;\n /**\n * Function to call when the input is blurred\n */\n onBlur?: (event: React.FocusEvent) => void;\n};\n\nexport type YearlessDateInputWithPickerRef = {\n focus: () => void;\n setValue: (value: YearlessDate | null) => void;\n};\n\nexport const YearlessDateInputWithPicker = forwardRef<\n YearlessDateInputWithPickerRef,\n YearlessDateInputWithPickerProps\n>((props, ref) => {\n const {\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange: onChangeProp,\n minDate,\n maxDate,\n unavailable,\n required,\n disablePicker = false,\n mode = \"mm/dd\",\n size = \"medium\",\n error = false,\n loading = false,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n ...restProps\n } = props;\n\n const inputRef = useRef<YearlessDateInputRef>(null);\n const popoverRef = useRef<{\n openPopover: () => void;\n closePopover: () => void;\n }>(null);\n const popoverContentRef = useRef<HTMLDivElement>(null);\n const popoverSupported = usePopoverSupport();\n\n const [value, setValue] = useOptionallyControlledState<YearlessDate | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n const [tempPickerValue, setTempPickerValue] = useState<YearlessDate | null>(\n value,\n );\n\n useImperativeHandle(\n ref,\n (): YearlessDateInputWithPickerRef => ({\n focus: () => {\n if (!inputRef.current) return;\n return inputRef.current.focus();\n },\n setValue: (value: YearlessDate | null) => {\n if (!inputRef.current) return;\n inputRef.current.setValue(value);\n },\n }),\n [inputRef],\n );\n\n const currentValidity = useMemo(\n () =>\n validateYearlessDate({\n value: value ?? null,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n [value, required, unavailable, minDate, maxDate],\n );\n\n const handleInputChange = (change: YearlessDateInputChange) => {\n const { event, value, ...restChange } = change;\n setValue(value);\n setTempPickerValue(value);\n onChangeProp?.({\n ...restChange,\n value,\n isValid: validateYearlessDate({\n value,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n });\n };\n\n const inputProps = {\n required,\n mode,\n autoComplete: \"off\",\n ...restProps,\n value: value,\n onChange: handleInputChange,\n \"data-valid\": currentValidity,\n size,\n error,\n loading,\n };\n\n const { props: focusWithinProps } = useFocusWithin({\n onFocus: (e) => {\n requestAnimationFrame(() => {\n onFocusProp?.(e);\n });\n },\n onBlur: (e) => {\n requestAnimationFrame(() => {\n onBlurProp?.(e);\n });\n popoverRef.current?.closePopover();\n },\n otherRelatedElements: popoverContentRef?.current\n ? [popoverContentRef.current]\n : [],\n });\n\n if (disablePicker || !popoverSupported) {\n return <YearlessDateInput ref={inputRef} {...inputProps} />;\n }\n\n const handlePickerChange = (newValue: YearlessDate) => {\n setTempPickerValue(newValue);\n if (!inputRef.current) return;\n if (\n (mode === \"mm/dd\" && newValue.month) ||\n (mode === \"dd/mm\" && newValue.day)\n ) {\n const valueSet = inputRef.current.setValue(newValue);\n setValue(valueSet.value);\n onChangeProp?.({\n ...valueSet,\n isValid: validateYearlessDate({\n value: valueSet.value,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n });\n }\n };\n\n const handlePickerMonthChange = (month: number | null) => {\n handlePickerChange({\n day: value?.day ?? tempPickerValue?.day ?? null,\n month,\n });\n };\n\n const handlePickerDayChange = (day: number | null) => {\n handlePickerChange({\n day,\n month: value?.month ?? tempPickerValue?.month ?? null,\n });\n };\n\n const handlePickerClose = () => {\n setTempPickerValue(null);\n };\n\n const handleInputFocus = (event: React.FocusEvent) => {\n focusWithinProps.onFocus?.(event as React.FocusEvent<HTMLElement>);\n };\n const handleInputBlur = (event: React.FocusEvent) => {\n focusWithinProps.onBlur?.(event as React.FocusEvent<HTMLElement>);\n };\n\n const handlePopoverBlur = (event: React.FocusEvent) => {\n focusWithinProps.onBlur?.(event as React.FocusEvent<HTMLElement>);\n };\n\n return (\n <YearlessDateSelectionPopover\n popoverRef={popoverRef}\n popoverContentRef={popoverContentRef}\n month={value?.month ?? tempPickerValue?.month ?? null}\n day={value?.day ?? tempPickerValue?.day ?? null}\n onMonthChange={handlePickerMonthChange}\n onDayChange={handlePickerDayChange}\n onClose={handlePickerClose}\n mode={mode}\n onBlur={handlePopoverBlur}\n >\n {({ ref, onKeyDown }) => (\n <YearlessDateInput\n {...inputProps}\n ref={mergeRefs([\n inputRef,\n ref as unknown as Ref<YearlessDateInputRef>,\n ])}\n onKeyDown={(ev) => {\n onKeyDown?.(ev);\n inputProps.onKeyDown?.(ev);\n }}\n onClick={(ev) => {\n inputProps.onClick?.(ev);\n popoverRef.current?.openPopover();\n }}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n enableStepping\n />\n )}\n </YearlessDateSelectionPopover>\n );\n});\n\nYearlessDateInputWithPicker.displayName = \"YearlessDateInputWithPicker\";\n"],"names":["Icon","Check","item","value","ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCO,MAAM,gBAAA,GAAmB,UAAA,CAG9B,CAAC,KAAA,EAAO,GAAA,KAAQ;AAChB,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,KAAA;AAElC,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,IAAI,QAAA,EAAU;AAEd,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,iBAAA,CAAkB,MAAS,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAiC;AACvD,IAAA,OAAA,GAAU,CAAC,CAAA;AACX,IAAA,eAAA,EAAgB;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA0C;AAClE,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,0BAAA,GAA6B,EAAA;AAAA,IACjC,OAAO,oBAAoB,CAAA;AAAA,IAC3B;AAAA,GACF;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,0BAAA;AAAA,MACX,UAAA,EAAS,oBAAA;AAAA,MACT,IAAA,EAAK,QAAA;AAAA,MACL,eAAA,EAAe,QAAA;AAAA,MACf,eAAA,EAAe,UAAA;AAAA,MACf,mBAAiB,IAAA,CAAK,KAAA;AAAA,MACtB,OAAA,EAAS,cAAA;AAAA,MACT,SAAA,EAAW,gBAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACV,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,OAAO,UAAU,CAAA;AAAA,YAC5B,IAAA,EAAM,CAAA;AAAA,YACN,MAAA,EAAQ,CAAA;AAAA,YACR,UAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,cAAA;AAAA,YACA,UAAA;AAAA,YACA,YAAA;AAAA,YAEC,sBAAY,IAAA,CAAK;AAAA;AAAA,SACpB;AAAA,wBACA,GAAA;AAAA,UAACA,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAW,IAAA;AAAA,YACX,GAAA,EAAKC,QAAA;AAAA,YACL,OAAA,EAAO,IAAA;AAAA,YACP,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,YACxB,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,GAAa,IAAI,CAAA;AAAE;AAAA;AACvC;AAAA;AAAA,GACF;AAEJ,CAAC,CAAA;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA;;ACvDxB,MAAM,UAAA,GAAa,UAAA;AAAA,EACxB,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,KAAK,CAAA;AACjE,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,KAAA;AAAA,MACA,iBAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,KAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,cAAA;AAEJ,IAAA,MAAM,OAAA,GAAU,OAAyB,IAAI,CAAA;AAE7C,IAAA,MAAM,YAAA,GAAe,CACnB,KAAA,EACA,QAAA,GAA2B,QAAA,KACxB;AACH,MAAA,MAAM,cAAc,OAAA,CAAQ,OAAA;AAC5B,MAAA,MAAM,cAAc,WAAA,EAAa,aAAA;AAAA,QAC/B,uBAAuB,KAAK,CAAA,EAAA;AAAA,OAC9B;AAEA,MAAA,IAAI,eAAe,WAAA,EAAa;AAE9B,QAAA,MAAM,UAAU,WAAA,CAAY,SAAA;AAC5B,QAAA,MAAM,aAAa,WAAA,CAAY,YAAA;AAC/B,QAAA,MAAM,aAAa,WAAA,CAAY,YAAA;AAG/B,QAAA,MAAM,eAAA,GAAkB,OAAA,GAAU,UAAA,GAAa,CAAA,GAAI,UAAA,GAAa,CAAA;AAGhE,QAAA,MAAM,YAAA,GAAe,YAAY,YAAA,GAAe,UAAA;AAChD,QAAA,MAAM,mBAAmB,IAAA,CAAK,GAAA;AAAA,UAC5B,CAAA;AAAA,UACA,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,YAAY;AAAA,SACxC;AAEA,QAAA,WAAA,CAAY,QAAA,CAAS;AAAA,UACnB,GAAA,EAAK,gBAAA;AAAA,UACL;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CACpB,KAAA,EACA,QAAA,GAA2B,QAAA,KACxB;AACH,MAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAACC,KAAAA,KAASA,KAAAA,CAAK,UAAU,KAAK,CAAA;AACtD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,YAAA,CAAa,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,MACnC;AAAA,IACF,CAAA;AAEA,IAAA,mBAAA,CAAoB,KAAK,OAAO;AAAA,MAC9B,YAAA;AAAA,MACA;AAAA,KACF,CAAE,CAAA;AAEF,IAAA,MAAM,qBAAA,GAAwB,CAAC,IAAA,KAAqC;AAClE,MAAA,iBAAA,GAAoB,IAAI,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,oBAAA,GAAuB,EAAA,CAAG,MAAA,CAAO,aAAa,GAAG,SAAS,CAAA;AAEhE,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,GAAG,KAAA;AAAA,MACH,GAAG;AAAA,KACL;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,SAAA,EAAW,oBAAA;AAAA,QACX,UAAA,EAAS,aAAA;AAAA,QACT,GAAA,EAAK,OAAA;AAAA,QACJ,GAAG,IAAA;AAAA,QACJ,QAAA,EAAU,EAAA;AAAA,QAET,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACV,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YAEC,IAAA;AAAA,YACA,UAAA,EAAY,YAAA,EAAc,KAAA,KAAU,IAAA,CAAK,KAAA;AAAA,YACzC,iBAAA,EAAmB;AAAA,WAAA;AAAA,UAHd,IAAA,CAAK;AAAA,SAKb;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;;ACjKlB,SAAS,oBAAA,CAAqB;AAAA,EACnC,KAAA;AAAA,EACA;AACF,CAAA,EAUY;AACV,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAa,OAAA,EAAS,SAAQ,GAAI,WAAA;AACpD,EAAA,IAAI,CAAC,KAAA,IAAU,CAAC,OAAO,GAAA,IAAO,CAAC,OAAO,KAAA,EAAQ;AAC5C,IAAA,OAAO,WAAW,KAAA,GAAQ,IAAA;AAAA,EAC5B;AACA,EAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,UAAU,IAAA,EAAM;AAC9C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IACE,aAAa,KAAA,EAAO,IAAA;AAAA,IAClB,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,MAAM,GAAA,IAAO,CAAA,CAAE,UAAU,KAAA,CAAM;AAAA,GAClD,EACA;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,YAAA,GAAe,SAAS,KAAA,IAAS,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,SAAS,GAAA,IAAO,CAAA;AACnC,EAAA,MAAM,YAAA,GAAe,SAAS,KAAA,IAAS,EAAA;AACvC,EAAA,MAAM,UAAA,GAAa,SAAS,GAAA,IAAO,EAAA;AACnC,EAAA,IACE,MAAM,KAAA,GAAQ,YAAA;AAAA,EACb,KAAA,CAAM,KAAA,KAAU,YAAA,IAAgB,KAAA,CAAM,MAAM,UAAA,EAC7C;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IACE,MAAM,KAAA,GAAQ,YAAA;AAAA,EACb,KAAA,CAAM,KAAA,KAAU,YAAA,IAAgB,KAAA,CAAM,MAAM,UAAA,EAC7C;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,aAAA,CAAc;AAAA,EAC5B,MAAA;AAAA,EACA;AACF,CAAA,EAGa;AACX,EAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,MAAA;AACpE,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,CAAA,KAChC,QAAA,CAAS,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,EAAA,CAAO,CAAA,GAAI,CAAA,IAAK,EAAE,CAAC,CAAC;AAAA,GACjD;AACF;AASO,SAAS,eAAA,CACd,KAAA,EACA,IAAA,EACA,iBAAA,EAKA;AACA,EAAA,MAAM,qBAAA,GAAwB,kBAAkB,KAAK,CAAA;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI,qBAAA,CAAsB,MAAM,GAAG,CAAA;AAC5D,EAAA,MAAM,sBAAA,GAAyB,UAAU,MAAA,KAAW,CAAA;AACpD,EAAA,MAAM,uBAAA,GAA0B,UAAU,MAAA,KAAW,CAAA;AACrD,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,GAAA,EAAK,sBAAA,GAAyB,IAAA,GAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,QACtD,KAAA,EAAO,uBAAA,GAA0B,IAAA,GAAO,QAAA,CAAS,QAAQ;AAAA,OAC3D;AAAA,MACA,YAAA,EAAc,CAAC,sBAAA,IAA0B,CAAC,uBAAA;AAAA,MAC1C,cAAc,qBAAA,KAA0B;AAAA,KAC1C;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,GAAA,EAAK,uBAAA,GAA0B,IAAA,GAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,MACvD,KAAA,EAAO,sBAAA,GAAyB,IAAA,GAAO,QAAA,CAAS,QAAQ;AAAA,KAC1D;AAAA,IACA,YAAA,EAAc,CAAC,sBAAA,IAA0B,CAAC,uBAAA;AAAA,IAC1C,cAAc,qBAAA,KAA0B;AAAA,GAC1C;AACF;AASO,SAAS,QAAA,CACd,WAAA,EACA,YAAA,EACA,IAAA,EACA;AACA,EAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAM,GAAI,cAAA,CAAe,aAAa,YAAY,CAAA;AAC/D,EAAA,OAAO,qBAAA,CAAsB,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA;AAC/C;AAQA,SAAS,cAAA,CACP,OACA,IAAA,EAIA;AACA,EAAA,MAAM,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI,KAAA,CAAM,MAAM,GAAG,CAAA;AAC5C,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,OAAO,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EAC1C;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAC1C;AASO,SAAS,qBAAA,CACd,GAAA,EACA,KAAA,EACA,IAAA,EACA;AACA,EAAA,MAAM,MAAM,GAAA,IAAO,IAAA,EAAM,UAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACnD,EAAA,MAAM,MAAM,KAAA,IAAS,IAAA,EAAM,UAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACrD,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AACpB;AAOO,SAAS,eAAe,KAAA,EAAuB;AAEpD,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,CAAC,EAAE,OAAA,EAAQ;AAC1C;AAOO,SAAS,uBAAuB,GAAA,EAAuB;AAC5D,EAAA,MAAM,gBAA0B,EAAC;AAEjC,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,IAAS,EAAA,EAAI,KAAA,EAAA,EAAS;AACxC,IAAA,MAAM,WAAA,GAAc,eAAe,KAAK,CAAA;AACxC,IAAA,IAAI,MAAM,WAAA,EAAa;AACrB,MAAA,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,aAAA;AACT;;;;;;AC5JO,SAAS,4BAAA,CAA6B;AAAA,EAC3C,QAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAsC;AACpC,EAAA,MAAM,eAAA,GAAkB,OAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,OAAsB,IAAI,CAAA;AAEhD,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM;AAC3B,IAAA,OAAO,cAAc,EAAE,MAAA,EAAQ,SAAS,MAAA,EAAQ,OAAA,EAAS,CAAA,CAAE,GAAA;AAAA,MACzD,CAAC,MAAM,KAAA,MAAW;AAAA,QAChB,KAAA,EAAO,IAAA;AAAA,QACP,OAAO,KAAA,GAAQ;AAAA,OACjB;AAAA,KACF;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAM;AACzB,IAAA,OAAO,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,IAAG,EAAG,CAAC,GAAG,CAAA,MAAO;AAAA,MAC3C,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,MACf,OAAO,CAAA,GAAI;AAAA,KACb,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,WAAA,GAAc,eAAe,KAAK,CAAA;AACxC,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,EAAE,MAAA,EAAQ,EAAA,GAAK,WAAA,EAAY;AAAA,MAC3B,CAAC,CAAA,EAAG,CAAA,KAAM,WAAA,GAAc,CAAA,GAAI;AAAA,KAC9B;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAO,uBAAuB,GAAG,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,sBAAA,GAAyB,CAC7B,KAAA,EACA,GAAA,EACA,WAA2B,QAAA,KACxB;AACH,IAAA,IAAI,KAAA,IAAS,IAAI,OAAA,EAAS;AACxB,MAAA,GAAA,CAAI,OAAA,CAAQ,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC3C;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,KAAA,EAAO,iBAAiB,QAAQ,CAAA;AAAA,EACzD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,GAAA,EAAK,eAAe,QAAQ,CAAA;AAAA,EACrD,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,iBAAA,GAAoB,CACxB,QAAA,KACG;AACH,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,aAAA,GAAgB,SAAS,KAAK,CAAA;AAG9B,MAAA,IAAI,GAAA,IAAO,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA,EAAG;AACpC,QAAA,WAAA,GAAc,IAAI,CAAA;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CACtB,QAAA,KACG;AACH,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,WAAA,GAAc,SAAS,KAAK,CAAA;AAG5B,MAAA,IAAI,KAAA,IAAS,aAAA,CAAc,QAAA,CAAS,KAAK,CAAA,EAAG;AAC1C,QAAA,aAAA,GAAgB,IAAI,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,mBACJ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QAC3B,GAAG,IAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,OAC7C,CAAE,CAAA;AAAA,MACF,UAAU,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AAAA,MAC9C,KAAA,EAAO,EAAE,SAAA,EAAW,OAAA,EAAS,UAAU,MAAA,EAAO;AAAA,MAC9C,SAAA,EAAW,wBAAwB,qBAAqB,CAAA;AAAA,MACxD,iBAAA,EAAmB;AAAA;AAAA,GACrB;AAGF,EAAA,MAAM,SAAA,mBACJ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QACzB,GAAG,IAAA;AAAA,QACH,QAAA,EAAU,WAAA,CAAY,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,OAC3C,CAAE,CAAA;AAAA,MACF,UAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,GAAG,CAAA;AAAA,MAC1C,SAAA,EAAW,wBAAwB,qBAAqB,CAAA;AAAA,MACxD,iBAAA,EAAmB;AAAA;AAAA,GACrB;AAGF,EAAA,uBACE,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAU,cAAA;AAAA,MACV,mBAAA,EAAmB,IAAA;AAAA,MACnB,YAAA,EAAY,IAAA;AAAA,MACZ,iBAAA,EAAiB,IAAA;AAAA,MACjB,OAAA;AAAA,MACA,sBAAsB,MAAM;AAC1B,QAAA,sBAAA,CAAuB,KAAA,EAAO,iBAAiB,SAAS,CAAA;AACxD,QAAA,sBAAA,CAAuB,GAAA,EAAK,eAAe,SAAS,CAAA;AAAA,MACtD,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,CAAQ,SAAR,EACE,QAAA,EAAA,CAAC,iCAAiB,GAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAA,QAAA,CAAS,YAAY,CAAA,EAAE,CAAA,EAC/C,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,OAAA,CAAQ,OAAA;AAAA,UAAR;AAAA,YACC,GAAA,EAAK,iBAAA;AAAA,YACL,eAAA,EAAe,IAAA;AAAA,YACf,OAAA;AAAA,YACA,MAAA;AAAA,YAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAE,SAAA,EAAW,OAAA,EAAQ,EACvC,QAAA,EAAA,IAAA,KAAS,OAAA,mBACR,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,SAAA;AAAA,cACA;AAAA,aAAA,EACH,oBAEA,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,WAAA;AAAA,cACA;AAAA,aAAA,EACH,CAAA,EAEJ;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;;AClLA,MAAM,SAAA,GAAY,CAAA;AAClB,MAAM,SAAA,GAAY,EAAA;AAClB,MAAM,OAAA,GAAU,CAAA;AAChB,MAAM,OAAA,GAAU,EAAA;AAChB,MAAM,cAAA,GAAiB,CAAA;AAShB,SAAS,wCAAA,CAAyC;AAAA,EACvD;AACF,CAAA,EAEkB;AAChB,EAAA,MAAM,eAAA,GAAkB,qBAAqB,IAAI,CAAA;AAEjD,EAAA,OAAO,CAAC,OAAA,KAAY;AAClB,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAA+B;AAC/C,MAAA,IAAI,KAAA,CAAM,QAAQ,YAAA,EAAc;AAC9B,QAAA,gBAAA,CAAiB,SAAS,KAAK,CAAA;AAC/B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,SAAA,IAAa,KAAA,CAAM,QAAQ,WAAA,EAAa;AACxD,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,cAAA,EAAe;AAErB,MAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,CAAA;AACjD,MAAA,MAAM,gBAAgB,gBAAA,CAAiB;AAAA,QACrC,eAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,gBAAA,GAAmB,eAAA,CAAgB,GAAA,CAAI,aAAa,CAAA;AAC1D,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,qBAAA;AAAA,QACf,aAAA;AAAA,QACA,OAAA,CAAQ,KAAA;AAAA,QACR;AAAA,OACF;AAEA,MAAA,MAAM,eAAe,kBAAA,CAAmB;AAAA,QACtC,SAAA,EAAW,gBAAA;AAAA,QACX,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,SAAA,EAAW,KAAA,CAAM,GAAA,KAAQ,SAAA,GAAY,EAAA,GAAK,CAAA;AAAA,QAC1C,GAAA,EAAK,OAAA;AAAA,QACL,GAAA,EAAK;AAAA,OACN,CAAA;AAGD,MAAA,MAAM,aACJ,aAAA,KAAkB,OAAA,GACd,oBAAA,CAAqB,YAAA,EAAc,eAAe,CAAA,GAClD,YAAA;AAEN,MAAA,oBAAA,CAAqB,OAAA,EAAS;AAAA,QAC5B,KAAA,EAAO,UAAA;AAAA,QACP,SAAA,EAAW,CAAC,cAAA,EAAgB,cAAc;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAW,QAAQ,CAAA;AAC5C,IAAA,OAAO,MAAM,OAAA,CAAQ,mBAAA,CAAoB,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC9D,CAAA;AACF;AAEA,SAAS,qBACP,IAAA,EAC+C;AAC/C,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA8C;AAE9D,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,GAAA,CAAI,GAAA,CAAI,OAAA,EAAS,CAAC,CAAA,EAAG,cAAc,CAAC,CAAA;AACpC,IAAA,GAAA,CAAI,GAAA,CAAI,OAAO,CAAC,cAAA,GAAiB,GAAG,cAAA,GAAiB,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,EAC7D,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA,EAAG,cAAc,CAAC,CAAA;AAClC,IAAA,GAAA,CAAI,GAAA,CAAI,SAAS,CAAC,cAAA,GAAiB,GAAG,cAAA,GAAiB,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAO,GAAA;AACT;AAKA,SAAS,gBAAA,CAAiB,SAAyB,KAAA,EAA4B;AAC7E,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,CAAA;AACjD,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AAGtB,EAAA,IAAI,cAAA,KAAmB,cAAA,IAAkB,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AAE7D,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,oBAAA,CAAqB,OAAA,EAAS;AAAA,MAC5B,OAAO,KAAA,GAAQ,GAAA;AAAA,MACf,SAAA,EAAW,CAAC,cAAA,GAAiB,CAAA,EAAG,iBAAiB,CAAC;AAAA,KACnD,CAAA;AAAA,EACH;AACF;AAKA,SAAS,oBAAA,CACP,OACA,eAAA,EACQ;AACR,EAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AAClD,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAE9C,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,YAAA,EAAc;AACpC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,cAAc,CAAA;AAC1D,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AAGtD,EAAA,IAAI,UAAA,GAAa,SAAA,IAAa,UAAA,GAAa,SAAA,IAAa,WAAW,OAAA,EAAS;AAC1E,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAe,UAAU,CAAA;AAGhD,EAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,GAAI,YAAA;AACzB,EAAA,MAAM,cAAc,MAAA,CAAO,cAAc,EAAE,QAAA,CAAS,KAAA,GAAQ,SAAS,GAAG,CAAA;AAExE,EAAA,OACE,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,GAAI,cAAc,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,MAAM,CAAA;AAE3E;AAKA,SAAS,iBAAA,CAAkB,OAAe,SAAA,EAAiC;AACzE,EAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,SAAA;AACnB,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,EAAE,CAAA;AACxC,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,CAAA;AACtC,EAAA,OAAO,OAAO,WAAA,CAAY,MAAA,CAAO,EAAA,GAAK,IAAA,EAAM,GAAG,CAAC,CAAA;AAClD;AAEA,SAAS,qBAAA,CACP,OAAA,EACA,KAAA,EACA,eAAA,EACQ;AACR,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,OAAO,SAAA;AAAA,EACT;AAGA,EAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AAClD,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,cAAc,CAAA;AAG1D,EAAA,IAAI,UAAA,GAAa,SAAA,IAAa,UAAA,GAAa,SAAA,EAAW;AACpD,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,eAAe,UAAU,CAAA;AAClC;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,eAAA;AAAA,EACA;AACF,CAAA,EAGsC;AACpC,EAAA,KAAA,MAAW,CAAC,WAAA,EAAa,YAAY,CAAA,IAAK,eAAA,CAAgB,SAAQ,EAAG;AACnE,IAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,YAAA;AACnB,IAAA,IAAI,IAAA,IAAQ,cAAA,IAAkB,cAAA,IAAkB,EAAA,EAAI;AAClD,MAAA,OAAO,WAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA,EAMW;AACT,EAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,SAAA;AACnB,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,KAAA,EAAO,SAAS,CAAA;AAEvD,EAAA,IAAI,YAAA,KAAiB,CAAA,IAAK,SAAA,GAAY,CAAA,EAAG,OAAO,KAAA;AAChD,EAAA,MAAM,kBAAkB,IAAA,CAAK,GAAA;AAAA,IAC3B,GAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,YAAA,GAAe,SAAS;AAAA,GACxC;AAEA,EAAA,OACE,MAAM,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,GACnB,OAAO,eAAe,CAAA,CAAE,QAAA,CAAS,EAAA,GAAK,MAAM,GAAG,CAAA,GAC/C,MAAM,KAAA,CAAM,EAAA,EAAI,MAAM,MAAM,CAAA;AAEhC;;ACzOA,MAAM,8BAA8B,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,SAAA,GAAY,GAAA;AAAA,EACZ,WAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,KAKM;AACJ,EAAA,MAAM,cAAc,2BAAA,CAA4B;AAAA,IAC9C,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,iBAAA,EAAmB,GAAG,kBAAA,EAAmB,GACxD,uBAAuB,WAAW,CAAA;AAEpC,EAAA,MAAM,mBAAA,GAAsB;AAAA,IAC1B,GAAG,WAAA;AAAA,IACH,OAAA,EAAS,QAAQ,MAAA,CAAO;AAAA,MACtB,GAAI,WAAA,CAAY,OAAA,IAAW,EAAC;AAAA,MAC5B,GAAI,iBACA,CAAC,wCAAA,CAAyC,EAAE,IAAA,EAAM,CAAC,CAAA,GACnD;AAAC,KACN,CAAA;AAAA,IACD,aAAA,EAAe;AAAA,MACb,GAAG,kBAAA,CAAmB,aAAA;AAAA,MACtB,GAAG,WAAA,CAAY,aAAA;AAAA,MACf,4BAAA,CAA6B,MAAM,SAAS;AAAA,KAC9C;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,GAAG,WAAA,CAAY,cAAA;AAAA,MACf,GAAG,kBAAA,CAAmB;AAAA;AACxB,GACF;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB;AACnC,IAAA,OAAO,gBAAA,CAAiB,OAAO,mBAAmB,CAAA;AAAA,EACpD,CAAA;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,mBAAA,EAAqB,iBAAA,EAAmB,SAAA,EAAU;AACtE,CAAA;;ACeO,MAAM,iBAAA,GAAoB,UAAA;AAAA,EAI/B,CACE;AAAA,IACE,QAAA;AAAA,IACA,IAAA,GAAO,OAAA;AAAA,IACP,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA,GAAU,KAAA;AAAA,IACV,cAAA,GAAiB,KAAA;AAAA,IACjB,SAAA,EAAW,aAAA;AAAA,IACX,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAc,OAAA;AACpB,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,WAAW,CAAA;AACxD,IAAA,MAAM,EAAE,OAAA,EAAS,iBAAA,EAAmB,SAAA,KAClC,2BAAA,CAA4B;AAAA,MAC1B,IAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AACH,IAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,EAAE,OAAA,EAAS,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,OAAyB,IAAI,CAAA;AAC9C,IAAA,MAAM,cAAc,YAAA,CAAa,CAAC,cAAA,EAAgB,QAAA,EAAU,GAAG,CAAC,CAAA;AAChE,IAAA,MAAM,aAAA,GAAgB,YAAY,KAAK,CAAA;AACvC,IAAA,MAAM,YAAA,GAAe,YAAY,IAAI,CAAA;AAGrC,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,SAAS,YAAA,EAAc;AACzB,QAAA,aAAA;AAAA,UAAc,CAAC,aAAA,KACb,QAAA,CAAS,aAAA,EAAe,YAAA,IAAgB,MAAM,IAAI;AAAA,SACpD;AAAA,MACF;AAAA,IACF,CAAA,EAAG,CAAC,IAAA,EAAM,YAAY,CAAC,CAAA;AAEvB,IAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,MACxB,CAAC,WAAA,KAAwB;AACvB,QAAA,MAAM;AAAA,UACJ,KAAA,EAAO,CAAA;AAAA,UACP,YAAA;AAAA,UACA;AAAA,SACF,GAAI,eAAA,CAAgB,WAAA,EAAa,IAAA,EAAM,iBAAiB,CAAA;AACxD,QAAA,QAAA,GAAW;AAAA,UACT,KAAA,EAAO,IAAA;AAAA,UACP,KAAA,EAAO,CAAA;AAAA,UACP,YAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH,CAAA;AAAA,MACA,CAAC,IAAA,EAAM,iBAAA,EAAmB,QAAQ;AAAA,KACpC;AAGA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IACE,eAAe,GAAA,KAAQ,KAAA,EAAO,OAC9B,aAAA,EAAe,KAAA,KAAU,OAAO,KAAA,EAChC;AACA,QAAA,IAAI,KAAA,EAAO,GAAA,IAAO,KAAA,EAAO,KAAA,EAAO;AAC9B,UAAA,MAAM,WAAA,GAAc,qBAAA;AAAA,YAClB,KAAA,CAAM,GAAA;AAAA,YACN,KAAA,CAAM,KAAA;AAAA,YACN;AAAA,WACF;AACA,UAAA,MAAM,gBAAA,GAAmB,UAAU,WAAW,CAAA;AAC9C,UAAA,aAAA,CAAc,gBAAgB,CAAA;AAC9B,UAAA,IAAI,qBAAqB,WAAA,EAAa;AACpC,YAAA,iBAAA,CAAkB,gBAAgB,CAAA;AAAA,UACpC;AAAA,QACF,CAAA,MAAA,IACE,aAAA,KAAkB,IAAA,IAClB,aAAA,KAAkB,MAAA,KACjB,KAAA,KAAU,IAAA,IAAS,KAAA,EAAO,GAAA,KAAQ,IAAA,IAAQ,KAAA,EAAO,KAAA,KAAU,IAAA,CAAA,EAC5D;AACA,UAAA,aAAA,CAAc,WAAW,CAAA;AAAA,QAC3B,CAAA,MAAO;AACL,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG,CAAC,KAAA,EAAO,MAAM,aAAA,EAAe,SAAA,EAAW,iBAAiB,CAAC,CAAA;AAE7D,IAAA,MAAM,iBAAA,GAAoB,QAAQ,MAAM;AACtC,MAAA,OAAO,eAAA,CAAgB,UAAA,EAAY,IAAA,EAAM,iBAAiB,CAAA;AAAA,IAC5D,CAAA,EAAG,CAAC,UAAA,EAAY,IAAA,EAAM,iBAAiB,CAAC,CAAA;AAExC,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAA+C;AACnE,MAAA,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAChC,MAAA,MAAM;AAAA,QACJ,KAAA,EAAO,CAAA;AAAA,QACP,YAAA;AAAA,QACA;AAAA,UACE,eAAA,CAAgB,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,MAAM,iBAAiB,CAAA;AAE/D,MAAA,MAAM,eAAA,GACH,CAAA,KAAM,IAAA,MAAW,iBAAA,CAAkB,UAAU,IAAA,CAAA,IAC9C,CAAA,EAAG,GAAA,KAAQ,iBAAA,CAAkB,KAAA,EAAO,GAAA,IACpC,CAAA,EAAG,KAAA,KAAU,kBAAkB,KAAA,EAAO,KAAA;AACxC,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA;AAAA,MACF;AAEA,MAAA,QAAA,GAAW;AAAA,QACT,KAAA;AAAA,QACA,KAAA,EAAO,CAAA,IAAK,iBAAA,CAAkB,KAAA,IAAS,IAAA;AAAA,QACvC,YAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAIA,IAAA,mBAAA,CAAoB,KAAK,MAAM;AAC7B,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,MAAA,OAAO,MAAA,CAAO,OAAO,KAAA,EAAO;AAAA,QAC1B,QAAA,EAAU,CAACC,MAAAA,KAA+B;AACxC,UAAA,IAAI,CAACA,MAAAA,EAAO;AACV,YAAA,aAAA,CAAc,WAAW,CAAA;AACzB,YAAA,OAAO,eAAA,CAAgB,WAAA,EAAa,IAAA,EAAM,iBAAiB,CAAA;AAAA,UAC7D;AACA,UAAA,MAAM,aAAA,GAAgB,qBAAA;AAAA,YACpBA,OAAM,GAAA,IAAO,IAAA;AAAA,YACbA,OAAM,KAAA,IAAS,IAAA;AAAA,YACf;AAAA,WACF;AACA,UAAA,MAAM,gBAAA,GAAmB,UAAU,aAAa,CAAA;AAChD,UAAA,aAAA,CAAc,gBAAgB,CAAA;AAC9B,UAAA,OAAO,eAAA,CAAgB,gBAAA,EAAkB,IAAA,EAAM,iBAAiB,CAAA;AAAA,QAClE,CAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,GAAG,CAAC,IAAA,EAAM,WAAA,EAAa,iBAAA,EAAmB,SAAS,CAAC,CAAA;AAEpD,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,eAAA,CAAgB,WAAW,CAAC,CAAA;AAAA,QAC1C,UAAA,EAAS,qBAAA;AAAA,QACR,GAAG,SAAA;AAAA,QAEJ,QAAA,kBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACE,GAAG,YAAA;AAAA,YACJ,SAAA,EAAW,EAAA;AAAA,cACT,gBAAgB,eAAe,CAAA;AAAA,cAC/B,YAAA,EAAc,SAAA;AAAA,cACd;AAAA,gBACE,CAAC,eAAA,CAAgB,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,gBACrC,CAAC,eAAA,CAAgB,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,gBACrC,CAAC,uBAAA,CAAwB,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,gBAC7C,CAAC,uBAAA,CAAwB,OAAO,CAAC,GAAG,IAAA,KAAS;AAAA;AAC/C,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACE,GAAG,SAAA;AAAA,kBACJ,GAAA,EAAK,WAAA;AAAA,kBACL,oBAAkB,KAAA,EAAO,KAAA;AAAA,kBACzB,kBAAgB,KAAA,EAAO,GAAA;AAAA,kBACvB,oBAAkB,iBAAA,CAAkB,YAAA;AAAA,kBACpC,oBAAkB,iBAAA,CAAkB,YAAA;AAAA,kBACpC,KAAA,EAAO,UAAA;AAAA,kBACP,QAAA,EAAU,YAAA;AAAA,kBACV,SAAA,EAAW,EAAA;AAAA,oBACT,gBAAgB,OAAO,CAAA;AAAA,oBACvB,wBAAwB,OAAO,CAAA;AAAA,oBAC/B;AAAA,sBACE,CAAC,eAAA,CAAgB,OAAO,CAAC,GAAG,KAAA,IAAS;AAAA,qBACvC;AAAA,oBACA;AAAA;AACF;AAAA,eACF;AAAA,cACC,OAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,CAAgB,yBAAyB,CAAA,EACvD,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA,EACX,CAAA,GACE;AAAA;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;;AC/JzB,MAAM,2BAAA,GAA8B,UAAA,CAGzC,CAAC,KAAA,EAAO,GAAA,KAAQ;AAChB,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,SAAA;AAAA,IACP,YAAA,EAAc,gBAAA;AAAA,IACd,QAAA,EAAU,YAAA;AAAA,IACV,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA,GAAgB,KAAA;AAAA,IAChB,IAAA,GAAO,OAAA;AAAA,IACP,IAAA,GAAO,QAAA;AAAA,IACP,KAAA,GAAQ,KAAA;AAAA,IACR,OAAA,GAAU,KAAA;AAAA,IACV,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,UAAA;AAAA,IACR,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,QAAA,GAAW,OAA6B,IAAI,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,OAGhB,IAAI,CAAA;AACP,EAAA,MAAM,iBAAA,GAAoB,OAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,mBAAmB,iBAAA,EAAkB;AAE3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,4BAAA,CAAkD;AAAA,IAC1E,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc;AAAA,GACf,CAAA;AACD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA;AAAA,IAC5C;AAAA,GACF;AAEA,EAAA,mBAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAuC;AAAA,MACrC,OAAO,MAAM;AACX,QAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,QAAA,OAAO,QAAA,CAAS,QAAQ,KAAA,EAAM;AAAA,MAChC,CAAA;AAAA,MACA,QAAA,EAAU,CAACA,MAAAA,KAA+B;AACxC,QAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,QAAA,QAAA,CAAS,OAAA,CAAQ,SAASA,MAAK,CAAA;AAAA,MACjC;AAAA,KACF,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAA;AAAA,IACtB,MACE,oBAAA,CAAqB;AAAA,MACnB,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,WAAA,EAAa;AAAA,QACX,QAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAAA,IACH,CAAC,KAAA,EAAO,QAAA,EAAU,WAAA,EAAa,SAAS,OAAO;AAAA,GACjD;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,MAAA,KAAoC;AAC7D,IAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAAA,MAAAA,EAAO,GAAG,YAAW,GAAI,MAAA;AACxC,IAAA,QAAA,CAASA,MAAK,CAAA;AACd,IAAA,kBAAA,CAAmBA,MAAK,CAAA;AACxB,IAAA,YAAA,GAAe;AAAA,MACb,GAAG,UAAA;AAAA,MACH,KAAA,EAAAA,MAAAA;AAAA,MACA,SAAS,oBAAA,CAAqB;AAAA,QAC5B,KAAA,EAAAA,MAAAA;AAAA,QACA,WAAA,EAAa;AAAA,UACX,QAAA;AAAA,UACA,WAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA;AACF,OACD;AAAA,KACF,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,QAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA,EAAc,KAAA;AAAA,IACd,GAAG,SAAA;AAAA,IACH,KAAA;AAAA,IACA,QAAA,EAAU,iBAAA;AAAA,IACV,YAAA,EAAc,eAAA;AAAA,IACd,IAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,gBAAA,EAAiB,GAAI,cAAA,CAAe;AAAA,IACjD,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,WAAA,GAAc,CAAC,CAAA;AAAA,MACjB,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,UAAA,GAAa,CAAC,CAAA;AAAA,MAChB,CAAC,CAAA;AACD,MAAA,UAAA,CAAW,SAAS,YAAA,EAAa;AAAA,IACnC,CAAA;AAAA,IACA,sBAAsB,iBAAA,EAAmB,OAAA,GACrC,CAAC,iBAAA,CAAkB,OAAO,IAC1B;AAAC,GACN,CAAA;AAED,EAAA,IAAI,aAAA,IAAiB,CAAC,gBAAA,EAAkB;AACtC,IAAA,uBAAO,GAAA,CAAC,iBAAA,EAAA,EAAkB,GAAA,EAAK,QAAA,EAAW,GAAG,UAAA,EAAY,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,QAAA,KAA2B;AACrD,IAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,IAAA,IACG,SAAS,OAAA,IAAW,QAAA,CAAS,SAC7B,IAAA,KAAS,OAAA,IAAW,SAAS,GAAA,EAC9B;AACA,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,QAAA,CAAS,SAAS,KAAK,CAAA;AACvB,MAAA,YAAA,GAAe;AAAA,QACb,GAAG,QAAA;AAAA,QACH,SAAS,oBAAA,CAAqB;AAAA,UAC5B,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,WAAA,EAAa;AAAA,YACX,QAAA;AAAA,YACA,WAAA;AAAA,YACA,OAAA;AAAA,YACA;AAAA;AACF,SACD;AAAA,OACF,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,uBAAA,GAA0B,CAAC,KAAA,KAAyB;AACxD,IAAA,kBAAA,CAAmB;AAAA,MACjB,GAAA,EAAK,KAAA,EAAO,GAAA,IAAO,eAAA,EAAiB,GAAA,IAAO,IAAA;AAAA,MAC3C;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,GAAA,KAAuB;AACpD,IAAA,kBAAA,CAAmB;AAAA,MACjB,GAAA;AAAA,MACA,KAAA,EAAO,KAAA,EAAO,KAAA,IAAS,eAAA,EAAiB,KAAA,IAAS;AAAA,KAClD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAA4B;AACpD,IAAA,gBAAA,CAAiB,UAAU,KAAsC,CAAA;AAAA,EACnE,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAA4B;AACnD,IAAA,gBAAA,CAAiB,SAAS,KAAsC,CAAA;AAAA,EAClE,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAA4B;AACrD,IAAA,gBAAA,CAAiB,SAAS,KAAsC,CAAA;AAAA,EAClE,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,4BAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,iBAAA;AAAA,MACA,KAAA,EAAO,KAAA,EAAO,KAAA,IAAS,eAAA,EAAiB,KAAA,IAAS,IAAA;AAAA,MACjD,GAAA,EAAK,KAAA,EAAO,GAAA,IAAO,eAAA,EAAiB,GAAA,IAAO,IAAA;AAAA,MAC3C,aAAA,EAAe,uBAAA;AAAA,MACf,WAAA,EAAa,qBAAA;AAAA,MACb,OAAA,EAAS,iBAAA;AAAA,MACT,IAAA;AAAA,MACA,MAAA,EAAQ,iBAAA;AAAA,MAEP,QAAA,EAAA,CAAC,EAAE,GAAA,EAAAC,IAAAA,EAAK,WAAU,qBACjB,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACE,GAAG,UAAA;AAAA,UACJ,KAAK,SAAA,CAAU;AAAA,YACb,QAAA;AAAA,YACAA;AAAA,WACD,CAAA;AAAA,UACD,SAAA,EAAW,CAAC,EAAA,KAAO;AACjB,YAAA,SAAA,GAAY,EAAE,CAAA;AACd,YAAA,UAAA,CAAW,YAAY,EAAE,CAAA;AAAA,UAC3B,CAAA;AAAA,UACA,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,YAAA,UAAA,CAAW,UAAU,EAAE,CAAA;AACvB,YAAA,UAAA,CAAW,SAAS,WAAA,EAAY;AAAA,UAClC,CAAA;AAAA,UACA,OAAA,EAAS,gBAAA;AAAA,UACT,MAAA,EAAQ,eAAA;AAAA,UACR,cAAA,EAAc;AAAA;AAAA;AAChB;AAAA,GAEJ;AAEJ,CAAC;AAED,2BAAA,CAA4B,WAAA,GAAc,6BAAA;;;;"}
1
+ {"version":3,"file":"YearlessDateInputWithPicker-BIkxKxPi.js","sources":["../src/components/DateFieldYearless/internal/PickerListOption.tsx","../src/components/DateFieldYearless/internal/PickerList.tsx","../src/components/DateFieldYearless/internal/utils.ts","../src/components/DateFieldYearless/internal/YearlessDateSelectionPopover.tsx","../src/components/DateFieldYearless/internal/maskito/yearlessDateSegmentsStepping.ts","../src/components/DateFieldYearless/internal/maskito/yearlessDatePlaceholderMask.ts","../src/components/DateFieldYearless/internal/YearlessDateInput.tsx","../src/components/DateFieldYearless/internal/YearlessDateInputWithPicker.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, MouseEvent } from \"react\";\nimport { Icon } from \"../../Icon\";\nimport { Flex, FlexProps } from \"../../Flex\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport { DataTrackingId } from \"../../../types\";\n\nimport cx from \"classnames\";\nimport styles from \"./PickerList.module.scss\";\n\n/**\n * Props for the PickerListOption component\n * @extends ComponentPropsWithoutRef<\"li\">\n */\nexport type PickerListOptionProps = ComponentPropsWithoutRef<\"li\"> & {\n /** The item object containing label, value, and optional disabled state */\n item: { label: string; value: number; disabled?: boolean };\n /** Whether this option is currently selected */\n isSelected: boolean;\n /** Callback when this option is selected */\n onSelectionChange: (\n selected: { label: string; value: number } | undefined,\n ) => void;\n /** Flex alignment for items */\n alignItems?: FlexProps[\"alignItems\"];\n /** Flex justification for items */\n justifyItems?: FlexProps[\"justifyItems\"];\n /** Flex alignment for content */\n alignContent?: FlexProps[\"alignContent\"];\n /** Flex justification for content */\n justifyContent?: FlexProps[\"justifyContent\"];\n /** Flex place-items property */\n placeItems?: FlexProps[\"placeItems\"];\n /** Flex place-content property */\n placeContent?: FlexProps[\"placeContent\"];\n} & DataTrackingId;\n\nexport const PickerListOption = forwardRef<\n HTMLLIElement,\n PickerListOptionProps\n>((props, ref) => {\n const {\n className,\n children,\n onClick,\n item,\n isSelected,\n onSelectionChange,\n alignItems,\n justifyItems,\n alignContent,\n justifyContent,\n placeItems,\n placeContent,\n ...rest\n } = props;\n\n const disabled = item.disabled || false;\n\n const handleSelection = () => {\n if (disabled) return;\n\n if (isSelected) {\n onSelectionChange(undefined);\n } else {\n onSelectionChange(item);\n }\n };\n\n const onClickHandler = (e: MouseEvent<HTMLLIElement>) => {\n onClick?.(e);\n handleSelection();\n };\n\n const onKeyDownHandler = (e: React.KeyboardEvent<HTMLLIElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSelection();\n }\n };\n\n const PickerListOptionClassNames = cx(\n styles[\"picker-list-option\"],\n className,\n );\n\n return (\n <li\n className={PickerListOptionClassNames}\n data-anv=\"picker-list-option\"\n role=\"option\"\n aria-disabled={disabled}\n aria-selected={isSelected}\n data-item-label={item.label}\n onClick={onClickHandler}\n onKeyDown={onKeyDownHandler}\n tabIndex={-1}\n ref={ref}\n {...rest}\n >\n <Flex\n className={styles[\"children\"]}\n grow={1}\n shrink={1}\n alignItems={alignItems}\n justifyItems={justifyItems}\n alignContent={alignContent}\n justifyContent={justifyContent}\n placeItems={placeItems}\n placeContent={placeContent}\n >\n {children || item.label}\n </Flex>\n <Icon\n aria-hidden\n svg={Check}\n inherit\n className={styles[\"Icon\"]}\n style={{ opacity: isSelected ? 1 : 0 }}\n />\n </li>\n );\n});\n\nPickerListOption.displayName = \"PickerListOption\";\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n useRef,\n useImperativeHandle,\n} from \"react\";\nimport { LayoutUtilProps } from \"../../../types\";\nimport { PickerListOption } from \"./PickerListOption\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"./PickerList.module.scss\";\n\n/**\n * Represents an item in the picker list with a label and optional disabled state.\n */\nexport type PickerListItem = {\n /** The display label for the item */\n label: string;\n /** The value of the item */\n value: number;\n /** Whether the item is disabled and cannot be selected */\n disabled?: boolean;\n};\n\n/**\n * Props for the PickerList component\n * @extends ComponentPropsWithoutRef<\"ul\">\n * @extends LayoutUtilProps\n */\nexport type PickerListProps = Omit<ComponentPropsWithoutRef<\"ul\">, \"children\"> &\n LayoutUtilProps & {\n /** Array of items to render */\n items: PickerListItem[];\n /** Currently selected item (controlled) */\n selected?: PickerListItem;\n /** Callback when selection changes */\n onSelectionChange?: (selected: PickerListItem | undefined) => void;\n };\n\n/**\n * Ref methods exposed by PickerList\n */\nexport type PickerListRef = {\n /** Scroll to a specific item by label */\n scrollToItem: (label: string, behavior?: ScrollBehavior) => void;\n /** Scroll to a specific item by value */\n scrollToValue: (value: number, behavior?: ScrollBehavior) => void;\n};\n\n/**\n * PickerList component for selecting items from a list.\n *\n * Features:\n * - Single selection mode only\n * - Mouse click selection\n * - Programmatic scrolling to specific items\n * - Support for disabled items\n * - Accessible with proper ARIA attributes\n * - Visual consistency with Listbox component\n *\n * @example\n * <PickerList\n * items={months}\n * selected={selectedMonth}\n * onSelectionChange={handleMonthChange}\n * />\n */\nexport const PickerList = forwardRef<PickerListRef, PickerListProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n items,\n onSelectionChange,\n selected: selectedProp,\n style,\n ...rest\n } = componentProps;\n\n const listRef = useRef<HTMLUListElement>(null);\n\n const scrollToItem = (\n label: string,\n behavior: ScrollBehavior = \"smooth\",\n ) => {\n const listElement = listRef.current;\n const itemElement = listElement?.querySelector(\n `li[data-item-label=\"${label}\"]`,\n ) as HTMLLIElement | null;\n\n if (listElement && itemElement) {\n // Calculate the target scroll position to center the item\n const itemTop = itemElement.offsetTop;\n const itemHeight = itemElement.offsetHeight;\n const listHeight = listElement.clientHeight;\n\n // Center the item vertically in the list\n const targetScrollTop = itemTop - listHeight / 2 + itemHeight / 2;\n\n // Ensure we don't scroll beyond the bounds\n const maxScrollTop = listElement.scrollHeight - listHeight;\n const clampedScrollTop = Math.max(\n 0,\n Math.min(targetScrollTop, maxScrollTop),\n );\n\n listElement.scrollTo({\n top: clampedScrollTop,\n behavior,\n });\n }\n };\n\n const scrollToValue = (\n value: number,\n behavior: ScrollBehavior = \"smooth\",\n ) => {\n const item = items.find((item) => item.value === value);\n if (item) {\n scrollToItem(item.label, behavior);\n }\n };\n\n useImperativeHandle(ref, () => ({\n scrollToItem,\n scrollToValue,\n }));\n\n const handleSelectionChange = (item: PickerListItem | undefined) => {\n onSelectionChange?.(item);\n };\n\n const PickerListClassNames = cx(styles[\"picker-list\"], className);\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <ul\n role=\"listbox\"\n style={styleCombined}\n className={PickerListClassNames}\n data-anv=\"picker-list\"\n ref={listRef}\n {...rest}\n tabIndex={-1}\n >\n {items.map((item) => (\n <PickerListOption\n key={item.label}\n item={item}\n isSelected={selectedProp?.value === item.value}\n onSelectionChange={handleSelectionChange}\n />\n ))}\n </ul>\n );\n },\n);\n\nPickerList.displayName = \"PickerList\";\n","import { YearlessDate, YearlessDateMode } from \"../types\";\n\nexport function validateYearlessDate({\n value,\n constraints,\n}: {\n value: YearlessDate | null;\n constraints: {\n required?: boolean;\n unavailable?: {\n dates?: YearlessDate[];\n };\n minDate?: YearlessDate | null;\n maxDate?: YearlessDate | null;\n };\n}): boolean {\n const { required, unavailable, minDate, maxDate } = constraints;\n if (!value || (!value?.day && !value?.month)) {\n return required ? false : true;\n }\n if (value.day === null || value.month === null) {\n return false;\n }\n if (\n unavailable?.dates?.some(\n (d) => d.day === value.day && d.month === value.month,\n )\n ) {\n return false;\n }\n const minDateMonth = minDate?.month ?? 1;\n const minDateDay = minDate?.day ?? 1;\n const maxDateMonth = maxDate?.month ?? 12;\n const maxDateDay = maxDate?.day ?? 31;\n if (\n value.month < minDateMonth || // Earlier month\n (value.month === minDateMonth && value.day < minDateDay) // Same month, earlier day\n ) {\n return false;\n }\n if (\n value.month > maxDateMonth || // Later month\n (value.month === maxDateMonth && value.day > maxDateDay) // Same month, later day\n ) {\n return false;\n }\n return true;\n}\n\n/**\n * Return list of months\n * 🌍 localeName: name of local,\n * ✅ monthFormat: short, numeric, long (Default)\n */\nexport function getMonthNames({\n locale,\n format,\n}: {\n locale: string;\n format: Intl.DateTimeFormatOptions[\"month\"];\n}): string[] {\n const formatFn = new Intl.DateTimeFormat(locale, { month: format }).format;\n return [...Array(12).keys()].map((m) =>\n formatFn(new Date(Date.UTC(2021, (m + 1) % 12))),\n );\n}\n\n/**\n * Given a text value, parse it into a YearlessDate object and validate it.\n * @param value - The text value to parse.\n * @param mode - The mode of the date input.\n * @param removePlaceholder - The function to remove the placeholder from the text value.\n * @returns An object containing the parsed YearlessDate object, the input validity, and the input emptiness.\n */\nexport function parseInputValue(\n value: string,\n mode: YearlessDateMode,\n removePlaceholder: (value: string) => string,\n): {\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n} {\n const valueMinusPlaceholder = removePlaceholder(value);\n const [segment1, segment2] = valueMinusPlaceholder.split(\"/\");\n const incompleteFirstSegment = segment1?.length !== 2;\n const incompleteSecondSegment = segment2?.length !== 2;\n if (mode === \"dd/mm\") {\n return {\n value: {\n day: incompleteFirstSegment ? null : parseInt(segment1),\n month: incompleteSecondSegment ? null : parseInt(segment2),\n },\n isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n }\n return {\n value: {\n day: incompleteSecondSegment ? null : parseInt(segment2),\n month: incompleteFirstSegment ? null : parseInt(segment1),\n },\n isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n}\n\n/**\n * Swap the mode of a date input.\n * @param inputString - The text value to swap the mode of.\n * @param previousMode - The previous mode of the date input.\n * @param mode - The new mode of the date input.\n * @returns The text value with the new mode.\n */\nexport function swapMode(\n inputString: string,\n previousMode: YearlessDateMode,\n mode: YearlessDateMode,\n) {\n const { day, month } = divideSegments(inputString, previousMode);\n return stringifyYearlessDate(day, month, mode);\n}\n\n/**\n * Given a text value and a mode, divide the segments of a date input.\n * @param value - The text value to divide the segments of.\n * @param mode - The mode of the date input.\n * @returns An object containing the day and month segments.\n */\nfunction divideSegments(\n value: string,\n mode: YearlessDateMode,\n): {\n day: string;\n month: string;\n} {\n const [segment1, segment2] = value.split(\"/\");\n if (mode === \"dd/mm\") {\n return { day: segment1, month: segment2 };\n }\n return { day: segment2, month: segment1 };\n}\n\n/**\n * Convert a YearlessDate object into a text value.\n * @param day - The day of the date.\n * @param month - The month of the date.\n * @param mode - The mode of the date input.\n * @returns The stringified date.\n */\nexport function stringifyYearlessDate(\n day: number | string | null,\n month: number | string | null,\n mode: YearlessDateMode,\n) {\n const dd = (day ?? \"__\").toString().padStart(2, \"0\");\n const mm = (month ?? \"__\").toString().padStart(2, \"0\");\n if (mode === \"dd/mm\") {\n return `${dd}/${mm}`;\n }\n return `${mm}/${dd}`;\n}\n\n/**\n * Get the number of days in a given month.\n * @param month - The month number (1-12)\n * @returns The number of days in the month\n */\nexport function getDaysInMonth(month: number): number {\n // Use a leap year (2024) to account for February having 29 days\n return new Date(2024, month, 0).getDate();\n}\n\n/**\n * Get months that don't have enough days for the given day.\n * @param day - The day number (1-31)\n * @returns Array of month numbers that don't have enough days for the given day\n */\nexport function getInvalidMonthsForDay(day: number): number[] {\n const invalidMonths: number[] = [];\n\n for (let month = 1; month <= 12; month++) {\n const daysInMonth = getDaysInMonth(month);\n if (day > daysInMonth) {\n invalidMonths.push(month);\n }\n }\n\n return invalidMonths;\n}\n","import { RefObject, useEffect, useMemo, useRef } from \"react\";\nimport Popover from \"../../Popover\";\nimport { PickerList, PickerListRef } from \"./PickerList\";\nimport { getMonthNames, getDaysInMonth, getInvalidMonthsForDay } from \"./utils\";\nimport { Flex } from \"../../Flex\";\nimport { YearlessDateMode } from \"..\";\nimport dateFieldYearlessStyles from \"../DateFieldYearless.module.scss\";\nimport type { PopoverTriggerProps } from \"../../Popover/PopoverTrigger\";\n\n/**\n * Props for the YearlessDateSelectionPopover component\n */\nexport type YearlessDateSelectionPopoverProps = {\n popoverRef: RefObject<{\n openPopover: () => void;\n closePopover: () => void;\n }>;\n popoverContentRef: RefObject<HTMLDivElement>;\n month: number | null;\n day: number | null;\n onMonthChange: (month: number | null) => void;\n onDayChange: (day: number | null) => void;\n onClose: () => void;\n mode: YearlessDateMode;\n onFocus?: (event: React.FocusEvent) => void;\n onBlur?: (event: React.FocusEvent) => void;\n} & PopoverTriggerProps;\n\n/**\n * A yearless date selection tool built into a popover.\n * @param param0\n * @returns\n */\nexport function YearlessDateSelectionPopover({\n children,\n popoverRef,\n popoverContentRef,\n month,\n day,\n onMonthChange,\n onDayChange,\n onClose,\n mode,\n onFocus,\n onBlur,\n}: YearlessDateSelectionPopoverProps) {\n const monthListboxRef = useRef<PickerListRef>(null);\n const dayListboxRef = useRef<PickerListRef>(null);\n\n const months = useMemo(() => {\n return getMonthNames({ locale: \"en-US\", format: \"short\" }).map(\n (name, index) => ({\n label: name,\n value: index + 1,\n }),\n );\n }, []);\n\n const days = useMemo(() => {\n return Array.from({ length: 31 }, (_, i) => ({\n label: `${i + 1}`,\n value: i + 1,\n }));\n }, []);\n\n const invalidDays = useMemo(() => {\n if (!month) {\n return [];\n }\n const daysInMonth = getDaysInMonth(month);\n return Array.from(\n { length: 31 - daysInMonth },\n (_, i) => daysInMonth + i + 1,\n );\n }, [month]);\n\n const invalidMonths = useMemo(() => {\n if (!day) {\n return [];\n }\n return getInvalidMonthsForDay(day);\n }, [day]);\n\n const scrollToSelectedOption = (\n value: number | null,\n ref: RefObject<PickerListRef>,\n behavior: ScrollBehavior = \"smooth\",\n ) => {\n if (value && ref.current) {\n ref.current.scrollToValue(value, behavior);\n }\n };\n\n useEffect(() => {\n scrollToSelectedOption(month, monthListboxRef, \"smooth\");\n }, [month]);\n\n useEffect(() => {\n scrollToSelectedOption(day, dayListboxRef, \"smooth\");\n }, [day]);\n\n const handleMonthChange = (\n selected: { label: string; value: number } | undefined,\n ) => {\n if (selected?.value) {\n onMonthChange?.(selected.value);\n\n // If current day is invalid for the new month, clear it\n if (day && invalidDays.includes(day)) {\n onDayChange?.(null);\n }\n }\n };\n\n const handleDayChange = (\n selected: { label: string; value: number } | undefined,\n ) => {\n if (selected?.value) {\n onDayChange?.(selected.value);\n\n // If current month is invalid for the new day, clear it\n if (month && invalidMonths.includes(month)) {\n onMonthChange?.(null);\n }\n }\n };\n\n const monthPicker = (\n <PickerList\n ref={monthListboxRef}\n items={months.map((item) => ({\n ...item,\n disabled: invalidMonths.includes(item.value),\n }))}\n selected={months.find((m) => m.value === month)}\n style={{ maxHeight: \"240px\", overflow: \"auto\" }}\n className={dateFieldYearlessStyles[\"scrolling-container\"]}\n onSelectionChange={handleMonthChange}\n />\n );\n\n const dayPicker = (\n <PickerList\n ref={dayListboxRef}\n items={days.map((item) => ({\n ...item,\n disabled: invalidDays.includes(item.value),\n }))}\n selected={days.find((d) => d.value === day)}\n className={dateFieldYearlessStyles[\"scrolling-container\"]}\n onSelectionChange={handleDayChange}\n />\n );\n\n return (\n <Popover\n ref={popoverRef}\n placement=\"bottom-start\"\n disableFlipFallback\n disableCaret\n disableAutoUpdate\n onClose={onClose}\n onOpenAnimationStart={() => {\n scrollToSelectedOption(month, monthListboxRef, \"instant\");\n scrollToSelectedOption(day, dayListboxRef, \"instant\");\n }}\n >\n <Popover.Trigger>\n {(triggerProps) => <>{children(triggerProps)}</>}\n </Popover.Trigger>\n <Popover.Content\n ref={popoverContentRef}\n hideWhileClosed\n onFocus={onFocus}\n onBlur={onBlur}\n >\n <Flex gap={2} style={{ maxHeight: \"240px\" }}>\n {mode === \"dd/mm\" ? (\n <>\n {dayPicker}\n {monthPicker}\n </>\n ) : (\n <>\n {monthPicker}\n {dayPicker}\n </>\n )}\n </Flex>\n </Popover.Content>\n </Popover>\n );\n}\n","import type { MaskitoPlugin, MaskitoElement } from \"@maskito/core\";\nimport { maskitoUpdateElement } from \"@maskito/core\";\n\nimport { YearlessDateMode } from \"../../types\";\nimport { getDaysInMonth } from \"../utils\";\n\ntype YearlessDateSegments = {\n month: number;\n day: number;\n};\n\ntype SegmentRange = [number, number];\n\n// Constants\nconst MIN_MONTH = 1;\nconst MAX_MONTH = 12;\nconst MIN_DAY = 1;\nconst MAX_DAY = 31;\nconst SEGMENT_LENGTH = 2;\n\n/**\n * Creates a Maskito plugin for yearless date segment stepping\n * @param mode - The date format mode (mm/dd or dd/mm)\n * @returns MaskitoPlugin that handles arrow key navigation\n * @example\n * const plugin = createYearlessDateSegmentsSteppingPlugin({ mode: \"mm/dd\" });\n */\nexport function createYearlessDateSegmentsSteppingPlugin({\n mode,\n}: {\n mode: YearlessDateMode;\n}): MaskitoPlugin {\n const segmentsIndexes = createSegmentIndexes(mode);\n\n return (element) => {\n const listener = (event: KeyboardEvent): void => {\n if (event.key === \"ArrowRight\") {\n handleArrowRight(element, event);\n return;\n }\n\n if (event.key !== \"ArrowUp\" && event.key !== \"ArrowDown\") {\n return;\n }\n\n event.preventDefault();\n\n const selectionStart = element.selectionStart ?? 0;\n const activeSegment = getActiveSegment({\n segmentsIndexes,\n selectionStart,\n });\n\n if (!activeSegment) {\n return;\n }\n\n const segmentSelection = segmentsIndexes.get(activeSegment);\n if (!segmentSelection) {\n return;\n }\n\n const maxValue = getMaxValueForSegment(\n activeSegment,\n element.value,\n segmentsIndexes,\n );\n\n const updatedValue = updateSegmentValue({\n selection: segmentSelection,\n value: element.value,\n increment: event.key === \"ArrowUp\" ? -1 : 1,\n min: MIN_DAY,\n max: maxValue,\n });\n\n // If we're updating the month, check if the day needs to be adjusted\n const finalValue =\n activeSegment === \"month\"\n ? adjustDayForNewMonth(updatedValue, segmentsIndexes)\n : updatedValue;\n\n maskitoUpdateElement(element, {\n value: finalValue,\n selection: [selectionStart, selectionStart],\n });\n };\n\n element.addEventListener(\"keydown\", listener);\n return () => element.removeEventListener(\"keydown\", listener);\n };\n}\n\nfunction createSegmentIndexes(\n mode: YearlessDateMode,\n): Map<keyof YearlessDateSegments, SegmentRange> {\n const map = new Map<keyof YearlessDateSegments, SegmentRange>();\n\n if (mode === \"mm/dd\") {\n map.set(\"month\", [0, SEGMENT_LENGTH]);\n map.set(\"day\", [SEGMENT_LENGTH + 1, SEGMENT_LENGTH * 2 + 1]);\n } else if (mode === \"dd/mm\") {\n map.set(\"day\", [0, SEGMENT_LENGTH]);\n map.set(\"month\", [SEGMENT_LENGTH + 1, SEGMENT_LENGTH * 2 + 1]);\n }\n\n return map;\n}\n\n/**\n * Handle ArrowRight key to insert separator at the right position\n */\nfunction handleArrowRight(element: MaskitoElement, event: KeyboardEvent): void {\n const selectionStart = element.selectionStart ?? 0;\n const value = element.value;\n\n // Position 3 is where the separator should be (after the first segment)\n if (selectionStart === SEGMENT_LENGTH && value.includes(\"__\")) {\n // Insert the separator\n event.preventDefault();\n maskitoUpdateElement(element, {\n value: value + \"/\",\n selection: [selectionStart + 1, selectionStart + 1],\n });\n }\n}\n\n/**\n * Adjust the day value if it's out of bounds for the new month\n */\nfunction adjustDayForNewMonth(\n value: string,\n segmentsIndexes: Map<keyof YearlessDateSegments, SegmentRange>,\n): string {\n const monthSelection = segmentsIndexes.get(\"month\");\n const daySelection = segmentsIndexes.get(\"day\");\n\n if (!monthSelection || !daySelection) {\n return value;\n }\n\n const monthValue = parseSegmentValue(value, monthSelection);\n const dayValue = parseSegmentValue(value, daySelection);\n\n // If month or day is invalid, return original value\n if (monthValue < MIN_MONTH || monthValue > MAX_MONTH || dayValue < MIN_DAY) {\n return value;\n }\n\n const maxDaysInMonth = getDaysInMonth(monthValue);\n\n // If day is within bounds, no adjustment needed\n if (dayValue <= maxDaysInMonth) {\n return value;\n }\n\n // Adjust day to the last valid day of the month\n const [dayFrom, dayTo] = daySelection;\n const adjustedDay = String(maxDaysInMonth).padStart(dayTo - dayFrom, \"0\");\n\n return (\n value.slice(0, dayFrom) + adjustedDay + value.slice(dayTo, value.length)\n );\n}\n\n/**\n * Parse a segment value from the input string, treating empty segments as 0\n */\nfunction parseSegmentValue(value: string, selection: SegmentRange): number {\n const [from, to] = selection;\n const segmentText = value.slice(from, to);\n if (segmentText.includes(\"_\")) return 0;\n return Number(segmentText.padEnd(to - from, \"0\"));\n}\n\nfunction getMaxValueForSegment(\n segment: keyof YearlessDateSegments,\n value: string,\n segmentsIndexes: Map<keyof YearlessDateSegments, SegmentRange>,\n): number {\n if (segment === \"month\") {\n return MAX_MONTH;\n }\n\n // For day segment, get the current month value to determine max days\n const monthSelection = segmentsIndexes.get(\"month\");\n if (!monthSelection) {\n return MAX_DAY;\n }\n\n const monthValue = parseSegmentValue(value, monthSelection);\n\n // If month is not valid, use default max\n if (monthValue < MIN_MONTH || monthValue > MAX_MONTH) {\n return MAX_DAY;\n }\n\n return getDaysInMonth(monthValue);\n}\n\nfunction getActiveSegment({\n segmentsIndexes,\n selectionStart,\n}: {\n segmentsIndexes: Map<keyof YearlessDateSegments, SegmentRange>;\n selectionStart: number;\n}): keyof YearlessDateSegments | null {\n for (const [segmentName, segmentRange] of segmentsIndexes.entries()) {\n const [from, to] = segmentRange;\n if (from <= selectionStart && selectionStart <= to) {\n return segmentName;\n }\n }\n return null;\n}\n\nfunction updateSegmentValue({\n selection,\n value,\n increment,\n min,\n max,\n}: {\n selection: SegmentRange;\n value: string;\n increment: number;\n min: number;\n max: number;\n}): string {\n const [from, to] = selection;\n const segmentValue = parseSegmentValue(value, selection);\n // Prevent decrementing 0 losing negative and rolling up to 1.\n if (segmentValue === 0 && increment < 0) return value;\n const newSegmentValue = Math.max(\n min,\n Math.min(max, segmentValue + increment),\n );\n\n return (\n value.slice(0, from) +\n String(newSegmentValue).padStart(to - from, \"0\") +\n value.slice(to, value.length)\n );\n}\n","import { maskitoTransform, type MaskitoOptions } from \"@maskito/core\";\nimport {\n maskitoDateOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\n\nimport { YearlessDateMode } from \"../../types\";\nimport { makeZeroShortcutPreprocessor } from \"../../../DateFieldSingle/internal/maskito/makeZeroShortcutPreprocessor\";\nimport { createYearlessDateSegmentsSteppingPlugin } from \"./yearlessDateSegmentsStepping\";\n\nconst yearlessDatePlaceholderMask = ({\n mode,\n separator = \"/\",\n placeholder,\n enableStepping = false,\n}: {\n mode: YearlessDateMode;\n enableStepping: boolean;\n separator?: string;\n placeholder: string;\n}) => {\n const dateOptions = maskitoDateOptionsGenerator({\n mode,\n separator,\n });\n\n const { plugins, removePlaceholder, ...placeholderOptions } =\n maskitoWithPlaceholder(placeholder);\n\n const datePlaceholderMask = {\n ...dateOptions,\n plugins: plugins.concat([\n ...(dateOptions.plugins || []),\n ...(enableStepping\n ? [createYearlessDateSegmentsSteppingPlugin({ mode })]\n : []),\n ]),\n preprocessors: [\n ...placeholderOptions.preprocessors,\n ...dateOptions.preprocessors,\n makeZeroShortcutPreprocessor(mode, separator),\n ],\n postprocessors: [\n ...dateOptions.postprocessors,\n ...placeholderOptions.postprocessors,\n ],\n } satisfies Required<MaskitoOptions>;\n\n const transform = (value: string) => {\n return maskitoTransform(value, datePlaceholderMask);\n };\n\n return { options: datePlaceholderMask, removePlaceholder, transform };\n};\n\nexport default yearlessDatePlaceholderMask;\n","import { useMaskito } from \"@maskito/react\";\nimport {\n forwardRef,\n InputHTMLAttributes,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { YearlessDateMode, YearlessDate } from \"../types\";\nimport { usePrevious } from \"../../../internal/hooks\";\nimport yearlessDatePlaceholderMask from \"./maskito/yearlessDatePlaceholderMask\";\nimport { swapMode, stringifyYearlessDate, parseInputValue } from \"./utils\";\nimport textFieldStyles from \"../../TextField/TextField.module.scss\";\nimport dateFieldYearlessStyles from \"../DateFieldYearless.module.scss\";\nimport cx from \"classnames\";\nimport { PassThroughPropsWithRef, Size } from \"../../../types\";\nimport { Spinner } from \"../../Spinner\";\n\nexport type YearlessDateInputChange = {\n event: React.ChangeEvent<HTMLInputElement> | null;\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type YearlessDateInputChangeHandler = (\n change: YearlessDateInputChange,\n) => void;\n\nexport type YearlessDateInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"value\" | \"ref\" | \"size\"\n> & {\n onChange: YearlessDateInputChangeHandler;\n mode?: YearlessDateMode;\n value?: YearlessDate | null;\n error?: boolean;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n wrapperProps?: PassThroughPropsWithRef<\"div\">;\n rootProps?: PassThroughPropsWithRef<\"div\">;\n loading?: boolean;\n enableStepping?: boolean;\n};\n\nexport type YearlessDateInputRef = HTMLInputElement & {\n setValue: (value: YearlessDate | null) => {\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n };\n removePlaceholder: (value: string) => string;\n};\n\n/**\n * A masked date input component that allows for the input of a date in a specific format.\n *\n * Provides a `setDate` method that can be used to set the date from outside the component (e.g from a calendar).\n *\n * @internal This component is not intended to be used directly in consumer code.\n *\n * @param props - The props for the MaskedDateInput component.\n * @param props.onChange - The function to call when the date changes.\n * @param props.mode - The mode of the date input.\n */\nexport const YearlessDateInput = forwardRef<\n YearlessDateInputRef,\n YearlessDateInputProps\n>(\n (\n {\n onChange,\n mode = \"mm/dd\",\n value,\n error,\n size,\n wrapperProps,\n rootProps,\n loading = false,\n enableStepping = false,\n className: classNameProp,\n ...restProps\n },\n ref,\n ) => {\n const placeholder = \"__/__\";\n const [inputValue, setInputValue] = useState(placeholder);\n const { options, removePlaceholder, transform } =\n yearlessDatePlaceholderMask({\n mode,\n placeholder,\n enableStepping,\n });\n const maskedInputRef = useMaskito({ options });\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = useMergeRefs([maskedInputRef, inputRef, ref]);\n const previousValue = usePrevious(value);\n const previousMode = usePrevious(mode);\n\n // Update the input value when the mode changes.\n useEffect(() => {\n if (mode !== previousMode) {\n setInputValue((oldInputValue) =>\n swapMode(oldInputValue, previousMode ?? mode, mode),\n );\n }\n }, [mode, previousMode]);\n\n const triggerAutoChange = useCallback(\n (stringValue: string) => {\n const {\n value: v,\n isInputValid,\n isInputEmpty,\n } = parseInputValue(stringValue, mode, removePlaceholder);\n onChange?.({\n event: null,\n value: v,\n isInputValid,\n isInputEmpty,\n });\n },\n [mode, removePlaceholder, onChange],\n );\n\n // Update the input value when the parent's value changes.\n useEffect(() => {\n if (\n previousValue?.day !== value?.day ||\n previousValue?.month !== value?.month\n ) {\n if (value?.day && value?.month) {\n const stringValue = stringifyYearlessDate(\n value.day,\n value.month,\n mode,\n );\n const transformedValue = transform(stringValue);\n setInputValue(transformedValue);\n if (transformedValue !== stringValue) {\n triggerAutoChange(transformedValue);\n }\n } else if (\n previousValue !== null &&\n previousValue !== undefined &&\n (value === null || (value?.day === null && value?.month === null))\n ) {\n setInputValue(placeholder);\n } else {\n return;\n }\n }\n }, [value, mode, previousValue, transform, triggerAutoChange]);\n\n const currentParsedData = useMemo(() => {\n return parseInputValue(inputValue, mode, removePlaceholder);\n }, [inputValue, mode, removePlaceholder]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(event.target.value);\n const {\n value: v,\n isInputValid,\n isInputEmpty,\n } = parseInputValue(event.target.value, mode, removePlaceholder);\n\n const isDateDifferent =\n (v === null) !== (currentParsedData.value === null) ||\n v?.day !== currentParsedData.value?.day ||\n v?.month !== currentParsedData.value?.month;\n if (!isDateDifferent) {\n return;\n }\n\n onChange?.({\n event,\n value: v ?? currentParsedData.value ?? null,\n isInputValid,\n isInputEmpty,\n });\n };\n\n // Extend the input ref with additional methods.\n // This provides a way to set the input value from outside the component.\n useImperativeHandle(ref, () => {\n const input = inputRef.current;\n if (!input) return null as unknown as YearlessDateInputRef;\n return Object.assign(input, {\n setValue: (value: YearlessDate | null) => {\n if (!value) {\n setInputValue(placeholder);\n return parseInputValue(placeholder, mode, removePlaceholder);\n }\n const valueAsString = stringifyYearlessDate(\n value.day ?? null,\n value.month ?? null,\n mode,\n );\n const transformedValue = transform(valueAsString);\n setInputValue(transformedValue);\n return parseInputValue(transformedValue, mode, removePlaceholder);\n },\n removePlaceholder,\n });\n }, [mode, placeholder, removePlaceholder, transform]);\n\n return (\n <div\n className={cx(textFieldStyles[\"textfield\"])}\n data-anv=\"yearless-date-input\"\n {...rootProps}\n >\n <div\n {...wrapperProps}\n className={cx(\n textFieldStyles[\"input-wrapper\"],\n wrapperProps?.className,\n {\n [textFieldStyles[\"small\"]]: size === \"small\",\n [textFieldStyles[\"large\"]]: size === \"large\",\n [dateFieldYearlessStyles[\"small\"]]: size === \"small\",\n [dateFieldYearlessStyles[\"large\"]]: size === \"large\",\n },\n )}\n >\n <input\n {...restProps}\n ref={combinedRef}\n data-month-value={value?.month}\n data-day-value={value?.day}\n data-input-valid={currentParsedData.isInputValid}\n data-input-empty={currentParsedData.isInputEmpty}\n value={inputValue}\n onChange={handleChange}\n className={cx(\n textFieldStyles[\"input\"],\n dateFieldYearlessStyles[\"input\"],\n {\n [textFieldStyles[\"error\"]]: error ?? false,\n },\n classNameProp,\n )}\n />\n {loading ? (\n <div className={textFieldStyles[\"loading-spinner-wrapper\"]}>\n <Spinner />\n </div>\n ) : null}\n </div>\n </div>\n );\n },\n);\n\nYearlessDateInput.displayName = \"YearlessDateInput\";\n","import {\n forwardRef,\n InputHTMLAttributes,\n Ref,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { YearlessDateMode, YearlessDate } from \"../types\";\nimport { YearlessDateSelectionPopover } from \"./YearlessDateSelectionPopover\";\nimport { DateFieldYearlessChangeHandler } from \"../DateFieldYearless\";\nimport {\n YearlessDateInput,\n YearlessDateInputChange,\n YearlessDateInputRef,\n} from \"./YearlessDateInput\";\nimport { validateYearlessDate } from \"./utils\";\nimport {\n useFocusWithin,\n useOptionallyControlledState,\n usePopoverSupport,\n} from \"../../../internal\";\nimport { Size } from \"../../../types\";\nimport { mergeRefs } from \"../../../hooks/useMergeRefs/useMergeRefs\";\n\nexport type YearlessDateInputWithPickerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"value\" | \"ref\" | \"size\" | \"defaultValue\" | \"onFocus\" | \"onBlur\"\n> & {\n /**\n * The controlled value of the date field\n */\n value?: YearlessDate | null;\n /**\n * The default value for uncontrolled usage\n */\n defaultValue?: YearlessDate | null;\n /**\n * The function to call when the date value changes\n */\n onChange?: DateFieldYearlessChangeHandler;\n /**\n * The date format mode (mm/dd or dd/mm)\n */\n mode?: YearlessDateMode;\n /**\n * Whether the field is required\n */\n required?: boolean;\n /**\n * The minimum allowed date\n */\n minDate?: YearlessDate | null;\n /**\n * The maximum allowed date\n */\n maxDate?: YearlessDate | null;\n /**\n * Configuration for unavailable dates\n */\n unavailable?: {\n /**\n * Array of dates that are not selectable\n */\n dates?: YearlessDate[];\n };\n /**\n * Whether the picker is disabled\n */\n disablePicker?: boolean;\n /**\n * The size of the input\n */\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n /**\n * Whether the input has an error\n */\n error?: boolean;\n /**\n * Whether the input is in loading state\n */\n loading?: boolean;\n /**\n * Function to call when the input is focused\n */\n onFocus?: (event: React.FocusEvent) => void;\n /**\n * Function to call when the input is blurred\n */\n onBlur?: (event: React.FocusEvent) => void;\n};\n\nexport type YearlessDateInputWithPickerRef = {\n focus: () => void;\n setValue: (value: YearlessDate | null) => void;\n};\n\nexport const YearlessDateInputWithPicker = forwardRef<\n YearlessDateInputWithPickerRef,\n YearlessDateInputWithPickerProps\n>((props, ref) => {\n const {\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange: onChangeProp,\n minDate,\n maxDate,\n unavailable,\n required,\n disablePicker = false,\n mode = \"mm/dd\",\n size = \"medium\",\n error = false,\n loading = false,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n ...restProps\n } = props;\n\n const inputRef = useRef<YearlessDateInputRef>(null);\n const popoverRef = useRef<{\n openPopover: () => void;\n closePopover: () => void;\n }>(null);\n const popoverContentRef = useRef<HTMLDivElement>(null);\n const popoverSupported = usePopoverSupport();\n\n const [value, setValue] = useOptionallyControlledState<YearlessDate | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n const [tempPickerValue, setTempPickerValue] = useState<YearlessDate | null>(\n value,\n );\n\n useImperativeHandle(\n ref,\n (): YearlessDateInputWithPickerRef => ({\n focus: () => {\n if (!inputRef.current) return;\n return inputRef.current.focus();\n },\n setValue: (value: YearlessDate | null) => {\n if (!inputRef.current) return;\n inputRef.current.setValue(value);\n },\n }),\n [inputRef],\n );\n\n const currentValidity = useMemo(\n () =>\n validateYearlessDate({\n value: value ?? null,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n [value, required, unavailable, minDate, maxDate],\n );\n\n const handleInputChange = (change: YearlessDateInputChange) => {\n const { event, value, ...restChange } = change;\n setValue(value);\n setTempPickerValue(value);\n onChangeProp?.({\n ...restChange,\n value,\n isValid: validateYearlessDate({\n value,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n });\n };\n\n const inputProps = {\n required,\n mode,\n autoComplete: \"off\",\n ...restProps,\n value: value,\n onChange: handleInputChange,\n \"data-valid\": currentValidity,\n size,\n error,\n loading,\n };\n\n const { props: focusWithinProps } = useFocusWithin({\n onFocus: (e) => {\n requestAnimationFrame(() => {\n onFocusProp?.(e);\n });\n },\n onBlur: (e) => {\n requestAnimationFrame(() => {\n onBlurProp?.(e);\n });\n popoverRef.current?.closePopover();\n },\n otherRelatedElements: popoverContentRef?.current\n ? [popoverContentRef.current]\n : [],\n });\n\n if (disablePicker || !popoverSupported) {\n return <YearlessDateInput ref={inputRef} {...inputProps} />;\n }\n\n const handlePickerChange = (newValue: YearlessDate) => {\n setTempPickerValue(newValue);\n if (!inputRef.current) return;\n if (\n (mode === \"mm/dd\" && newValue.month) ||\n (mode === \"dd/mm\" && newValue.day)\n ) {\n const valueSet = inputRef.current.setValue(newValue);\n setValue(valueSet.value);\n onChangeProp?.({\n ...valueSet,\n isValid: validateYearlessDate({\n value: valueSet.value,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n });\n }\n };\n\n const handlePickerMonthChange = (month: number | null) => {\n handlePickerChange({\n day: value?.day ?? tempPickerValue?.day ?? null,\n month,\n });\n };\n\n const handlePickerDayChange = (day: number | null) => {\n handlePickerChange({\n day,\n month: value?.month ?? tempPickerValue?.month ?? null,\n });\n };\n\n const handlePickerClose = () => {\n setTempPickerValue(null);\n };\n\n const handleInputFocus = (event: React.FocusEvent) => {\n focusWithinProps.onFocus?.(event as React.FocusEvent<HTMLElement>);\n };\n const handleInputBlur = (event: React.FocusEvent) => {\n focusWithinProps.onBlur?.(event as React.FocusEvent<HTMLElement>);\n };\n\n const handlePopoverBlur = (event: React.FocusEvent) => {\n focusWithinProps.onBlur?.(event as React.FocusEvent<HTMLElement>);\n };\n\n return (\n <YearlessDateSelectionPopover\n popoverRef={popoverRef}\n popoverContentRef={popoverContentRef}\n month={value?.month ?? tempPickerValue?.month ?? null}\n day={value?.day ?? tempPickerValue?.day ?? null}\n onMonthChange={handlePickerMonthChange}\n onDayChange={handlePickerDayChange}\n onClose={handlePickerClose}\n mode={mode}\n onBlur={handlePopoverBlur}\n >\n {({ ref, onKeyDown }) => (\n <YearlessDateInput\n {...inputProps}\n ref={mergeRefs([\n inputRef,\n ref as unknown as Ref<YearlessDateInputRef>,\n ])}\n onKeyDown={(ev) => {\n onKeyDown?.(ev);\n inputProps.onKeyDown?.(ev);\n }}\n onClick={(ev) => {\n inputProps.onClick?.(ev);\n popoverRef.current?.openPopover();\n }}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n enableStepping\n />\n )}\n </YearlessDateSelectionPopover>\n );\n});\n\nYearlessDateInputWithPicker.displayName = \"YearlessDateInputWithPicker\";\n"],"names":["Icon","Check","item","value","ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCO,MAAM,gBAAA,GAAmB,UAAA,CAG9B,CAAC,KAAA,EAAO,GAAA,KAAQ;AAChB,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,KAAA;AAElC,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,IAAI,QAAA,EAAU;AAEd,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,iBAAA,CAAkB,MAAS,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAiC;AACvD,IAAA,OAAA,GAAU,CAAC,CAAA;AACX,IAAA,eAAA,EAAgB;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA0C;AAClE,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,0BAAA,GAA6B,EAAA;AAAA,IACjC,OAAO,oBAAoB,CAAA;AAAA,IAC3B;AAAA,GACF;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,0BAAA;AAAA,MACX,UAAA,EAAS,oBAAA;AAAA,MACT,IAAA,EAAK,QAAA;AAAA,MACL,eAAA,EAAe,QAAA;AAAA,MACf,eAAA,EAAe,UAAA;AAAA,MACf,mBAAiB,IAAA,CAAK,KAAA;AAAA,MACtB,OAAA,EAAS,cAAA;AAAA,MACT,SAAA,EAAW,gBAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACV,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,OAAO,UAAU,CAAA;AAAA,YAC5B,IAAA,EAAM,CAAA;AAAA,YACN,MAAA,EAAQ,CAAA;AAAA,YACR,UAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,cAAA;AAAA,YACA,UAAA;AAAA,YACA,YAAA;AAAA,YAEC,sBAAY,IAAA,CAAK;AAAA;AAAA,SACpB;AAAA,wBACA,GAAA;AAAA,UAACA,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAW,IAAA;AAAA,YACX,GAAA,EAAKC,QAAA;AAAA,YACL,OAAA,EAAO,IAAA;AAAA,YACP,SAAA,EAAW,OAAO,MAAM,CAAA;AAAA,YACxB,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,GAAa,IAAI,CAAA;AAAE;AAAA;AACvC;AAAA;AAAA,GACF;AAEJ,CAAC,CAAA;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA;;ACvDxB,MAAM,UAAA,GAAa,UAAA;AAAA,EACxB,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,KAAK,CAAA;AACjE,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,KAAA;AAAA,MACA,iBAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,KAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,cAAA;AAEJ,IAAA,MAAM,OAAA,GAAU,OAAyB,IAAI,CAAA;AAE7C,IAAA,MAAM,YAAA,GAAe,CACnB,KAAA,EACA,QAAA,GAA2B,QAAA,KACxB;AACH,MAAA,MAAM,cAAc,OAAA,CAAQ,OAAA;AAC5B,MAAA,MAAM,cAAc,WAAA,EAAa,aAAA;AAAA,QAC/B,uBAAuB,KAAK,CAAA,EAAA;AAAA,OAC9B;AAEA,MAAA,IAAI,eAAe,WAAA,EAAa;AAE9B,QAAA,MAAM,UAAU,WAAA,CAAY,SAAA;AAC5B,QAAA,MAAM,aAAa,WAAA,CAAY,YAAA;AAC/B,QAAA,MAAM,aAAa,WAAA,CAAY,YAAA;AAG/B,QAAA,MAAM,eAAA,GAAkB,OAAA,GAAU,UAAA,GAAa,CAAA,GAAI,UAAA,GAAa,CAAA;AAGhE,QAAA,MAAM,YAAA,GAAe,YAAY,YAAA,GAAe,UAAA;AAChD,QAAA,MAAM,mBAAmB,IAAA,CAAK,GAAA;AAAA,UAC5B,CAAA;AAAA,UACA,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,YAAY;AAAA,SACxC;AAEA,QAAA,WAAA,CAAY,QAAA,CAAS;AAAA,UACnB,GAAA,EAAK,gBAAA;AAAA,UACL;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CACpB,KAAA,EACA,QAAA,GAA2B,QAAA,KACxB;AACH,MAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAACC,KAAAA,KAASA,KAAAA,CAAK,UAAU,KAAK,CAAA;AACtD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,YAAA,CAAa,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,MACnC;AAAA,IACF,CAAA;AAEA,IAAA,mBAAA,CAAoB,KAAK,OAAO;AAAA,MAC9B,YAAA;AAAA,MACA;AAAA,KACF,CAAE,CAAA;AAEF,IAAA,MAAM,qBAAA,GAAwB,CAAC,IAAA,KAAqC;AAClE,MAAA,iBAAA,GAAoB,IAAI,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,oBAAA,GAAuB,EAAA,CAAG,MAAA,CAAO,aAAa,GAAG,SAAS,CAAA;AAEhE,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,GAAG,KAAA;AAAA,MACH,GAAG;AAAA,KACL;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,SAAA,EAAW,oBAAA;AAAA,QACX,UAAA,EAAS,aAAA;AAAA,QACT,GAAA,EAAK,OAAA;AAAA,QACJ,GAAG,IAAA;AAAA,QACJ,QAAA,EAAU,EAAA;AAAA,QAET,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACV,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YAEC,IAAA;AAAA,YACA,UAAA,EAAY,YAAA,EAAc,KAAA,KAAU,IAAA,CAAK,KAAA;AAAA,YACzC,iBAAA,EAAmB;AAAA,WAAA;AAAA,UAHd,IAAA,CAAK;AAAA,SAKb;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;;ACjKlB,SAAS,oBAAA,CAAqB;AAAA,EACnC,KAAA;AAAA,EACA;AACF,CAAA,EAUY;AACV,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAa,OAAA,EAAS,SAAQ,GAAI,WAAA;AACpD,EAAA,IAAI,CAAC,KAAA,IAAU,CAAC,OAAO,GAAA,IAAO,CAAC,OAAO,KAAA,EAAQ;AAC5C,IAAA,OAAO,WAAW,KAAA,GAAQ,IAAA;AAAA,EAC5B;AACA,EAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,UAAU,IAAA,EAAM;AAC9C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IACE,aAAa,KAAA,EAAO,IAAA;AAAA,IAClB,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,MAAM,GAAA,IAAO,CAAA,CAAE,UAAU,KAAA,CAAM;AAAA,GAClD,EACA;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,YAAA,GAAe,SAAS,KAAA,IAAS,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,SAAS,GAAA,IAAO,CAAA;AACnC,EAAA,MAAM,YAAA,GAAe,SAAS,KAAA,IAAS,EAAA;AACvC,EAAA,MAAM,UAAA,GAAa,SAAS,GAAA,IAAO,EAAA;AACnC,EAAA,IACE,MAAM,KAAA,GAAQ,YAAA;AAAA,EACb,KAAA,CAAM,KAAA,KAAU,YAAA,IAAgB,KAAA,CAAM,MAAM,UAAA,EAC7C;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IACE,MAAM,KAAA,GAAQ,YAAA;AAAA,EACb,KAAA,CAAM,KAAA,KAAU,YAAA,IAAgB,KAAA,CAAM,MAAM,UAAA,EAC7C;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,aAAA,CAAc;AAAA,EAC5B,MAAA;AAAA,EACA;AACF,CAAA,EAGa;AACX,EAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,MAAA;AACpE,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,CAAA,KAChC,QAAA,CAAS,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,EAAA,CAAO,CAAA,GAAI,CAAA,IAAK,EAAE,CAAC,CAAC;AAAA,GACjD;AACF;AASO,SAAS,eAAA,CACd,KAAA,EACA,IAAA,EACA,iBAAA,EAKA;AACA,EAAA,MAAM,qBAAA,GAAwB,kBAAkB,KAAK,CAAA;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI,qBAAA,CAAsB,MAAM,GAAG,CAAA;AAC5D,EAAA,MAAM,sBAAA,GAAyB,UAAU,MAAA,KAAW,CAAA;AACpD,EAAA,MAAM,uBAAA,GAA0B,UAAU,MAAA,KAAW,CAAA;AACrD,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,GAAA,EAAK,sBAAA,GAAyB,IAAA,GAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,QACtD,KAAA,EAAO,uBAAA,GAA0B,IAAA,GAAO,QAAA,CAAS,QAAQ;AAAA,OAC3D;AAAA,MACA,YAAA,EAAc,CAAC,sBAAA,IAA0B,CAAC,uBAAA;AAAA,MAC1C,cAAc,qBAAA,KAA0B;AAAA,KAC1C;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,GAAA,EAAK,uBAAA,GAA0B,IAAA,GAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,MACvD,KAAA,EAAO,sBAAA,GAAyB,IAAA,GAAO,QAAA,CAAS,QAAQ;AAAA,KAC1D;AAAA,IACA,YAAA,EAAc,CAAC,sBAAA,IAA0B,CAAC,uBAAA;AAAA,IAC1C,cAAc,qBAAA,KAA0B;AAAA,GAC1C;AACF;AASO,SAAS,QAAA,CACd,WAAA,EACA,YAAA,EACA,IAAA,EACA;AACA,EAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAM,GAAI,cAAA,CAAe,aAAa,YAAY,CAAA;AAC/D,EAAA,OAAO,qBAAA,CAAsB,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA;AAC/C;AAQA,SAAS,cAAA,CACP,OACA,IAAA,EAIA;AACA,EAAA,MAAM,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI,KAAA,CAAM,MAAM,GAAG,CAAA;AAC5C,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,OAAO,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EAC1C;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAC1C;AASO,SAAS,qBAAA,CACd,GAAA,EACA,KAAA,EACA,IAAA,EACA;AACA,EAAA,MAAM,MAAM,GAAA,IAAO,IAAA,EAAM,UAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACnD,EAAA,MAAM,MAAM,KAAA,IAAS,IAAA,EAAM,UAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACrD,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AACpB;AAOO,SAAS,eAAe,KAAA,EAAuB;AAEpD,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,CAAC,EAAE,OAAA,EAAQ;AAC1C;AAOO,SAAS,uBAAuB,GAAA,EAAuB;AAC5D,EAAA,MAAM,gBAA0B,EAAC;AAEjC,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,IAAS,EAAA,EAAI,KAAA,EAAA,EAAS;AACxC,IAAA,MAAM,WAAA,GAAc,eAAe,KAAK,CAAA;AACxC,IAAA,IAAI,MAAM,WAAA,EAAa;AACrB,MAAA,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,aAAA;AACT;;;;;;AC5JO,SAAS,4BAAA,CAA6B;AAAA,EAC3C,QAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAsC;AACpC,EAAA,MAAM,eAAA,GAAkB,OAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,OAAsB,IAAI,CAAA;AAEhD,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM;AAC3B,IAAA,OAAO,cAAc,EAAE,MAAA,EAAQ,SAAS,MAAA,EAAQ,OAAA,EAAS,CAAA,CAAE,GAAA;AAAA,MACzD,CAAC,MAAM,KAAA,MAAW;AAAA,QAChB,KAAA,EAAO,IAAA;AAAA,QACP,OAAO,KAAA,GAAQ;AAAA,OACjB;AAAA,KACF;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAM;AACzB,IAAA,OAAO,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,IAAG,EAAG,CAAC,GAAG,CAAA,MAAO;AAAA,MAC3C,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,MACf,OAAO,CAAA,GAAI;AAAA,KACb,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,WAAA,GAAc,eAAe,KAAK,CAAA;AACxC,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,EAAE,MAAA,EAAQ,EAAA,GAAK,WAAA,EAAY;AAAA,MAC3B,CAAC,CAAA,EAAG,CAAA,KAAM,WAAA,GAAc,CAAA,GAAI;AAAA,KAC9B;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAO,uBAAuB,GAAG,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,sBAAA,GAAyB,CAC7B,KAAA,EACA,GAAA,EACA,WAA2B,QAAA,KACxB;AACH,IAAA,IAAI,KAAA,IAAS,IAAI,OAAA,EAAS;AACxB,MAAA,GAAA,CAAI,OAAA,CAAQ,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC3C;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,KAAA,EAAO,iBAAiB,QAAQ,CAAA;AAAA,EACzD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,GAAA,EAAK,eAAe,QAAQ,CAAA;AAAA,EACrD,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,iBAAA,GAAoB,CACxB,QAAA,KACG;AACH,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,aAAA,GAAgB,SAAS,KAAK,CAAA;AAG9B,MAAA,IAAI,GAAA,IAAO,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA,EAAG;AACpC,QAAA,WAAA,GAAc,IAAI,CAAA;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CACtB,QAAA,KACG;AACH,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,WAAA,GAAc,SAAS,KAAK,CAAA;AAG5B,MAAA,IAAI,KAAA,IAAS,aAAA,CAAc,QAAA,CAAS,KAAK,CAAA,EAAG;AAC1C,QAAA,aAAA,GAAgB,IAAI,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,mBACJ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QAC3B,GAAG,IAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,OAC7C,CAAE,CAAA;AAAA,MACF,UAAU,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AAAA,MAC9C,KAAA,EAAO,EAAE,SAAA,EAAW,OAAA,EAAS,UAAU,MAAA,EAAO;AAAA,MAC9C,SAAA,EAAW,wBAAwB,qBAAqB,CAAA;AAAA,MACxD,iBAAA,EAAmB;AAAA;AAAA,GACrB;AAGF,EAAA,MAAM,SAAA,mBACJ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QACzB,GAAG,IAAA;AAAA,QACH,QAAA,EAAU,WAAA,CAAY,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,OAC3C,CAAE,CAAA;AAAA,MACF,UAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,GAAG,CAAA;AAAA,MAC1C,SAAA,EAAW,wBAAwB,qBAAqB,CAAA;AAAA,MACxD,iBAAA,EAAmB;AAAA;AAAA,GACrB;AAGF,EAAA,uBACE,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAU,cAAA;AAAA,MACV,mBAAA,EAAmB,IAAA;AAAA,MACnB,YAAA,EAAY,IAAA;AAAA,MACZ,iBAAA,EAAiB,IAAA;AAAA,MACjB,OAAA;AAAA,MACA,sBAAsB,MAAM;AAC1B,QAAA,sBAAA,CAAuB,KAAA,EAAO,iBAAiB,SAAS,CAAA;AACxD,QAAA,sBAAA,CAAuB,GAAA,EAAK,eAAe,SAAS,CAAA;AAAA,MACtD,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,CAAQ,SAAR,EACE,QAAA,EAAA,CAAC,iCAAiB,GAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAA,QAAA,CAAS,YAAY,CAAA,EAAE,CAAA,EAC/C,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,OAAA,CAAQ,OAAA;AAAA,UAAR;AAAA,YACC,GAAA,EAAK,iBAAA;AAAA,YACL,eAAA,EAAe,IAAA;AAAA,YACf,OAAA;AAAA,YACA,MAAA;AAAA,YAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAE,SAAA,EAAW,OAAA,EAAQ,EACvC,QAAA,EAAA,IAAA,KAAS,OAAA,mBACR,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,SAAA;AAAA,cACA;AAAA,aAAA,EACH,oBAEA,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,WAAA;AAAA,cACA;AAAA,aAAA,EACH,CAAA,EAEJ;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;;AClLA,MAAM,SAAA,GAAY,CAAA;AAClB,MAAM,SAAA,GAAY,EAAA;AAClB,MAAM,OAAA,GAAU,CAAA;AAChB,MAAM,OAAA,GAAU,EAAA;AAChB,MAAM,cAAA,GAAiB,CAAA;AAShB,SAAS,wCAAA,CAAyC;AAAA,EACvD;AACF,CAAA,EAEkB;AAChB,EAAA,MAAM,eAAA,GAAkB,qBAAqB,IAAI,CAAA;AAEjD,EAAA,OAAO,CAAC,OAAA,KAAY;AAClB,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAA+B;AAC/C,MAAA,IAAI,KAAA,CAAM,QAAQ,YAAA,EAAc;AAC9B,QAAA,gBAAA,CAAiB,SAAS,KAAK,CAAA;AAC/B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,SAAA,IAAa,KAAA,CAAM,QAAQ,WAAA,EAAa;AACxD,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,cAAA,EAAe;AAErB,MAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,CAAA;AACjD,MAAA,MAAM,gBAAgB,gBAAA,CAAiB;AAAA,QACrC,eAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,gBAAA,GAAmB,eAAA,CAAgB,GAAA,CAAI,aAAa,CAAA;AAC1D,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,qBAAA;AAAA,QACf,aAAA;AAAA,QACA,OAAA,CAAQ,KAAA;AAAA,QACR;AAAA,OACF;AAEA,MAAA,MAAM,eAAe,kBAAA,CAAmB;AAAA,QACtC,SAAA,EAAW,gBAAA;AAAA,QACX,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,SAAA,EAAW,KAAA,CAAM,GAAA,KAAQ,SAAA,GAAY,EAAA,GAAK,CAAA;AAAA,QAC1C,GAAA,EAAK,OAAA;AAAA,QACL,GAAA,EAAK;AAAA,OACN,CAAA;AAGD,MAAA,MAAM,aACJ,aAAA,KAAkB,OAAA,GACd,oBAAA,CAAqB,YAAA,EAAc,eAAe,CAAA,GAClD,YAAA;AAEN,MAAA,oBAAA,CAAqB,OAAA,EAAS;AAAA,QAC5B,KAAA,EAAO,UAAA;AAAA,QACP,SAAA,EAAW,CAAC,cAAA,EAAgB,cAAc;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAW,QAAQ,CAAA;AAC5C,IAAA,OAAO,MAAM,OAAA,CAAQ,mBAAA,CAAoB,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC9D,CAAA;AACF;AAEA,SAAS,qBACP,IAAA,EAC+C;AAC/C,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA8C;AAE9D,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,GAAA,CAAI,GAAA,CAAI,OAAA,EAAS,CAAC,CAAA,EAAG,cAAc,CAAC,CAAA;AACpC,IAAA,GAAA,CAAI,GAAA,CAAI,OAAO,CAAC,cAAA,GAAiB,GAAG,cAAA,GAAiB,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,EAC7D,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA,EAAG,cAAc,CAAC,CAAA;AAClC,IAAA,GAAA,CAAI,GAAA,CAAI,SAAS,CAAC,cAAA,GAAiB,GAAG,cAAA,GAAiB,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAO,GAAA;AACT;AAKA,SAAS,gBAAA,CAAiB,SAAyB,KAAA,EAA4B;AAC7E,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,CAAA;AACjD,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AAGtB,EAAA,IAAI,cAAA,KAAmB,cAAA,IAAkB,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AAE7D,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,oBAAA,CAAqB,OAAA,EAAS;AAAA,MAC5B,OAAO,KAAA,GAAQ,GAAA;AAAA,MACf,SAAA,EAAW,CAAC,cAAA,GAAiB,CAAA,EAAG,iBAAiB,CAAC;AAAA,KACnD,CAAA;AAAA,EACH;AACF;AAKA,SAAS,oBAAA,CACP,OACA,eAAA,EACQ;AACR,EAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AAClD,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAE9C,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,YAAA,EAAc;AACpC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,cAAc,CAAA;AAC1D,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AAGtD,EAAA,IAAI,UAAA,GAAa,SAAA,IAAa,UAAA,GAAa,SAAA,IAAa,WAAW,OAAA,EAAS;AAC1E,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAe,UAAU,CAAA;AAGhD,EAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,GAAI,YAAA;AACzB,EAAA,MAAM,cAAc,MAAA,CAAO,cAAc,EAAE,QAAA,CAAS,KAAA,GAAQ,SAAS,GAAG,CAAA;AAExE,EAAA,OACE,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,GAAI,cAAc,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,MAAM,CAAA;AAE3E;AAKA,SAAS,iBAAA,CAAkB,OAAe,SAAA,EAAiC;AACzE,EAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,SAAA;AACnB,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,EAAE,CAAA;AACxC,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,CAAA;AACtC,EAAA,OAAO,OAAO,WAAA,CAAY,MAAA,CAAO,EAAA,GAAK,IAAA,EAAM,GAAG,CAAC,CAAA;AAClD;AAEA,SAAS,qBAAA,CACP,OAAA,EACA,KAAA,EACA,eAAA,EACQ;AACR,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,OAAO,SAAA;AAAA,EACT;AAGA,EAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AAClD,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,cAAc,CAAA;AAG1D,EAAA,IAAI,UAAA,GAAa,SAAA,IAAa,UAAA,GAAa,SAAA,EAAW;AACpD,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,eAAe,UAAU,CAAA;AAClC;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,eAAA;AAAA,EACA;AACF,CAAA,EAGsC;AACpC,EAAA,KAAA,MAAW,CAAC,WAAA,EAAa,YAAY,CAAA,IAAK,eAAA,CAAgB,SAAQ,EAAG;AACnE,IAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,YAAA;AACnB,IAAA,IAAI,IAAA,IAAQ,cAAA,IAAkB,cAAA,IAAkB,EAAA,EAAI;AAClD,MAAA,OAAO,WAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA,EAMW;AACT,EAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,SAAA;AACnB,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,KAAA,EAAO,SAAS,CAAA;AAEvD,EAAA,IAAI,YAAA,KAAiB,CAAA,IAAK,SAAA,GAAY,CAAA,EAAG,OAAO,KAAA;AAChD,EAAA,MAAM,kBAAkB,IAAA,CAAK,GAAA;AAAA,IAC3B,GAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,YAAA,GAAe,SAAS;AAAA,GACxC;AAEA,EAAA,OACE,MAAM,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,GACnB,OAAO,eAAe,CAAA,CAAE,QAAA,CAAS,EAAA,GAAK,MAAM,GAAG,CAAA,GAC/C,MAAM,KAAA,CAAM,EAAA,EAAI,MAAM,MAAM,CAAA;AAEhC;;ACzOA,MAAM,8BAA8B,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,SAAA,GAAY,GAAA;AAAA,EACZ,WAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,KAKM;AACJ,EAAA,MAAM,cAAc,2BAAA,CAA4B;AAAA,IAC9C,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,iBAAA,EAAmB,GAAG,kBAAA,EAAmB,GACxD,uBAAuB,WAAW,CAAA;AAEpC,EAAA,MAAM,mBAAA,GAAsB;AAAA,IAC1B,GAAG,WAAA;AAAA,IACH,OAAA,EAAS,QAAQ,MAAA,CAAO;AAAA,MACtB,GAAI,WAAA,CAAY,OAAA,IAAW,EAAC;AAAA,MAC5B,GAAI,iBACA,CAAC,wCAAA,CAAyC,EAAE,IAAA,EAAM,CAAC,CAAA,GACnD;AAAC,KACN,CAAA;AAAA,IACD,aAAA,EAAe;AAAA,MACb,GAAG,kBAAA,CAAmB,aAAA;AAAA,MACtB,GAAG,WAAA,CAAY,aAAA;AAAA,MACf,4BAAA,CAA6B,MAAM,SAAS;AAAA,KAC9C;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,GAAG,WAAA,CAAY,cAAA;AAAA,MACf,GAAG,kBAAA,CAAmB;AAAA;AACxB,GACF;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB;AACnC,IAAA,OAAO,gBAAA,CAAiB,OAAO,mBAAmB,CAAA;AAAA,EACpD,CAAA;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,mBAAA,EAAqB,iBAAA,EAAmB,SAAA,EAAU;AACtE,CAAA;;ACeO,MAAM,iBAAA,GAAoB,UAAA;AAAA,EAI/B,CACE;AAAA,IACE,QAAA;AAAA,IACA,IAAA,GAAO,OAAA;AAAA,IACP,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA,GAAU,KAAA;AAAA,IACV,cAAA,GAAiB,KAAA;AAAA,IACjB,SAAA,EAAW,aAAA;AAAA,IACX,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAc,OAAA;AACpB,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,WAAW,CAAA;AACxD,IAAA,MAAM,EAAE,OAAA,EAAS,iBAAA,EAAmB,SAAA,KAClC,2BAAA,CAA4B;AAAA,MAC1B,IAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AACH,IAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,EAAE,OAAA,EAAS,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,OAAyB,IAAI,CAAA;AAC9C,IAAA,MAAM,cAAc,YAAA,CAAa,CAAC,cAAA,EAAgB,QAAA,EAAU,GAAG,CAAC,CAAA;AAChE,IAAA,MAAM,aAAA,GAAgB,YAAY,KAAK,CAAA;AACvC,IAAA,MAAM,YAAA,GAAe,YAAY,IAAI,CAAA;AAGrC,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,SAAS,YAAA,EAAc;AACzB,QAAA,aAAA;AAAA,UAAc,CAAC,aAAA,KACb,QAAA,CAAS,aAAA,EAAe,YAAA,IAAgB,MAAM,IAAI;AAAA,SACpD;AAAA,MACF;AAAA,IACF,CAAA,EAAG,CAAC,IAAA,EAAM,YAAY,CAAC,CAAA;AAEvB,IAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,MACxB,CAAC,WAAA,KAAwB;AACvB,QAAA,MAAM;AAAA,UACJ,KAAA,EAAO,CAAA;AAAA,UACP,YAAA;AAAA,UACA;AAAA,SACF,GAAI,eAAA,CAAgB,WAAA,EAAa,IAAA,EAAM,iBAAiB,CAAA;AACxD,QAAA,QAAA,GAAW;AAAA,UACT,KAAA,EAAO,IAAA;AAAA,UACP,KAAA,EAAO,CAAA;AAAA,UACP,YAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH,CAAA;AAAA,MACA,CAAC,IAAA,EAAM,iBAAA,EAAmB,QAAQ;AAAA,KACpC;AAGA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IACE,eAAe,GAAA,KAAQ,KAAA,EAAO,OAC9B,aAAA,EAAe,KAAA,KAAU,OAAO,KAAA,EAChC;AACA,QAAA,IAAI,KAAA,EAAO,GAAA,IAAO,KAAA,EAAO,KAAA,EAAO;AAC9B,UAAA,MAAM,WAAA,GAAc,qBAAA;AAAA,YAClB,KAAA,CAAM,GAAA;AAAA,YACN,KAAA,CAAM,KAAA;AAAA,YACN;AAAA,WACF;AACA,UAAA,MAAM,gBAAA,GAAmB,UAAU,WAAW,CAAA;AAC9C,UAAA,aAAA,CAAc,gBAAgB,CAAA;AAC9B,UAAA,IAAI,qBAAqB,WAAA,EAAa;AACpC,YAAA,iBAAA,CAAkB,gBAAgB,CAAA;AAAA,UACpC;AAAA,QACF,CAAA,MAAA,IACE,aAAA,KAAkB,IAAA,IAClB,aAAA,KAAkB,MAAA,KACjB,KAAA,KAAU,IAAA,IAAS,KAAA,EAAO,GAAA,KAAQ,IAAA,IAAQ,KAAA,EAAO,KAAA,KAAU,IAAA,CAAA,EAC5D;AACA,UAAA,aAAA,CAAc,WAAW,CAAA;AAAA,QAC3B,CAAA,MAAO;AACL,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG,CAAC,KAAA,EAAO,MAAM,aAAA,EAAe,SAAA,EAAW,iBAAiB,CAAC,CAAA;AAE7D,IAAA,MAAM,iBAAA,GAAoB,QAAQ,MAAM;AACtC,MAAA,OAAO,eAAA,CAAgB,UAAA,EAAY,IAAA,EAAM,iBAAiB,CAAA;AAAA,IAC5D,CAAA,EAAG,CAAC,UAAA,EAAY,IAAA,EAAM,iBAAiB,CAAC,CAAA;AAExC,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAA+C;AACnE,MAAA,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAChC,MAAA,MAAM;AAAA,QACJ,KAAA,EAAO,CAAA;AAAA,QACP,YAAA;AAAA,QACA;AAAA,UACE,eAAA,CAAgB,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,MAAM,iBAAiB,CAAA;AAE/D,MAAA,MAAM,eAAA,GACH,CAAA,KAAM,IAAA,MAAW,iBAAA,CAAkB,UAAU,IAAA,CAAA,IAC9C,CAAA,EAAG,GAAA,KAAQ,iBAAA,CAAkB,KAAA,EAAO,GAAA,IACpC,CAAA,EAAG,KAAA,KAAU,kBAAkB,KAAA,EAAO,KAAA;AACxC,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA;AAAA,MACF;AAEA,MAAA,QAAA,GAAW;AAAA,QACT,KAAA;AAAA,QACA,KAAA,EAAO,CAAA,IAAK,iBAAA,CAAkB,KAAA,IAAS,IAAA;AAAA,QACvC,YAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAIA,IAAA,mBAAA,CAAoB,KAAK,MAAM;AAC7B,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,MAAA,OAAO,MAAA,CAAO,OAAO,KAAA,EAAO;AAAA,QAC1B,QAAA,EAAU,CAACC,MAAAA,KAA+B;AACxC,UAAA,IAAI,CAACA,MAAAA,EAAO;AACV,YAAA,aAAA,CAAc,WAAW,CAAA;AACzB,YAAA,OAAO,eAAA,CAAgB,WAAA,EAAa,IAAA,EAAM,iBAAiB,CAAA;AAAA,UAC7D;AACA,UAAA,MAAM,aAAA,GAAgB,qBAAA;AAAA,YACpBA,OAAM,GAAA,IAAO,IAAA;AAAA,YACbA,OAAM,KAAA,IAAS,IAAA;AAAA,YACf;AAAA,WACF;AACA,UAAA,MAAM,gBAAA,GAAmB,UAAU,aAAa,CAAA;AAChD,UAAA,aAAA,CAAc,gBAAgB,CAAA;AAC9B,UAAA,OAAO,eAAA,CAAgB,gBAAA,EAAkB,IAAA,EAAM,iBAAiB,CAAA;AAAA,QAClE,CAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,GAAG,CAAC,IAAA,EAAM,WAAA,EAAa,iBAAA,EAAmB,SAAS,CAAC,CAAA;AAEpD,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,eAAA,CAAgB,WAAW,CAAC,CAAA;AAAA,QAC1C,UAAA,EAAS,qBAAA;AAAA,QACR,GAAG,SAAA;AAAA,QAEJ,QAAA,kBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACE,GAAG,YAAA;AAAA,YACJ,SAAA,EAAW,EAAA;AAAA,cACT,gBAAgB,eAAe,CAAA;AAAA,cAC/B,YAAA,EAAc,SAAA;AAAA,cACd;AAAA,gBACE,CAAC,eAAA,CAAgB,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,gBACrC,CAAC,eAAA,CAAgB,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,gBACrC,CAAC,uBAAA,CAAwB,OAAO,CAAC,GAAG,IAAA,KAAS,OAAA;AAAA,gBAC7C,CAAC,uBAAA,CAAwB,OAAO,CAAC,GAAG,IAAA,KAAS;AAAA;AAC/C,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACE,GAAG,SAAA;AAAA,kBACJ,GAAA,EAAK,WAAA;AAAA,kBACL,oBAAkB,KAAA,EAAO,KAAA;AAAA,kBACzB,kBAAgB,KAAA,EAAO,GAAA;AAAA,kBACvB,oBAAkB,iBAAA,CAAkB,YAAA;AAAA,kBACpC,oBAAkB,iBAAA,CAAkB,YAAA;AAAA,kBACpC,KAAA,EAAO,UAAA;AAAA,kBACP,QAAA,EAAU,YAAA;AAAA,kBACV,SAAA,EAAW,EAAA;AAAA,oBACT,gBAAgB,OAAO,CAAA;AAAA,oBACvB,wBAAwB,OAAO,CAAA;AAAA,oBAC/B;AAAA,sBACE,CAAC,eAAA,CAAgB,OAAO,CAAC,GAAG,KAAA,IAAS;AAAA,qBACvC;AAAA,oBACA;AAAA;AACF;AAAA,eACF;AAAA,cACC,OAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,CAAgB,yBAAyB,CAAA,EACvD,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA,EACX,CAAA,GACE;AAAA;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;;AC/JzB,MAAM,2BAAA,GAA8B,UAAA,CAGzC,CAAC,KAAA,EAAO,GAAA,KAAQ;AAChB,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,SAAA;AAAA,IACP,YAAA,EAAc,gBAAA;AAAA,IACd,QAAA,EAAU,YAAA;AAAA,IACV,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA,GAAgB,KAAA;AAAA,IAChB,IAAA,GAAO,OAAA;AAAA,IACP,IAAA,GAAO,QAAA;AAAA,IACP,KAAA,GAAQ,KAAA;AAAA,IACR,OAAA,GAAU,KAAA;AAAA,IACV,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,UAAA;AAAA,IACR,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,QAAA,GAAW,OAA6B,IAAI,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,OAGhB,IAAI,CAAA;AACP,EAAA,MAAM,iBAAA,GAAoB,OAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,mBAAmB,iBAAA,EAAkB;AAE3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,4BAAA,CAAkD;AAAA,IAC1E,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc;AAAA,GACf,CAAA;AACD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA;AAAA,IAC5C;AAAA,GACF;AAEA,EAAA,mBAAA;AAAA,IACE,GAAA;AAAA,IACA,OAAuC;AAAA,MACrC,OAAO,MAAM;AACX,QAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,QAAA,OAAO,QAAA,CAAS,QAAQ,KAAA,EAAM;AAAA,MAChC,CAAA;AAAA,MACA,QAAA,EAAU,CAACA,MAAAA,KAA+B;AACxC,QAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,QAAA,QAAA,CAAS,OAAA,CAAQ,SAASA,MAAK,CAAA;AAAA,MACjC;AAAA,KACF,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAA;AAAA,IACtB,MACE,oBAAA,CAAqB;AAAA,MACnB,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,WAAA,EAAa;AAAA,QACX,QAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAAA,IACH,CAAC,KAAA,EAAO,QAAA,EAAU,WAAA,EAAa,SAAS,OAAO;AAAA,GACjD;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,MAAA,KAAoC;AAC7D,IAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAAA,MAAAA,EAAO,GAAG,YAAW,GAAI,MAAA;AACxC,IAAA,QAAA,CAASA,MAAK,CAAA;AACd,IAAA,kBAAA,CAAmBA,MAAK,CAAA;AACxB,IAAA,YAAA,GAAe;AAAA,MACb,GAAG,UAAA;AAAA,MACH,KAAA,EAAAA,MAAAA;AAAA,MACA,SAAS,oBAAA,CAAqB;AAAA,QAC5B,KAAA,EAAAA,MAAAA;AAAA,QACA,WAAA,EAAa;AAAA,UACX,QAAA;AAAA,UACA,WAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA;AACF,OACD;AAAA,KACF,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,QAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA,EAAc,KAAA;AAAA,IACd,GAAG,SAAA;AAAA,IACH,KAAA;AAAA,IACA,QAAA,EAAU,iBAAA;AAAA,IACV,YAAA,EAAc,eAAA;AAAA,IACd,IAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,gBAAA,EAAiB,GAAI,cAAA,CAAe;AAAA,IACjD,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,WAAA,GAAc,CAAC,CAAA;AAAA,MACjB,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,UAAA,GAAa,CAAC,CAAA;AAAA,MAChB,CAAC,CAAA;AACD,MAAA,UAAA,CAAW,SAAS,YAAA,EAAa;AAAA,IACnC,CAAA;AAAA,IACA,sBAAsB,iBAAA,EAAmB,OAAA,GACrC,CAAC,iBAAA,CAAkB,OAAO,IAC1B;AAAC,GACN,CAAA;AAED,EAAA,IAAI,aAAA,IAAiB,CAAC,gBAAA,EAAkB;AACtC,IAAA,uBAAO,GAAA,CAAC,iBAAA,EAAA,EAAkB,GAAA,EAAK,QAAA,EAAW,GAAG,UAAA,EAAY,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,QAAA,KAA2B;AACrD,IAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,IAAA,IACG,SAAS,OAAA,IAAW,QAAA,CAAS,SAC7B,IAAA,KAAS,OAAA,IAAW,SAAS,GAAA,EAC9B;AACA,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,QAAA,CAAS,SAAS,KAAK,CAAA;AACvB,MAAA,YAAA,GAAe;AAAA,QACb,GAAG,QAAA;AAAA,QACH,SAAS,oBAAA,CAAqB;AAAA,UAC5B,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,WAAA,EAAa;AAAA,YACX,QAAA;AAAA,YACA,WAAA;AAAA,YACA,OAAA;AAAA,YACA;AAAA;AACF,SACD;AAAA,OACF,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,uBAAA,GAA0B,CAAC,KAAA,KAAyB;AACxD,IAAA,kBAAA,CAAmB;AAAA,MACjB,GAAA,EAAK,KAAA,EAAO,GAAA,IAAO,eAAA,EAAiB,GAAA,IAAO,IAAA;AAAA,MAC3C;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,GAAA,KAAuB;AACpD,IAAA,kBAAA,CAAmB;AAAA,MACjB,GAAA;AAAA,MACA,KAAA,EAAO,KAAA,EAAO,KAAA,IAAS,eAAA,EAAiB,KAAA,IAAS;AAAA,KAClD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAA4B;AACpD,IAAA,gBAAA,CAAiB,UAAU,KAAsC,CAAA;AAAA,EACnE,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAA4B;AACnD,IAAA,gBAAA,CAAiB,SAAS,KAAsC,CAAA;AAAA,EAClE,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAA4B;AACrD,IAAA,gBAAA,CAAiB,SAAS,KAAsC,CAAA;AAAA,EAClE,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,4BAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,iBAAA;AAAA,MACA,KAAA,EAAO,KAAA,EAAO,KAAA,IAAS,eAAA,EAAiB,KAAA,IAAS,IAAA;AAAA,MACjD,GAAA,EAAK,KAAA,EAAO,GAAA,IAAO,eAAA,EAAiB,GAAA,IAAO,IAAA;AAAA,MAC3C,aAAA,EAAe,uBAAA;AAAA,MACf,WAAA,EAAa,qBAAA;AAAA,MACb,OAAA,EAAS,iBAAA;AAAA,MACT,IAAA;AAAA,MACA,MAAA,EAAQ,iBAAA;AAAA,MAEP,QAAA,EAAA,CAAC,EAAE,GAAA,EAAAC,IAAAA,EAAK,WAAU,qBACjB,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACE,GAAG,UAAA;AAAA,UACJ,KAAK,SAAA,CAAU;AAAA,YACb,QAAA;AAAA,YACAA;AAAA,WACD,CAAA;AAAA,UACD,SAAA,EAAW,CAAC,EAAA,KAAO;AACjB,YAAA,SAAA,GAAY,EAAE,CAAA;AACd,YAAA,UAAA,CAAW,YAAY,EAAE,CAAA;AAAA,UAC3B,CAAA;AAAA,UACA,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,YAAA,UAAA,CAAW,UAAU,EAAE,CAAA;AACvB,YAAA,UAAA,CAAW,SAAS,WAAA,EAAY;AAAA,UAClC,CAAA;AAAA,UACA,OAAA,EAAS,gBAAA;AAAA,UACT,MAAA,EAAQ,eAAA;AAAA,UACR,cAAA,EAAc;AAAA;AAAA;AAChB;AAAA,GAEJ;AAEJ,CAAC;AAED,2BAAA,CAA4B,WAAA,GAAc,6BAAA;;;;"}
@@ -0,0 +1,27 @@
1
+ import { MultiSelectFieldHandle, MultiSelectFieldProps } from './types';
2
+ /**
3
+ * MultiSelectField component for selecting multiple options from a searchable dropdown.
4
+ *
5
+ * Features:
6
+ * - Multiple selection with chip display
7
+ * - Search and filtering capabilities
8
+ * - Lazy loading with pagination (page, offset, or group modes)
9
+ * - Optional "Select All" functionality
10
+ * - Supports both popover and dialog display modes
11
+ * - Adaptive display based on device (mobile uses dialog)
12
+ * - Cache support for loadOptions results
13
+ * - Single row mode to restrict height (singleRow prop)
14
+ * - Chip count limiting (maxChips prop)
15
+ * - Full accessibility support with ARIA attributes
16
+ * - Controlled selection state
17
+ *
18
+ * @example
19
+ * <MultiSelectField
20
+ * label="Select Tags"
21
+ * value={selectedTags}
22
+ * onSelectedOptionsChange={setSelectedTags}
23
+ * loadOptions={(search) => fetchTags(search)}
24
+ * selectAll={{ onClick: handleSelectAll }}
25
+ * />
26
+ */
27
+ export declare const MultiSelectField: import('react').ForwardRefExoticComponent<MultiSelectFieldProps & import('react').RefAttributes<MultiSelectFieldHandle>>;
@@ -0,0 +1,63 @@
1
+ import { MatchSorterOptions } from 'match-sorter';
2
+ import { MultiSelectFieldProps, MultiSelectFieldOption } from './types';
3
+ export type MultiSelectFieldSyncProps = Omit<MultiSelectFieldProps, "loadOptions" | "lazy" | "debounceMs" | "cache" | "initialLoad" | "selectAll"> & {
4
+ /**
5
+ * The options to display in the multi-select field.
6
+ */
7
+ options: MultiSelectFieldOption[];
8
+ /**
9
+ * The filter to use to filter the options.
10
+ * Can be a function to filter the options, or a MatchSorterOptions object to customize the default filtering.
11
+ *
12
+ * @example
13
+ * <MultiSelectFieldSync
14
+ * options={options}
15
+ * filter={(options, searchValue) => {
16
+ * return options.filter((option) => {
17
+ * return option.label?.toLowerCase().includes(searchValue.toLowerCase());
18
+ * });
19
+ * }}
20
+ * />
21
+ *
22
+ * @example
23
+ * <MultiSelectFieldSync
24
+ * options={options}
25
+ * filter={{ keys: ["label"] }}
26
+ * />
27
+ */
28
+ filter?: ((options: MultiSelectFieldOption[], searchValue: string) => MultiSelectFieldOption[]) | MatchSorterOptions;
29
+ /**
30
+ * Enables the "Select All" option at the top of the list.
31
+ * Can be a boolean to enable with default label, or an object to customize the label.
32
+ * Click handling and check state are managed automatically based on the options and value.
33
+ *
34
+ * The label can be a string or a function that receives a boolean indicating whether all options are selected.
35
+ *
36
+ * @example
37
+ * <MultiSelectFieldSync selectAll options={options} {...props} />
38
+ *
39
+ * @example
40
+ * <MultiSelectFieldSync selectAll={{ label: "Select All Items" }} options={options} {...props} />
41
+ *
42
+ * @example
43
+ * <MultiSelectFieldSync
44
+ * selectAll={{ label: (checked) => checked ? "Deselect All" : "Select All" }}
45
+ * options={options}
46
+ * {...props}
47
+ * />
48
+ */
49
+ selectAll?: boolean | {
50
+ label?: string | ((checked: boolean) => string);
51
+ };
52
+ };
53
+ /**
54
+ * MultiSelectFieldSync is a simplified version of MultiSelectField that is used to display a list of options in a multi-select field.
55
+ *
56
+ * Features:
57
+ * - Accepts `options` instead of `loadOptions` and `lazy`.
58
+ * - Performs client-side filtering of the options.
59
+ * - Optionally accepts a function to filter the options, or a MatchSorterOptions object to customize the default filtering.
60
+ * - Simplified `selectAll` prop that automatically handles click and check state.
61
+ * - Supports all the other props of MultiSelectField.
62
+ */
63
+ export declare const MultiSelectFieldSync: (props: MultiSelectFieldSyncProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export * from './MultiSelectField';
2
+ export * from './MultiSelectFieldSync';
3
+ export * from './types';
@@ -0,0 +1,79 @@
1
+ import { PassThroughProps, Size } from '../../../../types';
2
+ import { ReactElement, RefObject, MouseEvent } from 'react';
3
+ import { MultiSelectFieldOption } from '../types';
4
+ /**
5
+ * Props for the MultiSelectFieldInput component
6
+ * @property {string} [placeholder] - Placeholder text displayed when input is empty
7
+ * @property {Extract<Size, "small" | "medium" | "large">} [size] - Size variant of the input
8
+ * @property {boolean} [disableClearButton] - Hides the clear button when true
9
+ * @property {boolean} [disableToggleButton] - Hides the toggle button when true
10
+ * @property {boolean} [disabled] - Disables the input entirely
11
+ * @property {boolean} [readOnly] - Cannot be modified but remains interactive
12
+ * @property {boolean} [error] - Shows error styling on the input when true
13
+ * @property {() => void} [onClear] - Callback fired when the clear button is clicked
14
+ * @property {string} [id] - HTML id attribute for the input element
15
+ * @property {string} [popoverTarget] - Target identifier for popover association
16
+ * @property {RefObject<HTMLDivElement>} [inputWrapperRef] - Ref for the input wrapper div element
17
+ * @property {PassThroughProps<"div">} [htmlInputWrapperProps] - Additional props passed to the wrapper div
18
+ * @property {PassThroughProps<"input">} [inputProps] - Additional props passed to the input element
19
+ * @property {PassThroughProps<"button">} [toggleButtonProps] - Additional props passed to the toggle button
20
+ * @property {string | ReactElement} [prefix] - Content to display before the input
21
+ * @property {string | ReactElement} [suffix] - Content to display after the input
22
+ * @property {MultiSelectFieldOption[]} [selectedOptions] - Array of selected options to display as chips
23
+ * @property {(option: MultiSelectFieldOption) => void} [onRemoveOption] - Callback when a chip is removed
24
+ * @property {boolean} [singleRow] - When true, restricts the field to a single row height
25
+ * @property {number} [maxChips] - Maximum number of chips to display before showing +N indicator (default: 10)
26
+ */
27
+ export type MultiSelectFieldInputProps = {
28
+ placeholder?: string;
29
+ size?: Extract<Size, "small" | "medium" | "large">;
30
+ disableClearButton?: boolean;
31
+ disableToggleButton?: boolean;
32
+ disabled?: boolean;
33
+ readOnly?: boolean;
34
+ error?: boolean;
35
+ onClear?: () => void;
36
+ id?: string;
37
+ popoverTarget?: string;
38
+ inputWrapperRef?: RefObject<HTMLDivElement>;
39
+ htmlInputWrapperProps?: PassThroughProps<"div">;
40
+ inputProps?: PassThroughProps<"input">;
41
+ toggleButtonProps?: PassThroughProps<"button">;
42
+ prefix?: string | ReactElement;
43
+ suffix?: string | ReactElement;
44
+ selectedOptions?: MultiSelectFieldOption[];
45
+ onRemoveOption?: (option: MultiSelectFieldOption) => void;
46
+ singleRow?: boolean;
47
+ maxChips?: number;
48
+ onWrapperClick?: (e: MouseEvent<HTMLDivElement>) => void;
49
+ };
50
+ /**
51
+ * Internal input component for the MultiSelectField that provides the text input,
52
+ * chip display for selected options, and action buttons.
53
+ *
54
+ * Features:
55
+ * - Text input for filtering options
56
+ * - Chip display for selected options with remove functionality
57
+ * - Optional clear button for removing all selections
58
+ * - Optional toggle button for opening/closing the dropdown menu
59
+ * - Supports multiple size variants (small, medium, large)
60
+ * - Fully accessible with proper ARIA labels on buttons
61
+ * - Supports pass-through props for customization of internal elements
62
+ * - Optional prefix and suffix content
63
+ * - Error state styling
64
+ * - Single row mode with singleRow prop
65
+ * - Chip count limiting with maxChips prop
66
+ *
67
+ * @example
68
+ * <MultiSelectFieldInput
69
+ * placeholder="Search..."
70
+ * size="medium"
71
+ * selectedOptions={[{ id: 1, label: "Option 1" }]}
72
+ * onRemoveOption={(option) => handleRemove(option)}
73
+ * onClear={() => handleClearAll()}
74
+ * />
75
+ */
76
+ export declare const MultiSelectFieldInput: {
77
+ ({ placeholder, size, disableClearButton, disableToggleButton, disabled, readOnly, error, onClear, id, inputWrapperRef, htmlInputWrapperProps, inputProps, toggleButtonProps, prefix, suffix, selectedOptions, onRemoveOption, singleRow, maxChips, onWrapperClick, }: MultiSelectFieldInputProps): import("react/jsx-runtime").JSX.Element;
78
+ displayName: string;
79
+ };
@@ -0,0 +1,26 @@
1
+ import { MultiSelectFieldDownshiftItem, MultiSelectFieldOption } from '../types';
2
+ import { UseComboboxPropGetters } from 'downshift';
3
+ import { CSSProperties } from 'react';
4
+ type GetMenuProps = UseComboboxPropGetters<MultiSelectFieldDownshiftItem>["getMenuProps"];
5
+ type GetItemProps = UseComboboxPropGetters<MultiSelectFieldDownshiftItem>["getItemProps"];
6
+ export type MultiSelectFieldListProps = {
7
+ isOpen: boolean;
8
+ items: MultiSelectFieldDownshiftItem[];
9
+ getMenuProps: GetMenuProps;
10
+ getItemProps: GetItemProps;
11
+ highlightedIndex: number;
12
+ selectedOptions: MultiSelectFieldOption[];
13
+ hasMore: boolean;
14
+ onLoadMore: () => void;
15
+ loading: boolean;
16
+ loadingMore: boolean;
17
+ disableAutoLoadMore?: boolean;
18
+ disabled?: boolean;
19
+ className?: string;
20
+ style?: CSSProperties;
21
+ };
22
+ export declare const MultiSelectFieldList: {
23
+ ({ isOpen, items, getMenuProps, getItemProps, highlightedIndex, selectedOptions, hasMore, onLoadMore, loading, loadingMore, disableAutoLoadMore, disabled, className, style, }: MultiSelectFieldListProps): import("react/jsx-runtime").JSX.Element;
24
+ displayName: string;
25
+ };
26
+ export {};
@@ -0,0 +1,44 @@
1
+ import { UseComboboxProps } from 'downshift';
2
+ import { MultiSelectFieldDownshiftItem, MultiSelectFieldOption } from '../types';
3
+ import { CheckState } from '../../../../types';
4
+ export type UseComboMultipleOptions = {
5
+ /** An array of currently loaded options */
6
+ options: MultiSelectFieldOption[];
7
+ pinnedOptions?: unknown;
8
+ /** Configuration for the "Select All" option */
9
+ selectAll?: {
10
+ label: string;
11
+ onClick: () => void;
12
+ checkState: CheckState;
13
+ };
14
+ /** The currently selected options (controlled from outside) */
15
+ selectedOptions: MultiSelectFieldOption[];
16
+ onSelectedOptionsChange: (options: MultiSelectFieldOption[]) => void;
17
+ displayAs: "popover" | "dialog";
18
+ disabled: boolean;
19
+ } & Pick<UseComboboxProps<MultiSelectFieldDownshiftItem>, "onInputValueChange" | "onIsOpenChange">;
20
+ /**
21
+ * Hook that wraps downshift's useCombobox for multi-select behavior.
22
+ * Unlike useCombo, this hook:
23
+ * - Keeps the menu open after item selection
24
+ * - Does not track internal selection state (controlled externally)
25
+ * - Preserves input value on item selection for continued filtering
26
+ * @param options - Configuration options for the hook
27
+ * @returns Downshift combobox props and state
28
+ */
29
+ export declare const useComboMultiple: ({ options, pinnedOptions, selectAll, selectedOptions, onSelectedOptionsChange, onInputValueChange, onIsOpenChange, displayAs, disabled, }: UseComboMultipleOptions) => {
30
+ inputValue: string;
31
+ wrapperDivRef: import('react').RefObject<HTMLDivElement>;
32
+ getToggleButtonProps: <Options>(options?: import('downshift').UseComboboxGetToggleButtonPropsOptions & Options) => import('downshift').Overwrite<import('downshift').UseComboboxGetToggleButtonPropsReturnValue, Options>;
33
+ getLabelProps: <Options>(options?: import('downshift').UseComboboxGetLabelPropsOptions & Options) => import('downshift').Overwrite<import('downshift').UseComboboxGetLabelPropsReturnValue, Options>;
34
+ getMenuProps: <Options>(options?: import('downshift').UseComboboxGetMenuPropsOptions & Options, otherOptions?: import('downshift').GetPropsCommonOptions) => import('downshift').Overwrite<import('downshift').UseComboboxGetMenuPropsReturnValue, Options>;
35
+ getInputProps: <Options>(options?: import('downshift').UseComboboxGetInputPropsOptions & Options, otherOptions?: import('downshift').GetPropsCommonOptions) => import('downshift').Overwrite<import('downshift').UseComboboxGetInputPropsReturnValue, Options>;
36
+ getItemProps: <Options>(options: import('downshift').UseComboboxGetItemPropsOptions<MultiSelectFieldDownshiftItem> & Options) => Omit<import('downshift').Overwrite<import('downshift').UseComboboxGetItemPropsReturnValue, Options>, "item" | "index">;
37
+ highlightedIndex: number;
38
+ isOpen: boolean;
39
+ downshiftItems: MultiSelectFieldDownshiftItem[];
40
+ closeMenu: () => void;
41
+ openMenu: () => void;
42
+ toggleMenu: () => void;
43
+ selectedOptions: MultiSelectFieldOption[];
44
+ };
@@ -0,0 +1,19 @@
1
+ import { MultiSelectFieldOption, MultiSelectFieldUngroupedOption } from '../types';
2
+ export type Book = {
3
+ id: string;
4
+ author: string;
5
+ title: string;
6
+ genre: string;
7
+ };
8
+ /**
9
+ * Small curated list of diverse books for simple examples
10
+ */
11
+ export declare const books: Book[];
12
+ export declare const sourceOptions: MultiSelectFieldOption[];
13
+ export declare function filterBooks(bookList: Book[], searchValue: string): Book[];
14
+ export declare function mapBookToOption(book: Book): MultiSelectFieldUngroupedOption;
15
+ export declare const simulateFetchingBooks: (searchValue: string) => Promise<MultiSelectFieldOption[]>;
16
+ export declare const simulateFetchingPagedBooks: (searchValue: string, pageNumber: number, pageSize: number) => Promise<{
17
+ data: Book[];
18
+ count: number;
19
+ }>;